TRACIO corrisponde alla raccolta di segnali del browser di FingerprintJS Pro v4 esponendo al
contempo il proprio SDK (@tracio/sdk) e consegnando i risultati lato server tramite webhook. Questa
guida copre il processo di migrazione, i dettagli sulla parità dei segnali e le differenze nei
formati di SDK e risposta che occorrerà aggiornare.
| Aspetto | FingerprintJS Pro | TRACIO | Compatibile |
|---|---|---|---|
| Raccolta dei segnali | XOR + deflate + Base64 | Equivalente | Sì |
| Numero di segnali | ~133 | 130+ (FingerprintJS-matching + proprietari) | Sì |
| Formato dei segnali | { s: status, v: value } | Equivalente | Sì |
| SDK client | @fingerprintjs/fingerprintjs-pro | @tracio/sdk (Tracio.init) | Modifica al codice |
| Struttura del risultato client | { visitorId, confidence, ... } | { visitorId, bot: { detected, ... } } | Modifica al codice |
| Risultati lato server | Server API (/events) | Consegnati tramite webhook (nessuna REST read API cliente) | Modifica al codice |
| Webhook | Formato webhook FingerprintJS | Payload piatto camelCase, X-Tracio-Signature | Modifica al codice |
| Meccanismo dei cookie | _iidt (365 giorni) | _vid_t (365 giorni, UID opaco) | Diverso |
TRACIO corrisponde alla raccolta di segnali del browser di FingerprintJS Pro v4, verificata tramite test di confronto Playwright automatizzati eseguiti fianco a fianco contro l'endpoint di produzione di FingerprintJS Pro. Oltre al set FingerprintJS-matching, TRACIO raccoglie segnali proprietari (segnali bot, tamper, antidetect e di persistenza) che FingerprintJS non ha.
TRACIO è un servizio cloud gestito. Creare il proprio account, scegliere la propria regione dati e copiare la propria public key dalla dashboard. Vedi Cloud Deployment per la procedura completa. La propria public key è sicura da distribuire nel codice lato client.
Prima di commutare il proprio traffico di produzione, testare con l'SDK client di TRACIO. Si noti che TRACIO usa il proprio SDK e la propria API — non è una sostituzione di protocollo drop-in per il client FingerprintJS.
import { Tracio } from "@tracio/sdk"
const tracio = Tracio.init({ publicKey: "5ca175fc...",})
const result = await tracio.getResult()console.log(result)Confrontare il dispositivo rilevato con la propria integrazione FingerprintJS Pro esistente per verificare la migrazione.
Per i deployment critici, eseguire entrambi i sistemi simultaneamente e confrontare i risultati:
// 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)Si noti che gli ID visitatore saranno diversi tra i sistemi, poiché sono calcolati da database lato server differenti. La metrica di compatibilità chiave è che entrambi i sistemi identifichino lo stesso dispositivo fisico in modo coerente.
TRACIO distribuisce il proprio SDK client (@tracio/sdk) e non riutilizza il
protocollo del client FingerprintJS, quindi si tratta di una modifica al codice anziché di uno scambio DNS.
Rimuovere il client FingerprintJS e inizializzare TRACIO con la propria public key:
// 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 espone una Server API che si interroga tramite requestId. TRACIO non
offre un endpoint REST di lettura equivalente rivolto al cliente — invece, i risultati sono
inviati al proprio server come webhook nel momento in cui un visitatore viene identificato.
Sostituire la propria logica di polling con un handler di 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")})Vedi Webhooks per il payload completo e la verifica della firma.
Se si usano i webhook, registrarli nella dashboard di TRACIO. Il
payload del webhook è un documento piatto, camelCase, firmato con un
header X-Tracio-Signature — differisce dal formato webhook di FingerprintJS,
quindi aggiornare il proprio handler di conseguenza.
Una volta verificato TRACIO in produzione:
TRACIO e FingerprintJS usano strutture di risposta diverse — questo è il punto principale di cui tenere conto quando si porta il codice.
L'SDK client di TRACIO si risolve in un risultato compatto:
{ "visitorId": "X7fh2Hg9LkMn3pQr", "bot": { "detected": false, "confidence": 2, "reasons": [] }}Invece di una risposta della Server API interrogata via polling, TRACIO consegna un payload webhook piatto,
camelCase, per ogni identificazione — non la struttura products di 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 }}Vedi Webhooks per il payload completo.
TRACIO non è una sostituzione di protocollo drop-in per FingerprintJS. Oltre alle diverse strutture di SDK e risposta di cui sopra, si noti:
Gli ID visitatore non saranno gli stessi tra FingerprintJS Pro e TRACIO. L'ID visitatore è un hash dei segnali del browser, e ogni sistema usa i propri parametri di hashing e il proprio database. Dopo la migrazione, ogni visitatore apparirà come un «nuovo» visitatore nel database di TRACIO.
Mitigazione: usare il campo linkedId per mappare gli ID visitatore di TRACIO ai propri account utente o sessioni esistenti. Dopo un periodo di transizione, il database dei visitatori di TRACIO si costruirà naturalmente.
| Sistema | Nome del cookie | Valore |
|---|---|---|
| FingerprintJS Pro | _iidt (via proxy) | Token in chiaro |
| TRACIO | _vid_t | UID opaco (UUID) |
I cookie FingerprintJS Pro esistenti non vengono trasferiti. I visitatori ricevono un nuovo cookie _vid_t da TRACIO.
TRACIO raccoglie ulteriori segnali proprietari che non sono presenti in FingerprintJS Pro. Questi forniscono capacità di rilevamento aggiuntive ma non incidono sulla compatibilità con le integrazioni esistenti.
FingerprintJS Pro fornisce sealed_result nella risposta (un blob cifrato per la verifica lato server). TRACIO al momento non supporta i risultati sigillati. Usare invece i webhook per la verifica lato server.
Dopo la migrazione, i punteggi di confidenza potrebbero essere leggermente inferiori per le prime 24-48 ore mentre TRACIO costruisce il suo database di visitatori. Questo è previsto e si risolve man mano che i visitatori tornano e stabiliscono identità basate sui cookie.
Verificare di aver sostituito il client FingerprintJS con @tracio/sdk e che
Tracio.init() sia chiamato con una public key valida per il
workspace corretto.