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
class e extends Error{constructor(e){super(e),this.name="SitelineError"}}class t extends e{constructor(e){super(e),this.name="SitelineValidationError"}}class i extends e{constructor(e){super(e),this.name="SitelineTransportError"}}class s{constructor(e){if(!e.websiteKey)throw new t("[Siteline] Missing websiteKey.");this.key=e.websiteKey,this.endpoint=e.endpoint||"https://api.siteline.ai/v1/intake/pageview",this.debug=e.debug||!1,this.sdk=e.sdk||"@siteline/js",this.sdkVersion=e.sdkVersion||"1.0.8",this.integrationType=e.integrationType||"js",this.debug&&console.log("[Siteline] Siteline initialized")}async track(e){const t=this.sanitize(e);try{return await 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,acceptHeader:e.acceptHeader?(e.acceptHeader+"").slice(0,1024):null,integrationType:this.integrationType.slice(0,50),sdk:this.sdk.slice(0,50),sdkVersion: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,{endpoint:this.endpoint,sdk:this.sdk,sdkVersion:this.sdkVersion,integrationType:this.integrationType}):console.error("[Siteline] HTTP error:",i.status))}catch(e){this.debug&&console.error("[Siteline] Network error:",e.message)}finally{clearTimeout(i)}}}export{s as Siteline,e as SitelineError,i as SitelineTransportError,t as SitelineValidationError}; //# sourceMappingURL=index.mjs.map