@walkeros/source-demo 4.4.0-next-1785285516008 → 4.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,12 +1,22 @@
1
1
  # @walkeros/source-demo
2
2
 
3
- ## 4.4.0-next-1785285516008
3
+ ## 4.4.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 87937a8: Web sources now send events through the collector's source pipeline,
8
+ so `next`/`before` chains, source mapping, `cache`, `state` and per-source
9
+ status work on web like they do on server. Walker commands are unaffected and
10
+ still go straight to the collector. Flows that already configured these fields
11
+ on a web source will see them take effect for the first time.
4
12
 
5
13
  ### Patch Changes
6
14
 
7
15
  - Updated dependencies [6c89afb]
8
16
  - Updated dependencies [393b942]
9
- - @walkeros/core@4.4.0-next-1785285516008
17
+ - Updated dependencies [034b1de]
18
+ - Updated dependencies [d00e2bd]
19
+ - @walkeros/core@4.4.0
10
20
 
11
21
  ## 4.3.2
12
22
 
package/dist/dev.js CHANGED
@@ -1 +1 @@
1
- "use strict";var e,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,o=Object.getOwnPropertyNames,r=Object.prototype.hasOwnProperty,s=(e,n)=>{for(var o in n)t(e,o,{get:n[o],enumerable:!0})},i={};s(i,{examples:()=>g,schemas:()=>a}),module.exports=(e=i,((e,s,i,a)=>{if(s&&"object"==typeof s||"function"==typeof s)for(let c of o(s))r.call(e,c)||c===i||t(e,c,{get:()=>s[c],enumerable:!(a=n(s,c))||a.enumerable});return e})(t({},"__esModule",{value:!0}),e));var a={};s(a,{MappingSchema:()=>l,SettingsSchema:()=>d,mapping:()=>f,settings:()=>p});var c=require("@walkeros/core/dev"),u=require("@walkeros/core/dev"),d=u.z.object({events:u.z.array(u.z.object({delay:u.z.number().optional().describe("Milliseconds to wait before pushing this event")}).passthrough().describe("Partial walkerOS event with optional delay")).describe("Events to push to the collector on init")}),l=require("@walkeros/core/dev").z.object({}),p=(0,c.zodToSchema)(d),f=(0,c.zodToSchema)(l),g={};s(g,{createTrigger:()=>pt,env:()=>h,step:()=>I});var h={};s(h,{init:()=>w,push:()=>b,simulation:()=>k});var m=async()=>({ok:!0}),v=()=>{},y={error:v,warn:v,info:v,debug:v,throw:e=>{throw"string"==typeof e?new Error(e):e},json:v,scope:()=>y},w=void 0,b={push:m,command:m,elb:m,logger:y},k=["call:elb"],I={};s(I,{delayedEvent:()=>E,pageView:()=>S});var S={title:"Page view",description:"A simple event object is pushed through the demo source as a walker elb call for learning purposes.",in:{name:"page view",data:{title:"Home"}},out:[["elb",{name:"page view",data:{title:"Home"}}]]},E={title:"Delayed event",description:"An event object with a delay field is pushed through the demo source after the specified wait.",in:{name:"product add",data:{id:"abc",name:"Test Product"},delay:100},out:[["elb",{name:"product add",data:{id:"abc",name:"Test Product"}}]]},O=require("@walkeros/core"),C=require("@walkeros/core"),q=require("@walkeros/core"),x=require("@walkeros/core"),j=(require("@walkeros/core"),require("@walkeros/core")),A=require("@walkeros/core"),$=require("@walkeros/core"),D=require("@walkeros/core"),_=require("@walkeros/core"),T=require("@walkeros/core"),M=require("@walkeros/core"),P=require("@walkeros/core"),R=require("@walkeros/core"),z=require("@walkeros/core"),B=require("@walkeros/core"),K=require("@walkeros/core"),F={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",Scoped:"_",Session:"session",Shutdown:"shutdown",User:"user",Walker:"walker"};function H(e,t,n){return{traceId:e.source?.trace??t?._meta.trace??n.trace,sourceId:t?._meta.path[0],parentEventId:t?._meta.parentEventId}}function G(e,t){const n=e.status.startedAt,o={flowId:e.name??"default",stepId:t.stepId,stepType:t.stepType,phase:t.phase,eventId:t.eventId,timestamp:new Date(t.now).toISOString(),elapsedMs:t.now-n};return t.traceId&&(o.traceId=t.traceId),t.sourceId&&(o.sourceId=t.sourceId),t.parentEventId&&(o.parentEventId=t.parentEventId),o}function U(e){return"object"==typeof e&&null!==e}function V(e,t,n){if(null===e||"object"!=typeof e)return e;if(n>=8)return e;const o=t.get(e);if(void 0!==o)return o;if(Array.isArray(e)){const o=[];t.set(e,o);for(const r of e)o.push(V(r,t,n+1));return o}const r={};t.set(e,r);for(const[o,s]of Object.entries(e))r[o]="function"==typeof s?s:V(s,t,n+1);return r}function N(e){const t=[],n=[],{simulation:o,...r}=e,s=V(r,new WeakMap,0);for(const e of o){const o=(0,j.parseCallPath)(e);if(0===o.length)continue;const r=o.join(".");if(o.length-1>=8){n.push(r);continue}let i=s,a=!0;for(let e=0;e<o.length-1;e++){const t=i[o[e]];if(!U(t)){a=!1;break}i=t}const c=o[o.length-1];if(!a||!(c in i)){n.push(r);continue}const u=i[c];"function"==typeof u?i[c]=function(...e){return t.push({fn:r,args:e,ts:Date.now()}),u.apply(this,e)}:n.push(r)}return{wrappedEnv:s,calls:t,unresolved:n}}function W(e,t){try{return e[t]}catch{return"[unreadable]"}}function L(e){const t=new WeakSet,n=(e,o)=>{if(null===e)return null;if("function"==typeof e)return"[function]";if("string"==typeof e||"boolean"==typeof e)return e;if("number"==typeof e)return Number.isFinite(e)?e:null;if("bigint"==typeof e)return String(e);if("object"!=typeof e)return;const r=e;if(t.has(r))return"[circular]";if(o>=6)return"[truncated]";let s;t.add(r);try{if(Array.isArray(r))s=r.map(e=>n(e,o+1));else if(function(e){const t=Object.getPrototypeOf(e);return t===Object.prototype||null===t}(r)){const e={};for(const t of Object.keys(r))e[t]=n(W(r,t),o+1);s=e}else s=function(e){try{return String(e)}catch{return"[object]"}}(r)}catch{s="[unreadable]"}return t.delete(r),s};return e.map(e=>n(e,0))}function Y(e){return e.map(e=>({fn:e.fn,args:L(e.args),ts:e.ts}))}function J(e,t,n,o){if(!Number.isFinite(n.max)||n.max<=0)throw new Error(`pushBounded: max must be > 0 (got ${n.max})`);if("dropNewest"===(n.onOverflow??"dropOldest"))return e.length>=n.max?(o&&o([t]),{appended:!1,dropped:1}):(e.push(t),{appended:!0,dropped:0});const r=[];for(;e.length>=n.max;)r.push(e.shift());return e.push(t),r.length>0&&o&&o(r),{appended:!0,dropped:r.length}}var X=new WeakMap;function Q(e,t,n,o){X.get(e)||(X.set(e,!0),t.warn(n,o))}function Z(e){X.delete(e)}var ee=()=>Date.now();function te(e){if(void 0!==e)return"number"==typeof e?{threshold:e,cooldown:3e4}:{threshold:e.threshold??5,cooldown:e.cooldown??3e4}}function ne(e,t,n,o,r){if("partial"===n)return;const s=((i=e)[a=t]||(i[a]={state:"closed",consecutiveFailures:0}),i[a]);var i,a;return"success"===n?(s.consecutiveFailures=0,s.state="closed",s.probing=!1,void(s.openUntil=void 0)):(s.consecutiveFailures+=1,"half-open"===s.state?(s.state="open",s.probing=!1,void(s.openUntil=ee()+r)):void(s.consecutiveFailures>=o&&(s.state="open",s.probing=!1,s.openUntil=ee()+r)))}function oe(e,t){return e.status.destinations[t]||(e.status.destinations[t]={count:0,failed:0,duration:0,queuePushSize:0,dlqSize:0}),e.status.destinations[t]}function re(e,t,n,o){e.dropped[t]||(e.dropped[t]={});const r=e.dropped[t];return r[n]=(r[n]??0)+o,r[n]}function se(e,t,n,o,r){const s=(0,D.stepId)(t,n);return(t,i)=>{try{if(i)return r?function(e,t,n,o,r,s){const i=t.dlq=t.dlq||[],a={max:t.config.dlqMax??100},c=J(i,[o,r],a);if(c.dropped>0){const t=re(e.status,(0,D.stepId)("destination",n),"dlq",c.dropped);Q(i,s,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:n,cap:a.max,droppedCount:t})}else i.length<a.max&&Z(i);const u=oe(e,n);u.failed++,u.dlqSize=i.length,e.status.failed++;const d=te(t.config.breaker);if(d){const o=t.config.id||n;ne(e.status.breakers,(0,D.stepId)("destination",o),"transport-failure",d.threshold,d.cooldown)}}(e,r,n,i,t,o):e.status.failed++,void o.error("report error",{error:t instanceof Error?t.message:String(t),event:i.name});e.status.connectionErrors[s]=(e.status.connectionErrors[s]??0)+1,o.error("connection error",{error:t instanceof Error?t.message:String(t)})}catch{}}}function ie(e,t){return e.storeId&&t.stores[e.storeId]?t.stores[e.storeId]:t.stores.__cache}function ae(e,t){return e?t.stores[e]:t.stores.__cache}function ce(e){const t={};for(const[n,o]of Object.entries(e)){const e=o.config?.next;"string"==typeof e||Array.isArray(e)&&e.every(e=>"string"==typeof e)?t[n]={next:e}:t[n]={}}return t}function ue(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 de(e,t={}){if(!e)return[];if(Array.isArray(e))return e;const n=[],o=new Set;let r=e;for(;r&&t[r]&&!o.has(r);){o.add(r),n.push(r);const e=t[r].next;if(Array.isArray(e)){n.push(...e);break}r=e}return n}async function le(e,t,n){if(t.init&&!t.config.init){const o=t.type||"unknown",r=e.logger.scope(`transformer:${o}`),s={collector:e,logger:r,id:n,ingest:(0,T.createIngest)(n),config:t.config,env:he(t.config.env),reportError:se(e,"transformer",n,r)};r.debug("init");const i=await(0,T.useHooks)(t.init,"TransformerInit",e.hooks,e.logger)(s);if(!1===i)return!1;t.config={...i||t.config,env:i?.env||t.config.env,init:!0},r.debug("init done")}return!0}async function pe(e,t,n,o,r,s){const i=t.type||"unknown",a=e.logger.scope(`transformer:${i}`),c={collector:e,logger:a,id:n,ingest:r,config:t.config,env:{...he(t.config.env),...s?{respond:s}:{}},reportError:se(e,"transformer",n,a)};a.debug("push",{event:o.name});const u="string"==typeof o.id?o.id:"",{traceId:d,sourceId:l,parentEventId:p}=H(o,r,e),f=Date.now(),g=G(e,{stepId:(0,T.stepId)("transformer",n),stepType:"transformer",phase:"in",eventId:u,now:f,traceId:d,sourceId:l,parentEventId:p});g.inEvent=o,(0,T.emitStep)(e,g);try{const r=await(0,T.useHooks)(t.push,"TransformerPush",e.hooks,e.logger)(o,c),s=Date.now(),i=G(e,{stepId:(0,T.stepId)("transformer",n),stepType:"transformer",phase:"out",eventId:u,now:s,traceId:d,sourceId:l,parentEventId:p});return i.durationMs=s-f,i.outEvent=r,(0,T.emitStep)(e,i),a.debug("push done"),r}catch(t){const o=Date.now(),r=G(e,{stepId:(0,T.stepId)("transformer",n),stepType:"transformer",phase:"error",eventId:u,now:o,traceId:d,sourceId:l,parentEventId:p});throw r.durationMs=o-f,r.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},(0,T.emitStep)(e,r),t}}function fe(e,t){return e?{...e,_meta:{...e._meta,path:[...e._meta.path]}}:(0,T.createIngest)(t)}async function ge(e,t,n,o,r,s,i){r||(r=(0,T.createIngest)(n[0]??"chain")),i&&r._meta&&(r._meta.chainPath=i);let a=o,c=s;for(const o of n){const s=t[o];if(!s){e.logger.warn(`Transformer not found: ${o}`);continue}if(r&&r._meta&&r._meta.path.length>256)return e.logger.error(`Max path length exceeded at ${o}`),{event:null,respond:c};if(r&&r._meta&&(r._meta.hops++,r._meta.path.push(o)),!await(0,T.tryCatchAsync)(le,t=>{if(t instanceof T.FatalError)throw t;return e.status.failed++,e.logger.scope(`transformer:${s.type||"unknown"}`).error("transformer init failed",{transformer:o,error:t}),!1})(e,s,o))return{event:null,respond:c};if(i&&void 0!==s.config?.chainMocks?.[i]){const t=s.config.chainMocks[i];e.logger.scope(`transformer:${s.type||"unknown"}`).debug("chainMock",{chain:i}),a=t;continue}if(void 0!==s.config?.mock){e.logger.scope(`transformer:${s.type||"unknown"}`).debug("mock"),a=s.config.mock;continue}if(s.config?.disabled)continue;const u=s.config?.cache,d=u?(0,T.compileCache)(u):void 0,l=d?ie(d,e):void 0,p=s.config?.state?(0,T.compileState)(s.config.state):void 0,f=p?.filter(e=>"get"===e.mode),g=p?.filter(e=>"set"===e.mode),h=async t=>g&&0!==g.length?(0,T.applyState)(g,t=>ae(t,e),t,e):t;let m;if(d&&l){const e=(0,T.buildCacheContext)(r,a),t=await(0,T.checkCache)(d,l,e);if("HIT"===t?.status&&t.value){if(a=t.value,d.stop)return{event:a,respond:c,stopped:!0};continue}"MISS"===t?.status&&(m={key:t.key,ttl:t.rule.ttl})}const v=s.config.before;if(v){const n=(0,T.getNextSteps)(v,(0,T.buildCacheContext)(r,a));if(1===n.length){const o=de(n[0],ce(t));if(o.length>0){const n=await ge(e,t,o,a,r,c,i);if(null===n.event)return{event:null,respond:n.respond??c};if(n.stopped)return{event:Array.isArray(n.event)?n.event[0]:n.event,respond:n.respond??c,stopped:!0};n.respond&&(c=n.respond),a=Array.isArray(n.event)?n.event[0]:n.event}}else n.length>1&&await Promise.all(n.map(n=>(0,T.tryCatchAsync)(ge,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,de(n,ce(t)),a,fe(r,n),void 0,i)))}f&&f.length>0&&(a=await(0,T.applyState)(f,t=>ae(t,e),a,e));const y=await(0,T.tryCatchAsync)(pe,t=>(e.logger.scope(`transformer:${s.type||"unknown"}`).error("Push failed",{error:t}),!1))(e,s,o,a,r,c);if(!1===y)return{event:null,respond:c,droppedBy:o};if(Array.isArray(y)){const s=n.slice(n.indexOf(o)+1),u=await Promise.all(y.map(async n=>{const o=await h(n.event||a),u=fe(r,"unknown");if(n.next){const r=(0,T.getNextSteps)(n.next,(0,T.buildCacheContext)(u,o));if(0===r.length)return{event:o,respond:c};if(1===r.length){const n=de(r[0],ce(t));return n.length>0?ge(e,t,n,o,u,c,i):{event:o,respond:c}}return(await Promise.all(r.map(n=>(0,T.tryCatchAsync)(ge,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,de(n,ce(t)),o,fe(u,n),void 0,i)))).map(e=>({event:e.event,respond:void 0}))}return s.length>0?ge(e,t,s,o,u,c,i):{event:o,respond:c}}));let d=c;const l=[];for(const e of u.flat())if(null!==e)if(e&&"object"==typeof e&&"event"in e){const t=e;if(t.respond&&(d=t.respond),null===t.event)continue;Array.isArray(t.event)?l.push(...t.event):l.push(t.event)}else l.push(e);return 0===l.length?{event:null,respond:d}:1===l.length?{event:l[0],respond:d}:{event:l,respond:d}}if(y&&"object"==typeof y){const{event:n,respond:o,next:s}=y;if(o&&(c=o),void 0!==s){const o=await h(n||a),u=(0,T.getNextSteps)(s,(0,T.buildCacheContext)(r,o));if(0===u.length){a=o;continue}if(1===u.length){const n=de(u[0],ce(t));return n.length>0?ge(e,t,n,o,r,c,i):(e.logger.warn(`Branch target not found: ${JSON.stringify(s)}`),{event:null,respond:c})}return await Promise.all(u.map(n=>(0,T.tryCatchAsync)(ge,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,de(n,ce(t)),o,fe(r,n),void 0,i))),{event:null,respond:void 0}}n&&(a=n)}g&&g.length>0&&(a=await(0,T.applyState)(g,t=>ae(t,e),a,e)),m&&l&&(0,T.storeCache)(l,m.key,a,m.ttl);const w=s.config.next,b="string"==typeof w||Array.isArray(w)&&w.every(e=>"string"==typeof e),k=void 0!==w&&!b;if((!y||"object"==typeof y&&!y.next)&&k){const n=(0,T.getNextSteps)(s.config.next,(0,T.buildCacheContext)(r,a));if(1===n.length){const o=de(n[0],ce(t));return o.length>0?ge(e,t,o,a,r,c,i):{event:a,respond:c}}return n.length>1?(await Promise.all(n.map(n=>(0,T.tryCatchAsync)(ge,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,de(n,ce(t)),a,fe(r,n),void 0,i))),{event:null,respond:void 0}):{event:a,respond:c}}}return{event:a,respond:c}}function he(e){return e&&(0,T.isObject)(e)?e:{}}function me(e){return"string"==typeof e||!(!Array.isArray(e)||!e.every(e=>"string"==typeof e))}async function ve(e,t,n){if(!t.on||!t.queueOn?.length)return;const o=t.queueOn;t.queueOn=[];const r=n||t.config?.id||"unknown";for(const{type:n,data:s}of o)qe(n)&&!De(e,t,n)||(await(0,_.tryCatchAsync)(t.on,t=>{if(t instanceof _.FatalError)throw t;e.status.failed++,e.logger.scope("source").error("source on flush failed",{sourceId:r,type:n,error:t})})(n,s),qe(n)&&$e(e,t,n))}function ye(e){return Boolean(e.config.init)&&!e.config.require?.length}function we(e){return"object"==typeof e&&null!==e}async function be(e,t,n){const{code:o,config:r={},env:s={},primary:i,next:a,before:c,cache:u}=n,d=r.state??n.state,l=d?(0,_.compileState)(d):void 0,p=u,f=p?(0,_.compileCache)({...p,stop:p.stop??!0}):void 0,g=me(a)?de(a,ce(e.transformers)):void 0,h=me(c)?de(c,ce(e.transformers)):void 0,m=s.push,v=m??e.push,y=Boolean(m),w=async(n,o,s)=>{let i;const u=y||"string"==typeof n.id&&""!==n.id?n:{...n,id:(0,_.getSpanId)()},d=h??(void 0!==c?(()=>{const t=(0,_.getNextSteps)(c,(0,_.buildCacheContext)(s.ingest));return 0===t.length?[]:de(1===t.length?t[0]:t,ce(e.transformers))})():[]);let p=[u];if(d.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const n=await ge(e,e.transformers,d,u,s.ingest,s.respond,`source.${t}.before`);if(null===n.event)return{ok:!0};if(n.stopped)return n.respond&&(s.respond=n.respond),{ok:!0};n.respond&&(s.respond=n.respond);const o="string"==typeof u.id?u.id:"";if(Array.isArray(n.event))p=n.event.map(e=>""!==o&&e.id===o?{...e,id:(0,_.getSpanId)()}:e);else{const e=n.event;p=""===o||"string"==typeof e.id&&""!==e.id?[e]:[{...e,id:o}]}}if(f){const t=ie(f,e);if(t){const n=(0,_.buildCacheContext)(s.ingest),o=await(0,_.checkCache)(f,t,n);if(o){if("HIT"===o.status&&void 0!==o.value&&f.stop){let t=o.value;return o.rule.update&&(t=await(0,_.applyUpdate)(t,o.rule.update,{...n,cache:{status:"HIT"}},e)),s.respond?.(t),{ok:!0}}if("MISS"===o.status&&f.stop&&s.respond){const r=s.respond,a=o.rule.update,c={...n,cache:{status:"MISS"}},u=o.key,d=o.rule.ttl,l=n=>{(0,_.storeCache)(t,u,n,d),a?i=(async()=>{const t=await(0,_.applyUpdate)(n,a,c,e);r(t)})():r(n)};s.respond=l}"MISS"!==o.status||f.stop||(0,_.storeCache)(t,o.key,!0,o.rule.ttl)}}}const m=g?{kind:"single",preChain:g}:void 0!==a?(()=>{const t=(0,_.getNextSteps)(a,(0,_.buildCacheContext)(s.ingest));return 0===t.length?{kind:"single",preChain:[]}:1===t.length?{kind:"single",preChain:de(t[0],ce(e.transformers))}:{kind:"many",branches:t.map(t=>de(t,ce(e.transformers)))}})():{kind:"single",preChain:[]};!y&&l&&l.length>0&&(p=await Promise.all(p.map(t=>(0,_.applyState)(l,t=>ae(t,e),t,e))));let w={ok:!0};for(const n of p)"many"===m.kind?(await Promise.all(m.branches.map((i,a)=>(0,_.tryCatchAsync)(async()=>y?v(n):v(n,{...o,id:t,ingest:fe(s.ingest,`${t}.${a}`),respond:void 0,mapping:r,preChain:i}),t=>(e.logger.scope("source:many").error(`many branch ${a} failed`,{error:t}),{ok:!0}))())),w={ok:!0}):w=y?await v(n):await v(n,{...o,id:t,ingest:s.ingest,respond:s.respond,mapping:r,preChain:m.preChain});return i&&await i,w},b=async n=>{const o=(0,_.createIngest)(t),s=(0,_.parseTraceparent)(function(e){if(!we(e))return;const t=e.headers;if(we(t)){if("get"in(n=t)&&"function"==typeof n.get)return t.get("traceparent")??void 0;if("traceparent"in t)return t.traceparent;for(const e of Object.keys(t))if("traceparent"===e.toLowerCase())return t[e]}var n}(n));if(s&&(o._meta.trace=s.trace,o._meta.parentEventId=s.parentSpan),!r.ingest||void 0===n)return o;const i=await(0,_.getMappingValue)(n,r.ingest,{collector:e});return{...o,...i,_meta:o._meta}},k=e.logger.scope("source").scope(t),I={command:e.command,sources:e.sources,elb:e.elb,logger:k,...s,push:async(e,n={})=>{const o={ingest:(0,_.createIngest)(t),respond:void 0};return w(e,n,o)}},S={collector:e,logger:k,id:t,config:r,env:I,withScope:async(e,t,n)=>{const o={ingest:await b(e),respond:t};return n({...I,push:(e,t={})=>w(e,t,o),ingest:o.ingest,respond:o.respond})},reportError:se(e,"source",t,k)},E=await(0,_.tryCatchAsync)(o,n=>{if(n instanceof _.FatalError)throw n;e.status.failed++,e.logger.scope("source").error("source factory failed",{sourceId:t,error:n})})(S);if(!E)return;const O=E.type||"unknown",C=e.logger.scope(O).scope(t);return I.logger=C,i&&(E.config={...E.config,primary:i}),E}async function ke(e){for(const[t,n]of Object.entries(e.sources)){if(ye(n))continue;const o=n.config.require;if(!o?.length)continue;const r=o.filter(t=>!je(e,t));r.length!==o.length&&(n.config.require=r,ye(n)&&await ve(e,n,t))}for(const[t,n]of Object.entries(e.pending.destinations)){if(!e.pending.destinations[t]||e.destinations[t])continue;const o=n.config?.require;if(!o)continue;const r=o.filter(t=>!je(e,t));if(n.config&&(n.config.require=r),r.length>0)continue;delete e.pending.destinations[t];const s=Je(n);!1!==s.config.queue&&(s.queuePush=[...e.queue]),e.destinations[t]=s}}function Ie(e){if("object"!=typeof e||null===e)return!1;if(!("logger"in e))return!1;const t=e.logger;return"object"==typeof t&&null!==t&&"scope"in t&&"function"==typeof t.scope}var Se=!1;function Ee(){Se||(Se=!0,"undefined"!=typeof console&&"function"==typeof console.warn&&console.warn("walkerOS: ignored an on-dispatch call with a non-collector argument"))}function Oe(e,t,n,o){if(n instanceof A.FatalError)throw n;e.logger.scope("on").error("on callback failed",{kind:t,...o,error:n})}var Ce=[F.Consent,F.User,F.Globals,F.Custom];function qe(e){return Ce.includes(e)}function xe(e,t){switch(t){case F.Consent:return Object.keys(e.consent).length>0;case F.User:return Object.keys(e.user).length>0;case F.Globals:return Object.keys(e.globals).length>0;case F.Custom:return Object.keys(e.custom).length>0;default:return!1}}function je(e,t){switch(t){case F.Consent:case F.User:case F.Globals:case F.Custom:return xe(e,t);case F.Run:case F.Ready:return!0===e.allowed;default:return e.seenEvents.has(String(t))}}function Ae(e,t){return e.cellVersion[String(t)]??0}function $e(e,t,n){let o=e.delivery.get(t);o||(o={},e.delivery.set(t,o)),o[String(n)]=Ae(e,n)}function De(e,t,n){return e.allowed&&Ae(e,n)>function(e,t,n){const o=e.delivery.get(t),r=o?.[String(n)];return void 0===r?-1:r}(e,t,n)}function _e(e,t,n){const o=e.cascade;if(!o)return!0;let r=o.counts.get(t);r||(r={},o.counts.set(t,r));const s=String(n),i=(r[s]||0)+1;return r[s]=i,i<=8||(9===i&&e.logger.error("state delivery did not converge",{type:s}),!1)}function Te(e,t){return{collector:e,logger:e.logger.scope("on").scope(String(t))}}function Me(e,t,n,o,r){if(!t.on)return;const s=t.type||"unknown",i=e.logger.scope(s).scope("on").scope(o),a={collector:e,logger:i,id:n,config:t.config,data:r,env:Xe(t.env,t.config.env),reportError:se(e,"destination",n,i,t)};(0,$.tryCatch)(t.on,t=>Oe(e,"destination",t,{destId:n,type:o}))(o,a)}function Pe(e,t,n,o){if(!Ie(e))return void Ee();const r=Re(e,t,o);if(n.length)switch(t){case F.Consent:!function(e,t,n){const o=n||e.consent,r=Te(e,F.Consent);t.forEach(t=>{De(e,t,F.Consent)&&_e(e,t,F.Consent)&&(Object.keys(o).filter(e=>e in t).forEach(n=>{(0,$.tryCatch)(t[n],t=>Oe(e,"consent",t,{key:n}))(o,r)}),$e(e,t,F.Consent))})}(e,n,o);break;case F.Ready:!function(e,t){if(!e.allowed)return;const n=Te(e,F.Ready);t.forEach(t=>{(0,$.tryCatch)(t,t=>Oe(e,"ready",t))(void 0,n)})}(e,n);break;case F.Run:!function(e,t){if(!e.allowed)return;const n=Te(e,F.Run);t.forEach(t=>{(0,$.tryCatch)(t,t=>Oe(e,"run",t))(void 0,n)})}(e,n);break;case F.Session:!function(e,t){if(!e.session)return;const n=Te(e,F.Session);t.forEach(t=>{(0,$.tryCatch)(t,t=>Oe(e,"session",t))(e.session,n)})}(e,n);break;default:{const o=Te(e,t),s=qe(t);n.forEach(n=>{"function"==typeof n&&(s&&!De(e,n,t)||s&&!_e(e,n,t)||((0,$.tryCatch)(n,n=>Oe(e,"generic",n,{type:t}))(r,o),s&&$e(e,n,t)))});break}}}function Re(e,t,n){switch(t){case F.Consent:return n||e.consent;case F.Session:return e.session;case F.User:return n||e.user;case F.Custom:return n||e.custom;case F.Globals:return n||e.globals;case F.Config:return n||e.config;default:return}}async function ze(e,t,n,o,r){if(!t.on)return!1;if(qe(o)&&!De(e,t,o))return!1;if(qe(o)&&!_e(e,t,o))return!1;const s=await(0,$.tryCatchAsync)(t.on,t=>Oe(e,"source",t,{sourceId:n,type:o}))(o,r);return qe(o)&&$e(e,t,o),!1===s}function Be(e){return"number"==typeof e&&e>0?e:1e4}var Ke=class extends Error{constructor(e){super(e),this.name="DestinationTimeoutError"}};function Fe(e,t,n){let o;const r=new Promise((e,r)=>{o=setTimeout(()=>r(new Ke(n)),t)});return Promise.race([e,r]).finally(()=>{o&&clearTimeout(o)})}var He=Object.freeze({batched:!0});function Ge(e){return e===He}function Ue(e){return void 0===e?{}:"number"==typeof e?{wait:e}:{wait:e.wait,size:e.size,age:e.age}}function Ve(e,t,n){if(!e)return[];if(Array.isArray(e)&&e.every(e=>"string"==typeof e))return de(e,t);if("string"==typeof e)return de(e,t);const o=(0,x.getNextSteps)(e,(0,x.buildCacheContext)(n));return 0===o.length?[]:1===o.length?de(o[0],t):de(o,t)}async function Ne(e,t,n={},o){const{allowed:r,consent:s,user:i}=e;if(!r)return Ye({ok:!1});if(t){const n=e.config.queueMax;if(void 0===n)throw new Error("Collector.Config.queueMax is undefined; defaults must be seeded by collector()");const o=J(e.queue,t,{max:n});if(o.dropped>0){const t=re(e.status,(0,x.stepId)("collector"),"queue",o.dropped);Q(e.queue,e.logger,"collector.queue overflow; oldest events dropped",{buffer:"queue",cap:n,droppedCount:t})}else e.queue.length<n&&Z(e.queue);e.status.in++}o||(o=e.destinations);const a=e.transformers?ce(e.transformers):{},c=await Promise.all(Object.entries(o||{}).map(async([o,r])=>{if(r.config.disabled)return{id:o,destination:r,skipped:!0};const c=r.config.id||o,u=(0,x.stepId)("destination",c),d=te(r.config.breaker);if(d&&function(e,t,n){const o=e[t];if(!o||"closed"===o.state)return!1;if("half-open"===o.state)return!0===o.probing;const r=ee();return void 0!==o.openUntil&&r<o.openUntil||(o.state="half-open",o.probing=!0,o.openUntil=r+n,!1)}(e.status.breakers,u,d.cooldown))return{id:o,destination:r,skipped:!0};const l=t=>{d&&ne(e.status.breakers,u,t,d.threshold,d.cooldown)},p=()=>{d&&function(e,t){const n=e[t];n&&"half-open"===n.state&&!0===n.probing&&(n.state="open",n.probing=!1)}(e.status.breakers,u)};let f=(r.queuePush||[]).map(e=>({...e,consent:s}));r.queuePush=[],t&&f.push((0,x.clone)(t));const g=n.ingest?{...n.ingest,_meta:{...n.ingest._meta,path:[...n.ingest._meta.path]}}:(0,x.createIngest)("unknown");if(!f.length&&!r.queueOn?.length)return p(),{id:o,destination:r,skipped:!0};if(!f.length&&r.queueOn?.length){if(!(0,x.getGrantedConsent)(r.config.consent,s))return p(),{id:o,destination:r,skipped:!0};let t=!1;try{t=await We(e,r,o,!0)}catch(t){e.status.failed++;const n=r.type||"unknown";e.logger.scope(n).error("destination init failed",{error:t instanceof Error?t.message:String(t)}),l("transport-failure")}return p(),{id:o,destination:r,skipped:!t}}const h=[],m=f.filter(t=>{const n=(0,x.getGrantedConsent)(r.config.consent,s,t.consent);if(n)return t.consent=n,h.push(t),!1;const i=G(e,{stepId:(0,x.stepId)("destination",o),stepType:"destination",phase:"skip",eventId:"string"==typeof t.id?t.id:"",now:Date.now(),...H(t,g,e)});return i.skipReason="consent",s&&(i.consent={...s}),r.config.consent&&(i.meta={required:{...r.config.consent}}),(0,x.emitStep)(e,i),!0});if(m.length>0){const t=r.queuePush,n=r.config.id||o,s={max:r.config.queueMax??1e3};let i=0;for(const e of m)i+=J(t,e,s).dropped;if(i>0){oe(e,n);const o=re(e.status,(0,x.stepId)("destination",n),"queue",i);Q(t,e.logger.scope(r.type||"unknown"),"destination.queuePush overflow; oldest events dropped",{buffer:"queuePush",destination:n,cap:s.max,droppedCount:o})}else t.length<s.max&&Z(t)}if(!h.length)return p(),{id:o,destination:r,queue:f};let v,y,w=!1;try{w=await We(e,r,o,!0)}catch(t){e.status.failed++;const n=r.type||"unknown";e.logger.scope(n).error("destination init failed",{error:t instanceof Error?t.message:String(t)}),l("transport-failure")}if(!w)return p(),{id:o,destination:r,queue:f};r.dlq||(r.dlq=[]);const b=Ve(r.config.before,a,g),k=r.config.next,I=r.config?.cache,S=I?(0,x.compileCache)(I):void 0,E=S?ie(S,e):void 0,O=r.config?.state?(0,x.compileState)(r.config.state):void 0,C=O?.filter(e=>"get"===e.mode),q=O?.filter(e=>"set"===e.mode);let j=0,A=0;return await Promise.all(h.map(async t=>{let s;if(t.user=(0,x.assign)(i,t.user),S?.stop&&E){const e=(0,x.buildCacheContext)(g,t),n=await(0,x.checkCache)(S,E,e);if("HIT"===n?.status)return t;"MISS"===n?.status&&(s={key:n.key,ttl:n.rule.ttl})}let c=t,u=n.respond;if(b.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const r=await ge(e,e.transformers,b,t,g,n.respond,`destination.${o}.before`);if(null===r.event)return t;r.respond&&(u=r.respond),c=Array.isArray(r.event)?r.event[0]:r.event}if(S&&!S.stop&&E){const e=(0,x.buildCacheContext)(g,c),n=await(0,x.checkCache)(S,E,e);if("HIT"===n?.status)return t;"MISS"===n?.status&&(s={key:n.key,ttl:n.rule.ttl})}C&&C.length>0&&c&&(c=await(0,x.applyState)(C,t=>ae(t,e),c,e));const d=Date.now();let l=!1;const p=await(0,x.tryCatchAsync)(Le,t=>{const n=r.type||"unknown";e.logger.scope(n).error("Push failed",{error:t,event:c.name}),v=t,l=!0;const s=r.dlq,i=r.config.id||o,a={max:r.config.dlqMax??100},u=J(s,[c,t],a);if(u.dropped>0){oe(e,i);const t=re(e.status,(0,x.stepId)("destination",i),"dlq",u.dropped);Q(s,e.logger.scope(r.type||"unknown"),"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:i,cap:a.max,droppedCount:t})}else s.length<a.max&&Z(s)})(e,r,o,c,g,u);if(j+=Date.now()-d,s&&E&&void 0===r.config.mock&&(0,x.storeCache)(E,s.key,p??!0,s.ttl),!l&&!Ge(p)&&q&&q.length>0&&c&&(c=await(0,x.applyState)(q,t=>ae(t,e),c,e)),void 0===p||Ge(p)||(y=p),Ge(p)&&A++,!l&&k){void 0!==p&&(g._response=p);const t=Ve(k,a,g);if(t.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const n=await ge(e,e.transformers,t,c,g,u,`destination.${o}.next`);n.respond&&(u=n.respond)}}return t})),{id:o,destination:r,error:v,response:y,totalDuration:j,batchedCount:A,allowedCount:h.length,canonicalId:c,breakerConfig:d}})),u={},d={},l={};for(const t of c){if(t.skipped)continue;const n=t.destination,o={type:n.type||"unknown",data:t.response};oe(e,t.id);const r=e.status.destinations[t.id],s=Date.now();r.queuePushSize=n.queuePush?.length??0,r.dlqSize=n.dlq?.length??0;const i=t.breakerConfig,a=t.canonicalId?(0,x.stepId)("destination",t.canonicalId):void 0,c=t=>{i&&a&&ne(e.status.breakers,a,t,i.threshold,i.cooldown)};if(t.error)o.error=t.error,l[t.id]=o,r.failed++,r.lastAt=s,r.duration+=t.totalDuration||0,e.status.failed++,c("transport-failure");else if(t.queue&&t.queue.length)d[t.id]=o;else{const n=t.batchedCount??0,i=t.allowedCount??0;(Math.max(0,i-n)>0||0===i)&&(u[t.id]=o,r.count++,r.lastAt=s,r.duration+=t.totalDuration||0,e.status.out++,c("success"))}}return Ye({event:t,...Object.keys(u).length&&{done:u},...Object.keys(d).length&&{queued:d},...Object.keys(l).length&&{failed:l}})}async function We(e,t,n,o=!1){if(t.init&&!t.config.init){if(!o&&function(e){const t=e.config.consent;return!!t&&Object.keys(t).length>0}(t))return e.logger.scope(t.type||"unknown").debug("init blocked: consent gate not cleared"),!1;const r=t.type||"unknown",s=e.logger.scope(r),i={collector:e,logger:s,id:n,config:t.config,env:Xe(t.env,t.config.env),reportError:se(e,"destination",n,s,t)};s.debug("init");const a=Date.now();let c;(0,x.emitStep)(e,G(e,{stepId:(0,x.stepId)("destination",n),stepType:"destination",phase:"init",eventId:"",now:a}));try{c=await(0,x.useHooks)(t.init,"DestinationInit",e.hooks,e.logger)(i)}catch(t){const o=Date.now(),r=G(e,{stepId:(0,x.stepId)("destination",n),stepType:"destination",phase:"error",eventId:"",now:o});throw r.durationMs=o-a,r.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},(0,x.emitStep)(e,r),t}if(!1===c)return c;if(t.config={...c||t.config,init:!0},t.queueOn?.length){const o=t.queueOn;t.queueOn=[];for(const{type:r,data:s}of o)Me(e,t,n,r,s)}s.debug("init done")}return!0}async function Le(e,t,n,o,r,s){const{config:i}=t,a=await(0,x.processEventMapping)(o,i,e);if(a.ignore)return!1;const c=t.type||"unknown",u=e.logger.scope(c),d={collector:e,logger:u,id:n,config:i,data:a.data,rule:a.mapping,ingest:r,env:{...Xe(t.env,i.env),...s?{respond:s}:{}},reportError:se(e,"destination",n,u,t)};if(void 0!==i.mock)return u.debug("mock",{event:a.event.name}),i.mock;const l=a.mapping,p=void 0!==l?.batch,f=p?a.mappingKey||"* *":" batch-all";if((p||void 0!==i.batch)&&t.pushBatch&&void 0===i.mock){if(t.batches=t.batches||{},!t.batches[f]){const o={key:f,entries:[],events:[],data:[]},r=Ue(l?.batch),s=Ue(i.batch),a=r.wait??s.wait??3e4,c=r.size??s.size??1e3,d=r.age??s.age??3e4,g=Xe(t.env,i.env),h=(0,x.debounce)(async()=>{const o=t.batches[f],r=o.batched;if(0===r.entries.length)return;const s={key:r.key,entries:r.entries,events:r.events,data:r.data};r.entries=[],r.events=[],r.data=[];const a=s.entries[0],c={collector:e,logger:u,id:n,config:i,data:void 0,rule:o.isDefault?void 0:a.rule,ingest:a.ingest,env:{...g,...a.respond?{respond:a.respond}:{}},reportError:se(e,"destination",n,u,t)};u.debug("push batch",{events:s.entries.length});const d=t.config.id||n,l=oe(e,d),p=te(t.config.breaker),h=(0,x.stepId)("destination",d),m=t=>{p&&ne(e.status.breakers,h,t,p.threshold,p.cooldown)},v=Date.now(),y=new Map;let w,b=!1;const k=n=>{const o=t.dlq=t.dlq||[],r={max:t.config.dlqMax??100};let s=0;for(const e of n)s+=J(o,e,r).dropped;if(s>0){const t=re(e.status,(0,x.stepId)("destination",d),"dlq",s);Q(o,u,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:d,cap:r.max,droppedCount:t})}else o.length<r.max&&Z(o);l.failed+=n.length,l.dlqSize=o.length,e.status.failed+=n.length};let I=s.entries.length;const S=Be(i.timeout),E=await(0,x.tryCatchAsync)((o,r)=>Fe(Promise.resolve((0,x.useHooks)(t.pushBatch,"DestinationPushBatch",e.hooks,e.logger)(o,r)),S,`Destination "${n}" batch delivery timed out after ${S}ms`),e=>{I=0,b=!0,w=e,k(s.entries.map(t=>[t.event,e])),m("transport-failure"),u.error("Push batch failed",{error:e instanceof Error?e.message:String(e),entries:s.entries.length})})(s,c);if((0,x.isObject)(O=E)&&Array.isArray(O.failed)&&E.failed.length>0){const e=[];for(const t of E.failed){const n=s.entries[t.index];if(!n||y.has(t.index))continue;const o=t.error??new Error(`Push batch entry ${t.index} failed (no per-row error provided)`);y.set(t.index,o),e.push([n.event,o])}e.length>0&&(k(e),I=Math.max(0,s.entries.length-e.length),u.error("Push batch partial failure",{failed:e.length,delivered:I,entries:s.entries.length}))}var O;const C=Date.now();s.entries.forEach((t,o)=>{const r=b||y.has(o),i=H(t.event,t.ingest,e),a=G(e,{stepId:(0,x.stepId)("destination",n),stepType:"destination",phase:r?"error":"flush",eventId:"string"==typeof t.event.id?t.event.id:"",now:C,traceId:i.traceId,sourceId:i.sourceId,parentEventId:i.parentEventId});if(a.batch={size:s.entries.length,index:o},a.durationMs=C-v,r){const e=b?w:y.get(o);a.error=e instanceof Error?{name:e.name,message:e.message}:{message:String(e)}}(0,x.emitStep)(e,a)}),u.debug("push batch done"),l.inFlightBatch=Math.max(0,(l.inFlightBatch??0)-s.entries.length),I>0&&(l.count+=I,l.lastAt=Date.now(),e.status.out+=I,m("success"))},{wait:a,size:c,age:d});t.batches[f]={batched:o,isDefault:!p,batchFn:()=>{h()},flush:async()=>{await h.flush()}}}const c=t.batches[f];c.batched.entries.push({event:a.event,ingest:r,respond:s,rule:l,data:a.data}),c.batched.events.push(a.event),(0,x.isDefined)(a.data)&&c.batched.data.push(a.data);const d="string"==typeof a.event.id?a.event.id:"",g=H(o,r,e),h=Date.now(),m=G(e,{stepId:(0,x.stepId)("destination",n),stepType:"destination",phase:"in",eventId:d,now:h,traceId:g.traceId,sourceId:g.sourceId,parentEventId:g.parentEventId});a.mappingKey&&(m.mappingKey=a.mappingKey),a.event.consent&&(m.consent={...a.event.consent}),m.inEvent=a.event,(0,x.emitStep)(e,m);const v=G(e,{stepId:(0,x.stepId)("destination",n),stepType:"destination",phase:"out",eventId:d,now:h,traceId:g.traceId,sourceId:g.sourceId,parentEventId:g.parentEventId});a.mappingKey&&(v.mappingKey=a.mappingKey),v.outEvent=a.event,v.batch={size:c.batched.entries.length,index:c.batched.entries.length-1},(0,x.emitStep)(e,v);const y=t.config.id||n,w=oe(e,y);return w.inFlightBatch=(w.inFlightBatch??0)+1,c.batchFn(),He}{let s;if(u.debug("push",{event:a.event.name}),"trace"===e.observeLevel?.()&&Array.isArray(t.calls)&&t.calls.length>0){const e=N({...d.env,simulation:t.calls});d.env=e.wrappedEnv,s=e.calls,e.unresolved.length>0&&(e.wrappedEnv[x.OBSERVE_ENV_KEY]={paths:e.unresolved,record:(t,n)=>e.calls.push({fn:t,args:n,ts:Date.now()})})}const c="string"==typeof a.event.id?a.event.id:"",{traceId:l,sourceId:p,parentEventId:f}=H(o,r,e),g=Date.now(),h=G(e,{stepId:(0,x.stepId)("destination",n),stepType:"destination",phase:"in",eventId:c,now:g,traceId:l,sourceId:p,parentEventId:f});a.mappingKey&&(h.mappingKey=a.mappingKey),a.event.consent&&(h.consent={...a.event.consent}),h.inEvent=a.event,(0,x.emitStep)(e,h);try{const o=Be(i.timeout),r=await Fe(Promise.resolve((0,x.useHooks)(t.push,"DestinationPush",e.hooks,e.logger)(a.event,d)),o,`Destination "${n}" delivery timed out after ${o}ms`),h=Date.now(),m=G(e,{stepId:(0,x.stepId)("destination",n),stepType:"destination",phase:"out",eventId:c,now:h,traceId:l,sourceId:p,parentEventId:f});return m.durationMs=h-g,m.outEvent=a.event,s&&s.length>0&&(m.calls=Y(s)),(0,x.isDefined)(r)&&(m.meta={...m.meta,response:r}),a.mappingKey&&(m.mappingKey=a.mappingKey),(0,x.emitStep)(e,m),u.debug("push done"),r}catch(t){const o=Date.now(),r=G(e,{stepId:(0,x.stepId)("destination",n),stepType:"destination",phase:"error",eventId:c,now:o,traceId:l,sourceId:p,parentEventId:f});throw r.durationMs=o-g,r.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},s&&s.length>0&&(r.calls=Y(s)),a.mappingKey&&(r.mappingKey=a.mappingKey),(0,x.emitStep)(e,r),t}}}function Ye(e){return{ok:!e?.failed,...e}}function Je(e){const{code:t,config:n={},env:o={},cache:r,state:s}=e,{config:i}=ue(e,"before"),{config:a}=ue({...e,config:i},"next"),c={...t.config,...n,...a};r&&(c.cache=r),void 0!==s&&void 0===c.state&&(c.state=s);const u=Xe(t.env,o);return{...t,config:c,env:u}}function Xe(e,t){return e||t?t?e&&(0,x.isObject)(e)&&(0,x.isObject)(t)?{...e,...t}:t:e:{}}async function Qe(e,t,n){const o=Object.entries(e).map(async([e,o])=>{const r=o.destroy;if(!r)return;const s=o.type||"unknown",i=n.scope(s),a={id:e,config:o.config,env:o.env??{},logger:i};let c;try{await Promise.race([r(a),new Promise((n,o)=>{c=setTimeout(()=>o(new Error(`${t} '${e}' destroy timed out`)),5e3)})])}catch(n){i.error(`${t} '${e}' destroy failed: ${n}`)}finally{c&&clearTimeout(c)}});await Promise.allSettled(o)}function Ze(e,t){e.stateVersion++,e.cellVersion[t]=e.stateVersion}async function et(e,t,n){let o,r,s=!1;const i=function(e){return e.cascade?()=>{}:(e.cascade={counts:new WeakMap},()=>{e.cascade=void 0})}(e);try{return await async function(){switch(t){case F.Config:(0,P.isObject)(n)&&((0,M.assign)(e.config,n,{shallow:!1}),r=n,s=!0);break;case F.Consent:if((0,P.isObject)(n)){const{update:t}=function(e,t){const n={};return Object.entries(t).forEach(([e,t])=>{n[e]=!!t}),e.consent=(0,O.assign)(e.consent,n),{update:n}}(e,n);Ze(e,F.Consent),r=t,s=!0}break;case F.Custom:(0,P.isObject)(n)&&(e.custom=(0,M.assign)(e.custom,n),Ze(e,F.Custom),r=n,s=!0);break;case F.Destination:(0,P.isObject)(n)&&"code"in n&&(0,P.isObject)(n.code)&&(o=await async function(e,t){const{code:n,config:o={},env:r={},before:s,next:i,cache:a,state:c}=t;if(!(0,x.isFunction)(n.push))return Ye({ok:!1,failed:{invalid:{type:"invalid",error:"Destination code must have a push method"}}});const u=o||{init:!1};let d=s?{...u,before:s}:{...u};i&&(d={...d,next:i}),a&&(d={...d,cache:a}),void 0!==c&&void 0===d.state&&(d={...d,state:c});let l=d.id;if(!l)do{l=(0,x.getId)(5,"abcdefghijklmnopqrstuvwxyz")}while(e.destinations[l]||e.pending.destinations[l]);if(d.require?.length){e.pending.destinations[l]=t,await ke(e);const n=e.destinations[l];return n?Ne(e,void 0,{},{[l]:n}):Ye({ok:!0})}const p={...n,config:d,env:Xe(n.env,r)};return e.destinations[l]=p,!1!==p.config.queue&&(p.queuePush=[...e.queue]),Ne(e,void 0,{},{[l]:p})}(e,n));break;case F.Globals:(0,P.isObject)(n)&&(e.globals=(0,M.assign)(e.globals,n),Ze(e,F.Globals),r=n,s=!0);break;case F.Hook:if((0,P.isObject)(n)&&(0,M.isString)(n.name)&&(0,M.isFunction)(n.fn)){const{name:t,fn:o}=n;e.hooks[t]=o,r=n,s=!0}break;case F.On:if((0,P.isObject)(n)&&(0,M.isString)(n.type)){const{type:t,rules:o}=n;await async function(e,t,n){if(!Ie(e))return void Ee();const o=e.on,r=o[t]||[],s=(0,A.isArray)(n)?n:[n];s.forEach(e=>{r.push(e)}),o[t]=r,Pe(e,t,s)}(e,t,o)}break;case F.Ready:s=!0;break;case F.Run:o=await async function(e,t){return e.allowed=!0,e.timing=Date.now(),e.trace=(0,M.getTraceId)(),e.count=0,t&&(t.consent&&(e.consent=(0,M.assign)(e.consent,t.consent),Ze(e,F.Consent)),t.user&&(e.user=(0,M.assign)(e.user,t.user),Ze(e,F.User)),t.globals&&(e.globals=(0,M.assign)(e.config.globalsStatic||{},t.globals),Ze(e,F.Globals)),t.custom&&(e.custom=(0,M.assign)(e.custom,t.custom),Ze(e,F.Custom))),Object.values(e.destinations).forEach(e=>{e.queuePush=[]}),e.queue=[],e.round++,await ke(e),await async function(e){if(Ie(e))for(const t of Ce){if(!xe(e,t))continue;const n=Re(e,t);Pe(e,t,e.on[t]||[]);for(const[o,r]of Object.entries(e.sources))ye(r)&&await ze(e,r,o,t,n)}else Ee()}(e),await Ne(e)}(e,n),s=!0;break;case F.Session:s=!0;break;case F.Shutdown:e.hasShutdown||(e.hasShutdown=!0,await async function(e){const t=e.logger;await Qe(e.sources,"source",t),await async function(e,t){const n=Object.entries(e).flatMap(([e,n])=>{const o=n.batches;if(!o)return[];const r=t.scope(n.type||"destination");return Object.values(o).map(async t=>{let n;try{await Promise.race([t.flush(),new Promise((t,o)=>{n=setTimeout(()=>o(new Error(`destination '${e}' batch flush timed out`)),5e3)})])}catch(t){r.error(`destination '${e}' batch flush failed: ${t}`)}finally{n&&clearTimeout(n)}})});await Promise.allSettled(n)}(e.destinations,t),await Qe(e.destinations,"destination",t),await Qe(e.transformers,"transformer",t),await Qe(e.stores,"store",t)}(e));break;case F.User:(0,P.isObject)(n)&&((0,M.assign)(e.user,n,{shallow:!1}),Ze(e,F.User),r=n,s=!0);break;default:return e.logger.warn("unknown command",{command:t}),Ye({ok:!1})}return s&&(await async function(e,t,n,o){if(!Ie(e))return Ee(),!0;e.seenEvents.add(String(t));let r=n||[];n||(r=e.on[t]||[]);const s=Re(e,t,o);let i=!1;for(const[n,o]of Object.entries(e.sources)){if(o.config.require?.length){const e=o.config.require.indexOf(t);-1!==e&&o.config.require.splice(e,1)}o.on&&(ye(o)?await ze(e,o,n,t,s)&&(i=!0):(o.queueOn=o.queueOn||[],o.queueOn.push({type:t,data:s})))}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:s});Me(e,o,n,t,s)}});for(const[t,n]of Object.entries(e.sources))ye(n)&&n.queueOn?.length&&await ve(e,n,t);const a=Object.values(e.sources).some(e=>!ye(e)&&e.config.require?.length);return(Object.keys(e.pending.destinations).length>0||a)&&await ke(e),Pe(e,t,r,o),!i}(e,t,void 0,r),o=await Ne(e)),o||Ye({ok:!0})}()}finally{i()}}function tt(e,t){return{timing:Math.round((Date.now()-e.timing)/10)/100,source:{type:"collector",schema:"4"},...t}}function nt(e,t,n){if(!t.name)throw new Error("Event name is required");const[o,r]=t.name.split(" ");if(!o||!r)throw new Error("Event name is invalid");const{timestamp:s=Date.now(),name:i=`${o} ${r}`,data:a={},context:c={},globals:u={},custom:d={},user:l=e.user,nested:p=[],consent:f=e.consent,id:g=(0,M.getSpanId)(),trigger:h="",entity:m=o,action:v=r,timing:y=0,source:w={type:"collector",schema:"4"}}=t,b=w.count??(e.count+=1),k=w.trace??n?._meta.trace??e.trace,I={...w,count:b};void 0!==k&&(I.trace=k);const S=e.name??w.platform??"default",E=e.release??"4.4.0-next-1785285516008";return I.release={...w.release,[S]:E},{name:i,data:a,context:c,globals:(0,M.assign)(e.globals,u),custom:d,user:l,nested:p,consent:f,id:g,trigger:h,entity:m,action:v,timestamp:s,timing:y,source:I}}function ot(e,t){const n=(0,R.useHooks)(async(n,o={})=>await(0,R.tryCatchAsync)(async()=>{const r=Date.now(),{id:s,ingest:i,respond:a,mapping:c,preChain:u,include:d,exclude:l}=o;let p=a,f=n;const g=d||l?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,l):void 0,h=i??(0,R.createIngest)(s||"unknown");if(c){const t=await(0,R.processEventMapping)(f,c,e);if(t.ignore)return Ye({ok:!0});if(c.consent&&!(0,R.getGrantedConsent)(c.consent,e.consent,t.event.consent))return Ye({ok:!0});f=t.event}if(u?.length&&e.transformers&&Object.keys(e.transformers).length>0){const n=await ge(e,e.transformers,u,f,h,p,s?`source.${s}.next`:void 0);if(null===n.event)return e.logger.debug("Event dropped by transformer chain"+(n.droppedBy?` (${n.droppedBy})`:"")),Ye({ok:!0,dropped:!0});if(n.stopped)return n.respond&&(p=n.respond),Ye({ok:!0});n.respond&&(p=n.respond);const o="string"==typeof f.id?f.id:"";if(Array.isArray(n.event)){const i=await Promise.all(n.event.map(async n=>{const r=""!==o&&n.id===o?{...n,id:(0,R.getSpanId)()}:n,i=t(r),a=nt(e,i,h);return Ne(e,a,{id:s,ingest:h,respond:p},g)}));if(s){e.status.sources[s]||(e.status.sources[s]={count:0,duration:0});const t=e.status.sources[s];t.count+=n.event.length,t.lastAt=Date.now(),t.duration+=Date.now()-r}return i[0]??Ye({ok:!0})}f=""===o||"string"==typeof n.event.id&&""!==n.event.id?n.event:{...n.event,id:o}}const m=function(e,t,n){return nt(e,tt(e,t),n)}(e,f,h),v=await Ne(e,m,{id:s,ingest:h,respond:p},g);if(s){e.status.sources[s]||(e.status.sources[s]={count:0,duration:0});const t=e.status.sources[s];t.count++,t.lastAt=Date.now(),t.duration+=Date.now()-r}return v},t=>{if(t instanceof R.FatalError)throw t;return e.status.failed++,e.logger.error("push failed",{event:n,ingest:o.ingest,error:t}),Ye({ok:!1})})(),"Push",e.hooks,e.logger);return async(t,o)=>{const r="string"==typeof t.id&&""!==t.id?t:{...t,id:(0,R.getSpanId)()},s="string"==typeof r.id?r.id:"",{traceId:i,sourceId:a,parentEventId:c}=H(r,o?.ingest,e),u=Date.now(),d=G(e,{stepId:"collector.push",stepType:"collector",phase:"in",eventId:s,now:u,traceId:i,sourceId:a,parentEventId:c});d.inEvent=r,(0,R.emitStep)(e,d);try{const t=await n(r,o),d=Date.now(),l=G(e,{stepId:"collector.push",stepType:"collector",phase:"out",eventId:s,now:d,traceId:i,sourceId:a,parentEventId:c});return l.durationMs=d-u,l.outEvent=t,(0,R.emitStep)(e,l),t}catch(t){const n=Date.now(),o=G(e,{stepId:"collector.push",stepType:"collector",phase:"error",eventId:s,now:n,traceId:i,sourceId:a,parentEventId:c});throw o.durationMs=n-u,o.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},(0,R.emitStep)(e,o),t}}}function rt(e={}){const t=e.maxEntries??1e4,n=e.lowWaterMark??.8,o=e.sweepIntervalMs??6e4,r=Math.floor(t*n),s=new Map,i={hits:0,misses:0,populates:0,writes:0,deletes:0,evictions_entries:0,evictions_ttl:0};let a;return o>0&&(a=setInterval(function(){const e=Date.now();let t=0;for(const[n,o]of s)void 0!==o.expires&&o.expires<=e&&(s.delete(n),t++);i.evictions_ttl+=t},o),a&&"function"==typeof a.unref&&a.unref()),{type:"memory",config:{},get(e){const t=s.get(e);if(t)return void 0!==t.expires&&t.expires<=Date.now()?(s.delete(e),i.evictions_ttl++,void i.misses++):(s.delete(e),s.set(e,t),i.hits++,t.value);i.misses++},set(e,n,o){const a=!s.has(e);a||s.delete(e),s.set(e,{value:n,expires:void 0!==o?Date.now()+o:void 0}),i.writes++,a&&i.populates++,s.size>t&&function(){if(s.size<=t)return;const e=s.size-r;let n=0;for(const t of s.keys()){if(n>=e)break;s.delete(t),n++}i.evictions_entries+=n}()},delete(e){s.delete(e)&&i.deletes++},get counters(){return{...i}},destroy(){void 0!==a&&(clearInterval(a),a=void 0),s.clear()}}}function st(e,t){const{cacheConfig:n,cacheStore:o,namespace:r,logger:s,storeId:i,collector:a}=t,c=(e,t)=>{if(!a)return;const n=G(a,{stepId:`store.${i}`,stepType:"store",phase:"in",eventId:"",now:Date.now()});n.meta={op:"cache",cached:"hit"===t,status:t,key:e},(0,K.emitStep)(a,n)},u={hits:0,misses:0,populates:0,writes:0,deletes:0,inflight_dedups:0},d=n.rules.map(e=>({match:e.match?(0,K.compileMatcher)(e.match):()=>!0,ttl:e.ttl})),l=e=>`${r}:${e}`;function p(e,t){const n=void 0===t?{key:e}:{key:e,value:t};return d.find(e=>e.match(n))}const f=new Map;return{type:e.type,config:e.config,setup:e.setup,get counters(){return{...u}},async get(t){const n=l(t),r=await o.get(n),s=(0,K.readCacheEnvelope)(r);if(void 0!==s){if(!("expired"in s))return u.hits++,c(t,"hit"),s.value;try{await o.delete(n)}catch(e){g("delete",t,e)}}const i=f.get(n);if(i)return u.inflight_dedups++,c(t,"hit"),i;u.misses++,c(t,"miss");const a=(async()=>{try{const r=await e.get(t);if(void 0===r)return;const s=p(t,r);if(s)try{const e=1e3*s.ttl;await o.set(n,(0,K.wrapCacheEnvelope)(r,e),e),u.populates++}catch(e){g("set",t,e)}return r}finally{f.delete(n)}})();return f.set(n,a),a},async set(t,n,r){u.writes++,await e.set(t,n,r);const s=p(t,n);if(s)try{const e=1e3*s.ttl;await o.set(l(t),(0,K.wrapCacheEnvelope)(n,e),e)}catch(e){g("set",t,e)}},async delete(t){u.deletes++,await e.delete(t);try{await o.delete(l(t))}catch(e){g("delete",t,e)}}};function g(e,t,n){const o=`store-cache(${i}): cache ${e} failed for "${t}"; backing succeeded, continuing`;s?s.warn(o,{error:n}):console.warn(o,n)}}function it(e,t,n){const o=`store.${n}`,r=(0,B.useHooks)(t.get,"StoreGet",e.hooks,e.logger),s=(0,B.useHooks)(t.set,"StoreSet",e.hooks,e.logger),i=(0,B.useHooks)(t.delete,"StoreDelete",e.hooks,e.logger);t.get=async t=>{const n=Date.now(),s=G(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:n});s.meta={op:"get",key:t},(0,B.emitStep)(e,s);try{const s=await r(t),i=Date.now(),a=G(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:i});return a.durationMs=i-n,a.meta={op:"get",key:t},(0,B.emitStep)(e,a),s}catch(r){const s=Date.now(),i=G(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:s});throw i.durationMs=s-n,i.meta={op:"get",key:t},i.error=r instanceof Error?{name:r.name,message:r.message}:{message:String(r)},(0,B.emitStep)(e,i),r}},t.set=async(t,n,r)=>{const i=Date.now(),a=G(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:i});a.meta={op:"set",key:t},(0,B.emitStep)(e,a);try{await s(t,n,r);const a=Date.now(),c=G(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:a});c.durationMs=a-i,c.meta={op:"set",key:t},(0,B.emitStep)(e,c)}catch(n){const r=Date.now(),s=G(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:r});throw s.durationMs=r-i,s.meta={op:"set",key:t},s.error=n instanceof Error?{name:n.name,message:n.message}:{message:String(n)},(0,B.emitStep)(e,s),n}},t.delete=async t=>{const n=Date.now(),r=G(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:n});r.meta={op:"delete",key:t},(0,B.emitStep)(e,r);try{await i(t);const r=Date.now(),s=G(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:r});s.durationMs=r-n,s.meta={op:"delete",key:t},(0,B.emitStep)(e,s)}catch(r){const s=Date.now(),i=G(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:s});throw i.durationMs=s-n,i.meta={op:"delete",key:t},i.error=r instanceof Error?{name:r.name,message:r.message}:{message:String(r)},(0,B.emitStep)(e,i),r}}}async function at(e){const t=(0,q.assign)({globalsStatic:{},sessionStatic:{},run:!0,queueMax:1e3},e,{merge:!1,extend:!1}),n={level:e.logger?.level,handler:e.logger?.handler},o=(0,q.createLogger)(n),r={...t.globalsStatic,...e.globals},s={allowed:!1,config:t,consent:e.consent||{},custom:e.custom||{},destinations:{},transformers:{},stores:{},globals:r,hooks:e.hooks||{},observers:new Set,logger:o,on:{},queue:[],round:0,count:0,stateVersion:0,cellVersion:{},delivery:new WeakMap,session:void 0,status:{startedAt:Date.now(),in:0,out:0,failed:0,sources:{},destinations:{},dropped:{},connectionErrors:{},breakers:{}},timing:Date.now(),user:e.user||{},sources:{},pending:{destinations:{}},hasShutdown:!1,seenEvents:new Set,push:void 0,command:void 0,elb:void 0};var i,a;void 0!==e.name&&(s.name=e.name),void 0!==e.release&&(s.release=e.release),s.push=ot(s,e=>tt(s,e)),s.command=(i=s,a=et,(0,z.useHooks)(async(e,t,n)=>await(0,z.tryCatchAsync)(async()=>await a(i,e,t,n),n=>{if(n instanceof z.FatalError)throw n;return i.status.failed++,i.logger.error("command failed",{command:e,data:t,error:n}),Ye({ok:!1})})(),"Command",i.hooks,i.logger)),s.elb=function(e){return async(t,n,o,r,s)=>{if("string"==typeof t&&t.startsWith("walker ")){const o=t.replace("walker ","");return e.command(o,n)}let i;if("string"==typeof t)i={name:t},n&&"object"==typeof n&&!Array.isArray(n)&&(i.data=n);else{if(!t||"object"!=typeof t||Array.isArray(t))return Ye({ok:!1});i={...t},n&&"object"==typeof n&&!Array.isArray(n)&&(i.data={...i.data||{},...n})}return o&&"object"==typeof o&&(i.context=o),r&&Array.isArray(r)&&(i.nested=r),s&&"object"==typeof s&&(i.custom=s),e.push(i)}}(s);const c=e.stores||{};return s.stores=await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t)){const{code:t,config:s={},env:i={}}=r,a=e.logger.scope("store").scope(o),c={collector:e,logger:a,id:o,config:s,env:i,reportError:se(e,"store",o,a)},u=await t(c);n[o]=u}const o=t,r=function(e){const t={};for(const n of Object.keys(e))t[n]="WHITE";const n=[],o=[];function r(s){const i=t[s];if("BLACK"===i)return;if("GRAY"===i){const e=o.indexOf(s),t=o.slice(-1===e?0:e).concat(s).join(" -> ");throw new Error(`Cycle in cache.store chain: ${t}`)}t[s]="GRAY",o.push(s);const a=e[s].cache?.store;if(void 0!==a){if(!(a in e))throw new Error(`Store "${s}" cache.store references "${a}", which is not declared in flow.stores`);r(a)}o.pop(),t[s]="BLACK",n.push(s)}for(const n of Object.keys(e))"WHITE"===t[n]&&r(n);return n}(o);for(const t of r){const r=o[t].cache;if(!r)continue;let s,i;void 0!==r.store?(s=n[r.store],i=r.store):(n.__cache||(n.__cache=rt()),s=n.__cache,i="__cache");const a=r.namespace??t;e.logger.scope("store-cache").scope(t).info(`store "${t}" caches with namespace "${a}:" via ${i}`),n[t]=st(n[t],{storeId:t,cacheConfig:r,cacheStore:s,namespace:a,logger:e.logger.scope("store-cache").scope(t),collector:e})}for(const[t,o]of Object.entries(n))"__cache"!==t&&it(e,o,t);return n}(s,c),function(e,t,n){const o=new Map;for(const[n,r]of Object.entries(e))t[n]&&o.set(r,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))r(t.env);function r(e){if(e)for(const[t,n]of Object.entries(e))if("object"==typeof n&&null!==n){const r=o.get(n);r&&(e[t]=r)}}}(c,s.stores,e),s.stores.__cache||(s.stores.__cache=rt()),s.destinations=await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t))r.config?.require?.length?e.pending.destinations[o]=r:n[o]=Je(r);return n}(s,e.destinations||{}),s.transformers=await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t)){const{code:t,env:s={}}=r,i=(0,T.validateStepEntry)(r,"Transformer");if(!i.ok){e.logger.warn(`Transformer ${o} invalid (${i.code}): ${i.reason}. Skipping.`);continue}const{config:a}=ue(r,"before"),{config:c}=ue({...r,config:a},"next"),u=Object.keys(s).length>0?{...c,env:s}:c,{cache:d}=r,l=d?{...u,cache:d}:u,p=r.config?.state??r.state,f=void 0!==p&&void 0===l.state?{...l,state:p}:l,g=e.logger.scope("transformer").scope(o),h={collector:e,logger:g,id:o,ingest:(0,T.createIngest)(o),config:f,env:s,reportError:se(e,"transformer",o,g)},m=t??(e=>{const t=r.mapping;if(t){const n=[];if(void 0!==t.data&&n.push("data"),t.mapping)for(const[e,o]of Object.entries(t.mapping))if("object"==typeof o&&null!==o)for(const[t,r]of Object.entries(o)){if("object"!=typeof r||null===r)continue;const o=r;void 0!==o.data&&n.push(`mapping[${e}][${t}].data`),void 0!==o.silent&&n.push(`mapping[${e}][${t}].silent`)}return n.length>0&&e.collector.logger.warn(`Transformer ${o}: \`${n.join(", ")}\` ignored at transformer position (only event-mutating fields apply).`),{type:"pass",config:e.config,push:async n=>{const o=await(0,T.processEventMapping)(n,t,e.collector);return!o.ignore&&{event:o.event}}}}return{type:"pass",config:e.config,push:e=>({event:e})}}),v=await m(h);void 0!==r.before&&void 0===v.config?.before&&(v.config={...v.config??{},before:r.before}),void 0!==r.next&&void 0===v.config?.next&&(v.config={...v.config??{},next:r.next}),void 0!==p&&void 0===v.config?.state&&(v.config={...v.config??{},state:p}),n[o]=v}return n}(s,e.transformers||{}),s}var ct=globalThis;function ut(e){try{const t=ct.window;if(!t)return;t.localStorage.getItem(C.OBSERVE_STORAGE_KEY)===e&&t.localStorage.removeItem(C.OBSERVE_STORAGE_KEY)}catch{}}function dt(e,t){return void 0===t?e:n=>e({...n,release:t})}async function lt(e){e=e||{};const t=await at(e);(function(e,t){if(t.observers)for(const n of t.observers)e.observers.add(n);const n=t.observe;if(!n)return;const o=e.name??"default";if("binding"in n){const t=function(){const e=ct.window,t=ct.URLSearchParams;if(!e||!t)return null;try{const n=new t(e.location.search.replace(/^\?/,"")).getAll(C.OBSERVE_STORAGE_KEY);return n.length>0?n[n.length-1]??null:null}catch{return null}}(),r=t??function(){try{return ct.window?.localStorage.getItem(C.OBSERVE_STORAGE_KEY)??null}catch{return null}}();if(!r)return;const s=(0,C.parseObserveCredential)(r);if(!s)return void(null===t?(e.logger.warn("observe: malformed stored credential cleared"),ut(r)):e.logger.warn("observe: malformed credential ignored"));if(s.pb!==n.binding)return void e.logger.warn("observe: credential binding mismatch, credential ignored");let i;!function(e){try{ct.window?.localStorage.setItem(C.OBSERVE_STORAGE_KEY,e)}catch{}}(r),null!==t&&function(){const e=ct.window,t=ct.URLSearchParams;if(e&&t)try{const n=e.location.href,o=n.indexOf("#"),r=o>=0?n.slice(o):"",s=o>=0?n.slice(0,o):n,i=s.indexOf("?"),a=i>=0?s.slice(0,i):s,c=new t(i>=0?s.slice(i+1):"");c.delete(C.OBSERVE_STORAGE_KEY);const u=c.toString();e.history.replaceState({},"",`${a}${u?`?${u}`:""}${r}`)}catch{}}();const a=(0,C.createBatchedPoster)({url:`${n.url}/ingest/${s.ses}`,token:s.secret,headers:{"X-Walkeros-Binding":n.binding},onStatus:t=>{401===t&&(ut(r),i&&e.observers.delete(i))}});i=(0,C.createTelemetryObserver)(function(e,t){return void 0===t?e:n=>e({...n,flowId:t})}(dt(a,e.release),n.flowId),{flowId:n.flowId??o,...void 0!==n.level?{level:n.level}:{},...void 0!==n.sample?{sample:n.sample}:{}}),e.observers.add(i);const c=n.level;return void(void 0!==c&&(e.observeLevel=()=>c))}if("off"===n.level)return;const r=n.level;void 0!==r&&(e.observeLevel=()=>r),e.observers.add((0,C.createTelemetryObserver)(dt((0,C.createBatchedPoster)({url:`${n.url}/ingest/${n.sessionId}`,token:n.token}),e.release),{flowId:o,level:n.level,sample:n.sample}))})(t,e),await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t)){const t=await be(e,o,r);if(!t)continue;const s=r.config?.require;t.config={...t.config,init:!1,...s?{require:[...s]}:{}},n[o]=t}Object.assign(e.sources,n);for(const t of Object.keys(n)){const n=e.sources[t];let o=!1;n.init&&await(0,_.tryCatchAsync)(n.init.bind(n),n=>{if(n instanceof _.FatalError)throw n;o=!0,e.status.failed++,e.logger.scope("source").error("source init failed",{sourceId:t,error:n})})(),o||(n.config.init=!0,ye(n)&&await ve(e,n,t))}return await ke(e),n}(t,e.sources||{});const{consent:n,user:o,globals:r,custom:s}=e;n&&await t.command("consent",n),o&&await t.command("user",o),r&&await t.command("globals",r),s&&await t.command("custom",s),t.config.run&&await t.command("run");let i=t.elb;const a=Object.values(t.sources),c=a.find(e=>e.config.primary);return c?i=c.push:a.length>0&&(i=a[0].push),{collector:t,elb:i}}var pt=async e=>{let t;return{get flow(){return t},trigger:()=>async n=>{if(!t){const n=await lt({...e,run:e.run??!0});t={collector:n.collector,elb:n.elb}}await t.elb(n)}}};//# sourceMappingURL=dev.js.map
1
+ "use strict";var e,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,o=Object.getOwnPropertyNames,r=Object.prototype.hasOwnProperty,s=(e,n)=>{for(var o in n)t(e,o,{get:n[o],enumerable:!0})},i={};s(i,{examples:()=>g,schemas:()=>a}),module.exports=(e=i,((e,s,i,a)=>{if(s&&"object"==typeof s||"function"==typeof s)for(let c of o(s))r.call(e,c)||c===i||t(e,c,{get:()=>s[c],enumerable:!(a=n(s,c))||a.enumerable});return e})(t({},"__esModule",{value:!0}),e));var a={};s(a,{MappingSchema:()=>l,SettingsSchema:()=>d,mapping:()=>f,settings:()=>p});var c=require("@walkeros/core/dev"),u=require("@walkeros/core/dev"),d=u.z.object({events:u.z.array(u.z.object({delay:u.z.number().optional().describe("Milliseconds to wait before pushing this event")}).passthrough().describe("Partial walkerOS event with optional delay")).describe("Events to push to the collector on init")}),l=require("@walkeros/core/dev").z.object({}),p=(0,c.zodToSchema)(d),f=(0,c.zodToSchema)(l),g={};s(g,{createTrigger:()=>pt,env:()=>h,step:()=>I});var h={};s(h,{init:()=>w,push:()=>b,simulation:()=>k});var m=async()=>({ok:!0}),v=()=>{},y={error:v,warn:v,info:v,debug:v,throw:e=>{throw"string"==typeof e?new Error(e):e},json:v,scope:()=>y},w=void 0,b={push:m,command:m,elb:m,logger:y},k=["call:elb"],I={};s(I,{delayedEvent:()=>E,pageView:()=>S});var S={title:"Page view",description:"A simple event object is pushed through the demo source as a walker elb call for learning purposes.",in:{name:"page view",data:{title:"Home"}},out:[["elb",{name:"page view",data:{title:"Home"}}]]},E={title:"Delayed event",description:"An event object with a delay field is pushed through the demo source after the specified wait.",in:{name:"product add",data:{id:"abc",name:"Test Product"},delay:100},out:[["elb",{name:"product add",data:{id:"abc",name:"Test Product"}}]]},O=require("@walkeros/core"),C=require("@walkeros/core"),q=require("@walkeros/core"),j=require("@walkeros/core"),x=(require("@walkeros/core"),require("@walkeros/core")),A=require("@walkeros/core"),$=require("@walkeros/core"),D=require("@walkeros/core"),_=require("@walkeros/core"),T=require("@walkeros/core"),M=require("@walkeros/core"),P=require("@walkeros/core"),R=require("@walkeros/core"),z=require("@walkeros/core"),B=require("@walkeros/core"),K=require("@walkeros/core"),F={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",Scoped:"_",Session:"session",Shutdown:"shutdown",User:"user",Walker:"walker"};function H(e,t,n){return{traceId:e.source?.trace??t?._meta.trace??n.trace,sourceId:t?._meta.path[0],parentEventId:t?._meta.parentEventId}}function G(e,t){const n=e.status.startedAt,o={flowId:e.name??"default",stepId:t.stepId,stepType:t.stepType,phase:t.phase,eventId:t.eventId,timestamp:new Date(t.now).toISOString(),elapsedMs:t.now-n};return t.traceId&&(o.traceId=t.traceId),t.sourceId&&(o.sourceId=t.sourceId),t.parentEventId&&(o.parentEventId=t.parentEventId),o}function U(e){return"object"==typeof e&&null!==e}function V(e,t,n){if(null===e||"object"!=typeof e)return e;if(n>=8)return e;const o=t.get(e);if(void 0!==o)return o;if(Array.isArray(e)){const o=[];t.set(e,o);for(const r of e)o.push(V(r,t,n+1));return o}const r={};t.set(e,r);for(const[o,s]of Object.entries(e))r[o]="function"==typeof s?s:V(s,t,n+1);return r}function N(e){const t=[],n=[],{simulation:o,...r}=e,s=V(r,new WeakMap,0);for(const e of o){const o=(0,x.parseCallPath)(e);if(0===o.length)continue;const r=o.join(".");if(o.length-1>=8){n.push(r);continue}let i=s,a=!0;for(let e=0;e<o.length-1;e++){const t=i[o[e]];if(!U(t)){a=!1;break}i=t}const c=o[o.length-1];if(!a||!(c in i)){n.push(r);continue}const u=i[c];"function"==typeof u?i[c]=function(...e){return t.push({fn:r,args:e,ts:Date.now()}),u.apply(this,e)}:n.push(r)}return{wrappedEnv:s,calls:t,unresolved:n}}function W(e,t){try{return e[t]}catch{return"[unreadable]"}}function L(e){const t=new WeakSet,n=(e,o)=>{if(null===e)return null;if("function"==typeof e)return"[function]";if("string"==typeof e||"boolean"==typeof e)return e;if("number"==typeof e)return Number.isFinite(e)?e:null;if("bigint"==typeof e)return String(e);if("object"!=typeof e)return;const r=e;if(t.has(r))return"[circular]";if(o>=6)return"[truncated]";let s;t.add(r);try{if(Array.isArray(r))s=r.map(e=>n(e,o+1));else if(function(e){const t=Object.getPrototypeOf(e);return t===Object.prototype||null===t}(r)){const e={};for(const t of Object.keys(r))e[t]=n(W(r,t),o+1);s=e}else s=function(e){try{return String(e)}catch{return"[object]"}}(r)}catch{s="[unreadable]"}return t.delete(r),s};return e.map(e=>n(e,0))}function Y(e){return e.map(e=>({fn:e.fn,args:L(e.args),ts:e.ts}))}function Q(e,t,n,o){if(!Number.isFinite(n.max)||n.max<=0)throw new Error(`pushBounded: max must be > 0 (got ${n.max})`);if("dropNewest"===(n.onOverflow??"dropOldest"))return e.length>=n.max?(o&&o([t]),{appended:!1,dropped:1}):(e.push(t),{appended:!0,dropped:0});const r=[];for(;e.length>=n.max;)r.push(e.shift());return e.push(t),r.length>0&&o&&o(r),{appended:!0,dropped:r.length}}var J=new WeakMap;function X(e,t,n,o){J.get(e)||(J.set(e,!0),t.warn(n,o))}function Z(e){J.delete(e)}var ee=()=>Date.now();function te(e){if(void 0!==e)return"number"==typeof e?{threshold:e,cooldown:3e4}:{threshold:e.threshold??5,cooldown:e.cooldown??3e4}}function ne(e,t,n,o,r){if("partial"===n)return;const s=((i=e)[a=t]||(i[a]={state:"closed",consecutiveFailures:0}),i[a]);var i,a;return"success"===n?(s.consecutiveFailures=0,s.state="closed",s.probing=!1,void(s.openUntil=void 0)):(s.consecutiveFailures+=1,"half-open"===s.state?(s.state="open",s.probing=!1,void(s.openUntil=ee()+r)):void(s.consecutiveFailures>=o&&(s.state="open",s.probing=!1,s.openUntil=ee()+r)))}function oe(e,t){return e.status.destinations[t]||(e.status.destinations[t]={count:0,failed:0,duration:0,queuePushSize:0,dlqSize:0}),e.status.destinations[t]}function re(e,t,n,o){e.dropped[t]||(e.dropped[t]={});const r=e.dropped[t];return r[n]=(r[n]??0)+o,r[n]}function se(e,t,n,o,r){const s=(0,D.stepId)(t,n);return(t,i)=>{try{if(i)return r?function(e,t,n,o,r,s){const i=t.dlq=t.dlq||[],a={max:t.config.dlqMax??100},c=Q(i,[o,r],a);if(c.dropped>0){const t=re(e.status,(0,D.stepId)("destination",n),"dlq",c.dropped);X(i,s,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:n,cap:a.max,droppedCount:t})}else i.length<a.max&&Z(i);const u=oe(e,n);u.failed++,u.dlqSize=i.length,e.status.failed++;const d=te(t.config.breaker);if(d){const o=t.config.id||n;ne(e.status.breakers,(0,D.stepId)("destination",o),"transport-failure",d.threshold,d.cooldown)}}(e,r,n,i,t,o):e.status.failed++,void o.error("report error",{error:t instanceof Error?t.message:String(t),event:i.name});e.status.connectionErrors[s]=(e.status.connectionErrors[s]??0)+1,o.error("connection error",{error:t instanceof Error?t.message:String(t)})}catch{}}}function ie(e,t){return e.storeId&&t.stores[e.storeId]?t.stores[e.storeId]:t.stores.__cache}function ae(e,t){return e?t.stores[e]:t.stores.__cache}function ce(e){const t={};for(const[n,o]of Object.entries(e)){const e=o.config?.next;"string"==typeof e||Array.isArray(e)&&e.every(e=>"string"==typeof e)?t[n]={next:e}:t[n]={}}return t}function ue(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 de(e,t={}){if(!e)return[];if(Array.isArray(e))return e;const n=[],o=new Set;let r=e;for(;r&&t[r]&&!o.has(r);){o.add(r),n.push(r);const e=t[r].next;if(Array.isArray(e)){n.push(...e);break}r=e}return n}async function le(e,t,n){if(t.init&&!t.config.init){const o=t.type||"unknown",r=e.logger.scope(`transformer:${o}`),s={collector:e,logger:r,id:n,ingest:(0,T.createIngest)(n),config:t.config,env:he(t.config.env),reportError:se(e,"transformer",n,r)};r.debug("init");const i=await(0,T.useHooks)(t.init,"TransformerInit",e.hooks,e.logger)(s);if(!1===i)return!1;t.config={...i||t.config,env:i?.env||t.config.env,init:!0},r.debug("init done")}return!0}async function pe(e,t,n,o,r,s){const i=t.type||"unknown",a=e.logger.scope(`transformer:${i}`),c={collector:e,logger:a,id:n,ingest:r,config:t.config,env:{...he(t.config.env),...s?{respond:s}:{}},reportError:se(e,"transformer",n,a)};a.debug("push",{event:o.name});const u="string"==typeof o.id?o.id:"",{traceId:d,sourceId:l,parentEventId:p}=H(o,r,e),f=Date.now(),g=G(e,{stepId:(0,T.stepId)("transformer",n),stepType:"transformer",phase:"in",eventId:u,now:f,traceId:d,sourceId:l,parentEventId:p});g.inEvent=o,(0,T.emitStep)(e,g);try{const r=await(0,T.useHooks)(t.push,"TransformerPush",e.hooks,e.logger)(o,c),s=Date.now(),i=G(e,{stepId:(0,T.stepId)("transformer",n),stepType:"transformer",phase:"out",eventId:u,now:s,traceId:d,sourceId:l,parentEventId:p});return i.durationMs=s-f,i.outEvent=r,(0,T.emitStep)(e,i),a.debug("push done"),r}catch(t){const o=Date.now(),r=G(e,{stepId:(0,T.stepId)("transformer",n),stepType:"transformer",phase:"error",eventId:u,now:o,traceId:d,sourceId:l,parentEventId:p});throw r.durationMs=o-f,r.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},(0,T.emitStep)(e,r),t}}function fe(e,t){return e?{...e,_meta:{...e._meta,path:[...e._meta.path]}}:(0,T.createIngest)(t)}async function ge(e,t,n,o,r,s,i){r||(r=(0,T.createIngest)(n[0]??"chain")),i&&r._meta&&(r._meta.chainPath=i);let a=o,c=s;for(const o of n){const s=t[o];if(!s){e.logger.warn(`Transformer not found: ${o}`);continue}if(r&&r._meta&&r._meta.path.length>256)return e.logger.error(`Max path length exceeded at ${o}`),{event:null,respond:c};if(r&&r._meta&&(r._meta.hops++,r._meta.path.push(o)),!await(0,T.tryCatchAsync)(le,t=>{if(t instanceof T.FatalError)throw t;return e.status.failed++,e.logger.scope(`transformer:${s.type||"unknown"}`).error("transformer init failed",{transformer:o,error:t}),!1})(e,s,o))return{event:null,respond:c};if(i&&void 0!==s.config?.chainMocks?.[i]){const t=s.config.chainMocks[i];e.logger.scope(`transformer:${s.type||"unknown"}`).debug("chainMock",{chain:i}),a=t;continue}if(void 0!==s.config?.mock){e.logger.scope(`transformer:${s.type||"unknown"}`).debug("mock"),a=s.config.mock;continue}if(s.config?.disabled)continue;const u=s.config?.cache,d=u?(0,T.compileCache)(u):void 0,l=d?ie(d,e):void 0,p=s.config?.state?(0,T.compileState)(s.config.state):void 0,f=p?.filter(e=>"get"===e.mode),g=p?.filter(e=>"set"===e.mode),h=async t=>g&&0!==g.length?(0,T.applyState)(g,t=>ae(t,e),t,e):t;let m;if(d&&l){const e=(0,T.buildCacheContext)(r,a),t=await(0,T.checkCache)(d,l,e);if("HIT"===t?.status&&t.value){if(a=t.value,d.stop)return{event:a,respond:c,stopped:!0};continue}"MISS"===t?.status&&(m={key:t.key,ttl:t.rule.ttl})}const v=s.config.before;if(v){const n=(0,T.getNextSteps)(v,(0,T.buildCacheContext)(r,a));if(1===n.length){const o=de(n[0],ce(t));if(o.length>0){const n=await ge(e,t,o,a,r,c,i);if(null===n.event)return{event:null,respond:n.respond??c};if(n.stopped)return{event:Array.isArray(n.event)?n.event[0]:n.event,respond:n.respond??c,stopped:!0};n.respond&&(c=n.respond),a=Array.isArray(n.event)?n.event[0]:n.event}}else n.length>1&&await Promise.all(n.map(n=>(0,T.tryCatchAsync)(ge,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,de(n,ce(t)),a,fe(r,n),void 0,i)))}f&&f.length>0&&(a=await(0,T.applyState)(f,t=>ae(t,e),a,e));const y=await(0,T.tryCatchAsync)(pe,t=>(e.logger.scope(`transformer:${s.type||"unknown"}`).error("Push failed",{error:t}),!1))(e,s,o,a,r,c);if(!1===y)return{event:null,respond:c,droppedBy:o};if(Array.isArray(y)){const s=n.slice(n.indexOf(o)+1),u=await Promise.all(y.map(async n=>{const o=await h(n.event||a),u=fe(r,"unknown");if(n.next){const r=(0,T.getNextSteps)(n.next,(0,T.buildCacheContext)(u,o));if(0===r.length)return{event:o,respond:c};if(1===r.length){const n=de(r[0],ce(t));return n.length>0?ge(e,t,n,o,u,c,i):{event:o,respond:c}}return(await Promise.all(r.map(n=>(0,T.tryCatchAsync)(ge,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,de(n,ce(t)),o,fe(u,n),void 0,i)))).map(e=>({event:e.event,respond:void 0}))}return s.length>0?ge(e,t,s,o,u,c,i):{event:o,respond:c}}));let d=c;const l=[];for(const e of u.flat())if(null!==e)if(e&&"object"==typeof e&&"event"in e){const t=e;if(t.respond&&(d=t.respond),null===t.event)continue;Array.isArray(t.event)?l.push(...t.event):l.push(t.event)}else l.push(e);return 0===l.length?{event:null,respond:d}:1===l.length?{event:l[0],respond:d}:{event:l,respond:d}}if(y&&"object"==typeof y){const{event:n,respond:o,next:s}=y;if(o&&(c=o),void 0!==s){const o=await h(n||a),u=(0,T.getNextSteps)(s,(0,T.buildCacheContext)(r,o));if(0===u.length){a=o;continue}if(1===u.length){const n=de(u[0],ce(t));return n.length>0?ge(e,t,n,o,r,c,i):(e.logger.warn(`Branch target not found: ${JSON.stringify(s)}`),{event:null,respond:c})}return await Promise.all(u.map(n=>(0,T.tryCatchAsync)(ge,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,de(n,ce(t)),o,fe(r,n),void 0,i))),{event:null,respond:void 0}}n&&(a=n)}g&&g.length>0&&(a=await(0,T.applyState)(g,t=>ae(t,e),a,e)),m&&l&&(0,T.storeCache)(l,m.key,a,m.ttl);const w=s.config.next,b="string"==typeof w||Array.isArray(w)&&w.every(e=>"string"==typeof e),k=void 0!==w&&!b;if((!y||"object"==typeof y&&!y.next)&&k){const n=(0,T.getNextSteps)(s.config.next,(0,T.buildCacheContext)(r,a));if(1===n.length){const o=de(n[0],ce(t));return o.length>0?ge(e,t,o,a,r,c,i):{event:a,respond:c}}return n.length>1?(await Promise.all(n.map(n=>(0,T.tryCatchAsync)(ge,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,de(n,ce(t)),a,fe(r,n),void 0,i))),{event:null,respond:void 0}):{event:a,respond:c}}}return{event:a,respond:c}}function he(e){return e&&(0,T.isObject)(e)?e:{}}function me(e){return"string"==typeof e||!(!Array.isArray(e)||!e.every(e=>"string"==typeof e))}async function ve(e,t,n){if(!t.on||!t.queueOn?.length)return;const o=t.queueOn;t.queueOn=[];const r=n||t.config?.id||"unknown";for(const{type:n,data:s}of o)qe(n)&&!De(e,t,n)||(await(0,_.tryCatchAsync)(t.on,t=>{if(t instanceof _.FatalError)throw t;e.status.failed++,e.logger.scope("source").error("source on flush failed",{sourceId:r,type:n,error:t})})(n,s),qe(n)&&$e(e,t,n))}function ye(e){return Boolean(e.config.init)&&!e.config.require?.length}function we(e){return"object"==typeof e&&null!==e}async function be(e,t,n){const{code:o,config:r={},env:s={},primary:i,next:a,before:c,cache:u,terminus:d}=n,l=r.state??n.state,p=l?(0,_.compileState)(l):void 0,f=u,g=f?(0,_.compileCache)({...f,stop:f.stop??!0}):void 0,h=me(a)?de(a,ce(e.transformers)):void 0,m=me(c)?de(c,ce(e.transformers)):void 0,v=d??e.push,y=Boolean(d),w=async(n,o,s)=>{if(y)return v(n);let i;const u="string"==typeof n.id&&""!==n.id?n:{...n,id:(0,_.getSpanId)()},d=m??(void 0!==c?(()=>{const t=(0,_.getNextSteps)(c,(0,_.buildCacheContext)(s.ingest));return 0===t.length?[]:de(1===t.length?t[0]:t,ce(e.transformers))})():[]);let l=[u];if(d.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const n=await ge(e,e.transformers,d,u,s.ingest,s.respond,`source.${t}.before`);if(null===n.event)return{ok:!0};if(n.stopped)return n.respond&&(s.respond=n.respond),{ok:!0};n.respond&&(s.respond=n.respond);const o="string"==typeof u.id?u.id:"";if(Array.isArray(n.event))l=n.event.map(e=>""!==o&&e.id===o?{...e,id:(0,_.getSpanId)()}:e);else{const e=n.event;l=""===o||"string"==typeof e.id&&""!==e.id?[e]:[{...e,id:o}]}}if(g){const t=ie(g,e);if(t){const n=(0,_.buildCacheContext)(s.ingest),o=await(0,_.checkCache)(g,t,n);if(o){if("HIT"===o.status&&void 0!==o.value&&g.stop){let t=o.value;return o.rule.update&&(t=await(0,_.applyUpdate)(t,o.rule.update,{...n,cache:{status:"HIT"}},e)),s.respond?.(t),{ok:!0}}if("MISS"===o.status&&g.stop&&s.respond){const r=s.respond,a=o.rule.update,c={...n,cache:{status:"MISS"}},u=o.key,d=o.rule.ttl,l=n=>{(0,_.storeCache)(t,u,n,d),a?i=(async()=>{const t=await(0,_.applyUpdate)(n,a,c,e);r(t)})():r(n)};s.respond=l}"MISS"!==o.status||g.stop||(0,_.storeCache)(t,o.key,!0,o.rule.ttl)}}}const f=h?{kind:"single",preChain:h}:void 0!==a?(()=>{const t=(0,_.getNextSteps)(a,(0,_.buildCacheContext)(s.ingest));return 0===t.length?{kind:"single",preChain:[]}:1===t.length?{kind:"single",preChain:de(t[0],ce(e.transformers))}:{kind:"many",branches:t.map(t=>de(t,ce(e.transformers)))}})():{kind:"single",preChain:[]};p&&p.length>0&&(l=await Promise.all(l.map(t=>(0,_.applyState)(p,t=>ae(t,e),t,e))));let w={ok:!0};for(const n of l)"many"===f.kind?(await Promise.all(f.branches.map((i,a)=>(0,_.tryCatchAsync)(async()=>v(n,{...o,id:t,ingest:fe(s.ingest,`${t}.${a}`),respond:void 0,mapping:r,preChain:i}),t=>(e.logger.scope("source:many").error(`many branch ${a} failed`,{error:t}),{ok:!0}))())),w={ok:!0}):w=await v(n,{...o,id:t,ingest:s.ingest,respond:s.respond,mapping:r,preChain:f.preChain});return i&&await i,w},b=async n=>{const o=(0,_.createIngest)(t),s=(0,_.parseTraceparent)(function(e){if(!we(e))return;const t=e.headers;if(we(t)){if("get"in(n=t)&&"function"==typeof n.get)return t.get("traceparent")??void 0;if("traceparent"in t)return t.traceparent;for(const e of Object.keys(t))if("traceparent"===e.toLowerCase())return t[e]}var n}(n));if(s&&(o._meta.trace=s.trace,o._meta.parentEventId=s.parentSpan),!r.ingest||void 0===n)return o;const i=await(0,_.getMappingValue)(n,r.ingest,{collector:e});return{...o,...i,_meta:o._meta}},k=e.logger.scope("source").scope(t),I={...s,push:async(e,n={})=>{const o={ingest:(0,_.createIngest)(t),respond:void 0};return w(e,n,o)},command:e.command,sources:e.sources,elb:e.elb,logger:k},S={collector:e,logger:k,id:t,config:r,env:I,withScope:async(e,t,n)=>{const o={ingest:await b(e),respond:t};return n({...I,push:(e,t={})=>w(e,t,o),ingest:o.ingest,respond:o.respond})},reportError:se(e,"source",t,k)},E=await(0,_.tryCatchAsync)(o,n=>{if(n instanceof _.FatalError)throw n;e.status.failed++,e.logger.scope("source").error("source factory failed",{sourceId:t,error:n})})(S);if(!E)return;const O=E.type||"unknown",C=e.logger.scope(O).scope(t);return I.logger=C,i&&(E.config={...E.config,primary:i}),E}async function ke(e){for(const[t,n]of Object.entries(e.sources)){if(ye(n))continue;const o=n.config.require;if(!o?.length)continue;const r=o.filter(t=>!xe(e,t));r.length!==o.length&&(n.config.require=r,ye(n)&&await ve(e,n,t))}for(const[t,n]of Object.entries(e.pending.destinations)){if(!e.pending.destinations[t]||e.destinations[t])continue;const o=n.config?.require;if(!o)continue;const r=o.filter(t=>!xe(e,t));if(n.config&&(n.config.require=r),r.length>0)continue;delete e.pending.destinations[t];const s=Qe(n);!1!==s.config.queue&&(s.queuePush=[...e.queue]),e.destinations[t]=s}}function Ie(e){if("object"!=typeof e||null===e)return!1;if(!("logger"in e))return!1;const t=e.logger;return"object"==typeof t&&null!==t&&"scope"in t&&"function"==typeof t.scope}var Se=!1;function Ee(){Se||(Se=!0,"undefined"!=typeof console&&"function"==typeof console.warn&&console.warn("walkerOS: ignored an on-dispatch call with a non-collector argument"))}function Oe(e,t,n,o){if(n instanceof A.FatalError)throw n;e.logger.scope("on").error("on callback failed",{kind:t,...o,error:n})}var Ce=[F.Consent,F.User,F.Globals,F.Custom];function qe(e){return Ce.includes(e)}function je(e,t){switch(t){case F.Consent:return Object.keys(e.consent).length>0;case F.User:return Object.keys(e.user).length>0;case F.Globals:return Object.keys(e.globals).length>0;case F.Custom:return Object.keys(e.custom).length>0;default:return!1}}function xe(e,t){switch(t){case F.Consent:case F.User:case F.Globals:case F.Custom:return je(e,t);case F.Run:case F.Ready:return!0===e.allowed;default:return e.seenEvents.has(String(t))}}function Ae(e,t){return e.cellVersion[String(t)]??0}function $e(e,t,n){let o=e.delivery.get(t);o||(o={},e.delivery.set(t,o)),o[String(n)]=Ae(e,n)}function De(e,t,n){return e.allowed&&Ae(e,n)>function(e,t,n){const o=e.delivery.get(t),r=o?.[String(n)];return void 0===r?-1:r}(e,t,n)}function _e(e,t,n){const o=e.cascade;if(!o)return!0;let r=o.counts.get(t);r||(r={},o.counts.set(t,r));const s=String(n),i=(r[s]||0)+1;return r[s]=i,i<=8||(9===i&&e.logger.error("state delivery did not converge",{type:s}),!1)}function Te(e,t){return{collector:e,logger:e.logger.scope("on").scope(String(t))}}function Me(e,t,n,o,r){if(!t.on)return;const s=t.type||"unknown",i=e.logger.scope(s).scope("on").scope(o),a={collector:e,logger:i,id:n,config:t.config,data:r,env:Je(t.env,t.config.env),reportError:se(e,"destination",n,i,t)};(0,$.tryCatch)(t.on,t=>Oe(e,"destination",t,{destId:n,type:o}))(o,a)}function Pe(e,t,n,o){if(!Ie(e))return void Ee();const r=Re(e,t,o);if(n.length)switch(t){case F.Consent:!function(e,t,n){const o=n||e.consent,r=Te(e,F.Consent);t.forEach(t=>{De(e,t,F.Consent)&&_e(e,t,F.Consent)&&(Object.keys(o).filter(e=>e in t).forEach(n=>{(0,$.tryCatch)(t[n],t=>Oe(e,"consent",t,{key:n}))(o,r)}),$e(e,t,F.Consent))})}(e,n,o);break;case F.Ready:!function(e,t){if(!e.allowed)return;const n=Te(e,F.Ready);t.forEach(t=>{(0,$.tryCatch)(t,t=>Oe(e,"ready",t))(void 0,n)})}(e,n);break;case F.Run:!function(e,t){if(!e.allowed)return;const n=Te(e,F.Run);t.forEach(t=>{(0,$.tryCatch)(t,t=>Oe(e,"run",t))(void 0,n)})}(e,n);break;case F.Session:!function(e,t){if(!e.session)return;const n=Te(e,F.Session);t.forEach(t=>{(0,$.tryCatch)(t,t=>Oe(e,"session",t))(e.session,n)})}(e,n);break;default:{const o=Te(e,t),s=qe(t);n.forEach(n=>{"function"==typeof n&&(s&&!De(e,n,t)||s&&!_e(e,n,t)||((0,$.tryCatch)(n,n=>Oe(e,"generic",n,{type:t}))(r,o),s&&$e(e,n,t)))});break}}}function Re(e,t,n){switch(t){case F.Consent:return n||e.consent;case F.Session:return e.session;case F.User:return n||e.user;case F.Custom:return n||e.custom;case F.Globals:return n||e.globals;case F.Config:return n||e.config;default:return}}async function ze(e,t,n,o,r){if(!t.on)return!1;if(qe(o)&&!De(e,t,o))return!1;if(qe(o)&&!_e(e,t,o))return!1;const s=await(0,$.tryCatchAsync)(t.on,t=>Oe(e,"source",t,{sourceId:n,type:o}))(o,r);return qe(o)&&$e(e,t,o),!1===s}function Be(e){return"number"==typeof e&&e>0?e:1e4}var Ke=class extends Error{constructor(e){super(e),this.name="DestinationTimeoutError"}};function Fe(e,t,n){let o;const r=new Promise((e,r)=>{o=setTimeout(()=>r(new Ke(n)),t)});return Promise.race([e,r]).finally(()=>{o&&clearTimeout(o)})}var He=Object.freeze({batched:!0});function Ge(e){return e===He}function Ue(e){return void 0===e?{}:"number"==typeof e?{wait:e}:{wait:e.wait,size:e.size,age:e.age}}function Ve(e,t,n){if(!e)return[];if(Array.isArray(e)&&e.every(e=>"string"==typeof e))return de(e,t);if("string"==typeof e)return de(e,t);const o=(0,j.getNextSteps)(e,(0,j.buildCacheContext)(n));return 0===o.length?[]:1===o.length?de(o[0],t):de(o,t)}async function Ne(e,t,n={},o){const{allowed:r,consent:s,user:i}=e;if(!r)return Ye({ok:!1});if(t){const n=e.config.queueMax;if(void 0===n)throw new Error("Collector.Config.queueMax is undefined; defaults must be seeded by collector()");const o=Q(e.queue,t,{max:n});if(o.dropped>0){const t=re(e.status,(0,j.stepId)("collector"),"queue",o.dropped);X(e.queue,e.logger,"collector.queue overflow; oldest events dropped",{buffer:"queue",cap:n,droppedCount:t})}else e.queue.length<n&&Z(e.queue);e.status.in++}o||(o=e.destinations);const a=e.transformers?ce(e.transformers):{},c=await Promise.all(Object.entries(o||{}).map(async([o,r])=>{if(r.config.disabled)return{id:o,destination:r,skipped:!0};const c=r.config.id||o,u=(0,j.stepId)("destination",c),d=te(r.config.breaker);if(d&&function(e,t,n){const o=e[t];if(!o||"closed"===o.state)return!1;if("half-open"===o.state)return!0===o.probing;const r=ee();return void 0!==o.openUntil&&r<o.openUntil||(o.state="half-open",o.probing=!0,o.openUntil=r+n,!1)}(e.status.breakers,u,d.cooldown))return{id:o,destination:r,skipped:!0};const l=t=>{d&&ne(e.status.breakers,u,t,d.threshold,d.cooldown)},p=()=>{d&&function(e,t){const n=e[t];n&&"half-open"===n.state&&!0===n.probing&&(n.state="open",n.probing=!1)}(e.status.breakers,u)};let f=(r.queuePush||[]).map(e=>({...e,consent:s}));r.queuePush=[],t&&f.push((0,j.clone)(t));const g=n.ingest?{...n.ingest,_meta:{...n.ingest._meta,path:[...n.ingest._meta.path]}}:(0,j.createIngest)("unknown");if(!f.length&&!r.queueOn?.length)return p(),{id:o,destination:r,skipped:!0};if(!f.length&&r.queueOn?.length){if(!(0,j.getGrantedConsent)(r.config.consent,s))return p(),{id:o,destination:r,skipped:!0};let t=!1;try{t=await We(e,r,o,!0)}catch(t){e.status.failed++;const n=r.type||"unknown";e.logger.scope(n).error("destination init failed",{error:t instanceof Error?t.message:String(t)}),l("transport-failure")}return p(),{id:o,destination:r,skipped:!t}}const h=[],m=f.filter(t=>{const n=(0,j.getGrantedConsent)(r.config.consent,s,t.consent);if(n)return t.consent=n,h.push(t),!1;const i=G(e,{stepId:(0,j.stepId)("destination",o),stepType:"destination",phase:"skip",eventId:"string"==typeof t.id?t.id:"",now:Date.now(),...H(t,g,e)});return i.skipReason="consent",s&&(i.consent={...s}),r.config.consent&&(i.meta={required:{...r.config.consent}}),(0,j.emitStep)(e,i),!0});if(m.length>0){const t=r.queuePush,n=r.config.id||o,s={max:r.config.queueMax??1e3};let i=0;for(const e of m)i+=Q(t,e,s).dropped;if(i>0){oe(e,n);const o=re(e.status,(0,j.stepId)("destination",n),"queue",i);X(t,e.logger.scope(r.type||"unknown"),"destination.queuePush overflow; oldest events dropped",{buffer:"queuePush",destination:n,cap:s.max,droppedCount:o})}else t.length<s.max&&Z(t)}if(!h.length)return p(),{id:o,destination:r,queue:f};let v,y,w=!1;try{w=await We(e,r,o,!0)}catch(t){e.status.failed++;const n=r.type||"unknown";e.logger.scope(n).error("destination init failed",{error:t instanceof Error?t.message:String(t)}),l("transport-failure")}if(!w)return p(),{id:o,destination:r,queue:f};r.dlq||(r.dlq=[]);const b=Ve(r.config.before,a,g),k=r.config.next,I=r.config?.cache,S=I?(0,j.compileCache)(I):void 0,E=S?ie(S,e):void 0,O=r.config?.state?(0,j.compileState)(r.config.state):void 0,C=O?.filter(e=>"get"===e.mode),q=O?.filter(e=>"set"===e.mode);let x=0,A=0;return await Promise.all(h.map(async t=>{let s;if(t.user=(0,j.assign)(i,t.user),S?.stop&&E){const e=(0,j.buildCacheContext)(g,t),n=await(0,j.checkCache)(S,E,e);if("HIT"===n?.status)return t;"MISS"===n?.status&&(s={key:n.key,ttl:n.rule.ttl})}let c=t,u=n.respond;if(b.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const r=await ge(e,e.transformers,b,t,g,n.respond,`destination.${o}.before`);if(null===r.event)return t;r.respond&&(u=r.respond),c=Array.isArray(r.event)?r.event[0]:r.event}if(S&&!S.stop&&E){const e=(0,j.buildCacheContext)(g,c),n=await(0,j.checkCache)(S,E,e);if("HIT"===n?.status)return t;"MISS"===n?.status&&(s={key:n.key,ttl:n.rule.ttl})}C&&C.length>0&&c&&(c=await(0,j.applyState)(C,t=>ae(t,e),c,e));const d=Date.now();let l=!1;const p=await(0,j.tryCatchAsync)(Le,t=>{const n=r.type||"unknown";e.logger.scope(n).error("Push failed",{error:t,event:c.name}),v=t,l=!0;const s=r.dlq,i=r.config.id||o,a={max:r.config.dlqMax??100},u=Q(s,[c,t],a);if(u.dropped>0){oe(e,i);const t=re(e.status,(0,j.stepId)("destination",i),"dlq",u.dropped);X(s,e.logger.scope(r.type||"unknown"),"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:i,cap:a.max,droppedCount:t})}else s.length<a.max&&Z(s)})(e,r,o,c,g,u);if(x+=Date.now()-d,s&&E&&void 0===r.config.mock&&(0,j.storeCache)(E,s.key,p??!0,s.ttl),!l&&!Ge(p)&&q&&q.length>0&&c&&(c=await(0,j.applyState)(q,t=>ae(t,e),c,e)),void 0===p||Ge(p)||(y=p),Ge(p)&&A++,!l&&k){void 0!==p&&(g._response=p);const t=Ve(k,a,g);if(t.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const n=await ge(e,e.transformers,t,c,g,u,`destination.${o}.next`);n.respond&&(u=n.respond)}}return t})),{id:o,destination:r,error:v,response:y,totalDuration:x,batchedCount:A,allowedCount:h.length,canonicalId:c,breakerConfig:d}})),u={},d={},l={};for(const t of c){if(t.skipped)continue;const n=t.destination,o={type:n.type||"unknown",data:t.response};oe(e,t.id);const r=e.status.destinations[t.id],s=Date.now();r.queuePushSize=n.queuePush?.length??0,r.dlqSize=n.dlq?.length??0;const i=t.breakerConfig,a=t.canonicalId?(0,j.stepId)("destination",t.canonicalId):void 0,c=t=>{i&&a&&ne(e.status.breakers,a,t,i.threshold,i.cooldown)};if(t.error)o.error=t.error,l[t.id]=o,r.failed++,r.lastAt=s,r.duration+=t.totalDuration||0,e.status.failed++,c("transport-failure");else if(t.queue&&t.queue.length)d[t.id]=o;else{const n=t.batchedCount??0,i=t.allowedCount??0;(Math.max(0,i-n)>0||0===i)&&(u[t.id]=o,r.count++,r.lastAt=s,r.duration+=t.totalDuration||0,e.status.out++,c("success"))}}return Ye({event:t,...Object.keys(u).length&&{done:u},...Object.keys(d).length&&{queued:d},...Object.keys(l).length&&{failed:l}})}async function We(e,t,n,o=!1){if(t.init&&!t.config.init){if(!o&&function(e){const t=e.config.consent;return!!t&&Object.keys(t).length>0}(t))return e.logger.scope(t.type||"unknown").debug("init blocked: consent gate not cleared"),!1;const r=t.type||"unknown",s=e.logger.scope(r),i={collector:e,logger:s,id:n,config:t.config,env:Je(t.env,t.config.env),reportError:se(e,"destination",n,s,t)};s.debug("init");const a=Date.now();let c;(0,j.emitStep)(e,G(e,{stepId:(0,j.stepId)("destination",n),stepType:"destination",phase:"init",eventId:"",now:a}));try{c=await(0,j.useHooks)(t.init,"DestinationInit",e.hooks,e.logger)(i)}catch(t){const o=Date.now(),r=G(e,{stepId:(0,j.stepId)("destination",n),stepType:"destination",phase:"error",eventId:"",now:o});throw r.durationMs=o-a,r.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},(0,j.emitStep)(e,r),t}if(!1===c)return c;if(t.config={...c||t.config,init:!0},t.queueOn?.length){const o=t.queueOn;t.queueOn=[];for(const{type:r,data:s}of o)Me(e,t,n,r,s)}s.debug("init done")}return!0}async function Le(e,t,n,o,r,s){const{config:i}=t,a=await(0,j.processEventMapping)(o,i,e);if(a.ignore)return!1;const c=t.type||"unknown",u=e.logger.scope(c),d={collector:e,logger:u,id:n,config:i,data:a.data,rule:a.mapping,ingest:r,env:{...Je(t.env,i.env),...s?{respond:s}:{}},reportError:se(e,"destination",n,u,t)};if(void 0!==i.mock)return u.debug("mock",{event:a.event.name}),i.mock;const l=a.mapping,p=void 0!==l?.batch,f=p?a.mappingKey||"* *":" batch-all";if((p||void 0!==i.batch)&&t.pushBatch&&void 0===i.mock){if(t.batches=t.batches||{},!t.batches[f]){const o={key:f,entries:[],events:[],data:[]},r=Ue(l?.batch),s=Ue(i.batch),a=r.wait??s.wait??3e4,c=r.size??s.size??1e3,d=r.age??s.age??3e4,g=Je(t.env,i.env),h=(0,j.debounce)(async()=>{const o=t.batches[f],r=o.batched;if(0===r.entries.length)return;const s={key:r.key,entries:r.entries,events:r.events,data:r.data};r.entries=[],r.events=[],r.data=[];const a=s.entries[0],c={collector:e,logger:u,id:n,config:i,data:void 0,rule:o.isDefault?void 0:a.rule,ingest:a.ingest,env:{...g,...a.respond?{respond:a.respond}:{}},reportError:se(e,"destination",n,u,t)};u.debug("push batch",{events:s.entries.length});const d=t.config.id||n,l=oe(e,d),p=te(t.config.breaker),h=(0,j.stepId)("destination",d),m=t=>{p&&ne(e.status.breakers,h,t,p.threshold,p.cooldown)},v=Date.now(),y=new Map;let w,b=!1;const k=n=>{const o=t.dlq=t.dlq||[],r={max:t.config.dlqMax??100};let s=0;for(const e of n)s+=Q(o,e,r).dropped;if(s>0){const t=re(e.status,(0,j.stepId)("destination",d),"dlq",s);X(o,u,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:d,cap:r.max,droppedCount:t})}else o.length<r.max&&Z(o);l.failed+=n.length,l.dlqSize=o.length,e.status.failed+=n.length};let I=s.entries.length;const S=Be(i.timeout),E=await(0,j.tryCatchAsync)((o,r)=>Fe(Promise.resolve((0,j.useHooks)(t.pushBatch,"DestinationPushBatch",e.hooks,e.logger)(o,r)),S,`Destination "${n}" batch delivery timed out after ${S}ms`),e=>{I=0,b=!0,w=e,k(s.entries.map(t=>[t.event,e])),m("transport-failure"),u.error("Push batch failed",{error:e instanceof Error?e.message:String(e),entries:s.entries.length})})(s,c);if((0,j.isObject)(O=E)&&Array.isArray(O.failed)&&E.failed.length>0){const e=[];for(const t of E.failed){const n=s.entries[t.index];if(!n||y.has(t.index))continue;const o=t.error??new Error(`Push batch entry ${t.index} failed (no per-row error provided)`);y.set(t.index,o),e.push([n.event,o])}e.length>0&&(k(e),I=Math.max(0,s.entries.length-e.length),u.error("Push batch partial failure",{failed:e.length,delivered:I,entries:s.entries.length}))}var O;const C=Date.now();s.entries.forEach((t,o)=>{const r=b||y.has(o),i=H(t.event,t.ingest,e),a=G(e,{stepId:(0,j.stepId)("destination",n),stepType:"destination",phase:r?"error":"flush",eventId:"string"==typeof t.event.id?t.event.id:"",now:C,traceId:i.traceId,sourceId:i.sourceId,parentEventId:i.parentEventId});if(a.batch={size:s.entries.length,index:o},a.durationMs=C-v,r){const e=b?w:y.get(o);a.error=e instanceof Error?{name:e.name,message:e.message}:{message:String(e)}}(0,j.emitStep)(e,a)}),u.debug("push batch done"),l.inFlightBatch=Math.max(0,(l.inFlightBatch??0)-s.entries.length),I>0&&(l.count+=I,l.lastAt=Date.now(),e.status.out+=I,m("success"))},{wait:a,size:c,age:d});t.batches[f]={batched:o,isDefault:!p,batchFn:()=>{h()},flush:async()=>{await h.flush()}}}const c=t.batches[f];c.batched.entries.push({event:a.event,ingest:r,respond:s,rule:l,data:a.data}),c.batched.events.push(a.event),(0,j.isDefined)(a.data)&&c.batched.data.push(a.data);const d="string"==typeof a.event.id?a.event.id:"",g=H(o,r,e),h=Date.now(),m=G(e,{stepId:(0,j.stepId)("destination",n),stepType:"destination",phase:"in",eventId:d,now:h,traceId:g.traceId,sourceId:g.sourceId,parentEventId:g.parentEventId});a.mappingKey&&(m.mappingKey=a.mappingKey),a.event.consent&&(m.consent={...a.event.consent}),m.inEvent=a.event,(0,j.emitStep)(e,m);const v=G(e,{stepId:(0,j.stepId)("destination",n),stepType:"destination",phase:"out",eventId:d,now:h,traceId:g.traceId,sourceId:g.sourceId,parentEventId:g.parentEventId});a.mappingKey&&(v.mappingKey=a.mappingKey),v.outEvent=a.event,v.batch={size:c.batched.entries.length,index:c.batched.entries.length-1},(0,j.emitStep)(e,v);const y=t.config.id||n,w=oe(e,y);return w.inFlightBatch=(w.inFlightBatch??0)+1,c.batchFn(),He}{let s;if(u.debug("push",{event:a.event.name}),"trace"===e.observeLevel?.()&&Array.isArray(t.calls)&&t.calls.length>0){const e=N({...d.env,simulation:t.calls});d.env=e.wrappedEnv,s=e.calls,e.unresolved.length>0&&(e.wrappedEnv[j.OBSERVE_ENV_KEY]={paths:e.unresolved,record:(t,n)=>e.calls.push({fn:t,args:n,ts:Date.now()})})}const c="string"==typeof a.event.id?a.event.id:"",{traceId:l,sourceId:p,parentEventId:f}=H(o,r,e),g=Date.now(),h=G(e,{stepId:(0,j.stepId)("destination",n),stepType:"destination",phase:"in",eventId:c,now:g,traceId:l,sourceId:p,parentEventId:f});a.mappingKey&&(h.mappingKey=a.mappingKey),a.event.consent&&(h.consent={...a.event.consent}),h.inEvent=a.event,(0,j.emitStep)(e,h);try{const o=Be(i.timeout),r=await Fe(Promise.resolve((0,j.useHooks)(t.push,"DestinationPush",e.hooks,e.logger)(a.event,d)),o,`Destination "${n}" delivery timed out after ${o}ms`),h=Date.now(),m=G(e,{stepId:(0,j.stepId)("destination",n),stepType:"destination",phase:"out",eventId:c,now:h,traceId:l,sourceId:p,parentEventId:f});return m.durationMs=h-g,m.outEvent=a.event,s&&s.length>0&&(m.calls=Y(s)),(0,j.isDefined)(r)&&(m.meta={...m.meta,response:r}),a.mappingKey&&(m.mappingKey=a.mappingKey),(0,j.emitStep)(e,m),u.debug("push done"),r}catch(t){const o=Date.now(),r=G(e,{stepId:(0,j.stepId)("destination",n),stepType:"destination",phase:"error",eventId:c,now:o,traceId:l,sourceId:p,parentEventId:f});throw r.durationMs=o-g,r.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},s&&s.length>0&&(r.calls=Y(s)),a.mappingKey&&(r.mappingKey=a.mappingKey),(0,j.emitStep)(e,r),t}}}function Ye(e){return{ok:!e?.failed,...e}}function Qe(e){const{code:t,config:n={},env:o={},cache:r,state:s}=e,{config:i}=ue(e,"before"),{config:a}=ue({...e,config:i},"next"),c={...t.config,...n,...a};r&&(c.cache=r),void 0!==s&&void 0===c.state&&(c.state=s);const u=Je(t.env,o);return{...t,config:c,env:u}}function Je(e,t){return e||t?t?e&&(0,j.isObject)(e)&&(0,j.isObject)(t)?{...e,...t}:t:e:{}}async function Xe(e,t,n){const o=Object.entries(e).map(async([e,o])=>{const r=o.destroy;if(!r)return;const s=o.type||"unknown",i=n.scope(s),a={id:e,config:o.config,env:o.env??{},logger:i};let c;try{await Promise.race([r(a),new Promise((n,o)=>{c=setTimeout(()=>o(new Error(`${t} '${e}' destroy timed out`)),5e3)})])}catch(n){i.error(`${t} '${e}' destroy failed: ${n}`)}finally{c&&clearTimeout(c)}});await Promise.allSettled(o)}function Ze(e,t){e.stateVersion++,e.cellVersion[t]=e.stateVersion}async function et(e,t,n){let o,r,s=!1;const i=function(e){return e.cascade?()=>{}:(e.cascade={counts:new WeakMap},()=>{e.cascade=void 0})}(e);try{return await async function(){switch(t){case F.Config:(0,P.isObject)(n)&&((0,M.assign)(e.config,n,{shallow:!1}),r=n,s=!0);break;case F.Consent:if((0,P.isObject)(n)){const{update:t}=function(e,t){const n={};return Object.entries(t).forEach(([e,t])=>{n[e]=!!t}),e.consent=(0,O.assign)(e.consent,n),{update:n}}(e,n);Ze(e,F.Consent),r=t,s=!0}break;case F.Custom:(0,P.isObject)(n)&&(e.custom=(0,M.assign)(e.custom,n),Ze(e,F.Custom),r=n,s=!0);break;case F.Destination:(0,P.isObject)(n)&&"code"in n&&(0,P.isObject)(n.code)&&(o=await async function(e,t){const{code:n,config:o={},env:r={},before:s,next:i,cache:a,state:c}=t;if(!(0,j.isFunction)(n.push))return Ye({ok:!1,failed:{invalid:{type:"invalid",error:"Destination code must have a push method"}}});const u=o||{init:!1};let d=s?{...u,before:s}:{...u};i&&(d={...d,next:i}),a&&(d={...d,cache:a}),void 0!==c&&void 0===d.state&&(d={...d,state:c});let l=d.id;if(!l)do{l=(0,j.getId)(5,"abcdefghijklmnopqrstuvwxyz")}while(e.destinations[l]||e.pending.destinations[l]);if(d.require?.length){e.pending.destinations[l]=t,await ke(e);const n=e.destinations[l];return n?Ne(e,void 0,{},{[l]:n}):Ye({ok:!0})}const p={...n,config:d,env:Je(n.env,r)};return e.destinations[l]=p,!1!==p.config.queue&&(p.queuePush=[...e.queue]),Ne(e,void 0,{},{[l]:p})}(e,n));break;case F.Globals:(0,P.isObject)(n)&&(e.globals=(0,M.assign)(e.globals,n),Ze(e,F.Globals),r=n,s=!0);break;case F.Hook:if((0,P.isObject)(n)&&(0,M.isString)(n.name)&&(0,M.isFunction)(n.fn)){const{name:t,fn:o}=n;e.hooks[t]=o,r=n,s=!0}break;case F.On:if((0,P.isObject)(n)&&(0,M.isString)(n.type)){const{type:t,rules:o}=n;await async function(e,t,n){if(!Ie(e))return void Ee();const o=e.on,r=o[t]||[],s=(0,A.isArray)(n)?n:[n];s.forEach(e=>{r.push(e)}),o[t]=r,Pe(e,t,s)}(e,t,o)}break;case F.Ready:s=!0;break;case F.Run:o=await async function(e,t){e.allowed=!0,e.timing=Date.now(),e.trace=(0,M.getTraceId)(),e.count=0,t&&(t.consent&&(e.consent=(0,M.assign)(e.consent,t.consent),Ze(e,F.Consent)),t.user&&(e.user=(0,M.assign)(e.user,t.user),Ze(e,F.User)),t.globals&&(e.globals=(0,M.assign)(e.config.globalsStatic||{},t.globals),Ze(e,F.Globals)),t.custom&&(e.custom=(0,M.assign)(e.custom,t.custom),Ze(e,F.Custom))),Object.values(e.destinations).forEach(e=>{e.queuePush=[]}),e.queue=[],e.round++,await ke(e),await async function(e){if(Ie(e))for(const t of Ce){if(!je(e,t))continue;const n=Re(e,t);Pe(e,t,e.on[t]||[]);for(const[o,r]of Object.entries(e.sources))ye(r)&&await ze(e,r,o,t,n)}else Ee()}(e);let n=!0;const o={};if(e.preRunQueue.length){const t=e.preRunQueue.splice(0);e.logger.debug("replaying pre-run events",{count:t.length});for(const{event:r,options:s}of t){const t=await e.push(r,s);!1===t.ok&&(n=!1),t.failed&&Object.assign(o,t.failed)}}const r=await Ne(e);if(n)return r;const s={...r.failed??{},...o};return{...r,ok:!1,...Object.keys(s).length>0?{failed:s}:{}}}(e,n),s=!0;break;case F.Session:s=!0;break;case F.Shutdown:e.hasShutdown||(e.hasShutdown=!0,await async function(e){const t=e.logger;await Xe(e.sources,"source",t),await async function(e,t){const n=Object.entries(e).flatMap(([e,n])=>{const o=n.batches;if(!o)return[];const r=t.scope(n.type||"destination");return Object.values(o).map(async t=>{let n;try{await Promise.race([t.flush(),new Promise((t,o)=>{n=setTimeout(()=>o(new Error(`destination '${e}' batch flush timed out`)),5e3)})])}catch(t){r.error(`destination '${e}' batch flush failed: ${t}`)}finally{n&&clearTimeout(n)}})});await Promise.allSettled(n)}(e.destinations,t),await Xe(e.destinations,"destination",t),await Xe(e.transformers,"transformer",t),await Xe(e.stores,"store",t)}(e));break;case F.User:(0,P.isObject)(n)&&((0,M.assign)(e.user,n,{shallow:!1}),Ze(e,F.User),r=n,s=!0);break;default:return e.logger.warn("unknown command",{command:t}),Ye({ok:!1})}if(s){await async function(e,t,n,o){if(!Ie(e))return Ee(),!0;e.seenEvents.add(String(t));let r=n||[];n||(r=e.on[t]||[]);const s=Re(e,t,o);let i=!1;for(const[n,o]of Object.entries(e.sources)){if(o.config.require?.length){const e=o.config.require.indexOf(t);-1!==e&&o.config.require.splice(e,1)}o.on&&(ye(o)?await ze(e,o,n,t,s)&&(i=!0):(o.queueOn=o.queueOn||[],o.queueOn.push({type:t,data:s})))}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:s});Me(e,o,n,t,s)}});for(const[t,n]of Object.entries(e.sources))ye(n)&&n.queueOn?.length&&await ve(e,n,t);const a=Object.values(e.sources).some(e=>!ye(e)&&e.config.require?.length);return(Object.keys(e.pending.destinations).length>0||a)&&await ke(e),Pe(e,t,r,o),!i}(e,t,void 0,r);const n=await Ne(e);if(o&&!1===o.ok){const e={...n.failed??{},...o.failed??{}};o={...n,ok:!1,...Object.keys(e).length>0?{failed:e}:{}}}else o=n}return o||Ye({ok:!0})}()}finally{i()}}function tt(e,t){return{timing:Math.round((Date.now()-e.timing)/10)/100,source:{type:"collector",schema:"4"},...t}}function nt(e,t,n){if(!t.name)throw new Error("Event name is required");const[o,r]=t.name.split(" ");if(!o||!r)throw new Error("Event name is invalid");const{timestamp:s=Date.now(),name:i=`${o} ${r}`,data:a={},context:c={},globals:u={},custom:d={},user:l=e.user,nested:p=[],consent:f=e.consent,id:g=(0,M.getSpanId)(),trigger:h="",entity:m=o,action:v=r,timing:y=0,source:w={type:"collector",schema:"4"}}=t,b=w.count??(e.count+=1),k=w.trace??n?._meta.trace??e.trace,I={...w,count:b};void 0!==k&&(I.trace=k);const S=e.name??w.platform??"default",E=e.release??"4.4.0";return I.release={...w.release,[S]:E},{name:i,data:a,context:c,globals:(0,M.assign)(e.globals,u),custom:d,user:l,nested:p,consent:f,id:g,trigger:h,entity:m,action:v,timestamp:s,timing:y,source:I}}function ot(e,t){const n=(0,R.useHooks)(async(n,o={})=>await(0,R.tryCatchAsync)(async()=>{if(!e.allowed){const t=e.config.queueMax;if(void 0===t)throw new Error("Collector.Config.queueMax is undefined; defaults must be seeded by collector()");const r=Q(e.preRunQueue,{event:n,options:o},{max:t});if(r.dropped>0){const n=re(e.status,"collector.preRun","queue",r.dropped);X(e.preRunQueue,e.logger,"collector.preRunQueue overflow; oldest events dropped",{buffer:"queue",cap:t,droppedCount:n})}else e.preRunQueue.length<t&&Z(e.preRunQueue);return e.logger.debug("event held until run",{name:n.name,dropped:r.dropped}),Ye({ok:!0})}const r=Date.now(),{id:s,ingest:i,respond:a,mapping:c,preChain:u,include:d,exclude:l}=o;let p=a,f=n;const g=d||l?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,l):void 0,h=i??(0,R.createIngest)(s||"unknown");if(c){const t=await(0,R.processEventMapping)(f,c,e);if(t.ignore)return Ye({ok:!0});if(c.consent&&!(0,R.getGrantedConsent)(c.consent,e.consent,t.event.consent))return Ye({ok:!0});f=t.event}if(u?.length&&e.transformers&&Object.keys(e.transformers).length>0){const n=await ge(e,e.transformers,u,f,h,p,s?`source.${s}.next`:void 0);if(null===n.event)return e.logger.debug("Event dropped by transformer chain"+(n.droppedBy?` (${n.droppedBy})`:"")),Ye({ok:!0,dropped:!0});if(n.stopped)return n.respond&&(p=n.respond),Ye({ok:!0});n.respond&&(p=n.respond);const o="string"==typeof f.id?f.id:"";if(Array.isArray(n.event)){const i=await Promise.all(n.event.map(async n=>{const r=""!==o&&n.id===o?{...n,id:(0,R.getSpanId)()}:n,i=t(r),a=nt(e,i,h);return Ne(e,a,{id:s,ingest:h,respond:p},g)}));if(s){e.status.sources[s]||(e.status.sources[s]={count:0,duration:0});const t=e.status.sources[s];t.count+=n.event.length,t.lastAt=Date.now(),t.duration+=Date.now()-r}return i[0]??Ye({ok:!0})}f=""===o||"string"==typeof n.event.id&&""!==n.event.id?n.event:{...n.event,id:o}}const m=function(e,t,n){return nt(e,tt(e,t),n)}(e,f,h),v=await Ne(e,m,{id:s,ingest:h,respond:p},g);if(s){e.status.sources[s]||(e.status.sources[s]={count:0,duration:0});const t=e.status.sources[s];t.count++,t.lastAt=Date.now(),t.duration+=Date.now()-r}return v},t=>{if(t instanceof R.FatalError)throw t;return e.status.failed++,e.logger.error("push failed",{event:n,ingest:o.ingest,error:t}),Ye({ok:!1})})(),"Push",e.hooks,e.logger);return async(t,o)=>{const r="string"==typeof t.id&&""!==t.id?t:{...t,id:(0,R.getSpanId)()},s="string"==typeof r.id?r.id:"",{traceId:i,sourceId:a,parentEventId:c}=H(r,o?.ingest,e),u=Date.now(),d=G(e,{stepId:"collector.push",stepType:"collector",phase:"in",eventId:s,now:u,traceId:i,sourceId:a,parentEventId:c});d.inEvent=r,(0,R.emitStep)(e,d);try{const t=await n(r,o),d=Date.now(),l=G(e,{stepId:"collector.push",stepType:"collector",phase:"out",eventId:s,now:d,traceId:i,sourceId:a,parentEventId:c});return l.durationMs=d-u,l.outEvent=t,(0,R.emitStep)(e,l),t}catch(t){const n=Date.now(),o=G(e,{stepId:"collector.push",stepType:"collector",phase:"error",eventId:s,now:n,traceId:i,sourceId:a,parentEventId:c});throw o.durationMs=n-u,o.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},(0,R.emitStep)(e,o),t}}}function rt(e={}){const t=e.maxEntries??1e4,n=e.lowWaterMark??.8,o=e.sweepIntervalMs??6e4,r=Math.floor(t*n),s=new Map,i={hits:0,misses:0,populates:0,writes:0,deletes:0,evictions_entries:0,evictions_ttl:0};let a;return o>0&&(a=setInterval(function(){const e=Date.now();let t=0;for(const[n,o]of s)void 0!==o.expires&&o.expires<=e&&(s.delete(n),t++);i.evictions_ttl+=t},o),a&&"function"==typeof a.unref&&a.unref()),{type:"memory",config:{},get(e){const t=s.get(e);if(t)return void 0!==t.expires&&t.expires<=Date.now()?(s.delete(e),i.evictions_ttl++,void i.misses++):(s.delete(e),s.set(e,t),i.hits++,t.value);i.misses++},set(e,n,o){const a=!s.has(e);a||s.delete(e),s.set(e,{value:n,expires:void 0!==o?Date.now()+o:void 0}),i.writes++,a&&i.populates++,s.size>t&&function(){if(s.size<=t)return;const e=s.size-r;let n=0;for(const t of s.keys()){if(n>=e)break;s.delete(t),n++}i.evictions_entries+=n}()},delete(e){s.delete(e)&&i.deletes++},get counters(){return{...i}},destroy(){void 0!==a&&(clearInterval(a),a=void 0),s.clear()}}}function st(e,t){const{cacheConfig:n,cacheStore:o,namespace:r,logger:s,storeId:i,collector:a}=t,c=(e,t)=>{if(!a)return;const n=G(a,{stepId:`store.${i}`,stepType:"store",phase:"in",eventId:"",now:Date.now()});n.meta={op:"cache",cached:"hit"===t,status:t,key:e},(0,K.emitStep)(a,n)},u={hits:0,misses:0,populates:0,writes:0,deletes:0,inflight_dedups:0},d=n.rules.map(e=>({match:e.match?(0,K.compileMatcher)(e.match):()=>!0,ttl:e.ttl})),l=e=>`${r}:${e}`;function p(e,t){const n=void 0===t?{key:e}:{key:e,value:t};return d.find(e=>e.match(n))}const f=new Map;return{type:e.type,config:e.config,setup:e.setup,get counters(){return{...u}},async get(t){const n=l(t),r=await o.get(n),s=(0,K.readCacheEnvelope)(r);if(void 0!==s){if(!("expired"in s))return u.hits++,c(t,"hit"),s.value;try{await o.delete(n)}catch(e){g("delete",t,e)}}const i=f.get(n);if(i)return u.inflight_dedups++,c(t,"hit"),i;u.misses++,c(t,"miss");const a=(async()=>{try{const r=await e.get(t);if(void 0===r)return;const s=p(t,r);if(s)try{const e=1e3*s.ttl;await o.set(n,(0,K.wrapCacheEnvelope)(r,e),e),u.populates++}catch(e){g("set",t,e)}return r}finally{f.delete(n)}})();return f.set(n,a),a},async set(t,n,r){u.writes++,await e.set(t,n,r);const s=p(t,n);if(s)try{const e=1e3*s.ttl;await o.set(l(t),(0,K.wrapCacheEnvelope)(n,e),e)}catch(e){g("set",t,e)}},async delete(t){u.deletes++,await e.delete(t);try{await o.delete(l(t))}catch(e){g("delete",t,e)}}};function g(e,t,n){const o=`store-cache(${i}): cache ${e} failed for "${t}"; backing succeeded, continuing`;s?s.warn(o,{error:n}):console.warn(o,n)}}function it(e,t,n){const o=`store.${n}`,r=(0,B.useHooks)(t.get,"StoreGet",e.hooks,e.logger),s=(0,B.useHooks)(t.set,"StoreSet",e.hooks,e.logger),i=(0,B.useHooks)(t.delete,"StoreDelete",e.hooks,e.logger);t.get=async t=>{const n=Date.now(),s=G(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:n});s.meta={op:"get",key:t},(0,B.emitStep)(e,s);try{const s=await r(t),i=Date.now(),a=G(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:i});return a.durationMs=i-n,a.meta={op:"get",key:t},(0,B.emitStep)(e,a),s}catch(r){const s=Date.now(),i=G(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:s});throw i.durationMs=s-n,i.meta={op:"get",key:t},i.error=r instanceof Error?{name:r.name,message:r.message}:{message:String(r)},(0,B.emitStep)(e,i),r}},t.set=async(t,n,r)=>{const i=Date.now(),a=G(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:i});a.meta={op:"set",key:t},(0,B.emitStep)(e,a);try{await s(t,n,r);const a=Date.now(),c=G(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:a});c.durationMs=a-i,c.meta={op:"set",key:t},(0,B.emitStep)(e,c)}catch(n){const r=Date.now(),s=G(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:r});throw s.durationMs=r-i,s.meta={op:"set",key:t},s.error=n instanceof Error?{name:n.name,message:n.message}:{message:String(n)},(0,B.emitStep)(e,s),n}},t.delete=async t=>{const n=Date.now(),r=G(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:n});r.meta={op:"delete",key:t},(0,B.emitStep)(e,r);try{await i(t);const r=Date.now(),s=G(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:r});s.durationMs=r-n,s.meta={op:"delete",key:t},(0,B.emitStep)(e,s)}catch(r){const s=Date.now(),i=G(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:s});throw i.durationMs=s-n,i.meta={op:"delete",key:t},i.error=r instanceof Error?{name:r.name,message:r.message}:{message:String(r)},(0,B.emitStep)(e,i),r}}}async function at(e){const t=(0,q.assign)({globalsStatic:{},sessionStatic:{},run:!0,queueMax:1e3},e,{merge:!1,extend:!1}),n={level:e.logger?.level,handler:e.logger?.handler},o=(0,q.createLogger)(n),r={...t.globalsStatic,...e.globals},s={allowed:!1,config:t,consent:e.consent||{},custom:e.custom||{},destinations:{},transformers:{},stores:{},globals:r,hooks:e.hooks||{},observers:new Set,logger:o,on:{},queue:[],preRunQueue:[],round:0,count:0,stateVersion:0,cellVersion:{},delivery:new WeakMap,session:void 0,status:{startedAt:Date.now(),in:0,out:0,failed:0,sources:{},destinations:{},dropped:{},connectionErrors:{},breakers:{}},timing:Date.now(),user:e.user||{},sources:{},pending:{destinations:{}},hasShutdown:!1,seenEvents:new Set,push:void 0,command:void 0,elb:void 0};var i,a;void 0!==e.name&&(s.name=e.name),void 0!==e.release&&(s.release=e.release),s.push=ot(s,e=>tt(s,e)),s.command=(i=s,a=et,(0,z.useHooks)(async(e,t,n)=>await(0,z.tryCatchAsync)(async()=>await a(i,e,t,n),n=>{if(n instanceof z.FatalError)throw n;return i.status.failed++,i.logger.error("command failed",{command:e,data:t,error:n}),Ye({ok:!1})})(),"Command",i.hooks,i.logger)),s.elb=function(e){return async(t,n,o,r,s)=>{if("string"==typeof t&&t.startsWith("walker ")){const o=t.replace("walker ","");return e.command(o,n)}let i;if("string"==typeof t)i={name:t},n&&"object"==typeof n&&!Array.isArray(n)&&(i.data=n);else{if(!t||"object"!=typeof t||Array.isArray(t))return Ye({ok:!1});i={...t},n&&"object"==typeof n&&!Array.isArray(n)&&(i.data={...i.data||{},...n})}return o&&"object"==typeof o&&(i.context=o),r&&Array.isArray(r)&&(i.nested=r),s&&"object"==typeof s&&(i.custom=s),e.push(i)}}(s);const c=e.stores||{};return s.stores=await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t)){const{code:t,config:s={},env:i={}}=r,a=e.logger.scope("store").scope(o),c={collector:e,logger:a,id:o,config:s,env:i,reportError:se(e,"store",o,a)},u=await t(c);n[o]=u}const o=t,r=function(e){const t={};for(const n of Object.keys(e))t[n]="WHITE";const n=[],o=[];function r(s){const i=t[s];if("BLACK"===i)return;if("GRAY"===i){const e=o.indexOf(s),t=o.slice(-1===e?0:e).concat(s).join(" -> ");throw new Error(`Cycle in cache.store chain: ${t}`)}t[s]="GRAY",o.push(s);const a=e[s].cache?.store;if(void 0!==a){if(!(a in e))throw new Error(`Store "${s}" cache.store references "${a}", which is not declared in flow.stores`);r(a)}o.pop(),t[s]="BLACK",n.push(s)}for(const n of Object.keys(e))"WHITE"===t[n]&&r(n);return n}(o);for(const t of r){const r=o[t].cache;if(!r)continue;let s,i;void 0!==r.store?(s=n[r.store],i=r.store):(n.__cache||(n.__cache=rt()),s=n.__cache,i="__cache");const a=r.namespace??t;e.logger.scope("store-cache").scope(t).info(`store "${t}" caches with namespace "${a}:" via ${i}`),n[t]=st(n[t],{storeId:t,cacheConfig:r,cacheStore:s,namespace:a,logger:e.logger.scope("store-cache").scope(t),collector:e})}for(const[t,o]of Object.entries(n))"__cache"!==t&&it(e,o,t);return n}(s,c),function(e,t,n){const o=new Map;for(const[n,r]of Object.entries(e))t[n]&&o.set(r,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))r(t.env);function r(e){if(e)for(const[t,n]of Object.entries(e))if("object"==typeof n&&null!==n){const r=o.get(n);r&&(e[t]=r)}}}(c,s.stores,e),s.stores.__cache||(s.stores.__cache=rt()),s.destinations=await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t))r.config?.require?.length?e.pending.destinations[o]=r:n[o]=Qe(r);return n}(s,e.destinations||{}),s.transformers=await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t)){const{code:t,env:s={}}=r,i=(0,T.validateStepEntry)(r,"Transformer");if(!i.ok){e.logger.warn(`Transformer ${o} invalid (${i.code}): ${i.reason}. Skipping.`);continue}const{config:a}=ue(r,"before"),{config:c}=ue({...r,config:a},"next"),u=Object.keys(s).length>0?{...c,env:s}:c,{cache:d}=r,l=d?{...u,cache:d}:u,p=r.config?.state??r.state,f=void 0!==p&&void 0===l.state?{...l,state:p}:l,g=e.logger.scope("transformer").scope(o),h={collector:e,logger:g,id:o,ingest:(0,T.createIngest)(o),config:f,env:s,reportError:se(e,"transformer",o,g)},m=t??(e=>{const t=r.mapping;if(t){const n=[];if(void 0!==t.data&&n.push("data"),t.mapping)for(const[e,o]of Object.entries(t.mapping))if("object"==typeof o&&null!==o)for(const[t,r]of Object.entries(o)){if("object"!=typeof r||null===r)continue;const o=r;void 0!==o.data&&n.push(`mapping[${e}][${t}].data`),void 0!==o.silent&&n.push(`mapping[${e}][${t}].silent`)}return n.length>0&&e.collector.logger.warn(`Transformer ${o}: \`${n.join(", ")}\` ignored at transformer position (only event-mutating fields apply).`),{type:"pass",config:e.config,push:async n=>{const o=await(0,T.processEventMapping)(n,t,e.collector);return!o.ignore&&{event:o.event}}}}return{type:"pass",config:e.config,push:e=>({event:e})}}),v=await m(h);void 0!==r.before&&void 0===v.config?.before&&(v.config={...v.config??{},before:r.before}),void 0!==r.next&&void 0===v.config?.next&&(v.config={...v.config??{},next:r.next}),void 0!==p&&void 0===v.config?.state&&(v.config={...v.config??{},state:p}),n[o]=v}return n}(s,e.transformers||{}),s}var ct=globalThis;function ut(e){try{const t=ct.window;if(!t)return;t.localStorage.getItem(C.OBSERVE_STORAGE_KEY)===e&&t.localStorage.removeItem(C.OBSERVE_STORAGE_KEY)}catch{}}function dt(e,t){return void 0===t?e:n=>e({...n,release:t})}async function lt(e){e=e||{};const t=await at(e);(function(e,t){if(t.observers)for(const n of t.observers)e.observers.add(n);const n=t.observe;if(!n)return;const o=e.name??"default";if("binding"in n){const t=function(){const e=ct.window,t=ct.URLSearchParams;if(!e||!t)return null;try{const n=new t(e.location.search.replace(/^\?/,"")).getAll(C.OBSERVE_STORAGE_KEY);return n.length>0?n[n.length-1]??null:null}catch{return null}}(),r=t??function(){try{return ct.window?.localStorage.getItem(C.OBSERVE_STORAGE_KEY)??null}catch{return null}}();if(!r)return;const s=(0,C.parseObserveCredential)(r);if(!s)return void(null===t?(e.logger.warn("observe: malformed stored credential cleared"),ut(r)):e.logger.warn("observe: malformed credential ignored"));if(s.pb!==n.binding)return void e.logger.warn("observe: credential binding mismatch, credential ignored");let i;!function(e){try{ct.window?.localStorage.setItem(C.OBSERVE_STORAGE_KEY,e)}catch{}}(r),null!==t&&function(){const e=ct.window,t=ct.URLSearchParams;if(e&&t)try{const n=e.location.href,o=n.indexOf("#"),r=o>=0?n.slice(o):"",s=o>=0?n.slice(0,o):n,i=s.indexOf("?"),a=i>=0?s.slice(0,i):s,c=new t(i>=0?s.slice(i+1):"");c.delete(C.OBSERVE_STORAGE_KEY);const u=c.toString();e.history.replaceState({},"",`${a}${u?`?${u}`:""}${r}`)}catch{}}();const a=(0,C.createBatchedPoster)({url:`${n.url}/ingest/${s.ses}`,token:s.secret,headers:{"X-Walkeros-Binding":n.binding},onStatus:t=>{401===t&&(ut(r),i&&e.observers.delete(i))}});i=(0,C.createTelemetryObserver)(function(e,t){return void 0===t?e:n=>e({...n,flowId:t})}(dt(a,e.release),n.flowId),{flowId:n.flowId??o,...void 0!==n.level?{level:n.level}:{},...void 0!==n.sample?{sample:n.sample}:{}}),e.observers.add(i);const c=n.level;return void(void 0!==c&&(e.observeLevel=()=>c))}if("off"===n.level)return;const r=n.level;void 0!==r&&(e.observeLevel=()=>r),e.observers.add((0,C.createTelemetryObserver)(dt((0,C.createBatchedPoster)({url:`${n.url}/ingest/${n.sessionId}`,token:n.token}),e.release),{flowId:o,level:n.level,sample:n.sample}))})(t,e),await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t)){const t=await be(e,o,r);if(!t)continue;const s=r.config?.require;t.config={...t.config,init:!1,...s?{require:[...s]}:{}},n[o]=t}Object.assign(e.sources,n);for(const t of Object.keys(n)){const n=e.sources[t];let o=!1;n.init&&await(0,_.tryCatchAsync)(n.init.bind(n),n=>{if(n instanceof _.FatalError)throw n;o=!0,e.status.failed++,e.logger.scope("source").error("source init failed",{sourceId:t,error:n})})(),o||(n.config.init=!0,ye(n)&&await ve(e,n,t))}return await ke(e),n}(t,e.sources||{});const{consent:n,user:o,globals:r,custom:s}=e;n&&await t.command("consent",n),o&&await t.command("user",o),r&&await t.command("globals",r),s&&await t.command("custom",s),t.config.run&&await t.command("run");let i=t.elb;const a=Object.values(t.sources),c=a.find(e=>e.config.primary);return c?i=c.push:a.length>0&&(i=a[0].push),{collector:t,elb:i}}var pt=async e=>{let t;return{get flow(){return t},trigger:()=>async n=>{if(!t){const n=await lt({...e,run:e.run??!0});t={collector:n.collector,elb:n.elb}}await t.elb(n)}}};//# sourceMappingURL=dev.js.map
package/dist/dev.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/dev.ts","../src/schemas/index.ts","../src/schemas/settings.ts","../src/schemas/mapping.ts","../src/examples/index.ts","../src/examples/env.ts","../src/examples/step.ts","../src/examples/trigger.ts"],"sourcesContent":["export * as schemas from './schemas';\nexport * as examples from './examples';\n","import { zodToSchema } from '@walkeros/core/dev';\nimport { SettingsSchema } from './settings';\nimport { MappingSchema } from './mapping';\n\nexport { SettingsSchema, type Settings } from './settings';\nexport { MappingSchema, type Mapping } from './mapping';\n\n// JSON Schema\nexport const settings = zodToSchema(SettingsSchema);\nexport const mapping = zodToSchema(MappingSchema);\n","import { z } from '@walkeros/core/dev';\n\nexport const SettingsSchema = z.object({\n events: z\n .array(\n z\n .object({\n delay: z\n .number()\n .optional()\n .describe('Milliseconds to wait before pushing this event'),\n })\n .passthrough()\n .describe('Partial walkerOS event with optional delay'),\n )\n .describe('Events to push to the collector on init'),\n});\n\nexport type Settings = z.infer<typeof SettingsSchema>;\n","import { z } from '@walkeros/core/dev';\n\nexport const MappingSchema = z.object({});\n\nexport type Mapping = z.infer<typeof MappingSchema>;\n","export * as env from './env';\nexport * as step from './step';\nexport { createTrigger } from './trigger';\n","import type { Env } from '../types';\nimport type { Logger } from '@walkeros/core';\n\n/**\n * Example environment configurations for source demo\n */\n\nconst noop = async () => ({\n ok: true,\n});\n\n// Simple no-op logger for demo purposes\nconst noopFn = () => {};\nconst noopLogger: Logger.Instance = {\n error: noopFn,\n warn: noopFn,\n info: noopFn,\n debug: noopFn,\n throw: (message: string | Error) => {\n throw typeof message === 'string' ? new Error(message) : message;\n },\n json: noopFn,\n scope: () => noopLogger,\n};\n\nexport const init: Env | undefined = undefined;\n\nexport const push: Env = {\n push: noop as Env['push'],\n command: noop as Env['command'],\n elb: noop as Env['elb'],\n logger: noopLogger,\n};\n\n/**\n * Simulation tracking paths\n */\nexport const simulation = ['call:elb'];\n","import type { Flow } from '@walkeros/core';\n\nexport const pageView: Flow.StepExample = {\n title: 'Page view',\n description:\n 'A simple event object is pushed through the demo source as a walker elb call for learning purposes.',\n in: {\n name: 'page view',\n data: { title: 'Home' },\n },\n out: [\n [\n 'elb',\n {\n name: 'page view',\n data: { title: 'Home' },\n },\n ],\n ],\n};\n\nexport const delayedEvent: Flow.StepExample = {\n title: 'Delayed event',\n description:\n 'An event object with a delay field is pushed through the demo source after the specified wait.',\n in: {\n name: 'product add',\n data: { id: 'abc', name: 'Test Product' },\n delay: 100,\n },\n out: [\n [\n 'elb',\n {\n name: 'product add',\n data: { id: 'abc', name: 'Test Product' },\n },\n ],\n ],\n};\n","import type { Trigger, Collector, WalkerOS } from '@walkeros/core';\nimport { startFlow } from '@walkeros/collector';\n\n/**\n * Demo source createTrigger.\n *\n * DOM-free. The demo source's `push` is `elb`, so the trigger pushes the\n * supplied content (a walkerOS event `{ name, data }`) straight through `elb`\n * into the collector. On the first trigger call the flow is lazily started.\n *\n * Determinism note: `startFlow` initializes the demo source, which eagerly\n * fires every `settings.events` entry the source declares (via setTimeout).\n * Config is passed through UNMODIFIED (pass-through doctrine), so the events a\n * caller observes are the supplied content PLUS any `settings.events` the\n * flow's demo source declares. For deterministic single-event simulation the\n * flow's demo source must declare no `settings.events`.\n *\n * @example\n * const { trigger } = await createTrigger(config);\n * await trigger()({ name: 'page view', data: { title: 'Home' } });\n */\nconst createTrigger: Trigger.CreateFn<WalkerOS.DeepPartialEvent, void> = async (\n config: Collector.InitConfig,\n) => {\n let flow: Trigger.FlowHandle | undefined;\n\n const trigger: Trigger.Fn<WalkerOS.DeepPartialEvent, void> =\n () => async (content: WalkerOS.DeepPartialEvent) => {\n // Lazy startFlow — first call initializes the flow and the demo source.\n if (!flow) {\n const result = await startFlow({ ...config, run: config.run ?? true });\n flow = { collector: result.collector, elb: result.elb };\n }\n\n // The demo source pushes via elb; mirror that by pushing the supplied\n // content straight through. Only the supplied content is pushed here.\n await flow.elb(content);\n };\n\n return {\n get flow() {\n return flow;\n },\n trigger,\n };\n};\n\nexport { createTrigger };\n"],"mappings":"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","names":["import_dev","import_dev"]}
1
+ {"version":3,"sources":["../src/dev.ts","../src/schemas/index.ts","../src/schemas/settings.ts","../src/schemas/mapping.ts","../src/examples/index.ts","../src/examples/env.ts","../src/examples/step.ts","../src/examples/trigger.ts"],"sourcesContent":["export * as schemas from './schemas';\nexport * as examples from './examples';\n","import { zodToSchema } from '@walkeros/core/dev';\nimport { SettingsSchema } from './settings';\nimport { MappingSchema } from './mapping';\n\nexport { SettingsSchema, type Settings } from './settings';\nexport { MappingSchema, type Mapping } from './mapping';\n\n// JSON Schema\nexport const settings = zodToSchema(SettingsSchema);\nexport const mapping = zodToSchema(MappingSchema);\n","import { z } from '@walkeros/core/dev';\n\nexport const SettingsSchema = z.object({\n events: z\n .array(\n z\n .object({\n delay: z\n .number()\n .optional()\n .describe('Milliseconds to wait before pushing this event'),\n })\n .passthrough()\n .describe('Partial walkerOS event with optional delay'),\n )\n .describe('Events to push to the collector on init'),\n});\n\nexport type Settings = z.infer<typeof SettingsSchema>;\n","import { z } from '@walkeros/core/dev';\n\nexport const MappingSchema = z.object({});\n\nexport type Mapping = z.infer<typeof MappingSchema>;\n","export * as env from './env';\nexport * as step from './step';\nexport { createTrigger } from './trigger';\n","import type { Env } from '../types';\nimport type { Logger } from '@walkeros/core';\n\n/**\n * Example environment configurations for source demo\n */\n\nconst noop = async () => ({\n ok: true,\n});\n\n// Simple no-op logger for demo purposes\nconst noopFn = () => {};\nconst noopLogger: Logger.Instance = {\n error: noopFn,\n warn: noopFn,\n info: noopFn,\n debug: noopFn,\n throw: (message: string | Error) => {\n throw typeof message === 'string' ? new Error(message) : message;\n },\n json: noopFn,\n scope: () => noopLogger,\n};\n\nexport const init: Env | undefined = undefined;\n\nexport const push: Env = {\n push: noop as Env['push'],\n command: noop as Env['command'],\n elb: noop as Env['elb'],\n logger: noopLogger,\n};\n\n/**\n * Simulation tracking paths\n */\nexport const simulation = ['call:elb'];\n","import type { Flow } from '@walkeros/core';\n\nexport const pageView: Flow.StepExample = {\n title: 'Page view',\n description:\n 'A simple event object is pushed through the demo source as a walker elb call for learning purposes.',\n in: {\n name: 'page view',\n data: { title: 'Home' },\n },\n out: [\n [\n 'elb',\n {\n name: 'page view',\n data: { title: 'Home' },\n },\n ],\n ],\n};\n\nexport const delayedEvent: Flow.StepExample = {\n title: 'Delayed event',\n description:\n 'An event object with a delay field is pushed through the demo source after the specified wait.',\n in: {\n name: 'product add',\n data: { id: 'abc', name: 'Test Product' },\n delay: 100,\n },\n out: [\n [\n 'elb',\n {\n name: 'product add',\n data: { id: 'abc', name: 'Test Product' },\n },\n ],\n ],\n};\n","import type { Trigger, Collector, WalkerOS } from '@walkeros/core';\nimport { startFlow } from '@walkeros/collector';\n\n/**\n * Demo source createTrigger.\n *\n * DOM-free. The demo source's `push` is `elb`, so the trigger pushes the\n * supplied content (a walkerOS event `{ name, data }`) straight through `elb`\n * into the collector. On the first trigger call the flow is lazily started.\n *\n * Determinism note: `startFlow` initializes the demo source, which eagerly\n * fires every `settings.events` entry the source declares (via setTimeout).\n * Config is passed through UNMODIFIED (pass-through doctrine), so the events a\n * caller observes are the supplied content PLUS any `settings.events` the\n * flow's demo source declares. For deterministic single-event simulation the\n * flow's demo source must declare no `settings.events`.\n *\n * @example\n * const { trigger } = await createTrigger(config);\n * await trigger()({ name: 'page view', data: { title: 'Home' } });\n */\nconst createTrigger: Trigger.CreateFn<WalkerOS.DeepPartialEvent, void> = async (\n config: Collector.InitConfig,\n) => {\n let flow: Trigger.FlowHandle | undefined;\n\n const trigger: Trigger.Fn<WalkerOS.DeepPartialEvent, void> =\n () => async (content: WalkerOS.DeepPartialEvent) => {\n // Lazy startFlow — first call initializes the flow and the demo source.\n if (!flow) {\n const result = await startFlow({ ...config, run: config.run ?? true });\n flow = { collector: result.collector, elb: result.elb };\n }\n\n // The demo source pushes via elb; mirror that by pushing the supplied\n // content straight through. Only the supplied content is pushed here.\n await flow.elb(content);\n };\n\n return {\n get flow() {\n return flow;\n },\n trigger,\n };\n};\n\nexport { createTrigger };\n"],"mappings":"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","names":["import_dev","import_dev"]}
package/dist/dev.mjs CHANGED
@@ -1 +1 @@
1
- var e=Object.defineProperty,t=(t,n)=>{for(var o in n)e(t,o,{get:n[o],enumerable:!0})},n={};t(n,{MappingSchema:()=>i,SettingsSchema:()=>s,mapping:()=>u,settings:()=>c});import{zodToSchema as o}from"@walkeros/core/dev";import{z as r}from"@walkeros/core/dev";var s=r.object({events:r.array(r.object({delay:r.number().optional().describe("Milliseconds to wait before pushing this event")}).passthrough().describe("Partial walkerOS event with optional delay")).describe("Events to push to the collector on init")});import{z as a}from"@walkeros/core/dev";var i=a.object({}),c=o(s),u=o(i),d={};t(d,{createTrigger:()=>jn,env:()=>l,step:()=>y});var l={};t(l,{init:()=>h,push:()=>m,simulation:()=>v});var f=async()=>({ok:!0}),p=()=>{},g={error:p,warn:p,info:p,debug:p,throw:e=>{throw"string"==typeof e?new Error(e):e},json:p,scope:()=>g},h=void 0,m={push:f,command:f,elb:f,logger:g},v=["call:elb"],y={};t(y,{delayedEvent:()=>b,pageView:()=>w});var w={title:"Page view",description:"A simple event object is pushed through the demo source as a walker elb call for learning purposes.",in:{name:"page view",data:{title:"Home"}},out:[["elb",{name:"page view",data:{title:"Home"}}]]},b={title:"Delayed event",description:"An event object with a delay field is pushed through the demo source after the specified wait.",in:{name:"product add",data:{id:"abc",name:"Test Product"},delay:100},out:[["elb",{name:"product add",data:{id:"abc",name:"Test Product"}}]]};import{assign as k}from"@walkeros/core";import{OBSERVE_STORAGE_KEY as I,createBatchedPoster as E,createTelemetryObserver as S,parseObserveCredential as O}from"@walkeros/core";import{assign as q,createLogger as x}from"@walkeros/core";import{assign as j,buildCacheContext as C,clone as $,compileCache as A,checkCache as D,storeCache as M,createIngest as T,debounce as P,emitStep as _,getId as z,getGrantedConsent as B,getNextSteps as K,isDefined as F,isFunction as R,isObject as U,OBSERVE_ENV_KEY as H,processEventMapping as G,stepId as V,tryCatchAsync as W,useHooks as L,compileState as N,applyState as Y}from"@walkeros/core";import{emitStep as J}from"@walkeros/core";import{parseCallPath as X}from"@walkeros/core";import{isArray as Q,FatalError as Z}from"@walkeros/core";import{tryCatch as ee,tryCatchAsync as te}from"@walkeros/core";import{stepId as ne}from"@walkeros/core";import{createIngest as oe,FatalError as re,getMappingValue as se,getSpanId as ae,parseTraceparent as ie,tryCatchAsync as ce,getNextSteps as ue,compileCache as de,checkCache as le,storeCache as fe,applyUpdate as pe,buildCacheContext as ge,compileState as he,applyState as me}from"@walkeros/core";import{createIngest as ve,emitStep as ye,FatalError as we,isObject as be,stepId as ke,tryCatchAsync as Ie,useHooks as Ee,getNextSteps as Se,compileCache as Oe,checkCache as qe,storeCache as xe,buildCacheContext as je,validateStepEntry as Ce,processEventMapping as $e,compileState as Ae,applyState as De}from"@walkeros/core";import{assign as Me,getSpanId as Te,getTraceId as Pe,isFunction as _e,isString as ze}from"@walkeros/core";import{isObject as Be}from"@walkeros/core";import{createIngest as Ke,emitStep as Fe,FatalError as Re,getGrantedConsent as Ue,getSpanId as He,processEventMapping as Ge,tryCatchAsync as Ve,useHooks as We}from"@walkeros/core";import{FatalError as Le,useHooks as Ne,tryCatchAsync as Ye}from"@walkeros/core";import{emitStep as Je,useHooks as Xe}from"@walkeros/core";import{compileMatcher as Qe,emitStep as Ze,readCacheEnvelope as et,wrapCacheEnvelope as tt}from"@walkeros/core";var nt={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",Scoped:"_",Session:"session",Shutdown:"shutdown",User:"user",Walker:"walker"};function ot(e,t,n){return{traceId:e.source?.trace??t?._meta.trace??n.trace,sourceId:t?._meta.path[0],parentEventId:t?._meta.parentEventId}}function rt(e,t){const n=e.status.startedAt,o={flowId:e.name??"default",stepId:t.stepId,stepType:t.stepType,phase:t.phase,eventId:t.eventId,timestamp:new Date(t.now).toISOString(),elapsedMs:t.now-n};return t.traceId&&(o.traceId=t.traceId),t.sourceId&&(o.sourceId=t.sourceId),t.parentEventId&&(o.parentEventId=t.parentEventId),o}function st(e){return"object"==typeof e&&null!==e}function at(e,t,n){if(null===e||"object"!=typeof e)return e;if(n>=8)return e;const o=t.get(e);if(void 0!==o)return o;if(Array.isArray(e)){const o=[];t.set(e,o);for(const r of e)o.push(at(r,t,n+1));return o}const r={};t.set(e,r);for(const[o,s]of Object.entries(e))r[o]="function"==typeof s?s:at(s,t,n+1);return r}function it(e){const t=[],n=[],{simulation:o,...r}=e,s=at(r,new WeakMap,0);for(const e of o){const o=X(e);if(0===o.length)continue;const r=o.join(".");if(o.length-1>=8){n.push(r);continue}let a=s,i=!0;for(let e=0;e<o.length-1;e++){const t=a[o[e]];if(!st(t)){i=!1;break}a=t}const c=o[o.length-1];if(!i||!(c in a)){n.push(r);continue}const u=a[c];"function"==typeof u?a[c]=function(...e){return t.push({fn:r,args:e,ts:Date.now()}),u.apply(this,e)}:n.push(r)}return{wrappedEnv:s,calls:t,unresolved:n}}function ct(e,t){try{return e[t]}catch{return"[unreadable]"}}function ut(e){const t=new WeakSet,n=(e,o)=>{if(null===e)return null;if("function"==typeof e)return"[function]";if("string"==typeof e||"boolean"==typeof e)return e;if("number"==typeof e)return Number.isFinite(e)?e:null;if("bigint"==typeof e)return String(e);if("object"!=typeof e)return;const r=e;if(t.has(r))return"[circular]";if(o>=6)return"[truncated]";let s;t.add(r);try{if(Array.isArray(r))s=r.map(e=>n(e,o+1));else if(function(e){const t=Object.getPrototypeOf(e);return t===Object.prototype||null===t}(r)){const e={};for(const t of Object.keys(r))e[t]=n(ct(r,t),o+1);s=e}else s=function(e){try{return String(e)}catch{return"[object]"}}(r)}catch{s="[unreadable]"}return t.delete(r),s};return e.map(e=>n(e,0))}function dt(e){return e.map(e=>({fn:e.fn,args:ut(e.args),ts:e.ts}))}function lt(e,t,n,o){if(!Number.isFinite(n.max)||n.max<=0)throw new Error(`pushBounded: max must be > 0 (got ${n.max})`);if("dropNewest"===(n.onOverflow??"dropOldest"))return e.length>=n.max?(o&&o([t]),{appended:!1,dropped:1}):(e.push(t),{appended:!0,dropped:0});const r=[];for(;e.length>=n.max;)r.push(e.shift());return e.push(t),r.length>0&&o&&o(r),{appended:!0,dropped:r.length}}var ft=new WeakMap;function pt(e,t,n,o){ft.get(e)||(ft.set(e,!0),t.warn(n,o))}function gt(e){ft.delete(e)}var ht=()=>Date.now();function mt(e){if(void 0!==e)return"number"==typeof e?{threshold:e,cooldown:3e4}:{threshold:e.threshold??5,cooldown:e.cooldown??3e4}}function vt(e,t,n,o,r){if("partial"===n)return;const s=((a=e)[i=t]||(a[i]={state:"closed",consecutiveFailures:0}),a[i]);var a,i;return"success"===n?(s.consecutiveFailures=0,s.state="closed",s.probing=!1,void(s.openUntil=void 0)):(s.consecutiveFailures+=1,"half-open"===s.state?(s.state="open",s.probing=!1,void(s.openUntil=ht()+r)):void(s.consecutiveFailures>=o&&(s.state="open",s.probing=!1,s.openUntil=ht()+r)))}function yt(e,t){return e.status.destinations[t]||(e.status.destinations[t]={count:0,failed:0,duration:0,queuePushSize:0,dlqSize:0}),e.status.destinations[t]}function wt(e,t,n,o){e.dropped[t]||(e.dropped[t]={});const r=e.dropped[t];return r[n]=(r[n]??0)+o,r[n]}function bt(e,t,n,o,r){const s=ne(t,n);return(t,a)=>{try{if(a)return r?function(e,t,n,o,r,s){const a=t.dlq=t.dlq||[],i={max:t.config.dlqMax??100},c=lt(a,[o,r],i);if(c.dropped>0){const t=wt(e.status,ne("destination",n),"dlq",c.dropped);pt(a,s,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:n,cap:i.max,droppedCount:t})}else a.length<i.max&&gt(a);const u=yt(e,n);u.failed++,u.dlqSize=a.length,e.status.failed++;const d=mt(t.config.breaker);if(d){const o=t.config.id||n;vt(e.status.breakers,ne("destination",o),"transport-failure",d.threshold,d.cooldown)}}(e,r,n,a,t,o):e.status.failed++,void o.error("report error",{error:t instanceof Error?t.message:String(t),event:a.name});e.status.connectionErrors[s]=(e.status.connectionErrors[s]??0)+1,o.error("connection error",{error:t instanceof Error?t.message:String(t)})}catch{}}}function kt(e,t){return e.storeId&&t.stores[e.storeId]?t.stores[e.storeId]:t.stores.__cache}function It(e,t){return e?t.stores[e]:t.stores.__cache}function Et(e){const t={};for(const[n,o]of Object.entries(e)){const e=o.config?.next;"string"==typeof e||Array.isArray(e)&&e.every(e=>"string"==typeof e)?t[n]={next:e}:t[n]={}}return t}function St(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 Ot(e,t={}){if(!e)return[];if(Array.isArray(e))return e;const n=[],o=new Set;let r=e;for(;r&&t[r]&&!o.has(r);){o.add(r),n.push(r);const e=t[r].next;if(Array.isArray(e)){n.push(...e);break}r=e}return n}async function qt(e,t,n){if(t.init&&!t.config.init){const o=t.type||"unknown",r=e.logger.scope(`transformer:${o}`),s={collector:e,logger:r,id:n,ingest:ve(n),config:t.config,env:$t(t.config.env),reportError:bt(e,"transformer",n,r)};r.debug("init");const a=await Ee(t.init,"TransformerInit",e.hooks,e.logger)(s);if(!1===a)return!1;t.config={...a||t.config,env:a?.env||t.config.env,init:!0},r.debug("init done")}return!0}async function xt(e,t,n,o,r,s){const a=t.type||"unknown",i=e.logger.scope(`transformer:${a}`),c={collector:e,logger:i,id:n,ingest:r,config:t.config,env:{...$t(t.config.env),...s?{respond:s}:{}},reportError:bt(e,"transformer",n,i)};i.debug("push",{event:o.name});const u="string"==typeof o.id?o.id:"",{traceId:d,sourceId:l,parentEventId:f}=ot(o,r,e),p=Date.now(),g=rt(e,{stepId:ke("transformer",n),stepType:"transformer",phase:"in",eventId:u,now:p,traceId:d,sourceId:l,parentEventId:f});g.inEvent=o,ye(e,g);try{const r=await Ee(t.push,"TransformerPush",e.hooks,e.logger)(o,c),s=Date.now(),a=rt(e,{stepId:ke("transformer",n),stepType:"transformer",phase:"out",eventId:u,now:s,traceId:d,sourceId:l,parentEventId:f});return a.durationMs=s-p,a.outEvent=r,ye(e,a),i.debug("push done"),r}catch(t){const o=Date.now(),r=rt(e,{stepId:ke("transformer",n),stepType:"transformer",phase:"error",eventId:u,now:o,traceId:d,sourceId:l,parentEventId:f});throw r.durationMs=o-p,r.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},ye(e,r),t}}function jt(e,t){return e?{...e,_meta:{...e._meta,path:[...e._meta.path]}}:ve(t)}async function Ct(e,t,n,o,r,s,a){r||(r=ve(n[0]??"chain")),a&&r._meta&&(r._meta.chainPath=a);let i=o,c=s;for(const o of n){const s=t[o];if(!s){e.logger.warn(`Transformer not found: ${o}`);continue}if(r&&r._meta&&r._meta.path.length>256)return e.logger.error(`Max path length exceeded at ${o}`),{event:null,respond:c};if(r&&r._meta&&(r._meta.hops++,r._meta.path.push(o)),!await Ie(qt,t=>{if(t instanceof we)throw t;return e.status.failed++,e.logger.scope(`transformer:${s.type||"unknown"}`).error("transformer init failed",{transformer:o,error:t}),!1})(e,s,o))return{event:null,respond:c};if(a&&void 0!==s.config?.chainMocks?.[a]){const t=s.config.chainMocks[a];e.logger.scope(`transformer:${s.type||"unknown"}`).debug("chainMock",{chain:a}),i=t;continue}if(void 0!==s.config?.mock){e.logger.scope(`transformer:${s.type||"unknown"}`).debug("mock"),i=s.config.mock;continue}if(s.config?.disabled)continue;const u=s.config?.cache,d=u?Oe(u):void 0,l=d?kt(d,e):void 0,f=s.config?.state?Ae(s.config.state):void 0,p=f?.filter(e=>"get"===e.mode),g=f?.filter(e=>"set"===e.mode),h=async t=>g&&0!==g.length?De(g,t=>It(t,e),t,e):t;let m;if(d&&l){const e=je(r,i),t=await qe(d,l,e);if("HIT"===t?.status&&t.value){if(i=t.value,d.stop)return{event:i,respond:c,stopped:!0};continue}"MISS"===t?.status&&(m={key:t.key,ttl:t.rule.ttl})}const v=s.config.before;if(v){const n=Se(v,je(r,i));if(1===n.length){const o=Ot(n[0],Et(t));if(o.length>0){const n=await Ct(e,t,o,i,r,c,a);if(null===n.event)return{event:null,respond:n.respond??c};if(n.stopped)return{event:Array.isArray(n.event)?n.event[0]:n.event,respond:n.respond??c,stopped:!0};n.respond&&(c=n.respond),i=Array.isArray(n.event)?n.event[0]:n.event}}else n.length>1&&await Promise.all(n.map(n=>Ie(Ct,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,Ot(n,Et(t)),i,jt(r,n),void 0,a)))}p&&p.length>0&&(i=await De(p,t=>It(t,e),i,e));const y=await Ie(xt,t=>(e.logger.scope(`transformer:${s.type||"unknown"}`).error("Push failed",{error:t}),!1))(e,s,o,i,r,c);if(!1===y)return{event:null,respond:c,droppedBy:o};if(Array.isArray(y)){const s=n.slice(n.indexOf(o)+1),u=await Promise.all(y.map(async n=>{const o=await h(n.event||i),u=jt(r,"unknown");if(n.next){const r=Se(n.next,je(u,o));if(0===r.length)return{event:o,respond:c};if(1===r.length){const n=Ot(r[0],Et(t));return n.length>0?Ct(e,t,n,o,u,c,a):{event:o,respond:c}}return(await Promise.all(r.map(n=>Ie(Ct,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,Ot(n,Et(t)),o,jt(u,n),void 0,a)))).map(e=>({event:e.event,respond:void 0}))}return s.length>0?Ct(e,t,s,o,u,c,a):{event:o,respond:c}}));let d=c;const l=[];for(const e of u.flat())if(null!==e)if(e&&"object"==typeof e&&"event"in e){const t=e;if(t.respond&&(d=t.respond),null===t.event)continue;Array.isArray(t.event)?l.push(...t.event):l.push(t.event)}else l.push(e);return 0===l.length?{event:null,respond:d}:1===l.length?{event:l[0],respond:d}:{event:l,respond:d}}if(y&&"object"==typeof y){const{event:n,respond:o,next:s}=y;if(o&&(c=o),void 0!==s){const o=await h(n||i),u=Se(s,je(r,o));if(0===u.length){i=o;continue}if(1===u.length){const n=Ot(u[0],Et(t));return n.length>0?Ct(e,t,n,o,r,c,a):(e.logger.warn(`Branch target not found: ${JSON.stringify(s)}`),{event:null,respond:c})}return await Promise.all(u.map(n=>Ie(Ct,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,Ot(n,Et(t)),o,jt(r,n),void 0,a))),{event:null,respond:void 0}}n&&(i=n)}g&&g.length>0&&(i=await De(g,t=>It(t,e),i,e)),m&&l&&xe(l,m.key,i,m.ttl);const w=s.config.next,b="string"==typeof w||Array.isArray(w)&&w.every(e=>"string"==typeof e),k=void 0!==w&&!b;if((!y||"object"==typeof y&&!y.next)&&k){const n=Se(s.config.next,je(r,i));if(1===n.length){const o=Ot(n[0],Et(t));return o.length>0?Ct(e,t,o,i,r,c,a):{event:i,respond:c}}return n.length>1?(await Promise.all(n.map(n=>Ie(Ct,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,Ot(n,Et(t)),i,jt(r,n),void 0,a))),{event:null,respond:void 0}):{event:i,respond:c}}}return{event:i,respond:c}}function $t(e){return e&&be(e)?e:{}}function At(e){return"string"==typeof e||!(!Array.isArray(e)||!e.every(e=>"string"==typeof e))}async function Dt(e,t,n){if(!t.on||!t.queueOn?.length)return;const o=t.queueOn;t.queueOn=[];const r=n||t.config?.id||"unknown";for(const{type:n,data:s}of o)Ut(n)&&!Lt(e,t,n)||(await ce(t.on,t=>{if(t instanceof re)throw t;e.status.failed++,e.logger.scope("source").error("source on flush failed",{sourceId:r,type:n,error:t})})(n,s),Ut(n)&&Wt(e,t,n))}function Mt(e){return Boolean(e.config.init)&&!e.config.require?.length}function Tt(e){return"object"==typeof e&&null!==e}async function Pt(e,t,n){const{code:o,config:r={},env:s={},primary:a,next:i,before:c,cache:u}=n,d=r.state??n.state,l=d?he(d):void 0,f=u,p=f?de({...f,stop:f.stop??!0}):void 0,g=At(i)?Ot(i,Et(e.transformers)):void 0,h=At(c)?Ot(c,Et(e.transformers)):void 0,m=s.push,v=m??e.push,y=Boolean(m),w=async(n,o,s)=>{let a;const u=y||"string"==typeof n.id&&""!==n.id?n:{...n,id:ae()},d=h??(void 0!==c?(()=>{const t=ue(c,ge(s.ingest));return 0===t.length?[]:Ot(1===t.length?t[0]:t,Et(e.transformers))})():[]);let f=[u];if(d.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const n=await Ct(e,e.transformers,d,u,s.ingest,s.respond,`source.${t}.before`);if(null===n.event)return{ok:!0};if(n.stopped)return n.respond&&(s.respond=n.respond),{ok:!0};n.respond&&(s.respond=n.respond);const o="string"==typeof u.id?u.id:"";if(Array.isArray(n.event))f=n.event.map(e=>""!==o&&e.id===o?{...e,id:ae()}:e);else{const e=n.event;f=""===o||"string"==typeof e.id&&""!==e.id?[e]:[{...e,id:o}]}}if(p){const t=kt(p,e);if(t){const n=ge(s.ingest),o=await le(p,t,n);if(o){if("HIT"===o.status&&void 0!==o.value&&p.stop){let t=o.value;return o.rule.update&&(t=await pe(t,o.rule.update,{...n,cache:{status:"HIT"}},e)),s.respond?.(t),{ok:!0}}if("MISS"===o.status&&p.stop&&s.respond){const r=s.respond,i=o.rule.update,c={...n,cache:{status:"MISS"}},u=o.key,d=o.rule.ttl,l=n=>{fe(t,u,n,d),i?a=(async()=>{const t=await pe(n,i,c,e);r(t)})():r(n)};s.respond=l}"MISS"!==o.status||p.stop||fe(t,o.key,!0,o.rule.ttl)}}}const m=g?{kind:"single",preChain:g}:void 0!==i?(()=>{const t=ue(i,ge(s.ingest));return 0===t.length?{kind:"single",preChain:[]}:1===t.length?{kind:"single",preChain:Ot(t[0],Et(e.transformers))}:{kind:"many",branches:t.map(t=>Ot(t,Et(e.transformers)))}})():{kind:"single",preChain:[]};!y&&l&&l.length>0&&(f=await Promise.all(f.map(t=>me(l,t=>It(t,e),t,e))));let w={ok:!0};for(const n of f)"many"===m.kind?(await Promise.all(m.branches.map((a,i)=>ce(async()=>y?v(n):v(n,{...o,id:t,ingest:jt(s.ingest,`${t}.${i}`),respond:void 0,mapping:r,preChain:a}),t=>(e.logger.scope("source:many").error(`many branch ${i} failed`,{error:t}),{ok:!0}))())),w={ok:!0}):w=y?await v(n):await v(n,{...o,id:t,ingest:s.ingest,respond:s.respond,mapping:r,preChain:m.preChain});return a&&await a,w},b=async n=>{const o=oe(t),s=ie(function(e){if(!Tt(e))return;const t=e.headers;if(Tt(t)){if("get"in(n=t)&&"function"==typeof n.get)return t.get("traceparent")??void 0;if("traceparent"in t)return t.traceparent;for(const e of Object.keys(t))if("traceparent"===e.toLowerCase())return t[e]}var n}(n));if(s&&(o._meta.trace=s.trace,o._meta.parentEventId=s.parentSpan),!r.ingest||void 0===n)return o;const a=await se(n,r.ingest,{collector:e});return{...o,...a,_meta:o._meta}},k=e.logger.scope("source").scope(t),I={command:e.command,sources:e.sources,elb:e.elb,logger:k,...s,push:async(e,n={})=>{const o={ingest:oe(t),respond:void 0};return w(e,n,o)}},E={collector:e,logger:k,id:t,config:r,env:I,withScope:async(e,t,n)=>{const o={ingest:await b(e),respond:t};return n({...I,push:(e,t={})=>w(e,t,o),ingest:o.ingest,respond:o.respond})},reportError:bt(e,"source",t,k)},S=await ce(o,n=>{if(n instanceof re)throw n;e.status.failed++,e.logger.scope("source").error("source factory failed",{sourceId:t,error:n})})(E);if(!S)return;const O=S.type||"unknown",q=e.logger.scope(O).scope(t);return I.logger=q,a&&(S.config={...S.config,primary:a}),S}async function _t(e){for(const[t,n]of Object.entries(e.sources)){if(Mt(n))continue;const o=n.config.require;if(!o?.length)continue;const r=o.filter(t=>!Gt(e,t));r.length!==o.length&&(n.config.require=r,Mt(n)&&await Dt(e,n,t))}for(const[t,n]of Object.entries(e.pending.destinations)){if(!e.pending.destinations[t]||e.destinations[t])continue;const o=n.config?.require;if(!o)continue;const r=o.filter(t=>!Gt(e,t));if(n.config&&(n.config.require=r),r.length>0)continue;delete e.pending.destinations[t];const s=fn(n);!1!==s.config.queue&&(s.queuePush=[...e.queue]),e.destinations[t]=s}}function zt(e){if("object"!=typeof e||null===e)return!1;if(!("logger"in e))return!1;const t=e.logger;return"object"==typeof t&&null!==t&&"scope"in t&&"function"==typeof t.scope}var Bt=!1;function Kt(){Bt||(Bt=!0,"undefined"!=typeof console&&"function"==typeof console.warn&&console.warn("walkerOS: ignored an on-dispatch call with a non-collector argument"))}function Ft(e,t,n,o){if(n instanceof Z)throw n;e.logger.scope("on").error("on callback failed",{kind:t,...o,error:n})}var Rt=[nt.Consent,nt.User,nt.Globals,nt.Custom];function Ut(e){return Rt.includes(e)}function Ht(e,t){switch(t){case nt.Consent:return Object.keys(e.consent).length>0;case nt.User:return Object.keys(e.user).length>0;case nt.Globals:return Object.keys(e.globals).length>0;case nt.Custom:return Object.keys(e.custom).length>0;default:return!1}}function Gt(e,t){switch(t){case nt.Consent:case nt.User:case nt.Globals:case nt.Custom:return Ht(e,t);case nt.Run:case nt.Ready:return!0===e.allowed;default:return e.seenEvents.has(String(t))}}function Vt(e,t){return e.cellVersion[String(t)]??0}function Wt(e,t,n){let o=e.delivery.get(t);o||(o={},e.delivery.set(t,o)),o[String(n)]=Vt(e,n)}function Lt(e,t,n){return e.allowed&&Vt(e,n)>function(e,t,n){const o=e.delivery.get(t),r=o?.[String(n)];return void 0===r?-1:r}(e,t,n)}function Nt(e,t,n){const o=e.cascade;if(!o)return!0;let r=o.counts.get(t);r||(r={},o.counts.set(t,r));const s=String(n),a=(r[s]||0)+1;return r[s]=a,a<=8||(9===a&&e.logger.error("state delivery did not converge",{type:s}),!1)}function Yt(e,t){return{collector:e,logger:e.logger.scope("on").scope(String(t))}}function Jt(e,t,n,o,r){if(!t.on)return;const s=t.type||"unknown",a=e.logger.scope(s).scope("on").scope(o),i={collector:e,logger:a,id:n,config:t.config,data:r,env:pn(t.env,t.config.env),reportError:bt(e,"destination",n,a,t)};ee(t.on,t=>Ft(e,"destination",t,{destId:n,type:o}))(o,i)}function Xt(e,t,n,o){if(!zt(e))return void Kt();const r=Qt(e,t,o);if(n.length)switch(t){case nt.Consent:!function(e,t,n){const o=n||e.consent,r=Yt(e,nt.Consent);t.forEach(t=>{Lt(e,t,nt.Consent)&&Nt(e,t,nt.Consent)&&(Object.keys(o).filter(e=>e in t).forEach(n=>{ee(t[n],t=>Ft(e,"consent",t,{key:n}))(o,r)}),Wt(e,t,nt.Consent))})}(e,n,o);break;case nt.Ready:!function(e,t){if(!e.allowed)return;const n=Yt(e,nt.Ready);t.forEach(t=>{ee(t,t=>Ft(e,"ready",t))(void 0,n)})}(e,n);break;case nt.Run:!function(e,t){if(!e.allowed)return;const n=Yt(e,nt.Run);t.forEach(t=>{ee(t,t=>Ft(e,"run",t))(void 0,n)})}(e,n);break;case nt.Session:!function(e,t){if(!e.session)return;const n=Yt(e,nt.Session);t.forEach(t=>{ee(t,t=>Ft(e,"session",t))(e.session,n)})}(e,n);break;default:{const o=Yt(e,t),s=Ut(t);n.forEach(n=>{"function"==typeof n&&(s&&!Lt(e,n,t)||s&&!Nt(e,n,t)||(ee(n,n=>Ft(e,"generic",n,{type:t}))(r,o),s&&Wt(e,n,t)))});break}}}function Qt(e,t,n){switch(t){case nt.Consent:return n||e.consent;case nt.Session:return e.session;case nt.User:return n||e.user;case nt.Custom:return n||e.custom;case nt.Globals:return n||e.globals;case nt.Config:return n||e.config;default:return}}async function Zt(e,t,n,o,r){if(!t.on)return!1;if(Ut(o)&&!Lt(e,t,o))return!1;if(Ut(o)&&!Nt(e,t,o))return!1;const s=await te(t.on,t=>Ft(e,"source",t,{sourceId:n,type:o}))(o,r);return Ut(o)&&Wt(e,t,o),!1===s}function en(e){return"number"==typeof e&&e>0?e:1e4}var tn=class extends Error{constructor(e){super(e),this.name="DestinationTimeoutError"}};function nn(e,t,n){let o;const r=new Promise((e,r)=>{o=setTimeout(()=>r(new tn(n)),t)});return Promise.race([e,r]).finally(()=>{o&&clearTimeout(o)})}var on=Object.freeze({batched:!0});function rn(e){return e===on}function sn(e){return void 0===e?{}:"number"==typeof e?{wait:e}:{wait:e.wait,size:e.size,age:e.age}}function an(e,t,n){if(!e)return[];if(Array.isArray(e)&&e.every(e=>"string"==typeof e))return Ot(e,t);if("string"==typeof e)return Ot(e,t);const o=K(e,C(n));return 0===o.length?[]:1===o.length?Ot(o[0],t):Ot(o,t)}async function cn(e,t,n={},o){const{allowed:r,consent:s,user:a}=e;if(!r)return ln({ok:!1});if(t){const n=e.config.queueMax;if(void 0===n)throw new Error("Collector.Config.queueMax is undefined; defaults must be seeded by collector()");const o=lt(e.queue,t,{max:n});if(o.dropped>0){const t=wt(e.status,V("collector"),"queue",o.dropped);pt(e.queue,e.logger,"collector.queue overflow; oldest events dropped",{buffer:"queue",cap:n,droppedCount:t})}else e.queue.length<n&&gt(e.queue);e.status.in++}o||(o=e.destinations);const i=e.transformers?Et(e.transformers):{},c=await Promise.all(Object.entries(o||{}).map(async([o,r])=>{if(r.config.disabled)return{id:o,destination:r,skipped:!0};const c=r.config.id||o,u=V("destination",c),d=mt(r.config.breaker);if(d&&function(e,t,n){const o=e[t];if(!o||"closed"===o.state)return!1;if("half-open"===o.state)return!0===o.probing;const r=ht();return void 0!==o.openUntil&&r<o.openUntil||(o.state="half-open",o.probing=!0,o.openUntil=r+n,!1)}(e.status.breakers,u,d.cooldown))return{id:o,destination:r,skipped:!0};const l=t=>{d&&vt(e.status.breakers,u,t,d.threshold,d.cooldown)},f=()=>{d&&function(e,t){const n=e[t];n&&"half-open"===n.state&&!0===n.probing&&(n.state="open",n.probing=!1)}(e.status.breakers,u)};let p=(r.queuePush||[]).map(e=>({...e,consent:s}));r.queuePush=[],t&&p.push($(t));const g=n.ingest?{...n.ingest,_meta:{...n.ingest._meta,path:[...n.ingest._meta.path]}}:T("unknown");if(!p.length&&!r.queueOn?.length)return f(),{id:o,destination:r,skipped:!0};if(!p.length&&r.queueOn?.length){if(!B(r.config.consent,s))return f(),{id:o,destination:r,skipped:!0};let t=!1;try{t=await un(e,r,o,!0)}catch(t){e.status.failed++;const n=r.type||"unknown";e.logger.scope(n).error("destination init failed",{error:t instanceof Error?t.message:String(t)}),l("transport-failure")}return f(),{id:o,destination:r,skipped:!t}}const h=[],m=p.filter(t=>{const n=B(r.config.consent,s,t.consent);if(n)return t.consent=n,h.push(t),!1;const a=rt(e,{stepId:V("destination",o),stepType:"destination",phase:"skip",eventId:"string"==typeof t.id?t.id:"",now:Date.now(),...ot(t,g,e)});return a.skipReason="consent",s&&(a.consent={...s}),r.config.consent&&(a.meta={required:{...r.config.consent}}),_(e,a),!0});if(m.length>0){const t=r.queuePush,n=r.config.id||o,s={max:r.config.queueMax??1e3};let a=0;for(const e of m)a+=lt(t,e,s).dropped;if(a>0){yt(e,n);const o=wt(e.status,V("destination",n),"queue",a);pt(t,e.logger.scope(r.type||"unknown"),"destination.queuePush overflow; oldest events dropped",{buffer:"queuePush",destination:n,cap:s.max,droppedCount:o})}else t.length<s.max&&gt(t)}if(!h.length)return f(),{id:o,destination:r,queue:p};let v,y,w=!1;try{w=await un(e,r,o,!0)}catch(t){e.status.failed++;const n=r.type||"unknown";e.logger.scope(n).error("destination init failed",{error:t instanceof Error?t.message:String(t)}),l("transport-failure")}if(!w)return f(),{id:o,destination:r,queue:p};r.dlq||(r.dlq=[]);const b=an(r.config.before,i,g),k=r.config.next,I=r.config?.cache,E=I?A(I):void 0,S=E?kt(E,e):void 0,O=r.config?.state?N(r.config.state):void 0,q=O?.filter(e=>"get"===e.mode),x=O?.filter(e=>"set"===e.mode);let P=0,z=0;return await Promise.all(h.map(async t=>{let s;if(t.user=j(a,t.user),E?.stop&&S){const e=C(g,t),n=await D(E,S,e);if("HIT"===n?.status)return t;"MISS"===n?.status&&(s={key:n.key,ttl:n.rule.ttl})}let c=t,u=n.respond;if(b.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const r=await Ct(e,e.transformers,b,t,g,n.respond,`destination.${o}.before`);if(null===r.event)return t;r.respond&&(u=r.respond),c=Array.isArray(r.event)?r.event[0]:r.event}if(E&&!E.stop&&S){const e=C(g,c),n=await D(E,S,e);if("HIT"===n?.status)return t;"MISS"===n?.status&&(s={key:n.key,ttl:n.rule.ttl})}q&&q.length>0&&c&&(c=await Y(q,t=>It(t,e),c,e));const d=Date.now();let l=!1;const f=await W(dn,t=>{const n=r.type||"unknown";e.logger.scope(n).error("Push failed",{error:t,event:c.name}),v=t,l=!0;const s=r.dlq,a=r.config.id||o,i={max:r.config.dlqMax??100},u=lt(s,[c,t],i);if(u.dropped>0){yt(e,a);const t=wt(e.status,V("destination",a),"dlq",u.dropped);pt(s,e.logger.scope(r.type||"unknown"),"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:a,cap:i.max,droppedCount:t})}else s.length<i.max&&gt(s)})(e,r,o,c,g,u);if(P+=Date.now()-d,s&&S&&void 0===r.config.mock&&M(S,s.key,f??!0,s.ttl),!l&&!rn(f)&&x&&x.length>0&&c&&(c=await Y(x,t=>It(t,e),c,e)),void 0===f||rn(f)||(y=f),rn(f)&&z++,!l&&k){void 0!==f&&(g._response=f);const t=an(k,i,g);if(t.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const n=await Ct(e,e.transformers,t,c,g,u,`destination.${o}.next`);n.respond&&(u=n.respond)}}return t})),{id:o,destination:r,error:v,response:y,totalDuration:P,batchedCount:z,allowedCount:h.length,canonicalId:c,breakerConfig:d}})),u={},d={},l={};for(const t of c){if(t.skipped)continue;const n=t.destination,o={type:n.type||"unknown",data:t.response};yt(e,t.id);const r=e.status.destinations[t.id],s=Date.now();r.queuePushSize=n.queuePush?.length??0,r.dlqSize=n.dlq?.length??0;const a=t.breakerConfig,i=t.canonicalId?V("destination",t.canonicalId):void 0,c=t=>{a&&i&&vt(e.status.breakers,i,t,a.threshold,a.cooldown)};if(t.error)o.error=t.error,l[t.id]=o,r.failed++,r.lastAt=s,r.duration+=t.totalDuration||0,e.status.failed++,c("transport-failure");else if(t.queue&&t.queue.length)d[t.id]=o;else{const n=t.batchedCount??0,a=t.allowedCount??0;(Math.max(0,a-n)>0||0===a)&&(u[t.id]=o,r.count++,r.lastAt=s,r.duration+=t.totalDuration||0,e.status.out++,c("success"))}}return ln({event:t,...Object.keys(u).length&&{done:u},...Object.keys(d).length&&{queued:d},...Object.keys(l).length&&{failed:l}})}async function un(e,t,n,o=!1){if(t.init&&!t.config.init){if(!o&&function(e){const t=e.config.consent;return!!t&&Object.keys(t).length>0}(t))return e.logger.scope(t.type||"unknown").debug("init blocked: consent gate not cleared"),!1;const r=t.type||"unknown",s=e.logger.scope(r),a={collector:e,logger:s,id:n,config:t.config,env:pn(t.env,t.config.env),reportError:bt(e,"destination",n,s,t)};s.debug("init");const i=Date.now();let c;_(e,rt(e,{stepId:V("destination",n),stepType:"destination",phase:"init",eventId:"",now:i}));try{c=await L(t.init,"DestinationInit",e.hooks,e.logger)(a)}catch(t){const o=Date.now(),r=rt(e,{stepId:V("destination",n),stepType:"destination",phase:"error",eventId:"",now:o});throw r.durationMs=o-i,r.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},_(e,r),t}if(!1===c)return c;if(t.config={...c||t.config,init:!0},t.queueOn?.length){const o=t.queueOn;t.queueOn=[];for(const{type:r,data:s}of o)Jt(e,t,n,r,s)}s.debug("init done")}return!0}async function dn(e,t,n,o,r,s){const{config:a}=t,i=await G(o,a,e);if(i.ignore)return!1;const c=t.type||"unknown",u=e.logger.scope(c),d={collector:e,logger:u,id:n,config:a,data:i.data,rule:i.mapping,ingest:r,env:{...pn(t.env,a.env),...s?{respond:s}:{}},reportError:bt(e,"destination",n,u,t)};if(void 0!==a.mock)return u.debug("mock",{event:i.event.name}),a.mock;const l=i.mapping,f=void 0!==l?.batch,p=f?i.mappingKey||"* *":" batch-all";if((f||void 0!==a.batch)&&t.pushBatch&&void 0===a.mock){if(t.batches=t.batches||{},!t.batches[p]){const o={key:p,entries:[],events:[],data:[]},r=sn(l?.batch),s=sn(a.batch),i=r.wait??s.wait??3e4,c=r.size??s.size??1e3,d=r.age??s.age??3e4,g=pn(t.env,a.env),h=P(async()=>{const o=t.batches[p],r=o.batched;if(0===r.entries.length)return;const s={key:r.key,entries:r.entries,events:r.events,data:r.data};r.entries=[],r.events=[],r.data=[];const i=s.entries[0],c={collector:e,logger:u,id:n,config:a,data:void 0,rule:o.isDefault?void 0:i.rule,ingest:i.ingest,env:{...g,...i.respond?{respond:i.respond}:{}},reportError:bt(e,"destination",n,u,t)};u.debug("push batch",{events:s.entries.length});const d=t.config.id||n,l=yt(e,d),f=mt(t.config.breaker),h=V("destination",d),m=t=>{f&&vt(e.status.breakers,h,t,f.threshold,f.cooldown)},v=Date.now(),y=new Map;let w,b=!1;const k=n=>{const o=t.dlq=t.dlq||[],r={max:t.config.dlqMax??100};let s=0;for(const e of n)s+=lt(o,e,r).dropped;if(s>0){const t=wt(e.status,V("destination",d),"dlq",s);pt(o,u,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:d,cap:r.max,droppedCount:t})}else o.length<r.max&&gt(o);l.failed+=n.length,l.dlqSize=o.length,e.status.failed+=n.length};let I=s.entries.length;const E=en(a.timeout),S=await W((o,r)=>nn(Promise.resolve(L(t.pushBatch,"DestinationPushBatch",e.hooks,e.logger)(o,r)),E,`Destination "${n}" batch delivery timed out after ${E}ms`),e=>{I=0,b=!0,w=e,k(s.entries.map(t=>[t.event,e])),m("transport-failure"),u.error("Push batch failed",{error:e instanceof Error?e.message:String(e),entries:s.entries.length})})(s,c);if(U(O=S)&&Array.isArray(O.failed)&&S.failed.length>0){const e=[];for(const t of S.failed){const n=s.entries[t.index];if(!n||y.has(t.index))continue;const o=t.error??new Error(`Push batch entry ${t.index} failed (no per-row error provided)`);y.set(t.index,o),e.push([n.event,o])}e.length>0&&(k(e),I=Math.max(0,s.entries.length-e.length),u.error("Push batch partial failure",{failed:e.length,delivered:I,entries:s.entries.length}))}var O;const q=Date.now();s.entries.forEach((t,o)=>{const r=b||y.has(o),a=ot(t.event,t.ingest,e),i=rt(e,{stepId:V("destination",n),stepType:"destination",phase:r?"error":"flush",eventId:"string"==typeof t.event.id?t.event.id:"",now:q,traceId:a.traceId,sourceId:a.sourceId,parentEventId:a.parentEventId});if(i.batch={size:s.entries.length,index:o},i.durationMs=q-v,r){const e=b?w:y.get(o);i.error=e instanceof Error?{name:e.name,message:e.message}:{message:String(e)}}_(e,i)}),u.debug("push batch done"),l.inFlightBatch=Math.max(0,(l.inFlightBatch??0)-s.entries.length),I>0&&(l.count+=I,l.lastAt=Date.now(),e.status.out+=I,m("success"))},{wait:i,size:c,age:d});t.batches[p]={batched:o,isDefault:!f,batchFn:()=>{h()},flush:async()=>{await h.flush()}}}const c=t.batches[p];c.batched.entries.push({event:i.event,ingest:r,respond:s,rule:l,data:i.data}),c.batched.events.push(i.event),F(i.data)&&c.batched.data.push(i.data);const d="string"==typeof i.event.id?i.event.id:"",g=ot(o,r,e),h=Date.now(),m=rt(e,{stepId:V("destination",n),stepType:"destination",phase:"in",eventId:d,now:h,traceId:g.traceId,sourceId:g.sourceId,parentEventId:g.parentEventId});i.mappingKey&&(m.mappingKey=i.mappingKey),i.event.consent&&(m.consent={...i.event.consent}),m.inEvent=i.event,_(e,m);const v=rt(e,{stepId:V("destination",n),stepType:"destination",phase:"out",eventId:d,now:h,traceId:g.traceId,sourceId:g.sourceId,parentEventId:g.parentEventId});i.mappingKey&&(v.mappingKey=i.mappingKey),v.outEvent=i.event,v.batch={size:c.batched.entries.length,index:c.batched.entries.length-1},_(e,v);const y=t.config.id||n,w=yt(e,y);return w.inFlightBatch=(w.inFlightBatch??0)+1,c.batchFn(),on}{let s;if(u.debug("push",{event:i.event.name}),"trace"===e.observeLevel?.()&&Array.isArray(t.calls)&&t.calls.length>0){const e=it({...d.env,simulation:t.calls});d.env=e.wrappedEnv,s=e.calls,e.unresolved.length>0&&(e.wrappedEnv[H]={paths:e.unresolved,record:(t,n)=>e.calls.push({fn:t,args:n,ts:Date.now()})})}const c="string"==typeof i.event.id?i.event.id:"",{traceId:l,sourceId:f,parentEventId:p}=ot(o,r,e),g=Date.now(),h=rt(e,{stepId:V("destination",n),stepType:"destination",phase:"in",eventId:c,now:g,traceId:l,sourceId:f,parentEventId:p});i.mappingKey&&(h.mappingKey=i.mappingKey),i.event.consent&&(h.consent={...i.event.consent}),h.inEvent=i.event,_(e,h);try{const o=en(a.timeout),r=await nn(Promise.resolve(L(t.push,"DestinationPush",e.hooks,e.logger)(i.event,d)),o,`Destination "${n}" delivery timed out after ${o}ms`),h=Date.now(),m=rt(e,{stepId:V("destination",n),stepType:"destination",phase:"out",eventId:c,now:h,traceId:l,sourceId:f,parentEventId:p});return m.durationMs=h-g,m.outEvent=i.event,s&&s.length>0&&(m.calls=dt(s)),F(r)&&(m.meta={...m.meta,response:r}),i.mappingKey&&(m.mappingKey=i.mappingKey),_(e,m),u.debug("push done"),r}catch(t){const o=Date.now(),r=rt(e,{stepId:V("destination",n),stepType:"destination",phase:"error",eventId:c,now:o,traceId:l,sourceId:f,parentEventId:p});throw r.durationMs=o-g,r.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},s&&s.length>0&&(r.calls=dt(s)),i.mappingKey&&(r.mappingKey=i.mappingKey),_(e,r),t}}}function ln(e){return{ok:!e?.failed,...e}}function fn(e){const{code:t,config:n={},env:o={},cache:r,state:s}=e,{config:a}=St(e,"before"),{config:i}=St({...e,config:a},"next"),c={...t.config,...n,...i};r&&(c.cache=r),void 0!==s&&void 0===c.state&&(c.state=s);const u=pn(t.env,o);return{...t,config:c,env:u}}function pn(e,t){return e||t?t?e&&U(e)&&U(t)?{...e,...t}:t:e:{}}async function gn(e,t,n){const o=Object.entries(e).map(async([e,o])=>{const r=o.destroy;if(!r)return;const s=o.type||"unknown",a=n.scope(s),i={id:e,config:o.config,env:o.env??{},logger:a};let c;try{await Promise.race([r(i),new Promise((n,o)=>{c=setTimeout(()=>o(new Error(`${t} '${e}' destroy timed out`)),5e3)})])}catch(n){a.error(`${t} '${e}' destroy failed: ${n}`)}finally{c&&clearTimeout(c)}});await Promise.allSettled(o)}function hn(e,t){e.stateVersion++,e.cellVersion[t]=e.stateVersion}async function mn(e,t,n){let o,r,s=!1;const a=function(e){return e.cascade?()=>{}:(e.cascade={counts:new WeakMap},()=>{e.cascade=void 0})}(e);try{return await async function(){switch(t){case nt.Config:Be(n)&&(Me(e.config,n,{shallow:!1}),r=n,s=!0);break;case nt.Consent:if(Be(n)){const{update:t}=function(e,t){const n={};return Object.entries(t).forEach(([e,t])=>{n[e]=!!t}),e.consent=k(e.consent,n),{update:n}}(e,n);hn(e,nt.Consent),r=t,s=!0}break;case nt.Custom:Be(n)&&(e.custom=Me(e.custom,n),hn(e,nt.Custom),r=n,s=!0);break;case nt.Destination:Be(n)&&"code"in n&&Be(n.code)&&(o=await async function(e,t){const{code:n,config:o={},env:r={},before:s,next:a,cache:i,state:c}=t;if(!R(n.push))return ln({ok:!1,failed:{invalid:{type:"invalid",error:"Destination code must have a push method"}}});const u=o||{init:!1};let d=s?{...u,before:s}:{...u};a&&(d={...d,next:a}),i&&(d={...d,cache:i}),void 0!==c&&void 0===d.state&&(d={...d,state:c});let l=d.id;if(!l)do{l=z(5,"abcdefghijklmnopqrstuvwxyz")}while(e.destinations[l]||e.pending.destinations[l]);if(d.require?.length){e.pending.destinations[l]=t,await _t(e);const n=e.destinations[l];return n?cn(e,void 0,{},{[l]:n}):ln({ok:!0})}const f={...n,config:d,env:pn(n.env,r)};return e.destinations[l]=f,!1!==f.config.queue&&(f.queuePush=[...e.queue]),cn(e,void 0,{},{[l]:f})}(e,n));break;case nt.Globals:Be(n)&&(e.globals=Me(e.globals,n),hn(e,nt.Globals),r=n,s=!0);break;case nt.Hook:if(Be(n)&&ze(n.name)&&_e(n.fn)){const{name:t,fn:o}=n;e.hooks[t]=o,r=n,s=!0}break;case nt.On:if(Be(n)&&ze(n.type)){const{type:t,rules:o}=n;await async function(e,t,n){if(!zt(e))return void Kt();const o=e.on,r=o[t]||[],s=Q(n)?n:[n];s.forEach(e=>{r.push(e)}),o[t]=r,Xt(e,t,s)}(e,t,o)}break;case nt.Ready:s=!0;break;case nt.Run:o=await async function(e,t){return e.allowed=!0,e.timing=Date.now(),e.trace=Pe(),e.count=0,t&&(t.consent&&(e.consent=Me(e.consent,t.consent),hn(e,nt.Consent)),t.user&&(e.user=Me(e.user,t.user),hn(e,nt.User)),t.globals&&(e.globals=Me(e.config.globalsStatic||{},t.globals),hn(e,nt.Globals)),t.custom&&(e.custom=Me(e.custom,t.custom),hn(e,nt.Custom))),Object.values(e.destinations).forEach(e=>{e.queuePush=[]}),e.queue=[],e.round++,await _t(e),await async function(e){if(zt(e))for(const t of Rt){if(!Ht(e,t))continue;const n=Qt(e,t);Xt(e,t,e.on[t]||[]);for(const[o,r]of Object.entries(e.sources))Mt(r)&&await Zt(e,r,o,t,n)}else Kt()}(e),await cn(e)}(e,n),s=!0;break;case nt.Session:s=!0;break;case nt.Shutdown:e.hasShutdown||(e.hasShutdown=!0,await async function(e){const t=e.logger;await gn(e.sources,"source",t),await async function(e,t){const n=Object.entries(e).flatMap(([e,n])=>{const o=n.batches;if(!o)return[];const r=t.scope(n.type||"destination");return Object.values(o).map(async t=>{let n;try{await Promise.race([t.flush(),new Promise((t,o)=>{n=setTimeout(()=>o(new Error(`destination '${e}' batch flush timed out`)),5e3)})])}catch(t){r.error(`destination '${e}' batch flush failed: ${t}`)}finally{n&&clearTimeout(n)}})});await Promise.allSettled(n)}(e.destinations,t),await gn(e.destinations,"destination",t),await gn(e.transformers,"transformer",t),await gn(e.stores,"store",t)}(e));break;case nt.User:Be(n)&&(Me(e.user,n,{shallow:!1}),hn(e,nt.User),r=n,s=!0);break;default:return e.logger.warn("unknown command",{command:t}),ln({ok:!1})}return s&&(await async function(e,t,n,o){if(!zt(e))return Kt(),!0;e.seenEvents.add(String(t));let r=n||[];n||(r=e.on[t]||[]);const s=Qt(e,t,o);let a=!1;for(const[n,o]of Object.entries(e.sources)){if(o.config.require?.length){const e=o.config.require.indexOf(t);-1!==e&&o.config.require.splice(e,1)}o.on&&(Mt(o)?await Zt(e,o,n,t,s)&&(a=!0):(o.queueOn=o.queueOn||[],o.queueOn.push({type:t,data:s})))}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:s});Jt(e,o,n,t,s)}});for(const[t,n]of Object.entries(e.sources))Mt(n)&&n.queueOn?.length&&await Dt(e,n,t);const i=Object.values(e.sources).some(e=>!Mt(e)&&e.config.require?.length);return(Object.keys(e.pending.destinations).length>0||i)&&await _t(e),Xt(e,t,r,o),!a}(e,t,void 0,r),o=await cn(e)),o||ln({ok:!0})}()}finally{a()}}function vn(e,t){return{timing:Math.round((Date.now()-e.timing)/10)/100,source:{type:"collector",schema:"4"},...t}}function yn(e,t,n){if(!t.name)throw new Error("Event name is required");const[o,r]=t.name.split(" ");if(!o||!r)throw new Error("Event name is invalid");const{timestamp:s=Date.now(),name:a=`${o} ${r}`,data:i={},context:c={},globals:u={},custom:d={},user:l=e.user,nested:f=[],consent:p=e.consent,id:g=Te(),trigger:h="",entity:m=o,action:v=r,timing:y=0,source:w={type:"collector",schema:"4"}}=t,b=w.count??(e.count+=1),k=w.trace??n?._meta.trace??e.trace,I={...w,count:b};void 0!==k&&(I.trace=k);const E=e.name??w.platform??"default",S=e.release??"4.4.0-next-1785285516008";return I.release={...w.release,[E]:S},{name:a,data:i,context:c,globals:Me(e.globals,u),custom:d,user:l,nested:f,consent:p,id:g,trigger:h,entity:m,action:v,timestamp:s,timing:y,source:I}}function wn(e,t){const n=We(async(n,o={})=>await Ve(async()=>{const r=Date.now(),{id:s,ingest:a,respond:i,mapping:c,preChain:u,include:d,exclude:l}=o;let f=i,p=n;const g=d||l?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,l):void 0,h=a??Ke(s||"unknown");if(c){const t=await Ge(p,c,e);if(t.ignore)return ln({ok:!0});if(c.consent&&!Ue(c.consent,e.consent,t.event.consent))return ln({ok:!0});p=t.event}if(u?.length&&e.transformers&&Object.keys(e.transformers).length>0){const n=await Ct(e,e.transformers,u,p,h,f,s?`source.${s}.next`:void 0);if(null===n.event)return e.logger.debug("Event dropped by transformer chain"+(n.droppedBy?` (${n.droppedBy})`:"")),ln({ok:!0,dropped:!0});if(n.stopped)return n.respond&&(f=n.respond),ln({ok:!0});n.respond&&(f=n.respond);const o="string"==typeof p.id?p.id:"";if(Array.isArray(n.event)){const a=await Promise.all(n.event.map(async n=>{const r=""!==o&&n.id===o?{...n,id:He()}:n,a=t(r),i=yn(e,a,h);return cn(e,i,{id:s,ingest:h,respond:f},g)}));if(s){e.status.sources[s]||(e.status.sources[s]={count:0,duration:0});const t=e.status.sources[s];t.count+=n.event.length,t.lastAt=Date.now(),t.duration+=Date.now()-r}return a[0]??ln({ok:!0})}p=""===o||"string"==typeof n.event.id&&""!==n.event.id?n.event:{...n.event,id:o}}const m=function(e,t,n){return yn(e,vn(e,t),n)}(e,p,h),v=await cn(e,m,{id:s,ingest:h,respond:f},g);if(s){e.status.sources[s]||(e.status.sources[s]={count:0,duration:0});const t=e.status.sources[s];t.count++,t.lastAt=Date.now(),t.duration+=Date.now()-r}return v},t=>{if(t instanceof Re)throw t;return e.status.failed++,e.logger.error("push failed",{event:n,ingest:o.ingest,error:t}),ln({ok:!1})})(),"Push",e.hooks,e.logger);return async(t,o)=>{const r="string"==typeof t.id&&""!==t.id?t:{...t,id:He()},s="string"==typeof r.id?r.id:"",{traceId:a,sourceId:i,parentEventId:c}=ot(r,o?.ingest,e),u=Date.now(),d=rt(e,{stepId:"collector.push",stepType:"collector",phase:"in",eventId:s,now:u,traceId:a,sourceId:i,parentEventId:c});d.inEvent=r,Fe(e,d);try{const t=await n(r,o),d=Date.now(),l=rt(e,{stepId:"collector.push",stepType:"collector",phase:"out",eventId:s,now:d,traceId:a,sourceId:i,parentEventId:c});return l.durationMs=d-u,l.outEvent=t,Fe(e,l),t}catch(t){const n=Date.now(),o=rt(e,{stepId:"collector.push",stepType:"collector",phase:"error",eventId:s,now:n,traceId:a,sourceId:i,parentEventId:c});throw o.durationMs=n-u,o.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},Fe(e,o),t}}}function bn(e={}){const t=e.maxEntries??1e4,n=e.lowWaterMark??.8,o=e.sweepIntervalMs??6e4,r=Math.floor(t*n),s=new Map,a={hits:0,misses:0,populates:0,writes:0,deletes:0,evictions_entries:0,evictions_ttl:0};let i;return o>0&&(i=setInterval(function(){const e=Date.now();let t=0;for(const[n,o]of s)void 0!==o.expires&&o.expires<=e&&(s.delete(n),t++);a.evictions_ttl+=t},o),i&&"function"==typeof i.unref&&i.unref()),{type:"memory",config:{},get(e){const t=s.get(e);if(t)return void 0!==t.expires&&t.expires<=Date.now()?(s.delete(e),a.evictions_ttl++,void a.misses++):(s.delete(e),s.set(e,t),a.hits++,t.value);a.misses++},set(e,n,o){const i=!s.has(e);i||s.delete(e),s.set(e,{value:n,expires:void 0!==o?Date.now()+o:void 0}),a.writes++,i&&a.populates++,s.size>t&&function(){if(s.size<=t)return;const e=s.size-r;let n=0;for(const t of s.keys()){if(n>=e)break;s.delete(t),n++}a.evictions_entries+=n}()},delete(e){s.delete(e)&&a.deletes++},get counters(){return{...a}},destroy(){void 0!==i&&(clearInterval(i),i=void 0),s.clear()}}}function kn(e,t){const{cacheConfig:n,cacheStore:o,namespace:r,logger:s,storeId:a,collector:i}=t,c=(e,t)=>{if(!i)return;const n=rt(i,{stepId:`store.${a}`,stepType:"store",phase:"in",eventId:"",now:Date.now()});n.meta={op:"cache",cached:"hit"===t,status:t,key:e},Ze(i,n)},u={hits:0,misses:0,populates:0,writes:0,deletes:0,inflight_dedups:0},d=n.rules.map(e=>({match:e.match?Qe(e.match):()=>!0,ttl:e.ttl})),l=e=>`${r}:${e}`;function f(e,t){const n=void 0===t?{key:e}:{key:e,value:t};return d.find(e=>e.match(n))}const p=new Map;return{type:e.type,config:e.config,setup:e.setup,get counters(){return{...u}},async get(t){const n=l(t),r=await o.get(n),s=et(r);if(void 0!==s){if(!("expired"in s))return u.hits++,c(t,"hit"),s.value;try{await o.delete(n)}catch(e){g("delete",t,e)}}const a=p.get(n);if(a)return u.inflight_dedups++,c(t,"hit"),a;u.misses++,c(t,"miss");const i=(async()=>{try{const r=await e.get(t);if(void 0===r)return;const s=f(t,r);if(s)try{const e=1e3*s.ttl;await o.set(n,tt(r,e),e),u.populates++}catch(e){g("set",t,e)}return r}finally{p.delete(n)}})();return p.set(n,i),i},async set(t,n,r){u.writes++,await e.set(t,n,r);const s=f(t,n);if(s)try{const e=1e3*s.ttl;await o.set(l(t),tt(n,e),e)}catch(e){g("set",t,e)}},async delete(t){u.deletes++,await e.delete(t);try{await o.delete(l(t))}catch(e){g("delete",t,e)}}};function g(e,t,n){const o=`store-cache(${a}): cache ${e} failed for "${t}"; backing succeeded, continuing`;s?s.warn(o,{error:n}):console.warn(o,n)}}function In(e,t,n){const o=`store.${n}`,r=Xe(t.get,"StoreGet",e.hooks,e.logger),s=Xe(t.set,"StoreSet",e.hooks,e.logger),a=Xe(t.delete,"StoreDelete",e.hooks,e.logger);t.get=async t=>{const n=Date.now(),s=rt(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:n});s.meta={op:"get",key:t},Je(e,s);try{const s=await r(t),a=Date.now(),i=rt(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:a});return i.durationMs=a-n,i.meta={op:"get",key:t},Je(e,i),s}catch(r){const s=Date.now(),a=rt(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:s});throw a.durationMs=s-n,a.meta={op:"get",key:t},a.error=r instanceof Error?{name:r.name,message:r.message}:{message:String(r)},Je(e,a),r}},t.set=async(t,n,r)=>{const a=Date.now(),i=rt(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:a});i.meta={op:"set",key:t},Je(e,i);try{await s(t,n,r);const i=Date.now(),c=rt(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:i});c.durationMs=i-a,c.meta={op:"set",key:t},Je(e,c)}catch(n){const r=Date.now(),s=rt(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:r});throw s.durationMs=r-a,s.meta={op:"set",key:t},s.error=n instanceof Error?{name:n.name,message:n.message}:{message:String(n)},Je(e,s),n}},t.delete=async t=>{const n=Date.now(),r=rt(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:n});r.meta={op:"delete",key:t},Je(e,r);try{await a(t);const r=Date.now(),s=rt(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:r});s.durationMs=r-n,s.meta={op:"delete",key:t},Je(e,s)}catch(r){const s=Date.now(),a=rt(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:s});throw a.durationMs=s-n,a.meta={op:"delete",key:t},a.error=r instanceof Error?{name:r.name,message:r.message}:{message:String(r)},Je(e,a),r}}}async function En(e){const t=q({globalsStatic:{},sessionStatic:{},run:!0,queueMax:1e3},e,{merge:!1,extend:!1}),n={level:e.logger?.level,handler:e.logger?.handler},o=x(n),r={...t.globalsStatic,...e.globals},s={allowed:!1,config:t,consent:e.consent||{},custom:e.custom||{},destinations:{},transformers:{},stores:{},globals:r,hooks:e.hooks||{},observers:new Set,logger:o,on:{},queue:[],round:0,count:0,stateVersion:0,cellVersion:{},delivery:new WeakMap,session:void 0,status:{startedAt:Date.now(),in:0,out:0,failed:0,sources:{},destinations:{},dropped:{},connectionErrors:{},breakers:{}},timing:Date.now(),user:e.user||{},sources:{},pending:{destinations:{}},hasShutdown:!1,seenEvents:new Set,push:void 0,command:void 0,elb:void 0};var a,i;void 0!==e.name&&(s.name=e.name),void 0!==e.release&&(s.release=e.release),s.push=wn(s,e=>vn(s,e)),s.command=(i=mn,Ne(async(e,t,n)=>await Ye(async()=>await i(a,e,t,n),n=>{if(n instanceof Le)throw n;return a.status.failed++,a.logger.error("command failed",{command:e,data:t,error:n}),ln({ok:!1})})(),"Command",(a=s).hooks,a.logger)),s.elb=function(e){return async(t,n,o,r,s)=>{if("string"==typeof t&&t.startsWith("walker ")){const o=t.replace("walker ","");return e.command(o,n)}let a;if("string"==typeof t)a={name:t},n&&"object"==typeof n&&!Array.isArray(n)&&(a.data=n);else{if(!t||"object"!=typeof t||Array.isArray(t))return ln({ok:!1});a={...t},n&&"object"==typeof n&&!Array.isArray(n)&&(a.data={...a.data||{},...n})}return o&&"object"==typeof o&&(a.context=o),r&&Array.isArray(r)&&(a.nested=r),s&&"object"==typeof s&&(a.custom=s),e.push(a)}}(s);const c=e.stores||{};return s.stores=await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t)){const{code:t,config:s={},env:a={}}=r,i=e.logger.scope("store").scope(o),c={collector:e,logger:i,id:o,config:s,env:a,reportError:bt(e,"store",o,i)},u=await t(c);n[o]=u}const o=t,r=function(e){const t={};for(const n of Object.keys(e))t[n]="WHITE";const n=[],o=[];function r(s){const a=t[s];if("BLACK"===a)return;if("GRAY"===a){const e=o.indexOf(s),t=o.slice(-1===e?0:e).concat(s).join(" -> ");throw new Error(`Cycle in cache.store chain: ${t}`)}t[s]="GRAY",o.push(s);const i=e[s].cache?.store;if(void 0!==i){if(!(i in e))throw new Error(`Store "${s}" cache.store references "${i}", which is not declared in flow.stores`);r(i)}o.pop(),t[s]="BLACK",n.push(s)}for(const n of Object.keys(e))"WHITE"===t[n]&&r(n);return n}(o);for(const t of r){const r=o[t].cache;if(!r)continue;let s,a;void 0!==r.store?(s=n[r.store],a=r.store):(n.__cache||(n.__cache=bn()),s=n.__cache,a="__cache");const i=r.namespace??t;e.logger.scope("store-cache").scope(t).info(`store "${t}" caches with namespace "${i}:" via ${a}`),n[t]=kn(n[t],{storeId:t,cacheConfig:r,cacheStore:s,namespace:i,logger:e.logger.scope("store-cache").scope(t),collector:e})}for(const[t,o]of Object.entries(n))"__cache"!==t&&In(e,o,t);return n}(s,c),function(e,t,n){const o=new Map;for(const[n,r]of Object.entries(e))t[n]&&o.set(r,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))r(t.env);function r(e){if(e)for(const[t,n]of Object.entries(e))if("object"==typeof n&&null!==n){const r=o.get(n);r&&(e[t]=r)}}}(c,s.stores,e),s.stores.__cache||(s.stores.__cache=bn()),s.destinations=await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t))r.config?.require?.length?e.pending.destinations[o]=r:n[o]=fn(r);return n}(s,e.destinations||{}),s.transformers=await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t)){const{code:t,env:s={}}=r,a=Ce(r,"Transformer");if(!a.ok){e.logger.warn(`Transformer ${o} invalid (${a.code}): ${a.reason}. Skipping.`);continue}const{config:i}=St(r,"before"),{config:c}=St({...r,config:i},"next"),u=Object.keys(s).length>0?{...c,env:s}:c,{cache:d}=r,l=d?{...u,cache:d}:u,f=r.config?.state??r.state,p=void 0!==f&&void 0===l.state?{...l,state:f}:l,g=e.logger.scope("transformer").scope(o),h={collector:e,logger:g,id:o,ingest:ve(o),config:p,env:s,reportError:bt(e,"transformer",o,g)},m=t??(e=>{const t=r.mapping;if(t){const n=[];if(void 0!==t.data&&n.push("data"),t.mapping)for(const[e,o]of Object.entries(t.mapping))if("object"==typeof o&&null!==o)for(const[t,r]of Object.entries(o)){if("object"!=typeof r||null===r)continue;const o=r;void 0!==o.data&&n.push(`mapping[${e}][${t}].data`),void 0!==o.silent&&n.push(`mapping[${e}][${t}].silent`)}return n.length>0&&e.collector.logger.warn(`Transformer ${o}: \`${n.join(", ")}\` ignored at transformer position (only event-mutating fields apply).`),{type:"pass",config:e.config,push:async n=>{const o=await $e(n,t,e.collector);return!o.ignore&&{event:o.event}}}}return{type:"pass",config:e.config,push:e=>({event:e})}}),v=await m(h);void 0!==r.before&&void 0===v.config?.before&&(v.config={...v.config??{},before:r.before}),void 0!==r.next&&void 0===v.config?.next&&(v.config={...v.config??{},next:r.next}),void 0!==f&&void 0===v.config?.state&&(v.config={...v.config??{},state:f}),n[o]=v}return n}(s,e.transformers||{}),s}var Sn=globalThis;function On(e){try{const t=Sn.window;if(!t)return;t.localStorage.getItem(I)===e&&t.localStorage.removeItem(I)}catch{}}function qn(e,t){return void 0===t?e:n=>e({...n,release:t})}async function xn(e){e=e||{};const t=await En(e);(function(e,t){if(t.observers)for(const n of t.observers)e.observers.add(n);const n=t.observe;if(!n)return;const o=e.name??"default";if("binding"in n){const t=function(){const e=Sn.window,t=Sn.URLSearchParams;if(!e||!t)return null;try{const n=new t(e.location.search.replace(/^\?/,"")).getAll(I);return n.length>0?n[n.length-1]??null:null}catch{return null}}(),r=t??function(){try{return Sn.window?.localStorage.getItem(I)??null}catch{return null}}();if(!r)return;const s=O(r);if(!s)return void(null===t?(e.logger.warn("observe: malformed stored credential cleared"),On(r)):e.logger.warn("observe: malformed credential ignored"));if(s.pb!==n.binding)return void e.logger.warn("observe: credential binding mismatch, credential ignored");let a;!function(e){try{Sn.window?.localStorage.setItem(I,e)}catch{}}(r),null!==t&&function(){const e=Sn.window,t=Sn.URLSearchParams;if(e&&t)try{const n=e.location.href,o=n.indexOf("#"),r=o>=0?n.slice(o):"",s=o>=0?n.slice(0,o):n,a=s.indexOf("?"),i=a>=0?s.slice(0,a):s,c=new t(a>=0?s.slice(a+1):"");c.delete(I);const u=c.toString();e.history.replaceState({},"",`${i}${u?`?${u}`:""}${r}`)}catch{}}();const i=E({url:`${n.url}/ingest/${s.ses}`,token:s.secret,headers:{"X-Walkeros-Binding":n.binding},onStatus:t=>{401===t&&(On(r),a&&e.observers.delete(a))}});a=S(function(e,t){return void 0===t?e:n=>e({...n,flowId:t})}(qn(i,e.release),n.flowId),{flowId:n.flowId??o,...void 0!==n.level?{level:n.level}:{},...void 0!==n.sample?{sample:n.sample}:{}}),e.observers.add(a);const c=n.level;return void(void 0!==c&&(e.observeLevel=()=>c))}if("off"===n.level)return;const r=n.level;void 0!==r&&(e.observeLevel=()=>r),e.observers.add(S(qn(E({url:`${n.url}/ingest/${n.sessionId}`,token:n.token}),e.release),{flowId:o,level:n.level,sample:n.sample}))})(t,e),await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t)){const t=await Pt(e,o,r);if(!t)continue;const s=r.config?.require;t.config={...t.config,init:!1,...s?{require:[...s]}:{}},n[o]=t}Object.assign(e.sources,n);for(const t of Object.keys(n)){const n=e.sources[t];let o=!1;n.init&&await ce(n.init.bind(n),n=>{if(n instanceof re)throw n;o=!0,e.status.failed++,e.logger.scope("source").error("source init failed",{sourceId:t,error:n})})(),o||(n.config.init=!0,Mt(n)&&await Dt(e,n,t))}return await _t(e),n}(t,e.sources||{});const{consent:n,user:o,globals:r,custom:s}=e;n&&await t.command("consent",n),o&&await t.command("user",o),r&&await t.command("globals",r),s&&await t.command("custom",s),t.config.run&&await t.command("run");let a=t.elb;const i=Object.values(t.sources),c=i.find(e=>e.config.primary);return c?a=c.push:i.length>0&&(a=i[0].push),{collector:t,elb:a}}var jn=async e=>{let t;return{get flow(){return t},trigger:()=>async n=>{if(!t){const n=await xn({...e,run:e.run??!0});t={collector:n.collector,elb:n.elb}}await t.elb(n)}}};export{d as examples,n as schemas};//# sourceMappingURL=dev.mjs.map
1
+ var e=Object.defineProperty,t=(t,n)=>{for(var o in n)e(t,o,{get:n[o],enumerable:!0})},n={};t(n,{MappingSchema:()=>i,SettingsSchema:()=>s,mapping:()=>u,settings:()=>c});import{zodToSchema as o}from"@walkeros/core/dev";import{z as r}from"@walkeros/core/dev";var s=r.object({events:r.array(r.object({delay:r.number().optional().describe("Milliseconds to wait before pushing this event")}).passthrough().describe("Partial walkerOS event with optional delay")).describe("Events to push to the collector on init")});import{z as a}from"@walkeros/core/dev";var i=a.object({}),c=o(s),u=o(i),d={};t(d,{createTrigger:()=>jn,env:()=>l,step:()=>y});var l={};t(l,{init:()=>h,push:()=>m,simulation:()=>v});var f=async()=>({ok:!0}),p=()=>{},g={error:p,warn:p,info:p,debug:p,throw:e=>{throw"string"==typeof e?new Error(e):e},json:p,scope:()=>g},h=void 0,m={push:f,command:f,elb:f,logger:g},v=["call:elb"],y={};t(y,{delayedEvent:()=>b,pageView:()=>w});var w={title:"Page view",description:"A simple event object is pushed through the demo source as a walker elb call for learning purposes.",in:{name:"page view",data:{title:"Home"}},out:[["elb",{name:"page view",data:{title:"Home"}}]]},b={title:"Delayed event",description:"An event object with a delay field is pushed through the demo source after the specified wait.",in:{name:"product add",data:{id:"abc",name:"Test Product"},delay:100},out:[["elb",{name:"product add",data:{id:"abc",name:"Test Product"}}]]};import{assign as k}from"@walkeros/core";import{OBSERVE_STORAGE_KEY as I,createBatchedPoster as E,createTelemetryObserver as S,parseObserveCredential as O}from"@walkeros/core";import{assign as q,createLogger as x}from"@walkeros/core";import{assign as j,buildCacheContext as C,clone as $,compileCache as A,checkCache as D,storeCache as M,createIngest as T,debounce as P,emitStep as _,getId as R,getGrantedConsent as z,getNextSteps as B,isDefined as K,isFunction as F,isObject as U,OBSERVE_ENV_KEY as H,processEventMapping as G,stepId as V,tryCatchAsync as W,useHooks as L,compileState as N,applyState as Q}from"@walkeros/core";import{emitStep as Y}from"@walkeros/core";import{parseCallPath as J}from"@walkeros/core";import{isArray as X,FatalError as Z}from"@walkeros/core";import{tryCatch as ee,tryCatchAsync as te}from"@walkeros/core";import{stepId as ne}from"@walkeros/core";import{createIngest as oe,FatalError as re,getMappingValue as se,getSpanId as ae,parseTraceparent as ie,tryCatchAsync as ce,getNextSteps as ue,compileCache as de,checkCache as le,storeCache as fe,applyUpdate as pe,buildCacheContext as ge,compileState as he,applyState as me}from"@walkeros/core";import{createIngest as ve,emitStep as ye,FatalError as we,isObject as be,stepId as ke,tryCatchAsync as Ie,useHooks as Ee,getNextSteps as Se,compileCache as Oe,checkCache as qe,storeCache as xe,buildCacheContext as je,validateStepEntry as Ce,processEventMapping as $e,compileState as Ae,applyState as De}from"@walkeros/core";import{assign as Me,getSpanId as Te,getTraceId as Pe,isFunction as _e,isString as Re}from"@walkeros/core";import{isObject as ze}from"@walkeros/core";import{createIngest as Be,emitStep as Ke,FatalError as Fe,getGrantedConsent as Ue,getSpanId as He,processEventMapping as Ge,tryCatchAsync as Ve,useHooks as We}from"@walkeros/core";import{FatalError as Le,useHooks as Ne,tryCatchAsync as Qe}from"@walkeros/core";import{emitStep as Ye,useHooks as Je}from"@walkeros/core";import{compileMatcher as Xe,emitStep as Ze,readCacheEnvelope as et,wrapCacheEnvelope as tt}from"@walkeros/core";var nt={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",Scoped:"_",Session:"session",Shutdown:"shutdown",User:"user",Walker:"walker"};function ot(e,t,n){return{traceId:e.source?.trace??t?._meta.trace??n.trace,sourceId:t?._meta.path[0],parentEventId:t?._meta.parentEventId}}function rt(e,t){const n=e.status.startedAt,o={flowId:e.name??"default",stepId:t.stepId,stepType:t.stepType,phase:t.phase,eventId:t.eventId,timestamp:new Date(t.now).toISOString(),elapsedMs:t.now-n};return t.traceId&&(o.traceId=t.traceId),t.sourceId&&(o.sourceId=t.sourceId),t.parentEventId&&(o.parentEventId=t.parentEventId),o}function st(e){return"object"==typeof e&&null!==e}function at(e,t,n){if(null===e||"object"!=typeof e)return e;if(n>=8)return e;const o=t.get(e);if(void 0!==o)return o;if(Array.isArray(e)){const o=[];t.set(e,o);for(const r of e)o.push(at(r,t,n+1));return o}const r={};t.set(e,r);for(const[o,s]of Object.entries(e))r[o]="function"==typeof s?s:at(s,t,n+1);return r}function it(e){const t=[],n=[],{simulation:o,...r}=e,s=at(r,new WeakMap,0);for(const e of o){const o=J(e);if(0===o.length)continue;const r=o.join(".");if(o.length-1>=8){n.push(r);continue}let a=s,i=!0;for(let e=0;e<o.length-1;e++){const t=a[o[e]];if(!st(t)){i=!1;break}a=t}const c=o[o.length-1];if(!i||!(c in a)){n.push(r);continue}const u=a[c];"function"==typeof u?a[c]=function(...e){return t.push({fn:r,args:e,ts:Date.now()}),u.apply(this,e)}:n.push(r)}return{wrappedEnv:s,calls:t,unresolved:n}}function ct(e,t){try{return e[t]}catch{return"[unreadable]"}}function ut(e){const t=new WeakSet,n=(e,o)=>{if(null===e)return null;if("function"==typeof e)return"[function]";if("string"==typeof e||"boolean"==typeof e)return e;if("number"==typeof e)return Number.isFinite(e)?e:null;if("bigint"==typeof e)return String(e);if("object"!=typeof e)return;const r=e;if(t.has(r))return"[circular]";if(o>=6)return"[truncated]";let s;t.add(r);try{if(Array.isArray(r))s=r.map(e=>n(e,o+1));else if(function(e){const t=Object.getPrototypeOf(e);return t===Object.prototype||null===t}(r)){const e={};for(const t of Object.keys(r))e[t]=n(ct(r,t),o+1);s=e}else s=function(e){try{return String(e)}catch{return"[object]"}}(r)}catch{s="[unreadable]"}return t.delete(r),s};return e.map(e=>n(e,0))}function dt(e){return e.map(e=>({fn:e.fn,args:ut(e.args),ts:e.ts}))}function lt(e,t,n,o){if(!Number.isFinite(n.max)||n.max<=0)throw new Error(`pushBounded: max must be > 0 (got ${n.max})`);if("dropNewest"===(n.onOverflow??"dropOldest"))return e.length>=n.max?(o&&o([t]),{appended:!1,dropped:1}):(e.push(t),{appended:!0,dropped:0});const r=[];for(;e.length>=n.max;)r.push(e.shift());return e.push(t),r.length>0&&o&&o(r),{appended:!0,dropped:r.length}}var ft=new WeakMap;function pt(e,t,n,o){ft.get(e)||(ft.set(e,!0),t.warn(n,o))}function gt(e){ft.delete(e)}var ht=()=>Date.now();function mt(e){if(void 0!==e)return"number"==typeof e?{threshold:e,cooldown:3e4}:{threshold:e.threshold??5,cooldown:e.cooldown??3e4}}function vt(e,t,n,o,r){if("partial"===n)return;const s=((a=e)[i=t]||(a[i]={state:"closed",consecutiveFailures:0}),a[i]);var a,i;return"success"===n?(s.consecutiveFailures=0,s.state="closed",s.probing=!1,void(s.openUntil=void 0)):(s.consecutiveFailures+=1,"half-open"===s.state?(s.state="open",s.probing=!1,void(s.openUntil=ht()+r)):void(s.consecutiveFailures>=o&&(s.state="open",s.probing=!1,s.openUntil=ht()+r)))}function yt(e,t){return e.status.destinations[t]||(e.status.destinations[t]={count:0,failed:0,duration:0,queuePushSize:0,dlqSize:0}),e.status.destinations[t]}function wt(e,t,n,o){e.dropped[t]||(e.dropped[t]={});const r=e.dropped[t];return r[n]=(r[n]??0)+o,r[n]}function bt(e,t,n,o,r){const s=ne(t,n);return(t,a)=>{try{if(a)return r?function(e,t,n,o,r,s){const a=t.dlq=t.dlq||[],i={max:t.config.dlqMax??100},c=lt(a,[o,r],i);if(c.dropped>0){const t=wt(e.status,ne("destination",n),"dlq",c.dropped);pt(a,s,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:n,cap:i.max,droppedCount:t})}else a.length<i.max&&gt(a);const u=yt(e,n);u.failed++,u.dlqSize=a.length,e.status.failed++;const d=mt(t.config.breaker);if(d){const o=t.config.id||n;vt(e.status.breakers,ne("destination",o),"transport-failure",d.threshold,d.cooldown)}}(e,r,n,a,t,o):e.status.failed++,void o.error("report error",{error:t instanceof Error?t.message:String(t),event:a.name});e.status.connectionErrors[s]=(e.status.connectionErrors[s]??0)+1,o.error("connection error",{error:t instanceof Error?t.message:String(t)})}catch{}}}function kt(e,t){return e.storeId&&t.stores[e.storeId]?t.stores[e.storeId]:t.stores.__cache}function It(e,t){return e?t.stores[e]:t.stores.__cache}function Et(e){const t={};for(const[n,o]of Object.entries(e)){const e=o.config?.next;"string"==typeof e||Array.isArray(e)&&e.every(e=>"string"==typeof e)?t[n]={next:e}:t[n]={}}return t}function St(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 Ot(e,t={}){if(!e)return[];if(Array.isArray(e))return e;const n=[],o=new Set;let r=e;for(;r&&t[r]&&!o.has(r);){o.add(r),n.push(r);const e=t[r].next;if(Array.isArray(e)){n.push(...e);break}r=e}return n}async function qt(e,t,n){if(t.init&&!t.config.init){const o=t.type||"unknown",r=e.logger.scope(`transformer:${o}`),s={collector:e,logger:r,id:n,ingest:ve(n),config:t.config,env:$t(t.config.env),reportError:bt(e,"transformer",n,r)};r.debug("init");const a=await Ee(t.init,"TransformerInit",e.hooks,e.logger)(s);if(!1===a)return!1;t.config={...a||t.config,env:a?.env||t.config.env,init:!0},r.debug("init done")}return!0}async function xt(e,t,n,o,r,s){const a=t.type||"unknown",i=e.logger.scope(`transformer:${a}`),c={collector:e,logger:i,id:n,ingest:r,config:t.config,env:{...$t(t.config.env),...s?{respond:s}:{}},reportError:bt(e,"transformer",n,i)};i.debug("push",{event:o.name});const u="string"==typeof o.id?o.id:"",{traceId:d,sourceId:l,parentEventId:f}=ot(o,r,e),p=Date.now(),g=rt(e,{stepId:ke("transformer",n),stepType:"transformer",phase:"in",eventId:u,now:p,traceId:d,sourceId:l,parentEventId:f});g.inEvent=o,ye(e,g);try{const r=await Ee(t.push,"TransformerPush",e.hooks,e.logger)(o,c),s=Date.now(),a=rt(e,{stepId:ke("transformer",n),stepType:"transformer",phase:"out",eventId:u,now:s,traceId:d,sourceId:l,parentEventId:f});return a.durationMs=s-p,a.outEvent=r,ye(e,a),i.debug("push done"),r}catch(t){const o=Date.now(),r=rt(e,{stepId:ke("transformer",n),stepType:"transformer",phase:"error",eventId:u,now:o,traceId:d,sourceId:l,parentEventId:f});throw r.durationMs=o-p,r.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},ye(e,r),t}}function jt(e,t){return e?{...e,_meta:{...e._meta,path:[...e._meta.path]}}:ve(t)}async function Ct(e,t,n,o,r,s,a){r||(r=ve(n[0]??"chain")),a&&r._meta&&(r._meta.chainPath=a);let i=o,c=s;for(const o of n){const s=t[o];if(!s){e.logger.warn(`Transformer not found: ${o}`);continue}if(r&&r._meta&&r._meta.path.length>256)return e.logger.error(`Max path length exceeded at ${o}`),{event:null,respond:c};if(r&&r._meta&&(r._meta.hops++,r._meta.path.push(o)),!await Ie(qt,t=>{if(t instanceof we)throw t;return e.status.failed++,e.logger.scope(`transformer:${s.type||"unknown"}`).error("transformer init failed",{transformer:o,error:t}),!1})(e,s,o))return{event:null,respond:c};if(a&&void 0!==s.config?.chainMocks?.[a]){const t=s.config.chainMocks[a];e.logger.scope(`transformer:${s.type||"unknown"}`).debug("chainMock",{chain:a}),i=t;continue}if(void 0!==s.config?.mock){e.logger.scope(`transformer:${s.type||"unknown"}`).debug("mock"),i=s.config.mock;continue}if(s.config?.disabled)continue;const u=s.config?.cache,d=u?Oe(u):void 0,l=d?kt(d,e):void 0,f=s.config?.state?Ae(s.config.state):void 0,p=f?.filter(e=>"get"===e.mode),g=f?.filter(e=>"set"===e.mode),h=async t=>g&&0!==g.length?De(g,t=>It(t,e),t,e):t;let m;if(d&&l){const e=je(r,i),t=await qe(d,l,e);if("HIT"===t?.status&&t.value){if(i=t.value,d.stop)return{event:i,respond:c,stopped:!0};continue}"MISS"===t?.status&&(m={key:t.key,ttl:t.rule.ttl})}const v=s.config.before;if(v){const n=Se(v,je(r,i));if(1===n.length){const o=Ot(n[0],Et(t));if(o.length>0){const n=await Ct(e,t,o,i,r,c,a);if(null===n.event)return{event:null,respond:n.respond??c};if(n.stopped)return{event:Array.isArray(n.event)?n.event[0]:n.event,respond:n.respond??c,stopped:!0};n.respond&&(c=n.respond),i=Array.isArray(n.event)?n.event[0]:n.event}}else n.length>1&&await Promise.all(n.map(n=>Ie(Ct,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,Ot(n,Et(t)),i,jt(r,n),void 0,a)))}p&&p.length>0&&(i=await De(p,t=>It(t,e),i,e));const y=await Ie(xt,t=>(e.logger.scope(`transformer:${s.type||"unknown"}`).error("Push failed",{error:t}),!1))(e,s,o,i,r,c);if(!1===y)return{event:null,respond:c,droppedBy:o};if(Array.isArray(y)){const s=n.slice(n.indexOf(o)+1),u=await Promise.all(y.map(async n=>{const o=await h(n.event||i),u=jt(r,"unknown");if(n.next){const r=Se(n.next,je(u,o));if(0===r.length)return{event:o,respond:c};if(1===r.length){const n=Ot(r[0],Et(t));return n.length>0?Ct(e,t,n,o,u,c,a):{event:o,respond:c}}return(await Promise.all(r.map(n=>Ie(Ct,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,Ot(n,Et(t)),o,jt(u,n),void 0,a)))).map(e=>({event:e.event,respond:void 0}))}return s.length>0?Ct(e,t,s,o,u,c,a):{event:o,respond:c}}));let d=c;const l=[];for(const e of u.flat())if(null!==e)if(e&&"object"==typeof e&&"event"in e){const t=e;if(t.respond&&(d=t.respond),null===t.event)continue;Array.isArray(t.event)?l.push(...t.event):l.push(t.event)}else l.push(e);return 0===l.length?{event:null,respond:d}:1===l.length?{event:l[0],respond:d}:{event:l,respond:d}}if(y&&"object"==typeof y){const{event:n,respond:o,next:s}=y;if(o&&(c=o),void 0!==s){const o=await h(n||i),u=Se(s,je(r,o));if(0===u.length){i=o;continue}if(1===u.length){const n=Ot(u[0],Et(t));return n.length>0?Ct(e,t,n,o,r,c,a):(e.logger.warn(`Branch target not found: ${JSON.stringify(s)}`),{event:null,respond:c})}return await Promise.all(u.map(n=>Ie(Ct,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,Ot(n,Et(t)),o,jt(r,n),void 0,a))),{event:null,respond:void 0}}n&&(i=n)}g&&g.length>0&&(i=await De(g,t=>It(t,e),i,e)),m&&l&&xe(l,m.key,i,m.ttl);const w=s.config.next,b="string"==typeof w||Array.isArray(w)&&w.every(e=>"string"==typeof e),k=void 0!==w&&!b;if((!y||"object"==typeof y&&!y.next)&&k){const n=Se(s.config.next,je(r,i));if(1===n.length){const o=Ot(n[0],Et(t));return o.length>0?Ct(e,t,o,i,r,c,a):{event:i,respond:c}}return n.length>1?(await Promise.all(n.map(n=>Ie(Ct,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,Ot(n,Et(t)),i,jt(r,n),void 0,a))),{event:null,respond:void 0}):{event:i,respond:c}}}return{event:i,respond:c}}function $t(e){return e&&be(e)?e:{}}function At(e){return"string"==typeof e||!(!Array.isArray(e)||!e.every(e=>"string"==typeof e))}async function Dt(e,t,n){if(!t.on||!t.queueOn?.length)return;const o=t.queueOn;t.queueOn=[];const r=n||t.config?.id||"unknown";for(const{type:n,data:s}of o)Ut(n)&&!Lt(e,t,n)||(await ce(t.on,t=>{if(t instanceof re)throw t;e.status.failed++,e.logger.scope("source").error("source on flush failed",{sourceId:r,type:n,error:t})})(n,s),Ut(n)&&Wt(e,t,n))}function Mt(e){return Boolean(e.config.init)&&!e.config.require?.length}function Tt(e){return"object"==typeof e&&null!==e}async function Pt(e,t,n){const{code:o,config:r={},env:s={},primary:a,next:i,before:c,cache:u,terminus:d}=n,l=r.state??n.state,f=l?he(l):void 0,p=u,g=p?de({...p,stop:p.stop??!0}):void 0,h=At(i)?Ot(i,Et(e.transformers)):void 0,m=At(c)?Ot(c,Et(e.transformers)):void 0,v=d??e.push,y=Boolean(d),w=async(n,o,s)=>{if(y)return v(n);let a;const u="string"==typeof n.id&&""!==n.id?n:{...n,id:ae()},d=m??(void 0!==c?(()=>{const t=ue(c,ge(s.ingest));return 0===t.length?[]:Ot(1===t.length?t[0]:t,Et(e.transformers))})():[]);let l=[u];if(d.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const n=await Ct(e,e.transformers,d,u,s.ingest,s.respond,`source.${t}.before`);if(null===n.event)return{ok:!0};if(n.stopped)return n.respond&&(s.respond=n.respond),{ok:!0};n.respond&&(s.respond=n.respond);const o="string"==typeof u.id?u.id:"";if(Array.isArray(n.event))l=n.event.map(e=>""!==o&&e.id===o?{...e,id:ae()}:e);else{const e=n.event;l=""===o||"string"==typeof e.id&&""!==e.id?[e]:[{...e,id:o}]}}if(g){const t=kt(g,e);if(t){const n=ge(s.ingest),o=await le(g,t,n);if(o){if("HIT"===o.status&&void 0!==o.value&&g.stop){let t=o.value;return o.rule.update&&(t=await pe(t,o.rule.update,{...n,cache:{status:"HIT"}},e)),s.respond?.(t),{ok:!0}}if("MISS"===o.status&&g.stop&&s.respond){const r=s.respond,i=o.rule.update,c={...n,cache:{status:"MISS"}},u=o.key,d=o.rule.ttl,l=n=>{fe(t,u,n,d),i?a=(async()=>{const t=await pe(n,i,c,e);r(t)})():r(n)};s.respond=l}"MISS"!==o.status||g.stop||fe(t,o.key,!0,o.rule.ttl)}}}const p=h?{kind:"single",preChain:h}:void 0!==i?(()=>{const t=ue(i,ge(s.ingest));return 0===t.length?{kind:"single",preChain:[]}:1===t.length?{kind:"single",preChain:Ot(t[0],Et(e.transformers))}:{kind:"many",branches:t.map(t=>Ot(t,Et(e.transformers)))}})():{kind:"single",preChain:[]};f&&f.length>0&&(l=await Promise.all(l.map(t=>me(f,t=>It(t,e),t,e))));let w={ok:!0};for(const n of l)"many"===p.kind?(await Promise.all(p.branches.map((a,i)=>ce(async()=>v(n,{...o,id:t,ingest:jt(s.ingest,`${t}.${i}`),respond:void 0,mapping:r,preChain:a}),t=>(e.logger.scope("source:many").error(`many branch ${i} failed`,{error:t}),{ok:!0}))())),w={ok:!0}):w=await v(n,{...o,id:t,ingest:s.ingest,respond:s.respond,mapping:r,preChain:p.preChain});return a&&await a,w},b=async n=>{const o=oe(t),s=ie(function(e){if(!Tt(e))return;const t=e.headers;if(Tt(t)){if("get"in(n=t)&&"function"==typeof n.get)return t.get("traceparent")??void 0;if("traceparent"in t)return t.traceparent;for(const e of Object.keys(t))if("traceparent"===e.toLowerCase())return t[e]}var n}(n));if(s&&(o._meta.trace=s.trace,o._meta.parentEventId=s.parentSpan),!r.ingest||void 0===n)return o;const a=await se(n,r.ingest,{collector:e});return{...o,...a,_meta:o._meta}},k=e.logger.scope("source").scope(t),I={...s,push:async(e,n={})=>{const o={ingest:oe(t),respond:void 0};return w(e,n,o)},command:e.command,sources:e.sources,elb:e.elb,logger:k},E={collector:e,logger:k,id:t,config:r,env:I,withScope:async(e,t,n)=>{const o={ingest:await b(e),respond:t};return n({...I,push:(e,t={})=>w(e,t,o),ingest:o.ingest,respond:o.respond})},reportError:bt(e,"source",t,k)},S=await ce(o,n=>{if(n instanceof re)throw n;e.status.failed++,e.logger.scope("source").error("source factory failed",{sourceId:t,error:n})})(E);if(!S)return;const O=S.type||"unknown",q=e.logger.scope(O).scope(t);return I.logger=q,a&&(S.config={...S.config,primary:a}),S}async function _t(e){for(const[t,n]of Object.entries(e.sources)){if(Mt(n))continue;const o=n.config.require;if(!o?.length)continue;const r=o.filter(t=>!Gt(e,t));r.length!==o.length&&(n.config.require=r,Mt(n)&&await Dt(e,n,t))}for(const[t,n]of Object.entries(e.pending.destinations)){if(!e.pending.destinations[t]||e.destinations[t])continue;const o=n.config?.require;if(!o)continue;const r=o.filter(t=>!Gt(e,t));if(n.config&&(n.config.require=r),r.length>0)continue;delete e.pending.destinations[t];const s=fn(n);!1!==s.config.queue&&(s.queuePush=[...e.queue]),e.destinations[t]=s}}function Rt(e){if("object"!=typeof e||null===e)return!1;if(!("logger"in e))return!1;const t=e.logger;return"object"==typeof t&&null!==t&&"scope"in t&&"function"==typeof t.scope}var zt=!1;function Bt(){zt||(zt=!0,"undefined"!=typeof console&&"function"==typeof console.warn&&console.warn("walkerOS: ignored an on-dispatch call with a non-collector argument"))}function Kt(e,t,n,o){if(n instanceof Z)throw n;e.logger.scope("on").error("on callback failed",{kind:t,...o,error:n})}var Ft=[nt.Consent,nt.User,nt.Globals,nt.Custom];function Ut(e){return Ft.includes(e)}function Ht(e,t){switch(t){case nt.Consent:return Object.keys(e.consent).length>0;case nt.User:return Object.keys(e.user).length>0;case nt.Globals:return Object.keys(e.globals).length>0;case nt.Custom:return Object.keys(e.custom).length>0;default:return!1}}function Gt(e,t){switch(t){case nt.Consent:case nt.User:case nt.Globals:case nt.Custom:return Ht(e,t);case nt.Run:case nt.Ready:return!0===e.allowed;default:return e.seenEvents.has(String(t))}}function Vt(e,t){return e.cellVersion[String(t)]??0}function Wt(e,t,n){let o=e.delivery.get(t);o||(o={},e.delivery.set(t,o)),o[String(n)]=Vt(e,n)}function Lt(e,t,n){return e.allowed&&Vt(e,n)>function(e,t,n){const o=e.delivery.get(t),r=o?.[String(n)];return void 0===r?-1:r}(e,t,n)}function Nt(e,t,n){const o=e.cascade;if(!o)return!0;let r=o.counts.get(t);r||(r={},o.counts.set(t,r));const s=String(n),a=(r[s]||0)+1;return r[s]=a,a<=8||(9===a&&e.logger.error("state delivery did not converge",{type:s}),!1)}function Qt(e,t){return{collector:e,logger:e.logger.scope("on").scope(String(t))}}function Yt(e,t,n,o,r){if(!t.on)return;const s=t.type||"unknown",a=e.logger.scope(s).scope("on").scope(o),i={collector:e,logger:a,id:n,config:t.config,data:r,env:pn(t.env,t.config.env),reportError:bt(e,"destination",n,a,t)};ee(t.on,t=>Kt(e,"destination",t,{destId:n,type:o}))(o,i)}function Jt(e,t,n,o){if(!Rt(e))return void Bt();const r=Xt(e,t,o);if(n.length)switch(t){case nt.Consent:!function(e,t,n){const o=n||e.consent,r=Qt(e,nt.Consent);t.forEach(t=>{Lt(e,t,nt.Consent)&&Nt(e,t,nt.Consent)&&(Object.keys(o).filter(e=>e in t).forEach(n=>{ee(t[n],t=>Kt(e,"consent",t,{key:n}))(o,r)}),Wt(e,t,nt.Consent))})}(e,n,o);break;case nt.Ready:!function(e,t){if(!e.allowed)return;const n=Qt(e,nt.Ready);t.forEach(t=>{ee(t,t=>Kt(e,"ready",t))(void 0,n)})}(e,n);break;case nt.Run:!function(e,t){if(!e.allowed)return;const n=Qt(e,nt.Run);t.forEach(t=>{ee(t,t=>Kt(e,"run",t))(void 0,n)})}(e,n);break;case nt.Session:!function(e,t){if(!e.session)return;const n=Qt(e,nt.Session);t.forEach(t=>{ee(t,t=>Kt(e,"session",t))(e.session,n)})}(e,n);break;default:{const o=Qt(e,t),s=Ut(t);n.forEach(n=>{"function"==typeof n&&(s&&!Lt(e,n,t)||s&&!Nt(e,n,t)||(ee(n,n=>Kt(e,"generic",n,{type:t}))(r,o),s&&Wt(e,n,t)))});break}}}function Xt(e,t,n){switch(t){case nt.Consent:return n||e.consent;case nt.Session:return e.session;case nt.User:return n||e.user;case nt.Custom:return n||e.custom;case nt.Globals:return n||e.globals;case nt.Config:return n||e.config;default:return}}async function Zt(e,t,n,o,r){if(!t.on)return!1;if(Ut(o)&&!Lt(e,t,o))return!1;if(Ut(o)&&!Nt(e,t,o))return!1;const s=await te(t.on,t=>Kt(e,"source",t,{sourceId:n,type:o}))(o,r);return Ut(o)&&Wt(e,t,o),!1===s}function en(e){return"number"==typeof e&&e>0?e:1e4}var tn=class extends Error{constructor(e){super(e),this.name="DestinationTimeoutError"}};function nn(e,t,n){let o;const r=new Promise((e,r)=>{o=setTimeout(()=>r(new tn(n)),t)});return Promise.race([e,r]).finally(()=>{o&&clearTimeout(o)})}var on=Object.freeze({batched:!0});function rn(e){return e===on}function sn(e){return void 0===e?{}:"number"==typeof e?{wait:e}:{wait:e.wait,size:e.size,age:e.age}}function an(e,t,n){if(!e)return[];if(Array.isArray(e)&&e.every(e=>"string"==typeof e))return Ot(e,t);if("string"==typeof e)return Ot(e,t);const o=B(e,C(n));return 0===o.length?[]:1===o.length?Ot(o[0],t):Ot(o,t)}async function cn(e,t,n={},o){const{allowed:r,consent:s,user:a}=e;if(!r)return ln({ok:!1});if(t){const n=e.config.queueMax;if(void 0===n)throw new Error("Collector.Config.queueMax is undefined; defaults must be seeded by collector()");const o=lt(e.queue,t,{max:n});if(o.dropped>0){const t=wt(e.status,V("collector"),"queue",o.dropped);pt(e.queue,e.logger,"collector.queue overflow; oldest events dropped",{buffer:"queue",cap:n,droppedCount:t})}else e.queue.length<n&&gt(e.queue);e.status.in++}o||(o=e.destinations);const i=e.transformers?Et(e.transformers):{},c=await Promise.all(Object.entries(o||{}).map(async([o,r])=>{if(r.config.disabled)return{id:o,destination:r,skipped:!0};const c=r.config.id||o,u=V("destination",c),d=mt(r.config.breaker);if(d&&function(e,t,n){const o=e[t];if(!o||"closed"===o.state)return!1;if("half-open"===o.state)return!0===o.probing;const r=ht();return void 0!==o.openUntil&&r<o.openUntil||(o.state="half-open",o.probing=!0,o.openUntil=r+n,!1)}(e.status.breakers,u,d.cooldown))return{id:o,destination:r,skipped:!0};const l=t=>{d&&vt(e.status.breakers,u,t,d.threshold,d.cooldown)},f=()=>{d&&function(e,t){const n=e[t];n&&"half-open"===n.state&&!0===n.probing&&(n.state="open",n.probing=!1)}(e.status.breakers,u)};let p=(r.queuePush||[]).map(e=>({...e,consent:s}));r.queuePush=[],t&&p.push($(t));const g=n.ingest?{...n.ingest,_meta:{...n.ingest._meta,path:[...n.ingest._meta.path]}}:T("unknown");if(!p.length&&!r.queueOn?.length)return f(),{id:o,destination:r,skipped:!0};if(!p.length&&r.queueOn?.length){if(!z(r.config.consent,s))return f(),{id:o,destination:r,skipped:!0};let t=!1;try{t=await un(e,r,o,!0)}catch(t){e.status.failed++;const n=r.type||"unknown";e.logger.scope(n).error("destination init failed",{error:t instanceof Error?t.message:String(t)}),l("transport-failure")}return f(),{id:o,destination:r,skipped:!t}}const h=[],m=p.filter(t=>{const n=z(r.config.consent,s,t.consent);if(n)return t.consent=n,h.push(t),!1;const a=rt(e,{stepId:V("destination",o),stepType:"destination",phase:"skip",eventId:"string"==typeof t.id?t.id:"",now:Date.now(),...ot(t,g,e)});return a.skipReason="consent",s&&(a.consent={...s}),r.config.consent&&(a.meta={required:{...r.config.consent}}),_(e,a),!0});if(m.length>0){const t=r.queuePush,n=r.config.id||o,s={max:r.config.queueMax??1e3};let a=0;for(const e of m)a+=lt(t,e,s).dropped;if(a>0){yt(e,n);const o=wt(e.status,V("destination",n),"queue",a);pt(t,e.logger.scope(r.type||"unknown"),"destination.queuePush overflow; oldest events dropped",{buffer:"queuePush",destination:n,cap:s.max,droppedCount:o})}else t.length<s.max&&gt(t)}if(!h.length)return f(),{id:o,destination:r,queue:p};let v,y,w=!1;try{w=await un(e,r,o,!0)}catch(t){e.status.failed++;const n=r.type||"unknown";e.logger.scope(n).error("destination init failed",{error:t instanceof Error?t.message:String(t)}),l("transport-failure")}if(!w)return f(),{id:o,destination:r,queue:p};r.dlq||(r.dlq=[]);const b=an(r.config.before,i,g),k=r.config.next,I=r.config?.cache,E=I?A(I):void 0,S=E?kt(E,e):void 0,O=r.config?.state?N(r.config.state):void 0,q=O?.filter(e=>"get"===e.mode),x=O?.filter(e=>"set"===e.mode);let P=0,R=0;return await Promise.all(h.map(async t=>{let s;if(t.user=j(a,t.user),E?.stop&&S){const e=C(g,t),n=await D(E,S,e);if("HIT"===n?.status)return t;"MISS"===n?.status&&(s={key:n.key,ttl:n.rule.ttl})}let c=t,u=n.respond;if(b.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const r=await Ct(e,e.transformers,b,t,g,n.respond,`destination.${o}.before`);if(null===r.event)return t;r.respond&&(u=r.respond),c=Array.isArray(r.event)?r.event[0]:r.event}if(E&&!E.stop&&S){const e=C(g,c),n=await D(E,S,e);if("HIT"===n?.status)return t;"MISS"===n?.status&&(s={key:n.key,ttl:n.rule.ttl})}q&&q.length>0&&c&&(c=await Q(q,t=>It(t,e),c,e));const d=Date.now();let l=!1;const f=await W(dn,t=>{const n=r.type||"unknown";e.logger.scope(n).error("Push failed",{error:t,event:c.name}),v=t,l=!0;const s=r.dlq,a=r.config.id||o,i={max:r.config.dlqMax??100},u=lt(s,[c,t],i);if(u.dropped>0){yt(e,a);const t=wt(e.status,V("destination",a),"dlq",u.dropped);pt(s,e.logger.scope(r.type||"unknown"),"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:a,cap:i.max,droppedCount:t})}else s.length<i.max&&gt(s)})(e,r,o,c,g,u);if(P+=Date.now()-d,s&&S&&void 0===r.config.mock&&M(S,s.key,f??!0,s.ttl),!l&&!rn(f)&&x&&x.length>0&&c&&(c=await Q(x,t=>It(t,e),c,e)),void 0===f||rn(f)||(y=f),rn(f)&&R++,!l&&k){void 0!==f&&(g._response=f);const t=an(k,i,g);if(t.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const n=await Ct(e,e.transformers,t,c,g,u,`destination.${o}.next`);n.respond&&(u=n.respond)}}return t})),{id:o,destination:r,error:v,response:y,totalDuration:P,batchedCount:R,allowedCount:h.length,canonicalId:c,breakerConfig:d}})),u={},d={},l={};for(const t of c){if(t.skipped)continue;const n=t.destination,o={type:n.type||"unknown",data:t.response};yt(e,t.id);const r=e.status.destinations[t.id],s=Date.now();r.queuePushSize=n.queuePush?.length??0,r.dlqSize=n.dlq?.length??0;const a=t.breakerConfig,i=t.canonicalId?V("destination",t.canonicalId):void 0,c=t=>{a&&i&&vt(e.status.breakers,i,t,a.threshold,a.cooldown)};if(t.error)o.error=t.error,l[t.id]=o,r.failed++,r.lastAt=s,r.duration+=t.totalDuration||0,e.status.failed++,c("transport-failure");else if(t.queue&&t.queue.length)d[t.id]=o;else{const n=t.batchedCount??0,a=t.allowedCount??0;(Math.max(0,a-n)>0||0===a)&&(u[t.id]=o,r.count++,r.lastAt=s,r.duration+=t.totalDuration||0,e.status.out++,c("success"))}}return ln({event:t,...Object.keys(u).length&&{done:u},...Object.keys(d).length&&{queued:d},...Object.keys(l).length&&{failed:l}})}async function un(e,t,n,o=!1){if(t.init&&!t.config.init){if(!o&&function(e){const t=e.config.consent;return!!t&&Object.keys(t).length>0}(t))return e.logger.scope(t.type||"unknown").debug("init blocked: consent gate not cleared"),!1;const r=t.type||"unknown",s=e.logger.scope(r),a={collector:e,logger:s,id:n,config:t.config,env:pn(t.env,t.config.env),reportError:bt(e,"destination",n,s,t)};s.debug("init");const i=Date.now();let c;_(e,rt(e,{stepId:V("destination",n),stepType:"destination",phase:"init",eventId:"",now:i}));try{c=await L(t.init,"DestinationInit",e.hooks,e.logger)(a)}catch(t){const o=Date.now(),r=rt(e,{stepId:V("destination",n),stepType:"destination",phase:"error",eventId:"",now:o});throw r.durationMs=o-i,r.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},_(e,r),t}if(!1===c)return c;if(t.config={...c||t.config,init:!0},t.queueOn?.length){const o=t.queueOn;t.queueOn=[];for(const{type:r,data:s}of o)Yt(e,t,n,r,s)}s.debug("init done")}return!0}async function dn(e,t,n,o,r,s){const{config:a}=t,i=await G(o,a,e);if(i.ignore)return!1;const c=t.type||"unknown",u=e.logger.scope(c),d={collector:e,logger:u,id:n,config:a,data:i.data,rule:i.mapping,ingest:r,env:{...pn(t.env,a.env),...s?{respond:s}:{}},reportError:bt(e,"destination",n,u,t)};if(void 0!==a.mock)return u.debug("mock",{event:i.event.name}),a.mock;const l=i.mapping,f=void 0!==l?.batch,p=f?i.mappingKey||"* *":" batch-all";if((f||void 0!==a.batch)&&t.pushBatch&&void 0===a.mock){if(t.batches=t.batches||{},!t.batches[p]){const o={key:p,entries:[],events:[],data:[]},r=sn(l?.batch),s=sn(a.batch),i=r.wait??s.wait??3e4,c=r.size??s.size??1e3,d=r.age??s.age??3e4,g=pn(t.env,a.env),h=P(async()=>{const o=t.batches[p],r=o.batched;if(0===r.entries.length)return;const s={key:r.key,entries:r.entries,events:r.events,data:r.data};r.entries=[],r.events=[],r.data=[];const i=s.entries[0],c={collector:e,logger:u,id:n,config:a,data:void 0,rule:o.isDefault?void 0:i.rule,ingest:i.ingest,env:{...g,...i.respond?{respond:i.respond}:{}},reportError:bt(e,"destination",n,u,t)};u.debug("push batch",{events:s.entries.length});const d=t.config.id||n,l=yt(e,d),f=mt(t.config.breaker),h=V("destination",d),m=t=>{f&&vt(e.status.breakers,h,t,f.threshold,f.cooldown)},v=Date.now(),y=new Map;let w,b=!1;const k=n=>{const o=t.dlq=t.dlq||[],r={max:t.config.dlqMax??100};let s=0;for(const e of n)s+=lt(o,e,r).dropped;if(s>0){const t=wt(e.status,V("destination",d),"dlq",s);pt(o,u,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:d,cap:r.max,droppedCount:t})}else o.length<r.max&&gt(o);l.failed+=n.length,l.dlqSize=o.length,e.status.failed+=n.length};let I=s.entries.length;const E=en(a.timeout),S=await W((o,r)=>nn(Promise.resolve(L(t.pushBatch,"DestinationPushBatch",e.hooks,e.logger)(o,r)),E,`Destination "${n}" batch delivery timed out after ${E}ms`),e=>{I=0,b=!0,w=e,k(s.entries.map(t=>[t.event,e])),m("transport-failure"),u.error("Push batch failed",{error:e instanceof Error?e.message:String(e),entries:s.entries.length})})(s,c);if(U(O=S)&&Array.isArray(O.failed)&&S.failed.length>0){const e=[];for(const t of S.failed){const n=s.entries[t.index];if(!n||y.has(t.index))continue;const o=t.error??new Error(`Push batch entry ${t.index} failed (no per-row error provided)`);y.set(t.index,o),e.push([n.event,o])}e.length>0&&(k(e),I=Math.max(0,s.entries.length-e.length),u.error("Push batch partial failure",{failed:e.length,delivered:I,entries:s.entries.length}))}var O;const q=Date.now();s.entries.forEach((t,o)=>{const r=b||y.has(o),a=ot(t.event,t.ingest,e),i=rt(e,{stepId:V("destination",n),stepType:"destination",phase:r?"error":"flush",eventId:"string"==typeof t.event.id?t.event.id:"",now:q,traceId:a.traceId,sourceId:a.sourceId,parentEventId:a.parentEventId});if(i.batch={size:s.entries.length,index:o},i.durationMs=q-v,r){const e=b?w:y.get(o);i.error=e instanceof Error?{name:e.name,message:e.message}:{message:String(e)}}_(e,i)}),u.debug("push batch done"),l.inFlightBatch=Math.max(0,(l.inFlightBatch??0)-s.entries.length),I>0&&(l.count+=I,l.lastAt=Date.now(),e.status.out+=I,m("success"))},{wait:i,size:c,age:d});t.batches[p]={batched:o,isDefault:!f,batchFn:()=>{h()},flush:async()=>{await h.flush()}}}const c=t.batches[p];c.batched.entries.push({event:i.event,ingest:r,respond:s,rule:l,data:i.data}),c.batched.events.push(i.event),K(i.data)&&c.batched.data.push(i.data);const d="string"==typeof i.event.id?i.event.id:"",g=ot(o,r,e),h=Date.now(),m=rt(e,{stepId:V("destination",n),stepType:"destination",phase:"in",eventId:d,now:h,traceId:g.traceId,sourceId:g.sourceId,parentEventId:g.parentEventId});i.mappingKey&&(m.mappingKey=i.mappingKey),i.event.consent&&(m.consent={...i.event.consent}),m.inEvent=i.event,_(e,m);const v=rt(e,{stepId:V("destination",n),stepType:"destination",phase:"out",eventId:d,now:h,traceId:g.traceId,sourceId:g.sourceId,parentEventId:g.parentEventId});i.mappingKey&&(v.mappingKey=i.mappingKey),v.outEvent=i.event,v.batch={size:c.batched.entries.length,index:c.batched.entries.length-1},_(e,v);const y=t.config.id||n,w=yt(e,y);return w.inFlightBatch=(w.inFlightBatch??0)+1,c.batchFn(),on}{let s;if(u.debug("push",{event:i.event.name}),"trace"===e.observeLevel?.()&&Array.isArray(t.calls)&&t.calls.length>0){const e=it({...d.env,simulation:t.calls});d.env=e.wrappedEnv,s=e.calls,e.unresolved.length>0&&(e.wrappedEnv[H]={paths:e.unresolved,record:(t,n)=>e.calls.push({fn:t,args:n,ts:Date.now()})})}const c="string"==typeof i.event.id?i.event.id:"",{traceId:l,sourceId:f,parentEventId:p}=ot(o,r,e),g=Date.now(),h=rt(e,{stepId:V("destination",n),stepType:"destination",phase:"in",eventId:c,now:g,traceId:l,sourceId:f,parentEventId:p});i.mappingKey&&(h.mappingKey=i.mappingKey),i.event.consent&&(h.consent={...i.event.consent}),h.inEvent=i.event,_(e,h);try{const o=en(a.timeout),r=await nn(Promise.resolve(L(t.push,"DestinationPush",e.hooks,e.logger)(i.event,d)),o,`Destination "${n}" delivery timed out after ${o}ms`),h=Date.now(),m=rt(e,{stepId:V("destination",n),stepType:"destination",phase:"out",eventId:c,now:h,traceId:l,sourceId:f,parentEventId:p});return m.durationMs=h-g,m.outEvent=i.event,s&&s.length>0&&(m.calls=dt(s)),K(r)&&(m.meta={...m.meta,response:r}),i.mappingKey&&(m.mappingKey=i.mappingKey),_(e,m),u.debug("push done"),r}catch(t){const o=Date.now(),r=rt(e,{stepId:V("destination",n),stepType:"destination",phase:"error",eventId:c,now:o,traceId:l,sourceId:f,parentEventId:p});throw r.durationMs=o-g,r.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},s&&s.length>0&&(r.calls=dt(s)),i.mappingKey&&(r.mappingKey=i.mappingKey),_(e,r),t}}}function ln(e){return{ok:!e?.failed,...e}}function fn(e){const{code:t,config:n={},env:o={},cache:r,state:s}=e,{config:a}=St(e,"before"),{config:i}=St({...e,config:a},"next"),c={...t.config,...n,...i};r&&(c.cache=r),void 0!==s&&void 0===c.state&&(c.state=s);const u=pn(t.env,o);return{...t,config:c,env:u}}function pn(e,t){return e||t?t?e&&U(e)&&U(t)?{...e,...t}:t:e:{}}async function gn(e,t,n){const o=Object.entries(e).map(async([e,o])=>{const r=o.destroy;if(!r)return;const s=o.type||"unknown",a=n.scope(s),i={id:e,config:o.config,env:o.env??{},logger:a};let c;try{await Promise.race([r(i),new Promise((n,o)=>{c=setTimeout(()=>o(new Error(`${t} '${e}' destroy timed out`)),5e3)})])}catch(n){a.error(`${t} '${e}' destroy failed: ${n}`)}finally{c&&clearTimeout(c)}});await Promise.allSettled(o)}function hn(e,t){e.stateVersion++,e.cellVersion[t]=e.stateVersion}async function mn(e,t,n){let o,r,s=!1;const a=function(e){return e.cascade?()=>{}:(e.cascade={counts:new WeakMap},()=>{e.cascade=void 0})}(e);try{return await async function(){switch(t){case nt.Config:ze(n)&&(Me(e.config,n,{shallow:!1}),r=n,s=!0);break;case nt.Consent:if(ze(n)){const{update:t}=function(e,t){const n={};return Object.entries(t).forEach(([e,t])=>{n[e]=!!t}),e.consent=k(e.consent,n),{update:n}}(e,n);hn(e,nt.Consent),r=t,s=!0}break;case nt.Custom:ze(n)&&(e.custom=Me(e.custom,n),hn(e,nt.Custom),r=n,s=!0);break;case nt.Destination:ze(n)&&"code"in n&&ze(n.code)&&(o=await async function(e,t){const{code:n,config:o={},env:r={},before:s,next:a,cache:i,state:c}=t;if(!F(n.push))return ln({ok:!1,failed:{invalid:{type:"invalid",error:"Destination code must have a push method"}}});const u=o||{init:!1};let d=s?{...u,before:s}:{...u};a&&(d={...d,next:a}),i&&(d={...d,cache:i}),void 0!==c&&void 0===d.state&&(d={...d,state:c});let l=d.id;if(!l)do{l=R(5,"abcdefghijklmnopqrstuvwxyz")}while(e.destinations[l]||e.pending.destinations[l]);if(d.require?.length){e.pending.destinations[l]=t,await _t(e);const n=e.destinations[l];return n?cn(e,void 0,{},{[l]:n}):ln({ok:!0})}const f={...n,config:d,env:pn(n.env,r)};return e.destinations[l]=f,!1!==f.config.queue&&(f.queuePush=[...e.queue]),cn(e,void 0,{},{[l]:f})}(e,n));break;case nt.Globals:ze(n)&&(e.globals=Me(e.globals,n),hn(e,nt.Globals),r=n,s=!0);break;case nt.Hook:if(ze(n)&&Re(n.name)&&_e(n.fn)){const{name:t,fn:o}=n;e.hooks[t]=o,r=n,s=!0}break;case nt.On:if(ze(n)&&Re(n.type)){const{type:t,rules:o}=n;await async function(e,t,n){if(!Rt(e))return void Bt();const o=e.on,r=o[t]||[],s=X(n)?n:[n];s.forEach(e=>{r.push(e)}),o[t]=r,Jt(e,t,s)}(e,t,o)}break;case nt.Ready:s=!0;break;case nt.Run:o=await async function(e,t){e.allowed=!0,e.timing=Date.now(),e.trace=Pe(),e.count=0,t&&(t.consent&&(e.consent=Me(e.consent,t.consent),hn(e,nt.Consent)),t.user&&(e.user=Me(e.user,t.user),hn(e,nt.User)),t.globals&&(e.globals=Me(e.config.globalsStatic||{},t.globals),hn(e,nt.Globals)),t.custom&&(e.custom=Me(e.custom,t.custom),hn(e,nt.Custom))),Object.values(e.destinations).forEach(e=>{e.queuePush=[]}),e.queue=[],e.round++,await _t(e),await async function(e){if(Rt(e))for(const t of Ft){if(!Ht(e,t))continue;const n=Xt(e,t);Jt(e,t,e.on[t]||[]);for(const[o,r]of Object.entries(e.sources))Mt(r)&&await Zt(e,r,o,t,n)}else Bt()}(e);let n=!0;const o={};if(e.preRunQueue.length){const t=e.preRunQueue.splice(0);e.logger.debug("replaying pre-run events",{count:t.length});for(const{event:r,options:s}of t){const t=await e.push(r,s);!1===t.ok&&(n=!1),t.failed&&Object.assign(o,t.failed)}}const r=await cn(e);if(n)return r;const s={...r.failed??{},...o};return{...r,ok:!1,...Object.keys(s).length>0?{failed:s}:{}}}(e,n),s=!0;break;case nt.Session:s=!0;break;case nt.Shutdown:e.hasShutdown||(e.hasShutdown=!0,await async function(e){const t=e.logger;await gn(e.sources,"source",t),await async function(e,t){const n=Object.entries(e).flatMap(([e,n])=>{const o=n.batches;if(!o)return[];const r=t.scope(n.type||"destination");return Object.values(o).map(async t=>{let n;try{await Promise.race([t.flush(),new Promise((t,o)=>{n=setTimeout(()=>o(new Error(`destination '${e}' batch flush timed out`)),5e3)})])}catch(t){r.error(`destination '${e}' batch flush failed: ${t}`)}finally{n&&clearTimeout(n)}})});await Promise.allSettled(n)}(e.destinations,t),await gn(e.destinations,"destination",t),await gn(e.transformers,"transformer",t),await gn(e.stores,"store",t)}(e));break;case nt.User:ze(n)&&(Me(e.user,n,{shallow:!1}),hn(e,nt.User),r=n,s=!0);break;default:return e.logger.warn("unknown command",{command:t}),ln({ok:!1})}if(s){await async function(e,t,n,o){if(!Rt(e))return Bt(),!0;e.seenEvents.add(String(t));let r=n||[];n||(r=e.on[t]||[]);const s=Xt(e,t,o);let a=!1;for(const[n,o]of Object.entries(e.sources)){if(o.config.require?.length){const e=o.config.require.indexOf(t);-1!==e&&o.config.require.splice(e,1)}o.on&&(Mt(o)?await Zt(e,o,n,t,s)&&(a=!0):(o.queueOn=o.queueOn||[],o.queueOn.push({type:t,data:s})))}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:s});Yt(e,o,n,t,s)}});for(const[t,n]of Object.entries(e.sources))Mt(n)&&n.queueOn?.length&&await Dt(e,n,t);const i=Object.values(e.sources).some(e=>!Mt(e)&&e.config.require?.length);return(Object.keys(e.pending.destinations).length>0||i)&&await _t(e),Jt(e,t,r,o),!a}(e,t,void 0,r);const n=await cn(e);if(o&&!1===o.ok){const e={...n.failed??{},...o.failed??{}};o={...n,ok:!1,...Object.keys(e).length>0?{failed:e}:{}}}else o=n}return o||ln({ok:!0})}()}finally{a()}}function vn(e,t){return{timing:Math.round((Date.now()-e.timing)/10)/100,source:{type:"collector",schema:"4"},...t}}function yn(e,t,n){if(!t.name)throw new Error("Event name is required");const[o,r]=t.name.split(" ");if(!o||!r)throw new Error("Event name is invalid");const{timestamp:s=Date.now(),name:a=`${o} ${r}`,data:i={},context:c={},globals:u={},custom:d={},user:l=e.user,nested:f=[],consent:p=e.consent,id:g=Te(),trigger:h="",entity:m=o,action:v=r,timing:y=0,source:w={type:"collector",schema:"4"}}=t,b=w.count??(e.count+=1),k=w.trace??n?._meta.trace??e.trace,I={...w,count:b};void 0!==k&&(I.trace=k);const E=e.name??w.platform??"default",S=e.release??"4.4.0";return I.release={...w.release,[E]:S},{name:a,data:i,context:c,globals:Me(e.globals,u),custom:d,user:l,nested:f,consent:p,id:g,trigger:h,entity:m,action:v,timestamp:s,timing:y,source:I}}function wn(e,t){const n=We(async(n,o={})=>await Ve(async()=>{if(!e.allowed){const t=e.config.queueMax;if(void 0===t)throw new Error("Collector.Config.queueMax is undefined; defaults must be seeded by collector()");const r=lt(e.preRunQueue,{event:n,options:o},{max:t});if(r.dropped>0){const n=wt(e.status,"collector.preRun","queue",r.dropped);pt(e.preRunQueue,e.logger,"collector.preRunQueue overflow; oldest events dropped",{buffer:"queue",cap:t,droppedCount:n})}else e.preRunQueue.length<t&&gt(e.preRunQueue);return e.logger.debug("event held until run",{name:n.name,dropped:r.dropped}),ln({ok:!0})}const r=Date.now(),{id:s,ingest:a,respond:i,mapping:c,preChain:u,include:d,exclude:l}=o;let f=i,p=n;const g=d||l?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,l):void 0,h=a??Be(s||"unknown");if(c){const t=await Ge(p,c,e);if(t.ignore)return ln({ok:!0});if(c.consent&&!Ue(c.consent,e.consent,t.event.consent))return ln({ok:!0});p=t.event}if(u?.length&&e.transformers&&Object.keys(e.transformers).length>0){const n=await Ct(e,e.transformers,u,p,h,f,s?`source.${s}.next`:void 0);if(null===n.event)return e.logger.debug("Event dropped by transformer chain"+(n.droppedBy?` (${n.droppedBy})`:"")),ln({ok:!0,dropped:!0});if(n.stopped)return n.respond&&(f=n.respond),ln({ok:!0});n.respond&&(f=n.respond);const o="string"==typeof p.id?p.id:"";if(Array.isArray(n.event)){const a=await Promise.all(n.event.map(async n=>{const r=""!==o&&n.id===o?{...n,id:He()}:n,a=t(r),i=yn(e,a,h);return cn(e,i,{id:s,ingest:h,respond:f},g)}));if(s){e.status.sources[s]||(e.status.sources[s]={count:0,duration:0});const t=e.status.sources[s];t.count+=n.event.length,t.lastAt=Date.now(),t.duration+=Date.now()-r}return a[0]??ln({ok:!0})}p=""===o||"string"==typeof n.event.id&&""!==n.event.id?n.event:{...n.event,id:o}}const m=function(e,t,n){return yn(e,vn(e,t),n)}(e,p,h),v=await cn(e,m,{id:s,ingest:h,respond:f},g);if(s){e.status.sources[s]||(e.status.sources[s]={count:0,duration:0});const t=e.status.sources[s];t.count++,t.lastAt=Date.now(),t.duration+=Date.now()-r}return v},t=>{if(t instanceof Fe)throw t;return e.status.failed++,e.logger.error("push failed",{event:n,ingest:o.ingest,error:t}),ln({ok:!1})})(),"Push",e.hooks,e.logger);return async(t,o)=>{const r="string"==typeof t.id&&""!==t.id?t:{...t,id:He()},s="string"==typeof r.id?r.id:"",{traceId:a,sourceId:i,parentEventId:c}=ot(r,o?.ingest,e),u=Date.now(),d=rt(e,{stepId:"collector.push",stepType:"collector",phase:"in",eventId:s,now:u,traceId:a,sourceId:i,parentEventId:c});d.inEvent=r,Ke(e,d);try{const t=await n(r,o),d=Date.now(),l=rt(e,{stepId:"collector.push",stepType:"collector",phase:"out",eventId:s,now:d,traceId:a,sourceId:i,parentEventId:c});return l.durationMs=d-u,l.outEvent=t,Ke(e,l),t}catch(t){const n=Date.now(),o=rt(e,{stepId:"collector.push",stepType:"collector",phase:"error",eventId:s,now:n,traceId:a,sourceId:i,parentEventId:c});throw o.durationMs=n-u,o.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},Ke(e,o),t}}}function bn(e={}){const t=e.maxEntries??1e4,n=e.lowWaterMark??.8,o=e.sweepIntervalMs??6e4,r=Math.floor(t*n),s=new Map,a={hits:0,misses:0,populates:0,writes:0,deletes:0,evictions_entries:0,evictions_ttl:0};let i;return o>0&&(i=setInterval(function(){const e=Date.now();let t=0;for(const[n,o]of s)void 0!==o.expires&&o.expires<=e&&(s.delete(n),t++);a.evictions_ttl+=t},o),i&&"function"==typeof i.unref&&i.unref()),{type:"memory",config:{},get(e){const t=s.get(e);if(t)return void 0!==t.expires&&t.expires<=Date.now()?(s.delete(e),a.evictions_ttl++,void a.misses++):(s.delete(e),s.set(e,t),a.hits++,t.value);a.misses++},set(e,n,o){const i=!s.has(e);i||s.delete(e),s.set(e,{value:n,expires:void 0!==o?Date.now()+o:void 0}),a.writes++,i&&a.populates++,s.size>t&&function(){if(s.size<=t)return;const e=s.size-r;let n=0;for(const t of s.keys()){if(n>=e)break;s.delete(t),n++}a.evictions_entries+=n}()},delete(e){s.delete(e)&&a.deletes++},get counters(){return{...a}},destroy(){void 0!==i&&(clearInterval(i),i=void 0),s.clear()}}}function kn(e,t){const{cacheConfig:n,cacheStore:o,namespace:r,logger:s,storeId:a,collector:i}=t,c=(e,t)=>{if(!i)return;const n=rt(i,{stepId:`store.${a}`,stepType:"store",phase:"in",eventId:"",now:Date.now()});n.meta={op:"cache",cached:"hit"===t,status:t,key:e},Ze(i,n)},u={hits:0,misses:0,populates:0,writes:0,deletes:0,inflight_dedups:0},d=n.rules.map(e=>({match:e.match?Xe(e.match):()=>!0,ttl:e.ttl})),l=e=>`${r}:${e}`;function f(e,t){const n=void 0===t?{key:e}:{key:e,value:t};return d.find(e=>e.match(n))}const p=new Map;return{type:e.type,config:e.config,setup:e.setup,get counters(){return{...u}},async get(t){const n=l(t),r=await o.get(n),s=et(r);if(void 0!==s){if(!("expired"in s))return u.hits++,c(t,"hit"),s.value;try{await o.delete(n)}catch(e){g("delete",t,e)}}const a=p.get(n);if(a)return u.inflight_dedups++,c(t,"hit"),a;u.misses++,c(t,"miss");const i=(async()=>{try{const r=await e.get(t);if(void 0===r)return;const s=f(t,r);if(s)try{const e=1e3*s.ttl;await o.set(n,tt(r,e),e),u.populates++}catch(e){g("set",t,e)}return r}finally{p.delete(n)}})();return p.set(n,i),i},async set(t,n,r){u.writes++,await e.set(t,n,r);const s=f(t,n);if(s)try{const e=1e3*s.ttl;await o.set(l(t),tt(n,e),e)}catch(e){g("set",t,e)}},async delete(t){u.deletes++,await e.delete(t);try{await o.delete(l(t))}catch(e){g("delete",t,e)}}};function g(e,t,n){const o=`store-cache(${a}): cache ${e} failed for "${t}"; backing succeeded, continuing`;s?s.warn(o,{error:n}):console.warn(o,n)}}function In(e,t,n){const o=`store.${n}`,r=Je(t.get,"StoreGet",e.hooks,e.logger),s=Je(t.set,"StoreSet",e.hooks,e.logger),a=Je(t.delete,"StoreDelete",e.hooks,e.logger);t.get=async t=>{const n=Date.now(),s=rt(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:n});s.meta={op:"get",key:t},Ye(e,s);try{const s=await r(t),a=Date.now(),i=rt(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:a});return i.durationMs=a-n,i.meta={op:"get",key:t},Ye(e,i),s}catch(r){const s=Date.now(),a=rt(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:s});throw a.durationMs=s-n,a.meta={op:"get",key:t},a.error=r instanceof Error?{name:r.name,message:r.message}:{message:String(r)},Ye(e,a),r}},t.set=async(t,n,r)=>{const a=Date.now(),i=rt(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:a});i.meta={op:"set",key:t},Ye(e,i);try{await s(t,n,r);const i=Date.now(),c=rt(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:i});c.durationMs=i-a,c.meta={op:"set",key:t},Ye(e,c)}catch(n){const r=Date.now(),s=rt(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:r});throw s.durationMs=r-a,s.meta={op:"set",key:t},s.error=n instanceof Error?{name:n.name,message:n.message}:{message:String(n)},Ye(e,s),n}},t.delete=async t=>{const n=Date.now(),r=rt(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:n});r.meta={op:"delete",key:t},Ye(e,r);try{await a(t);const r=Date.now(),s=rt(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:r});s.durationMs=r-n,s.meta={op:"delete",key:t},Ye(e,s)}catch(r){const s=Date.now(),a=rt(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:s});throw a.durationMs=s-n,a.meta={op:"delete",key:t},a.error=r instanceof Error?{name:r.name,message:r.message}:{message:String(r)},Ye(e,a),r}}}async function En(e){const t=q({globalsStatic:{},sessionStatic:{},run:!0,queueMax:1e3},e,{merge:!1,extend:!1}),n={level:e.logger?.level,handler:e.logger?.handler},o=x(n),r={...t.globalsStatic,...e.globals},s={allowed:!1,config:t,consent:e.consent||{},custom:e.custom||{},destinations:{},transformers:{},stores:{},globals:r,hooks:e.hooks||{},observers:new Set,logger:o,on:{},queue:[],preRunQueue:[],round:0,count:0,stateVersion:0,cellVersion:{},delivery:new WeakMap,session:void 0,status:{startedAt:Date.now(),in:0,out:0,failed:0,sources:{},destinations:{},dropped:{},connectionErrors:{},breakers:{}},timing:Date.now(),user:e.user||{},sources:{},pending:{destinations:{}},hasShutdown:!1,seenEvents:new Set,push:void 0,command:void 0,elb:void 0};var a,i;void 0!==e.name&&(s.name=e.name),void 0!==e.release&&(s.release=e.release),s.push=wn(s,e=>vn(s,e)),s.command=(i=mn,Ne(async(e,t,n)=>await Qe(async()=>await i(a,e,t,n),n=>{if(n instanceof Le)throw n;return a.status.failed++,a.logger.error("command failed",{command:e,data:t,error:n}),ln({ok:!1})})(),"Command",(a=s).hooks,a.logger)),s.elb=function(e){return async(t,n,o,r,s)=>{if("string"==typeof t&&t.startsWith("walker ")){const o=t.replace("walker ","");return e.command(o,n)}let a;if("string"==typeof t)a={name:t},n&&"object"==typeof n&&!Array.isArray(n)&&(a.data=n);else{if(!t||"object"!=typeof t||Array.isArray(t))return ln({ok:!1});a={...t},n&&"object"==typeof n&&!Array.isArray(n)&&(a.data={...a.data||{},...n})}return o&&"object"==typeof o&&(a.context=o),r&&Array.isArray(r)&&(a.nested=r),s&&"object"==typeof s&&(a.custom=s),e.push(a)}}(s);const c=e.stores||{};return s.stores=await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t)){const{code:t,config:s={},env:a={}}=r,i=e.logger.scope("store").scope(o),c={collector:e,logger:i,id:o,config:s,env:a,reportError:bt(e,"store",o,i)},u=await t(c);n[o]=u}const o=t,r=function(e){const t={};for(const n of Object.keys(e))t[n]="WHITE";const n=[],o=[];function r(s){const a=t[s];if("BLACK"===a)return;if("GRAY"===a){const e=o.indexOf(s),t=o.slice(-1===e?0:e).concat(s).join(" -> ");throw new Error(`Cycle in cache.store chain: ${t}`)}t[s]="GRAY",o.push(s);const i=e[s].cache?.store;if(void 0!==i){if(!(i in e))throw new Error(`Store "${s}" cache.store references "${i}", which is not declared in flow.stores`);r(i)}o.pop(),t[s]="BLACK",n.push(s)}for(const n of Object.keys(e))"WHITE"===t[n]&&r(n);return n}(o);for(const t of r){const r=o[t].cache;if(!r)continue;let s,a;void 0!==r.store?(s=n[r.store],a=r.store):(n.__cache||(n.__cache=bn()),s=n.__cache,a="__cache");const i=r.namespace??t;e.logger.scope("store-cache").scope(t).info(`store "${t}" caches with namespace "${i}:" via ${a}`),n[t]=kn(n[t],{storeId:t,cacheConfig:r,cacheStore:s,namespace:i,logger:e.logger.scope("store-cache").scope(t),collector:e})}for(const[t,o]of Object.entries(n))"__cache"!==t&&In(e,o,t);return n}(s,c),function(e,t,n){const o=new Map;for(const[n,r]of Object.entries(e))t[n]&&o.set(r,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))r(t.env);function r(e){if(e)for(const[t,n]of Object.entries(e))if("object"==typeof n&&null!==n){const r=o.get(n);r&&(e[t]=r)}}}(c,s.stores,e),s.stores.__cache||(s.stores.__cache=bn()),s.destinations=await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t))r.config?.require?.length?e.pending.destinations[o]=r:n[o]=fn(r);return n}(s,e.destinations||{}),s.transformers=await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t)){const{code:t,env:s={}}=r,a=Ce(r,"Transformer");if(!a.ok){e.logger.warn(`Transformer ${o} invalid (${a.code}): ${a.reason}. Skipping.`);continue}const{config:i}=St(r,"before"),{config:c}=St({...r,config:i},"next"),u=Object.keys(s).length>0?{...c,env:s}:c,{cache:d}=r,l=d?{...u,cache:d}:u,f=r.config?.state??r.state,p=void 0!==f&&void 0===l.state?{...l,state:f}:l,g=e.logger.scope("transformer").scope(o),h={collector:e,logger:g,id:o,ingest:ve(o),config:p,env:s,reportError:bt(e,"transformer",o,g)},m=t??(e=>{const t=r.mapping;if(t){const n=[];if(void 0!==t.data&&n.push("data"),t.mapping)for(const[e,o]of Object.entries(t.mapping))if("object"==typeof o&&null!==o)for(const[t,r]of Object.entries(o)){if("object"!=typeof r||null===r)continue;const o=r;void 0!==o.data&&n.push(`mapping[${e}][${t}].data`),void 0!==o.silent&&n.push(`mapping[${e}][${t}].silent`)}return n.length>0&&e.collector.logger.warn(`Transformer ${o}: \`${n.join(", ")}\` ignored at transformer position (only event-mutating fields apply).`),{type:"pass",config:e.config,push:async n=>{const o=await $e(n,t,e.collector);return!o.ignore&&{event:o.event}}}}return{type:"pass",config:e.config,push:e=>({event:e})}}),v=await m(h);void 0!==r.before&&void 0===v.config?.before&&(v.config={...v.config??{},before:r.before}),void 0!==r.next&&void 0===v.config?.next&&(v.config={...v.config??{},next:r.next}),void 0!==f&&void 0===v.config?.state&&(v.config={...v.config??{},state:f}),n[o]=v}return n}(s,e.transformers||{}),s}var Sn=globalThis;function On(e){try{const t=Sn.window;if(!t)return;t.localStorage.getItem(I)===e&&t.localStorage.removeItem(I)}catch{}}function qn(e,t){return void 0===t?e:n=>e({...n,release:t})}async function xn(e){e=e||{};const t=await En(e);(function(e,t){if(t.observers)for(const n of t.observers)e.observers.add(n);const n=t.observe;if(!n)return;const o=e.name??"default";if("binding"in n){const t=function(){const e=Sn.window,t=Sn.URLSearchParams;if(!e||!t)return null;try{const n=new t(e.location.search.replace(/^\?/,"")).getAll(I);return n.length>0?n[n.length-1]??null:null}catch{return null}}(),r=t??function(){try{return Sn.window?.localStorage.getItem(I)??null}catch{return null}}();if(!r)return;const s=O(r);if(!s)return void(null===t?(e.logger.warn("observe: malformed stored credential cleared"),On(r)):e.logger.warn("observe: malformed credential ignored"));if(s.pb!==n.binding)return void e.logger.warn("observe: credential binding mismatch, credential ignored");let a;!function(e){try{Sn.window?.localStorage.setItem(I,e)}catch{}}(r),null!==t&&function(){const e=Sn.window,t=Sn.URLSearchParams;if(e&&t)try{const n=e.location.href,o=n.indexOf("#"),r=o>=0?n.slice(o):"",s=o>=0?n.slice(0,o):n,a=s.indexOf("?"),i=a>=0?s.slice(0,a):s,c=new t(a>=0?s.slice(a+1):"");c.delete(I);const u=c.toString();e.history.replaceState({},"",`${i}${u?`?${u}`:""}${r}`)}catch{}}();const i=E({url:`${n.url}/ingest/${s.ses}`,token:s.secret,headers:{"X-Walkeros-Binding":n.binding},onStatus:t=>{401===t&&(On(r),a&&e.observers.delete(a))}});a=S(function(e,t){return void 0===t?e:n=>e({...n,flowId:t})}(qn(i,e.release),n.flowId),{flowId:n.flowId??o,...void 0!==n.level?{level:n.level}:{},...void 0!==n.sample?{sample:n.sample}:{}}),e.observers.add(a);const c=n.level;return void(void 0!==c&&(e.observeLevel=()=>c))}if("off"===n.level)return;const r=n.level;void 0!==r&&(e.observeLevel=()=>r),e.observers.add(S(qn(E({url:`${n.url}/ingest/${n.sessionId}`,token:n.token}),e.release),{flowId:o,level:n.level,sample:n.sample}))})(t,e),await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t)){const t=await Pt(e,o,r);if(!t)continue;const s=r.config?.require;t.config={...t.config,init:!1,...s?{require:[...s]}:{}},n[o]=t}Object.assign(e.sources,n);for(const t of Object.keys(n)){const n=e.sources[t];let o=!1;n.init&&await ce(n.init.bind(n),n=>{if(n instanceof re)throw n;o=!0,e.status.failed++,e.logger.scope("source").error("source init failed",{sourceId:t,error:n})})(),o||(n.config.init=!0,Mt(n)&&await Dt(e,n,t))}return await _t(e),n}(t,e.sources||{});const{consent:n,user:o,globals:r,custom:s}=e;n&&await t.command("consent",n),o&&await t.command("user",o),r&&await t.command("globals",r),s&&await t.command("custom",s),t.config.run&&await t.command("run");let a=t.elb;const i=Object.values(t.sources),c=i.find(e=>e.config.primary);return c?a=c.push:i.length>0&&(a=i[0].push),{collector:t,elb:a}}var jn=async e=>{let t;return{get flow(){return t},trigger:()=>async n=>{if(!t){const n=await xn({...e,run:e.run??!0});t={collector:n.collector,elb:n.elb}}await t.elb(n)}}};export{d as examples,n as schemas};//# sourceMappingURL=dev.mjs.map
package/dist/dev.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/schemas/index.ts","../src/schemas/settings.ts","../src/schemas/mapping.ts","../src/examples/index.ts","../src/examples/env.ts","../src/examples/step.ts","../src/examples/trigger.ts"],"sourcesContent":["import { zodToSchema } from '@walkeros/core/dev';\nimport { SettingsSchema } from './settings';\nimport { MappingSchema } from './mapping';\n\nexport { SettingsSchema, type Settings } from './settings';\nexport { MappingSchema, type Mapping } from './mapping';\n\n// JSON Schema\nexport const settings = zodToSchema(SettingsSchema);\nexport const mapping = zodToSchema(MappingSchema);\n","import { z } from '@walkeros/core/dev';\n\nexport const SettingsSchema = z.object({\n events: z\n .array(\n z\n .object({\n delay: z\n .number()\n .optional()\n .describe('Milliseconds to wait before pushing this event'),\n })\n .passthrough()\n .describe('Partial walkerOS event with optional delay'),\n )\n .describe('Events to push to the collector on init'),\n});\n\nexport type Settings = z.infer<typeof SettingsSchema>;\n","import { z } from '@walkeros/core/dev';\n\nexport const MappingSchema = z.object({});\n\nexport type Mapping = z.infer<typeof MappingSchema>;\n","export * as env from './env';\nexport * as step from './step';\nexport { createTrigger } from './trigger';\n","import type { Env } from '../types';\nimport type { Logger } from '@walkeros/core';\n\n/**\n * Example environment configurations for source demo\n */\n\nconst noop = async () => ({\n ok: true,\n});\n\n// Simple no-op logger for demo purposes\nconst noopFn = () => {};\nconst noopLogger: Logger.Instance = {\n error: noopFn,\n warn: noopFn,\n info: noopFn,\n debug: noopFn,\n throw: (message: string | Error) => {\n throw typeof message === 'string' ? new Error(message) : message;\n },\n json: noopFn,\n scope: () => noopLogger,\n};\n\nexport const init: Env | undefined = undefined;\n\nexport const push: Env = {\n push: noop as Env['push'],\n command: noop as Env['command'],\n elb: noop as Env['elb'],\n logger: noopLogger,\n};\n\n/**\n * Simulation tracking paths\n */\nexport const simulation = ['call:elb'];\n","import type { Flow } from '@walkeros/core';\n\nexport const pageView: Flow.StepExample = {\n title: 'Page view',\n description:\n 'A simple event object is pushed through the demo source as a walker elb call for learning purposes.',\n in: {\n name: 'page view',\n data: { title: 'Home' },\n },\n out: [\n [\n 'elb',\n {\n name: 'page view',\n data: { title: 'Home' },\n },\n ],\n ],\n};\n\nexport const delayedEvent: Flow.StepExample = {\n title: 'Delayed event',\n description:\n 'An event object with a delay field is pushed through the demo source after the specified wait.',\n in: {\n name: 'product add',\n data: { id: 'abc', name: 'Test Product' },\n delay: 100,\n },\n out: [\n [\n 'elb',\n {\n name: 'product add',\n data: { id: 'abc', name: 'Test Product' },\n },\n ],\n ],\n};\n","import type { Trigger, Collector, WalkerOS } from '@walkeros/core';\nimport { startFlow } from '@walkeros/collector';\n\n/**\n * Demo source createTrigger.\n *\n * DOM-free. The demo source's `push` is `elb`, so the trigger pushes the\n * supplied content (a walkerOS event `{ name, data }`) straight through `elb`\n * into the collector. On the first trigger call the flow is lazily started.\n *\n * Determinism note: `startFlow` initializes the demo source, which eagerly\n * fires every `settings.events` entry the source declares (via setTimeout).\n * Config is passed through UNMODIFIED (pass-through doctrine), so the events a\n * caller observes are the supplied content PLUS any `settings.events` the\n * flow's demo source declares. For deterministic single-event simulation the\n * flow's demo source must declare no `settings.events`.\n *\n * @example\n * const { trigger } = await createTrigger(config);\n * await trigger()({ name: 'page view', data: { title: 'Home' } });\n */\nconst createTrigger: Trigger.CreateFn<WalkerOS.DeepPartialEvent, void> = async (\n config: Collector.InitConfig,\n) => {\n let flow: Trigger.FlowHandle | undefined;\n\n const trigger: Trigger.Fn<WalkerOS.DeepPartialEvent, void> =\n () => async (content: WalkerOS.DeepPartialEvent) => {\n // Lazy startFlow — first call initializes the flow and the demo source.\n if (!flow) {\n const result = await startFlow({ ...config, run: config.run ?? true });\n flow = { collector: result.collector, elb: result.elb };\n }\n\n // The demo source pushes via elb; mirror that by pushing the supplied\n // content straight through. Only the supplied content is pushed here.\n await flow.elb(content);\n };\n\n return {\n get flow() {\n return flow;\n },\n trigger,\n };\n};\n\nexport { createTrigger };\n"],"mappings":"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","names":["z"]}
1
+ {"version":3,"sources":["../src/schemas/index.ts","../src/schemas/settings.ts","../src/schemas/mapping.ts","../src/examples/index.ts","../src/examples/env.ts","../src/examples/step.ts","../src/examples/trigger.ts"],"sourcesContent":["import { zodToSchema } from '@walkeros/core/dev';\nimport { SettingsSchema } from './settings';\nimport { MappingSchema } from './mapping';\n\nexport { SettingsSchema, type Settings } from './settings';\nexport { MappingSchema, type Mapping } from './mapping';\n\n// JSON Schema\nexport const settings = zodToSchema(SettingsSchema);\nexport const mapping = zodToSchema(MappingSchema);\n","import { z } from '@walkeros/core/dev';\n\nexport const SettingsSchema = z.object({\n events: z\n .array(\n z\n .object({\n delay: z\n .number()\n .optional()\n .describe('Milliseconds to wait before pushing this event'),\n })\n .passthrough()\n .describe('Partial walkerOS event with optional delay'),\n )\n .describe('Events to push to the collector on init'),\n});\n\nexport type Settings = z.infer<typeof SettingsSchema>;\n","import { z } from '@walkeros/core/dev';\n\nexport const MappingSchema = z.object({});\n\nexport type Mapping = z.infer<typeof MappingSchema>;\n","export * as env from './env';\nexport * as step from './step';\nexport { createTrigger } from './trigger';\n","import type { Env } from '../types';\nimport type { Logger } from '@walkeros/core';\n\n/**\n * Example environment configurations for source demo\n */\n\nconst noop = async () => ({\n ok: true,\n});\n\n// Simple no-op logger for demo purposes\nconst noopFn = () => {};\nconst noopLogger: Logger.Instance = {\n error: noopFn,\n warn: noopFn,\n info: noopFn,\n debug: noopFn,\n throw: (message: string | Error) => {\n throw typeof message === 'string' ? new Error(message) : message;\n },\n json: noopFn,\n scope: () => noopLogger,\n};\n\nexport const init: Env | undefined = undefined;\n\nexport const push: Env = {\n push: noop as Env['push'],\n command: noop as Env['command'],\n elb: noop as Env['elb'],\n logger: noopLogger,\n};\n\n/**\n * Simulation tracking paths\n */\nexport const simulation = ['call:elb'];\n","import type { Flow } from '@walkeros/core';\n\nexport const pageView: Flow.StepExample = {\n title: 'Page view',\n description:\n 'A simple event object is pushed through the demo source as a walker elb call for learning purposes.',\n in: {\n name: 'page view',\n data: { title: 'Home' },\n },\n out: [\n [\n 'elb',\n {\n name: 'page view',\n data: { title: 'Home' },\n },\n ],\n ],\n};\n\nexport const delayedEvent: Flow.StepExample = {\n title: 'Delayed event',\n description:\n 'An event object with a delay field is pushed through the demo source after the specified wait.',\n in: {\n name: 'product add',\n data: { id: 'abc', name: 'Test Product' },\n delay: 100,\n },\n out: [\n [\n 'elb',\n {\n name: 'product add',\n data: { id: 'abc', name: 'Test Product' },\n },\n ],\n ],\n};\n","import type { Trigger, Collector, WalkerOS } from '@walkeros/core';\nimport { startFlow } from '@walkeros/collector';\n\n/**\n * Demo source createTrigger.\n *\n * DOM-free. The demo source's `push` is `elb`, so the trigger pushes the\n * supplied content (a walkerOS event `{ name, data }`) straight through `elb`\n * into the collector. On the first trigger call the flow is lazily started.\n *\n * Determinism note: `startFlow` initializes the demo source, which eagerly\n * fires every `settings.events` entry the source declares (via setTimeout).\n * Config is passed through UNMODIFIED (pass-through doctrine), so the events a\n * caller observes are the supplied content PLUS any `settings.events` the\n * flow's demo source declares. For deterministic single-event simulation the\n * flow's demo source must declare no `settings.events`.\n *\n * @example\n * const { trigger } = await createTrigger(config);\n * await trigger()({ name: 'page view', data: { title: 'Home' } });\n */\nconst createTrigger: Trigger.CreateFn<WalkerOS.DeepPartialEvent, void> = async (\n config: Collector.InitConfig,\n) => {\n let flow: Trigger.FlowHandle | undefined;\n\n const trigger: Trigger.Fn<WalkerOS.DeepPartialEvent, void> =\n () => async (content: WalkerOS.DeepPartialEvent) => {\n // Lazy startFlow — first call initializes the flow and the demo source.\n if (!flow) {\n const result = await startFlow({ ...config, run: config.run ?? true });\n flow = { collector: result.collector, elb: result.elb };\n }\n\n // The demo source pushes via elb; mirror that by pushing the supplied\n // content straight through. Only the supplied content is pushed here.\n await flow.elb(content);\n };\n\n return {\n get flow() {\n return flow;\n },\n trigger,\n };\n};\n\nexport { createTrigger };\n"],"mappings":"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","names":["z"]}
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- "use strict";var e,t=Object.defineProperty,o=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,n=Object.prototype.hasOwnProperty,s={};((e,o)=>{for(var r in o)t(e,r,{get:o[r],enumerable:!0})})(s,{SourceDemo:()=>c,default:()=>a,sourceDemo:()=>u}),module.exports=(e=s,((e,s,c,u)=>{if(s&&"object"==typeof s||"function"==typeof s)for(let a of r(s))n.call(e,a)||a===c||t(e,a,{get:()=>s[a],enumerable:!(u=o(s,a))||u.enumerable});return e})(t({},"__esModule",{value:!0}),e));var c={},u=async e=>{const{config:t,env:o}=e,{elb:r}=o,n={...t,settings:t?.settings||{events:[]}};return(n.settings?.events||[]).forEach(e=>{const{delay:t,...o}=e;setTimeout(()=>r(o),t||0)}),{type:"demo",config:n,push:r}},a=u;//# sourceMappingURL=index.js.map
1
+ "use strict";var e,t=Object.defineProperty,o=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,n=Object.prototype.hasOwnProperty,s={};((e,o)=>{for(var r in o)t(e,r,{get:o[r],enumerable:!0})})(s,{SourceDemo:()=>c,default:()=>a,sourceDemo:()=>u}),module.exports=(e=s,((e,s,c,u)=>{if(s&&"object"==typeof s||"function"==typeof s)for(let a of r(s))n.call(e,a)||a===c||t(e,a,{get:()=>s[a],enumerable:!(u=o(s,a))||u.enumerable});return e})(t({},"__esModule",{value:!0}),e));var c={},u=async e=>{const{config:t,env:o}=e,{elb:r,push:n}=o,s={...t,settings:t?.settings||{events:[]}};return(s.settings?.events||[]).forEach(e=>{const{delay:t,...o}=e;setTimeout(()=>n(o),t||0)}),{type:"demo",config:s,push:r}},a=u;//# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/types.ts"],"sourcesContent":["import type { Source } from '@walkeros/core';\nimport type { Types } from './types';\n\nexport * as SourceDemo from './types';\n\n/**\n * Demo source for walkerOS\n *\n * Pushes configured events to the collector with optional delays.\n * Perfect for testing and demonstrations without external dependencies.\n */\nexport const sourceDemo: Source.Init<Types> = async (\n context,\n): Promise<Source.Instance<Types>> => {\n const { config, env } = context;\n const { elb } = env;\n\n const fullConfig: Source.Config<Types> = {\n ...config,\n settings: config?.settings || { events: [] },\n };\n\n const events = fullConfig.settings?.events || [];\n\n // Push each event with optional delay\n events.forEach((event) => {\n const { delay, ...partialEvent } = event;\n setTimeout(() => elb(partialEvent), delay || 0);\n });\n\n return {\n type: 'demo',\n config: fullConfig,\n push: elb,\n };\n};\n\nexport default sourceDemo;\n","import type { Source, Elb, WalkerOS } from '@walkeros/core';\n\ndeclare module '@walkeros/core' {\n interface SourceMap {\n demo: { type: 'demo'; platform?: 'web' };\n }\n}\n\nexport interface Settings {\n events: Array<WalkerOS.PartialEvent & { delay?: number }>;\n}\n\nexport interface Mapping {}\n\nexport type Push = Elb.Fn;\n\nexport interface Env extends Source.BaseEnv {\n elb: Elb.Fn;\n}\n\nexport type Types = Source.Types<Settings, Mapping, Push, Env>;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA;;;ADWO,IAAM,aAAiC,OAC5C,YACoC;AACpC,QAAM,EAAE,QAAQ,IAAI,IAAI;AACxB,QAAM,EAAE,IAAI,IAAI;AAEhB,QAAM,aAAmC;AAAA,IACvC,GAAG;AAAA,IACH,UAAU,QAAQ,YAAY,EAAE,QAAQ,CAAC,EAAE;AAAA,EAC7C;AAEA,QAAM,SAAS,WAAW,UAAU,UAAU,CAAC;AAG/C,SAAO,QAAQ,CAAC,UAAU;AACxB,UAAM,EAAE,OAAO,GAAG,aAAa,IAAI;AACnC,eAAW,MAAM,IAAI,YAAY,GAAG,SAAS,CAAC;AAAA,EAChD,CAAC;AAED,SAAO;AAAA,IACL,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,EACR;AACF;AAEA,IAAO,gBAAQ;","names":[]}
1
+ {"version":3,"sources":["../src/index.ts","../src/types.ts"],"sourcesContent":["import type { Source } from '@walkeros/core';\nimport type { Types } from './types';\n\nexport * as SourceDemo from './types';\n\n/**\n * Demo source for walkerOS\n *\n * Pushes configured events to the collector with optional delays.\n * Perfect for testing and demonstrations without external dependencies.\n */\nexport const sourceDemo: Source.Init<Types> = async (\n context,\n): Promise<Source.Instance<Types>> => {\n const { config, env } = context;\n // Synthetic events exit via `push` (the collector's source pipeline), so a\n // demo flow's next/before chain, mapping and status apply to them.\n const { elb, push } = env;\n\n const fullConfig: Source.Config<Types> = {\n ...config,\n settings: config?.settings || { events: [] },\n };\n\n const events = fullConfig.settings?.events || [];\n\n // Push each event with optional delay\n events.forEach((event) => {\n const { delay, ...partialEvent } = event;\n setTimeout(() => push(partialEvent), delay || 0);\n });\n\n return {\n type: 'demo',\n config: fullConfig,\n // The outward-facing slot, deliberately `elb` and not the pipeline `push`:\n // callers do not feed this source events, it emits its configured ones\n // above (through `push`, so the pipeline applies to them).\n push: elb,\n };\n};\n\nexport default sourceDemo;\n","import type { Source, Elb, WalkerOS } from '@walkeros/core';\n\ndeclare module '@walkeros/core' {\n interface SourceMap {\n demo: { type: 'demo'; platform?: 'web' };\n }\n}\n\nexport interface Settings {\n events: Array<WalkerOS.PartialEvent & { delay?: number }>;\n}\n\nexport interface Mapping {}\n\nexport type Push = Elb.Fn;\n\nexport interface Env extends Source.BaseEnv {\n elb: Elb.Fn;\n}\n\nexport type Types = Source.Types<Settings, Mapping, Push, Env>;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA;;;ADWO,IAAM,aAAiC,OAC5C,YACoC;AACpC,QAAM,EAAE,QAAQ,IAAI,IAAI;AAGxB,QAAM,EAAE,KAAK,KAAK,IAAI;AAEtB,QAAM,aAAmC;AAAA,IACvC,GAAG;AAAA,IACH,UAAU,QAAQ,YAAY,EAAE,QAAQ,CAAC,EAAE;AAAA,EAC7C;AAEA,QAAM,SAAS,WAAW,UAAU,UAAU,CAAC;AAG/C,SAAO,QAAQ,CAAC,UAAU;AACxB,UAAM,EAAE,OAAO,GAAG,aAAa,IAAI;AACnC,eAAW,MAAM,KAAK,YAAY,GAAG,SAAS,CAAC;AAAA,EACjD,CAAC;AAED,SAAO;AAAA,IACL,MAAM;AAAA,IACN,QAAQ;AAAA;AAAA;AAAA;AAAA,IAIR,MAAM;AAAA,EACR;AACF;AAEA,IAAO,gBAAQ;","names":[]}
package/dist/index.mjs CHANGED
@@ -1 +1 @@
1
- var e={},t=async e=>{const{config:t,env:s}=e,{elb:n}=s,o={...t,settings:t?.settings||{events:[]}};return(o.settings?.events||[]).forEach(e=>{const{delay:t,...s}=e;setTimeout(()=>n(s),t||0)}),{type:"demo",config:o,push:n}},s=t;export{e as SourceDemo,s as default,t as sourceDemo};//# sourceMappingURL=index.mjs.map
1
+ var e={},s=async e=>{const{config:s,env:t}=e,{elb:n,push:o}=t,a={...s,settings:s?.settings||{events:[]}};return(a.settings?.events||[]).forEach(e=>{const{delay:s,...t}=e;setTimeout(()=>o(t),s||0)}),{type:"demo",config:a,push:n}},t=s;export{e as SourceDemo,t as default,s as sourceDemo};//# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/types.ts","../src/index.ts"],"sourcesContent":["import type { Source, Elb, WalkerOS } from '@walkeros/core';\n\ndeclare module '@walkeros/core' {\n interface SourceMap {\n demo: { type: 'demo'; platform?: 'web' };\n }\n}\n\nexport interface Settings {\n events: Array<WalkerOS.PartialEvent & { delay?: number }>;\n}\n\nexport interface Mapping {}\n\nexport type Push = Elb.Fn;\n\nexport interface Env extends Source.BaseEnv {\n elb: Elb.Fn;\n}\n\nexport type Types = Source.Types<Settings, Mapping, Push, Env>;\n","import type { Source } from '@walkeros/core';\nimport type { Types } from './types';\n\nexport * as SourceDemo from './types';\n\n/**\n * Demo source for walkerOS\n *\n * Pushes configured events to the collector with optional delays.\n * Perfect for testing and demonstrations without external dependencies.\n */\nexport const sourceDemo: Source.Init<Types> = async (\n context,\n): Promise<Source.Instance<Types>> => {\n const { config, env } = context;\n const { elb } = env;\n\n const fullConfig: Source.Config<Types> = {\n ...config,\n settings: config?.settings || { events: [] },\n };\n\n const events = fullConfig.settings?.events || [];\n\n // Push each event with optional delay\n events.forEach((event) => {\n const { delay, ...partialEvent } = event;\n setTimeout(() => elb(partialEvent), delay || 0);\n });\n\n return {\n type: 'demo',\n config: fullConfig,\n push: elb,\n };\n};\n\nexport default sourceDemo;\n"],"mappings":";AAAA;;;ACWO,IAAM,aAAiC,OAC5C,YACoC;AACpC,QAAM,EAAE,QAAQ,IAAI,IAAI;AACxB,QAAM,EAAE,IAAI,IAAI;AAEhB,QAAM,aAAmC;AAAA,IACvC,GAAG;AAAA,IACH,UAAU,QAAQ,YAAY,EAAE,QAAQ,CAAC,EAAE;AAAA,EAC7C;AAEA,QAAM,SAAS,WAAW,UAAU,UAAU,CAAC;AAG/C,SAAO,QAAQ,CAAC,UAAU;AACxB,UAAM,EAAE,OAAO,GAAG,aAAa,IAAI;AACnC,eAAW,MAAM,IAAI,YAAY,GAAG,SAAS,CAAC;AAAA,EAChD,CAAC;AAED,SAAO;AAAA,IACL,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,EACR;AACF;AAEA,IAAO,gBAAQ;","names":[]}
1
+ {"version":3,"sources":["../src/types.ts","../src/index.ts"],"sourcesContent":["import type { Source, Elb, WalkerOS } from '@walkeros/core';\n\ndeclare module '@walkeros/core' {\n interface SourceMap {\n demo: { type: 'demo'; platform?: 'web' };\n }\n}\n\nexport interface Settings {\n events: Array<WalkerOS.PartialEvent & { delay?: number }>;\n}\n\nexport interface Mapping {}\n\nexport type Push = Elb.Fn;\n\nexport interface Env extends Source.BaseEnv {\n elb: Elb.Fn;\n}\n\nexport type Types = Source.Types<Settings, Mapping, Push, Env>;\n","import type { Source } from '@walkeros/core';\nimport type { Types } from './types';\n\nexport * as SourceDemo from './types';\n\n/**\n * Demo source for walkerOS\n *\n * Pushes configured events to the collector with optional delays.\n * Perfect for testing and demonstrations without external dependencies.\n */\nexport const sourceDemo: Source.Init<Types> = async (\n context,\n): Promise<Source.Instance<Types>> => {\n const { config, env } = context;\n // Synthetic events exit via `push` (the collector's source pipeline), so a\n // demo flow's next/before chain, mapping and status apply to them.\n const { elb, push } = env;\n\n const fullConfig: Source.Config<Types> = {\n ...config,\n settings: config?.settings || { events: [] },\n };\n\n const events = fullConfig.settings?.events || [];\n\n // Push each event with optional delay\n events.forEach((event) => {\n const { delay, ...partialEvent } = event;\n setTimeout(() => push(partialEvent), delay || 0);\n });\n\n return {\n type: 'demo',\n config: fullConfig,\n // The outward-facing slot, deliberately `elb` and not the pipeline `push`:\n // callers do not feed this source events, it emits its configured ones\n // above (through `push`, so the pipeline applies to them).\n push: elb,\n };\n};\n\nexport default sourceDemo;\n"],"mappings":";AAAA;;;ACWO,IAAM,aAAiC,OAC5C,YACoC;AACpC,QAAM,EAAE,QAAQ,IAAI,IAAI;AAGxB,QAAM,EAAE,KAAK,KAAK,IAAI;AAEtB,QAAM,aAAmC;AAAA,IACvC,GAAG;AAAA,IACH,UAAU,QAAQ,YAAY,EAAE,QAAQ,CAAC,EAAE;AAAA,EAC7C;AAEA,QAAM,SAAS,WAAW,UAAU,UAAU,CAAC;AAG/C,SAAO,QAAQ,CAAC,UAAU;AACxB,UAAM,EAAE,OAAO,GAAG,aAAa,IAAI;AACnC,eAAW,MAAM,KAAK,YAAY,GAAG,SAAS,CAAC;AAAA,EACjD,CAAC;AAED,SAAO;AAAA,IACL,MAAM;AAAA,IACN,QAAQ;AAAA;AAAA;AAAA;AAAA,IAIR,MAAM;AAAA,EACR;AACF;AAEA,IAAO,gBAAQ;","names":[]}
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$meta": {
3
3
  "package": "@walkeros/source-demo",
4
- "version": "4.4.0-next-1785285516008",
4
+ "version": "4.4.0",
5
5
  "type": "source",
6
6
  "platform": [
7
7
  "web",
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@walkeros/source-demo",
3
3
  "description": "Demo source for walkerOS - generates events from config",
4
- "version": "4.4.0-next-1785285516008",
4
+ "version": "4.4.0",
5
5
  "license": "MIT",
6
6
  "main": "./dist/index.js",
7
7
  "module": "./dist/index.mjs",
@@ -39,10 +39,10 @@
39
39
  "test": "jest"
40
40
  },
41
41
  "dependencies": {
42
- "@walkeros/core": "4.4.0-next-1785285516008"
42
+ "@walkeros/core": "4.4.0"
43
43
  },
44
44
  "devDependencies": {
45
- "@walkeros/collector": "4.4.0-next-1785285516008"
45
+ "@walkeros/collector": "4.4.0"
46
46
  },
47
47
  "repository": {
48
48
  "url": "git+https://github.com/elbwalker/walkerOS.git",