TRACIO एक क्लाइंट-सर्वर पहचान प्रणाली है। क्लाइंट ब्राउज़र सिग्नल एकत्र करता है और उन्हें सर्वर को भेजता है, जो एक स्थिर विज़िटर आइडेंटिफ़ायर की गणना करता है, डिटेक्शन एल्गोरिदम चलाता है और समृद्ध किए गए परिणाम लौटाता है। यह अनुभाग पाइपलाइन के प्रत्येक चरण को समझाता है।
Browser TRACIO Cloud | | |-- Tracio.init({ publicKey }) ---------> | (init, no network) | | |-- tracio.getResult() ----------------> | | 1. Collect 300+ 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() को कॉल किया जाता है, तो क्लाइंट टियर में संगठित 300+ अलग-अलग ब्राउज़र सिग्नल एकत्र करता है। संग्रह प्रदर्शन के लिए Web Workers और साझा iframes के साथ एक बहु-चरणीय पाइपलाइन का उपयोग करता है।
एजेंट 15 श्रेणियों में फैले 300+ सिग्नल भेजता है:
| श्रेणी | सिग्नल | श्रेणी | सिग्नल |
|---|---|---|---|
| Tamper | 82 | Fonts | 15 |
| Navigator | 72 | Network | 15 |
| Bot | 32 | Persistence | 14 |
| Canvas | 26 | Intl | 13 |
| CSS | 19 | Audio | 12 |
| Privacy | 17 | Storage | 12 |
| Crypto | 16 | Behavioral | 5 |
| Display | 15 |
Canvas में 2D रेंडरिंग के साथ-साथ WebGL और WebGPU भी शामिल हैं; Tamper सबसे बड़ी श्रेणी इसलिए है क्योंकि बदले हुए परिवेश को पहचानने में उतने ही परिवेश को बिना छेड़छाड़ के पढ़ने की तुलना में अधिक जाँचें लगती हैं।
संग्रह पाइपलाइन मुख्य थ्रेड की ब्लॉकिंग को न्यूनतम करने के लिए चार चरणों में चलती है:
चरण 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 बनाता है; एक hard-fail सिग्नल अपने आप ही बॉट फ़ैसला तय कर देता है। सार्वजनिक bot.score 0..100 के पैमाने पर होता है और फ़ैसला आपको bot.result के रूप में मिलता है। सटीक थ्रेशोल्ड प्रकाशित नहीं किए जाते — जो थ्रेशोल्ड पढ़ा जा सकता है, उसी के हिसाब से ढला भी जा सकता है। योगदान देने वाले डिटेक्टरों में शामिल हैं:
instrumentation (Frida), root/jailbreak और क्लोन किए गए ऐप के डिटेक्टर प्लेटफ़ॉर्म में मौजूद हैं, लेकिन उनके इनपुट स्लॉट केवल नेटिव हैं — ब्राउज़र एजेंट उन्हें एकत्र नहीं करता, इसलिए वे वेब फ़ैसले में शामिल नहीं होते। वेब पर पूरी तरह सक्रिय क्या है, यह देखने के लिए बॉट डिटेक्शन देखें।
सर्वर-साइड संवर्धन सिग्नल कच्चे सिग्नल डेटा और IP intelligence से गणना किए जाते हैं। इनमें VPN/proxy/Tor डिटेक्शन, IP geolocation, browser tampering विश्लेषण और suspect scoring शामिल हैं।
IP intelligence सबसिस्टम प्रदान करता है:
सर्वर एक JSON प्रतिक्रिया लौटाता है जिसमें शामिल है:
{ "visitorId": "X7fh2Hg9LkMn3pQr5tBvQw3xZa9mK2pL4nR8dT6y", "bot": { "detected": false, "confidence": 2, "reasons": [] }}यह वही परिणाम है जिसमें tracio.getResult() ब्राउज़र में resolve होता है। पूर्ण, समृद्ध की गई घटना — जिसमें कैनोनिकल bot_result (human / bot / uncertain), geolocation और smart signals शामिल हैं — सर्वर-साइड पर webhooks के माध्यम से वितरित की जाती है, Data API के ज़रिए पढ़ी जा सकती है और dashboard में प्रदर्शित की जाती है।
क्लाइंट सत्रों के दौरान बने रहने के लिए एक विज़िटर token को एक first-party cookie (365-दिन की समाप्ति, SameSite=Lax) और localStorage दोनों में संग्रहीत करता है।
| चरण | स्थान | विवरण |
|---|---|---|
| 1 | Browser | एजेंट आरंभ करें, साझा iframe बनाएँ |
| 2 | Browser | 300+ सिग्नल एकत्र करें (समानांतर, बहु-चरणीय) |
| 3 | Browser | payload एन्क्रिप्ट और संपीड़ित करें |
| 4 | Network | सर्वर को POST |
| 5 | Server | डिक्रिप्ट, सिग्नल निकालें, विज़िटर ID गणना |
| 6 | Server | बॉट डिटेक्शन और smart signals चलाएँ |
| 7 | Server | प्रतिक्रिया बनाएँ |
| 8 | Network | JSON प्रतिक्रिया लौटाएँ |
| 9 | Browser | विज़िटर cookie संग्रहीत करें |
कुल राउंड-ट्रिप: मिलीसेकंडों में। इसका बड़ा हिस्सा सिग्नल संग्रह लेता है — नेटवर्क की आवाजाही और सर्वर-साइड कार्य उससे छोटा हिस्सा हैं — और यह विज़िटर के डिवाइस तथा कनेक्शन पर निर्भर करता है। इससे पेज की रेंडरिंग नहीं रुकती: एजेंट एसिंक्रोनस रूप से लोड होता है और जो भी जाँच धीमी हो सकती है, वह अपने-अपने timeout से सीमित रहती है।