O SDK JavaScript da TRACIO (@tracio/sdk) coleta sinais de navegador e os envia para a nuvem da TRACIO para identificação de visitantes e detecção de bots. Ele é leve, não bloqueante e compatível com todos os navegadores modernos.
npm install @tracio/sdkO pacote inclui builds ESM, CJS e IIFE com tipos TypeScript completos.
Existem duas maneiras de usar a TRACIO a partir de um CDN sem um bundler.
O script de edge se autoinicializa usando a chave pública no parâmetro de consulta k. Nenhum JavaScript é necessário:
<script src="https://edge.tracio.ai/s.js?k=PUBLIC_KEY" async></script>Você também pode carregar o bundle npm publicado a partir do unpkg ou jsDelivr. Ele expõe um global TracioSDK. Fixe uma versão:
<script src="https://unpkg.com/@tracio/sdk@0.1.3/dist/index.min.js"></script><script> const tracio = TracioSDK.Tracio.init({ publicKey: "5ca175fc..." })</script>Inicializa o SDK e retorna uma TracioInstance de forma síncrona. O agente carrega em segundo plano; os métodos da instância resolvem assim que ele estiver pronto.
import { Tracio } from "@tracio/sdk"
const tracio = Tracio.init({ publicKey: "5ca175fc...",})interface TracioConfig { publicKey: string // required region?: "us" | "eu" endpoint?: string scriptUrl?: string linkedId?: string tag?: string debug?: boolean timeoutMs?: number // default 15000}| Opção | Tipo | Padrão | Descrição |
|---|---|---|---|
publicKey | string | obrigatório | Sua chave pública. Copie-a do seu dashboard. |
region | "us" | "eu" | nenhum | Região de dados opcional. Quando não definida, o SDK usa o endpoint genérico https://edge.tracio.ai (sem residência de dados nos EUA implícita). Defina explicitamente para fixar us ou eu. |
endpoint | string | auto | Endpoint de API personalizado (para um endpoint com proxy de origem própria). |
scriptUrl | string | auto | URL personalizada para o script do agente (para um endpoint com proxy de origem própria). |
linkedId | string | nenhum | Identificador que vincula este visitante a uma entidade no seu sistema. |
tag | string | nenhum | Rótulo de formato livre anexado à requisição para filtragem posterior. |
debug | boolean | false | Registra diagnósticos detalhados no console. |
timeoutMs | number | 15000 | Quanto tempo esperar pelo resultado antes de expirar. |
Chamar Tracio.init() mais de uma vez com uma chave pública diferente lança um erro multiple_keys.
Retorna uma Promise<string> que resolve para o identificador de visitante estável.
const visitorId = await tracio.getVisitorId()// "X7fh2Hg9LkMn3pQr"Retorna uma Promise<TracioResult> com o ID de visitante e o resultado da detecção de bots.
const result = await tracio.getResult()
console.log(result.visitorId)
if (result.bot.detected) { console.warn("bot, confidence:", result.bot.confidence)}interface TracioResult { visitorId: string bot: { detected: boolean confidence: number // 0-100 reasons?: string[] }}Invocado assim que o agente carrega e produz um resultado.
tracio.onReady((result) => { console.log("ready:", result.visitorId)})Invocado quando o SDK encontra um erro.
tracio.onError((error) => { console.error("tracio error:", error.code, error.message)})Desmonta a instância e libera recursos. Chamadas subsequentes são rejeitadas com um erro destroyed.
tracio.destroy()O SDK lança instâncias de TracioError com um code tipado. Use os helpers isTracioError e isRetryableError para ramificar:
import { Tracio, isTracioError, isRetryableError } from "@tracio/sdk"
const tracio = Tracio.init({ publicKey: "5ca175fc..." })
try { const result = await tracio.getResult()} catch (error) { if (isTracioError(error)) { if (isRetryableError(error)) { // load_failed / blocked / script_error / network / timeout / server — safe to retry } console.error("TRACIO error:", error.code, error.message) } else { console.error("Unexpected error:", error) }}A união TracioErrorCode cobre:
| Código | Descrição |
|---|---|
blocked | A requisição foi bloqueada (ex.: por um bloqueador de anúncios). |
destroyed | A instância foi destruída antes de a chamada concluir. |
invalid_config | A configuração é inválida (ex.: publicKey ausente). |
load_failed | O script do agente falhou ao carregar. |
multiple_keys | Tracio.init() foi chamado com uma chave pública conflitante. |
network | Uma requisição de rede falhou. |
non_browser | O SDK foi usado fora de um ambiente de navegador. |
script_error | O script do agente lançou um erro em tempo de execução. |
server | O servidor retornou um erro. |
timeout | A requisição excedeu timeoutMs. |
load_failed, blocked, script_error, network, timeout e server são passíveis de nova tentativa; isRetryableError(error) retorna true para eles.
Para React, Vue, Angular e Svelte, use os pacotes de framework dedicados em vez de conectar o SDK principal manualmente:
Cada um encapsula @tracio/sdk e expõe primitivas idiomáticas (providers, plugins, hooks, composables e services). Consulte a visão geral dos SDKs para snippets por framework.
Tracio.init() retorna de forma síncrona e carrega o agente em segundo plano. Não bloqueia a renderização da página.timeoutMs (padrão 15000ms), então uma rede lenta nunca trava seu código indefinidamente.