TRACIO повторяет сбор браузерных сигналов FingerprintJS Pro v4, при этом
предоставляет собственный SDK (@tracio/sdk) и доставляет результаты на стороне сервера через webhooks. Это
руководство охватывает процесс миграции, детали паритета сигналов, а также различия в
форматах SDK и ответов, которые вам потребуется учесть.
| Аспект | FingerprintJS Pro | TRACIO | Совместимо |
|---|---|---|---|
| Сбор сигналов | XOR + deflate + Base64 | Эквивалентно | Да |
| Количество сигналов | ~133 | 130+ (соответствие FingerprintJS + проприетарные) | Да |
| Формат сигнала | { s: status, v: value } | Эквивалентно | Да |
| Клиентский SDK | @fingerprintjs/fingerprintjs-pro | @tracio/sdk (Tracio.init) | Изменение кода |
| Форма клиентского результата | { visitorId, confidence, ... } | { visitorId, bot: { detected, ... } } | Изменение кода |
| Серверные результаты | Server API (/events) | Доставка через webhooks (нет клиентского REST API для чтения) | Изменение кода |
| Webhooks | Формат webhook FingerprintJS | Плоский camelCase-payload, X-Tracio-Signature | Изменение кода |
| Механизм cookie | _iidt (365 дней) | _vid_t (365 дней, непрозрачный UID) | Различается |
TRACIO повторяет сбор браузерных сигналов FingerprintJS Pro v4, что проверено автоматизированными сравнительными тестами Playwright, работающими параллельно с боевым эндпоинтом FingerprintJS Pro. Помимо набора, соответствующего FingerprintJS, TRACIO собирает проприетарные сигналы (bot, tamper, antidetect и сигналы устойчивости), которых у FingerprintJS нет.
TRACIO — это управляемый облачный сервис. Создайте учётную запись, выберите регион данных и скопируйте свой публичный ключ из панели управления. Полное руководство см. в разделе Cloud Deployment. Ваш публичный ключ можно безопасно поставлять в клиентском коде.
Прежде чем переключать боевой трафик, протестируйте с клиентским SDK TRACIO. Обратите внимание, что TRACIO использует собственный SDK и API — это не прямая замена протокола для клиента FingerprintJS.
import { Tracio } from "@tracio/sdk"
const tracio = Tracio.init({ publicKey: "5ca175fc...",})
const result = await tracio.getResult()console.log(result)Сравните обнаруженное устройство с вашей существующей интеграцией FingerprintJS Pro, чтобы проверить миграцию.
Для критичных развёртываний запустите обе системы одновременно и сравните результаты:
// Temporary: run both systems and compareconst fpjsResult = await fpjsAgent.get() // FingerprintJS Pro agentconst tracioResult = await tracio.getResult() // TRACIO instance
// Compare visitor IDs (they will differ — different servers)// But bot detection should be equivalent for the same deviceconsole.log("FPJS visitorId:", fpjsResult.visitorId)console.log("TRACIO visitorId:", tracioResult.visitorId)console.log("FPJS bot:", fpjsResult.bot)console.log("TRACIO bot:", tracioResult.bot)Обратите внимание, что идентификаторы посетителей будут различаться между системами, поскольку они вычисляются из разных серверных баз данных. Ключевая метрика совместимости в том, что обе системы стабильно идентифицируют одно и то же физическое устройство.
TRACIO поставляет собственный клиентский SDK (@tracio/sdk) и не переиспользует
протокол клиента FingerprintJS, поэтому это изменение кода, а не подмена DNS.
Удалите клиент FingerprintJS и инициализируйте TRACIO своим публичным ключом:
// Before (FingerprintJS Pro)import * as FingerprintJS from "@fingerprintjs/fingerprintjs-pro"const fpAgent = await FingerprintJS.load({ apiKey: "fpjs-public-key" })const fpResult = await fpAgent.get()
// After (TRACIO)import { Tracio } from "@tracio/sdk"const tracio = Tracio.init({ publicKey: "5ca175fc..." })const result = await tracio.getResult()FingerprintJS Pro предоставляет Server API, который вы опрашиваете по requestId. TRACIO не
предлагает эквивалентного клиентского REST-эндпоинта для чтения — вместо этого результаты
отправляются на ваш сервер как webhooks в момент идентификации посетителя.
Замените логику опроса обработчиком webhook:
// Before (FingerprintJS Pro) — pull by requestIdconst response = await fetch(`https://eu.api.fpjs.io/events/${requestId}`, { headers: { "Auth-API-Key": "fpjs-api-key" },})
// After (TRACIO) — receive a signed webhook per identificationapp.post("/webhook/tracio", (req, res) => { // verify req.headers["x-tracio-signature"], then act on req.body const event = req.body // { requestId, visitorId, bot, geo, network, decision, ... } res.status(200).send("OK")})Полный payload и проверку подписи см. в разделе Webhooks.
Если вы используете webhooks, зарегистрируйте их в панели управления TRACIO.
Payload webhook — это плоский документ в формате camelCase, подписанный заголовком
X-Tracio-Signature; он отличается от формата webhook FingerprintJS,
поэтому обновите обработчик соответствующим образом.
Как только TRACIO подтверждён в продакшене:
TRACIO и FingerprintJS используют разные формы ответа — это главное, что нужно учесть при переносе кода.
Клиентский SDK TRACIO разрешается в компактный результат:
{ "visitorId": "X7fh2Hg9LkMn3pQr", "bot": { "detected": false, "confidence": 2, "reasons": [] }}Вместо ответа Server API, получаемого опросом, TRACIO доставляет плоский payload в формате camelCase
на каждую идентификацию — а не структуру products FingerprintJS:
{ "requestId": "1710432000_abc123def", "visitorId": "X7fh2Hg9LkMn3pQr", "identification": { "confidence": 0.95 }, "bot": { "result": "human", "type": "", "score": 0.02 }, "geo": { "country": "CZ", "city": "Prague" }, "network": { "vpn": false, "proxy": false, "tor": false, "datacenter": false }, "decision": { "action": "allow", "riskScore": 4 }}Полный payload см. в разделе Webhooks.
TRACIO не является прямой заменой протокола FingerprintJS. Помимо различий в SDK и формах ответа выше, учтите:
Идентификаторы посетителей не будут совпадать между FingerprintJS Pro и TRACIO. Идентификатор посетителя — это хеш браузерных сигналов, и каждая система использует собственные параметры хеширования и базу данных. После миграции каждый посетитель будет отображаться как «новый» посетитель в базе данных TRACIO.
Смягчение: используйте поле linkedId, чтобы сопоставлять идентификаторы посетителей TRACIO с вашими существующими учётными записями пользователей или сессиями. После переходного периода база данных посетителей TRACIO наполнится естественным образом.
| Система | Имя cookie | Значение |
|---|---|---|
| FingerprintJS Pro | _iidt (через прокси) | Открытый токен |
| TRACIO | _vid_t | Непрозрачный UID (UUID) |
Существующие cookie FingerprintJS Pro не переносятся. Посетители получают новый cookie _vid_t от TRACIO.
TRACIO собирает дополнительные проприетарные сигналы, которых нет в FingerprintJS Pro. Они дают дополнительные возможности обнаружения, но не влияют на совместимость с существующими интеграциями.
FingerprintJS Pro предоставляет sealed_result в ответе (зашифрованный blob для серверной верификации). TRACIO в настоящее время не поддерживает sealed results. Вместо этого используйте webhooks для серверной верификации.
После миграции значения уверенности могут быть немного ниже в течение первых 24–48 часов, пока TRACIO наполняет свою базу данных посетителей. Это ожидаемо и проходит по мере того, как посетители возвращаются и устанавливают идентичности на основе cookie.
Убедитесь, что вы заменили клиент FingerprintJS на @tracio/sdk и что
Tracio.init() вызывается с действительным публичным ключом для
корректного workspace.