O defetch é um modificador de requisições para endpoints VTEX que utilizam a tecnologia Graphql. O objetivo dele é fazer o encode do variables em json
-> string
-> base64
inserindo no extensions
em seguida json
-> string
.
const defetch = (input, init) => {
return (modifications) => {
const url = new URL(input);
try {
const extensionsParam = url.searchParams.get("extensions");
const decodedExtensions = decodeURIComponent(extensionsParam);
const extensions = JSON.parse(decodedExtensions);
const decodedVariables = Buffer.from(extensions.variables, 'base64').toString();
const variables = JSON.parse(decodedVariables);
Object.assign(variables, modifications);
extensions.variables = Buffer.from(JSON.stringify(variables)).toString('base64');
url.searchParams.set("extensions", JSON.stringify(extensions));
return fetch(url, init);
} catch (error) {
console.error('\nERRO:', error);
throw error;
}
}
};
// Cole aqui o fetch do Graphql e troque o uso direto do fetch pelo defetch
const modifyRequestVariables = defetch("https://*********.myvtex.com/_v/private/graphql/v1?workspace=master&maxAge=long&appsEtag=remove&domain=admin&locale=pt-BR&__bindingId=***************", {
// ... headers e body ...
});
// É só montar o seu variables aqui que o defetch irá fazer o encode em base64
const request = modifyRequestVariables({
email: "[email protected]"
});
request.then(res => res.json()).then(console.log);