TRACIO JavaScript SDK (@tracio/sdk) собирает сигналы браузера и отправляет их в облако TRACIO для идентификации посетителей и обнаружения ботов. Он легковесный, неблокирующий и совместим со всеми современными браузерами.
npm install @tracio/sdkПакет поставляется в сборках ESM, CJS и IIFE с полными типами TypeScript.
Есть два способа использовать TRACIO с CDN без сборщика.
Edge-скрипт инициализируется автоматически, используя публичный ключ из query-параметра k. JavaScript не требуется:
<script src="https://edge.tracio.ai/s.js?k=PUBLIC_KEY" async></script>Вы также можете загрузить опубликованный npm-бандл с unpkg или jsDelivr. Он предоставляет глобальный объект TracioSDK. Зафиксируйте версию:
<script src="https://unpkg.com/@tracio/sdk@0.1.3/dist/index.min.js"></script><script> const tracio = TracioSDK.Tracio.init({ publicKey: "5ca175fc..." })</script>Инициализирует SDK и синхронно возвращает TracioInstance. Агент загружается в фоне; методы экземпляра разрешаются, как только он будет готов.
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}| Опция | Тип | По умолчанию | Описание |
|---|---|---|---|
publicKey | string | обязательно | Ваш публичный ключ. Скопируйте его из панели управления. |
region | "us" | "eu" | нет | Опциональный регион данных. Если не задан, SDK использует общий эндпоинт https://edge.tracio.ai (без подразумеваемого хранения данных в США). Задайте явно, чтобы закрепить us или eu. |
endpoint | string | авто | Пользовательский эндпоинт API (для эндпоинта, проксируемого как first-party). |
scriptUrl | string | авто | Пользовательский URL для скрипта агента (для эндпоинта, проксируемого как first-party). |
linkedId | string | нет | Идентификатор, связывающий этого посетителя с сущностью в вашей системе. |
tag | string | нет | Произвольная метка, прикрепляемая к запросу для последующей фильтрации. |
debug | boolean | false | Выводит подробную диагностику в консоль. |
timeoutMs | number | 15000 | Сколько времени ждать результат до истечения тайм-аута. |
Повторный вызов Tracio.init() с другим публичным ключом выбрасывает ошибку multiple_keys.
Возвращает Promise<string>, который разрешается в стабильный идентификатор посетителя.
const visitorId = await tracio.getVisitorId()// "X7fh2Hg9LkMn3pQr"Возвращает Promise<TracioResult> с идентификатором посетителя и результатом обнаружения ботов.
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[] }}Вызывается, как только агент загрузился и сформировал результат.
tracio.onReady((result) => { console.log("ready:", result.visitorId)})Вызывается, когда SDK сталкивается с ошибкой.
tracio.onError((error) => { console.error("tracio error:", error.code, error.message)})Разбирает экземпляр и освобождает ресурсы. Последующие вызовы отклоняются с ошибкой destroyed.
tracio.destroy()SDK выбрасывает экземпляры TracioError с типизированным code. Используйте помощники isTracioError и isRetryableError для ветвления:
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) }}Объединение TracioErrorCode включает:
| Код | Описание |
|---|---|
blocked | Запрос был заблокирован (например, блокировщиком рекламы). |
destroyed | Экземпляр был уничтожен до завершения вызова. |
invalid_config | Конфигурация недействительна (например, отсутствует publicKey). |
load_failed | Не удалось загрузить скрипт агента. |
multiple_keys | Tracio.init() был вызван с конфликтующим публичным ключом. |
network | Сетевой запрос завершился ошибкой. |
non_browser | SDK использовался вне браузерной среды. |
script_error | Скрипт агента вызвал ошибку во время выполнения. |
server | Сервер вернул ошибку. |
timeout | Запрос превысил timeoutMs. |
load_failed, blocked, script_error, network, timeout и server можно повторять; isRetryableError(error) возвращает для них true.
Для React, Vue, Angular и Svelte используйте специализированные пакеты для фреймворков вместо ручной обвязки основного SDK:
Каждый оборачивает @tracio/sdk и предоставляет идиоматичные примитивы (провайдеры, плагины, хуки, composables и сервисы). Сниппеты для каждого фреймворка см. в обзоре SDK.
Tracio.init() возвращается синхронно и загружает агент в фоне. Он не блокирует рендеринг страницы.timeoutMs (по умолчанию 15000 мс), поэтому медленная сеть никогда не подвесит ваш код на неопределённый срок.