Ir para o conteúdo
CatSuite

Idioma

Escolha se o site segue o navegador ou se deve forçar português do Brasil ou inglês.

Baixar grátis

Extensões

Referência da API JavaScript

O objeto global cat do SDK 1.4: mensagens HTTP, eventos, hooks de alteração, envios, APIs externas, laboratório, recursos e utilidades.

4 min de leitura

Toda extensão recebe o objeto global e congelado cat. cat.apiVersion vale 1 e cat.sdkVersion vale "1.4.0". A API v1 permanece compatível em todas as versões do SDK.

Mensagens HTTP #

Requests e responses chegam como CatMessage:

CampoDescrição
ididentificador da mensagem
sourceorigem: proxy, network_proxy, repetir, intruso, descobridor, extension ou laboratory
sessionsessão do Proxy de Rede, ou null
stagerequest ou response
url, methoddestino e método
headerslista ordenada de {name, value}
bodybytes, size, complete, truncated, available, mutable, representation e sha256
status, reasonsomente em responses
timecarimbo de tempo
requestrequest original, presente em responses

body.representation indica bytes de transporte (wire) ou descomprimidos pelo cliente (decoded). O preview editável tem até 32 KiB.

Eventos #

Observadores podem ser assíncronos e exigem traffic.read.

JavaScript
cat.events.on('http.request', async message => {
  await cat.storage.set('ultimaUrl', message.url);
});

cat.events.on('http.response', async message => {
  if (message.status >= 500) {
    cat.log({'pt-BR': 'Falha no servidor observada.', en: 'Server failure observed.'}, 'warning');
  }
});

Eventos disponíveis: http.request, http.response e http.complete.

Hooks de alteração #

JavaScript
cat.proxy.onRequest(message => {
  if (cat.http.parseUrl(message.url).hostname !== 'api.aurora.test') return;
  message.headers = message.headers.filter(h => h.name.toLowerCase() !== 'x-cat-lab');
  message.headers.push({name: 'X-Cat-Lab', value: 'auditor'});
  return message;
});

cat.proxy.onResponse(message => {
  message.headers.push({name: 'X-Cat-Auditor', value: '1'});
  return message;
});

Regras dos hooks, que exigem traffic.modify:

  • São síncronos e têm até 100 ms por execução. Retornar uma Promise gera E_HOOK_ASYNC.
  • Não enviam requests, não persistem dados e não atualizam a interface.
  • Retornar undefined mantém a mensagem; retornar a mensagem aplica a alteração.
  • Não altere identidade, origem ou flags de integridade. Headers não aceitam quebra de linha.
  • Headers de compressão não podem ser alterados, e só corpos com mutable: true aceitam edição.
  • A mensagem efetiva é validada antes do envio. Escopos e bloqueios do aplicativo continuam valendo.

Envios HTTP #

JavaScript
const resposta = await cat.http.send({
  id: 'consulta-1',
  url: 'https://api.aurora.test/api/pedidos',
  method: 'GET',
  headers: [{name: 'Accept', value: 'application/json'}]
});
cat.http.cancel('consulta-1');

cat.http.send exige http.send e usa os targets do manifesto. Os destinos são verificados antes do envio e depois das alterações, redirects automáticos ficam desativados e o TLS é validado. Há duas chamadas simultâneas por extensão, prazo total de 120 segundos e respostas de até 8 MiB. Envios ao próprio proxy do CatSuite são recusados com E_PROXY_LOOP.

APIs externas #

JavaScript
const resposta = await cat.external.call({
  url: 'https://advisories.aurora.test/advisories?code=CACHE-001',
  method: 'GET',
  credentialId: 'minha-chave'
});

cat.external.call exige external.call e usa externalHosts. A credencial é configurada na tela da extensão, protegida pelo Android Keystore e adicionada pelo host como Bearer. O código nunca recebe o valor secreto.

Laboratório #

JavaScript
const capturada = await cat.laboratory.capture({
  url: 'https://api.aurora.test/api/perfil',
  method: 'GET',
  headers: [{name: 'Accept', value: 'application/json'}]
});

Com settings.laboratory igual a true, o host simula tráfego capturado de api.aurora.test, executa os hooks de captura e alteração e também simula advisories.aurora.test. O laboratório não realiza conexões externas. Sem o modo laboratório, a chamada falha com E_LABORATORY.

Repetir #

JavaScript
cat.tools.repeater.open({url: 'https://api.aurora.test/api/perfil', method: 'GET', headers: []});

Abre a mensagem no Repetir. Exige repeater e só aceita destinos aprovados.

Recursos do pacote #

JavaScript
const fixtures = JSON.parse(await cat.resources.get('fixtures.json'));
const bytes = await cat.resources.get('assinatura.bin', 'bytes');

Lê arquivos do próprio pacote. Textos têm até 128 KiB e recursos binários até 32 KiB. Não há acesso aos arquivos do aparelho.

Utilidades #

FunçãoDescrição
cat.http.parseUrl(url)retorna {scheme, hostname, port, pathname, query} e recusa credenciais na URL
cat.bytes.fromText(texto)converte texto UTF-8 em lista de bytes
cat.bytes.toText(bytes)converte lista de bytes em texto UTF-8
cat.i18n.localept-BR ou en
cat.i18n.text(valor)escolhe o texto do idioma atual em um objeto bilíngue
cat.log(mensagem, nivel)registra info, warning ou error, com texto simples ou bilíngue

Erros #

Falhas usam códigos E_* estáveis com descrição traduzida, como E_PERMISSION, E_HOST, E_TIMEOUT e E_BODY. Consulte a lista completa de códigos.

JavaScript
try {
  await cat.http.send({url: 'https://fora-do-escopo.test/'});
} catch (erro) {
  cat.log(String(erro.code || erro.message), 'error');
}