@walkeros/web-source-session 4.1.0-next-1779362268386 → 4.1.0

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,6 +1,6 @@
1
1
  # @walkeros/web-source-session
2
2
 
3
- ## 4.1.0-next-1779362268386
3
+ ## 4.1.0
4
4
 
5
5
  ### Patch Changes
6
6
 
@@ -27,8 +27,8 @@
27
27
  - Updated dependencies [058f7ed]
28
28
  - Updated dependencies [28a8ac2]
29
29
  - Updated dependencies [fd6076e]
30
- - @walkeros/core@4.1.0-next-1779362268386
31
- - @walkeros/web-core@4.1.0-next-1779362268386
30
+ - @walkeros/core@4.1.0
31
+ - @walkeros/web-core@4.1.0
32
32
 
33
33
  ## 4.0.2
34
34
 
package/dist/dev.js CHANGED
@@ -1 +1 @@
1
- "use strict";var e,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,o=Object.getOwnPropertyNames,s=Object.prototype.hasOwnProperty,r=(e,n)=>{for(var o in n)t(e,o,{get:n[o],enumerable:!0})},i={};r(i,{examples:()=>f,schemas:()=>a}),module.exports=(e=i,((e,r,i,a)=>{if(r&&"object"==typeof r||"function"==typeof r)for(let c of o(r))s.call(e,c)||c===i||t(e,c,{get:()=>r[c],enumerable:!(a=n(r,c))||a.enumerable});return e})(t({},"__esModule",{value:!0}),e));var a={};r(a,{SettingsSchema:()=>u,settings:()=>d});var c=require("@walkeros/core/dev"),l=require("@walkeros/core/dev"),u=l.z.object({storage:l.z.boolean().default(!1).describe("Enable persistent storage for session/device IDs").optional(),consent:l.z.union([l.z.string(),l.z.array(l.z.string())]).describe("Consent key(s) required to enable storage mode").optional(),length:l.z.number().default(30).describe("Session timeout in minutes").optional(),pulse:l.z.boolean().default(!1).describe("Keep session alive on each event").optional(),sessionKey:l.z.string().default("elbSessionId").describe("Storage key for session ID").optional(),sessionStorage:l.z.enum(["local","session"]).default("local").describe("Storage type for session").optional(),deviceKey:l.z.string().default("elbDeviceId").describe("Storage key for device ID").optional(),deviceStorage:l.z.enum(["local","session"]).default("local").describe("Storage type for device").optional(),deviceAge:l.z.number().default(30).describe("Device ID age in days").optional(),cb:l.z.any().describe("Custom session callback function or false to disable").optional(),clickIds:l.z.array(l.ClickIdEntrySchema).describe("Custom click-ID registry. Entries with a `param` matching a default override the platform name in place; new params append to the end of the priority list.").optional()}),d=(0,c.zodToSchema)(u),f={};r(f,{createTrigger:()=>me,step:()=>g,trigger:()=>ye});var g={};r(g,{newMarketingSession:()=>p,returningVisitor:()=>h});var p={title:"New marketing session",description:"A visit with UTM parameters starts a new session and emits walker user, session, and session start calls.",trigger:{type:"load",options:{url:"https://example.com/?utm_source=google&utm_medium=cpc&utm_campaign=winter-sale"}},in:{storage:!0},out:[["elb","user",{session:"s3ss10n-id",device:"d3v1c3-id"}],["elb","session",{id:"s3ss10n-id",start:17e11,isNew:!0,count:1,runs:1,marketing:!0,source:"google",medium:"cpc",campaign:"winter-sale",referrer:"",device:"d3v1c3-id",isStart:!0,storage:!0,updated:17e11}],["elb",{name:"session start",data:{id:"s3ss10n-id",start:17e11,isNew:!0,count:1,runs:1,marketing:!0,source:"google",medium:"cpc",campaign:"winter-sale",referrer:"",device:"d3v1c3-id",isStart:!0,storage:!0,updated:17e11}}]]},h={title:"Returning visitor",description:"A returning visit with a google referrer reuses the stored device id and increments the session count.",trigger:{type:"load",options:{referrer:"https://google.com"}},in:{storage:!0},out:[["elb","user",{session:"n3w-s3ss10n",device:"d3v1c3-id"}],["elb","session",{id:"n3w-s3ss10n",start:1700001e6,isNew:!1,count:3,runs:1,referrer:"google.com",device:"d3v1c3-id",isStart:!0,storage:!0,updated:1700001e6}],["elb",{name:"session start",data:{id:"n3w-s3ss10n",start:1700001e6,isNew:!1,count:3,runs:1,referrer:"google.com",device:"d3v1c3-id",isStart:!0,storage:!0,updated:1700001e6}}]]},v=require("@walkeros/core"),m=require("@walkeros/core"),y=require("@walkeros/core"),b=require("@walkeros/core"),w=require("@walkeros/core"),k=require("@walkeros/core"),C=require("@walkeros/core"),q=require("@walkeros/core"),x=require("@walkeros/core"),O=require("@walkeros/core"),S=require("@walkeros/core"),j=require("@walkeros/core"),I=require("@walkeros/core"),A={Action:"action",Actions:"actions",Config:"config",Consent:"consent",Context:"context",Custom:"custom",Destination:"destination",Elb:"elb",Globals:"globals",Hook:"hook",Init:"init",Link:"link",On:"on",Prefix:"data-elb",Ready:"ready",Run:"run",Session:"session",Shutdown:"shutdown",User:"user",Walker:"walker"};function $(e,t){return e.storeId&&t.stores[e.storeId]?t.stores[e.storeId]:t.stores.__cache}function D(e){var t;const n={};for(const[o,s]of Object.entries(e)){const e=null==(t=s.config)?void 0:t.next;"string"==typeof e||Array.isArray(e)&&e.every(e=>"string"==typeof e)?n[o]={next:e}:n[o]={}}return n}function _(e,t){const n=e.config||{},o=e[t];return void 0!==o?{config:{...n,[t]:o},chainValue:o}:{config:n,chainValue:void 0}}function E(e,t={}){if(!e)return[];if(Array.isArray(e))return e;const n=[],o=new Set;let s=e;for(;s&&t[s]&&!o.has(s);){o.add(s),n.push(s);const e=t[s].next;if(Array.isArray(e)){n.push(...e);break}s=e}return n}async function P(e,t,n){if(t.init&&!t.config.init){const o=t.type||"unknown",s=e.logger.scope(`transformer:${o}`),r={collector:e,logger:s,id:n,ingest:(0,C.createIngest)(n),config:t.config,env:N(t.config.env)};s.debug("init");const i=await(0,C.useHooks)(t.init,"TransformerInit",e.hooks,e.logger)(r);if(!1===i)return!1;t.config={...i||t.config,env:(null==i?void 0:i.env)||t.config.env,init:!0},s.debug("init done")}return!0}async function M(e,t,n,o,s,r){const i=t.type||"unknown",a=e.logger.scope(`transformer:${i}`),c={collector:e,logger:a,id:n,ingest:s,config:t.config,env:{...N(t.config.env),...r?{respond:r}:{}}};a.debug("push",{event:o.name});const l=await(0,C.useHooks)(t.push,"TransformerPush",e.hooks,e.logger)(o,c);return a.debug("push done"),l}function z(e,t){return e?{...e,_meta:{...e._meta,path:[...e._meta.path]}}:(0,C.createIngest)(t)}async function H(e,t,n,o,s,r,i){var a,c,l,u,d,f,g,p;s||(s=(0,C.createIngest)(null!=(a=n[0])?a:"chain")),i&&s._meta&&(s._meta.chainPath=i);let h=o,v=r;for(const o of n){const r=t[o];if(!r){e.logger.warn(`Transformer not found: ${o}`);continue}if(s&&s._meta&&s._meta.path.length>256)return e.logger.error(`Max path length exceeded at ${o}`),{event:null,respond:v};if(s&&s._meta&&(s._meta.hops++,s._meta.path.push(o)),!await(0,C.tryCatchAsync)(P,t=>{if(t instanceof C.FatalError)throw t;return e.status.failed++,e.logger.scope(`transformer:${r.type||"unknown"}`).error("transformer init failed",{transformer:o,error:t}),!1})(e,r,o))return{event:null,respond:v};if(i&&void 0!==(null==(l=null==(c=r.config)?void 0:c.chainMocks)?void 0:l[i])){const t=r.config.chainMocks[i];e.logger.scope(`transformer:${r.type||"unknown"}`).debug("chainMock",{chain:i}),h=t;continue}if(void 0!==(null==(u=r.config)?void 0:u.mock)){e.logger.scope(`transformer:${r.type||"unknown"}`).debug("mock"),h=r.config.mock;continue}if(null==(d=r.config)?void 0:d.disabled)continue;const a=null==(f=r.config)?void 0:f.cache,m=a?(0,C.compileCache)(a):void 0,y=m?$(m,e):void 0;let b;if(m&&y){const e=(0,C.buildCacheContext)(s,h),t=await(0,C.checkCache)(m,y,e);if("HIT"===(null==t?void 0:t.status)&&t.value){if(h=t.value,m.stop)return{event:h,respond:v,stopped:!0};continue}"MISS"===(null==t?void 0:t.status)&&(b={key:t.key,ttl:t.rule.ttl})}const w=r.config.before;if(w){const n=(0,C.getNextSteps)(w,(0,C.buildCacheContext)(s,h));if(1===n.length){const o=E(n[0],D(t));if(o.length>0){const n=await H(e,t,o,h,s,v,i);if(null===n.event)return{event:null,respond:null!=(g=n.respond)?g:v};if(n.stopped)return{event:Array.isArray(n.event)?n.event[0]:n.event,respond:null!=(p=n.respond)?p:v,stopped:!0};n.respond&&(v=n.respond),h=Array.isArray(n.event)?n.event[0]:n.event}}else n.length>1&&await Promise.all(n.map(n=>(0,C.tryCatchAsync)(H,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,E(n,D(t)),h,z(s,n),void 0,i)))}const k=await(0,C.tryCatchAsync)(M,t=>(e.logger.scope(`transformer:${r.type||"unknown"}`).error("Push failed",{error:t}),!1))(e,r,o,h,s,v);if(!1===k)return{event:null,respond:v};if(Array.isArray(k)){const r=n.slice(n.indexOf(o)+1),a=await Promise.all(k.map(async n=>{const o=n.event||h,a=z(s,"unknown");if(n.next){const s=(0,C.getNextSteps)(n.next,(0,C.buildCacheContext)(a,o));if(0===s.length)return{event:o,respond:v};if(1===s.length){const n=E(s[0],D(t));return n.length>0?H(e,t,n,o,a,v,i):{event:o,respond:v}}return(await Promise.all(s.map(n=>(0,C.tryCatchAsync)(H,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,E(n,D(t)),o,z(a,n),void 0,i)))).map(e=>({event:e.event,respond:void 0}))}return r.length>0?H(e,t,r,o,a,v,i):{event:o,respond:v}}));let c=v;const l=[];for(const e of a.flat())if(null!==e)if(e&&"object"==typeof e&&"event"in e){const t=e;if(t.respond&&(c=t.respond),null===t.event)continue;Array.isArray(t.event)?l.push(...t.event):l.push(t.event)}else l.push(e);return 0===l.length?{event:null,respond:c}:1===l.length?{event:l[0],respond:c}:{event:l,respond:c}}if(k&&"object"==typeof k){const{event:n,respond:o,next:r}=k;if(o&&(v=o),void 0!==r){const o=(0,C.getNextSteps)(r,(0,C.buildCacheContext)(s,h));if(0===o.length){n&&(h=n);continue}if(1===o.length){const a=E(o[0],D(t));return a.length>0?H(e,t,a,n||h,s,v,i):(e.logger.warn(`Branch target not found: ${JSON.stringify(r)}`),{event:null,respond:v})}return await Promise.all(o.map(o=>(0,C.tryCatchAsync)(H,t=>(e.logger.scope("transformer:many").error(`many branch ${o} failed`,{error:t}),{event:null,respond:void 0}))(e,t,E(o,D(t)),n||h,z(s,o),void 0,i))),{event:null,respond:void 0}}n&&(h=n)}b&&y&&(0,C.storeCache)(y,b.key,h,b.ttl);const q=r.config.next,x="string"==typeof q||Array.isArray(q)&&q.every(e=>"string"==typeof e),O=void 0!==q&&!x;if((!k||"object"==typeof k&&!k.next)&&O){const n=(0,C.getNextSteps)(r.config.next,(0,C.buildCacheContext)(s,h));if(1===n.length){const o=E(n[0],D(t));return o.length>0?H(e,t,o,h,s,v,i):{event:h,respond:v}}return n.length>1?(await Promise.all(n.map(n=>(0,C.tryCatchAsync)(H,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,E(n,D(t)),h,z(s,n),void 0,i))),{event:null,respond:void 0}):{event:h,respond:v}}}return{event:h,respond:v}}function N(e){return e&&(0,C.isObject)(e)?e:{}}function T(e){return"string"==typeof e||!(!Array.isArray(e)||!e.every(e=>"string"==typeof e))}async function F(e,t,n){var o,s;if(!t.on||!(null==(o=t.queueOn)?void 0:o.length))return;const r=t.queueOn;t.queueOn=[];const i=n||(null==(s=t.config)?void 0:s.id)||"unknown";for(const{type:n,data:o}of r)await(0,k.tryCatchAsync)(t.on,t=>{if(t instanceof k.FatalError)throw t;e.status.failed++,e.logger.scope("source").error("source on flush failed",{sourceId:i,type:n,error:t})})(n,o)}function K(e){var t;return Boolean(e.config.init)&&!(null==(t=e.config.require)?void 0:t.length)}async function R(e,t,n){var o;const{code:s,config:r={},env:i={},primary:a,next:c,before:l,cache:u}=n,d=u,f=d?(0,k.compileCache)({...d,stop:null==(o=d.stop)||o}):void 0,g=T(c)?E(c,D(e.transformers)):void 0,p=T(l)?E(l,D(e.transformers)):void 0,h=i.push,v=null!=h?h:e.push,m=Boolean(h),y=async(n,o,s)=>{var i;let a;const u=null!=p?p:void 0!==l?(()=>{const t=(0,k.getNextSteps)(l,(0,k.buildCacheContext)(s.ingest));return 0===t.length?[]:E(1===t.length?t[0]:t,D(e.transformers))})():[];let d=[n];if(u.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const o=await H(e,e.transformers,u,n,s.ingest,s.respond,`source.${t}.before`);if(null===o.event)return{ok:!0};if(o.stopped)return o.respond&&(s.respond=o.respond),{ok:!0};o.respond&&(s.respond=o.respond),d=Array.isArray(o.event)?o.event:[o.event]}if(f){const t=$(f,e);if(t){const n=(0,k.buildCacheContext)(s.ingest),o=await(0,k.checkCache)(f,t,n);if(o){if("HIT"===o.status&&void 0!==o.value&&f.stop){let t=o.value;return o.rule.update&&(t=await(0,k.applyUpdate)(t,o.rule.update,{...n,cache:{status:"HIT"}},e)),null==(i=s.respond)||i.call(s,t),{ok:!0}}if("MISS"===o.status&&f.stop&&s.respond){const r=s.respond,i=o.rule.update,c={...n,cache:{status:"MISS"}},l=o.key,u=o.rule.ttl,d=n=>{(0,k.storeCache)(t,l,n,u),i?a=(async()=>{const t=await(0,k.applyUpdate)(n,i,c,e);r(t)})():r(n)};s.respond=d}"MISS"!==o.status||f.stop||(0,k.storeCache)(t,o.key,!0,o.rule.ttl)}}}const h=g?{kind:"single",preChain:g}:void 0!==c?(()=>{const t=(0,k.getNextSteps)(c,(0,k.buildCacheContext)(s.ingest));return 0===t.length?{kind:"single",preChain:[]}:1===t.length?{kind:"single",preChain:E(t[0],D(e.transformers))}:{kind:"many",branches:t.map(t=>E(t,D(e.transformers)))}})():{kind:"single",preChain:[]};let y={ok:!0};for(const n of d)"many"===h.kind?(await Promise.all(h.branches.map((i,a)=>(0,k.tryCatchAsync)(async()=>m?v(n):v(n,{...o,id:t,ingest:z(s.ingest,`${t}.${a}`),respond:void 0,mapping:r,preChain:i}),t=>(e.logger.scope("source:many").error(`many branch ${a} failed`,{error:t}),{ok:!0}))())),y={ok:!0}):y=m?await v(n):await v(n,{...o,id:t,ingest:s.ingest,respond:s.respond,mapping:r,preChain:h.preChain});return a&&await a,y},b=async n=>{const o=(0,k.createIngest)(t);if(!r.ingest||void 0===n)return o;const s=await(0,k.getMappingValue)(n,r.ingest,{collector:e});return{...o,...s,_meta:o._meta}},w=e.logger.scope("source").scope(t),C={command:e.command,sources:e.sources,elb:e.sources.elb.push,logger:w,...i,push:async(e,n={})=>{const o={ingest:(0,k.createIngest)(t),respond:void 0};return y(e,n,o)}},q={collector:e,logger:w,id:t,config:r,env:C,withScope:async(e,t,n)=>{const o={ingest:await b(e),respond:t};return n({...C,push:(e,t={})=>y(e,t,o),ingest:o.ingest,respond:o.respond})}},x=await(0,k.tryCatchAsync)(s,n=>{if(n instanceof k.FatalError)throw n;e.status.failed++,e.logger.scope("source").error("source factory failed",{sourceId:t,error:n})})(q);if(!x)return;const O=x.type||"unknown",S=e.logger.scope(O).scope(t);return C.logger=S,a&&(x.config={...x.config,primary:a}),x}function B(e,t,n,o){if(n instanceof b.FatalError)throw n;e.logger.scope("on").error("on callback failed",{kind:t,...o,error:n})}function G(e,t){return{collector:e,logger:e.logger.scope("on").scope(String(t))}}function U(e,t,n,o,s){if(!t.on)return;const r=t.type||"unknown",i=e.logger.scope(r).scope("on").scope(o),a={collector:e,logger:i,id:n,config:t.config,data:s,env:ce(t.env,t.config.env)};(0,w.tryCatch)(t.on,t=>B(e,"destination",t,{destId:n,type:o}))(o,a)}function W(e,t,n,o){let s;switch(t){case A.Consent:s=o||e.consent;break;case A.Session:s=e.session;break;case A.User:s=o||e.user;break;case A.Custom:s=o||e.custom;break;case A.Globals:s=o||e.globals;break;case A.Config:s=o||e.config;break;case A.Ready:case A.Run:default:s=void 0}if(n.length)switch(t){case A.Consent:!function(e,t,n){const o=n||e.consent,s=G(e,A.Consent);t.forEach(t=>{Object.keys(o).filter(e=>e in t).forEach(n=>{(0,w.tryCatch)(t[n],t=>B(e,"consent",t,{key:n}))(o,s)})})}(e,n,o);break;case A.Ready:!function(e,t){if(!e.allowed)return;const n=G(e,A.Ready);t.forEach(t=>{(0,w.tryCatch)(t,t=>B(e,"ready",t))(void 0,n)})}(e,n);break;case A.Run:!function(e,t){if(!e.allowed)return;const n=G(e,A.Run);t.forEach(t=>{(0,w.tryCatch)(t,t=>B(e,"run",t))(void 0,n)})}(e,n);break;case A.Session:!function(e,t){if(!e.session)return;const n=G(e,A.Session);t.forEach(t=>{(0,w.tryCatch)(t,t=>B(e,"session",t))(e.session,n)})}(e,n);break;default:{const o=G(e,t);n.forEach(n=>{"function"==typeof n&&(0,w.tryCatch)(n,n=>B(e,"generic",n,{type:t}))(s,o)});break}}}function L(e,t,n,o){var s;if(!Number.isFinite(n.max)||n.max<=0)throw new Error(`pushBounded: max must be > 0 (got ${n.max})`);if("dropNewest"===(null!=(s=n.onOverflow)?s:"dropOldest"))return e.length>=n.max?(o&&o([t]),{appended:!1,dropped:1}):(e.push(t),{appended:!0,dropped:0});const r=[];for(;e.length>=n.max;)r.push(e.shift());return e.push(t),r.length>0&&o&&o(r),{appended:!0,dropped:r.length}}var J=new WeakMap;function V(e,t,n,o){J.get(e)||(J.set(e,!0),t.warn(n,o))}function Y(e){J.delete(e)}var Q=Object.freeze({batched:!0});function X(e){return e===Q}function Z(e){return void 0===e?{}:"number"==typeof e?{wait:e}:{wait:e.wait,size:e.size,age:e.age}}function ee(e,t){return e.status.destinations[t]||(e.status.destinations[t]={count:0,failed:0,duration:0,queuePushSize:0,dlqSize:0}),e.status.destinations[t]}function te(e,t,n,o){var s;e.dropped[t]||(e.dropped[t]={});const r=e.dropped[t];return r[n]=(null!=(s=r[n])?s:0)+o,r[n]}function ne(e,t,n){if(!e)return[];if(Array.isArray(e)&&e.every(e=>"string"==typeof e))return E(e,t);if("string"==typeof e)return E(e,t);const o=(0,y.getNextSteps)(e,(0,y.buildCacheContext)(n));return 0===o.length?[]:1===o.length?E(o[0],t):E(o,t)}async function oe(e,t,n={},o){var s,r,i,a,c,l;const{allowed:u,consent:d,globals:f,user:g}=e;if(!u)return ie({ok:!1});if(t){const n=e.config.queueMax;if(void 0===n)throw new Error("Collector.Config.queueMax is undefined; defaults must be seeded by collector()");const o=L(e.queue,t,{max:n});if(o.dropped>0){const t=te(e.status,(0,y.stepId)("collector"),"queue",o.dropped);V(e.queue,e.logger,"collector.queue overflow; oldest events dropped",{buffer:"queue",cap:n,droppedCount:t})}else e.queue.length<n&&Y(e.queue);e.status.in++}o||(o=e.destinations);const p=e.transformers?D(e.transformers):{},h=await Promise.all(Object.entries(o||{}).map(async([o,s])=>{var r,i,a,c;if(s.config.disabled)return{id:o,destination:s,skipped:!0};let l=(s.queuePush||[]).map(e=>({...e,consent:d}));s.queuePush=[],t&&l.push((0,y.clone)(t));const u=n.ingest?{...n.ingest,_meta:{...n.ingest._meta,path:[...n.ingest._meta.path]}}:(0,y.createIngest)("unknown");if(!l.length&&!(null==(r=s.queueOn)?void 0:r.length))return{id:o,destination:s,skipped:!0};if(!l.length&&(null==(i=s.queueOn)?void 0:i.length)){let t=!1;try{t=await se(e,s,o)}catch(t){e.status.failed++;const n=s.type||"unknown";e.logger.scope(n).error("destination init failed",{error:t instanceof Error?t.message:String(t)})}return{id:o,destination:s,skipped:!t}}const h=[],v=l.filter(e=>{const t=(0,y.getGrantedConsent)(s.config.consent,d,e.consent);return!t||(e.consent=t,h.push(e),!1)});if(v.length>0){const t=s.queuePush,n=s.config.id||o,r={max:null!=(a=s.config.queueMax)?a:1e3};let i=0;for(const e of v)i+=L(t,e,r).dropped;if(i>0){ee(e,n);const o=te(e.status,(0,y.stepId)("destination",n),"queue",i);V(t,e.logger.scope(s.type||"unknown"),"destination.queuePush overflow; oldest events dropped",{buffer:"queuePush",destination:n,cap:r.max,droppedCount:o})}else t.length<r.max&&Y(t)}if(!h.length)return{id:o,destination:s,queue:l};let m,b,w=!1;try{w=await se(e,s,o)}catch(t){e.status.failed++;const n=s.type||"unknown";e.logger.scope(n).error("destination init failed",{error:t instanceof Error?t.message:String(t)})}if(!w)return{id:o,destination:s,queue:l};s.dlq||(s.dlq=[]);const k=ne(s.config.before,p,u),C=s.config.next,q=null==(c=s.config)?void 0:c.cache,x=q?(0,y.compileCache)(q):void 0,O=x?$(x,e):void 0;let S=0,j=0;return await Promise.all(h.map(async t=>{let r;if(t.globals=(0,y.assign)(f,t.globals),t.user=(0,y.assign)(g,t.user),(null==x?void 0:x.stop)&&O){const e=(0,y.buildCacheContext)(u,t),n=await(0,y.checkCache)(x,O,e);if("HIT"===(null==n?void 0:n.status))return t;"MISS"===(null==n?void 0:n.status)&&(r={key:n.key,ttl:n.rule.ttl})}let i=t,a=n.respond;if(k.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const s=await H(e,e.transformers,k,t,u,n.respond,`destination.${o}.before`);if(null===s.event)return t;s.respond&&(a=s.respond),i=Array.isArray(s.event)?s.event[0]:s.event}if(x&&!x.stop&&O){const e=(0,y.buildCacheContext)(u,i),n=await(0,y.checkCache)(x,O,e);if("HIT"===(null==n?void 0:n.status))return t;"MISS"===(null==n?void 0:n.status)&&(r={key:n.key,ttl:n.rule.ttl})}const c=Date.now();let l=!1;const d=await(0,y.tryCatchAsync)(re,t=>{var n;const r=s.type||"unknown";e.logger.scope(r).error("Push failed",{error:t,event:i.name}),m=t,l=!0;const a=s.dlq,c=s.config.id||o,u={max:null!=(n=s.config.dlqMax)?n:100},d=L(a,[i,t],u);if(d.dropped>0){ee(e,c);const t=te(e.status,(0,y.stepId)("destination",c),"dlq",d.dropped);V(a,e.logger.scope(s.type||"unknown"),"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:c,cap:u.max,droppedCount:t})}else a.length<u.max&&Y(a)})(e,s,o,i,u,a);if(S+=Date.now()-c,r&&O&&void 0===s.config.mock&&(0,y.storeCache)(O,r.key,null==d||d,r.ttl),void 0===d||X(d)||(b=d),X(d)&&j++,!l&&C){void 0!==d&&(u._response=d);const t=ne(C,p,u);if(t.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const n=await H(e,e.transformers,t,i,u,a,`destination.${o}.next`);n.respond&&(a=n.respond)}}return t})),{id:o,destination:s,error:m,response:b,totalDuration:S,batchedCount:j,allowedCount:h.length}})),v={},m={},b={};for(const t of h){if(t.skipped)continue;const n=t.destination,o={type:n.type||"unknown",data:t.response};ee(e,t.id);const u=e.status.destinations[t.id],d=Date.now();if(u.queuePushSize=null!=(r=null==(s=n.queuePush)?void 0:s.length)?r:0,u.dlqSize=null!=(a=null==(i=n.dlq)?void 0:i.length)?a:0,t.error)o.error=t.error,b[t.id]=o,u.failed++,u.lastAt=d,u.duration+=t.totalDuration||0,e.status.failed++;else if(t.queue&&t.queue.length)m[t.id]=o;else{const n=null!=(c=t.batchedCount)?c:0,s=null!=(l=t.allowedCount)?l:0;(Math.max(0,s-n)>0||0===s)&&(v[t.id]=o,u.count++,u.lastAt=d,u.duration+=t.totalDuration||0,e.status.out++)}}return ie({event:t,...Object.keys(v).length&&{done:v},...Object.keys(m).length&&{queued:m},...Object.keys(b).length&&{failed:b}})}async function se(e,t,n){var o;if(t.init&&!t.config.init){const s=t.type||"unknown",r=e.logger.scope(s),i={collector:e,logger:r,id:n,config:t.config,env:ce(t.env,t.config.env)};r.debug("init");const a=await(0,y.useHooks)(t.init,"DestinationInit",e.hooks,e.logger)(i);if(!1===a)return a;if(t.config={...a||t.config,init:!0},null==(o=t.queueOn)?void 0:o.length){const o=t.queueOn;t.queueOn=[];for(const{type:s,data:r}of o)U(e,t,n,s,r)}r.debug("init done")}return!0}async function re(e,t,n,o,s,r){var i,a,c,l,u,d,f;const{config:g}=t,p=await(0,y.processEventMapping)(o,g,e);if(p.ignore)return!1;const h=t.type||"unknown",v=e.logger.scope(h),m={collector:e,logger:v,id:n,config:g,data:p.data,rule:p.mapping,ingest:s,env:{...ce(t.env,g.env),...r?{respond:r}:{}}};if(void 0!==g.mock)return v.debug("mock",{event:p.event.name}),g.mock;const b=p.mapping,w=p.mappingKey||"* *";if((null==b?void 0:b.batch)&&t.pushBatch&&void 0===g.mock){if(t.batches=t.batches||{},!t.batches[w]){const o={key:w,entries:[],events:[],data:[]},s=Z(b.batch),r=Z(g.batch),f=null!=(a=null!=(i=s.wait)?i:r.wait)?a:3e4,p=null!=(l=null!=(c=s.size)?c:r.size)?l:1e3,h=null!=(d=null!=(u=s.age)?u:r.age)?d:3e4,m=ce(t.env,g.env),k=(0,y.debounce)(async()=>{var o;const s=t.batches[w].batched;if(0===s.entries.length)return;const r={key:s.key,entries:s.entries,events:s.events,data:s.data};s.entries=[],s.events=[],s.data=[];const i=r.entries[0],a={collector:e,logger:v,id:n,config:g,data:void 0,rule:i.rule,ingest:i.ingest,env:{...m,...i.respond?{respond:i.respond}:{}}};v.debug("push batch",{events:r.entries.length});const c=t.config.id||n,l=ee(e,c);let u=!0;await(0,y.tryCatchAsync)((0,y.useHooks)(t.pushBatch,"DestinationPushBatch",e.hooks,e.logger),n=>{var o;u=!1;const s=t.dlq=t.dlq||[],i={max:null!=(o=t.config.dlqMax)?o:100};let a=0;for(const e of r.entries)a+=L(s,[e.event,n],i).dropped;if(a>0){const t=te(e.status,(0,y.stepId)("destination",c),"dlq",a);V(s,v,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:c,cap:i.max,droppedCount:t})}else s.length<i.max&&Y(s);l.failed+=r.entries.length,l.dlqSize=s.length,e.status.failed+=r.entries.length,v.error("Push batch failed",{error:n instanceof Error?n.message:String(n),entries:r.entries.length})})(r,a),v.debug("push batch done"),l.inFlightBatch=Math.max(0,(null!=(o=l.inFlightBatch)?o:0)-r.entries.length),u&&(l.count+=r.entries.length,l.lastAt=Date.now(),e.status.out+=r.entries.length)},{wait:f,size:p,age:h});t.batches[w]={batched:o,batchFn:()=>{k()},flush:async()=>{await k.flush()}}}const o=t.batches[w];o.batched.entries.push({event:p.event,ingest:s,respond:r,rule:b,data:p.data}),o.batched.events.push(p.event),(0,y.isDefined)(p.data)&&o.batched.data.push(p.data);const h=t.config.id||n,m=ee(e,h);return m.inFlightBatch=(null!=(f=m.inFlightBatch)?f:0)+1,o.batchFn(),Q}{v.debug("push",{event:p.event.name});const n=await(0,y.useHooks)(t.push,"DestinationPush",e.hooks,e.logger)(p.event,m);return v.debug("push done"),n}}function ie(e){return{ok:!(null==e?void 0:e.failed),...e}}function ae(e){const{code:t,config:n={},env:o={},cache:s}=e,{config:r}=_(e,"before"),{config:i}=_({...e,config:r},"next"),a={...t.config,...n,...i};s&&(a.cache=s);const c=ce(t.env,o);return{...t,config:a,env:c}}function ce(e,t){return e||t?t?e&&(0,y.isObject)(e)&&(0,y.isObject)(t)?{...e,...t}:t:e:{}}async function le(e,t,n){const o=Object.entries(e).map(async([e,o])=>{var s;const r=o.destroy;if(!r)return;const i=o.type||"unknown",a=n.scope(i),c={id:e,config:o.config,env:null!=(s=o.env)?s:{},logger:a};try{await Promise.race([r(c),new Promise((n,o)=>setTimeout(()=>o(new Error(`${t} '${e}' destroy timed out`)),5e3))])}catch(n){a.error(`${t} '${e}' destroy failed: ${n}`)}});await Promise.allSettled(o)}async function ue(e,t,n){let o,s,r=!1;switch(t){case A.Config:(0,x.isObject)(n)&&((0,q.assign)(e.config,n,{shallow:!1}),s=n,r=!0);break;case A.Consent:if((0,x.isObject)(n)){const{update:t}=function(e,t){const n={};return Object.entries(t).forEach(([e,t])=>{n[e]=!!t}),e.consent=(0,v.assign)(e.consent,n),{update:n}}(e,n);s=t,r=!0}break;case A.Custom:(0,x.isObject)(n)&&(e.custom=(0,q.assign)(e.custom,n),s=n,r=!0);break;case A.Destination:(0,x.isObject)(n)&&"code"in n&&(0,x.isObject)(n.code)&&(o=await async function(e,t){const{code:n,config:o={},env:s={},before:r,next:i,cache:a}=t;if(!(0,y.isFunction)(n.push))return ie({ok:!1,failed:{invalid:{type:"invalid",error:"Destination code must have a push method"}}});const c=o||{init:!1};let l=r?{...c,before:r}:{...c};i&&(l={...l,next:i}),a&&(l={...l,cache:a});const u={...n,config:l,env:ce(n.env,s)};let d=u.config.id;if(!d)do{d=(0,y.getId)(5,"abcdefghijklmnopqrstuvwxyz")}while(e.destinations[d]);return e.destinations[d]=u,!1!==u.config.queue&&(u.queuePush=[...e.queue]),oe(e,void 0,{},{[d]:u})}(e,n));break;case A.Globals:(0,x.isObject)(n)&&(e.globals=(0,q.assign)(e.globals,n),s=n,r=!0);break;case A.Hook:if((0,x.isObject)(n)&&(0,q.isString)(n.name)&&(0,q.isFunction)(n.fn)){const{name:t,fn:o}=n;e.hooks[t]=o,s=n,r=!0}break;case A.On:if((0,x.isObject)(n)&&(0,q.isString)(n.type)){const{type:t,rules:o}=n;await async function(e,t,n){const o=e.on,s=o[t]||[],r=(0,b.isArray)(n)?n:[n];r.forEach(e=>{s.push(e)}),o[t]=s,W(e,t,r)}(e,t,o)}break;case A.Ready:r=!0;break;case A.Run:o=await async function(e,t){return e.allowed=!0,e.timing=Date.now(),t&&(t.consent&&(e.consent=(0,q.assign)(e.consent,t.consent)),t.user&&(e.user=(0,q.assign)(e.user,t.user)),t.globals&&(e.globals=(0,q.assign)(e.config.globalsStatic||{},t.globals)),t.custom&&(e.custom=(0,q.assign)(e.custom,t.custom))),Object.values(e.destinations).forEach(e=>{e.queuePush=[]}),e.queue=[],e.round++,await oe(e)}(e,n),r=!0;break;case A.Session:r=!0;break;case A.Shutdown:await async function(e){const t=e.logger;await le(e.sources,"source",t),await le(e.destinations,"destination",t),await le(e.transformers,"transformer",t),await le(e.stores,"store",t)}(e);break;case A.User:(0,x.isObject)(n)&&((0,q.assign)(e.user,n,{shallow:!1}),s=n,r=!0)}return r&&(await async function(e,t,n,o){var s,r;let i,a=n||[];switch(n||(a=e.on[t]||[]),t){case A.Consent:i=o||e.consent;break;case A.Session:i=e.session;break;case A.User:i=o||e.user;break;case A.Custom:i=o||e.custom;break;case A.Globals:i=o||e.globals;break;case A.Config:i=o||e.config;break;case A.Ready:case A.Run:default:i=void 0}let c=!1;for(const[n,o]of Object.entries(e.sources)){if(null==(s=o.config.require)?void 0:s.length){const e=o.config.require.indexOf(t);-1!==e&&o.config.require.splice(e,1)}o.on&&(K(o)?!1===await(0,w.tryCatchAsync)(o.on,o=>B(e,"source",o,{sourceId:n,type:t}))(t,i)&&(c=!0):(o.queueOn=o.queueOn||[],o.queueOn.push({type:t,data:i})))}Object.entries(e.destinations).forEach(([n,o])=>{if(o.on){if(!o.config.init)return o.queueOn=o.queueOn||[],void o.queueOn.push({type:t,data:i});U(e,o,n,t,i)}});for(const[t,n]of Object.entries(e.sources))K(n)&&(null==(r=n.queueOn)?void 0:r.length)&&await F(e,n,t);return Object.keys(e.pending.destinations).length>0&&await async function(e,t){var n;for(const[o,s]of Object.entries(e.pending.destinations)){if(!e.pending.destinations[o]||e.destinations[o])continue;const r=null==(n=s.config)?void 0:n.require;if(!r)continue;const i=r.indexOf(t);if(-1===i)continue;if(r.splice(i,1),r.length>0)continue;delete e.pending.destinations[o];const a=ae(s);!1!==a.config.queue&&(a.queuePush=[...e.queue]),e.destinations[o]=a}}(e,t),W(e,t,a,o),!c}(e,t,void 0,s),o=await oe(e)),o||ie({ok:!0})}function de(e,t){if(!t.name)throw new Error("Event name is required");const[n,o]=t.name.split(" ");if(!n||!o)throw new Error("Event name is invalid");const{timestamp:s=Date.now(),name:r=`${n} ${o}`,data:i={},context:a={},globals:c=e.globals,custom:l={},user:u=e.user,nested:d=[],consent:f=e.consent,id:g=(0,q.getSpanId)(),trigger:p="",entity:h=n,action:v=o,timing:m=0,source:y={type:"collector",schema:"4"}}=t;return{name:r,data:i,context:a,globals:c,custom:l,user:u,nested:d,consent:f,id:g,trigger:p,entity:h,action:v,timestamp:s,timing:m,source:y}}function fe(e={}){var t,n,o;const s=null!=(t=e.maxEntries)?t:1e4,r=null!=(n=e.lowWaterMark)?n:.8,i=null!=(o=e.sweepIntervalMs)?o:6e4,a=Math.floor(s*r),c=new Map,l={hits:0,misses:0,populates:0,writes:0,deletes:0,evictions_entries:0,evictions_ttl:0};let u;return i>0&&(u=setInterval(function(){const e=Date.now();let t=0;for(const[n,o]of c)void 0!==o.expires&&o.expires<=e&&(c.delete(n),t++);l.evictions_ttl+=t},i),u&&"function"==typeof u.unref&&u.unref()),{type:"memory",config:{},get(e){const t=c.get(e);if(t)return void 0!==t.expires&&t.expires<=Date.now()?(c.delete(e),l.evictions_ttl++,void l.misses++):(c.delete(e),c.set(e,t),l.hits++,t.value);l.misses++},set(e,t,n){const o=!c.has(e);o||c.delete(e),c.set(e,{value:t,expires:void 0!==n?Date.now()+n:void 0}),l.writes++,o&&l.populates++,c.size>s&&function(){if(c.size<=s)return;const e=c.size-a;let t=0;for(const n of c.keys()){if(t>=e)break;c.delete(n),t++}l.evictions_entries+=t}()},delete(e){c.delete(e)&&l.deletes++},get counters(){return{...l}},destroy(){void 0!==u&&(clearInterval(u),u=void 0),c.clear()}}}function ge(e,t){const{cacheConfig:n,cacheStore:o,namespace:s,logger:r,storeId:i}=t,a={hits:0,misses:0,populates:0,writes:0,deletes:0,inflight_dedups:0},c=n.rules.map(e=>({match:e.match?(0,I.compileMatcher)(e.match):()=>!0,ttl:e.ttl})),l=e=>`${s}:${e}`;function u(e,t){const n=void 0===t?{key:e}:{key:e,value:t};return c.find(e=>e.match(n))}const d=new Map;return{type:e.type,config:e.config,setup:e.setup,get counters(){return{...a}},async get(t){const n=l(t),s=await o.get(n);if(void 0!==s)return a.hits++,s;const r=d.get(n);if(r)return a.inflight_dedups++,r;a.misses++;const i=(async()=>{try{const s=await e.get(t);if(void 0===s)return;const r=u(t,s);if(r)try{await o.set(n,s,1e3*r.ttl),a.populates++}catch(e){f("set",t,e)}return s}finally{d.delete(n)}})();return d.set(n,i),i},async set(t,n,s){a.writes++,await e.set(t,n,s);const r=u(t,n);if(r)try{await o.set(l(t),n,1e3*r.ttl)}catch(e){f("set",t,e)}},async delete(t){a.deletes++,await e.delete(t);try{await o.delete(l(t))}catch(e){f("delete",t,e)}}};function f(e,t,n){const o=`store-cache(${i}): cache ${e} failed for "${t}"; backing succeeded, continuing`;r?r.warn(o,{error:n}):console.warn(o,n)}}function pe(e,t){const n=t.get,o=t.set,s=t.delete;t.get=(0,j.useHooks)(n,"StoreGet",e.hooks,e.logger),t.set=(0,j.useHooks)(o,"StoreSet",e.hooks,e.logger),t.delete=(0,j.useHooks)(s,"StoreDelete",e.hooks,e.logger)}async function he(e){var t,n;const o=(0,m.assign)({globalsStatic:{},sessionStatic:{},run:!0,queueMax:1e3},e,{merge:!1,extend:!1}),s={level:null==(t=e.logger)?void 0:t.level,handler:null==(n=e.logger)?void 0:n.handler},r=(0,m.createLogger)(s),i={...o.globalsStatic,...e.globals},a={allowed:!1,config:o,consent:e.consent||{},custom:e.custom||{},destinations:{},transformers:{},stores:{},globals:i,hooks:e.hooks||{},logger:r,on:{},queue:[],round:0,session:void 0,status:{startedAt:Date.now(),in:0,out:0,failed:0,sources:{},destinations:{},dropped:{}},timing:Date.now(),user:e.user||{},sources:{},pending:{destinations:{}},push:void 0,command:void 0};var c,l;a.push=function(e,t){return(0,O.useHooks)(async(n,o={})=>await(0,O.tryCatchAsync)(async()=>{var s;const r=Date.now(),{id:i,ingest:a,respond:c,mapping:l,preChain:u,include:d,exclude:f}=o;let g=c,p=n;const h=d||f?function(e,t,n){let o=e;return t&&(o=Object.fromEntries(Object.entries(o).filter(([e])=>t.includes(e)))),n&&(o=Object.fromEntries(Object.entries(o).filter(([e])=>!n.includes(e)))),o}(e.destinations,d,f):void 0,v=null!=a?a:(0,O.createIngest)(i||"unknown");if(l){const t=await(0,O.processEventMapping)(p,l,e);if(t.ignore)return ie({ok:!0});if(l.consent&&!(0,O.getGrantedConsent)(l.consent,e.consent,t.event.consent))return ie({ok:!0});p=t.event}if((null==u?void 0:u.length)&&e.transformers&&Object.keys(e.transformers).length>0){const n=await H(e,e.transformers,u,p,v,g,i?`source.${i}.next`:void 0);if(null===n.event)return ie({ok:!0});if(n.stopped)return n.respond&&(g=n.respond),ie({ok:!0});if(n.respond&&(g=n.respond),Array.isArray(n.event)){const o=await Promise.all(n.event.map(async n=>{const o=t(n),s=de(e,o);return oe(e,s,{id:i,ingest:v,respond:g},h)}));if(i){e.status.sources[i]||(e.status.sources[i]={count:0,duration:0});const t=e.status.sources[i];t.count+=n.event.length,t.lastAt=Date.now(),t.duration+=Date.now()-r}return null!=(s=o[0])?s:ie({ok:!0})}p=n.event}const m=t(p),y=de(e,m),b=await oe(e,y,{id:i,ingest:v,respond:g},h);if(i){e.status.sources[i]||(e.status.sources[i]={count:0,duration:0});const t=e.status.sources[i];t.count++,t.lastAt=Date.now(),t.duration+=Date.now()-r}return b},t=>{if(t instanceof O.FatalError)throw t;return e.status.failed++,e.logger.error("push failed",{event:n,ingest:o.ingest,error:t}),ie({ok:!1})})(),"Push",e.hooks,e.logger)}(a,e=>({timing:Math.round((Date.now()-a.timing)/10)/100,source:{type:"collector",schema:"4",version:"4.1.0-next-1779362268386"},...e})),a.command=(c=a,l=ue,(0,S.useHooks)(async(e,t,n)=>await(0,S.tryCatchAsync)(async()=>await l(c,e,t,n),n=>{if(n instanceof S.FatalError)throw n;return c.status.failed++,c.logger.error("command failed",{command:e,data:t,error:n}),ie({ok:!1})})(),"Command",c.hooks,c.logger));const u=e.stores||{};return a.stores=await async function(e,t={}){var n;const o={};for(const[n,s]of Object.entries(t)){const{code:t,config:r={},env:i={}}=s,a=e.logger.scope("store").scope(n),c={collector:e,logger:a,id:n,config:r,env:i},l=await t(c);o[n]=l}const s=t,r=function(e){const t={};for(const n of Object.keys(e))t[n]="WHITE";const n=[],o=[];function s(r){var i;const a=t[r];if("BLACK"===a)return;if("GRAY"===a){const e=o.indexOf(r),t=o.slice(-1===e?0:e).concat(r).join(" -> ");throw new Error(`Cycle in cache.store chain: ${t}`)}t[r]="GRAY",o.push(r);const c=null==(i=e[r].cache)?void 0:i.store;if(void 0!==c){if(!(c in e))throw new Error(`Store "${r}" cache.store references "${c}", which is not declared in flow.stores`);s(c)}o.pop(),t[r]="BLACK",n.push(r)}for(const n of Object.keys(e))"WHITE"===t[n]&&s(n);return n}(s);for(const t of r){const r=s[t].cache;if(!r)continue;let i,a;void 0!==r.store?(i=o[r.store],a=r.store):(o.__cache||(o.__cache=fe()),i=o.__cache,a="__cache");const c=null!=(n=r.namespace)?n:t;e.logger.scope("store-cache").scope(t).info(`store "${t}" caches with namespace "${c}:" via ${a}`),o[t]=ge(o[t],{storeId:t,cacheConfig:r,cacheStore:i,namespace:c,logger:e.logger.scope("store-cache").scope(t)})}for(const[t,n]of Object.entries(o))"__cache"!==t&&pe(e,n);return o}(a,u),function(e,t,n){const o=new Map;for(const[n,s]of Object.entries(e))t[n]&&o.set(s,t[n]);if(0!==o.size)for(const e of[n.transformers,n.destinations,n.sources])if(e)for(const t of Object.values(e))s(t.env);function s(e){if(e)for(const[t,n]of Object.entries(e))if("object"==typeof n&&null!==n){const s=o.get(n);s&&(e[t]=s)}}}(u,a.stores,e),a.stores.__cache||(a.stores.__cache=fe()),a.destinations=await async function(e,t={}){var n,o;const s={};for(const[r,i]of Object.entries(t))(null==(o=null==(n=i.config)?void 0:n.require)?void 0:o.length)?e.pending.destinations[r]=i:s[r]=ae(i);return s}(a,e.destinations||{}),a.transformers=await async function(e,t={}){var n,o,s,r;const i={};for(const[a,c]of Object.entries(t)){const{code:t,env:l={}}=c,u=(0,C.validateStepEntry)(c,"Transformer");if(!u.ok){e.logger.warn(`Transformer ${a} invalid (${u.code}): ${u.reason}. Skipping.`);continue}const{config:d}=_(c,"before"),{config:f}=_({...c,config:d},"next"),g=Object.keys(l).length>0?{...f,env:l}:f,{cache:p}=c,h=p?{...g,cache:p}:g,v=e.logger.scope("transformer").scope(a),m={collector:e,logger:v,id:a,ingest:(0,C.createIngest)(a),config:h,env:l},y=null!=t?t:e=>{const t=c.mapping;if(t){const n=[];if(void 0!==t.data&&n.push("data"),t.mapping)for(const[e,o]of Object.entries(t.mapping))if("object"==typeof o&&null!==o)for(const[t,s]of Object.entries(o)){if("object"!=typeof s||null===s)continue;const o=s;void 0!==o.data&&n.push(`mapping[${e}][${t}].data`),void 0!==o.silent&&n.push(`mapping[${e}][${t}].silent`)}return n.length>0&&e.collector.logger.warn(`Transformer ${a}: \`${n.join(", ")}\` ignored at transformer position (only event-mutating fields apply).`),{type:"pass",config:e.config,push:async n=>{const o=await(0,C.processEventMapping)(n,t,e.collector);return!o.ignore&&{event:o.event}}}}return{type:"pass",config:e.config,push:e=>({event:e})}},b=await y(m);void 0!==c.before&&void 0===(null==(n=b.config)?void 0:n.before)&&(b.config={...null!=(o=b.config)?o:{},before:c.before}),void 0!==c.next&&void 0===(null==(s=b.config)?void 0:s.next)&&(b.config={...null!=(r=b.config)?r:{},next:c.next}),i[a]=b}return i}(a,e.transformers||{}),a}async function ve(e){e=e||{};const t=await he(e),n=(o=t,{type:"elb",config:{},push:async(e,t,n,s,r)=>{if("string"==typeof e&&e.startsWith("walker ")){const n=e.replace("walker ","");return o.command(n,t)}let i;if("string"==typeof e)i={name:e},t&&"object"==typeof t&&!Array.isArray(t)&&(i.data=t);else{if(!e||"object"!=typeof e)return ie({ok:!1});i=e,t&&"object"==typeof t&&!Array.isArray(t)&&(i.data={...i.data||{},...t})}return n&&"object"==typeof n&&(i.context=n),s&&Array.isArray(s)&&(i.nested=s),r&&"object"==typeof r&&(i.custom=r),o.push(i)}});var o;t.sources.elb=n,await async function(e,t={}){var n;const o={};for(const[s,r]of Object.entries(t)){const t=await R(e,s,r);if(!t)continue;const i=null==(n=r.config)?void 0:n.require;t.config={...t.config,init:!1,...i?{require:[...i]}:{}},o[s]=t}Object.assign(e.sources,o);for(const t of Object.keys(o)){const n=e.sources[t];let o=!1;n.init&&await(0,k.tryCatchAsync)(n.init.bind(n),n=>{if(n instanceof k.FatalError)throw n;o=!0,e.status.failed++,e.logger.scope("source").error("source init failed",{sourceId:t,error:n})})(),o||(n.config.init=!0,K(n)&&await F(e,n,t))}return o}(t,e.sources||{});const{consent:s,user:r,globals:i,custom:a}=e;s&&await t.command("consent",s),r&&await t.command("user",r),i&&Object.assign(t.globals,i),a&&Object.assign(t.custom,a),t.config.run&&await t.command("run");let c=n.push;const l=Object.values(t.sources).filter(e=>"elb"!==e.type),u=l.find(e=>e.config.primary);return u?c=u.push:l.length>0&&(c=l[0].push),{collector:t,elb:c}}var me=async e=>{let t;return{get flow(){return t},trigger:(n,o)=>async n=>{var s,r,i,a,c,l,u,d,f;const g=o||{};if(g.url){const e=new URL(g.url);window.history.replaceState({},"",e.pathname+e.search)}if(g.referrer&&Object.defineProperty(document,"referrer",{value:g.referrer,configurable:!0}),g.sessionData){const e=g.sessionKey||"elbSessionId";localStorage.setItem(e,JSON.stringify(g.sessionData))}if(g.deviceId){const e=g.deviceKey||"elbDeviceId";localStorage.setItem(e,g.deviceId)}if(!t){const n=await ve({...e,run:null==(s=e.run)||s});t={collector:n.collector,elb:n.elb};const o=g.sessionKey||(null==(c=null==(a=null==(i=null==(r=e.sources)?void 0:r.session)?void 0:i.config)?void 0:a.settings)?void 0:c.sessionKey)||"elbSessionId",p=g.deviceKey||(null==(f=null==(d=null==(u=null==(l=e.sources)?void 0:l.session)?void 0:u.config)?void 0:d.settings)?void 0:f.deviceKey)||"elbDeviceId";localStorage.removeItem(o),localStorage.removeItem(p),g.sessionData&&localStorage.setItem(o,JSON.stringify(g.sessionData)),g.deviceId&&localStorage.setItem(p,g.deviceId),e.consent&&await t.collector.command("consent",e.consent)}}}},ye=(e,t)=>{if(!e||"object"!=typeof e)return;const n=e,o=t.localStorage;if(n.sessionData&&"object"==typeof n.sessionData){const e="string"==typeof n.sessionKey?n.sessionKey:"elbSessionId";o.setItem(e,JSON.stringify(n.sessionData))}if("string"==typeof n.deviceId){const e="string"==typeof n.deviceKey?n.deviceKey:"elbDeviceId";o.setItem(e,n.deviceId)}};//# sourceMappingURL=dev.js.map
1
+ "use strict";var e,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,o=Object.getOwnPropertyNames,s=Object.prototype.hasOwnProperty,r=(e,n)=>{for(var o in n)t(e,o,{get:n[o],enumerable:!0})},i={};r(i,{examples:()=>f,schemas:()=>a}),module.exports=(e=i,((e,r,i,a)=>{if(r&&"object"==typeof r||"function"==typeof r)for(let c of o(r))s.call(e,c)||c===i||t(e,c,{get:()=>r[c],enumerable:!(a=n(r,c))||a.enumerable});return e})(t({},"__esModule",{value:!0}),e));var a={};r(a,{SettingsSchema:()=>u,settings:()=>d});var c=require("@walkeros/core/dev"),l=require("@walkeros/core/dev"),u=l.z.object({storage:l.z.boolean().default(!1).describe("Enable persistent storage for session/device IDs").optional(),consent:l.z.union([l.z.string(),l.z.array(l.z.string())]).describe("Consent key(s) required to enable storage mode").optional(),length:l.z.number().default(30).describe("Session timeout in minutes").optional(),pulse:l.z.boolean().default(!1).describe("Keep session alive on each event").optional(),sessionKey:l.z.string().default("elbSessionId").describe("Storage key for session ID").optional(),sessionStorage:l.z.enum(["local","session"]).default("local").describe("Storage type for session").optional(),deviceKey:l.z.string().default("elbDeviceId").describe("Storage key for device ID").optional(),deviceStorage:l.z.enum(["local","session"]).default("local").describe("Storage type for device").optional(),deviceAge:l.z.number().default(30).describe("Device ID age in days").optional(),cb:l.z.any().describe("Custom session callback function or false to disable").optional(),clickIds:l.z.array(l.ClickIdEntrySchema).describe("Custom click-ID registry. Entries with a `param` matching a default override the platform name in place; new params append to the end of the priority list.").optional()}),d=(0,c.zodToSchema)(u),f={};r(f,{createTrigger:()=>me,step:()=>g,trigger:()=>ye});var g={};r(g,{newMarketingSession:()=>p,returningVisitor:()=>h});var p={title:"New marketing session",description:"A visit with UTM parameters starts a new session and emits walker user, session, and session start calls.",trigger:{type:"load",options:{url:"https://example.com/?utm_source=google&utm_medium=cpc&utm_campaign=winter-sale"}},in:{storage:!0},out:[["elb","user",{session:"s3ss10n-id",device:"d3v1c3-id"}],["elb","session",{id:"s3ss10n-id",start:17e11,isNew:!0,count:1,runs:1,marketing:!0,source:"google",medium:"cpc",campaign:"winter-sale",referrer:"",device:"d3v1c3-id",isStart:!0,storage:!0,updated:17e11}],["elb",{name:"session start",data:{id:"s3ss10n-id",start:17e11,isNew:!0,count:1,runs:1,marketing:!0,source:"google",medium:"cpc",campaign:"winter-sale",referrer:"",device:"d3v1c3-id",isStart:!0,storage:!0,updated:17e11}}]]},h={title:"Returning visitor",description:"A returning visit with a google referrer reuses the stored device id and increments the session count.",trigger:{type:"load",options:{referrer:"https://google.com"}},in:{storage:!0},out:[["elb","user",{session:"n3w-s3ss10n",device:"d3v1c3-id"}],["elb","session",{id:"n3w-s3ss10n",start:1700001e6,isNew:!1,count:3,runs:1,referrer:"google.com",device:"d3v1c3-id",isStart:!0,storage:!0,updated:1700001e6}],["elb",{name:"session start",data:{id:"n3w-s3ss10n",start:1700001e6,isNew:!1,count:3,runs:1,referrer:"google.com",device:"d3v1c3-id",isStart:!0,storage:!0,updated:1700001e6}}]]},v=require("@walkeros/core"),m=require("@walkeros/core"),y=require("@walkeros/core"),b=require("@walkeros/core"),w=require("@walkeros/core"),k=require("@walkeros/core"),C=require("@walkeros/core"),q=require("@walkeros/core"),O=require("@walkeros/core"),x=require("@walkeros/core"),S=require("@walkeros/core"),j=require("@walkeros/core"),I=require("@walkeros/core"),A={Action:"action",Actions:"actions",Config:"config",Consent:"consent",Context:"context",Custom:"custom",Destination:"destination",Elb:"elb",Globals:"globals",Hook:"hook",Init:"init",Link:"link",On:"on",Prefix:"data-elb",Ready:"ready",Run:"run",Session:"session",Shutdown:"shutdown",User:"user",Walker:"walker"};function $(e,t){return e.storeId&&t.stores[e.storeId]?t.stores[e.storeId]:t.stores.__cache}function D(e){var t;const n={};for(const[o,s]of Object.entries(e)){const e=null==(t=s.config)?void 0:t.next;"string"==typeof e||Array.isArray(e)&&e.every(e=>"string"==typeof e)?n[o]={next:e}:n[o]={}}return n}function _(e,t){const n=e.config||{},o=e[t];return void 0!==o?{config:{...n,[t]:o},chainValue:o}:{config:n,chainValue:void 0}}function E(e,t={}){if(!e)return[];if(Array.isArray(e))return e;const n=[],o=new Set;let s=e;for(;s&&t[s]&&!o.has(s);){o.add(s),n.push(s);const e=t[s].next;if(Array.isArray(e)){n.push(...e);break}s=e}return n}async function P(e,t,n){if(t.init&&!t.config.init){const o=t.type||"unknown",s=e.logger.scope(`transformer:${o}`),r={collector:e,logger:s,id:n,ingest:(0,C.createIngest)(n),config:t.config,env:N(t.config.env)};s.debug("init");const i=await(0,C.useHooks)(t.init,"TransformerInit",e.hooks,e.logger)(r);if(!1===i)return!1;t.config={...i||t.config,env:(null==i?void 0:i.env)||t.config.env,init:!0},s.debug("init done")}return!0}async function M(e,t,n,o,s,r){const i=t.type||"unknown",a=e.logger.scope(`transformer:${i}`),c={collector:e,logger:a,id:n,ingest:s,config:t.config,env:{...N(t.config.env),...r?{respond:r}:{}}};a.debug("push",{event:o.name});const l=await(0,C.useHooks)(t.push,"TransformerPush",e.hooks,e.logger)(o,c);return a.debug("push done"),l}function z(e,t){return e?{...e,_meta:{...e._meta,path:[...e._meta.path]}}:(0,C.createIngest)(t)}async function H(e,t,n,o,s,r,i){var a,c,l,u,d,f,g,p;s||(s=(0,C.createIngest)(null!=(a=n[0])?a:"chain")),i&&s._meta&&(s._meta.chainPath=i);let h=o,v=r;for(const o of n){const r=t[o];if(!r){e.logger.warn(`Transformer not found: ${o}`);continue}if(s&&s._meta&&s._meta.path.length>256)return e.logger.error(`Max path length exceeded at ${o}`),{event:null,respond:v};if(s&&s._meta&&(s._meta.hops++,s._meta.path.push(o)),!await(0,C.tryCatchAsync)(P,t=>{if(t instanceof C.FatalError)throw t;return e.status.failed++,e.logger.scope(`transformer:${r.type||"unknown"}`).error("transformer init failed",{transformer:o,error:t}),!1})(e,r,o))return{event:null,respond:v};if(i&&void 0!==(null==(l=null==(c=r.config)?void 0:c.chainMocks)?void 0:l[i])){const t=r.config.chainMocks[i];e.logger.scope(`transformer:${r.type||"unknown"}`).debug("chainMock",{chain:i}),h=t;continue}if(void 0!==(null==(u=r.config)?void 0:u.mock)){e.logger.scope(`transformer:${r.type||"unknown"}`).debug("mock"),h=r.config.mock;continue}if(null==(d=r.config)?void 0:d.disabled)continue;const a=null==(f=r.config)?void 0:f.cache,m=a?(0,C.compileCache)(a):void 0,y=m?$(m,e):void 0;let b;if(m&&y){const e=(0,C.buildCacheContext)(s,h),t=await(0,C.checkCache)(m,y,e);if("HIT"===(null==t?void 0:t.status)&&t.value){if(h=t.value,m.stop)return{event:h,respond:v,stopped:!0};continue}"MISS"===(null==t?void 0:t.status)&&(b={key:t.key,ttl:t.rule.ttl})}const w=r.config.before;if(w){const n=(0,C.getNextSteps)(w,(0,C.buildCacheContext)(s,h));if(1===n.length){const o=E(n[0],D(t));if(o.length>0){const n=await H(e,t,o,h,s,v,i);if(null===n.event)return{event:null,respond:null!=(g=n.respond)?g:v};if(n.stopped)return{event:Array.isArray(n.event)?n.event[0]:n.event,respond:null!=(p=n.respond)?p:v,stopped:!0};n.respond&&(v=n.respond),h=Array.isArray(n.event)?n.event[0]:n.event}}else n.length>1&&await Promise.all(n.map(n=>(0,C.tryCatchAsync)(H,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,E(n,D(t)),h,z(s,n),void 0,i)))}const k=await(0,C.tryCatchAsync)(M,t=>(e.logger.scope(`transformer:${r.type||"unknown"}`).error("Push failed",{error:t}),!1))(e,r,o,h,s,v);if(!1===k)return{event:null,respond:v};if(Array.isArray(k)){const r=n.slice(n.indexOf(o)+1),a=await Promise.all(k.map(async n=>{const o=n.event||h,a=z(s,"unknown");if(n.next){const s=(0,C.getNextSteps)(n.next,(0,C.buildCacheContext)(a,o));if(0===s.length)return{event:o,respond:v};if(1===s.length){const n=E(s[0],D(t));return n.length>0?H(e,t,n,o,a,v,i):{event:o,respond:v}}return(await Promise.all(s.map(n=>(0,C.tryCatchAsync)(H,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,E(n,D(t)),o,z(a,n),void 0,i)))).map(e=>({event:e.event,respond:void 0}))}return r.length>0?H(e,t,r,o,a,v,i):{event:o,respond:v}}));let c=v;const l=[];for(const e of a.flat())if(null!==e)if(e&&"object"==typeof e&&"event"in e){const t=e;if(t.respond&&(c=t.respond),null===t.event)continue;Array.isArray(t.event)?l.push(...t.event):l.push(t.event)}else l.push(e);return 0===l.length?{event:null,respond:c}:1===l.length?{event:l[0],respond:c}:{event:l,respond:c}}if(k&&"object"==typeof k){const{event:n,respond:o,next:r}=k;if(o&&(v=o),void 0!==r){const o=(0,C.getNextSteps)(r,(0,C.buildCacheContext)(s,h));if(0===o.length){n&&(h=n);continue}if(1===o.length){const a=E(o[0],D(t));return a.length>0?H(e,t,a,n||h,s,v,i):(e.logger.warn(`Branch target not found: ${JSON.stringify(r)}`),{event:null,respond:v})}return await Promise.all(o.map(o=>(0,C.tryCatchAsync)(H,t=>(e.logger.scope("transformer:many").error(`many branch ${o} failed`,{error:t}),{event:null,respond:void 0}))(e,t,E(o,D(t)),n||h,z(s,o),void 0,i))),{event:null,respond:void 0}}n&&(h=n)}b&&y&&(0,C.storeCache)(y,b.key,h,b.ttl);const q=r.config.next,O="string"==typeof q||Array.isArray(q)&&q.every(e=>"string"==typeof e),x=void 0!==q&&!O;if((!k||"object"==typeof k&&!k.next)&&x){const n=(0,C.getNextSteps)(r.config.next,(0,C.buildCacheContext)(s,h));if(1===n.length){const o=E(n[0],D(t));return o.length>0?H(e,t,o,h,s,v,i):{event:h,respond:v}}return n.length>1?(await Promise.all(n.map(n=>(0,C.tryCatchAsync)(H,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,E(n,D(t)),h,z(s,n),void 0,i))),{event:null,respond:void 0}):{event:h,respond:v}}}return{event:h,respond:v}}function N(e){return e&&(0,C.isObject)(e)?e:{}}function T(e){return"string"==typeof e||!(!Array.isArray(e)||!e.every(e=>"string"==typeof e))}async function F(e,t,n){var o,s;if(!t.on||!(null==(o=t.queueOn)?void 0:o.length))return;const r=t.queueOn;t.queueOn=[];const i=n||(null==(s=t.config)?void 0:s.id)||"unknown";for(const{type:n,data:o}of r)await(0,k.tryCatchAsync)(t.on,t=>{if(t instanceof k.FatalError)throw t;e.status.failed++,e.logger.scope("source").error("source on flush failed",{sourceId:i,type:n,error:t})})(n,o)}function K(e){var t;return Boolean(e.config.init)&&!(null==(t=e.config.require)?void 0:t.length)}async function R(e,t,n){var o;const{code:s,config:r={},env:i={},primary:a,next:c,before:l,cache:u}=n,d=u,f=d?(0,k.compileCache)({...d,stop:null==(o=d.stop)||o}):void 0,g=T(c)?E(c,D(e.transformers)):void 0,p=T(l)?E(l,D(e.transformers)):void 0,h=i.push,v=null!=h?h:e.push,m=Boolean(h),y=async(n,o,s)=>{var i;let a;const u=null!=p?p:void 0!==l?(()=>{const t=(0,k.getNextSteps)(l,(0,k.buildCacheContext)(s.ingest));return 0===t.length?[]:E(1===t.length?t[0]:t,D(e.transformers))})():[];let d=[n];if(u.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const o=await H(e,e.transformers,u,n,s.ingest,s.respond,`source.${t}.before`);if(null===o.event)return{ok:!0};if(o.stopped)return o.respond&&(s.respond=o.respond),{ok:!0};o.respond&&(s.respond=o.respond),d=Array.isArray(o.event)?o.event:[o.event]}if(f){const t=$(f,e);if(t){const n=(0,k.buildCacheContext)(s.ingest),o=await(0,k.checkCache)(f,t,n);if(o){if("HIT"===o.status&&void 0!==o.value&&f.stop){let t=o.value;return o.rule.update&&(t=await(0,k.applyUpdate)(t,o.rule.update,{...n,cache:{status:"HIT"}},e)),null==(i=s.respond)||i.call(s,t),{ok:!0}}if("MISS"===o.status&&f.stop&&s.respond){const r=s.respond,i=o.rule.update,c={...n,cache:{status:"MISS"}},l=o.key,u=o.rule.ttl,d=n=>{(0,k.storeCache)(t,l,n,u),i?a=(async()=>{const t=await(0,k.applyUpdate)(n,i,c,e);r(t)})():r(n)};s.respond=d}"MISS"!==o.status||f.stop||(0,k.storeCache)(t,o.key,!0,o.rule.ttl)}}}const h=g?{kind:"single",preChain:g}:void 0!==c?(()=>{const t=(0,k.getNextSteps)(c,(0,k.buildCacheContext)(s.ingest));return 0===t.length?{kind:"single",preChain:[]}:1===t.length?{kind:"single",preChain:E(t[0],D(e.transformers))}:{kind:"many",branches:t.map(t=>E(t,D(e.transformers)))}})():{kind:"single",preChain:[]};let y={ok:!0};for(const n of d)"many"===h.kind?(await Promise.all(h.branches.map((i,a)=>(0,k.tryCatchAsync)(async()=>m?v(n):v(n,{...o,id:t,ingest:z(s.ingest,`${t}.${a}`),respond:void 0,mapping:r,preChain:i}),t=>(e.logger.scope("source:many").error(`many branch ${a} failed`,{error:t}),{ok:!0}))())),y={ok:!0}):y=m?await v(n):await v(n,{...o,id:t,ingest:s.ingest,respond:s.respond,mapping:r,preChain:h.preChain});return a&&await a,y},b=async n=>{const o=(0,k.createIngest)(t);if(!r.ingest||void 0===n)return o;const s=await(0,k.getMappingValue)(n,r.ingest,{collector:e});return{...o,...s,_meta:o._meta}},w=e.logger.scope("source").scope(t),C={command:e.command,sources:e.sources,elb:e.sources.elb.push,logger:w,...i,push:async(e,n={})=>{const o={ingest:(0,k.createIngest)(t),respond:void 0};return y(e,n,o)}},q={collector:e,logger:w,id:t,config:r,env:C,withScope:async(e,t,n)=>{const o={ingest:await b(e),respond:t};return n({...C,push:(e,t={})=>y(e,t,o),ingest:o.ingest,respond:o.respond})}},O=await(0,k.tryCatchAsync)(s,n=>{if(n instanceof k.FatalError)throw n;e.status.failed++,e.logger.scope("source").error("source factory failed",{sourceId:t,error:n})})(q);if(!O)return;const x=O.type||"unknown",S=e.logger.scope(x).scope(t);return C.logger=S,a&&(O.config={...O.config,primary:a}),O}function B(e,t,n,o){if(n instanceof b.FatalError)throw n;e.logger.scope("on").error("on callback failed",{kind:t,...o,error:n})}function G(e,t){return{collector:e,logger:e.logger.scope("on").scope(String(t))}}function U(e,t,n,o,s){if(!t.on)return;const r=t.type||"unknown",i=e.logger.scope(r).scope("on").scope(o),a={collector:e,logger:i,id:n,config:t.config,data:s,env:ce(t.env,t.config.env)};(0,w.tryCatch)(t.on,t=>B(e,"destination",t,{destId:n,type:o}))(o,a)}function W(e,t,n,o){let s;switch(t){case A.Consent:s=o||e.consent;break;case A.Session:s=e.session;break;case A.User:s=o||e.user;break;case A.Custom:s=o||e.custom;break;case A.Globals:s=o||e.globals;break;case A.Config:s=o||e.config;break;case A.Ready:case A.Run:default:s=void 0}if(n.length)switch(t){case A.Consent:!function(e,t,n){const o=n||e.consent,s=G(e,A.Consent);t.forEach(t=>{Object.keys(o).filter(e=>e in t).forEach(n=>{(0,w.tryCatch)(t[n],t=>B(e,"consent",t,{key:n}))(o,s)})})}(e,n,o);break;case A.Ready:!function(e,t){if(!e.allowed)return;const n=G(e,A.Ready);t.forEach(t=>{(0,w.tryCatch)(t,t=>B(e,"ready",t))(void 0,n)})}(e,n);break;case A.Run:!function(e,t){if(!e.allowed)return;const n=G(e,A.Run);t.forEach(t=>{(0,w.tryCatch)(t,t=>B(e,"run",t))(void 0,n)})}(e,n);break;case A.Session:!function(e,t){if(!e.session)return;const n=G(e,A.Session);t.forEach(t=>{(0,w.tryCatch)(t,t=>B(e,"session",t))(e.session,n)})}(e,n);break;default:{const o=G(e,t);n.forEach(n=>{"function"==typeof n&&(0,w.tryCatch)(n,n=>B(e,"generic",n,{type:t}))(s,o)});break}}}function L(e,t,n,o){var s;if(!Number.isFinite(n.max)||n.max<=0)throw new Error(`pushBounded: max must be > 0 (got ${n.max})`);if("dropNewest"===(null!=(s=n.onOverflow)?s:"dropOldest"))return e.length>=n.max?(o&&o([t]),{appended:!1,dropped:1}):(e.push(t),{appended:!0,dropped:0});const r=[];for(;e.length>=n.max;)r.push(e.shift());return e.push(t),r.length>0&&o&&o(r),{appended:!0,dropped:r.length}}var J=new WeakMap;function V(e,t,n,o){J.get(e)||(J.set(e,!0),t.warn(n,o))}function Y(e){J.delete(e)}var Q=Object.freeze({batched:!0});function X(e){return e===Q}function Z(e){return void 0===e?{}:"number"==typeof e?{wait:e}:{wait:e.wait,size:e.size,age:e.age}}function ee(e,t){return e.status.destinations[t]||(e.status.destinations[t]={count:0,failed:0,duration:0,queuePushSize:0,dlqSize:0}),e.status.destinations[t]}function te(e,t,n,o){var s;e.dropped[t]||(e.dropped[t]={});const r=e.dropped[t];return r[n]=(null!=(s=r[n])?s:0)+o,r[n]}function ne(e,t,n){if(!e)return[];if(Array.isArray(e)&&e.every(e=>"string"==typeof e))return E(e,t);if("string"==typeof e)return E(e,t);const o=(0,y.getNextSteps)(e,(0,y.buildCacheContext)(n));return 0===o.length?[]:1===o.length?E(o[0],t):E(o,t)}async function oe(e,t,n={},o){var s,r,i,a,c,l;const{allowed:u,consent:d,globals:f,user:g}=e;if(!u)return ie({ok:!1});if(t){const n=e.config.queueMax;if(void 0===n)throw new Error("Collector.Config.queueMax is undefined; defaults must be seeded by collector()");const o=L(e.queue,t,{max:n});if(o.dropped>0){const t=te(e.status,(0,y.stepId)("collector"),"queue",o.dropped);V(e.queue,e.logger,"collector.queue overflow; oldest events dropped",{buffer:"queue",cap:n,droppedCount:t})}else e.queue.length<n&&Y(e.queue);e.status.in++}o||(o=e.destinations);const p=e.transformers?D(e.transformers):{},h=await Promise.all(Object.entries(o||{}).map(async([o,s])=>{var r,i,a,c;if(s.config.disabled)return{id:o,destination:s,skipped:!0};let l=(s.queuePush||[]).map(e=>({...e,consent:d}));s.queuePush=[],t&&l.push((0,y.clone)(t));const u=n.ingest?{...n.ingest,_meta:{...n.ingest._meta,path:[...n.ingest._meta.path]}}:(0,y.createIngest)("unknown");if(!l.length&&!(null==(r=s.queueOn)?void 0:r.length))return{id:o,destination:s,skipped:!0};if(!l.length&&(null==(i=s.queueOn)?void 0:i.length)){let t=!1;try{t=await se(e,s,o)}catch(t){e.status.failed++;const n=s.type||"unknown";e.logger.scope(n).error("destination init failed",{error:t instanceof Error?t.message:String(t)})}return{id:o,destination:s,skipped:!t}}const h=[],v=l.filter(e=>{const t=(0,y.getGrantedConsent)(s.config.consent,d,e.consent);return!t||(e.consent=t,h.push(e),!1)});if(v.length>0){const t=s.queuePush,n=s.config.id||o,r={max:null!=(a=s.config.queueMax)?a:1e3};let i=0;for(const e of v)i+=L(t,e,r).dropped;if(i>0){ee(e,n);const o=te(e.status,(0,y.stepId)("destination",n),"queue",i);V(t,e.logger.scope(s.type||"unknown"),"destination.queuePush overflow; oldest events dropped",{buffer:"queuePush",destination:n,cap:r.max,droppedCount:o})}else t.length<r.max&&Y(t)}if(!h.length)return{id:o,destination:s,queue:l};let m,b,w=!1;try{w=await se(e,s,o)}catch(t){e.status.failed++;const n=s.type||"unknown";e.logger.scope(n).error("destination init failed",{error:t instanceof Error?t.message:String(t)})}if(!w)return{id:o,destination:s,queue:l};s.dlq||(s.dlq=[]);const k=ne(s.config.before,p,u),C=s.config.next,q=null==(c=s.config)?void 0:c.cache,O=q?(0,y.compileCache)(q):void 0,x=O?$(O,e):void 0;let S=0,j=0;return await Promise.all(h.map(async t=>{let r;if(t.globals=(0,y.assign)(f,t.globals),t.user=(0,y.assign)(g,t.user),(null==O?void 0:O.stop)&&x){const e=(0,y.buildCacheContext)(u,t),n=await(0,y.checkCache)(O,x,e);if("HIT"===(null==n?void 0:n.status))return t;"MISS"===(null==n?void 0:n.status)&&(r={key:n.key,ttl:n.rule.ttl})}let i=t,a=n.respond;if(k.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const s=await H(e,e.transformers,k,t,u,n.respond,`destination.${o}.before`);if(null===s.event)return t;s.respond&&(a=s.respond),i=Array.isArray(s.event)?s.event[0]:s.event}if(O&&!O.stop&&x){const e=(0,y.buildCacheContext)(u,i),n=await(0,y.checkCache)(O,x,e);if("HIT"===(null==n?void 0:n.status))return t;"MISS"===(null==n?void 0:n.status)&&(r={key:n.key,ttl:n.rule.ttl})}const c=Date.now();let l=!1;const d=await(0,y.tryCatchAsync)(re,t=>{var n;const r=s.type||"unknown";e.logger.scope(r).error("Push failed",{error:t,event:i.name}),m=t,l=!0;const a=s.dlq,c=s.config.id||o,u={max:null!=(n=s.config.dlqMax)?n:100},d=L(a,[i,t],u);if(d.dropped>0){ee(e,c);const t=te(e.status,(0,y.stepId)("destination",c),"dlq",d.dropped);V(a,e.logger.scope(s.type||"unknown"),"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:c,cap:u.max,droppedCount:t})}else a.length<u.max&&Y(a)})(e,s,o,i,u,a);if(S+=Date.now()-c,r&&x&&void 0===s.config.mock&&(0,y.storeCache)(x,r.key,null==d||d,r.ttl),void 0===d||X(d)||(b=d),X(d)&&j++,!l&&C){void 0!==d&&(u._response=d);const t=ne(C,p,u);if(t.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const n=await H(e,e.transformers,t,i,u,a,`destination.${o}.next`);n.respond&&(a=n.respond)}}return t})),{id:o,destination:s,error:m,response:b,totalDuration:S,batchedCount:j,allowedCount:h.length}})),v={},m={},b={};for(const t of h){if(t.skipped)continue;const n=t.destination,o={type:n.type||"unknown",data:t.response};ee(e,t.id);const u=e.status.destinations[t.id],d=Date.now();if(u.queuePushSize=null!=(r=null==(s=n.queuePush)?void 0:s.length)?r:0,u.dlqSize=null!=(a=null==(i=n.dlq)?void 0:i.length)?a:0,t.error)o.error=t.error,b[t.id]=o,u.failed++,u.lastAt=d,u.duration+=t.totalDuration||0,e.status.failed++;else if(t.queue&&t.queue.length)m[t.id]=o;else{const n=null!=(c=t.batchedCount)?c:0,s=null!=(l=t.allowedCount)?l:0;(Math.max(0,s-n)>0||0===s)&&(v[t.id]=o,u.count++,u.lastAt=d,u.duration+=t.totalDuration||0,e.status.out++)}}return ie({event:t,...Object.keys(v).length&&{done:v},...Object.keys(m).length&&{queued:m},...Object.keys(b).length&&{failed:b}})}async function se(e,t,n){var o;if(t.init&&!t.config.init){const s=t.type||"unknown",r=e.logger.scope(s),i={collector:e,logger:r,id:n,config:t.config,env:ce(t.env,t.config.env)};r.debug("init");const a=await(0,y.useHooks)(t.init,"DestinationInit",e.hooks,e.logger)(i);if(!1===a)return a;if(t.config={...a||t.config,init:!0},null==(o=t.queueOn)?void 0:o.length){const o=t.queueOn;t.queueOn=[];for(const{type:s,data:r}of o)U(e,t,n,s,r)}r.debug("init done")}return!0}async function re(e,t,n,o,s,r){var i,a,c,l,u,d,f;const{config:g}=t,p=await(0,y.processEventMapping)(o,g,e);if(p.ignore)return!1;const h=t.type||"unknown",v=e.logger.scope(h),m={collector:e,logger:v,id:n,config:g,data:p.data,rule:p.mapping,ingest:s,env:{...ce(t.env,g.env),...r?{respond:r}:{}}};if(void 0!==g.mock)return v.debug("mock",{event:p.event.name}),g.mock;const b=p.mapping,w=p.mappingKey||"* *";if((null==b?void 0:b.batch)&&t.pushBatch&&void 0===g.mock){if(t.batches=t.batches||{},!t.batches[w]){const o={key:w,entries:[],events:[],data:[]},s=Z(b.batch),r=Z(g.batch),f=null!=(a=null!=(i=s.wait)?i:r.wait)?a:3e4,p=null!=(l=null!=(c=s.size)?c:r.size)?l:1e3,h=null!=(d=null!=(u=s.age)?u:r.age)?d:3e4,m=ce(t.env,g.env),k=(0,y.debounce)(async()=>{var o;const s=t.batches[w].batched;if(0===s.entries.length)return;const r={key:s.key,entries:s.entries,events:s.events,data:s.data};s.entries=[],s.events=[],s.data=[];const i=r.entries[0],a={collector:e,logger:v,id:n,config:g,data:void 0,rule:i.rule,ingest:i.ingest,env:{...m,...i.respond?{respond:i.respond}:{}}};v.debug("push batch",{events:r.entries.length});const c=t.config.id||n,l=ee(e,c);let u=!0;await(0,y.tryCatchAsync)((0,y.useHooks)(t.pushBatch,"DestinationPushBatch",e.hooks,e.logger),n=>{var o;u=!1;const s=t.dlq=t.dlq||[],i={max:null!=(o=t.config.dlqMax)?o:100};let a=0;for(const e of r.entries)a+=L(s,[e.event,n],i).dropped;if(a>0){const t=te(e.status,(0,y.stepId)("destination",c),"dlq",a);V(s,v,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:c,cap:i.max,droppedCount:t})}else s.length<i.max&&Y(s);l.failed+=r.entries.length,l.dlqSize=s.length,e.status.failed+=r.entries.length,v.error("Push batch failed",{error:n instanceof Error?n.message:String(n),entries:r.entries.length})})(r,a),v.debug("push batch done"),l.inFlightBatch=Math.max(0,(null!=(o=l.inFlightBatch)?o:0)-r.entries.length),u&&(l.count+=r.entries.length,l.lastAt=Date.now(),e.status.out+=r.entries.length)},{wait:f,size:p,age:h});t.batches[w]={batched:o,batchFn:()=>{k()},flush:async()=>{await k.flush()}}}const o=t.batches[w];o.batched.entries.push({event:p.event,ingest:s,respond:r,rule:b,data:p.data}),o.batched.events.push(p.event),(0,y.isDefined)(p.data)&&o.batched.data.push(p.data);const h=t.config.id||n,m=ee(e,h);return m.inFlightBatch=(null!=(f=m.inFlightBatch)?f:0)+1,o.batchFn(),Q}{v.debug("push",{event:p.event.name});const n=await(0,y.useHooks)(t.push,"DestinationPush",e.hooks,e.logger)(p.event,m);return v.debug("push done"),n}}function ie(e){return{ok:!(null==e?void 0:e.failed),...e}}function ae(e){const{code:t,config:n={},env:o={},cache:s}=e,{config:r}=_(e,"before"),{config:i}=_({...e,config:r},"next"),a={...t.config,...n,...i};s&&(a.cache=s);const c=ce(t.env,o);return{...t,config:a,env:c}}function ce(e,t){return e||t?t?e&&(0,y.isObject)(e)&&(0,y.isObject)(t)?{...e,...t}:t:e:{}}async function le(e,t,n){const o=Object.entries(e).map(async([e,o])=>{var s;const r=o.destroy;if(!r)return;const i=o.type||"unknown",a=n.scope(i),c={id:e,config:o.config,env:null!=(s=o.env)?s:{},logger:a};try{await Promise.race([r(c),new Promise((n,o)=>setTimeout(()=>o(new Error(`${t} '${e}' destroy timed out`)),5e3))])}catch(n){a.error(`${t} '${e}' destroy failed: ${n}`)}});await Promise.allSettled(o)}async function ue(e,t,n){let o,s,r=!1;switch(t){case A.Config:(0,O.isObject)(n)&&((0,q.assign)(e.config,n,{shallow:!1}),s=n,r=!0);break;case A.Consent:if((0,O.isObject)(n)){const{update:t}=function(e,t){const n={};return Object.entries(t).forEach(([e,t])=>{n[e]=!!t}),e.consent=(0,v.assign)(e.consent,n),{update:n}}(e,n);s=t,r=!0}break;case A.Custom:(0,O.isObject)(n)&&(e.custom=(0,q.assign)(e.custom,n),s=n,r=!0);break;case A.Destination:(0,O.isObject)(n)&&"code"in n&&(0,O.isObject)(n.code)&&(o=await async function(e,t){const{code:n,config:o={},env:s={},before:r,next:i,cache:a}=t;if(!(0,y.isFunction)(n.push))return ie({ok:!1,failed:{invalid:{type:"invalid",error:"Destination code must have a push method"}}});const c=o||{init:!1};let l=r?{...c,before:r}:{...c};i&&(l={...l,next:i}),a&&(l={...l,cache:a});const u={...n,config:l,env:ce(n.env,s)};let d=u.config.id;if(!d)do{d=(0,y.getId)(5,"abcdefghijklmnopqrstuvwxyz")}while(e.destinations[d]);return e.destinations[d]=u,!1!==u.config.queue&&(u.queuePush=[...e.queue]),oe(e,void 0,{},{[d]:u})}(e,n));break;case A.Globals:(0,O.isObject)(n)&&(e.globals=(0,q.assign)(e.globals,n),s=n,r=!0);break;case A.Hook:if((0,O.isObject)(n)&&(0,q.isString)(n.name)&&(0,q.isFunction)(n.fn)){const{name:t,fn:o}=n;e.hooks[t]=o,s=n,r=!0}break;case A.On:if((0,O.isObject)(n)&&(0,q.isString)(n.type)){const{type:t,rules:o}=n;await async function(e,t,n){const o=e.on,s=o[t]||[],r=(0,b.isArray)(n)?n:[n];r.forEach(e=>{s.push(e)}),o[t]=s,W(e,t,r)}(e,t,o)}break;case A.Ready:r=!0;break;case A.Run:o=await async function(e,t){return e.allowed=!0,e.timing=Date.now(),t&&(t.consent&&(e.consent=(0,q.assign)(e.consent,t.consent)),t.user&&(e.user=(0,q.assign)(e.user,t.user)),t.globals&&(e.globals=(0,q.assign)(e.config.globalsStatic||{},t.globals)),t.custom&&(e.custom=(0,q.assign)(e.custom,t.custom))),Object.values(e.destinations).forEach(e=>{e.queuePush=[]}),e.queue=[],e.round++,await oe(e)}(e,n),r=!0;break;case A.Session:r=!0;break;case A.Shutdown:await async function(e){const t=e.logger;await le(e.sources,"source",t),await le(e.destinations,"destination",t),await le(e.transformers,"transformer",t),await le(e.stores,"store",t)}(e);break;case A.User:(0,O.isObject)(n)&&((0,q.assign)(e.user,n,{shallow:!1}),s=n,r=!0)}return r&&(await async function(e,t,n,o){var s,r;let i,a=n||[];switch(n||(a=e.on[t]||[]),t){case A.Consent:i=o||e.consent;break;case A.Session:i=e.session;break;case A.User:i=o||e.user;break;case A.Custom:i=o||e.custom;break;case A.Globals:i=o||e.globals;break;case A.Config:i=o||e.config;break;case A.Ready:case A.Run:default:i=void 0}let c=!1;for(const[n,o]of Object.entries(e.sources)){if(null==(s=o.config.require)?void 0:s.length){const e=o.config.require.indexOf(t);-1!==e&&o.config.require.splice(e,1)}o.on&&(K(o)?!1===await(0,w.tryCatchAsync)(o.on,o=>B(e,"source",o,{sourceId:n,type:t}))(t,i)&&(c=!0):(o.queueOn=o.queueOn||[],o.queueOn.push({type:t,data:i})))}Object.entries(e.destinations).forEach(([n,o])=>{if(o.on){if(!o.config.init)return o.queueOn=o.queueOn||[],void o.queueOn.push({type:t,data:i});U(e,o,n,t,i)}});for(const[t,n]of Object.entries(e.sources))K(n)&&(null==(r=n.queueOn)?void 0:r.length)&&await F(e,n,t);return Object.keys(e.pending.destinations).length>0&&await async function(e,t){var n;for(const[o,s]of Object.entries(e.pending.destinations)){if(!e.pending.destinations[o]||e.destinations[o])continue;const r=null==(n=s.config)?void 0:n.require;if(!r)continue;const i=r.indexOf(t);if(-1===i)continue;if(r.splice(i,1),r.length>0)continue;delete e.pending.destinations[o];const a=ae(s);!1!==a.config.queue&&(a.queuePush=[...e.queue]),e.destinations[o]=a}}(e,t),W(e,t,a,o),!c}(e,t,void 0,s),o=await oe(e)),o||ie({ok:!0})}function de(e,t){if(!t.name)throw new Error("Event name is required");const[n,o]=t.name.split(" ");if(!n||!o)throw new Error("Event name is invalid");const{timestamp:s=Date.now(),name:r=`${n} ${o}`,data:i={},context:a={},globals:c=e.globals,custom:l={},user:u=e.user,nested:d=[],consent:f=e.consent,id:g=(0,q.getSpanId)(),trigger:p="",entity:h=n,action:v=o,timing:m=0,source:y={type:"collector",schema:"4"}}=t;return{name:r,data:i,context:a,globals:c,custom:l,user:u,nested:d,consent:f,id:g,trigger:p,entity:h,action:v,timestamp:s,timing:m,source:y}}function fe(e={}){var t,n,o;const s=null!=(t=e.maxEntries)?t:1e4,r=null!=(n=e.lowWaterMark)?n:.8,i=null!=(o=e.sweepIntervalMs)?o:6e4,a=Math.floor(s*r),c=new Map,l={hits:0,misses:0,populates:0,writes:0,deletes:0,evictions_entries:0,evictions_ttl:0};let u;return i>0&&(u=setInterval(function(){const e=Date.now();let t=0;for(const[n,o]of c)void 0!==o.expires&&o.expires<=e&&(c.delete(n),t++);l.evictions_ttl+=t},i),u&&"function"==typeof u.unref&&u.unref()),{type:"memory",config:{},get(e){const t=c.get(e);if(t)return void 0!==t.expires&&t.expires<=Date.now()?(c.delete(e),l.evictions_ttl++,void l.misses++):(c.delete(e),c.set(e,t),l.hits++,t.value);l.misses++},set(e,t,n){const o=!c.has(e);o||c.delete(e),c.set(e,{value:t,expires:void 0!==n?Date.now()+n:void 0}),l.writes++,o&&l.populates++,c.size>s&&function(){if(c.size<=s)return;const e=c.size-a;let t=0;for(const n of c.keys()){if(t>=e)break;c.delete(n),t++}l.evictions_entries+=t}()},delete(e){c.delete(e)&&l.deletes++},get counters(){return{...l}},destroy(){void 0!==u&&(clearInterval(u),u=void 0),c.clear()}}}function ge(e,t){const{cacheConfig:n,cacheStore:o,namespace:s,logger:r,storeId:i}=t,a={hits:0,misses:0,populates:0,writes:0,deletes:0,inflight_dedups:0},c=n.rules.map(e=>({match:e.match?(0,I.compileMatcher)(e.match):()=>!0,ttl:e.ttl})),l=e=>`${s}:${e}`;function u(e,t){const n=void 0===t?{key:e}:{key:e,value:t};return c.find(e=>e.match(n))}const d=new Map;return{type:e.type,config:e.config,setup:e.setup,get counters(){return{...a}},async get(t){const n=l(t),s=await o.get(n);if(void 0!==s)return a.hits++,s;const r=d.get(n);if(r)return a.inflight_dedups++,r;a.misses++;const i=(async()=>{try{const s=await e.get(t);if(void 0===s)return;const r=u(t,s);if(r)try{await o.set(n,s,1e3*r.ttl),a.populates++}catch(e){f("set",t,e)}return s}finally{d.delete(n)}})();return d.set(n,i),i},async set(t,n,s){a.writes++,await e.set(t,n,s);const r=u(t,n);if(r)try{await o.set(l(t),n,1e3*r.ttl)}catch(e){f("set",t,e)}},async delete(t){a.deletes++,await e.delete(t);try{await o.delete(l(t))}catch(e){f("delete",t,e)}}};function f(e,t,n){const o=`store-cache(${i}): cache ${e} failed for "${t}"; backing succeeded, continuing`;r?r.warn(o,{error:n}):console.warn(o,n)}}function pe(e,t){const n=t.get,o=t.set,s=t.delete;t.get=(0,j.useHooks)(n,"StoreGet",e.hooks,e.logger),t.set=(0,j.useHooks)(o,"StoreSet",e.hooks,e.logger),t.delete=(0,j.useHooks)(s,"StoreDelete",e.hooks,e.logger)}async function he(e){var t,n;const o=(0,m.assign)({globalsStatic:{},sessionStatic:{},run:!0,queueMax:1e3},e,{merge:!1,extend:!1}),s={level:null==(t=e.logger)?void 0:t.level,handler:null==(n=e.logger)?void 0:n.handler},r=(0,m.createLogger)(s),i={...o.globalsStatic,...e.globals},a={allowed:!1,config:o,consent:e.consent||{},custom:e.custom||{},destinations:{},transformers:{},stores:{},globals:i,hooks:e.hooks||{},logger:r,on:{},queue:[],round:0,session:void 0,status:{startedAt:Date.now(),in:0,out:0,failed:0,sources:{},destinations:{},dropped:{}},timing:Date.now(),user:e.user||{},sources:{},pending:{destinations:{}},push:void 0,command:void 0};var c,l;a.push=function(e,t){return(0,x.useHooks)(async(n,o={})=>await(0,x.tryCatchAsync)(async()=>{var s;const r=Date.now(),{id:i,ingest:a,respond:c,mapping:l,preChain:u,include:d,exclude:f}=o;let g=c,p=n;const h=d||f?function(e,t,n){let o=e;return t&&(o=Object.fromEntries(Object.entries(o).filter(([e])=>t.includes(e)))),n&&(o=Object.fromEntries(Object.entries(o).filter(([e])=>!n.includes(e)))),o}(e.destinations,d,f):void 0,v=null!=a?a:(0,x.createIngest)(i||"unknown");if(l){const t=await(0,x.processEventMapping)(p,l,e);if(t.ignore)return ie({ok:!0});if(l.consent&&!(0,x.getGrantedConsent)(l.consent,e.consent,t.event.consent))return ie({ok:!0});p=t.event}if((null==u?void 0:u.length)&&e.transformers&&Object.keys(e.transformers).length>0){const n=await H(e,e.transformers,u,p,v,g,i?`source.${i}.next`:void 0);if(null===n.event)return ie({ok:!0});if(n.stopped)return n.respond&&(g=n.respond),ie({ok:!0});if(n.respond&&(g=n.respond),Array.isArray(n.event)){const o=await Promise.all(n.event.map(async n=>{const o=t(n),s=de(e,o);return oe(e,s,{id:i,ingest:v,respond:g},h)}));if(i){e.status.sources[i]||(e.status.sources[i]={count:0,duration:0});const t=e.status.sources[i];t.count+=n.event.length,t.lastAt=Date.now(),t.duration+=Date.now()-r}return null!=(s=o[0])?s:ie({ok:!0})}p=n.event}const m=t(p),y=de(e,m),b=await oe(e,y,{id:i,ingest:v,respond:g},h);if(i){e.status.sources[i]||(e.status.sources[i]={count:0,duration:0});const t=e.status.sources[i];t.count++,t.lastAt=Date.now(),t.duration+=Date.now()-r}return b},t=>{if(t instanceof x.FatalError)throw t;return e.status.failed++,e.logger.error("push failed",{event:n,ingest:o.ingest,error:t}),ie({ok:!1})})(),"Push",e.hooks,e.logger)}(a,e=>({timing:Math.round((Date.now()-a.timing)/10)/100,source:{type:"collector",schema:"4",version:"4.1.0"},...e})),a.command=(c=a,l=ue,(0,S.useHooks)(async(e,t,n)=>await(0,S.tryCatchAsync)(async()=>await l(c,e,t,n),n=>{if(n instanceof S.FatalError)throw n;return c.status.failed++,c.logger.error("command failed",{command:e,data:t,error:n}),ie({ok:!1})})(),"Command",c.hooks,c.logger));const u=e.stores||{};return a.stores=await async function(e,t={}){var n;const o={};for(const[n,s]of Object.entries(t)){const{code:t,config:r={},env:i={}}=s,a=e.logger.scope("store").scope(n),c={collector:e,logger:a,id:n,config:r,env:i},l=await t(c);o[n]=l}const s=t,r=function(e){const t={};for(const n of Object.keys(e))t[n]="WHITE";const n=[],o=[];function s(r){var i;const a=t[r];if("BLACK"===a)return;if("GRAY"===a){const e=o.indexOf(r),t=o.slice(-1===e?0:e).concat(r).join(" -> ");throw new Error(`Cycle in cache.store chain: ${t}`)}t[r]="GRAY",o.push(r);const c=null==(i=e[r].cache)?void 0:i.store;if(void 0!==c){if(!(c in e))throw new Error(`Store "${r}" cache.store references "${c}", which is not declared in flow.stores`);s(c)}o.pop(),t[r]="BLACK",n.push(r)}for(const n of Object.keys(e))"WHITE"===t[n]&&s(n);return n}(s);for(const t of r){const r=s[t].cache;if(!r)continue;let i,a;void 0!==r.store?(i=o[r.store],a=r.store):(o.__cache||(o.__cache=fe()),i=o.__cache,a="__cache");const c=null!=(n=r.namespace)?n:t;e.logger.scope("store-cache").scope(t).info(`store "${t}" caches with namespace "${c}:" via ${a}`),o[t]=ge(o[t],{storeId:t,cacheConfig:r,cacheStore:i,namespace:c,logger:e.logger.scope("store-cache").scope(t)})}for(const[t,n]of Object.entries(o))"__cache"!==t&&pe(e,n);return o}(a,u),function(e,t,n){const o=new Map;for(const[n,s]of Object.entries(e))t[n]&&o.set(s,t[n]);if(0!==o.size)for(const e of[n.transformers,n.destinations,n.sources])if(e)for(const t of Object.values(e))s(t.env);function s(e){if(e)for(const[t,n]of Object.entries(e))if("object"==typeof n&&null!==n){const s=o.get(n);s&&(e[t]=s)}}}(u,a.stores,e),a.stores.__cache||(a.stores.__cache=fe()),a.destinations=await async function(e,t={}){var n,o;const s={};for(const[r,i]of Object.entries(t))(null==(o=null==(n=i.config)?void 0:n.require)?void 0:o.length)?e.pending.destinations[r]=i:s[r]=ae(i);return s}(a,e.destinations||{}),a.transformers=await async function(e,t={}){var n,o,s,r;const i={};for(const[a,c]of Object.entries(t)){const{code:t,env:l={}}=c,u=(0,C.validateStepEntry)(c,"Transformer");if(!u.ok){e.logger.warn(`Transformer ${a} invalid (${u.code}): ${u.reason}. Skipping.`);continue}const{config:d}=_(c,"before"),{config:f}=_({...c,config:d},"next"),g=Object.keys(l).length>0?{...f,env:l}:f,{cache:p}=c,h=p?{...g,cache:p}:g,v=e.logger.scope("transformer").scope(a),m={collector:e,logger:v,id:a,ingest:(0,C.createIngest)(a),config:h,env:l},y=null!=t?t:e=>{const t=c.mapping;if(t){const n=[];if(void 0!==t.data&&n.push("data"),t.mapping)for(const[e,o]of Object.entries(t.mapping))if("object"==typeof o&&null!==o)for(const[t,s]of Object.entries(o)){if("object"!=typeof s||null===s)continue;const o=s;void 0!==o.data&&n.push(`mapping[${e}][${t}].data`),void 0!==o.silent&&n.push(`mapping[${e}][${t}].silent`)}return n.length>0&&e.collector.logger.warn(`Transformer ${a}: \`${n.join(", ")}\` ignored at transformer position (only event-mutating fields apply).`),{type:"pass",config:e.config,push:async n=>{const o=await(0,C.processEventMapping)(n,t,e.collector);return!o.ignore&&{event:o.event}}}}return{type:"pass",config:e.config,push:e=>({event:e})}},b=await y(m);void 0!==c.before&&void 0===(null==(n=b.config)?void 0:n.before)&&(b.config={...null!=(o=b.config)?o:{},before:c.before}),void 0!==c.next&&void 0===(null==(s=b.config)?void 0:s.next)&&(b.config={...null!=(r=b.config)?r:{},next:c.next}),i[a]=b}return i}(a,e.transformers||{}),a}async function ve(e){e=e||{};const t=await he(e),n=(o=t,{type:"elb",config:{},push:async(e,t,n,s,r)=>{if("string"==typeof e&&e.startsWith("walker ")){const n=e.replace("walker ","");return o.command(n,t)}let i;if("string"==typeof e)i={name:e},t&&"object"==typeof t&&!Array.isArray(t)&&(i.data=t);else{if(!e||"object"!=typeof e)return ie({ok:!1});i=e,t&&"object"==typeof t&&!Array.isArray(t)&&(i.data={...i.data||{},...t})}return n&&"object"==typeof n&&(i.context=n),s&&Array.isArray(s)&&(i.nested=s),r&&"object"==typeof r&&(i.custom=r),o.push(i)}});var o;t.sources.elb=n,await async function(e,t={}){var n;const o={};for(const[s,r]of Object.entries(t)){const t=await R(e,s,r);if(!t)continue;const i=null==(n=r.config)?void 0:n.require;t.config={...t.config,init:!1,...i?{require:[...i]}:{}},o[s]=t}Object.assign(e.sources,o);for(const t of Object.keys(o)){const n=e.sources[t];let o=!1;n.init&&await(0,k.tryCatchAsync)(n.init.bind(n),n=>{if(n instanceof k.FatalError)throw n;o=!0,e.status.failed++,e.logger.scope("source").error("source init failed",{sourceId:t,error:n})})(),o||(n.config.init=!0,K(n)&&await F(e,n,t))}return o}(t,e.sources||{});const{consent:s,user:r,globals:i,custom:a}=e;s&&await t.command("consent",s),r&&await t.command("user",r),i&&Object.assign(t.globals,i),a&&Object.assign(t.custom,a),t.config.run&&await t.command("run");let c=n.push;const l=Object.values(t.sources).filter(e=>"elb"!==e.type),u=l.find(e=>e.config.primary);return u?c=u.push:l.length>0&&(c=l[0].push),{collector:t,elb:c}}var me=async e=>{let t;return{get flow(){return t},trigger:(n,o)=>async n=>{var s,r,i,a,c,l,u,d,f;const g=o||{};if(g.url){const e=new URL(g.url);window.history.replaceState({},"",e.pathname+e.search)}if(g.referrer&&Object.defineProperty(document,"referrer",{value:g.referrer,configurable:!0}),g.sessionData){const e=g.sessionKey||"elbSessionId";localStorage.setItem(e,JSON.stringify(g.sessionData))}if(g.deviceId){const e=g.deviceKey||"elbDeviceId";localStorage.setItem(e,g.deviceId)}if(!t){const n=await ve({...e,run:null==(s=e.run)||s});t={collector:n.collector,elb:n.elb};const o=g.sessionKey||(null==(c=null==(a=null==(i=null==(r=e.sources)?void 0:r.session)?void 0:i.config)?void 0:a.settings)?void 0:c.sessionKey)||"elbSessionId",p=g.deviceKey||(null==(f=null==(d=null==(u=null==(l=e.sources)?void 0:l.session)?void 0:u.config)?void 0:d.settings)?void 0:f.deviceKey)||"elbDeviceId";localStorage.removeItem(o),localStorage.removeItem(p),g.sessionData&&localStorage.setItem(o,JSON.stringify(g.sessionData)),g.deviceId&&localStorage.setItem(p,g.deviceId),e.consent&&await t.collector.command("consent",e.consent)}}}},ye=(e,t)=>{if(!e||"object"!=typeof e)return;const n=e,o=t.localStorage;if(n.sessionData&&"object"==typeof n.sessionData){const e="string"==typeof n.sessionKey?n.sessionKey:"elbSessionId";o.setItem(e,JSON.stringify(n.sessionData))}if("string"==typeof n.deviceId){const e="string"==typeof n.deviceKey?n.deviceKey:"elbDeviceId";o.setItem(e,n.deviceId)}};//# sourceMappingURL=dev.js.map
package/dist/dev.mjs CHANGED
@@ -1 +1 @@
1
- var e=Object.defineProperty,n=(n,t)=>{for(var o in t)e(n,o,{get:t[o],enumerable:!0})},t={};n(t,{SettingsSchema:()=>i,settings:()=>a});import{zodToSchema as o}from"@walkeros/core/dev";import{z as s,ClickIdEntrySchema as r}from"@walkeros/core/dev";var i=s.object({storage:s.boolean().default(!1).describe("Enable persistent storage for session/device IDs").optional(),consent:s.union([s.string(),s.array(s.string())]).describe("Consent key(s) required to enable storage mode").optional(),length:s.number().default(30).describe("Session timeout in minutes").optional(),pulse:s.boolean().default(!1).describe("Keep session alive on each event").optional(),sessionKey:s.string().default("elbSessionId").describe("Storage key for session ID").optional(),sessionStorage:s.enum(["local","session"]).default("local").describe("Storage type for session").optional(),deviceKey:s.string().default("elbDeviceId").describe("Storage key for device ID").optional(),deviceStorage:s.enum(["local","session"]).default("local").describe("Storage type for device").optional(),deviceAge:s.number().default(30).describe("Device ID age in days").optional(),cb:s.any().describe("Custom session callback function or false to disable").optional(),clickIds:s.array(r).describe("Custom click-ID registry. Entries with a `param` matching a default override the platform name in place; new params append to the end of the priority list.").optional()}),a=o(i),c={};n(c,{createTrigger:()=>un,step:()=>l,trigger:()=>dn});var l={};n(l,{newMarketingSession:()=>u,returningVisitor:()=>d});var u={title:"New marketing session",description:"A visit with UTM parameters starts a new session and emits walker user, session, and session start calls.",trigger:{type:"load",options:{url:"https://example.com/?utm_source=google&utm_medium=cpc&utm_campaign=winter-sale"}},in:{storage:!0},out:[["elb","user",{session:"s3ss10n-id",device:"d3v1c3-id"}],["elb","session",{id:"s3ss10n-id",start:17e11,isNew:!0,count:1,runs:1,marketing:!0,source:"google",medium:"cpc",campaign:"winter-sale",referrer:"",device:"d3v1c3-id",isStart:!0,storage:!0,updated:17e11}],["elb",{name:"session start",data:{id:"s3ss10n-id",start:17e11,isNew:!0,count:1,runs:1,marketing:!0,source:"google",medium:"cpc",campaign:"winter-sale",referrer:"",device:"d3v1c3-id",isStart:!0,storage:!0,updated:17e11}}]]},d={title:"Returning visitor",description:"A returning visit with a google referrer reuses the stored device id and increments the session count.",trigger:{type:"load",options:{referrer:"https://google.com"}},in:{storage:!0},out:[["elb","user",{session:"n3w-s3ss10n",device:"d3v1c3-id"}],["elb","session",{id:"n3w-s3ss10n",start:1700001e6,isNew:!1,count:3,runs:1,referrer:"google.com",device:"d3v1c3-id",isStart:!0,storage:!0,updated:1700001e6}],["elb",{name:"session start",data:{id:"n3w-s3ss10n",start:1700001e6,isNew:!1,count:3,runs:1,referrer:"google.com",device:"d3v1c3-id",isStart:!0,storage:!0,updated:1700001e6}}]]};import{assign as f}from"@walkeros/core";import{assign as g,createLogger as p}from"@walkeros/core";import{assign as h,buildCacheContext as v,clone as m,compileCache as y,checkCache as b,storeCache as w,createIngest as k,debounce as S,getId as q,getGrantedConsent as x,getNextSteps as O,isDefined as C,isFunction as I,isObject as j,processEventMapping as A,stepId as $,tryCatchAsync as D,useHooks as _}from"@walkeros/core";import{isArray as E,FatalError as P}from"@walkeros/core";import{tryCatch as M,tryCatchAsync as z}from"@walkeros/core";import{createIngest as K,FatalError as R,getMappingValue as T,tryCatchAsync as F,getNextSteps as H,compileCache as N,checkCache as B,storeCache as G,applyUpdate as U,buildCacheContext as W}from"@walkeros/core";import{createIngest as L,FatalError as J,isObject as V,tryCatchAsync as Y,useHooks as Q,getNextSteps as X,compileCache as Z,checkCache as ee,storeCache as ne,buildCacheContext as te,validateStepEntry as oe,processEventMapping as se}from"@walkeros/core";import{assign as re,getSpanId as ie,isFunction as ae,isString as ce}from"@walkeros/core";import{isObject as le}from"@walkeros/core";import{createIngest as ue,FatalError as de,getGrantedConsent as fe,processEventMapping as ge,tryCatchAsync as pe,useHooks as he}from"@walkeros/core";import{FatalError as ve,useHooks as me,tryCatchAsync as ye}from"@walkeros/core";import{useHooks as be}from"@walkeros/core";import{compileMatcher as we}from"@walkeros/core";var ke={Action:"action",Actions:"actions",Config:"config",Consent:"consent",Context:"context",Custom:"custom",Destination:"destination",Elb:"elb",Globals:"globals",Hook:"hook",Init:"init",Link:"link",On:"on",Prefix:"data-elb",Ready:"ready",Run:"run",Session:"session",Shutdown:"shutdown",User:"user",Walker:"walker"};function Se(e,n){return e.storeId&&n.stores[e.storeId]?n.stores[e.storeId]:n.stores.__cache}function qe(e){var n;const t={};for(const[o,s]of Object.entries(e)){const e=null==(n=s.config)?void 0:n.next;"string"==typeof e||Array.isArray(e)&&e.every(e=>"string"==typeof e)?t[o]={next:e}:t[o]={}}return t}function xe(e,n){const t=e.config||{},o=e[n];return void 0!==o?{config:{...t,[n]:o},chainValue:o}:{config:t,chainValue:void 0}}function Oe(e,n={}){if(!e)return[];if(Array.isArray(e))return e;const t=[],o=new Set;let s=e;for(;s&&n[s]&&!o.has(s);){o.add(s),t.push(s);const e=n[s].next;if(Array.isArray(e)){t.push(...e);break}s=e}return t}async function Ce(e,n,t){if(n.init&&!n.config.init){const o=n.type||"unknown",s=e.logger.scope(`transformer:${o}`),r={collector:e,logger:s,id:t,ingest:L(t),config:n.config,env:$e(n.config.env)};s.debug("init");const i=await Q(n.init,"TransformerInit",e.hooks,e.logger)(r);if(!1===i)return!1;n.config={...i||n.config,env:(null==i?void 0:i.env)||n.config.env,init:!0},s.debug("init done")}return!0}async function Ie(e,n,t,o,s,r){const i=n.type||"unknown",a=e.logger.scope(`transformer:${i}`),c={collector:e,logger:a,id:t,ingest:s,config:n.config,env:{...$e(n.config.env),...r?{respond:r}:{}}};a.debug("push",{event:o.name});const l=await Q(n.push,"TransformerPush",e.hooks,e.logger)(o,c);return a.debug("push done"),l}function je(e,n){return e?{...e,_meta:{...e._meta,path:[...e._meta.path]}}:L(n)}async function Ae(e,n,t,o,s,r,i){var a,c,l,u,d,f,g,p;s||(s=L(null!=(a=t[0])?a:"chain")),i&&s._meta&&(s._meta.chainPath=i);let h=o,v=r;for(const o of t){const r=n[o];if(!r){e.logger.warn(`Transformer not found: ${o}`);continue}if(s&&s._meta&&s._meta.path.length>256)return e.logger.error(`Max path length exceeded at ${o}`),{event:null,respond:v};if(s&&s._meta&&(s._meta.hops++,s._meta.path.push(o)),!await Y(Ce,n=>{if(n instanceof J)throw n;return e.status.failed++,e.logger.scope(`transformer:${r.type||"unknown"}`).error("transformer init failed",{transformer:o,error:n}),!1})(e,r,o))return{event:null,respond:v};if(i&&void 0!==(null==(l=null==(c=r.config)?void 0:c.chainMocks)?void 0:l[i])){const n=r.config.chainMocks[i];e.logger.scope(`transformer:${r.type||"unknown"}`).debug("chainMock",{chain:i}),h=n;continue}if(void 0!==(null==(u=r.config)?void 0:u.mock)){e.logger.scope(`transformer:${r.type||"unknown"}`).debug("mock"),h=r.config.mock;continue}if(null==(d=r.config)?void 0:d.disabled)continue;const a=null==(f=r.config)?void 0:f.cache,m=a?Z(a):void 0,y=m?Se(m,e):void 0;let b;if(m&&y){const e=te(s,h),n=await ee(m,y,e);if("HIT"===(null==n?void 0:n.status)&&n.value){if(h=n.value,m.stop)return{event:h,respond:v,stopped:!0};continue}"MISS"===(null==n?void 0:n.status)&&(b={key:n.key,ttl:n.rule.ttl})}const w=r.config.before;if(w){const t=X(w,te(s,h));if(1===t.length){const o=Oe(t[0],qe(n));if(o.length>0){const t=await Ae(e,n,o,h,s,v,i);if(null===t.event)return{event:null,respond:null!=(g=t.respond)?g:v};if(t.stopped)return{event:Array.isArray(t.event)?t.event[0]:t.event,respond:null!=(p=t.respond)?p:v,stopped:!0};t.respond&&(v=t.respond),h=Array.isArray(t.event)?t.event[0]:t.event}}else t.length>1&&await Promise.all(t.map(t=>Y(Ae,n=>(e.logger.scope("transformer:many").error(`many branch ${t} failed`,{error:n}),{event:null,respond:void 0}))(e,n,Oe(t,qe(n)),h,je(s,t),void 0,i)))}const k=await Y(Ie,n=>(e.logger.scope(`transformer:${r.type||"unknown"}`).error("Push failed",{error:n}),!1))(e,r,o,h,s,v);if(!1===k)return{event:null,respond:v};if(Array.isArray(k)){const r=t.slice(t.indexOf(o)+1),a=await Promise.all(k.map(async t=>{const o=t.event||h,a=je(s,"unknown");if(t.next){const s=X(t.next,te(a,o));if(0===s.length)return{event:o,respond:v};if(1===s.length){const t=Oe(s[0],qe(n));return t.length>0?Ae(e,n,t,o,a,v,i):{event:o,respond:v}}return(await Promise.all(s.map(t=>Y(Ae,n=>(e.logger.scope("transformer:many").error(`many branch ${t} failed`,{error:n}),{event:null,respond:void 0}))(e,n,Oe(t,qe(n)),o,je(a,t),void 0,i)))).map(e=>({event:e.event,respond:void 0}))}return r.length>0?Ae(e,n,r,o,a,v,i):{event:o,respond:v}}));let c=v;const l=[];for(const e of a.flat())if(null!==e)if(e&&"object"==typeof e&&"event"in e){const n=e;if(n.respond&&(c=n.respond),null===n.event)continue;Array.isArray(n.event)?l.push(...n.event):l.push(n.event)}else l.push(e);return 0===l.length?{event:null,respond:c}:1===l.length?{event:l[0],respond:c}:{event:l,respond:c}}if(k&&"object"==typeof k){const{event:t,respond:o,next:r}=k;if(o&&(v=o),void 0!==r){const o=X(r,te(s,h));if(0===o.length){t&&(h=t);continue}if(1===o.length){const a=Oe(o[0],qe(n));return a.length>0?Ae(e,n,a,t||h,s,v,i):(e.logger.warn(`Branch target not found: ${JSON.stringify(r)}`),{event:null,respond:v})}return await Promise.all(o.map(o=>Y(Ae,n=>(e.logger.scope("transformer:many").error(`many branch ${o} failed`,{error:n}),{event:null,respond:void 0}))(e,n,Oe(o,qe(n)),t||h,je(s,o),void 0,i))),{event:null,respond:void 0}}t&&(h=t)}b&&y&&ne(y,b.key,h,b.ttl);const S=r.config.next,q="string"==typeof S||Array.isArray(S)&&S.every(e=>"string"==typeof e),x=void 0!==S&&!q;if((!k||"object"==typeof k&&!k.next)&&x){const t=X(r.config.next,te(s,h));if(1===t.length){const o=Oe(t[0],qe(n));return o.length>0?Ae(e,n,o,h,s,v,i):{event:h,respond:v}}return t.length>1?(await Promise.all(t.map(t=>Y(Ae,n=>(e.logger.scope("transformer:many").error(`many branch ${t} failed`,{error:n}),{event:null,respond:void 0}))(e,n,Oe(t,qe(n)),h,je(s,t),void 0,i))),{event:null,respond:void 0}):{event:h,respond:v}}}return{event:h,respond:v}}function $e(e){return e&&V(e)?e:{}}function De(e){return"string"==typeof e||!(!Array.isArray(e)||!e.every(e=>"string"==typeof e))}async function _e(e,n,t){var o,s;if(!n.on||!(null==(o=n.queueOn)?void 0:o.length))return;const r=n.queueOn;n.queueOn=[];const i=t||(null==(s=n.config)?void 0:s.id)||"unknown";for(const{type:t,data:o}of r)await F(n.on,n=>{if(n instanceof R)throw n;e.status.failed++,e.logger.scope("source").error("source on flush failed",{sourceId:i,type:t,error:n})})(t,o)}function Ee(e){var n;return Boolean(e.config.init)&&!(null==(n=e.config.require)?void 0:n.length)}async function Pe(e,n,t){var o;const{code:s,config:r={},env:i={},primary:a,next:c,before:l,cache:u}=t,d=u,f=d?N({...d,stop:null==(o=d.stop)||o}):void 0,g=De(c)?Oe(c,qe(e.transformers)):void 0,p=De(l)?Oe(l,qe(e.transformers)):void 0,h=i.push,v=null!=h?h:e.push,m=Boolean(h),y=async(t,o,s)=>{var i;let a;const u=null!=p?p:void 0!==l?(()=>{const n=H(l,W(s.ingest));return 0===n.length?[]:Oe(1===n.length?n[0]:n,qe(e.transformers))})():[];let d=[t];if(u.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const o=await Ae(e,e.transformers,u,t,s.ingest,s.respond,`source.${n}.before`);if(null===o.event)return{ok:!0};if(o.stopped)return o.respond&&(s.respond=o.respond),{ok:!0};o.respond&&(s.respond=o.respond),d=Array.isArray(o.event)?o.event:[o.event]}if(f){const n=Se(f,e);if(n){const t=W(s.ingest),o=await B(f,n,t);if(o){if("HIT"===o.status&&void 0!==o.value&&f.stop){let n=o.value;return o.rule.update&&(n=await U(n,o.rule.update,{...t,cache:{status:"HIT"}},e)),null==(i=s.respond)||i.call(s,n),{ok:!0}}if("MISS"===o.status&&f.stop&&s.respond){const r=s.respond,i=o.rule.update,c={...t,cache:{status:"MISS"}},l=o.key,u=o.rule.ttl,d=t=>{G(n,l,t,u),i?a=(async()=>{const n=await U(t,i,c,e);r(n)})():r(t)};s.respond=d}"MISS"!==o.status||f.stop||G(n,o.key,!0,o.rule.ttl)}}}const h=g?{kind:"single",preChain:g}:void 0!==c?(()=>{const n=H(c,W(s.ingest));return 0===n.length?{kind:"single",preChain:[]}:1===n.length?{kind:"single",preChain:Oe(n[0],qe(e.transformers))}:{kind:"many",branches:n.map(n=>Oe(n,qe(e.transformers)))}})():{kind:"single",preChain:[]};let y={ok:!0};for(const t of d)"many"===h.kind?(await Promise.all(h.branches.map((i,a)=>F(async()=>m?v(t):v(t,{...o,id:n,ingest:je(s.ingest,`${n}.${a}`),respond:void 0,mapping:r,preChain:i}),n=>(e.logger.scope("source:many").error(`many branch ${a} failed`,{error:n}),{ok:!0}))())),y={ok:!0}):y=m?await v(t):await v(t,{...o,id:n,ingest:s.ingest,respond:s.respond,mapping:r,preChain:h.preChain});return a&&await a,y},b=async t=>{const o=K(n);if(!r.ingest||void 0===t)return o;const s=await T(t,r.ingest,{collector:e});return{...o,...s,_meta:o._meta}},w=e.logger.scope("source").scope(n),k={command:e.command,sources:e.sources,elb:e.sources.elb.push,logger:w,...i,push:async(e,t={})=>{const o={ingest:K(n),respond:void 0};return y(e,t,o)}},S={collector:e,logger:w,id:n,config:r,env:k,withScope:async(e,n,t)=>{const o={ingest:await b(e),respond:n};return t({...k,push:(e,n={})=>y(e,n,o),ingest:o.ingest,respond:o.respond})}},q=await F(s,t=>{if(t instanceof R)throw t;e.status.failed++,e.logger.scope("source").error("source factory failed",{sourceId:n,error:t})})(S);if(!q)return;const x=q.type||"unknown",O=e.logger.scope(x).scope(n);return k.logger=O,a&&(q.config={...q.config,primary:a}),q}function Me(e,n,t,o){if(t instanceof P)throw t;e.logger.scope("on").error("on callback failed",{kind:n,...o,error:t})}function ze(e,n){return{collector:e,logger:e.logger.scope("on").scope(String(n))}}function Ke(e,n,t,o,s){if(!n.on)return;const r=n.type||"unknown",i=e.logger.scope(r).scope("on").scope(o),a={collector:e,logger:i,id:t,config:n.config,data:s,env:en(n.env,n.config.env)};M(n.on,n=>Me(e,"destination",n,{destId:t,type:o}))(o,a)}function Re(e,n,t,o){let s;switch(n){case ke.Consent:s=o||e.consent;break;case ke.Session:s=e.session;break;case ke.User:s=o||e.user;break;case ke.Custom:s=o||e.custom;break;case ke.Globals:s=o||e.globals;break;case ke.Config:s=o||e.config;break;case ke.Ready:case ke.Run:default:s=void 0}if(t.length)switch(n){case ke.Consent:!function(e,n,t){const o=t||e.consent,s=ze(e,ke.Consent);n.forEach(n=>{Object.keys(o).filter(e=>e in n).forEach(t=>{M(n[t],n=>Me(e,"consent",n,{key:t}))(o,s)})})}(e,t,o);break;case ke.Ready:!function(e,n){if(!e.allowed)return;const t=ze(e,ke.Ready);n.forEach(n=>{M(n,n=>Me(e,"ready",n))(void 0,t)})}(e,t);break;case ke.Run:!function(e,n){if(!e.allowed)return;const t=ze(e,ke.Run);n.forEach(n=>{M(n,n=>Me(e,"run",n))(void 0,t)})}(e,t);break;case ke.Session:!function(e,n){if(!e.session)return;const t=ze(e,ke.Session);n.forEach(n=>{M(n,n=>Me(e,"session",n))(e.session,t)})}(e,t);break;default:{const o=ze(e,n);t.forEach(t=>{"function"==typeof t&&M(t,t=>Me(e,"generic",t,{type:n}))(s,o)});break}}}function Te(e,n,t,o){var s;if(!Number.isFinite(t.max)||t.max<=0)throw new Error(`pushBounded: max must be > 0 (got ${t.max})`);if("dropNewest"===(null!=(s=t.onOverflow)?s:"dropOldest"))return e.length>=t.max?(o&&o([n]),{appended:!1,dropped:1}):(e.push(n),{appended:!0,dropped:0});const r=[];for(;e.length>=t.max;)r.push(e.shift());return e.push(n),r.length>0&&o&&o(r),{appended:!0,dropped:r.length}}var Fe=new WeakMap;function He(e,n,t,o){Fe.get(e)||(Fe.set(e,!0),n.warn(t,o))}function Ne(e){Fe.delete(e)}var Be=Object.freeze({batched:!0});function Ge(e){return e===Be}function Ue(e){return void 0===e?{}:"number"==typeof e?{wait:e}:{wait:e.wait,size:e.size,age:e.age}}function We(e,n){return e.status.destinations[n]||(e.status.destinations[n]={count:0,failed:0,duration:0,queuePushSize:0,dlqSize:0}),e.status.destinations[n]}function Le(e,n,t,o){var s;e.dropped[n]||(e.dropped[n]={});const r=e.dropped[n];return r[t]=(null!=(s=r[t])?s:0)+o,r[t]}function Je(e,n,t){if(!e)return[];if(Array.isArray(e)&&e.every(e=>"string"==typeof e))return Oe(e,n);if("string"==typeof e)return Oe(e,n);const o=O(e,v(t));return 0===o.length?[]:1===o.length?Oe(o[0],n):Oe(o,n)}async function Ve(e,n,t={},o){var s,r,i,a,c,l;const{allowed:u,consent:d,globals:f,user:g}=e;if(!u)return Xe({ok:!1});if(n){const t=e.config.queueMax;if(void 0===t)throw new Error("Collector.Config.queueMax is undefined; defaults must be seeded by collector()");const o=Te(e.queue,n,{max:t});if(o.dropped>0){const n=Le(e.status,$("collector"),"queue",o.dropped);He(e.queue,e.logger,"collector.queue overflow; oldest events dropped",{buffer:"queue",cap:t,droppedCount:n})}else e.queue.length<t&&Ne(e.queue);e.status.in++}o||(o=e.destinations);const p=e.transformers?qe(e.transformers):{},S=await Promise.all(Object.entries(o||{}).map(async([o,s])=>{var r,i,a,c;if(s.config.disabled)return{id:o,destination:s,skipped:!0};let l=(s.queuePush||[]).map(e=>({...e,consent:d}));s.queuePush=[],n&&l.push(m(n));const u=t.ingest?{...t.ingest,_meta:{...t.ingest._meta,path:[...t.ingest._meta.path]}}:k("unknown");if(!l.length&&!(null==(r=s.queueOn)?void 0:r.length))return{id:o,destination:s,skipped:!0};if(!l.length&&(null==(i=s.queueOn)?void 0:i.length)){let n=!1;try{n=await Ye(e,s,o)}catch(n){e.status.failed++;const t=s.type||"unknown";e.logger.scope(t).error("destination init failed",{error:n instanceof Error?n.message:String(n)})}return{id:o,destination:s,skipped:!n}}const S=[],q=l.filter(e=>{const n=x(s.config.consent,d,e.consent);return!n||(e.consent=n,S.push(e),!1)});if(q.length>0){const n=s.queuePush,t=s.config.id||o,r={max:null!=(a=s.config.queueMax)?a:1e3};let i=0;for(const e of q)i+=Te(n,e,r).dropped;if(i>0){We(e,t);const o=Le(e.status,$("destination",t),"queue",i);He(n,e.logger.scope(s.type||"unknown"),"destination.queuePush overflow; oldest events dropped",{buffer:"queuePush",destination:t,cap:r.max,droppedCount:o})}else n.length<r.max&&Ne(n)}if(!S.length)return{id:o,destination:s,queue:l};let O,C,I=!1;try{I=await Ye(e,s,o)}catch(n){e.status.failed++;const t=s.type||"unknown";e.logger.scope(t).error("destination init failed",{error:n instanceof Error?n.message:String(n)})}if(!I)return{id:o,destination:s,queue:l};s.dlq||(s.dlq=[]);const j=Je(s.config.before,p,u),A=s.config.next,_=null==(c=s.config)?void 0:c.cache,E=_?y(_):void 0,P=E?Se(E,e):void 0;let M=0,z=0;return await Promise.all(S.map(async n=>{let r;if(n.globals=h(f,n.globals),n.user=h(g,n.user),(null==E?void 0:E.stop)&&P){const e=v(u,n),t=await b(E,P,e);if("HIT"===(null==t?void 0:t.status))return n;"MISS"===(null==t?void 0:t.status)&&(r={key:t.key,ttl:t.rule.ttl})}let i=n,a=t.respond;if(j.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const s=await Ae(e,e.transformers,j,n,u,t.respond,`destination.${o}.before`);if(null===s.event)return n;s.respond&&(a=s.respond),i=Array.isArray(s.event)?s.event[0]:s.event}if(E&&!E.stop&&P){const e=v(u,i),t=await b(E,P,e);if("HIT"===(null==t?void 0:t.status))return n;"MISS"===(null==t?void 0:t.status)&&(r={key:t.key,ttl:t.rule.ttl})}const c=Date.now();let l=!1;const d=await D(Qe,n=>{var t;const r=s.type||"unknown";e.logger.scope(r).error("Push failed",{error:n,event:i.name}),O=n,l=!0;const a=s.dlq,c=s.config.id||o,u={max:null!=(t=s.config.dlqMax)?t:100},d=Te(a,[i,n],u);if(d.dropped>0){We(e,c);const n=Le(e.status,$("destination",c),"dlq",d.dropped);He(a,e.logger.scope(s.type||"unknown"),"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:c,cap:u.max,droppedCount:n})}else a.length<u.max&&Ne(a)})(e,s,o,i,u,a);if(M+=Date.now()-c,r&&P&&void 0===s.config.mock&&w(P,r.key,null==d||d,r.ttl),void 0===d||Ge(d)||(C=d),Ge(d)&&z++,!l&&A){void 0!==d&&(u._response=d);const n=Je(A,p,u);if(n.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const t=await Ae(e,e.transformers,n,i,u,a,`destination.${o}.next`);t.respond&&(a=t.respond)}}return n})),{id:o,destination:s,error:O,response:C,totalDuration:M,batchedCount:z,allowedCount:S.length}})),q={},O={},C={};for(const n of S){if(n.skipped)continue;const t=n.destination,o={type:t.type||"unknown",data:n.response};We(e,n.id);const u=e.status.destinations[n.id],d=Date.now();if(u.queuePushSize=null!=(r=null==(s=t.queuePush)?void 0:s.length)?r:0,u.dlqSize=null!=(a=null==(i=t.dlq)?void 0:i.length)?a:0,n.error)o.error=n.error,C[n.id]=o,u.failed++,u.lastAt=d,u.duration+=n.totalDuration||0,e.status.failed++;else if(n.queue&&n.queue.length)O[n.id]=o;else{const t=null!=(c=n.batchedCount)?c:0,s=null!=(l=n.allowedCount)?l:0;(Math.max(0,s-t)>0||0===s)&&(q[n.id]=o,u.count++,u.lastAt=d,u.duration+=n.totalDuration||0,e.status.out++)}}return Xe({event:n,...Object.keys(q).length&&{done:q},...Object.keys(O).length&&{queued:O},...Object.keys(C).length&&{failed:C}})}async function Ye(e,n,t){var o;if(n.init&&!n.config.init){const s=n.type||"unknown",r=e.logger.scope(s),i={collector:e,logger:r,id:t,config:n.config,env:en(n.env,n.config.env)};r.debug("init");const a=await _(n.init,"DestinationInit",e.hooks,e.logger)(i);if(!1===a)return a;if(n.config={...a||n.config,init:!0},null==(o=n.queueOn)?void 0:o.length){const o=n.queueOn;n.queueOn=[];for(const{type:s,data:r}of o)Ke(e,n,t,s,r)}r.debug("init done")}return!0}async function Qe(e,n,t,o,s,r){var i,a,c,l,u,d,f;const{config:g}=n,p=await A(o,g,e);if(p.ignore)return!1;const h=n.type||"unknown",v=e.logger.scope(h),m={collector:e,logger:v,id:t,config:g,data:p.data,rule:p.mapping,ingest:s,env:{...en(n.env,g.env),...r?{respond:r}:{}}};if(void 0!==g.mock)return v.debug("mock",{event:p.event.name}),g.mock;const y=p.mapping,b=p.mappingKey||"* *";if((null==y?void 0:y.batch)&&n.pushBatch&&void 0===g.mock){if(n.batches=n.batches||{},!n.batches[b]){const o={key:b,entries:[],events:[],data:[]},s=Ue(y.batch),r=Ue(g.batch),f=null!=(a=null!=(i=s.wait)?i:r.wait)?a:3e4,p=null!=(l=null!=(c=s.size)?c:r.size)?l:1e3,h=null!=(d=null!=(u=s.age)?u:r.age)?d:3e4,m=en(n.env,g.env),w=S(async()=>{var o;const s=n.batches[b].batched;if(0===s.entries.length)return;const r={key:s.key,entries:s.entries,events:s.events,data:s.data};s.entries=[],s.events=[],s.data=[];const i=r.entries[0],a={collector:e,logger:v,id:t,config:g,data:void 0,rule:i.rule,ingest:i.ingest,env:{...m,...i.respond?{respond:i.respond}:{}}};v.debug("push batch",{events:r.entries.length});const c=n.config.id||t,l=We(e,c);let u=!0;await D(_(n.pushBatch,"DestinationPushBatch",e.hooks,e.logger),t=>{var o;u=!1;const s=n.dlq=n.dlq||[],i={max:null!=(o=n.config.dlqMax)?o:100};let a=0;for(const e of r.entries)a+=Te(s,[e.event,t],i).dropped;if(a>0){const n=Le(e.status,$("destination",c),"dlq",a);He(s,v,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:c,cap:i.max,droppedCount:n})}else s.length<i.max&&Ne(s);l.failed+=r.entries.length,l.dlqSize=s.length,e.status.failed+=r.entries.length,v.error("Push batch failed",{error:t instanceof Error?t.message:String(t),entries:r.entries.length})})(r,a),v.debug("push batch done"),l.inFlightBatch=Math.max(0,(null!=(o=l.inFlightBatch)?o:0)-r.entries.length),u&&(l.count+=r.entries.length,l.lastAt=Date.now(),e.status.out+=r.entries.length)},{wait:f,size:p,age:h});n.batches[b]={batched:o,batchFn:()=>{w()},flush:async()=>{await w.flush()}}}const o=n.batches[b];o.batched.entries.push({event:p.event,ingest:s,respond:r,rule:y,data:p.data}),o.batched.events.push(p.event),C(p.data)&&o.batched.data.push(p.data);const h=n.config.id||t,m=We(e,h);return m.inFlightBatch=(null!=(f=m.inFlightBatch)?f:0)+1,o.batchFn(),Be}{v.debug("push",{event:p.event.name});const t=await _(n.push,"DestinationPush",e.hooks,e.logger)(p.event,m);return v.debug("push done"),t}}function Xe(e){return{ok:!(null==e?void 0:e.failed),...e}}function Ze(e){const{code:n,config:t={},env:o={},cache:s}=e,{config:r}=xe(e,"before"),{config:i}=xe({...e,config:r},"next"),a={...n.config,...t,...i};s&&(a.cache=s);const c=en(n.env,o);return{...n,config:a,env:c}}function en(e,n){return e||n?n?e&&j(e)&&j(n)?{...e,...n}:n:e:{}}async function nn(e,n,t){const o=Object.entries(e).map(async([e,o])=>{var s;const r=o.destroy;if(!r)return;const i=o.type||"unknown",a=t.scope(i),c={id:e,config:o.config,env:null!=(s=o.env)?s:{},logger:a};try{await Promise.race([r(c),new Promise((t,o)=>setTimeout(()=>o(new Error(`${n} '${e}' destroy timed out`)),5e3))])}catch(t){a.error(`${n} '${e}' destroy failed: ${t}`)}});await Promise.allSettled(o)}async function tn(e,n,t){let o,s,r=!1;switch(n){case ke.Config:le(t)&&(re(e.config,t,{shallow:!1}),s=t,r=!0);break;case ke.Consent:if(le(t)){const{update:n}=function(e,n){const t={};return Object.entries(n).forEach(([e,n])=>{t[e]=!!n}),e.consent=f(e.consent,t),{update:t}}(e,t);s=n,r=!0}break;case ke.Custom:le(t)&&(e.custom=re(e.custom,t),s=t,r=!0);break;case ke.Destination:le(t)&&"code"in t&&le(t.code)&&(o=await async function(e,n){const{code:t,config:o={},env:s={},before:r,next:i,cache:a}=n;if(!I(t.push))return Xe({ok:!1,failed:{invalid:{type:"invalid",error:"Destination code must have a push method"}}});const c=o||{init:!1};let l=r?{...c,before:r}:{...c};i&&(l={...l,next:i}),a&&(l={...l,cache:a});const u={...t,config:l,env:en(t.env,s)};let d=u.config.id;if(!d)do{d=q(5,"abcdefghijklmnopqrstuvwxyz")}while(e.destinations[d]);return e.destinations[d]=u,!1!==u.config.queue&&(u.queuePush=[...e.queue]),Ve(e,void 0,{},{[d]:u})}(e,t));break;case ke.Globals:le(t)&&(e.globals=re(e.globals,t),s=t,r=!0);break;case ke.Hook:if(le(t)&&ce(t.name)&&ae(t.fn)){const{name:n,fn:o}=t;e.hooks[n]=o,s=t,r=!0}break;case ke.On:if(le(t)&&ce(t.type)){const{type:n,rules:o}=t;await async function(e,n,t){const o=e.on,s=o[n]||[],r=E(t)?t:[t];r.forEach(e=>{s.push(e)}),o[n]=s,Re(e,n,r)}(e,n,o)}break;case ke.Ready:r=!0;break;case ke.Run:o=await async function(e,n){return e.allowed=!0,e.timing=Date.now(),n&&(n.consent&&(e.consent=re(e.consent,n.consent)),n.user&&(e.user=re(e.user,n.user)),n.globals&&(e.globals=re(e.config.globalsStatic||{},n.globals)),n.custom&&(e.custom=re(e.custom,n.custom))),Object.values(e.destinations).forEach(e=>{e.queuePush=[]}),e.queue=[],e.round++,await Ve(e)}(e,t),r=!0;break;case ke.Session:r=!0;break;case ke.Shutdown:await async function(e){const n=e.logger;await nn(e.sources,"source",n),await nn(e.destinations,"destination",n),await nn(e.transformers,"transformer",n),await nn(e.stores,"store",n)}(e);break;case ke.User:le(t)&&(re(e.user,t,{shallow:!1}),s=t,r=!0)}return r&&(await async function(e,n,t,o){var s,r;let i,a=t||[];switch(t||(a=e.on[n]||[]),n){case ke.Consent:i=o||e.consent;break;case ke.Session:i=e.session;break;case ke.User:i=o||e.user;break;case ke.Custom:i=o||e.custom;break;case ke.Globals:i=o||e.globals;break;case ke.Config:i=o||e.config;break;case ke.Ready:case ke.Run:default:i=void 0}let c=!1;for(const[t,o]of Object.entries(e.sources)){if(null==(s=o.config.require)?void 0:s.length){const e=o.config.require.indexOf(n);-1!==e&&o.config.require.splice(e,1)}o.on&&(Ee(o)?!1===await z(o.on,o=>Me(e,"source",o,{sourceId:t,type:n}))(n,i)&&(c=!0):(o.queueOn=o.queueOn||[],o.queueOn.push({type:n,data:i})))}Object.entries(e.destinations).forEach(([t,o])=>{if(o.on){if(!o.config.init)return o.queueOn=o.queueOn||[],void o.queueOn.push({type:n,data:i});Ke(e,o,t,n,i)}});for(const[n,t]of Object.entries(e.sources))Ee(t)&&(null==(r=t.queueOn)?void 0:r.length)&&await _e(e,t,n);return Object.keys(e.pending.destinations).length>0&&await async function(e,n){var t;for(const[o,s]of Object.entries(e.pending.destinations)){if(!e.pending.destinations[o]||e.destinations[o])continue;const r=null==(t=s.config)?void 0:t.require;if(!r)continue;const i=r.indexOf(n);if(-1===i)continue;if(r.splice(i,1),r.length>0)continue;delete e.pending.destinations[o];const a=Ze(s);!1!==a.config.queue&&(a.queuePush=[...e.queue]),e.destinations[o]=a}}(e,n),Re(e,n,a,o),!c}(e,n,void 0,s),o=await Ve(e)),o||Xe({ok:!0})}function on(e,n){if(!n.name)throw new Error("Event name is required");const[t,o]=n.name.split(" ");if(!t||!o)throw new Error("Event name is invalid");const{timestamp:s=Date.now(),name:r=`${t} ${o}`,data:i={},context:a={},globals:c=e.globals,custom:l={},user:u=e.user,nested:d=[],consent:f=e.consent,id:g=ie(),trigger:p="",entity:h=t,action:v=o,timing:m=0,source:y={type:"collector",schema:"4"}}=n;return{name:r,data:i,context:a,globals:c,custom:l,user:u,nested:d,consent:f,id:g,trigger:p,entity:h,action:v,timestamp:s,timing:m,source:y}}function sn(e={}){var n,t,o;const s=null!=(n=e.maxEntries)?n:1e4,r=null!=(t=e.lowWaterMark)?t:.8,i=null!=(o=e.sweepIntervalMs)?o:6e4,a=Math.floor(s*r),c=new Map,l={hits:0,misses:0,populates:0,writes:0,deletes:0,evictions_entries:0,evictions_ttl:0};let u;return i>0&&(u=setInterval(function(){const e=Date.now();let n=0;for(const[t,o]of c)void 0!==o.expires&&o.expires<=e&&(c.delete(t),n++);l.evictions_ttl+=n},i),u&&"function"==typeof u.unref&&u.unref()),{type:"memory",config:{},get(e){const n=c.get(e);if(n)return void 0!==n.expires&&n.expires<=Date.now()?(c.delete(e),l.evictions_ttl++,void l.misses++):(c.delete(e),c.set(e,n),l.hits++,n.value);l.misses++},set(e,n,t){const o=!c.has(e);o||c.delete(e),c.set(e,{value:n,expires:void 0!==t?Date.now()+t:void 0}),l.writes++,o&&l.populates++,c.size>s&&function(){if(c.size<=s)return;const e=c.size-a;let n=0;for(const t of c.keys()){if(n>=e)break;c.delete(t),n++}l.evictions_entries+=n}()},delete(e){c.delete(e)&&l.deletes++},get counters(){return{...l}},destroy(){void 0!==u&&(clearInterval(u),u=void 0),c.clear()}}}function rn(e,n){const{cacheConfig:t,cacheStore:o,namespace:s,logger:r,storeId:i}=n,a={hits:0,misses:0,populates:0,writes:0,deletes:0,inflight_dedups:0},c=t.rules.map(e=>({match:e.match?we(e.match):()=>!0,ttl:e.ttl})),l=e=>`${s}:${e}`;function u(e,n){const t=void 0===n?{key:e}:{key:e,value:n};return c.find(e=>e.match(t))}const d=new Map;return{type:e.type,config:e.config,setup:e.setup,get counters(){return{...a}},async get(n){const t=l(n),s=await o.get(t);if(void 0!==s)return a.hits++,s;const r=d.get(t);if(r)return a.inflight_dedups++,r;a.misses++;const i=(async()=>{try{const s=await e.get(n);if(void 0===s)return;const r=u(n,s);if(r)try{await o.set(t,s,1e3*r.ttl),a.populates++}catch(e){f("set",n,e)}return s}finally{d.delete(t)}})();return d.set(t,i),i},async set(n,t,s){a.writes++,await e.set(n,t,s);const r=u(n,t);if(r)try{await o.set(l(n),t,1e3*r.ttl)}catch(e){f("set",n,e)}},async delete(n){a.deletes++,await e.delete(n);try{await o.delete(l(n))}catch(e){f("delete",n,e)}}};function f(e,n,t){const o=`store-cache(${i}): cache ${e} failed for "${n}"; backing succeeded, continuing`;r?r.warn(o,{error:t}):console.warn(o,t)}}function an(e,n){const t=n.get,o=n.set,s=n.delete;n.get=be(t,"StoreGet",e.hooks,e.logger),n.set=be(o,"StoreSet",e.hooks,e.logger),n.delete=be(s,"StoreDelete",e.hooks,e.logger)}async function cn(e){var n,t;const o=g({globalsStatic:{},sessionStatic:{},run:!0,queueMax:1e3},e,{merge:!1,extend:!1}),s={level:null==(n=e.logger)?void 0:n.level,handler:null==(t=e.logger)?void 0:t.handler},r=p(s),i={...o.globalsStatic,...e.globals},a={allowed:!1,config:o,consent:e.consent||{},custom:e.custom||{},destinations:{},transformers:{},stores:{},globals:i,hooks:e.hooks||{},logger:r,on:{},queue:[],round:0,session:void 0,status:{startedAt:Date.now(),in:0,out:0,failed:0,sources:{},destinations:{},dropped:{}},timing:Date.now(),user:e.user||{},sources:{},pending:{destinations:{}},push:void 0,command:void 0};var c,l;a.push=function(e,n){return he(async(t,o={})=>await pe(async()=>{var s;const r=Date.now(),{id:i,ingest:a,respond:c,mapping:l,preChain:u,include:d,exclude:f}=o;let g=c,p=t;const h=d||f?function(e,n,t){let o=e;return n&&(o=Object.fromEntries(Object.entries(o).filter(([e])=>n.includes(e)))),t&&(o=Object.fromEntries(Object.entries(o).filter(([e])=>!t.includes(e)))),o}(e.destinations,d,f):void 0,v=null!=a?a:ue(i||"unknown");if(l){const n=await ge(p,l,e);if(n.ignore)return Xe({ok:!0});if(l.consent&&!fe(l.consent,e.consent,n.event.consent))return Xe({ok:!0});p=n.event}if((null==u?void 0:u.length)&&e.transformers&&Object.keys(e.transformers).length>0){const t=await Ae(e,e.transformers,u,p,v,g,i?`source.${i}.next`:void 0);if(null===t.event)return Xe({ok:!0});if(t.stopped)return t.respond&&(g=t.respond),Xe({ok:!0});if(t.respond&&(g=t.respond),Array.isArray(t.event)){const o=await Promise.all(t.event.map(async t=>{const o=n(t),s=on(e,o);return Ve(e,s,{id:i,ingest:v,respond:g},h)}));if(i){e.status.sources[i]||(e.status.sources[i]={count:0,duration:0});const n=e.status.sources[i];n.count+=t.event.length,n.lastAt=Date.now(),n.duration+=Date.now()-r}return null!=(s=o[0])?s:Xe({ok:!0})}p=t.event}const m=n(p),y=on(e,m),b=await Ve(e,y,{id:i,ingest:v,respond:g},h);if(i){e.status.sources[i]||(e.status.sources[i]={count:0,duration:0});const n=e.status.sources[i];n.count++,n.lastAt=Date.now(),n.duration+=Date.now()-r}return b},n=>{if(n instanceof de)throw n;return e.status.failed++,e.logger.error("push failed",{event:t,ingest:o.ingest,error:n}),Xe({ok:!1})})(),"Push",e.hooks,e.logger)}(a,e=>({timing:Math.round((Date.now()-a.timing)/10)/100,source:{type:"collector",schema:"4",version:"4.1.0-next-1779362268386"},...e})),a.command=(l=tn,me(async(e,n,t)=>await ye(async()=>await l(c,e,n,t),t=>{if(t instanceof ve)throw t;return c.status.failed++,c.logger.error("command failed",{command:e,data:n,error:t}),Xe({ok:!1})})(),"Command",(c=a).hooks,c.logger));const u=e.stores||{};return a.stores=await async function(e,n={}){var t;const o={};for(const[t,s]of Object.entries(n)){const{code:n,config:r={},env:i={}}=s,a=e.logger.scope("store").scope(t),c={collector:e,logger:a,id:t,config:r,env:i},l=await n(c);o[t]=l}const s=n,r=function(e){const n={};for(const t of Object.keys(e))n[t]="WHITE";const t=[],o=[];function s(r){var i;const a=n[r];if("BLACK"===a)return;if("GRAY"===a){const e=o.indexOf(r),n=o.slice(-1===e?0:e).concat(r).join(" -> ");throw new Error(`Cycle in cache.store chain: ${n}`)}n[r]="GRAY",o.push(r);const c=null==(i=e[r].cache)?void 0:i.store;if(void 0!==c){if(!(c in e))throw new Error(`Store "${r}" cache.store references "${c}", which is not declared in flow.stores`);s(c)}o.pop(),n[r]="BLACK",t.push(r)}for(const t of Object.keys(e))"WHITE"===n[t]&&s(t);return t}(s);for(const n of r){const r=s[n].cache;if(!r)continue;let i,a;void 0!==r.store?(i=o[r.store],a=r.store):(o.__cache||(o.__cache=sn()),i=o.__cache,a="__cache");const c=null!=(t=r.namespace)?t:n;e.logger.scope("store-cache").scope(n).info(`store "${n}" caches with namespace "${c}:" via ${a}`),o[n]=rn(o[n],{storeId:n,cacheConfig:r,cacheStore:i,namespace:c,logger:e.logger.scope("store-cache").scope(n)})}for(const[n,t]of Object.entries(o))"__cache"!==n&&an(e,t);return o}(a,u),function(e,n,t){const o=new Map;for(const[t,s]of Object.entries(e))n[t]&&o.set(s,n[t]);if(0!==o.size)for(const e of[t.transformers,t.destinations,t.sources])if(e)for(const n of Object.values(e))s(n.env);function s(e){if(e)for(const[n,t]of Object.entries(e))if("object"==typeof t&&null!==t){const s=o.get(t);s&&(e[n]=s)}}}(u,a.stores,e),a.stores.__cache||(a.stores.__cache=sn()),a.destinations=await async function(e,n={}){var t,o;const s={};for(const[r,i]of Object.entries(n))(null==(o=null==(t=i.config)?void 0:t.require)?void 0:o.length)?e.pending.destinations[r]=i:s[r]=Ze(i);return s}(a,e.destinations||{}),a.transformers=await async function(e,n={}){var t,o,s,r;const i={};for(const[a,c]of Object.entries(n)){const{code:n,env:l={}}=c,u=oe(c,"Transformer");if(!u.ok){e.logger.warn(`Transformer ${a} invalid (${u.code}): ${u.reason}. Skipping.`);continue}const{config:d}=xe(c,"before"),{config:f}=xe({...c,config:d},"next"),g=Object.keys(l).length>0?{...f,env:l}:f,{cache:p}=c,h=p?{...g,cache:p}:g,v=e.logger.scope("transformer").scope(a),m={collector:e,logger:v,id:a,ingest:L(a),config:h,env:l},y=null!=n?n:e=>{const n=c.mapping;if(n){const t=[];if(void 0!==n.data&&t.push("data"),n.mapping)for(const[e,o]of Object.entries(n.mapping))if("object"==typeof o&&null!==o)for(const[n,s]of Object.entries(o)){if("object"!=typeof s||null===s)continue;const o=s;void 0!==o.data&&t.push(`mapping[${e}][${n}].data`),void 0!==o.silent&&t.push(`mapping[${e}][${n}].silent`)}return t.length>0&&e.collector.logger.warn(`Transformer ${a}: \`${t.join(", ")}\` ignored at transformer position (only event-mutating fields apply).`),{type:"pass",config:e.config,push:async t=>{const o=await se(t,n,e.collector);return!o.ignore&&{event:o.event}}}}return{type:"pass",config:e.config,push:e=>({event:e})}},b=await y(m);void 0!==c.before&&void 0===(null==(t=b.config)?void 0:t.before)&&(b.config={...null!=(o=b.config)?o:{},before:c.before}),void 0!==c.next&&void 0===(null==(s=b.config)?void 0:s.next)&&(b.config={...null!=(r=b.config)?r:{},next:c.next}),i[a]=b}return i}(a,e.transformers||{}),a}async function ln(e){e=e||{};const n=await cn(e),t=(o=n,{type:"elb",config:{},push:async(e,n,t,s,r)=>{if("string"==typeof e&&e.startsWith("walker ")){const t=e.replace("walker ","");return o.command(t,n)}let i;if("string"==typeof e)i={name:e},n&&"object"==typeof n&&!Array.isArray(n)&&(i.data=n);else{if(!e||"object"!=typeof e)return Xe({ok:!1});i=e,n&&"object"==typeof n&&!Array.isArray(n)&&(i.data={...i.data||{},...n})}return t&&"object"==typeof t&&(i.context=t),s&&Array.isArray(s)&&(i.nested=s),r&&"object"==typeof r&&(i.custom=r),o.push(i)}});var o;n.sources.elb=t,await async function(e,n={}){var t;const o={};for(const[s,r]of Object.entries(n)){const n=await Pe(e,s,r);if(!n)continue;const i=null==(t=r.config)?void 0:t.require;n.config={...n.config,init:!1,...i?{require:[...i]}:{}},o[s]=n}Object.assign(e.sources,o);for(const n of Object.keys(o)){const t=e.sources[n];let o=!1;t.init&&await F(t.init.bind(t),t=>{if(t instanceof R)throw t;o=!0,e.status.failed++,e.logger.scope("source").error("source init failed",{sourceId:n,error:t})})(),o||(t.config.init=!0,Ee(t)&&await _e(e,t,n))}return o}(n,e.sources||{});const{consent:s,user:r,globals:i,custom:a}=e;s&&await n.command("consent",s),r&&await n.command("user",r),i&&Object.assign(n.globals,i),a&&Object.assign(n.custom,a),n.config.run&&await n.command("run");let c=t.push;const l=Object.values(n.sources).filter(e=>"elb"!==e.type),u=l.find(e=>e.config.primary);return u?c=u.push:l.length>0&&(c=l[0].push),{collector:n,elb:c}}var un=async e=>{let n;return{get flow(){return n},trigger:(t,o)=>async t=>{var s,r,i,a,c,l,u,d,f;const g=o||{};if(g.url){const e=new URL(g.url);window.history.replaceState({},"",e.pathname+e.search)}if(g.referrer&&Object.defineProperty(document,"referrer",{value:g.referrer,configurable:!0}),g.sessionData){const e=g.sessionKey||"elbSessionId";localStorage.setItem(e,JSON.stringify(g.sessionData))}if(g.deviceId){const e=g.deviceKey||"elbDeviceId";localStorage.setItem(e,g.deviceId)}if(!n){const t=await ln({...e,run:null==(s=e.run)||s});n={collector:t.collector,elb:t.elb};const o=g.sessionKey||(null==(c=null==(a=null==(i=null==(r=e.sources)?void 0:r.session)?void 0:i.config)?void 0:a.settings)?void 0:c.sessionKey)||"elbSessionId",p=g.deviceKey||(null==(f=null==(d=null==(u=null==(l=e.sources)?void 0:l.session)?void 0:u.config)?void 0:d.settings)?void 0:f.deviceKey)||"elbDeviceId";localStorage.removeItem(o),localStorage.removeItem(p),g.sessionData&&localStorage.setItem(o,JSON.stringify(g.sessionData)),g.deviceId&&localStorage.setItem(p,g.deviceId),e.consent&&await n.collector.command("consent",e.consent)}}}},dn=(e,n)=>{if(!e||"object"!=typeof e)return;const t=e,o=n.localStorage;if(t.sessionData&&"object"==typeof t.sessionData){const e="string"==typeof t.sessionKey?t.sessionKey:"elbSessionId";o.setItem(e,JSON.stringify(t.sessionData))}if("string"==typeof t.deviceId){const e="string"==typeof t.deviceKey?t.deviceKey:"elbDeviceId";o.setItem(e,t.deviceId)}};export{c as examples,t as schemas};//# sourceMappingURL=dev.mjs.map
1
+ var e=Object.defineProperty,n=(n,t)=>{for(var o in t)e(n,o,{get:t[o],enumerable:!0})},t={};n(t,{SettingsSchema:()=>i,settings:()=>a});import{zodToSchema as o}from"@walkeros/core/dev";import{z as s,ClickIdEntrySchema as r}from"@walkeros/core/dev";var i=s.object({storage:s.boolean().default(!1).describe("Enable persistent storage for session/device IDs").optional(),consent:s.union([s.string(),s.array(s.string())]).describe("Consent key(s) required to enable storage mode").optional(),length:s.number().default(30).describe("Session timeout in minutes").optional(),pulse:s.boolean().default(!1).describe("Keep session alive on each event").optional(),sessionKey:s.string().default("elbSessionId").describe("Storage key for session ID").optional(),sessionStorage:s.enum(["local","session"]).default("local").describe("Storage type for session").optional(),deviceKey:s.string().default("elbDeviceId").describe("Storage key for device ID").optional(),deviceStorage:s.enum(["local","session"]).default("local").describe("Storage type for device").optional(),deviceAge:s.number().default(30).describe("Device ID age in days").optional(),cb:s.any().describe("Custom session callback function or false to disable").optional(),clickIds:s.array(r).describe("Custom click-ID registry. Entries with a `param` matching a default override the platform name in place; new params append to the end of the priority list.").optional()}),a=o(i),c={};n(c,{createTrigger:()=>un,step:()=>l,trigger:()=>dn});var l={};n(l,{newMarketingSession:()=>u,returningVisitor:()=>d});var u={title:"New marketing session",description:"A visit with UTM parameters starts a new session and emits walker user, session, and session start calls.",trigger:{type:"load",options:{url:"https://example.com/?utm_source=google&utm_medium=cpc&utm_campaign=winter-sale"}},in:{storage:!0},out:[["elb","user",{session:"s3ss10n-id",device:"d3v1c3-id"}],["elb","session",{id:"s3ss10n-id",start:17e11,isNew:!0,count:1,runs:1,marketing:!0,source:"google",medium:"cpc",campaign:"winter-sale",referrer:"",device:"d3v1c3-id",isStart:!0,storage:!0,updated:17e11}],["elb",{name:"session start",data:{id:"s3ss10n-id",start:17e11,isNew:!0,count:1,runs:1,marketing:!0,source:"google",medium:"cpc",campaign:"winter-sale",referrer:"",device:"d3v1c3-id",isStart:!0,storage:!0,updated:17e11}}]]},d={title:"Returning visitor",description:"A returning visit with a google referrer reuses the stored device id and increments the session count.",trigger:{type:"load",options:{referrer:"https://google.com"}},in:{storage:!0},out:[["elb","user",{session:"n3w-s3ss10n",device:"d3v1c3-id"}],["elb","session",{id:"n3w-s3ss10n",start:1700001e6,isNew:!1,count:3,runs:1,referrer:"google.com",device:"d3v1c3-id",isStart:!0,storage:!0,updated:1700001e6}],["elb",{name:"session start",data:{id:"n3w-s3ss10n",start:1700001e6,isNew:!1,count:3,runs:1,referrer:"google.com",device:"d3v1c3-id",isStart:!0,storage:!0,updated:1700001e6}}]]};import{assign as f}from"@walkeros/core";import{assign as g,createLogger as p}from"@walkeros/core";import{assign as h,buildCacheContext as v,clone as m,compileCache as y,checkCache as b,storeCache as w,createIngest as k,debounce as S,getId as q,getGrantedConsent as x,getNextSteps as O,isDefined as C,isFunction as I,isObject as j,processEventMapping as A,stepId as $,tryCatchAsync as D,useHooks as _}from"@walkeros/core";import{isArray as E,FatalError as P}from"@walkeros/core";import{tryCatch as M,tryCatchAsync as z}from"@walkeros/core";import{createIngest as K,FatalError as R,getMappingValue as T,tryCatchAsync as F,getNextSteps as H,compileCache as N,checkCache as B,storeCache as G,applyUpdate as U,buildCacheContext as W}from"@walkeros/core";import{createIngest as L,FatalError as J,isObject as V,tryCatchAsync as Y,useHooks as Q,getNextSteps as X,compileCache as Z,checkCache as ee,storeCache as ne,buildCacheContext as te,validateStepEntry as oe,processEventMapping as se}from"@walkeros/core";import{assign as re,getSpanId as ie,isFunction as ae,isString as ce}from"@walkeros/core";import{isObject as le}from"@walkeros/core";import{createIngest as ue,FatalError as de,getGrantedConsent as fe,processEventMapping as ge,tryCatchAsync as pe,useHooks as he}from"@walkeros/core";import{FatalError as ve,useHooks as me,tryCatchAsync as ye}from"@walkeros/core";import{useHooks as be}from"@walkeros/core";import{compileMatcher as we}from"@walkeros/core";var ke={Action:"action",Actions:"actions",Config:"config",Consent:"consent",Context:"context",Custom:"custom",Destination:"destination",Elb:"elb",Globals:"globals",Hook:"hook",Init:"init",Link:"link",On:"on",Prefix:"data-elb",Ready:"ready",Run:"run",Session:"session",Shutdown:"shutdown",User:"user",Walker:"walker"};function Se(e,n){return e.storeId&&n.stores[e.storeId]?n.stores[e.storeId]:n.stores.__cache}function qe(e){var n;const t={};for(const[o,s]of Object.entries(e)){const e=null==(n=s.config)?void 0:n.next;"string"==typeof e||Array.isArray(e)&&e.every(e=>"string"==typeof e)?t[o]={next:e}:t[o]={}}return t}function xe(e,n){const t=e.config||{},o=e[n];return void 0!==o?{config:{...t,[n]:o},chainValue:o}:{config:t,chainValue:void 0}}function Oe(e,n={}){if(!e)return[];if(Array.isArray(e))return e;const t=[],o=new Set;let s=e;for(;s&&n[s]&&!o.has(s);){o.add(s),t.push(s);const e=n[s].next;if(Array.isArray(e)){t.push(...e);break}s=e}return t}async function Ce(e,n,t){if(n.init&&!n.config.init){const o=n.type||"unknown",s=e.logger.scope(`transformer:${o}`),r={collector:e,logger:s,id:t,ingest:L(t),config:n.config,env:$e(n.config.env)};s.debug("init");const i=await Q(n.init,"TransformerInit",e.hooks,e.logger)(r);if(!1===i)return!1;n.config={...i||n.config,env:(null==i?void 0:i.env)||n.config.env,init:!0},s.debug("init done")}return!0}async function Ie(e,n,t,o,s,r){const i=n.type||"unknown",a=e.logger.scope(`transformer:${i}`),c={collector:e,logger:a,id:t,ingest:s,config:n.config,env:{...$e(n.config.env),...r?{respond:r}:{}}};a.debug("push",{event:o.name});const l=await Q(n.push,"TransformerPush",e.hooks,e.logger)(o,c);return a.debug("push done"),l}function je(e,n){return e?{...e,_meta:{...e._meta,path:[...e._meta.path]}}:L(n)}async function Ae(e,n,t,o,s,r,i){var a,c,l,u,d,f,g,p;s||(s=L(null!=(a=t[0])?a:"chain")),i&&s._meta&&(s._meta.chainPath=i);let h=o,v=r;for(const o of t){const r=n[o];if(!r){e.logger.warn(`Transformer not found: ${o}`);continue}if(s&&s._meta&&s._meta.path.length>256)return e.logger.error(`Max path length exceeded at ${o}`),{event:null,respond:v};if(s&&s._meta&&(s._meta.hops++,s._meta.path.push(o)),!await Y(Ce,n=>{if(n instanceof J)throw n;return e.status.failed++,e.logger.scope(`transformer:${r.type||"unknown"}`).error("transformer init failed",{transformer:o,error:n}),!1})(e,r,o))return{event:null,respond:v};if(i&&void 0!==(null==(l=null==(c=r.config)?void 0:c.chainMocks)?void 0:l[i])){const n=r.config.chainMocks[i];e.logger.scope(`transformer:${r.type||"unknown"}`).debug("chainMock",{chain:i}),h=n;continue}if(void 0!==(null==(u=r.config)?void 0:u.mock)){e.logger.scope(`transformer:${r.type||"unknown"}`).debug("mock"),h=r.config.mock;continue}if(null==(d=r.config)?void 0:d.disabled)continue;const a=null==(f=r.config)?void 0:f.cache,m=a?Z(a):void 0,y=m?Se(m,e):void 0;let b;if(m&&y){const e=te(s,h),n=await ee(m,y,e);if("HIT"===(null==n?void 0:n.status)&&n.value){if(h=n.value,m.stop)return{event:h,respond:v,stopped:!0};continue}"MISS"===(null==n?void 0:n.status)&&(b={key:n.key,ttl:n.rule.ttl})}const w=r.config.before;if(w){const t=X(w,te(s,h));if(1===t.length){const o=Oe(t[0],qe(n));if(o.length>0){const t=await Ae(e,n,o,h,s,v,i);if(null===t.event)return{event:null,respond:null!=(g=t.respond)?g:v};if(t.stopped)return{event:Array.isArray(t.event)?t.event[0]:t.event,respond:null!=(p=t.respond)?p:v,stopped:!0};t.respond&&(v=t.respond),h=Array.isArray(t.event)?t.event[0]:t.event}}else t.length>1&&await Promise.all(t.map(t=>Y(Ae,n=>(e.logger.scope("transformer:many").error(`many branch ${t} failed`,{error:n}),{event:null,respond:void 0}))(e,n,Oe(t,qe(n)),h,je(s,t),void 0,i)))}const k=await Y(Ie,n=>(e.logger.scope(`transformer:${r.type||"unknown"}`).error("Push failed",{error:n}),!1))(e,r,o,h,s,v);if(!1===k)return{event:null,respond:v};if(Array.isArray(k)){const r=t.slice(t.indexOf(o)+1),a=await Promise.all(k.map(async t=>{const o=t.event||h,a=je(s,"unknown");if(t.next){const s=X(t.next,te(a,o));if(0===s.length)return{event:o,respond:v};if(1===s.length){const t=Oe(s[0],qe(n));return t.length>0?Ae(e,n,t,o,a,v,i):{event:o,respond:v}}return(await Promise.all(s.map(t=>Y(Ae,n=>(e.logger.scope("transformer:many").error(`many branch ${t} failed`,{error:n}),{event:null,respond:void 0}))(e,n,Oe(t,qe(n)),o,je(a,t),void 0,i)))).map(e=>({event:e.event,respond:void 0}))}return r.length>0?Ae(e,n,r,o,a,v,i):{event:o,respond:v}}));let c=v;const l=[];for(const e of a.flat())if(null!==e)if(e&&"object"==typeof e&&"event"in e){const n=e;if(n.respond&&(c=n.respond),null===n.event)continue;Array.isArray(n.event)?l.push(...n.event):l.push(n.event)}else l.push(e);return 0===l.length?{event:null,respond:c}:1===l.length?{event:l[0],respond:c}:{event:l,respond:c}}if(k&&"object"==typeof k){const{event:t,respond:o,next:r}=k;if(o&&(v=o),void 0!==r){const o=X(r,te(s,h));if(0===o.length){t&&(h=t);continue}if(1===o.length){const a=Oe(o[0],qe(n));return a.length>0?Ae(e,n,a,t||h,s,v,i):(e.logger.warn(`Branch target not found: ${JSON.stringify(r)}`),{event:null,respond:v})}return await Promise.all(o.map(o=>Y(Ae,n=>(e.logger.scope("transformer:many").error(`many branch ${o} failed`,{error:n}),{event:null,respond:void 0}))(e,n,Oe(o,qe(n)),t||h,je(s,o),void 0,i))),{event:null,respond:void 0}}t&&(h=t)}b&&y&&ne(y,b.key,h,b.ttl);const S=r.config.next,q="string"==typeof S||Array.isArray(S)&&S.every(e=>"string"==typeof e),x=void 0!==S&&!q;if((!k||"object"==typeof k&&!k.next)&&x){const t=X(r.config.next,te(s,h));if(1===t.length){const o=Oe(t[0],qe(n));return o.length>0?Ae(e,n,o,h,s,v,i):{event:h,respond:v}}return t.length>1?(await Promise.all(t.map(t=>Y(Ae,n=>(e.logger.scope("transformer:many").error(`many branch ${t} failed`,{error:n}),{event:null,respond:void 0}))(e,n,Oe(t,qe(n)),h,je(s,t),void 0,i))),{event:null,respond:void 0}):{event:h,respond:v}}}return{event:h,respond:v}}function $e(e){return e&&V(e)?e:{}}function De(e){return"string"==typeof e||!(!Array.isArray(e)||!e.every(e=>"string"==typeof e))}async function _e(e,n,t){var o,s;if(!n.on||!(null==(o=n.queueOn)?void 0:o.length))return;const r=n.queueOn;n.queueOn=[];const i=t||(null==(s=n.config)?void 0:s.id)||"unknown";for(const{type:t,data:o}of r)await F(n.on,n=>{if(n instanceof R)throw n;e.status.failed++,e.logger.scope("source").error("source on flush failed",{sourceId:i,type:t,error:n})})(t,o)}function Ee(e){var n;return Boolean(e.config.init)&&!(null==(n=e.config.require)?void 0:n.length)}async function Pe(e,n,t){var o;const{code:s,config:r={},env:i={},primary:a,next:c,before:l,cache:u}=t,d=u,f=d?N({...d,stop:null==(o=d.stop)||o}):void 0,g=De(c)?Oe(c,qe(e.transformers)):void 0,p=De(l)?Oe(l,qe(e.transformers)):void 0,h=i.push,v=null!=h?h:e.push,m=Boolean(h),y=async(t,o,s)=>{var i;let a;const u=null!=p?p:void 0!==l?(()=>{const n=H(l,W(s.ingest));return 0===n.length?[]:Oe(1===n.length?n[0]:n,qe(e.transformers))})():[];let d=[t];if(u.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const o=await Ae(e,e.transformers,u,t,s.ingest,s.respond,`source.${n}.before`);if(null===o.event)return{ok:!0};if(o.stopped)return o.respond&&(s.respond=o.respond),{ok:!0};o.respond&&(s.respond=o.respond),d=Array.isArray(o.event)?o.event:[o.event]}if(f){const n=Se(f,e);if(n){const t=W(s.ingest),o=await B(f,n,t);if(o){if("HIT"===o.status&&void 0!==o.value&&f.stop){let n=o.value;return o.rule.update&&(n=await U(n,o.rule.update,{...t,cache:{status:"HIT"}},e)),null==(i=s.respond)||i.call(s,n),{ok:!0}}if("MISS"===o.status&&f.stop&&s.respond){const r=s.respond,i=o.rule.update,c={...t,cache:{status:"MISS"}},l=o.key,u=o.rule.ttl,d=t=>{G(n,l,t,u),i?a=(async()=>{const n=await U(t,i,c,e);r(n)})():r(t)};s.respond=d}"MISS"!==o.status||f.stop||G(n,o.key,!0,o.rule.ttl)}}}const h=g?{kind:"single",preChain:g}:void 0!==c?(()=>{const n=H(c,W(s.ingest));return 0===n.length?{kind:"single",preChain:[]}:1===n.length?{kind:"single",preChain:Oe(n[0],qe(e.transformers))}:{kind:"many",branches:n.map(n=>Oe(n,qe(e.transformers)))}})():{kind:"single",preChain:[]};let y={ok:!0};for(const t of d)"many"===h.kind?(await Promise.all(h.branches.map((i,a)=>F(async()=>m?v(t):v(t,{...o,id:n,ingest:je(s.ingest,`${n}.${a}`),respond:void 0,mapping:r,preChain:i}),n=>(e.logger.scope("source:many").error(`many branch ${a} failed`,{error:n}),{ok:!0}))())),y={ok:!0}):y=m?await v(t):await v(t,{...o,id:n,ingest:s.ingest,respond:s.respond,mapping:r,preChain:h.preChain});return a&&await a,y},b=async t=>{const o=K(n);if(!r.ingest||void 0===t)return o;const s=await T(t,r.ingest,{collector:e});return{...o,...s,_meta:o._meta}},w=e.logger.scope("source").scope(n),k={command:e.command,sources:e.sources,elb:e.sources.elb.push,logger:w,...i,push:async(e,t={})=>{const o={ingest:K(n),respond:void 0};return y(e,t,o)}},S={collector:e,logger:w,id:n,config:r,env:k,withScope:async(e,n,t)=>{const o={ingest:await b(e),respond:n};return t({...k,push:(e,n={})=>y(e,n,o),ingest:o.ingest,respond:o.respond})}},q=await F(s,t=>{if(t instanceof R)throw t;e.status.failed++,e.logger.scope("source").error("source factory failed",{sourceId:n,error:t})})(S);if(!q)return;const x=q.type||"unknown",O=e.logger.scope(x).scope(n);return k.logger=O,a&&(q.config={...q.config,primary:a}),q}function Me(e,n,t,o){if(t instanceof P)throw t;e.logger.scope("on").error("on callback failed",{kind:n,...o,error:t})}function ze(e,n){return{collector:e,logger:e.logger.scope("on").scope(String(n))}}function Ke(e,n,t,o,s){if(!n.on)return;const r=n.type||"unknown",i=e.logger.scope(r).scope("on").scope(o),a={collector:e,logger:i,id:t,config:n.config,data:s,env:en(n.env,n.config.env)};M(n.on,n=>Me(e,"destination",n,{destId:t,type:o}))(o,a)}function Re(e,n,t,o){let s;switch(n){case ke.Consent:s=o||e.consent;break;case ke.Session:s=e.session;break;case ke.User:s=o||e.user;break;case ke.Custom:s=o||e.custom;break;case ke.Globals:s=o||e.globals;break;case ke.Config:s=o||e.config;break;case ke.Ready:case ke.Run:default:s=void 0}if(t.length)switch(n){case ke.Consent:!function(e,n,t){const o=t||e.consent,s=ze(e,ke.Consent);n.forEach(n=>{Object.keys(o).filter(e=>e in n).forEach(t=>{M(n[t],n=>Me(e,"consent",n,{key:t}))(o,s)})})}(e,t,o);break;case ke.Ready:!function(e,n){if(!e.allowed)return;const t=ze(e,ke.Ready);n.forEach(n=>{M(n,n=>Me(e,"ready",n))(void 0,t)})}(e,t);break;case ke.Run:!function(e,n){if(!e.allowed)return;const t=ze(e,ke.Run);n.forEach(n=>{M(n,n=>Me(e,"run",n))(void 0,t)})}(e,t);break;case ke.Session:!function(e,n){if(!e.session)return;const t=ze(e,ke.Session);n.forEach(n=>{M(n,n=>Me(e,"session",n))(e.session,t)})}(e,t);break;default:{const o=ze(e,n);t.forEach(t=>{"function"==typeof t&&M(t,t=>Me(e,"generic",t,{type:n}))(s,o)});break}}}function Te(e,n,t,o){var s;if(!Number.isFinite(t.max)||t.max<=0)throw new Error(`pushBounded: max must be > 0 (got ${t.max})`);if("dropNewest"===(null!=(s=t.onOverflow)?s:"dropOldest"))return e.length>=t.max?(o&&o([n]),{appended:!1,dropped:1}):(e.push(n),{appended:!0,dropped:0});const r=[];for(;e.length>=t.max;)r.push(e.shift());return e.push(n),r.length>0&&o&&o(r),{appended:!0,dropped:r.length}}var Fe=new WeakMap;function He(e,n,t,o){Fe.get(e)||(Fe.set(e,!0),n.warn(t,o))}function Ne(e){Fe.delete(e)}var Be=Object.freeze({batched:!0});function Ge(e){return e===Be}function Ue(e){return void 0===e?{}:"number"==typeof e?{wait:e}:{wait:e.wait,size:e.size,age:e.age}}function We(e,n){return e.status.destinations[n]||(e.status.destinations[n]={count:0,failed:0,duration:0,queuePushSize:0,dlqSize:0}),e.status.destinations[n]}function Le(e,n,t,o){var s;e.dropped[n]||(e.dropped[n]={});const r=e.dropped[n];return r[t]=(null!=(s=r[t])?s:0)+o,r[t]}function Je(e,n,t){if(!e)return[];if(Array.isArray(e)&&e.every(e=>"string"==typeof e))return Oe(e,n);if("string"==typeof e)return Oe(e,n);const o=O(e,v(t));return 0===o.length?[]:1===o.length?Oe(o[0],n):Oe(o,n)}async function Ve(e,n,t={},o){var s,r,i,a,c,l;const{allowed:u,consent:d,globals:f,user:g}=e;if(!u)return Xe({ok:!1});if(n){const t=e.config.queueMax;if(void 0===t)throw new Error("Collector.Config.queueMax is undefined; defaults must be seeded by collector()");const o=Te(e.queue,n,{max:t});if(o.dropped>0){const n=Le(e.status,$("collector"),"queue",o.dropped);He(e.queue,e.logger,"collector.queue overflow; oldest events dropped",{buffer:"queue",cap:t,droppedCount:n})}else e.queue.length<t&&Ne(e.queue);e.status.in++}o||(o=e.destinations);const p=e.transformers?qe(e.transformers):{},S=await Promise.all(Object.entries(o||{}).map(async([o,s])=>{var r,i,a,c;if(s.config.disabled)return{id:o,destination:s,skipped:!0};let l=(s.queuePush||[]).map(e=>({...e,consent:d}));s.queuePush=[],n&&l.push(m(n));const u=t.ingest?{...t.ingest,_meta:{...t.ingest._meta,path:[...t.ingest._meta.path]}}:k("unknown");if(!l.length&&!(null==(r=s.queueOn)?void 0:r.length))return{id:o,destination:s,skipped:!0};if(!l.length&&(null==(i=s.queueOn)?void 0:i.length)){let n=!1;try{n=await Ye(e,s,o)}catch(n){e.status.failed++;const t=s.type||"unknown";e.logger.scope(t).error("destination init failed",{error:n instanceof Error?n.message:String(n)})}return{id:o,destination:s,skipped:!n}}const S=[],q=l.filter(e=>{const n=x(s.config.consent,d,e.consent);return!n||(e.consent=n,S.push(e),!1)});if(q.length>0){const n=s.queuePush,t=s.config.id||o,r={max:null!=(a=s.config.queueMax)?a:1e3};let i=0;for(const e of q)i+=Te(n,e,r).dropped;if(i>0){We(e,t);const o=Le(e.status,$("destination",t),"queue",i);He(n,e.logger.scope(s.type||"unknown"),"destination.queuePush overflow; oldest events dropped",{buffer:"queuePush",destination:t,cap:r.max,droppedCount:o})}else n.length<r.max&&Ne(n)}if(!S.length)return{id:o,destination:s,queue:l};let O,C,I=!1;try{I=await Ye(e,s,o)}catch(n){e.status.failed++;const t=s.type||"unknown";e.logger.scope(t).error("destination init failed",{error:n instanceof Error?n.message:String(n)})}if(!I)return{id:o,destination:s,queue:l};s.dlq||(s.dlq=[]);const j=Je(s.config.before,p,u),A=s.config.next,_=null==(c=s.config)?void 0:c.cache,E=_?y(_):void 0,P=E?Se(E,e):void 0;let M=0,z=0;return await Promise.all(S.map(async n=>{let r;if(n.globals=h(f,n.globals),n.user=h(g,n.user),(null==E?void 0:E.stop)&&P){const e=v(u,n),t=await b(E,P,e);if("HIT"===(null==t?void 0:t.status))return n;"MISS"===(null==t?void 0:t.status)&&(r={key:t.key,ttl:t.rule.ttl})}let i=n,a=t.respond;if(j.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const s=await Ae(e,e.transformers,j,n,u,t.respond,`destination.${o}.before`);if(null===s.event)return n;s.respond&&(a=s.respond),i=Array.isArray(s.event)?s.event[0]:s.event}if(E&&!E.stop&&P){const e=v(u,i),t=await b(E,P,e);if("HIT"===(null==t?void 0:t.status))return n;"MISS"===(null==t?void 0:t.status)&&(r={key:t.key,ttl:t.rule.ttl})}const c=Date.now();let l=!1;const d=await D(Qe,n=>{var t;const r=s.type||"unknown";e.logger.scope(r).error("Push failed",{error:n,event:i.name}),O=n,l=!0;const a=s.dlq,c=s.config.id||o,u={max:null!=(t=s.config.dlqMax)?t:100},d=Te(a,[i,n],u);if(d.dropped>0){We(e,c);const n=Le(e.status,$("destination",c),"dlq",d.dropped);He(a,e.logger.scope(s.type||"unknown"),"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:c,cap:u.max,droppedCount:n})}else a.length<u.max&&Ne(a)})(e,s,o,i,u,a);if(M+=Date.now()-c,r&&P&&void 0===s.config.mock&&w(P,r.key,null==d||d,r.ttl),void 0===d||Ge(d)||(C=d),Ge(d)&&z++,!l&&A){void 0!==d&&(u._response=d);const n=Je(A,p,u);if(n.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const t=await Ae(e,e.transformers,n,i,u,a,`destination.${o}.next`);t.respond&&(a=t.respond)}}return n})),{id:o,destination:s,error:O,response:C,totalDuration:M,batchedCount:z,allowedCount:S.length}})),q={},O={},C={};for(const n of S){if(n.skipped)continue;const t=n.destination,o={type:t.type||"unknown",data:n.response};We(e,n.id);const u=e.status.destinations[n.id],d=Date.now();if(u.queuePushSize=null!=(r=null==(s=t.queuePush)?void 0:s.length)?r:0,u.dlqSize=null!=(a=null==(i=t.dlq)?void 0:i.length)?a:0,n.error)o.error=n.error,C[n.id]=o,u.failed++,u.lastAt=d,u.duration+=n.totalDuration||0,e.status.failed++;else if(n.queue&&n.queue.length)O[n.id]=o;else{const t=null!=(c=n.batchedCount)?c:0,s=null!=(l=n.allowedCount)?l:0;(Math.max(0,s-t)>0||0===s)&&(q[n.id]=o,u.count++,u.lastAt=d,u.duration+=n.totalDuration||0,e.status.out++)}}return Xe({event:n,...Object.keys(q).length&&{done:q},...Object.keys(O).length&&{queued:O},...Object.keys(C).length&&{failed:C}})}async function Ye(e,n,t){var o;if(n.init&&!n.config.init){const s=n.type||"unknown",r=e.logger.scope(s),i={collector:e,logger:r,id:t,config:n.config,env:en(n.env,n.config.env)};r.debug("init");const a=await _(n.init,"DestinationInit",e.hooks,e.logger)(i);if(!1===a)return a;if(n.config={...a||n.config,init:!0},null==(o=n.queueOn)?void 0:o.length){const o=n.queueOn;n.queueOn=[];for(const{type:s,data:r}of o)Ke(e,n,t,s,r)}r.debug("init done")}return!0}async function Qe(e,n,t,o,s,r){var i,a,c,l,u,d,f;const{config:g}=n,p=await A(o,g,e);if(p.ignore)return!1;const h=n.type||"unknown",v=e.logger.scope(h),m={collector:e,logger:v,id:t,config:g,data:p.data,rule:p.mapping,ingest:s,env:{...en(n.env,g.env),...r?{respond:r}:{}}};if(void 0!==g.mock)return v.debug("mock",{event:p.event.name}),g.mock;const y=p.mapping,b=p.mappingKey||"* *";if((null==y?void 0:y.batch)&&n.pushBatch&&void 0===g.mock){if(n.batches=n.batches||{},!n.batches[b]){const o={key:b,entries:[],events:[],data:[]},s=Ue(y.batch),r=Ue(g.batch),f=null!=(a=null!=(i=s.wait)?i:r.wait)?a:3e4,p=null!=(l=null!=(c=s.size)?c:r.size)?l:1e3,h=null!=(d=null!=(u=s.age)?u:r.age)?d:3e4,m=en(n.env,g.env),w=S(async()=>{var o;const s=n.batches[b].batched;if(0===s.entries.length)return;const r={key:s.key,entries:s.entries,events:s.events,data:s.data};s.entries=[],s.events=[],s.data=[];const i=r.entries[0],a={collector:e,logger:v,id:t,config:g,data:void 0,rule:i.rule,ingest:i.ingest,env:{...m,...i.respond?{respond:i.respond}:{}}};v.debug("push batch",{events:r.entries.length});const c=n.config.id||t,l=We(e,c);let u=!0;await D(_(n.pushBatch,"DestinationPushBatch",e.hooks,e.logger),t=>{var o;u=!1;const s=n.dlq=n.dlq||[],i={max:null!=(o=n.config.dlqMax)?o:100};let a=0;for(const e of r.entries)a+=Te(s,[e.event,t],i).dropped;if(a>0){const n=Le(e.status,$("destination",c),"dlq",a);He(s,v,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:c,cap:i.max,droppedCount:n})}else s.length<i.max&&Ne(s);l.failed+=r.entries.length,l.dlqSize=s.length,e.status.failed+=r.entries.length,v.error("Push batch failed",{error:t instanceof Error?t.message:String(t),entries:r.entries.length})})(r,a),v.debug("push batch done"),l.inFlightBatch=Math.max(0,(null!=(o=l.inFlightBatch)?o:0)-r.entries.length),u&&(l.count+=r.entries.length,l.lastAt=Date.now(),e.status.out+=r.entries.length)},{wait:f,size:p,age:h});n.batches[b]={batched:o,batchFn:()=>{w()},flush:async()=>{await w.flush()}}}const o=n.batches[b];o.batched.entries.push({event:p.event,ingest:s,respond:r,rule:y,data:p.data}),o.batched.events.push(p.event),C(p.data)&&o.batched.data.push(p.data);const h=n.config.id||t,m=We(e,h);return m.inFlightBatch=(null!=(f=m.inFlightBatch)?f:0)+1,o.batchFn(),Be}{v.debug("push",{event:p.event.name});const t=await _(n.push,"DestinationPush",e.hooks,e.logger)(p.event,m);return v.debug("push done"),t}}function Xe(e){return{ok:!(null==e?void 0:e.failed),...e}}function Ze(e){const{code:n,config:t={},env:o={},cache:s}=e,{config:r}=xe(e,"before"),{config:i}=xe({...e,config:r},"next"),a={...n.config,...t,...i};s&&(a.cache=s);const c=en(n.env,o);return{...n,config:a,env:c}}function en(e,n){return e||n?n?e&&j(e)&&j(n)?{...e,...n}:n:e:{}}async function nn(e,n,t){const o=Object.entries(e).map(async([e,o])=>{var s;const r=o.destroy;if(!r)return;const i=o.type||"unknown",a=t.scope(i),c={id:e,config:o.config,env:null!=(s=o.env)?s:{},logger:a};try{await Promise.race([r(c),new Promise((t,o)=>setTimeout(()=>o(new Error(`${n} '${e}' destroy timed out`)),5e3))])}catch(t){a.error(`${n} '${e}' destroy failed: ${t}`)}});await Promise.allSettled(o)}async function tn(e,n,t){let o,s,r=!1;switch(n){case ke.Config:le(t)&&(re(e.config,t,{shallow:!1}),s=t,r=!0);break;case ke.Consent:if(le(t)){const{update:n}=function(e,n){const t={};return Object.entries(n).forEach(([e,n])=>{t[e]=!!n}),e.consent=f(e.consent,t),{update:t}}(e,t);s=n,r=!0}break;case ke.Custom:le(t)&&(e.custom=re(e.custom,t),s=t,r=!0);break;case ke.Destination:le(t)&&"code"in t&&le(t.code)&&(o=await async function(e,n){const{code:t,config:o={},env:s={},before:r,next:i,cache:a}=n;if(!I(t.push))return Xe({ok:!1,failed:{invalid:{type:"invalid",error:"Destination code must have a push method"}}});const c=o||{init:!1};let l=r?{...c,before:r}:{...c};i&&(l={...l,next:i}),a&&(l={...l,cache:a});const u={...t,config:l,env:en(t.env,s)};let d=u.config.id;if(!d)do{d=q(5,"abcdefghijklmnopqrstuvwxyz")}while(e.destinations[d]);return e.destinations[d]=u,!1!==u.config.queue&&(u.queuePush=[...e.queue]),Ve(e,void 0,{},{[d]:u})}(e,t));break;case ke.Globals:le(t)&&(e.globals=re(e.globals,t),s=t,r=!0);break;case ke.Hook:if(le(t)&&ce(t.name)&&ae(t.fn)){const{name:n,fn:o}=t;e.hooks[n]=o,s=t,r=!0}break;case ke.On:if(le(t)&&ce(t.type)){const{type:n,rules:o}=t;await async function(e,n,t){const o=e.on,s=o[n]||[],r=E(t)?t:[t];r.forEach(e=>{s.push(e)}),o[n]=s,Re(e,n,r)}(e,n,o)}break;case ke.Ready:r=!0;break;case ke.Run:o=await async function(e,n){return e.allowed=!0,e.timing=Date.now(),n&&(n.consent&&(e.consent=re(e.consent,n.consent)),n.user&&(e.user=re(e.user,n.user)),n.globals&&(e.globals=re(e.config.globalsStatic||{},n.globals)),n.custom&&(e.custom=re(e.custom,n.custom))),Object.values(e.destinations).forEach(e=>{e.queuePush=[]}),e.queue=[],e.round++,await Ve(e)}(e,t),r=!0;break;case ke.Session:r=!0;break;case ke.Shutdown:await async function(e){const n=e.logger;await nn(e.sources,"source",n),await nn(e.destinations,"destination",n),await nn(e.transformers,"transformer",n),await nn(e.stores,"store",n)}(e);break;case ke.User:le(t)&&(re(e.user,t,{shallow:!1}),s=t,r=!0)}return r&&(await async function(e,n,t,o){var s,r;let i,a=t||[];switch(t||(a=e.on[n]||[]),n){case ke.Consent:i=o||e.consent;break;case ke.Session:i=e.session;break;case ke.User:i=o||e.user;break;case ke.Custom:i=o||e.custom;break;case ke.Globals:i=o||e.globals;break;case ke.Config:i=o||e.config;break;case ke.Ready:case ke.Run:default:i=void 0}let c=!1;for(const[t,o]of Object.entries(e.sources)){if(null==(s=o.config.require)?void 0:s.length){const e=o.config.require.indexOf(n);-1!==e&&o.config.require.splice(e,1)}o.on&&(Ee(o)?!1===await z(o.on,o=>Me(e,"source",o,{sourceId:t,type:n}))(n,i)&&(c=!0):(o.queueOn=o.queueOn||[],o.queueOn.push({type:n,data:i})))}Object.entries(e.destinations).forEach(([t,o])=>{if(o.on){if(!o.config.init)return o.queueOn=o.queueOn||[],void o.queueOn.push({type:n,data:i});Ke(e,o,t,n,i)}});for(const[n,t]of Object.entries(e.sources))Ee(t)&&(null==(r=t.queueOn)?void 0:r.length)&&await _e(e,t,n);return Object.keys(e.pending.destinations).length>0&&await async function(e,n){var t;for(const[o,s]of Object.entries(e.pending.destinations)){if(!e.pending.destinations[o]||e.destinations[o])continue;const r=null==(t=s.config)?void 0:t.require;if(!r)continue;const i=r.indexOf(n);if(-1===i)continue;if(r.splice(i,1),r.length>0)continue;delete e.pending.destinations[o];const a=Ze(s);!1!==a.config.queue&&(a.queuePush=[...e.queue]),e.destinations[o]=a}}(e,n),Re(e,n,a,o),!c}(e,n,void 0,s),o=await Ve(e)),o||Xe({ok:!0})}function on(e,n){if(!n.name)throw new Error("Event name is required");const[t,o]=n.name.split(" ");if(!t||!o)throw new Error("Event name is invalid");const{timestamp:s=Date.now(),name:r=`${t} ${o}`,data:i={},context:a={},globals:c=e.globals,custom:l={},user:u=e.user,nested:d=[],consent:f=e.consent,id:g=ie(),trigger:p="",entity:h=t,action:v=o,timing:m=0,source:y={type:"collector",schema:"4"}}=n;return{name:r,data:i,context:a,globals:c,custom:l,user:u,nested:d,consent:f,id:g,trigger:p,entity:h,action:v,timestamp:s,timing:m,source:y}}function sn(e={}){var n,t,o;const s=null!=(n=e.maxEntries)?n:1e4,r=null!=(t=e.lowWaterMark)?t:.8,i=null!=(o=e.sweepIntervalMs)?o:6e4,a=Math.floor(s*r),c=new Map,l={hits:0,misses:0,populates:0,writes:0,deletes:0,evictions_entries:0,evictions_ttl:0};let u;return i>0&&(u=setInterval(function(){const e=Date.now();let n=0;for(const[t,o]of c)void 0!==o.expires&&o.expires<=e&&(c.delete(t),n++);l.evictions_ttl+=n},i),u&&"function"==typeof u.unref&&u.unref()),{type:"memory",config:{},get(e){const n=c.get(e);if(n)return void 0!==n.expires&&n.expires<=Date.now()?(c.delete(e),l.evictions_ttl++,void l.misses++):(c.delete(e),c.set(e,n),l.hits++,n.value);l.misses++},set(e,n,t){const o=!c.has(e);o||c.delete(e),c.set(e,{value:n,expires:void 0!==t?Date.now()+t:void 0}),l.writes++,o&&l.populates++,c.size>s&&function(){if(c.size<=s)return;const e=c.size-a;let n=0;for(const t of c.keys()){if(n>=e)break;c.delete(t),n++}l.evictions_entries+=n}()},delete(e){c.delete(e)&&l.deletes++},get counters(){return{...l}},destroy(){void 0!==u&&(clearInterval(u),u=void 0),c.clear()}}}function rn(e,n){const{cacheConfig:t,cacheStore:o,namespace:s,logger:r,storeId:i}=n,a={hits:0,misses:0,populates:0,writes:0,deletes:0,inflight_dedups:0},c=t.rules.map(e=>({match:e.match?we(e.match):()=>!0,ttl:e.ttl})),l=e=>`${s}:${e}`;function u(e,n){const t=void 0===n?{key:e}:{key:e,value:n};return c.find(e=>e.match(t))}const d=new Map;return{type:e.type,config:e.config,setup:e.setup,get counters(){return{...a}},async get(n){const t=l(n),s=await o.get(t);if(void 0!==s)return a.hits++,s;const r=d.get(t);if(r)return a.inflight_dedups++,r;a.misses++;const i=(async()=>{try{const s=await e.get(n);if(void 0===s)return;const r=u(n,s);if(r)try{await o.set(t,s,1e3*r.ttl),a.populates++}catch(e){f("set",n,e)}return s}finally{d.delete(t)}})();return d.set(t,i),i},async set(n,t,s){a.writes++,await e.set(n,t,s);const r=u(n,t);if(r)try{await o.set(l(n),t,1e3*r.ttl)}catch(e){f("set",n,e)}},async delete(n){a.deletes++,await e.delete(n);try{await o.delete(l(n))}catch(e){f("delete",n,e)}}};function f(e,n,t){const o=`store-cache(${i}): cache ${e} failed for "${n}"; backing succeeded, continuing`;r?r.warn(o,{error:t}):console.warn(o,t)}}function an(e,n){const t=n.get,o=n.set,s=n.delete;n.get=be(t,"StoreGet",e.hooks,e.logger),n.set=be(o,"StoreSet",e.hooks,e.logger),n.delete=be(s,"StoreDelete",e.hooks,e.logger)}async function cn(e){var n,t;const o=g({globalsStatic:{},sessionStatic:{},run:!0,queueMax:1e3},e,{merge:!1,extend:!1}),s={level:null==(n=e.logger)?void 0:n.level,handler:null==(t=e.logger)?void 0:t.handler},r=p(s),i={...o.globalsStatic,...e.globals},a={allowed:!1,config:o,consent:e.consent||{},custom:e.custom||{},destinations:{},transformers:{},stores:{},globals:i,hooks:e.hooks||{},logger:r,on:{},queue:[],round:0,session:void 0,status:{startedAt:Date.now(),in:0,out:0,failed:0,sources:{},destinations:{},dropped:{}},timing:Date.now(),user:e.user||{},sources:{},pending:{destinations:{}},push:void 0,command:void 0};var c,l;a.push=function(e,n){return he(async(t,o={})=>await pe(async()=>{var s;const r=Date.now(),{id:i,ingest:a,respond:c,mapping:l,preChain:u,include:d,exclude:f}=o;let g=c,p=t;const h=d||f?function(e,n,t){let o=e;return n&&(o=Object.fromEntries(Object.entries(o).filter(([e])=>n.includes(e)))),t&&(o=Object.fromEntries(Object.entries(o).filter(([e])=>!t.includes(e)))),o}(e.destinations,d,f):void 0,v=null!=a?a:ue(i||"unknown");if(l){const n=await ge(p,l,e);if(n.ignore)return Xe({ok:!0});if(l.consent&&!fe(l.consent,e.consent,n.event.consent))return Xe({ok:!0});p=n.event}if((null==u?void 0:u.length)&&e.transformers&&Object.keys(e.transformers).length>0){const t=await Ae(e,e.transformers,u,p,v,g,i?`source.${i}.next`:void 0);if(null===t.event)return Xe({ok:!0});if(t.stopped)return t.respond&&(g=t.respond),Xe({ok:!0});if(t.respond&&(g=t.respond),Array.isArray(t.event)){const o=await Promise.all(t.event.map(async t=>{const o=n(t),s=on(e,o);return Ve(e,s,{id:i,ingest:v,respond:g},h)}));if(i){e.status.sources[i]||(e.status.sources[i]={count:0,duration:0});const n=e.status.sources[i];n.count+=t.event.length,n.lastAt=Date.now(),n.duration+=Date.now()-r}return null!=(s=o[0])?s:Xe({ok:!0})}p=t.event}const m=n(p),y=on(e,m),b=await Ve(e,y,{id:i,ingest:v,respond:g},h);if(i){e.status.sources[i]||(e.status.sources[i]={count:0,duration:0});const n=e.status.sources[i];n.count++,n.lastAt=Date.now(),n.duration+=Date.now()-r}return b},n=>{if(n instanceof de)throw n;return e.status.failed++,e.logger.error("push failed",{event:t,ingest:o.ingest,error:n}),Xe({ok:!1})})(),"Push",e.hooks,e.logger)}(a,e=>({timing:Math.round((Date.now()-a.timing)/10)/100,source:{type:"collector",schema:"4",version:"4.1.0"},...e})),a.command=(l=tn,me(async(e,n,t)=>await ye(async()=>await l(c,e,n,t),t=>{if(t instanceof ve)throw t;return c.status.failed++,c.logger.error("command failed",{command:e,data:n,error:t}),Xe({ok:!1})})(),"Command",(c=a).hooks,c.logger));const u=e.stores||{};return a.stores=await async function(e,n={}){var t;const o={};for(const[t,s]of Object.entries(n)){const{code:n,config:r={},env:i={}}=s,a=e.logger.scope("store").scope(t),c={collector:e,logger:a,id:t,config:r,env:i},l=await n(c);o[t]=l}const s=n,r=function(e){const n={};for(const t of Object.keys(e))n[t]="WHITE";const t=[],o=[];function s(r){var i;const a=n[r];if("BLACK"===a)return;if("GRAY"===a){const e=o.indexOf(r),n=o.slice(-1===e?0:e).concat(r).join(" -> ");throw new Error(`Cycle in cache.store chain: ${n}`)}n[r]="GRAY",o.push(r);const c=null==(i=e[r].cache)?void 0:i.store;if(void 0!==c){if(!(c in e))throw new Error(`Store "${r}" cache.store references "${c}", which is not declared in flow.stores`);s(c)}o.pop(),n[r]="BLACK",t.push(r)}for(const t of Object.keys(e))"WHITE"===n[t]&&s(t);return t}(s);for(const n of r){const r=s[n].cache;if(!r)continue;let i,a;void 0!==r.store?(i=o[r.store],a=r.store):(o.__cache||(o.__cache=sn()),i=o.__cache,a="__cache");const c=null!=(t=r.namespace)?t:n;e.logger.scope("store-cache").scope(n).info(`store "${n}" caches with namespace "${c}:" via ${a}`),o[n]=rn(o[n],{storeId:n,cacheConfig:r,cacheStore:i,namespace:c,logger:e.logger.scope("store-cache").scope(n)})}for(const[n,t]of Object.entries(o))"__cache"!==n&&an(e,t);return o}(a,u),function(e,n,t){const o=new Map;for(const[t,s]of Object.entries(e))n[t]&&o.set(s,n[t]);if(0!==o.size)for(const e of[t.transformers,t.destinations,t.sources])if(e)for(const n of Object.values(e))s(n.env);function s(e){if(e)for(const[n,t]of Object.entries(e))if("object"==typeof t&&null!==t){const s=o.get(t);s&&(e[n]=s)}}}(u,a.stores,e),a.stores.__cache||(a.stores.__cache=sn()),a.destinations=await async function(e,n={}){var t,o;const s={};for(const[r,i]of Object.entries(n))(null==(o=null==(t=i.config)?void 0:t.require)?void 0:o.length)?e.pending.destinations[r]=i:s[r]=Ze(i);return s}(a,e.destinations||{}),a.transformers=await async function(e,n={}){var t,o,s,r;const i={};for(const[a,c]of Object.entries(n)){const{code:n,env:l={}}=c,u=oe(c,"Transformer");if(!u.ok){e.logger.warn(`Transformer ${a} invalid (${u.code}): ${u.reason}. Skipping.`);continue}const{config:d}=xe(c,"before"),{config:f}=xe({...c,config:d},"next"),g=Object.keys(l).length>0?{...f,env:l}:f,{cache:p}=c,h=p?{...g,cache:p}:g,v=e.logger.scope("transformer").scope(a),m={collector:e,logger:v,id:a,ingest:L(a),config:h,env:l},y=null!=n?n:e=>{const n=c.mapping;if(n){const t=[];if(void 0!==n.data&&t.push("data"),n.mapping)for(const[e,o]of Object.entries(n.mapping))if("object"==typeof o&&null!==o)for(const[n,s]of Object.entries(o)){if("object"!=typeof s||null===s)continue;const o=s;void 0!==o.data&&t.push(`mapping[${e}][${n}].data`),void 0!==o.silent&&t.push(`mapping[${e}][${n}].silent`)}return t.length>0&&e.collector.logger.warn(`Transformer ${a}: \`${t.join(", ")}\` ignored at transformer position (only event-mutating fields apply).`),{type:"pass",config:e.config,push:async t=>{const o=await se(t,n,e.collector);return!o.ignore&&{event:o.event}}}}return{type:"pass",config:e.config,push:e=>({event:e})}},b=await y(m);void 0!==c.before&&void 0===(null==(t=b.config)?void 0:t.before)&&(b.config={...null!=(o=b.config)?o:{},before:c.before}),void 0!==c.next&&void 0===(null==(s=b.config)?void 0:s.next)&&(b.config={...null!=(r=b.config)?r:{},next:c.next}),i[a]=b}return i}(a,e.transformers||{}),a}async function ln(e){e=e||{};const n=await cn(e),t=(o=n,{type:"elb",config:{},push:async(e,n,t,s,r)=>{if("string"==typeof e&&e.startsWith("walker ")){const t=e.replace("walker ","");return o.command(t,n)}let i;if("string"==typeof e)i={name:e},n&&"object"==typeof n&&!Array.isArray(n)&&(i.data=n);else{if(!e||"object"!=typeof e)return Xe({ok:!1});i=e,n&&"object"==typeof n&&!Array.isArray(n)&&(i.data={...i.data||{},...n})}return t&&"object"==typeof t&&(i.context=t),s&&Array.isArray(s)&&(i.nested=s),r&&"object"==typeof r&&(i.custom=r),o.push(i)}});var o;n.sources.elb=t,await async function(e,n={}){var t;const o={};for(const[s,r]of Object.entries(n)){const n=await Pe(e,s,r);if(!n)continue;const i=null==(t=r.config)?void 0:t.require;n.config={...n.config,init:!1,...i?{require:[...i]}:{}},o[s]=n}Object.assign(e.sources,o);for(const n of Object.keys(o)){const t=e.sources[n];let o=!1;t.init&&await F(t.init.bind(t),t=>{if(t instanceof R)throw t;o=!0,e.status.failed++,e.logger.scope("source").error("source init failed",{sourceId:n,error:t})})(),o||(t.config.init=!0,Ee(t)&&await _e(e,t,n))}return o}(n,e.sources||{});const{consent:s,user:r,globals:i,custom:a}=e;s&&await n.command("consent",s),r&&await n.command("user",r),i&&Object.assign(n.globals,i),a&&Object.assign(n.custom,a),n.config.run&&await n.command("run");let c=t.push;const l=Object.values(n.sources).filter(e=>"elb"!==e.type),u=l.find(e=>e.config.primary);return u?c=u.push:l.length>0&&(c=l[0].push),{collector:n,elb:c}}var un=async e=>{let n;return{get flow(){return n},trigger:(t,o)=>async t=>{var s,r,i,a,c,l,u,d,f;const g=o||{};if(g.url){const e=new URL(g.url);window.history.replaceState({},"",e.pathname+e.search)}if(g.referrer&&Object.defineProperty(document,"referrer",{value:g.referrer,configurable:!0}),g.sessionData){const e=g.sessionKey||"elbSessionId";localStorage.setItem(e,JSON.stringify(g.sessionData))}if(g.deviceId){const e=g.deviceKey||"elbDeviceId";localStorage.setItem(e,g.deviceId)}if(!n){const t=await ln({...e,run:null==(s=e.run)||s});n={collector:t.collector,elb:t.elb};const o=g.sessionKey||(null==(c=null==(a=null==(i=null==(r=e.sources)?void 0:r.session)?void 0:i.config)?void 0:a.settings)?void 0:c.sessionKey)||"elbSessionId",p=g.deviceKey||(null==(f=null==(d=null==(u=null==(l=e.sources)?void 0:l.session)?void 0:u.config)?void 0:d.settings)?void 0:f.deviceKey)||"elbDeviceId";localStorage.removeItem(o),localStorage.removeItem(p),g.sessionData&&localStorage.setItem(o,JSON.stringify(g.sessionData)),g.deviceId&&localStorage.setItem(p,g.deviceId),e.consent&&await n.collector.command("consent",e.consent)}}}},dn=(e,n)=>{if(!e||"object"!=typeof e)return;const t=e,o=n.localStorage;if(t.sessionData&&"object"==typeof t.sessionData){const e="string"==typeof t.sessionKey?t.sessionKey:"elbSessionId";o.setItem(e,JSON.stringify(t.sessionData))}if("string"==typeof t.deviceId){const e="string"==typeof t.deviceKey?t.deviceKey:"elbDeviceId";o.setItem(e,t.deviceId)}};export{c as examples,t as schemas};//# sourceMappingURL=dev.mjs.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$meta": {
3
3
  "package": "@walkeros/web-source-session",
4
- "version": "4.1.0-next-1779362268386",
4
+ "version": "4.1.0",
5
5
  "type": "source",
6
6
  "platform": [
7
7
  "web"
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@walkeros/web-source-session",
3
3
  "description": "Session source for walkerOS",
4
- "version": "4.1.0-next-1779362268386",
4
+ "version": "4.1.0",
5
5
  "license": "MIT",
6
6
  "main": "./dist/index.js",
7
7
  "module": "./dist/index.mjs",
@@ -33,11 +33,11 @@
33
33
  "update": "npx npm-check-updates -u && npm update"
34
34
  },
35
35
  "dependencies": {
36
- "@walkeros/core": "4.1.0-next-1779362268386",
37
- "@walkeros/web-core": "4.1.0-next-1779362268386"
36
+ "@walkeros/core": "4.1.0",
37
+ "@walkeros/web-core": "4.1.0"
38
38
  },
39
39
  "devDependencies": {
40
- "@walkeros/collector": "4.1.0-next-1779362268386"
40
+ "@walkeros/collector": "4.1.0"
41
41
  },
42
42
  "repository": {
43
43
  "url": "git+https://github.com/elbwalker/walkerOS.git",