@walkeros/source-demo 4.6.0 → 4.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +6 -0
- package/dist/dev.js +1 -1
- package/dist/dev.mjs +1 -1
- package/dist/walkerOS.json +1 -1
- package/package.json +3 -3
package/CHANGELOG.md
CHANGED
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"),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){const t={error:e instanceof Error?e.message:String(e)};if(e instanceof Error&&e.name&&"Error"!==e.name&&(t.name=e.name),"object"==typeof e&&null!==e&&"code"in e){const n=e;"number"!=typeof n.code&&"string"!=typeof n.code||(t.code=n.code)}return t}function ie(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",{...se(t),event:i.name});e.status.connectionErrors[s]=(e.status.connectionErrors[s]??0)+1,o.error("connection error",se(t))}catch{}}}function ae(e,t){return e.storeId&&t.stores[e.storeId]?t.stores[e.storeId]:t.stores.__cache}function ce(e,t){return e?t.stores[e]:t.stores.__cache}function ue(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 de(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 le(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 pe(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:me(t.config.env),reportError:ie(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 fe(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:{...me(t.config.env),...s?{respond:s}:{}},reportError:ie(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 ge(e,t){return e?{...e,_meta:{...e._meta,path:[...e._meta.path]}}:(0,T.createIngest)(t)}async function he(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)(pe,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,...se(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?ae(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=>ce(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=le(n[0],ue(t));if(o.length>0){const n=await he(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)(he,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,se(t)),{event:null,respond:void 0}))(e,t,le(n,ue(t)),a,ge(r,n),void 0,i)))}f&&f.length>0&&(a=await(0,T.applyState)(f,t=>ce(t,e),a,e));const y=await(0,T.tryCatchAsync)(fe,t=>(e.logger.scope(`transformer:${s.type||"unknown"}`).error("Push failed",se(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=ge(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=le(r[0],ue(t));return n.length>0?he(e,t,n,o,u,c,i):{event:o,respond:c}}return(await Promise.all(r.map(n=>(0,T.tryCatchAsync)(he,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,se(t)),{event:null,respond:void 0}))(e,t,le(n,ue(t)),o,ge(u,n),void 0,i)))).map(e=>({event:e.event,respond:void 0}))}return s.length>0?he(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=le(u[0],ue(t));return n.length>0?he(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)(he,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,se(t)),{event:null,respond:void 0}))(e,t,le(n,ue(t)),o,ge(r,n),void 0,i))),{event:null,respond:void 0}}n&&(a=n)}g&&g.length>0&&(a=await(0,T.applyState)(g,t=>ce(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=le(n[0],ue(t));return o.length>0?he(e,t,o,a,r,c,i):{event:a,respond:c}}return n.length>1?(await Promise.all(n.map(n=>(0,T.tryCatchAsync)(he,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,se(t)),{event:null,respond:void 0}))(e,t,le(n,ue(t)),a,ge(r,n),void 0,i))),{event:null,respond:void 0}):{event:a,respond:c}}}return{event:a,respond:c}}function me(e){return e&&(0,T.isObject)(e)?e:{}}function ve(e){return"string"==typeof e||!(!Array.isArray(e)||!e.every(e=>"string"==typeof e))}async function ye(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,...se(t)})})(n,s),qe(n)&&$e(e,t,n))}function we(e){return Boolean(e.config.init)&&!e.config.require?.length}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=ve(a)?le(a,ue(e.transformers)):void 0,m=ve(c)?le(c,ue(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?[]:le(1===t.length?t[0]:t,ue(e.transformers))})():[]);let l=[u];if(d.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const n=await he(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=ae(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:le(t[0],ue(e.transformers))}:{kind:"many",branches:t.map(t=>le(t,ue(e.transformers)))}})():{kind:"single",preChain:[]};p&&p.length>0&&(l=await Promise.all(l.map(t=>(0,_.applyState)(p,t=>ce(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:ge(s.ingest,`${t}.${a}`),respond:void 0,mapping:r,preChain:i}),t=>(e.logger.scope("source:many").error(`many branch ${a} failed`,se(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)((0,_.isScope)(n)?n?.headers?.traceparent:void 0);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:ie(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,...se(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(we(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,we(n)&&await ye(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,...se(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:ie(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 le(e,t);if("string"==typeof e)return le(e,t);const o=(0,j.getNextSteps)(e,(0,j.buildCacheContext)(n));return 0===o.length?[]:1===o.length?le(o[0],t):le(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?ue(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?ae(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,$=0;return await Promise.all(h.map(async t=>{let s,c;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 u=[t],d=n.respond;if(b.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const r=await he(e,e.transformers,b,t,g,n.respond,`destination.${o}.before`);if(null===r.event)return t;r.respond&&(d=r.respond),u=Array.isArray(r.event)?r.event:[r.event]}const l=async(t,n)=>{let s=n,i=!1;if(S&&!S.stop&&E){const e=(0,j.buildCacheContext)(g,t),n=await(0,j.checkCache)(S,E,e);if("HIT"===n?.status)return!1;"MISS"===n?.status&&(s={key:n.key,ttl:n.rule.ttl},i=!0)}C&&C.length>0&&t&&(t=await(0,j.applyState)(C,t=>ce(t,e),t,e));const u=Date.now();let l=!1;const p=await(0,j.tryCatchAsync)(Le,n=>{const s=r.type||"unknown";e.logger.scope(s).error("Push failed",{...se(n),event:t.name}),v=n,l=!0;const i=r.dlq,a=r.config.id||o,c={max:r.config.dlqMax??100},u=Q(i,[t,n],c);if(u.dropped>0){oe(e,a);const t=re(e.status,(0,j.stepId)("destination",a),"dlq",u.dropped);X(i,e.logger.scope(r.type||"unknown"),"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:a,cap:c.max,droppedCount:t})}else i.length<c.max&&Z(i)})(e,r,o,t,g,d);if(x+=Date.now()-u,s&&E&&void 0===r.config.mock&&(i?(0,j.storeCache)(E,s.key,p??!0,s.ttl):void 0===c&&(c=p??!0)),!l&&!Ge(p)&&q&&q.length>0&&t&&(t=await(0,j.applyState)(q,t=>ce(t,e),t,e)),void 0===p||Ge(p)||(y=p),Ge(p)&&A++,!l&&k){void 0!==p&&(g._response=p);const n=Ve(k,a,g);if(n.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const r=await he(e,e.transformers,n,t,g,d,`destination.${o}.next`);r.respond&&(d=r.respond)}}return!0};for(const e of u)await l(e,s)&&$++;return s&&E&&void 0!==c&&void 0===r.config.mock&&(0,j.storeCache)(E,s.key,c,s.ttl),t})),{id:o,destination:r,error:v,response:y,totalDuration:x,batchedCount:A,allowedCount:h.length,pushedCount:$,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,a=t.pushedCount??i;(Math.max(0,a-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:ie(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:ie(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:ie(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}=de(e,"before"),{config:a}=de({...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))we(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&&(we(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))we(n)&&n.queueOn?.length&&await ye(e,n,t);const a=Object.values(e.sources).some(e=>!we(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){const o=t.name;if("string"!=typeof o)throw new M.InvalidEventError(void 0===o?"Event name is required":"Event name is invalid");if(!o)throw new M.InvalidEventError("Event name is required");const[r,s]=o.split(" ");if(!r||!s)throw new M.InvalidEventError("Event name is invalid");const{timestamp:i=Date.now(),name:a=`${r} ${s}`,data:c={},context:u={},globals:d={},custom:l={},user:p=e.user,nested:f=[],consent:g=e.consent,id:h=(0,M.getSpanId)(),trigger:m="",entity:v=r,action:y=s,timing:w=0,source:b={type:"collector",schema:"4"}}=t,k=b??{type:"collector",schema:"4"},I=k.count??(e.count+=1),S=k.trace??n?._meta.trace??e.trace,E={...k,count:I};void 0!==S&&(E.trace=S);const O=e.name??k.platform??"default",C=e.release??"4.6.0";return E.release={...k.release,[O]:C},{name:a,data:c,context:u,globals:(0,M.assign)(e.globals,d),custom:l,user:p,nested:f,consent:g,id:h,trigger:m,entity:v,action:y,timestamp:i,timing:w,source:E}}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 he(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;if(t instanceof R.InvalidEventError){const n=o.id;if(n){e.status.sources[n]||(e.status.sources[n]={count:0,duration:0});const t=e.status.sources[n];t.rejected=(t.rejected??0)+1}return e.logger.warn("invalid event rejected",{error:t.message}),Ye({ok:!1,invalid:!0,error:t.message})}return e.status.failed++,e.logger.error("push failed",{...se(t),event:n.name}),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,se(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),t=>{if(t instanceof z.FatalError)throw t;return i.status.failed++,i.logger.error("command failed",{...se(t),command:e}),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:ie(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}=de(r,"before"),{config:c}=de({...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:ie(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,...se(n)})})(),o||(n.config.init=!0,we(n)&&await ye(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){const t={error:e instanceof Error?e.message:String(e)};if(e instanceof Error&&e.name&&"Error"!==e.name&&(t.name=e.name),"object"==typeof e&&null!==e&&"code"in e){const n=e;"number"!=typeof n.code&&"string"!=typeof n.code||(t.code=n.code)}return t}function ie(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",{...se(t),event:i.name});e.status.connectionErrors[s]=(e.status.connectionErrors[s]??0)+1,o.error("connection error",se(t))}catch{}}}function ae(e,t){return e.storeId&&t.stores[e.storeId]?t.stores[e.storeId]:t.stores.__cache}function ce(e,t){return e?t.stores[e]:t.stores.__cache}function ue(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 de(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 le(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 pe(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:me(t.config.env),reportError:ie(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 fe(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:{...me(t.config.env),...s?{respond:s}:{}},reportError:ie(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 ge(e,t){return e?{...e,_meta:{...e._meta,path:[...e._meta.path]}}:(0,T.createIngest)(t)}async function he(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)(pe,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,...se(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?ae(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=>ce(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=le(n[0],ue(t));if(o.length>0){const n=await he(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)(he,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,se(t)),{event:null,respond:void 0}))(e,t,le(n,ue(t)),a,ge(r,n),void 0,i)))}f&&f.length>0&&(a=await(0,T.applyState)(f,t=>ce(t,e),a,e));const y=await(0,T.tryCatchAsync)(fe,t=>(e.logger.scope(`transformer:${s.type||"unknown"}`).error("Push failed",se(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=ge(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=le(r[0],ue(t));return n.length>0?he(e,t,n,o,u,c,i):{event:o,respond:c}}return(await Promise.all(r.map(n=>(0,T.tryCatchAsync)(he,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,se(t)),{event:null,respond:void 0}))(e,t,le(n,ue(t)),o,ge(u,n),void 0,i)))).map(e=>({event:e.event,respond:void 0}))}return s.length>0?he(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=le(u[0],ue(t));return n.length>0?he(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)(he,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,se(t)),{event:null,respond:void 0}))(e,t,le(n,ue(t)),o,ge(r,n),void 0,i))),{event:null,respond:void 0}}n&&(a=n)}g&&g.length>0&&(a=await(0,T.applyState)(g,t=>ce(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=le(n[0],ue(t));return o.length>0?he(e,t,o,a,r,c,i):{event:a,respond:c}}return n.length>1?(await Promise.all(n.map(n=>(0,T.tryCatchAsync)(he,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,se(t)),{event:null,respond:void 0}))(e,t,le(n,ue(t)),a,ge(r,n),void 0,i))),{event:null,respond:void 0}):{event:a,respond:c}}}return{event:a,respond:c}}function me(e){return e&&(0,T.isObject)(e)?e:{}}function ve(e){return"string"==typeof e||!(!Array.isArray(e)||!e.every(e=>"string"==typeof e))}async function ye(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,...se(t)})})(n,s),qe(n)&&$e(e,t,n))}function we(e){return Boolean(e.config.init)&&!e.config.require?.length}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=ve(a)?le(a,ue(e.transformers)):void 0,m=ve(c)?le(c,ue(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?[]:le(1===t.length?t[0]:t,ue(e.transformers))})():[]);let l=[u];if(d.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const n=await he(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=ae(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:le(t[0],ue(e.transformers))}:{kind:"many",branches:t.map(t=>le(t,ue(e.transformers)))}})():{kind:"single",preChain:[]};p&&p.length>0&&(l=await Promise.all(l.map(t=>(0,_.applyState)(p,t=>ce(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:ge(s.ingest,`${t}.${a}`),respond:void 0,mapping:r,preChain:i}),t=>(e.logger.scope("source:many").error(`many branch ${a} failed`,se(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)((0,_.isScope)(n)?n?.headers?.traceparent:void 0);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:ie(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,...se(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(we(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,we(n)&&await ye(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,...se(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:ie(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 le(e,t);if("string"==typeof e)return le(e,t);const o=(0,j.getNextSteps)(e,(0,j.buildCacheContext)(n));return 0===o.length?[]:1===o.length?le(o[0],t):le(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?ue(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?ae(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,$=0;return await Promise.all(h.map(async t=>{let s,c;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 u=[t],d=n.respond;if(b.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const r=await he(e,e.transformers,b,t,g,n.respond,`destination.${o}.before`);if(null===r.event)return t;r.respond&&(d=r.respond),u=Array.isArray(r.event)?r.event:[r.event]}const l=async(t,n)=>{let s=n,i=!1;if(S&&!S.stop&&E){const e=(0,j.buildCacheContext)(g,t),n=await(0,j.checkCache)(S,E,e);if("HIT"===n?.status)return!1;"MISS"===n?.status&&(s={key:n.key,ttl:n.rule.ttl},i=!0)}C&&C.length>0&&t&&(t=await(0,j.applyState)(C,t=>ce(t,e),t,e));const u=Date.now();let l=!1;const p=await(0,j.tryCatchAsync)(Le,n=>{const s=r.type||"unknown";e.logger.scope(s).error("Push failed",{...se(n),event:t.name}),v=n,l=!0;const i=r.dlq,a=r.config.id||o,c={max:r.config.dlqMax??100},u=Q(i,[t,n],c);if(u.dropped>0){oe(e,a);const t=re(e.status,(0,j.stepId)("destination",a),"dlq",u.dropped);X(i,e.logger.scope(r.type||"unknown"),"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:a,cap:c.max,droppedCount:t})}else i.length<c.max&&Z(i)})(e,r,o,t,g,d);if(x+=Date.now()-u,s&&E&&void 0===r.config.mock&&(i?(0,j.storeCache)(E,s.key,p??!0,s.ttl):void 0===c&&(c=p??!0)),!l&&!Ge(p)&&q&&q.length>0&&t&&(t=await(0,j.applyState)(q,t=>ce(t,e),t,e)),void 0===p||Ge(p)||(y=p),Ge(p)&&A++,!l&&k){void 0!==p&&(g._response=p);const n=Ve(k,a,g);if(n.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const r=await he(e,e.transformers,n,t,g,d,`destination.${o}.next`);r.respond&&(d=r.respond)}}return!0};for(const e of u)await l(e,s)&&$++;return s&&E&&void 0!==c&&void 0===r.config.mock&&(0,j.storeCache)(E,s.key,c,s.ttl),t})),{id:o,destination:r,error:v,response:y,totalDuration:x,batchedCount:A,allowedCount:h.length,pushedCount:$,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,a=t.pushedCount??i;(Math.max(0,a-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:ie(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:ie(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:ie(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}=de(e,"before"),{config:a}=de({...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))we(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&&(we(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))we(n)&&n.queueOn?.length&&await ye(e,n,t);const a=Object.values(e.sources).some(e=>!we(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){const o=t.name;if("string"!=typeof o)throw new M.InvalidEventError(void 0===o?"Event name is required":"Event name is invalid");if(!o)throw new M.InvalidEventError("Event name is required");const[r,s]=o.split(" ");if(!r||!s)throw new M.InvalidEventError("Event name is invalid");const{timestamp:i=Date.now(),name:a=`${r} ${s}`,data:c={},context:u={},globals:d={},custom:l={},user:p=e.user,nested:f=[],consent:g=e.consent,id:h=(0,M.getSpanId)(),trigger:m="",entity:v=r,action:y=s,timing:w=0,source:b={type:"collector",schema:"4"}}=t,k=b??{type:"collector",schema:"4"},I=k.count??(e.count+=1),S=k.trace??n?._meta.trace??e.trace,E={...k,count:I};void 0!==S&&(E.trace=S);const O=e.name??k.platform??"default",C=e.release??"4.6.1";return E.release={...k.release,[O]:C},{name:a,data:c,context:u,globals:(0,M.assign)(e.globals,d),custom:l,user:p,nested:f,consent:g,id:h,trigger:m,entity:v,action:y,timestamp:i,timing:w,source:E}}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 he(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;if(t instanceof R.InvalidEventError){const n=o.id;if(n){e.status.sources[n]||(e.status.sources[n]={count:0,duration:0});const t=e.status.sources[n];t.rejected=(t.rejected??0)+1}return e.logger.warn("invalid event rejected",{error:t.message}),Ye({ok:!1,invalid:!0,error:t.message})}return e.status.failed++,e.logger.error("push failed",{...se(t),event:n.name}),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,se(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),t=>{if(t instanceof z.FatalError)throw t;return i.status.failed++,i.logger.error("command failed",{...se(t),command:e}),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:ie(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}=de(r,"before"),{config:c}=de({...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:ie(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,...se(n)})})(),o||(n.config.init=!0,we(n)&&await ye(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.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:()=>An,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 q}from"@walkeros/core";import{assign as O,createLogger as j}from"@walkeros/core";import{assign as x,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,isScope as ce,tryCatchAsync as ue,getNextSteps as de,compileCache as le,checkCache as fe,storeCache as pe,applyUpdate as ge,buildCacheContext as he,compileState as me,applyState as ve}from"@walkeros/core";import{createIngest as ye,emitStep as we,FatalError as be,isObject as ke,stepId as Ie,tryCatchAsync as Ee,useHooks as Se,getNextSteps as qe,compileCache as Oe,checkCache as je,storeCache as xe,buildCacheContext as Ce,validateStepEntry as $e,processEventMapping as Ae,compileState as De,applyState as Me}from"@walkeros/core";import{assign as Te,getSpanId as Pe,getTraceId as _e,InvalidEventError as Re,isFunction as ze,isString as Be}from"@walkeros/core";import{isObject as Ke}from"@walkeros/core";import{createIngest as Fe,emitStep as Ue,FatalError as He,getGrantedConsent as Ge,getSpanId as Ve,InvalidEventError as We,processEventMapping as Le,tryCatchAsync as Ne,useHooks as Qe}from"@walkeros/core";import{FatalError as Ye,useHooks as Je,tryCatchAsync as Xe}from"@walkeros/core";import{emitStep as Ze,useHooks as et}from"@walkeros/core";import{compileMatcher as tt,emitStep as nt,readCacheEnvelope as ot,wrapCacheEnvelope as rt}from"@walkeros/core";var st={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 at(e,t,n){return{traceId:e.source?.trace??t?._meta.trace??n.trace,sourceId:t?._meta.path[0],parentEventId:t?._meta.parentEventId}}function it(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 ct(e){return"object"==typeof e&&null!==e}function ut(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(ut(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:ut(s,t,n+1);return r}function dt(e){const t=[],n=[],{simulation:o,...r}=e,s=ut(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(!ct(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 lt(e,t){try{return e[t]}catch{return"[unreadable]"}}function ft(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(lt(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 pt(e){return e.map(e=>({fn:e.fn,args:ft(e.args),ts:e.ts}))}function gt(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 ht=new WeakMap;function mt(e,t,n,o){ht.get(e)||(ht.set(e,!0),t.warn(n,o))}function vt(e){ht.delete(e)}var yt=()=>Date.now();function wt(e){if(void 0!==e)return"number"==typeof e?{threshold:e,cooldown:3e4}:{threshold:e.threshold??5,cooldown:e.cooldown??3e4}}function bt(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=yt()+r)):void(s.consecutiveFailures>=o&&(s.state="open",s.probing=!1,s.openUntil=yt()+r)))}function kt(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 It(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 Et(e){const t={error:e instanceof Error?e.message:String(e)};if(e instanceof Error&&e.name&&"Error"!==e.name&&(t.name=e.name),"object"==typeof e&&null!==e&&"code"in e){const n=e;"number"!=typeof n.code&&"string"!=typeof n.code||(t.code=n.code)}return t}function St(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=gt(a,[o,r],i);if(c.dropped>0){const t=It(e.status,ne("destination",n),"dlq",c.dropped);mt(a,s,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:n,cap:i.max,droppedCount:t})}else a.length<i.max&&vt(a);const u=kt(e,n);u.failed++,u.dlqSize=a.length,e.status.failed++;const d=wt(t.config.breaker);if(d){const o=t.config.id||n;bt(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",{...Et(t),event:a.name});e.status.connectionErrors[s]=(e.status.connectionErrors[s]??0)+1,o.error("connection error",Et(t))}catch{}}}function qt(e,t){return e.storeId&&t.stores[e.storeId]?t.stores[e.storeId]:t.stores.__cache}function Ot(e,t){return e?t.stores[e]:t.stores.__cache}function jt(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 xt(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 Ct(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 $t(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:ye(n),config:t.config,env:Tt(t.config.env),reportError:St(e,"transformer",n,r)};r.debug("init");const a=await Se(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 At(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:{...Tt(t.config.env),...s?{respond:s}:{}},reportError:St(e,"transformer",n,i)};i.debug("push",{event:o.name});const u="string"==typeof o.id?o.id:"",{traceId:d,sourceId:l,parentEventId:f}=at(o,r,e),p=Date.now(),g=it(e,{stepId:Ie("transformer",n),stepType:"transformer",phase:"in",eventId:u,now:p,traceId:d,sourceId:l,parentEventId:f});g.inEvent=o,we(e,g);try{const r=await Se(t.push,"TransformerPush",e.hooks,e.logger)(o,c),s=Date.now(),a=it(e,{stepId:Ie("transformer",n),stepType:"transformer",phase:"out",eventId:u,now:s,traceId:d,sourceId:l,parentEventId:f});return a.durationMs=s-p,a.outEvent=r,we(e,a),i.debug("push done"),r}catch(t){const o=Date.now(),r=it(e,{stepId:Ie("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)},we(e,r),t}}function Dt(e,t){return e?{...e,_meta:{...e._meta,path:[...e._meta.path]}}:ye(t)}async function Mt(e,t,n,o,r,s,a){r||(r=ye(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 Ee($t,t=>{if(t instanceof be)throw t;return e.status.failed++,e.logger.scope(`transformer:${s.type||"unknown"}`).error("transformer init failed",{transformer:o,...Et(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?qt(d,e):void 0,f=s.config?.state?De(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?Me(g,t=>Ot(t,e),t,e):t;let m;if(d&&l){const e=Ce(r,i),t=await je(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=qe(v,Ce(r,i));if(1===n.length){const o=Ct(n[0],jt(t));if(o.length>0){const n=await Mt(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=>Ee(Mt,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,Et(t)),{event:null,respond:void 0}))(e,t,Ct(n,jt(t)),i,Dt(r,n),void 0,a)))}p&&p.length>0&&(i=await Me(p,t=>Ot(t,e),i,e));const y=await Ee(At,t=>(e.logger.scope(`transformer:${s.type||"unknown"}`).error("Push failed",Et(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=Dt(r,"unknown");if(n.next){const r=qe(n.next,Ce(u,o));if(0===r.length)return{event:o,respond:c};if(1===r.length){const n=Ct(r[0],jt(t));return n.length>0?Mt(e,t,n,o,u,c,a):{event:o,respond:c}}return(await Promise.all(r.map(n=>Ee(Mt,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,Et(t)),{event:null,respond:void 0}))(e,t,Ct(n,jt(t)),o,Dt(u,n),void 0,a)))).map(e=>({event:e.event,respond:void 0}))}return s.length>0?Mt(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=qe(s,Ce(r,o));if(0===u.length){i=o;continue}if(1===u.length){const n=Ct(u[0],jt(t));return n.length>0?Mt(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=>Ee(Mt,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,Et(t)),{event:null,respond:void 0}))(e,t,Ct(n,jt(t)),o,Dt(r,n),void 0,a))),{event:null,respond:void 0}}n&&(i=n)}g&&g.length>0&&(i=await Me(g,t=>Ot(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=qe(s.config.next,Ce(r,i));if(1===n.length){const o=Ct(n[0],jt(t));return o.length>0?Mt(e,t,o,i,r,c,a):{event:i,respond:c}}return n.length>1?(await Promise.all(n.map(n=>Ee(Mt,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,Et(t)),{event:null,respond:void 0}))(e,t,Ct(n,jt(t)),i,Dt(r,n),void 0,a))),{event:null,respond:void 0}):{event:i,respond:c}}}return{event:i,respond:c}}function Tt(e){return e&&ke(e)?e:{}}function Pt(e){return"string"==typeof e||!(!Array.isArray(e)||!e.every(e=>"string"==typeof e))}async function _t(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)Vt(n)&&!Yt(e,t,n)||(await ue(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,...Et(t)})})(n,s),Vt(n)&&Qt(e,t,n))}function Rt(e){return Boolean(e.config.init)&&!e.config.require?.length}async function zt(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?me(l):void 0,p=u,g=p?le({...p,stop:p.stop??!0}):void 0,h=Pt(i)?Ct(i,jt(e.transformers)):void 0,m=Pt(c)?Ct(c,jt(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=de(c,he(s.ingest));return 0===t.length?[]:Ct(1===t.length?t[0]:t,jt(e.transformers))})():[]);let l=[u];if(d.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const n=await Mt(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=qt(g,e);if(t){const n=he(s.ingest),o=await fe(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 ge(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=>{pe(t,u,n,d),i?a=(async()=>{const t=await ge(n,i,c,e);r(t)})():r(n)};s.respond=l}"MISS"!==o.status||g.stop||pe(t,o.key,!0,o.rule.ttl)}}}const p=h?{kind:"single",preChain:h}:void 0!==i?(()=>{const t=de(i,he(s.ingest));return 0===t.length?{kind:"single",preChain:[]}:1===t.length?{kind:"single",preChain:Ct(t[0],jt(e.transformers))}:{kind:"many",branches:t.map(t=>Ct(t,jt(e.transformers)))}})():{kind:"single",preChain:[]};f&&f.length>0&&(l=await Promise.all(l.map(t=>ve(f,t=>Ot(t,e),t,e))));let w={ok:!0};for(const n of l)"many"===p.kind?(await Promise.all(p.branches.map((a,i)=>ue(async()=>v(n,{...o,id:t,ingest:Dt(s.ingest,`${t}.${i}`),respond:void 0,mapping:r,preChain:a}),t=>(e.logger.scope("source:many").error(`many branch ${i} failed`,Et(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(ce(n)?n?.headers?.traceparent:void 0);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:St(e,"source",t,k)},S=await ue(o,n=>{if(n instanceof re)throw n;e.status.failed++,e.logger.scope("source").error("source factory failed",{sourceId:t,...Et(n)})})(E);if(!S)return;const q=S.type||"unknown",O=e.logger.scope(q).scope(t);return I.logger=O,a&&(S.config={...S.config,primary:a}),S}async function Bt(e){for(const[t,n]of Object.entries(e.sources)){if(Rt(n))continue;const o=n.config.require;if(!o?.length)continue;const r=o.filter(t=>!Lt(e,t));r.length!==o.length&&(n.config.require=r,Rt(n)&&await _t(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=>!Lt(e,t));if(n.config&&(n.config.require=r),r.length>0)continue;delete e.pending.destinations[t];const s=hn(n);!1!==s.config.queue&&(s.queuePush=[...e.queue]),e.destinations[t]=s}}function Kt(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 Ft=!1;function Ut(){Ft||(Ft=!0,"undefined"!=typeof console&&"function"==typeof console.warn&&console.warn("walkerOS: ignored an on-dispatch call with a non-collector argument"))}function Ht(e,t,n,o){if(n instanceof Z)throw n;e.logger.scope("on").error("on callback failed",{kind:t,...o,...Et(n)})}var Gt=[st.Consent,st.User,st.Globals,st.Custom];function Vt(e){return Gt.includes(e)}function Wt(e,t){switch(t){case st.Consent:return Object.keys(e.consent).length>0;case st.User:return Object.keys(e.user).length>0;case st.Globals:return Object.keys(e.globals).length>0;case st.Custom:return Object.keys(e.custom).length>0;default:return!1}}function Lt(e,t){switch(t){case st.Consent:case st.User:case st.Globals:case st.Custom:return Wt(e,t);case st.Run:case st.Ready:return!0===e.allowed;default:return e.seenEvents.has(String(t))}}function Nt(e,t){return e.cellVersion[String(t)]??0}function Qt(e,t,n){let o=e.delivery.get(t);o||(o={},e.delivery.set(t,o)),o[String(n)]=Nt(e,n)}function Yt(e,t,n){return e.allowed&&Nt(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 Jt(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 Xt(e,t){return{collector:e,logger:e.logger.scope("on").scope(String(t))}}function Zt(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:mn(t.env,t.config.env),reportError:St(e,"destination",n,a,t)};ee(t.on,t=>Ht(e,"destination",t,{destId:n,type:o}))(o,i)}function en(e,t,n,o){if(!Kt(e))return void Ut();const r=tn(e,t,o);if(n.length)switch(t){case st.Consent:!function(e,t,n){const o=n||e.consent,r=Xt(e,st.Consent);t.forEach(t=>{Yt(e,t,st.Consent)&&Jt(e,t,st.Consent)&&(Object.keys(o).filter(e=>e in t).forEach(n=>{ee(t[n],t=>Ht(e,"consent",t,{key:n}))(o,r)}),Qt(e,t,st.Consent))})}(e,n,o);break;case st.Ready:!function(e,t){if(!e.allowed)return;const n=Xt(e,st.Ready);t.forEach(t=>{ee(t,t=>Ht(e,"ready",t))(void 0,n)})}(e,n);break;case st.Run:!function(e,t){if(!e.allowed)return;const n=Xt(e,st.Run);t.forEach(t=>{ee(t,t=>Ht(e,"run",t))(void 0,n)})}(e,n);break;case st.Session:!function(e,t){if(!e.session)return;const n=Xt(e,st.Session);t.forEach(t=>{ee(t,t=>Ht(e,"session",t))(e.session,n)})}(e,n);break;default:{const o=Xt(e,t),s=Vt(t);n.forEach(n=>{"function"==typeof n&&(s&&!Yt(e,n,t)||s&&!Jt(e,n,t)||(ee(n,n=>Ht(e,"generic",n,{type:t}))(r,o),s&&Qt(e,n,t)))});break}}}function tn(e,t,n){switch(t){case st.Consent:return n||e.consent;case st.Session:return e.session;case st.User:return n||e.user;case st.Custom:return n||e.custom;case st.Globals:return n||e.globals;case st.Config:return n||e.config;default:return}}async function nn(e,t,n,o,r){if(!t.on)return!1;if(Vt(o)&&!Yt(e,t,o))return!1;if(Vt(o)&&!Jt(e,t,o))return!1;const s=await te(t.on,t=>Ht(e,"source",t,{sourceId:n,type:o}))(o,r);return Vt(o)&&Qt(e,t,o),!1===s}function on(e){return"number"==typeof e&&e>0?e:1e4}var rn=class extends Error{constructor(e){super(e),this.name="DestinationTimeoutError"}};function sn(e,t,n){let o;const r=new Promise((e,r)=>{o=setTimeout(()=>r(new rn(n)),t)});return Promise.race([e,r]).finally(()=>{o&&clearTimeout(o)})}var an=Object.freeze({batched:!0});function cn(e){return e===an}function un(e){return void 0===e?{}:"number"==typeof e?{wait:e}:{wait:e.wait,size:e.size,age:e.age}}function dn(e,t,n){if(!e)return[];if(Array.isArray(e)&&e.every(e=>"string"==typeof e))return Ct(e,t);if("string"==typeof e)return Ct(e,t);const o=B(e,C(n));return 0===o.length?[]:1===o.length?Ct(o[0],t):Ct(o,t)}async function ln(e,t,n={},o){const{allowed:r,consent:s,user:a}=e;if(!r)return gn({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=gt(e.queue,t,{max:n});if(o.dropped>0){const t=It(e.status,V("collector"),"queue",o.dropped);mt(e.queue,e.logger,"collector.queue overflow; oldest events dropped",{buffer:"queue",cap:n,droppedCount:t})}else e.queue.length<n&&vt(e.queue);e.status.in++}o||(o=e.destinations);const i=e.transformers?jt(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=wt(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=yt();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&&bt(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 fn(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=it(e,{stepId:V("destination",o),stepType:"destination",phase:"skip",eventId:"string"==typeof t.id?t.id:"",now:Date.now(),...at(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+=gt(t,e,s).dropped;if(a>0){kt(e,n);const o=It(e.status,V("destination",n),"queue",a);mt(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&&vt(t)}if(!h.length)return f(),{id:o,destination:r,queue:p};let v,y,w=!1;try{w=await fn(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=dn(r.config.before,i,g),k=r.config.next,I=r.config?.cache,E=I?A(I):void 0,S=E?qt(E,e):void 0,q=r.config?.state?N(r.config.state):void 0,O=q?.filter(e=>"get"===e.mode),j=q?.filter(e=>"set"===e.mode);let P=0,R=0,B=0;return await Promise.all(h.map(async t=>{let s,c;if(t.user=x(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 u=[t],d=n.respond;if(b.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const r=await Mt(e,e.transformers,b,t,g,n.respond,`destination.${o}.before`);if(null===r.event)return t;r.respond&&(d=r.respond),u=Array.isArray(r.event)?r.event:[r.event]}const l=async(t,n)=>{let s=n,a=!1;if(E&&!E.stop&&S){const e=C(g,t),n=await D(E,S,e);if("HIT"===n?.status)return!1;"MISS"===n?.status&&(s={key:n.key,ttl:n.rule.ttl},a=!0)}O&&O.length>0&&t&&(t=await Q(O,t=>Ot(t,e),t,e));const u=Date.now();let l=!1;const f=await W(pn,n=>{const s=r.type||"unknown";e.logger.scope(s).error("Push failed",{...Et(n),event:t.name}),v=n,l=!0;const a=r.dlq,i=r.config.id||o,c={max:r.config.dlqMax??100},u=gt(a,[t,n],c);if(u.dropped>0){kt(e,i);const t=It(e.status,V("destination",i),"dlq",u.dropped);mt(a,e.logger.scope(r.type||"unknown"),"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:i,cap:c.max,droppedCount:t})}else a.length<c.max&&vt(a)})(e,r,o,t,g,d);if(P+=Date.now()-u,s&&S&&void 0===r.config.mock&&(a?M(S,s.key,f??!0,s.ttl):void 0===c&&(c=f??!0)),!l&&!cn(f)&&j&&j.length>0&&t&&(t=await Q(j,t=>Ot(t,e),t,e)),void 0===f||cn(f)||(y=f),cn(f)&&R++,!l&&k){void 0!==f&&(g._response=f);const n=dn(k,i,g);if(n.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const r=await Mt(e,e.transformers,n,t,g,d,`destination.${o}.next`);r.respond&&(d=r.respond)}}return!0};for(const e of u)await l(e,s)&&B++;return s&&S&&void 0!==c&&void 0===r.config.mock&&M(S,s.key,c,s.ttl),t})),{id:o,destination:r,error:v,response:y,totalDuration:P,batchedCount:R,allowedCount:h.length,pushedCount:B,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};kt(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&&bt(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,i=t.pushedCount??a;(Math.max(0,i-n)>0||0===a)&&(u[t.id]=o,r.count++,r.lastAt=s,r.duration+=t.totalDuration||0,e.status.out++,c("success"))}}return gn({event:t,...Object.keys(u).length&&{done:u},...Object.keys(d).length&&{queued:d},...Object.keys(l).length&&{failed:l}})}async function fn(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:mn(t.env,t.config.env),reportError:St(e,"destination",n,s,t)};s.debug("init");const i=Date.now();let c;_(e,it(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=it(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)Zt(e,t,n,r,s)}s.debug("init done")}return!0}async function pn(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:{...mn(t.env,a.env),...s?{respond:s}:{}},reportError:St(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=un(l?.batch),s=un(a.batch),i=r.wait??s.wait??3e4,c=r.size??s.size??1e3,d=r.age??s.age??3e4,g=mn(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:St(e,"destination",n,u,t)};u.debug("push batch",{events:s.entries.length});const d=t.config.id||n,l=kt(e,d),f=wt(t.config.breaker),h=V("destination",d),m=t=>{f&&bt(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+=gt(o,e,r).dropped;if(s>0){const t=It(e.status,V("destination",d),"dlq",s);mt(o,u,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:d,cap:r.max,droppedCount:t})}else o.length<r.max&&vt(o);l.failed+=n.length,l.dlqSize=o.length,e.status.failed+=n.length};let I=s.entries.length;const E=on(a.timeout),S=await W((o,r)=>sn(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(q=S)&&Array.isArray(q.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 q;const O=Date.now();s.entries.forEach((t,o)=>{const r=b||y.has(o),a=at(t.event,t.ingest,e),i=it(e,{stepId:V("destination",n),stepType:"destination",phase:r?"error":"flush",eventId:"string"==typeof t.event.id?t.event.id:"",now:O,traceId:a.traceId,sourceId:a.sourceId,parentEventId:a.parentEventId});if(i.batch={size:s.entries.length,index:o},i.durationMs=O-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=at(o,r,e),h=Date.now(),m=it(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=it(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=kt(e,y);return w.inFlightBatch=(w.inFlightBatch??0)+1,c.batchFn(),an}{let s;if(u.debug("push",{event:i.event.name}),"trace"===e.observeLevel?.()&&Array.isArray(t.calls)&&t.calls.length>0){const e=dt({...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}=at(o,r,e),g=Date.now(),h=it(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=on(a.timeout),r=await sn(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=it(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=pt(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=it(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=pt(s)),i.mappingKey&&(r.mappingKey=i.mappingKey),_(e,r),t}}}function gn(e){return{ok:!e?.failed,...e}}function hn(e){const{code:t,config:n={},env:o={},cache:r,state:s}=e,{config:a}=xt(e,"before"),{config:i}=xt({...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=mn(t.env,o);return{...t,config:c,env:u}}function mn(e,t){return e||t?t?e&&U(e)&&U(t)?{...e,...t}:t:e:{}}async function vn(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 yn(e,t){e.stateVersion++,e.cellVersion[t]=e.stateVersion}async function wn(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 st.Config:Ke(n)&&(Te(e.config,n,{shallow:!1}),r=n,s=!0);break;case st.Consent:if(Ke(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);yn(e,st.Consent),r=t,s=!0}break;case st.Custom:Ke(n)&&(e.custom=Te(e.custom,n),yn(e,st.Custom),r=n,s=!0);break;case st.Destination:Ke(n)&&"code"in n&&Ke(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 gn({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 Bt(e);const n=e.destinations[l];return n?ln(e,void 0,{},{[l]:n}):gn({ok:!0})}const f={...n,config:d,env:mn(n.env,r)};return e.destinations[l]=f,!1!==f.config.queue&&(f.queuePush=[...e.queue]),ln(e,void 0,{},{[l]:f})}(e,n));break;case st.Globals:Ke(n)&&(e.globals=Te(e.globals,n),yn(e,st.Globals),r=n,s=!0);break;case st.Hook:if(Ke(n)&&Be(n.name)&&ze(n.fn)){const{name:t,fn:o}=n;e.hooks[t]=o,r=n,s=!0}break;case st.On:if(Ke(n)&&Be(n.type)){const{type:t,rules:o}=n;await async function(e,t,n){if(!Kt(e))return void Ut();const o=e.on,r=o[t]||[],s=X(n)?n:[n];s.forEach(e=>{r.push(e)}),o[t]=r,en(e,t,s)}(e,t,o)}break;case st.Ready:s=!0;break;case st.Run:o=await async function(e,t){e.allowed=!0,e.timing=Date.now(),e.trace=_e(),e.count=0,t&&(t.consent&&(e.consent=Te(e.consent,t.consent),yn(e,st.Consent)),t.user&&(e.user=Te(e.user,t.user),yn(e,st.User)),t.globals&&(e.globals=Te(e.config.globalsStatic||{},t.globals),yn(e,st.Globals)),t.custom&&(e.custom=Te(e.custom,t.custom),yn(e,st.Custom))),Object.values(e.destinations).forEach(e=>{e.queuePush=[]}),e.queue=[],e.round++,await Bt(e),await async function(e){if(Kt(e))for(const t of Gt){if(!Wt(e,t))continue;const n=tn(e,t);en(e,t,e.on[t]||[]);for(const[o,r]of Object.entries(e.sources))Rt(r)&&await nn(e,r,o,t,n)}else Ut()}(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 ln(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 st.Session:s=!0;break;case st.Shutdown:e.hasShutdown||(e.hasShutdown=!0,await async function(e){const t=e.logger;await vn(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 vn(e.destinations,"destination",t),await vn(e.transformers,"transformer",t),await vn(e.stores,"store",t)}(e));break;case st.User:Ke(n)&&(Te(e.user,n,{shallow:!1}),yn(e,st.User),r=n,s=!0);break;default:return e.logger.warn("unknown command",{command:t}),gn({ok:!1})}if(s){await async function(e,t,n,o){if(!Kt(e))return Ut(),!0;e.seenEvents.add(String(t));let r=n||[];n||(r=e.on[t]||[]);const s=tn(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&&(Rt(o)?await nn(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});Zt(e,o,n,t,s)}});for(const[t,n]of Object.entries(e.sources))Rt(n)&&n.queueOn?.length&&await _t(e,n,t);const i=Object.values(e.sources).some(e=>!Rt(e)&&e.config.require?.length);return(Object.keys(e.pending.destinations).length>0||i)&&await Bt(e),en(e,t,r,o),!a}(e,t,void 0,r);const n=await ln(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||gn({ok:!0})}()}finally{a()}}function bn(e,t){return{timing:Math.round((Date.now()-e.timing)/10)/100,source:{type:"collector",schema:"4"},...t}}function kn(e,t,n){const o=t.name;if("string"!=typeof o)throw new Re(void 0===o?"Event name is required":"Event name is invalid");if(!o)throw new Re("Event name is required");const[r,s]=o.split(" ");if(!r||!s)throw new Re("Event name is invalid");const{timestamp:a=Date.now(),name:i=`${r} ${s}`,data:c={},context:u={},globals:d={},custom:l={},user:f=e.user,nested:p=[],consent:g=e.consent,id:h=Pe(),trigger:m="",entity:v=r,action:y=s,timing:w=0,source:b={type:"collector",schema:"4"}}=t,k=b??{type:"collector",schema:"4"},I=k.count??(e.count+=1),E=k.trace??n?._meta.trace??e.trace,S={...k,count:I};void 0!==E&&(S.trace=E);const q=e.name??k.platform??"default",O=e.release??"4.6.0";return S.release={...k.release,[q]:O},{name:i,data:c,context:u,globals:Te(e.globals,d),custom:l,user:f,nested:p,consent:g,id:h,trigger:m,entity:v,action:y,timestamp:a,timing:w,source:S}}function In(e,t){const n=Qe(async(n,o={})=>await Ne(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=gt(e.preRunQueue,{event:n,options:o},{max:t});if(r.dropped>0){const n=It(e.status,"collector.preRun","queue",r.dropped);mt(e.preRunQueue,e.logger,"collector.preRunQueue overflow; oldest events dropped",{buffer:"queue",cap:t,droppedCount:n})}else e.preRunQueue.length<t&&vt(e.preRunQueue);return e.logger.debug("event held until run",{name:n.name,dropped:r.dropped}),gn({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??Fe(s||"unknown");if(c){const t=await Le(p,c,e);if(t.ignore)return gn({ok:!0});if(c.consent&&!Ge(c.consent,e.consent,t.event.consent))return gn({ok:!0});p=t.event}if(u?.length&&e.transformers&&Object.keys(e.transformers).length>0){const n=await Mt(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})`:"")),gn({ok:!0,dropped:!0});if(n.stopped)return n.respond&&(f=n.respond),gn({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:Ve()}:n,a=t(r),i=kn(e,a,h);return ln(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]??gn({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 kn(e,bn(e,t),n)}(e,p,h),v=await ln(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 He)throw t;if(t instanceof We){const n=o.id;if(n){e.status.sources[n]||(e.status.sources[n]={count:0,duration:0});const t=e.status.sources[n];t.rejected=(t.rejected??0)+1}return e.logger.warn("invalid event rejected",{error:t.message}),gn({ok:!1,invalid:!0,error:t.message})}return e.status.failed++,e.logger.error("push failed",{...Et(t),event:n.name}),gn({ok:!1})})(),"Push",e.hooks,e.logger);return async(t,o)=>{const r="string"==typeof t.id&&""!==t.id?t:{...t,id:Ve()},s="string"==typeof r.id?r.id:"",{traceId:a,sourceId:i,parentEventId:c}=at(r,o?.ingest,e),u=Date.now(),d=it(e,{stepId:"collector.push",stepType:"collector",phase:"in",eventId:s,now:u,traceId:a,sourceId:i,parentEventId:c});d.inEvent=r,Ue(e,d);try{const t=await n(r,o),d=Date.now(),l=it(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,Ue(e,l),t}catch(t){const n=Date.now(),o=it(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)},Ue(e,o),t}}}function En(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 Sn(e,t){const{cacheConfig:n,cacheStore:o,namespace:r,logger:s,storeId:a,collector:i}=t,c=(e,t)=>{if(!i)return;const n=it(i,{stepId:`store.${a}`,stepType:"store",phase:"in",eventId:"",now:Date.now()});n.meta={op:"cache",cached:"hit"===t,status:t,key:e},nt(i,n)},u={hits:0,misses:0,populates:0,writes:0,deletes:0,inflight_dedups:0},d=n.rules.map(e=>({match:e.match?tt(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=ot(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,rt(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),rt(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,Et(n)):console.warn(o,n)}}function qn(e,t,n){const o=`store.${n}`,r=et(t.get,"StoreGet",e.hooks,e.logger),s=et(t.set,"StoreSet",e.hooks,e.logger),a=et(t.delete,"StoreDelete",e.hooks,e.logger);t.get=async t=>{const n=Date.now(),s=it(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:n});s.meta={op:"get",key:t},Ze(e,s);try{const s=await r(t),a=Date.now(),i=it(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:a});return i.durationMs=a-n,i.meta={op:"get",key:t},Ze(e,i),s}catch(r){const s=Date.now(),a=it(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)},Ze(e,a),r}},t.set=async(t,n,r)=>{const a=Date.now(),i=it(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:a});i.meta={op:"set",key:t},Ze(e,i);try{await s(t,n,r);const i=Date.now(),c=it(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:i});c.durationMs=i-a,c.meta={op:"set",key:t},Ze(e,c)}catch(n){const r=Date.now(),s=it(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)},Ze(e,s),n}},t.delete=async t=>{const n=Date.now(),r=it(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:n});r.meta={op:"delete",key:t},Ze(e,r);try{await a(t);const r=Date.now(),s=it(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:r});s.durationMs=r-n,s.meta={op:"delete",key:t},Ze(e,s)}catch(r){const s=Date.now(),a=it(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)},Ze(e,a),r}}}async function On(e){const t=O({globalsStatic:{},sessionStatic:{},run:!0,queueMax:1e3},e,{merge:!1,extend:!1}),n={level:e.logger?.level,handler:e.logger?.handler},o=j(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=In(s,e=>bn(s,e)),s.command=(i=wn,Je(async(e,t,n)=>await Xe(async()=>await i(a,e,t,n),t=>{if(t instanceof Ye)throw t;return a.status.failed++,a.logger.error("command failed",{...Et(t),command:e}),gn({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 gn({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:St(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=En()),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]=Sn(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&&qn(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=En()),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]=hn(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=$e(r,"Transformer");if(!a.ok){e.logger.warn(`Transformer ${o} invalid (${a.code}): ${a.reason}. Skipping.`);continue}const{config:i}=xt(r,"before"),{config:c}=xt({...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:ye(o),config:p,env:s,reportError:St(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 Ae(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 jn=globalThis;function xn(e){try{const t=jn.window;if(!t)return;t.localStorage.getItem(I)===e&&t.localStorage.removeItem(I)}catch{}}function Cn(e,t){return void 0===t?e:n=>e({...n,release:t})}async function $n(e){e=e||{};const t=await On(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=jn.window,t=jn.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 jn.window?.localStorage.getItem(I)??null}catch{return null}}();if(!r)return;const s=q(r);if(!s)return void(null===t?(e.logger.warn("observe: malformed stored credential cleared"),xn(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{jn.window?.localStorage.setItem(I,e)}catch{}}(r),null!==t&&function(){const e=jn.window,t=jn.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&&(xn(r),a&&e.observers.delete(a))}});a=S(function(e,t){return void 0===t?e:n=>e({...n,flowId:t})}(Cn(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(Cn(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 zt(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 ue(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,...Et(n)})})(),o||(n.config.init=!0,Rt(n)&&await _t(e,n,t))}return await Bt(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 An=async e=>{let t;return{get flow(){return t},trigger:()=>async n=>{if(!t){const n=await $n({...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:()=>An,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 q}from"@walkeros/core";import{assign as O,createLogger as j}from"@walkeros/core";import{assign as x,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,isScope as ce,tryCatchAsync as ue,getNextSteps as de,compileCache as le,checkCache as fe,storeCache as pe,applyUpdate as ge,buildCacheContext as he,compileState as me,applyState as ve}from"@walkeros/core";import{createIngest as ye,emitStep as we,FatalError as be,isObject as ke,stepId as Ie,tryCatchAsync as Ee,useHooks as Se,getNextSteps as qe,compileCache as Oe,checkCache as je,storeCache as xe,buildCacheContext as Ce,validateStepEntry as $e,processEventMapping as Ae,compileState as De,applyState as Me}from"@walkeros/core";import{assign as Te,getSpanId as Pe,getTraceId as _e,InvalidEventError as Re,isFunction as ze,isString as Be}from"@walkeros/core";import{isObject as Ke}from"@walkeros/core";import{createIngest as Fe,emitStep as Ue,FatalError as He,getGrantedConsent as Ge,getSpanId as Ve,InvalidEventError as We,processEventMapping as Le,tryCatchAsync as Ne,useHooks as Qe}from"@walkeros/core";import{FatalError as Ye,useHooks as Je,tryCatchAsync as Xe}from"@walkeros/core";import{emitStep as Ze,useHooks as et}from"@walkeros/core";import{compileMatcher as tt,emitStep as nt,readCacheEnvelope as ot,wrapCacheEnvelope as rt}from"@walkeros/core";var st={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 at(e,t,n){return{traceId:e.source?.trace??t?._meta.trace??n.trace,sourceId:t?._meta.path[0],parentEventId:t?._meta.parentEventId}}function it(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 ct(e){return"object"==typeof e&&null!==e}function ut(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(ut(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:ut(s,t,n+1);return r}function dt(e){const t=[],n=[],{simulation:o,...r}=e,s=ut(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(!ct(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 lt(e,t){try{return e[t]}catch{return"[unreadable]"}}function ft(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(lt(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 pt(e){return e.map(e=>({fn:e.fn,args:ft(e.args),ts:e.ts}))}function gt(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 ht=new WeakMap;function mt(e,t,n,o){ht.get(e)||(ht.set(e,!0),t.warn(n,o))}function vt(e){ht.delete(e)}var yt=()=>Date.now();function wt(e){if(void 0!==e)return"number"==typeof e?{threshold:e,cooldown:3e4}:{threshold:e.threshold??5,cooldown:e.cooldown??3e4}}function bt(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=yt()+r)):void(s.consecutiveFailures>=o&&(s.state="open",s.probing=!1,s.openUntil=yt()+r)))}function kt(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 It(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 Et(e){const t={error:e instanceof Error?e.message:String(e)};if(e instanceof Error&&e.name&&"Error"!==e.name&&(t.name=e.name),"object"==typeof e&&null!==e&&"code"in e){const n=e;"number"!=typeof n.code&&"string"!=typeof n.code||(t.code=n.code)}return t}function St(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=gt(a,[o,r],i);if(c.dropped>0){const t=It(e.status,ne("destination",n),"dlq",c.dropped);mt(a,s,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:n,cap:i.max,droppedCount:t})}else a.length<i.max&&vt(a);const u=kt(e,n);u.failed++,u.dlqSize=a.length,e.status.failed++;const d=wt(t.config.breaker);if(d){const o=t.config.id||n;bt(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",{...Et(t),event:a.name});e.status.connectionErrors[s]=(e.status.connectionErrors[s]??0)+1,o.error("connection error",Et(t))}catch{}}}function qt(e,t){return e.storeId&&t.stores[e.storeId]?t.stores[e.storeId]:t.stores.__cache}function Ot(e,t){return e?t.stores[e]:t.stores.__cache}function jt(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 xt(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 Ct(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 $t(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:ye(n),config:t.config,env:Tt(t.config.env),reportError:St(e,"transformer",n,r)};r.debug("init");const a=await Se(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 At(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:{...Tt(t.config.env),...s?{respond:s}:{}},reportError:St(e,"transformer",n,i)};i.debug("push",{event:o.name});const u="string"==typeof o.id?o.id:"",{traceId:d,sourceId:l,parentEventId:f}=at(o,r,e),p=Date.now(),g=it(e,{stepId:Ie("transformer",n),stepType:"transformer",phase:"in",eventId:u,now:p,traceId:d,sourceId:l,parentEventId:f});g.inEvent=o,we(e,g);try{const r=await Se(t.push,"TransformerPush",e.hooks,e.logger)(o,c),s=Date.now(),a=it(e,{stepId:Ie("transformer",n),stepType:"transformer",phase:"out",eventId:u,now:s,traceId:d,sourceId:l,parentEventId:f});return a.durationMs=s-p,a.outEvent=r,we(e,a),i.debug("push done"),r}catch(t){const o=Date.now(),r=it(e,{stepId:Ie("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)},we(e,r),t}}function Dt(e,t){return e?{...e,_meta:{...e._meta,path:[...e._meta.path]}}:ye(t)}async function Mt(e,t,n,o,r,s,a){r||(r=ye(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 Ee($t,t=>{if(t instanceof be)throw t;return e.status.failed++,e.logger.scope(`transformer:${s.type||"unknown"}`).error("transformer init failed",{transformer:o,...Et(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?qt(d,e):void 0,f=s.config?.state?De(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?Me(g,t=>Ot(t,e),t,e):t;let m;if(d&&l){const e=Ce(r,i),t=await je(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=qe(v,Ce(r,i));if(1===n.length){const o=Ct(n[0],jt(t));if(o.length>0){const n=await Mt(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=>Ee(Mt,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,Et(t)),{event:null,respond:void 0}))(e,t,Ct(n,jt(t)),i,Dt(r,n),void 0,a)))}p&&p.length>0&&(i=await Me(p,t=>Ot(t,e),i,e));const y=await Ee(At,t=>(e.logger.scope(`transformer:${s.type||"unknown"}`).error("Push failed",Et(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=Dt(r,"unknown");if(n.next){const r=qe(n.next,Ce(u,o));if(0===r.length)return{event:o,respond:c};if(1===r.length){const n=Ct(r[0],jt(t));return n.length>0?Mt(e,t,n,o,u,c,a):{event:o,respond:c}}return(await Promise.all(r.map(n=>Ee(Mt,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,Et(t)),{event:null,respond:void 0}))(e,t,Ct(n,jt(t)),o,Dt(u,n),void 0,a)))).map(e=>({event:e.event,respond:void 0}))}return s.length>0?Mt(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=qe(s,Ce(r,o));if(0===u.length){i=o;continue}if(1===u.length){const n=Ct(u[0],jt(t));return n.length>0?Mt(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=>Ee(Mt,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,Et(t)),{event:null,respond:void 0}))(e,t,Ct(n,jt(t)),o,Dt(r,n),void 0,a))),{event:null,respond:void 0}}n&&(i=n)}g&&g.length>0&&(i=await Me(g,t=>Ot(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=qe(s.config.next,Ce(r,i));if(1===n.length){const o=Ct(n[0],jt(t));return o.length>0?Mt(e,t,o,i,r,c,a):{event:i,respond:c}}return n.length>1?(await Promise.all(n.map(n=>Ee(Mt,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,Et(t)),{event:null,respond:void 0}))(e,t,Ct(n,jt(t)),i,Dt(r,n),void 0,a))),{event:null,respond:void 0}):{event:i,respond:c}}}return{event:i,respond:c}}function Tt(e){return e&&ke(e)?e:{}}function Pt(e){return"string"==typeof e||!(!Array.isArray(e)||!e.every(e=>"string"==typeof e))}async function _t(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)Vt(n)&&!Yt(e,t,n)||(await ue(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,...Et(t)})})(n,s),Vt(n)&&Qt(e,t,n))}function Rt(e){return Boolean(e.config.init)&&!e.config.require?.length}async function zt(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?me(l):void 0,p=u,g=p?le({...p,stop:p.stop??!0}):void 0,h=Pt(i)?Ct(i,jt(e.transformers)):void 0,m=Pt(c)?Ct(c,jt(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=de(c,he(s.ingest));return 0===t.length?[]:Ct(1===t.length?t[0]:t,jt(e.transformers))})():[]);let l=[u];if(d.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const n=await Mt(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=qt(g,e);if(t){const n=he(s.ingest),o=await fe(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 ge(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=>{pe(t,u,n,d),i?a=(async()=>{const t=await ge(n,i,c,e);r(t)})():r(n)};s.respond=l}"MISS"!==o.status||g.stop||pe(t,o.key,!0,o.rule.ttl)}}}const p=h?{kind:"single",preChain:h}:void 0!==i?(()=>{const t=de(i,he(s.ingest));return 0===t.length?{kind:"single",preChain:[]}:1===t.length?{kind:"single",preChain:Ct(t[0],jt(e.transformers))}:{kind:"many",branches:t.map(t=>Ct(t,jt(e.transformers)))}})():{kind:"single",preChain:[]};f&&f.length>0&&(l=await Promise.all(l.map(t=>ve(f,t=>Ot(t,e),t,e))));let w={ok:!0};for(const n of l)"many"===p.kind?(await Promise.all(p.branches.map((a,i)=>ue(async()=>v(n,{...o,id:t,ingest:Dt(s.ingest,`${t}.${i}`),respond:void 0,mapping:r,preChain:a}),t=>(e.logger.scope("source:many").error(`many branch ${i} failed`,Et(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(ce(n)?n?.headers?.traceparent:void 0);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:St(e,"source",t,k)},S=await ue(o,n=>{if(n instanceof re)throw n;e.status.failed++,e.logger.scope("source").error("source factory failed",{sourceId:t,...Et(n)})})(E);if(!S)return;const q=S.type||"unknown",O=e.logger.scope(q).scope(t);return I.logger=O,a&&(S.config={...S.config,primary:a}),S}async function Bt(e){for(const[t,n]of Object.entries(e.sources)){if(Rt(n))continue;const o=n.config.require;if(!o?.length)continue;const r=o.filter(t=>!Lt(e,t));r.length!==o.length&&(n.config.require=r,Rt(n)&&await _t(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=>!Lt(e,t));if(n.config&&(n.config.require=r),r.length>0)continue;delete e.pending.destinations[t];const s=hn(n);!1!==s.config.queue&&(s.queuePush=[...e.queue]),e.destinations[t]=s}}function Kt(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 Ft=!1;function Ut(){Ft||(Ft=!0,"undefined"!=typeof console&&"function"==typeof console.warn&&console.warn("walkerOS: ignored an on-dispatch call with a non-collector argument"))}function Ht(e,t,n,o){if(n instanceof Z)throw n;e.logger.scope("on").error("on callback failed",{kind:t,...o,...Et(n)})}var Gt=[st.Consent,st.User,st.Globals,st.Custom];function Vt(e){return Gt.includes(e)}function Wt(e,t){switch(t){case st.Consent:return Object.keys(e.consent).length>0;case st.User:return Object.keys(e.user).length>0;case st.Globals:return Object.keys(e.globals).length>0;case st.Custom:return Object.keys(e.custom).length>0;default:return!1}}function Lt(e,t){switch(t){case st.Consent:case st.User:case st.Globals:case st.Custom:return Wt(e,t);case st.Run:case st.Ready:return!0===e.allowed;default:return e.seenEvents.has(String(t))}}function Nt(e,t){return e.cellVersion[String(t)]??0}function Qt(e,t,n){let o=e.delivery.get(t);o||(o={},e.delivery.set(t,o)),o[String(n)]=Nt(e,n)}function Yt(e,t,n){return e.allowed&&Nt(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 Jt(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 Xt(e,t){return{collector:e,logger:e.logger.scope("on").scope(String(t))}}function Zt(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:mn(t.env,t.config.env),reportError:St(e,"destination",n,a,t)};ee(t.on,t=>Ht(e,"destination",t,{destId:n,type:o}))(o,i)}function en(e,t,n,o){if(!Kt(e))return void Ut();const r=tn(e,t,o);if(n.length)switch(t){case st.Consent:!function(e,t,n){const o=n||e.consent,r=Xt(e,st.Consent);t.forEach(t=>{Yt(e,t,st.Consent)&&Jt(e,t,st.Consent)&&(Object.keys(o).filter(e=>e in t).forEach(n=>{ee(t[n],t=>Ht(e,"consent",t,{key:n}))(o,r)}),Qt(e,t,st.Consent))})}(e,n,o);break;case st.Ready:!function(e,t){if(!e.allowed)return;const n=Xt(e,st.Ready);t.forEach(t=>{ee(t,t=>Ht(e,"ready",t))(void 0,n)})}(e,n);break;case st.Run:!function(e,t){if(!e.allowed)return;const n=Xt(e,st.Run);t.forEach(t=>{ee(t,t=>Ht(e,"run",t))(void 0,n)})}(e,n);break;case st.Session:!function(e,t){if(!e.session)return;const n=Xt(e,st.Session);t.forEach(t=>{ee(t,t=>Ht(e,"session",t))(e.session,n)})}(e,n);break;default:{const o=Xt(e,t),s=Vt(t);n.forEach(n=>{"function"==typeof n&&(s&&!Yt(e,n,t)||s&&!Jt(e,n,t)||(ee(n,n=>Ht(e,"generic",n,{type:t}))(r,o),s&&Qt(e,n,t)))});break}}}function tn(e,t,n){switch(t){case st.Consent:return n||e.consent;case st.Session:return e.session;case st.User:return n||e.user;case st.Custom:return n||e.custom;case st.Globals:return n||e.globals;case st.Config:return n||e.config;default:return}}async function nn(e,t,n,o,r){if(!t.on)return!1;if(Vt(o)&&!Yt(e,t,o))return!1;if(Vt(o)&&!Jt(e,t,o))return!1;const s=await te(t.on,t=>Ht(e,"source",t,{sourceId:n,type:o}))(o,r);return Vt(o)&&Qt(e,t,o),!1===s}function on(e){return"number"==typeof e&&e>0?e:1e4}var rn=class extends Error{constructor(e){super(e),this.name="DestinationTimeoutError"}};function sn(e,t,n){let o;const r=new Promise((e,r)=>{o=setTimeout(()=>r(new rn(n)),t)});return Promise.race([e,r]).finally(()=>{o&&clearTimeout(o)})}var an=Object.freeze({batched:!0});function cn(e){return e===an}function un(e){return void 0===e?{}:"number"==typeof e?{wait:e}:{wait:e.wait,size:e.size,age:e.age}}function dn(e,t,n){if(!e)return[];if(Array.isArray(e)&&e.every(e=>"string"==typeof e))return Ct(e,t);if("string"==typeof e)return Ct(e,t);const o=B(e,C(n));return 0===o.length?[]:1===o.length?Ct(o[0],t):Ct(o,t)}async function ln(e,t,n={},o){const{allowed:r,consent:s,user:a}=e;if(!r)return gn({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=gt(e.queue,t,{max:n});if(o.dropped>0){const t=It(e.status,V("collector"),"queue",o.dropped);mt(e.queue,e.logger,"collector.queue overflow; oldest events dropped",{buffer:"queue",cap:n,droppedCount:t})}else e.queue.length<n&&vt(e.queue);e.status.in++}o||(o=e.destinations);const i=e.transformers?jt(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=wt(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=yt();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&&bt(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 fn(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=it(e,{stepId:V("destination",o),stepType:"destination",phase:"skip",eventId:"string"==typeof t.id?t.id:"",now:Date.now(),...at(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+=gt(t,e,s).dropped;if(a>0){kt(e,n);const o=It(e.status,V("destination",n),"queue",a);mt(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&&vt(t)}if(!h.length)return f(),{id:o,destination:r,queue:p};let v,y,w=!1;try{w=await fn(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=dn(r.config.before,i,g),k=r.config.next,I=r.config?.cache,E=I?A(I):void 0,S=E?qt(E,e):void 0,q=r.config?.state?N(r.config.state):void 0,O=q?.filter(e=>"get"===e.mode),j=q?.filter(e=>"set"===e.mode);let P=0,R=0,B=0;return await Promise.all(h.map(async t=>{let s,c;if(t.user=x(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 u=[t],d=n.respond;if(b.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const r=await Mt(e,e.transformers,b,t,g,n.respond,`destination.${o}.before`);if(null===r.event)return t;r.respond&&(d=r.respond),u=Array.isArray(r.event)?r.event:[r.event]}const l=async(t,n)=>{let s=n,a=!1;if(E&&!E.stop&&S){const e=C(g,t),n=await D(E,S,e);if("HIT"===n?.status)return!1;"MISS"===n?.status&&(s={key:n.key,ttl:n.rule.ttl},a=!0)}O&&O.length>0&&t&&(t=await Q(O,t=>Ot(t,e),t,e));const u=Date.now();let l=!1;const f=await W(pn,n=>{const s=r.type||"unknown";e.logger.scope(s).error("Push failed",{...Et(n),event:t.name}),v=n,l=!0;const a=r.dlq,i=r.config.id||o,c={max:r.config.dlqMax??100},u=gt(a,[t,n],c);if(u.dropped>0){kt(e,i);const t=It(e.status,V("destination",i),"dlq",u.dropped);mt(a,e.logger.scope(r.type||"unknown"),"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:i,cap:c.max,droppedCount:t})}else a.length<c.max&&vt(a)})(e,r,o,t,g,d);if(P+=Date.now()-u,s&&S&&void 0===r.config.mock&&(a?M(S,s.key,f??!0,s.ttl):void 0===c&&(c=f??!0)),!l&&!cn(f)&&j&&j.length>0&&t&&(t=await Q(j,t=>Ot(t,e),t,e)),void 0===f||cn(f)||(y=f),cn(f)&&R++,!l&&k){void 0!==f&&(g._response=f);const n=dn(k,i,g);if(n.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const r=await Mt(e,e.transformers,n,t,g,d,`destination.${o}.next`);r.respond&&(d=r.respond)}}return!0};for(const e of u)await l(e,s)&&B++;return s&&S&&void 0!==c&&void 0===r.config.mock&&M(S,s.key,c,s.ttl),t})),{id:o,destination:r,error:v,response:y,totalDuration:P,batchedCount:R,allowedCount:h.length,pushedCount:B,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};kt(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&&bt(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,i=t.pushedCount??a;(Math.max(0,i-n)>0||0===a)&&(u[t.id]=o,r.count++,r.lastAt=s,r.duration+=t.totalDuration||0,e.status.out++,c("success"))}}return gn({event:t,...Object.keys(u).length&&{done:u},...Object.keys(d).length&&{queued:d},...Object.keys(l).length&&{failed:l}})}async function fn(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:mn(t.env,t.config.env),reportError:St(e,"destination",n,s,t)};s.debug("init");const i=Date.now();let c;_(e,it(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=it(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)Zt(e,t,n,r,s)}s.debug("init done")}return!0}async function pn(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:{...mn(t.env,a.env),...s?{respond:s}:{}},reportError:St(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=un(l?.batch),s=un(a.batch),i=r.wait??s.wait??3e4,c=r.size??s.size??1e3,d=r.age??s.age??3e4,g=mn(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:St(e,"destination",n,u,t)};u.debug("push batch",{events:s.entries.length});const d=t.config.id||n,l=kt(e,d),f=wt(t.config.breaker),h=V("destination",d),m=t=>{f&&bt(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+=gt(o,e,r).dropped;if(s>0){const t=It(e.status,V("destination",d),"dlq",s);mt(o,u,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:d,cap:r.max,droppedCount:t})}else o.length<r.max&&vt(o);l.failed+=n.length,l.dlqSize=o.length,e.status.failed+=n.length};let I=s.entries.length;const E=on(a.timeout),S=await W((o,r)=>sn(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(q=S)&&Array.isArray(q.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 q;const O=Date.now();s.entries.forEach((t,o)=>{const r=b||y.has(o),a=at(t.event,t.ingest,e),i=it(e,{stepId:V("destination",n),stepType:"destination",phase:r?"error":"flush",eventId:"string"==typeof t.event.id?t.event.id:"",now:O,traceId:a.traceId,sourceId:a.sourceId,parentEventId:a.parentEventId});if(i.batch={size:s.entries.length,index:o},i.durationMs=O-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=at(o,r,e),h=Date.now(),m=it(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=it(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=kt(e,y);return w.inFlightBatch=(w.inFlightBatch??0)+1,c.batchFn(),an}{let s;if(u.debug("push",{event:i.event.name}),"trace"===e.observeLevel?.()&&Array.isArray(t.calls)&&t.calls.length>0){const e=dt({...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}=at(o,r,e),g=Date.now(),h=it(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=on(a.timeout),r=await sn(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=it(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=pt(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=it(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=pt(s)),i.mappingKey&&(r.mappingKey=i.mappingKey),_(e,r),t}}}function gn(e){return{ok:!e?.failed,...e}}function hn(e){const{code:t,config:n={},env:o={},cache:r,state:s}=e,{config:a}=xt(e,"before"),{config:i}=xt({...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=mn(t.env,o);return{...t,config:c,env:u}}function mn(e,t){return e||t?t?e&&U(e)&&U(t)?{...e,...t}:t:e:{}}async function vn(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 yn(e,t){e.stateVersion++,e.cellVersion[t]=e.stateVersion}async function wn(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 st.Config:Ke(n)&&(Te(e.config,n,{shallow:!1}),r=n,s=!0);break;case st.Consent:if(Ke(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);yn(e,st.Consent),r=t,s=!0}break;case st.Custom:Ke(n)&&(e.custom=Te(e.custom,n),yn(e,st.Custom),r=n,s=!0);break;case st.Destination:Ke(n)&&"code"in n&&Ke(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 gn({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 Bt(e);const n=e.destinations[l];return n?ln(e,void 0,{},{[l]:n}):gn({ok:!0})}const f={...n,config:d,env:mn(n.env,r)};return e.destinations[l]=f,!1!==f.config.queue&&(f.queuePush=[...e.queue]),ln(e,void 0,{},{[l]:f})}(e,n));break;case st.Globals:Ke(n)&&(e.globals=Te(e.globals,n),yn(e,st.Globals),r=n,s=!0);break;case st.Hook:if(Ke(n)&&Be(n.name)&&ze(n.fn)){const{name:t,fn:o}=n;e.hooks[t]=o,r=n,s=!0}break;case st.On:if(Ke(n)&&Be(n.type)){const{type:t,rules:o}=n;await async function(e,t,n){if(!Kt(e))return void Ut();const o=e.on,r=o[t]||[],s=X(n)?n:[n];s.forEach(e=>{r.push(e)}),o[t]=r,en(e,t,s)}(e,t,o)}break;case st.Ready:s=!0;break;case st.Run:o=await async function(e,t){e.allowed=!0,e.timing=Date.now(),e.trace=_e(),e.count=0,t&&(t.consent&&(e.consent=Te(e.consent,t.consent),yn(e,st.Consent)),t.user&&(e.user=Te(e.user,t.user),yn(e,st.User)),t.globals&&(e.globals=Te(e.config.globalsStatic||{},t.globals),yn(e,st.Globals)),t.custom&&(e.custom=Te(e.custom,t.custom),yn(e,st.Custom))),Object.values(e.destinations).forEach(e=>{e.queuePush=[]}),e.queue=[],e.round++,await Bt(e),await async function(e){if(Kt(e))for(const t of Gt){if(!Wt(e,t))continue;const n=tn(e,t);en(e,t,e.on[t]||[]);for(const[o,r]of Object.entries(e.sources))Rt(r)&&await nn(e,r,o,t,n)}else Ut()}(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 ln(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 st.Session:s=!0;break;case st.Shutdown:e.hasShutdown||(e.hasShutdown=!0,await async function(e){const t=e.logger;await vn(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 vn(e.destinations,"destination",t),await vn(e.transformers,"transformer",t),await vn(e.stores,"store",t)}(e));break;case st.User:Ke(n)&&(Te(e.user,n,{shallow:!1}),yn(e,st.User),r=n,s=!0);break;default:return e.logger.warn("unknown command",{command:t}),gn({ok:!1})}if(s){await async function(e,t,n,o){if(!Kt(e))return Ut(),!0;e.seenEvents.add(String(t));let r=n||[];n||(r=e.on[t]||[]);const s=tn(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&&(Rt(o)?await nn(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});Zt(e,o,n,t,s)}});for(const[t,n]of Object.entries(e.sources))Rt(n)&&n.queueOn?.length&&await _t(e,n,t);const i=Object.values(e.sources).some(e=>!Rt(e)&&e.config.require?.length);return(Object.keys(e.pending.destinations).length>0||i)&&await Bt(e),en(e,t,r,o),!a}(e,t,void 0,r);const n=await ln(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||gn({ok:!0})}()}finally{a()}}function bn(e,t){return{timing:Math.round((Date.now()-e.timing)/10)/100,source:{type:"collector",schema:"4"},...t}}function kn(e,t,n){const o=t.name;if("string"!=typeof o)throw new Re(void 0===o?"Event name is required":"Event name is invalid");if(!o)throw new Re("Event name is required");const[r,s]=o.split(" ");if(!r||!s)throw new Re("Event name is invalid");const{timestamp:a=Date.now(),name:i=`${r} ${s}`,data:c={},context:u={},globals:d={},custom:l={},user:f=e.user,nested:p=[],consent:g=e.consent,id:h=Pe(),trigger:m="",entity:v=r,action:y=s,timing:w=0,source:b={type:"collector",schema:"4"}}=t,k=b??{type:"collector",schema:"4"},I=k.count??(e.count+=1),E=k.trace??n?._meta.trace??e.trace,S={...k,count:I};void 0!==E&&(S.trace=E);const q=e.name??k.platform??"default",O=e.release??"4.6.1";return S.release={...k.release,[q]:O},{name:i,data:c,context:u,globals:Te(e.globals,d),custom:l,user:f,nested:p,consent:g,id:h,trigger:m,entity:v,action:y,timestamp:a,timing:w,source:S}}function In(e,t){const n=Qe(async(n,o={})=>await Ne(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=gt(e.preRunQueue,{event:n,options:o},{max:t});if(r.dropped>0){const n=It(e.status,"collector.preRun","queue",r.dropped);mt(e.preRunQueue,e.logger,"collector.preRunQueue overflow; oldest events dropped",{buffer:"queue",cap:t,droppedCount:n})}else e.preRunQueue.length<t&&vt(e.preRunQueue);return e.logger.debug("event held until run",{name:n.name,dropped:r.dropped}),gn({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??Fe(s||"unknown");if(c){const t=await Le(p,c,e);if(t.ignore)return gn({ok:!0});if(c.consent&&!Ge(c.consent,e.consent,t.event.consent))return gn({ok:!0});p=t.event}if(u?.length&&e.transformers&&Object.keys(e.transformers).length>0){const n=await Mt(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})`:"")),gn({ok:!0,dropped:!0});if(n.stopped)return n.respond&&(f=n.respond),gn({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:Ve()}:n,a=t(r),i=kn(e,a,h);return ln(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]??gn({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 kn(e,bn(e,t),n)}(e,p,h),v=await ln(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 He)throw t;if(t instanceof We){const n=o.id;if(n){e.status.sources[n]||(e.status.sources[n]={count:0,duration:0});const t=e.status.sources[n];t.rejected=(t.rejected??0)+1}return e.logger.warn("invalid event rejected",{error:t.message}),gn({ok:!1,invalid:!0,error:t.message})}return e.status.failed++,e.logger.error("push failed",{...Et(t),event:n.name}),gn({ok:!1})})(),"Push",e.hooks,e.logger);return async(t,o)=>{const r="string"==typeof t.id&&""!==t.id?t:{...t,id:Ve()},s="string"==typeof r.id?r.id:"",{traceId:a,sourceId:i,parentEventId:c}=at(r,o?.ingest,e),u=Date.now(),d=it(e,{stepId:"collector.push",stepType:"collector",phase:"in",eventId:s,now:u,traceId:a,sourceId:i,parentEventId:c});d.inEvent=r,Ue(e,d);try{const t=await n(r,o),d=Date.now(),l=it(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,Ue(e,l),t}catch(t){const n=Date.now(),o=it(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)},Ue(e,o),t}}}function En(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 Sn(e,t){const{cacheConfig:n,cacheStore:o,namespace:r,logger:s,storeId:a,collector:i}=t,c=(e,t)=>{if(!i)return;const n=it(i,{stepId:`store.${a}`,stepType:"store",phase:"in",eventId:"",now:Date.now()});n.meta={op:"cache",cached:"hit"===t,status:t,key:e},nt(i,n)},u={hits:0,misses:0,populates:0,writes:0,deletes:0,inflight_dedups:0},d=n.rules.map(e=>({match:e.match?tt(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=ot(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,rt(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),rt(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,Et(n)):console.warn(o,n)}}function qn(e,t,n){const o=`store.${n}`,r=et(t.get,"StoreGet",e.hooks,e.logger),s=et(t.set,"StoreSet",e.hooks,e.logger),a=et(t.delete,"StoreDelete",e.hooks,e.logger);t.get=async t=>{const n=Date.now(),s=it(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:n});s.meta={op:"get",key:t},Ze(e,s);try{const s=await r(t),a=Date.now(),i=it(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:a});return i.durationMs=a-n,i.meta={op:"get",key:t},Ze(e,i),s}catch(r){const s=Date.now(),a=it(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)},Ze(e,a),r}},t.set=async(t,n,r)=>{const a=Date.now(),i=it(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:a});i.meta={op:"set",key:t},Ze(e,i);try{await s(t,n,r);const i=Date.now(),c=it(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:i});c.durationMs=i-a,c.meta={op:"set",key:t},Ze(e,c)}catch(n){const r=Date.now(),s=it(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)},Ze(e,s),n}},t.delete=async t=>{const n=Date.now(),r=it(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:n});r.meta={op:"delete",key:t},Ze(e,r);try{await a(t);const r=Date.now(),s=it(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:r});s.durationMs=r-n,s.meta={op:"delete",key:t},Ze(e,s)}catch(r){const s=Date.now(),a=it(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)},Ze(e,a),r}}}async function On(e){const t=O({globalsStatic:{},sessionStatic:{},run:!0,queueMax:1e3},e,{merge:!1,extend:!1}),n={level:e.logger?.level,handler:e.logger?.handler},o=j(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=In(s,e=>bn(s,e)),s.command=(i=wn,Je(async(e,t,n)=>await Xe(async()=>await i(a,e,t,n),t=>{if(t instanceof Ye)throw t;return a.status.failed++,a.logger.error("command failed",{...Et(t),command:e}),gn({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 gn({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:St(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=En()),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]=Sn(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&&qn(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=En()),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]=hn(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=$e(r,"Transformer");if(!a.ok){e.logger.warn(`Transformer ${o} invalid (${a.code}): ${a.reason}. Skipping.`);continue}const{config:i}=xt(r,"before"),{config:c}=xt({...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:ye(o),config:p,env:s,reportError:St(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 Ae(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 jn=globalThis;function xn(e){try{const t=jn.window;if(!t)return;t.localStorage.getItem(I)===e&&t.localStorage.removeItem(I)}catch{}}function Cn(e,t){return void 0===t?e:n=>e({...n,release:t})}async function $n(e){e=e||{};const t=await On(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=jn.window,t=jn.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 jn.window?.localStorage.getItem(I)??null}catch{return null}}();if(!r)return;const s=q(r);if(!s)return void(null===t?(e.logger.warn("observe: malformed stored credential cleared"),xn(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{jn.window?.localStorage.setItem(I,e)}catch{}}(r),null!==t&&function(){const e=jn.window,t=jn.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&&(xn(r),a&&e.observers.delete(a))}});a=S(function(e,t){return void 0===t?e:n=>e({...n,flowId:t})}(Cn(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(Cn(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 zt(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 ue(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,...Et(n)})})(),o||(n.config.init=!0,Rt(n)&&await _t(e,n,t))}return await Bt(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 An=async e=>{let t;return{get flow(){return t},trigger:()=>async n=>{if(!t){const n=await $n({...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/walkerOS.json
CHANGED
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.6.
|
|
4
|
+
"version": "4.6.1",
|
|
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.6.
|
|
42
|
+
"@walkeros/core": "4.6.1"
|
|
43
43
|
},
|
|
44
44
|
"devDependencies": {
|
|
45
|
-
"@walkeros/collector": "4.6.
|
|
45
|
+
"@walkeros/collector": "4.6.1"
|
|
46
46
|
},
|
|
47
47
|
"repository": {
|
|
48
48
|
"url": "git+https://github.com/elbwalker/walkerOS.git",
|