@walkeros/web-source-session 4.0.1-next-1778230564486 → 4.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/dev.js +1 -1
- package/dist/dev.mjs +1 -1
- package/dist/walkerOS.json +1 -1
- package/package.json +5 -5
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:()=>l,settings:()=>d});var c=require("@walkeros/core/dev"),u=require("@walkeros/core/dev"),l=u.z.object({storage:u.z.boolean().default(!1).describe("Enable persistent storage for session/device IDs").optional(),consent:u.z.union([u.z.string(),u.z.array(u.z.string())]).describe("Consent key(s) required to enable storage mode").optional(),length:u.z.number().default(30).describe("Session timeout in minutes").optional(),pulse:u.z.boolean().default(!1).describe("Keep session alive on each event").optional(),sessionKey:u.z.string().default("elbSessionId").describe("Storage key for session ID").optional(),sessionStorage:u.z.enum(["local","session"]).default("local").describe("Storage type for session").optional(),deviceKey:u.z.string().default("elbDeviceId").describe("Storage key for device ID").optional(),deviceStorage:u.z.enum(["local","session"]).default("local").describe("Storage type for device").optional(),deviceAge:u.z.number().default(30).describe("Device ID age in days").optional(),cb:u.z.any().describe("Custom session callback function or false to disable").optional(),clickIds:u.z.array(u.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)(l),f={};r(f,{createTrigger:()=>ne,step:()=>g,trigger:()=>oe});var g={};r(g,{newMarketingSession:()=>p,returningVisitor:()=>v});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}}]]},v={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}}]]},h=require("@walkeros/core"),y=require("@walkeros/core"),m=require("@walkeros/core"),b=require("@walkeros/core"),w=require("@walkeros/core"),k=require("@walkeros/core"),O=require("@walkeros/core"),C=require("@walkeros/core"),x=require("@walkeros/core"),S=require("@walkeros/core"),j=require("@walkeros/core"),q=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 I(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;e&&!(0,O.isRouteArray)(e)?n[o]={next:e}:n[o]={}}return n}function N(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,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,O.createIngest)(n),config:t.config,env:$(t.config.env)};s.debug("init");const i=await(0,O.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 E(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:{...$(t.config.env),...r?{respond:r}:{}}};a.debug("push",{event:o.name});const u=await(0,O.useHooks)(t.push,"TransformerPush",e.hooks,e.logger)(o,c);return a.debug("push done"),u}async function R(e,t,n,o,s,r,i){var a,c,u,l,d,f;i&&(null==s?void 0:s._meta)&&(s._meta.chainPath=i);let g=o,p=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:p};if(s&&s._meta&&(s._meta.hops++,s._meta.path.push(o)),!await(0,O.tryCatchAsync)(P)(e,r,o))return e.logger.error(`Transformer init failed: ${o}`),{event:null,respond:p};if(i&&void 0!==(null==(c=null==(a=r.config)?void 0:a.chainMocks)?void 0:c[i])){const t=r.config.chainMocks[i];e.logger.scope(`transformer:${r.type||"unknown"}`).debug("chainMock",{chain:i}),g=t;continue}if(void 0!==(null==(u=r.config)?void 0:u.mock)){e.logger.scope(`transformer:${r.type||"unknown"}`).debug("mock"),g=r.config.mock;continue}if(null==(l=r.config)?void 0:l.disabled)continue;const v=null==(d=r.config)?void 0:d.cache,h=v?(0,O.compileCache)(v):void 0,y=h?I(h,e):void 0;let m;if(h&&y){const e=(0,O.buildCacheContext)(s,g),t=(0,O.checkCache)(h,y,e,`t:${o}`);if("HIT"===(null==t?void 0:t.status)&&t.value){if(g=t.value,h.full)return{event:g,respond:p};continue}"MISS"===(null==t?void 0:t.status)&&(m={key:t.key,ttl:t.rule.ttl})}const b=r.config.before;if(b){const n=_("string"==typeof b||Array.isArray(b)&&!(0,O.isRouteArray)(b)?b:(0,O.resolveNext)((0,O.compileNext)(b),(0,O.buildCacheContext)(s,g))||void 0,D(t));if(n.length>0){const o=await R(e,t,n,g,s,p,i);if(null===o.event)return{event:null,respond:null!=(f=o.respond)?f:p};o.respond&&(p=o.respond),g=Array.isArray(o.event)?o.event[0]:o.event}}const w=await(0,O.tryCatchAsync)(E,t=>(e.logger.scope(`transformer:${r.type||"unknown"}`).error("Push failed",{error:t}),!1))(e,r,o,g,s,p);if(!1===w)return{event:null,respond:p};if(Array.isArray(w)){const r=n.slice(n.indexOf(o)+1),a=await Promise.all(w.map(async n=>{const o=n.event||g,a=s?{...s,_meta:{...s._meta,path:[...s._meta.path]}}:(0,O.createIngest)("unknown");if(n.next){let s=n.next;if((0,O.isRouteArray)(n.next)){const e=(0,O.compileNext)(n.next);s=(0,O.resolveNext)(e,(0,O.buildCacheContext)(a,o))}if(s){const n=_(s,D(t));if(n.length>0)return R(e,t,n,o,a,p,i)}return{event:o,respond:p}}return r.length>0?R(e,t,r,o,a,p,i):{event:o,respond:p}}));let c=p;const u=[];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)?u.push(...t.event):u.push(t.event)}else u.push(e);return 0===u.length?{event:null,respond:c}:1===u.length?{event:u[0],respond:c}:{event:u,respond:c}}if(w&&"object"==typeof w){const{event:n,respond:o,next:r}=w;if(o&&(p=o),r){let o=r;if((0,O.isRouteArray)(r)){const e=(0,O.compileNext)(r);if(o=(0,O.resolveNext)(e,(0,O.buildCacheContext)(s,g)),!o){n&&(g=n);continue}}const a=_(o,D(t));return a.length>0?R(e,t,a,n||g,s,p,i):(e.logger.warn(`Branch target not found: ${JSON.stringify(r)}`),{event:null,respond:p})}n&&(g=n)}if(m&&y&&(0,O.storeCache)(y,m.key,g,m.ttl),(!w||"object"==typeof w&&!w.next)&&r.config.next&&(0,O.isRouteArray)(r.config.next)){const n=r.config.next,o=(0,O.compileNext)(n),a=(0,O.resolveNext)(o,(0,O.buildCacheContext)(s,g));if(a){const n=_(a,D(t));if(n.length>0)return R(e,t,n,g,s,p,i)}return{event:g,respond:p}}}return{event:g,respond:p}}function $(e){return e&&(0,O.isObject)(e)?e:{}}async function M(e,t){var n;if(!t.on||!(null==(n=t.queueOn)?void 0:n.length))return;const o=t.queueOn;t.queueOn=[];for(const{type:e,data:n}of o)await(0,k.tryCatchAsync)(t.on)(e,n)}function z(e){var t;return Boolean(e.config.init)&&!(null==(t=e.config.require)?void 0:t.length)}async function H(e,t,n){var o;const{code:s,config:r={},env:i={},primary:a,next:c,before:u,cache:l}=n;let d,f=(0,k.createIngest)(t);const g=l?(0,k.compileCache)({...l,full:null==(o=l.full)||o}):void 0,p=(0,k.compileNext)(c),v=Array.isArray(c)&&(0,k.isRouteArray)(c)||!p?void 0:_((0,k.resolveNext)(p),D(e.transformers)),h=(0,k.compileNext)(u),y=Array.isArray(u)&&(0,k.isRouteArray)(u)||!h?void 0:_((0,k.resolveNext)(h),D(e.transformers)),m=e.logger.scope("source").scope(t),b={push:async(n,o={})=>{let s,i=n;const a=null!=y?y:h?_((0,k.resolveNext)(h,(0,k.buildCacheContext)(f)),D(e.transformers)):[];if(a.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const n=await R(e,e.transformers,a,i,f,d,`source.${t}.before`);if(null===n.event)return{ok:!0};n.respond&&(d=n.respond),i=Array.isArray(n.event)?n.event[0]:n.event}if(g){const n=I(g,e);if(n){const o=(0,k.buildCacheContext)(f),r=(0,k.checkCache)(g,n,o,`s:${t}`);if(r){if("HIT"===r.status&&void 0!==r.value&&g.full){let t=r.value;return r.rule.update&&(t=await(0,k.applyUpdate)(t,r.rule.update,{...o,cache:{status:"HIT"}},e)),null==d||d(t),{ok:!0}}if("MISS"===r.status&&g.full&&d){const t=d,i=r.rule.update,a={...o,cache:{status:"MISS"}},c=r.key,u=r.rule.ttl;d=o=>{(0,k.storeCache)(n,c,o,u),i?s=(async()=>{const n=await(0,k.applyUpdate)(o,i,a,e);t(n)})():t(o)}}"MISS"!==r.status||g.full||(0,k.storeCache)(n,r.key,!0,r.rule.ttl)}}}const c=null!=v?v:p?_((0,k.resolveNext)(p,(0,k.buildCacheContext)(f)),D(e.transformers)):[],u=await e.push(i,{...o,id:t,ingest:f,respond:d,mapping:r,preChain:c});return s&&await s,u},command:e.command,sources:e.sources,elb:e.sources.elb.push,logger:m,...i},w={collector:e,logger:m,id:t,config:r,env:b,setIngest:async n=>{if(!r.ingest)return void(f=(0,k.createIngest)(t));const o=await(0,k.getMappingValue)(n,r.ingest,{collector:e}),s=(0,k.createIngest)(t);f={...s,...o,_meta:s._meta}},setRespond:e=>{d=e}},O=await(0,k.tryCatchAsync)(s)(w);if(!O)return;const C=O.type||"unknown",x=e.logger.scope(C).scope(t);return b.logger=x,a&&(O.config={...O.config,primary:a}),O}function K(e,t){return{collector:e,logger:e.logger.scope("on").scope(String(t))}}function T(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:Q(t.env,t.config.env)};(0,w.tryCatch)(t.on)(o,a)}function U(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=K(e,A.Consent);t.forEach(e=>{Object.keys(o).filter(t=>t in e).forEach(t=>{(0,w.tryCatch)(e[t])(o,s)})})}(e,n,o);break;case A.Ready:!function(e,t){if(!e.allowed)return;const n=K(e,A.Ready);t.forEach(e=>{(0,w.tryCatch)(e)(void 0,n)})}(e,n);break;case A.Run:!function(e,t){if(!e.allowed)return;const n=K(e,A.Run);t.forEach(e=>{(0,w.tryCatch)(e)(void 0,n)})}(e,n);break;case A.Session:!function(e,t){if(!e.session)return;const n=K(e,A.Session);t.forEach(t=>{(0,w.tryCatch)(t)(e.session,n)})}(e,n);break;default:{const o=K(e,t);n.forEach(e=>{"function"==typeof e&&(0,w.tryCatch)(e)(s,o)});break}}}function G(e,t,n,o){if(!e)return[];if(t){const e=(0,m.resolveNext)(t,(0,m.buildCacheContext)(o));return e?_(e,D(n)):[]}return _(e,D(n))}async function B(e,t,n){const{code:o,config:s={},env:r={},before:i,next:a,cache:c}=t;if(!(0,m.isFunction)(o.push))return L({ok:!1,failed:{invalid:{type:"invalid",error:"Destination code must have a push method"}}});const u=n||s||{init:!1};let l=i?{...u,before:i}:{...u};a&&(l={...l,next:a}),c&&(l={...l,cache:c});const d={...o,config:l,env:Q(o.env,r)};let f=d.config.id;if(!f)do{f=(0,m.getId)(5,"abcdefghijklmnopqrstuvwxyz")}while(e.destinations[f]);return e.destinations[f]=d,!1!==d.config.queue&&(d.queuePush=[...e.queue]),F(e,void 0,{},{[f]:d})}async function F(e,t,n={},o){const{allowed:s,consent:r,globals:i,user:a}=e;if(!s)return L({ok:!1});t&&(e.queue.push(t),e.status.in++),o||(o=e.destinations);const c=await Promise.all(Object.entries(o||{}).map(async([o,s])=>{var c,u,l;if(s.config.disabled)return{id:o,destination:s,skipped:!0};let d=(s.queuePush||[]).map(e=>({...e,consent:r}));s.queuePush=[],t&&d.push((0,m.clone)(t));const f=n.ingest?{...n.ingest,_meta:{...n.ingest._meta,path:[...n.ingest._meta.path]}}:(0,m.createIngest)("unknown");if(!d.length&&!(null==(c=s.queueOn)?void 0:c.length))return{id:o,destination:s,skipped:!0};if(!d.length&&(null==(u=s.queueOn)?void 0:u.length)){let t=!1;try{t=await J(e,s,o)}catch(t){const n=s.type||"unknown";e.logger.scope(n).error("Destination init threw",{error:t instanceof Error?t.message:String(t)})}return{id:o,destination:s,skipped:!t}}const g=[],p=d.filter(e=>{const t=(0,m.getGrantedConsent)(s.config.consent,r,e.consent);return!t||(e.consent=t,g.push(e),!1)});if(s.queuePush.push(...p),!g.length)return{id:o,destination:s,queue:d};let v,h,y=!1;try{y=await J(e,s,o)}catch(t){const n=s.type||"unknown";e.logger.scope(n).error("Destination init threw",{error:t instanceof Error?t.message:String(t)})}if(!y)return{id:o,destination:s,queue:d};s.dlq||(s.dlq=[]);const b=s.config.before,w=G(b,b&&(0,m.isRouteArray)(b)?(0,m.compileNext)(b):void 0,e.transformers,f),k=s.config.next,O=k&&(0,m.isRouteArray)(k)?(0,m.compileNext)(k):void 0,C=null==(l=s.config)?void 0:l.cache,x=C?(0,m.compileCache)(C):void 0,S=x?I(x,e):void 0;let j=0;return await Promise.all(g.map(async t=>{let r;if(t.globals=(0,m.assign)(i,t.globals),t.user=(0,m.assign)(a,t.user),(null==x?void 0:x.full)&&S){const e=(0,m.buildCacheContext)(f,t),n=(0,m.checkCache)(x,S,e,`d:${o}`);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 c=t,u=n.respond;if(w.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const s=await R(e,e.transformers,w,t,f,n.respond,`destination.${o}.before`);if(null===s.event)return t;s.respond&&(u=s.respond),c=Array.isArray(s.event)?s.event[0]:s.event}if(x&&!x.full&&S){const e=(0,m.buildCacheContext)(f,c),n=(0,m.checkCache)(x,S,e,`d:${o}`);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 l=Date.now();let d=!1;const g=await(0,m.tryCatchAsync)(V,t=>{const n=s.type||"unknown";e.logger.scope(n).error("Push failed",{error:t,event:c.name}),v=t,d=!0,s.dlq.push([c,t])})(e,s,o,c,f,u);if(j+=Date.now()-l,r&&S&&void 0===s.config.mock&&(0,m.storeCache)(S,r.key,null==g||g,r.ttl),void 0!==g&&(h=g),!d&&k){void 0!==g&&(f._response=g);const t=G(k,O,e.transformers,f);if(t.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const n=await R(e,e.transformers,t,c,f,u,`destination.${o}.next`);n.respond&&(u=n.respond)}}return t})),{id:o,destination:s,error:v,response:h,totalDuration:j}})),u={},l={},d={};for(const t of c){if(t.skipped)continue;const n={type:t.destination.type||"unknown",data:t.response};e.status.destinations[t.id]||(e.status.destinations[t.id]={count:0,failed:0,duration:0});const o=e.status.destinations[t.id],s=Date.now();t.error?(n.error=t.error,d[t.id]=n,o.failed++,o.lastAt=s,o.duration+=t.totalDuration||0,e.status.failed++):t.queue&&t.queue.length?l[t.id]=n:(u[t.id]=n,o.count++,o.lastAt=s,o.duration+=t.totalDuration||0,e.status.out++)}return L({event:t,...Object.keys(u).length&&{done:u},...Object.keys(l).length&&{queued:l},...Object.keys(d).length&&{failed:d}})}async function J(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:Q(t.env,t.config.env)};r.debug("init");const a=await(0,m.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)T(e,t,n,s,r)}r.debug("init done")}return!0}async function V(e,t,n,o,s,r){const{config:i}=t,a=await(0,m.processEventMapping)(o,i,e);if(a.ignore)return!1;const c=t.type||"unknown",u=e.logger.scope(c),l={collector:e,logger:u,id:n,config:i,data:a.data,rule:a.mapping,ingest:s,env:{...Q(t.env,i.env),...r?{respond:r}:{}}};if(void 0!==i.mock)return u.debug("mock",{event:a.event.name}),i.mock;const d=a.mapping,f=a.mappingKey||"* *";if(!(null==d?void 0:d.batch)||!t.pushBatch||void 0!==i.mock){u.debug("push",{event:a.event.name});const n=await(0,m.useHooks)(t.push,"DestinationPush",e.hooks,e.logger)(a.event,l);return u.debug("push done"),n}{if(t.batches=t.batches||{},!t.batches[f]){const o={key:f,events:[],data:[]};t.batches[f]={batched:o,batchFn:(0,m.debounce)(()=>{const o=t.batches[f].batched,a={collector:e,logger:u,id:n,config:i,data:void 0,rule:d,ingest:s,env:{...Q(t.env,i.env),...r?{respond:r}:{}}};u.debug("push batch",{events:o.events.length}),(0,m.useHooks)(t.pushBatch,"DestinationPushBatch",e.hooks,e.logger)(o,a),u.debug("push batch done"),o.events=[],o.data=[]},d.batch)}}const o=t.batches[f];o.batched.events.push(a.event),(0,m.isDefined)(a.data)&&o.batched.data.push(a.data),o.batchFn()}return!0}function L(e){return{ok:!(null==e?void 0:e.failed),...e}}function W(e){const{code:t,config:n={},env:o={},cache:s}=e,{config:r}=N(e,"before"),{config:i}=N({...e,config:r},"next"),a={...t.config,...n,...i};s&&(a.cache=s);const c=Q(t.env,o);return{...t,config:a,env:c}}function Q(e,t){return e||t?t?e&&(0,m.isObject)(e)&&(0,m.isObject)(t)?{...e,...t}:t:e:{}}async function X(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 Y(e,t,n,o){let s,r,i=!1;switch(t){case A.Config:(0,x.isObject)(n)&&((0,C.assign)(e.config,n,{shallow:!1}),r=n,i=!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,h.assign)(e.consent,n),{update:n}}(e,n);r=t,i=!0}break;case A.Custom:(0,x.isObject)(n)&&(e.custom=(0,C.assign)(e.custom,n),r=n,i=!0);break;case A.Destination:(0,x.isObject)(n)&&("code"in n&&(0,x.isObject)(n.code)?s=await B(e,n,o):(0,C.isFunction)(n.push)&&(s=await B(e,{code:n},o)));break;case A.Globals:(0,x.isObject)(n)&&(e.globals=(0,C.assign)(e.globals,n),r=n,i=!0);break;case A.On:(0,C.isString)(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,U(e,t,r)}(e,n,o);break;case A.Ready:i=!0;break;case A.Run:s=await async function(e,t){return e.allowed=!0,e.timing=Date.now(),t&&(t.consent&&(e.consent=(0,C.assign)(e.consent,t.consent)),t.user&&(e.user=(0,C.assign)(e.user,t.user)),t.globals&&(e.globals=(0,C.assign)(e.config.globalsStatic||{},t.globals)),t.custom&&(e.custom=(0,C.assign)(e.custom,t.custom))),Object.values(e.destinations).forEach(e=>{e.queuePush=[]}),e.queue=[],e.round++,await F(e)}(e,n),i=!0;break;case A.Session:i=!0;break;case A.Shutdown:await async function(e){const t=e.logger;await X(e.sources,"source",t),await X(e.destinations,"destination",t),await X(e.transformers,"transformer",t),await X(e.stores,"store",t)}(e);break;case A.User:(0,x.isObject)(n)&&((0,C.assign)(e.user,n,{shallow:!1}),r=n,i=!0)}return i&&(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 of Object.values(e.sources)){if(null==(s=n.config.require)?void 0:s.length){const e=n.config.require.indexOf(t);-1!==e&&n.config.require.splice(e,1)}n.on&&(z(n)?!1===await(0,w.tryCatchAsync)(n.on)(t,i)&&(c=!0):(n.queueOn=n.queueOn||[],n.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});T(e,o,n,t,i)}});for(const t of Object.values(e.sources))z(t)&&(null==(r=t.queueOn)?void 0:r.length)&&await M(0,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=W(s);!1!==a.config.queue&&(a.queuePush=[...e.queue]),e.destinations[o]=a}}(e,t),U(e,t,a,o),!c}(e,t,void 0,r),s=await F(e)),s||L({ok:!0})}function Z(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:u={},user:l=e.user,nested:d=[],consent:f=e.consent,id:g=(0,C.getSpanId)(),trigger:p="",entity:v=n,action:h=o,timing:y=0,source:m={type:"collector",schema:"4"}}=t;return{name:r,data:i,context:a,globals:c,custom:u,user:l,nested:d,consent:f,id:g,trigger:p,entity:v,action:h,timestamp:s,timing:y,source:m}}async function ee(e){var t,n;const o=(0,y.assign)({globalsStatic:{},sessionStatic:{},run:!0},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,y.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:{}},timing:Date.now(),user:e.user||{},sources:{},pending:{destinations:{}},push:void 0,command:void 0};var c,u;a.push=function(e,t){return(0,S.useHooks)(async(n,o={})=>await(0,S.tryCatchAsync)(async()=>{var s;const r=Date.now(),{id:i,ingest:a,respond:c,mapping:u,preChain:l,include:d,exclude:f}=o;let g=c,p=n;const v=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,h=null!=a?a:(0,S.createIngest)(i||"unknown");if(u){const t=await(0,S.processEventMapping)(p,u,e);if(t.ignore)return L({ok:!0});if(u.consent&&!(0,S.getGrantedConsent)(u.consent,e.consent,t.event.consent))return L({ok:!0});p=t.event}if((null==l?void 0:l.length)&&e.transformers&&Object.keys(e.transformers).length>0){const n=await R(e,e.transformers,l,p,h,g,i?`source.${i}.next`:void 0);if(null===n.event)return L({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=Z(e,o);return F(e,s,{id:i,ingest:h,respond:g},v)}));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:L({ok:!0})}p=n.event}const y=t(p),m=Z(e,y),b=await F(e,m,{id:i,ingest:h,respond:g},v);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},()=>L({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.0.1-next-1778230564486"},...e})),a.command=(c=a,u=Y,(0,j.useHooks)(async(e,t,n)=>await(0,j.tryCatchAsync)(async()=>await u(c,e,t,n),()=>L({ok:!1}))(),"Command",c.hooks,c.logger));const l=e.stores||{};if(a.stores=await async function(e,t={}){const n={};for(const[o,s]of Object.entries(t)){const{code:t,config:r={},env:i={}}=s,a=e.logger.scope("store").scope(o),c={collector:e,logger:a,id:o,config:r,env:i},u=await t(c),l=u.get,d=u.set,f=u.delete;u.get=(0,q.useHooks)(l,"StoreGet",e.hooks,e.logger),u.set=(0,q.useHooks)(d,"StoreSet",e.hooks,e.logger),u.delete=(0,q.useHooks)(f,"StoreDelete",e.hooks,e.logger),n[o]=u}return n}(a,l),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)}}}(l,a.stores,e),!a.stores.__cache){const e=new Map;a.stores.__cache={type:"memory",config:{},get:t=>{const n=e.get(t);if(n){if(!(n.expires&&Date.now()>n.expires))return n.value;e.delete(t)}},set:(t,n,o)=>{e.set(t,{value:n,expires:o?Date.now()+o:void 0})},delete:t=>{e.delete(t)}}}return 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]=W(i);return s}(a,e.destinations||{}),a.transformers=await async function(e,t={}){const n={};for(const[o,s]of Object.entries(t)){const{code:t,env:r={}}=s,{config:i}=N(s,"before"),{config:a}=N({...s,config:i},"next"),c=Object.keys(r).length>0?{...a,env:r}:a,{cache:u}=s,l=u?{...c,cache:u}:c,d=e.logger.scope("transformer").scope(o),f={collector:e,logger:d,id:o,ingest:(0,O.createIngest)(o),config:l,env:r},g=await t(f);n[o]=g}return n}(a,e.transformers||{}),a}async function te(e){e=e||{};const t=await ee(e),n=(o=t,{type:"elb",config:{},push:async(e,t,n,s,r,i)=>{if("string"==typeof e&&e.startsWith("walker ")){const s=e.replace("walker ","");return o.command(s,t,n)}let a;if("string"==typeof e)a={name:e},t&&"object"==typeof t&&!Array.isArray(t)&&(a.data=t);else{if(!e||"object"!=typeof e)return L({ok:!1});a=e,t&&"object"==typeof t&&!Array.isArray(t)&&(a.data={...a.data||{},...t})}return s&&"object"==typeof s&&(a.context=s),r&&Array.isArray(r)&&(a.nested=r),i&&"object"==typeof i&&(a.custom=i),o.push(a)}});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 H(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];n.init&&await(0,k.tryCatchAsync)(n.init.bind(n))(),n.config.init=!0,z(n)&&await M(0,n)}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 u=Object.values(t.sources).filter(e=>"elb"!==e.type),l=u.find(e=>e.config.primary);return l?c=l.push:u.length>0&&(c=u[0].push),{collector:t,elb:c}}var ne=async e=>{let t;return{get flow(){return t},trigger:(n,o)=>async n=>{var s,r,i,a,c,u,l,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 te({...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==(l=null==(u=e.sources)?void 0:u.session)?void 0:l.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)}}}},oe=(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:()=>l,settings:()=>d});var c=require("@walkeros/core/dev"),u=require("@walkeros/core/dev"),l=u.z.object({storage:u.z.boolean().default(!1).describe("Enable persistent storage for session/device IDs").optional(),consent:u.z.union([u.z.string(),u.z.array(u.z.string())]).describe("Consent key(s) required to enable storage mode").optional(),length:u.z.number().default(30).describe("Session timeout in minutes").optional(),pulse:u.z.boolean().default(!1).describe("Keep session alive on each event").optional(),sessionKey:u.z.string().default("elbSessionId").describe("Storage key for session ID").optional(),sessionStorage:u.z.enum(["local","session"]).default("local").describe("Storage type for session").optional(),deviceKey:u.z.string().default("elbDeviceId").describe("Storage key for device ID").optional(),deviceStorage:u.z.enum(["local","session"]).default("local").describe("Storage type for device").optional(),deviceAge:u.z.number().default(30).describe("Device ID age in days").optional(),cb:u.z.any().describe("Custom session callback function or false to disable").optional(),clickIds:u.z.array(u.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)(l),f={};r(f,{createTrigger:()=>ne,step:()=>g,trigger:()=>oe});var g={};r(g,{newMarketingSession:()=>p,returningVisitor:()=>v});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}}]]},v={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}}]]},h=require("@walkeros/core"),y=require("@walkeros/core"),m=require("@walkeros/core"),b=require("@walkeros/core"),w=require("@walkeros/core"),k=require("@walkeros/core"),O=require("@walkeros/core"),C=require("@walkeros/core"),x=require("@walkeros/core"),S=require("@walkeros/core"),j=require("@walkeros/core"),q=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 I(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;e&&!(0,O.isRouteArray)(e)?n[o]={next:e}:n[o]={}}return n}function N(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,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,O.createIngest)(n),config:t.config,env:$(t.config.env)};s.debug("init");const i=await(0,O.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 E(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:{...$(t.config.env),...r?{respond:r}:{}}};a.debug("push",{event:o.name});const u=await(0,O.useHooks)(t.push,"TransformerPush",e.hooks,e.logger)(o,c);return a.debug("push done"),u}async function R(e,t,n,o,s,r,i){var a,c,u,l,d,f;i&&(null==s?void 0:s._meta)&&(s._meta.chainPath=i);let g=o,p=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:p};if(s&&s._meta&&(s._meta.hops++,s._meta.path.push(o)),!await(0,O.tryCatchAsync)(P)(e,r,o))return e.logger.error(`Transformer init failed: ${o}`),{event:null,respond:p};if(i&&void 0!==(null==(c=null==(a=r.config)?void 0:a.chainMocks)?void 0:c[i])){const t=r.config.chainMocks[i];e.logger.scope(`transformer:${r.type||"unknown"}`).debug("chainMock",{chain:i}),g=t;continue}if(void 0!==(null==(u=r.config)?void 0:u.mock)){e.logger.scope(`transformer:${r.type||"unknown"}`).debug("mock"),g=r.config.mock;continue}if(null==(l=r.config)?void 0:l.disabled)continue;const v=null==(d=r.config)?void 0:d.cache,h=v?(0,O.compileCache)(v):void 0,y=h?I(h,e):void 0;let m;if(h&&y){const e=(0,O.buildCacheContext)(s,g),t=(0,O.checkCache)(h,y,e,`t:${o}`);if("HIT"===(null==t?void 0:t.status)&&t.value){if(g=t.value,h.full)return{event:g,respond:p};continue}"MISS"===(null==t?void 0:t.status)&&(m={key:t.key,ttl:t.rule.ttl})}const b=r.config.before;if(b){const n=_("string"==typeof b||Array.isArray(b)&&!(0,O.isRouteArray)(b)?b:(0,O.resolveNext)((0,O.compileNext)(b),(0,O.buildCacheContext)(s,g))||void 0,D(t));if(n.length>0){const o=await R(e,t,n,g,s,p,i);if(null===o.event)return{event:null,respond:null!=(f=o.respond)?f:p};o.respond&&(p=o.respond),g=Array.isArray(o.event)?o.event[0]:o.event}}const w=await(0,O.tryCatchAsync)(E,t=>(e.logger.scope(`transformer:${r.type||"unknown"}`).error("Push failed",{error:t}),!1))(e,r,o,g,s,p);if(!1===w)return{event:null,respond:p};if(Array.isArray(w)){const r=n.slice(n.indexOf(o)+1),a=await Promise.all(w.map(async n=>{const o=n.event||g,a=s?{...s,_meta:{...s._meta,path:[...s._meta.path]}}:(0,O.createIngest)("unknown");if(n.next){let s=n.next;if((0,O.isRouteArray)(n.next)){const e=(0,O.compileNext)(n.next);s=(0,O.resolveNext)(e,(0,O.buildCacheContext)(a,o))}if(s){const n=_(s,D(t));if(n.length>0)return R(e,t,n,o,a,p,i)}return{event:o,respond:p}}return r.length>0?R(e,t,r,o,a,p,i):{event:o,respond:p}}));let c=p;const u=[];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)?u.push(...t.event):u.push(t.event)}else u.push(e);return 0===u.length?{event:null,respond:c}:1===u.length?{event:u[0],respond:c}:{event:u,respond:c}}if(w&&"object"==typeof w){const{event:n,respond:o,next:r}=w;if(o&&(p=o),r){let o=r;if((0,O.isRouteArray)(r)){const e=(0,O.compileNext)(r);if(o=(0,O.resolveNext)(e,(0,O.buildCacheContext)(s,g)),!o){n&&(g=n);continue}}const a=_(o,D(t));return a.length>0?R(e,t,a,n||g,s,p,i):(e.logger.warn(`Branch target not found: ${JSON.stringify(r)}`),{event:null,respond:p})}n&&(g=n)}if(m&&y&&(0,O.storeCache)(y,m.key,g,m.ttl),(!w||"object"==typeof w&&!w.next)&&r.config.next&&(0,O.isRouteArray)(r.config.next)){const n=r.config.next,o=(0,O.compileNext)(n),a=(0,O.resolveNext)(o,(0,O.buildCacheContext)(s,g));if(a){const n=_(a,D(t));if(n.length>0)return R(e,t,n,g,s,p,i)}return{event:g,respond:p}}}return{event:g,respond:p}}function $(e){return e&&(0,O.isObject)(e)?e:{}}async function M(e,t){var n;if(!t.on||!(null==(n=t.queueOn)?void 0:n.length))return;const o=t.queueOn;t.queueOn=[];for(const{type:e,data:n}of o)await(0,k.tryCatchAsync)(t.on)(e,n)}function z(e){var t;return Boolean(e.config.init)&&!(null==(t=e.config.require)?void 0:t.length)}async function H(e,t,n){var o;const{code:s,config:r={},env:i={},primary:a,next:c,before:u,cache:l}=n;let d,f=(0,k.createIngest)(t);const g=l?(0,k.compileCache)({...l,full:null==(o=l.full)||o}):void 0,p=(0,k.compileNext)(c),v=Array.isArray(c)&&(0,k.isRouteArray)(c)||!p?void 0:_((0,k.resolveNext)(p),D(e.transformers)),h=(0,k.compileNext)(u),y=Array.isArray(u)&&(0,k.isRouteArray)(u)||!h?void 0:_((0,k.resolveNext)(h),D(e.transformers)),m=e.logger.scope("source").scope(t),b={push:async(n,o={})=>{let s,i=n;const a=null!=y?y:h?_((0,k.resolveNext)(h,(0,k.buildCacheContext)(f)),D(e.transformers)):[];if(a.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const n=await R(e,e.transformers,a,i,f,d,`source.${t}.before`);if(null===n.event)return{ok:!0};n.respond&&(d=n.respond),i=Array.isArray(n.event)?n.event[0]:n.event}if(g){const n=I(g,e);if(n){const o=(0,k.buildCacheContext)(f),r=(0,k.checkCache)(g,n,o,`s:${t}`);if(r){if("HIT"===r.status&&void 0!==r.value&&g.full){let t=r.value;return r.rule.update&&(t=await(0,k.applyUpdate)(t,r.rule.update,{...o,cache:{status:"HIT"}},e)),null==d||d(t),{ok:!0}}if("MISS"===r.status&&g.full&&d){const t=d,i=r.rule.update,a={...o,cache:{status:"MISS"}},c=r.key,u=r.rule.ttl;d=o=>{(0,k.storeCache)(n,c,o,u),i?s=(async()=>{const n=await(0,k.applyUpdate)(o,i,a,e);t(n)})():t(o)}}"MISS"!==r.status||g.full||(0,k.storeCache)(n,r.key,!0,r.rule.ttl)}}}const c=null!=v?v:p?_((0,k.resolveNext)(p,(0,k.buildCacheContext)(f)),D(e.transformers)):[],u=await e.push(i,{...o,id:t,ingest:f,respond:d,mapping:r,preChain:c});return s&&await s,u},command:e.command,sources:e.sources,elb:e.sources.elb.push,logger:m,...i},w={collector:e,logger:m,id:t,config:r,env:b,setIngest:async n=>{if(!r.ingest)return void(f=(0,k.createIngest)(t));const o=await(0,k.getMappingValue)(n,r.ingest,{collector:e}),s=(0,k.createIngest)(t);f={...s,...o,_meta:s._meta}},setRespond:e=>{d=e}},O=await(0,k.tryCatchAsync)(s)(w);if(!O)return;const C=O.type||"unknown",x=e.logger.scope(C).scope(t);return b.logger=x,a&&(O.config={...O.config,primary:a}),O}function K(e,t){return{collector:e,logger:e.logger.scope("on").scope(String(t))}}function T(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:Q(t.env,t.config.env)};(0,w.tryCatch)(t.on)(o,a)}function U(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=K(e,A.Consent);t.forEach(e=>{Object.keys(o).filter(t=>t in e).forEach(t=>{(0,w.tryCatch)(e[t])(o,s)})})}(e,n,o);break;case A.Ready:!function(e,t){if(!e.allowed)return;const n=K(e,A.Ready);t.forEach(e=>{(0,w.tryCatch)(e)(void 0,n)})}(e,n);break;case A.Run:!function(e,t){if(!e.allowed)return;const n=K(e,A.Run);t.forEach(e=>{(0,w.tryCatch)(e)(void 0,n)})}(e,n);break;case A.Session:!function(e,t){if(!e.session)return;const n=K(e,A.Session);t.forEach(t=>{(0,w.tryCatch)(t)(e.session,n)})}(e,n);break;default:{const o=K(e,t);n.forEach(e=>{"function"==typeof e&&(0,w.tryCatch)(e)(s,o)});break}}}function G(e,t,n,o){if(!e)return[];if(t){const e=(0,m.resolveNext)(t,(0,m.buildCacheContext)(o));return e?_(e,D(n)):[]}return _(e,D(n))}async function B(e,t,n){const{code:o,config:s={},env:r={},before:i,next:a,cache:c}=t;if(!(0,m.isFunction)(o.push))return L({ok:!1,failed:{invalid:{type:"invalid",error:"Destination code must have a push method"}}});const u=n||s||{init:!1};let l=i?{...u,before:i}:{...u};a&&(l={...l,next:a}),c&&(l={...l,cache:c});const d={...o,config:l,env:Q(o.env,r)};let f=d.config.id;if(!f)do{f=(0,m.getId)(5,"abcdefghijklmnopqrstuvwxyz")}while(e.destinations[f]);return e.destinations[f]=d,!1!==d.config.queue&&(d.queuePush=[...e.queue]),F(e,void 0,{},{[f]:d})}async function F(e,t,n={},o){const{allowed:s,consent:r,globals:i,user:a}=e;if(!s)return L({ok:!1});t&&(e.queue.push(t),e.status.in++),o||(o=e.destinations);const c=await Promise.all(Object.entries(o||{}).map(async([o,s])=>{var c,u,l;if(s.config.disabled)return{id:o,destination:s,skipped:!0};let d=(s.queuePush||[]).map(e=>({...e,consent:r}));s.queuePush=[],t&&d.push((0,m.clone)(t));const f=n.ingest?{...n.ingest,_meta:{...n.ingest._meta,path:[...n.ingest._meta.path]}}:(0,m.createIngest)("unknown");if(!d.length&&!(null==(c=s.queueOn)?void 0:c.length))return{id:o,destination:s,skipped:!0};if(!d.length&&(null==(u=s.queueOn)?void 0:u.length)){let t=!1;try{t=await J(e,s,o)}catch(t){const n=s.type||"unknown";e.logger.scope(n).error("Destination init threw",{error:t instanceof Error?t.message:String(t)})}return{id:o,destination:s,skipped:!t}}const g=[],p=d.filter(e=>{const t=(0,m.getGrantedConsent)(s.config.consent,r,e.consent);return!t||(e.consent=t,g.push(e),!1)});if(s.queuePush.push(...p),!g.length)return{id:o,destination:s,queue:d};let v,h,y=!1;try{y=await J(e,s,o)}catch(t){const n=s.type||"unknown";e.logger.scope(n).error("Destination init threw",{error:t instanceof Error?t.message:String(t)})}if(!y)return{id:o,destination:s,queue:d};s.dlq||(s.dlq=[]);const b=s.config.before,w=G(b,b&&(0,m.isRouteArray)(b)?(0,m.compileNext)(b):void 0,e.transformers,f),k=s.config.next,O=k&&(0,m.isRouteArray)(k)?(0,m.compileNext)(k):void 0,C=null==(l=s.config)?void 0:l.cache,x=C?(0,m.compileCache)(C):void 0,S=x?I(x,e):void 0;let j=0;return await Promise.all(g.map(async t=>{let r;if(t.globals=(0,m.assign)(i,t.globals),t.user=(0,m.assign)(a,t.user),(null==x?void 0:x.full)&&S){const e=(0,m.buildCacheContext)(f,t),n=(0,m.checkCache)(x,S,e,`d:${o}`);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 c=t,u=n.respond;if(w.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const s=await R(e,e.transformers,w,t,f,n.respond,`destination.${o}.before`);if(null===s.event)return t;s.respond&&(u=s.respond),c=Array.isArray(s.event)?s.event[0]:s.event}if(x&&!x.full&&S){const e=(0,m.buildCacheContext)(f,c),n=(0,m.checkCache)(x,S,e,`d:${o}`);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 l=Date.now();let d=!1;const g=await(0,m.tryCatchAsync)(V,t=>{const n=s.type||"unknown";e.logger.scope(n).error("Push failed",{error:t,event:c.name}),v=t,d=!0,s.dlq.push([c,t])})(e,s,o,c,f,u);if(j+=Date.now()-l,r&&S&&void 0===s.config.mock&&(0,m.storeCache)(S,r.key,null==g||g,r.ttl),void 0!==g&&(h=g),!d&&k){void 0!==g&&(f._response=g);const t=G(k,O,e.transformers,f);if(t.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const n=await R(e,e.transformers,t,c,f,u,`destination.${o}.next`);n.respond&&(u=n.respond)}}return t})),{id:o,destination:s,error:v,response:h,totalDuration:j}})),u={},l={},d={};for(const t of c){if(t.skipped)continue;const n={type:t.destination.type||"unknown",data:t.response};e.status.destinations[t.id]||(e.status.destinations[t.id]={count:0,failed:0,duration:0});const o=e.status.destinations[t.id],s=Date.now();t.error?(n.error=t.error,d[t.id]=n,o.failed++,o.lastAt=s,o.duration+=t.totalDuration||0,e.status.failed++):t.queue&&t.queue.length?l[t.id]=n:(u[t.id]=n,o.count++,o.lastAt=s,o.duration+=t.totalDuration||0,e.status.out++)}return L({event:t,...Object.keys(u).length&&{done:u},...Object.keys(l).length&&{queued:l},...Object.keys(d).length&&{failed:d}})}async function J(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:Q(t.env,t.config.env)};r.debug("init");const a=await(0,m.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)T(e,t,n,s,r)}r.debug("init done")}return!0}async function V(e,t,n,o,s,r){const{config:i}=t,a=await(0,m.processEventMapping)(o,i,e);if(a.ignore)return!1;const c=t.type||"unknown",u=e.logger.scope(c),l={collector:e,logger:u,id:n,config:i,data:a.data,rule:a.mapping,ingest:s,env:{...Q(t.env,i.env),...r?{respond:r}:{}}};if(void 0!==i.mock)return u.debug("mock",{event:a.event.name}),i.mock;const d=a.mapping,f=a.mappingKey||"* *";if(!(null==d?void 0:d.batch)||!t.pushBatch||void 0!==i.mock){u.debug("push",{event:a.event.name});const n=await(0,m.useHooks)(t.push,"DestinationPush",e.hooks,e.logger)(a.event,l);return u.debug("push done"),n}{if(t.batches=t.batches||{},!t.batches[f]){const o={key:f,events:[],data:[]};t.batches[f]={batched:o,batchFn:(0,m.debounce)(()=>{const o=t.batches[f].batched,a={collector:e,logger:u,id:n,config:i,data:void 0,rule:d,ingest:s,env:{...Q(t.env,i.env),...r?{respond:r}:{}}};u.debug("push batch",{events:o.events.length}),(0,m.useHooks)(t.pushBatch,"DestinationPushBatch",e.hooks,e.logger)(o,a),u.debug("push batch done"),o.events=[],o.data=[]},d.batch)}}const o=t.batches[f];o.batched.events.push(a.event),(0,m.isDefined)(a.data)&&o.batched.data.push(a.data),o.batchFn()}return!0}function L(e){return{ok:!(null==e?void 0:e.failed),...e}}function W(e){const{code:t,config:n={},env:o={},cache:s}=e,{config:r}=N(e,"before"),{config:i}=N({...e,config:r},"next"),a={...t.config,...n,...i};s&&(a.cache=s);const c=Q(t.env,o);return{...t,config:a,env:c}}function Q(e,t){return e||t?t?e&&(0,m.isObject)(e)&&(0,m.isObject)(t)?{...e,...t}:t:e:{}}async function X(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 Y(e,t,n,o){let s,r,i=!1;switch(t){case A.Config:(0,x.isObject)(n)&&((0,C.assign)(e.config,n,{shallow:!1}),r=n,i=!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,h.assign)(e.consent,n),{update:n}}(e,n);r=t,i=!0}break;case A.Custom:(0,x.isObject)(n)&&(e.custom=(0,C.assign)(e.custom,n),r=n,i=!0);break;case A.Destination:(0,x.isObject)(n)&&("code"in n&&(0,x.isObject)(n.code)?s=await B(e,n,o):(0,C.isFunction)(n.push)&&(s=await B(e,{code:n},o)));break;case A.Globals:(0,x.isObject)(n)&&(e.globals=(0,C.assign)(e.globals,n),r=n,i=!0);break;case A.On:(0,C.isString)(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,U(e,t,r)}(e,n,o);break;case A.Ready:i=!0;break;case A.Run:s=await async function(e,t){return e.allowed=!0,e.timing=Date.now(),t&&(t.consent&&(e.consent=(0,C.assign)(e.consent,t.consent)),t.user&&(e.user=(0,C.assign)(e.user,t.user)),t.globals&&(e.globals=(0,C.assign)(e.config.globalsStatic||{},t.globals)),t.custom&&(e.custom=(0,C.assign)(e.custom,t.custom))),Object.values(e.destinations).forEach(e=>{e.queuePush=[]}),e.queue=[],e.round++,await F(e)}(e,n),i=!0;break;case A.Session:i=!0;break;case A.Shutdown:await async function(e){const t=e.logger;await X(e.sources,"source",t),await X(e.destinations,"destination",t),await X(e.transformers,"transformer",t),await X(e.stores,"store",t)}(e);break;case A.User:(0,x.isObject)(n)&&((0,C.assign)(e.user,n,{shallow:!1}),r=n,i=!0)}return i&&(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 of Object.values(e.sources)){if(null==(s=n.config.require)?void 0:s.length){const e=n.config.require.indexOf(t);-1!==e&&n.config.require.splice(e,1)}n.on&&(z(n)?!1===await(0,w.tryCatchAsync)(n.on)(t,i)&&(c=!0):(n.queueOn=n.queueOn||[],n.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});T(e,o,n,t,i)}});for(const t of Object.values(e.sources))z(t)&&(null==(r=t.queueOn)?void 0:r.length)&&await M(0,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=W(s);!1!==a.config.queue&&(a.queuePush=[...e.queue]),e.destinations[o]=a}}(e,t),U(e,t,a,o),!c}(e,t,void 0,r),s=await F(e)),s||L({ok:!0})}function Z(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:u={},user:l=e.user,nested:d=[],consent:f=e.consent,id:g=(0,C.getSpanId)(),trigger:p="",entity:v=n,action:h=o,timing:y=0,source:m={type:"collector",schema:"4"}}=t;return{name:r,data:i,context:a,globals:c,custom:u,user:l,nested:d,consent:f,id:g,trigger:p,entity:v,action:h,timestamp:s,timing:y,source:m}}async function ee(e){var t,n;const o=(0,y.assign)({globalsStatic:{},sessionStatic:{},run:!0},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,y.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:{}},timing:Date.now(),user:e.user||{},sources:{},pending:{destinations:{}},push:void 0,command:void 0};var c,u;a.push=function(e,t){return(0,S.useHooks)(async(n,o={})=>await(0,S.tryCatchAsync)(async()=>{var s;const r=Date.now(),{id:i,ingest:a,respond:c,mapping:u,preChain:l,include:d,exclude:f}=o;let g=c,p=n;const v=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,h=null!=a?a:(0,S.createIngest)(i||"unknown");if(u){const t=await(0,S.processEventMapping)(p,u,e);if(t.ignore)return L({ok:!0});if(u.consent&&!(0,S.getGrantedConsent)(u.consent,e.consent,t.event.consent))return L({ok:!0});p=t.event}if((null==l?void 0:l.length)&&e.transformers&&Object.keys(e.transformers).length>0){const n=await R(e,e.transformers,l,p,h,g,i?`source.${i}.next`:void 0);if(null===n.event)return L({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=Z(e,o);return F(e,s,{id:i,ingest:h,respond:g},v)}));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:L({ok:!0})}p=n.event}const y=t(p),m=Z(e,y),b=await F(e,m,{id:i,ingest:h,respond:g},v);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},()=>L({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.0.1"},...e})),a.command=(c=a,u=Y,(0,j.useHooks)(async(e,t,n)=>await(0,j.tryCatchAsync)(async()=>await u(c,e,t,n),()=>L({ok:!1}))(),"Command",c.hooks,c.logger));const l=e.stores||{};if(a.stores=await async function(e,t={}){const n={};for(const[o,s]of Object.entries(t)){const{code:t,config:r={},env:i={}}=s,a=e.logger.scope("store").scope(o),c={collector:e,logger:a,id:o,config:r,env:i},u=await t(c),l=u.get,d=u.set,f=u.delete;u.get=(0,q.useHooks)(l,"StoreGet",e.hooks,e.logger),u.set=(0,q.useHooks)(d,"StoreSet",e.hooks,e.logger),u.delete=(0,q.useHooks)(f,"StoreDelete",e.hooks,e.logger),n[o]=u}return n}(a,l),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)}}}(l,a.stores,e),!a.stores.__cache){const e=new Map;a.stores.__cache={type:"memory",config:{},get:t=>{const n=e.get(t);if(n){if(!(n.expires&&Date.now()>n.expires))return n.value;e.delete(t)}},set:(t,n,o)=>{e.set(t,{value:n,expires:o?Date.now()+o:void 0})},delete:t=>{e.delete(t)}}}return 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]=W(i);return s}(a,e.destinations||{}),a.transformers=await async function(e,t={}){const n={};for(const[o,s]of Object.entries(t)){const{code:t,env:r={}}=s,{config:i}=N(s,"before"),{config:a}=N({...s,config:i},"next"),c=Object.keys(r).length>0?{...a,env:r}:a,{cache:u}=s,l=u?{...c,cache:u}:c,d=e.logger.scope("transformer").scope(o),f={collector:e,logger:d,id:o,ingest:(0,O.createIngest)(o),config:l,env:r},g=await t(f);n[o]=g}return n}(a,e.transformers||{}),a}async function te(e){e=e||{};const t=await ee(e),n=(o=t,{type:"elb",config:{},push:async(e,t,n,s,r,i)=>{if("string"==typeof e&&e.startsWith("walker ")){const s=e.replace("walker ","");return o.command(s,t,n)}let a;if("string"==typeof e)a={name:e},t&&"object"==typeof t&&!Array.isArray(t)&&(a.data=t);else{if(!e||"object"!=typeof e)return L({ok:!1});a=e,t&&"object"==typeof t&&!Array.isArray(t)&&(a.data={...a.data||{},...t})}return s&&"object"==typeof s&&(a.context=s),r&&Array.isArray(r)&&(a.nested=r),i&&"object"==typeof i&&(a.custom=i),o.push(a)}});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 H(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];n.init&&await(0,k.tryCatchAsync)(n.init.bind(n))(),n.config.init=!0,z(n)&&await M(0,n)}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 u=Object.values(t.sources).filter(e=>"elb"!==e.type),l=u.find(e=>e.config.primary);return l?c=l.push:u.length>0&&(c=u[0].push),{collector:t,elb:c}}var ne=async e=>{let t;return{get flow(){return t},trigger:(n,o)=>async n=>{var s,r,i,a,c,u,l,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 te({...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==(l=null==(u=e.sources)?void 0:u.session)?void 0:l.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)}}}},oe=(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:()=>Ve,step:()=>u,trigger:()=>Le});var u={};n(u,{newMarketingSession:()=>l,returningVisitor:()=>d});var l={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 v,buildCacheContext as m,clone as h,compileCache as y,checkCache as b,storeCache as w,compileNext as k,createIngest as S,debounce as O,getId as j,getGrantedConsent as I,isDefined as x,isFunction as A,isObject as q,isRouteArray as C,processEventMapping as D,resolveNext as _,tryCatchAsync as E,useHooks as $}from"@walkeros/core";import{isArray as P}from"@walkeros/core";import{tryCatch as M,tryCatchAsync as R}from"@walkeros/core";import{createIngest as N,getMappingValue as K,tryCatchAsync as T,compileNext as H,resolveNext as G,isRouteArray as U,compileCache as B,checkCache as F,storeCache as J,applyUpdate as V,buildCacheContext as L}from"@walkeros/core";import{createIngest as z,isObject as W,tryCatchAsync as Q,useHooks as X,compileNext as Y,resolveNext as Z,isRouteArray as ee,compileCache as ne,checkCache as te,storeCache as oe,buildCacheContext as se}from"@walkeros/core";import{assign as re,getSpanId as ie,isFunction as ae,isString as ce}from"@walkeros/core";import{isObject as ue}from"@walkeros/core";import{createIngest as le,getGrantedConsent as de,processEventMapping as fe,tryCatchAsync as ge,useHooks as pe}from"@walkeros/core";import{useHooks as ve,tryCatchAsync as me}from"@walkeros/core";import{useHooks as he}from"@walkeros/core";var ye={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 be(e,n){return e.storeId&&n.stores[e.storeId]?n.stores[e.storeId]:n.stores.__cache}function we(e){var n;const t={};for(const[o,s]of Object.entries(e)){const e=null==(n=s.config)?void 0:n.next;e&&!ee(e)?t[o]={next:e}:t[o]={}}return t}function ke(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 Se(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 Oe(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:z(t),config:n.config,env:xe(n.config.env)};s.debug("init");const i=await X(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 je(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:{...xe(n.config.env),...r?{respond:r}:{}}};a.debug("push",{event:o.name});const u=await X(n.push,"TransformerPush",e.hooks,e.logger)(o,c);return a.debug("push done"),u}async function Ie(e,n,t,o,s,r,i){var a,c,u,l,d,f;i&&(null==s?void 0:s._meta)&&(s._meta.chainPath=i);let g=o,p=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:p};if(s&&s._meta&&(s._meta.hops++,s._meta.path.push(o)),!await Q(Oe)(e,r,o))return e.logger.error(`Transformer init failed: ${o}`),{event:null,respond:p};if(i&&void 0!==(null==(c=null==(a=r.config)?void 0:a.chainMocks)?void 0:c[i])){const n=r.config.chainMocks[i];e.logger.scope(`transformer:${r.type||"unknown"}`).debug("chainMock",{chain:i}),g=n;continue}if(void 0!==(null==(u=r.config)?void 0:u.mock)){e.logger.scope(`transformer:${r.type||"unknown"}`).debug("mock"),g=r.config.mock;continue}if(null==(l=r.config)?void 0:l.disabled)continue;const v=null==(d=r.config)?void 0:d.cache,m=v?ne(v):void 0,h=m?be(m,e):void 0;let y;if(m&&h){const e=se(s,g),n=te(m,h,e,`t:${o}`);if("HIT"===(null==n?void 0:n.status)&&n.value){if(g=n.value,m.full)return{event:g,respond:p};continue}"MISS"===(null==n?void 0:n.status)&&(y={key:n.key,ttl:n.rule.ttl})}const b=r.config.before;if(b){const t=Se("string"==typeof b||Array.isArray(b)&&!ee(b)?b:Z(Y(b),se(s,g))||void 0,we(n));if(t.length>0){const o=await Ie(e,n,t,g,s,p,i);if(null===o.event)return{event:null,respond:null!=(f=o.respond)?f:p};o.respond&&(p=o.respond),g=Array.isArray(o.event)?o.event[0]:o.event}}const w=await Q(je,n=>(e.logger.scope(`transformer:${r.type||"unknown"}`).error("Push failed",{error:n}),!1))(e,r,o,g,s,p);if(!1===w)return{event:null,respond:p};if(Array.isArray(w)){const r=t.slice(t.indexOf(o)+1),a=await Promise.all(w.map(async t=>{const o=t.event||g,a=s?{...s,_meta:{...s._meta,path:[...s._meta.path]}}:z("unknown");if(t.next){let s=t.next;if(ee(t.next)){const e=Y(t.next);s=Z(e,se(a,o))}if(s){const t=Se(s,we(n));if(t.length>0)return Ie(e,n,t,o,a,p,i)}return{event:o,respond:p}}return r.length>0?Ie(e,n,r,o,a,p,i):{event:o,respond:p}}));let c=p;const u=[];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)?u.push(...n.event):u.push(n.event)}else u.push(e);return 0===u.length?{event:null,respond:c}:1===u.length?{event:u[0],respond:c}:{event:u,respond:c}}if(w&&"object"==typeof w){const{event:t,respond:o,next:r}=w;if(o&&(p=o),r){let o=r;if(ee(r)){const e=Y(r);if(o=Z(e,se(s,g)),!o){t&&(g=t);continue}}const a=Se(o,we(n));return a.length>0?Ie(e,n,a,t||g,s,p,i):(e.logger.warn(`Branch target not found: ${JSON.stringify(r)}`),{event:null,respond:p})}t&&(g=t)}if(y&&h&&oe(h,y.key,g,y.ttl),(!w||"object"==typeof w&&!w.next)&&r.config.next&&ee(r.config.next)){const t=r.config.next,o=Y(t),a=Z(o,se(s,g));if(a){const t=Se(a,we(n));if(t.length>0)return Ie(e,n,t,g,s,p,i)}return{event:g,respond:p}}}return{event:g,respond:p}}function xe(e){return e&&W(e)?e:{}}async function Ae(e,n){var t;if(!n.on||!(null==(t=n.queueOn)?void 0:t.length))return;const o=n.queueOn;n.queueOn=[];for(const{type:e,data:t}of o)await T(n.on)(e,t)}function qe(e){var n;return Boolean(e.config.init)&&!(null==(n=e.config.require)?void 0:n.length)}async function Ce(e,n,t){var o;const{code:s,config:r={},env:i={},primary:a,next:c,before:u,cache:l}=t;let d,f=N(n);const g=l?B({...l,full:null==(o=l.full)||o}):void 0,p=H(c),v=Array.isArray(c)&&U(c)||!p?void 0:Se(G(p),we(e.transformers)),m=H(u),h=Array.isArray(u)&&U(u)||!m?void 0:Se(G(m),we(e.transformers)),y=e.logger.scope("source").scope(n),b={push:async(t,o={})=>{let s,i=t;const a=null!=h?h:m?Se(G(m,L(f)),we(e.transformers)):[];if(a.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const t=await Ie(e,e.transformers,a,i,f,d,`source.${n}.before`);if(null===t.event)return{ok:!0};t.respond&&(d=t.respond),i=Array.isArray(t.event)?t.event[0]:t.event}if(g){const t=be(g,e);if(t){const o=L(f),r=F(g,t,o,`s:${n}`);if(r){if("HIT"===r.status&&void 0!==r.value&&g.full){let n=r.value;return r.rule.update&&(n=await V(n,r.rule.update,{...o,cache:{status:"HIT"}},e)),null==d||d(n),{ok:!0}}if("MISS"===r.status&&g.full&&d){const n=d,i=r.rule.update,a={...o,cache:{status:"MISS"}},c=r.key,u=r.rule.ttl;d=o=>{J(t,c,o,u),i?s=(async()=>{const t=await V(o,i,a,e);n(t)})():n(o)}}"MISS"!==r.status||g.full||J(t,r.key,!0,r.rule.ttl)}}}const c=null!=v?v:p?Se(G(p,L(f)),we(e.transformers)):[],u=await e.push(i,{...o,id:n,ingest:f,respond:d,mapping:r,preChain:c});return s&&await s,u},command:e.command,sources:e.sources,elb:e.sources.elb.push,logger:y,...i},w={collector:e,logger:y,id:n,config:r,env:b,setIngest:async t=>{if(!r.ingest)return void(f=N(n));const o=await K(t,r.ingest,{collector:e}),s=N(n);f={...s,...o,_meta:s._meta}},setRespond:e=>{d=e}},k=await T(s)(w);if(!k)return;const S=k.type||"unknown",O=e.logger.scope(S).scope(n);return b.logger=O,a&&(k.config={...k.config,primary:a}),k}function De(e,n){return{collector:e,logger:e.logger.scope("on").scope(String(n))}}function _e(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:He(n.env,n.config.env)};M(n.on)(o,a)}function Ee(e,n,t,o){let s;switch(n){case ye.Consent:s=o||e.consent;break;case ye.Session:s=e.session;break;case ye.User:s=o||e.user;break;case ye.Custom:s=o||e.custom;break;case ye.Globals:s=o||e.globals;break;case ye.Config:s=o||e.config;break;case ye.Ready:case ye.Run:default:s=void 0}if(t.length)switch(n){case ye.Consent:!function(e,n,t){const o=t||e.consent,s=De(e,ye.Consent);n.forEach(e=>{Object.keys(o).filter(n=>n in e).forEach(n=>{M(e[n])(o,s)})})}(e,t,o);break;case ye.Ready:!function(e,n){if(!e.allowed)return;const t=De(e,ye.Ready);n.forEach(e=>{M(e)(void 0,t)})}(e,t);break;case ye.Run:!function(e,n){if(!e.allowed)return;const t=De(e,ye.Run);n.forEach(e=>{M(e)(void 0,t)})}(e,t);break;case ye.Session:!function(e,n){if(!e.session)return;const t=De(e,ye.Session);n.forEach(n=>{M(n)(e.session,t)})}(e,t);break;default:{const o=De(e,n);t.forEach(e=>{"function"==typeof e&&M(e)(s,o)});break}}}function $e(e,n,t,o){if(!e)return[];if(n){const e=_(n,m(o));return e?Se(e,we(t)):[]}return Se(e,we(t))}async function Pe(e,n,t){const{code:o,config:s={},env:r={},before:i,next:a,cache:c}=n;if(!A(o.push))return Ke({ok:!1,failed:{invalid:{type:"invalid",error:"Destination code must have a push method"}}});const u=t||s||{init:!1};let l=i?{...u,before:i}:{...u};a&&(l={...l,next:a}),c&&(l={...l,cache:c});const d={...o,config:l,env:He(o.env,r)};let f=d.config.id;if(!f)do{f=j(5,"abcdefghijklmnopqrstuvwxyz")}while(e.destinations[f]);return e.destinations[f]=d,!1!==d.config.queue&&(d.queuePush=[...e.queue]),Me(e,void 0,{},{[f]:d})}async function Me(e,n,t={},o){const{allowed:s,consent:r,globals:i,user:a}=e;if(!s)return Ke({ok:!1});n&&(e.queue.push(n),e.status.in++),o||(o=e.destinations);const c=await Promise.all(Object.entries(o||{}).map(async([o,s])=>{var c,u,l;if(s.config.disabled)return{id:o,destination:s,skipped:!0};let d=(s.queuePush||[]).map(e=>({...e,consent:r}));s.queuePush=[],n&&d.push(h(n));const f=t.ingest?{...t.ingest,_meta:{...t.ingest._meta,path:[...t.ingest._meta.path]}}:S("unknown");if(!d.length&&!(null==(c=s.queueOn)?void 0:c.length))return{id:o,destination:s,skipped:!0};if(!d.length&&(null==(u=s.queueOn)?void 0:u.length)){let n=!1;try{n=await Re(e,s,o)}catch(n){const t=s.type||"unknown";e.logger.scope(t).error("Destination init threw",{error:n instanceof Error?n.message:String(n)})}return{id:o,destination:s,skipped:!n}}const g=[],p=d.filter(e=>{const n=I(s.config.consent,r,e.consent);return!n||(e.consent=n,g.push(e),!1)});if(s.queuePush.push(...p),!g.length)return{id:o,destination:s,queue:d};let O,j,x=!1;try{x=await Re(e,s,o)}catch(n){const t=s.type||"unknown";e.logger.scope(t).error("Destination init threw",{error:n instanceof Error?n.message:String(n)})}if(!x)return{id:o,destination:s,queue:d};s.dlq||(s.dlq=[]);const A=s.config.before,q=$e(A,A&&C(A)?k(A):void 0,e.transformers,f),D=s.config.next,_=D&&C(D)?k(D):void 0,$=null==(l=s.config)?void 0:l.cache,P=$?y($):void 0,M=P?be(P,e):void 0;let R=0;return await Promise.all(g.map(async n=>{let r;if(n.globals=v(i,n.globals),n.user=v(a,n.user),(null==P?void 0:P.full)&&M){const e=m(f,n),t=b(P,M,e,`d:${o}`);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 c=n,u=t.respond;if(q.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const s=await Ie(e,e.transformers,q,n,f,t.respond,`destination.${o}.before`);if(null===s.event)return n;s.respond&&(u=s.respond),c=Array.isArray(s.event)?s.event[0]:s.event}if(P&&!P.full&&M){const e=m(f,c),t=b(P,M,e,`d:${o}`);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 l=Date.now();let d=!1;const g=await E(Ne,n=>{const t=s.type||"unknown";e.logger.scope(t).error("Push failed",{error:n,event:c.name}),O=n,d=!0,s.dlq.push([c,n])})(e,s,o,c,f,u);if(R+=Date.now()-l,r&&M&&void 0===s.config.mock&&w(M,r.key,null==g||g,r.ttl),void 0!==g&&(j=g),!d&&D){void 0!==g&&(f._response=g);const n=$e(D,_,e.transformers,f);if(n.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const t=await Ie(e,e.transformers,n,c,f,u,`destination.${o}.next`);t.respond&&(u=t.respond)}}return n})),{id:o,destination:s,error:O,response:j,totalDuration:R}})),u={},l={},d={};for(const n of c){if(n.skipped)continue;const t={type:n.destination.type||"unknown",data:n.response};e.status.destinations[n.id]||(e.status.destinations[n.id]={count:0,failed:0,duration:0});const o=e.status.destinations[n.id],s=Date.now();n.error?(t.error=n.error,d[n.id]=t,o.failed++,o.lastAt=s,o.duration+=n.totalDuration||0,e.status.failed++):n.queue&&n.queue.length?l[n.id]=t:(u[n.id]=t,o.count++,o.lastAt=s,o.duration+=n.totalDuration||0,e.status.out++)}return Ke({event:n,...Object.keys(u).length&&{done:u},...Object.keys(l).length&&{queued:l},...Object.keys(d).length&&{failed:d}})}async function Re(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:He(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)_e(e,n,t,s,r)}r.debug("init done")}return!0}async function Ne(e,n,t,o,s,r){const{config:i}=n,a=await D(o,i,e);if(a.ignore)return!1;const c=n.type||"unknown",u=e.logger.scope(c),l={collector:e,logger:u,id:t,config:i,data:a.data,rule:a.mapping,ingest:s,env:{...He(n.env,i.env),...r?{respond:r}:{}}};if(void 0!==i.mock)return u.debug("mock",{event:a.event.name}),i.mock;const d=a.mapping,f=a.mappingKey||"* *";if(!(null==d?void 0:d.batch)||!n.pushBatch||void 0!==i.mock){u.debug("push",{event:a.event.name});const t=await $(n.push,"DestinationPush",e.hooks,e.logger)(a.event,l);return u.debug("push done"),t}{if(n.batches=n.batches||{},!n.batches[f]){const o={key:f,events:[],data:[]};n.batches[f]={batched:o,batchFn:O(()=>{const o=n.batches[f].batched,a={collector:e,logger:u,id:t,config:i,data:void 0,rule:d,ingest:s,env:{...He(n.env,i.env),...r?{respond:r}:{}}};u.debug("push batch",{events:o.events.length}),$(n.pushBatch,"DestinationPushBatch",e.hooks,e.logger)(o,a),u.debug("push batch done"),o.events=[],o.data=[]},d.batch)}}const o=n.batches[f];o.batched.events.push(a.event),x(a.data)&&o.batched.data.push(a.data),o.batchFn()}return!0}function Ke(e){return{ok:!(null==e?void 0:e.failed),...e}}function Te(e){const{code:n,config:t={},env:o={},cache:s}=e,{config:r}=ke(e,"before"),{config:i}=ke({...e,config:r},"next"),a={...n.config,...t,...i};s&&(a.cache=s);const c=He(n.env,o);return{...n,config:a,env:c}}function He(e,n){return e||n?n?e&&q(e)&&q(n)?{...e,...n}:n:e:{}}async function Ge(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 Ue(e,n,t,o){let s,r,i=!1;switch(n){case ye.Config:ue(t)&&(re(e.config,t,{shallow:!1}),r=t,i=!0);break;case ye.Consent:if(ue(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);r=n,i=!0}break;case ye.Custom:ue(t)&&(e.custom=re(e.custom,t),r=t,i=!0);break;case ye.Destination:ue(t)&&("code"in t&&ue(t.code)?s=await Pe(e,t,o):ae(t.push)&&(s=await Pe(e,{code:t},o)));break;case ye.Globals:ue(t)&&(e.globals=re(e.globals,t),r=t,i=!0);break;case ye.On:ce(t)&&await async function(e,n,t){const o=e.on,s=o[n]||[],r=P(t)?t:[t];r.forEach(e=>{s.push(e)}),o[n]=s,Ee(e,n,r)}(e,t,o);break;case ye.Ready:i=!0;break;case ye.Run:s=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 Me(e)}(e,t),i=!0;break;case ye.Session:i=!0;break;case ye.Shutdown:await async function(e){const n=e.logger;await Ge(e.sources,"source",n),await Ge(e.destinations,"destination",n),await Ge(e.transformers,"transformer",n),await Ge(e.stores,"store",n)}(e);break;case ye.User:ue(t)&&(re(e.user,t,{shallow:!1}),r=t,i=!0)}return i&&(await async function(e,n,t,o){var s,r;let i,a=t||[];switch(t||(a=e.on[n]||[]),n){case ye.Consent:i=o||e.consent;break;case ye.Session:i=e.session;break;case ye.User:i=o||e.user;break;case ye.Custom:i=o||e.custom;break;case ye.Globals:i=o||e.globals;break;case ye.Config:i=o||e.config;break;case ye.Ready:case ye.Run:default:i=void 0}let c=!1;for(const t of Object.values(e.sources)){if(null==(s=t.config.require)?void 0:s.length){const e=t.config.require.indexOf(n);-1!==e&&t.config.require.splice(e,1)}t.on&&(qe(t)?!1===await R(t.on)(n,i)&&(c=!0):(t.queueOn=t.queueOn||[],t.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});_e(e,o,t,n,i)}});for(const n of Object.values(e.sources))qe(n)&&(null==(r=n.queueOn)?void 0:r.length)&&await Ae(0,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=Te(s);!1!==a.config.queue&&(a.queuePush=[...e.queue]),e.destinations[o]=a}}(e,n),Ee(e,n,a,o),!c}(e,n,void 0,r),s=await Me(e)),s||Ke({ok:!0})}function Be(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:u={},user:l=e.user,nested:d=[],consent:f=e.consent,id:g=ie(),trigger:p="",entity:v=t,action:m=o,timing:h=0,source:y={type:"collector",schema:"4"}}=n;return{name:r,data:i,context:a,globals:c,custom:u,user:l,nested:d,consent:f,id:g,trigger:p,entity:v,action:m,timestamp:s,timing:h,source:y}}async function Fe(e){var n,t;const o=g({globalsStatic:{},sessionStatic:{},run:!0},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:{}},timing:Date.now(),user:e.user||{},sources:{},pending:{destinations:{}},push:void 0,command:void 0};var c,u;a.push=function(e,n){return pe(async(t,o={})=>await ge(async()=>{var s;const r=Date.now(),{id:i,ingest:a,respond:c,mapping:u,preChain:l,include:d,exclude:f}=o;let g=c,p=t;const v=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,m=null!=a?a:le(i||"unknown");if(u){const n=await fe(p,u,e);if(n.ignore)return Ke({ok:!0});if(u.consent&&!de(u.consent,e.consent,n.event.consent))return Ke({ok:!0});p=n.event}if((null==l?void 0:l.length)&&e.transformers&&Object.keys(e.transformers).length>0){const t=await Ie(e,e.transformers,l,p,m,g,i?`source.${i}.next`:void 0);if(null===t.event)return Ke({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=Be(e,o);return Me(e,s,{id:i,ingest:m,respond:g},v)}));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:Ke({ok:!0})}p=t.event}const h=n(p),y=Be(e,h),b=await Me(e,y,{id:i,ingest:m,respond:g},v);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},()=>Ke({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.0.1-next-1778230564486"},...e})),a.command=(u=Ue,ve(async(e,n,t)=>await me(async()=>await u(c,e,n,t),()=>Ke({ok:!1}))(),"Command",(c=a).hooks,c.logger));const l=e.stores||{};if(a.stores=await async function(e,n={}){const t={};for(const[o,s]of Object.entries(n)){const{code:n,config:r={},env:i={}}=s,a=e.logger.scope("store").scope(o),c={collector:e,logger:a,id:o,config:r,env:i},u=await n(c),l=u.get,d=u.set,f=u.delete;u.get=he(l,"StoreGet",e.hooks,e.logger),u.set=he(d,"StoreSet",e.hooks,e.logger),u.delete=he(f,"StoreDelete",e.hooks,e.logger),t[o]=u}return t}(a,l),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)}}}(l,a.stores,e),!a.stores.__cache){const e=new Map;a.stores.__cache={type:"memory",config:{},get:n=>{const t=e.get(n);if(t){if(!(t.expires&&Date.now()>t.expires))return t.value;e.delete(n)}},set:(n,t,o)=>{e.set(n,{value:t,expires:o?Date.now()+o:void 0})},delete:n=>{e.delete(n)}}}return 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]=Te(i);return s}(a,e.destinations||{}),a.transformers=await async function(e,n={}){const t={};for(const[o,s]of Object.entries(n)){const{code:n,env:r={}}=s,{config:i}=ke(s,"before"),{config:a}=ke({...s,config:i},"next"),c=Object.keys(r).length>0?{...a,env:r}:a,{cache:u}=s,l=u?{...c,cache:u}:c,d=e.logger.scope("transformer").scope(o),f={collector:e,logger:d,id:o,ingest:z(o),config:l,env:r},g=await n(f);t[o]=g}return t}(a,e.transformers||{}),a}async function Je(e){e=e||{};const n=await Fe(e),t=(o=n,{type:"elb",config:{},push:async(e,n,t,s,r,i)=>{if("string"==typeof e&&e.startsWith("walker ")){const s=e.replace("walker ","");return o.command(s,n,t)}let a;if("string"==typeof e)a={name:e},n&&"object"==typeof n&&!Array.isArray(n)&&(a.data=n);else{if(!e||"object"!=typeof e)return Ke({ok:!1});a=e,n&&"object"==typeof n&&!Array.isArray(n)&&(a.data={...a.data||{},...n})}return s&&"object"==typeof s&&(a.context=s),r&&Array.isArray(r)&&(a.nested=r),i&&"object"==typeof i&&(a.custom=i),o.push(a)}});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 Ce(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];t.init&&await T(t.init.bind(t))(),t.config.init=!0,qe(t)&&await Ae(0,t)}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 u=Object.values(n.sources).filter(e=>"elb"!==e.type),l=u.find(e=>e.config.primary);return l?c=l.push:u.length>0&&(c=u[0].push),{collector:n,elb:c}}var Ve=async e=>{let n;return{get flow(){return n},trigger:(t,o)=>async t=>{var s,r,i,a,c,u,l,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 Je({...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==(l=null==(u=e.sources)?void 0:u.session)?void 0:l.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)}}}},Le=(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:()=>Ve,step:()=>u,trigger:()=>Le});var u={};n(u,{newMarketingSession:()=>l,returningVisitor:()=>d});var l={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 v,buildCacheContext as m,clone as h,compileCache as y,checkCache as b,storeCache as w,compileNext as k,createIngest as S,debounce as O,getId as j,getGrantedConsent as I,isDefined as x,isFunction as A,isObject as q,isRouteArray as C,processEventMapping as D,resolveNext as _,tryCatchAsync as E,useHooks as $}from"@walkeros/core";import{isArray as P}from"@walkeros/core";import{tryCatch as M,tryCatchAsync as R}from"@walkeros/core";import{createIngest as N,getMappingValue as K,tryCatchAsync as T,compileNext as H,resolveNext as G,isRouteArray as U,compileCache as B,checkCache as F,storeCache as J,applyUpdate as V,buildCacheContext as L}from"@walkeros/core";import{createIngest as z,isObject as W,tryCatchAsync as Q,useHooks as X,compileNext as Y,resolveNext as Z,isRouteArray as ee,compileCache as ne,checkCache as te,storeCache as oe,buildCacheContext as se}from"@walkeros/core";import{assign as re,getSpanId as ie,isFunction as ae,isString as ce}from"@walkeros/core";import{isObject as ue}from"@walkeros/core";import{createIngest as le,getGrantedConsent as de,processEventMapping as fe,tryCatchAsync as ge,useHooks as pe}from"@walkeros/core";import{useHooks as ve,tryCatchAsync as me}from"@walkeros/core";import{useHooks as he}from"@walkeros/core";var ye={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 be(e,n){return e.storeId&&n.stores[e.storeId]?n.stores[e.storeId]:n.stores.__cache}function we(e){var n;const t={};for(const[o,s]of Object.entries(e)){const e=null==(n=s.config)?void 0:n.next;e&&!ee(e)?t[o]={next:e}:t[o]={}}return t}function ke(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 Se(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 Oe(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:z(t),config:n.config,env:xe(n.config.env)};s.debug("init");const i=await X(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 je(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:{...xe(n.config.env),...r?{respond:r}:{}}};a.debug("push",{event:o.name});const u=await X(n.push,"TransformerPush",e.hooks,e.logger)(o,c);return a.debug("push done"),u}async function Ie(e,n,t,o,s,r,i){var a,c,u,l,d,f;i&&(null==s?void 0:s._meta)&&(s._meta.chainPath=i);let g=o,p=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:p};if(s&&s._meta&&(s._meta.hops++,s._meta.path.push(o)),!await Q(Oe)(e,r,o))return e.logger.error(`Transformer init failed: ${o}`),{event:null,respond:p};if(i&&void 0!==(null==(c=null==(a=r.config)?void 0:a.chainMocks)?void 0:c[i])){const n=r.config.chainMocks[i];e.logger.scope(`transformer:${r.type||"unknown"}`).debug("chainMock",{chain:i}),g=n;continue}if(void 0!==(null==(u=r.config)?void 0:u.mock)){e.logger.scope(`transformer:${r.type||"unknown"}`).debug("mock"),g=r.config.mock;continue}if(null==(l=r.config)?void 0:l.disabled)continue;const v=null==(d=r.config)?void 0:d.cache,m=v?ne(v):void 0,h=m?be(m,e):void 0;let y;if(m&&h){const e=se(s,g),n=te(m,h,e,`t:${o}`);if("HIT"===(null==n?void 0:n.status)&&n.value){if(g=n.value,m.full)return{event:g,respond:p};continue}"MISS"===(null==n?void 0:n.status)&&(y={key:n.key,ttl:n.rule.ttl})}const b=r.config.before;if(b){const t=Se("string"==typeof b||Array.isArray(b)&&!ee(b)?b:Z(Y(b),se(s,g))||void 0,we(n));if(t.length>0){const o=await Ie(e,n,t,g,s,p,i);if(null===o.event)return{event:null,respond:null!=(f=o.respond)?f:p};o.respond&&(p=o.respond),g=Array.isArray(o.event)?o.event[0]:o.event}}const w=await Q(je,n=>(e.logger.scope(`transformer:${r.type||"unknown"}`).error("Push failed",{error:n}),!1))(e,r,o,g,s,p);if(!1===w)return{event:null,respond:p};if(Array.isArray(w)){const r=t.slice(t.indexOf(o)+1),a=await Promise.all(w.map(async t=>{const o=t.event||g,a=s?{...s,_meta:{...s._meta,path:[...s._meta.path]}}:z("unknown");if(t.next){let s=t.next;if(ee(t.next)){const e=Y(t.next);s=Z(e,se(a,o))}if(s){const t=Se(s,we(n));if(t.length>0)return Ie(e,n,t,o,a,p,i)}return{event:o,respond:p}}return r.length>0?Ie(e,n,r,o,a,p,i):{event:o,respond:p}}));let c=p;const u=[];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)?u.push(...n.event):u.push(n.event)}else u.push(e);return 0===u.length?{event:null,respond:c}:1===u.length?{event:u[0],respond:c}:{event:u,respond:c}}if(w&&"object"==typeof w){const{event:t,respond:o,next:r}=w;if(o&&(p=o),r){let o=r;if(ee(r)){const e=Y(r);if(o=Z(e,se(s,g)),!o){t&&(g=t);continue}}const a=Se(o,we(n));return a.length>0?Ie(e,n,a,t||g,s,p,i):(e.logger.warn(`Branch target not found: ${JSON.stringify(r)}`),{event:null,respond:p})}t&&(g=t)}if(y&&h&&oe(h,y.key,g,y.ttl),(!w||"object"==typeof w&&!w.next)&&r.config.next&&ee(r.config.next)){const t=r.config.next,o=Y(t),a=Z(o,se(s,g));if(a){const t=Se(a,we(n));if(t.length>0)return Ie(e,n,t,g,s,p,i)}return{event:g,respond:p}}}return{event:g,respond:p}}function xe(e){return e&&W(e)?e:{}}async function Ae(e,n){var t;if(!n.on||!(null==(t=n.queueOn)?void 0:t.length))return;const o=n.queueOn;n.queueOn=[];for(const{type:e,data:t}of o)await T(n.on)(e,t)}function qe(e){var n;return Boolean(e.config.init)&&!(null==(n=e.config.require)?void 0:n.length)}async function Ce(e,n,t){var o;const{code:s,config:r={},env:i={},primary:a,next:c,before:u,cache:l}=t;let d,f=N(n);const g=l?B({...l,full:null==(o=l.full)||o}):void 0,p=H(c),v=Array.isArray(c)&&U(c)||!p?void 0:Se(G(p),we(e.transformers)),m=H(u),h=Array.isArray(u)&&U(u)||!m?void 0:Se(G(m),we(e.transformers)),y=e.logger.scope("source").scope(n),b={push:async(t,o={})=>{let s,i=t;const a=null!=h?h:m?Se(G(m,L(f)),we(e.transformers)):[];if(a.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const t=await Ie(e,e.transformers,a,i,f,d,`source.${n}.before`);if(null===t.event)return{ok:!0};t.respond&&(d=t.respond),i=Array.isArray(t.event)?t.event[0]:t.event}if(g){const t=be(g,e);if(t){const o=L(f),r=F(g,t,o,`s:${n}`);if(r){if("HIT"===r.status&&void 0!==r.value&&g.full){let n=r.value;return r.rule.update&&(n=await V(n,r.rule.update,{...o,cache:{status:"HIT"}},e)),null==d||d(n),{ok:!0}}if("MISS"===r.status&&g.full&&d){const n=d,i=r.rule.update,a={...o,cache:{status:"MISS"}},c=r.key,u=r.rule.ttl;d=o=>{J(t,c,o,u),i?s=(async()=>{const t=await V(o,i,a,e);n(t)})():n(o)}}"MISS"!==r.status||g.full||J(t,r.key,!0,r.rule.ttl)}}}const c=null!=v?v:p?Se(G(p,L(f)),we(e.transformers)):[],u=await e.push(i,{...o,id:n,ingest:f,respond:d,mapping:r,preChain:c});return s&&await s,u},command:e.command,sources:e.sources,elb:e.sources.elb.push,logger:y,...i},w={collector:e,logger:y,id:n,config:r,env:b,setIngest:async t=>{if(!r.ingest)return void(f=N(n));const o=await K(t,r.ingest,{collector:e}),s=N(n);f={...s,...o,_meta:s._meta}},setRespond:e=>{d=e}},k=await T(s)(w);if(!k)return;const S=k.type||"unknown",O=e.logger.scope(S).scope(n);return b.logger=O,a&&(k.config={...k.config,primary:a}),k}function De(e,n){return{collector:e,logger:e.logger.scope("on").scope(String(n))}}function _e(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:He(n.env,n.config.env)};M(n.on)(o,a)}function Ee(e,n,t,o){let s;switch(n){case ye.Consent:s=o||e.consent;break;case ye.Session:s=e.session;break;case ye.User:s=o||e.user;break;case ye.Custom:s=o||e.custom;break;case ye.Globals:s=o||e.globals;break;case ye.Config:s=o||e.config;break;case ye.Ready:case ye.Run:default:s=void 0}if(t.length)switch(n){case ye.Consent:!function(e,n,t){const o=t||e.consent,s=De(e,ye.Consent);n.forEach(e=>{Object.keys(o).filter(n=>n in e).forEach(n=>{M(e[n])(o,s)})})}(e,t,o);break;case ye.Ready:!function(e,n){if(!e.allowed)return;const t=De(e,ye.Ready);n.forEach(e=>{M(e)(void 0,t)})}(e,t);break;case ye.Run:!function(e,n){if(!e.allowed)return;const t=De(e,ye.Run);n.forEach(e=>{M(e)(void 0,t)})}(e,t);break;case ye.Session:!function(e,n){if(!e.session)return;const t=De(e,ye.Session);n.forEach(n=>{M(n)(e.session,t)})}(e,t);break;default:{const o=De(e,n);t.forEach(e=>{"function"==typeof e&&M(e)(s,o)});break}}}function $e(e,n,t,o){if(!e)return[];if(n){const e=_(n,m(o));return e?Se(e,we(t)):[]}return Se(e,we(t))}async function Pe(e,n,t){const{code:o,config:s={},env:r={},before:i,next:a,cache:c}=n;if(!A(o.push))return Ke({ok:!1,failed:{invalid:{type:"invalid",error:"Destination code must have a push method"}}});const u=t||s||{init:!1};let l=i?{...u,before:i}:{...u};a&&(l={...l,next:a}),c&&(l={...l,cache:c});const d={...o,config:l,env:He(o.env,r)};let f=d.config.id;if(!f)do{f=j(5,"abcdefghijklmnopqrstuvwxyz")}while(e.destinations[f]);return e.destinations[f]=d,!1!==d.config.queue&&(d.queuePush=[...e.queue]),Me(e,void 0,{},{[f]:d})}async function Me(e,n,t={},o){const{allowed:s,consent:r,globals:i,user:a}=e;if(!s)return Ke({ok:!1});n&&(e.queue.push(n),e.status.in++),o||(o=e.destinations);const c=await Promise.all(Object.entries(o||{}).map(async([o,s])=>{var c,u,l;if(s.config.disabled)return{id:o,destination:s,skipped:!0};let d=(s.queuePush||[]).map(e=>({...e,consent:r}));s.queuePush=[],n&&d.push(h(n));const f=t.ingest?{...t.ingest,_meta:{...t.ingest._meta,path:[...t.ingest._meta.path]}}:S("unknown");if(!d.length&&!(null==(c=s.queueOn)?void 0:c.length))return{id:o,destination:s,skipped:!0};if(!d.length&&(null==(u=s.queueOn)?void 0:u.length)){let n=!1;try{n=await Re(e,s,o)}catch(n){const t=s.type||"unknown";e.logger.scope(t).error("Destination init threw",{error:n instanceof Error?n.message:String(n)})}return{id:o,destination:s,skipped:!n}}const g=[],p=d.filter(e=>{const n=I(s.config.consent,r,e.consent);return!n||(e.consent=n,g.push(e),!1)});if(s.queuePush.push(...p),!g.length)return{id:o,destination:s,queue:d};let O,j,x=!1;try{x=await Re(e,s,o)}catch(n){const t=s.type||"unknown";e.logger.scope(t).error("Destination init threw",{error:n instanceof Error?n.message:String(n)})}if(!x)return{id:o,destination:s,queue:d};s.dlq||(s.dlq=[]);const A=s.config.before,q=$e(A,A&&C(A)?k(A):void 0,e.transformers,f),D=s.config.next,_=D&&C(D)?k(D):void 0,$=null==(l=s.config)?void 0:l.cache,P=$?y($):void 0,M=P?be(P,e):void 0;let R=0;return await Promise.all(g.map(async n=>{let r;if(n.globals=v(i,n.globals),n.user=v(a,n.user),(null==P?void 0:P.full)&&M){const e=m(f,n),t=b(P,M,e,`d:${o}`);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 c=n,u=t.respond;if(q.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const s=await Ie(e,e.transformers,q,n,f,t.respond,`destination.${o}.before`);if(null===s.event)return n;s.respond&&(u=s.respond),c=Array.isArray(s.event)?s.event[0]:s.event}if(P&&!P.full&&M){const e=m(f,c),t=b(P,M,e,`d:${o}`);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 l=Date.now();let d=!1;const g=await E(Ne,n=>{const t=s.type||"unknown";e.logger.scope(t).error("Push failed",{error:n,event:c.name}),O=n,d=!0,s.dlq.push([c,n])})(e,s,o,c,f,u);if(R+=Date.now()-l,r&&M&&void 0===s.config.mock&&w(M,r.key,null==g||g,r.ttl),void 0!==g&&(j=g),!d&&D){void 0!==g&&(f._response=g);const n=$e(D,_,e.transformers,f);if(n.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const t=await Ie(e,e.transformers,n,c,f,u,`destination.${o}.next`);t.respond&&(u=t.respond)}}return n})),{id:o,destination:s,error:O,response:j,totalDuration:R}})),u={},l={},d={};for(const n of c){if(n.skipped)continue;const t={type:n.destination.type||"unknown",data:n.response};e.status.destinations[n.id]||(e.status.destinations[n.id]={count:0,failed:0,duration:0});const o=e.status.destinations[n.id],s=Date.now();n.error?(t.error=n.error,d[n.id]=t,o.failed++,o.lastAt=s,o.duration+=n.totalDuration||0,e.status.failed++):n.queue&&n.queue.length?l[n.id]=t:(u[n.id]=t,o.count++,o.lastAt=s,o.duration+=n.totalDuration||0,e.status.out++)}return Ke({event:n,...Object.keys(u).length&&{done:u},...Object.keys(l).length&&{queued:l},...Object.keys(d).length&&{failed:d}})}async function Re(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:He(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)_e(e,n,t,s,r)}r.debug("init done")}return!0}async function Ne(e,n,t,o,s,r){const{config:i}=n,a=await D(o,i,e);if(a.ignore)return!1;const c=n.type||"unknown",u=e.logger.scope(c),l={collector:e,logger:u,id:t,config:i,data:a.data,rule:a.mapping,ingest:s,env:{...He(n.env,i.env),...r?{respond:r}:{}}};if(void 0!==i.mock)return u.debug("mock",{event:a.event.name}),i.mock;const d=a.mapping,f=a.mappingKey||"* *";if(!(null==d?void 0:d.batch)||!n.pushBatch||void 0!==i.mock){u.debug("push",{event:a.event.name});const t=await $(n.push,"DestinationPush",e.hooks,e.logger)(a.event,l);return u.debug("push done"),t}{if(n.batches=n.batches||{},!n.batches[f]){const o={key:f,events:[],data:[]};n.batches[f]={batched:o,batchFn:O(()=>{const o=n.batches[f].batched,a={collector:e,logger:u,id:t,config:i,data:void 0,rule:d,ingest:s,env:{...He(n.env,i.env),...r?{respond:r}:{}}};u.debug("push batch",{events:o.events.length}),$(n.pushBatch,"DestinationPushBatch",e.hooks,e.logger)(o,a),u.debug("push batch done"),o.events=[],o.data=[]},d.batch)}}const o=n.batches[f];o.batched.events.push(a.event),x(a.data)&&o.batched.data.push(a.data),o.batchFn()}return!0}function Ke(e){return{ok:!(null==e?void 0:e.failed),...e}}function Te(e){const{code:n,config:t={},env:o={},cache:s}=e,{config:r}=ke(e,"before"),{config:i}=ke({...e,config:r},"next"),a={...n.config,...t,...i};s&&(a.cache=s);const c=He(n.env,o);return{...n,config:a,env:c}}function He(e,n){return e||n?n?e&&q(e)&&q(n)?{...e,...n}:n:e:{}}async function Ge(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 Ue(e,n,t,o){let s,r,i=!1;switch(n){case ye.Config:ue(t)&&(re(e.config,t,{shallow:!1}),r=t,i=!0);break;case ye.Consent:if(ue(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);r=n,i=!0}break;case ye.Custom:ue(t)&&(e.custom=re(e.custom,t),r=t,i=!0);break;case ye.Destination:ue(t)&&("code"in t&&ue(t.code)?s=await Pe(e,t,o):ae(t.push)&&(s=await Pe(e,{code:t},o)));break;case ye.Globals:ue(t)&&(e.globals=re(e.globals,t),r=t,i=!0);break;case ye.On:ce(t)&&await async function(e,n,t){const o=e.on,s=o[n]||[],r=P(t)?t:[t];r.forEach(e=>{s.push(e)}),o[n]=s,Ee(e,n,r)}(e,t,o);break;case ye.Ready:i=!0;break;case ye.Run:s=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 Me(e)}(e,t),i=!0;break;case ye.Session:i=!0;break;case ye.Shutdown:await async function(e){const n=e.logger;await Ge(e.sources,"source",n),await Ge(e.destinations,"destination",n),await Ge(e.transformers,"transformer",n),await Ge(e.stores,"store",n)}(e);break;case ye.User:ue(t)&&(re(e.user,t,{shallow:!1}),r=t,i=!0)}return i&&(await async function(e,n,t,o){var s,r;let i,a=t||[];switch(t||(a=e.on[n]||[]),n){case ye.Consent:i=o||e.consent;break;case ye.Session:i=e.session;break;case ye.User:i=o||e.user;break;case ye.Custom:i=o||e.custom;break;case ye.Globals:i=o||e.globals;break;case ye.Config:i=o||e.config;break;case ye.Ready:case ye.Run:default:i=void 0}let c=!1;for(const t of Object.values(e.sources)){if(null==(s=t.config.require)?void 0:s.length){const e=t.config.require.indexOf(n);-1!==e&&t.config.require.splice(e,1)}t.on&&(qe(t)?!1===await R(t.on)(n,i)&&(c=!0):(t.queueOn=t.queueOn||[],t.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});_e(e,o,t,n,i)}});for(const n of Object.values(e.sources))qe(n)&&(null==(r=n.queueOn)?void 0:r.length)&&await Ae(0,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=Te(s);!1!==a.config.queue&&(a.queuePush=[...e.queue]),e.destinations[o]=a}}(e,n),Ee(e,n,a,o),!c}(e,n,void 0,r),s=await Me(e)),s||Ke({ok:!0})}function Be(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:u={},user:l=e.user,nested:d=[],consent:f=e.consent,id:g=ie(),trigger:p="",entity:v=t,action:m=o,timing:h=0,source:y={type:"collector",schema:"4"}}=n;return{name:r,data:i,context:a,globals:c,custom:u,user:l,nested:d,consent:f,id:g,trigger:p,entity:v,action:m,timestamp:s,timing:h,source:y}}async function Fe(e){var n,t;const o=g({globalsStatic:{},sessionStatic:{},run:!0},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:{}},timing:Date.now(),user:e.user||{},sources:{},pending:{destinations:{}},push:void 0,command:void 0};var c,u;a.push=function(e,n){return pe(async(t,o={})=>await ge(async()=>{var s;const r=Date.now(),{id:i,ingest:a,respond:c,mapping:u,preChain:l,include:d,exclude:f}=o;let g=c,p=t;const v=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,m=null!=a?a:le(i||"unknown");if(u){const n=await fe(p,u,e);if(n.ignore)return Ke({ok:!0});if(u.consent&&!de(u.consent,e.consent,n.event.consent))return Ke({ok:!0});p=n.event}if((null==l?void 0:l.length)&&e.transformers&&Object.keys(e.transformers).length>0){const t=await Ie(e,e.transformers,l,p,m,g,i?`source.${i}.next`:void 0);if(null===t.event)return Ke({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=Be(e,o);return Me(e,s,{id:i,ingest:m,respond:g},v)}));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:Ke({ok:!0})}p=t.event}const h=n(p),y=Be(e,h),b=await Me(e,y,{id:i,ingest:m,respond:g},v);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},()=>Ke({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.0.1"},...e})),a.command=(u=Ue,ve(async(e,n,t)=>await me(async()=>await u(c,e,n,t),()=>Ke({ok:!1}))(),"Command",(c=a).hooks,c.logger));const l=e.stores||{};if(a.stores=await async function(e,n={}){const t={};for(const[o,s]of Object.entries(n)){const{code:n,config:r={},env:i={}}=s,a=e.logger.scope("store").scope(o),c={collector:e,logger:a,id:o,config:r,env:i},u=await n(c),l=u.get,d=u.set,f=u.delete;u.get=he(l,"StoreGet",e.hooks,e.logger),u.set=he(d,"StoreSet",e.hooks,e.logger),u.delete=he(f,"StoreDelete",e.hooks,e.logger),t[o]=u}return t}(a,l),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)}}}(l,a.stores,e),!a.stores.__cache){const e=new Map;a.stores.__cache={type:"memory",config:{},get:n=>{const t=e.get(n);if(t){if(!(t.expires&&Date.now()>t.expires))return t.value;e.delete(n)}},set:(n,t,o)=>{e.set(n,{value:t,expires:o?Date.now()+o:void 0})},delete:n=>{e.delete(n)}}}return 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]=Te(i);return s}(a,e.destinations||{}),a.transformers=await async function(e,n={}){const t={};for(const[o,s]of Object.entries(n)){const{code:n,env:r={}}=s,{config:i}=ke(s,"before"),{config:a}=ke({...s,config:i},"next"),c=Object.keys(r).length>0?{...a,env:r}:a,{cache:u}=s,l=u?{...c,cache:u}:c,d=e.logger.scope("transformer").scope(o),f={collector:e,logger:d,id:o,ingest:z(o),config:l,env:r},g=await n(f);t[o]=g}return t}(a,e.transformers||{}),a}async function Je(e){e=e||{};const n=await Fe(e),t=(o=n,{type:"elb",config:{},push:async(e,n,t,s,r,i)=>{if("string"==typeof e&&e.startsWith("walker ")){const s=e.replace("walker ","");return o.command(s,n,t)}let a;if("string"==typeof e)a={name:e},n&&"object"==typeof n&&!Array.isArray(n)&&(a.data=n);else{if(!e||"object"!=typeof e)return Ke({ok:!1});a=e,n&&"object"==typeof n&&!Array.isArray(n)&&(a.data={...a.data||{},...n})}return s&&"object"==typeof s&&(a.context=s),r&&Array.isArray(r)&&(a.nested=r),i&&"object"==typeof i&&(a.custom=i),o.push(a)}});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 Ce(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];t.init&&await T(t.init.bind(t))(),t.config.init=!0,qe(t)&&await Ae(0,t)}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 u=Object.values(n.sources).filter(e=>"elb"!==e.type),l=u.find(e=>e.config.primary);return l?c=l.push:u.length>0&&(c=u[0].push),{collector:n,elb:c}}var Ve=async e=>{let n;return{get flow(){return n},trigger:(t,o)=>async t=>{var s,r,i,a,c,u,l,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 Je({...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==(l=null==(u=e.sources)?void 0:u.session)?void 0:l.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)}}}},Le=(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
|
package/dist/walkerOS.json
CHANGED
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.0.1
|
|
4
|
+
"version": "4.0.1",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"main": "./dist/index.js",
|
|
7
7
|
"module": "./dist/index.mjs",
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
],
|
|
25
25
|
"scripts": {
|
|
26
26
|
"build": "tsup --silent",
|
|
27
|
-
"clean": "rm -rf .turbo && rm -rf
|
|
27
|
+
"clean": "rm -rf .turbo && rm -rf dist",
|
|
28
28
|
"dev": "jest --watchAll --colors",
|
|
29
29
|
"typecheck": "tsc --noEmit",
|
|
30
30
|
"lint": "eslint \"**/*.ts*\"",
|
|
@@ -32,11 +32,11 @@
|
|
|
32
32
|
"update": "npx npm-check-updates -u && npm update"
|
|
33
33
|
},
|
|
34
34
|
"dependencies": {
|
|
35
|
-
"@walkeros/core": "4.0.1
|
|
36
|
-
"@walkeros/web-core": "4.0.1
|
|
35
|
+
"@walkeros/core": "4.0.1",
|
|
36
|
+
"@walkeros/web-core": "4.0.1"
|
|
37
37
|
},
|
|
38
38
|
"devDependencies": {
|
|
39
|
-
"@walkeros/collector": "4.0.1
|
|
39
|
+
"@walkeros/collector": "4.0.1"
|
|
40
40
|
},
|
|
41
41
|
"repository": {
|
|
42
42
|
"url": "git+https://github.com/elbwalker/walkerOS.git",
|