kansoku-js 0.1.0 → 0.1.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/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # kansoku-js
2
2
 
3
+ ## 0.1.1
4
+
5
+ No changes in this release.
6
+
3
7
  ## 0.1.0
4
8
 
5
9
  ### Minor Changes
package/dist/client.d.ts CHANGED
@@ -3,7 +3,7 @@ import type { WebFields } from "./envelope.js";
3
3
  import type { DropReason, KansokuClient, KansokuOptions, ResolvedKansokuOptions, TrackOptions } from "./types.js";
4
4
  export declare function resolveOptions(options: KansokuOptions): ResolvedKansokuOptions;
5
5
  export declare function createInternalClient(options: KansokuOptions, deferStart?: boolean): {
6
- config: Readonly<Required<Omit<KansokuOptions, "beforeSend" | "cookieDomain" | "onDrop">> & Pick<KansokuOptions, "beforeSend" | "cookieDomain" | "onDrop">>;
6
+ config: Readonly<Required<Omit<KansokuOptions, "beforeSend" | "onDrop" | "cookieDomain">> & Pick<KansokuOptions, "beforeSend" | "onDrop" | "cookieDomain">>;
7
7
  readonly stats: Readonly<{
8
8
  accepted: number;
9
9
  bestEffortQueued: number;
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
- var fe,ee,U,le=(e,n)=>{for(var[t,i,r]of fe||[])for(var o=[e],s=globalThis,c=s.document,d,u,l,g,m;u=o.pop();)if(!ee[u]&&(l=i[u])){ee[u]=1;for(g=1;g<l.length;g++)o.push(r[l[g]]);if(!n&&u!==e&&(d=c&&c.head)){if(U===void 0)U=(g=c.querySelector("meta[property=csp-nonce]"))&&(g.nonce||g.getAttribute("nonce"))||"";if(m=c.createElement("link"),m.rel="modulepreload",m.crossOrigin="",U)m.nonce=U;m.href=new s.URL(l[0],t),d.appendChild(m)}}},He=(e,n,t,i)=>{for(var r={},o=0;o<n.length;o++)r[n[o]]=t[o];(fe||=[]).push([e,r,n]),ee||={},le(n[i],1)};He(import.meta.url,["ks0m0tbb","gbna46ed"],[["./index.js"],["./vitals-gbna46ed.js"]],0);
2
- var pe="0.1.0";var te=pe;function me(e){return/bot\b|crawler|spider|headlesschrome|facebookexternalhit|bingpreview|curl\/|wget\/|python-requests|go-http-client/i.test(e.slice(0,2048))}function ye(e){let n={library:{name:"kansoku-js",version:e}};try{if(typeof navigator<"u")n.locale=navigator.language}catch{}try{n.timezone=Intl.DateTimeFormat().resolvedOptions().timeZone}catch{}try{if(typeof screen<"u")n.screen={width:screen.width,height:screen.height}}catch{}try{if(typeof window<"u")n.viewport={width:window.innerWidth,height:window.innerHeight}}catch{}try{if(typeof navigator<"u")n.userAgent=navigator.userAgent}catch{}return n}function ge(){try{let e=typeof navigator>"u"?void 0:navigator,n=typeof window>"u"?void 0:window;return e?.doNotTrack==="1"||e?.msDoNotTrack==="1"||n?.doNotTrack==="1"}catch{return!1}}function he(){try{return typeof navigator<"u"&&navigator.globalPrivacyControl===!0}catch{return!1}}var be={plan:"string",signup_source:"string",initial_plan:"string",country:"string",role:"string",company_size:"integer"},B={identify:2,identify_once:1};var ne=["cookie","device","fingerprint","email_sha256","email_hmac"];var Ge="page_view",q="session_start",Qe="experiment_viewed",Xe="identify",Ye="identify_once",ht="alias",bt="group",ve=Object.freeze({[Ge]:1,client_error:1,web_vital:1,[q]:1,[Qe]:1,[Xe]:B.identify,[Ye]:B.identify_once}),we=1,Ie=65535,Se=/^[a-z0-9_.:-]{1,128}$/;function H(e){if(e===null||typeof e!=="object")return!1;let n=Object.getPrototypeOf(e);return n===Object.prototype||n===null}function x(e){if(!H(e))return["identifiers must be an object"];let n=[];for(let[t,i]of Object.entries(e)){if(!ne.includes(t))n.push(`unknown identifier kind: ${t}`);if(typeof i!=="string"||!/^[\x21-\x7e]{1,256}$/.test(i))n.push(`invalid identifier value: ${t}`)}return n}function re(e){return typeof e==="string"&&Se.test(e)}function K(e){let n=[];if(typeof e.eventId!=="string"||!e.eventId.length)n.push("eventId must not be empty");if(typeof e.eventName!=="string"||!e.eventName.length)n.push("eventName must not be empty");if(!H(e.properties))n.push("properties must be an object");if(!H(e.context))n.push("context must be an object");if(!Number.isFinite(Date.parse(e.occurredAt))||!Number.isFinite(Date.parse(e.receivedAt)))n.push("invalid timestamp");if(e.schemaVersion!==void 0&&(!Number.isInteger(e.schemaVersion)||e.schemaVersion<we||e.schemaVersion>Ie))n.push("schemaVersion must be an integer in 1..65535");if(e.identifiers!==void 0)n.push(...x(e.identifiers));n.push(...ie(e));try{JSON.stringify(e)}catch{n.push("event must be serializable JSON")}return n}function ie(e){let n=[];if(e.eventName==="identify"||e.eventName==="identify_once"){let t=e.schemaVersion??1,i=B[e.eventName];if(t!==i&&!(e.eventName==="identify"&&t===1))n.push("unknown identity schema version");if(t===i){if(typeof e.userId!=="string"||!e.userId.length)n.push("governed trait operations require userId");if(H(e.properties))for(let[r,o]of Object.entries(be)){if(!Object.prototype.hasOwnProperty.call(e.properties,r))continue;let s=e.properties[r];if(s===void 0)continue;if(o==="string"?typeof s!=="string":typeof s!=="number"||!Number.isFinite(s)||!Number.isInteger(s)||s<0)n.push(`invalid governed trait: ${r}`)}}}return n}function j(){return globalThis.crypto?.randomUUID?.()??`${Date.now().toString(36)}-${Array.from({length:16},()=>Math.floor(Math.random()*36).toString(36)).join("")}`}function Ee(e,n,t={},i={},r={},o={}){let s=new Date(i.occurredAt??e.config.now()),c=Number.isFinite(s.getTime())?s.toISOString():"",d=i.schemaVersion??e.config.schemaVersions[n];return{eventId:j(),eventName:n,source:"web",occurredAt:c,receivedAt:c,properties:t,context:{...e.baseContext,...i.context},...e.identity,sessionId:e.sessionId,...r,...o.anonymousId===void 0?{}:{anonymousId:o.anonymousId},...o.userId===void 0?{}:{userId:o.userId},...e.config.sourceService?{sourceService:e.config.sourceService}:{},...d===void 0?{}:{schemaVersion:d}}}function Ze(e,n){let t="";for(let i of e){if(!n--)break;t+=i}return t}function et(e,n=!1,t=!1){let i=n?"UnhandledRejection":"Error",r=n?"Non-error promise rejection":t?"Script error.":"Uncaught error";try{if(e&&typeof e==="object"){let{name:o,message:s}=e;if(typeof o==="string"&&typeof s==="string"){if(o.length<=128&&/^[A-Za-z][A-Za-z0-9_.]*$/.test(o))i=o;let c=s.slice(0,1024).split(/[\r\n]/,1)[0];r=Ze(c.replace(/\b(?:[a-z][a-z0-9+.-]{0,31}:\/\/|www\.)[^\s]+/gi,"<url>").replace(/[^\s@]+@[^\s@]+/g,"<email>").replace(/\b[0-9a-f]{16,}\b/gi,"<id>").replace(/\d{6,}/g,"<number>").replace(/\s+/g," ").trim(),256)||"Uncaught error",r=r.replace(/[\uD800-\uDBFF]$/,"")||"Uncaught error"}}}catch{}return{message:r,type:i,handled:!1}}function ke(e,n,t){let i=new WeakSet,r=new Map,o=[],s=0,c=!1;return e.onStart(()=>{if(typeof window>"u")return;let d=(u)=>{if(c||s>=10)return;c=!0;try{let l=e.config.now();if(o=o.filter((v)=>l-v<60000),o.length>=30)return;let g=u.type==="unhandledrejection";if(!g&&!(u instanceof ErrorEvent))return;let m=g?u.reason:u.error;if(m&&typeof m==="object"&&i.has(m))return;for(let[v,O]of r)if(l-O>=1000)r.delete(v);if(e.isSuppressed())return;let y=et(m,g,u.message==="Script error."),h=`${y.type}:${y.message}`;if(r.has(h))return;if(m&&typeof m==="object")i.add(m);r.set(h,l),s++,o.push(l);let I=n();e.enqueueBuilt(I?t(I,"client_error",y):e.buildEvent("client_error",y,void 0,{url:location.href}))}catch{}finally{c=!1}};return window.addEventListener("error",d),window.addEventListener("unhandledrejection",d),()=>{window.removeEventListener("error",d),window.removeEventListener("unhandledrejection",d)}}),()=>{s=0}}function oe(){let e=new Map;return{get:(n)=>e.get(n)??null,set:(n,t)=>{e.set(n,t)},remove:(n)=>{e.delete(n)}}}function Oe(e){let n=oe(),t;try{t=globalThis[e];let i=`kansoku.probe.${Math.random()}`;t?.setItem(i,"1"),t?.removeItem(i)}catch{t=void 0}return{get(i){try{return t?t.getItem(i):n.get(i)}catch{return n.get(i)}},set(i,r){n.set(i,r);try{t?.setItem(i,r)}catch{t=void 0}},remove(i){n.remove(i);try{t?.removeItem(i)}catch{t=void 0}}}}var tt=()=>Oe("localStorage"),xe=()=>Oe("sessionStorage");function nt({domain:e,debug:n=!1}={}){let t=oe(),i=(s)=>{let c=`${encodeURIComponent(s)}=`,d=typeof document>"u"?void 0:document.cookie.split(";").map((u)=>u.trim()).find((u)=>u.startsWith(c));return d?decodeURIComponent(d.slice(c.length)):null};function r(s,c,d){if(typeof document<"u")document.cookie=`${encodeURIComponent(s)}=${encodeURIComponent(c)}; Path=/; SameSite=Lax; Max-Age=${d}; Expires=${new Date(d===0?0:Date.now()+d*1000).toUTCString()}${e?`; Domain=${e}`:""}${typeof location<"u"&&location.protocol==="https:"?"; Secure":""}`}let o=!1;try{let s=`kansoku.probe.${Math.random()}`;r(s,"1",60),o=i(s)==="1",r(s,"",0)}catch{}if(!o&&n)console.debug("kansoku-js: cookie persistence unavailable; using memory");return{get(s){if(o)try{return i(s)}catch{o=!1}return t.get(s)},set(s,c){if(t.set(s,c),o)try{if(r(s,c,34560000),i(s)!==c)o=!1}catch{o=!1}},remove(s){if(t.remove(s),o)try{r(s,"",0)}catch{o=!1}}}}function Te(e,n,t=!1){if(typeof e==="object")return e;if(e==="memory")return oe();if(e==="cookie")return nt({domain:n,debug:t});return tt()}function T(e,n){try{let t=e.get(n);return t===null?void 0:JSON.parse(t)}catch{return}}function Ae(e,n,t,i,r){if(e.isSuppressed()){e.enqueueBuilt(e.buildEvent("experiment_viewed",{...i,experiment:n,variant:t}));return}if(!re(n)||!re(t)){e.drop("invalid",[],"experiment and variant must match ^[a-z0-9_.:-]{1,128}$");return}let o=e.getSessionId(),s=`${e.config.storageKeyPrefix}.exposures`,c=T(e.storage,s),d=c?.sessionId===o&&Array.isArray(c.keys)?c.keys.filter((l)=>typeof l==="string"):[],u=`${n}\x00${t}`;if(d.includes(u)&&!r?.force)return;if(e.enqueueBuilt(e.buildEvent("experiment_viewed",{...i,experiment:n,variant:t}))){if(!d.includes(u))d.push(u);e.storage.set(s,JSON.stringify({sessionId:o,keys:d}))}}var W="kansoku_aid";function je(e){if(typeof location>"u"||typeof history>"u")return;let n=new URL(location.href),t=n.searchParams.getAll(W);if(!t.length)return;n.searchParams.delete(W),history.replaceState(history.state,"",n.href);let i=t[0];if(t.length!==1||!i||x({cookie:i}).length||e.config.crossOriginLink.accept!==!0||e.isSuppressed())return;let r=e.identity.snapshot();if(r.userId)return;if(!e.identity.hadPersistedIdentity)e.identity.adoptAnonymousId(i);else if(r.anonymousId!==i&&(!r.identifiers?.cookie||r.identifiers.cookie===i))e.identity.setIdentifiers({...r.identifiers,cookie:i})}function Ne(e,n){let t=new URL(n,typeof location>"u"?void 0:location.href);if(t.searchParams.delete(W),e.isStarted()&&!e.isSuppressed()&&["http:","https:"].includes(t.protocol)&&!t.username&&!t.password&&e.config.crossOriginLink.allowedOrigins.includes(t.origin)&&(typeof location>"u"||t.origin!==location.origin))t.searchParams.set(W,e.identity.snapshot().anonymousId);return t.href}function _e(e){function n(r,o){if(!e.isSuppressed())return!1;return e.enqueueBuilt(e.buildEvent(r,o)),!0}let t=(r)=>typeof r==="string"&&r.length>0;function i(r,o,s,c){if(n(r,s))return;if(!t(o)){e.drop("invalid",[],"userId must not be empty");return}let d=ie({eventName:r,schemaVersion:c?.schemaVersion??e.config.schemaVersions[r],userId:o,properties:s??{}});if(d.length){e.drop("invalid",[],d.join("; "));return}e.identity.setUserId(o),e.enqueueBuilt(e.buildEvent(r,s,c))}return{identify(r,o,s){i("identify",r,o,s)},identifyOnce(r,o,s){i("identify_once",r,o,s)},alias(r,o,s){if(n("alias",s))return;if(!t(r)||!t(o)){e.drop("invalid",[],"alias IDs must not be empty");return}e.enqueueBuilt(e.buildEvent("alias",{...s,previousId:r,newId:o},void 0,void 0,{anonymousId:r,userId:o}))},group(r,o){if(n("group",o))return;if(!t(r)){e.drop("invalid",[],"organizationId must not be empty");return}e.identity.setOrganizationId(r),e.enqueueBuilt(e.buildEvent("group",o))},setIdentifiers(r){if(e.isSuppressed()){e.drop("opted_out",[],"setIdentifiers");return}let o=x(r);if(o.length){e.drop("invalid",[],o.join("; "));return}e.identity.setIdentifiers(r)},reset(){e.identity.clearUser(),e.storage.remove(`${e.config.storageKeyPrefix}.exposures`),e.identity.rotateAnonymousId(),e.rotateSession()}}}function Re(e,n){let t=(u)=>`${n}.${u}`,i=Boolean(e.get(t("anonymous_id"))),r=e.get(t("anonymous_id"))||j();e.set(t("anonymous_id"),r);let o=e.get(t("user_id"))||void 0,s=e.get(t("organization_id"))||void 0,c=T(e,t("identifiers")),d=c&&x(c).length===0?c:void 0;return{hadPersistedIdentity:i,adoptAnonymousId(u){let l=x({cookie:u});if(l.length)throw TypeError(l.join("; "));r=u,e.set(t("anonymous_id"),u)},snapshot(){let u=e.get(t("anonymous_id"));if(r=u||j(),!u)e.set(t("anonymous_id"),r);o=e.get(t("user_id"))||void 0,s=e.get(t("organization_id"))||void 0;let l=T(e,t("identifiers"));return d=l&&x(l).length===0?l:void 0,{anonymousId:r,...o?{userId:o}:{},...s?{organizationId:s}:{},...d?{identifiers:{...d}}:{}}},setUserId(u){o=u,e.set(t("user_id"),u)},setOrganizationId(u){s=u,e.set(t("organization_id"),u)},setIdentifiers(u){let l=x(u);if(l.length)throw TypeError(l.join("; "));d={...u},e.set(t("identifiers"),JSON.stringify(d))},rotateAnonymousId(){return r=j(),e.set(t("anonymous_id"),r),r},clearUser(){o=void 0,s=void 0,d=void 0;for(let u of["user_id","organization_id","identifiers"])e.remove(t(u))}}}function Pe(e,n){let t=!1,i=()=>{if(!t)t=!0,n()},r=()=>{if(e.document.visibilityState==="hidden")i();else t=!1},o=()=>{t=!1};return e.document.addEventListener("visibilitychange",r),e.addEventListener("pagehide",i),e.addEventListener("pageshow",o),()=>{e.document.removeEventListener("visibilitychange",r),e.removeEventListener("pagehide",i),e.removeEventListener("pageshow",o)}}var G=new WeakMap;function De(e){let n=e;for(let t=G.get(n);t&&!t.active();t=G.get(n))n=t.previous;return n}function Ce(e,n){if(typeof window>"u"||typeof history>"u")return()=>{};let{pushState:t,replaceState:i}=history,r=!0,o,s=()=>{if(!r||o!==void 0)return;o=e.timers.setTimeout(()=>{if(o=void 0,r)n()},0)},c=function(...u){t.apply(this,u),s()},d=function(...u){i.apply(this,u),s()};return G.set(c,{previous:t,active:()=>r}),G.set(d,{previous:i,active:()=>r}),history.pushState=c,history.replaceState=d,window.addEventListener("popstate",s),()=>{if(r=!1,o!==void 0)e.timers.clearTimeout(o);if(window.removeEventListener("popstate",s),history.pushState===c)history.pushState=De(t);if(history.replaceState===d)history.replaceState=De(i)}}function Me(e,n){let t={url:e.href,...n?{referrer:n}:{}},i=new URLSearchParams(e.search);for(let[r,o]of[["utm_source","utmSource"],["utm_medium","utmMedium"],["utm_campaign","utmCampaign"],["utm_content","utmContent"],["utm_term","utmTerm"]]){let s=i.get(r);if(s)t[o]=s}return t}function Je(e,n,t){let i=Me(location,document.referrer);return e.buildEvent("page_view",{url:location.href,path:location.pathname,title:document.title,...n},t,i)}var rt=(e)=>new TextEncoder().encode(JSON.stringify(e)).byteLength;function Be(e){let n=[];return{get size(){return n.length},enqueue(t){if(n.length>=e)return!1;return n.push(t),!0},peekBatch(t,i){let r=[];for(let o of n.slice(0,t)){if(r.length&&rt([...r,o])>i)break;r.push(o)}return r},remove(t){let i=n.filter((r)=>t.has(r.eventId));return n=n.filter((r)=>!t.has(r.eventId)),i},toJSON(){return[...n]},restore(t){if(!Array.isArray(t))return;let i=new Set(n.map((r)=>r.eventId));for(let r of t)if(r&&typeof r==="object"&&K(r).length===0&&!i.has(r.eventId)&&n.length<e)n.push(r),i.add(r.eventId)}}}function Ke(e,n,t=Math.random){return t()*Math.min(30000,n*2**e)}async function Le(e,n){if(e.status===429){let t=e.headers.get("Retry-After"),i=t&&/^[0-9]+$/.test(t)?Number(t):NaN;return{kind:"retryable",detail:"HTTP 429",...Number.isSafeInteger(i)&&i>0?{retryAfterMs:i*1000}:{}}}if(e.status===413)return n>1?{kind:"too_large"}:{kind:"permanent",status:413};if([400,401,403,404].includes(e.status))return{kind:"permanent",status:e.status};try{let t=await e.json();if(e.status===202&&t&&Number.isInteger(t.accepted)&&t.accepted>=0&&Array.isArray(t.rejected)){let i=new Set;for(let r of t.rejected){if(!r||!Number.isInteger(r.index)||r.index<0||r.index>=n||i.has(r.index)||!Array.isArray(r.errors)||r.errors.some((o)=>typeof o!=="string"))return{kind:"retryable",detail:"malformed acknowledgement"};i.add(r.index)}if(t.accepted+i.size===n)return{kind:"accepted",ack:t}}if(e.status===503&&t?.retryable===!1)return{kind:"permanent",status:503,envelope:t}}catch{}return{kind:"retryable",detail:`HTTP ${e.status}`}}function Ve(e,n,t){let i=`${n}.session`,r=T(e,i),o=r&&typeof r.id==="string"&&r.id.length&&Number.isFinite(r.lastActivityAt)?r:void 0,s=()=>e.set(i,JSON.stringify(o));function c(d){return o={id:j(),lastActivityAt:d},s(),{id:o.id,started:!0}}return{current(d){let u=T(e,i);if(u&&typeof u.id==="string"&&u.id.length&&Number.isFinite(u.lastActivityAt))o=u;if(!o||d-o.lastActivityAt>t)return c(d);return{id:o.id,started:!1}},touch(d){if(o)o.lastActivityAt=d,s()},rotate:c}}function Q(e,n,t=!1){let i=new Date(e.now()).toISOString(),r=n.map((o)=>({...o,sentAt:i}));return JSON.stringify(t?{writeKey:e.writeKey,batch:r}:r)}var ze=new WeakMap;function $e(){if(typeof document>"u")return{bytes:61440};let e=ze.get(document);if(!e)e={bytes:0},ze.set(document,e);return e}async function Fe(e,n,{keepalive:t=!1,serialized:i}={}){let r=new AbortController,o,s=async()=>{try{let c=await e.fetch(`${e.baseUrl}/v1/batch`,{method:"POST",headers:{"Content-Type":"application/json","X-Api-Key":e.writeKey},body:i??Q(e,n),keepalive:t,...!t?{signal:r.signal}:{}});return await Le(c,n.length)}catch(c){return{kind:"retryable",detail:String(c)}}};try{if(t)return await s();return await Promise.race([s(),new Promise((c)=>{o=e.timers.setTimeout(()=>{r.abort(),c({kind:"retryable",detail:"request timeout"})},e.requestTimeoutMs)})])}finally{if(o!==void 0)e.timers.clearTimeout(o)}}var it={load:()=>(le("gbna46ed"),import("./vitals-gbna46ed.js"))};function Ue(e,n){let t,i=!1,r=!1,o,s=new Map,c=new Set,d=!1,u=()=>{t=void 0,s.clear(),i=!0},l=()=>{if(e.isSuppressed()||t&&t.anonymousId!==e.getAnonymousId())u();return t&&!i},g=(m)=>{if(!l())return;let y=[];for(let h of s.values()){if(c.has(h.id)||m!==(h.name==="FCP"||h.name==="TTFB"))continue;c.add(h.id),y.push(n(t,"web_vital",{metric:h.name,value:h.value}))}e.enqueueMany(y)};return e.onStart(()=>{if(typeof document>"u")return;let m=!0,y,h=e.onExit(()=>{if(!y)r=!0;g(!1)}),I=(A)=>{if(!A.persisted)return;if(t=void 0,i=!1,r=!1,d=!0,s.clear(),c.clear(),!y)v()};window.addEventListener("pageshow",I);let v=()=>{if(!m||r)return;o??=it.load(),o.then((A)=>{if(!m||r||y)return;y=A.subscribe((N)=>{if(N.navigationType==="back-forward-cache"!==d||d&&N.name==="TTFB")return;s.set(N.name,N),g(!0)})}).catch((A)=>{if(e.config.debug)console.debug("kansoku-js: vitals",A)})},O=typeof requestIdleCallback==="function",_=O?requestIdleCallback(v,{timeout:1000}):e.config.timers.setTimeout(v,0);return()=>{if(m=!1,O)cancelIdleCallback(_);else e.config.timers.clearTimeout(_);y?.(),h(),window.removeEventListener("pageshow",I)}}),{retire:u,page(m){if(!t&&!i)t=m,g(!0)}}}var se=(e)=>new TextEncoder().encode(e).byteLength;function ot(e){let n=new URL(e.baseUrl);if(!["http:","https:"].includes(n.protocol))throw TypeError("baseUrl must be HTTP or HTTPS");if(!e.writeKey)throw TypeError("writeKey must not be empty");if(e.crossOriginLink&&!Array.isArray(e.crossOriginLink.allowedOrigins))throw TypeError("crossOriginLink requires explicit allowedOrigins");let t=(e.crossOriginLink?.allowedOrigins??[]).map((r)=>{let o=new URL(r);if(!["http:","https:"].includes(o.protocol)||o.pathname!=="/"||o.search||o.hash||o.username||o.password||o.hostname.includes("*"))throw TypeError("handoff destinations must be exact HTTP(S) origins");return o.origin}),i=Object.freeze({sourceService:"",autoStart:!0,exitTransport:"keepalive",botDetection:"flag",flushAt:20,flushIntervalMs:5000,maxQueueSize:1000,maxBatchEvents:100,maxBatchBytes:1048576,maxRetries:5,retryBaseDelayMs:500,requestTimeoutMs:1e4,persistQueue:!0,storage:"localStorage",storageKeyPrefix:"kansoku",sessionTimeoutMs:1800000,optOut:!1,respectDoNotTrack:!1,respectGlobalPrivacyControl:!1,debug:!1,...e,baseUrl:e.baseUrl.replace(/\/+$/,""),fetch:e.fetch??globalThis.fetch.bind(globalThis),now:e.now??Date.now,timers:e.timers??{setTimeout:globalThis.setTimeout.bind(globalThis),clearTimeout:globalThis.clearTimeout.bind(globalThis)},crossOriginLink:Object.freeze({accept:e.crossOriginLink?.accept??!1,allowedOrigins:Object.freeze(t)}),autocapture:Object.freeze({pageViews:!0,sessions:!0,pageLeave:!0,clientErrors:!1,webVitals:!1,...e.autocapture}),schemaVersions:Object.freeze({...ve,...e.schemaVersions})});for(let r of["flushAt","flushIntervalMs","maxQueueSize","maxBatchEvents","maxBatchBytes","requestTimeoutMs","sessionTimeoutMs"])if(!Number.isSafeInteger(i[r])||i[r]<=0)throw TypeError(`${r} must be a positive integer`);if(!Number.isSafeInteger(i.maxRetries)||i.maxRetries<0||!Number.isFinite(i.retryBaseDelayMs)||i.retryBaseDelayMs<0)throw TypeError("retry limits must be nonnegative");if(!["keepalive","beacon"].includes(i.exitTransport))throw TypeError("invalid exitTransport");if(!["flag","drop","off"].includes(i.botDetection))throw TypeError("invalid botDetection");return i}function st(e,n=!1){let t=ot(e),i=Te(t.storage,t.cookieDomain,t.debug),r=xe(),o=`${t.storageKeyPrefix}.queue`,s=`${t.storageKeyPrefix}.opt_out`,c=Re(i,t.storageKeyPrefix),d=Ve(i,t.storageKeyPrefix,t.sessionTimeoutMs),u=Be(t.maxQueueSize),l=t.optOut||i.get(s)==="true";if(t.optOut)i.set(s,"true");if(t.persistQueue&&!l)u.restore(T(r,o));if(l)r.remove(o);let g=!1,m=!1,y=!1,h=!1,I,v,O={accepted:0,bestEffortQueued:0,rejected:0,dropped:0},_=new Set,A=new Set,N=[],L=[],ae=()=>!1,X=()=>{if(t.persistQueue)r.set(o,JSON.stringify(u.toJSON()))};function E(a,f,p){O.dropped+=f.length;try{t.onDrop?.({reason:a,events:f,...p?{detail:p}:{}})}catch{}if(t.debug)console.debug(`kansoku-js: ${a}`,p??"",f.length)}function V(){let a=i.get(s)==="true";if(a&&!l){l=!0;let f=C(u.toJSON());if(f.length)E("opted_out",f)}return l=a,l}let R=()=>V()||m||h||ae();function ue(){let a=d.current(t.now());if(a.started)I=a.id;return a.id}function z(a,f,p,b,k){let w={};for(let S of A)Object.assign(w,S());return Ee({identity:c.snapshot(),sessionId:ue(),config:t,baseContext:w},a,f,p,b,k)}function D(a,f=!0){if(R())return E("opted_out",[a],m||h?"shutdown":void 0),!1;if(t.botDetection!=="off"){let b=a.context.userAgent??(typeof navigator>"u"?"":navigator.userAgent),k=a.context.bot===!0||me(typeof b==="string"?b:"");if(k&&t.botDetection==="drop")return E("bot",[a]),!1;a={...a,context:{...a.context,bot:k}}}let p=K(a);if(p.length)return E("invalid",[a],p.join("; ")),!1;try{let b=t.beforeSend?t.beforeSend(a):a;if(b===null)return E("before_send",[a]),!1;if(a=b,p=K(a),p.length)return E("invalid",[a],p.join("; ")),!1;a=JSON.parse(JSON.stringify(a))}catch(b){return E("invalid",[a],String(b)),!1}if(!u.enqueue(a))return E("queue_full",[a]),!1;if(f)X();if(f&&g&&!y&&u.size>=t.flushAt)P();return!0}function ce(a,f,p,b,k){let w=z(a,f,p,b,k);if(d.touch(t.now()),!R()&&I&&t.autocapture.sessions!==!1)I=void 0,D(z(q,{sessionId:w.sessionId}));return w}function C(a){let f=u.remove(new Set(a.map((p)=>p.eventId)));return X(),f}async function M(a,f=!1,p){for(let b=0;;b++){let k=new Set(u.toJSON().map((S)=>S.eventId));if(V()||!a.some((S)=>k.has(S.eventId)))return;let w=await Fe(t,a,{keepalive:f,...p?{serialized:p}:{}});if(w.kind==="accepted"){let S=new Set(C(a).map((J)=>J.eventId)),F=w.ack.rejected.flatMap((J)=>{let Z=a[J.index];return Z&&S.has(Z.eventId)?[Z]:[]});if(O.accepted+=S.size-F.length,O.rejected+=F.length,F.length)E("rejected",F,w.ack.rejected.flatMap((J)=>J.errors).join("; "));return}if(w.kind==="permanent"){let S=C(a);if(S.length)E("permanent_error",S,`HTTP ${w.status}`);return}if(w.kind==="too_large"){if(f)return;let S=Math.ceil(a.length/2);await M(a.slice(0,S),f),await M(a.slice(S),f);return}if(f)return;if(b>=t.maxRetries){let S=C(a);if(S.length)E("retries_exhausted",S,w.detail);return}await new Promise((S)=>t.timers.setTimeout(S,Math.max(w.retryAfterMs??0,Ke(b,t.retryBaseDelayMs))))}}function P(){if(v)return v;return v=Promise.resolve().then(async()=>{while(u.size&&!V())await M(u.peekBatch(t.maxBatchEvents,t.maxBatchBytes))}).finally(()=>{v=void 0}),v}function qe(){y=!0;try{for(let w of _)w()}finally{y=!1}if(R())return;let a=$e(),f=t.exitTransport==="beacon",p=[],b="";for(let w of u.toJSON()){if(p.length>=t.maxBatchEvents)break;let S=Q(t,[...p,w],f);if(se(S)>Math.min(t.maxBatchBytes,61440-a.bytes))continue;p.push(w),b=S}if(!p.length)return;let k=se(b);if(a.bytes+=k,f){try{if(typeof navigator<"u"&&typeof navigator.sendBeacon==="function"&&navigator.sendBeacon(`${t.baseUrl}/v1/beacon`,new Blob([b],{type:"text/plain;charset=UTF-8"}))){O.bestEffortQueued+=p.length;return}}catch{}b=Q(t,p),a.bytes-=k;let w=se(b);if(w+a.bytes>61440)return;a.bytes+=w,M(p,!0,b).finally(()=>{a.bytes-=w})}else M(p,!0,b).finally(()=>{a.bytes-=k})}function de(a){if(N.push(a),g){let f=a();if(f)L.push(f)}}de(()=>{let a,f=()=>{a=t.timers.setTimeout(()=>{if(g)P(),f()},t.flushIntervalMs)};f();let p=typeof window>"u"?()=>{}:Pe(window,qe);return()=>{if(a!==void 0)t.timers.clearTimeout(a);p()}});let Y={config:t,get stats(){return Object.freeze({queued:u.size,...O})},track(a,f,p){try{if(R()){E("opted_out",[z(a,f,p)],m||h?"shutdown":void 0);return}D(ce(a,f,p))}catch(b){E("invalid",[],String(b))}},flush:P,start(){if(g||m||h)return;g=!0;for(let a of N){let f=a();if(f)L.push(f)}},stop(){if(!g)return;g=!1;for(let a of L.reverse())a();L=[],P()},async shutdown(){if(m)return;h=!0,Y.stop(),await P(),m=!0},optOut(){l=!0,i.set(s,"true");let a=C(u.toJSON());if(a.length)E("opted_out",a)},optIn(){l=!1,i.remove(s)},isOptedOut:V,getAnonymousId:()=>c.snapshot().anonymousId,getUserId:()=>c.snapshot().userId,getSessionId:ue,buildEvent:ce,enqueueBuilt:D,enqueueMany(a){let f=!1;for(let p of a)f=D(p,!1)||f;if(f)X();if(f&&g&&!y&&u.size>=t.flushAt)P()},registerContextProvider(a){return A.add(a),()=>{A.delete(a)}},onStart:de,onExit(a){return _.add(a),()=>{_.delete(a)}},drop:E,isSuppressed:R,isStarted:()=>g&&!m&&!h,setSuppression(a){ae=a},identity:c,session:d,storage:i,rotateSession(){let a=d.rotate(t.now());if(I=a.id,!R()&&t.autocapture.sessions!==!1)I=void 0,D(z(q,{sessionId:a.id}))}};if(t.autoStart&&!n)Y.start();return Y}function at(e){let n=st(e,!0);n.registerContextProvider(()=>ye(te)),n.setSuppression(()=>n.config.respectDoNotTrack&&ge()||n.config.respectGlobalPrivacyControl&&he());let t,i=(y,h,I)=>{let v=new Date(n.config.now()).toISOString();return{...y,eventId:j(),eventName:h,occurredAt:v,receivedAt:v,schemaVersion:1,properties:I}},r=n.config.autocapture.clientErrors?ke(n,()=>{if(t?.event.anonymousId!==n.getAnonymousId())t=void 0;return t?.event},i):void 0,o=n.config.autocapture.webVitals?Ue(n,i):void 0,s=()=>performance.now(),c=()=>{if(!t||t.left||n.config.autocapture.pageLeave===!1)return;if(t.left=!0,n.isSuppressed()||n.identity.snapshot().anonymousId!==t.event.anonymousId)return;let y=t.event;n.enqueueBuilt({...i(y,"page_leave",{url:y.properties.url??"",path:y.properties.path??"",durationMs:Math.max(0,s()-t.started)}),schemaVersion:n.config.schemaVersions.page_leave??1})};n.onExit(c);let d=!1;n.onStart(()=>{if(!d)d=!0,je(n)});let u=n.optOut,l=_e(n),g=Object.assign(n,l,{reset(){t=void 0,o?.retire(),l.reset()},linkTo:(y)=>Ne(n,y),optOut(){t=void 0,o?.retire(),u()},page(y,h){if(typeof document>"u")return;if(n.isSuppressed()){t=void 0,n.drop("opted_out",[]);return}c();let I=Je(n,y,h);if(n.enqueueBuilt(I))t={event:I,started:s(),left:!1},r?.(),o?.page(I)},experiment(y,h,I,v){Ae(n,y,h,I,v)}}),m;if(n.onStart(()=>{if(n.config.autocapture.pageViews===!1||typeof document>"u")return;let y=()=>{if(n.isSuppressed())return;let v=location.origin+location.pathname+location.search;if(v===m)return;g.page(),m=v};y();let h=Ce(n.config,y),I=(v)=>{if(v.persisted)g.page()};return window.addEventListener("pageshow",I),()=>{h(),window.removeEventListener("pageshow",I)}}),n.config.autoStart)g.start();return g}export{ht as ALIAS,ve as BUILT_IN_SCHEMA_VERSIONS,Se as EXPERIMENT_NAME_PATTERN,Qe as EXPERIMENT_VIEWED,bt as GROUP,ne as IDENTIFIER_KINDS,Xe as IDENTIFY,Ye as IDENTIFY_ONCE,Ie as MAX_SCHEMA_VERSION,we as MIN_SCHEMA_VERSION,Ge as PAGE_VIEW,q as SESSION_START,at as createKansoku,te as version};
1
+ var fe,ee,U,le=(e,n)=>{for(var[t,i,r]of fe||[])for(var o=[e],s=globalThis,c=s.document,d,u,l,g,m;u=o.pop();)if(!ee[u]&&(l=i[u])){ee[u]=1;for(g=1;g<l.length;g++)o.push(r[l[g]]);if(!n&&u!==e&&(d=c&&c.head)){if(U===void 0)U=(g=c.querySelector("meta[property=csp-nonce]"))&&(g.nonce||g.getAttribute("nonce"))||"";if(m=c.createElement("link"),m.rel="modulepreload",m.crossOrigin="",U)m.nonce=U;m.href=new s.URL(l[0],t),d.appendChild(m)}}},He=(e,n,t,i)=>{for(var r={},o=0;o<n.length;o++)r[n[o]]=t[o];(fe||=[]).push([e,r,n]),ee||={},le(n[i],1)};He(import.meta.url,["hk9e14ay","gbna46ed"],[["./index.js"],["./vitals-gbna46ed.js"]],0);
2
+ var pe="0.1.1";var te=pe;function me(e){return/bot\b|crawler|spider|headlesschrome|facebookexternalhit|bingpreview|curl\/|wget\/|python-requests|go-http-client/i.test(e.slice(0,2048))}function ye(e){let n={library:{name:"kansoku-js",version:e}};try{if(typeof navigator<"u")n.locale=navigator.language}catch{}try{n.timezone=Intl.DateTimeFormat().resolvedOptions().timeZone}catch{}try{if(typeof screen<"u")n.screen={width:screen.width,height:screen.height}}catch{}try{if(typeof window<"u")n.viewport={width:window.innerWidth,height:window.innerHeight}}catch{}try{if(typeof navigator<"u")n.userAgent=navigator.userAgent}catch{}return n}function ge(){try{let e=typeof navigator>"u"?void 0:navigator,n=typeof window>"u"?void 0:window;return e?.doNotTrack==="1"||e?.msDoNotTrack==="1"||n?.doNotTrack==="1"}catch{return!1}}function he(){try{return typeof navigator<"u"&&navigator.globalPrivacyControl===!0}catch{return!1}}var be={plan:"string",signup_source:"string",initial_plan:"string",country:"string",role:"string",company_size:"integer"},B={identify:2,identify_once:1};var ne=["cookie","device","fingerprint","email_sha256","email_hmac"];var Ge="page_view",q="session_start",Qe="experiment_viewed",Xe="identify",Ye="identify_once",ht="alias",bt="group",ve=Object.freeze({[Ge]:1,client_error:1,web_vital:1,[q]:1,[Qe]:1,[Xe]:B.identify,[Ye]:B.identify_once}),we=1,Ie=65535,Se=/^[a-z0-9_.:-]{1,128}$/;function H(e){if(e===null||typeof e!=="object")return!1;let n=Object.getPrototypeOf(e);return n===Object.prototype||n===null}function x(e){if(!H(e))return["identifiers must be an object"];let n=[];for(let[t,i]of Object.entries(e)){if(!ne.includes(t))n.push(`unknown identifier kind: ${t}`);if(typeof i!=="string"||!/^[\x21-\x7e]{1,256}$/.test(i))n.push(`invalid identifier value: ${t}`)}return n}function re(e){return typeof e==="string"&&Se.test(e)}function K(e){let n=[];if(typeof e.eventId!=="string"||!e.eventId.length)n.push("eventId must not be empty");if(typeof e.eventName!=="string"||!e.eventName.length)n.push("eventName must not be empty");if(!H(e.properties))n.push("properties must be an object");if(!H(e.context))n.push("context must be an object");if(!Number.isFinite(Date.parse(e.occurredAt))||!Number.isFinite(Date.parse(e.receivedAt)))n.push("invalid timestamp");if(e.schemaVersion!==void 0&&(!Number.isInteger(e.schemaVersion)||e.schemaVersion<we||e.schemaVersion>Ie))n.push("schemaVersion must be an integer in 1..65535");if(e.identifiers!==void 0)n.push(...x(e.identifiers));n.push(...ie(e));try{JSON.stringify(e)}catch{n.push("event must be serializable JSON")}return n}function ie(e){let n=[];if(e.eventName==="identify"||e.eventName==="identify_once"){let t=e.schemaVersion??1,i=B[e.eventName];if(t!==i&&!(e.eventName==="identify"&&t===1))n.push("unknown identity schema version");if(t===i){if(typeof e.userId!=="string"||!e.userId.length)n.push("governed trait operations require userId");if(H(e.properties))for(let[r,o]of Object.entries(be)){if(!Object.prototype.hasOwnProperty.call(e.properties,r))continue;let s=e.properties[r];if(s===void 0)continue;if(o==="string"?typeof s!=="string":typeof s!=="number"||!Number.isFinite(s)||!Number.isInteger(s)||s<0)n.push(`invalid governed trait: ${r}`)}}}return n}function j(){return globalThis.crypto?.randomUUID?.()??`${Date.now().toString(36)}-${Array.from({length:16},()=>Math.floor(Math.random()*36).toString(36)).join("")}`}function Ee(e,n,t={},i={},r={},o={}){let s=new Date(i.occurredAt??e.config.now()),c=Number.isFinite(s.getTime())?s.toISOString():"",d=i.schemaVersion??e.config.schemaVersions[n];return{eventId:j(),eventName:n,source:"web",occurredAt:c,receivedAt:c,properties:t,context:{...e.baseContext,...i.context},...e.identity,sessionId:e.sessionId,...r,...o.anonymousId===void 0?{}:{anonymousId:o.anonymousId},...o.userId===void 0?{}:{userId:o.userId},...e.config.sourceService?{sourceService:e.config.sourceService}:{},...d===void 0?{}:{schemaVersion:d}}}function Ze(e,n){let t="";for(let i of e){if(!n--)break;t+=i}return t}function et(e,n=!1,t=!1){let i=n?"UnhandledRejection":"Error",r=n?"Non-error promise rejection":t?"Script error.":"Uncaught error";try{if(e&&typeof e==="object"){let{name:o,message:s}=e;if(typeof o==="string"&&typeof s==="string"){if(o.length<=128&&/^[A-Za-z][A-Za-z0-9_.]*$/.test(o))i=o;let c=s.slice(0,1024).split(/[\r\n]/,1)[0];r=Ze(c.replace(/\b(?:[a-z][a-z0-9+.-]{0,31}:\/\/|www\.)[^\s]+/gi,"<url>").replace(/[^\s@]+@[^\s@]+/g,"<email>").replace(/\b[0-9a-f]{16,}\b/gi,"<id>").replace(/\d{6,}/g,"<number>").replace(/\s+/g," ").trim(),256)||"Uncaught error",r=r.replace(/[\uD800-\uDBFF]$/,"")||"Uncaught error"}}}catch{}return{message:r,type:i,handled:!1}}function ke(e,n,t){let i=new WeakSet,r=new Map,o=[],s=0,c=!1;return e.onStart(()=>{if(typeof window>"u")return;let d=(u)=>{if(c||s>=10)return;c=!0;try{let l=e.config.now();if(o=o.filter((v)=>l-v<60000),o.length>=30)return;let g=u.type==="unhandledrejection";if(!g&&!(u instanceof ErrorEvent))return;let m=g?u.reason:u.error;if(m&&typeof m==="object"&&i.has(m))return;for(let[v,O]of r)if(l-O>=1000)r.delete(v);if(e.isSuppressed())return;let y=et(m,g,u.message==="Script error."),h=`${y.type}:${y.message}`;if(r.has(h))return;if(m&&typeof m==="object")i.add(m);r.set(h,l),s++,o.push(l);let I=n();e.enqueueBuilt(I?t(I,"client_error",y):e.buildEvent("client_error",y,void 0,{url:location.href}))}catch{}finally{c=!1}};return window.addEventListener("error",d),window.addEventListener("unhandledrejection",d),()=>{window.removeEventListener("error",d),window.removeEventListener("unhandledrejection",d)}}),()=>{s=0}}function oe(){let e=new Map;return{get:(n)=>e.get(n)??null,set:(n,t)=>{e.set(n,t)},remove:(n)=>{e.delete(n)}}}function Oe(e){let n=oe(),t;try{t=globalThis[e];let i=`kansoku.probe.${Math.random()}`;t?.setItem(i,"1"),t?.removeItem(i)}catch{t=void 0}return{get(i){try{return t?t.getItem(i):n.get(i)}catch{return n.get(i)}},set(i,r){n.set(i,r);try{t?.setItem(i,r)}catch{t=void 0}},remove(i){n.remove(i);try{t?.removeItem(i)}catch{t=void 0}}}}var tt=()=>Oe("localStorage"),xe=()=>Oe("sessionStorage");function nt({domain:e,debug:n=!1}={}){let t=oe(),i=(s)=>{let c=`${encodeURIComponent(s)}=`,d=typeof document>"u"?void 0:document.cookie.split(";").map((u)=>u.trim()).find((u)=>u.startsWith(c));return d?decodeURIComponent(d.slice(c.length)):null};function r(s,c,d){if(typeof document<"u")document.cookie=`${encodeURIComponent(s)}=${encodeURIComponent(c)}; Path=/; SameSite=Lax; Max-Age=${d}; Expires=${new Date(d===0?0:Date.now()+d*1000).toUTCString()}${e?`; Domain=${e}`:""}${typeof location<"u"&&location.protocol==="https:"?"; Secure":""}`}let o=!1;try{let s=`kansoku.probe.${Math.random()}`;r(s,"1",60),o=i(s)==="1",r(s,"",0)}catch{}if(!o&&n)console.debug("kansoku-js: cookie persistence unavailable; using memory");return{get(s){if(o)try{return i(s)}catch{o=!1}return t.get(s)},set(s,c){if(t.set(s,c),o)try{if(r(s,c,34560000),i(s)!==c)o=!1}catch{o=!1}},remove(s){if(t.remove(s),o)try{r(s,"",0)}catch{o=!1}}}}function Te(e,n,t=!1){if(typeof e==="object")return e;if(e==="memory")return oe();if(e==="cookie")return nt({domain:n,debug:t});return tt()}function T(e,n){try{let t=e.get(n);return t===null?void 0:JSON.parse(t)}catch{return}}function Ae(e,n,t,i,r){if(e.isSuppressed()){e.enqueueBuilt(e.buildEvent("experiment_viewed",{...i,experiment:n,variant:t}));return}if(!re(n)||!re(t)){e.drop("invalid",[],"experiment and variant must match ^[a-z0-9_.:-]{1,128}$");return}let o=e.getSessionId(),s=`${e.config.storageKeyPrefix}.exposures`,c=T(e.storage,s),d=c?.sessionId===o&&Array.isArray(c.keys)?c.keys.filter((l)=>typeof l==="string"):[],u=`${n}\x00${t}`;if(d.includes(u)&&!r?.force)return;if(e.enqueueBuilt(e.buildEvent("experiment_viewed",{...i,experiment:n,variant:t}))){if(!d.includes(u))d.push(u);e.storage.set(s,JSON.stringify({sessionId:o,keys:d}))}}var W="kansoku_aid";function je(e){if(typeof location>"u"||typeof history>"u")return;let n=new URL(location.href),t=n.searchParams.getAll(W);if(!t.length)return;n.searchParams.delete(W),history.replaceState(history.state,"",n.href);let i=t[0];if(t.length!==1||!i||x({cookie:i}).length||e.config.crossOriginLink.accept!==!0||e.isSuppressed())return;let r=e.identity.snapshot();if(r.userId)return;if(!e.identity.hadPersistedIdentity)e.identity.adoptAnonymousId(i);else if(r.anonymousId!==i&&(!r.identifiers?.cookie||r.identifiers.cookie===i))e.identity.setIdentifiers({...r.identifiers,cookie:i})}function Ne(e,n){let t=new URL(n,typeof location>"u"?void 0:location.href);if(t.searchParams.delete(W),e.isStarted()&&!e.isSuppressed()&&["http:","https:"].includes(t.protocol)&&!t.username&&!t.password&&e.config.crossOriginLink.allowedOrigins.includes(t.origin)&&(typeof location>"u"||t.origin!==location.origin))t.searchParams.set(W,e.identity.snapshot().anonymousId);return t.href}function _e(e){function n(r,o){if(!e.isSuppressed())return!1;return e.enqueueBuilt(e.buildEvent(r,o)),!0}let t=(r)=>typeof r==="string"&&r.length>0;function i(r,o,s,c){if(n(r,s))return;if(!t(o)){e.drop("invalid",[],"userId must not be empty");return}let d=ie({eventName:r,schemaVersion:c?.schemaVersion??e.config.schemaVersions[r],userId:o,properties:s??{}});if(d.length){e.drop("invalid",[],d.join("; "));return}e.identity.setUserId(o),e.enqueueBuilt(e.buildEvent(r,s,c))}return{identify(r,o,s){i("identify",r,o,s)},identifyOnce(r,o,s){i("identify_once",r,o,s)},alias(r,o,s){if(n("alias",s))return;if(!t(r)||!t(o)){e.drop("invalid",[],"alias IDs must not be empty");return}e.enqueueBuilt(e.buildEvent("alias",{...s,previousId:r,newId:o},void 0,void 0,{anonymousId:r,userId:o}))},group(r,o){if(n("group",o))return;if(!t(r)){e.drop("invalid",[],"organizationId must not be empty");return}e.identity.setOrganizationId(r),e.enqueueBuilt(e.buildEvent("group",o))},setIdentifiers(r){if(e.isSuppressed()){e.drop("opted_out",[],"setIdentifiers");return}let o=x(r);if(o.length){e.drop("invalid",[],o.join("; "));return}e.identity.setIdentifiers(r)},reset(){e.identity.clearUser(),e.storage.remove(`${e.config.storageKeyPrefix}.exposures`),e.identity.rotateAnonymousId(),e.rotateSession()}}}function Re(e,n){let t=(u)=>`${n}.${u}`,i=Boolean(e.get(t("anonymous_id"))),r=e.get(t("anonymous_id"))||j();e.set(t("anonymous_id"),r);let o=e.get(t("user_id"))||void 0,s=e.get(t("organization_id"))||void 0,c=T(e,t("identifiers")),d=c&&x(c).length===0?c:void 0;return{hadPersistedIdentity:i,adoptAnonymousId(u){let l=x({cookie:u});if(l.length)throw TypeError(l.join("; "));r=u,e.set(t("anonymous_id"),u)},snapshot(){let u=e.get(t("anonymous_id"));if(r=u||j(),!u)e.set(t("anonymous_id"),r);o=e.get(t("user_id"))||void 0,s=e.get(t("organization_id"))||void 0;let l=T(e,t("identifiers"));return d=l&&x(l).length===0?l:void 0,{anonymousId:r,...o?{userId:o}:{},...s?{organizationId:s}:{},...d?{identifiers:{...d}}:{}}},setUserId(u){o=u,e.set(t("user_id"),u)},setOrganizationId(u){s=u,e.set(t("organization_id"),u)},setIdentifiers(u){let l=x(u);if(l.length)throw TypeError(l.join("; "));d={...u},e.set(t("identifiers"),JSON.stringify(d))},rotateAnonymousId(){return r=j(),e.set(t("anonymous_id"),r),r},clearUser(){o=void 0,s=void 0,d=void 0;for(let u of["user_id","organization_id","identifiers"])e.remove(t(u))}}}function Pe(e,n){let t=!1,i=()=>{if(!t)t=!0,n()},r=()=>{if(e.document.visibilityState==="hidden")i();else t=!1},o=()=>{t=!1};return e.document.addEventListener("visibilitychange",r),e.addEventListener("pagehide",i),e.addEventListener("pageshow",o),()=>{e.document.removeEventListener("visibilitychange",r),e.removeEventListener("pagehide",i),e.removeEventListener("pageshow",o)}}var G=new WeakMap;function De(e){let n=e;for(let t=G.get(n);t&&!t.active();t=G.get(n))n=t.previous;return n}function Ce(e,n){if(typeof window>"u"||typeof history>"u")return()=>{};let{pushState:t,replaceState:i}=history,r=!0,o,s=()=>{if(!r||o!==void 0)return;o=e.timers.setTimeout(()=>{if(o=void 0,r)n()},0)},c=function(...u){t.apply(this,u),s()},d=function(...u){i.apply(this,u),s()};return G.set(c,{previous:t,active:()=>r}),G.set(d,{previous:i,active:()=>r}),history.pushState=c,history.replaceState=d,window.addEventListener("popstate",s),()=>{if(r=!1,o!==void 0)e.timers.clearTimeout(o);if(window.removeEventListener("popstate",s),history.pushState===c)history.pushState=De(t);if(history.replaceState===d)history.replaceState=De(i)}}function Me(e,n){let t={url:e.href,...n?{referrer:n}:{}},i=new URLSearchParams(e.search);for(let[r,o]of[["utm_source","utmSource"],["utm_medium","utmMedium"],["utm_campaign","utmCampaign"],["utm_content","utmContent"],["utm_term","utmTerm"]]){let s=i.get(r);if(s)t[o]=s}return t}function Je(e,n,t){let i=Me(location,document.referrer);return e.buildEvent("page_view",{url:location.href,path:location.pathname,title:document.title,...n},t,i)}var rt=(e)=>new TextEncoder().encode(JSON.stringify(e)).byteLength;function Be(e){let n=[];return{get size(){return n.length},enqueue(t){if(n.length>=e)return!1;return n.push(t),!0},peekBatch(t,i){let r=[];for(let o of n.slice(0,t)){if(r.length&&rt([...r,o])>i)break;r.push(o)}return r},remove(t){let i=n.filter((r)=>t.has(r.eventId));return n=n.filter((r)=>!t.has(r.eventId)),i},toJSON(){return[...n]},restore(t){if(!Array.isArray(t))return;let i=new Set(n.map((r)=>r.eventId));for(let r of t)if(r&&typeof r==="object"&&K(r).length===0&&!i.has(r.eventId)&&n.length<e)n.push(r),i.add(r.eventId)}}}function Ke(e,n,t=Math.random){return t()*Math.min(30000,n*2**e)}async function Le(e,n){if(e.status===429){let t=e.headers.get("Retry-After"),i=t&&/^[0-9]+$/.test(t)?Number(t):NaN;return{kind:"retryable",detail:"HTTP 429",...Number.isSafeInteger(i)&&i>0?{retryAfterMs:i*1000}:{}}}if(e.status===413)return n>1?{kind:"too_large"}:{kind:"permanent",status:413};if([400,401,403,404].includes(e.status))return{kind:"permanent",status:e.status};try{let t=await e.json();if(e.status===202&&t&&Number.isInteger(t.accepted)&&t.accepted>=0&&Array.isArray(t.rejected)){let i=new Set;for(let r of t.rejected){if(!r||!Number.isInteger(r.index)||r.index<0||r.index>=n||i.has(r.index)||!Array.isArray(r.errors)||r.errors.some((o)=>typeof o!=="string"))return{kind:"retryable",detail:"malformed acknowledgement"};i.add(r.index)}if(t.accepted+i.size===n)return{kind:"accepted",ack:t}}if(e.status===503&&t?.retryable===!1)return{kind:"permanent",status:503,envelope:t}}catch{}return{kind:"retryable",detail:`HTTP ${e.status}`}}function Ve(e,n,t){let i=`${n}.session`,r=T(e,i),o=r&&typeof r.id==="string"&&r.id.length&&Number.isFinite(r.lastActivityAt)?r:void 0,s=()=>e.set(i,JSON.stringify(o));function c(d){return o={id:j(),lastActivityAt:d},s(),{id:o.id,started:!0}}return{current(d){let u=T(e,i);if(u&&typeof u.id==="string"&&u.id.length&&Number.isFinite(u.lastActivityAt))o=u;if(!o||d-o.lastActivityAt>t)return c(d);return{id:o.id,started:!1}},touch(d){if(o)o.lastActivityAt=d,s()},rotate:c}}function Q(e,n,t=!1){let i=new Date(e.now()).toISOString(),r=n.map((o)=>({...o,sentAt:i}));return JSON.stringify(t?{writeKey:e.writeKey,batch:r}:r)}var ze=new WeakMap;function $e(){if(typeof document>"u")return{bytes:61440};let e=ze.get(document);if(!e)e={bytes:0},ze.set(document,e);return e}async function Fe(e,n,{keepalive:t=!1,serialized:i}={}){let r=new AbortController,o,s=async()=>{try{let c=await e.fetch(`${e.baseUrl}/v1/batch`,{method:"POST",headers:{"Content-Type":"application/json","X-Api-Key":e.writeKey},body:i??Q(e,n),keepalive:t,...!t?{signal:r.signal}:{}});return await Le(c,n.length)}catch(c){return{kind:"retryable",detail:String(c)}}};try{if(t)return await s();return await Promise.race([s(),new Promise((c)=>{o=e.timers.setTimeout(()=>{r.abort(),c({kind:"retryable",detail:"request timeout"})},e.requestTimeoutMs)})])}finally{if(o!==void 0)e.timers.clearTimeout(o)}}var it={load:()=>(le("gbna46ed"),import("./vitals-gbna46ed.js"))};function Ue(e,n){let t,i=!1,r=!1,o,s=new Map,c=new Set,d=!1,u=()=>{t=void 0,s.clear(),i=!0},l=()=>{if(e.isSuppressed()||t&&t.anonymousId!==e.getAnonymousId())u();return t&&!i},g=(m)=>{if(!l())return;let y=[];for(let h of s.values()){if(c.has(h.id)||m!==(h.name==="FCP"||h.name==="TTFB"))continue;c.add(h.id),y.push(n(t,"web_vital",{metric:h.name,value:h.value}))}e.enqueueMany(y)};return e.onStart(()=>{if(typeof document>"u")return;let m=!0,y,h=e.onExit(()=>{if(!y)r=!0;g(!1)}),I=(A)=>{if(!A.persisted)return;if(t=void 0,i=!1,r=!1,d=!0,s.clear(),c.clear(),!y)v()};window.addEventListener("pageshow",I);let v=()=>{if(!m||r)return;o??=it.load(),o.then((A)=>{if(!m||r||y)return;y=A.subscribe((N)=>{if(N.navigationType==="back-forward-cache"!==d||d&&N.name==="TTFB")return;s.set(N.name,N),g(!0)})}).catch((A)=>{if(e.config.debug)console.debug("kansoku-js: vitals",A)})},O=typeof requestIdleCallback==="function",_=O?requestIdleCallback(v,{timeout:1000}):e.config.timers.setTimeout(v,0);return()=>{if(m=!1,O)cancelIdleCallback(_);else e.config.timers.clearTimeout(_);y?.(),h(),window.removeEventListener("pageshow",I)}}),{retire:u,page(m){if(!t&&!i)t=m,g(!0)}}}var se=(e)=>new TextEncoder().encode(e).byteLength;function ot(e){let n=new URL(e.baseUrl);if(!["http:","https:"].includes(n.protocol))throw TypeError("baseUrl must be HTTP or HTTPS");if(!e.writeKey)throw TypeError("writeKey must not be empty");if(e.crossOriginLink&&!Array.isArray(e.crossOriginLink.allowedOrigins))throw TypeError("crossOriginLink requires explicit allowedOrigins");let t=(e.crossOriginLink?.allowedOrigins??[]).map((r)=>{let o=new URL(r);if(!["http:","https:"].includes(o.protocol)||o.pathname!=="/"||o.search||o.hash||o.username||o.password||o.hostname.includes("*"))throw TypeError("handoff destinations must be exact HTTP(S) origins");return o.origin}),i=Object.freeze({sourceService:"",autoStart:!0,exitTransport:"keepalive",botDetection:"flag",flushAt:20,flushIntervalMs:5000,maxQueueSize:1000,maxBatchEvents:100,maxBatchBytes:1048576,maxRetries:5,retryBaseDelayMs:500,requestTimeoutMs:1e4,persistQueue:!0,storage:"localStorage",storageKeyPrefix:"kansoku",sessionTimeoutMs:1800000,optOut:!1,respectDoNotTrack:!1,respectGlobalPrivacyControl:!1,debug:!1,...e,baseUrl:e.baseUrl.replace(/\/+$/,""),fetch:e.fetch??globalThis.fetch.bind(globalThis),now:e.now??Date.now,timers:e.timers??{setTimeout:globalThis.setTimeout.bind(globalThis),clearTimeout:globalThis.clearTimeout.bind(globalThis)},crossOriginLink:Object.freeze({accept:e.crossOriginLink?.accept??!1,allowedOrigins:Object.freeze(t)}),autocapture:Object.freeze({pageViews:!0,sessions:!0,pageLeave:!0,clientErrors:!1,webVitals:!1,...e.autocapture}),schemaVersions:Object.freeze({...ve,...e.schemaVersions})});for(let r of["flushAt","flushIntervalMs","maxQueueSize","maxBatchEvents","maxBatchBytes","requestTimeoutMs","sessionTimeoutMs"])if(!Number.isSafeInteger(i[r])||i[r]<=0)throw TypeError(`${r} must be a positive integer`);if(!Number.isSafeInteger(i.maxRetries)||i.maxRetries<0||!Number.isFinite(i.retryBaseDelayMs)||i.retryBaseDelayMs<0)throw TypeError("retry limits must be nonnegative");if(!["keepalive","beacon"].includes(i.exitTransport))throw TypeError("invalid exitTransport");if(!["flag","drop","off"].includes(i.botDetection))throw TypeError("invalid botDetection");return i}function st(e,n=!1){let t=ot(e),i=Te(t.storage,t.cookieDomain,t.debug),r=xe(),o=`${t.storageKeyPrefix}.queue`,s=`${t.storageKeyPrefix}.opt_out`,c=Re(i,t.storageKeyPrefix),d=Ve(i,t.storageKeyPrefix,t.sessionTimeoutMs),u=Be(t.maxQueueSize),l=t.optOut||i.get(s)==="true";if(t.optOut)i.set(s,"true");if(t.persistQueue&&!l)u.restore(T(r,o));if(l)r.remove(o);let g=!1,m=!1,y=!1,h=!1,I,v,O={accepted:0,bestEffortQueued:0,rejected:0,dropped:0},_=new Set,A=new Set,N=[],L=[],ae=()=>!1,X=()=>{if(t.persistQueue)r.set(o,JSON.stringify(u.toJSON()))};function E(a,f,p){O.dropped+=f.length;try{t.onDrop?.({reason:a,events:f,...p?{detail:p}:{}})}catch{}if(t.debug)console.debug(`kansoku-js: ${a}`,p??"",f.length)}function V(){let a=i.get(s)==="true";if(a&&!l){l=!0;let f=C(u.toJSON());if(f.length)E("opted_out",f)}return l=a,l}let R=()=>V()||m||h||ae();function ue(){let a=d.current(t.now());if(a.started)I=a.id;return a.id}function z(a,f,p,b,k){let w={};for(let S of A)Object.assign(w,S());return Ee({identity:c.snapshot(),sessionId:ue(),config:t,baseContext:w},a,f,p,b,k)}function D(a,f=!0){if(R())return E("opted_out",[a],m||h?"shutdown":void 0),!1;if(t.botDetection!=="off"){let b=a.context.userAgent??(typeof navigator>"u"?"":navigator.userAgent),k=a.context.bot===!0||me(typeof b==="string"?b:"");if(k&&t.botDetection==="drop")return E("bot",[a]),!1;a={...a,context:{...a.context,bot:k}}}let p=K(a);if(p.length)return E("invalid",[a],p.join("; ")),!1;try{let b=t.beforeSend?t.beforeSend(a):a;if(b===null)return E("before_send",[a]),!1;if(a=b,p=K(a),p.length)return E("invalid",[a],p.join("; ")),!1;a=JSON.parse(JSON.stringify(a))}catch(b){return E("invalid",[a],String(b)),!1}if(!u.enqueue(a))return E("queue_full",[a]),!1;if(f)X();if(f&&g&&!y&&u.size>=t.flushAt)P();return!0}function ce(a,f,p,b,k){let w=z(a,f,p,b,k);if(d.touch(t.now()),!R()&&I&&t.autocapture.sessions!==!1)I=void 0,D(z(q,{sessionId:w.sessionId}));return w}function C(a){let f=u.remove(new Set(a.map((p)=>p.eventId)));return X(),f}async function M(a,f=!1,p){for(let b=0;;b++){let k=new Set(u.toJSON().map((S)=>S.eventId));if(V()||!a.some((S)=>k.has(S.eventId)))return;let w=await Fe(t,a,{keepalive:f,...p?{serialized:p}:{}});if(w.kind==="accepted"){let S=new Set(C(a).map((J)=>J.eventId)),F=w.ack.rejected.flatMap((J)=>{let Z=a[J.index];return Z&&S.has(Z.eventId)?[Z]:[]});if(O.accepted+=S.size-F.length,O.rejected+=F.length,F.length)E("rejected",F,w.ack.rejected.flatMap((J)=>J.errors).join("; "));return}if(w.kind==="permanent"){let S=C(a);if(S.length)E("permanent_error",S,`HTTP ${w.status}`);return}if(w.kind==="too_large"){if(f)return;let S=Math.ceil(a.length/2);await M(a.slice(0,S),f),await M(a.slice(S),f);return}if(f)return;if(b>=t.maxRetries){let S=C(a);if(S.length)E("retries_exhausted",S,w.detail);return}await new Promise((S)=>t.timers.setTimeout(S,Math.max(w.retryAfterMs??0,Ke(b,t.retryBaseDelayMs))))}}function P(){if(v)return v;return v=Promise.resolve().then(async()=>{while(u.size&&!V())await M(u.peekBatch(t.maxBatchEvents,t.maxBatchBytes))}).finally(()=>{v=void 0}),v}function qe(){y=!0;try{for(let w of _)w()}finally{y=!1}if(R())return;let a=$e(),f=t.exitTransport==="beacon",p=[],b="";for(let w of u.toJSON()){if(p.length>=t.maxBatchEvents)break;let S=Q(t,[...p,w],f);if(se(S)>Math.min(t.maxBatchBytes,61440-a.bytes))continue;p.push(w),b=S}if(!p.length)return;let k=se(b);if(a.bytes+=k,f){try{if(typeof navigator<"u"&&typeof navigator.sendBeacon==="function"&&navigator.sendBeacon(`${t.baseUrl}/v1/beacon`,new Blob([b],{type:"text/plain;charset=UTF-8"}))){O.bestEffortQueued+=p.length;return}}catch{}b=Q(t,p),a.bytes-=k;let w=se(b);if(w+a.bytes>61440)return;a.bytes+=w,M(p,!0,b).finally(()=>{a.bytes-=w})}else M(p,!0,b).finally(()=>{a.bytes-=k})}function de(a){if(N.push(a),g){let f=a();if(f)L.push(f)}}de(()=>{let a,f=()=>{a=t.timers.setTimeout(()=>{if(g)P(),f()},t.flushIntervalMs)};f();let p=typeof window>"u"?()=>{}:Pe(window,qe);return()=>{if(a!==void 0)t.timers.clearTimeout(a);p()}});let Y={config:t,get stats(){return Object.freeze({queued:u.size,...O})},track(a,f,p){try{if(R()){E("opted_out",[z(a,f,p)],m||h?"shutdown":void 0);return}D(ce(a,f,p))}catch(b){E("invalid",[],String(b))}},flush:P,start(){if(g||m||h)return;g=!0;for(let a of N){let f=a();if(f)L.push(f)}},stop(){if(!g)return;g=!1;for(let a of L.reverse())a();L=[],P()},async shutdown(){if(m)return;h=!0,Y.stop(),await P(),m=!0},optOut(){l=!0,i.set(s,"true");let a=C(u.toJSON());if(a.length)E("opted_out",a)},optIn(){l=!1,i.remove(s)},isOptedOut:V,getAnonymousId:()=>c.snapshot().anonymousId,getUserId:()=>c.snapshot().userId,getSessionId:ue,buildEvent:ce,enqueueBuilt:D,enqueueMany(a){let f=!1;for(let p of a)f=D(p,!1)||f;if(f)X();if(f&&g&&!y&&u.size>=t.flushAt)P()},registerContextProvider(a){return A.add(a),()=>{A.delete(a)}},onStart:de,onExit(a){return _.add(a),()=>{_.delete(a)}},drop:E,isSuppressed:R,isStarted:()=>g&&!m&&!h,setSuppression(a){ae=a},identity:c,session:d,storage:i,rotateSession(){let a=d.rotate(t.now());if(I=a.id,!R()&&t.autocapture.sessions!==!1)I=void 0,D(z(q,{sessionId:a.id}))}};if(t.autoStart&&!n)Y.start();return Y}function at(e){let n=st(e,!0);n.registerContextProvider(()=>ye(te)),n.setSuppression(()=>n.config.respectDoNotTrack&&ge()||n.config.respectGlobalPrivacyControl&&he());let t,i=(y,h,I)=>{let v=new Date(n.config.now()).toISOString();return{...y,eventId:j(),eventName:h,occurredAt:v,receivedAt:v,schemaVersion:1,properties:I}},r=n.config.autocapture.clientErrors?ke(n,()=>{if(t?.event.anonymousId!==n.getAnonymousId())t=void 0;return t?.event},i):void 0,o=n.config.autocapture.webVitals?Ue(n,i):void 0,s=()=>performance.now(),c=()=>{if(!t||t.left||n.config.autocapture.pageLeave===!1)return;if(t.left=!0,n.isSuppressed()||n.identity.snapshot().anonymousId!==t.event.anonymousId)return;let y=t.event;n.enqueueBuilt({...i(y,"page_leave",{url:y.properties.url??"",path:y.properties.path??"",durationMs:Math.max(0,s()-t.started)}),schemaVersion:n.config.schemaVersions.page_leave??1})};n.onExit(c);let d=!1;n.onStart(()=>{if(!d)d=!0,je(n)});let u=n.optOut,l=_e(n),g=Object.assign(n,l,{reset(){t=void 0,o?.retire(),l.reset()},linkTo:(y)=>Ne(n,y),optOut(){t=void 0,o?.retire(),u()},page(y,h){if(typeof document>"u")return;if(n.isSuppressed()){t=void 0,n.drop("opted_out",[]);return}c();let I=Je(n,y,h);if(n.enqueueBuilt(I))t={event:I,started:s(),left:!1},r?.(),o?.page(I)},experiment(y,h,I,v){Ae(n,y,h,I,v)}}),m;if(n.onStart(()=>{if(n.config.autocapture.pageViews===!1||typeof document>"u")return;let y=()=>{if(n.isSuppressed())return;let v=location.origin+location.pathname+location.search;if(v===m)return;g.page(),m=v};y();let h=Ce(n.config,y),I=(v)=>{if(v.persisted)g.page()};return window.addEventListener("pageshow",I),()=>{h(),window.removeEventListener("pageshow",I)}}),n.config.autoStart)g.start();return g}export{ht as ALIAS,ve as BUILT_IN_SCHEMA_VERSIONS,Se as EXPERIMENT_NAME_PATTERN,Qe as EXPERIMENT_VIEWED,bt as GROUP,ne as IDENTIFIER_KINDS,Xe as IDENTIFY,Ye as IDENTIFY_ONCE,Ie as MAX_SCHEMA_VERSION,we as MIN_SCHEMA_VERSION,Ge as PAGE_VIEW,q as SESSION_START,at as createKansoku,te as version};
3
3
 
4
- //# debugId=CB2E5AF1B9A775BB64756E2164756E21
4
+ //# debugId=83E907B202F98A6164756E2164756E21
5
5
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -28,6 +28,6 @@
28
28
  "import { isBot } from \"./bot.js\"\nimport { collectContext, isDoNotTrackEnabled, isGlobalPrivacyControlEnabled } from \"./context.js\"\nimport { BUILT_IN_SCHEMA_VERSIONS, SESSION_START } from \"./contract/events.js\"\nimport { validateEvent } from \"./contract/validate.js\"\nimport type { AnalyticsEvent, JsonObject } from \"./contract/wire.js\"\nimport { buildEvent, randomId } from \"./envelope.js\"\nimport type { WebFields } from \"./envelope.js\"\nimport { createErrorCapture } from \"./errors.js\"\nimport { recordExposure } from \"./experiment.js\"\nimport { consumeHandoff, linkTo } from \"./handoff.js\"\nimport { createIdentityApi } from \"./identity-api.js\"\nimport { createIdentity } from \"./identity.js\"\nimport { attachExitFlush } from \"./lifecycle.js\"\nimport { installNavigationCapture } from \"./navigation.js\"\nimport { buildPageView } from \"./page.js\"\nimport { createQueue } from \"./queue.js\"\nimport { backoffDelayMs } from \"./retry.js\"\nimport { createSession } from \"./session.js\"\nimport { readJSON, resolveStorage, sessionStorageAdapter } from \"./storage.js\"\nimport { exitBudget, sendBatch, serializeBatch } from \"./transport.js\"\nimport type { ExperimentOptions } from \"./types.js\"\nimport type {\n DropReason,\n KansokuClient,\n KansokuOptions,\n ResolvedKansokuOptions,\n TrackOptions,\n} from \"./types.js\"\nimport { version } from \"./version.js\"\nimport { createVitalCapture } from \"./vitals-capture.js\"\n\nconst jsonBytesRaw = (body: string) => new TextEncoder().encode(body).byteLength\n\nexport function resolveOptions(options: KansokuOptions): ResolvedKansokuOptions {\n const url = new URL(options.baseUrl)\n if (![\"http:\", \"https:\"].includes(url.protocol))\n throw new TypeError(\"baseUrl must be HTTP or HTTPS\")\n if (!options.writeKey) throw new TypeError(\"writeKey must not be empty\")\n if (options.crossOriginLink && !Array.isArray(options.crossOriginLink.allowedOrigins))\n throw new TypeError(\"crossOriginLink requires explicit allowedOrigins\")\n const allowedOrigins = (options.crossOriginLink?.allowedOrigins ?? []).map((value) => {\n const target = new URL(value)\n if (\n ![\"http:\", \"https:\"].includes(target.protocol) ||\n target.pathname !== \"/\" ||\n target.search ||\n target.hash ||\n target.username ||\n target.password ||\n target.hostname.includes(\"*\")\n )\n throw new TypeError(\"handoff destinations must be exact HTTP(S) origins\")\n return target.origin\n })\n const config: ResolvedKansokuOptions = Object.freeze({\n sourceService: \"\",\n autoStart: true,\n exitTransport: \"keepalive\",\n botDetection: \"flag\",\n flushAt: 20,\n flushIntervalMs: 5000,\n maxQueueSize: 1000,\n maxBatchEvents: 100,\n maxBatchBytes: 1048576,\n maxRetries: 5,\n retryBaseDelayMs: 500,\n requestTimeoutMs: 10000,\n persistQueue: true,\n storage: \"localStorage\",\n storageKeyPrefix: \"kansoku\",\n sessionTimeoutMs: 1800000,\n optOut: false,\n respectDoNotTrack: false,\n respectGlobalPrivacyControl: false,\n debug: false,\n ...options,\n baseUrl: options.baseUrl.replace(/\\/+$/, \"\"),\n fetch: options.fetch ?? globalThis.fetch.bind(globalThis),\n now: options.now ?? Date.now,\n timers: options.timers ?? {\n setTimeout: globalThis.setTimeout.bind(globalThis),\n clearTimeout: globalThis.clearTimeout.bind(globalThis),\n },\n crossOriginLink: Object.freeze({\n accept: options.crossOriginLink?.accept ?? false,\n allowedOrigins: Object.freeze(allowedOrigins),\n }),\n autocapture: Object.freeze({\n pageViews: true,\n sessions: true,\n pageLeave: true,\n clientErrors: false,\n webVitals: false,\n ...options.autocapture,\n }),\n schemaVersions: Object.freeze({\n ...BUILT_IN_SCHEMA_VERSIONS,\n ...options.schemaVersions,\n }),\n })\n for (const field of [\n \"flushAt\",\n \"flushIntervalMs\",\n \"maxQueueSize\",\n \"maxBatchEvents\",\n \"maxBatchBytes\",\n \"requestTimeoutMs\",\n \"sessionTimeoutMs\",\n ] as const) {\n if (!Number.isSafeInteger(config[field]) || config[field] <= 0)\n throw new TypeError(`${field} must be a positive integer`)\n }\n if (\n !Number.isSafeInteger(config.maxRetries) ||\n config.maxRetries < 0 ||\n !Number.isFinite(config.retryBaseDelayMs) ||\n config.retryBaseDelayMs < 0\n )\n throw new TypeError(\"retry limits must be nonnegative\")\n if (![\"keepalive\", \"beacon\"].includes(config.exitTransport))\n throw new TypeError(\"invalid exitTransport\")\n if (![\"flag\", \"drop\", \"off\"].includes(config.botDetection))\n throw new TypeError(\"invalid botDetection\")\n return config\n}\n\nexport function createInternalClient(options: KansokuOptions, deferStart = false) {\n const config = resolveOptions(options)\n const storage = resolveStorage(config.storage, config.cookieDomain, config.debug)\n const mirror = sessionStorageAdapter()\n const queueKey = `${config.storageKeyPrefix}.queue`\n const optKey = `${config.storageKeyPrefix}.opt_out`\n const identity = createIdentity(storage, config.storageKeyPrefix)\n const session = createSession(storage, config.storageKeyPrefix, config.sessionTimeoutMs)\n const queue = createQueue(config.maxQueueSize)\n let optedOut = config.optOut || storage.get(optKey) === \"true\"\n if (config.optOut) storage.set(optKey, \"true\")\n if (config.persistQueue && !optedOut) queue.restore(readJSON(mirror, queueKey))\n if (optedOut) mirror.remove(queueKey)\n let started = false\n let terminal = false\n let exiting = false\n let closing = false\n let pendingSession: string | undefined\n let inFlight: Promise<void> | undefined\n const counters = {\n accepted: 0,\n bestEffortQueued: 0,\n rejected: 0,\n dropped: 0,\n }\n const exitListeners = new Set<() => void>()\n const providers = new Set<() => JsonObject>()\n const installers: Array<() => (() => void) | void> = []\n let teardowns: Array<() => void> = []\n let suppression = () => false\n\n const persist = () => {\n if (config.persistQueue) mirror.set(queueKey, JSON.stringify(queue.toJSON()))\n }\n function drop(reason: DropReason, events: AnalyticsEvent[], detail?: string) {\n counters.dropped += events.length\n try {\n config.onDrop?.({ reason, events, ...(detail ? { detail } : {}) })\n } catch {\n /* Analytics callbacks must not break application code. */\n }\n if (config.debug) console.debug(`kansoku-js: ${reason}`, detail ?? \"\", events.length)\n }\n function sharedOptOut() {\n const shared = storage.get(optKey) === \"true\"\n if (shared && !optedOut) {\n optedOut = true\n const pending = remove(queue.toJSON())\n if (pending.length) drop(\"opted_out\", pending)\n }\n optedOut = shared\n return optedOut\n }\n const suppressed = () => sharedOptOut() || terminal || closing || suppression()\n function currentSession() {\n const current = session.current(config.now())\n if (current.started) pendingSession = current.id\n return current.id\n }\n function rawEvent(\n name: string,\n properties?: JsonObject,\n trackOptions?: TrackOptions,\n webFields?: WebFields,\n ids?: { anonymousId?: string; userId?: string },\n ): AnalyticsEvent {\n const baseContext: JsonObject = {}\n for (const provider of providers) Object.assign(baseContext, provider())\n return buildEvent(\n {\n identity: identity.snapshot(),\n sessionId: currentSession(),\n config,\n baseContext,\n },\n name,\n properties,\n trackOptions,\n webFields,\n ids,\n )\n }\n function enqueueBuilt(event: AnalyticsEvent, save = true): boolean {\n if (suppressed()) {\n drop(\"opted_out\", [event], terminal || closing ? \"shutdown\" : undefined)\n return false\n }\n if (config.botDetection !== \"off\") {\n const agent =\n event.context.userAgent ?? (typeof navigator === \"undefined\" ? \"\" : navigator.userAgent)\n const bot = event.context.bot === true || isBot(typeof agent === \"string\" ? agent : \"\")\n if (bot && config.botDetection === \"drop\") {\n drop(\"bot\", [event])\n return false\n }\n event = { ...event, context: { ...event.context, bot } }\n }\n let errors = validateEvent(event)\n if (errors.length) {\n drop(\"invalid\", [event], errors.join(\"; \"))\n return false\n }\n try {\n const transformed = config.beforeSend ? config.beforeSend(event) : event\n if (transformed === null) {\n drop(\"before_send\", [event])\n return false\n }\n event = transformed\n errors = validateEvent(event)\n if (errors.length) {\n drop(\"invalid\", [event], errors.join(\"; \"))\n return false\n }\n // Capture a snapshot; later caller mutations must not change queued identity or properties.\n event = JSON.parse(JSON.stringify(event)) as AnalyticsEvent\n } catch (error) {\n drop(\"invalid\", [event], String(error))\n return false\n }\n if (!queue.enqueue(event)) {\n drop(\"queue_full\", [event])\n return false\n }\n if (save) persist()\n if (save && started && !exiting && queue.size >= config.flushAt) void flush()\n return true\n }\n function boundEvent(\n name: string,\n properties?: JsonObject,\n trackOptions?: TrackOptions,\n webFields?: WebFields,\n ids?: { anonymousId?: string; userId?: string },\n ): AnalyticsEvent {\n const event = rawEvent(name, properties, trackOptions, webFields, ids)\n session.touch(config.now())\n if (!suppressed() && pendingSession && config.autocapture.sessions !== false) {\n pendingSession = undefined\n enqueueBuilt(rawEvent(SESSION_START, { sessionId: event.sessionId! }))\n }\n return event\n }\n function remove(batch: AnalyticsEvent[]) {\n const removed = queue.remove(new Set(batch.map((event) => event.eventId)))\n persist()\n return removed\n }\n async function deliver(\n batch: AnalyticsEvent[],\n keepalive = false,\n serialized?: string,\n ): Promise<void> {\n for (let attempt = 0; ; attempt++) {\n const active = new Set(queue.toJSON().map((event) => event.eventId))\n if (sharedOptOut() || !batch.some((event) => active.has(event.eventId))) return\n const outcome = await sendBatch(config, batch, {\n keepalive,\n ...(serialized ? { serialized } : {}),\n })\n if (outcome.kind === \"accepted\") {\n const removed = new Set(remove(batch).map((event) => event.eventId))\n const rejected = outcome.ack.rejected.flatMap((item) => {\n const event = batch[item.index]\n return event && removed.has(event.eventId) ? [event] : []\n })\n counters.accepted += removed.size - rejected.length\n counters.rejected += rejected.length\n if (rejected.length)\n drop(\"rejected\", rejected, outcome.ack.rejected.flatMap((item) => item.errors).join(\"; \"))\n return\n }\n if (outcome.kind === \"permanent\") {\n const events = remove(batch)\n if (events.length) drop(\"permanent_error\", events, `HTTP ${outcome.status}`)\n return\n }\n if (outcome.kind === \"too_large\") {\n if (keepalive) return // Retain the mirror; normal delivery can split safely.\n // Keep both halves persisted until each has a terminal response.\n const half = Math.ceil(batch.length / 2)\n await deliver(batch.slice(0, half), keepalive)\n await deliver(batch.slice(half), keepalive)\n return\n }\n // Exit retries belong to the persisted mirror; avoid delays after page teardown.\n if (keepalive) return\n if (attempt >= config.maxRetries) {\n const events = remove(batch)\n if (events.length) drop(\"retries_exhausted\", events, outcome.detail)\n return\n }\n await new Promise<void>((resolve) =>\n config.timers.setTimeout(\n resolve,\n Math.max(outcome.retryAfterMs ?? 0, backoffDelayMs(attempt, config.retryBaseDelayMs)),\n ),\n )\n }\n }\n function flush(): Promise<void> {\n if (inFlight) return inFlight\n // Defer the loop by one microtask so even synchronous injected transports share one promise.\n inFlight = Promise.resolve()\n .then(async () => {\n while (queue.size && !sharedOptOut())\n await deliver(queue.peekBatch(config.maxBatchEvents, config.maxBatchBytes))\n })\n .finally(() => {\n inFlight = undefined\n })\n return inFlight\n }\n function exitFlush() {\n exiting = true\n try {\n for (const listener of exitListeners) listener()\n } finally {\n exiting = false\n }\n if (suppressed()) return\n const budget = exitBudget()\n const beacon = config.exitTransport === \"beacon\"\n const batch: AnalyticsEvent[] = []\n let serialized = \"\"\n for (const event of queue.toJSON()) {\n if (batch.length >= config.maxBatchEvents) break\n const candidate = serializeBatch(config, [...batch, event], beacon)\n if (jsonBytesRaw(candidate) > Math.min(config.maxBatchBytes, 61440 - budget.bytes)) continue\n batch.push(event)\n serialized = candidate\n }\n if (!batch.length) return\n const bytes = jsonBytesRaw(serialized)\n budget.bytes += bytes\n if (beacon) {\n try {\n if (\n typeof navigator !== \"undefined\" &&\n typeof navigator.sendBeacon === \"function\" &&\n navigator.sendBeacon(\n `${config.baseUrl}/v1/beacon`,\n new Blob([serialized], { type: \"text/plain;charset=UTF-8\" }),\n )\n ) {\n counters.bestEffortQueued += batch.length\n return // No response is available. Keep every ID in the queue mirror.\n }\n } catch {\n /* A refused/absent API can use the same reserved allowance. */\n }\n serialized = serializeBatch(config, batch)\n budget.bytes -= bytes\n const fallbackBytes = jsonBytesRaw(serialized)\n if (fallbackBytes + budget.bytes > 61440) return\n budget.bytes += fallbackBytes\n void deliver(batch, true, serialized).finally(() => {\n budget.bytes -= fallbackBytes\n })\n } else {\n void deliver(batch, true, serialized).finally(() => {\n budget.bytes -= bytes\n })\n }\n }\n function onStart(install: () => (() => void) | void) {\n installers.push(install)\n if (started) {\n const teardown = install()\n if (teardown) teardowns.push(teardown)\n }\n }\n onStart(() => {\n let timer: ReturnType<typeof setTimeout> | undefined\n const schedule = () => {\n timer = config.timers.setTimeout(() => {\n if (started) {\n void flush()\n schedule()\n }\n }, config.flushIntervalMs)\n }\n schedule()\n const detach = typeof window === \"undefined\" ? () => {} : attachExitFlush(window, exitFlush)\n return () => {\n if (timer !== undefined) config.timers.clearTimeout(timer)\n detach()\n }\n })\n const client = {\n config,\n get stats() {\n return Object.freeze({ queued: queue.size, ...counters })\n },\n track(name: string, properties?: JsonObject, trackOptions?: TrackOptions) {\n try {\n if (suppressed()) {\n drop(\n \"opted_out\",\n [rawEvent(name, properties, trackOptions)],\n terminal || closing ? \"shutdown\" : undefined,\n )\n return\n }\n enqueueBuilt(boundEvent(name, properties, trackOptions))\n } catch (error) {\n drop(\"invalid\", [], String(error))\n }\n },\n flush,\n start() {\n if (started || terminal || closing) return\n started = true\n for (const install of installers) {\n const teardown = install()\n if (teardown) teardowns.push(teardown)\n }\n },\n stop() {\n if (!started) return\n started = false\n for (const teardown of teardowns.reverse()) teardown()\n teardowns = []\n void flush()\n },\n async shutdown() {\n if (terminal) return\n closing = true\n client.stop()\n await flush()\n terminal = true\n },\n optOut() {\n optedOut = true\n storage.set(optKey, \"true\")\n const events = remove(queue.toJSON())\n if (events.length) drop(\"opted_out\", events)\n },\n optIn() {\n optedOut = false\n storage.remove(optKey)\n },\n isOptedOut: sharedOptOut,\n getAnonymousId: () => identity.snapshot().anonymousId,\n getUserId: () => identity.snapshot().userId,\n getSessionId: currentSession,\n buildEvent: boundEvent,\n enqueueBuilt,\n enqueueMany(events: AnalyticsEvent[]) {\n let changed = false\n for (const event of events) changed = enqueueBuilt(event, false) || changed\n if (changed) persist()\n if (changed && started && !exiting && queue.size >= config.flushAt) void flush()\n },\n registerContextProvider(provider: () => JsonObject) {\n providers.add(provider)\n return () => {\n providers.delete(provider)\n }\n },\n onStart,\n onExit(listener: () => void) {\n exitListeners.add(listener)\n return () => {\n exitListeners.delete(listener)\n }\n },\n drop,\n isSuppressed: suppressed,\n isStarted: () => started && !terminal && !closing,\n setSuppression(check: () => boolean) {\n suppression = check\n },\n identity,\n session,\n storage,\n rotateSession() {\n const current = session.rotate(config.now())\n pendingSession = current.id\n if (!suppressed() && config.autocapture.sessions !== false) {\n pendingSession = undefined\n enqueueBuilt(rawEvent(SESSION_START, { sessionId: current.id }))\n }\n },\n }\n if (config.autoStart && !deferStart) client.start()\n return client\n}\nexport type InternalClient = ReturnType<typeof createInternalClient>\nexport function createKansoku(options: KansokuOptions): KansokuClient {\n const core = createInternalClient(options, true)\n core.registerContextProvider(() => collectContext(version))\n core.setSuppression(\n () =>\n (core.config.respectDoNotTrack && isDoNotTrackEnabled()) ||\n (core.config.respectGlobalPrivacyControl && isGlobalPrivacyControlEnabled()),\n )\n let pageSnapshot: { event: AnalyticsEvent; started: number; left: boolean } | undefined\n const copy = (\n original: AnalyticsEvent,\n name: string,\n properties: AnalyticsEvent[\"properties\"],\n ): AnalyticsEvent => {\n const at = new Date(core.config.now()).toISOString()\n return {\n ...original,\n eventId: randomId(),\n eventName: name,\n occurredAt: at,\n receivedAt: at,\n schemaVersion: 1,\n properties,\n }\n }\n const errorPage = core.config.autocapture.clientErrors\n ? createErrorCapture(\n core,\n () => {\n if (pageSnapshot?.event.anonymousId !== core.getAnonymousId()) pageSnapshot = undefined\n return pageSnapshot?.event\n },\n copy,\n )\n : undefined\n const vitals = core.config.autocapture.webVitals ? createVitalCapture(core, copy) : undefined\n const monotonic = () => performance.now()\n const leavePage = () => {\n if (!pageSnapshot || pageSnapshot.left || core.config.autocapture.pageLeave === false) return\n pageSnapshot.left = true\n if (\n core.isSuppressed() ||\n core.identity.snapshot().anonymousId !== pageSnapshot.event.anonymousId\n )\n return\n const original = pageSnapshot.event\n core.enqueueBuilt({\n ...copy(original, \"page_leave\", {\n url: original.properties.url ?? \"\",\n path: original.properties.path ?? \"\",\n durationMs: Math.max(0, monotonic() - pageSnapshot.started),\n }),\n schemaVersion: core.config.schemaVersions.page_leave ?? 1,\n })\n }\n core.onExit(leavePage)\n let handoffRead = false\n core.onStart(() => {\n if (!handoffRead) {\n handoffRead = true\n consumeHandoff(core)\n }\n })\n const optOut = core.optOut\n const identityApi = createIdentityApi(core)\n const client: KansokuClient = Object.assign(core, identityApi, {\n reset() {\n pageSnapshot = undefined\n vitals?.retire()\n identityApi.reset()\n },\n linkTo: (url: string | URL) => linkTo(core, url),\n optOut() {\n pageSnapshot = undefined\n vitals?.retire()\n optOut()\n },\n page(properties?: JsonObject, trackOptions?: TrackOptions) {\n if (typeof document === \"undefined\") return\n if (core.isSuppressed()) {\n pageSnapshot = undefined\n core.drop(\"opted_out\", [])\n return\n }\n leavePage()\n const event = buildPageView(core, properties, trackOptions)\n if (core.enqueueBuilt(event)) {\n pageSnapshot = { event, started: monotonic(), left: false }\n errorPage?.()\n vitals?.page(event)\n }\n },\n experiment(\n experiment: string,\n variant: string,\n properties?: JsonObject,\n exposureOptions?: ExperimentOptions,\n ) {\n recordExposure(core, experiment, variant, properties, exposureOptions)\n },\n })\n let lastPage: string | undefined\n core.onStart(() => {\n if (core.config.autocapture.pageViews === false || typeof document === \"undefined\") return\n const capture = () => {\n if (core.isSuppressed()) return\n const key = location.origin + location.pathname + location.search\n if (key === lastPage) return\n client.page()\n lastPage = key\n }\n capture()\n const detach = installNavigationCapture(core.config, capture)\n const resume = (event: PageTransitionEvent) => {\n if (event.persisted) client.page()\n }\n window.addEventListener(\"pageshow\", resume)\n return () => {\n detach()\n window.removeEventListener(\"pageshow\", resume)\n }\n })\n if (core.config.autoStart) client.start()\n return client\n}\n"
29
29
  ],
30
30
  "mappings": "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",
31
- "debugId": "CB2E5AF1B9A775BB64756E2164756E21",
31
+ "debugId": "83E907B202F98A6164756E2164756E21",
32
32
  "names": []
33
33
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "kansoku-js",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "description": "Browser SDK for the Kansoku analytics service",
5
5
  "keywords": [
6
6
  "analytics",