Português

SDK TypeScript do Codex Security

Execute análises do Codex Security a partir de TypeScript, selecione alvos e fornecedores, inspecione resultados e faça a gestão do ciclo de vida das análises.

Utilize o SDK TypeScript do Codex Security para executar análises de segurança em repositórios e alterações de código a partir da sua aplicação ou ferramenta de desenvolvimento. O SDK devolve conclusões tipadas, detalhes de cobertura e caminhos para artefactos de análise. Para análises mais longas, suporta verificações prévias, limites de custos, callbacks de progresso e cancelamento.

O SDK utiliza módulos ECMAScript (ESM) e é executado no servidor com Node.js 22 ou posterior. A análise também requer Python 3.10 ou posterior.

Configurar o SDK

Instale o SDK:

npm install @openai/codex-security

Antes de iniciar uma análise, defina OPENAI_API_KEY ou CODEX_API_KEY, utilize um início de sessão existente do Codex baseado em ficheiros ou configure o Amazon Bedrock com credenciais AWS e substituições explícitas de model_provider e model.

Para obter os melhores resultados, utilize uma conta verificada para Trusted Access for Cyber. Iniciar sessão ou fornecer uma API key não concede Trusted Access.

Executar uma análise

Crie um cliente CodexSecurity, execute uma análise normal do repositório e feche o cliente quando o trabalho terminar. Forneça outputDir para escolher um diretório privado de resultados fora da árvore de trabalho Git envolvente.

Se omitir outputDir, o Codex Security guarda os resultados no seu próprio diretório de estado persistente. Os resultados podem incluir excertos de código-fonte e detalhes de vulnerabilidades, pelo que deve escolher permissões e políticas de retenção adequadas.



const security = new CodexSecurity();

try {
  const result = await security.run("/path/to/repository", {
    outputDir: "/path/outside/repository/results",
  });

  console.log(result.reportPath);
  console.log(result.coverage.completeness);
  console.log(result.findings.findings.length);
} finally {
  await security.close();
}

run inicia a análise, aguarda a conclusão, valida os artefactos selados e devolve um ScanResult. close liberta o runtime isolado e suporta chamadas repetidas.

Verificar entradas com a verificação prévia

Utilize preflight para verificar um repositório, alvo, modo, localização de saída e configuração do Codex antes de iniciar uma análise:

const plan = await security.preflight("/path/to/repository", {
  target: ["services/billing", "packages/auth"],
  outputDir: "/path/outside/repository/results",
});

console.log(plan.repository);
console.log(plan.target.kind);
console.log(plan.mode);
console.log(plan.outputDir);

A verificação prévia não altera o runtime nem as credenciais do Codex. Também deixa a deteção do plugin e do Python para a própria análise. Isto torna a verificação prévia útil para validar a entrada do utilizador antes de uma operação longa ou que utilize credenciais.

Para pré-visualizar o arquivamento de um diretório de resultados existente, defina archiveExisting: true:

const plan = await security.preflight("/path/to/repository", {
  outputDir: "/path/outside/repository/results",
  archiveExisting: true,
});

console.log(plan.archiveDir);

O archiveDir devolvido pré-visualiza a nomenclatura do arquivamento. O caminho final pode ser diferente porque run gera o seu próprio destino exclusivo. Capture o caminho efetivo do arquivamento com onOutputArchived:

await security.run("/path/to/repository", {
  outputDir: "/path/outside/repository/results",
  archiveExisting: true,
  onOutputArchived(archiveDir) {
    console.log("Archived results:", archiveDir);
  },
});

A análise arquiva os resultados anteriores e começa com um diretório de saída vazio.

Escolher um alvo de análise

O SDK suporta alvos de repositório, caminho, diferenças consolidadas e árvore de trabalho. O alvo predefinido é o repositório completo.

Analisar caminhos selecionados

Forneça uma matriz de caminhos dentro do repositório:

const result = await security.run("/path/to/repository", {
  target: ["services/billing", "packages/auth"],
});

Os caminhos podem identificar ficheiros ou diretórios. O SDK resolve cada caminho dentro do repositório e remove duplicados.

Analisar alterações consolidadas

Utilize DiffTarget.refs para analisar alterações consolidadas entre duas revisões Git disponíveis localmente:



const target = DiffTarget.refs({
  base: "origin/main",
  head: "HEAD",
});

const result = await security.run("/path/to/repository", { target });

Por predefinição, a cabeça é HEAD. Os alvos de diferenças exigem que o argumento do repositório seja a raiz da árvore de trabalho Git.

Analisar a árvore de trabalho

Utilize DiffTarget.workingTree para analisar alterações preparadas e não preparadas relativamente a uma revisão de base:

const target = DiffTarget.workingTree({ base: "HEAD" });
const result = await security.run("/path/to/repository", { target });

Por predefinição, a base é HEAD. Obtenha as revisões selecionadas antes de iniciar uma análise de diferenças ou da árvore de trabalho.

Selecionar o modo aprofundado

Defina mode: "deep" para uma análise de repositório ou caminho que necessite de uma revisão mais abrangente:

const result = await security.run("/path/to/repository", {
  target: ["services/billing"],
  mode: "deep",
});

O modo aprofundado suporta alvos de repositório e caminho. Utilize o modo normal para análises de diferenças e da árvore de trabalho.

Adicionar uma base de conhecimentos de segurança

Forneça documentos de arquitetura, modelos de ameaças ou políticas de segurança através de knowledgeBasePaths:

const result = await security.run("/path/to/repository", {
  knowledgeBasePaths: [
    "/path/to/architecture.md",
    "/path/to/security-policies",
  ],
});

O SDK aceita ficheiros ou diretórios e pesquisa diretórios recursivamente. Os formatos de documento suportados são .md, .markdown, .txt, .pdf e .docx. O SDK rejeita caminhos de entrada ligados, ignora entradas de diretório ligadas e mantém o conteúdo extraído dos documentos fora dos resultados de análise guardados.

Definir um orçamento de análise

Defina maxCostUsd para parar uma análise quando o custo estimado do modelo exceder um limite. Utilize onCost para acompanhar o custo durante a execução da análise:

const result = await security.run("/path/to/repository", {
  maxCostUsd: 5,
  onCost(cost) {
    console.log(cost.estimatedUsd);
  },
});

console.log(result.cost?.estimatedUsd);

O limite é uma estimativa, não um limite máximo rígido de despesa. Os pedidos já em curso podem terminar acima do mesmo. Se a análise exceder o limite, o SDK lança ScanCostLimitExceededError e preserva os resultados disponíveis.

Trabalhar com resultados de análises

ScanResult expõe os documentos estruturados, os metadados da análise e os caminhos dos artefactos:

Propriedade Conteúdo
manifest O manifesto selado da análise, incluindo o alvo, o âmbito, o produtor e os registos de artefactos.
findings O documento de conclusões. Leia os objetos de conclusão em findings.findings.
coverage Superfícies revistas, exclusões, trabalho adiado, questões em aberto e completude.
scanDir O diretório da análise.
threadId O identificador do tópico do Codex para a análise.
turnResult Estado do turno, resposta e metadados de utilização disponíveis.
cost Custo estimado do modelo e dos tokens, ou null quando indisponível.
reportPath O caminho para report.md.
manifestPath O caminho para scan-manifest.json.
findingsPath O caminho para findings.json.
coveragePath O caminho para coverage.json.
artifactsDir O diretório de artefactos de suporte.
sarifPath O caminho SARIF gerado, ou null quando não existe SARIF.
pluginVersion A versão registada pelo produtor da análise.

Utilize diretamente as conclusões estruturadas e a cobertura:

for (const finding of result.findings.findings) {
  const location = finding.locations[0];
  if (location === undefined) continue;

  console.log(
    finding.severity.level,
    `${location.path}:${location.startLine}`,
    finding.title
  );
}

for (const deferred of result.coverage.deferred) {
  console.log(deferred.id, deferred.reason);
}

A completude da cobertura é complete, partial ou unknown. Reveja as superfícies adiadas, as exclusões e as questões em aberto antes de utilizar uma análise como prova para uma decisão de segurança.

result.toJSON() devolve o manifesto, as conclusões, a cobertura, os identificadores da análise e do tópico, reportPath, artifactsDir, sarifPath e os metadados do turno num único objeto preparado para JSON.

Acompanhar ou cancelar uma análise

Forneça callbacks ScanOptions para comunicar o início da análise, o progresso dos trabalhadores e as novas tentativas de ligação:

const result = await security.run("/path/to/repository", {
  outputDir: "/path/outside/repository/results",
  onScanStarted() {
    console.log("Scan started");
  },
  onWorkerStatus(status) {
    console.log(status.kind, status);
  },
  onReconnect(attempt, maxAttempts) {
    console.log(`Reconnect attempt ${attempt} of ${maxAttempts}`);
  },
  onObserverError(observer, error) {
    console.error(`${observer} failed`, error);
  },
});

console.log(result.reportPath);

Forneça um AbortSignal quando o cancelamento for proveniente de um pedido, controlador de tarefas ou limite de tempo:



const controller = new AbortController();

try {
  const scan = security.run("/path/to/repository", {
    outputDir: "/path/outside/repository/results",
    signal: controller.signal,
  });

  controller.abort();
  await scan;
} catch (error) {
  if (error instanceof ScanInterruptedError) {
    console.error(error.scanDir);
  } else {
    throw error;
  }
}

Uma análise interrompida pode deixar uma saída parcial em scanDir. Preserve esse diretório quando for necessário investigar o resultado.

As aplicações que apresentam o progresso da configuração da análise também podem utilizar os callbacks do ciclo de vida ScanOptions:

Callback Chamado quando
onOutputArchived(archiveDir) Os resultados existentes são movidos para o diretório de arquivamento.
onOutputDirReady(scanDir) O diretório privado da análise está pronto.
onScanStarted() A configuração da análise termina e a execução começa.
onReconnect(attempt, maxAttempts) O SDK repete a ligação a um fluxo de análise desligado.
onWorkerStatus(status) O estado da verificação prévia ou da distribuição do trabalhador muda.
onCost(cost) Está disponível uma estimativa atualizada do custo da análise.
onObserverError(observer, error) Outro callback do ciclo de vida da análise gera um erro.

Configurar o runtime e as credenciais

Forneça a configuração do runtime quando necessitar de um plugin, interpretador ou definição específica do Codex:

const security = new CodexSecurity({
  pluginPath: "/path/to/codex-security-plugin",
  pythonPath: "/path/to/python",
  codexOverrides: {
    model: "gpt-5.6-terra",
    model_reasoning_effort: "high",
  },
});

pluginPath aceita um diretório de plugins ou ZIP. pythonPath seleciona o interpretador do plugin. codexOverrides intercala valores suportados na configuração isolada do Codex. Por predefinição, as análises utilizam gpt-5.6-sol com esforço de raciocínio extra-alto. Defina model e model_reasoning_effort em codexOverrides para utilizar um modelo ou esforço de raciocínio diferente. Para utilizar o Amazon Bedrock, defina model_provider e model em codexOverrides.

O cliente também expõe métodos de autenticação suportados:

Método Finalidade
loginApiKey(apiKey) Autenticar o runtime isolado com uma API key.
loginChatGPT() Iniciar um fluxo de início de sessão no navegador e devolver um identificador de início de sessão.
loginChatGPTDeviceCode() Iniciar um fluxo de início de sessão com código do dispositivo e devolver um identificador de início de sessão.
account() Devolver o estado de autenticação atual.
logout() Limpar a autenticação isolada.

Um identificador de início de sessão fornece waitForInstructions, authUrl, verificationUrl, userCode, wait e cancel para que uma aplicação possa apresentar e concluir o fluxo de início de sessão selecionado. O SDK pode reutilizar um início de sessão do Codex baseado em ficheiros. As API keys são adequadas para CI e automatização no servidor.

Quando estão disponíveis uma API key e um início de sessão guardado, o SDK utiliza a API key por predefinição. Para utilizar o seu início de sessão do ChatGPT, selecione-o para a análise:

const result = await security.run("/path/to/repository", {
  auth: "chatgpt",
});

Defina auth: "api-key" para exigir uma API key de ambiente. preflight aceita a mesma opção auth.

Processar erros de análise

Capture a classe de erro exportada correspondente à ação que a sua aplicação pode tomar:

Erro Significado
AuthenticationRequiredError Uma análise necessita de uma credencial suportada.
ConfigurationError A configuração do Codex ou uma substituição é inadequada.
InvalidTargetError O repositório, caminho, modo ou alvo Git é inadequado.
OutputDirectoryError A localização de saída ou as respetivas permissões são inadequadas.
OutputInsideProtectedRootError O diretório de saída encontra-se dentro do repositório ou da árvore de trabalho analisada.
PluginPythonUnavailableError Não está disponível um interpretador Python utilizável.
PluginBootstrapError Não foi possível iniciar o runtime do plugin.
ScanCostLimitExceededError A análise excedeu o respetivo limite de custo estimado.
IncompleteScanError A análise terminou antes de produzir o resultado necessário.
ContractValidationError Uma análise concluída devolveu um erro de contrato estruturado.
ScanInterruptedError Uma interrupção parou a análise e pode ter deixado uma saída parcial.

Continue com o início rápido da CLI, o guia de CI ou a referência da CLI.