TRACIO JavaScript SDK (@tracio/sdk) รวบรวมสัญญาณจากเบราว์เซอร์และส่งไปยัง TRACIO cloud เพื่อระบุตัวตนผู้เข้าชมและตรวจจับบอท มันมีขนาดเล็ก ไม่บล็อกการทำงาน (non-blocking) และเข้ากันได้กับเบราว์เซอร์สมัยใหม่ทุกตัว
npm install @tracio/sdkแพ็กเกจนี้มาพร้อมกับ build แบบ ESM, CJS และ IIFE พร้อม TypeScript types ครบถ้วน
มีสองวิธีในการใช้ TRACIO จาก CDN โดยไม่ต้องใช้ bundler
Edge script จะเริ่มต้นใช้งานโดยอัตโนมัติด้วย public key ใน query parameter k โดยไม่ต้องเขียน JavaScript:
<script src="https://edge.tracio.ai/s.js?k=PUBLIC_KEY" async></script>คุณยังสามารถโหลด npm bundle ที่เผยแพร่แล้วจาก unpkg หรือ jsDelivr ได้ด้วย มันจะเปิดเผย global ชื่อ TracioSDK โปรดปักหมุด (pin) เวอร์ชันไว้:
<script src="https://unpkg.com/@tracio/sdk@0.1.3/dist/index.min.js"></script><script> const tracio = TracioSDK.Tracio.init({ publicKey: "5ca175fc..." })</script>เริ่มต้นใช้งาน SDK และคืนค่า TracioInstance แบบ synchronous agent จะโหลดในเบื้องหลัง และเมธอดของ instance จะ resolve เมื่อพร้อมใช้งาน
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 | จำเป็น | Public key ของคุณ คัดลอกจาก dashboard ของคุณ |
region | "us" | "eu" | ไม่มี | data region แบบไม่บังคับ เมื่อไม่ได้ตั้งค่า SDK จะใช้ endpoint ทั่วไป https://edge.tracio.ai (ไม่มีนัยว่าข้อมูลตั้งอยู่ในสหรัฐฯ) ตั้งค่าอย่างชัดเจนเพื่อปักหมุดเป็น us หรือ eu |
endpoint | string | auto | API endpoint แบบกำหนดเอง (สำหรับ endpoint ที่ proxy แบบ first-party) |
scriptUrl | string | auto | URL แบบกำหนดเองสำหรับ agent script (สำหรับ endpoint ที่ proxy แบบ first-party) |
linkedId | string | ไม่มี | ตัวระบุที่เชื่อมโยงผู้เข้าชมรายนี้กับ entity ในระบบของคุณ |
tag | string | ไม่มี | ป้ายกำกับแบบอิสระที่แนบไปกับคำขอเพื่อใช้กรองในภายหลัง |
debug | boolean | false | บันทึกข้อมูลวินิจฉัยแบบละเอียดลงใน console |
timeoutMs | number | 15000 | ระยะเวลาที่รอผลลัพธ์ก่อนจะหมดเวลา (timeout) |
การเรียก Tracio.init() มากกว่าหนึ่งครั้งด้วย public key ที่ต่างกันจะทำให้เกิดข้อผิดพลาด multiple_keys
คืนค่า Promise<string> ที่ resolve เป็นตัวระบุผู้เข้าชมที่คงที่
const visitorId = await tracio.getVisitorId()// "X7fh2Hg9LkMn3pQr"คืนค่า Promise<TracioResult> พร้อมกับ visitor ID และผลการตรวจจับบอท
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[] }}ถูกเรียกเมื่อ agent โหลดเสร็จและสร้างผลลัพธ์แล้ว
tracio.onReady((result) => { console.log("ready:", result.visitorId)})ถูกเรียกเมื่อ SDK พบข้อผิดพลาด
tracio.onError((error) => { console.error("tracio error:", error.code, error.message)})รื้อ instance และคืนทรัพยากร การเรียกครั้งต่อ ๆ ไปจะถูก reject ด้วยข้อผิดพลาด destroyed
tracio.destroy()SDK จะโยน (throw) instance ของ TracioError พร้อมกับ code ที่มีการกำหนดประเภทไว้ ใช้ helper 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) }}Union TracioErrorCode ครอบคลุม:
| Code | คำอธิบาย |
|---|---|
blocked | คำขอถูกบล็อก (เช่น โดย ad blocker) |
destroyed | instance ถูกทำลายก่อนที่การเรียกจะเสร็จสมบูรณ์ |
invalid_config | การกำหนดค่าไม่ถูกต้อง (เช่น ไม่มี publicKey) |
load_failed | agent script โหลดไม่สำเร็จ |
multiple_keys | Tracio.init() ถูกเรียกด้วย public key ที่ขัดแย้งกัน |
network | คำขอผ่านเครือข่ายล้มเหลว |
non_browser | SDK ถูกใช้นอกสภาพแวดล้อมเบราว์เซอร์ |
script_error | agent script เกิดข้อผิดพลาดขณะรันไทม์ |
server | server คืนค่าข้อผิดพลาด |
timeout | คำขอใช้เวลาเกิน timeoutMs |
load_failed, blocked, script_error, network, timeout และ server สามารถลองใหม่ได้ (retryable) โดย isRetryableError(error) จะคืนค่า true สำหรับรหัสเหล่านี้
สำหรับ React, Vue, Angular และ Svelte ให้ใช้แพ็กเกจ framework เฉพาะทางแทนการต่อ core SDK เข้าด้วยมือ:
แต่ละแพ็กเกจห่อหุ้ม @tracio/sdk และเปิดเผย primitive ที่เป็นสำนวนเฉพาะของแต่ละ framework (providers, plugins, hooks, composables และ services) ดู snippet ของแต่ละ framework ได้ที่ ภาพรวม SDKs
Tracio.init() คืนค่าแบบ synchronous และโหลด agent ในเบื้องหลัง มันไม่บล็อกการเรนเดอร์หน้าเว็บtimeoutMs (ค่าเริ่มต้น 15000ms) เพื่อให้เครือข่ายที่ช้าไม่ทำให้โค้ดของคุณค้างอย่างไม่มีกำหนด