A IDE de extensões é um ambiente completo para escrever, testar e empacotar extensões .catplug direto no navegador. Tudo acontece no seu dispositivo: o código não é enviado para servidores, o simulador não faz conexões de rede e o projeto fica salvo apenas neste navegador.
Começar um projeto #
Ao abrir a IDE, nada é carregado automaticamente. A tela inicial pergunta como você quer começar:
| Opção | O que acontece |
|---|---|
| Continuar de onde parei | Reabre o projeto salvo neste navegador, com nome, ID, versão, quantidade de arquivos e horário do último salvamento. Só aparece quando existe um projeto salvo. |
| Criar do zero | Gera um projeto em branco com manifest.json e um main.js vazio. Você informa o nome, o nome no outro idioma, o ID e o autor. |
| Começar de um exemplo | Abre um dos modelos prontos, todos testados no simulador com dados fictícios. |
| Importar .catplug | Abre um pacote exportado pelo aplicativo ou pela própria IDE. |
O botão Novo da barra da IDE volta para essa tela a qualquer momento, com a opção de retornar ao projeto aberto.
Criar do zero #
O ID é gerado a partir do nome: acentos são removidos, espaços viram hífens e o prefixo lab. é adicionado. Você pode editar o ID livremente, desde que siga o padrão do manifesto: de 3 a 64 caracteres, começando por letra, usando apenas minúsculas, números, ponto e hífen.
O manifesto inicial já passa na validação:
{
"formatVersion": 1,
"apiVersion": 1,
"id": "lab.minha-extensao",
"version": "1.0.0",
"author": "Equipe de QA",
"entry": "main.js",
"name": {
"pt-BR": "Minha extensão",
"en": "My extension"
},
"description": {
"pt-BR": "Descreva aqui o que a extensão faz.",
"en": "Describe what the extension does."
},
"permissions": [],
"targets": [],
"externalHosts": [],
"settings": {},
"hashes": {}
}Exemplos disponíveis #
| Exemplo | Demonstra | Permissões |
|---|---|---|
| Modelo básico | comando, aba nativa, campo e armazenamento | commands, ui.tab, storage |
| Marcador de requests | hooks onRequest e onResponse no laboratório | traffic.read, traffic.modify, ui.tab, storage, commands |
| Auditor de cache | envios, API externa simulada, menu e achado com evidência | traffic.read, http.send, external.call, findings, storage, ui.menu, ui.tab, commands |
| Etapa de fluxo | etapa com checkpoint e parser JSON | pipeline.step, parsers, traffic.read |
| Painel de componentes | todos os componentes nativos de interface | ui.tab, commands, storage |
Áreas da IDE #
| Área | Função |
|---|---|
| Arquivos | lista do pacote, criação, renomeação e exclusão de arquivos |
| Permissões | caixas de seleção que atualizam permissions no manifest.json |
| Referência do SDK | APIs do cat com filtro e trechos prontos para inserir no código |
| Modelos | troca o projeto atual por um exemplo |
| Editor | realce de sintaxe, números de linha e marcação de problemas |
| Problemas | erros, avisos e dicas da validação, com atalho para a linha |
| Console | registros de cat.log, envios simulados e falhas de execução |
| Laboratório | captura de requests fictícias para testar hooks de proxy |
| Prévia | abas registradas pela extensão, renderizadas como no aplicativo |
| Inspetor | hooks, comandos, menus, etapas, parsers e dados salvos |
| Achados | achados registrados, com severidade, confiança, estado e evidência |
Em telas pequenas, as áreas ficam organizadas em quatro guias: Arquivos, Código, Prévia e Console.
Editor e atalhos #
| Atalho | Ação |
|---|---|
| Tab e Shift + Tab | indentar e remover indentação |
| Enter | nova linha mantendo a indentação |
| Ctrl + S | salvar no navegador |
| Ctrl + Enter | validar e executar no simulador |
| Esc e depois Tab | sair do editor pelo teclado |
No macOS, use Cmd no lugar de Ctrl. O projeto também é salvo automaticamente alguns instantes depois de cada alteração.
Validação #
A validação roda a cada alteração e usa as mesmas regras de importação do aplicativo:
- campos obrigatórios do manifesto, textos em
pt-BReen, versão e ID; - destinos de
targetseexternalHosts, incluindo curingas, portas e endereços privados; - permissões declaradas comparadas com as APIs usadas no código;
- etapas e parsers com entradas
httpexigemtraffic.read; - APIs que não existem no QuickJS, como
fetch,requireedocument; importeexport, que não são suportados porque o código roda como script;- erros de sintaxe do arquivo de entrada, verificados sem executar o código.
Erros bloqueiam a execução e a exportação. Avisos e dicas não bloqueiam.
Simulador #
Executar carrega o arquivo de entrada em um Web Worker isolado que reproduz a API v1 do SDK. O simulador usa o idioma escolhido no seletor de idioma do site: em português, cat.i18n.text e os textos bilíngues aparecem em pt-BR; em inglês, em en.
O simulador aplica as mesmas regras do aplicativo:
- cada API exige a permissão correspondente e responde
E_PERMISSIONquando ela falta; - envios e APIs externas respeitam
targetseexternalHosts; - hooks de alteração precisam ser síncronos e são encerrados se travarem;
- armazenamento limitado a 128 KiB por valor e 10 MiB por extensão;
- achados são consolidados pelo
fingerprint.
Conectores do CatBridge não estão disponíveis no navegador e respondem E_CONNECTOR.
Dados fictícios com fixtures.json #
Envios, APIs externas e o laboratório usam as rotas do arquivo fixtures.json. Rotas que não existem respondem com um 404 simulado.
{
"scenario": "fictional",
"routes": [
{
"url": "https://api.aurora.test/api/perfil",
"status": 200,
"cacheControl": "public, max-age=600",
"body": { "id": "cliente-ficticio-001", "scenario": "fictional" }
},
{
"url": "https://api.aurora.test/timeout",
"error": "E_TIMEOUT"
}
]
}Para usar cat.laboratory.capture, ative settings.laboratory no manifesto.
Exportar o pacote #
Exportar .catplug valida o projeto e gera o pacote:
- remove a assinatura anterior, porque o conteúdo foi editado;
- recalcula o SHA-256 de cada arquivo em
hashes; - no formato 2, cria um novo
revisionIde registraparentHashquando o projeto veio de uma importação; - compacta tudo em um arquivo
id-versão.catplug.
Depois, importe o arquivo no aplicativo em Configurações → Extensões. O aplicativo assina o pacote novamente e mostra as permissões antes de ativar a extensão.
Segurança da IDE #
- A página bloqueia qualquer conexão de rede pela política de segurança de conteúdo.
- O código da extensão roda isolado, sem acesso à página, aos cookies ou ao armazenamento do navegador.
fetch,XMLHttpRequest,WebSocket,importScripts,WebAssemblye o canal de mensagens do worker ficam bloqueados para o código da extensão.- Pacotes importados passam pelos limites do formato: até 10 MiB compactados, 40 MiB expandidos, 4 MiB por arquivo e 500 arquivos, sem caminhos absolutos,
.., links simbólicos ou entradas criptografadas. - Hashes divergentes geram aviso no console e são recalculados na exportação.
- Pacotes protegidos por senha (
CATSEAL2) não abrem na IDE web: abra-os no aplicativo ou inspecione-os no CatSuite Studio.
Prefere o VS Code? #
A mesma experiência existe como extensão instalável: o CatSuite Studio traz sugestões do SDK, validação, prévia local com fixtures e geração de pacotes .catplug assinados dentro do Visual Studio Code. Projetos criados na IDE web podem continuar no editor.
- Instalar o CatSuite Studio pelo Visual Studio Marketplace
- Código-fonte na pasta catsuite-vscode do GitHub
- Guia completo do CatSuite Studio