TRACIO एक क्लाइंट-सर्वर पहचान प्रणाली है। क्लाइंट ब्राउज़र सिग्नल एकत्र करता है और उन्हें सर्वर को भेजता है, जो एक स्थिर विज़िटर आइडेंटिफ़ायर की गणना करता है, डिटेक्शन एल्गोरिदम चलाता है और समृद्ध किए गए परिणाम लौटाता है। यह अनुभाग पाइपलाइन के प्रत्येक चरण को समझाता है।
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)जब tracio.getResult() को कॉल किया जाता है, तो क्लाइंट टियर में संगठित 130+ अलग-अलग ब्राउज़र सिग्नल एकत्र करता है। संग्रह प्रदर्शन के लिए Web Workers और साझा iframes के साथ एक बहु-चरणीय पाइपलाइन का उपयोग करता है।
| श्रेणी | सिग्नल संख्या | उदाहरण |
|---|---|---|
| Canvas & WebGL | 9 | Canvas fingerprint, WebGL renderer, WebGL parameters, WebGPU |
| Audio | 3 | AudioContext fingerprint, base latency, DRM timing |
| Fonts & Rendering | 10 | Font detection, font preferences, MathML, emoji rendering |
| Navigator & Platform | 25 | User-Agent, languages, screen, hardware concurrency, timezone |
| Storage & Cookies | 10 | localStorage, sessionStorage, cookies, storage quota |
| CSS & Media Queries | 10 | Color scheme, HDR, reduced motion, forced colors |
| Network & WebRTC | 3 | TURN probe, connection RTT, app version |
| Bot Detection | 15 | Webdriver flag, automation frameworks, eval length |
| Tamper Detection | 8 | Property getter introspection, prototype chains, native function integrity |
| Custom Extensions | 14 | Math fingerprint, architecture detection, WASM features |
संग्रह पाइपलाइन मुख्य थ्रेड की ब्लॉकिंग को न्यूनतम करने के लिए चार चरणों में चलती है:
चरण 1 (तत्काल): उच्च-प्राथमिकता वाले सिग्नल जिन्हें एकत्र करना तेज़ होता है (navigator गुण, screen, timezone)। TURN probe भी यहीं शुरू होती है क्योंकि यह समवर्ती रूप से चलती है।
चरण 2 (Idle Callback): सिंक्रोनस सिग्नल जिन्हें एक निष्क्रिय अवधि से लाभ मिलता है (CSS media queries, storage probes, cookie tests)।
चरण 3 (Async): वे सिग्नल जिन्हें एसिंक्रोनस API या rendering की आवश्यकता होती है (canvas, WebGL, audio fingerprint, font detection, emoji rendering)।
Web Worker: एक समर्पित थ्रेड में पृथक सिग्नल संग्रह (WASM feature detection, doNotTrack)।
एक साझा छिपा हुआ iframe एक बार बनाया जाता है और कई collectors (emoji, MathML, system colors, fonts, screen frame) द्वारा पुनः उपयोग किया जाता है, ताकि प्रति सिग्नल अलग-अलग iframes बनाने का ओवरहेड टाला जा सके।
प्रत्येक सिग्नल एक सुसंगत संरचना का पालन करता है:
interface Signal<T> { s: number // Status code v: T // Value (when successful)}स्थिति कोड:
| Code | अर्थ |
|---|---|
0 | सफलता |
-1 | उपलब्ध नहीं (गुण undefined) |
-2 | द्वितीयक जाँच विफल |
-3 | अप्रत्याशित व्यवहार |
-4 | Timeout |
-5 | अक्षम |
-6 | CSP द्वारा अवरुद्ध |
-7 | सुरक्षा त्रुटि |
एकत्रित सिग्नल JSON में serialize किए जाते हैं, फिर संचरण से पहले एन्क्रिप्ट और संपीड़ित किए जाते हैं:
JSON serialization: सभी सिग्नल मान एक JSON ऑब्जेक्ट में सिग्नल द्वारा कुंजीबद्ध करके पैक किए जाते हैं, साथ ही मेटाडेटा फ़ील्ड (API key के लिए c, tag के लिए t, linked ID के लिए lid)।
संपीड़न (Compression): यदि payload 1024 bytes से अधिक हो जाती है, तो इसे CompressionStream("deflate-raw") का उपयोग करके संपीड़ित किया जाता है।
XOR एन्क्रिप्शन: payload को एक एन्क्रिप्शन एनवेलप में लपेटा जाता है:
Base64 encoding: एन्क्रिप्टेड payload को Base64url-encoded किया जाता है और POST body के रूप में भेजा जाता है।
अनुरोध client version और API key के लिए query parameters के साथ ingress endpoint को भेजा जाता है। first-party cookies भेजने के लिए CORS credentials शामिल किए जाते हैं।
सर्वर एन्क्रिप्टेड payload प्राप्त करता है और इसे कई सबसिस्टम के माध्यम से संसाधित करता है:
सर्वर XOR envelope को डिकोड करता है, आवश्यकता होने पर विसंपीड़ित करता है, और JSON सिग्नल डेटा को पार्स करता है। प्रत्येक सिग्नल का स्थिति कोड और मान निकाला और सत्यापित किया जाता है।
विज़िटर ID की गणना एक 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 identityप्रत्येक tier अपने निर्दिष्ट सिग्नल निकालता है, एक कैनोनिकल string बनाता है, और इसे MurmurHash3-x64-128 के साथ हैश करता है। तीनों tier हैश को जोड़ा जाता है और अंतिम विज़िटर ID बनाने के लिए base62 में एन्कोड किया जाता है।
कॉन्फ़िडेंस स्कोर (0.0 से 1.0) दर्शाता है कि सिस्टम कितना निश्चित है कि इस विज़िटर की सही पहचान हुई है:
_vid_t cookie मेल खाती है, तो कॉन्फ़िडेंस अधिकतम होती है।बॉट डिटेक्शन इंजन कई डिटेक्टर चलाता है जिनके भारित आउटपुट को एक bot score में संयोजित किया जाता है (थ्रेशोल्ड: bot ≥ 0.70, suspicious ≥ 0.30; एक hard-fail सिग्नल बॉट फ़ैसले को बाध्य करता है)। योगदान देने वाले डिटेक्टरों में शामिल हैं:
सर्वर-साइड संवर्धन सिग्नल कच्चे सिग्नल डेटा और IP intelligence से गणना किए जाते हैं। इनमें VPN/proxy/Tor डिटेक्शन, IP geolocation, browser tampering विश्लेषण और suspect scoring शामिल हैं।
IP intelligence सबसिस्टम प्रदान करता है:
सर्वर एक JSON प्रतिक्रिया लौटाता है जिसमें शामिल है:
{ "visitorId": "X7fh2Hg9LkMn3pQr", "bot": { "detected": false, "confidence": 2, "reasons": [] }}यह वही परिणाम है जिसमें tracio.getResult() ब्राउज़र में resolve होता है। पूर्ण, समृद्ध की गई घटना — जिसमें कैनोनिकल bot_result (human / bot / uncertain), geolocation और smart signals शामिल हैं — सर्वर-साइड पर webhooks के माध्यम से वितरित की जाती है और dashboard में प्रदर्शित की जाती है।
क्लाइंट सत्रों के दौरान बने रहने के लिए एक विज़िटर token को एक first-party cookie (365-दिन की समाप्ति, SameSite=Lax) और localStorage दोनों में संग्रहीत करता है।
| चरण | स्थान | अवधि | विवरण |
|---|---|---|---|
| 1 | Browser | ~5ms | एजेंट आरंभ करें, साझा iframe बनाएँ |
| 2 | Browser | ~50-150ms | 130+ सिग्नल एकत्र करें (समानांतर, बहु-चरणीय) |
| 3 | Browser | ~5ms | payload एन्क्रिप्ट और संपीड़ित करें |
| 4 | Network | ~10-50ms | सर्वर को POST |
| 5 | Server | ~5-20ms | डिक्रिप्ट, सिग्नल निकालें, विज़िटर ID गणना |
| 6 | Server | ~5-15ms | बॉट डिटेक्शन और smart signals चलाएँ |
| 7 | Server | ~5ms | प्रतिक्रिया बनाएँ |
| 8 | Network | ~10-50ms | JSON प्रतिक्रिया लौटाएँ |
| 9 | Browser | ~1ms | विज़िटर cookie संग्रहीत करें |
कुल राउंड-ट्रिप: नेटवर्क स्थितियों और ब्राउज़र क्षमताओं के आधार पर सामान्यतः 80-300ms।