@sendermaster/react 0.2.0 → 0.2.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,3 +1,7 @@
1
+ # 0.2.1
2
+
3
+ Adds SSR-safe `resetIdentity()` for sign-out. Drops pending old-identity events, rotates visitor/session IDs and preserves the Cookie choice.
4
+
1
5
  # 0.2.0
2
6
 
3
7
  Cookie consent adapters and success-only action tracking with consent/identity guards. Search filtering and business conversion helpers. React adds an optional Cookie banner, automatic visit/checkout identifiers and backward-compatible explicit keys. Installation generator is a separate maintainer package. Published as public npm packages; production deployment and collection configuration remain separate.
package/README.md CHANGED
@@ -1,9 +1,9 @@
1
- # SenderMaster React 0.2.0
1
+ # SenderMaster React 0.2.1
2
2
 
3
3
  React 18 / Next.js 14 are verified. Browser core and types are included; install only this package.
4
4
 
5
5
  ```sh
6
- npm install @sendermaster/react@0.2.0
6
+ npm install @sendermaster/react@0.2.1
7
7
  ```
8
8
 
9
9
  ## Existing Cookie banner
@@ -70,3 +70,7 @@ that all sensitive terms will be detected. `toId` and `toAmount` assist field co
70
70
  All entry points are safe to import during SSR. Do not mount conflicting Provider configurations in
71
71
  one document. Strict Mode reuses the client; final unmount destroys it. Use only a public Site Key.
72
72
  No test tools, installation generator or Cookie UI is mounted automatically.
73
+
74
+ ## 0.2.1 sign-out identity reset
75
+
76
+ `senderMaster.resetIdentity()` rotates the browser identity after sign-out. Capture the old anonymous ID and authenticated request context first so your server can unlink it. Reset does not clear the Cookie choice or retroactively retract delivered events. Available in version 0.2.1 and later.
package/dist/browser.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";var ne=Object.defineProperty;var De=Object.getOwnPropertyDescriptor;var Le=Object.getOwnPropertyNames;var je=Object.prototype.hasOwnProperty;var Ke=(n,o)=>{for(var s in o)ne(n,s,{get:o[s],enumerable:!0})},Ue=(n,o,s,r)=>{if(o&&typeof o=="object"||typeof o=="function")for(let i of Le(o))!je.call(n,i)&&i!==s&&ne(n,i,{get:()=>o[i],enumerable:!(r=De(o,i))||r.enumerable});return n};var He=n=>Ue(ne({},"__esModule",{value:!0}),n);var st={};Ke(st,{createCookieConsentAdapter:()=>_e,installLegacyPixel:()=>tt,senderMaster:()=>C,toAmount:()=>rt,toId:()=>nt});module.exports=He(st);var We={product_view:[{name:"catalogProductId",type:"string",required:!1,constraint:"1\u2013100; current-site catalog ID"},{name:"catalogVariantId",type:"string",required:!1,constraint:"1\u2013100; requires catalogProductId"},{name:"productId",type:"string",required:!1,constraint:"1\u2013256; required unless catalogProductId is provided"},{name:"variantId",type:"string",required:!1,constraint:"1\u2013256"},{name:"amount",type:"number",required:!1,constraint:"\u2265 0; requires currency"},{name:"currency",type:"string",required:!1,constraint:"3 uppercase letters; requires amount"},{name:"custom",type:"object",required:!1,constraint:"\u2264 50 fields / 3 levels / 16 KB"}],add_to_cart:[{name:"catalogProductId",type:"string",required:!1,constraint:"1\u2013100; current-site catalog ID"},{name:"catalogVariantId",type:"string",required:!1,constraint:"1\u2013100; requires catalogProductId"},{name:"productId",type:"string",required:!1,constraint:"1\u2013256; required unless catalogProductId is provided"},{name:"quantity",type:"integer",required:!0,constraint:"\u2265 1"},{name:"variantId",type:"string",required:!1,constraint:"1\u2013256"},{name:"amount",type:"number",required:!1,constraint:"\u2265 0; requires currency"},{name:"currency",type:"string",required:!1,constraint:"3 uppercase letters; requires amount"},{name:"custom",type:"object",required:!1,constraint:"\u2264 50 fields / 3 levels / 16 KB"}],begin_checkout:[{name:"checkoutId",type:"string",required:!0,constraint:"1\u2013256"},{name:"items",type:"array",required:!0,constraint:"1\u2013100 items"},{name:"amount",type:"number",required:!0,constraint:"\u2265 0"},{name:"currency",type:"string",required:!0,constraint:"3 uppercase letters"},{name:"custom",type:"object",required:!1,constraint:"\u2264 50 fields / 3 levels / 16 KB"}],search:[{name:"query",type:"string",required:!0,constraint:"1\u2013500"},{name:"resultsCount",type:"integer",required:!1,constraint:"\u2265 0"},{name:"custom",type:"object",required:!1,constraint:"\u2264 50 fields / 3 levels / 16 KB"}],wishlist_added:[{name:"catalogProductId",type:"string",required:!1,constraint:"1\u2013100; current-site catalog ID"},{name:"catalogVariantId",type:"string",required:!1,constraint:"1\u2013100; requires catalogProductId"},{name:"productId",type:"string",required:!1,constraint:"1\u2013256; required unless catalogProductId is provided"},{name:"listName",type:"string",required:!1,constraint:"1\u2013256"},{name:"custom",type:"object",required:!1,constraint:"\u2264 50 fields / 3 levels / 16 KB"}]},Je=[{name:"catalogProductId",type:"string",required:!1,constraint:"1\u2013100; current-site catalog ID"},{name:"catalogVariantId",type:"string",required:!1,constraint:"1\u2013100; requires catalogProductId"},{name:"productId",type:"string",required:!1,constraint:"1\u2013256; required unless catalogProductId is provided"},{name:"quantity",type:"integer",required:!0,constraint:"\u2265 1"},{name:"variantId",type:"string",required:!1,constraint:"1\u2013256"},{name:"amount",type:"number",required:!1,constraint:"\u2265 0"}],q=256,Fe=500,Ie=100,be=50,ve=3,Se=16*1024,ze=/(password|passcode|secret|token|api.?key|card.?number|cvv|cvc|security.?code|ssn|passport)/i,Be=Object.fromEntries(Object.entries(We).map(([n,o])=>[n,o.map(s=>s.name)]));function Qe(n,o){let s=[];if(!U(o))return[{path:"properties",message:"must be an object"}];let r=o;for(let i of Object.keys(r))Be[n].includes(i)||s.push({path:`properties.${i}`,message:"is not a supported standard field; place extension data under custom"});return n==="wishlist_added"?(b(r,"productId",s,!r.catalogProductId,q),b(r,"listName",s,!1,q)):n==="product_view"||n==="add_to_cart"?(b(r,"productId",s,!r.catalogProductId,q),b(r,"variantId",s,!1,q),oe(r,"amount",s,!1,!1),we(r,s,!1),r.amount===void 0!=(r.currency===void 0)&&s.push({path:"properties.amount",message:"amount and currency must be provided together"}),n==="add_to_cart"&&ae(r,"quantity",s,!0,1)):n==="begin_checkout"?(b(r,"checkoutId",s,!0,q),oe(r,"amount",s,!0,!1),we(r,s,!0),!Array.isArray(r.items)||r.items.length<1||r.items.length>Ie?s.push({path:"properties.items",message:`must contain 1-${Ie} items`}):r.items.forEach((i,c)=>Xe(i,c,s))):(b(r,"query",s,!0,Fe),ae(r,"resultsCount",s,!1,0)),["product_view","add_to_cart","wishlist_added"].includes(n)&&(b(r,"catalogProductId",s,!1,100),b(r,"catalogVariantId",s,!1,100),r.catalogVariantId&&!r.catalogProductId&&s.push({path:"properties.catalogVariantId",message:"requires catalogProductId"})),r.custom!==void 0&&Ye(r.custom,s),s}function Ee(n,o){let s=Qe(n,o);if(s.length)throw new re(n,s);let r=o,i={};for(let c of["variantId","quantity","checkoutId","items","query","resultsCount","listName","custom"])r[c]!==void 0&&(i[c]=r[c]);return{...typeof r.productId=="string"?{productId:r.productId}:{},...typeof r.catalogProductId=="string"?{catalogProductId:r.catalogProductId}:{},...typeof r.catalogVariantId=="string"?{catalogVariantId:r.catalogVariantId}:{},...typeof r.amount=="number"?{amount:r.amount}:{},...typeof r.currency=="string"?{currency:r.currency}:{},properties:i}}var re=class extends Error{constructor(s,r){super(`Invalid ${s} event: ${r.map(i=>`${i.path} ${i.message}`).join("; ")}`);this.eventName=s;this.issues=r;this.name="StandardEventValidationError"}eventName;issues};function Xe(n,o,s){let r=`properties.items[${o}]`;if(!U(n)){s.push({path:r,message:"must be an object"});return}let i=n,c=Je.map(d=>d.name);for(let d of Object.keys(i))c.includes(d)||s.push({path:`${r}.${d}`,message:"is not supported"});b(i,"productId",s,!i.catalogProductId,q,r),b(i,"catalogProductId",s,!1,100,r),b(i,"catalogVariantId",s,!1,100,r),i.catalogVariantId&&!i.catalogProductId&&s.push({path:`${r}.catalogVariantId`,message:"requires catalogProductId"}),b(i,"variantId",s,!1,q,r),ae(i,"quantity",s,!0,1,r),oe(i,"amount",s,!1,!1,r)}function Ye(n,o){if(!U(n)){o.push({path:"properties.custom",message:"must be an object"});return}let s=n;Object.keys(s).length>be&&o.push({path:"properties.custom",message:`must contain at most ${be} top-level fields`}),se(s,"properties.custom",1,o,new WeakSet);try{new TextEncoder().encode(JSON.stringify(s)).length>Se&&o.push({path:"properties.custom",message:`must be at most ${Se} bytes`})}catch{o.push({path:"properties.custom",message:"must be valid JSON data"})}}function se(n,o,s,r,i){if(s>ve){r.push({path:o,message:`must not exceed ${ve} levels`});return}if(!(n===null||typeof n=="string"||typeof n=="boolean"||typeof n=="number"&&Number.isFinite(n))){if(typeof n=="object"&&n){if(i.has(n)){r.push({path:o,message:"must not contain circular references"});return}i.add(n)}if(Array.isArray(n)){n.forEach((c,d)=>se(c,`${o}[${d}]`,s+1,r,i));return}if(U(n)){Object.entries(n).forEach(([c,d])=>{(c.startsWith("_")||c.toLowerCase().startsWith("sm_"))&&r.push({path:`${o}.${c}`,message:"uses a reserved prefix"}),ze.test(c)&&r.push({path:`${o}.${c}`,message:"must not contain secrets or sensitive payment/identity data"}),se(d,`${o}.${c}`,s+1,r,i)});return}r.push({path:o,message:"must contain JSON-compatible values only"})}}function U(n){if(!n||typeof n!="object"||Array.isArray(n))return!1;let o=Object.getPrototypeOf(n);return o===Object.prototype||o===null}function b(n,o,s,r,i,c="properties"){let d=n[o];if(d===void 0){r&&s.push({path:`${c}.${o}`,message:"is required"});return}(typeof d!="string"||d.length<1||d.length>i)&&s.push({path:`${c}.${o}`,message:`must be a string with 1-${i} characters`})}function oe(n,o,s,r,i,c="properties"){let d=n[o];if(d===void 0){r&&s.push({path:`${c}.${o}`,message:"is required"});return}(typeof d!="number"||!Number.isFinite(d)||(i?d<=0:d<0))&&s.push({path:`${c}.${o}`,message:i?"must be a positive finite number":"must be a non-negative finite number"})}function ae(n,o,s,r,i,c="properties"){let d=n[o];if(d===void 0){r&&s.push({path:`${c}.${o}`,message:"is required"});return}(typeof d!="number"||!Number.isInteger(d)||d<i)&&s.push({path:`${c}.${o}`,message:`must be an integer greater than or equal to ${i}`})}function we(n,o,s){let r=n.currency;if(r===void 0){s&&o.push({path:"properties.currency",message:"is required"});return}(typeof r!="string"||!/^[A-Z]{3}$/.test(r))&&o.push({path:"properties.currency",message:"must be a 3-letter uppercase currency code"})}var Ae=1800*1e3,Ge=1440*60*1e3,Ze=/\.(?:pdf|csv|docx?|xlsx?|pptx?|zip|rar|7z)(?:$|[?#])/i,H=Object.freeze({state:"disabled",consent:"unknown",queueLength:0,pageViewId:null});function Te(n,o=!1){let s=o?"robot_store":`sendermaster:${n.siteKey}`,r={anonymous:`${s}_anonymous_id`,session:`${s}_session`,consent:`${s}_consent`,queue:`${s}_event_queue`},i=new Map;function c(e){try{let t=localStorage.getItem(e);return t!==null&&i.set(e,t),t??i.get(e)??null}catch{return i.get(e)??null}}function d(e,t){i.set(e,t);try{localStorage.setItem(e,t)}catch{}}function T(e){i.delete(e);try{localStorage.removeItem(e)}catch{}}function $(e){try{return JSON.parse(c(e)??"null")}catch{return null}}let R=new Set,_={analytics:"unknown"},k={...H,state:n.enabled===!1||!n.siteKey?"disabled":"waiting_consent"},p=!1,S=0,O,D=!1,L,M=0,P=0,l,W=!1,J=location.href,F=new WeakSet,x=new WeakMap,f=[],z=[];function E(e={}){let t={...k,consent:_.analytics,queueLength:f.length,pageViewId:l?.id??null,...e};if(JSON.stringify(t)!==JSON.stringify(k)){k=Object.freeze(t);for(let a of R)try{a()}catch{}}}function w(e,t,a,u){let g=S,I=A=>{if(p&&S===g)try{a(A)}catch{}};e.addEventListener(t,I,u),z.push(()=>e.removeEventListener(t,I,u))}function ie(){return(n.apiHost??"https://api.sendermaster.com").replace(/\/$/,"")}function B(){let e=c(r.anonymous);return e||(e=crypto.randomUUID(),d(r.anonymous,e)),e}function Q(){let e=$(r.session);return e&&typeof e.id=="string"&&typeof e.lastActivityAt=="number"?e:void 0}function X(){let e=Date.now(),t=Q();if(!t||e-t.lastActivityAt>=Ae){let a={id:crypto.randomUUID(),lastActivityAt:e};return d(r.session,JSON.stringify(a)),a.id}return t.lastActivityAt=e,d(r.session,JSON.stringify(t)),t.id}function Y(){let e=Date.now();f=f.filter(t=>t.siteKey===n.siteKey&&e-Date.parse(t.event.occurredAt)<Ge&&Date.parse(t.event.occurredAt)<=e+6e4).slice(-100)}function j(){Y(),d(r.queue,JSON.stringify(f)),E()}function qe(){let e=$(r.queue);Array.isArray(e)&&(f=e.flatMap(t=>{if(t?.event?.eventId&&typeof t.anonymousId=="string"&&typeof t.sessionId=="string")return[t];let a=c(r.anonymous),u=Q();return o&&t?.eventId&&a&&u?[{siteKey:n.siteKey,anonymousId:a,sessionId:u.id,event:t}]:[]}),Y())}function ce(e){let t=new URL(e);return["email","token","password","access_token"].forEach(a=>t.searchParams.delete(a)),t.toString()}function de(e){try{return new URL(e).origin}catch{return}}function Ce(){return{title:document.title.slice(0,512),language:navigator.language,screen:{width:screen.width,height:screen.height},utm:Object.fromEntries(["utm_source","utm_medium","utm_campaign"].flatMap(e=>{let t=new URL(location.href).searchParams.get(e);return t?[[e,t]]:[]}))}}function Me(e=location.pathname){return n.pageRules?.find(t=>e.startsWith(t.pathPrefix))?.pageType}function ue(){let e=document.documentElement.scrollHeight-innerHeight;return e>0?Math.min(100,Math.max(0,Math.round(scrollY/e*100))):0}function y(e,t={},a={}){if(!p)return;let{productId:u,catalogProductId:g,catalogVariantId:I,amount:A,currency:m,pageType:N,...V}=t,h={eventId:crypto.randomUUID(),name:e,occurredAt:new Date().toISOString(),url:a.url??ce(location.href),path:a.path??location.pathname,...de(document.referrer)?{referrer:de(document.referrer)}:{},...typeof u=="string"?{productId:u}:{},...typeof g=="string"?{catalogProductId:g}:{},...typeof I=="string"?{catalogVariantId:I}:{},...typeof A=="number"?{amount:A}:{},...typeof m=="string"?{currency:m}:{},pageType:a.pageType??(typeof N=="string"?N:l?.pageType),pageViewId:a.pageViewId??l?.id,...a.engagedTimeMsec?{engagedTimeMsec:a.engagedTimeMsec}:{},...Object.keys(V).length?{properties:V}:{},context:Ce()};return f.push({siteKey:n.siteKey,anonymousId:B(),sessionId:X(),event:JSON.parse(JSON.stringify(h))}),j(),f.length>=20&&K(),h.eventId}function Pe(e,t){if(k.state==="disabled")return{queued:!1,reason:"disabled"};if(_.analytics!=="granted")return{queued:!1,reason:"consent_required"};if(!p)return{queued:!1,reason:"unavailable"};try{let a=Ee(e,t),u=y(e,{...a.properties,productId:a.productId,catalogProductId:a.catalogProductId,catalogVariantId:a.catalogVariantId,amount:a.amount,currency:a.currency});return u?{queued:!0,eventId:u}:{queued:!1,reason:"unavailable"}}catch(a){return{queued:!1,reason:"invalid_event",message:a instanceof Error?a.message:"Invalid event"}}}async function K(e=!1){if(!p||D||(Y(),E(),!f.length||!e&&Date.now()<M))return;let t=f[0],a=f.filter(m=>m.siteKey===t.siteKey&&m.anonymousId===t.anonymousId&&m.sessionId===t.sessionId).slice(0,20),u=JSON.stringify({siteKey:t.siteKey,anonymousId:t.anonymousId,sessionId:t.sessionId,events:a.map(m=>m.event)}),g=`${ie()}/v2/collect/events`;if(e)try{if(navigator.sendBeacon?.(g,new Blob([u],{type:"application/json"}))){j();return}}catch{}D=!0;let I=S,A=new AbortController;L=A;try{let m=await fetch(g,{method:"POST",headers:{"content-type":"application/json"},body:u,keepalive:!0,signal:A.signal});if(I!==S||!p)return;if(!m.ok){if(m.status===429||m.status>=500)throw new Error(`Collect HTTP ${m.status}`);let h=new Set(a.map(te=>te.event.eventId));f=f.filter(te=>!h.has(te.event.eventId)),j(),E({state:"error",error:`Collect HTTP ${m.status}: batch discarded`}),M=0,P=0;return}let N=await m.json();if(!Array.isArray(N.results))throw new Error("Collect response missing results");let V=new Set(N.results.filter(h=>h.status==="accepted"||h.status==="duplicate").map(h=>h.eventId));if(!a.every(h=>V.has(h.event.eventId)))throw new Error("Collect response incomplete");if(I!==S||!p)return;f=f.filter(h=>!V.has(h.event.eventId)),P=0,M=0,j(),E({state:"ready",error:void 0,lastDeliveredAt:new Date().toISOString()})}catch(m){if(I!==S||!p)return;P++,M=Date.now()+Math.min(6e4,3e3*2**Math.min(P-1,5)),E({error:m instanceof Error?m.message:"Collect unavailable"})}finally{I===S&&(D=!1,L=void 0)}p&&f.length&&!M&&K()}function le(e,t){let a=JSON.stringify({siteKey:n.siteKey,anonymousId:t,analyticsAllowed:e.analytics==="granted",marketingAllowed:e.marketing??!1,source:e.source??"sdk",policyVersion:e.policyVersion});try{fetch(`${ie()}/v2/collect/consent`,{method:"POST",headers:{"content-type":"application/json"},body:a,keepalive:!0}).then(u=>{if(!u.ok)throw new Error(`Consent HTTP ${u.status}`)}).catch(()=>{})}catch{}}function pe(){l={id:crypto.randomUUID(),url:ce(location.href),path:location.pathname,pageType:Me(),enteredAt:new Date().toISOString(),visibleAt:document.visibilityState==="visible"?Date.now():0,activeMsec:0,reportedMsec:0,maxScrollPercent:ue()},W=!1,y("page_view")}function xe(){!p||!l?.visibleAt||(l.activeMsec+=Date.now()-l.visibleAt,l.visibleAt=0)}function G(e){if(!p||!l)return;xe();let t=l.activeMsec-l.reportedMsec;t<1e3||(l.reportedMsec=l.activeMsec,y("page_engagement",{pageViewId:l.id,maxScrollPercent:l.maxScrollPercent,enteredAt:l.enteredAt,exitReason:e},{pageType:l.pageType,pageViewId:l.id,engagedTimeMsec:t,url:l.url,path:l.path}))}function Ne(){p&&l&&!l.visibleAt&&(l.visibleAt=Date.now())}function me(){!p||location.href===J||(G("navigation"),J=location.href,pe())}function Ve(){let e=S,t=a=>{let u=history[a];history[a]=function(...I){let A=u.apply(this,I);return queueMicrotask(()=>{p&&S===e&&me()}),A};let g=history[a];z.push(()=>{history[a]===g&&(history[a]=u)})};t("pushState"),t("replaceState"),w(window,"popstate",me)}function $e(e){let t=Oe(e),a=Array.from(document.querySelectorAll("video")).indexOf(e);return{videoId:e.dataset.robotVideoId||e.id||t||`video:${location.pathname}:${a}`,videoTitle:e.dataset.robotVideoTitle||e.getAttribute("title")||void 0,productId:e.dataset.robotProductId||void 0,videoSrc:t}}function Z(e,t,a){return{...$e(e),watchedSeconds:Math.round(t.watchedSeconds*10)/10,durationSeconds:Math.round(e.duration*10)/10,...a!==void 0?{progressPercent:a}:{}}}function fe(e,t){let a=Date.now(),u=e.currentTime-t.lastMediaTime,g=(a-t.lastWallTime)/1e3;u>0&&g>0&&u<=Math.max(3,g+1)&&(t.watchedSeconds+=Math.min(u,g+.5)),t.lastMediaTime=e.currentTime,t.lastWallTime=a}function ge(e,t){if(!e.duration)return;let a=Math.min(100,Math.floor(e.currentTime/e.duration*100));for(let u of[25,50,75,100])a>=u&&!t.milestones.has(u)&&(t.milestones.add(u),y("video_progress",Z(e,t,u)))}function Re(){w(window,"scroll",()=>{l&&(l.maxScrollPercent=Math.max(l.maxScrollPercent,ue()),!W&&l.maxScrollPercent>=90&&(W=!0,y("scroll",{percent:90})))},{passive:!0}),w(document,"focusin",e=>{let t=e.target?.closest("form");t&&!F.has(t)&&(F.add(t),y("form_start",{formId:t.id||void 0,formName:t.getAttribute("name")||void 0}))}),w(document,"submit",e=>{let t=e.target;t instanceof HTMLFormElement&&y("form_submitted",{formId:t.id||void 0,formName:t.getAttribute("name")||void 0})}),w(document,"click",e=>{let t=e.target?.closest("a[href]");if(!t)return;let a=t.href,u=t.origin!==location.origin;t.hasAttribute("download")||Ze.test(a)?y("file_download",{fileName:t.pathname.split("/").pop(),linkDomain:t.hostname||void 0}):(u||/^mailto:|^tel:/i.test(t.getAttribute("href")??""))&&y("click",{linkDomain:t.hostname||void 0,linkType:a.startsWith("mailto:")?"email":a.startsWith("tel:")?"phone":"outbound"})}),w(document,"play",e=>{let t=e.target;if(!(t instanceof HTMLVideoElement))return;let a=x.get(t);a||(a={milestones:new Set,watchedSeconds:0,lastMediaTime:t.currentTime,lastWallTime:Date.now(),started:!1},x.set(t,a)),a.started||(a.started=!0,y("video_start",Z(t,a))),a.lastMediaTime=t.currentTime,a.lastWallTime=Date.now()},!0),w(document,"timeupdate",e=>{let t=e.target;if(!(t instanceof HTMLVideoElement))return;let a=x.get(t);a&&(fe(t,a),ge(t,a))},!0),w(document,"ended",e=>{let t=e.target;if(!(t instanceof HTMLVideoElement))return;let a=x.get(t);a&&(fe(t,a),ge(t,a),y("video_complete",Z(t,a,100)))},!0),w(document,"visibilitychange",()=>{document.visibilityState==="hidden"?G("hidden"):Ne()})}function Oe(e){try{return e.currentSrc?new URL(e.currentSrc).origin+new URL(e.currentSrc).pathname:void 0}catch{return}}function ye(){if(!(p||k.state==="disabled"||_.analytics!=="granted"))try{let e=!c(r.anonymous),t=Q();qe(),B(),X(),p=!0,S++,J=location.href,F=new WeakSet,x=new WeakMap,pe(),e&&y("first_visit"),(!t||Date.now()-t.lastActivityAt>=Ae)&&y("session_start"),Re(),Ve(),w(window,"pagehide",()=>{G("pagehide"),K(!0)}),O=window.setInterval(()=>{K()},3e3),E({state:"ready",error:void 0}),window.dispatchEvent(new Event("robot:ready"))}catch(e){ee(!1),E({state:"error",error:e instanceof Error?e.message:"Initialization failed"})}}function ee(e){p=!1,S++,L?.abort(),L=void 0,D=!1,O!==void 0&&window.clearInterval(O),O=void 0;for(let t of z.splice(0).reverse())t();l=void 0,M=0,P=0,e&&(f=[],T(r.queue),T(r.anonymous),T(r.session))}function he(e){if(k.state==="disabled")return;let t=JSON.stringify(_)!==JSON.stringify(e),a=p?c(r.anonymous):null;_={...e},o&&d(r.consent,JSON.stringify({...e,analytics:e.analytics==="granted"})),e.analytics!=="granted"?(ee(e.analytics==="denied"||!!a),E({state:"waiting_consent",error:void 0}),t&&a&&le(e,a)):(ye(),t&&p&&le(e,B()))}return{track:Pe,setConsent:he,start:ye,restoreLegacyConsent:()=>{o&&_.analytics==="unknown"&&$(r.consent)?.analytics===!0&&he({...$(r.consent),analytics:"granted"})},getStatus:()=>k,subscribe:e=>(R.add(e),()=>{R.delete(e)}),getAnonymousId:()=>p?c(r.anonymous):null,getSessionId:()=>p?X():null,destroy:()=>{ee(!1),_={analytics:"unknown"},E({state:"disabled"}),R.clear()}}}function _e({cookieName:n,changeEvent:o="sendermaster:consent-change",grantedValue:s="granted",deniedValue:r="denied",maxAgeDays:i=365}){if(!/^[\w.-]+$/.test(n))throw new Error("Invalid consent cookie name");return{getSnapshot(){if(typeof document>"u")return"unknown";try{let c=document.cookie.split(";").find(T=>T.trim().startsWith(`${n}=`)),d=c?decodeURIComponent(c.trim().slice(n.length+1)):"";return d===s?"granted":d===r?"denied":"unknown"}catch{return"unknown"}},subscribe(c){if(typeof window>"u")return()=>{};let d=()=>c();return window.addEventListener(o,d),window.addEventListener("focus",d),document.addEventListener("visibilitychange",d),()=>{window.removeEventListener(o,d),window.removeEventListener("focus",d),document.removeEventListener("visibilitychange",d)}},setConsent(c){if(typeof document>"u")return;let d=c==="granted"?s:r;document.cookie=`${n}=${c==="unknown"?"":encodeURIComponent(d)}; Path=/; Max-Age=${c==="unknown"?0:Math.max(0,Math.floor(i*86400))}; SameSite=Lax${location.protocol==="https:"?"; Secure":""}`,window.dispatchEvent(new Event(o))}}}var et=Symbol.for("sendermaster.browser.v1");function v(){if(typeof window>"u")return;let n=window;return n[et]||={subscribers:new Set}}function ke(n,o){let s=v();if(!s)return H;let r={...n,siteKey:n.siteKey?.trim()||"",apiHost:(n.apiHost||"https://api.sendermaster.com").replace(/\/$/,""),enabled:n.enabled!==!1},i=JSON.stringify(r);if(s.client&&s.fingerprint===i)return s.client.getStatus();s.client?.destroy(),s.fingerprint=i,s.client=Te(r,o),s.client.subscribe(()=>{for(let c of s.subscribers)try{c()}catch{}});for(let c of s.subscribers)try{c()}catch{}return s.client.getStatus()}var C={init:n=>ke(n,!1),setConsent:n=>v()?.client?.setConsent(n),track(n,o){return v()?.client?.track(n,o)??{queued:!1,reason:"disabled"}},async trackAfterSuccess(n,o){let s=v()?.client,r=s?.getAnonymousId(),i=!!r&&s?.getStatus().consent==="granted",c=await n();if(i&&v()?.client===s&&s?.getAnonymousId()===r&&s.getStatus().consent==="granted")try{let d=o(c);for(let T of Array.isArray(d)?d:[d])C.track(T.name,T.properties)}catch{}return c},trackSearch(n,o={}){let s=n.trim();return!s||s.length>500||o.filterPersonalData!==!1&&/@|(?:\d[\s()+-]*){7,}/.test(s)?{queued:!1,reason:"invalid_event",message:"Search is empty, too long or contains personal data"}:C.track("search",{query:s,...o.custom?{custom:o.custom}:{}})},getStatus:()=>v()?.client?.getStatus()??H,subscribe(n){let o=v();return o?(o.subscribers.add(n),()=>{o.subscribers.delete(n)}):()=>{}},getAnonymousId:()=>v()?.client?.getAnonymousId()??null,getSessionId:()=>v()?.client?.getSessionId()??null,destroy(){let n=v();if(n){n.client?.destroy(),n.client=void 0,n.fingerprint=void 0;for(let o of n.subscribers)try{o()}catch{}}}};function tt(n){ke(n,!0);let o={start:()=>v()?.client?.start(),track:C.track,setConsent:s=>C.setConsent({...s,analytics:s.analytics?"granted":"denied"}),getAnonymousId:C.getAnonymousId,getSessionId:C.getSessionId};return window.robot=o,v()?.client?.restoreLegacyConsent(),o}function nt(n){if(typeof n!="string"&&typeof n!="number")return;let o=String(n).trim();return o&&o!=="0"&&o.length<=256?o:void 0}function rt(n){if(n==null||n===""||typeof n=="boolean")return;let o=Number(n);return Number.isFinite(o)&&o>=0?o:void 0}
1
+ "use strict";var re=Object.defineProperty;var De=Object.getOwnPropertyDescriptor;var Le=Object.getOwnPropertyNames;var je=Object.prototype.hasOwnProperty;var Ke=(n,a)=>{for(var s in a)re(n,s,{get:a[s],enumerable:!0})},Ue=(n,a,s,r)=>{if(a&&typeof a=="object"||typeof a=="function")for(let i of Le(a))!je.call(n,i)&&i!==s&&re(n,i,{get:()=>a[i],enumerable:!(r=De(a,i))||r.enumerable});return n};var He=n=>Ue(re({},"__esModule",{value:!0}),n);var st={};Ke(st,{createCookieConsentAdapter:()=>_e,installLegacyPixel:()=>tt,senderMaster:()=>C,toAmount:()=>rt,toId:()=>nt});module.exports=He(st);var We={product_view:[{name:"catalogProductId",type:"string",required:!1,constraint:"1\u2013100; current-site catalog ID"},{name:"catalogVariantId",type:"string",required:!1,constraint:"1\u2013100; requires catalogProductId"},{name:"productId",type:"string",required:!1,constraint:"1\u2013256; required unless catalogProductId is provided"},{name:"variantId",type:"string",required:!1,constraint:"1\u2013256"},{name:"amount",type:"number",required:!1,constraint:"\u2265 0; requires currency"},{name:"currency",type:"string",required:!1,constraint:"3 uppercase letters; requires amount"},{name:"custom",type:"object",required:!1,constraint:"\u2264 50 fields / 3 levels / 16 KB"}],add_to_cart:[{name:"catalogProductId",type:"string",required:!1,constraint:"1\u2013100; current-site catalog ID"},{name:"catalogVariantId",type:"string",required:!1,constraint:"1\u2013100; requires catalogProductId"},{name:"productId",type:"string",required:!1,constraint:"1\u2013256; required unless catalogProductId is provided"},{name:"quantity",type:"integer",required:!0,constraint:"\u2265 1"},{name:"variantId",type:"string",required:!1,constraint:"1\u2013256"},{name:"amount",type:"number",required:!1,constraint:"\u2265 0; requires currency"},{name:"currency",type:"string",required:!1,constraint:"3 uppercase letters; requires amount"},{name:"custom",type:"object",required:!1,constraint:"\u2264 50 fields / 3 levels / 16 KB"}],begin_checkout:[{name:"checkoutId",type:"string",required:!0,constraint:"1\u2013256"},{name:"items",type:"array",required:!0,constraint:"1\u2013100 items"},{name:"amount",type:"number",required:!0,constraint:"\u2265 0"},{name:"currency",type:"string",required:!0,constraint:"3 uppercase letters"},{name:"custom",type:"object",required:!1,constraint:"\u2264 50 fields / 3 levels / 16 KB"}],search:[{name:"query",type:"string",required:!0,constraint:"1\u2013500"},{name:"resultsCount",type:"integer",required:!1,constraint:"\u2265 0"},{name:"custom",type:"object",required:!1,constraint:"\u2264 50 fields / 3 levels / 16 KB"}],wishlist_added:[{name:"catalogProductId",type:"string",required:!1,constraint:"1\u2013100; current-site catalog ID"},{name:"catalogVariantId",type:"string",required:!1,constraint:"1\u2013100; requires catalogProductId"},{name:"productId",type:"string",required:!1,constraint:"1\u2013256; required unless catalogProductId is provided"},{name:"listName",type:"string",required:!1,constraint:"1\u2013256"},{name:"custom",type:"object",required:!1,constraint:"\u2264 50 fields / 3 levels / 16 KB"}]},Je=[{name:"catalogProductId",type:"string",required:!1,constraint:"1\u2013100; current-site catalog ID"},{name:"catalogVariantId",type:"string",required:!1,constraint:"1\u2013100; requires catalogProductId"},{name:"productId",type:"string",required:!1,constraint:"1\u2013256; required unless catalogProductId is provided"},{name:"quantity",type:"integer",required:!0,constraint:"\u2265 1"},{name:"variantId",type:"string",required:!1,constraint:"1\u2013256"},{name:"amount",type:"number",required:!1,constraint:"\u2265 0"}],q=256,Fe=500,Ie=100,be=50,ve=3,Se=16*1024,ze=/(password|passcode|secret|token|api.?key|card.?number|cvv|cvc|security.?code|ssn|passport)/i,Be=Object.fromEntries(Object.entries(We).map(([n,a])=>[n,a.map(s=>s.name)]));function Qe(n,a){let s=[];if(!H(a))return[{path:"properties",message:"must be an object"}];let r=a;for(let i of Object.keys(r))Be[n].includes(i)||s.push({path:`properties.${i}`,message:"is not a supported standard field; place extension data under custom"});return n==="wishlist_added"?(v(r,"productId",s,!r.catalogProductId,q),v(r,"listName",s,!1,q)):n==="product_view"||n==="add_to_cart"?(v(r,"productId",s,!r.catalogProductId,q),v(r,"variantId",s,!1,q),oe(r,"amount",s,!1,!1),we(r,s,!1),r.amount===void 0!=(r.currency===void 0)&&s.push({path:"properties.amount",message:"amount and currency must be provided together"}),n==="add_to_cart"&&ie(r,"quantity",s,!0,1)):n==="begin_checkout"?(v(r,"checkoutId",s,!0,q),oe(r,"amount",s,!0,!1),we(r,s,!0),!Array.isArray(r.items)||r.items.length<1||r.items.length>Ie?s.push({path:"properties.items",message:`must contain 1-${Ie} items`}):r.items.forEach((i,c)=>Xe(i,c,s))):(v(r,"query",s,!0,Fe),ie(r,"resultsCount",s,!1,0)),["product_view","add_to_cart","wishlist_added"].includes(n)&&(v(r,"catalogProductId",s,!1,100),v(r,"catalogVariantId",s,!1,100),r.catalogVariantId&&!r.catalogProductId&&s.push({path:"properties.catalogVariantId",message:"requires catalogProductId"})),r.custom!==void 0&&Ye(r.custom,s),s}function Ee(n,a){let s=Qe(n,a);if(s.length)throw new se(n,s);let r=a,i={};for(let c of["variantId","quantity","checkoutId","items","query","resultsCount","listName","custom"])r[c]!==void 0&&(i[c]=r[c]);return{...typeof r.productId=="string"?{productId:r.productId}:{},...typeof r.catalogProductId=="string"?{catalogProductId:r.catalogProductId}:{},...typeof r.catalogVariantId=="string"?{catalogVariantId:r.catalogVariantId}:{},...typeof r.amount=="number"?{amount:r.amount}:{},...typeof r.currency=="string"?{currency:r.currency}:{},properties:i}}var se=class extends Error{constructor(s,r){super(`Invalid ${s} event: ${r.map(i=>`${i.path} ${i.message}`).join("; ")}`);this.eventName=s;this.issues=r;this.name="StandardEventValidationError"}eventName;issues};function Xe(n,a,s){let r=`properties.items[${a}]`;if(!H(n)){s.push({path:r,message:"must be an object"});return}let i=n,c=Je.map(d=>d.name);for(let d of Object.keys(i))c.includes(d)||s.push({path:`${r}.${d}`,message:"is not supported"});v(i,"productId",s,!i.catalogProductId,q,r),v(i,"catalogProductId",s,!1,100,r),v(i,"catalogVariantId",s,!1,100,r),i.catalogVariantId&&!i.catalogProductId&&s.push({path:`${r}.catalogVariantId`,message:"requires catalogProductId"}),v(i,"variantId",s,!1,q,r),ie(i,"quantity",s,!0,1,r),oe(i,"amount",s,!1,!1,r)}function Ye(n,a){if(!H(n)){a.push({path:"properties.custom",message:"must be an object"});return}let s=n;Object.keys(s).length>be&&a.push({path:"properties.custom",message:`must contain at most ${be} top-level fields`}),ae(s,"properties.custom",1,a,new WeakSet);try{new TextEncoder().encode(JSON.stringify(s)).length>Se&&a.push({path:"properties.custom",message:`must be at most ${Se} bytes`})}catch{a.push({path:"properties.custom",message:"must be valid JSON data"})}}function ae(n,a,s,r,i){if(s>ve){r.push({path:a,message:`must not exceed ${ve} levels`});return}if(!(n===null||typeof n=="string"||typeof n=="boolean"||typeof n=="number"&&Number.isFinite(n))){if(typeof n=="object"&&n){if(i.has(n)){r.push({path:a,message:"must not contain circular references"});return}i.add(n)}if(Array.isArray(n)){n.forEach((c,d)=>ae(c,`${a}[${d}]`,s+1,r,i));return}if(H(n)){Object.entries(n).forEach(([c,d])=>{(c.startsWith("_")||c.toLowerCase().startsWith("sm_"))&&r.push({path:`${a}.${c}`,message:"uses a reserved prefix"}),ze.test(c)&&r.push({path:`${a}.${c}`,message:"must not contain secrets or sensitive payment/identity data"}),ae(d,`${a}.${c}`,s+1,r,i)});return}r.push({path:a,message:"must contain JSON-compatible values only"})}}function H(n){if(!n||typeof n!="object"||Array.isArray(n))return!1;let a=Object.getPrototypeOf(n);return a===Object.prototype||a===null}function v(n,a,s,r,i,c="properties"){let d=n[a];if(d===void 0){r&&s.push({path:`${c}.${a}`,message:"is required"});return}(typeof d!="string"||d.length<1||d.length>i)&&s.push({path:`${c}.${a}`,message:`must be a string with 1-${i} characters`})}function oe(n,a,s,r,i,c="properties"){let d=n[a];if(d===void 0){r&&s.push({path:`${c}.${a}`,message:"is required"});return}(typeof d!="number"||!Number.isFinite(d)||(i?d<=0:d<0))&&s.push({path:`${c}.${a}`,message:i?"must be a positive finite number":"must be a non-negative finite number"})}function ie(n,a,s,r,i,c="properties"){let d=n[a];if(d===void 0){r&&s.push({path:`${c}.${a}`,message:"is required"});return}(typeof d!="number"||!Number.isInteger(d)||d<i)&&s.push({path:`${c}.${a}`,message:`must be an integer greater than or equal to ${i}`})}function we(n,a,s){let r=n.currency;if(r===void 0){s&&a.push({path:"properties.currency",message:"is required"});return}(typeof r!="string"||!/^[A-Z]{3}$/.test(r))&&a.push({path:"properties.currency",message:"must be a 3-letter uppercase currency code"})}var Ae=1800*1e3,Ge=1440*60*1e3,Ze=/\.(?:pdf|csv|docx?|xlsx?|pptx?|zip|rar|7z)(?:$|[?#])/i,W=Object.freeze({state:"disabled",consent:"unknown",queueLength:0,pageViewId:null});function Te(n,a=!1){let s=a?"robot_store":`sendermaster:${n.siteKey}`,r={anonymous:`${s}_anonymous_id`,session:`${s}_session`,consent:`${s}_consent`,queue:`${s}_event_queue`},i=new Map;function c(e){try{let t=localStorage.getItem(e);return t!==null&&i.set(e,t),t??i.get(e)??null}catch{return i.get(e)??null}}function d(e,t){i.set(e,t);try{localStorage.setItem(e,t)}catch{}}function T(e){i.delete(e);try{localStorage.removeItem(e)}catch{}}function $(e){try{return JSON.parse(c(e)??"null")}catch{return null}}let R=new Set,_={analytics:"unknown"},k={...W,state:n.enabled===!1||!n.siteKey?"disabled":"waiting_consent"},p=!1,S=0,O,D=!1,L,M=0,P=0,l,J=!1,F=location.href,z=new WeakSet,x=new WeakMap,f=[],B=[];function w(e={}){let t={...k,consent:_.analytics,queueLength:f.length,pageViewId:l?.id??null,...e};if(JSON.stringify(t)!==JSON.stringify(k)){k=Object.freeze(t);for(let o of R)try{o()}catch{}}}function E(e,t,o,u){let g=S,b=A=>{if(p&&S===g)try{o(A)}catch{}};e.addEventListener(t,b,u),B.push(()=>e.removeEventListener(t,b,u))}function ce(){return(n.apiHost??"https://api.sendermaster.com").replace(/\/$/,"")}function Q(){let e=c(r.anonymous);return e||(e=crypto.randomUUID(),d(r.anonymous,e)),e}function X(){let e=$(r.session);return e&&typeof e.id=="string"&&typeof e.lastActivityAt=="number"?e:void 0}function Y(){let e=Date.now(),t=X();if(!t||e-t.lastActivityAt>=Ae){let o={id:crypto.randomUUID(),lastActivityAt:e};return d(r.session,JSON.stringify(o)),o.id}return t.lastActivityAt=e,d(r.session,JSON.stringify(t)),t.id}function G(){let e=Date.now();f=f.filter(t=>t.siteKey===n.siteKey&&e-Date.parse(t.event.occurredAt)<Ge&&Date.parse(t.event.occurredAt)<=e+6e4).slice(-100)}function j(){G(),d(r.queue,JSON.stringify(f)),w()}function qe(){let e=$(r.queue);Array.isArray(e)&&(f=e.flatMap(t=>{if(t?.event?.eventId&&typeof t.anonymousId=="string"&&typeof t.sessionId=="string")return[t];let o=c(r.anonymous),u=X();return a&&t?.eventId&&o&&u?[{siteKey:n.siteKey,anonymousId:o,sessionId:u.id,event:t}]:[]}),G())}function de(e){let t=new URL(e);return["email","token","password","access_token"].forEach(o=>t.searchParams.delete(o)),t.toString()}function ue(e){try{return new URL(e).origin}catch{return}}function Ce(){return{title:document.title.slice(0,512),language:navigator.language,screen:{width:screen.width,height:screen.height},utm:Object.fromEntries(["utm_source","utm_medium","utm_campaign"].flatMap(e=>{let t=new URL(location.href).searchParams.get(e);return t?[[e,t]]:[]}))}}function Me(e=location.pathname){return n.pageRules?.find(t=>e.startsWith(t.pathPrefix))?.pageType}function le(){let e=document.documentElement.scrollHeight-innerHeight;return e>0?Math.min(100,Math.max(0,Math.round(scrollY/e*100))):0}function y(e,t={},o={}){if(!p)return;let{productId:u,catalogProductId:g,catalogVariantId:b,amount:A,currency:m,pageType:N,...V}=t,h={eventId:crypto.randomUUID(),name:e,occurredAt:new Date().toISOString(),url:o.url??de(location.href),path:o.path??location.pathname,...ue(document.referrer)?{referrer:ue(document.referrer)}:{},...typeof u=="string"?{productId:u}:{},...typeof g=="string"?{catalogProductId:g}:{},...typeof b=="string"?{catalogVariantId:b}:{},...typeof A=="number"?{amount:A}:{},...typeof m=="string"?{currency:m}:{},pageType:o.pageType??(typeof N=="string"?N:l?.pageType),pageViewId:o.pageViewId??l?.id,...o.engagedTimeMsec?{engagedTimeMsec:o.engagedTimeMsec}:{},...Object.keys(V).length?{properties:V}:{},context:Ce()};return f.push({siteKey:n.siteKey,anonymousId:Q(),sessionId:Y(),event:JSON.parse(JSON.stringify(h))}),j(),f.length>=20&&K(),h.eventId}function Pe(e,t){if(k.state==="disabled")return{queued:!1,reason:"disabled"};if(_.analytics!=="granted")return{queued:!1,reason:"consent_required"};if(!p)return{queued:!1,reason:"unavailable"};try{let o=Ee(e,t),u=y(e,{...o.properties,productId:o.productId,catalogProductId:o.catalogProductId,catalogVariantId:o.catalogVariantId,amount:o.amount,currency:o.currency});return u?{queued:!0,eventId:u}:{queued:!1,reason:"unavailable"}}catch(o){return{queued:!1,reason:"invalid_event",message:o instanceof Error?o.message:"Invalid event"}}}async function K(e=!1){if(!p||D||(G(),w(),!f.length||!e&&Date.now()<M))return;let t=f[0],o=f.filter(m=>m.siteKey===t.siteKey&&m.anonymousId===t.anonymousId&&m.sessionId===t.sessionId).slice(0,20),u=JSON.stringify({siteKey:t.siteKey,anonymousId:t.anonymousId,sessionId:t.sessionId,events:o.map(m=>m.event)}),g=`${ce()}/v2/collect/events`;if(e)try{if(navigator.sendBeacon?.(g,new Blob([u],{type:"application/json"}))){j();return}}catch{}D=!0;let b=S,A=new AbortController;L=A;try{let m=await fetch(g,{method:"POST",headers:{"content-type":"application/json"},body:u,keepalive:!0,signal:A.signal});if(b!==S||!p)return;if(!m.ok){if(m.status===429||m.status>=500)throw new Error(`Collect HTTP ${m.status}`);let h=new Set(o.map(ne=>ne.event.eventId));f=f.filter(ne=>!h.has(ne.event.eventId)),j(),w({state:"error",error:`Collect HTTP ${m.status}: batch discarded`}),M=0,P=0;return}let N=await m.json();if(!Array.isArray(N.results))throw new Error("Collect response missing results");let V=new Set(N.results.filter(h=>h.status==="accepted"||h.status==="duplicate").map(h=>h.eventId));if(!o.every(h=>V.has(h.event.eventId)))throw new Error("Collect response incomplete");if(b!==S||!p)return;f=f.filter(h=>!V.has(h.event.eventId)),P=0,M=0,j(),w({state:"ready",error:void 0,lastDeliveredAt:new Date().toISOString()})}catch(m){if(b!==S||!p)return;P++,M=Date.now()+Math.min(6e4,3e3*2**Math.min(P-1,5)),w({error:m instanceof Error?m.message:"Collect unavailable"})}finally{b===S&&(D=!1,L=void 0)}p&&f.length&&!M&&K()}function pe(e,t){let o=JSON.stringify({siteKey:n.siteKey,anonymousId:t,analyticsAllowed:e.analytics==="granted",marketingAllowed:e.marketing??!1,source:e.source??"sdk",policyVersion:e.policyVersion});try{fetch(`${ce()}/v2/collect/consent`,{method:"POST",headers:{"content-type":"application/json"},body:o,keepalive:!0}).then(u=>{if(!u.ok)throw new Error(`Consent HTTP ${u.status}`)}).catch(()=>{})}catch{}}function me(){l={id:crypto.randomUUID(),url:de(location.href),path:location.pathname,pageType:Me(),enteredAt:new Date().toISOString(),visibleAt:document.visibilityState==="visible"?Date.now():0,activeMsec:0,reportedMsec:0,maxScrollPercent:le()},J=!1,y("page_view")}function xe(){!p||!l?.visibleAt||(l.activeMsec+=Date.now()-l.visibleAt,l.visibleAt=0)}function Z(e){if(!p||!l)return;xe();let t=l.activeMsec-l.reportedMsec;t<1e3||(l.reportedMsec=l.activeMsec,y("page_engagement",{pageViewId:l.id,maxScrollPercent:l.maxScrollPercent,enteredAt:l.enteredAt,exitReason:e},{pageType:l.pageType,pageViewId:l.id,engagedTimeMsec:t,url:l.url,path:l.path}))}function Ne(){p&&l&&!l.visibleAt&&(l.visibleAt=Date.now())}function fe(){!p||location.href===F||(Z("navigation"),F=location.href,me())}function Ve(){let e=S,t=o=>{let u=history[o];history[o]=function(...b){let A=u.apply(this,b);return queueMicrotask(()=>{p&&S===e&&fe()}),A};let g=history[o];B.push(()=>{history[o]===g&&(history[o]=u)})};t("pushState"),t("replaceState"),E(window,"popstate",fe)}function $e(e){let t=Oe(e),o=Array.from(document.querySelectorAll("video")).indexOf(e);return{videoId:e.dataset.robotVideoId||e.id||t||`video:${location.pathname}:${o}`,videoTitle:e.dataset.robotVideoTitle||e.getAttribute("title")||void 0,productId:e.dataset.robotProductId||void 0,videoSrc:t}}function ee(e,t,o){return{...$e(e),watchedSeconds:Math.round(t.watchedSeconds*10)/10,durationSeconds:Math.round(e.duration*10)/10,...o!==void 0?{progressPercent:o}:{}}}function ge(e,t){let o=Date.now(),u=e.currentTime-t.lastMediaTime,g=(o-t.lastWallTime)/1e3;u>0&&g>0&&u<=Math.max(3,g+1)&&(t.watchedSeconds+=Math.min(u,g+.5)),t.lastMediaTime=e.currentTime,t.lastWallTime=o}function ye(e,t){if(!e.duration)return;let o=Math.min(100,Math.floor(e.currentTime/e.duration*100));for(let u of[25,50,75,100])o>=u&&!t.milestones.has(u)&&(t.milestones.add(u),y("video_progress",ee(e,t,u)))}function Re(){E(window,"scroll",()=>{l&&(l.maxScrollPercent=Math.max(l.maxScrollPercent,le()),!J&&l.maxScrollPercent>=90&&(J=!0,y("scroll",{percent:90})))},{passive:!0}),E(document,"focusin",e=>{let t=e.target?.closest("form");t&&!z.has(t)&&(z.add(t),y("form_start",{formId:t.id||void 0,formName:t.getAttribute("name")||void 0}))}),E(document,"submit",e=>{let t=e.target;t instanceof HTMLFormElement&&y("form_submitted",{formId:t.id||void 0,formName:t.getAttribute("name")||void 0})}),E(document,"click",e=>{let t=e.target?.closest("a[href]");if(!t)return;let o=t.href,u=t.origin!==location.origin;t.hasAttribute("download")||Ze.test(o)?y("file_download",{fileName:t.pathname.split("/").pop(),linkDomain:t.hostname||void 0}):(u||/^mailto:|^tel:/i.test(t.getAttribute("href")??""))&&y("click",{linkDomain:t.hostname||void 0,linkType:o.startsWith("mailto:")?"email":o.startsWith("tel:")?"phone":"outbound"})}),E(document,"play",e=>{let t=e.target;if(!(t instanceof HTMLVideoElement))return;let o=x.get(t);o||(o={milestones:new Set,watchedSeconds:0,lastMediaTime:t.currentTime,lastWallTime:Date.now(),started:!1},x.set(t,o)),o.started||(o.started=!0,y("video_start",ee(t,o))),o.lastMediaTime=t.currentTime,o.lastWallTime=Date.now()},!0),E(document,"timeupdate",e=>{let t=e.target;if(!(t instanceof HTMLVideoElement))return;let o=x.get(t);o&&(ge(t,o),ye(t,o))},!0),E(document,"ended",e=>{let t=e.target;if(!(t instanceof HTMLVideoElement))return;let o=x.get(t);o&&(ge(t,o),ye(t,o),y("video_complete",ee(t,o,100)))},!0),E(document,"visibilitychange",()=>{document.visibilityState==="hidden"?Z("hidden"):Ne()})}function Oe(e){try{return e.currentSrc?new URL(e.currentSrc).origin+new URL(e.currentSrc).pathname:void 0}catch{return}}function te(){if(!(p||k.state==="disabled"||_.analytics!=="granted"))try{let e=!c(r.anonymous),t=X();qe(),Q(),Y(),p=!0,S++,F=location.href,z=new WeakSet,x=new WeakMap,me(),e&&y("first_visit"),(!t||Date.now()-t.lastActivityAt>=Ae)&&y("session_start"),Re(),Ve(),E(window,"pagehide",()=>{Z("pagehide"),K(!0)}),O=window.setInterval(()=>{K()},3e3),w({state:"ready",error:void 0}),window.dispatchEvent(new Event("robot:ready"))}catch(e){U(!1),w({state:"error",error:e instanceof Error?e.message:"Initialization failed"})}}function U(e){p=!1,S++,L?.abort(),L=void 0,D=!1,O!==void 0&&window.clearInterval(O),O=void 0;for(let t of B.splice(0).reverse())t();l=void 0,M=0,P=0,e&&(f=[],T(r.queue),T(r.anonymous),T(r.session),w({queueLength:0,pageViewId:null,lastDeliveredAt:void 0}))}function he(e){if(k.state==="disabled")return;let t=JSON.stringify(_)!==JSON.stringify(e),o=p?c(r.anonymous):null;_={...e},a&&d(r.consent,JSON.stringify({...e,analytics:e.analytics==="granted"})),e.analytics!=="granted"?(U(e.analytics==="denied"||!!o),w({state:"waiting_consent",error:void 0}),t&&o&&pe(e,o)):(te(),t&&p&&pe(e,Q()))}return{track:Pe,setConsent:he,start:te,resetIdentity:()=>{k.state!=="disabled"&&(U(!0),w({queueLength:0,pageViewId:null,lastDeliveredAt:void 0,error:void 0}),_.analytics==="granted"&&te())},restoreLegacyConsent:()=>{a&&_.analytics==="unknown"&&$(r.consent)?.analytics===!0&&he({...$(r.consent),analytics:"granted"})},getStatus:()=>k,subscribe:e=>(R.add(e),()=>{R.delete(e)}),getAnonymousId:()=>p?c(r.anonymous):null,getSessionId:()=>p?Y():null,destroy:()=>{U(!1),_={analytics:"unknown"},w({state:"disabled"}),R.clear()}}}function _e({cookieName:n,changeEvent:a="sendermaster:consent-change",grantedValue:s="granted",deniedValue:r="denied",maxAgeDays:i=365}){if(!/^[\w.-]+$/.test(n))throw new Error("Invalid consent cookie name");return{getSnapshot(){if(typeof document>"u")return"unknown";try{let c=document.cookie.split(";").find(T=>T.trim().startsWith(`${n}=`)),d=c?decodeURIComponent(c.trim().slice(n.length+1)):"";return d===s?"granted":d===r?"denied":"unknown"}catch{return"unknown"}},subscribe(c){if(typeof window>"u")return()=>{};let d=()=>c();return window.addEventListener(a,d),window.addEventListener("focus",d),document.addEventListener("visibilitychange",d),()=>{window.removeEventListener(a,d),window.removeEventListener("focus",d),document.removeEventListener("visibilitychange",d)}},setConsent(c){if(typeof document>"u")return;let d=c==="granted"?s:r;document.cookie=`${n}=${c==="unknown"?"":encodeURIComponent(d)}; Path=/; Max-Age=${c==="unknown"?0:Math.max(0,Math.floor(i*86400))}; SameSite=Lax${location.protocol==="https:"?"; Secure":""}`,window.dispatchEvent(new Event(a))}}}var et=Symbol.for("sendermaster.browser.v1");function I(){if(typeof window>"u")return;let n=window;return n[et]||={subscribers:new Set}}function ke(n,a){let s=I();if(!s)return W;let r={...n,siteKey:n.siteKey?.trim()||"",apiHost:(n.apiHost||"https://api.sendermaster.com").replace(/\/$/,""),enabled:n.enabled!==!1},i=JSON.stringify(r);if(s.client&&s.fingerprint===i)return s.client.getStatus();s.client?.destroy(),s.fingerprint=i,s.client=Te(r,a),s.client.subscribe(()=>{for(let c of s.subscribers)try{c()}catch{}});for(let c of s.subscribers)try{c()}catch{}return s.client.getStatus()}var C={init:n=>ke(n,!1),setConsent:n=>I()?.client?.setConsent(n),track(n,a){return I()?.client?.track(n,a)??{queued:!1,reason:"disabled"}},async trackAfterSuccess(n,a){let s=I()?.client,r=s?.getAnonymousId(),i=!!r&&s?.getStatus().consent==="granted",c=await n();if(i&&I()?.client===s&&s?.getAnonymousId()===r&&s.getStatus().consent==="granted")try{let d=a(c);for(let T of Array.isArray(d)?d:[d])C.track(T.name,T.properties)}catch{}return c},trackSearch(n,a={}){let s=n.trim();return!s||s.length>500||a.filterPersonalData!==!1&&/@|(?:\d[\s()+-]*){7,}/.test(s)?{queued:!1,reason:"invalid_event",message:"Search is empty, too long or contains personal data"}:C.track("search",{query:s,...a.custom?{custom:a.custom}:{}})},resetIdentity:()=>I()?.client?.resetIdentity(),getStatus:()=>I()?.client?.getStatus()??W,subscribe(n){let a=I();return a?(a.subscribers.add(n),()=>{a.subscribers.delete(n)}):()=>{}},getAnonymousId:()=>I()?.client?.getAnonymousId()??null,getSessionId:()=>I()?.client?.getSessionId()??null,destroy(){let n=I();if(n){n.client?.destroy(),n.client=void 0,n.fingerprint=void 0;for(let a of n.subscribers)try{a()}catch{}}}};function tt(n){ke(n,!0);let a={start:()=>I()?.client?.start(),track:C.track,setConsent:s=>C.setConsent({...s,analytics:s.analytics?"granted":"denied"}),getAnonymousId:C.getAnonymousId,getSessionId:C.getSessionId};return window.robot=a,I()?.client?.restoreLegacyConsent(),a}function nt(n){if(typeof n!="string"&&typeof n!="number")return;let a=String(n).trim();return a&&a!=="0"&&a.length<=256?a:void 0}function rt(n){if(n==null||n===""||typeof n=="boolean")return;let a=Number(n);return Number.isFinite(a)&&a>=0?a:void 0}
package/dist/browser.js CHANGED
@@ -1 +1 @@
1
- var Re={product_view:[{name:"catalogProductId",type:"string",required:!1,constraint:"1\u2013100; current-site catalog ID"},{name:"catalogVariantId",type:"string",required:!1,constraint:"1\u2013100; requires catalogProductId"},{name:"productId",type:"string",required:!1,constraint:"1\u2013256; required unless catalogProductId is provided"},{name:"variantId",type:"string",required:!1,constraint:"1\u2013256"},{name:"amount",type:"number",required:!1,constraint:"\u2265 0; requires currency"},{name:"currency",type:"string",required:!1,constraint:"3 uppercase letters; requires amount"},{name:"custom",type:"object",required:!1,constraint:"\u2264 50 fields / 3 levels / 16 KB"}],add_to_cart:[{name:"catalogProductId",type:"string",required:!1,constraint:"1\u2013100; current-site catalog ID"},{name:"catalogVariantId",type:"string",required:!1,constraint:"1\u2013100; requires catalogProductId"},{name:"productId",type:"string",required:!1,constraint:"1\u2013256; required unless catalogProductId is provided"},{name:"quantity",type:"integer",required:!0,constraint:"\u2265 1"},{name:"variantId",type:"string",required:!1,constraint:"1\u2013256"},{name:"amount",type:"number",required:!1,constraint:"\u2265 0; requires currency"},{name:"currency",type:"string",required:!1,constraint:"3 uppercase letters; requires amount"},{name:"custom",type:"object",required:!1,constraint:"\u2264 50 fields / 3 levels / 16 KB"}],begin_checkout:[{name:"checkoutId",type:"string",required:!0,constraint:"1\u2013256"},{name:"items",type:"array",required:!0,constraint:"1\u2013100 items"},{name:"amount",type:"number",required:!0,constraint:"\u2265 0"},{name:"currency",type:"string",required:!0,constraint:"3 uppercase letters"},{name:"custom",type:"object",required:!1,constraint:"\u2264 50 fields / 3 levels / 16 KB"}],search:[{name:"query",type:"string",required:!0,constraint:"1\u2013500"},{name:"resultsCount",type:"integer",required:!1,constraint:"\u2265 0"},{name:"custom",type:"object",required:!1,constraint:"\u2264 50 fields / 3 levels / 16 KB"}],wishlist_added:[{name:"catalogProductId",type:"string",required:!1,constraint:"1\u2013100; current-site catalog ID"},{name:"catalogVariantId",type:"string",required:!1,constraint:"1\u2013100; requires catalogProductId"},{name:"productId",type:"string",required:!1,constraint:"1\u2013256; required unless catalogProductId is provided"},{name:"listName",type:"string",required:!1,constraint:"1\u2013256"},{name:"custom",type:"object",required:!1,constraint:"\u2264 50 fields / 3 levels / 16 KB"}]},Oe=[{name:"catalogProductId",type:"string",required:!1,constraint:"1\u2013100; current-site catalog ID"},{name:"catalogVariantId",type:"string",required:!1,constraint:"1\u2013100; requires catalogProductId"},{name:"productId",type:"string",required:!1,constraint:"1\u2013256; required unless catalogProductId is provided"},{name:"quantity",type:"integer",required:!0,constraint:"\u2265 1"},{name:"variantId",type:"string",required:!1,constraint:"1\u2013256"},{name:"amount",type:"number",required:!1,constraint:"\u2265 0"}],q=256,De=500,he=100,Ie=50,be=3,ve=16*1024,Le=/(password|passcode|secret|token|api.?key|card.?number|cvv|cvc|security.?code|ssn|passport)/i,je=Object.fromEntries(Object.entries(Re).map(([n,o])=>[n,o.map(s=>s.name)]));function Ke(n,o){let s=[];if(!U(o))return[{path:"properties",message:"must be an object"}];let r=o;for(let i of Object.keys(r))je[n].includes(i)||s.push({path:`properties.${i}`,message:"is not a supported standard field; place extension data under custom"});return n==="wishlist_added"?(b(r,"productId",s,!r.catalogProductId,q),b(r,"listName",s,!1,q)):n==="product_view"||n==="add_to_cart"?(b(r,"productId",s,!r.catalogProductId,q),b(r,"variantId",s,!1,q),se(r,"amount",s,!1,!1),Se(r,s,!1),r.amount===void 0!=(r.currency===void 0)&&s.push({path:"properties.amount",message:"amount and currency must be provided together"}),n==="add_to_cart"&&oe(r,"quantity",s,!0,1)):n==="begin_checkout"?(b(r,"checkoutId",s,!0,q),se(r,"amount",s,!0,!1),Se(r,s,!0),!Array.isArray(r.items)||r.items.length<1||r.items.length>he?s.push({path:"properties.items",message:`must contain 1-${he} items`}):r.items.forEach((i,c)=>Ue(i,c,s))):(b(r,"query",s,!0,De),oe(r,"resultsCount",s,!1,0)),["product_view","add_to_cart","wishlist_added"].includes(n)&&(b(r,"catalogProductId",s,!1,100),b(r,"catalogVariantId",s,!1,100),r.catalogVariantId&&!r.catalogProductId&&s.push({path:"properties.catalogVariantId",message:"requires catalogProductId"})),r.custom!==void 0&&He(r.custom,s),s}function we(n,o){let s=Ke(n,o);if(s.length)throw new ne(n,s);let r=o,i={};for(let c of["variantId","quantity","checkoutId","items","query","resultsCount","listName","custom"])r[c]!==void 0&&(i[c]=r[c]);return{...typeof r.productId=="string"?{productId:r.productId}:{},...typeof r.catalogProductId=="string"?{catalogProductId:r.catalogProductId}:{},...typeof r.catalogVariantId=="string"?{catalogVariantId:r.catalogVariantId}:{},...typeof r.amount=="number"?{amount:r.amount}:{},...typeof r.currency=="string"?{currency:r.currency}:{},properties:i}}var ne=class extends Error{constructor(s,r){super(`Invalid ${s} event: ${r.map(i=>`${i.path} ${i.message}`).join("; ")}`);this.eventName=s;this.issues=r;this.name="StandardEventValidationError"}eventName;issues};function Ue(n,o,s){let r=`properties.items[${o}]`;if(!U(n)){s.push({path:r,message:"must be an object"});return}let i=n,c=Oe.map(d=>d.name);for(let d of Object.keys(i))c.includes(d)||s.push({path:`${r}.${d}`,message:"is not supported"});b(i,"productId",s,!i.catalogProductId,q,r),b(i,"catalogProductId",s,!1,100,r),b(i,"catalogVariantId",s,!1,100,r),i.catalogVariantId&&!i.catalogProductId&&s.push({path:`${r}.catalogVariantId`,message:"requires catalogProductId"}),b(i,"variantId",s,!1,q,r),oe(i,"quantity",s,!0,1,r),se(i,"amount",s,!1,!1,r)}function He(n,o){if(!U(n)){o.push({path:"properties.custom",message:"must be an object"});return}let s=n;Object.keys(s).length>Ie&&o.push({path:"properties.custom",message:`must contain at most ${Ie} top-level fields`}),re(s,"properties.custom",1,o,new WeakSet);try{new TextEncoder().encode(JSON.stringify(s)).length>ve&&o.push({path:"properties.custom",message:`must be at most ${ve} bytes`})}catch{o.push({path:"properties.custom",message:"must be valid JSON data"})}}function re(n,o,s,r,i){if(s>be){r.push({path:o,message:`must not exceed ${be} levels`});return}if(!(n===null||typeof n=="string"||typeof n=="boolean"||typeof n=="number"&&Number.isFinite(n))){if(typeof n=="object"&&n){if(i.has(n)){r.push({path:o,message:"must not contain circular references"});return}i.add(n)}if(Array.isArray(n)){n.forEach((c,d)=>re(c,`${o}[${d}]`,s+1,r,i));return}if(U(n)){Object.entries(n).forEach(([c,d])=>{(c.startsWith("_")||c.toLowerCase().startsWith("sm_"))&&r.push({path:`${o}.${c}`,message:"uses a reserved prefix"}),Le.test(c)&&r.push({path:`${o}.${c}`,message:"must not contain secrets or sensitive payment/identity data"}),re(d,`${o}.${c}`,s+1,r,i)});return}r.push({path:o,message:"must contain JSON-compatible values only"})}}function U(n){if(!n||typeof n!="object"||Array.isArray(n))return!1;let o=Object.getPrototypeOf(n);return o===Object.prototype||o===null}function b(n,o,s,r,i,c="properties"){let d=n[o];if(d===void 0){r&&s.push({path:`${c}.${o}`,message:"is required"});return}(typeof d!="string"||d.length<1||d.length>i)&&s.push({path:`${c}.${o}`,message:`must be a string with 1-${i} characters`})}function se(n,o,s,r,i,c="properties"){let d=n[o];if(d===void 0){r&&s.push({path:`${c}.${o}`,message:"is required"});return}(typeof d!="number"||!Number.isFinite(d)||(i?d<=0:d<0))&&s.push({path:`${c}.${o}`,message:i?"must be a positive finite number":"must be a non-negative finite number"})}function oe(n,o,s,r,i,c="properties"){let d=n[o];if(d===void 0){r&&s.push({path:`${c}.${o}`,message:"is required"});return}(typeof d!="number"||!Number.isInteger(d)||d<i)&&s.push({path:`${c}.${o}`,message:`must be an integer greater than or equal to ${i}`})}function Se(n,o,s){let r=n.currency;if(r===void 0){s&&o.push({path:"properties.currency",message:"is required"});return}(typeof r!="string"||!/^[A-Z]{3}$/.test(r))&&o.push({path:"properties.currency",message:"must be a 3-letter uppercase currency code"})}var Ee=1800*1e3,We=1440*60*1e3,Je=/\.(?:pdf|csv|docx?|xlsx?|pptx?|zip|rar|7z)(?:$|[?#])/i,H=Object.freeze({state:"disabled",consent:"unknown",queueLength:0,pageViewId:null});function Ae(n,o=!1){let s=o?"robot_store":`sendermaster:${n.siteKey}`,r={anonymous:`${s}_anonymous_id`,session:`${s}_session`,consent:`${s}_consent`,queue:`${s}_event_queue`},i=new Map;function c(e){try{let t=localStorage.getItem(e);return t!==null&&i.set(e,t),t??i.get(e)??null}catch{return i.get(e)??null}}function d(e,t){i.set(e,t);try{localStorage.setItem(e,t)}catch{}}function T(e){i.delete(e);try{localStorage.removeItem(e)}catch{}}function $(e){try{return JSON.parse(c(e)??"null")}catch{return null}}let R=new Set,_={analytics:"unknown"},k={...H,state:n.enabled===!1||!n.siteKey?"disabled":"waiting_consent"},p=!1,S=0,O,D=!1,L,C=0,P=0,l,W=!1,J=location.href,F=new WeakSet,x=new WeakMap,f=[],z=[];function E(e={}){let t={...k,consent:_.analytics,queueLength:f.length,pageViewId:l?.id??null,...e};if(JSON.stringify(t)!==JSON.stringify(k)){k=Object.freeze(t);for(let a of R)try{a()}catch{}}}function w(e,t,a,u){let g=S,I=A=>{if(p&&S===g)try{a(A)}catch{}};e.addEventListener(t,I,u),z.push(()=>e.removeEventListener(t,I,u))}function ae(){return(n.apiHost??"https://api.sendermaster.com").replace(/\/$/,"")}function B(){let e=c(r.anonymous);return e||(e=crypto.randomUUID(),d(r.anonymous,e)),e}function Q(){let e=$(r.session);return e&&typeof e.id=="string"&&typeof e.lastActivityAt=="number"?e:void 0}function X(){let e=Date.now(),t=Q();if(!t||e-t.lastActivityAt>=Ee){let a={id:crypto.randomUUID(),lastActivityAt:e};return d(r.session,JSON.stringify(a)),a.id}return t.lastActivityAt=e,d(r.session,JSON.stringify(t)),t.id}function Y(){let e=Date.now();f=f.filter(t=>t.siteKey===n.siteKey&&e-Date.parse(t.event.occurredAt)<We&&Date.parse(t.event.occurredAt)<=e+6e4).slice(-100)}function j(){Y(),d(r.queue,JSON.stringify(f)),E()}function _e(){let e=$(r.queue);Array.isArray(e)&&(f=e.flatMap(t=>{if(t?.event?.eventId&&typeof t.anonymousId=="string"&&typeof t.sessionId=="string")return[t];let a=c(r.anonymous),u=Q();return o&&t?.eventId&&a&&u?[{siteKey:n.siteKey,anonymousId:a,sessionId:u.id,event:t}]:[]}),Y())}function ie(e){let t=new URL(e);return["email","token","password","access_token"].forEach(a=>t.searchParams.delete(a)),t.toString()}function ce(e){try{return new URL(e).origin}catch{return}}function ke(){return{title:document.title.slice(0,512),language:navigator.language,screen:{width:screen.width,height:screen.height},utm:Object.fromEntries(["utm_source","utm_medium","utm_campaign"].flatMap(e=>{let t=new URL(location.href).searchParams.get(e);return t?[[e,t]]:[]}))}}function qe(e=location.pathname){return n.pageRules?.find(t=>e.startsWith(t.pathPrefix))?.pageType}function de(){let e=document.documentElement.scrollHeight-innerHeight;return e>0?Math.min(100,Math.max(0,Math.round(scrollY/e*100))):0}function y(e,t={},a={}){if(!p)return;let{productId:u,catalogProductId:g,catalogVariantId:I,amount:A,currency:m,pageType:N,...V}=t,h={eventId:crypto.randomUUID(),name:e,occurredAt:new Date().toISOString(),url:a.url??ie(location.href),path:a.path??location.pathname,...ce(document.referrer)?{referrer:ce(document.referrer)}:{},...typeof u=="string"?{productId:u}:{},...typeof g=="string"?{catalogProductId:g}:{},...typeof I=="string"?{catalogVariantId:I}:{},...typeof A=="number"?{amount:A}:{},...typeof m=="string"?{currency:m}:{},pageType:a.pageType??(typeof N=="string"?N:l?.pageType),pageViewId:a.pageViewId??l?.id,...a.engagedTimeMsec?{engagedTimeMsec:a.engagedTimeMsec}:{},...Object.keys(V).length?{properties:V}:{},context:ke()};return f.push({siteKey:n.siteKey,anonymousId:B(),sessionId:X(),event:JSON.parse(JSON.stringify(h))}),j(),f.length>=20&&K(),h.eventId}function Ce(e,t){if(k.state==="disabled")return{queued:!1,reason:"disabled"};if(_.analytics!=="granted")return{queued:!1,reason:"consent_required"};if(!p)return{queued:!1,reason:"unavailable"};try{let a=we(e,t),u=y(e,{...a.properties,productId:a.productId,catalogProductId:a.catalogProductId,catalogVariantId:a.catalogVariantId,amount:a.amount,currency:a.currency});return u?{queued:!0,eventId:u}:{queued:!1,reason:"unavailable"}}catch(a){return{queued:!1,reason:"invalid_event",message:a instanceof Error?a.message:"Invalid event"}}}async function K(e=!1){if(!p||D||(Y(),E(),!f.length||!e&&Date.now()<C))return;let t=f[0],a=f.filter(m=>m.siteKey===t.siteKey&&m.anonymousId===t.anonymousId&&m.sessionId===t.sessionId).slice(0,20),u=JSON.stringify({siteKey:t.siteKey,anonymousId:t.anonymousId,sessionId:t.sessionId,events:a.map(m=>m.event)}),g=`${ae()}/v2/collect/events`;if(e)try{if(navigator.sendBeacon?.(g,new Blob([u],{type:"application/json"}))){j();return}}catch{}D=!0;let I=S,A=new AbortController;L=A;try{let m=await fetch(g,{method:"POST",headers:{"content-type":"application/json"},body:u,keepalive:!0,signal:A.signal});if(I!==S||!p)return;if(!m.ok){if(m.status===429||m.status>=500)throw new Error(`Collect HTTP ${m.status}`);let h=new Set(a.map(te=>te.event.eventId));f=f.filter(te=>!h.has(te.event.eventId)),j(),E({state:"error",error:`Collect HTTP ${m.status}: batch discarded`}),C=0,P=0;return}let N=await m.json();if(!Array.isArray(N.results))throw new Error("Collect response missing results");let V=new Set(N.results.filter(h=>h.status==="accepted"||h.status==="duplicate").map(h=>h.eventId));if(!a.every(h=>V.has(h.event.eventId)))throw new Error("Collect response incomplete");if(I!==S||!p)return;f=f.filter(h=>!V.has(h.event.eventId)),P=0,C=0,j(),E({state:"ready",error:void 0,lastDeliveredAt:new Date().toISOString()})}catch(m){if(I!==S||!p)return;P++,C=Date.now()+Math.min(6e4,3e3*2**Math.min(P-1,5)),E({error:m instanceof Error?m.message:"Collect unavailable"})}finally{I===S&&(D=!1,L=void 0)}p&&f.length&&!C&&K()}function ue(e,t){let a=JSON.stringify({siteKey:n.siteKey,anonymousId:t,analyticsAllowed:e.analytics==="granted",marketingAllowed:e.marketing??!1,source:e.source??"sdk",policyVersion:e.policyVersion});try{fetch(`${ae()}/v2/collect/consent`,{method:"POST",headers:{"content-type":"application/json"},body:a,keepalive:!0}).then(u=>{if(!u.ok)throw new Error(`Consent HTTP ${u.status}`)}).catch(()=>{})}catch{}}function le(){l={id:crypto.randomUUID(),url:ie(location.href),path:location.pathname,pageType:qe(),enteredAt:new Date().toISOString(),visibleAt:document.visibilityState==="visible"?Date.now():0,activeMsec:0,reportedMsec:0,maxScrollPercent:de()},W=!1,y("page_view")}function Me(){!p||!l?.visibleAt||(l.activeMsec+=Date.now()-l.visibleAt,l.visibleAt=0)}function G(e){if(!p||!l)return;Me();let t=l.activeMsec-l.reportedMsec;t<1e3||(l.reportedMsec=l.activeMsec,y("page_engagement",{pageViewId:l.id,maxScrollPercent:l.maxScrollPercent,enteredAt:l.enteredAt,exitReason:e},{pageType:l.pageType,pageViewId:l.id,engagedTimeMsec:t,url:l.url,path:l.path}))}function Pe(){p&&l&&!l.visibleAt&&(l.visibleAt=Date.now())}function pe(){!p||location.href===J||(G("navigation"),J=location.href,le())}function xe(){let e=S,t=a=>{let u=history[a];history[a]=function(...I){let A=u.apply(this,I);return queueMicrotask(()=>{p&&S===e&&pe()}),A};let g=history[a];z.push(()=>{history[a]===g&&(history[a]=u)})};t("pushState"),t("replaceState"),w(window,"popstate",pe)}function Ne(e){let t=$e(e),a=Array.from(document.querySelectorAll("video")).indexOf(e);return{videoId:e.dataset.robotVideoId||e.id||t||`video:${location.pathname}:${a}`,videoTitle:e.dataset.robotVideoTitle||e.getAttribute("title")||void 0,productId:e.dataset.robotProductId||void 0,videoSrc:t}}function Z(e,t,a){return{...Ne(e),watchedSeconds:Math.round(t.watchedSeconds*10)/10,durationSeconds:Math.round(e.duration*10)/10,...a!==void 0?{progressPercent:a}:{}}}function me(e,t){let a=Date.now(),u=e.currentTime-t.lastMediaTime,g=(a-t.lastWallTime)/1e3;u>0&&g>0&&u<=Math.max(3,g+1)&&(t.watchedSeconds+=Math.min(u,g+.5)),t.lastMediaTime=e.currentTime,t.lastWallTime=a}function fe(e,t){if(!e.duration)return;let a=Math.min(100,Math.floor(e.currentTime/e.duration*100));for(let u of[25,50,75,100])a>=u&&!t.milestones.has(u)&&(t.milestones.add(u),y("video_progress",Z(e,t,u)))}function Ve(){w(window,"scroll",()=>{l&&(l.maxScrollPercent=Math.max(l.maxScrollPercent,de()),!W&&l.maxScrollPercent>=90&&(W=!0,y("scroll",{percent:90})))},{passive:!0}),w(document,"focusin",e=>{let t=e.target?.closest("form");t&&!F.has(t)&&(F.add(t),y("form_start",{formId:t.id||void 0,formName:t.getAttribute("name")||void 0}))}),w(document,"submit",e=>{let t=e.target;t instanceof HTMLFormElement&&y("form_submitted",{formId:t.id||void 0,formName:t.getAttribute("name")||void 0})}),w(document,"click",e=>{let t=e.target?.closest("a[href]");if(!t)return;let a=t.href,u=t.origin!==location.origin;t.hasAttribute("download")||Je.test(a)?y("file_download",{fileName:t.pathname.split("/").pop(),linkDomain:t.hostname||void 0}):(u||/^mailto:|^tel:/i.test(t.getAttribute("href")??""))&&y("click",{linkDomain:t.hostname||void 0,linkType:a.startsWith("mailto:")?"email":a.startsWith("tel:")?"phone":"outbound"})}),w(document,"play",e=>{let t=e.target;if(!(t instanceof HTMLVideoElement))return;let a=x.get(t);a||(a={milestones:new Set,watchedSeconds:0,lastMediaTime:t.currentTime,lastWallTime:Date.now(),started:!1},x.set(t,a)),a.started||(a.started=!0,y("video_start",Z(t,a))),a.lastMediaTime=t.currentTime,a.lastWallTime=Date.now()},!0),w(document,"timeupdate",e=>{let t=e.target;if(!(t instanceof HTMLVideoElement))return;let a=x.get(t);a&&(me(t,a),fe(t,a))},!0),w(document,"ended",e=>{let t=e.target;if(!(t instanceof HTMLVideoElement))return;let a=x.get(t);a&&(me(t,a),fe(t,a),y("video_complete",Z(t,a,100)))},!0),w(document,"visibilitychange",()=>{document.visibilityState==="hidden"?G("hidden"):Pe()})}function $e(e){try{return e.currentSrc?new URL(e.currentSrc).origin+new URL(e.currentSrc).pathname:void 0}catch{return}}function ge(){if(!(p||k.state==="disabled"||_.analytics!=="granted"))try{let e=!c(r.anonymous),t=Q();_e(),B(),X(),p=!0,S++,J=location.href,F=new WeakSet,x=new WeakMap,le(),e&&y("first_visit"),(!t||Date.now()-t.lastActivityAt>=Ee)&&y("session_start"),Ve(),xe(),w(window,"pagehide",()=>{G("pagehide"),K(!0)}),O=window.setInterval(()=>{K()},3e3),E({state:"ready",error:void 0}),window.dispatchEvent(new Event("robot:ready"))}catch(e){ee(!1),E({state:"error",error:e instanceof Error?e.message:"Initialization failed"})}}function ee(e){p=!1,S++,L?.abort(),L=void 0,D=!1,O!==void 0&&window.clearInterval(O),O=void 0;for(let t of z.splice(0).reverse())t();l=void 0,C=0,P=0,e&&(f=[],T(r.queue),T(r.anonymous),T(r.session))}function ye(e){if(k.state==="disabled")return;let t=JSON.stringify(_)!==JSON.stringify(e),a=p?c(r.anonymous):null;_={...e},o&&d(r.consent,JSON.stringify({...e,analytics:e.analytics==="granted"})),e.analytics!=="granted"?(ee(e.analytics==="denied"||!!a),E({state:"waiting_consent",error:void 0}),t&&a&&ue(e,a)):(ge(),t&&p&&ue(e,B()))}return{track:Ce,setConsent:ye,start:ge,restoreLegacyConsent:()=>{o&&_.analytics==="unknown"&&$(r.consent)?.analytics===!0&&ye({...$(r.consent),analytics:"granted"})},getStatus:()=>k,subscribe:e=>(R.add(e),()=>{R.delete(e)}),getAnonymousId:()=>p?c(r.anonymous):null,getSessionId:()=>p?X():null,destroy:()=>{ee(!1),_={analytics:"unknown"},E({state:"disabled"}),R.clear()}}}function Fe({cookieName:n,changeEvent:o="sendermaster:consent-change",grantedValue:s="granted",deniedValue:r="denied",maxAgeDays:i=365}){if(!/^[\w.-]+$/.test(n))throw new Error("Invalid consent cookie name");return{getSnapshot(){if(typeof document>"u")return"unknown";try{let c=document.cookie.split(";").find(T=>T.trim().startsWith(`${n}=`)),d=c?decodeURIComponent(c.trim().slice(n.length+1)):"";return d===s?"granted":d===r?"denied":"unknown"}catch{return"unknown"}},subscribe(c){if(typeof window>"u")return()=>{};let d=()=>c();return window.addEventListener(o,d),window.addEventListener("focus",d),document.addEventListener("visibilitychange",d),()=>{window.removeEventListener(o,d),window.removeEventListener("focus",d),document.removeEventListener("visibilitychange",d)}},setConsent(c){if(typeof document>"u")return;let d=c==="granted"?s:r;document.cookie=`${n}=${c==="unknown"?"":encodeURIComponent(d)}; Path=/; Max-Age=${c==="unknown"?0:Math.max(0,Math.floor(i*86400))}; SameSite=Lax${location.protocol==="https:"?"; Secure":""}`,window.dispatchEvent(new Event(o))}}}var ze=Symbol.for("sendermaster.browser.v1");function v(){if(typeof window>"u")return;let n=window;return n[ze]||={subscribers:new Set}}function Te(n,o){let s=v();if(!s)return H;let r={...n,siteKey:n.siteKey?.trim()||"",apiHost:(n.apiHost||"https://api.sendermaster.com").replace(/\/$/,""),enabled:n.enabled!==!1},i=JSON.stringify(r);if(s.client&&s.fingerprint===i)return s.client.getStatus();s.client?.destroy(),s.fingerprint=i,s.client=Ae(r,o),s.client.subscribe(()=>{for(let c of s.subscribers)try{c()}catch{}});for(let c of s.subscribers)try{c()}catch{}return s.client.getStatus()}var M={init:n=>Te(n,!1),setConsent:n=>v()?.client?.setConsent(n),track(n,o){return v()?.client?.track(n,o)??{queued:!1,reason:"disabled"}},async trackAfterSuccess(n,o){let s=v()?.client,r=s?.getAnonymousId(),i=!!r&&s?.getStatus().consent==="granted",c=await n();if(i&&v()?.client===s&&s?.getAnonymousId()===r&&s.getStatus().consent==="granted")try{let d=o(c);for(let T of Array.isArray(d)?d:[d])M.track(T.name,T.properties)}catch{}return c},trackSearch(n,o={}){let s=n.trim();return!s||s.length>500||o.filterPersonalData!==!1&&/@|(?:\d[\s()+-]*){7,}/.test(s)?{queued:!1,reason:"invalid_event",message:"Search is empty, too long or contains personal data"}:M.track("search",{query:s,...o.custom?{custom:o.custom}:{}})},getStatus:()=>v()?.client?.getStatus()??H,subscribe(n){let o=v();return o?(o.subscribers.add(n),()=>{o.subscribers.delete(n)}):()=>{}},getAnonymousId:()=>v()?.client?.getAnonymousId()??null,getSessionId:()=>v()?.client?.getSessionId()??null,destroy(){let n=v();if(n){n.client?.destroy(),n.client=void 0,n.fingerprint=void 0;for(let o of n.subscribers)try{o()}catch{}}}};function et(n){Te(n,!0);let o={start:()=>v()?.client?.start(),track:M.track,setConsent:s=>M.setConsent({...s,analytics:s.analytics?"granted":"denied"}),getAnonymousId:M.getAnonymousId,getSessionId:M.getSessionId};return window.robot=o,v()?.client?.restoreLegacyConsent(),o}function tt(n){if(typeof n!="string"&&typeof n!="number")return;let o=String(n).trim();return o&&o!=="0"&&o.length<=256?o:void 0}function nt(n){if(n==null||n===""||typeof n=="boolean")return;let o=Number(n);return Number.isFinite(o)&&o>=0?o:void 0}export{Fe as createCookieConsentAdapter,et as installLegacyPixel,M as senderMaster,nt as toAmount,tt as toId};
1
+ var Re={product_view:[{name:"catalogProductId",type:"string",required:!1,constraint:"1\u2013100; current-site catalog ID"},{name:"catalogVariantId",type:"string",required:!1,constraint:"1\u2013100; requires catalogProductId"},{name:"productId",type:"string",required:!1,constraint:"1\u2013256; required unless catalogProductId is provided"},{name:"variantId",type:"string",required:!1,constraint:"1\u2013256"},{name:"amount",type:"number",required:!1,constraint:"\u2265 0; requires currency"},{name:"currency",type:"string",required:!1,constraint:"3 uppercase letters; requires amount"},{name:"custom",type:"object",required:!1,constraint:"\u2264 50 fields / 3 levels / 16 KB"}],add_to_cart:[{name:"catalogProductId",type:"string",required:!1,constraint:"1\u2013100; current-site catalog ID"},{name:"catalogVariantId",type:"string",required:!1,constraint:"1\u2013100; requires catalogProductId"},{name:"productId",type:"string",required:!1,constraint:"1\u2013256; required unless catalogProductId is provided"},{name:"quantity",type:"integer",required:!0,constraint:"\u2265 1"},{name:"variantId",type:"string",required:!1,constraint:"1\u2013256"},{name:"amount",type:"number",required:!1,constraint:"\u2265 0; requires currency"},{name:"currency",type:"string",required:!1,constraint:"3 uppercase letters; requires amount"},{name:"custom",type:"object",required:!1,constraint:"\u2264 50 fields / 3 levels / 16 KB"}],begin_checkout:[{name:"checkoutId",type:"string",required:!0,constraint:"1\u2013256"},{name:"items",type:"array",required:!0,constraint:"1\u2013100 items"},{name:"amount",type:"number",required:!0,constraint:"\u2265 0"},{name:"currency",type:"string",required:!0,constraint:"3 uppercase letters"},{name:"custom",type:"object",required:!1,constraint:"\u2264 50 fields / 3 levels / 16 KB"}],search:[{name:"query",type:"string",required:!0,constraint:"1\u2013500"},{name:"resultsCount",type:"integer",required:!1,constraint:"\u2265 0"},{name:"custom",type:"object",required:!1,constraint:"\u2264 50 fields / 3 levels / 16 KB"}],wishlist_added:[{name:"catalogProductId",type:"string",required:!1,constraint:"1\u2013100; current-site catalog ID"},{name:"catalogVariantId",type:"string",required:!1,constraint:"1\u2013100; requires catalogProductId"},{name:"productId",type:"string",required:!1,constraint:"1\u2013256; required unless catalogProductId is provided"},{name:"listName",type:"string",required:!1,constraint:"1\u2013256"},{name:"custom",type:"object",required:!1,constraint:"\u2264 50 fields / 3 levels / 16 KB"}]},Oe=[{name:"catalogProductId",type:"string",required:!1,constraint:"1\u2013100; current-site catalog ID"},{name:"catalogVariantId",type:"string",required:!1,constraint:"1\u2013100; requires catalogProductId"},{name:"productId",type:"string",required:!1,constraint:"1\u2013256; required unless catalogProductId is provided"},{name:"quantity",type:"integer",required:!0,constraint:"\u2265 1"},{name:"variantId",type:"string",required:!1,constraint:"1\u2013256"},{name:"amount",type:"number",required:!1,constraint:"\u2265 0"}],q=256,De=500,he=100,Ie=50,be=3,ve=16*1024,Le=/(password|passcode|secret|token|api.?key|card.?number|cvv|cvc|security.?code|ssn|passport)/i,je=Object.fromEntries(Object.entries(Re).map(([n,a])=>[n,a.map(s=>s.name)]));function Ke(n,a){let s=[];if(!H(a))return[{path:"properties",message:"must be an object"}];let r=a;for(let i of Object.keys(r))je[n].includes(i)||s.push({path:`properties.${i}`,message:"is not a supported standard field; place extension data under custom"});return n==="wishlist_added"?(v(r,"productId",s,!r.catalogProductId,q),v(r,"listName",s,!1,q)):n==="product_view"||n==="add_to_cart"?(v(r,"productId",s,!r.catalogProductId,q),v(r,"variantId",s,!1,q),ae(r,"amount",s,!1,!1),Se(r,s,!1),r.amount===void 0!=(r.currency===void 0)&&s.push({path:"properties.amount",message:"amount and currency must be provided together"}),n==="add_to_cart"&&oe(r,"quantity",s,!0,1)):n==="begin_checkout"?(v(r,"checkoutId",s,!0,q),ae(r,"amount",s,!0,!1),Se(r,s,!0),!Array.isArray(r.items)||r.items.length<1||r.items.length>he?s.push({path:"properties.items",message:`must contain 1-${he} items`}):r.items.forEach((i,c)=>Ue(i,c,s))):(v(r,"query",s,!0,De),oe(r,"resultsCount",s,!1,0)),["product_view","add_to_cart","wishlist_added"].includes(n)&&(v(r,"catalogProductId",s,!1,100),v(r,"catalogVariantId",s,!1,100),r.catalogVariantId&&!r.catalogProductId&&s.push({path:"properties.catalogVariantId",message:"requires catalogProductId"})),r.custom!==void 0&&He(r.custom,s),s}function we(n,a){let s=Ke(n,a);if(s.length)throw new re(n,s);let r=a,i={};for(let c of["variantId","quantity","checkoutId","items","query","resultsCount","listName","custom"])r[c]!==void 0&&(i[c]=r[c]);return{...typeof r.productId=="string"?{productId:r.productId}:{},...typeof r.catalogProductId=="string"?{catalogProductId:r.catalogProductId}:{},...typeof r.catalogVariantId=="string"?{catalogVariantId:r.catalogVariantId}:{},...typeof r.amount=="number"?{amount:r.amount}:{},...typeof r.currency=="string"?{currency:r.currency}:{},properties:i}}var re=class extends Error{constructor(s,r){super(`Invalid ${s} event: ${r.map(i=>`${i.path} ${i.message}`).join("; ")}`);this.eventName=s;this.issues=r;this.name="StandardEventValidationError"}eventName;issues};function Ue(n,a,s){let r=`properties.items[${a}]`;if(!H(n)){s.push({path:r,message:"must be an object"});return}let i=n,c=Oe.map(d=>d.name);for(let d of Object.keys(i))c.includes(d)||s.push({path:`${r}.${d}`,message:"is not supported"});v(i,"productId",s,!i.catalogProductId,q,r),v(i,"catalogProductId",s,!1,100,r),v(i,"catalogVariantId",s,!1,100,r),i.catalogVariantId&&!i.catalogProductId&&s.push({path:`${r}.catalogVariantId`,message:"requires catalogProductId"}),v(i,"variantId",s,!1,q,r),oe(i,"quantity",s,!0,1,r),ae(i,"amount",s,!1,!1,r)}function He(n,a){if(!H(n)){a.push({path:"properties.custom",message:"must be an object"});return}let s=n;Object.keys(s).length>Ie&&a.push({path:"properties.custom",message:`must contain at most ${Ie} top-level fields`}),se(s,"properties.custom",1,a,new WeakSet);try{new TextEncoder().encode(JSON.stringify(s)).length>ve&&a.push({path:"properties.custom",message:`must be at most ${ve} bytes`})}catch{a.push({path:"properties.custom",message:"must be valid JSON data"})}}function se(n,a,s,r,i){if(s>be){r.push({path:a,message:`must not exceed ${be} levels`});return}if(!(n===null||typeof n=="string"||typeof n=="boolean"||typeof n=="number"&&Number.isFinite(n))){if(typeof n=="object"&&n){if(i.has(n)){r.push({path:a,message:"must not contain circular references"});return}i.add(n)}if(Array.isArray(n)){n.forEach((c,d)=>se(c,`${a}[${d}]`,s+1,r,i));return}if(H(n)){Object.entries(n).forEach(([c,d])=>{(c.startsWith("_")||c.toLowerCase().startsWith("sm_"))&&r.push({path:`${a}.${c}`,message:"uses a reserved prefix"}),Le.test(c)&&r.push({path:`${a}.${c}`,message:"must not contain secrets or sensitive payment/identity data"}),se(d,`${a}.${c}`,s+1,r,i)});return}r.push({path:a,message:"must contain JSON-compatible values only"})}}function H(n){if(!n||typeof n!="object"||Array.isArray(n))return!1;let a=Object.getPrototypeOf(n);return a===Object.prototype||a===null}function v(n,a,s,r,i,c="properties"){let d=n[a];if(d===void 0){r&&s.push({path:`${c}.${a}`,message:"is required"});return}(typeof d!="string"||d.length<1||d.length>i)&&s.push({path:`${c}.${a}`,message:`must be a string with 1-${i} characters`})}function ae(n,a,s,r,i,c="properties"){let d=n[a];if(d===void 0){r&&s.push({path:`${c}.${a}`,message:"is required"});return}(typeof d!="number"||!Number.isFinite(d)||(i?d<=0:d<0))&&s.push({path:`${c}.${a}`,message:i?"must be a positive finite number":"must be a non-negative finite number"})}function oe(n,a,s,r,i,c="properties"){let d=n[a];if(d===void 0){r&&s.push({path:`${c}.${a}`,message:"is required"});return}(typeof d!="number"||!Number.isInteger(d)||d<i)&&s.push({path:`${c}.${a}`,message:`must be an integer greater than or equal to ${i}`})}function Se(n,a,s){let r=n.currency;if(r===void 0){s&&a.push({path:"properties.currency",message:"is required"});return}(typeof r!="string"||!/^[A-Z]{3}$/.test(r))&&a.push({path:"properties.currency",message:"must be a 3-letter uppercase currency code"})}var Ee=1800*1e3,We=1440*60*1e3,Je=/\.(?:pdf|csv|docx?|xlsx?|pptx?|zip|rar|7z)(?:$|[?#])/i,W=Object.freeze({state:"disabled",consent:"unknown",queueLength:0,pageViewId:null});function Ae(n,a=!1){let s=a?"robot_store":`sendermaster:${n.siteKey}`,r={anonymous:`${s}_anonymous_id`,session:`${s}_session`,consent:`${s}_consent`,queue:`${s}_event_queue`},i=new Map;function c(e){try{let t=localStorage.getItem(e);return t!==null&&i.set(e,t),t??i.get(e)??null}catch{return i.get(e)??null}}function d(e,t){i.set(e,t);try{localStorage.setItem(e,t)}catch{}}function T(e){i.delete(e);try{localStorage.removeItem(e)}catch{}}function $(e){try{return JSON.parse(c(e)??"null")}catch{return null}}let R=new Set,_={analytics:"unknown"},k={...W,state:n.enabled===!1||!n.siteKey?"disabled":"waiting_consent"},p=!1,S=0,O,D=!1,L,C=0,P=0,l,J=!1,F=location.href,z=new WeakSet,x=new WeakMap,f=[],B=[];function w(e={}){let t={...k,consent:_.analytics,queueLength:f.length,pageViewId:l?.id??null,...e};if(JSON.stringify(t)!==JSON.stringify(k)){k=Object.freeze(t);for(let o of R)try{o()}catch{}}}function E(e,t,o,u){let g=S,b=A=>{if(p&&S===g)try{o(A)}catch{}};e.addEventListener(t,b,u),B.push(()=>e.removeEventListener(t,b,u))}function ie(){return(n.apiHost??"https://api.sendermaster.com").replace(/\/$/,"")}function Q(){let e=c(r.anonymous);return e||(e=crypto.randomUUID(),d(r.anonymous,e)),e}function X(){let e=$(r.session);return e&&typeof e.id=="string"&&typeof e.lastActivityAt=="number"?e:void 0}function Y(){let e=Date.now(),t=X();if(!t||e-t.lastActivityAt>=Ee){let o={id:crypto.randomUUID(),lastActivityAt:e};return d(r.session,JSON.stringify(o)),o.id}return t.lastActivityAt=e,d(r.session,JSON.stringify(t)),t.id}function G(){let e=Date.now();f=f.filter(t=>t.siteKey===n.siteKey&&e-Date.parse(t.event.occurredAt)<We&&Date.parse(t.event.occurredAt)<=e+6e4).slice(-100)}function j(){G(),d(r.queue,JSON.stringify(f)),w()}function _e(){let e=$(r.queue);Array.isArray(e)&&(f=e.flatMap(t=>{if(t?.event?.eventId&&typeof t.anonymousId=="string"&&typeof t.sessionId=="string")return[t];let o=c(r.anonymous),u=X();return a&&t?.eventId&&o&&u?[{siteKey:n.siteKey,anonymousId:o,sessionId:u.id,event:t}]:[]}),G())}function ce(e){let t=new URL(e);return["email","token","password","access_token"].forEach(o=>t.searchParams.delete(o)),t.toString()}function de(e){try{return new URL(e).origin}catch{return}}function ke(){return{title:document.title.slice(0,512),language:navigator.language,screen:{width:screen.width,height:screen.height},utm:Object.fromEntries(["utm_source","utm_medium","utm_campaign"].flatMap(e=>{let t=new URL(location.href).searchParams.get(e);return t?[[e,t]]:[]}))}}function qe(e=location.pathname){return n.pageRules?.find(t=>e.startsWith(t.pathPrefix))?.pageType}function ue(){let e=document.documentElement.scrollHeight-innerHeight;return e>0?Math.min(100,Math.max(0,Math.round(scrollY/e*100))):0}function y(e,t={},o={}){if(!p)return;let{productId:u,catalogProductId:g,catalogVariantId:b,amount:A,currency:m,pageType:N,...V}=t,h={eventId:crypto.randomUUID(),name:e,occurredAt:new Date().toISOString(),url:o.url??ce(location.href),path:o.path??location.pathname,...de(document.referrer)?{referrer:de(document.referrer)}:{},...typeof u=="string"?{productId:u}:{},...typeof g=="string"?{catalogProductId:g}:{},...typeof b=="string"?{catalogVariantId:b}:{},...typeof A=="number"?{amount:A}:{},...typeof m=="string"?{currency:m}:{},pageType:o.pageType??(typeof N=="string"?N:l?.pageType),pageViewId:o.pageViewId??l?.id,...o.engagedTimeMsec?{engagedTimeMsec:o.engagedTimeMsec}:{},...Object.keys(V).length?{properties:V}:{},context:ke()};return f.push({siteKey:n.siteKey,anonymousId:Q(),sessionId:Y(),event:JSON.parse(JSON.stringify(h))}),j(),f.length>=20&&K(),h.eventId}function Ce(e,t){if(k.state==="disabled")return{queued:!1,reason:"disabled"};if(_.analytics!=="granted")return{queued:!1,reason:"consent_required"};if(!p)return{queued:!1,reason:"unavailable"};try{let o=we(e,t),u=y(e,{...o.properties,productId:o.productId,catalogProductId:o.catalogProductId,catalogVariantId:o.catalogVariantId,amount:o.amount,currency:o.currency});return u?{queued:!0,eventId:u}:{queued:!1,reason:"unavailable"}}catch(o){return{queued:!1,reason:"invalid_event",message:o instanceof Error?o.message:"Invalid event"}}}async function K(e=!1){if(!p||D||(G(),w(),!f.length||!e&&Date.now()<C))return;let t=f[0],o=f.filter(m=>m.siteKey===t.siteKey&&m.anonymousId===t.anonymousId&&m.sessionId===t.sessionId).slice(0,20),u=JSON.stringify({siteKey:t.siteKey,anonymousId:t.anonymousId,sessionId:t.sessionId,events:o.map(m=>m.event)}),g=`${ie()}/v2/collect/events`;if(e)try{if(navigator.sendBeacon?.(g,new Blob([u],{type:"application/json"}))){j();return}}catch{}D=!0;let b=S,A=new AbortController;L=A;try{let m=await fetch(g,{method:"POST",headers:{"content-type":"application/json"},body:u,keepalive:!0,signal:A.signal});if(b!==S||!p)return;if(!m.ok){if(m.status===429||m.status>=500)throw new Error(`Collect HTTP ${m.status}`);let h=new Set(o.map(ne=>ne.event.eventId));f=f.filter(ne=>!h.has(ne.event.eventId)),j(),w({state:"error",error:`Collect HTTP ${m.status}: batch discarded`}),C=0,P=0;return}let N=await m.json();if(!Array.isArray(N.results))throw new Error("Collect response missing results");let V=new Set(N.results.filter(h=>h.status==="accepted"||h.status==="duplicate").map(h=>h.eventId));if(!o.every(h=>V.has(h.event.eventId)))throw new Error("Collect response incomplete");if(b!==S||!p)return;f=f.filter(h=>!V.has(h.event.eventId)),P=0,C=0,j(),w({state:"ready",error:void 0,lastDeliveredAt:new Date().toISOString()})}catch(m){if(b!==S||!p)return;P++,C=Date.now()+Math.min(6e4,3e3*2**Math.min(P-1,5)),w({error:m instanceof Error?m.message:"Collect unavailable"})}finally{b===S&&(D=!1,L=void 0)}p&&f.length&&!C&&K()}function le(e,t){let o=JSON.stringify({siteKey:n.siteKey,anonymousId:t,analyticsAllowed:e.analytics==="granted",marketingAllowed:e.marketing??!1,source:e.source??"sdk",policyVersion:e.policyVersion});try{fetch(`${ie()}/v2/collect/consent`,{method:"POST",headers:{"content-type":"application/json"},body:o,keepalive:!0}).then(u=>{if(!u.ok)throw new Error(`Consent HTTP ${u.status}`)}).catch(()=>{})}catch{}}function pe(){l={id:crypto.randomUUID(),url:ce(location.href),path:location.pathname,pageType:qe(),enteredAt:new Date().toISOString(),visibleAt:document.visibilityState==="visible"?Date.now():0,activeMsec:0,reportedMsec:0,maxScrollPercent:ue()},J=!1,y("page_view")}function Me(){!p||!l?.visibleAt||(l.activeMsec+=Date.now()-l.visibleAt,l.visibleAt=0)}function Z(e){if(!p||!l)return;Me();let t=l.activeMsec-l.reportedMsec;t<1e3||(l.reportedMsec=l.activeMsec,y("page_engagement",{pageViewId:l.id,maxScrollPercent:l.maxScrollPercent,enteredAt:l.enteredAt,exitReason:e},{pageType:l.pageType,pageViewId:l.id,engagedTimeMsec:t,url:l.url,path:l.path}))}function Pe(){p&&l&&!l.visibleAt&&(l.visibleAt=Date.now())}function me(){!p||location.href===F||(Z("navigation"),F=location.href,pe())}function xe(){let e=S,t=o=>{let u=history[o];history[o]=function(...b){let A=u.apply(this,b);return queueMicrotask(()=>{p&&S===e&&me()}),A};let g=history[o];B.push(()=>{history[o]===g&&(history[o]=u)})};t("pushState"),t("replaceState"),E(window,"popstate",me)}function Ne(e){let t=$e(e),o=Array.from(document.querySelectorAll("video")).indexOf(e);return{videoId:e.dataset.robotVideoId||e.id||t||`video:${location.pathname}:${o}`,videoTitle:e.dataset.robotVideoTitle||e.getAttribute("title")||void 0,productId:e.dataset.robotProductId||void 0,videoSrc:t}}function ee(e,t,o){return{...Ne(e),watchedSeconds:Math.round(t.watchedSeconds*10)/10,durationSeconds:Math.round(e.duration*10)/10,...o!==void 0?{progressPercent:o}:{}}}function fe(e,t){let o=Date.now(),u=e.currentTime-t.lastMediaTime,g=(o-t.lastWallTime)/1e3;u>0&&g>0&&u<=Math.max(3,g+1)&&(t.watchedSeconds+=Math.min(u,g+.5)),t.lastMediaTime=e.currentTime,t.lastWallTime=o}function ge(e,t){if(!e.duration)return;let o=Math.min(100,Math.floor(e.currentTime/e.duration*100));for(let u of[25,50,75,100])o>=u&&!t.milestones.has(u)&&(t.milestones.add(u),y("video_progress",ee(e,t,u)))}function Ve(){E(window,"scroll",()=>{l&&(l.maxScrollPercent=Math.max(l.maxScrollPercent,ue()),!J&&l.maxScrollPercent>=90&&(J=!0,y("scroll",{percent:90})))},{passive:!0}),E(document,"focusin",e=>{let t=e.target?.closest("form");t&&!z.has(t)&&(z.add(t),y("form_start",{formId:t.id||void 0,formName:t.getAttribute("name")||void 0}))}),E(document,"submit",e=>{let t=e.target;t instanceof HTMLFormElement&&y("form_submitted",{formId:t.id||void 0,formName:t.getAttribute("name")||void 0})}),E(document,"click",e=>{let t=e.target?.closest("a[href]");if(!t)return;let o=t.href,u=t.origin!==location.origin;t.hasAttribute("download")||Je.test(o)?y("file_download",{fileName:t.pathname.split("/").pop(),linkDomain:t.hostname||void 0}):(u||/^mailto:|^tel:/i.test(t.getAttribute("href")??""))&&y("click",{linkDomain:t.hostname||void 0,linkType:o.startsWith("mailto:")?"email":o.startsWith("tel:")?"phone":"outbound"})}),E(document,"play",e=>{let t=e.target;if(!(t instanceof HTMLVideoElement))return;let o=x.get(t);o||(o={milestones:new Set,watchedSeconds:0,lastMediaTime:t.currentTime,lastWallTime:Date.now(),started:!1},x.set(t,o)),o.started||(o.started=!0,y("video_start",ee(t,o))),o.lastMediaTime=t.currentTime,o.lastWallTime=Date.now()},!0),E(document,"timeupdate",e=>{let t=e.target;if(!(t instanceof HTMLVideoElement))return;let o=x.get(t);o&&(fe(t,o),ge(t,o))},!0),E(document,"ended",e=>{let t=e.target;if(!(t instanceof HTMLVideoElement))return;let o=x.get(t);o&&(fe(t,o),ge(t,o),y("video_complete",ee(t,o,100)))},!0),E(document,"visibilitychange",()=>{document.visibilityState==="hidden"?Z("hidden"):Pe()})}function $e(e){try{return e.currentSrc?new URL(e.currentSrc).origin+new URL(e.currentSrc).pathname:void 0}catch{return}}function te(){if(!(p||k.state==="disabled"||_.analytics!=="granted"))try{let e=!c(r.anonymous),t=X();_e(),Q(),Y(),p=!0,S++,F=location.href,z=new WeakSet,x=new WeakMap,pe(),e&&y("first_visit"),(!t||Date.now()-t.lastActivityAt>=Ee)&&y("session_start"),Ve(),xe(),E(window,"pagehide",()=>{Z("pagehide"),K(!0)}),O=window.setInterval(()=>{K()},3e3),w({state:"ready",error:void 0}),window.dispatchEvent(new Event("robot:ready"))}catch(e){U(!1),w({state:"error",error:e instanceof Error?e.message:"Initialization failed"})}}function U(e){p=!1,S++,L?.abort(),L=void 0,D=!1,O!==void 0&&window.clearInterval(O),O=void 0;for(let t of B.splice(0).reverse())t();l=void 0,C=0,P=0,e&&(f=[],T(r.queue),T(r.anonymous),T(r.session),w({queueLength:0,pageViewId:null,lastDeliveredAt:void 0}))}function ye(e){if(k.state==="disabled")return;let t=JSON.stringify(_)!==JSON.stringify(e),o=p?c(r.anonymous):null;_={...e},a&&d(r.consent,JSON.stringify({...e,analytics:e.analytics==="granted"})),e.analytics!=="granted"?(U(e.analytics==="denied"||!!o),w({state:"waiting_consent",error:void 0}),t&&o&&le(e,o)):(te(),t&&p&&le(e,Q()))}return{track:Ce,setConsent:ye,start:te,resetIdentity:()=>{k.state!=="disabled"&&(U(!0),w({queueLength:0,pageViewId:null,lastDeliveredAt:void 0,error:void 0}),_.analytics==="granted"&&te())},restoreLegacyConsent:()=>{a&&_.analytics==="unknown"&&$(r.consent)?.analytics===!0&&ye({...$(r.consent),analytics:"granted"})},getStatus:()=>k,subscribe:e=>(R.add(e),()=>{R.delete(e)}),getAnonymousId:()=>p?c(r.anonymous):null,getSessionId:()=>p?Y():null,destroy:()=>{U(!1),_={analytics:"unknown"},w({state:"disabled"}),R.clear()}}}function Fe({cookieName:n,changeEvent:a="sendermaster:consent-change",grantedValue:s="granted",deniedValue:r="denied",maxAgeDays:i=365}){if(!/^[\w.-]+$/.test(n))throw new Error("Invalid consent cookie name");return{getSnapshot(){if(typeof document>"u")return"unknown";try{let c=document.cookie.split(";").find(T=>T.trim().startsWith(`${n}=`)),d=c?decodeURIComponent(c.trim().slice(n.length+1)):"";return d===s?"granted":d===r?"denied":"unknown"}catch{return"unknown"}},subscribe(c){if(typeof window>"u")return()=>{};let d=()=>c();return window.addEventListener(a,d),window.addEventListener("focus",d),document.addEventListener("visibilitychange",d),()=>{window.removeEventListener(a,d),window.removeEventListener("focus",d),document.removeEventListener("visibilitychange",d)}},setConsent(c){if(typeof document>"u")return;let d=c==="granted"?s:r;document.cookie=`${n}=${c==="unknown"?"":encodeURIComponent(d)}; Path=/; Max-Age=${c==="unknown"?0:Math.max(0,Math.floor(i*86400))}; SameSite=Lax${location.protocol==="https:"?"; Secure":""}`,window.dispatchEvent(new Event(a))}}}var ze=Symbol.for("sendermaster.browser.v1");function I(){if(typeof window>"u")return;let n=window;return n[ze]||={subscribers:new Set}}function Te(n,a){let s=I();if(!s)return W;let r={...n,siteKey:n.siteKey?.trim()||"",apiHost:(n.apiHost||"https://api.sendermaster.com").replace(/\/$/,""),enabled:n.enabled!==!1},i=JSON.stringify(r);if(s.client&&s.fingerprint===i)return s.client.getStatus();s.client?.destroy(),s.fingerprint=i,s.client=Ae(r,a),s.client.subscribe(()=>{for(let c of s.subscribers)try{c()}catch{}});for(let c of s.subscribers)try{c()}catch{}return s.client.getStatus()}var M={init:n=>Te(n,!1),setConsent:n=>I()?.client?.setConsent(n),track(n,a){return I()?.client?.track(n,a)??{queued:!1,reason:"disabled"}},async trackAfterSuccess(n,a){let s=I()?.client,r=s?.getAnonymousId(),i=!!r&&s?.getStatus().consent==="granted",c=await n();if(i&&I()?.client===s&&s?.getAnonymousId()===r&&s.getStatus().consent==="granted")try{let d=a(c);for(let T of Array.isArray(d)?d:[d])M.track(T.name,T.properties)}catch{}return c},trackSearch(n,a={}){let s=n.trim();return!s||s.length>500||a.filterPersonalData!==!1&&/@|(?:\d[\s()+-]*){7,}/.test(s)?{queued:!1,reason:"invalid_event",message:"Search is empty, too long or contains personal data"}:M.track("search",{query:s,...a.custom?{custom:a.custom}:{}})},resetIdentity:()=>I()?.client?.resetIdentity(),getStatus:()=>I()?.client?.getStatus()??W,subscribe(n){let a=I();return a?(a.subscribers.add(n),()=>{a.subscribers.delete(n)}):()=>{}},getAnonymousId:()=>I()?.client?.getAnonymousId()??null,getSessionId:()=>I()?.client?.getSessionId()??null,destroy(){let n=I();if(n){n.client?.destroy(),n.client=void 0,n.fingerprint=void 0;for(let a of n.subscribers)try{a()}catch{}}}};function et(n){Te(n,!0);let a={start:()=>I()?.client?.start(),track:M.track,setConsent:s=>M.setConsent({...s,analytics:s.analytics?"granted":"denied"}),getAnonymousId:M.getAnonymousId,getSessionId:M.getSessionId};return window.robot=a,I()?.client?.restoreLegacyConsent(),a}function tt(n){if(typeof n!="string"&&typeof n!="number")return;let a=String(n).trim();return a&&a!=="0"&&a.length<=256?a:void 0}function nt(n){if(n==null||n===""||typeof n=="boolean")return;let a=Number(n);return Number.isFinite(a)&&a>=0?a:void 0}export{Fe as createCookieConsentAdapter,et as installLegacyPixel,M as senderMaster,nt as toAmount,tt as toId};
package/dist/index.cjs CHANGED
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- "use strict";"use client";var oe=Object.defineProperty;var Je=Object.getOwnPropertyDescriptor;var Be=Object.getOwnPropertyNames;var ze=Object.prototype.hasOwnProperty;var Fe=(e,o)=>{for(var s in o)oe(e,s,{get:o[s],enumerable:!0})},Qe=(e,o,s,r)=>{if(o&&typeof o=="object"||typeof o=="function")for(let i of Be(o))!ze.call(e,i)&&i!==s&&oe(e,i,{get:()=>o[i],enumerable:!(r=Je(o,i))||r.enumerable});return e};var Xe=e=>Qe(oe({},"__esModule",{value:!0}),e);var mt={};Fe(mt,{SenderMasterConsentBanner:()=>gt,SenderMasterProvider:()=>lt,createCookieConsentAdapter:()=>B,installLegacyPixel:()=>ct,senderMaster:()=>I,toAmount:()=>ut,toId:()=>dt,useBeginCheckout:()=>ft,useProductView:()=>pt,useSenderMaster:()=>fe});module.exports=Xe(mt);var f=require("react");var Ye={product_view:[{name:"catalogProductId",type:"string",required:!1,constraint:"1\u2013100; current-site catalog ID"},{name:"catalogVariantId",type:"string",required:!1,constraint:"1\u2013100; requires catalogProductId"},{name:"productId",type:"string",required:!1,constraint:"1\u2013256; required unless catalogProductId is provided"},{name:"variantId",type:"string",required:!1,constraint:"1\u2013256"},{name:"amount",type:"number",required:!1,constraint:"\u2265 0; requires currency"},{name:"currency",type:"string",required:!1,constraint:"3 uppercase letters; requires amount"},{name:"custom",type:"object",required:!1,constraint:"\u2264 50 fields / 3 levels / 16 KB"}],add_to_cart:[{name:"catalogProductId",type:"string",required:!1,constraint:"1\u2013100; current-site catalog ID"},{name:"catalogVariantId",type:"string",required:!1,constraint:"1\u2013100; requires catalogProductId"},{name:"productId",type:"string",required:!1,constraint:"1\u2013256; required unless catalogProductId is provided"},{name:"quantity",type:"integer",required:!0,constraint:"\u2265 1"},{name:"variantId",type:"string",required:!1,constraint:"1\u2013256"},{name:"amount",type:"number",required:!1,constraint:"\u2265 0; requires currency"},{name:"currency",type:"string",required:!1,constraint:"3 uppercase letters; requires amount"},{name:"custom",type:"object",required:!1,constraint:"\u2264 50 fields / 3 levels / 16 KB"}],begin_checkout:[{name:"checkoutId",type:"string",required:!0,constraint:"1\u2013256"},{name:"items",type:"array",required:!0,constraint:"1\u2013100 items"},{name:"amount",type:"number",required:!0,constraint:"\u2265 0"},{name:"currency",type:"string",required:!0,constraint:"3 uppercase letters"},{name:"custom",type:"object",required:!1,constraint:"\u2264 50 fields / 3 levels / 16 KB"}],search:[{name:"query",type:"string",required:!0,constraint:"1\u2013500"},{name:"resultsCount",type:"integer",required:!1,constraint:"\u2265 0"},{name:"custom",type:"object",required:!1,constraint:"\u2264 50 fields / 3 levels / 16 KB"}],wishlist_added:[{name:"catalogProductId",type:"string",required:!1,constraint:"1\u2013100; current-site catalog ID"},{name:"catalogVariantId",type:"string",required:!1,constraint:"1\u2013100; requires catalogProductId"},{name:"productId",type:"string",required:!1,constraint:"1\u2013256; required unless catalogProductId is provided"},{name:"listName",type:"string",required:!1,constraint:"1\u2013256"},{name:"custom",type:"object",required:!1,constraint:"\u2264 50 fields / 3 levels / 16 KB"}]},Ge=[{name:"catalogProductId",type:"string",required:!1,constraint:"1\u2013100; current-site catalog ID"},{name:"catalogVariantId",type:"string",required:!1,constraint:"1\u2013100; requires catalogProductId"},{name:"productId",type:"string",required:!1,constraint:"1\u2013256; required unless catalogProductId is provided"},{name:"quantity",type:"integer",required:!0,constraint:"\u2265 1"},{name:"variantId",type:"string",required:!1,constraint:"1\u2013256"},{name:"amount",type:"number",required:!1,constraint:"\u2265 0"}],V=256,Ze=500,Ce=100,Ae=50,_e=3,Pe=16*1024,et=/(password|passcode|secret|token|api.?key|card.?number|cvv|cvc|security.?code|ssn|passport)/i,tt=Object.fromEntries(Object.entries(Ye).map(([e,o])=>[e,o.map(s=>s.name)]));function nt(e,o){let s=[];if(!J(o))return[{path:"properties",message:"must be an object"}];let r=o;for(let i of Object.keys(r))tt[e].includes(i)||s.push({path:`properties.${i}`,message:"is not a supported standard field; place extension data under custom"});return e==="wishlist_added"?(_(r,"productId",s,!r.catalogProductId,V),_(r,"listName",s,!1,V)):e==="product_view"||e==="add_to_cart"?(_(r,"productId",s,!r.catalogProductId,V),_(r,"variantId",s,!1,V),ce(r,"amount",s,!1,!1),xe(r,s,!1),r.amount===void 0!=(r.currency===void 0)&&s.push({path:"properties.amount",message:"amount and currency must be provided together"}),e==="add_to_cart"&&de(r,"quantity",s,!0,1)):e==="begin_checkout"?(_(r,"checkoutId",s,!0,V),ce(r,"amount",s,!0,!1),xe(r,s,!0),!Array.isArray(r.items)||r.items.length<1||r.items.length>Ce?s.push({path:"properties.items",message:`must contain 1-${Ce} items`}):r.items.forEach((i,c)=>rt(i,c,s))):(_(r,"query",s,!0,Ze),de(r,"resultsCount",s,!1,0)),["product_view","add_to_cart","wishlist_added"].includes(e)&&(_(r,"catalogProductId",s,!1,100),_(r,"catalogVariantId",s,!1,100),r.catalogVariantId&&!r.catalogProductId&&s.push({path:"properties.catalogVariantId",message:"requires catalogProductId"})),r.custom!==void 0&&st(r.custom,s),s}function Te(e,o){let s=nt(e,o);if(s.length)throw new ae(e,s);let r=o,i={};for(let c of["variantId","quantity","checkoutId","items","query","resultsCount","listName","custom"])r[c]!==void 0&&(i[c]=r[c]);return{...typeof r.productId=="string"?{productId:r.productId}:{},...typeof r.catalogProductId=="string"?{catalogProductId:r.catalogProductId}:{},...typeof r.catalogVariantId=="string"?{catalogVariantId:r.catalogVariantId}:{},...typeof r.amount=="number"?{amount:r.amount}:{},...typeof r.currency=="string"?{currency:r.currency}:{},properties:i}}var ae=class extends Error{constructor(s,r){super(`Invalid ${s} event: ${r.map(i=>`${i.path} ${i.message}`).join("; ")}`);this.eventName=s;this.issues=r;this.name="StandardEventValidationError"}eventName;issues};function rt(e,o,s){let r=`properties.items[${o}]`;if(!J(e)){s.push({path:r,message:"must be an object"});return}let i=e,c=Ge.map(d=>d.name);for(let d of Object.keys(i))c.includes(d)||s.push({path:`${r}.${d}`,message:"is not supported"});_(i,"productId",s,!i.catalogProductId,V,r),_(i,"catalogProductId",s,!1,100,r),_(i,"catalogVariantId",s,!1,100,r),i.catalogVariantId&&!i.catalogProductId&&s.push({path:`${r}.catalogVariantId`,message:"requires catalogProductId"}),_(i,"variantId",s,!1,V,r),de(i,"quantity",s,!0,1,r),ce(i,"amount",s,!1,!1,r)}function st(e,o){if(!J(e)){o.push({path:"properties.custom",message:"must be an object"});return}let s=e;Object.keys(s).length>Ae&&o.push({path:"properties.custom",message:`must contain at most ${Ae} top-level fields`}),ie(s,"properties.custom",1,o,new WeakSet);try{new TextEncoder().encode(JSON.stringify(s)).length>Pe&&o.push({path:"properties.custom",message:`must be at most ${Pe} bytes`})}catch{o.push({path:"properties.custom",message:"must be valid JSON data"})}}function ie(e,o,s,r,i){if(s>_e){r.push({path:o,message:`must not exceed ${_e} levels`});return}if(!(e===null||typeof e=="string"||typeof e=="boolean"||typeof e=="number"&&Number.isFinite(e))){if(typeof e=="object"&&e){if(i.has(e)){r.push({path:o,message:"must not contain circular references"});return}i.add(e)}if(Array.isArray(e)){e.forEach((c,d)=>ie(c,`${o}[${d}]`,s+1,r,i));return}if(J(e)){Object.entries(e).forEach(([c,d])=>{(c.startsWith("_")||c.toLowerCase().startsWith("sm_"))&&r.push({path:`${o}.${c}`,message:"uses a reserved prefix"}),et.test(c)&&r.push({path:`${o}.${c}`,message:"must not contain secrets or sensitive payment/identity data"}),ie(d,`${o}.${c}`,s+1,r,i)});return}r.push({path:o,message:"must contain JSON-compatible values only"})}}function J(e){if(!e||typeof e!="object"||Array.isArray(e))return!1;let o=Object.getPrototypeOf(e);return o===Object.prototype||o===null}function _(e,o,s,r,i,c="properties"){let d=e[o];if(d===void 0){r&&s.push({path:`${c}.${o}`,message:"is required"});return}(typeof d!="string"||d.length<1||d.length>i)&&s.push({path:`${c}.${o}`,message:`must be a string with 1-${i} characters`})}function ce(e,o,s,r,i,c="properties"){let d=e[o];if(d===void 0){r&&s.push({path:`${c}.${o}`,message:"is required"});return}(typeof d!="number"||!Number.isFinite(d)||(i?d<=0:d<0))&&s.push({path:`${c}.${o}`,message:i?"must be a positive finite number":"must be a non-negative finite number"})}function de(e,o,s,r,i,c="properties"){let d=e[o];if(d===void 0){r&&s.push({path:`${c}.${o}`,message:"is required"});return}(typeof d!="number"||!Number.isInteger(d)||d<i)&&s.push({path:`${c}.${o}`,message:`must be an integer greater than or equal to ${i}`})}function xe(e,o,s){let r=e.currency;if(r===void 0){s&&o.push({path:"properties.currency",message:"is required"});return}(typeof r!="string"||!/^[A-Z]{3}$/.test(r))&&o.push({path:"properties.currency",message:"must be a 3-letter uppercase currency code"})}var Me=1800*1e3,ot=1440*60*1e3,at=/\.(?:pdf|csv|docx?|xlsx?|pptx?|zip|rar|7z)(?:$|[?#])/i,O=Object.freeze({state:"disabled",consent:"unknown",queueLength:0,pageViewId:null});function qe(e,o=!1){let s=o?"robot_store":`sendermaster:${e.siteKey}`,r={anonymous:`${s}_anonymous_id`,session:`${s}_session`,consent:`${s}_consent`,queue:`${s}_event_queue`},i=new Map;function c(t){try{let n=localStorage.getItem(t);return n!==null&&i.set(t,n),n??i.get(t)??null}catch{return i.get(t)??null}}function d(t,n){i.set(t,n);try{localStorage.setItem(t,n)}catch{}}function g(t){i.delete(t);try{localStorage.removeItem(t)}catch{}}function w(t){try{return JSON.parse(c(t)??"null")}catch{return null}}let v=new Set,m={analytics:"unknown"},E={...O,state:e.enabled===!1||!e.siteKey?"disabled":"waiting_consent"},p=!1,h=0,N,$=!1,U,R=0,D=0,l,z=!1,F=location.href,Q=new WeakSet,L=new WeakMap,b=[],X=[];function M(t={}){let n={...E,consent:m.analytics,queueLength:b.length,pageViewId:l?.id??null,...t};if(JSON.stringify(n)!==JSON.stringify(E)){E=Object.freeze(n);for(let a of v)try{a()}catch{}}}function T(t,n,a,u){let S=h,A=q=>{if(p&&h===S)try{a(q)}catch{}};t.addEventListener(n,A,u),X.push(()=>t.removeEventListener(n,A,u))}function ge(){return(e.apiHost??"https://api.sendermaster.com").replace(/\/$/,"")}function Y(){let t=c(r.anonymous);return t||(t=crypto.randomUUID(),d(r.anonymous,t)),t}function G(){let t=w(r.session);return t&&typeof t.id=="string"&&typeof t.lastActivityAt=="number"?t:void 0}function Z(){let t=Date.now(),n=G();if(!n||t-n.lastActivityAt>=Me){let a={id:crypto.randomUUID(),lastActivityAt:t};return d(r.session,JSON.stringify(a)),a.id}return n.lastActivityAt=t,d(r.session,JSON.stringify(n)),n.id}function ee(){let t=Date.now();b=b.filter(n=>n.siteKey===e.siteKey&&t-Date.parse(n.event.occurredAt)<ot&&Date.parse(n.event.occurredAt)<=t+6e4).slice(-100)}function H(){ee(),d(r.queue,JSON.stringify(b)),M()}function $e(){let t=w(r.queue);Array.isArray(t)&&(b=t.flatMap(n=>{if(n?.event?.eventId&&typeof n.anonymousId=="string"&&typeof n.sessionId=="string")return[n];let a=c(r.anonymous),u=G();return o&&n?.eventId&&a&&u?[{siteKey:e.siteKey,anonymousId:a,sessionId:u.id,event:n}]:[]}),ee())}function me(t){let n=new URL(t);return["email","token","password","access_token"].forEach(a=>n.searchParams.delete(a)),n.toString()}function ye(t){try{return new URL(t).origin}catch{return}}function Re(){return{title:document.title.slice(0,512),language:navigator.language,screen:{width:screen.width,height:screen.height},utm:Object.fromEntries(["utm_source","utm_medium","utm_campaign"].flatMap(t=>{let n=new URL(location.href).searchParams.get(t);return n?[[t,n]]:[]}))}}function Oe(t=location.pathname){return e.pageRules?.find(n=>t.startsWith(n.pathPrefix))?.pageType}function he(){let t=document.documentElement.scrollHeight-innerHeight;return t>0?Math.min(100,Math.max(0,Math.round(scrollY/t*100))):0}function k(t,n={},a={}){if(!p)return;let{productId:u,catalogProductId:S,catalogVariantId:A,amount:q,currency:y,pageType:j,...K}=n,C={eventId:crypto.randomUUID(),name:t,occurredAt:new Date().toISOString(),url:a.url??me(location.href),path:a.path??location.pathname,...ye(document.referrer)?{referrer:ye(document.referrer)}:{},...typeof u=="string"?{productId:u}:{},...typeof S=="string"?{catalogProductId:S}:{},...typeof A=="string"?{catalogVariantId:A}:{},...typeof q=="number"?{amount:q}:{},...typeof y=="string"?{currency:y}:{},pageType:a.pageType??(typeof j=="string"?j:l?.pageType),pageViewId:a.pageViewId??l?.id,...a.engagedTimeMsec?{engagedTimeMsec:a.engagedTimeMsec}:{},...Object.keys(K).length?{properties:K}:{},context:Re()};return b.push({siteKey:e.siteKey,anonymousId:Y(),sessionId:Z(),event:JSON.parse(JSON.stringify(C))}),H(),b.length>=20&&W(),C.eventId}function De(t,n){if(E.state==="disabled")return{queued:!1,reason:"disabled"};if(m.analytics!=="granted")return{queued:!1,reason:"consent_required"};if(!p)return{queued:!1,reason:"unavailable"};try{let a=Te(t,n),u=k(t,{...a.properties,productId:a.productId,catalogProductId:a.catalogProductId,catalogVariantId:a.catalogVariantId,amount:a.amount,currency:a.currency});return u?{queued:!0,eventId:u}:{queued:!1,reason:"unavailable"}}catch(a){return{queued:!1,reason:"invalid_event",message:a instanceof Error?a.message:"Invalid event"}}}async function W(t=!1){if(!p||$||(ee(),M(),!b.length||!t&&Date.now()<R))return;let n=b[0],a=b.filter(y=>y.siteKey===n.siteKey&&y.anonymousId===n.anonymousId&&y.sessionId===n.sessionId).slice(0,20),u=JSON.stringify({siteKey:n.siteKey,anonymousId:n.anonymousId,sessionId:n.sessionId,events:a.map(y=>y.event)}),S=`${ge()}/v2/collect/events`;if(t)try{if(navigator.sendBeacon?.(S,new Blob([u],{type:"application/json"}))){H();return}}catch{}$=!0;let A=h,q=new AbortController;U=q;try{let y=await fetch(S,{method:"POST",headers:{"content-type":"application/json"},body:u,keepalive:!0,signal:q.signal});if(A!==h||!p)return;if(!y.ok){if(y.status===429||y.status>=500)throw new Error(`Collect HTTP ${y.status}`);let C=new Set(a.map(se=>se.event.eventId));b=b.filter(se=>!C.has(se.event.eventId)),H(),M({state:"error",error:`Collect HTTP ${y.status}: batch discarded`}),R=0,D=0;return}let j=await y.json();if(!Array.isArray(j.results))throw new Error("Collect response missing results");let K=new Set(j.results.filter(C=>C.status==="accepted"||C.status==="duplicate").map(C=>C.eventId));if(!a.every(C=>K.has(C.event.eventId)))throw new Error("Collect response incomplete");if(A!==h||!p)return;b=b.filter(C=>!K.has(C.event.eventId)),D=0,R=0,H(),M({state:"ready",error:void 0,lastDeliveredAt:new Date().toISOString()})}catch(y){if(A!==h||!p)return;D++,R=Date.now()+Math.min(6e4,3e3*2**Math.min(D-1,5)),M({error:y instanceof Error?y.message:"Collect unavailable"})}finally{A===h&&($=!1,U=void 0)}p&&b.length&&!R&&W()}function be(t,n){let a=JSON.stringify({siteKey:e.siteKey,anonymousId:n,analyticsAllowed:t.analytics==="granted",marketingAllowed:t.marketing??!1,source:t.source??"sdk",policyVersion:t.policyVersion});try{fetch(`${ge()}/v2/collect/consent`,{method:"POST",headers:{"content-type":"application/json"},body:a,keepalive:!0}).then(u=>{if(!u.ok)throw new Error(`Consent HTTP ${u.status}`)}).catch(()=>{})}catch{}}function Ie(){l={id:crypto.randomUUID(),url:me(location.href),path:location.pathname,pageType:Oe(),enteredAt:new Date().toISOString(),visibleAt:document.visibilityState==="visible"?Date.now():0,activeMsec:0,reportedMsec:0,maxScrollPercent:he()},z=!1,k("page_view")}function Le(){!p||!l?.visibleAt||(l.activeMsec+=Date.now()-l.visibleAt,l.visibleAt=0)}function te(t){if(!p||!l)return;Le();let n=l.activeMsec-l.reportedMsec;n<1e3||(l.reportedMsec=l.activeMsec,k("page_engagement",{pageViewId:l.id,maxScrollPercent:l.maxScrollPercent,enteredAt:l.enteredAt,exitReason:t},{pageType:l.pageType,pageViewId:l.id,engagedTimeMsec:n,url:l.url,path:l.path}))}function je(){p&&l&&!l.visibleAt&&(l.visibleAt=Date.now())}function ve(){!p||location.href===F||(te("navigation"),F=location.href,Ie())}function Ke(){let t=h,n=a=>{let u=history[a];history[a]=function(...A){let q=u.apply(this,A);return queueMicrotask(()=>{p&&h===t&&ve()}),q};let S=history[a];X.push(()=>{history[a]===S&&(history[a]=u)})};n("pushState"),n("replaceState"),T(window,"popstate",ve)}function Ue(t){let n=We(t),a=Array.from(document.querySelectorAll("video")).indexOf(t);return{videoId:t.dataset.robotVideoId||t.id||n||`video:${location.pathname}:${a}`,videoTitle:t.dataset.robotVideoTitle||t.getAttribute("title")||void 0,productId:t.dataset.robotProductId||void 0,videoSrc:n}}function ne(t,n,a){return{...Ue(t),watchedSeconds:Math.round(n.watchedSeconds*10)/10,durationSeconds:Math.round(t.duration*10)/10,...a!==void 0?{progressPercent:a}:{}}}function Se(t,n){let a=Date.now(),u=t.currentTime-n.lastMediaTime,S=(a-n.lastWallTime)/1e3;u>0&&S>0&&u<=Math.max(3,S+1)&&(n.watchedSeconds+=Math.min(u,S+.5)),n.lastMediaTime=t.currentTime,n.lastWallTime=a}function we(t,n){if(!t.duration)return;let a=Math.min(100,Math.floor(t.currentTime/t.duration*100));for(let u of[25,50,75,100])a>=u&&!n.milestones.has(u)&&(n.milestones.add(u),k("video_progress",ne(t,n,u)))}function He(){T(window,"scroll",()=>{l&&(l.maxScrollPercent=Math.max(l.maxScrollPercent,he()),!z&&l.maxScrollPercent>=90&&(z=!0,k("scroll",{percent:90})))},{passive:!0}),T(document,"focusin",t=>{let n=t.target?.closest("form");n&&!Q.has(n)&&(Q.add(n),k("form_start",{formId:n.id||void 0,formName:n.getAttribute("name")||void 0}))}),T(document,"submit",t=>{let n=t.target;n instanceof HTMLFormElement&&k("form_submitted",{formId:n.id||void 0,formName:n.getAttribute("name")||void 0})}),T(document,"click",t=>{let n=t.target?.closest("a[href]");if(!n)return;let a=n.href,u=n.origin!==location.origin;n.hasAttribute("download")||at.test(a)?k("file_download",{fileName:n.pathname.split("/").pop(),linkDomain:n.hostname||void 0}):(u||/^mailto:|^tel:/i.test(n.getAttribute("href")??""))&&k("click",{linkDomain:n.hostname||void 0,linkType:a.startsWith("mailto:")?"email":a.startsWith("tel:")?"phone":"outbound"})}),T(document,"play",t=>{let n=t.target;if(!(n instanceof HTMLVideoElement))return;let a=L.get(n);a||(a={milestones:new Set,watchedSeconds:0,lastMediaTime:n.currentTime,lastWallTime:Date.now(),started:!1},L.set(n,a)),a.started||(a.started=!0,k("video_start",ne(n,a))),a.lastMediaTime=n.currentTime,a.lastWallTime=Date.now()},!0),T(document,"timeupdate",t=>{let n=t.target;if(!(n instanceof HTMLVideoElement))return;let a=L.get(n);a&&(Se(n,a),we(n,a))},!0),T(document,"ended",t=>{let n=t.target;if(!(n instanceof HTMLVideoElement))return;let a=L.get(n);a&&(Se(n,a),we(n,a),k("video_complete",ne(n,a,100)))},!0),T(document,"visibilitychange",()=>{document.visibilityState==="hidden"?te("hidden"):je()})}function We(t){try{return t.currentSrc?new URL(t.currentSrc).origin+new URL(t.currentSrc).pathname:void 0}catch{return}}function Ee(){if(!(p||E.state==="disabled"||m.analytics!=="granted"))try{let t=!c(r.anonymous),n=G();$e(),Y(),Z(),p=!0,h++,F=location.href,Q=new WeakSet,L=new WeakMap,Ie(),t&&k("first_visit"),(!n||Date.now()-n.lastActivityAt>=Me)&&k("session_start"),He(),Ke(),T(window,"pagehide",()=>{te("pagehide"),W(!0)}),N=window.setInterval(()=>{W()},3e3),M({state:"ready",error:void 0}),window.dispatchEvent(new Event("robot:ready"))}catch(t){re(!1),M({state:"error",error:t instanceof Error?t.message:"Initialization failed"})}}function re(t){p=!1,h++,U?.abort(),U=void 0,$=!1,N!==void 0&&window.clearInterval(N),N=void 0;for(let n of X.splice(0).reverse())n();l=void 0,R=0,D=0,t&&(b=[],g(r.queue),g(r.anonymous),g(r.session))}function ke(t){if(E.state==="disabled")return;let n=JSON.stringify(m)!==JSON.stringify(t),a=p?c(r.anonymous):null;m={...t},o&&d(r.consent,JSON.stringify({...t,analytics:t.analytics==="granted"})),t.analytics!=="granted"?(re(t.analytics==="denied"||!!a),M({state:"waiting_consent",error:void 0}),n&&a&&be(t,a)):(Ee(),n&&p&&be(t,Y()))}return{track:De,setConsent:ke,start:Ee,restoreLegacyConsent:()=>{o&&m.analytics==="unknown"&&w(r.consent)?.analytics===!0&&ke({...w(r.consent),analytics:"granted"})},getStatus:()=>E,subscribe:t=>(v.add(t),()=>{v.delete(t)}),getAnonymousId:()=>p?c(r.anonymous):null,getSessionId:()=>p?Z():null,destroy:()=>{re(!1),m={analytics:"unknown"},M({state:"disabled"}),v.clear()}}}function B({cookieName:e,changeEvent:o="sendermaster:consent-change",grantedValue:s="granted",deniedValue:r="denied",maxAgeDays:i=365}){if(!/^[\w.-]+$/.test(e))throw new Error("Invalid consent cookie name");return{getSnapshot(){if(typeof document>"u")return"unknown";try{let c=document.cookie.split(";").find(g=>g.trim().startsWith(`${e}=`)),d=c?decodeURIComponent(c.trim().slice(e.length+1)):"";return d===s?"granted":d===r?"denied":"unknown"}catch{return"unknown"}},subscribe(c){if(typeof window>"u")return()=>{};let d=()=>c();return window.addEventListener(o,d),window.addEventListener("focus",d),document.addEventListener("visibilitychange",d),()=>{window.removeEventListener(o,d),window.removeEventListener("focus",d),document.removeEventListener("visibilitychange",d)}},setConsent(c){if(typeof document>"u")return;let d=c==="granted"?s:r;document.cookie=`${e}=${c==="unknown"?"":encodeURIComponent(d)}; Path=/; Max-Age=${c==="unknown"?0:Math.max(0,Math.floor(i*86400))}; SameSite=Lax${location.protocol==="https:"?"; Secure":""}`,window.dispatchEvent(new Event(o))}}}var it=Symbol.for("sendermaster.browser.v1");function P(){if(typeof window>"u")return;let e=window;return e[it]||={subscribers:new Set}}function Ne(e,o){let s=P();if(!s)return O;let r={...e,siteKey:e.siteKey?.trim()||"",apiHost:(e.apiHost||"https://api.sendermaster.com").replace(/\/$/,""),enabled:e.enabled!==!1},i=JSON.stringify(r);if(s.client&&s.fingerprint===i)return s.client.getStatus();s.client?.destroy(),s.fingerprint=i,s.client=qe(r,o),s.client.subscribe(()=>{for(let c of s.subscribers)try{c()}catch{}});for(let c of s.subscribers)try{c()}catch{}return s.client.getStatus()}var I={init:e=>Ne(e,!1),setConsent:e=>P()?.client?.setConsent(e),track(e,o){return P()?.client?.track(e,o)??{queued:!1,reason:"disabled"}},async trackAfterSuccess(e,o){let s=P()?.client,r=s?.getAnonymousId(),i=!!r&&s?.getStatus().consent==="granted",c=await e();if(i&&P()?.client===s&&s?.getAnonymousId()===r&&s.getStatus().consent==="granted")try{let d=o(c);for(let g of Array.isArray(d)?d:[d])I.track(g.name,g.properties)}catch{}return c},trackSearch(e,o={}){let s=e.trim();return!s||s.length>500||o.filterPersonalData!==!1&&/@|(?:\d[\s()+-]*){7,}/.test(s)?{queued:!1,reason:"invalid_event",message:"Search is empty, too long or contains personal data"}:I.track("search",{query:s,...o.custom?{custom:o.custom}:{}})},getStatus:()=>P()?.client?.getStatus()??O,subscribe(e){let o=P();return o?(o.subscribers.add(e),()=>{o.subscribers.delete(e)}):()=>{}},getAnonymousId:()=>P()?.client?.getAnonymousId()??null,getSessionId:()=>P()?.client?.getSessionId()??null,destroy(){let e=P();if(e){e.client?.destroy(),e.client=void 0,e.fingerprint=void 0;for(let o of e.subscribers)try{o()}catch{}}}};function ct(e){Ne(e,!0);let o={start:()=>P()?.client?.start(),track:I.track,setConsent:s=>I.setConsent({...s,analytics:s.analytics?"granted":"denied"}),getAnonymousId:I.getAnonymousId,getSessionId:I.getSessionId};return window.robot=o,P()?.client?.restoreLegacyConsent(),o}function dt(e){if(typeof e!="string"&&typeof e!="number")return;let o=String(e).trim();return o&&o!=="0"&&o.length<=256?o:void 0}function ut(e){if(e==null||e===""||typeof e=="boolean")return;let o=Number(e);return Number.isFinite(o)&&o>=0?o:void 0}var x=require("react/jsx-runtime"),pe=(0,f.createContext)(null),ue=0,le=0;function lt({children:e,analyticsConsent:o,consentAdapter:s,marketingConsent:r=!1,consentSource:i="react",policyVersion:c,...d}){let g=JSON.stringify(d),w=(0,f.useMemo)(()=>B({cookieName:`sendermaster_consent_${Array.from(d.siteKey||"").map(m=>m.charCodeAt(0).toString(16)).join("_")||"default"}`}),[d.siteKey]),v=o===void 0?s??w:void 0;return(0,f.useEffect)(()=>(ue++,le++,()=>{ue--;let m=++le;queueMicrotask(()=>{!ue&&m===le&&I.destroy()})}),[]),(0,f.useEffect)(()=>{I.init(JSON.parse(g));let m=()=>{let E=o??"unknown";try{v&&(E=v.getSnapshot())}catch{}I.setConsent({analytics:E,marketing:r,source:i,policyVersion:c})};return m(),v?.subscribe(m)},[g,v,o,r,i,c]),(0,x.jsx)(pe.Provider,{value:{adapter:v},children:e})}function fe(){let e=(0,f.useSyncExternalStore)(I.subscribe,I.getStatus,()=>O);return{...I,status:e}}function Ve(e,o,s,r,i){let c=(0,f.useContext)(pe),{status:d}=fe(),g=(0,f.useRef)(""),w=i?d.pageViewId:"",v=JSON.stringify(o);(0,f.useEffect)(()=>{if(!r){g.current="";return}if(!c||d.state!=="ready"||!s||!o)return;let m=`${w}:${s}`;g.current!==m&&I.track(e,o).queued&&(g.current=m)},[c,d.state,w,s,r,v])}function pt(e,{viewKey:o="",active:s=!0}={}){Ve("product_view",e,`${o}:${e?.productId??e?.catalogProductId??""}:${e?.variantId??e?.catalogVariantId??""}`,s,!0)}function ft(e,{checkoutKey:o,active:s=!0}={}){let{status:r}=fe(),[i,c]=(0,f.useState)(""),d=(0,f.useRef)("");(0,f.useEffect)(()=>{d.current||=crypto.randomUUID(),c(d.current)},[]);let g=o||e?.checkoutId||(i&&r.pageViewId?`${i}:${r.pageViewId}`:""),w=e&&g?{...e,checkoutId:e.checkoutId||g}:null;Ve("begin_checkout",w,g,s,!1)}function gt({privacyPolicyUrl:e,labels:o,className:s,style:r}){let c=(0,f.useContext)(pe)?.adapter,d=()=>()=>{},g=(0,f.useSyncExternalStore)(c?.subscribe??d,c?.getSnapshot??(()=>"unknown"),()=>"unknown"),[w,v]=(0,f.useState)(!1),[m,E]=(0,f.useState)(!1);if((0,f.useEffect)(()=>{v(!0)},[]),!w||!c?.setConsent)return null;let p=$=>{c.setConsent?.($),E(!1)},h={message:"With your permission, analytics cookies help us understand how you use this website.",accept:"Accept",reject:"Reject",settings:"Cookie settings",privacyPolicy:"Privacy policy",...o},N={padding:"8px 14px",border:"1px solid #777",borderRadius:4,background:"#fff",color:"#222",cursor:"pointer",font:"inherit"};return(0,x.jsx)("div",{className:s,style:{position:"fixed",bottom:12,left:12,right:g==="unknown"||m?12:void 0,zIndex:1e3,...r},children:g==="unknown"||m?(0,x.jsxs)("section",{role:"region","aria-label":"Cookie preferences",style:{padding:16,background:"#fff",color:"#222",border:"1px solid #ccc",borderRadius:6,font:"14px/1.5 sans-serif"},children:[(0,x.jsxs)("p",{children:[h.message," ",e&&(0,x.jsx)("a",{href:e,children:h.privacyPolicy})]}),(0,x.jsxs)("div",{style:{display:"flex",flexWrap:"wrap",gap:8},children:[(0,x.jsx)("button",{type:"button",style:N,onClick:()=>p("granted"),children:h.accept}),(0,x.jsx)("button",{type:"button",style:N,onClick:()=>p("denied"),children:h.reject})]})]}):(0,x.jsx)("button",{type:"button",style:N,onClick:()=>E(!0),children:h.settings})})}
2
+ "use strict";"use client";var ae=Object.defineProperty;var Je=Object.getOwnPropertyDescriptor;var Be=Object.getOwnPropertyNames;var ze=Object.prototype.hasOwnProperty;var Fe=(e,o)=>{for(var s in o)ae(e,s,{get:o[s],enumerable:!0})},Qe=(e,o,s,r)=>{if(o&&typeof o=="object"||typeof o=="function")for(let i of Be(o))!ze.call(e,i)&&i!==s&&ae(e,i,{get:()=>o[i],enumerable:!(r=Je(o,i))||r.enumerable});return e};var Xe=e=>Qe(ae({},"__esModule",{value:!0}),e);var mt={};Fe(mt,{SenderMasterConsentBanner:()=>gt,SenderMasterProvider:()=>lt,createCookieConsentAdapter:()=>z,installLegacyPixel:()=>ct,senderMaster:()=>I,toAmount:()=>ut,toId:()=>dt,useBeginCheckout:()=>ft,useProductView:()=>pt,useSenderMaster:()=>ge});module.exports=Xe(mt);var f=require("react");var Ye={product_view:[{name:"catalogProductId",type:"string",required:!1,constraint:"1\u2013100; current-site catalog ID"},{name:"catalogVariantId",type:"string",required:!1,constraint:"1\u2013100; requires catalogProductId"},{name:"productId",type:"string",required:!1,constraint:"1\u2013256; required unless catalogProductId is provided"},{name:"variantId",type:"string",required:!1,constraint:"1\u2013256"},{name:"amount",type:"number",required:!1,constraint:"\u2265 0; requires currency"},{name:"currency",type:"string",required:!1,constraint:"3 uppercase letters; requires amount"},{name:"custom",type:"object",required:!1,constraint:"\u2264 50 fields / 3 levels / 16 KB"}],add_to_cart:[{name:"catalogProductId",type:"string",required:!1,constraint:"1\u2013100; current-site catalog ID"},{name:"catalogVariantId",type:"string",required:!1,constraint:"1\u2013100; requires catalogProductId"},{name:"productId",type:"string",required:!1,constraint:"1\u2013256; required unless catalogProductId is provided"},{name:"quantity",type:"integer",required:!0,constraint:"\u2265 1"},{name:"variantId",type:"string",required:!1,constraint:"1\u2013256"},{name:"amount",type:"number",required:!1,constraint:"\u2265 0; requires currency"},{name:"currency",type:"string",required:!1,constraint:"3 uppercase letters; requires amount"},{name:"custom",type:"object",required:!1,constraint:"\u2264 50 fields / 3 levels / 16 KB"}],begin_checkout:[{name:"checkoutId",type:"string",required:!0,constraint:"1\u2013256"},{name:"items",type:"array",required:!0,constraint:"1\u2013100 items"},{name:"amount",type:"number",required:!0,constraint:"\u2265 0"},{name:"currency",type:"string",required:!0,constraint:"3 uppercase letters"},{name:"custom",type:"object",required:!1,constraint:"\u2264 50 fields / 3 levels / 16 KB"}],search:[{name:"query",type:"string",required:!0,constraint:"1\u2013500"},{name:"resultsCount",type:"integer",required:!1,constraint:"\u2265 0"},{name:"custom",type:"object",required:!1,constraint:"\u2264 50 fields / 3 levels / 16 KB"}],wishlist_added:[{name:"catalogProductId",type:"string",required:!1,constraint:"1\u2013100; current-site catalog ID"},{name:"catalogVariantId",type:"string",required:!1,constraint:"1\u2013100; requires catalogProductId"},{name:"productId",type:"string",required:!1,constraint:"1\u2013256; required unless catalogProductId is provided"},{name:"listName",type:"string",required:!1,constraint:"1\u2013256"},{name:"custom",type:"object",required:!1,constraint:"\u2264 50 fields / 3 levels / 16 KB"}]},Ge=[{name:"catalogProductId",type:"string",required:!1,constraint:"1\u2013100; current-site catalog ID"},{name:"catalogVariantId",type:"string",required:!1,constraint:"1\u2013100; requires catalogProductId"},{name:"productId",type:"string",required:!1,constraint:"1\u2013256; required unless catalogProductId is provided"},{name:"quantity",type:"integer",required:!0,constraint:"\u2265 1"},{name:"variantId",type:"string",required:!1,constraint:"1\u2013256"},{name:"amount",type:"number",required:!1,constraint:"\u2265 0"}],V=256,Ze=500,Ce=100,Ae=50,_e=3,Pe=16*1024,et=/(password|passcode|secret|token|api.?key|card.?number|cvv|cvc|security.?code|ssn|passport)/i,tt=Object.fromEntries(Object.entries(Ye).map(([e,o])=>[e,o.map(s=>s.name)]));function nt(e,o){let s=[];if(!B(o))return[{path:"properties",message:"must be an object"}];let r=o;for(let i of Object.keys(r))tt[e].includes(i)||s.push({path:`properties.${i}`,message:"is not a supported standard field; place extension data under custom"});return e==="wishlist_added"?(P(r,"productId",s,!r.catalogProductId,V),P(r,"listName",s,!1,V)):e==="product_view"||e==="add_to_cart"?(P(r,"productId",s,!r.catalogProductId,V),P(r,"variantId",s,!1,V),de(r,"amount",s,!1,!1),xe(r,s,!1),r.amount===void 0!=(r.currency===void 0)&&s.push({path:"properties.amount",message:"amount and currency must be provided together"}),e==="add_to_cart"&&ue(r,"quantity",s,!0,1)):e==="begin_checkout"?(P(r,"checkoutId",s,!0,V),de(r,"amount",s,!0,!1),xe(r,s,!0),!Array.isArray(r.items)||r.items.length<1||r.items.length>Ce?s.push({path:"properties.items",message:`must contain 1-${Ce} items`}):r.items.forEach((i,c)=>rt(i,c,s))):(P(r,"query",s,!0,Ze),ue(r,"resultsCount",s,!1,0)),["product_view","add_to_cart","wishlist_added"].includes(e)&&(P(r,"catalogProductId",s,!1,100),P(r,"catalogVariantId",s,!1,100),r.catalogVariantId&&!r.catalogProductId&&s.push({path:"properties.catalogVariantId",message:"requires catalogProductId"})),r.custom!==void 0&&st(r.custom,s),s}function Te(e,o){let s=nt(e,o);if(s.length)throw new ie(e,s);let r=o,i={};for(let c of["variantId","quantity","checkoutId","items","query","resultsCount","listName","custom"])r[c]!==void 0&&(i[c]=r[c]);return{...typeof r.productId=="string"?{productId:r.productId}:{},...typeof r.catalogProductId=="string"?{catalogProductId:r.catalogProductId}:{},...typeof r.catalogVariantId=="string"?{catalogVariantId:r.catalogVariantId}:{},...typeof r.amount=="number"?{amount:r.amount}:{},...typeof r.currency=="string"?{currency:r.currency}:{},properties:i}}var ie=class extends Error{constructor(s,r){super(`Invalid ${s} event: ${r.map(i=>`${i.path} ${i.message}`).join("; ")}`);this.eventName=s;this.issues=r;this.name="StandardEventValidationError"}eventName;issues};function rt(e,o,s){let r=`properties.items[${o}]`;if(!B(e)){s.push({path:r,message:"must be an object"});return}let i=e,c=Ge.map(d=>d.name);for(let d of Object.keys(i))c.includes(d)||s.push({path:`${r}.${d}`,message:"is not supported"});P(i,"productId",s,!i.catalogProductId,V,r),P(i,"catalogProductId",s,!1,100,r),P(i,"catalogVariantId",s,!1,100,r),i.catalogVariantId&&!i.catalogProductId&&s.push({path:`${r}.catalogVariantId`,message:"requires catalogProductId"}),P(i,"variantId",s,!1,V,r),ue(i,"quantity",s,!0,1,r),de(i,"amount",s,!1,!1,r)}function st(e,o){if(!B(e)){o.push({path:"properties.custom",message:"must be an object"});return}let s=e;Object.keys(s).length>Ae&&o.push({path:"properties.custom",message:`must contain at most ${Ae} top-level fields`}),ce(s,"properties.custom",1,o,new WeakSet);try{new TextEncoder().encode(JSON.stringify(s)).length>Pe&&o.push({path:"properties.custom",message:`must be at most ${Pe} bytes`})}catch{o.push({path:"properties.custom",message:"must be valid JSON data"})}}function ce(e,o,s,r,i){if(s>_e){r.push({path:o,message:`must not exceed ${_e} levels`});return}if(!(e===null||typeof e=="string"||typeof e=="boolean"||typeof e=="number"&&Number.isFinite(e))){if(typeof e=="object"&&e){if(i.has(e)){r.push({path:o,message:"must not contain circular references"});return}i.add(e)}if(Array.isArray(e)){e.forEach((c,d)=>ce(c,`${o}[${d}]`,s+1,r,i));return}if(B(e)){Object.entries(e).forEach(([c,d])=>{(c.startsWith("_")||c.toLowerCase().startsWith("sm_"))&&r.push({path:`${o}.${c}`,message:"uses a reserved prefix"}),et.test(c)&&r.push({path:`${o}.${c}`,message:"must not contain secrets or sensitive payment/identity data"}),ce(d,`${o}.${c}`,s+1,r,i)});return}r.push({path:o,message:"must contain JSON-compatible values only"})}}function B(e){if(!e||typeof e!="object"||Array.isArray(e))return!1;let o=Object.getPrototypeOf(e);return o===Object.prototype||o===null}function P(e,o,s,r,i,c="properties"){let d=e[o];if(d===void 0){r&&s.push({path:`${c}.${o}`,message:"is required"});return}(typeof d!="string"||d.length<1||d.length>i)&&s.push({path:`${c}.${o}`,message:`must be a string with 1-${i} characters`})}function de(e,o,s,r,i,c="properties"){let d=e[o];if(d===void 0){r&&s.push({path:`${c}.${o}`,message:"is required"});return}(typeof d!="number"||!Number.isFinite(d)||(i?d<=0:d<0))&&s.push({path:`${c}.${o}`,message:i?"must be a positive finite number":"must be a non-negative finite number"})}function ue(e,o,s,r,i,c="properties"){let d=e[o];if(d===void 0){r&&s.push({path:`${c}.${o}`,message:"is required"});return}(typeof d!="number"||!Number.isInteger(d)||d<i)&&s.push({path:`${c}.${o}`,message:`must be an integer greater than or equal to ${i}`})}function xe(e,o,s){let r=e.currency;if(r===void 0){s&&o.push({path:"properties.currency",message:"is required"});return}(typeof r!="string"||!/^[A-Z]{3}$/.test(r))&&o.push({path:"properties.currency",message:"must be a 3-letter uppercase currency code"})}var Me=1800*1e3,ot=1440*60*1e3,at=/\.(?:pdf|csv|docx?|xlsx?|pptx?|zip|rar|7z)(?:$|[?#])/i,O=Object.freeze({state:"disabled",consent:"unknown",queueLength:0,pageViewId:null});function qe(e,o=!1){let s=o?"robot_store":`sendermaster:${e.siteKey}`,r={anonymous:`${s}_anonymous_id`,session:`${s}_session`,consent:`${s}_consent`,queue:`${s}_event_queue`},i=new Map;function c(t){try{let n=localStorage.getItem(t);return n!==null&&i.set(t,n),n??i.get(t)??null}catch{return i.get(t)??null}}function d(t,n){i.set(t,n);try{localStorage.setItem(t,n)}catch{}}function g(t){i.delete(t);try{localStorage.removeItem(t)}catch{}}function E(t){try{return JSON.parse(c(t)??"null")}catch{return null}}let v=new Set,m={analytics:"unknown"},S={...O,state:e.enabled===!1||!e.siteKey?"disabled":"waiting_consent"},p=!1,h=0,N,$=!1,U,R=0,D=0,l,F=!1,Q=location.href,X=new WeakSet,L=new WeakMap,b=[],Y=[];function x(t={}){let n={...S,consent:m.analytics,queueLength:b.length,pageViewId:l?.id??null,...t};if(JSON.stringify(n)!==JSON.stringify(S)){S=Object.freeze(n);for(let a of v)try{a()}catch{}}}function M(t,n,a,u){let w=h,_=q=>{if(p&&h===w)try{a(q)}catch{}};t.addEventListener(n,_,u),Y.push(()=>t.removeEventListener(n,_,u))}function me(){return(e.apiHost??"https://api.sendermaster.com").replace(/\/$/,"")}function G(){let t=c(r.anonymous);return t||(t=crypto.randomUUID(),d(r.anonymous,t)),t}function Z(){let t=E(r.session);return t&&typeof t.id=="string"&&typeof t.lastActivityAt=="number"?t:void 0}function ee(){let t=Date.now(),n=Z();if(!n||t-n.lastActivityAt>=Me){let a={id:crypto.randomUUID(),lastActivityAt:t};return d(r.session,JSON.stringify(a)),a.id}return n.lastActivityAt=t,d(r.session,JSON.stringify(n)),n.id}function te(){let t=Date.now();b=b.filter(n=>n.siteKey===e.siteKey&&t-Date.parse(n.event.occurredAt)<ot&&Date.parse(n.event.occurredAt)<=t+6e4).slice(-100)}function H(){te(),d(r.queue,JSON.stringify(b)),x()}function $e(){let t=E(r.queue);Array.isArray(t)&&(b=t.flatMap(n=>{if(n?.event?.eventId&&typeof n.anonymousId=="string"&&typeof n.sessionId=="string")return[n];let a=c(r.anonymous),u=Z();return o&&n?.eventId&&a&&u?[{siteKey:e.siteKey,anonymousId:a,sessionId:u.id,event:n}]:[]}),te())}function ye(t){let n=new URL(t);return["email","token","password","access_token"].forEach(a=>n.searchParams.delete(a)),n.toString()}function he(t){try{return new URL(t).origin}catch{return}}function Re(){return{title:document.title.slice(0,512),language:navigator.language,screen:{width:screen.width,height:screen.height},utm:Object.fromEntries(["utm_source","utm_medium","utm_campaign"].flatMap(t=>{let n=new URL(location.href).searchParams.get(t);return n?[[t,n]]:[]}))}}function Oe(t=location.pathname){return e.pageRules?.find(n=>t.startsWith(n.pathPrefix))?.pageType}function be(){let t=document.documentElement.scrollHeight-innerHeight;return t>0?Math.min(100,Math.max(0,Math.round(scrollY/t*100))):0}function k(t,n={},a={}){if(!p)return;let{productId:u,catalogProductId:w,catalogVariantId:_,amount:q,currency:y,pageType:j,...K}=n,C={eventId:crypto.randomUUID(),name:t,occurredAt:new Date().toISOString(),url:a.url??ye(location.href),path:a.path??location.pathname,...he(document.referrer)?{referrer:he(document.referrer)}:{},...typeof u=="string"?{productId:u}:{},...typeof w=="string"?{catalogProductId:w}:{},...typeof _=="string"?{catalogVariantId:_}:{},...typeof q=="number"?{amount:q}:{},...typeof y=="string"?{currency:y}:{},pageType:a.pageType??(typeof j=="string"?j:l?.pageType),pageViewId:a.pageViewId??l?.id,...a.engagedTimeMsec?{engagedTimeMsec:a.engagedTimeMsec}:{},...Object.keys(K).length?{properties:K}:{},context:Re()};return b.push({siteKey:e.siteKey,anonymousId:G(),sessionId:ee(),event:JSON.parse(JSON.stringify(C))}),H(),b.length>=20&&W(),C.eventId}function De(t,n){if(S.state==="disabled")return{queued:!1,reason:"disabled"};if(m.analytics!=="granted")return{queued:!1,reason:"consent_required"};if(!p)return{queued:!1,reason:"unavailable"};try{let a=Te(t,n),u=k(t,{...a.properties,productId:a.productId,catalogProductId:a.catalogProductId,catalogVariantId:a.catalogVariantId,amount:a.amount,currency:a.currency});return u?{queued:!0,eventId:u}:{queued:!1,reason:"unavailable"}}catch(a){return{queued:!1,reason:"invalid_event",message:a instanceof Error?a.message:"Invalid event"}}}async function W(t=!1){if(!p||$||(te(),x(),!b.length||!t&&Date.now()<R))return;let n=b[0],a=b.filter(y=>y.siteKey===n.siteKey&&y.anonymousId===n.anonymousId&&y.sessionId===n.sessionId).slice(0,20),u=JSON.stringify({siteKey:n.siteKey,anonymousId:n.anonymousId,sessionId:n.sessionId,events:a.map(y=>y.event)}),w=`${me()}/v2/collect/events`;if(t)try{if(navigator.sendBeacon?.(w,new Blob([u],{type:"application/json"}))){H();return}}catch{}$=!0;let _=h,q=new AbortController;U=q;try{let y=await fetch(w,{method:"POST",headers:{"content-type":"application/json"},body:u,keepalive:!0,signal:q.signal});if(_!==h||!p)return;if(!y.ok){if(y.status===429||y.status>=500)throw new Error(`Collect HTTP ${y.status}`);let C=new Set(a.map(oe=>oe.event.eventId));b=b.filter(oe=>!C.has(oe.event.eventId)),H(),x({state:"error",error:`Collect HTTP ${y.status}: batch discarded`}),R=0,D=0;return}let j=await y.json();if(!Array.isArray(j.results))throw new Error("Collect response missing results");let K=new Set(j.results.filter(C=>C.status==="accepted"||C.status==="duplicate").map(C=>C.eventId));if(!a.every(C=>K.has(C.event.eventId)))throw new Error("Collect response incomplete");if(_!==h||!p)return;b=b.filter(C=>!K.has(C.event.eventId)),D=0,R=0,H(),x({state:"ready",error:void 0,lastDeliveredAt:new Date().toISOString()})}catch(y){if(_!==h||!p)return;D++,R=Date.now()+Math.min(6e4,3e3*2**Math.min(D-1,5)),x({error:y instanceof Error?y.message:"Collect unavailable"})}finally{_===h&&($=!1,U=void 0)}p&&b.length&&!R&&W()}function Ie(t,n){let a=JSON.stringify({siteKey:e.siteKey,anonymousId:n,analyticsAllowed:t.analytics==="granted",marketingAllowed:t.marketing??!1,source:t.source??"sdk",policyVersion:t.policyVersion});try{fetch(`${me()}/v2/collect/consent`,{method:"POST",headers:{"content-type":"application/json"},body:a,keepalive:!0}).then(u=>{if(!u.ok)throw new Error(`Consent HTTP ${u.status}`)}).catch(()=>{})}catch{}}function ve(){l={id:crypto.randomUUID(),url:ye(location.href),path:location.pathname,pageType:Oe(),enteredAt:new Date().toISOString(),visibleAt:document.visibilityState==="visible"?Date.now():0,activeMsec:0,reportedMsec:0,maxScrollPercent:be()},F=!1,k("page_view")}function Le(){!p||!l?.visibleAt||(l.activeMsec+=Date.now()-l.visibleAt,l.visibleAt=0)}function ne(t){if(!p||!l)return;Le();let n=l.activeMsec-l.reportedMsec;n<1e3||(l.reportedMsec=l.activeMsec,k("page_engagement",{pageViewId:l.id,maxScrollPercent:l.maxScrollPercent,enteredAt:l.enteredAt,exitReason:t},{pageType:l.pageType,pageViewId:l.id,engagedTimeMsec:n,url:l.url,path:l.path}))}function je(){p&&l&&!l.visibleAt&&(l.visibleAt=Date.now())}function Se(){!p||location.href===Q||(ne("navigation"),Q=location.href,ve())}function Ke(){let t=h,n=a=>{let u=history[a];history[a]=function(..._){let q=u.apply(this,_);return queueMicrotask(()=>{p&&h===t&&Se()}),q};let w=history[a];Y.push(()=>{history[a]===w&&(history[a]=u)})};n("pushState"),n("replaceState"),M(window,"popstate",Se)}function Ue(t){let n=We(t),a=Array.from(document.querySelectorAll("video")).indexOf(t);return{videoId:t.dataset.robotVideoId||t.id||n||`video:${location.pathname}:${a}`,videoTitle:t.dataset.robotVideoTitle||t.getAttribute("title")||void 0,productId:t.dataset.robotProductId||void 0,videoSrc:n}}function re(t,n,a){return{...Ue(t),watchedSeconds:Math.round(n.watchedSeconds*10)/10,durationSeconds:Math.round(t.duration*10)/10,...a!==void 0?{progressPercent:a}:{}}}function we(t,n){let a=Date.now(),u=t.currentTime-n.lastMediaTime,w=(a-n.lastWallTime)/1e3;u>0&&w>0&&u<=Math.max(3,w+1)&&(n.watchedSeconds+=Math.min(u,w+.5)),n.lastMediaTime=t.currentTime,n.lastWallTime=a}function Ee(t,n){if(!t.duration)return;let a=Math.min(100,Math.floor(t.currentTime/t.duration*100));for(let u of[25,50,75,100])a>=u&&!n.milestones.has(u)&&(n.milestones.add(u),k("video_progress",re(t,n,u)))}function He(){M(window,"scroll",()=>{l&&(l.maxScrollPercent=Math.max(l.maxScrollPercent,be()),!F&&l.maxScrollPercent>=90&&(F=!0,k("scroll",{percent:90})))},{passive:!0}),M(document,"focusin",t=>{let n=t.target?.closest("form");n&&!X.has(n)&&(X.add(n),k("form_start",{formId:n.id||void 0,formName:n.getAttribute("name")||void 0}))}),M(document,"submit",t=>{let n=t.target;n instanceof HTMLFormElement&&k("form_submitted",{formId:n.id||void 0,formName:n.getAttribute("name")||void 0})}),M(document,"click",t=>{let n=t.target?.closest("a[href]");if(!n)return;let a=n.href,u=n.origin!==location.origin;n.hasAttribute("download")||at.test(a)?k("file_download",{fileName:n.pathname.split("/").pop(),linkDomain:n.hostname||void 0}):(u||/^mailto:|^tel:/i.test(n.getAttribute("href")??""))&&k("click",{linkDomain:n.hostname||void 0,linkType:a.startsWith("mailto:")?"email":a.startsWith("tel:")?"phone":"outbound"})}),M(document,"play",t=>{let n=t.target;if(!(n instanceof HTMLVideoElement))return;let a=L.get(n);a||(a={milestones:new Set,watchedSeconds:0,lastMediaTime:n.currentTime,lastWallTime:Date.now(),started:!1},L.set(n,a)),a.started||(a.started=!0,k("video_start",re(n,a))),a.lastMediaTime=n.currentTime,a.lastWallTime=Date.now()},!0),M(document,"timeupdate",t=>{let n=t.target;if(!(n instanceof HTMLVideoElement))return;let a=L.get(n);a&&(we(n,a),Ee(n,a))},!0),M(document,"ended",t=>{let n=t.target;if(!(n instanceof HTMLVideoElement))return;let a=L.get(n);a&&(we(n,a),Ee(n,a),k("video_complete",re(n,a,100)))},!0),M(document,"visibilitychange",()=>{document.visibilityState==="hidden"?ne("hidden"):je()})}function We(t){try{return t.currentSrc?new URL(t.currentSrc).origin+new URL(t.currentSrc).pathname:void 0}catch{return}}function se(){if(!(p||S.state==="disabled"||m.analytics!=="granted"))try{let t=!c(r.anonymous),n=Z();$e(),G(),ee(),p=!0,h++,Q=location.href,X=new WeakSet,L=new WeakMap,ve(),t&&k("first_visit"),(!n||Date.now()-n.lastActivityAt>=Me)&&k("session_start"),He(),Ke(),M(window,"pagehide",()=>{ne("pagehide"),W(!0)}),N=window.setInterval(()=>{W()},3e3),x({state:"ready",error:void 0}),window.dispatchEvent(new Event("robot:ready"))}catch(t){J(!1),x({state:"error",error:t instanceof Error?t.message:"Initialization failed"})}}function J(t){p=!1,h++,U?.abort(),U=void 0,$=!1,N!==void 0&&window.clearInterval(N),N=void 0;for(let n of Y.splice(0).reverse())n();l=void 0,R=0,D=0,t&&(b=[],g(r.queue),g(r.anonymous),g(r.session),x({queueLength:0,pageViewId:null,lastDeliveredAt:void 0}))}function ke(t){if(S.state==="disabled")return;let n=JSON.stringify(m)!==JSON.stringify(t),a=p?c(r.anonymous):null;m={...t},o&&d(r.consent,JSON.stringify({...t,analytics:t.analytics==="granted"})),t.analytics!=="granted"?(J(t.analytics==="denied"||!!a),x({state:"waiting_consent",error:void 0}),n&&a&&Ie(t,a)):(se(),n&&p&&Ie(t,G()))}return{track:De,setConsent:ke,start:se,resetIdentity:()=>{S.state!=="disabled"&&(J(!0),x({queueLength:0,pageViewId:null,lastDeliveredAt:void 0,error:void 0}),m.analytics==="granted"&&se())},restoreLegacyConsent:()=>{o&&m.analytics==="unknown"&&E(r.consent)?.analytics===!0&&ke({...E(r.consent),analytics:"granted"})},getStatus:()=>S,subscribe:t=>(v.add(t),()=>{v.delete(t)}),getAnonymousId:()=>p?c(r.anonymous):null,getSessionId:()=>p?ee():null,destroy:()=>{J(!1),m={analytics:"unknown"},x({state:"disabled"}),v.clear()}}}function z({cookieName:e,changeEvent:o="sendermaster:consent-change",grantedValue:s="granted",deniedValue:r="denied",maxAgeDays:i=365}){if(!/^[\w.-]+$/.test(e))throw new Error("Invalid consent cookie name");return{getSnapshot(){if(typeof document>"u")return"unknown";try{let c=document.cookie.split(";").find(g=>g.trim().startsWith(`${e}=`)),d=c?decodeURIComponent(c.trim().slice(e.length+1)):"";return d===s?"granted":d===r?"denied":"unknown"}catch{return"unknown"}},subscribe(c){if(typeof window>"u")return()=>{};let d=()=>c();return window.addEventListener(o,d),window.addEventListener("focus",d),document.addEventListener("visibilitychange",d),()=>{window.removeEventListener(o,d),window.removeEventListener("focus",d),document.removeEventListener("visibilitychange",d)}},setConsent(c){if(typeof document>"u")return;let d=c==="granted"?s:r;document.cookie=`${e}=${c==="unknown"?"":encodeURIComponent(d)}; Path=/; Max-Age=${c==="unknown"?0:Math.max(0,Math.floor(i*86400))}; SameSite=Lax${location.protocol==="https:"?"; Secure":""}`,window.dispatchEvent(new Event(o))}}}var it=Symbol.for("sendermaster.browser.v1");function A(){if(typeof window>"u")return;let e=window;return e[it]||={subscribers:new Set}}function Ne(e,o){let s=A();if(!s)return O;let r={...e,siteKey:e.siteKey?.trim()||"",apiHost:(e.apiHost||"https://api.sendermaster.com").replace(/\/$/,""),enabled:e.enabled!==!1},i=JSON.stringify(r);if(s.client&&s.fingerprint===i)return s.client.getStatus();s.client?.destroy(),s.fingerprint=i,s.client=qe(r,o),s.client.subscribe(()=>{for(let c of s.subscribers)try{c()}catch{}});for(let c of s.subscribers)try{c()}catch{}return s.client.getStatus()}var I={init:e=>Ne(e,!1),setConsent:e=>A()?.client?.setConsent(e),track(e,o){return A()?.client?.track(e,o)??{queued:!1,reason:"disabled"}},async trackAfterSuccess(e,o){let s=A()?.client,r=s?.getAnonymousId(),i=!!r&&s?.getStatus().consent==="granted",c=await e();if(i&&A()?.client===s&&s?.getAnonymousId()===r&&s.getStatus().consent==="granted")try{let d=o(c);for(let g of Array.isArray(d)?d:[d])I.track(g.name,g.properties)}catch{}return c},trackSearch(e,o={}){let s=e.trim();return!s||s.length>500||o.filterPersonalData!==!1&&/@|(?:\d[\s()+-]*){7,}/.test(s)?{queued:!1,reason:"invalid_event",message:"Search is empty, too long or contains personal data"}:I.track("search",{query:s,...o.custom?{custom:o.custom}:{}})},resetIdentity:()=>A()?.client?.resetIdentity(),getStatus:()=>A()?.client?.getStatus()??O,subscribe(e){let o=A();return o?(o.subscribers.add(e),()=>{o.subscribers.delete(e)}):()=>{}},getAnonymousId:()=>A()?.client?.getAnonymousId()??null,getSessionId:()=>A()?.client?.getSessionId()??null,destroy(){let e=A();if(e){e.client?.destroy(),e.client=void 0,e.fingerprint=void 0;for(let o of e.subscribers)try{o()}catch{}}}};function ct(e){Ne(e,!0);let o={start:()=>A()?.client?.start(),track:I.track,setConsent:s=>I.setConsent({...s,analytics:s.analytics?"granted":"denied"}),getAnonymousId:I.getAnonymousId,getSessionId:I.getSessionId};return window.robot=o,A()?.client?.restoreLegacyConsent(),o}function dt(e){if(typeof e!="string"&&typeof e!="number")return;let o=String(e).trim();return o&&o!=="0"&&o.length<=256?o:void 0}function ut(e){if(e==null||e===""||typeof e=="boolean")return;let o=Number(e);return Number.isFinite(o)&&o>=0?o:void 0}var T=require("react/jsx-runtime"),fe=(0,f.createContext)(null),le=0,pe=0;function lt({children:e,analyticsConsent:o,consentAdapter:s,marketingConsent:r=!1,consentSource:i="react",policyVersion:c,...d}){let g=JSON.stringify(d),E=(0,f.useMemo)(()=>z({cookieName:`sendermaster_consent_${Array.from(d.siteKey||"").map(m=>m.charCodeAt(0).toString(16)).join("_")||"default"}`}),[d.siteKey]),v=o===void 0?s??E:void 0;return(0,f.useEffect)(()=>(le++,pe++,()=>{le--;let m=++pe;queueMicrotask(()=>{!le&&m===pe&&I.destroy()})}),[]),(0,f.useEffect)(()=>{I.init(JSON.parse(g));let m=()=>{let S=o??"unknown";try{v&&(S=v.getSnapshot())}catch{}I.setConsent({analytics:S,marketing:r,source:i,policyVersion:c})};return m(),v?.subscribe(m)},[g,v,o,r,i,c]),(0,T.jsx)(fe.Provider,{value:{adapter:v},children:e})}function ge(){let e=(0,f.useSyncExternalStore)(I.subscribe,I.getStatus,()=>O);return{...I,status:e}}function Ve(e,o,s,r,i){let c=(0,f.useContext)(fe),{status:d}=ge(),g=(0,f.useRef)(""),E=i?d.pageViewId:"",v=JSON.stringify(o);(0,f.useEffect)(()=>{if(!r){g.current="";return}if(!c||d.state!=="ready"||!s||!o)return;let m=`${E}:${s}`;g.current!==m&&I.track(e,o).queued&&(g.current=m)},[c,d.state,E,s,r,v])}function pt(e,{viewKey:o="",active:s=!0}={}){Ve("product_view",e,`${o}:${e?.productId??e?.catalogProductId??""}:${e?.variantId??e?.catalogVariantId??""}`,s,!0)}function ft(e,{checkoutKey:o,active:s=!0}={}){let{status:r}=ge(),[i,c]=(0,f.useState)(""),d=(0,f.useRef)("");(0,f.useEffect)(()=>{d.current||=crypto.randomUUID(),c(d.current)},[]);let g=o||e?.checkoutId||(i&&r.pageViewId?`${i}:${r.pageViewId}`:""),E=e&&g?{...e,checkoutId:e.checkoutId||g}:null;Ve("begin_checkout",E,g,s,!1)}function gt({privacyPolicyUrl:e,labels:o,className:s,style:r}){let c=(0,f.useContext)(fe)?.adapter,d=()=>()=>{},g=(0,f.useSyncExternalStore)(c?.subscribe??d,c?.getSnapshot??(()=>"unknown"),()=>"unknown"),[E,v]=(0,f.useState)(!1),[m,S]=(0,f.useState)(!1);if((0,f.useEffect)(()=>{v(!0)},[]),!E||!c?.setConsent)return null;let p=$=>{c.setConsent?.($),S(!1)},h={message:"With your permission, analytics cookies help us understand how you use this website.",accept:"Accept",reject:"Reject",settings:"Cookie settings",privacyPolicy:"Privacy policy",...o},N={padding:"8px 14px",border:"1px solid #777",borderRadius:4,background:"#fff",color:"#222",cursor:"pointer",font:"inherit"};return(0,T.jsx)("div",{className:s,style:{position:"fixed",bottom:12,left:12,right:g==="unknown"||m?12:void 0,zIndex:1e3,...r},children:g==="unknown"||m?(0,T.jsxs)("section",{role:"region","aria-label":"Cookie preferences",style:{padding:16,background:"#fff",color:"#222",border:"1px solid #ccc",borderRadius:6,font:"14px/1.5 sans-serif"},children:[(0,T.jsxs)("p",{children:[h.message," ",e&&(0,T.jsx)("a",{href:e,children:h.privacyPolicy})]}),(0,T.jsxs)("div",{style:{display:"flex",flexWrap:"wrap",gap:8},children:[(0,T.jsx)("button",{type:"button",style:N,onClick:()=>p("granted"),children:h.accept}),(0,T.jsx)("button",{type:"button",style:N,onClick:()=>p("denied"),children:h.reject})]})]}):(0,T.jsx)("button",{type:"button",style:N,onClick:()=>S(!0),children:h.settings})})}
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- "use client";import{createContext as at,useContext as Ve,useEffect as K,useMemo as it,useRef as $e,useState as pe,useSyncExternalStore as Re}from"react";var Qe={product_view:[{name:"catalogProductId",type:"string",required:!1,constraint:"1\u2013100; current-site catalog ID"},{name:"catalogVariantId",type:"string",required:!1,constraint:"1\u2013100; requires catalogProductId"},{name:"productId",type:"string",required:!1,constraint:"1\u2013256; required unless catalogProductId is provided"},{name:"variantId",type:"string",required:!1,constraint:"1\u2013256"},{name:"amount",type:"number",required:!1,constraint:"\u2265 0; requires currency"},{name:"currency",type:"string",required:!1,constraint:"3 uppercase letters; requires amount"},{name:"custom",type:"object",required:!1,constraint:"\u2264 50 fields / 3 levels / 16 KB"}],add_to_cart:[{name:"catalogProductId",type:"string",required:!1,constraint:"1\u2013100; current-site catalog ID"},{name:"catalogVariantId",type:"string",required:!1,constraint:"1\u2013100; requires catalogProductId"},{name:"productId",type:"string",required:!1,constraint:"1\u2013256; required unless catalogProductId is provided"},{name:"quantity",type:"integer",required:!0,constraint:"\u2265 1"},{name:"variantId",type:"string",required:!1,constraint:"1\u2013256"},{name:"amount",type:"number",required:!1,constraint:"\u2265 0; requires currency"},{name:"currency",type:"string",required:!1,constraint:"3 uppercase letters; requires amount"},{name:"custom",type:"object",required:!1,constraint:"\u2264 50 fields / 3 levels / 16 KB"}],begin_checkout:[{name:"checkoutId",type:"string",required:!0,constraint:"1\u2013256"},{name:"items",type:"array",required:!0,constraint:"1\u2013100 items"},{name:"amount",type:"number",required:!0,constraint:"\u2265 0"},{name:"currency",type:"string",required:!0,constraint:"3 uppercase letters"},{name:"custom",type:"object",required:!1,constraint:"\u2264 50 fields / 3 levels / 16 KB"}],search:[{name:"query",type:"string",required:!0,constraint:"1\u2013500"},{name:"resultsCount",type:"integer",required:!1,constraint:"\u2265 0"},{name:"custom",type:"object",required:!1,constraint:"\u2264 50 fields / 3 levels / 16 KB"}],wishlist_added:[{name:"catalogProductId",type:"string",required:!1,constraint:"1\u2013100; current-site catalog ID"},{name:"catalogVariantId",type:"string",required:!1,constraint:"1\u2013100; requires catalogProductId"},{name:"productId",type:"string",required:!1,constraint:"1\u2013256; required unless catalogProductId is provided"},{name:"listName",type:"string",required:!1,constraint:"1\u2013256"},{name:"custom",type:"object",required:!1,constraint:"\u2264 50 fields / 3 levels / 16 KB"}]},Xe=[{name:"catalogProductId",type:"string",required:!1,constraint:"1\u2013100; current-site catalog ID"},{name:"catalogVariantId",type:"string",required:!1,constraint:"1\u2013100; requires catalogProductId"},{name:"productId",type:"string",required:!1,constraint:"1\u2013256; required unless catalogProductId is provided"},{name:"quantity",type:"integer",required:!0,constraint:"\u2265 1"},{name:"variantId",type:"string",required:!1,constraint:"1\u2013256"},{name:"amount",type:"number",required:!1,constraint:"\u2265 0"}],q=256,Ye=500,Ce=100,Ae=50,_e=3,Pe=16*1024,Ge=/(password|passcode|secret|token|api.?key|card.?number|cvv|cvc|security.?code|ssn|passport)/i,Ze=Object.fromEntries(Object.entries(Qe).map(([t,o])=>[t,o.map(s=>s.name)]));function et(t,o){let s=[];if(!J(o))return[{path:"properties",message:"must be an object"}];let r=o;for(let d of Object.keys(r))Ze[t].includes(d)||s.push({path:`properties.${d}`,message:"is not a supported standard field; place extension data under custom"});return t==="wishlist_added"?(A(r,"productId",s,!r.catalogProductId,q),A(r,"listName",s,!1,q)):t==="product_view"||t==="add_to_cart"?(A(r,"productId",s,!r.catalogProductId,q),A(r,"variantId",s,!1,q),ae(r,"amount",s,!1,!1),xe(r,s,!1),r.amount===void 0!=(r.currency===void 0)&&s.push({path:"properties.amount",message:"amount and currency must be provided together"}),t==="add_to_cart"&&ie(r,"quantity",s,!0,1)):t==="begin_checkout"?(A(r,"checkoutId",s,!0,q),ae(r,"amount",s,!0,!1),xe(r,s,!0),!Array.isArray(r.items)||r.items.length<1||r.items.length>Ce?s.push({path:"properties.items",message:`must contain 1-${Ce} items`}):r.items.forEach((d,i)=>tt(d,i,s))):(A(r,"query",s,!0,Ye),ie(r,"resultsCount",s,!1,0)),["product_view","add_to_cart","wishlist_added"].includes(t)&&(A(r,"catalogProductId",s,!1,100),A(r,"catalogVariantId",s,!1,100),r.catalogVariantId&&!r.catalogProductId&&s.push({path:"properties.catalogVariantId",message:"requires catalogProductId"})),r.custom!==void 0&&nt(r.custom,s),s}function Te(t,o){let s=et(t,o);if(s.length)throw new se(t,s);let r=o,d={};for(let i of["variantId","quantity","checkoutId","items","query","resultsCount","listName","custom"])r[i]!==void 0&&(d[i]=r[i]);return{...typeof r.productId=="string"?{productId:r.productId}:{},...typeof r.catalogProductId=="string"?{catalogProductId:r.catalogProductId}:{},...typeof r.catalogVariantId=="string"?{catalogVariantId:r.catalogVariantId}:{},...typeof r.amount=="number"?{amount:r.amount}:{},...typeof r.currency=="string"?{currency:r.currency}:{},properties:d}}var se=class extends Error{constructor(s,r){super(`Invalid ${s} event: ${r.map(d=>`${d.path} ${d.message}`).join("; ")}`);this.eventName=s;this.issues=r;this.name="StandardEventValidationError"}eventName;issues};function tt(t,o,s){let r=`properties.items[${o}]`;if(!J(t)){s.push({path:r,message:"must be an object"});return}let d=t,i=Xe.map(c=>c.name);for(let c of Object.keys(d))i.includes(c)||s.push({path:`${r}.${c}`,message:"is not supported"});A(d,"productId",s,!d.catalogProductId,q,r),A(d,"catalogProductId",s,!1,100,r),A(d,"catalogVariantId",s,!1,100,r),d.catalogVariantId&&!d.catalogProductId&&s.push({path:`${r}.catalogVariantId`,message:"requires catalogProductId"}),A(d,"variantId",s,!1,q,r),ie(d,"quantity",s,!0,1,r),ae(d,"amount",s,!1,!1,r)}function nt(t,o){if(!J(t)){o.push({path:"properties.custom",message:"must be an object"});return}let s=t;Object.keys(s).length>Ae&&o.push({path:"properties.custom",message:`must contain at most ${Ae} top-level fields`}),oe(s,"properties.custom",1,o,new WeakSet);try{new TextEncoder().encode(JSON.stringify(s)).length>Pe&&o.push({path:"properties.custom",message:`must be at most ${Pe} bytes`})}catch{o.push({path:"properties.custom",message:"must be valid JSON data"})}}function oe(t,o,s,r,d){if(s>_e){r.push({path:o,message:`must not exceed ${_e} levels`});return}if(!(t===null||typeof t=="string"||typeof t=="boolean"||typeof t=="number"&&Number.isFinite(t))){if(typeof t=="object"&&t){if(d.has(t)){r.push({path:o,message:"must not contain circular references"});return}d.add(t)}if(Array.isArray(t)){t.forEach((i,c)=>oe(i,`${o}[${c}]`,s+1,r,d));return}if(J(t)){Object.entries(t).forEach(([i,c])=>{(i.startsWith("_")||i.toLowerCase().startsWith("sm_"))&&r.push({path:`${o}.${i}`,message:"uses a reserved prefix"}),Ge.test(i)&&r.push({path:`${o}.${i}`,message:"must not contain secrets or sensitive payment/identity data"}),oe(c,`${o}.${i}`,s+1,r,d)});return}r.push({path:o,message:"must contain JSON-compatible values only"})}}function J(t){if(!t||typeof t!="object"||Array.isArray(t))return!1;let o=Object.getPrototypeOf(t);return o===Object.prototype||o===null}function A(t,o,s,r,d,i="properties"){let c=t[o];if(c===void 0){r&&s.push({path:`${i}.${o}`,message:"is required"});return}(typeof c!="string"||c.length<1||c.length>d)&&s.push({path:`${i}.${o}`,message:`must be a string with 1-${d} characters`})}function ae(t,o,s,r,d,i="properties"){let c=t[o];if(c===void 0){r&&s.push({path:`${i}.${o}`,message:"is required"});return}(typeof c!="number"||!Number.isFinite(c)||(d?c<=0:c<0))&&s.push({path:`${i}.${o}`,message:d?"must be a positive finite number":"must be a non-negative finite number"})}function ie(t,o,s,r,d,i="properties"){let c=t[o];if(c===void 0){r&&s.push({path:`${i}.${o}`,message:"is required"});return}(typeof c!="number"||!Number.isInteger(c)||c<d)&&s.push({path:`${i}.${o}`,message:`must be an integer greater than or equal to ${d}`})}function xe(t,o,s){let r=t.currency;if(r===void 0){s&&o.push({path:"properties.currency",message:"is required"});return}(typeof r!="string"||!/^[A-Z]{3}$/.test(r))&&o.push({path:"properties.currency",message:"must be a 3-letter uppercase currency code"})}var Me=1800*1e3,rt=1440*60*1e3,st=/\.(?:pdf|csv|docx?|xlsx?|pptx?|zip|rar|7z)(?:$|[?#])/i,$=Object.freeze({state:"disabled",consent:"unknown",queueLength:0,pageViewId:null});function qe(t,o=!1){let s=o?"robot_store":`sendermaster:${t.siteKey}`,r={anonymous:`${s}_anonymous_id`,session:`${s}_session`,consent:`${s}_consent`,queue:`${s}_event_queue`},d=new Map;function i(e){try{let n=localStorage.getItem(e);return n!==null&&d.set(e,n),n??d.get(e)??null}catch{return d.get(e)??null}}function c(e,n){d.set(e,n);try{localStorage.setItem(e,n)}catch{}}function f(e){d.delete(e);try{localStorage.removeItem(e)}catch{}}function S(e){try{return JSON.parse(i(e)??"null")}catch{return null}}let b=new Set,g={analytics:"unknown"},w={...$,state:t.enabled===!1||!t.siteKey?"disabled":"waiting_consent"},p=!1,y=0,M,N=!1,U,V=0,O=0,l,B=!1,z=location.href,F=new WeakSet,D=new WeakMap,h=[],Q=[];function x(e={}){let n={...w,consent:g.analytics,queueLength:h.length,pageViewId:l?.id??null,...e};if(JSON.stringify(n)!==JSON.stringify(w)){w=Object.freeze(n);for(let a of b)try{a()}catch{}}}function P(e,n,a,u){let I=y,C=T=>{if(p&&y===I)try{a(T)}catch{}};e.addEventListener(n,C,u),Q.push(()=>e.removeEventListener(n,C,u))}function ge(){return(t.apiHost??"https://api.sendermaster.com").replace(/\/$/,"")}function X(){let e=i(r.anonymous);return e||(e=crypto.randomUUID(),c(r.anonymous,e)),e}function Y(){let e=S(r.session);return e&&typeof e.id=="string"&&typeof e.lastActivityAt=="number"?e:void 0}function G(){let e=Date.now(),n=Y();if(!n||e-n.lastActivityAt>=Me){let a={id:crypto.randomUUID(),lastActivityAt:e};return c(r.session,JSON.stringify(a)),a.id}return n.lastActivityAt=e,c(r.session,JSON.stringify(n)),n.id}function Z(){let e=Date.now();h=h.filter(n=>n.siteKey===t.siteKey&&e-Date.parse(n.event.occurredAt)<rt&&Date.parse(n.event.occurredAt)<=e+6e4).slice(-100)}function H(){Z(),c(r.queue,JSON.stringify(h)),x()}function Le(){let e=S(r.queue);Array.isArray(e)&&(h=e.flatMap(n=>{if(n?.event?.eventId&&typeof n.anonymousId=="string"&&typeof n.sessionId=="string")return[n];let a=i(r.anonymous),u=Y();return o&&n?.eventId&&a&&u?[{siteKey:t.siteKey,anonymousId:a,sessionId:u.id,event:n}]:[]}),Z())}function me(e){let n=new URL(e);return["email","token","password","access_token"].forEach(a=>n.searchParams.delete(a)),n.toString()}function ye(e){try{return new URL(e).origin}catch{return}}function je(){return{title:document.title.slice(0,512),language:navigator.language,screen:{width:screen.width,height:screen.height},utm:Object.fromEntries(["utm_source","utm_medium","utm_campaign"].flatMap(e=>{let n=new URL(location.href).searchParams.get(e);return n?[[e,n]]:[]}))}}function Ke(e=location.pathname){return t.pageRules?.find(n=>e.startsWith(n.pathPrefix))?.pageType}function he(){let e=document.documentElement.scrollHeight-innerHeight;return e>0?Math.min(100,Math.max(0,Math.round(scrollY/e*100))):0}function E(e,n={},a={}){if(!p)return;let{productId:u,catalogProductId:I,catalogVariantId:C,amount:T,currency:m,pageType:L,...j}=n,k={eventId:crypto.randomUUID(),name:e,occurredAt:new Date().toISOString(),url:a.url??me(location.href),path:a.path??location.pathname,...ye(document.referrer)?{referrer:ye(document.referrer)}:{},...typeof u=="string"?{productId:u}:{},...typeof I=="string"?{catalogProductId:I}:{},...typeof C=="string"?{catalogVariantId:C}:{},...typeof T=="number"?{amount:T}:{},...typeof m=="string"?{currency:m}:{},pageType:a.pageType??(typeof L=="string"?L:l?.pageType),pageViewId:a.pageViewId??l?.id,...a.engagedTimeMsec?{engagedTimeMsec:a.engagedTimeMsec}:{},...Object.keys(j).length?{properties:j}:{},context:je()};return h.push({siteKey:t.siteKey,anonymousId:X(),sessionId:G(),event:JSON.parse(JSON.stringify(k))}),H(),h.length>=20&&W(),k.eventId}function Ue(e,n){if(w.state==="disabled")return{queued:!1,reason:"disabled"};if(g.analytics!=="granted")return{queued:!1,reason:"consent_required"};if(!p)return{queued:!1,reason:"unavailable"};try{let a=Te(e,n),u=E(e,{...a.properties,productId:a.productId,catalogProductId:a.catalogProductId,catalogVariantId:a.catalogVariantId,amount:a.amount,currency:a.currency});return u?{queued:!0,eventId:u}:{queued:!1,reason:"unavailable"}}catch(a){return{queued:!1,reason:"invalid_event",message:a instanceof Error?a.message:"Invalid event"}}}async function W(e=!1){if(!p||N||(Z(),x(),!h.length||!e&&Date.now()<V))return;let n=h[0],a=h.filter(m=>m.siteKey===n.siteKey&&m.anonymousId===n.anonymousId&&m.sessionId===n.sessionId).slice(0,20),u=JSON.stringify({siteKey:n.siteKey,anonymousId:n.anonymousId,sessionId:n.sessionId,events:a.map(m=>m.event)}),I=`${ge()}/v2/collect/events`;if(e)try{if(navigator.sendBeacon?.(I,new Blob([u],{type:"application/json"}))){H();return}}catch{}N=!0;let C=y,T=new AbortController;U=T;try{let m=await fetch(I,{method:"POST",headers:{"content-type":"application/json"},body:u,keepalive:!0,signal:T.signal});if(C!==y||!p)return;if(!m.ok){if(m.status===429||m.status>=500)throw new Error(`Collect HTTP ${m.status}`);let k=new Set(a.map(re=>re.event.eventId));h=h.filter(re=>!k.has(re.event.eventId)),H(),x({state:"error",error:`Collect HTTP ${m.status}: batch discarded`}),V=0,O=0;return}let L=await m.json();if(!Array.isArray(L.results))throw new Error("Collect response missing results");let j=new Set(L.results.filter(k=>k.status==="accepted"||k.status==="duplicate").map(k=>k.eventId));if(!a.every(k=>j.has(k.event.eventId)))throw new Error("Collect response incomplete");if(C!==y||!p)return;h=h.filter(k=>!j.has(k.event.eventId)),O=0,V=0,H(),x({state:"ready",error:void 0,lastDeliveredAt:new Date().toISOString()})}catch(m){if(C!==y||!p)return;O++,V=Date.now()+Math.min(6e4,3e3*2**Math.min(O-1,5)),x({error:m instanceof Error?m.message:"Collect unavailable"})}finally{C===y&&(N=!1,U=void 0)}p&&h.length&&!V&&W()}function be(e,n){let a=JSON.stringify({siteKey:t.siteKey,anonymousId:n,analyticsAllowed:e.analytics==="granted",marketingAllowed:e.marketing??!1,source:e.source??"sdk",policyVersion:e.policyVersion});try{fetch(`${ge()}/v2/collect/consent`,{method:"POST",headers:{"content-type":"application/json"},body:a,keepalive:!0}).then(u=>{if(!u.ok)throw new Error(`Consent HTTP ${u.status}`)}).catch(()=>{})}catch{}}function Ie(){l={id:crypto.randomUUID(),url:me(location.href),path:location.pathname,pageType:Ke(),enteredAt:new Date().toISOString(),visibleAt:document.visibilityState==="visible"?Date.now():0,activeMsec:0,reportedMsec:0,maxScrollPercent:he()},B=!1,E("page_view")}function He(){!p||!l?.visibleAt||(l.activeMsec+=Date.now()-l.visibleAt,l.visibleAt=0)}function ee(e){if(!p||!l)return;He();let n=l.activeMsec-l.reportedMsec;n<1e3||(l.reportedMsec=l.activeMsec,E("page_engagement",{pageViewId:l.id,maxScrollPercent:l.maxScrollPercent,enteredAt:l.enteredAt,exitReason:e},{pageType:l.pageType,pageViewId:l.id,engagedTimeMsec:n,url:l.url,path:l.path}))}function We(){p&&l&&!l.visibleAt&&(l.visibleAt=Date.now())}function ve(){!p||location.href===z||(ee("navigation"),z=location.href,Ie())}function Je(){let e=y,n=a=>{let u=history[a];history[a]=function(...C){let T=u.apply(this,C);return queueMicrotask(()=>{p&&y===e&&ve()}),T};let I=history[a];Q.push(()=>{history[a]===I&&(history[a]=u)})};n("pushState"),n("replaceState"),P(window,"popstate",ve)}function Be(e){let n=Fe(e),a=Array.from(document.querySelectorAll("video")).indexOf(e);return{videoId:e.dataset.robotVideoId||e.id||n||`video:${location.pathname}:${a}`,videoTitle:e.dataset.robotVideoTitle||e.getAttribute("title")||void 0,productId:e.dataset.robotProductId||void 0,videoSrc:n}}function te(e,n,a){return{...Be(e),watchedSeconds:Math.round(n.watchedSeconds*10)/10,durationSeconds:Math.round(e.duration*10)/10,...a!==void 0?{progressPercent:a}:{}}}function Se(e,n){let a=Date.now(),u=e.currentTime-n.lastMediaTime,I=(a-n.lastWallTime)/1e3;u>0&&I>0&&u<=Math.max(3,I+1)&&(n.watchedSeconds+=Math.min(u,I+.5)),n.lastMediaTime=e.currentTime,n.lastWallTime=a}function we(e,n){if(!e.duration)return;let a=Math.min(100,Math.floor(e.currentTime/e.duration*100));for(let u of[25,50,75,100])a>=u&&!n.milestones.has(u)&&(n.milestones.add(u),E("video_progress",te(e,n,u)))}function ze(){P(window,"scroll",()=>{l&&(l.maxScrollPercent=Math.max(l.maxScrollPercent,he()),!B&&l.maxScrollPercent>=90&&(B=!0,E("scroll",{percent:90})))},{passive:!0}),P(document,"focusin",e=>{let n=e.target?.closest("form");n&&!F.has(n)&&(F.add(n),E("form_start",{formId:n.id||void 0,formName:n.getAttribute("name")||void 0}))}),P(document,"submit",e=>{let n=e.target;n instanceof HTMLFormElement&&E("form_submitted",{formId:n.id||void 0,formName:n.getAttribute("name")||void 0})}),P(document,"click",e=>{let n=e.target?.closest("a[href]");if(!n)return;let a=n.href,u=n.origin!==location.origin;n.hasAttribute("download")||st.test(a)?E("file_download",{fileName:n.pathname.split("/").pop(),linkDomain:n.hostname||void 0}):(u||/^mailto:|^tel:/i.test(n.getAttribute("href")??""))&&E("click",{linkDomain:n.hostname||void 0,linkType:a.startsWith("mailto:")?"email":a.startsWith("tel:")?"phone":"outbound"})}),P(document,"play",e=>{let n=e.target;if(!(n instanceof HTMLVideoElement))return;let a=D.get(n);a||(a={milestones:new Set,watchedSeconds:0,lastMediaTime:n.currentTime,lastWallTime:Date.now(),started:!1},D.set(n,a)),a.started||(a.started=!0,E("video_start",te(n,a))),a.lastMediaTime=n.currentTime,a.lastWallTime=Date.now()},!0),P(document,"timeupdate",e=>{let n=e.target;if(!(n instanceof HTMLVideoElement))return;let a=D.get(n);a&&(Se(n,a),we(n,a))},!0),P(document,"ended",e=>{let n=e.target;if(!(n instanceof HTMLVideoElement))return;let a=D.get(n);a&&(Se(n,a),we(n,a),E("video_complete",te(n,a,100)))},!0),P(document,"visibilitychange",()=>{document.visibilityState==="hidden"?ee("hidden"):We()})}function Fe(e){try{return e.currentSrc?new URL(e.currentSrc).origin+new URL(e.currentSrc).pathname:void 0}catch{return}}function Ee(){if(!(p||w.state==="disabled"||g.analytics!=="granted"))try{let e=!i(r.anonymous),n=Y();Le(),X(),G(),p=!0,y++,z=location.href,F=new WeakSet,D=new WeakMap,Ie(),e&&E("first_visit"),(!n||Date.now()-n.lastActivityAt>=Me)&&E("session_start"),ze(),Je(),P(window,"pagehide",()=>{ee("pagehide"),W(!0)}),M=window.setInterval(()=>{W()},3e3),x({state:"ready",error:void 0}),window.dispatchEvent(new Event("robot:ready"))}catch(e){ne(!1),x({state:"error",error:e instanceof Error?e.message:"Initialization failed"})}}function ne(e){p=!1,y++,U?.abort(),U=void 0,N=!1,M!==void 0&&window.clearInterval(M),M=void 0;for(let n of Q.splice(0).reverse())n();l=void 0,V=0,O=0,e&&(h=[],f(r.queue),f(r.anonymous),f(r.session))}function ke(e){if(w.state==="disabled")return;let n=JSON.stringify(g)!==JSON.stringify(e),a=p?i(r.anonymous):null;g={...e},o&&c(r.consent,JSON.stringify({...e,analytics:e.analytics==="granted"})),e.analytics!=="granted"?(ne(e.analytics==="denied"||!!a),x({state:"waiting_consent",error:void 0}),n&&a&&be(e,a)):(Ee(),n&&p&&be(e,X()))}return{track:Ue,setConsent:ke,start:Ee,restoreLegacyConsent:()=>{o&&g.analytics==="unknown"&&S(r.consent)?.analytics===!0&&ke({...S(r.consent),analytics:"granted"})},getStatus:()=>w,subscribe:e=>(b.add(e),()=>{b.delete(e)}),getAnonymousId:()=>p?i(r.anonymous):null,getSessionId:()=>p?G():null,destroy:()=>{ne(!1),g={analytics:"unknown"},x({state:"disabled"}),b.clear()}}}function ce({cookieName:t,changeEvent:o="sendermaster:consent-change",grantedValue:s="granted",deniedValue:r="denied",maxAgeDays:d=365}){if(!/^[\w.-]+$/.test(t))throw new Error("Invalid consent cookie name");return{getSnapshot(){if(typeof document>"u")return"unknown";try{let i=document.cookie.split(";").find(f=>f.trim().startsWith(`${t}=`)),c=i?decodeURIComponent(i.trim().slice(t.length+1)):"";return c===s?"granted":c===r?"denied":"unknown"}catch{return"unknown"}},subscribe(i){if(typeof window>"u")return()=>{};let c=()=>i();return window.addEventListener(o,c),window.addEventListener("focus",c),document.addEventListener("visibilitychange",c),()=>{window.removeEventListener(o,c),window.removeEventListener("focus",c),document.removeEventListener("visibilitychange",c)}},setConsent(i){if(typeof document>"u")return;let c=i==="granted"?s:r;document.cookie=`${t}=${i==="unknown"?"":encodeURIComponent(c)}; Path=/; Max-Age=${i==="unknown"?0:Math.max(0,Math.floor(d*86400))}; SameSite=Lax${location.protocol==="https:"?"; Secure":""}`,window.dispatchEvent(new Event(o))}}}var ot=Symbol.for("sendermaster.browser.v1");function _(){if(typeof window>"u")return;let t=window;return t[ot]||={subscribers:new Set}}function Ne(t,o){let s=_();if(!s)return $;let r={...t,siteKey:t.siteKey?.trim()||"",apiHost:(t.apiHost||"https://api.sendermaster.com").replace(/\/$/,""),enabled:t.enabled!==!1},d=JSON.stringify(r);if(s.client&&s.fingerprint===d)return s.client.getStatus();s.client?.destroy(),s.fingerprint=d,s.client=qe(r,o),s.client.subscribe(()=>{for(let i of s.subscribers)try{i()}catch{}});for(let i of s.subscribers)try{i()}catch{}return s.client.getStatus()}var v={init:t=>Ne(t,!1),setConsent:t=>_()?.client?.setConsent(t),track(t,o){return _()?.client?.track(t,o)??{queued:!1,reason:"disabled"}},async trackAfterSuccess(t,o){let s=_()?.client,r=s?.getAnonymousId(),d=!!r&&s?.getStatus().consent==="granted",i=await t();if(d&&_()?.client===s&&s?.getAnonymousId()===r&&s.getStatus().consent==="granted")try{let c=o(i);for(let f of Array.isArray(c)?c:[c])v.track(f.name,f.properties)}catch{}return i},trackSearch(t,o={}){let s=t.trim();return!s||s.length>500||o.filterPersonalData!==!1&&/@|(?:\d[\s()+-]*){7,}/.test(s)?{queued:!1,reason:"invalid_event",message:"Search is empty, too long or contains personal data"}:v.track("search",{query:s,...o.custom?{custom:o.custom}:{}})},getStatus:()=>_()?.client?.getStatus()??$,subscribe(t){let o=_();return o?(o.subscribers.add(t),()=>{o.subscribers.delete(t)}):()=>{}},getAnonymousId:()=>_()?.client?.getAnonymousId()??null,getSessionId:()=>_()?.client?.getSessionId()??null,destroy(){let t=_();if(t){t.client?.destroy(),t.client=void 0,t.fingerprint=void 0;for(let o of t.subscribers)try{o()}catch{}}}};function gt(t){Ne(t,!0);let o={start:()=>_()?.client?.start(),track:v.track,setConsent:s=>v.setConsent({...s,analytics:s.analytics?"granted":"denied"}),getAnonymousId:v.getAnonymousId,getSessionId:v.getSessionId};return window.robot=o,_()?.client?.restoreLegacyConsent(),o}function mt(t){if(typeof t!="string"&&typeof t!="number")return;let o=String(t).trim();return o&&o!=="0"&&o.length<=256?o:void 0}function yt(t){if(t==null||t===""||typeof t=="boolean")return;let o=Number(t);return Number.isFinite(o)&&o>=0?o:void 0}import{jsx as R,jsxs as le}from"react/jsx-runtime";var fe=at(null),de=0,ue=0;function wt({children:t,analyticsConsent:o,consentAdapter:s,marketingConsent:r=!1,consentSource:d="react",policyVersion:i,...c}){let f=JSON.stringify(c),S=it(()=>ce({cookieName:`sendermaster_consent_${Array.from(c.siteKey||"").map(g=>g.charCodeAt(0).toString(16)).join("_")||"default"}`}),[c.siteKey]),b=o===void 0?s??S:void 0;return K(()=>(de++,ue++,()=>{de--;let g=++ue;queueMicrotask(()=>{!de&&g===ue&&v.destroy()})}),[]),K(()=>{v.init(JSON.parse(f));let g=()=>{let w=o??"unknown";try{b&&(w=b.getSnapshot())}catch{}v.setConsent({analytics:w,marketing:r,source:d,policyVersion:i})};return g(),b?.subscribe(g)},[f,b,o,r,d,i]),R(fe.Provider,{value:{adapter:b},children:t})}function Oe(){let t=Re(v.subscribe,v.getStatus,()=>$);return{...v,status:t}}function De(t,o,s,r,d){let i=Ve(fe),{status:c}=Oe(),f=$e(""),S=d?c.pageViewId:"",b=JSON.stringify(o);K(()=>{if(!r){f.current="";return}if(!i||c.state!=="ready"||!s||!o)return;let g=`${S}:${s}`;f.current!==g&&v.track(t,o).queued&&(f.current=g)},[i,c.state,S,s,r,b])}function Et(t,{viewKey:o="",active:s=!0}={}){De("product_view",t,`${o}:${t?.productId??t?.catalogProductId??""}:${t?.variantId??t?.catalogVariantId??""}`,s,!0)}function kt(t,{checkoutKey:o,active:s=!0}={}){let{status:r}=Oe(),[d,i]=pe(""),c=$e("");K(()=>{c.current||=crypto.randomUUID(),i(c.current)},[]);let f=o||t?.checkoutId||(d&&r.pageViewId?`${d}:${r.pageViewId}`:""),S=t&&f?{...t,checkoutId:t.checkoutId||f}:null;De("begin_checkout",S,f,s,!1)}function Ct({privacyPolicyUrl:t,labels:o,className:s,style:r}){let i=Ve(fe)?.adapter,c=()=>()=>{},f=Re(i?.subscribe??c,i?.getSnapshot??(()=>"unknown"),()=>"unknown"),[S,b]=pe(!1),[g,w]=pe(!1);if(K(()=>{b(!0)},[]),!S||!i?.setConsent)return null;let p=N=>{i.setConsent?.(N),w(!1)},y={message:"With your permission, analytics cookies help us understand how you use this website.",accept:"Accept",reject:"Reject",settings:"Cookie settings",privacyPolicy:"Privacy policy",...o},M={padding:"8px 14px",border:"1px solid #777",borderRadius:4,background:"#fff",color:"#222",cursor:"pointer",font:"inherit"};return R("div",{className:s,style:{position:"fixed",bottom:12,left:12,right:f==="unknown"||g?12:void 0,zIndex:1e3,...r},children:f==="unknown"||g?le("section",{role:"region","aria-label":"Cookie preferences",style:{padding:16,background:"#fff",color:"#222",border:"1px solid #ccc",borderRadius:6,font:"14px/1.5 sans-serif"},children:[le("p",{children:[y.message," ",t&&R("a",{href:t,children:y.privacyPolicy})]}),le("div",{style:{display:"flex",flexWrap:"wrap",gap:8},children:[R("button",{type:"button",style:M,onClick:()=>p("granted"),children:y.accept}),R("button",{type:"button",style:M,onClick:()=>p("denied"),children:y.reject})]})]}):R("button",{type:"button",style:M,onClick:()=>w(!0),children:y.settings})})}export{Ct as SenderMasterConsentBanner,wt as SenderMasterProvider,ce as createCookieConsentAdapter,gt as installLegacyPixel,v as senderMaster,yt as toAmount,mt as toId,kt as useBeginCheckout,Et as useProductView,Oe as useSenderMaster};
2
+ "use client";import{createContext as at,useContext as Ve,useEffect as K,useMemo as it,useRef as $e,useState as fe,useSyncExternalStore as Re}from"react";var Qe={product_view:[{name:"catalogProductId",type:"string",required:!1,constraint:"1\u2013100; current-site catalog ID"},{name:"catalogVariantId",type:"string",required:!1,constraint:"1\u2013100; requires catalogProductId"},{name:"productId",type:"string",required:!1,constraint:"1\u2013256; required unless catalogProductId is provided"},{name:"variantId",type:"string",required:!1,constraint:"1\u2013256"},{name:"amount",type:"number",required:!1,constraint:"\u2265 0; requires currency"},{name:"currency",type:"string",required:!1,constraint:"3 uppercase letters; requires amount"},{name:"custom",type:"object",required:!1,constraint:"\u2264 50 fields / 3 levels / 16 KB"}],add_to_cart:[{name:"catalogProductId",type:"string",required:!1,constraint:"1\u2013100; current-site catalog ID"},{name:"catalogVariantId",type:"string",required:!1,constraint:"1\u2013100; requires catalogProductId"},{name:"productId",type:"string",required:!1,constraint:"1\u2013256; required unless catalogProductId is provided"},{name:"quantity",type:"integer",required:!0,constraint:"\u2265 1"},{name:"variantId",type:"string",required:!1,constraint:"1\u2013256"},{name:"amount",type:"number",required:!1,constraint:"\u2265 0; requires currency"},{name:"currency",type:"string",required:!1,constraint:"3 uppercase letters; requires amount"},{name:"custom",type:"object",required:!1,constraint:"\u2264 50 fields / 3 levels / 16 KB"}],begin_checkout:[{name:"checkoutId",type:"string",required:!0,constraint:"1\u2013256"},{name:"items",type:"array",required:!0,constraint:"1\u2013100 items"},{name:"amount",type:"number",required:!0,constraint:"\u2265 0"},{name:"currency",type:"string",required:!0,constraint:"3 uppercase letters"},{name:"custom",type:"object",required:!1,constraint:"\u2264 50 fields / 3 levels / 16 KB"}],search:[{name:"query",type:"string",required:!0,constraint:"1\u2013500"},{name:"resultsCount",type:"integer",required:!1,constraint:"\u2265 0"},{name:"custom",type:"object",required:!1,constraint:"\u2264 50 fields / 3 levels / 16 KB"}],wishlist_added:[{name:"catalogProductId",type:"string",required:!1,constraint:"1\u2013100; current-site catalog ID"},{name:"catalogVariantId",type:"string",required:!1,constraint:"1\u2013100; requires catalogProductId"},{name:"productId",type:"string",required:!1,constraint:"1\u2013256; required unless catalogProductId is provided"},{name:"listName",type:"string",required:!1,constraint:"1\u2013256"},{name:"custom",type:"object",required:!1,constraint:"\u2264 50 fields / 3 levels / 16 KB"}]},Xe=[{name:"catalogProductId",type:"string",required:!1,constraint:"1\u2013100; current-site catalog ID"},{name:"catalogVariantId",type:"string",required:!1,constraint:"1\u2013100; requires catalogProductId"},{name:"productId",type:"string",required:!1,constraint:"1\u2013256; required unless catalogProductId is provided"},{name:"quantity",type:"integer",required:!0,constraint:"\u2265 1"},{name:"variantId",type:"string",required:!1,constraint:"1\u2013256"},{name:"amount",type:"number",required:!1,constraint:"\u2265 0"}],q=256,Ye=500,Ce=100,Ae=50,_e=3,Pe=16*1024,Ge=/(password|passcode|secret|token|api.?key|card.?number|cvv|cvc|security.?code|ssn|passport)/i,Ze=Object.fromEntries(Object.entries(Qe).map(([t,o])=>[t,o.map(s=>s.name)]));function et(t,o){let s=[];if(!B(o))return[{path:"properties",message:"must be an object"}];let r=o;for(let d of Object.keys(r))Ze[t].includes(d)||s.push({path:`properties.${d}`,message:"is not a supported standard field; place extension data under custom"});return t==="wishlist_added"?(_(r,"productId",s,!r.catalogProductId,q),_(r,"listName",s,!1,q)):t==="product_view"||t==="add_to_cart"?(_(r,"productId",s,!r.catalogProductId,q),_(r,"variantId",s,!1,q),ie(r,"amount",s,!1,!1),xe(r,s,!1),r.amount===void 0!=(r.currency===void 0)&&s.push({path:"properties.amount",message:"amount and currency must be provided together"}),t==="add_to_cart"&&ce(r,"quantity",s,!0,1)):t==="begin_checkout"?(_(r,"checkoutId",s,!0,q),ie(r,"amount",s,!0,!1),xe(r,s,!0),!Array.isArray(r.items)||r.items.length<1||r.items.length>Ce?s.push({path:"properties.items",message:`must contain 1-${Ce} items`}):r.items.forEach((d,i)=>tt(d,i,s))):(_(r,"query",s,!0,Ye),ce(r,"resultsCount",s,!1,0)),["product_view","add_to_cart","wishlist_added"].includes(t)&&(_(r,"catalogProductId",s,!1,100),_(r,"catalogVariantId",s,!1,100),r.catalogVariantId&&!r.catalogProductId&&s.push({path:"properties.catalogVariantId",message:"requires catalogProductId"})),r.custom!==void 0&&nt(r.custom,s),s}function Te(t,o){let s=et(t,o);if(s.length)throw new oe(t,s);let r=o,d={};for(let i of["variantId","quantity","checkoutId","items","query","resultsCount","listName","custom"])r[i]!==void 0&&(d[i]=r[i]);return{...typeof r.productId=="string"?{productId:r.productId}:{},...typeof r.catalogProductId=="string"?{catalogProductId:r.catalogProductId}:{},...typeof r.catalogVariantId=="string"?{catalogVariantId:r.catalogVariantId}:{},...typeof r.amount=="number"?{amount:r.amount}:{},...typeof r.currency=="string"?{currency:r.currency}:{},properties:d}}var oe=class extends Error{constructor(s,r){super(`Invalid ${s} event: ${r.map(d=>`${d.path} ${d.message}`).join("; ")}`);this.eventName=s;this.issues=r;this.name="StandardEventValidationError"}eventName;issues};function tt(t,o,s){let r=`properties.items[${o}]`;if(!B(t)){s.push({path:r,message:"must be an object"});return}let d=t,i=Xe.map(c=>c.name);for(let c of Object.keys(d))i.includes(c)||s.push({path:`${r}.${c}`,message:"is not supported"});_(d,"productId",s,!d.catalogProductId,q,r),_(d,"catalogProductId",s,!1,100,r),_(d,"catalogVariantId",s,!1,100,r),d.catalogVariantId&&!d.catalogProductId&&s.push({path:`${r}.catalogVariantId`,message:"requires catalogProductId"}),_(d,"variantId",s,!1,q,r),ce(d,"quantity",s,!0,1,r),ie(d,"amount",s,!1,!1,r)}function nt(t,o){if(!B(t)){o.push({path:"properties.custom",message:"must be an object"});return}let s=t;Object.keys(s).length>Ae&&o.push({path:"properties.custom",message:`must contain at most ${Ae} top-level fields`}),ae(s,"properties.custom",1,o,new WeakSet);try{new TextEncoder().encode(JSON.stringify(s)).length>Pe&&o.push({path:"properties.custom",message:`must be at most ${Pe} bytes`})}catch{o.push({path:"properties.custom",message:"must be valid JSON data"})}}function ae(t,o,s,r,d){if(s>_e){r.push({path:o,message:`must not exceed ${_e} levels`});return}if(!(t===null||typeof t=="string"||typeof t=="boolean"||typeof t=="number"&&Number.isFinite(t))){if(typeof t=="object"&&t){if(d.has(t)){r.push({path:o,message:"must not contain circular references"});return}d.add(t)}if(Array.isArray(t)){t.forEach((i,c)=>ae(i,`${o}[${c}]`,s+1,r,d));return}if(B(t)){Object.entries(t).forEach(([i,c])=>{(i.startsWith("_")||i.toLowerCase().startsWith("sm_"))&&r.push({path:`${o}.${i}`,message:"uses a reserved prefix"}),Ge.test(i)&&r.push({path:`${o}.${i}`,message:"must not contain secrets or sensitive payment/identity data"}),ae(c,`${o}.${i}`,s+1,r,d)});return}r.push({path:o,message:"must contain JSON-compatible values only"})}}function B(t){if(!t||typeof t!="object"||Array.isArray(t))return!1;let o=Object.getPrototypeOf(t);return o===Object.prototype||o===null}function _(t,o,s,r,d,i="properties"){let c=t[o];if(c===void 0){r&&s.push({path:`${i}.${o}`,message:"is required"});return}(typeof c!="string"||c.length<1||c.length>d)&&s.push({path:`${i}.${o}`,message:`must be a string with 1-${d} characters`})}function ie(t,o,s,r,d,i="properties"){let c=t[o];if(c===void 0){r&&s.push({path:`${i}.${o}`,message:"is required"});return}(typeof c!="number"||!Number.isFinite(c)||(d?c<=0:c<0))&&s.push({path:`${i}.${o}`,message:d?"must be a positive finite number":"must be a non-negative finite number"})}function ce(t,o,s,r,d,i="properties"){let c=t[o];if(c===void 0){r&&s.push({path:`${i}.${o}`,message:"is required"});return}(typeof c!="number"||!Number.isInteger(c)||c<d)&&s.push({path:`${i}.${o}`,message:`must be an integer greater than or equal to ${d}`})}function xe(t,o,s){let r=t.currency;if(r===void 0){s&&o.push({path:"properties.currency",message:"is required"});return}(typeof r!="string"||!/^[A-Z]{3}$/.test(r))&&o.push({path:"properties.currency",message:"must be a 3-letter uppercase currency code"})}var Me=1800*1e3,rt=1440*60*1e3,st=/\.(?:pdf|csv|docx?|xlsx?|pptx?|zip|rar|7z)(?:$|[?#])/i,$=Object.freeze({state:"disabled",consent:"unknown",queueLength:0,pageViewId:null});function qe(t,o=!1){let s=o?"robot_store":`sendermaster:${t.siteKey}`,r={anonymous:`${s}_anonymous_id`,session:`${s}_session`,consent:`${s}_consent`,queue:`${s}_event_queue`},d=new Map;function i(e){try{let n=localStorage.getItem(e);return n!==null&&d.set(e,n),n??d.get(e)??null}catch{return d.get(e)??null}}function c(e,n){d.set(e,n);try{localStorage.setItem(e,n)}catch{}}function f(e){d.delete(e);try{localStorage.removeItem(e)}catch{}}function w(e){try{return JSON.parse(i(e)??"null")}catch{return null}}let b=new Set,g={analytics:"unknown"},I={...$,state:t.enabled===!1||!t.siteKey?"disabled":"waiting_consent"},p=!1,y=0,M,N=!1,U,V=0,O=0,l,z=!1,F=location.href,Q=new WeakSet,D=new WeakMap,h=[],X=[];function P(e={}){let n={...I,consent:g.analytics,queueLength:h.length,pageViewId:l?.id??null,...e};if(JSON.stringify(n)!==JSON.stringify(I)){I=Object.freeze(n);for(let a of b)try{a()}catch{}}}function x(e,n,a,u){let v=y,A=T=>{if(p&&y===v)try{a(T)}catch{}};e.addEventListener(n,A,u),X.push(()=>e.removeEventListener(n,A,u))}function me(){return(t.apiHost??"https://api.sendermaster.com").replace(/\/$/,"")}function Y(){let e=i(r.anonymous);return e||(e=crypto.randomUUID(),c(r.anonymous,e)),e}function G(){let e=w(r.session);return e&&typeof e.id=="string"&&typeof e.lastActivityAt=="number"?e:void 0}function Z(){let e=Date.now(),n=G();if(!n||e-n.lastActivityAt>=Me){let a={id:crypto.randomUUID(),lastActivityAt:e};return c(r.session,JSON.stringify(a)),a.id}return n.lastActivityAt=e,c(r.session,JSON.stringify(n)),n.id}function ee(){let e=Date.now();h=h.filter(n=>n.siteKey===t.siteKey&&e-Date.parse(n.event.occurredAt)<rt&&Date.parse(n.event.occurredAt)<=e+6e4).slice(-100)}function H(){ee(),c(r.queue,JSON.stringify(h)),P()}function Le(){let e=w(r.queue);Array.isArray(e)&&(h=e.flatMap(n=>{if(n?.event?.eventId&&typeof n.anonymousId=="string"&&typeof n.sessionId=="string")return[n];let a=i(r.anonymous),u=G();return o&&n?.eventId&&a&&u?[{siteKey:t.siteKey,anonymousId:a,sessionId:u.id,event:n}]:[]}),ee())}function ye(e){let n=new URL(e);return["email","token","password","access_token"].forEach(a=>n.searchParams.delete(a)),n.toString()}function he(e){try{return new URL(e).origin}catch{return}}function je(){return{title:document.title.slice(0,512),language:navigator.language,screen:{width:screen.width,height:screen.height},utm:Object.fromEntries(["utm_source","utm_medium","utm_campaign"].flatMap(e=>{let n=new URL(location.href).searchParams.get(e);return n?[[e,n]]:[]}))}}function Ke(e=location.pathname){return t.pageRules?.find(n=>e.startsWith(n.pathPrefix))?.pageType}function be(){let e=document.documentElement.scrollHeight-innerHeight;return e>0?Math.min(100,Math.max(0,Math.round(scrollY/e*100))):0}function E(e,n={},a={}){if(!p)return;let{productId:u,catalogProductId:v,catalogVariantId:A,amount:T,currency:m,pageType:L,...j}=n,k={eventId:crypto.randomUUID(),name:e,occurredAt:new Date().toISOString(),url:a.url??ye(location.href),path:a.path??location.pathname,...he(document.referrer)?{referrer:he(document.referrer)}:{},...typeof u=="string"?{productId:u}:{},...typeof v=="string"?{catalogProductId:v}:{},...typeof A=="string"?{catalogVariantId:A}:{},...typeof T=="number"?{amount:T}:{},...typeof m=="string"?{currency:m}:{},pageType:a.pageType??(typeof L=="string"?L:l?.pageType),pageViewId:a.pageViewId??l?.id,...a.engagedTimeMsec?{engagedTimeMsec:a.engagedTimeMsec}:{},...Object.keys(j).length?{properties:j}:{},context:je()};return h.push({siteKey:t.siteKey,anonymousId:Y(),sessionId:Z(),event:JSON.parse(JSON.stringify(k))}),H(),h.length>=20&&W(),k.eventId}function Ue(e,n){if(I.state==="disabled")return{queued:!1,reason:"disabled"};if(g.analytics!=="granted")return{queued:!1,reason:"consent_required"};if(!p)return{queued:!1,reason:"unavailable"};try{let a=Te(e,n),u=E(e,{...a.properties,productId:a.productId,catalogProductId:a.catalogProductId,catalogVariantId:a.catalogVariantId,amount:a.amount,currency:a.currency});return u?{queued:!0,eventId:u}:{queued:!1,reason:"unavailable"}}catch(a){return{queued:!1,reason:"invalid_event",message:a instanceof Error?a.message:"Invalid event"}}}async function W(e=!1){if(!p||N||(ee(),P(),!h.length||!e&&Date.now()<V))return;let n=h[0],a=h.filter(m=>m.siteKey===n.siteKey&&m.anonymousId===n.anonymousId&&m.sessionId===n.sessionId).slice(0,20),u=JSON.stringify({siteKey:n.siteKey,anonymousId:n.anonymousId,sessionId:n.sessionId,events:a.map(m=>m.event)}),v=`${me()}/v2/collect/events`;if(e)try{if(navigator.sendBeacon?.(v,new Blob([u],{type:"application/json"}))){H();return}}catch{}N=!0;let A=y,T=new AbortController;U=T;try{let m=await fetch(v,{method:"POST",headers:{"content-type":"application/json"},body:u,keepalive:!0,signal:T.signal});if(A!==y||!p)return;if(!m.ok){if(m.status===429||m.status>=500)throw new Error(`Collect HTTP ${m.status}`);let k=new Set(a.map(se=>se.event.eventId));h=h.filter(se=>!k.has(se.event.eventId)),H(),P({state:"error",error:`Collect HTTP ${m.status}: batch discarded`}),V=0,O=0;return}let L=await m.json();if(!Array.isArray(L.results))throw new Error("Collect response missing results");let j=new Set(L.results.filter(k=>k.status==="accepted"||k.status==="duplicate").map(k=>k.eventId));if(!a.every(k=>j.has(k.event.eventId)))throw new Error("Collect response incomplete");if(A!==y||!p)return;h=h.filter(k=>!j.has(k.event.eventId)),O=0,V=0,H(),P({state:"ready",error:void 0,lastDeliveredAt:new Date().toISOString()})}catch(m){if(A!==y||!p)return;O++,V=Date.now()+Math.min(6e4,3e3*2**Math.min(O-1,5)),P({error:m instanceof Error?m.message:"Collect unavailable"})}finally{A===y&&(N=!1,U=void 0)}p&&h.length&&!V&&W()}function Ie(e,n){let a=JSON.stringify({siteKey:t.siteKey,anonymousId:n,analyticsAllowed:e.analytics==="granted",marketingAllowed:e.marketing??!1,source:e.source??"sdk",policyVersion:e.policyVersion});try{fetch(`${me()}/v2/collect/consent`,{method:"POST",headers:{"content-type":"application/json"},body:a,keepalive:!0}).then(u=>{if(!u.ok)throw new Error(`Consent HTTP ${u.status}`)}).catch(()=>{})}catch{}}function ve(){l={id:crypto.randomUUID(),url:ye(location.href),path:location.pathname,pageType:Ke(),enteredAt:new Date().toISOString(),visibleAt:document.visibilityState==="visible"?Date.now():0,activeMsec:0,reportedMsec:0,maxScrollPercent:be()},z=!1,E("page_view")}function He(){!p||!l?.visibleAt||(l.activeMsec+=Date.now()-l.visibleAt,l.visibleAt=0)}function te(e){if(!p||!l)return;He();let n=l.activeMsec-l.reportedMsec;n<1e3||(l.reportedMsec=l.activeMsec,E("page_engagement",{pageViewId:l.id,maxScrollPercent:l.maxScrollPercent,enteredAt:l.enteredAt,exitReason:e},{pageType:l.pageType,pageViewId:l.id,engagedTimeMsec:n,url:l.url,path:l.path}))}function We(){p&&l&&!l.visibleAt&&(l.visibleAt=Date.now())}function Se(){!p||location.href===F||(te("navigation"),F=location.href,ve())}function Je(){let e=y,n=a=>{let u=history[a];history[a]=function(...A){let T=u.apply(this,A);return queueMicrotask(()=>{p&&y===e&&Se()}),T};let v=history[a];X.push(()=>{history[a]===v&&(history[a]=u)})};n("pushState"),n("replaceState"),x(window,"popstate",Se)}function Be(e){let n=Fe(e),a=Array.from(document.querySelectorAll("video")).indexOf(e);return{videoId:e.dataset.robotVideoId||e.id||n||`video:${location.pathname}:${a}`,videoTitle:e.dataset.robotVideoTitle||e.getAttribute("title")||void 0,productId:e.dataset.robotProductId||void 0,videoSrc:n}}function ne(e,n,a){return{...Be(e),watchedSeconds:Math.round(n.watchedSeconds*10)/10,durationSeconds:Math.round(e.duration*10)/10,...a!==void 0?{progressPercent:a}:{}}}function we(e,n){let a=Date.now(),u=e.currentTime-n.lastMediaTime,v=(a-n.lastWallTime)/1e3;u>0&&v>0&&u<=Math.max(3,v+1)&&(n.watchedSeconds+=Math.min(u,v+.5)),n.lastMediaTime=e.currentTime,n.lastWallTime=a}function Ee(e,n){if(!e.duration)return;let a=Math.min(100,Math.floor(e.currentTime/e.duration*100));for(let u of[25,50,75,100])a>=u&&!n.milestones.has(u)&&(n.milestones.add(u),E("video_progress",ne(e,n,u)))}function ze(){x(window,"scroll",()=>{l&&(l.maxScrollPercent=Math.max(l.maxScrollPercent,be()),!z&&l.maxScrollPercent>=90&&(z=!0,E("scroll",{percent:90})))},{passive:!0}),x(document,"focusin",e=>{let n=e.target?.closest("form");n&&!Q.has(n)&&(Q.add(n),E("form_start",{formId:n.id||void 0,formName:n.getAttribute("name")||void 0}))}),x(document,"submit",e=>{let n=e.target;n instanceof HTMLFormElement&&E("form_submitted",{formId:n.id||void 0,formName:n.getAttribute("name")||void 0})}),x(document,"click",e=>{let n=e.target?.closest("a[href]");if(!n)return;let a=n.href,u=n.origin!==location.origin;n.hasAttribute("download")||st.test(a)?E("file_download",{fileName:n.pathname.split("/").pop(),linkDomain:n.hostname||void 0}):(u||/^mailto:|^tel:/i.test(n.getAttribute("href")??""))&&E("click",{linkDomain:n.hostname||void 0,linkType:a.startsWith("mailto:")?"email":a.startsWith("tel:")?"phone":"outbound"})}),x(document,"play",e=>{let n=e.target;if(!(n instanceof HTMLVideoElement))return;let a=D.get(n);a||(a={milestones:new Set,watchedSeconds:0,lastMediaTime:n.currentTime,lastWallTime:Date.now(),started:!1},D.set(n,a)),a.started||(a.started=!0,E("video_start",ne(n,a))),a.lastMediaTime=n.currentTime,a.lastWallTime=Date.now()},!0),x(document,"timeupdate",e=>{let n=e.target;if(!(n instanceof HTMLVideoElement))return;let a=D.get(n);a&&(we(n,a),Ee(n,a))},!0),x(document,"ended",e=>{let n=e.target;if(!(n instanceof HTMLVideoElement))return;let a=D.get(n);a&&(we(n,a),Ee(n,a),E("video_complete",ne(n,a,100)))},!0),x(document,"visibilitychange",()=>{document.visibilityState==="hidden"?te("hidden"):We()})}function Fe(e){try{return e.currentSrc?new URL(e.currentSrc).origin+new URL(e.currentSrc).pathname:void 0}catch{return}}function re(){if(!(p||I.state==="disabled"||g.analytics!=="granted"))try{let e=!i(r.anonymous),n=G();Le(),Y(),Z(),p=!0,y++,F=location.href,Q=new WeakSet,D=new WeakMap,ve(),e&&E("first_visit"),(!n||Date.now()-n.lastActivityAt>=Me)&&E("session_start"),ze(),Je(),x(window,"pagehide",()=>{te("pagehide"),W(!0)}),M=window.setInterval(()=>{W()},3e3),P({state:"ready",error:void 0}),window.dispatchEvent(new Event("robot:ready"))}catch(e){J(!1),P({state:"error",error:e instanceof Error?e.message:"Initialization failed"})}}function J(e){p=!1,y++,U?.abort(),U=void 0,N=!1,M!==void 0&&window.clearInterval(M),M=void 0;for(let n of X.splice(0).reverse())n();l=void 0,V=0,O=0,e&&(h=[],f(r.queue),f(r.anonymous),f(r.session),P({queueLength:0,pageViewId:null,lastDeliveredAt:void 0}))}function ke(e){if(I.state==="disabled")return;let n=JSON.stringify(g)!==JSON.stringify(e),a=p?i(r.anonymous):null;g={...e},o&&c(r.consent,JSON.stringify({...e,analytics:e.analytics==="granted"})),e.analytics!=="granted"?(J(e.analytics==="denied"||!!a),P({state:"waiting_consent",error:void 0}),n&&a&&Ie(e,a)):(re(),n&&p&&Ie(e,Y()))}return{track:Ue,setConsent:ke,start:re,resetIdentity:()=>{I.state!=="disabled"&&(J(!0),P({queueLength:0,pageViewId:null,lastDeliveredAt:void 0,error:void 0}),g.analytics==="granted"&&re())},restoreLegacyConsent:()=>{o&&g.analytics==="unknown"&&w(r.consent)?.analytics===!0&&ke({...w(r.consent),analytics:"granted"})},getStatus:()=>I,subscribe:e=>(b.add(e),()=>{b.delete(e)}),getAnonymousId:()=>p?i(r.anonymous):null,getSessionId:()=>p?Z():null,destroy:()=>{J(!1),g={analytics:"unknown"},P({state:"disabled"}),b.clear()}}}function de({cookieName:t,changeEvent:o="sendermaster:consent-change",grantedValue:s="granted",deniedValue:r="denied",maxAgeDays:d=365}){if(!/^[\w.-]+$/.test(t))throw new Error("Invalid consent cookie name");return{getSnapshot(){if(typeof document>"u")return"unknown";try{let i=document.cookie.split(";").find(f=>f.trim().startsWith(`${t}=`)),c=i?decodeURIComponent(i.trim().slice(t.length+1)):"";return c===s?"granted":c===r?"denied":"unknown"}catch{return"unknown"}},subscribe(i){if(typeof window>"u")return()=>{};let c=()=>i();return window.addEventListener(o,c),window.addEventListener("focus",c),document.addEventListener("visibilitychange",c),()=>{window.removeEventListener(o,c),window.removeEventListener("focus",c),document.removeEventListener("visibilitychange",c)}},setConsent(i){if(typeof document>"u")return;let c=i==="granted"?s:r;document.cookie=`${t}=${i==="unknown"?"":encodeURIComponent(c)}; Path=/; Max-Age=${i==="unknown"?0:Math.max(0,Math.floor(d*86400))}; SameSite=Lax${location.protocol==="https:"?"; Secure":""}`,window.dispatchEvent(new Event(o))}}}var ot=Symbol.for("sendermaster.browser.v1");function C(){if(typeof window>"u")return;let t=window;return t[ot]||={subscribers:new Set}}function Ne(t,o){let s=C();if(!s)return $;let r={...t,siteKey:t.siteKey?.trim()||"",apiHost:(t.apiHost||"https://api.sendermaster.com").replace(/\/$/,""),enabled:t.enabled!==!1},d=JSON.stringify(r);if(s.client&&s.fingerprint===d)return s.client.getStatus();s.client?.destroy(),s.fingerprint=d,s.client=qe(r,o),s.client.subscribe(()=>{for(let i of s.subscribers)try{i()}catch{}});for(let i of s.subscribers)try{i()}catch{}return s.client.getStatus()}var S={init:t=>Ne(t,!1),setConsent:t=>C()?.client?.setConsent(t),track(t,o){return C()?.client?.track(t,o)??{queued:!1,reason:"disabled"}},async trackAfterSuccess(t,o){let s=C()?.client,r=s?.getAnonymousId(),d=!!r&&s?.getStatus().consent==="granted",i=await t();if(d&&C()?.client===s&&s?.getAnonymousId()===r&&s.getStatus().consent==="granted")try{let c=o(i);for(let f of Array.isArray(c)?c:[c])S.track(f.name,f.properties)}catch{}return i},trackSearch(t,o={}){let s=t.trim();return!s||s.length>500||o.filterPersonalData!==!1&&/@|(?:\d[\s()+-]*){7,}/.test(s)?{queued:!1,reason:"invalid_event",message:"Search is empty, too long or contains personal data"}:S.track("search",{query:s,...o.custom?{custom:o.custom}:{}})},resetIdentity:()=>C()?.client?.resetIdentity(),getStatus:()=>C()?.client?.getStatus()??$,subscribe(t){let o=C();return o?(o.subscribers.add(t),()=>{o.subscribers.delete(t)}):()=>{}},getAnonymousId:()=>C()?.client?.getAnonymousId()??null,getSessionId:()=>C()?.client?.getSessionId()??null,destroy(){let t=C();if(t){t.client?.destroy(),t.client=void 0,t.fingerprint=void 0;for(let o of t.subscribers)try{o()}catch{}}}};function gt(t){Ne(t,!0);let o={start:()=>C()?.client?.start(),track:S.track,setConsent:s=>S.setConsent({...s,analytics:s.analytics?"granted":"denied"}),getAnonymousId:S.getAnonymousId,getSessionId:S.getSessionId};return window.robot=o,C()?.client?.restoreLegacyConsent(),o}function mt(t){if(typeof t!="string"&&typeof t!="number")return;let o=String(t).trim();return o&&o!=="0"&&o.length<=256?o:void 0}function yt(t){if(t==null||t===""||typeof t=="boolean")return;let o=Number(t);return Number.isFinite(o)&&o>=0?o:void 0}import{jsx as R,jsxs as pe}from"react/jsx-runtime";var ge=at(null),ue=0,le=0;function wt({children:t,analyticsConsent:o,consentAdapter:s,marketingConsent:r=!1,consentSource:d="react",policyVersion:i,...c}){let f=JSON.stringify(c),w=it(()=>de({cookieName:`sendermaster_consent_${Array.from(c.siteKey||"").map(g=>g.charCodeAt(0).toString(16)).join("_")||"default"}`}),[c.siteKey]),b=o===void 0?s??w:void 0;return K(()=>(ue++,le++,()=>{ue--;let g=++le;queueMicrotask(()=>{!ue&&g===le&&S.destroy()})}),[]),K(()=>{S.init(JSON.parse(f));let g=()=>{let I=o??"unknown";try{b&&(I=b.getSnapshot())}catch{}S.setConsent({analytics:I,marketing:r,source:d,policyVersion:i})};return g(),b?.subscribe(g)},[f,b,o,r,d,i]),R(ge.Provider,{value:{adapter:b},children:t})}function Oe(){let t=Re(S.subscribe,S.getStatus,()=>$);return{...S,status:t}}function De(t,o,s,r,d){let i=Ve(ge),{status:c}=Oe(),f=$e(""),w=d?c.pageViewId:"",b=JSON.stringify(o);K(()=>{if(!r){f.current="";return}if(!i||c.state!=="ready"||!s||!o)return;let g=`${w}:${s}`;f.current!==g&&S.track(t,o).queued&&(f.current=g)},[i,c.state,w,s,r,b])}function Et(t,{viewKey:o="",active:s=!0}={}){De("product_view",t,`${o}:${t?.productId??t?.catalogProductId??""}:${t?.variantId??t?.catalogVariantId??""}`,s,!0)}function kt(t,{checkoutKey:o,active:s=!0}={}){let{status:r}=Oe(),[d,i]=fe(""),c=$e("");K(()=>{c.current||=crypto.randomUUID(),i(c.current)},[]);let f=o||t?.checkoutId||(d&&r.pageViewId?`${d}:${r.pageViewId}`:""),w=t&&f?{...t,checkoutId:t.checkoutId||f}:null;De("begin_checkout",w,f,s,!1)}function Ct({privacyPolicyUrl:t,labels:o,className:s,style:r}){let i=Ve(ge)?.adapter,c=()=>()=>{},f=Re(i?.subscribe??c,i?.getSnapshot??(()=>"unknown"),()=>"unknown"),[w,b]=fe(!1),[g,I]=fe(!1);if(K(()=>{b(!0)},[]),!w||!i?.setConsent)return null;let p=N=>{i.setConsent?.(N),I(!1)},y={message:"With your permission, analytics cookies help us understand how you use this website.",accept:"Accept",reject:"Reject",settings:"Cookie settings",privacyPolicy:"Privacy policy",...o},M={padding:"8px 14px",border:"1px solid #777",borderRadius:4,background:"#fff",color:"#222",cursor:"pointer",font:"inherit"};return R("div",{className:s,style:{position:"fixed",bottom:12,left:12,right:f==="unknown"||g?12:void 0,zIndex:1e3,...r},children:f==="unknown"||g?pe("section",{role:"region","aria-label":"Cookie preferences",style:{padding:16,background:"#fff",color:"#222",border:"1px solid #ccc",borderRadius:6,font:"14px/1.5 sans-serif"},children:[pe("p",{children:[y.message," ",t&&R("a",{href:t,children:y.privacyPolicy})]}),pe("div",{style:{display:"flex",flexWrap:"wrap",gap:8},children:[R("button",{type:"button",style:M,onClick:()=>p("granted"),children:y.accept}),R("button",{type:"button",style:M,onClick:()=>p("denied"),children:y.reject})]})]}):R("button",{type:"button",style:M,onClick:()=>I(!0),children:y.settings})})}export{Ct as SenderMasterConsentBanner,wt as SenderMasterProvider,de as createCookieConsentAdapter,gt as installLegacyPixel,S as senderMaster,yt as toAmount,mt as toId,kt as useBeginCheckout,Et as useProductView,Oe as useSenderMaster};
@@ -37,6 +37,7 @@ export declare function createClient(config: Config, legacy?: boolean): {
37
37
  track: <Name extends StandardEventName>(name: Name, properties: StandardEventInputMap[Name]) => TrackResult;
38
38
  setConsent: (value: Consent) => void;
39
39
  start: () => void;
40
+ resetIdentity: () => void;
40
41
  restoreLegacyConsent: () => void;
41
42
  getStatus: () => Readonly<{
42
43
  state: "disabled" | "waiting_consent" | "ready" | "error";
@@ -20,6 +20,8 @@ export declare const senderMaster: {
20
20
  custom?: Record<string, unknown>;
21
21
  filterPersonalData?: boolean;
22
22
  }): TrackResult;
23
+ /** Rotate browser identity after sign-out without changing the user's consent choice. */
24
+ resetIdentity: () => void | undefined;
23
25
  getStatus: () => Readonly<{
24
26
  state: "disabled" | "waiting_consent" | "ready" | "error";
25
27
  consent: import("./core").AnalyticsConsent;
@@ -34,6 +34,7 @@ export declare function useSenderMaster(): {
34
34
  custom?: Record<string, unknown>;
35
35
  filterPersonalData?: boolean;
36
36
  }): import("./browser").TrackResult;
37
+ resetIdentity: () => void | undefined;
37
38
  getStatus: () => Readonly<{
38
39
  state: "disabled" | "waiting_consent" | "ready" | "error";
39
40
  consent: AnalyticsConsent;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sendermaster/react",
3
- "version": "0.2.0",
3
+ "version": "0.2.1",
4
4
  "description": "SenderMaster React integration with an embedded browser SDK",
5
5
  "license": "UNLICENSED",
6
6
  "type": "module",