UNPKG

@siteline/core

Version:

Core tracking SDK for Siteline - Agent Analytics platform for tracking AI agents, bots, and crawlers

3 lines (2 loc) 1.99 kB
"use strict";class e extends Error{constructor(e){super(e),this.name="SitelineError"}}class t extends e{constructor(e){super(e),this.name="SitelineValidationError"}}const i=/^siteline_secret_[a-f0-9]{32}$/;exports.Siteline=class{constructor(e){if(!e.websiteKey?.match(i))throw new t("Invalid websiteKey format. Expected: siteline_secret_<32 hex chars>");if(this.key=e.websiteKey,this.endpoint=e.endpoint||"https://siteline.ai/v1/intake/pageview",this.debug=e.debug||!1,this.sdk=e.sdk||"@siteline/core",this.sdkVersion=e.sdkVersion||"1.0.1",this.integrationType=e.integrationType||"custom",!this.endpoint.startsWith("https://"))throw new t("Endpoint must use HTTPS");this.debug&&console.log("[Siteline] Siteline initialized")}track(e){const t=this.sanitize(e);this.send(t).catch(e=>{this.debug&&console.error("[Siteline] Track failed:",e.message)})}sanitize(e){return{websiteKey:this.key,url:(e.url+"").slice(0,2048),method:(e.method+"").toUpperCase().slice(0,10),status:Math.max(0,Math.min(999,Number(e.status)||0)),duration:Math.max(0,Math.min(3e5,Number(e.duration)||0)),userAgent:e.userAgent?(e.userAgent+"").slice(0,512):null,ref:e.ref?(e.ref+"").slice(0,2048):null,ip:e.ip?(e.ip+"").slice(0,45):null,integration_type:this.integrationType.slice(0,50),sdk:this.sdk.slice(0,50),sdk_version:this.sdkVersion.slice(0,20)}}async send(e){const t=new AbortController,i=setTimeout(()=>t.abort(),5e3);try{const i=await fetch(this.endpoint,{method:"POST",headers:{"Content-Type":"application/json","User-Agent":`${this.sdk}/${this.sdkVersion}`},body:JSON.stringify(e),signal:t.signal});this.debug&&(i.ok?console.log("[Siteline] Tracked:",e.url):console.error("[Siteline] HTTP error:",i.status))}catch(e){this.debug&&console.error("[Siteline] Network error:",e.message)}finally{clearTimeout(i)}}},exports.SitelineError=e,exports.SitelineTransportError=class extends e{constructor(e){super(e),this.name="SitelineTransportError"}},exports.SitelineValidationError=t; //# sourceMappingURL=index.cjs.map