Skip to content

Instantly share code, notes, and snippets.

@ganobrega
Last active May 30, 2025 15:56
Show Gist options
  • Save ganobrega/70f5d63f09d674241c2905b86a158179 to your computer and use it in GitHub Desktop.
Save ganobrega/70f5d63f09d674241c2905b86a158179 to your computer and use it in GitHub Desktop.
Modificador de chamadas para VTEX IO Graphql

🇧🇷 Modificador de chamadas para VTEX IO Graphql

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.

Como utilizar?

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);
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);
// Aplica as modificações no objeto variables
Object.assign(variables, modifications);
// Codifica o variables modificado de volta para base64
extensions.variables = Buffer.from(JSON.stringify(variables)).toString('base64');
// Atualiza o parâmetro extensions na URL
url.searchParams.set("extensions", JSON.stringify(extensions));
return fetch(url, init);
} catch (error) {
console.error('\nERRO:', error);
throw error;
}
}
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment