ब्राउज़र रनटाइम
यह गाइड बताती है कि Noxtica SDK आपके विज़िटरों के ब्राउज़र के अंदर कैसे काम करता है — एक आकलन के दौरान क्या होता है, कैशिंग चीज़ें कैसे तेज़ रखती है, और सामान्य समस्याओं का निवारण कैसे करें।
यह कैसे काम करता है
जब आप अपने पेज पर Noxtica SDK जोड़ते हैं, तो यह चुपचाप चार काम करता है:
- प्रमाणीकरण: आपकी Site Key से साइन इन करता है — क्रेडेंशियल खुद मैनेज करता है
- संग्रह: ब्राउज़र के रोज़मर्रा के सिग्नल पढ़ता है
- सबमिट: उन्हें स्कोरिंग के लिए Noxtica को भेजता है
- कैश: परिणाम स्थानीय रूप से स्टोर करता है ताकि हर विज़िट पर काम दोबारा न हो
यह सब पेज के पीछे चलता है और आपके पेज को कभी नहीं रोकता।
संग्रह का प्रवाह
स्वचालित (अनुशंसित)
data-auto-check-once इस्तेमाल करते समय, SDK स्मार्ट संग्रह उपयोग करता है:
<script
src="https://collect.noxtica.com/collector/noxtica.js"
data-site-key="pk_prod_your_site_key"
data-auto-init
data-auto-check-once
async
></script>
Content Security Policy इस्तेमाल कर रहे हैं? आपको Noxtica को लोड होने और उसका छेड़छाड़-रोधी रनटाइम, KHAN VM, चलाने देना होगा। अगर यह संभव न हो, तो Noxtica हल्के संग्रह पर काम करता रहता है — बस छेड़छाड़ सुरक्षा कमज़ोर हो जाती है। सटीक स्निपेट के लिए Getting Started → Content Security Policy देखें।
पहली विज़िट: पूरा आकलन होता है और परिणाम कैश होता है।
बाद की विज़िट (कैश विंडो के अंदर): कैश किया हुआ परिणाम लौटाया जाता है और एक हल्की विज़िट दर्ज होती है। भारी काम नहीं चलता।
कैश विंडो के बाद: एक नया आकलन होता है।
मैन्युअल नियंत्रण
प्रोग्रामेटिक नियंत्रण के लिए checkOnce() मेथड इस्तेमाल करें:
const client = NoxticaCollector.createClient({
siteKey: 'pk_prod_your_site_key',
});
const result = await client.checkOnce();
if (result.fromCache) {
console.log('Using cached fingerprint');
console.log('Next collection in:', result.nextSubmitIn, 'days');
} else {
console.log('Fresh fingerprint collected');
}
कैशिंग व्यवहार
SDK हर परिणाम ब्राउज़र में कैश करता है ताकि हर पेज व्यू पर एक ही विज़िटर का दोबारा आकलन न हो।
कैश की
nox_fp_{your_site_key}
क्या कैश होता है
- Device ID
- अंतिम सबमिशन टाइमस्टैम्प
- अंतिम बार देखा गया टाइमस्टैम्प
- पिछला जोखिम स्कोर और स्तर
TTL (Time-To-Live)
डिफ़ॉल्ट कैश TTL 7 दिन है। इसे कॉन्फ़िगर किया जा सकता है:
// Override at collection time
const result = await client.checkOnce({
checkIntervalDays: 14, // 14 days instead of 7
});
// Or in seconds
const result = await client.checkOnce({
ttlSeconds: 86400, // 1 day
});
Force Refresh
कैश को बायपास करके नया फिंगरप्रिंट इकट्ठा करने के लिए:
const result = await client.checkOnce({
forceRefresh: true,
});
Cross-Tab समन्वय
जब कोई विज़िटर आपकी साइट के एक साथ कई टैब खोलता है, SDK यह सुनिश्चित करता है कि आकलन सिर्फ एक बार हो:
- सिर्फ एक टैब असली काम करता है
- बाकी टैब प्रतीक्षा करते हैं और वही परिणाम साझा करते हैं
यह अपने आप होता है — कोई कॉन्फ़िगरेशन ज़रूरी नहीं।
इवेंट
SDK ऐसे इवेंट भेजता है जिन्हें आप सुन सकते हैं:
noxtica:collected
सफल संग्रह के बाद या कैश परिणाम लौटाने पर fire होता है:
document.addEventListener('noxtica:collected', (e) => {
console.log('Fingerprint ID:', e.detail.fingerprintId);
console.log('Risk Level:', e.detail.risk_level);
console.log('Score:', e.detail.score);
console.log('From Cache:', e.detail.fromCache);
});
noxtica:cache-hit
खास तौर पर तब fire होता है जब कैश किया हुआ परिणाम लौटाया जाता है:
document.addEventListener('noxtica:cache-hit', (e) => {
console.log('Cache hit, days since submission:', e.detail.daysSinceSubmit);
});
noxtica:error
संग्रह विफल होने पर fire होता है:
document.addEventListener('noxtica:error', (e) => {
console.log('Error source:', e.detail.source);
console.log('Error message:', e.detail.message);
});
ग्लोबल वेरिएबल
संग्रह के बाद, परिणाम ग्लोबल रूप से उपलब्ध होते हैं:
// After collection completes
console.log(window.noxticaResult);
// Client instance (when using auto-init)
console.log(window.noxticaClient);
// Last error (if any)
console.log(window.noxticaLastError);
त्रुटि प्रबंधन
सामान्य त्रुटियाँ
| त्रुटि | कारण | समाधान |
|---|---|---|
origin_mismatch | Site Key आपके domain से मेल नहीं खाती | जाँचें कि आपका domain Backoffice में पंजीकृत है |
invalid_site_key | Site Key नहीं मिली या अक्षम है | अपनी Site Key जाँचें और domain सक्षम करें |
token_expired | Token ने 5-मिनट का TTL पार किया | स्वचालित — SDK नया token माँगेगा |
| Rate limit (429) | बहुत अधिक अनुरोध | संग्रह की आवृत्ति कम करें |
त्रुटियों को मैन्युअल रूप से संभालना
try {
const result = await client.collectAndSubmit();
} catch (error) {
if (error.message.includes('origin_mismatch')) {
// Site key configuration issue
} else if (error.message.includes('rate')) {
// Back off and retry later
}
}
संग्रह मोड
SDK तीन संग्रह मोड का समर्थन करता है:
| मोड | विवरण | कब इस्तेमाल करें |
|---|---|---|
minimal | सिग्नल का एक छोटा मूल सेट | तेज़ संग्रह, कम-घर्षण परिदृश्य |
standard | सिग्नल का एक व्यापक सेट | अधिकांश उपयोग मामले (डिफ़ॉल्ट) |
max | सिग्नल का पूरा सेट | अधिकतम सटीकता, उच्च-सुरक्षा परिदृश्य |
const client = NoxticaCollector.createClient({
siteKey: 'pk_prod_...',
mode: 'max', // or 'minimal', 'standard'
});
Protected Mode (KHAN VM)
बॉट्स से लड़ने की सबसे कठिन बात यह है कि ब्राउज़र में चलने वाली कोई भी चीज़ सिद्धांत रूप से दिखाई और संपादन योग्य है। एक दृढ़ हमलावर पेज का कोड पढ़ सकता है, समझ सकता है कि क्या मापा जा रहा है, और चुपके से नकली जवाब दे सकता है।
KHAN VM इसकी लागत बढ़ा देता है। संग्रह को पेज पर पढ़े जाने वाले कोड के रूप में खुले में छोड़ने की बजाय, Noxtica संवेदनशील हिस्से को एक सील्ड, सैंडबॉक्स्ड रनटाइम के अंदर चलाता है। वह तर्क जो तय करता है कि क्या मापना है, किसी हमलावर के लिए पढ़ने और फिर से लिखने के लिए खुले में नहीं होता — और जो परिणाम तैयार होता है, वह ब्राउज़र छोड़ने से पहले सील हो जाता है, इसलिए उससे छेड़छाड़ करना या उसे दोबारा भेजना बहुत मुश्किल है।
KHAN VM से क्या फ़ायदा:
- छेड़छाड़-रोधी परिणाम — आकलन सैंडबॉक्स के अंदर सील हो जाता है, इसलिए पेज के अन्य स्क्रिप्ट इसे चुपके से बदल या दोबारा भेज नहीं सकते।
- रिवर्स इंजीनियर करना कठिन — संग्रह का तर्क रनटाइम के अंदर छिपा रहता है, ब्राउज़र के डेवलपर टूल में पढ़ने योग्य नहीं।
- रीप्ले से सुरक्षा — हर परिणाम एक-बार का है और वेरीफाई किया जाता है, इसलिए एक कैप्चर किए गए जवाब को नकली विज़िटर दिखाने के लिए दोबारा इस्तेमाल नहीं किया जा सकता।
ईमानदार सीमाएँ — यह क्या नहीं करता:
- यह एक छेड़छाड़-रोधी सुविधा है, end-to-end encryption नहीं।
- अगर आपका पेज खुद compromise हो जाए (जैसे cross-site scripting की खामी से), तो उस पेज पर एक हमलावर वही raw ब्राउज़र सिग्नल देख सकता है जो Noxtica देखता है। KHAN VM प्रोसेसिंग और परिणाम की सुरक्षा करता है, उसके आसपास के पेज की नहीं।
KHAN VM सर्वर साइड से चालू होता है और आपके इंटीग्रेशन में कोई बदलाव नहीं चाहिए। अगर यह शुरू न हो पाए — जैसे content-security-policy इसे रोके — तो Noxtica हल्के संग्रह पर वापस आ जाता है ताकि डिटेक्शन काम करता रहे, बस छेड़छाड़ सुरक्षा कमज़ोर रहती है।
ब्राउज़र समर्थन
SDK आधुनिक ब्राउज़रों का समर्थन करता है:
| ब्राउज़र | न्यूनतम संस्करण |
|---|---|
| Chrome | 70+ |
| Firefox | 65+ |
| Safari | 12+ |
| Edge | 79+ |
पुराने ब्राउज़रों में सिग्नल की सटीकता कम हो सकती है लेकिन काम करते रहेंगे।
Debug Mode
समस्याओं के निवारण के लिए debug logging सक्षम करें:
// Before SDK loads
globalThis.NOXTICA_DEBUG = true;
// Or per-client
const client = NoxticaCollector.createClient({
siteKey: 'pk_prod_...',
debug: true,
});
// Or via script attribute
<script src="..." data-debug></script>;
Debug mode इन्हें लॉग करता है:
- संग्रह की प्रगति
- Token जीवनचक्र
- कैश हिट और मिस
- कोई भी त्रुटियाँ
नोट: Debug mode production में डिफ़ॉल्ट रूप से शांत रहता है। जब तक स्पष्ट रूप से सक्षम न किया जाए, कोई console output नहीं दिखता।
स्टोरेज संबंधी विचार
ब्राउज़र स्टोरेज
SDK परिणाम कैश करने के लिए ब्राउज़र के local storage का उपयोग करता है। अगर यह उपलब्ध न हो (जैसे private browsing में या storage बंद होने पर):
- डिटेक्शन फिर भी काम करता है
- हर पेज लोड पर नया आकलन होता है
- Cross-tab समन्वय कम हो सकता है
कोई Cookies नहीं
SDK cookies का उपयोग नहीं करता। उसे जो भी चाहिए, वह ब्राउज़र के local storage में रखता है।
प्रदर्शन पर असर
पहली विज़िट
| ऑपरेशन | सामान्य समय |
|---|---|
| Token request | 50-100ms |
| Signal collection | 200-500ms |
| Submission | 50-150ms |
| कुल | 300-750ms |
संग्रह asynchronously चलता है और पेज रेंडरिंग को नहीं रोकता।
बाद की विज़िट (कैश हिट)
| ऑपरेशन | सामान्य समय |
|---|---|
| Cache check | <1ms |
| Visit recording | 50-100ms |
| कुल | 50-100ms |
समस्या निवारण
फिंगरप्रिंट इकट्ठा नहीं हो रहा
- त्रुटियों के लिए ब्राउज़र console जाँचें
- जाँचें कि Site Key आपके domain से बिल्कुल मेल खाती है (
https://सहित) - सुनिश्चित करें कि domain Backoffice में सक्षम है
- विस्तृत logs के लिए debug mode सक्षम करें
”WebAssembly blocked by Content Security Policy”
अगर ब्राउज़र console में यह चेतावनी दिखे, तो आपके पेज की content-security-policy छेड़छाड़-रोधी रनटाइम (KHAN VM) को रोक रही है। डिटेक्शन हल्के मोड में काम करता रहता है, लेकिन इसे अनुमति देकर आप सबसे मज़बूत सुरक्षा पा सकते हैं।
Noxtica को लोड और चलाने देने के लिए नीचे दिया स्निपेट इस्तेमाल करें:
Content-Security-Policy: script-src 'self' 'wasm-unsafe-eval' https://collect.noxtica.com; connect-src 'self' https://collect.noxtica.com
पूरे संदर्भ के लिए Getting Started → Content Security Policy देखें।
एक ही Device पर अलग-अलग Device IDs
यह तब हो सकता है जब:
- ब्राउज़र का स्टोरेज डेटा साफ़ किया गया हो
- ब्राउज़र प्रोफ़ाइल बदली हो
- विज़िटर private/incognito मोड में हो
- ब्राउज़र का बड़ा अपडेट हुआ हो
यह अपेक्षित है — पहचान समय के साथ device के बदलाव के अनुसार अनुकूलित होती है।
संग्रह में बहुत समय लग रहा है
- धीमी API प्रतिक्रियाओं के लिए network tab जाँचें
- तेज़ संग्रह के लिए
mode: 'minimal'इस्तेमाल करने पर विचार करें - सुनिश्चित करें कि SDK
asyncattribute के साथ लोड हो रहा है
Events Fire नहीं हो रहे
- सुनिश्चित करें कि SDK चलने से पहले आप सुन रहे हैं
- जाँचें कि auto-init attributes सही हैं
- सत्यापित करें कि कोई JavaScript त्रुटि execution को रोक नहीं रही
सर्वोत्तम प्रथाएँ
-
data-auto-collectकी जगहdata-auto-check-onceइस्तेमाल करें — अनावश्यक संग्रह कम होगा -
SDK को
asyncattribute के साथ asynchronously लोड करें — पेज लोड नहीं रुकेगा -
window.noxticaResultको poll करने की बजाय events सुनें -
TTL को बिना ज़रूरत override न करें — डिफ़ॉल्ट 7-दिन का अंतराल अधिकांश मामलों के लिए बेहतर है
-
त्रुटियों को सहजता से संभालें — संग्रह विफल होने पर आपका पेज नहीं टूटना चाहिए
अगले चरण
- Getting Started — प्रारंभिक सेटअप गाइड
- Backend Integration — server-side device lookups