@sentientui/core 0.6.0 → 0.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -3
- package/dist/chunk-PXHX4K5R.mjs +1 -0
- package/dist/index-graph.js +1 -1
- package/dist/index-graph.mjs +1 -1
- package/dist/index-server.js +1 -1
- package/dist/index-server.mjs +1 -1
- package/dist/index.d.cts +2 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.js +1 -1
- package/dist/index.mjs +1 -1
- package/package.json +1 -1
- package/dist/chunk-GL5EXCWW.mjs +0 -1
package/README.md
CHANGED
|
@@ -16,7 +16,7 @@ npm install @sentientui/core
|
|
|
16
16
|
import { init } from '@sentientui/core';
|
|
17
17
|
|
|
18
18
|
const client = init({
|
|
19
|
-
apiKey: 'pk_your_key', // from
|
|
19
|
+
apiKey: 'pk_your_key', // from sentient-ui.com → Settings
|
|
20
20
|
context: 'saas', // 'landing' | 'ecommerce' | 'saas' | 'marketplace'
|
|
21
21
|
});
|
|
22
22
|
|
|
@@ -29,7 +29,7 @@ console.log(result?.content); // managed text content if the variant is WYSI
|
|
|
29
29
|
client.goal('trial_started', { plan: 'pro' });
|
|
30
30
|
```
|
|
31
31
|
|
|
32
|
-
`init()` returns a no-op client during SSR (`typeof window === 'undefined'`), when `consent` is `false`, or when `apiKey` does not start with `pk_`. The hosted ingest URL (`https://sentient-
|
|
32
|
+
`init()` returns a no-op client during SSR (`typeof window === 'undefined'`), when `consent` is `false`, or when `apiKey` does not start with `pk_`. The hosted ingest URL (`https://api.sentient-ui.com/v1/events`) is built in — no URL configuration required.
|
|
33
33
|
|
|
34
34
|
## API
|
|
35
35
|
|
|
@@ -104,7 +104,7 @@ const initialAssignments = await preloadAssignments(
|
|
|
104
104
|
sessionId,
|
|
105
105
|
{
|
|
106
106
|
apiKey: process.env.SENTIENT_API_KEY!,
|
|
107
|
-
baseUrl: 'https://sentient-
|
|
107
|
+
baseUrl: 'https://api.sentient-ui.com/v1',
|
|
108
108
|
origin: process.env.APP_ORIGIN, // must be in the project's allowed origins
|
|
109
109
|
userAgent, // from request headers, aligns segment with the client
|
|
110
110
|
referer,
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as L,b as B,c as G,d as Q,e as F,f as z}from"./chunk-QCYVBCUV.mjs";var ee="_snt_uid";var C="_snt_uid";function te(){try{if(typeof crypto!="undefined"&&typeof crypto.randomUUID=="function")return crypto.randomUUID()}catch(t){}let e=()=>Math.floor(Math.random()*4294967295).toString(16).padStart(8,"0");return`${e()}-${e()}-${e()}-${e()}`}function ne(e){try{let t=document.cookie.match(new RegExp(`(?:^|; )${e}=([^;]*)`));return t?decodeURIComponent(t[1]):null}catch(t){return null}}function ie(e,t,a){try{document.cookie=`${e}=${encodeURIComponent(t)}; max-age=${a}; SameSite=strict; path=/`}catch(o){}}function se(e){try{return localStorage.getItem(e)}catch(t){return null}}function re(e,t){try{return localStorage.setItem(e,t),!0}catch(a){return!1}}function oe(e){try{return sessionStorage.getItem(e)}catch(t){return null}}function ae(e,t){try{return sessionStorage.setItem(e,t),!0}catch(a){return!1}}function ce(e){try{sessionStorage.removeItem(e)}catch(t){}}function le(e){try{return document.cookie=`${e}_probe=1; max-age=1; SameSite=strict; path=/`,/(?:^|; )_snt_uid_probe=1/.test(document.cookie)||document.cookie.indexOf(`${e}_probe=1`)!==-1}catch(t){return!1}}function de(e){try{localStorage.removeItem(e)}catch(t){}}function ue(e){try{document.cookie=`${e}=; max-age=0; SameSite=strict; path=/`}catch(t){}}var ge={getSessionId:()=>null,isEphemeral:()=>!1,destroy:()=>{}};function Y(e){var f,g,p,v,y;if(typeof window=="undefined")return ge;let t=(f=e==null?void 0:e.cookieName)!=null?f:ee,o=((g=e==null?void 0:e.cookieTTLDays)!=null?g:365)*24*60*60,i=(y=(v=(p=ne(t))!=null?p:se(C))!=null?v:oe(C))!=null?y:te();ie(t,i,o);let s=re(C,i),n=le(t),r=s?!1:ae(C,i),l=!s&&!n&&!r;return{getSessionId:()=>i,isEphemeral:()=>l,destroy:()=>{i=null,ue(t),de(C),ce(C)}}}var K="_snt_retry";var fe={push:()=>{},flush:()=>{},destroy:()=>{}};function me(e){try{let t=localStorage.getItem(K);if(!t)return[];let a=JSON.parse(t);return Array.isArray(a)?(localStorage.removeItem(K),a.slice(-e)):[]}catch(t){return[]}}function J(e,t){try{let o=[...(()=>{try{let i=localStorage.getItem(K);if(!i)return[];let s=JSON.parse(i);return Array.isArray(s)?s:[]}catch(i){return[]}})(),...e].slice(-t);localStorage.setItem(K,JSON.stringify(o))}catch(a){}}function q(e){var k,b,T;if(typeof window=="undefined")return fe;let t=(k=e.flushIntervalMs)!=null?k:5e3,a=(b=e.maxBatchSize)!=null?b:20,o=(T=e.maxRetrySize)!=null?T:100,i=e.ingestUrl,s=e.apiKey,n=[],r=new Set,l=[],f=c=>{for(let u of c)g.delete(u),!r.has(u)&&(r.add(u),l.push(u));for(;l.length>500;){let u=l.shift();u&&r.delete(u)}},g=new Set,p=c=>{r.has(c.id)||g.has(c.id)||(g.add(c.id),n.push(c))},v=me(o);for(let c of v)p(c);let y=0,w=0,R=c=>{if(c.length===0)return;let u=JSON.stringify(c),h=c.map(I=>I.id),E;try{E=fetch(i,{method:"POST",keepalive:!0,body:u,headers:{"Content-Type":"application/json",Authorization:`Bearer ${s}`}})}catch(I){J(c,o);for(let P of h)g.delete(P);w++,y=Date.now()+Math.min(6e4,1e3*2**Math.min(w,6));return}let _=I=>{if(I.ok||I.status>=400&&I.status<500&&I.status!==429){f(h),w=0,y=0;return}J(c,o);for(let P of h)g.delete(P);w++,y=Date.now()+Math.min(6e4,1e3*2**Math.min(w,6))};E instanceof Promise?E.then(_).catch(()=>{J(c,o);for(let I of h)g.delete(I);w++,y=Date.now()+Math.min(6e4,1e3*2**Math.min(w,6))}):_(E)},A=typeof TextEncoder!="undefined"?new TextEncoder:null,U=c=>A?A.encode(c).length:c.length,M=c=>{let u=[],h=2;for(let E of c){let _=U(JSON.stringify(E))+1;if(u.length>0&&h+_>57344||u.length>=a)break;u.push(E),h+=_}return u},x=()=>{try{if(Date.now()<y)return;for(;n.length>0;){let c=n.filter(h=>!r.has(h.id));if(n.length=0,c.length===0)break;let u=M(c);if(u.length===0)break;u.length<c.length&&n.push(...c.slice(u.length)),R(u)}}catch(c){}},D=!0,d=null;d=setInterval(()=>{D&&x()},t);let m=()=>{document.visibilityState==="hidden"&&x()},S=()=>{x()};return document.addEventListener("visibilitychange",m),window.addEventListener("beforeunload",S),{push(c){p(c),n.length>=a&&x()},flush:x,destroy(){D=!1,d!==null&&(clearInterval(d),d=null),document.removeEventListener("visibilitychange",m),window.removeEventListener("beforeunload",S),x()}}}var $="_snt_asgn_";function N(e,t){return`${e}:${t}`}function pe(e,t){return`${$}${e}_${t}`}function W(){try{let e=[];for(let t=0;t<localStorage.length;t++){let a=localStorage.key(t);a!=null&&a.startsWith($)&&e.push(a)}return e}catch(e){return[]}}function V(e=18e5){let t=new Map,a=i=>i.assignedAt+e<Date.now();return typeof window!="undefined"&&(()=>{for(let i of W())try{let s=localStorage.getItem(i);if(!s)continue;let n=JSON.parse(s);if(a(n)){localStorage.removeItem(i);continue}let r=i.slice($.length),l=r.lastIndexOf("_");if(l<0)continue;let f=r.slice(0,l),g=r.slice(l+1);t.set(N(f,g),n)}catch(s){}})(),{get(i,s){let n=t.get(N(i,s));return n?a(n)?(t.delete(N(i,s)),null):n:null},set(i,s,n){let r=N(i,s);t.set(r,n);try{localStorage.setItem(pe(i,s),JSON.stringify(n))}catch(l){}},invalidate(i){let s=`${i}:`;for(let n of[...t.keys()])n.startsWith(s)&&t.delete(n);for(let n of W()){let r=n.slice($.length),l=r.lastIndexOf("_");if(l<0)continue;if(r.slice(0,l)===i)try{localStorage.removeItem(n)}catch(g){}}},clear(){t.clear();for(let i of W())try{localStorage.removeItem(i)}catch(s){}}}}function ye(e,t,a){let o=[];{let n=!1,r=[],l=()=>{if(n)return;let f=Date.now();for(r.push(f);r.length>0&&f-r[0]>500;)r.shift();r.length>=3&&(n=!0,e("rage_click"))};t.addEventListener("click",l),o.push(()=>t.removeEventListener("click",l))}{let i=!1,s=n=>{if(i||!(n.target instanceof Node)||!t.contains(n.target)&&t!==n.target)return;i=!0;let r=typeof window!="undefined"?window.getSelection():null,l=r?r.toString().length:0;e("text_copy",{selectionLength:l})};document.addEventListener("copy",s),o.push(()=>document.removeEventListener("copy",s))}{let i=!1,s=!1,n=null,r=()=>{n!==null&&(clearTimeout(n),n=null)},l=()=>{i||!s||(r(),n=setTimeout(()=>{!i&&s&&(i=!0,e("scroll_hesitation"))},3e3))},f=()=>{r(),l()},g=v=>{for(let y of v)s=y.intersectionRatio>.3,s?l():r()};window.__lastIOCallback=g;let p=new IntersectionObserver(g,{threshold:[.3]});p.observe(t),window.addEventListener("scroll",f,{passive:!0}),o.push(()=>{p.disconnect(),window.removeEventListener("scroll",f),r()})}{let i=!1,s=a!=null?a:Date.now(),n=()=>{if(i||document.visibilityState!=="hidden")return;let r=Date.now()-s;r<15e3&&(i=!0,e("tab_loss",{timeOnPage:r}))};document.addEventListener("visibilitychange",n),o.push(()=>document.removeEventListener("visibilitychange",n))}return()=>{for(let i of o)i()}}var X="https://api.sentient-ui.com/v1/events",j=null,H=null;function he(){try{if(typeof crypto!="undefined"&&typeof crypto.randomUUID=="function")return crypto.randomUUID()}catch(e){}return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>{let t=Math.random()*16|0;return(e==="x"?t:t&3|8).toString(16)})}var O={track:()=>{},goal:()=>{},identify:()=>{},getAssignment:()=>null,assign:()=>Promise.resolve(null),getGraph:()=>({pageNodes:[],capturedAt:0}),destroy:()=>{}};function Se(){try{let e={},t=new URLSearchParams(window.location.search);for(let[a,o]of t)a.startsWith("utm_")&&(e[a]=o);return e}catch(e){return{}}}function Z(e){return e.replace(/\/events\/?$/,"")}function De(){if(typeof window=="undefined")return;if(!j){console.warn("[sentient] grantConsent() called before init()");return}let e=H;H=null;let t=we(B(L({},j),{consent:!0}));e==null||e(t)}function ve(e){var i;let t=Z((i=e.ingestUrl)!=null?i:X),a={"Content-Type":"application/json",Authorization:`Bearer ${e.apiKey}`},o={track:()=>{},goal:()=>{},identify:()=>{},getAssignment:()=>null,async assign(s,n,r){try{let l=new URLSearchParams({componentId:s});for(let p of n!=null?n:[])l.append("variantIds[]",p);let f=await fetch(`${t}/winner?${l.toString()}`,{headers:a});return f.ok?{variantId:(await f.json()).variantId,assignmentTtlMs:0}:n!=null&&n[0]?{variantId:n[0],assignmentTtlMs:0}:null}catch(l){return n!=null&&n[0]?{variantId:n[0],assignmentTtlMs:0}:null}},getGraph:()=>({pageNodes:[],capturedAt:0}),destroy:()=>{}};return H=s=>{o=s},{track:s=>o.track(s),goal:(s,n)=>o.goal(s,n),identify:s=>o.identify(s),getAssignment:(s,n)=>o.getAssignment(s,n),assign:(s,n,r,l)=>o.assign(s,n,r,l),getGraph:()=>o.getGraph(),destroy:()=>o.destroy()}}function we(e){var A,U,M,x,D;if(typeof window=="undefined")return O;if(j=e,e.consent===!1)return e.preConsentBehavior==="statistical_winner"?!e.apiKey||!e.apiKey.startsWith("pk_")?(console.warn("[sentient] init() called with an invalid apiKey \u2014 expected a pk_ public key. SDK disabled."),O):ve(e):O;if(!e.apiKey||!e.apiKey.startsWith("pk_"))return console.warn("[sentient] init() called with an invalid apiKey \u2014 expected a pk_ public key. SDK disabled."),O;if(e.ingestUrl==="")return console.warn("[sentient] init() called with an empty ingestUrl. SDK disabled."),O;let t=(A=e.ingestUrl)!=null?A:X,a=Date.now(),o=Y(),i=V(),s=q({ingestUrl:t,apiKey:e.apiKey}),n=Z(t),r={"Content-Type":"application/json",Authorization:`Bearer ${e.apiKey}`},l=G((U=navigator.userAgent)!=null?U:""),f=typeof window!="undefined"?window.location.origin:void 0,g=Q((M=document.referrer)!=null?M:"",f),p=(x=e.sessionSegment)!=null?x:`${l}:${g}`,v=new Map;if(e.initialAssignments)for(let[d,m]of Object.entries(e.initialAssignments))i.set(d,p,{variantId:m,assignedAt:Date.now(),segment:p,confidence:1});let y=Promise.resolve(),w=o.getSessionId();if(w){let d=F((D=document.referrer)!=null?D:""),m=L({sessionId:w,deviceClass:l,trafficSource:g,referrerDomain:d,utmParams:Se(),timeOfDay:z(new Date),dayOfWeek:["sun","mon","tue","wed","thu","fri","sat"][new Date().getDay()],ephemeral:o.isEphemeral()},e.userId?{userId:e.userId}:{});try{y=fetch(`${n}/sessions`,{method:"POST",keepalive:!0,body:JSON.stringify(m),headers:r}).then(S=>{S.status===402&&console.warn("[SentientUI] Session limit exceeded for this project. The bandit will stop learning until the limit resets. Upgrade at sentient-ui.com/pricing")}).catch(()=>{})}catch(S){}}e.debug&&(console.log("[sentient] initialized",{context:e.context}),window.__sentient={client:null,queue:s});let R={goal(d,m={},S=1,k=0){let b=o.getSessionId();b&&y.then(()=>{fetch(`${n}/goals`,{method:"POST",keepalive:!0,body:JSON.stringify({sessionId:b,name:d,metadata:m,weight:S,stepIndex:k}),headers:r}).catch(()=>{})})},identify(d){let m=o.getSessionId();m&&y.then(()=>{fetch(`${n}/sessions`,{method:"POST",keepalive:!0,body:JSON.stringify({sessionId:m,userId:d,ephemeral:o.isEphemeral()}),headers:r}).catch(()=>{})})},track(d){let m=o.getSessionId();if(!m)return;let S=B(L({},d),{id:he(),sessionId:m,timestamp:Date.now(),timeInSession:Date.now()-a});s.push(S),e.debug&&console.log("[sentient] track",S)},getAssignment(d,m){return i.get(d,m)},async assign(d,m,S,k){let b=o.getSessionId();if(!b)return null;let T=i.get(d,p);if(T)return{variantId:T.variantId,assignmentTtlMs:0,content:T.content};let c=v.get(d);if(c)return c;let u=(async()=>{await y;try{let h={sessionId:b,componentId:d,variantIds:m};k!==void 0?h.agentDataByVariant=k:S!==void 0&&(h.agentData=S);let E=await fetch(`${n}/assign`,{method:"POST",body:JSON.stringify(h),headers:r});if(!E.ok)return null;let _=await E.json();return i.set(d,p,{variantId:_.variantId,assignedAt:Date.now(),segment:p,confidence:1,content:_.content}),_}catch(h){return null}finally{v.delete(d)}})();return v.set(d,u),u},getGraph(){return{pageNodes:[],capturedAt:0}},destroy(){s.destroy(),o.destroy(),e.debug&&console.log("[sentient] destroyed")}};if(e.debug){let d=window;d.__sentient&&(d.__sentient.client=R)}return R}export{ye as a,De as b,we as c};
|
package/dist/index-graph.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var G=Object.defineProperty,le=Object.defineProperties,ge=Object.getOwnPropertyDescriptor,pe=Object.getOwnPropertyDescriptors,fe=Object.getOwnPropertyNames,X=Object.getOwnPropertySymbols;var ee=Object.prototype.hasOwnProperty,me=Object.prototype.propertyIsEnumerable;var Z=(e,t,n)=>t in e?G(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,D=(e,t)=>{for(var n in t||(t={}))ee.call(t,n)&&Z(e,n,t[n]);if(X)for(var n of X(t))me.call(t,n)&&Z(e,n,t[n]);return e},B=(e,t)=>le(e,pe(t));var he=(e,t)=>{for(var n in t)G(e,n,{get:t[n],enumerable:!0})},ye=(e,t,n,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of fe(t))!ee.call(e,i)&&i!==n&&G(e,i,{get:()=>t[i],enumerable:!(a=ge(t,i))||a.enumerable});return e};var Se=e=>ye(G({},"__esModule",{value:!0}),e);var it={};he(it,{deriveSessionSegment:()=>W,detectDeviceClass:()=>R,detectTimeOfDay:()=>L,detectTrafficSource:()=>M,init:()=>st,referrerDomainFromReferer:()=>U});module.exports=Se(it);var ve="_snt_uid";var N="_snt_uid";function we(){try{if(typeof crypto!="undefined"&&typeof crypto.randomUUID=="function")return crypto.randomUUID()}catch(t){}let e=()=>Math.floor(Math.random()*4294967295).toString(16).padStart(8,"0");return`${e()}-${e()}-${e()}-${e()}`}function Ee(e){try{let t=document.cookie.match(new RegExp(`(?:^|; )${e}=([^;]*)`));return t?decodeURIComponent(t[1]):null}catch(t){return null}}function Ie(e,t,n){try{document.cookie=`${e}=${encodeURIComponent(t)}; max-age=${n}; SameSite=strict; path=/`}catch(a){}}function be(e){try{return localStorage.getItem(e)}catch(t){return null}}function Ce(e,t){try{return localStorage.setItem(e,t),!0}catch(n){return!1}}function xe(e){try{return sessionStorage.getItem(e)}catch(t){return null}}function _e(e,t){try{return sessionStorage.setItem(e,t),!0}catch(n){return!1}}function Ae(e){try{sessionStorage.removeItem(e)}catch(t){}}function Te(e){try{return document.cookie=`${e}_probe=1; max-age=1; SameSite=strict; path=/`,/(?:^|; )_snt_uid_probe=1/.test(document.cookie)||document.cookie.indexOf(`${e}_probe=1`)!==-1}catch(t){return!1}}function ke(e){try{localStorage.removeItem(e)}catch(t){}}function De(e){try{document.cookie=`${e}=; max-age=0; SameSite=strict; path=/`}catch(t){}}var Oe={getSessionId:()=>null,isEphemeral:()=>!1,destroy:()=>{}};function te(e){var d,l,g,m,u;if(typeof window=="undefined")return Oe;let t=(d=e==null?void 0:e.cookieName)!=null?d:ve,a=((l=e==null?void 0:e.cookieTTLDays)!=null?l:365)*24*60*60,i=(u=(m=(g=Ee(t))!=null?g:be(N))!=null?m:xe(N))!=null?u:we();Ie(t,i,a);let o=Ce(N,i),r=Te(t),s=o?!1:_e(N,i),c=!o&&!r&&!s;return{getSessionId:()=>i,isEphemeral:()=>c,destroy:()=>{i=null,De(t),ke(N),Ae(N)}}}var F="_snt_retry";var Ne={push:()=>{},flush:()=>{},destroy:()=>{}};function Re(e){try{let t=localStorage.getItem(F);if(!t)return[];let n=JSON.parse(t);return Array.isArray(n)?(localStorage.removeItem(F),n.slice(-e)):[]}catch(t){return[]}}function Q(e,t){try{let a=[...(()=>{try{let i=localStorage.getItem(F);if(!i)return[];let o=JSON.parse(i);return Array.isArray(o)?o:[]}catch(i){return[]}})(),...e].slice(-t);localStorage.setItem(F,JSON.stringify(a))}catch(n){}}function ne(e){var k,A,O;if(typeof window=="undefined")return Ne;let t=(k=e.flushIntervalMs)!=null?k:5e3,n=(A=e.maxBatchSize)!=null?A:20,a=(O=e.maxRetrySize)!=null?O:100,i=e.ingestUrl,o=e.apiKey,r=[],s=new Set,c=[],d=p=>{for(let y of p)l.delete(y),!s.has(y)&&(s.add(y),c.push(y));for(;c.length>500;){let y=c.shift();y&&s.delete(y)}},l=new Set,g=p=>{s.has(p.id)||l.has(p.id)||(l.add(p.id),r.push(p))},m=Re(a);for(let p of m)g(p);let u=0,h=0,E=p=>{if(p.length===0)return;let y=JSON.stringify(p),v=p.map(_=>_.id),I;try{I=fetch(i,{method:"POST",keepalive:!0,body:y,headers:{"Content-Type":"application/json",Authorization:`Bearer ${o}`}})}catch(_){Q(p,a);for(let J of v)l.delete(J);h++,u=Date.now()+Math.min(6e4,1e3*2**Math.min(h,6));return}let x=_=>{if(_.ok||_.status>=400&&_.status<500&&_.status!==429){d(v),h=0,u=0;return}Q(p,a);for(let J of v)l.delete(J);h++,u=Date.now()+Math.min(6e4,1e3*2**Math.min(h,6))};I instanceof Promise?I.then(x).catch(()=>{Q(p,a);for(let _ of v)l.delete(_);h++,u=Date.now()+Math.min(6e4,1e3*2**Math.min(h,6))}):x(I)},b=typeof TextEncoder!="undefined"?new TextEncoder:null,T=p=>b?b.encode(p).length:p.length,K=p=>{let y=[],v=2;for(let I of p){let x=T(JSON.stringify(I))+1;if(y.length>0&&v+x>57344||y.length>=n)break;y.push(I),v+=x}return y},C=()=>{try{if(Date.now()<u)return;for(;r.length>0;){let p=r.filter(v=>!s.has(v.id));if(r.length=0,p.length===0)break;let y=K(p);if(y.length===0)break;y.length<p.length&&r.push(...p.slice(y.length)),E(y)}}catch(p){}},P=!0,f=null;f=setInterval(()=>{P&&C()},t);let S=()=>{document.visibilityState==="hidden"&&C()},w=()=>{C()};return document.addEventListener("visibilitychange",S),window.addEventListener("beforeunload",w),{push(p){g(p),r.length>=n&&C()},flush:C,destroy(){P=!1,f!==null&&(clearInterval(f),f=null),document.removeEventListener("visibilitychange",S),window.removeEventListener("beforeunload",w),C()}}}var z="_snt_asgn_";function j(e,t){return`${e}:${t}`}function Me(e,t){return`${z}${e}_${t}`}function H(){try{let e=[];for(let t=0;t<localStorage.length;t++){let n=localStorage.key(t);n!=null&&n.startsWith(z)&&e.push(n)}return e}catch(e){return[]}}function re(e=18e5){let t=new Map,n=i=>i.assignedAt+e<Date.now();return typeof window!="undefined"&&(()=>{for(let i of H())try{let o=localStorage.getItem(i);if(!o)continue;let r=JSON.parse(o);if(n(r)){localStorage.removeItem(i);continue}let s=i.slice(z.length),c=s.lastIndexOf("_");if(c<0)continue;let d=s.slice(0,c),l=s.slice(c+1);t.set(j(d,l),r)}catch(o){}})(),{get(i,o){let r=t.get(j(i,o));return r?n(r)?(t.delete(j(i,o)),null):r:null},set(i,o,r){let s=j(i,o);t.set(s,r);try{localStorage.setItem(Me(i,o),JSON.stringify(r))}catch(c){}},invalidate(i){let o=`${i}:`;for(let r of[...t.keys()])r.startsWith(o)&&t.delete(r);for(let r of H()){let s=r.slice(z.length),c=s.lastIndexOf("_");if(c<0)continue;if(s.slice(0,c)===i)try{localStorage.removeItem(r)}catch(l){}}},clear(){t.clear();for(let i of H())try{localStorage.removeItem(i)}catch(o){}}}}function R(e){let t=e.toLowerCase();return/ipad|tablet|playbook|kindle|silk/.test(t)?"tablet":/mobi|iphone|ipod|android.*mobile|phone/.test(t)?"mobile":"desktop"}function M(e,t){if(!e)return"direct";try{let n=new URL(e);if(t)try{if(new URL(t).host===n.host)return"direct"}catch(i){}let a=n.hostname.toLowerCase();return/(^|\.)(google|bing|duckduckgo|yahoo)\./.test(a)?"search":/(^|\.)(twitter|x\.com|facebook|linkedin|reddit|t\.co)/.test(a)?"social":"referral"}catch(n){return"direct"}}function U(e){if(!e)return null;try{return new URL(e).hostname}catch(t){return null}}function L(e){let t=e.getHours();return t<6?"night":t<12?"morning":t<18?"afternoon":"evening"}function W(e){let t=Ue("__segment__",e);return`${t.deviceClass}:${t.trafficSource}`}function Ue(e,t){var o,r,s,c,d,l,g;let n=(r=(o=t==null?void 0:t.userAgent)==null?void 0:o.trim())!=null?r:"",a=(c=(s=t==null?void 0:t.referer)==null?void 0:s.trim())!=null?c:"",i=(d=t==null?void 0:t.now)!=null?d:new Date;return{sessionId:e,ephemeral:!1,utmParams:(l=t==null?void 0:t.utmParams)!=null?l:{},deviceClass:n?R(n):"desktop",trafficSource:a?M(a,t==null?void 0:t.appOrigin):"direct",referrerDomain:U(a),timeOfDay:L(i),dayOfWeek:(g=["sun","mon","tue","wed","thu","fri","sat"][i.getDay()])!=null?g:"sun"}}var oe="https://sentient-api.fly.dev/v1/events",Le=null,Pe=null;function $e(){try{if(typeof crypto!="undefined"&&typeof crypto.randomUUID=="function")return crypto.randomUUID()}catch(e){}return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>{let t=Math.random()*16|0;return(e==="x"?t:t&3|8).toString(16)})}var $={track:()=>{},goal:()=>{},identify:()=>{},getAssignment:()=>null,assign:()=>Promise.resolve(null),getGraph:()=>({pageNodes:[],capturedAt:0}),destroy:()=>{}};function Ke(){try{let e={},t=new URLSearchParams(window.location.search);for(let[n,a]of t)n.startsWith("utm_")&&(e[n]=a);return e}catch(e){return{}}}function se(e){return e.replace(/\/events\/?$/,"")}function Ge(e){var i;let t=se((i=e.ingestUrl)!=null?i:oe),n={"Content-Type":"application/json",Authorization:`Bearer ${e.apiKey}`},a={track:()=>{},goal:()=>{},identify:()=>{},getAssignment:()=>null,async assign(o,r,s){try{let c=new URLSearchParams({componentId:o});for(let g of r!=null?r:[])c.append("variantIds[]",g);let d=await fetch(`${t}/winner?${c.toString()}`,{headers:n});return d.ok?{variantId:(await d.json()).variantId,assignmentTtlMs:0}:r!=null&&r[0]?{variantId:r[0],assignmentTtlMs:0}:null}catch(c){return r!=null&&r[0]?{variantId:r[0],assignmentTtlMs:0}:null}},getGraph:()=>({pageNodes:[],capturedAt:0}),destroy:()=>{}};return Pe=o=>{a=o},{track:o=>a.track(o),goal:(o,r)=>a.goal(o,r),identify:o=>a.identify(o),getAssignment:(o,r)=>a.getAssignment(o,r),assign:(o,r,s,c)=>a.assign(o,r,s,c),getGraph:()=>a.getGraph(),destroy:()=>a.destroy()}}function ie(e){var b,T,K,C,P;if(typeof window=="undefined")return $;if(Le=e,e.consent===!1)return e.preConsentBehavior==="statistical_winner"?!e.apiKey||!e.apiKey.startsWith("pk_")?(console.warn("[sentient] init() called with an invalid apiKey \u2014 expected a pk_ public key. SDK disabled."),$):Ge(e):$;if(!e.apiKey||!e.apiKey.startsWith("pk_"))return console.warn("[sentient] init() called with an invalid apiKey \u2014 expected a pk_ public key. SDK disabled."),$;if(e.ingestUrl==="")return console.warn("[sentient] init() called with an empty ingestUrl. SDK disabled."),$;let t=(b=e.ingestUrl)!=null?b:oe,n=Date.now(),a=te(),i=re(),o=ne({ingestUrl:t,apiKey:e.apiKey}),r=se(t),s={"Content-Type":"application/json",Authorization:`Bearer ${e.apiKey}`},c=R((T=navigator.userAgent)!=null?T:""),d=typeof window!="undefined"?window.location.origin:void 0,l=M((K=document.referrer)!=null?K:"",d),g=(C=e.sessionSegment)!=null?C:`${c}:${l}`,m=new Map;if(e.initialAssignments)for(let[f,S]of Object.entries(e.initialAssignments))i.set(f,g,{variantId:S,assignedAt:Date.now(),segment:g,confidence:1});let u=Promise.resolve(),h=a.getSessionId();if(h){let f=U((P=document.referrer)!=null?P:""),S=D({sessionId:h,deviceClass:c,trafficSource:l,referrerDomain:f,utmParams:Ke(),timeOfDay:L(new Date),dayOfWeek:["sun","mon","tue","wed","thu","fri","sat"][new Date().getDay()],ephemeral:a.isEphemeral()},e.userId?{userId:e.userId}:{});try{u=fetch(`${r}/sessions`,{method:"POST",keepalive:!0,body:JSON.stringify(S),headers:s}).then(w=>{w.status===402&&console.warn("[SentientUI] Session limit exceeded for this project. The bandit will stop learning until the limit resets. Upgrade at sentientui.dev/pricing")}).catch(()=>{})}catch(w){}}e.debug&&(console.log("[sentient] initialized",{context:e.context}),window.__sentient={client:null,queue:o});let E={goal(f,S={},w=1,k=0){let A=a.getSessionId();A&&u.then(()=>{fetch(`${r}/goals`,{method:"POST",keepalive:!0,body:JSON.stringify({sessionId:A,name:f,metadata:S,weight:w,stepIndex:k}),headers:s}).catch(()=>{})})},identify(f){let S=a.getSessionId();S&&u.then(()=>{fetch(`${r}/sessions`,{method:"POST",keepalive:!0,body:JSON.stringify({sessionId:S,userId:f,ephemeral:a.isEphemeral()}),headers:s}).catch(()=>{})})},track(f){let S=a.getSessionId();if(!S)return;let w=B(D({},f),{id:$e(),sessionId:S,timestamp:Date.now(),timeInSession:Date.now()-n});o.push(w),e.debug&&console.log("[sentient] track",w)},getAssignment(f,S){return i.get(f,S)},async assign(f,S,w,k){let A=a.getSessionId();if(!A)return null;let O=i.get(f,g);if(O)return{variantId:O.variantId,assignmentTtlMs:0,content:O.content};let p=m.get(f);if(p)return p;let y=(async()=>{await u;try{let v={sessionId:A,componentId:f,variantIds:S};k!==void 0?v.agentDataByVariant=k:w!==void 0&&(v.agentData=w);let I=await fetch(`${r}/assign`,{method:"POST",body:JSON.stringify(v),headers:s});if(!I.ok)return null;let x=await I.json();return i.set(f,g,{variantId:x.variantId,assignedAt:Date.now(),segment:g,confidence:1,content:x.content}),x}catch(v){return null}finally{m.delete(f)}})();return m.set(f,y),y},getGraph(){return{pageNodes:[],capturedAt:0}},destroy(){o.destroy(),a.destroy(),e.debug&&console.log("[sentient] destroyed")}};if(e.debug){let f=window;f.__sentient&&(f.__sentient.client=E)}return E}var Be=new Set(["SECTION","ARTICLE","MAIN","DIV"]),Fe="h1, h2, h3",je={scan:async()=>({nodes:[],edges:[],scannedAt:0}),observe:()=>{},getProminenceScore:()=>0,destroy:()=>{}};function q(e,t,n){return n<=t?0:Math.max(0,Math.min(1,(e-t)/(n-t)))}function ze(e){var t,n,a;try{let i=e;for(let o of Object.keys(i)){if(!o.startsWith("__reactFiber")&&!o.startsWith("__reactInternalInstance"))continue;let r=i[o],s=(a=(t=r==null?void 0:r.type)==null?void 0:t.displayName)!=null?a:(n=r==null?void 0:r.type)==null?void 0:n.name;if(s&&s.length>1)return s}}catch(i){}}function Je(e){let t={};for(let n of Array.from(e.attributes))n.name.startsWith("data-")&&(t[n.name]=n.value);return t}function Qe(e){let t=e.getAttribute("data-sentient-type");if(t)return t;let n=e.getAttribute("role");return n||"generic"}function He(e){var t,n;return(n=(t=e.getAttribute("data-sentient-id"))!=null?t:e.getAttribute("id"))!=null?n:e.tagName.toLowerCase()}function We(e){let t=0,n=e.parentElement;for(;n;)t++,n=n.parentElement;return t}function Y(e,t){var a,i,o;let n=e.querySelector(Fe);return{componentId:He(e),semanticType:Qe(e),ariaLabel:(a=e.getAttribute("aria-label"))!=null?a:void 0,headingText:(o=(i=n==null?void 0:n.textContent)==null?void 0:i.trim())!=null?o:void 0,isAboveFold:e.getBoundingClientRect().top<window.innerHeight,prominenceScore:t(e),depth:We(e),reactComponentName:ze(e),dataAttributes:Je(e)}}function ae(e){var o;let t=[],n=new Set,a="__root__",i=new Map;for(let[r,s]of e){let c=r.parentElement,d=a;for(;c;){if(e.has(c)){d=e.get(c);let g=e.get(r),m=`${d}->${g}`;!n.has(m)&&d!==g&&(n.add(m),t.push({fromComponentId:d,toComponentId:g,weight:.6}));break}c=c.parentElement}let l=(o=i.get(d))!=null?o:[];l.push(r),i.set(d,l)}for(let r of i.values())if(!(r.length<2))for(let s=0;s<r.length;s++)for(let c=s+1;c<r.length;c++){let d=e.get(r[s]),l=e.get(r[c]);if(d===l)continue;let g=`${d}->${l}::sib`,m=`${l}->${d}::sib`;n.has(g)||(n.add(g),t.push({fromComponentId:d,toComponentId:l,weight:.3})),n.has(m)||(n.add(m),t.push({fromComponentId:l,toComponentId:d,weight:.3}))}return t}function qe(e){let t=[],n=new Set,a=new Map;return document.querySelectorAll("[data-sentient-id]").forEach(r=>{if(r instanceof Element&&!n.has(r)){n.add(r);let s=Y(r,e);t.push(s),a.set(r,s.componentId)}}),document.querySelectorAll("section, article, main, aside").forEach(r=>{if(!(r instanceof Element)||n.has(r))return;let s=r.hasAttribute("aria-label"),c=r.hasAttribute("data-sentient-id");if(!s&&!c)return;n.add(r);let d=Y(r,e);t.push(d),a.set(r,d.componentId)}),{nodes:t,edges:ae(a)}}function ce(){if(typeof window=="undefined")return je;let e=null,t=0,n=null,a=s=>{try{let c=window.getComputedStyle(s),d=parseFloat(c.fontSize)||12,l=parseFloat(c.zIndex)||0,g=s.getBoundingClientRect(),m=Math.max(g.top,0),u=window.innerHeight||1,h=1/(m/u+1),E=q(d,12,48)*.4+q(h,0,1)*.4+q(l,0,100)*.2;return Math.max(0,Math.min(1,E))}catch(c){return .5}};return{scan:()=>new Promise(s=>{let c=()=>{let{nodes:d,edges:l}=qe(a);s({nodes:d,edges:l,scannedAt:Date.now()})};try{typeof requestIdleCallback=="function"?t=requestIdleCallback(c,{timeout:100}):c()}catch(d){c()}}),observe:s=>{n=s;try{e=new MutationObserver(c=>{let d=[],l=new Map;for(let g of c)g.type==="childList"&&g.addedNodes.forEach(m=>{if(!(m instanceof Element)||!Be.has(m.tagName))return;let u=m.hasAttribute("data-sentient-id"),h=m.hasAttribute("aria-label");if(!u&&!h)return;let E=Y(m,a);d.push(E),l.set(m,E.componentId)});d.length>0&&n&&n({nodes:d,edges:ae(l),addedAt:Date.now()})}),e.observe(document.body,{childList:!0,subtree:!0})}catch(c){}},getProminenceScore:a,destroy:()=>{if(e&&(e.disconnect(),e=null),t&&typeof cancelIdleCallback=="function")try{cancelIdleCallback(t)}catch(s){}t=0,n=null}}}var V="_snt_graph_nodes",de="_snt_graph_edges",Ye={pricing:["features","faq"],features:["pricing"],faq:["pricing"],social_proof:["cta"],cta:["social_proof","hero","trust"],hero:["cta"],comparison:["pricing"],trust:["cta"]};function Ve(e){var t;return(t=Ye[e])!=null?t:[]}function Xe(e,t){try{let n=localStorage.getItem(e);return n?JSON.parse(n):t}catch(n){return t}}function Ze(e,t){try{localStorage.setItem(e,JSON.stringify(t))}catch(n){}}var et=new Set(["pricing","hero","social_proof","cta","features","faq","comparison","trust","navigation","generic"]);function tt(e){return et.has(e)?e:"generic"}function nt(e,t,n){let a=`${e}:${t}:${n.join(",")}`,i=5381;for(let o=0;o<a.length;o++)i=(i<<5)+i+a.charCodeAt(o)&4294967295;return(i>>>0).toString(16).padStart(8,"0")}function ue(e){let t=new Map,n=new Map,a=()=>{typeof window!="undefined"&&Ze(V,[...t.values()])},i=o=>{var r;try{let s=JSON.parse(o);t.clear();for(let c of(r=s.pageNodes)!=null?r:[])t.set(c.componentId,c)}catch(s){}};if(typeof window!="undefined"){let o=Xe(V,[]);for(let r of o)t.set(r.componentId,r);try{localStorage.removeItem(de)}catch(r){}}return{addPageNode(o){t.set(o.componentId,o),a()},addStructuralEdge(o){let r=`${o.fromComponentId}->${o.toComponentId}`;n.set(r,o)},syncOnce(){var r,s;if(!(e!=null&&e.syncUrl)||typeof window=="undefined")return;let o=[...t.values()];if(o.length!==0)try{let c=new Map;for(let u of o){let h=(r=c.get(u.semanticType))!=null?r:[];h.push(u),c.set(u.semanticType,h)}let d=[],l=new Set;for(let u of o)for(let h of Ve(u.semanticType)){let E=(s=c.get(h))!=null?s:[];for(let b of E){if(b.componentId===u.componentId)continue;let T=`semantic:${u.componentId}->${b.componentId}`;l.has(T)||(l.add(T),d.push({fromComponentId:u.componentId,toComponentId:b.componentId,type:"semantic",weight:.4,confidence:.9}))}}let g=new Set(o.map(u=>u.componentId));for(let u of n.values()){if(!g.has(u.fromComponentId)||!g.has(u.toComponentId))continue;let h=`structural:${u.fromComponentId}->${u.toComponentId}`;l.has(h)||(l.add(h),d.push({fromComponentId:u.fromComponentId,toComponentId:u.toComponentId,type:"structural",weight:u.weight,confidence:1}))}let m={pageUrl:window.location.href,nodes:o.map(u=>{let h=tt(u.semanticType);return{componentId:u.componentId,semanticType:h,answers:u.answers,contentHash:nt(u.componentId,h,u.answers),prominenceScore:u.prominenceScore,depthInPage:u.depth}}),edges:d};fetch(e.syncUrl,{method:"POST",keepalive:!0,headers:D({"Content-Type":"application/json"},e.apiKey?{Authorization:`Bearer ${e.apiKey}`}:{}),body:JSON.stringify(m)}).catch(()=>{})}catch(c){}},snapshot(){return{pageNodes:[...t.values()],capturedAt:Date.now()}},serialize(){return JSON.stringify({pageNodes:[...t.values()]})},restore:i,destroy(){if(typeof window!="undefined")try{localStorage.removeItem(V),localStorage.removeItem(de)}catch(o){}}}}var rt="https://sentient-api.fly.dev/v1/events";function ot(){try{let e=document.cookie.match(/(?:^|; )_snt_uid=([^;]*)/);return e?decodeURIComponent(e[1]):void 0}catch(e){return}}function st(e){var o;let t=ie(e);if(!e.graph||typeof window=="undefined")return t;let n=ce(),a=(o=e.ingestUrl)!=null?o:rt,i=ue({syncUrl:a.replace(/\/events\/?$/,"/graph/sync"),apiKey:e.apiKey,projectId:e.apiKey,sessionId:ot()});try{let r=localStorage.getItem("_snt_graph_nodes");r&&i.restore(JSON.stringify({pageNodes:JSON.parse(r)}))}catch(r){}return n.scan().then(r=>{for(let s of r.nodes)i.addPageNode({id:s.componentId,componentId:s.componentId,semanticType:s.semanticType,answers:s.headingText?[s.headingText]:[],prominenceScore:s.prominenceScore,depth:s.depth});for(let s of r.edges)i.addStructuralEdge(s);i.syncOnce()}),n.observe(r=>{for(let s of r.nodes)i.addPageNode({id:s.componentId,componentId:s.componentId,semanticType:s.semanticType,answers:s.headingText?[s.headingText]:[],prominenceScore:s.prominenceScore,depth:s.depth});for(let s of r.edges)i.addStructuralEdge(s)}),B(D({},t),{getGraph:()=>i.snapshot(),destroy:()=>{n.destroy(),i.destroy(),t.destroy()}})}0&&(module.exports={deriveSessionSegment,detectDeviceClass,detectTimeOfDay,detectTrafficSource,init,referrerDomainFromReferer});
|
|
1
|
+
"use strict";var G=Object.defineProperty,le=Object.defineProperties,ge=Object.getOwnPropertyDescriptor,pe=Object.getOwnPropertyDescriptors,fe=Object.getOwnPropertyNames,X=Object.getOwnPropertySymbols;var ee=Object.prototype.hasOwnProperty,me=Object.prototype.propertyIsEnumerable;var Z=(e,t,n)=>t in e?G(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,D=(e,t)=>{for(var n in t||(t={}))ee.call(t,n)&&Z(e,n,t[n]);if(X)for(var n of X(t))me.call(t,n)&&Z(e,n,t[n]);return e},B=(e,t)=>le(e,pe(t));var he=(e,t)=>{for(var n in t)G(e,n,{get:t[n],enumerable:!0})},ye=(e,t,n,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of fe(t))!ee.call(e,i)&&i!==n&&G(e,i,{get:()=>t[i],enumerable:!(a=ge(t,i))||a.enumerable});return e};var Se=e=>ye(G({},"__esModule",{value:!0}),e);var it={};he(it,{deriveSessionSegment:()=>W,detectDeviceClass:()=>R,detectTimeOfDay:()=>P,detectTrafficSource:()=>M,init:()=>st,referrerDomainFromReferer:()=>U});module.exports=Se(it);var ve="_snt_uid";var N="_snt_uid";function we(){try{if(typeof crypto!="undefined"&&typeof crypto.randomUUID=="function")return crypto.randomUUID()}catch(t){}let e=()=>Math.floor(Math.random()*4294967295).toString(16).padStart(8,"0");return`${e()}-${e()}-${e()}-${e()}`}function Ee(e){try{let t=document.cookie.match(new RegExp(`(?:^|; )${e}=([^;]*)`));return t?decodeURIComponent(t[1]):null}catch(t){return null}}function Ie(e,t,n){try{document.cookie=`${e}=${encodeURIComponent(t)}; max-age=${n}; SameSite=strict; path=/`}catch(a){}}function be(e){try{return localStorage.getItem(e)}catch(t){return null}}function Ce(e,t){try{return localStorage.setItem(e,t),!0}catch(n){return!1}}function xe(e){try{return sessionStorage.getItem(e)}catch(t){return null}}function _e(e,t){try{return sessionStorage.setItem(e,t),!0}catch(n){return!1}}function Ae(e){try{sessionStorage.removeItem(e)}catch(t){}}function Te(e){try{return document.cookie=`${e}_probe=1; max-age=1; SameSite=strict; path=/`,/(?:^|; )_snt_uid_probe=1/.test(document.cookie)||document.cookie.indexOf(`${e}_probe=1`)!==-1}catch(t){return!1}}function ke(e){try{localStorage.removeItem(e)}catch(t){}}function De(e){try{document.cookie=`${e}=; max-age=0; SameSite=strict; path=/`}catch(t){}}var Oe={getSessionId:()=>null,isEphemeral:()=>!1,destroy:()=>{}};function te(e){var d,l,g,m,u;if(typeof window=="undefined")return Oe;let t=(d=e==null?void 0:e.cookieName)!=null?d:ve,a=((l=e==null?void 0:e.cookieTTLDays)!=null?l:365)*24*60*60,i=(u=(m=(g=Ee(t))!=null?g:be(N))!=null?m:xe(N))!=null?u:we();Ie(t,i,a);let o=Ce(N,i),r=Te(t),s=o?!1:_e(N,i),c=!o&&!r&&!s;return{getSessionId:()=>i,isEphemeral:()=>c,destroy:()=>{i=null,De(t),ke(N),Ae(N)}}}var F="_snt_retry";var Ne={push:()=>{},flush:()=>{},destroy:()=>{}};function Re(e){try{let t=localStorage.getItem(F);if(!t)return[];let n=JSON.parse(t);return Array.isArray(n)?(localStorage.removeItem(F),n.slice(-e)):[]}catch(t){return[]}}function Q(e,t){try{let a=[...(()=>{try{let i=localStorage.getItem(F);if(!i)return[];let o=JSON.parse(i);return Array.isArray(o)?o:[]}catch(i){return[]}})(),...e].slice(-t);localStorage.setItem(F,JSON.stringify(a))}catch(n){}}function ne(e){var k,A,O;if(typeof window=="undefined")return Ne;let t=(k=e.flushIntervalMs)!=null?k:5e3,n=(A=e.maxBatchSize)!=null?A:20,a=(O=e.maxRetrySize)!=null?O:100,i=e.ingestUrl,o=e.apiKey,r=[],s=new Set,c=[],d=p=>{for(let y of p)l.delete(y),!s.has(y)&&(s.add(y),c.push(y));for(;c.length>500;){let y=c.shift();y&&s.delete(y)}},l=new Set,g=p=>{s.has(p.id)||l.has(p.id)||(l.add(p.id),r.push(p))},m=Re(a);for(let p of m)g(p);let u=0,h=0,E=p=>{if(p.length===0)return;let y=JSON.stringify(p),v=p.map(_=>_.id),I;try{I=fetch(i,{method:"POST",keepalive:!0,body:y,headers:{"Content-Type":"application/json",Authorization:`Bearer ${o}`}})}catch(_){Q(p,a);for(let J of v)l.delete(J);h++,u=Date.now()+Math.min(6e4,1e3*2**Math.min(h,6));return}let x=_=>{if(_.ok||_.status>=400&&_.status<500&&_.status!==429){d(v),h=0,u=0;return}Q(p,a);for(let J of v)l.delete(J);h++,u=Date.now()+Math.min(6e4,1e3*2**Math.min(h,6))};I instanceof Promise?I.then(x).catch(()=>{Q(p,a);for(let _ of v)l.delete(_);h++,u=Date.now()+Math.min(6e4,1e3*2**Math.min(h,6))}):x(I)},b=typeof TextEncoder!="undefined"?new TextEncoder:null,T=p=>b?b.encode(p).length:p.length,K=p=>{let y=[],v=2;for(let I of p){let x=T(JSON.stringify(I))+1;if(y.length>0&&v+x>57344||y.length>=n)break;y.push(I),v+=x}return y},C=()=>{try{if(Date.now()<u)return;for(;r.length>0;){let p=r.filter(v=>!s.has(v.id));if(r.length=0,p.length===0)break;let y=K(p);if(y.length===0)break;y.length<p.length&&r.push(...p.slice(y.length)),E(y)}}catch(p){}},L=!0,f=null;f=setInterval(()=>{L&&C()},t);let S=()=>{document.visibilityState==="hidden"&&C()},w=()=>{C()};return document.addEventListener("visibilitychange",S),window.addEventListener("beforeunload",w),{push(p){g(p),r.length>=n&&C()},flush:C,destroy(){L=!1,f!==null&&(clearInterval(f),f=null),document.removeEventListener("visibilitychange",S),window.removeEventListener("beforeunload",w),C()}}}var z="_snt_asgn_";function j(e,t){return`${e}:${t}`}function Me(e,t){return`${z}${e}_${t}`}function H(){try{let e=[];for(let t=0;t<localStorage.length;t++){let n=localStorage.key(t);n!=null&&n.startsWith(z)&&e.push(n)}return e}catch(e){return[]}}function re(e=18e5){let t=new Map,n=i=>i.assignedAt+e<Date.now();return typeof window!="undefined"&&(()=>{for(let i of H())try{let o=localStorage.getItem(i);if(!o)continue;let r=JSON.parse(o);if(n(r)){localStorage.removeItem(i);continue}let s=i.slice(z.length),c=s.lastIndexOf("_");if(c<0)continue;let d=s.slice(0,c),l=s.slice(c+1);t.set(j(d,l),r)}catch(o){}})(),{get(i,o){let r=t.get(j(i,o));return r?n(r)?(t.delete(j(i,o)),null):r:null},set(i,o,r){let s=j(i,o);t.set(s,r);try{localStorage.setItem(Me(i,o),JSON.stringify(r))}catch(c){}},invalidate(i){let o=`${i}:`;for(let r of[...t.keys()])r.startsWith(o)&&t.delete(r);for(let r of H()){let s=r.slice(z.length),c=s.lastIndexOf("_");if(c<0)continue;if(s.slice(0,c)===i)try{localStorage.removeItem(r)}catch(l){}}},clear(){t.clear();for(let i of H())try{localStorage.removeItem(i)}catch(o){}}}}function R(e){let t=e.toLowerCase();return/ipad|tablet|playbook|kindle|silk/.test(t)?"tablet":/mobi|iphone|ipod|android.*mobile|phone/.test(t)?"mobile":"desktop"}function M(e,t){if(!e)return"direct";try{let n=new URL(e);if(t)try{if(new URL(t).host===n.host)return"direct"}catch(i){}let a=n.hostname.toLowerCase();return/(^|\.)(google|bing|duckduckgo|yahoo)\./.test(a)?"search":/(^|\.)(twitter|x\.com|facebook|linkedin|reddit|t\.co)/.test(a)?"social":"referral"}catch(n){return"direct"}}function U(e){if(!e)return null;try{return new URL(e).hostname}catch(t){return null}}function P(e){let t=e.getHours();return t<6?"night":t<12?"morning":t<18?"afternoon":"evening"}function W(e){let t=Ue("__segment__",e);return`${t.deviceClass}:${t.trafficSource}`}function Ue(e,t){var o,r,s,c,d,l,g;let n=(r=(o=t==null?void 0:t.userAgent)==null?void 0:o.trim())!=null?r:"",a=(c=(s=t==null?void 0:t.referer)==null?void 0:s.trim())!=null?c:"",i=(d=t==null?void 0:t.now)!=null?d:new Date;return{sessionId:e,ephemeral:!1,utmParams:(l=t==null?void 0:t.utmParams)!=null?l:{},deviceClass:n?R(n):"desktop",trafficSource:a?M(a,t==null?void 0:t.appOrigin):"direct",referrerDomain:U(a),timeOfDay:P(i),dayOfWeek:(g=["sun","mon","tue","wed","thu","fri","sat"][i.getDay()])!=null?g:"sun"}}var oe="https://api.sentient-ui.com/v1/events",Pe=null,Le=null;function $e(){try{if(typeof crypto!="undefined"&&typeof crypto.randomUUID=="function")return crypto.randomUUID()}catch(e){}return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>{let t=Math.random()*16|0;return(e==="x"?t:t&3|8).toString(16)})}var $={track:()=>{},goal:()=>{},identify:()=>{},getAssignment:()=>null,assign:()=>Promise.resolve(null),getGraph:()=>({pageNodes:[],capturedAt:0}),destroy:()=>{}};function Ke(){try{let e={},t=new URLSearchParams(window.location.search);for(let[n,a]of t)n.startsWith("utm_")&&(e[n]=a);return e}catch(e){return{}}}function se(e){return e.replace(/\/events\/?$/,"")}function Ge(e){var i;let t=se((i=e.ingestUrl)!=null?i:oe),n={"Content-Type":"application/json",Authorization:`Bearer ${e.apiKey}`},a={track:()=>{},goal:()=>{},identify:()=>{},getAssignment:()=>null,async assign(o,r,s){try{let c=new URLSearchParams({componentId:o});for(let g of r!=null?r:[])c.append("variantIds[]",g);let d=await fetch(`${t}/winner?${c.toString()}`,{headers:n});return d.ok?{variantId:(await d.json()).variantId,assignmentTtlMs:0}:r!=null&&r[0]?{variantId:r[0],assignmentTtlMs:0}:null}catch(c){return r!=null&&r[0]?{variantId:r[0],assignmentTtlMs:0}:null}},getGraph:()=>({pageNodes:[],capturedAt:0}),destroy:()=>{}};return Le=o=>{a=o},{track:o=>a.track(o),goal:(o,r)=>a.goal(o,r),identify:o=>a.identify(o),getAssignment:(o,r)=>a.getAssignment(o,r),assign:(o,r,s,c)=>a.assign(o,r,s,c),getGraph:()=>a.getGraph(),destroy:()=>a.destroy()}}function ie(e){var b,T,K,C,L;if(typeof window=="undefined")return $;if(Pe=e,e.consent===!1)return e.preConsentBehavior==="statistical_winner"?!e.apiKey||!e.apiKey.startsWith("pk_")?(console.warn("[sentient] init() called with an invalid apiKey \u2014 expected a pk_ public key. SDK disabled."),$):Ge(e):$;if(!e.apiKey||!e.apiKey.startsWith("pk_"))return console.warn("[sentient] init() called with an invalid apiKey \u2014 expected a pk_ public key. SDK disabled."),$;if(e.ingestUrl==="")return console.warn("[sentient] init() called with an empty ingestUrl. SDK disabled."),$;let t=(b=e.ingestUrl)!=null?b:oe,n=Date.now(),a=te(),i=re(),o=ne({ingestUrl:t,apiKey:e.apiKey}),r=se(t),s={"Content-Type":"application/json",Authorization:`Bearer ${e.apiKey}`},c=R((T=navigator.userAgent)!=null?T:""),d=typeof window!="undefined"?window.location.origin:void 0,l=M((K=document.referrer)!=null?K:"",d),g=(C=e.sessionSegment)!=null?C:`${c}:${l}`,m=new Map;if(e.initialAssignments)for(let[f,S]of Object.entries(e.initialAssignments))i.set(f,g,{variantId:S,assignedAt:Date.now(),segment:g,confidence:1});let u=Promise.resolve(),h=a.getSessionId();if(h){let f=U((L=document.referrer)!=null?L:""),S=D({sessionId:h,deviceClass:c,trafficSource:l,referrerDomain:f,utmParams:Ke(),timeOfDay:P(new Date),dayOfWeek:["sun","mon","tue","wed","thu","fri","sat"][new Date().getDay()],ephemeral:a.isEphemeral()},e.userId?{userId:e.userId}:{});try{u=fetch(`${r}/sessions`,{method:"POST",keepalive:!0,body:JSON.stringify(S),headers:s}).then(w=>{w.status===402&&console.warn("[SentientUI] Session limit exceeded for this project. The bandit will stop learning until the limit resets. Upgrade at sentient-ui.com/pricing")}).catch(()=>{})}catch(w){}}e.debug&&(console.log("[sentient] initialized",{context:e.context}),window.__sentient={client:null,queue:o});let E={goal(f,S={},w=1,k=0){let A=a.getSessionId();A&&u.then(()=>{fetch(`${r}/goals`,{method:"POST",keepalive:!0,body:JSON.stringify({sessionId:A,name:f,metadata:S,weight:w,stepIndex:k}),headers:s}).catch(()=>{})})},identify(f){let S=a.getSessionId();S&&u.then(()=>{fetch(`${r}/sessions`,{method:"POST",keepalive:!0,body:JSON.stringify({sessionId:S,userId:f,ephemeral:a.isEphemeral()}),headers:s}).catch(()=>{})})},track(f){let S=a.getSessionId();if(!S)return;let w=B(D({},f),{id:$e(),sessionId:S,timestamp:Date.now(),timeInSession:Date.now()-n});o.push(w),e.debug&&console.log("[sentient] track",w)},getAssignment(f,S){return i.get(f,S)},async assign(f,S,w,k){let A=a.getSessionId();if(!A)return null;let O=i.get(f,g);if(O)return{variantId:O.variantId,assignmentTtlMs:0,content:O.content};let p=m.get(f);if(p)return p;let y=(async()=>{await u;try{let v={sessionId:A,componentId:f,variantIds:S};k!==void 0?v.agentDataByVariant=k:w!==void 0&&(v.agentData=w);let I=await fetch(`${r}/assign`,{method:"POST",body:JSON.stringify(v),headers:s});if(!I.ok)return null;let x=await I.json();return i.set(f,g,{variantId:x.variantId,assignedAt:Date.now(),segment:g,confidence:1,content:x.content}),x}catch(v){return null}finally{m.delete(f)}})();return m.set(f,y),y},getGraph(){return{pageNodes:[],capturedAt:0}},destroy(){o.destroy(),a.destroy(),e.debug&&console.log("[sentient] destroyed")}};if(e.debug){let f=window;f.__sentient&&(f.__sentient.client=E)}return E}var Be=new Set(["SECTION","ARTICLE","MAIN","DIV"]),Fe="h1, h2, h3",je={scan:async()=>({nodes:[],edges:[],scannedAt:0}),observe:()=>{},getProminenceScore:()=>0,destroy:()=>{}};function q(e,t,n){return n<=t?0:Math.max(0,Math.min(1,(e-t)/(n-t)))}function ze(e){var t,n,a;try{let i=e;for(let o of Object.keys(i)){if(!o.startsWith("__reactFiber")&&!o.startsWith("__reactInternalInstance"))continue;let r=i[o],s=(a=(t=r==null?void 0:r.type)==null?void 0:t.displayName)!=null?a:(n=r==null?void 0:r.type)==null?void 0:n.name;if(s&&s.length>1)return s}}catch(i){}}function Je(e){let t={};for(let n of Array.from(e.attributes))n.name.startsWith("data-")&&(t[n.name]=n.value);return t}function Qe(e){let t=e.getAttribute("data-sentient-type");if(t)return t;let n=e.getAttribute("role");return n||"generic"}function He(e){var t,n;return(n=(t=e.getAttribute("data-sentient-id"))!=null?t:e.getAttribute("id"))!=null?n:e.tagName.toLowerCase()}function We(e){let t=0,n=e.parentElement;for(;n;)t++,n=n.parentElement;return t}function Y(e,t){var a,i,o;let n=e.querySelector(Fe);return{componentId:He(e),semanticType:Qe(e),ariaLabel:(a=e.getAttribute("aria-label"))!=null?a:void 0,headingText:(o=(i=n==null?void 0:n.textContent)==null?void 0:i.trim())!=null?o:void 0,isAboveFold:e.getBoundingClientRect().top<window.innerHeight,prominenceScore:t(e),depth:We(e),reactComponentName:ze(e),dataAttributes:Je(e)}}function ae(e){var o;let t=[],n=new Set,a="__root__",i=new Map;for(let[r,s]of e){let c=r.parentElement,d=a;for(;c;){if(e.has(c)){d=e.get(c);let g=e.get(r),m=`${d}->${g}`;!n.has(m)&&d!==g&&(n.add(m),t.push({fromComponentId:d,toComponentId:g,weight:.6}));break}c=c.parentElement}let l=(o=i.get(d))!=null?o:[];l.push(r),i.set(d,l)}for(let r of i.values())if(!(r.length<2))for(let s=0;s<r.length;s++)for(let c=s+1;c<r.length;c++){let d=e.get(r[s]),l=e.get(r[c]);if(d===l)continue;let g=`${d}->${l}::sib`,m=`${l}->${d}::sib`;n.has(g)||(n.add(g),t.push({fromComponentId:d,toComponentId:l,weight:.3})),n.has(m)||(n.add(m),t.push({fromComponentId:l,toComponentId:d,weight:.3}))}return t}function qe(e){let t=[],n=new Set,a=new Map;return document.querySelectorAll("[data-sentient-id]").forEach(r=>{if(r instanceof Element&&!n.has(r)){n.add(r);let s=Y(r,e);t.push(s),a.set(r,s.componentId)}}),document.querySelectorAll("section, article, main, aside").forEach(r=>{if(!(r instanceof Element)||n.has(r))return;let s=r.hasAttribute("aria-label"),c=r.hasAttribute("data-sentient-id");if(!s&&!c)return;n.add(r);let d=Y(r,e);t.push(d),a.set(r,d.componentId)}),{nodes:t,edges:ae(a)}}function ce(){if(typeof window=="undefined")return je;let e=null,t=0,n=null,a=s=>{try{let c=window.getComputedStyle(s),d=parseFloat(c.fontSize)||12,l=parseFloat(c.zIndex)||0,g=s.getBoundingClientRect(),m=Math.max(g.top,0),u=window.innerHeight||1,h=1/(m/u+1),E=q(d,12,48)*.4+q(h,0,1)*.4+q(l,0,100)*.2;return Math.max(0,Math.min(1,E))}catch(c){return .5}};return{scan:()=>new Promise(s=>{let c=()=>{let{nodes:d,edges:l}=qe(a);s({nodes:d,edges:l,scannedAt:Date.now()})};try{typeof requestIdleCallback=="function"?t=requestIdleCallback(c,{timeout:100}):c()}catch(d){c()}}),observe:s=>{n=s;try{e=new MutationObserver(c=>{let d=[],l=new Map;for(let g of c)g.type==="childList"&&g.addedNodes.forEach(m=>{if(!(m instanceof Element)||!Be.has(m.tagName))return;let u=m.hasAttribute("data-sentient-id"),h=m.hasAttribute("aria-label");if(!u&&!h)return;let E=Y(m,a);d.push(E),l.set(m,E.componentId)});d.length>0&&n&&n({nodes:d,edges:ae(l),addedAt:Date.now()})}),e.observe(document.body,{childList:!0,subtree:!0})}catch(c){}},getProminenceScore:a,destroy:()=>{if(e&&(e.disconnect(),e=null),t&&typeof cancelIdleCallback=="function")try{cancelIdleCallback(t)}catch(s){}t=0,n=null}}}var V="_snt_graph_nodes",de="_snt_graph_edges",Ye={pricing:["features","faq"],features:["pricing"],faq:["pricing"],social_proof:["cta"],cta:["social_proof","hero","trust"],hero:["cta"],comparison:["pricing"],trust:["cta"]};function Ve(e){var t;return(t=Ye[e])!=null?t:[]}function Xe(e,t){try{let n=localStorage.getItem(e);return n?JSON.parse(n):t}catch(n){return t}}function Ze(e,t){try{localStorage.setItem(e,JSON.stringify(t))}catch(n){}}var et=new Set(["pricing","hero","social_proof","cta","features","faq","comparison","trust","navigation","generic"]);function tt(e){return et.has(e)?e:"generic"}function nt(e,t,n){let a=`${e}:${t}:${n.join(",")}`,i=5381;for(let o=0;o<a.length;o++)i=(i<<5)+i+a.charCodeAt(o)&4294967295;return(i>>>0).toString(16).padStart(8,"0")}function ue(e){let t=new Map,n=new Map,a=()=>{typeof window!="undefined"&&Ze(V,[...t.values()])},i=o=>{var r;try{let s=JSON.parse(o);t.clear();for(let c of(r=s.pageNodes)!=null?r:[])t.set(c.componentId,c)}catch(s){}};if(typeof window!="undefined"){let o=Xe(V,[]);for(let r of o)t.set(r.componentId,r);try{localStorage.removeItem(de)}catch(r){}}return{addPageNode(o){t.set(o.componentId,o),a()},addStructuralEdge(o){let r=`${o.fromComponentId}->${o.toComponentId}`;n.set(r,o)},syncOnce(){var r,s;if(!(e!=null&&e.syncUrl)||typeof window=="undefined")return;let o=[...t.values()];if(o.length!==0)try{let c=new Map;for(let u of o){let h=(r=c.get(u.semanticType))!=null?r:[];h.push(u),c.set(u.semanticType,h)}let d=[],l=new Set;for(let u of o)for(let h of Ve(u.semanticType)){let E=(s=c.get(h))!=null?s:[];for(let b of E){if(b.componentId===u.componentId)continue;let T=`semantic:${u.componentId}->${b.componentId}`;l.has(T)||(l.add(T),d.push({fromComponentId:u.componentId,toComponentId:b.componentId,type:"semantic",weight:.4,confidence:.9}))}}let g=new Set(o.map(u=>u.componentId));for(let u of n.values()){if(!g.has(u.fromComponentId)||!g.has(u.toComponentId))continue;let h=`structural:${u.fromComponentId}->${u.toComponentId}`;l.has(h)||(l.add(h),d.push({fromComponentId:u.fromComponentId,toComponentId:u.toComponentId,type:"structural",weight:u.weight,confidence:1}))}let m={pageUrl:window.location.href,nodes:o.map(u=>{let h=tt(u.semanticType);return{componentId:u.componentId,semanticType:h,answers:u.answers,contentHash:nt(u.componentId,h,u.answers),prominenceScore:u.prominenceScore,depthInPage:u.depth}}),edges:d};fetch(e.syncUrl,{method:"POST",keepalive:!0,headers:D({"Content-Type":"application/json"},e.apiKey?{Authorization:`Bearer ${e.apiKey}`}:{}),body:JSON.stringify(m)}).catch(()=>{})}catch(c){}},snapshot(){return{pageNodes:[...t.values()],capturedAt:Date.now()}},serialize(){return JSON.stringify({pageNodes:[...t.values()]})},restore:i,destroy(){if(typeof window!="undefined")try{localStorage.removeItem(V),localStorage.removeItem(de)}catch(o){}}}}var rt="https://api.sentient-ui.com/v1/events";function ot(){try{let e=document.cookie.match(/(?:^|; )_snt_uid=([^;]*)/);return e?decodeURIComponent(e[1]):void 0}catch(e){return}}function st(e){var o;let t=ie(e);if(!e.graph||typeof window=="undefined")return t;let n=ce(),a=(o=e.ingestUrl)!=null?o:rt,i=ue({syncUrl:a.replace(/\/events\/?$/,"/graph/sync"),apiKey:e.apiKey,projectId:e.apiKey,sessionId:ot()});try{let r=localStorage.getItem("_snt_graph_nodes");r&&i.restore(JSON.stringify({pageNodes:JSON.parse(r)}))}catch(r){}return n.scan().then(r=>{for(let s of r.nodes)i.addPageNode({id:s.componentId,componentId:s.componentId,semanticType:s.semanticType,answers:s.headingText?[s.headingText]:[],prominenceScore:s.prominenceScore,depth:s.depth});for(let s of r.edges)i.addStructuralEdge(s);i.syncOnce()}),n.observe(r=>{for(let s of r.nodes)i.addPageNode({id:s.componentId,componentId:s.componentId,semanticType:s.semanticType,answers:s.headingText?[s.headingText]:[],prominenceScore:s.prominenceScore,depth:s.depth});for(let s of r.edges)i.addStructuralEdge(s)}),B(D({},t),{getGraph:()=>i.snapshot(),destroy:()=>{n.destroy(),i.destroy(),t.destroy()}})}0&&(module.exports={deriveSessionSegment,detectDeviceClass,detectTimeOfDay,detectTrafficSource,init,referrerDomainFromReferer});
|
package/dist/index-graph.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{c as v}from"./chunk-
|
|
1
|
+
import{c as v}from"./chunk-PXHX4K5R.mjs";import{a as h,b,c as x,d as _,e as O,f as M,g as R}from"./chunk-QCYVBCUV.mjs";var P=new Set(["SECTION","ARTICLE","MAIN","DIV"]),D="h1, h2, h3",G={scan:async()=>({nodes:[],edges:[],scannedAt:0}),observe:()=>{},getProminenceScore:()=>0,destroy:()=>{}};function S(e,t,n){return n<=t?0:Math.max(0,Math.min(1,(e-t)/(n-t)))}function k(e){var t,n,p;try{let c=e;for(let s of Object.keys(c)){if(!s.startsWith("__reactFiber")&&!s.startsWith("__reactInternalInstance"))continue;let o=c[s],r=(p=(t=o==null?void 0:o.type)==null?void 0:t.displayName)!=null?p:(n=o==null?void 0:o.type)==null?void 0:n.name;if(r&&r.length>1)return r}}catch(c){}}function $(e){let t={};for(let n of Array.from(e.attributes))n.name.startsWith("data-")&&(t[n.name]=n.value);return t}function L(e){let t=e.getAttribute("data-sentient-type");if(t)return t;let n=e.getAttribute("role");return n||"generic"}function U(e){var t,n;return(n=(t=e.getAttribute("data-sentient-id"))!=null?t:e.getAttribute("id"))!=null?n:e.tagName.toLowerCase()}function j(e){let t=0,n=e.parentElement;for(;n;)t++,n=n.parentElement;return t}function I(e,t){var p,c,s;let n=e.querySelector(D);return{componentId:U(e),semanticType:L(e),ariaLabel:(p=e.getAttribute("aria-label"))!=null?p:void 0,headingText:(s=(c=n==null?void 0:n.textContent)==null?void 0:c.trim())!=null?s:void 0,isAboveFold:e.getBoundingClientRect().top<window.innerHeight,prominenceScore:t(e),depth:j(e),reactComponentName:k(e),dataAttributes:$(e)}}function w(e){var s;let t=[],n=new Set,p="__root__",c=new Map;for(let[o,r]of e){let a=o.parentElement,d=p;for(;a;){if(e.has(a)){d=e.get(a);let m=e.get(o),g=`${d}->${m}`;!n.has(g)&&d!==m&&(n.add(g),t.push({fromComponentId:d,toComponentId:m,weight:.6}));break}a=a.parentElement}let u=(s=c.get(d))!=null?s:[];u.push(o),c.set(d,u)}for(let o of c.values())if(!(o.length<2))for(let r=0;r<o.length;r++)for(let a=r+1;a<o.length;a++){let d=e.get(o[r]),u=e.get(o[a]);if(d===u)continue;let m=`${d}->${u}::sib`,g=`${u}->${d}::sib`;n.has(m)||(n.add(m),t.push({fromComponentId:d,toComponentId:u,weight:.3})),n.has(g)||(n.add(g),t.push({fromComponentId:u,toComponentId:d,weight:.3}))}return t}function F(e){let t=[],n=new Set,p=new Map;return document.querySelectorAll("[data-sentient-id]").forEach(o=>{if(o instanceof Element&&!n.has(o)){n.add(o);let r=I(o,e);t.push(r),p.set(o,r.componentId)}}),document.querySelectorAll("section, article, main, aside").forEach(o=>{if(!(o instanceof Element)||n.has(o))return;let r=o.hasAttribute("aria-label"),a=o.hasAttribute("data-sentient-id");if(!r&&!a)return;n.add(o);let d=I(o,e);t.push(d),p.set(o,d.componentId)}),{nodes:t,edges:w(p)}}function N(){if(typeof window=="undefined")return G;let e=null,t=0,n=null,p=r=>{try{let a=window.getComputedStyle(r),d=parseFloat(a.fontSize)||12,u=parseFloat(a.zIndex)||0,m=r.getBoundingClientRect(),g=Math.max(m.top,0),i=window.innerHeight||1,f=1/(g/i+1),l=S(d,12,48)*.4+S(f,0,1)*.4+S(u,0,100)*.2;return Math.max(0,Math.min(1,l))}catch(a){return .5}};return{scan:()=>new Promise(r=>{let a=()=>{let{nodes:d,edges:u}=F(p);r({nodes:d,edges:u,scannedAt:Date.now()})};try{typeof requestIdleCallback=="function"?t=requestIdleCallback(a,{timeout:100}):a()}catch(d){a()}}),observe:r=>{n=r;try{e=new MutationObserver(a=>{let d=[],u=new Map;for(let m of a)m.type==="childList"&&m.addedNodes.forEach(g=>{if(!(g instanceof Element)||!P.has(g.tagName))return;let i=g.hasAttribute("data-sentient-id"),f=g.hasAttribute("aria-label");if(!i&&!f)return;let l=I(g,p);d.push(l),u.set(g,l.componentId)});d.length>0&&n&&n({nodes:d,edges:w(u),addedAt:Date.now()})}),e.observe(document.body,{childList:!0,subtree:!0})}catch(a){}},getProminenceScore:p,destroy:()=>{if(e&&(e.disconnect(),e=null),t&&typeof cancelIdleCallback=="function")try{cancelIdleCallback(t)}catch(r){}t=0,n=null}}}var C="_snt_graph_nodes",A="_snt_graph_edges",K={pricing:["features","faq"],features:["pricing"],faq:["pricing"],social_proof:["cta"],cta:["social_proof","hero","trust"],hero:["cta"],comparison:["pricing"],trust:["cta"]};function q(e){var t;return(t=K[e])!=null?t:[]}function z(e,t){try{let n=localStorage.getItem(e);return n?JSON.parse(n):t}catch(n){return t}}function H(e,t){try{localStorage.setItem(e,JSON.stringify(t))}catch(n){}}var J=new Set(["pricing","hero","social_proof","cta","features","faq","comparison","trust","navigation","generic"]);function B(e){return J.has(e)?e:"generic"}function V(e,t,n){let p=`${e}:${t}:${n.join(",")}`,c=5381;for(let s=0;s<p.length;s++)c=(c<<5)+c+p.charCodeAt(s)&4294967295;return(c>>>0).toString(16).padStart(8,"0")}function T(e){let t=new Map,n=new Map,p=()=>{typeof window!="undefined"&&H(C,[...t.values()])},c=s=>{var o;try{let r=JSON.parse(s);t.clear();for(let a of(o=r.pageNodes)!=null?o:[])t.set(a.componentId,a)}catch(r){}};if(typeof window!="undefined"){let s=z(C,[]);for(let o of s)t.set(o.componentId,o);try{localStorage.removeItem(A)}catch(o){}}return{addPageNode(s){t.set(s.componentId,s),p()},addStructuralEdge(s){let o=`${s.fromComponentId}->${s.toComponentId}`;n.set(o,s)},syncOnce(){var o,r;if(!(e!=null&&e.syncUrl)||typeof window=="undefined")return;let s=[...t.values()];if(s.length!==0)try{let a=new Map;for(let i of s){let f=(o=a.get(i.semanticType))!=null?o:[];f.push(i),a.set(i.semanticType,f)}let d=[],u=new Set;for(let i of s)for(let f of q(i.semanticType)){let l=(r=a.get(f))!=null?r:[];for(let y of l){if(y.componentId===i.componentId)continue;let E=`semantic:${i.componentId}->${y.componentId}`;u.has(E)||(u.add(E),d.push({fromComponentId:i.componentId,toComponentId:y.componentId,type:"semantic",weight:.4,confidence:.9}))}}let m=new Set(s.map(i=>i.componentId));for(let i of n.values()){if(!m.has(i.fromComponentId)||!m.has(i.toComponentId))continue;let f=`structural:${i.fromComponentId}->${i.toComponentId}`;u.has(f)||(u.add(f),d.push({fromComponentId:i.fromComponentId,toComponentId:i.toComponentId,type:"structural",weight:i.weight,confidence:1}))}let g={pageUrl:window.location.href,nodes:s.map(i=>{let f=B(i.semanticType);return{componentId:i.componentId,semanticType:f,answers:i.answers,contentHash:V(i.componentId,f,i.answers),prominenceScore:i.prominenceScore,depthInPage:i.depth}}),edges:d};fetch(e.syncUrl,{method:"POST",keepalive:!0,headers:h({"Content-Type":"application/json"},e.apiKey?{Authorization:`Bearer ${e.apiKey}`}:{}),body:JSON.stringify(g)}).catch(()=>{})}catch(a){}},snapshot(){return{pageNodes:[...t.values()],capturedAt:Date.now()}},serialize(){return JSON.stringify({pageNodes:[...t.values()]})},restore:c,destroy(){if(typeof window!="undefined")try{localStorage.removeItem(C),localStorage.removeItem(A)}catch(s){}}}}var W="https://api.sentient-ui.com/v1/events";function Y(){try{let e=document.cookie.match(/(?:^|; )_snt_uid=([^;]*)/);return e?decodeURIComponent(e[1]):void 0}catch(e){return}}function oe(e){var s;let t=v(e);if(!e.graph||typeof window=="undefined")return t;let n=N(),p=(s=e.ingestUrl)!=null?s:W,c=T({syncUrl:p.replace(/\/events\/?$/,"/graph/sync"),apiKey:e.apiKey,projectId:e.apiKey,sessionId:Y()});try{let o=localStorage.getItem("_snt_graph_nodes");o&&c.restore(JSON.stringify({pageNodes:JSON.parse(o)}))}catch(o){}return n.scan().then(o=>{for(let r of o.nodes)c.addPageNode({id:r.componentId,componentId:r.componentId,semanticType:r.semanticType,answers:r.headingText?[r.headingText]:[],prominenceScore:r.prominenceScore,depth:r.depth});for(let r of o.edges)c.addStructuralEdge(r);c.syncOnce()}),n.observe(o=>{for(let r of o.nodes)c.addPageNode({id:r.componentId,componentId:r.componentId,semanticType:r.semanticType,answers:r.headingText?[r.headingText]:[],prominenceScore:r.prominenceScore,depth:r.depth});for(let r of o.edges)c.addStructuralEdge(r)}),b(h({},t),{getGraph:()=>c.snapshot(),destroy:()=>{n.destroy(),c.destroy(),t.destroy()}})}export{R as deriveSessionSegment,x as detectDeviceClass,M as detectTimeOfDay,_ as detectTrafficSource,oe as init,O as referrerDomainFromReferer};
|
package/dist/index-server.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var m=Object.defineProperty,k=Object.defineProperties,C=Object.getOwnPropertyDescriptor,I=Object.getOwnPropertyDescriptors,M=Object.getOwnPropertyNames,b=Object.getOwnPropertySymbols;var A=Object.prototype.hasOwnProperty,_=Object.prototype.propertyIsEnumerable;var v=(t,e,r)=>e in t?m(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r,O=(t,e)=>{for(var r in e||(e={}))A.call(e,r)&&v(t,r,e[r]);if(b)for(var r of b(e))_.call(e,r)&&v(t,r,e[r]);return t},P=(t,e)=>k(t,I(e));var $=(t,e)=>{for(var r in e)m(t,r,{get:e[r],enumerable:!0})},j=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of M(e))!A.call(t,s)&&s!==r&&m(t,s,{get:()=>e[s],enumerable:!(n=C(e,s))||n.enumerable});return t};var L=t=>j(m({},"__esModule",{value:!0}),t);var B={};$(B,{buildSessionUpsertPayload:()=>g,deriveSessionSegment:()=>w,detectDeviceClass:()=>y,detectTimeOfDay:()=>h,detectTrafficSource:()=>p,preloadAssignments:()=>R,preloadDecisions:()=>U,readSessionCookie:()=>x,referrerDomainFromReferer:()=>S});module.exports=L(B);function y(t){let e=t.toLowerCase();return/ipad|tablet|playbook|kindle|silk/.test(e)?"tablet":/mobi|iphone|ipod|android.*mobile|phone/.test(e)?"mobile":"desktop"}function p(t,e){if(!t)return"direct";try{let r=new URL(t);if(e)try{if(new URL(e).host===r.host)return"direct"}catch(s){}let n=r.hostname.toLowerCase();return/(^|\.)(google|bing|duckduckgo|yahoo)\./.test(n)?"search":/(^|\.)(twitter|x\.com|facebook|linkedin|reddit|t\.co)/.test(n)?"social":"referral"}catch(r){return"direct"}}function S(t){if(!t)return null;try{return new URL(t).hostname}catch(e){return null}}function h(t){let e=t.getHours();return e<6?"night":e<12?"morning":e<18?"afternoon":"evening"}function w(t){let e=g("__segment__",t);return`${e.deviceClass}:${e.trafficSource}`}function g(t,e){var a,c,u,o,i,d,l;let r=(c=(a=e==null?void 0:e.userAgent)==null?void 0:a.trim())!=null?c:"",n=(o=(u=e==null?void 0:e.referer)==null?void 0:u.trim())!=null?o:"",s=(i=e==null?void 0:e.now)!=null?i:new Date;return{sessionId:t,ephemeral:!1,utmParams:(d=e==null?void 0:e.utmParams)!=null?d:{},deviceClass:r?y(r):"desktop",trafficSource:n?p(n,e==null?void 0:e.appOrigin):"direct",referrerDomain:S(n),timeOfDay:h(s),dayOfWeek:(l=["sun","mon","tue","wed","thu","fri","sat"][s.getDay()])!=null?l:"sun"}}var D=1500;function f(t,e,r){let n=new AbortController,s=setTimeout(()=>n.abort(),r);return fetch(t,P(O({},e),{signal:n.signal})).finally(()=>clearTimeout(s))}async function R(t,e,r){var o;let n=(o=r.timeoutMs)!=null?o:D,s={"Content-Type":"application/json",Authorization:`Bearer ${r.apiKey}`};r.origin&&(s.Origin=r.origin);let a=g(e,{userAgent:r.userAgent,referer:r.referer,utmParams:r.utmParams,appOrigin:r.origin});try{(await f(`${r.baseUrl}/sessions`,{method:"POST",headers:s,body:JSON.stringify(a)},n)).status===402&&console.warn("[SentientUI] Session limit exceeded for this project. The bandit will stop learning until the limit resets. Upgrade at
|
|
1
|
+
"use strict";var m=Object.defineProperty,k=Object.defineProperties,C=Object.getOwnPropertyDescriptor,I=Object.getOwnPropertyDescriptors,M=Object.getOwnPropertyNames,b=Object.getOwnPropertySymbols;var A=Object.prototype.hasOwnProperty,_=Object.prototype.propertyIsEnumerable;var v=(t,e,r)=>e in t?m(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r,O=(t,e)=>{for(var r in e||(e={}))A.call(e,r)&&v(t,r,e[r]);if(b)for(var r of b(e))_.call(e,r)&&v(t,r,e[r]);return t},P=(t,e)=>k(t,I(e));var $=(t,e)=>{for(var r in e)m(t,r,{get:e[r],enumerable:!0})},j=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of M(e))!A.call(t,s)&&s!==r&&m(t,s,{get:()=>e[s],enumerable:!(n=C(e,s))||n.enumerable});return t};var L=t=>j(m({},"__esModule",{value:!0}),t);var B={};$(B,{buildSessionUpsertPayload:()=>g,deriveSessionSegment:()=>w,detectDeviceClass:()=>y,detectTimeOfDay:()=>h,detectTrafficSource:()=>p,preloadAssignments:()=>R,preloadDecisions:()=>U,readSessionCookie:()=>x,referrerDomainFromReferer:()=>S});module.exports=L(B);function y(t){let e=t.toLowerCase();return/ipad|tablet|playbook|kindle|silk/.test(e)?"tablet":/mobi|iphone|ipod|android.*mobile|phone/.test(e)?"mobile":"desktop"}function p(t,e){if(!t)return"direct";try{let r=new URL(t);if(e)try{if(new URL(e).host===r.host)return"direct"}catch(s){}let n=r.hostname.toLowerCase();return/(^|\.)(google|bing|duckduckgo|yahoo)\./.test(n)?"search":/(^|\.)(twitter|x\.com|facebook|linkedin|reddit|t\.co)/.test(n)?"social":"referral"}catch(r){return"direct"}}function S(t){if(!t)return null;try{return new URL(t).hostname}catch(e){return null}}function h(t){let e=t.getHours();return e<6?"night":e<12?"morning":e<18?"afternoon":"evening"}function w(t){let e=g("__segment__",t);return`${e.deviceClass}:${e.trafficSource}`}function g(t,e){var a,c,u,o,i,d,l;let r=(c=(a=e==null?void 0:e.userAgent)==null?void 0:a.trim())!=null?c:"",n=(o=(u=e==null?void 0:e.referer)==null?void 0:u.trim())!=null?o:"",s=(i=e==null?void 0:e.now)!=null?i:new Date;return{sessionId:t,ephemeral:!1,utmParams:(d=e==null?void 0:e.utmParams)!=null?d:{},deviceClass:r?y(r):"desktop",trafficSource:n?p(n,e==null?void 0:e.appOrigin):"direct",referrerDomain:S(n),timeOfDay:h(s),dayOfWeek:(l=["sun","mon","tue","wed","thu","fri","sat"][s.getDay()])!=null?l:"sun"}}var D=1500;function f(t,e,r){let n=new AbortController,s=setTimeout(()=>n.abort(),r);return fetch(t,P(O({},e),{signal:n.signal})).finally(()=>clearTimeout(s))}async function R(t,e,r){var o;let n=(o=r.timeoutMs)!=null?o:D,s={"Content-Type":"application/json",Authorization:`Bearer ${r.apiKey}`};r.origin&&(s.Origin=r.origin);let a=g(e,{userAgent:r.userAgent,referer:r.referer,utmParams:r.utmParams,appOrigin:r.origin});try{(await f(`${r.baseUrl}/sessions`,{method:"POST",headers:s,body:JSON.stringify(a)},n)).status===402&&console.warn("[SentientUI] Session limit exceeded for this project. The bandit will stop learning until the limit resets. Upgrade at sentient-ui.com/pricing")}catch(i){}let c=await Promise.allSettled(t.map(async({id:i,variantIds:d})=>{let l=await f(`${r.baseUrl}/assign`,{method:"POST",headers:s,body:JSON.stringify({sessionId:e,componentId:i,variantIds:d})},n);if(!l.ok)return null;let T=await l.json();return{id:i,variantId:T.variantId}})),u={};for(let i of c)i.status==="fulfilled"&&i.value&&(u[i.value.id]=i.value.variantId);return u}function x(t){var e,r;return(r=(e=t.get("_snt_uid"))==null?void 0:e.value)!=null?r:null}async function U(t,e,r){var u;let n=(u=r.timeoutMs)!=null?u:D,s={layoutOrder:t.sections,assignments:{},persona:"unknown",confidence:0},a={"Content-Type":"application/json",Authorization:`Bearer ${r.apiKey}`};r.origin&&(a.Origin=r.origin);let c=g(e,{userAgent:r.userAgent,referer:r.referer,utmParams:r.utmParams,appOrigin:r.origin});try{await f(`${r.baseUrl}/sessions`,{method:"POST",headers:a,body:JSON.stringify(c)},n)}catch(o){}try{let o=await f(`${r.baseUrl}/decide`,{method:"POST",headers:a,body:JSON.stringify({sessionId:e,sections:t.sections.map(i=>({id:i})),components:t.components})},n);return o.ok?await o.json():s}catch(o){return s}}0&&(module.exports={buildSessionUpsertPayload,deriveSessionSegment,detectDeviceClass,detectTimeOfDay,detectTrafficSource,preloadAssignments,preloadDecisions,readSessionCookie,referrerDomainFromReferer});
|
package/dist/index-server.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as c,b as p,c as
|
|
1
|
+
import{a as c,b as p,c as A,d as v,e as b,f as h,g as O,h as l}from"./chunk-QCYVBCUV.mjs";var y=1500;function d(r,t,e){let n=new AbortController,i=setTimeout(()=>n.abort(),e);return fetch(r,p(c({},t),{signal:n.signal})).finally(()=>clearTimeout(i))}async function P(r,t,e){var o;let n=(o=e.timeoutMs)!=null?o:y,i={"Content-Type":"application/json",Authorization:`Bearer ${e.apiKey}`};e.origin&&(i.Origin=e.origin);let a=l(t,{userAgent:e.userAgent,referer:e.referer,utmParams:e.utmParams,appOrigin:e.origin});try{(await d(`${e.baseUrl}/sessions`,{method:"POST",headers:i,body:JSON.stringify(a)},n)).status===402&&console.warn("[SentientUI] Session limit exceeded for this project. The bandit will stop learning until the limit resets. Upgrade at sentient-ui.com/pricing")}catch(s){}let g=await Promise.allSettled(r.map(async({id:s,variantIds:S})=>{let m=await d(`${e.baseUrl}/assign`,{method:"POST",headers:i,body:JSON.stringify({sessionId:t,componentId:s,variantIds:S})},n);if(!m.ok)return null;let f=await m.json();return{id:s,variantId:f.variantId}})),u={};for(let s of g)s.status==="fulfilled"&&s.value&&(u[s.value.id]=s.value.variantId);return u}function T(r){var t,e;return(e=(t=r.get("_snt_uid"))==null?void 0:t.value)!=null?e:null}async function R(r,t,e){var u;let n=(u=e.timeoutMs)!=null?u:y,i={layoutOrder:r.sections,assignments:{},persona:"unknown",confidence:0},a={"Content-Type":"application/json",Authorization:`Bearer ${e.apiKey}`};e.origin&&(a.Origin=e.origin);let g=l(t,{userAgent:e.userAgent,referer:e.referer,utmParams:e.utmParams,appOrigin:e.origin});try{await d(`${e.baseUrl}/sessions`,{method:"POST",headers:a,body:JSON.stringify(g)},n)}catch(o){}try{let o=await d(`${e.baseUrl}/decide`,{method:"POST",headers:a,body:JSON.stringify({sessionId:t,sections:r.sections.map(s=>({id:s})),components:r.components})},n);return o.ok?await o.json():i}catch(o){return i}}export{l as buildSessionUpsertPayload,O as deriveSessionSegment,A as detectDeviceClass,h as detectTimeOfDay,v as detectTrafficSource,P as preloadAssignments,R as preloadDecisions,T as readSessionCookie,b as referrerDomainFromReferer};
|
package/dist/index.d.cts
CHANGED
|
@@ -126,6 +126,7 @@ type GraphClient = {
|
|
|
126
126
|
};
|
|
127
127
|
|
|
128
128
|
type MicroSignalEmitter = (signalType: 'rage_click' | 'text_copy' | 'scroll_hesitation' | 'tab_loss', extra?: Record<string, unknown>) => void;
|
|
129
|
+
type MicroSignalType = Parameters<MicroSignalEmitter>[0];
|
|
129
130
|
/**
|
|
130
131
|
* Attaches passive behavioral detectors to `node`. Calls `emit` when a signal
|
|
131
132
|
* fires. Each signal type fires at most once per call to this function.
|
|
@@ -192,4 +193,4 @@ declare function grantConsent(): void;
|
|
|
192
193
|
*/
|
|
193
194
|
declare function init(config: SentientConfig): SentientClient;
|
|
194
195
|
|
|
195
|
-
export { type AssignResult, type Assignment, type AssignmentCache, type ContentAddedEvent, type DOMScanner, type EventQueue, type EventType, type GraphClient, type GraphConfig, type GraphSnapshot, type MicroSignalEmitter, type PageNode, type QueueConfig, type ScanResult, type ScannedNode, type SentientClient, type SentientConfig, type SentientEvent, type SessionConfig, type SessionManager, attachMicroSignalDetectors, grantConsent, init };
|
|
196
|
+
export { type AssignResult, type Assignment, type AssignmentCache, type ContentAddedEvent, type DOMScanner, type EventQueue, type EventType, type GraphClient, type GraphConfig, type GraphSnapshot, type MicroSignalEmitter, type MicroSignalType, type PageNode, type QueueConfig, type ScanResult, type ScannedNode, type SentientClient, type SentientConfig, type SentientEvent, type SessionConfig, type SessionManager, attachMicroSignalDetectors, grantConsent, init };
|
package/dist/index.d.ts
CHANGED
|
@@ -126,6 +126,7 @@ type GraphClient = {
|
|
|
126
126
|
};
|
|
127
127
|
|
|
128
128
|
type MicroSignalEmitter = (signalType: 'rage_click' | 'text_copy' | 'scroll_hesitation' | 'tab_loss', extra?: Record<string, unknown>) => void;
|
|
129
|
+
type MicroSignalType = Parameters<MicroSignalEmitter>[0];
|
|
129
130
|
/**
|
|
130
131
|
* Attaches passive behavioral detectors to `node`. Calls `emit` when a signal
|
|
131
132
|
* fires. Each signal type fires at most once per call to this function.
|
|
@@ -192,4 +193,4 @@ declare function grantConsent(): void;
|
|
|
192
193
|
*/
|
|
193
194
|
declare function init(config: SentientConfig): SentientClient;
|
|
194
195
|
|
|
195
|
-
export { type AssignResult, type Assignment, type AssignmentCache, type ContentAddedEvent, type DOMScanner, type EventQueue, type EventType, type GraphClient, type GraphConfig, type GraphSnapshot, type MicroSignalEmitter, type PageNode, type QueueConfig, type ScanResult, type ScannedNode, type SentientClient, type SentientConfig, type SentientEvent, type SessionConfig, type SessionManager, attachMicroSignalDetectors, grantConsent, init };
|
|
196
|
+
export { type AssignResult, type Assignment, type AssignmentCache, type ContentAddedEvent, type DOMScanner, type EventQueue, type EventType, type GraphClient, type GraphConfig, type GraphSnapshot, type MicroSignalEmitter, type MicroSignalType, type PageNode, type QueueConfig, type ScanResult, type ScannedNode, type SentientClient, type SentientConfig, type SentientEvent, type SessionConfig, type SessionManager, attachMicroSignalDetectors, grantConsent, init };
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var N=Object.defineProperty,ae=Object.defineProperties,ce=Object.getOwnPropertyDescriptor,le=Object.getOwnPropertyDescriptors,ue=Object.getOwnPropertyNames,q=Object.getOwnPropertySymbols;var X=Object.prototype.hasOwnProperty,de=Object.prototype.propertyIsEnumerable;var V=(e,t,r)=>t in e?N(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,B=(e,t)=>{for(var r in t||(t={}))X.call(t,r)&&V(e,r,t[r]);if(q)for(var r of q(t))de.call(t,r)&&V(e,r,t[r]);return e},z=(e,t)=>ae(e,le(t));var ge=(e,t)=>{for(var r in t)N(e,r,{get:t[r],enumerable:!0})},fe=(e,t,r,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of ue(t))!X.call(e,i)&&i!==r&&N(e,i,{get:()=>t[i],enumerable:!(o=ce(t,i))||o.enumerable});return e};var me=e=>fe(N({},"__esModule",{value:!0}),e);var Pe={};ge(Pe,{attachMicroSignalDetectors:()=>ie,deriveSessionSegment:()=>ne,detectDeviceClass:()=>O,detectTimeOfDay:()=>L,detectTrafficSource:()=>R,grantConsent:()=>Le,init:()=>oe,referrerDomainFromReferer:()=>U});module.exports=me(Pe);var pe="_snt_uid";var T="_snt_uid";function he(){try{if(typeof crypto!="undefined"&&typeof crypto.randomUUID=="function")return crypto.randomUUID()}catch(t){}let e=()=>Math.floor(Math.random()*4294967295).toString(16).padStart(8,"0");return`${e()}-${e()}-${e()}-${e()}`}function ye(e){try{let t=document.cookie.match(new RegExp(`(?:^|; )${e}=([^;]*)`));return t?decodeURIComponent(t[1]):null}catch(t){return null}}function Se(e,t,r){try{document.cookie=`${e}=${encodeURIComponent(t)}; max-age=${r}; SameSite=strict; path=/`}catch(o){}}function ve(e){try{return localStorage.getItem(e)}catch(t){return null}}function we(e,t){try{return localStorage.setItem(e,t),!0}catch(r){return!1}}function xe(e){try{return sessionStorage.getItem(e)}catch(t){return null}}function Ee(e,t){try{return sessionStorage.setItem(e,t),!0}catch(r){return!1}}function _e(e){try{sessionStorage.removeItem(e)}catch(t){}}function be(e){try{return document.cookie=`${e}_probe=1; max-age=1; SameSite=strict; path=/`,/(?:^|; )_snt_uid_probe=1/.test(document.cookie)||document.cookie.indexOf(`${e}_probe=1`)!==-1}catch(t){return!1}}function ke(e){try{localStorage.removeItem(e)}catch(t){}}function Ie(e){try{document.cookie=`${e}=; max-age=0; SameSite=strict; path=/`}catch(t){}}var Ce={getSessionId:()=>null,isEphemeral:()=>!1,destroy:()=>{}};function Z(e){var f,d,m,v,h;if(typeof window=="undefined")return Ce;let t=(f=e==null?void 0:e.cookieName)!=null?f:pe,o=((d=e==null?void 0:e.cookieTTLDays)!=null?d:365)*24*60*60,i=(h=(v=(m=ye(t))!=null?m:ve(T))!=null?v:xe(T))!=null?h:he();Se(t,i,o);let s=we(T,i),n=be(t),a=s?!1:Ee(T,i),c=!s&&!n&&!a;return{getSessionId:()=>i,isEphemeral:()=>c,destroy:()=>{i=null,Ie(t),ke(T),_e(T)}}}var G="_snt_retry";var Te={push:()=>{},flush:()=>{},destroy:()=>{}};function De(e){try{let t=localStorage.getItem(G);if(!t)return[];let r=JSON.parse(t);return Array.isArray(r)?(localStorage.removeItem(G),r.slice(-e)):[]}catch(t){return[]}}function J(e,t){try{let o=[...(()=>{try{let i=localStorage.getItem(G);if(!i)return[];let s=JSON.parse(i);return Array.isArray(s)?s:[]}catch(i){return[]}})(),...e].slice(-t);localStorage.setItem(G,JSON.stringify(o))}catch(r){}}function ee(e){var I,k,C;if(typeof window=="undefined")return Te;let t=(I=e.flushIntervalMs)!=null?I:5e3,r=(k=e.maxBatchSize)!=null?k:20,o=(C=e.maxRetrySize)!=null?C:100,i=e.ingestUrl,s=e.apiKey,n=[],a=new Set,c=[],f=l=>{for(let g of l)d.delete(g),!a.has(g)&&(a.add(g),c.push(g));for(;c.length>500;){let g=c.shift();g&&a.delete(g)}},d=new Set,m=l=>{a.has(l.id)||d.has(l.id)||(d.add(l.id),n.push(l))},v=De(o);for(let l of v)m(l);let h=0,w=0,P=l=>{if(l.length===0)return;let g=JSON.stringify(l),y=l.map(b=>b.id),x;try{x=fetch(i,{method:"POST",keepalive:!0,body:g,headers:{"Content-Type":"application/json",Authorization:`Bearer ${s}`}})}catch(b){J(l,o);for(let W of y)d.delete(W);w++,h=Date.now()+Math.min(6e4,1e3*2**Math.min(w,6));return}let _=b=>{if(b.ok||b.status>=400&&b.status<500&&b.status!==429){f(y),w=0,h=0;return}J(l,o);for(let W of y)d.delete(W);w++,h=Date.now()+Math.min(6e4,1e3*2**Math.min(w,6))};x instanceof Promise?x.then(_).catch(()=>{J(l,o);for(let b of y)d.delete(b);w++,h=Date.now()+Math.min(6e4,1e3*2**Math.min(w,6))}):_(x)},D=typeof TextEncoder!="undefined"?new TextEncoder:null,$=l=>D?D.encode(l).length:l.length,K=l=>{let g=[],y=2;for(let x of l){let _=$(JSON.stringify(x))+1;if(g.length>0&&y+_>57344||g.length>=r)break;g.push(x),y+=_}return g},E=()=>{try{if(Date.now()<h)return;for(;n.length>0;){let l=n.filter(y=>!a.has(y.id));if(n.length=0,l.length===0)break;let g=K(l);if(g.length===0)break;g.length<l.length&&n.push(...l.slice(g.length)),P(g)}}catch(l){}},A=!0,u=null;u=setInterval(()=>{A&&E()},t);let p=()=>{document.visibilityState==="hidden"&&E()},S=()=>{E()};return document.addEventListener("visibilitychange",p),window.addEventListener("beforeunload",S),{push(l){m(l),n.length>=r&&E()},flush:E,destroy(){A=!1,u!==null&&(clearInterval(u),u=null),document.removeEventListener("visibilitychange",p),window.removeEventListener("beforeunload",S),E()}}}var F="_snt_asgn_";function Q(e,t){return`${e}:${t}`}function Ae(e,t){return`${F}${e}_${t}`}function j(){try{let e=[];for(let t=0;t<localStorage.length;t++){let r=localStorage.key(t);r!=null&&r.startsWith(F)&&e.push(r)}return e}catch(e){return[]}}function te(e=18e5){let t=new Map,r=i=>i.assignedAt+e<Date.now();return typeof window!="undefined"&&(()=>{for(let i of j())try{let s=localStorage.getItem(i);if(!s)continue;let n=JSON.parse(s);if(r(n)){localStorage.removeItem(i);continue}let a=i.slice(F.length),c=a.lastIndexOf("_");if(c<0)continue;let f=a.slice(0,c),d=a.slice(c+1);t.set(Q(f,d),n)}catch(s){}})(),{get(i,s){let n=t.get(Q(i,s));return n?r(n)?(t.delete(Q(i,s)),null):n:null},set(i,s,n){let a=Q(i,s);t.set(a,n);try{localStorage.setItem(Ae(i,s),JSON.stringify(n))}catch(c){}},invalidate(i){let s=`${i}:`;for(let n of[...t.keys()])n.startsWith(s)&&t.delete(n);for(let n of j()){let a=n.slice(F.length),c=a.lastIndexOf("_");if(c<0)continue;if(a.slice(0,c)===i)try{localStorage.removeItem(n)}catch(d){}}},clear(){t.clear();for(let i of j())try{localStorage.removeItem(i)}catch(s){}}}}function O(e){let t=e.toLowerCase();return/ipad|tablet|playbook|kindle|silk/.test(t)?"tablet":/mobi|iphone|ipod|android.*mobile|phone/.test(t)?"mobile":"desktop"}function R(e,t){if(!e)return"direct";try{let r=new URL(e);if(t)try{if(new URL(t).host===r.host)return"direct"}catch(i){}let o=r.hostname.toLowerCase();return/(^|\.)(google|bing|duckduckgo|yahoo)\./.test(o)?"search":/(^|\.)(twitter|x\.com|facebook|linkedin|reddit|t\.co)/.test(o)?"social":"referral"}catch(r){return"direct"}}function U(e){if(!e)return null;try{return new URL(e).hostname}catch(t){return null}}function L(e){let t=e.getHours();return t<6?"night":t<12?"morning":t<18?"afternoon":"evening"}function ne(e){let t=Oe("__segment__",e);return`${t.deviceClass}:${t.trafficSource}`}function Oe(e,t){var s,n,a,c,f,d,m;let r=(n=(s=t==null?void 0:t.userAgent)==null?void 0:s.trim())!=null?n:"",o=(c=(a=t==null?void 0:t.referer)==null?void 0:a.trim())!=null?c:"",i=(f=t==null?void 0:t.now)!=null?f:new Date;return{sessionId:e,ephemeral:!1,utmParams:(d=t==null?void 0:t.utmParams)!=null?d:{},deviceClass:r?O(r):"desktop",trafficSource:o?R(o,t==null?void 0:t.appOrigin):"direct",referrerDomain:U(o),timeOfDay:L(i),dayOfWeek:(m=["sun","mon","tue","wed","thu","fri","sat"][i.getDay()])!=null?m:"sun"}}function ie(e,t,r){let o=[];{let n=!1,a=[],c=()=>{if(n)return;let f=Date.now();for(a.push(f);a.length>0&&f-a[0]>500;)a.shift();a.length>=3&&(n=!0,e("rage_click"))};t.addEventListener("click",c),o.push(()=>t.removeEventListener("click",c))}{let i=!1,s=n=>{if(i||!(n.target instanceof Node)||!t.contains(n.target)&&t!==n.target)return;i=!0;let a=typeof window!="undefined"?window.getSelection():null,c=a?a.toString().length:0;e("text_copy",{selectionLength:c})};document.addEventListener("copy",s),o.push(()=>document.removeEventListener("copy",s))}{let i=!1,s=!1,n=null,a=()=>{n!==null&&(clearTimeout(n),n=null)},c=()=>{i||!s||(a(),n=setTimeout(()=>{!i&&s&&(i=!0,e("scroll_hesitation"))},3e3))},f=()=>{a(),c()},d=v=>{for(let h of v)s=h.intersectionRatio>.3,s?c():a()};window.__lastIOCallback=d;let m=new IntersectionObserver(d,{threshold:[.3]});m.observe(t),window.addEventListener("scroll",f,{passive:!0}),o.push(()=>{m.disconnect(),window.removeEventListener("scroll",f),a()})}{let i=!1,s=r!=null?r:Date.now(),n=()=>{if(i||document.visibilityState!=="hidden")return;let a=Date.now()-s;a<15e3&&(i=!0,e("tab_loss",{timeOnPage:a}))};document.addEventListener("visibilitychange",n),o.push(()=>document.removeEventListener("visibilitychange",n))}return()=>{for(let i of o)i()}}var re="https://sentient-api.fly.dev/v1/events",H=null,Y=null;function Re(){try{if(typeof crypto!="undefined"&&typeof crypto.randomUUID=="function")return crypto.randomUUID()}catch(e){}return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>{let t=Math.random()*16|0;return(e==="x"?t:t&3|8).toString(16)})}var M={track:()=>{},goal:()=>{},identify:()=>{},getAssignment:()=>null,assign:()=>Promise.resolve(null),getGraph:()=>({pageNodes:[],capturedAt:0}),destroy:()=>{}};function Ue(){try{let e={},t=new URLSearchParams(window.location.search);for(let[r,o]of t)r.startsWith("utm_")&&(e[r]=o);return e}catch(e){return{}}}function se(e){return e.replace(/\/events\/?$/,"")}function Le(){if(typeof window=="undefined")return;if(!H){console.warn("[sentient] grantConsent() called before init()");return}let e=Y;Y=null;let t=oe(z(B({},H),{consent:!0}));e==null||e(t)}function Me(e){var i;let t=se((i=e.ingestUrl)!=null?i:re),r={"Content-Type":"application/json",Authorization:`Bearer ${e.apiKey}`},o={track:()=>{},goal:()=>{},identify:()=>{},getAssignment:()=>null,async assign(s,n,a){try{let c=new URLSearchParams({componentId:s});for(let m of n!=null?n:[])c.append("variantIds[]",m);let f=await fetch(`${t}/winner?${c.toString()}`,{headers:r});return f.ok?{variantId:(await f.json()).variantId,assignmentTtlMs:0}:n!=null&&n[0]?{variantId:n[0],assignmentTtlMs:0}:null}catch(c){return n!=null&&n[0]?{variantId:n[0],assignmentTtlMs:0}:null}},getGraph:()=>({pageNodes:[],capturedAt:0}),destroy:()=>{}};return Y=s=>{o=s},{track:s=>o.track(s),goal:(s,n)=>o.goal(s,n),identify:s=>o.identify(s),getAssignment:(s,n)=>o.getAssignment(s,n),assign:(s,n,a,c)=>o.assign(s,n,a,c),getGraph:()=>o.getGraph(),destroy:()=>o.destroy()}}function oe(e){var D,$,K,E,A;if(typeof window=="undefined")return M;if(H=e,e.consent===!1)return e.preConsentBehavior==="statistical_winner"?!e.apiKey||!e.apiKey.startsWith("pk_")?(console.warn("[sentient] init() called with an invalid apiKey \u2014 expected a pk_ public key. SDK disabled."),M):Me(e):M;if(!e.apiKey||!e.apiKey.startsWith("pk_"))return console.warn("[sentient] init() called with an invalid apiKey \u2014 expected a pk_ public key. SDK disabled."),M;if(e.ingestUrl==="")return console.warn("[sentient] init() called with an empty ingestUrl. SDK disabled."),M;let t=(D=e.ingestUrl)!=null?D:re,r=Date.now(),o=Z(),i=te(),s=ee({ingestUrl:t,apiKey:e.apiKey}),n=se(t),a={"Content-Type":"application/json",Authorization:`Bearer ${e.apiKey}`},c=O(($=navigator.userAgent)!=null?$:""),f=typeof window!="undefined"?window.location.origin:void 0,d=R((K=document.referrer)!=null?K:"",f),m=(E=e.sessionSegment)!=null?E:`${c}:${d}`,v=new Map;if(e.initialAssignments)for(let[u,p]of Object.entries(e.initialAssignments))i.set(u,m,{variantId:p,assignedAt:Date.now(),segment:m,confidence:1});let h=Promise.resolve(),w=o.getSessionId();if(w){let u=U((A=document.referrer)!=null?A:""),p=B({sessionId:w,deviceClass:c,trafficSource:d,referrerDomain:u,utmParams:Ue(),timeOfDay:L(new Date),dayOfWeek:["sun","mon","tue","wed","thu","fri","sat"][new Date().getDay()],ephemeral:o.isEphemeral()},e.userId?{userId:e.userId}:{});try{h=fetch(`${n}/sessions`,{method:"POST",keepalive:!0,body:JSON.stringify(p),headers:a}).then(S=>{S.status===402&&console.warn("[SentientUI] Session limit exceeded for this project. The bandit will stop learning until the limit resets. Upgrade at sentientui.dev/pricing")}).catch(()=>{})}catch(S){}}e.debug&&(console.log("[sentient] initialized",{context:e.context}),window.__sentient={client:null,queue:s});let P={goal(u,p={},S=1,I=0){let k=o.getSessionId();k&&h.then(()=>{fetch(`${n}/goals`,{method:"POST",keepalive:!0,body:JSON.stringify({sessionId:k,name:u,metadata:p,weight:S,stepIndex:I}),headers:a}).catch(()=>{})})},identify(u){let p=o.getSessionId();p&&h.then(()=>{fetch(`${n}/sessions`,{method:"POST",keepalive:!0,body:JSON.stringify({sessionId:p,userId:u,ephemeral:o.isEphemeral()}),headers:a}).catch(()=>{})})},track(u){let p=o.getSessionId();if(!p)return;let S=z(B({},u),{id:Re(),sessionId:p,timestamp:Date.now(),timeInSession:Date.now()-r});s.push(S),e.debug&&console.log("[sentient] track",S)},getAssignment(u,p){return i.get(u,p)},async assign(u,p,S,I){let k=o.getSessionId();if(!k)return null;let C=i.get(u,m);if(C)return{variantId:C.variantId,assignmentTtlMs:0,content:C.content};let l=v.get(u);if(l)return l;let g=(async()=>{await h;try{let y={sessionId:k,componentId:u,variantIds:p};I!==void 0?y.agentDataByVariant=I:S!==void 0&&(y.agentData=S);let x=await fetch(`${n}/assign`,{method:"POST",body:JSON.stringify(y),headers:a});if(!x.ok)return null;let _=await x.json();return i.set(u,m,{variantId:_.variantId,assignedAt:Date.now(),segment:m,confidence:1,content:_.content}),_}catch(y){return null}finally{v.delete(u)}})();return v.set(u,g),g},getGraph(){return{pageNodes:[],capturedAt:0}},destroy(){s.destroy(),o.destroy(),e.debug&&console.log("[sentient] destroyed")}};if(e.debug){let u=window;u.__sentient&&(u.__sentient.client=P)}return P}0&&(module.exports={attachMicroSignalDetectors,deriveSessionSegment,detectDeviceClass,detectTimeOfDay,detectTrafficSource,grantConsent,init,referrerDomainFromReferer});
|
|
1
|
+
"use strict";var N=Object.defineProperty,ae=Object.defineProperties,ce=Object.getOwnPropertyDescriptor,le=Object.getOwnPropertyDescriptors,ue=Object.getOwnPropertyNames,q=Object.getOwnPropertySymbols;var X=Object.prototype.hasOwnProperty,de=Object.prototype.propertyIsEnumerable;var V=(e,t,r)=>t in e?N(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,B=(e,t)=>{for(var r in t||(t={}))X.call(t,r)&&V(e,r,t[r]);if(q)for(var r of q(t))de.call(t,r)&&V(e,r,t[r]);return e},z=(e,t)=>ae(e,le(t));var ge=(e,t)=>{for(var r in t)N(e,r,{get:t[r],enumerable:!0})},fe=(e,t,r,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of ue(t))!X.call(e,i)&&i!==r&&N(e,i,{get:()=>t[i],enumerable:!(o=ce(t,i))||o.enumerable});return e};var me=e=>fe(N({},"__esModule",{value:!0}),e);var Pe={};ge(Pe,{attachMicroSignalDetectors:()=>ie,deriveSessionSegment:()=>ne,detectDeviceClass:()=>O,detectTimeOfDay:()=>L,detectTrafficSource:()=>R,grantConsent:()=>Le,init:()=>oe,referrerDomainFromReferer:()=>U});module.exports=me(Pe);var pe="_snt_uid";var C="_snt_uid";function ye(){try{if(typeof crypto!="undefined"&&typeof crypto.randomUUID=="function")return crypto.randomUUID()}catch(t){}let e=()=>Math.floor(Math.random()*4294967295).toString(16).padStart(8,"0");return`${e()}-${e()}-${e()}-${e()}`}function he(e){try{let t=document.cookie.match(new RegExp(`(?:^|; )${e}=([^;]*)`));return t?decodeURIComponent(t[1]):null}catch(t){return null}}function Se(e,t,r){try{document.cookie=`${e}=${encodeURIComponent(t)}; max-age=${r}; SameSite=strict; path=/`}catch(o){}}function ve(e){try{return localStorage.getItem(e)}catch(t){return null}}function we(e,t){try{return localStorage.setItem(e,t),!0}catch(r){return!1}}function xe(e){try{return sessionStorage.getItem(e)}catch(t){return null}}function Ee(e,t){try{return sessionStorage.setItem(e,t),!0}catch(r){return!1}}function _e(e){try{sessionStorage.removeItem(e)}catch(t){}}function be(e){try{return document.cookie=`${e}_probe=1; max-age=1; SameSite=strict; path=/`,/(?:^|; )_snt_uid_probe=1/.test(document.cookie)||document.cookie.indexOf(`${e}_probe=1`)!==-1}catch(t){return!1}}function ke(e){try{localStorage.removeItem(e)}catch(t){}}function Ie(e){try{document.cookie=`${e}=; max-age=0; SameSite=strict; path=/`}catch(t){}}var Te={getSessionId:()=>null,isEphemeral:()=>!1,destroy:()=>{}};function Z(e){var f,d,m,v,y;if(typeof window=="undefined")return Te;let t=(f=e==null?void 0:e.cookieName)!=null?f:pe,o=((d=e==null?void 0:e.cookieTTLDays)!=null?d:365)*24*60*60,i=(y=(v=(m=he(t))!=null?m:ve(C))!=null?v:xe(C))!=null?y:ye();Se(t,i,o);let s=we(C,i),n=be(t),a=s?!1:Ee(C,i),c=!s&&!n&&!a;return{getSessionId:()=>i,isEphemeral:()=>c,destroy:()=>{i=null,Ie(t),ke(C),_e(C)}}}var G="_snt_retry";var Ce={push:()=>{},flush:()=>{},destroy:()=>{}};function De(e){try{let t=localStorage.getItem(G);if(!t)return[];let r=JSON.parse(t);return Array.isArray(r)?(localStorage.removeItem(G),r.slice(-e)):[]}catch(t){return[]}}function J(e,t){try{let o=[...(()=>{try{let i=localStorage.getItem(G);if(!i)return[];let s=JSON.parse(i);return Array.isArray(s)?s:[]}catch(i){return[]}})(),...e].slice(-t);localStorage.setItem(G,JSON.stringify(o))}catch(r){}}function ee(e){var I,k,T;if(typeof window=="undefined")return Ce;let t=(I=e.flushIntervalMs)!=null?I:5e3,r=(k=e.maxBatchSize)!=null?k:20,o=(T=e.maxRetrySize)!=null?T:100,i=e.ingestUrl,s=e.apiKey,n=[],a=new Set,c=[],f=l=>{for(let g of l)d.delete(g),!a.has(g)&&(a.add(g),c.push(g));for(;c.length>500;){let g=c.shift();g&&a.delete(g)}},d=new Set,m=l=>{a.has(l.id)||d.has(l.id)||(d.add(l.id),n.push(l))},v=De(o);for(let l of v)m(l);let y=0,w=0,P=l=>{if(l.length===0)return;let g=JSON.stringify(l),h=l.map(b=>b.id),x;try{x=fetch(i,{method:"POST",keepalive:!0,body:g,headers:{"Content-Type":"application/json",Authorization:`Bearer ${s}`}})}catch(b){J(l,o);for(let W of h)d.delete(W);w++,y=Date.now()+Math.min(6e4,1e3*2**Math.min(w,6));return}let _=b=>{if(b.ok||b.status>=400&&b.status<500&&b.status!==429){f(h),w=0,y=0;return}J(l,o);for(let W of h)d.delete(W);w++,y=Date.now()+Math.min(6e4,1e3*2**Math.min(w,6))};x instanceof Promise?x.then(_).catch(()=>{J(l,o);for(let b of h)d.delete(b);w++,y=Date.now()+Math.min(6e4,1e3*2**Math.min(w,6))}):_(x)},D=typeof TextEncoder!="undefined"?new TextEncoder:null,$=l=>D?D.encode(l).length:l.length,K=l=>{let g=[],h=2;for(let x of l){let _=$(JSON.stringify(x))+1;if(g.length>0&&h+_>57344||g.length>=r)break;g.push(x),h+=_}return g},E=()=>{try{if(Date.now()<y)return;for(;n.length>0;){let l=n.filter(h=>!a.has(h.id));if(n.length=0,l.length===0)break;let g=K(l);if(g.length===0)break;g.length<l.length&&n.push(...l.slice(g.length)),P(g)}}catch(l){}},A=!0,u=null;u=setInterval(()=>{A&&E()},t);let p=()=>{document.visibilityState==="hidden"&&E()},S=()=>{E()};return document.addEventListener("visibilitychange",p),window.addEventListener("beforeunload",S),{push(l){m(l),n.length>=r&&E()},flush:E,destroy(){A=!1,u!==null&&(clearInterval(u),u=null),document.removeEventListener("visibilitychange",p),window.removeEventListener("beforeunload",S),E()}}}var F="_snt_asgn_";function Q(e,t){return`${e}:${t}`}function Ae(e,t){return`${F}${e}_${t}`}function j(){try{let e=[];for(let t=0;t<localStorage.length;t++){let r=localStorage.key(t);r!=null&&r.startsWith(F)&&e.push(r)}return e}catch(e){return[]}}function te(e=18e5){let t=new Map,r=i=>i.assignedAt+e<Date.now();return typeof window!="undefined"&&(()=>{for(let i of j())try{let s=localStorage.getItem(i);if(!s)continue;let n=JSON.parse(s);if(r(n)){localStorage.removeItem(i);continue}let a=i.slice(F.length),c=a.lastIndexOf("_");if(c<0)continue;let f=a.slice(0,c),d=a.slice(c+1);t.set(Q(f,d),n)}catch(s){}})(),{get(i,s){let n=t.get(Q(i,s));return n?r(n)?(t.delete(Q(i,s)),null):n:null},set(i,s,n){let a=Q(i,s);t.set(a,n);try{localStorage.setItem(Ae(i,s),JSON.stringify(n))}catch(c){}},invalidate(i){let s=`${i}:`;for(let n of[...t.keys()])n.startsWith(s)&&t.delete(n);for(let n of j()){let a=n.slice(F.length),c=a.lastIndexOf("_");if(c<0)continue;if(a.slice(0,c)===i)try{localStorage.removeItem(n)}catch(d){}}},clear(){t.clear();for(let i of j())try{localStorage.removeItem(i)}catch(s){}}}}function O(e){let t=e.toLowerCase();return/ipad|tablet|playbook|kindle|silk/.test(t)?"tablet":/mobi|iphone|ipod|android.*mobile|phone/.test(t)?"mobile":"desktop"}function R(e,t){if(!e)return"direct";try{let r=new URL(e);if(t)try{if(new URL(t).host===r.host)return"direct"}catch(i){}let o=r.hostname.toLowerCase();return/(^|\.)(google|bing|duckduckgo|yahoo)\./.test(o)?"search":/(^|\.)(twitter|x\.com|facebook|linkedin|reddit|t\.co)/.test(o)?"social":"referral"}catch(r){return"direct"}}function U(e){if(!e)return null;try{return new URL(e).hostname}catch(t){return null}}function L(e){let t=e.getHours();return t<6?"night":t<12?"morning":t<18?"afternoon":"evening"}function ne(e){let t=Oe("__segment__",e);return`${t.deviceClass}:${t.trafficSource}`}function Oe(e,t){var s,n,a,c,f,d,m;let r=(n=(s=t==null?void 0:t.userAgent)==null?void 0:s.trim())!=null?n:"",o=(c=(a=t==null?void 0:t.referer)==null?void 0:a.trim())!=null?c:"",i=(f=t==null?void 0:t.now)!=null?f:new Date;return{sessionId:e,ephemeral:!1,utmParams:(d=t==null?void 0:t.utmParams)!=null?d:{},deviceClass:r?O(r):"desktop",trafficSource:o?R(o,t==null?void 0:t.appOrigin):"direct",referrerDomain:U(o),timeOfDay:L(i),dayOfWeek:(m=["sun","mon","tue","wed","thu","fri","sat"][i.getDay()])!=null?m:"sun"}}function ie(e,t,r){let o=[];{let n=!1,a=[],c=()=>{if(n)return;let f=Date.now();for(a.push(f);a.length>0&&f-a[0]>500;)a.shift();a.length>=3&&(n=!0,e("rage_click"))};t.addEventListener("click",c),o.push(()=>t.removeEventListener("click",c))}{let i=!1,s=n=>{if(i||!(n.target instanceof Node)||!t.contains(n.target)&&t!==n.target)return;i=!0;let a=typeof window!="undefined"?window.getSelection():null,c=a?a.toString().length:0;e("text_copy",{selectionLength:c})};document.addEventListener("copy",s),o.push(()=>document.removeEventListener("copy",s))}{let i=!1,s=!1,n=null,a=()=>{n!==null&&(clearTimeout(n),n=null)},c=()=>{i||!s||(a(),n=setTimeout(()=>{!i&&s&&(i=!0,e("scroll_hesitation"))},3e3))},f=()=>{a(),c()},d=v=>{for(let y of v)s=y.intersectionRatio>.3,s?c():a()};window.__lastIOCallback=d;let m=new IntersectionObserver(d,{threshold:[.3]});m.observe(t),window.addEventListener("scroll",f,{passive:!0}),o.push(()=>{m.disconnect(),window.removeEventListener("scroll",f),a()})}{let i=!1,s=r!=null?r:Date.now(),n=()=>{if(i||document.visibilityState!=="hidden")return;let a=Date.now()-s;a<15e3&&(i=!0,e("tab_loss",{timeOnPage:a}))};document.addEventListener("visibilitychange",n),o.push(()=>document.removeEventListener("visibilitychange",n))}return()=>{for(let i of o)i()}}var re="https://api.sentient-ui.com/v1/events",H=null,Y=null;function Re(){try{if(typeof crypto!="undefined"&&typeof crypto.randomUUID=="function")return crypto.randomUUID()}catch(e){}return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>{let t=Math.random()*16|0;return(e==="x"?t:t&3|8).toString(16)})}var M={track:()=>{},goal:()=>{},identify:()=>{},getAssignment:()=>null,assign:()=>Promise.resolve(null),getGraph:()=>({pageNodes:[],capturedAt:0}),destroy:()=>{}};function Ue(){try{let e={},t=new URLSearchParams(window.location.search);for(let[r,o]of t)r.startsWith("utm_")&&(e[r]=o);return e}catch(e){return{}}}function se(e){return e.replace(/\/events\/?$/,"")}function Le(){if(typeof window=="undefined")return;if(!H){console.warn("[sentient] grantConsent() called before init()");return}let e=Y;Y=null;let t=oe(z(B({},H),{consent:!0}));e==null||e(t)}function Me(e){var i;let t=se((i=e.ingestUrl)!=null?i:re),r={"Content-Type":"application/json",Authorization:`Bearer ${e.apiKey}`},o={track:()=>{},goal:()=>{},identify:()=>{},getAssignment:()=>null,async assign(s,n,a){try{let c=new URLSearchParams({componentId:s});for(let m of n!=null?n:[])c.append("variantIds[]",m);let f=await fetch(`${t}/winner?${c.toString()}`,{headers:r});return f.ok?{variantId:(await f.json()).variantId,assignmentTtlMs:0}:n!=null&&n[0]?{variantId:n[0],assignmentTtlMs:0}:null}catch(c){return n!=null&&n[0]?{variantId:n[0],assignmentTtlMs:0}:null}},getGraph:()=>({pageNodes:[],capturedAt:0}),destroy:()=>{}};return Y=s=>{o=s},{track:s=>o.track(s),goal:(s,n)=>o.goal(s,n),identify:s=>o.identify(s),getAssignment:(s,n)=>o.getAssignment(s,n),assign:(s,n,a,c)=>o.assign(s,n,a,c),getGraph:()=>o.getGraph(),destroy:()=>o.destroy()}}function oe(e){var D,$,K,E,A;if(typeof window=="undefined")return M;if(H=e,e.consent===!1)return e.preConsentBehavior==="statistical_winner"?!e.apiKey||!e.apiKey.startsWith("pk_")?(console.warn("[sentient] init() called with an invalid apiKey \u2014 expected a pk_ public key. SDK disabled."),M):Me(e):M;if(!e.apiKey||!e.apiKey.startsWith("pk_"))return console.warn("[sentient] init() called with an invalid apiKey \u2014 expected a pk_ public key. SDK disabled."),M;if(e.ingestUrl==="")return console.warn("[sentient] init() called with an empty ingestUrl. SDK disabled."),M;let t=(D=e.ingestUrl)!=null?D:re,r=Date.now(),o=Z(),i=te(),s=ee({ingestUrl:t,apiKey:e.apiKey}),n=se(t),a={"Content-Type":"application/json",Authorization:`Bearer ${e.apiKey}`},c=O(($=navigator.userAgent)!=null?$:""),f=typeof window!="undefined"?window.location.origin:void 0,d=R((K=document.referrer)!=null?K:"",f),m=(E=e.sessionSegment)!=null?E:`${c}:${d}`,v=new Map;if(e.initialAssignments)for(let[u,p]of Object.entries(e.initialAssignments))i.set(u,m,{variantId:p,assignedAt:Date.now(),segment:m,confidence:1});let y=Promise.resolve(),w=o.getSessionId();if(w){let u=U((A=document.referrer)!=null?A:""),p=B({sessionId:w,deviceClass:c,trafficSource:d,referrerDomain:u,utmParams:Ue(),timeOfDay:L(new Date),dayOfWeek:["sun","mon","tue","wed","thu","fri","sat"][new Date().getDay()],ephemeral:o.isEphemeral()},e.userId?{userId:e.userId}:{});try{y=fetch(`${n}/sessions`,{method:"POST",keepalive:!0,body:JSON.stringify(p),headers:a}).then(S=>{S.status===402&&console.warn("[SentientUI] Session limit exceeded for this project. The bandit will stop learning until the limit resets. Upgrade at sentient-ui.com/pricing")}).catch(()=>{})}catch(S){}}e.debug&&(console.log("[sentient] initialized",{context:e.context}),window.__sentient={client:null,queue:s});let P={goal(u,p={},S=1,I=0){let k=o.getSessionId();k&&y.then(()=>{fetch(`${n}/goals`,{method:"POST",keepalive:!0,body:JSON.stringify({sessionId:k,name:u,metadata:p,weight:S,stepIndex:I}),headers:a}).catch(()=>{})})},identify(u){let p=o.getSessionId();p&&y.then(()=>{fetch(`${n}/sessions`,{method:"POST",keepalive:!0,body:JSON.stringify({sessionId:p,userId:u,ephemeral:o.isEphemeral()}),headers:a}).catch(()=>{})})},track(u){let p=o.getSessionId();if(!p)return;let S=z(B({},u),{id:Re(),sessionId:p,timestamp:Date.now(),timeInSession:Date.now()-r});s.push(S),e.debug&&console.log("[sentient] track",S)},getAssignment(u,p){return i.get(u,p)},async assign(u,p,S,I){let k=o.getSessionId();if(!k)return null;let T=i.get(u,m);if(T)return{variantId:T.variantId,assignmentTtlMs:0,content:T.content};let l=v.get(u);if(l)return l;let g=(async()=>{await y;try{let h={sessionId:k,componentId:u,variantIds:p};I!==void 0?h.agentDataByVariant=I:S!==void 0&&(h.agentData=S);let x=await fetch(`${n}/assign`,{method:"POST",body:JSON.stringify(h),headers:a});if(!x.ok)return null;let _=await x.json();return i.set(u,m,{variantId:_.variantId,assignedAt:Date.now(),segment:m,confidence:1,content:_.content}),_}catch(h){return null}finally{v.delete(u)}})();return v.set(u,g),g},getGraph(){return{pageNodes:[],capturedAt:0}},destroy(){s.destroy(),o.destroy(),e.debug&&console.log("[sentient] destroyed")}};if(e.debug){let u=window;u.__sentient&&(u.__sentient.client=P)}return P}0&&(module.exports={attachMicroSignalDetectors,deriveSessionSegment,detectDeviceClass,detectTimeOfDay,detectTrafficSource,grantConsent,init,referrerDomainFromReferer});
|
package/dist/index.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as f,b as g,c as h}from"./chunk-
|
|
1
|
+
import{a as f,b as g,c as h}from"./chunk-PXHX4K5R.mjs";import{c as a,d as b,e as c,f as d,g as e}from"./chunk-QCYVBCUV.mjs";export{f as attachMicroSignalDetectors,e as deriveSessionSegment,a as detectDeviceClass,d as detectTimeOfDay,b as detectTrafficSource,g as grantConsent,h as init,c as referrerDomainFromReferer};
|
package/package.json
CHANGED
package/dist/chunk-GL5EXCWW.mjs
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a as M,b as B,c as G,d as Q,e as F,f as z}from"./chunk-QCYVBCUV.mjs";var ee="_snt_uid";var C="_snt_uid";function te(){try{if(typeof crypto!="undefined"&&typeof crypto.randomUUID=="function")return crypto.randomUUID()}catch(t){}let e=()=>Math.floor(Math.random()*4294967295).toString(16).padStart(8,"0");return`${e()}-${e()}-${e()}-${e()}`}function ne(e){try{let t=document.cookie.match(new RegExp(`(?:^|; )${e}=([^;]*)`));return t?decodeURIComponent(t[1]):null}catch(t){return null}}function se(e,t,a){try{document.cookie=`${e}=${encodeURIComponent(t)}; max-age=${a}; SameSite=strict; path=/`}catch(o){}}function ie(e){try{return localStorage.getItem(e)}catch(t){return null}}function re(e,t){try{return localStorage.setItem(e,t),!0}catch(a){return!1}}function oe(e){try{return sessionStorage.getItem(e)}catch(t){return null}}function ae(e,t){try{return sessionStorage.setItem(e,t),!0}catch(a){return!1}}function ce(e){try{sessionStorage.removeItem(e)}catch(t){}}function le(e){try{return document.cookie=`${e}_probe=1; max-age=1; SameSite=strict; path=/`,/(?:^|; )_snt_uid_probe=1/.test(document.cookie)||document.cookie.indexOf(`${e}_probe=1`)!==-1}catch(t){return!1}}function de(e){try{localStorage.removeItem(e)}catch(t){}}function ue(e){try{document.cookie=`${e}=; max-age=0; SameSite=strict; path=/`}catch(t){}}var ge={getSessionId:()=>null,isEphemeral:()=>!1,destroy:()=>{}};function Y(e){var f,g,p,v,h;if(typeof window=="undefined")return ge;let t=(f=e==null?void 0:e.cookieName)!=null?f:ee,o=((g=e==null?void 0:e.cookieTTLDays)!=null?g:365)*24*60*60,s=(h=(v=(p=ne(t))!=null?p:ie(C))!=null?v:oe(C))!=null?h:te();se(t,s,o);let i=re(C,s),n=le(t),r=i?!1:ae(C,s),l=!i&&!n&&!r;return{getSessionId:()=>s,isEphemeral:()=>l,destroy:()=>{s=null,ue(t),de(C),ce(C)}}}var K="_snt_retry";var fe={push:()=>{},flush:()=>{},destroy:()=>{}};function me(e){try{let t=localStorage.getItem(K);if(!t)return[];let a=JSON.parse(t);return Array.isArray(a)?(localStorage.removeItem(K),a.slice(-e)):[]}catch(t){return[]}}function J(e,t){try{let o=[...(()=>{try{let s=localStorage.getItem(K);if(!s)return[];let i=JSON.parse(s);return Array.isArray(i)?i:[]}catch(s){return[]}})(),...e].slice(-t);localStorage.setItem(K,JSON.stringify(o))}catch(a){}}function q(e){var k,b,T;if(typeof window=="undefined")return fe;let t=(k=e.flushIntervalMs)!=null?k:5e3,a=(b=e.maxBatchSize)!=null?b:20,o=(T=e.maxRetrySize)!=null?T:100,s=e.ingestUrl,i=e.apiKey,n=[],r=new Set,l=[],f=c=>{for(let u of c)g.delete(u),!r.has(u)&&(r.add(u),l.push(u));for(;l.length>500;){let u=l.shift();u&&r.delete(u)}},g=new Set,p=c=>{r.has(c.id)||g.has(c.id)||(g.add(c.id),n.push(c))},v=me(o);for(let c of v)p(c);let h=0,w=0,R=c=>{if(c.length===0)return;let u=JSON.stringify(c),y=c.map(I=>I.id),E;try{E=fetch(s,{method:"POST",keepalive:!0,body:u,headers:{"Content-Type":"application/json",Authorization:`Bearer ${i}`}})}catch(I){J(c,o);for(let P of y)g.delete(P);w++,h=Date.now()+Math.min(6e4,1e3*2**Math.min(w,6));return}let _=I=>{if(I.ok||I.status>=400&&I.status<500&&I.status!==429){f(y),w=0,h=0;return}J(c,o);for(let P of y)g.delete(P);w++,h=Date.now()+Math.min(6e4,1e3*2**Math.min(w,6))};E instanceof Promise?E.then(_).catch(()=>{J(c,o);for(let I of y)g.delete(I);w++,h=Date.now()+Math.min(6e4,1e3*2**Math.min(w,6))}):_(E)},A=typeof TextEncoder!="undefined"?new TextEncoder:null,U=c=>A?A.encode(c).length:c.length,L=c=>{let u=[],y=2;for(let E of c){let _=U(JSON.stringify(E))+1;if(u.length>0&&y+_>57344||u.length>=a)break;u.push(E),y+=_}return u},x=()=>{try{if(Date.now()<h)return;for(;n.length>0;){let c=n.filter(y=>!r.has(y.id));if(n.length=0,c.length===0)break;let u=L(c);if(u.length===0)break;u.length<c.length&&n.push(...c.slice(u.length)),R(u)}}catch(c){}},D=!0,d=null;d=setInterval(()=>{D&&x()},t);let m=()=>{document.visibilityState==="hidden"&&x()},S=()=>{x()};return document.addEventListener("visibilitychange",m),window.addEventListener("beforeunload",S),{push(c){p(c),n.length>=a&&x()},flush:x,destroy(){D=!1,d!==null&&(clearInterval(d),d=null),document.removeEventListener("visibilitychange",m),window.removeEventListener("beforeunload",S),x()}}}var $="_snt_asgn_";function N(e,t){return`${e}:${t}`}function pe(e,t){return`${$}${e}_${t}`}function W(){try{let e=[];for(let t=0;t<localStorage.length;t++){let a=localStorage.key(t);a!=null&&a.startsWith($)&&e.push(a)}return e}catch(e){return[]}}function V(e=18e5){let t=new Map,a=s=>s.assignedAt+e<Date.now();return typeof window!="undefined"&&(()=>{for(let s of W())try{let i=localStorage.getItem(s);if(!i)continue;let n=JSON.parse(i);if(a(n)){localStorage.removeItem(s);continue}let r=s.slice($.length),l=r.lastIndexOf("_");if(l<0)continue;let f=r.slice(0,l),g=r.slice(l+1);t.set(N(f,g),n)}catch(i){}})(),{get(s,i){let n=t.get(N(s,i));return n?a(n)?(t.delete(N(s,i)),null):n:null},set(s,i,n){let r=N(s,i);t.set(r,n);try{localStorage.setItem(pe(s,i),JSON.stringify(n))}catch(l){}},invalidate(s){let i=`${s}:`;for(let n of[...t.keys()])n.startsWith(i)&&t.delete(n);for(let n of W()){let r=n.slice($.length),l=r.lastIndexOf("_");if(l<0)continue;if(r.slice(0,l)===s)try{localStorage.removeItem(n)}catch(g){}}},clear(){t.clear();for(let s of W())try{localStorage.removeItem(s)}catch(i){}}}}function he(e,t,a){let o=[];{let n=!1,r=[],l=()=>{if(n)return;let f=Date.now();for(r.push(f);r.length>0&&f-r[0]>500;)r.shift();r.length>=3&&(n=!0,e("rage_click"))};t.addEventListener("click",l),o.push(()=>t.removeEventListener("click",l))}{let s=!1,i=n=>{if(s||!(n.target instanceof Node)||!t.contains(n.target)&&t!==n.target)return;s=!0;let r=typeof window!="undefined"?window.getSelection():null,l=r?r.toString().length:0;e("text_copy",{selectionLength:l})};document.addEventListener("copy",i),o.push(()=>document.removeEventListener("copy",i))}{let s=!1,i=!1,n=null,r=()=>{n!==null&&(clearTimeout(n),n=null)},l=()=>{s||!i||(r(),n=setTimeout(()=>{!s&&i&&(s=!0,e("scroll_hesitation"))},3e3))},f=()=>{r(),l()},g=v=>{for(let h of v)i=h.intersectionRatio>.3,i?l():r()};window.__lastIOCallback=g;let p=new IntersectionObserver(g,{threshold:[.3]});p.observe(t),window.addEventListener("scroll",f,{passive:!0}),o.push(()=>{p.disconnect(),window.removeEventListener("scroll",f),r()})}{let s=!1,i=a!=null?a:Date.now(),n=()=>{if(s||document.visibilityState!=="hidden")return;let r=Date.now()-i;r<15e3&&(s=!0,e("tab_loss",{timeOnPage:r}))};document.addEventListener("visibilitychange",n),o.push(()=>document.removeEventListener("visibilitychange",n))}return()=>{for(let s of o)s()}}var X="https://sentient-api.fly.dev/v1/events",j=null,H=null;function ye(){try{if(typeof crypto!="undefined"&&typeof crypto.randomUUID=="function")return crypto.randomUUID()}catch(e){}return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>{let t=Math.random()*16|0;return(e==="x"?t:t&3|8).toString(16)})}var O={track:()=>{},goal:()=>{},identify:()=>{},getAssignment:()=>null,assign:()=>Promise.resolve(null),getGraph:()=>({pageNodes:[],capturedAt:0}),destroy:()=>{}};function Se(){try{let e={},t=new URLSearchParams(window.location.search);for(let[a,o]of t)a.startsWith("utm_")&&(e[a]=o);return e}catch(e){return{}}}function Z(e){return e.replace(/\/events\/?$/,"")}function De(){if(typeof window=="undefined")return;if(!j){console.warn("[sentient] grantConsent() called before init()");return}let e=H;H=null;let t=we(B(M({},j),{consent:!0}));e==null||e(t)}function ve(e){var s;let t=Z((s=e.ingestUrl)!=null?s:X),a={"Content-Type":"application/json",Authorization:`Bearer ${e.apiKey}`},o={track:()=>{},goal:()=>{},identify:()=>{},getAssignment:()=>null,async assign(i,n,r){try{let l=new URLSearchParams({componentId:i});for(let p of n!=null?n:[])l.append("variantIds[]",p);let f=await fetch(`${t}/winner?${l.toString()}`,{headers:a});return f.ok?{variantId:(await f.json()).variantId,assignmentTtlMs:0}:n!=null&&n[0]?{variantId:n[0],assignmentTtlMs:0}:null}catch(l){return n!=null&&n[0]?{variantId:n[0],assignmentTtlMs:0}:null}},getGraph:()=>({pageNodes:[],capturedAt:0}),destroy:()=>{}};return H=i=>{o=i},{track:i=>o.track(i),goal:(i,n)=>o.goal(i,n),identify:i=>o.identify(i),getAssignment:(i,n)=>o.getAssignment(i,n),assign:(i,n,r,l)=>o.assign(i,n,r,l),getGraph:()=>o.getGraph(),destroy:()=>o.destroy()}}function we(e){var A,U,L,x,D;if(typeof window=="undefined")return O;if(j=e,e.consent===!1)return e.preConsentBehavior==="statistical_winner"?!e.apiKey||!e.apiKey.startsWith("pk_")?(console.warn("[sentient] init() called with an invalid apiKey \u2014 expected a pk_ public key. SDK disabled."),O):ve(e):O;if(!e.apiKey||!e.apiKey.startsWith("pk_"))return console.warn("[sentient] init() called with an invalid apiKey \u2014 expected a pk_ public key. SDK disabled."),O;if(e.ingestUrl==="")return console.warn("[sentient] init() called with an empty ingestUrl. SDK disabled."),O;let t=(A=e.ingestUrl)!=null?A:X,a=Date.now(),o=Y(),s=V(),i=q({ingestUrl:t,apiKey:e.apiKey}),n=Z(t),r={"Content-Type":"application/json",Authorization:`Bearer ${e.apiKey}`},l=G((U=navigator.userAgent)!=null?U:""),f=typeof window!="undefined"?window.location.origin:void 0,g=Q((L=document.referrer)!=null?L:"",f),p=(x=e.sessionSegment)!=null?x:`${l}:${g}`,v=new Map;if(e.initialAssignments)for(let[d,m]of Object.entries(e.initialAssignments))s.set(d,p,{variantId:m,assignedAt:Date.now(),segment:p,confidence:1});let h=Promise.resolve(),w=o.getSessionId();if(w){let d=F((D=document.referrer)!=null?D:""),m=M({sessionId:w,deviceClass:l,trafficSource:g,referrerDomain:d,utmParams:Se(),timeOfDay:z(new Date),dayOfWeek:["sun","mon","tue","wed","thu","fri","sat"][new Date().getDay()],ephemeral:o.isEphemeral()},e.userId?{userId:e.userId}:{});try{h=fetch(`${n}/sessions`,{method:"POST",keepalive:!0,body:JSON.stringify(m),headers:r}).then(S=>{S.status===402&&console.warn("[SentientUI] Session limit exceeded for this project. The bandit will stop learning until the limit resets. Upgrade at sentientui.dev/pricing")}).catch(()=>{})}catch(S){}}e.debug&&(console.log("[sentient] initialized",{context:e.context}),window.__sentient={client:null,queue:i});let R={goal(d,m={},S=1,k=0){let b=o.getSessionId();b&&h.then(()=>{fetch(`${n}/goals`,{method:"POST",keepalive:!0,body:JSON.stringify({sessionId:b,name:d,metadata:m,weight:S,stepIndex:k}),headers:r}).catch(()=>{})})},identify(d){let m=o.getSessionId();m&&h.then(()=>{fetch(`${n}/sessions`,{method:"POST",keepalive:!0,body:JSON.stringify({sessionId:m,userId:d,ephemeral:o.isEphemeral()}),headers:r}).catch(()=>{})})},track(d){let m=o.getSessionId();if(!m)return;let S=B(M({},d),{id:ye(),sessionId:m,timestamp:Date.now(),timeInSession:Date.now()-a});i.push(S),e.debug&&console.log("[sentient] track",S)},getAssignment(d,m){return s.get(d,m)},async assign(d,m,S,k){let b=o.getSessionId();if(!b)return null;let T=s.get(d,p);if(T)return{variantId:T.variantId,assignmentTtlMs:0,content:T.content};let c=v.get(d);if(c)return c;let u=(async()=>{await h;try{let y={sessionId:b,componentId:d,variantIds:m};k!==void 0?y.agentDataByVariant=k:S!==void 0&&(y.agentData=S);let E=await fetch(`${n}/assign`,{method:"POST",body:JSON.stringify(y),headers:r});if(!E.ok)return null;let _=await E.json();return s.set(d,p,{variantId:_.variantId,assignedAt:Date.now(),segment:p,confidence:1,content:_.content}),_}catch(y){return null}finally{v.delete(d)}})();return v.set(d,u),u},getGraph(){return{pageNodes:[],capturedAt:0}},destroy(){i.destroy(),o.destroy(),e.debug&&console.log("[sentient] destroyed")}};if(e.debug){let d=window;d.__sentient&&(d.__sentient.client=R)}return R}export{he as a,De as b,we as c};
|