'Firebase Dynamic Links with Vue.js and Apollo client bad request 400

I have a vue app and I am trying to do a POST request to firebase dynamic links API with apollo client mutation method but I'm getting a 400 bad request error. I wraopped all the fields with dynamicLinkInfo but have no success and can't get a response.

here is my code

shortlink() {
  this.$apollo.mutate({
    mutation: gql'
      mutation getShortLinks(
      $domainUriPrefix: String!, 
      $link: String!, 
      $androidPackageName: String!, 
      $iosBundleId: String!, 
      $option: String!
      ) {
        shortLinks(input:{
        domainUriPrefix: $domainUriPrefix, 
        link: $link, 
        androidPackageName: $androidPackageName, 
        iosBundleId: $iosBundleId, 
        option: $option
        }) 
        @rest(
        type: "ShortLinks", 
        path: "/v1/shortLinks?key=API_KEY", 
        method: "POST", 
        endpoint: "firebase"
        ) 
        {
          dynamicLinkInfo {
            domainUriPrefix
            link
            androidInfo {
              androidPackageName
            }
            iosInfo {
              iosIpadBundleId
            }
          }
          suffix {
            option
          }
        }
      }
    '
    ,
    variables: {
      domainUriPrefix: 'https://website.page.link',
      link: 'https://website.com?someid=1',
      androidPackageName: 'package_name',
      iosBundleId: 'bundle_name',
      option: 'UNGUESSABLE'
    },
  }).then(data => {
    console.log(data) 
  })
  .catch(error => {
    console.error(error)
  });
},

This returns a 400 bad request error.

"code": 400,
"message": "Invalid JSON payload received. Unknown name \"domainUriPrefix\": Cannot find field.\nInvalid JSON payload received. Unknown name \"link\": Cannot find field.\nInvalid JSON payload received. Unknown name \"androidPackageName\": Cannot find field.\nInvalid JSON payload received. Unknown name \"iosBundleId\": Cannot find field.\nInvalid JSON payload received. Unknown name \"option\": Cannot find field.",


Solution 1:[1]

I end up using fetch to do a post request

working code here

shortlink() {
  const requestOptions = {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({ 
      dynamicLinkInfo: {
        domainUriPrefix: "https://website.page.link",
        link: "https://website.com?someid=1,
        androidInfo: {
          androidPackageName: "package_name"
        },
        iosInfo: {
          iosBundleId: "bundle_name"
        }
      }
    })
  };
  fetch(import.meta.env.VITE_FIREBASE_BASE_URL, requestOptions)
    .then(async response => {
      const data = await response.json();

      if (!response.ok) {
        const error = (data && data.message) || response.status;
        return Promise.reject(error);
      }

      this.shortLink = data.shortLink;
    })
    .catch(error => {
      this.errorMessage = error;
      console.error('There was an error!', error);
    });
}

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Ali Seivani