تجمع حزمة TRACIO JavaScript SDK (@tracio/sdk) إشارات المتصفح وترسلها إلى سحابة TRACIO لتعريف الزوار وكشف الروبوتات. وهي خفيفة الوزن وغير حاجبة ومتوافقة مع جميع المتصفحات الحديثة.
npm install @tracio/sdkتُشحن الحزمة بإصدارات ESM وCJS وIIFE مع أنواع TypeScript كاملة.
هناك طريقتان لاستخدام TRACIO من شبكة CDN دون أداة تجميع (bundler).
يقوم سكربت الحافة بالتهيئة تلقائيًا باستخدام المفتاح العام في معامل الاستعلام k. لا حاجة إلى أي JavaScript:
<script src="https://edge.tracio.ai/s.js?k=PUBLIC_KEY" async></script>يمكنك أيضًا تحميل حزمة npm المنشورة من unpkg أو jsDelivr. وهي تتيح متغيرًا عامًا باسم TracioSDK. ثبّت إصدارًا محددًا:
<script src="https://unpkg.com/@tracio/sdk@0.1.3/dist/index.min.js"></script><script> const tracio = TracioSDK.Tracio.init({ publicKey: "5ca175fc..." })</script>تُهيّئ الحزمة وتُعيد TracioInstance بشكل متزامن. يُحمّل الوكيل (agent) في الخلفية؛ وتُحل توابع النسخة (instance) بمجرد جاهزيته.
import { Tracio } from "@tracio/sdk"
const tracio = Tracio.init({ publicKey: "5ca175fc...",})interface TracioConfig { publicKey: string // required region?: "us" | "eu" endpoint?: string scriptUrl?: string linkedId?: string tag?: string debug?: boolean timeoutMs?: number // default 15000}| الخيار | النوع | الافتراضي | الوصف |
|---|---|---|---|
publicKey | string | مطلوب | مفتاحك العام. انسخه من لوحة التحكم الخاصة بك. |
region | "us" | "eu" | لا شيء | منطقة بيانات اختيارية. عند عدم تعيينها، تستخدم الحزمة النقطة الطرفية العامة https://edge.tracio.ai (دون إقامة بيانات ضمنية في الولايات المتحدة). عيّنها صراحةً لتثبيت us أو eu. |
endpoint | string | تلقائي | نقطة طرفية مخصصة لواجهة API (لنقطة طرفية موكَّلة كطرف أول). |
scriptUrl | string | تلقائي | عنوان URL مخصص لسكربت الوكيل (لنقطة طرفية موكَّلة كطرف أول). |
linkedId | string | لا شيء | معرّف يربط هذا الزائر بكيان في نظامك. |
tag | string | لا شيء | تسمية حرة الصيغة تُرفق بالطلب لتصفيته لاحقًا. |
debug | boolean | false | يسجّل تشخيصات مفصّلة في وحدة التحكم (console). |
timeoutMs | number | 15000 | مدة انتظار النتيجة قبل انتهاء المهلة. |
يؤدي استدعاء Tracio.init() أكثر من مرة بمفتاح عام مختلف إلى إطلاق خطأ multiple_keys.
تُعيد Promise<string> يُحل إلى معرّف الزائر المستقر.
const visitorId = await tracio.getVisitorId()// "X7fh2Hg9LkMn3pQr"تُعيد Promise<TracioResult> يحوي معرّف الزائر ونتيجة كشف الروبوتات.
const result = await tracio.getResult()
console.log(result.visitorId)
if (result.bot.detected) { console.warn("bot, confidence:", result.bot.confidence)}interface TracioResult { visitorId: string bot: { detected: boolean confidence: number // 0-100 reasons?: string[] }}تُستدعى بمجرد تحميل الوكيل وإنتاجه نتيجة.
tracio.onReady((result) => { console.log("ready:", result.visitorId)})تُستدعى عندما تواجه الحزمة خطأً.
tracio.onError((error) => { console.error("tracio error:", error.code, error.message)})تُفكّك النسخة وتحرّر الموارد. تُرفض الاستدعاءات اللاحقة بخطأ destroyed.
tracio.destroy()تُطلق الحزمة نسخًا من TracioError تحمل رمز code مُصنَّفًا. استخدم المساعدين isTracioError وisRetryableError للتفرع:
import { Tracio, isTracioError, isRetryableError } from "@tracio/sdk"
const tracio = Tracio.init({ publicKey: "5ca175fc..." })
try { const result = await tracio.getResult()} catch (error) { if (isTracioError(error)) { if (isRetryableError(error)) { // load_failed / blocked / script_error / network / timeout / server — safe to retry } console.error("TRACIO error:", error.code, error.message) } else { console.error("Unexpected error:", error) }}يشمل الاتحاد TracioErrorCode ما يلي:
| الرمز | الوصف |
|---|---|
blocked | حُجب الطلب (مثلًا بواسطة مانع إعلانات). |
destroyed | فُكّكت النسخة قبل اكتمال الاستدعاء. |
invalid_config | الإعداد غير صالح (مثلًا publicKey مفقود). |
load_failed | فشل تحميل سكربت الوكيل. |
multiple_keys | استُدعي Tracio.init() بمفتاح عام متعارض. |
network | فشل طلب شبكي. |
non_browser | استُخدمت الحزمة خارج بيئة متصفح. |
script_error | أطلق سكربت الوكيل خطأً في وقت التشغيل. |
server | أعاد الخادم خطأً. |
timeout | تجاوز الطلب timeoutMs. |
الرموز load_failed وblocked وscript_error وnetwork وtimeout وserver قابلة لإعادة المحاولة؛ وتُعيد isRetryableError(error) القيمة true لها.
لأطر React وVue وAngular وSvelte، استخدم حزم أطر العمل المخصصة بدلًا من ربط الحزمة الأساسية يدويًا:
تغلّف كل منها @tracio/sdk وتتيح عناصر أولية اصطلاحية (مزوّدات، وإضافات، وخطافات، ومركّبات، وخدمات). راجع نظرة عامة على حزم SDK للاطلاع على مقتطفات خاصة بكل إطار.
Tracio.init() بشكل متزامن وتحمّل الوكيل في الخلفية. ولا تحجب عرض الصفحة.timeoutMs (افتراضيًا 15000 مللي ثانية)، بحيث لا تعلّق شبكة بطيئة شيفرتك إلى ما لا نهاية.