TRACIO adalah sistem identifikasi client-server. Klien mengumpulkan sinyal browser dan mengirimkannya ke server, yang menghitung identifikator pengunjung yang stabil, menjalankan algoritma deteksi, dan mengembalikan hasil yang telah diperkaya. Bagian ini menjelaskan setiap tahap dari pipeline.
Browser TRACIO Cloud | | |-- Tracio.init({ publicKey }) ---------> | (init, no network) | | |-- tracio.getResult() ----------------> | | 1. Collect 130+ browser signals | | 2. Encrypt (XOR + deflate + B64) | | 3. POST to ingress endpoint | | | | |-- Decrypt & extract signals | |-- Compute visitor ID (MurmurHash3-128) | |-- Run bot detection (weighted scoring) | |-- Run smart signals (server-side enrichment) | |-- Run IP intelligence (VPN/proxy/Tor) | |-- Store visit event | | |<-- JSON response ------------------- | | visitorId, confidence, | | bot detection, smart signals | | | |-- Store visitor cookie (_vid_t) -----> | (365-day persistence)Ketika tracio.getResult() dipanggil, klien mengumpulkan 130+ sinyal browser berbeda yang diorganisasi ke dalam beberapa tier. Pengumpulan menggunakan pipeline multi-fase dengan Web Worker dan iframe bersama untuk performa.
| Kategori | Jumlah Sinyal | Contoh |
|---|---|---|
| Canvas & WebGL | 9 | Canvas fingerprint, WebGL renderer, parameter WebGL, WebGPU |
| Audio | 3 | AudioContext fingerprint, base latency, DRM timing |
| Font & Rendering | 10 | Deteksi font, preferensi font, MathML, rendering emoji |
| Navigator & Platform | 25 | User-Agent, bahasa, layar, hardware concurrency, zona waktu |
| Storage & Cookie | 10 | localStorage, sessionStorage, cookie, kuota storage |
| CSS & Media Query | 10 | Skema warna, HDR, reduced motion, forced colors |
| Jaringan & WebRTC | 3 | TURN probe, RTT koneksi, versi aplikasi |
| Bot Detection | 15 | Flag webdriver, framework otomasi, panjang eval |
| Tamper Detection | 8 | Introspeksi property getter, rantai prototype, integritas fungsi native |
| Custom Extensions | 14 | Math fingerprint, deteksi arsitektur, fitur WASM |
Pipeline pengumpulan berjalan dalam empat tahap untuk meminimalkan pemblokiran main thread:
Tahap 1 (Immediate): Sinyal prioritas tinggi yang cepat dikumpulkan (properti navigator, layar, zona waktu). TURN probe juga dimulai di sini karena berjalan secara bersamaan.
Tahap 2 (Idle Callback): Sinyal sinkron yang diuntungkan oleh periode idle (CSS media query, storage probe, tes cookie).
Tahap 3 (Async): Sinyal yang memerlukan API asinkron atau rendering (canvas, WebGL, audio fingerprint, deteksi font, rendering emoji).
Web Worker: Pengumpulan sinyal terisolasi dalam thread khusus (deteksi fitur WASM, doNotTrack).
Sebuah iframe tersembunyi bersama dibuat sekali dan digunakan kembali oleh beberapa collector (emoji, MathML, warna sistem, font, screen frame) untuk menghindari overhead pembuatan iframe terpisah per sinyal.
Setiap sinyal mengikuti struktur yang konsisten:
interface Signal<T> { s: number // Status code v: T // Value (when successful)}Status code:
| Code | Arti |
|---|---|
0 | Sukses |
-1 | Tidak tersedia (properti undefined) |
-2 | Pemeriksaan sekunder gagal |
-3 | Perilaku tak terduga |
-4 | Timeout |
-5 | Dinonaktifkan |
-6 | Diblokir CSP |
-7 | Kesalahan keamanan |
Sinyal yang dikumpulkan diserialisasi ke JSON, lalu dienkripsi dan dikompresi sebelum transmisi:
Serialisasi JSON: Semua nilai sinyal dikemas ke dalam objek JSON yang dikunci berdasarkan sinyal, ditambah field metadata (c untuk API key, t untuk tag, lid untuk linked ID).
Kompresi: Jika payload melebihi 1024 byte, payload dikompresi menggunakan CompressionStream("deflate-raw").
Enkripsi XOR: Payload dibungkus dalam envelope enkripsi:
Encoding Base64: Payload terenkripsi di-encode dengan Base64url dan dikirim sebagai body POST.
Permintaan dikirim ke ingress endpoint dengan query parameter untuk versi klien dan API key. Credential CORS disertakan untuk mengirim cookie first-party.
Server menerima payload terenkripsi dan memprosesnya melalui beberapa subsistem:
Server men-decode envelope XOR, mendekompresi jika diperlukan, dan mem-parse data sinyal JSON. Status code dan nilai dari setiap sinyal diekstrak dan divalidasi.
Visitor ID dihitung menggunakan pendekatan tiered hashing (V3):
Tier 1 (Frozen): 20 base62 characters - Stable hardware signals that rarely change - Canvas, WebGL renderer, audio fingerprint, fonts - Provides long-term visitor identity
Tier 2 (Semi-stable): 10 base62 characters - Signals that change with browser updates - User-Agent data, Client Hints, plugins - Extensible without breaking Tier 1
Tier 3 (Volatile): 10 base62 characters - Signals that change frequently - Screen resolution, timezone, language - Used for confidence scoring, not identitySetiap tier mengekstrak sinyal yang ditugaskan padanya, membangun string kanonik, dan meng-hash-nya dengan MurmurHash3-x64-128. Ketiga hash tier digabungkan dan di-encode dalam base62 untuk menghasilkan visitor ID final.
Skor confidence (0.0 hingga 1.0) menunjukkan seberapa yakin sistem bahwa pengunjung ini telah teridentifikasi dengan benar:
_vid_t terenkripsi cocok, confidence bernilai maksimal.Engine deteksi bot menjalankan beberapa detektor yang keluaran tertimbangnya digabungkan menjadi skor bot (ambang batas: bot ≥ 0,70, suspicious ≥ 0,30; sinyal hard-fail memaksa verdict bot). Detektor yang berkontribusi meliputi:
Sinyal pengayaan di sisi server dihitung dari data sinyal mentah dan IP intelligence. Ini mencakup deteksi VPN/proxy/Tor, geolokasi IP, analisis tampering browser, dan penilaian suspect.
Subsistem IP intelligence menyediakan:
Server mengembalikan respons JSON yang berisi:
{ "visitorId": "X7fh2Hg9LkMn3pQr", "bot": { "detected": false, "confidence": 2, "reasons": [] }}Ini adalah hasil yang di-resolve oleh tracio.getResult() di browser. Event
lengkap yang telah diperkaya — termasuk bot_result kanonik
(human / bot / uncertain), geolokasi, dan smart signal — dikirim
di sisi server melalui webhook dan ditampilkan di
dashboard.
Klien menyimpan token pengunjung baik dalam cookie first-party (masa berlaku 365 hari, SameSite=Lax) maupun localStorage untuk persistensi lintas sesi.
| Langkah | Lokasi | Durasi | Deskripsi |
|---|---|---|---|
| 1 | Browser | ~5ms | Inisialisasi agen, buat iframe bersama |
| 2 | Browser | ~50-150ms | Kumpulkan 130+ sinyal (paralel, multi-fase) |
| 3 | Browser | ~5ms | Enkripsi dan kompresi payload |
| 4 | Jaringan | ~10-50ms | POST ke server |
| 5 | Server | ~5-20ms | Dekripsi, ekstrak sinyal, hitung visitor ID |
| 6 | Server | ~5-15ms | Jalankan bot detection dan smart signal |
| 7 | Server | ~5ms | Bangun respons |
| 8 | Jaringan | ~10-50ms | Kembalikan respons JSON |
| 9 | Browser | ~1ms | Simpan cookie pengunjung |
Total round-trip: Biasanya 80-300ms tergantung pada kondisi jaringan dan kapabilitas browser.