@walkeros/collector 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 CHANGED
@@ -1,5 +1,11 @@
1
1
  # @walkeros/collector
2
2
 
3
+ ## 4.6.1
4
+
5
+ ### Patch Changes
6
+
7
+ - @walkeros/core@4.6.1
8
+
3
9
  ## 4.6.0
4
10
 
5
11
  ### Patch Changes
package/dist/index.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})})(s,{Code:()=>a,Commands:()=>i,Const:()=>c,DEFAULT_BREAKER_COOLDOWN_MS:()=>$,DEFAULT_BREAKER_THRESHOLD:()=>_,DEFAULT_DLQ_MAX:()=>B,addDestination:()=>Ue,buildReportError:()=>H,bumpDropped:()=>F,callDestinationOn:()=>Ce,commonHandleCommand:()=>tt,createEvent:()=>ot,createPush:()=>it,createPushResult:()=>Ve,destinationInit:()=>Ge,destinationPush:()=>ze,enrichEvent:()=>rt,ensureDestStatus:()=>K,enterCascade:()=>we,errorMeta:()=>U,extractTransformerNextMap:()=>N,fireCallbacks:()=>Se,flushSourceQueueOn:()=>ne,getCacheStore:()=>V,initDestinations:()=>Ne,initSource:()=>re,initSources:()=>se,isBreakerProbePermitted:()=>R,isRequireSatisfied:()=>ge,isSourceStarted:()=>oe,isStateDelivery:()=>fe,isStatePresent:()=>pe,mergeEnvironments:()=>We,on:()=>Ie,onApply:()=>xe,prepareEvent:()=>nt,processConsent:()=>d,pushToDestinations:()=>He,redeliverStateAtRun:()=>qe,registerDestination:()=>Le,resolveBreakerConfig:()=>M,runCollector:()=>st,runTransformerChain:()=>Z,setMark:()=>he,shouldDeliver:()=>ve,startFlow:()=>Ct,transformerInit:()=>Y,transformerPush:()=>X,walkChain:()=>Q,wrapEnv:()=>b}),module.exports=(e=s,((e,s,a,i)=>{if(s&&"object"==typeof s||"function"==typeof s)for(let c of o(s))r.call(e,c)||c===a||t(e,c,{get:()=>s[c],enumerable:!(i=n(s,c))||i.enumerable});return e})(t({},"__esModule",{value:!0}),e));var a={},i={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"},c={Commands:i,Utils:{Storage:{Cookie:"cookie",Local:"local",Session:"session"}}},u=require("@walkeros/core");function d(e,t){const n={};return Object.entries(t).forEach(([e,t])=>{n[e]=!!t}),e.consent=(0,u.assign)(e.consent,n),{update:n}}var l=require("@walkeros/core"),f=require("@walkeros/core"),p=require("@walkeros/core");require("@walkeros/core");function g(e,t,n){return{traceId:e.source?.trace??t?._meta.trace??n.trace,sourceId:t?._meta.path[0],parentEventId:t?._meta.parentEventId}}function m(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}var h=require("@walkeros/core");function v(e){return"object"==typeof e&&null!==e}var y=8;function w(e,t,n){if(null===e||"object"!=typeof e)return e;if(n>=y)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(w(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:w(s,t,n+1);return r}function b(e){const t=[],n=[],{simulation:o,...r}=e,s=w(r,new WeakMap,0);for(const e of o){const o=(0,h.parseCallPath)(e);if(0===o.length)continue;const r=o.join(".");if(o.length-1>=y){n.push(r);continue}let a=s,i=!0;for(let e=0;e<o.length-1;e++){const t=a[o[e]];if(!v(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}}var k=6;function I(e,t){try{return e[t]}catch{return"[unreadable]"}}function C(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>=k)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(I(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 S(e){return e.map(e=>({fn:e.fn,args:C(e.args),ts:e.ts}))}var E=require("@walkeros/core"),O=require("@walkeros/core"),q=require("@walkeros/core");function x(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 A(e,t,n,o){j.get(e)||(j.set(e,!0),t.warn(n,o))}function D(e){j.delete(e)}var _=5,$=3e4,T=()=>Date.now();function M(e){if(void 0!==e)return"number"==typeof e?{threshold:e,cooldown:$}:{threshold:e.threshold??_,cooldown:e.cooldown??$}}function P(e,t,n,o,r){if("partial"===n)return;const s=function(e,t){return e[t]||(e[t]={state:"closed",consecutiveFailures:0}),e[t]}(e,t);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=T()+r)):void(s.consecutiveFailures>=o&&(s.state="open",s.probing=!1,s.openUntil=T()+r)))}function R(e,t){return!e||("closed"===e.state||"half-open"===e.state||void 0!==e.openUntil&&t>=e.openUntil)}var B=100;function K(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 F(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 U(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 H(e,t,n,o,r){const s=(0,q.stepId)(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??B},c=x(a,[o,r],i);if(c.dropped>0){const t=F(e.status,(0,q.stepId)("destination",n),"dlq",c.dropped);A(a,s,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:n,cap:i.max,droppedCount:t})}else a.length<i.max&&D(a);const u=K(e,n);u.failed++,u.dlqSize=a.length,e.status.failed++;const d=M(t.config.breaker);if(d){const o=t.config.id||n;P(e.status.breakers,(0,q.stepId)("destination",o),"transport-failure",d.threshold,d.cooldown)}}(e,r,n,a,t,o):e.status.failed++,void o.error("report error",{...U(t),event:a.name});e.status.connectionErrors[s]=(e.status.connectionErrors[s]??0)+1,o.error("connection error",U(t))}catch{}}}var G=require("@walkeros/core"),z=require("@walkeros/core");function V(e,t){return e.storeId&&t.stores[e.storeId]?t.stores[e.storeId]:t.stores.__cache}function L(e,t){return e?t.stores[e]:t.stores.__cache}function N(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 W(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 Q(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 Y(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,z.createIngest)(n),config:t.config,env:ee(t.config.env),reportError:H(e,"transformer",n,r)};r.debug("init");const a=await(0,z.useHooks)(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 X(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:{...ee(t.config.env),...s?{respond:s}:{}},reportError:H(e,"transformer",n,i)};i.debug("push",{event:o.name});const u="string"==typeof o.id?o.id:"",{traceId:d,sourceId:l,parentEventId:f}=g(o,r,e),p=Date.now(),h=m(e,{stepId:(0,z.stepId)("transformer",n),stepType:"transformer",phase:"in",eventId:u,now:p,traceId:d,sourceId:l,parentEventId:f});h.inEvent=o,(0,z.emitStep)(e,h);try{const r=await(0,z.useHooks)(t.push,"TransformerPush",e.hooks,e.logger)(o,c),s=Date.now(),a=m(e,{stepId:(0,z.stepId)("transformer",n),stepType:"transformer",phase:"out",eventId:u,now:s,traceId:d,sourceId:l,parentEventId:f});return a.durationMs=s-p,a.outEvent=r,(0,z.emitStep)(e,a),i.debug("push done"),r}catch(t){const o=Date.now(),r=m(e,{stepId:(0,z.stepId)("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)},(0,z.emitStep)(e,r),t}}function J(e,t){return e?{...e,_meta:{...e._meta,path:[...e._meta.path]}}:(0,z.createIngest)(t)}async function Z(e,t,n,o,r,s,a){r||(r=(0,z.createIngest)(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};r&&r._meta&&(r._meta.hops++,r._meta.path.push(o));if(!await(0,z.tryCatchAsync)(Y,t=>{if(t instanceof z.FatalError)throw t;return e.status.failed++,e.logger.scope(`transformer:${s.type||"unknown"}`).error("transformer init failed",{transformer:o,...U(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?(0,z.compileCache)(u):void 0,l=d?V(d,e):void 0,f=s.config?.state?(0,z.compileState)(s.config.state):void 0,p=f?.filter(e=>"get"===e.mode),g=f?.filter(e=>"set"===e.mode),m=async t=>g&&0!==g.length?(0,z.applyState)(g,t=>L(t,e),t,e):t;let h;if(d&&l){const e=(0,z.buildCacheContext)(r,i),t=await(0,z.checkCache)(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&&(h={key:t.key,ttl:t.rule.ttl})}const v=s.config.before;if(v){const n=(0,z.getNextSteps)(v,(0,z.buildCacheContext)(r,i));if(1===n.length){const o=Q(n[0],N(t));if(o.length>0){const n=await Z(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=>(0,z.tryCatchAsync)(Z,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,U(t)),{event:null,respond:void 0}))(e,t,Q(n,N(t)),i,J(r,n),void 0,a)))}p&&p.length>0&&(i=await(0,z.applyState)(p,t=>L(t,e),i,e));const y=await(0,z.tryCatchAsync)(X,t=>(e.logger.scope(`transformer:${s.type||"unknown"}`).error("Push failed",U(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 m(n.event||i),u=J(r,"unknown");if(n.next){const r=(0,z.getNextSteps)(n.next,(0,z.buildCacheContext)(u,o));if(0===r.length)return{event:o,respond:c};if(1===r.length){const n=Q(r[0],N(t));return n.length>0?Z(e,t,n,o,u,c,a):{event:o,respond:c}}return(await Promise.all(r.map(n=>(0,z.tryCatchAsync)(Z,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,U(t)),{event:null,respond:void 0}))(e,t,Q(n,N(t)),o,J(u,n),void 0,a)))).map(e=>({event:e.event,respond:void 0}))}return s.length>0?Z(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 m(n||i),u=(0,z.getNextSteps)(s,(0,z.buildCacheContext)(r,o));if(0===u.length){i=o;continue}if(1===u.length){const n=Q(u[0],N(t));return n.length>0?Z(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=>(0,z.tryCatchAsync)(Z,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,U(t)),{event:null,respond:void 0}))(e,t,Q(n,N(t)),o,J(r,n),void 0,a))),{event:null,respond:void 0}}n&&(i=n)}g&&g.length>0&&(i=await(0,z.applyState)(g,t=>L(t,e),i,e)),h&&l&&(0,z.storeCache)(l,h.key,i,h.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,z.getNextSteps)(s.config.next,(0,z.buildCacheContext)(r,i));if(1===n.length){const o=Q(n[0],N(t));return o.length>0?Z(e,t,o,i,r,c,a):{event:i,respond:c}}return n.length>1?(await Promise.all(n.map(n=>(0,z.tryCatchAsync)(Z,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,U(t)),{event:null,respond:void 0}))(e,t,Q(n,N(t)),i,J(r,n),void 0,a))),{event:null,respond:void 0}):{event:i,respond:c}}}return{event:i,respond:c}}function ee(e){return e&&(0,z.isObject)(e)?e:{}}function te(e){return"string"==typeof e||!(!Array.isArray(e)||!e.every(e=>"string"==typeof e))}async function ne(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)fe(n)&&!ve(e,t,n)||(await(0,G.tryCatchAsync)(t.on,t=>{if(t instanceof G.FatalError)throw t;e.status.failed++,e.logger.scope("source").error("source on flush failed",{sourceId:r,type:n,...U(t)})})(n,s),fe(n)&&he(e,t,n))}function oe(e){return Boolean(e.config.init)&&!e.config.require?.length}async function re(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?(0,G.compileState)(l):void 0,p=u,g=p?(0,G.compileCache)({...p,stop:p.stop??!0}):void 0,m=te(i)?Q(i,N(e.transformers)):void 0,h=te(c)?Q(c,N(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:(0,G.getSpanId)()},d=h??(void 0!==c?(()=>{const t=(0,G.getNextSteps)(c,(0,G.buildCacheContext)(s.ingest));if(0===t.length)return[];return Q(1===t.length?t[0]:t,N(e.transformers))})():[]);let l=[u];if(d.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const n=await Z(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,G.getSpanId)()}:e);else{const e=n.event;l=""===o||"string"==typeof e.id&&""!==e.id?[e]:[{...e,id:o}]}}if(g){const t=V(g,e);if(t){const n=(0,G.buildCacheContext)(s.ingest),o=await(0,G.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,G.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,i=o.rule.update,c={...n,cache:{status:"MISS"}},u=o.key,d=o.rule.ttl,l=n=>{(0,G.storeCache)(t,u,n,d),i?a=(async()=>{const t=await(0,G.applyUpdate)(n,i,c,e);r(t)})():r(n)};s.respond=l}"MISS"!==o.status||g.stop||(0,G.storeCache)(t,o.key,!0,o.rule.ttl)}}}const p=m?{kind:"single",preChain:m}:void 0!==i?(()=>{const t=(0,G.getNextSteps)(i,(0,G.buildCacheContext)(s.ingest));return 0===t.length?{kind:"single",preChain:[]}:1===t.length?{kind:"single",preChain:Q(t[0],N(e.transformers))}:{kind:"many",branches:t.map(t=>Q(t,N(e.transformers)))}})():{kind:"single",preChain:[]};f&&f.length>0&&(l=await Promise.all(l.map(t=>(0,G.applyState)(f,t=>L(t,e),t,e))));let w={ok:!0};for(const n of l)"many"===p.kind?(await Promise.all(p.branches.map((a,i)=>(0,G.tryCatchAsync)(async()=>v(n,{...o,id:t,ingest:J(s.ingest,`${t}.${i}`),respond:void 0,mapping:r,preChain:a}),t=>(e.logger.scope("source:many").error(`many branch ${i} failed`,U(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=(0,G.createIngest)(t),s=(0,G.parseTraceparent)((0,G.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 a=await(0,G.getMappingValue)(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:(0,G.createIngest)(t),respond:void 0};return w(e,n,o)},command:e.command,sources:e.sources,elb:e.elb,logger:k},C={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:H(e,"source",t,k)},S=await(0,G.tryCatchAsync)(o,n=>{if(n instanceof G.FatalError)throw n;e.status.failed++,e.logger.scope("source").error("source factory failed",{sourceId:t,...U(n)})})(C);if(!S)return;const E=S.type||"unknown",O=e.logger.scope(E).scope(t);return I.logger=O,a&&(S.config={...S.config,primary:a}),S}async function se(e,t={}){const n={};for(const[o,r]of Object.entries(t)){const t=await re(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,G.tryCatchAsync)(n.init.bind(n),n=>{if(n instanceof G.FatalError)throw n;o=!0,e.status.failed++,e.logger.scope("source").error("source init failed",{sourceId:t,...U(n)})})(),o||(n.config.init=!0,oe(n)&&await ne(e,n,t))}return await ae(e),n}async function ae(e){for(const[t,n]of Object.entries(e.sources)){if(oe(n))continue;const o=n.config.require;if(!o?.length)continue;const r=o.filter(t=>!ge(e,t));r.length!==o.length&&(n.config.require=r,oe(n)&&await ne(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=>!ge(e,t));if(n.config&&(n.config.require=r),r.length>0)continue;delete e.pending.destinations[t];const s=Le(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 ce=!1;function ue(){ce||(ce=!0,"undefined"!=typeof console&&"function"==typeof console.warn&&console.warn("walkerOS: ignored an on-dispatch call with a non-collector argument"))}function de(e,t,n,o){if(n instanceof E.FatalError)throw n;e.logger.scope("on").error("on callback failed",{kind:t,...o,...U(n)})}var le=[c.Commands.Consent,c.Commands.User,c.Commands.Globals,c.Commands.Custom];function fe(e){return le.includes(e)}function pe(e,t){switch(t){case c.Commands.Consent:return Object.keys(e.consent).length>0;case c.Commands.User:return Object.keys(e.user).length>0;case c.Commands.Globals:return Object.keys(e.globals).length>0;case c.Commands.Custom:return Object.keys(e.custom).length>0;default:return!1}}function ge(e,t){switch(t){case c.Commands.Consent:case c.Commands.User:case c.Commands.Globals:case c.Commands.Custom:return pe(e,t);case c.Commands.Run:case c.Commands.Ready:return!0===e.allowed;default:return e.seenEvents.has(String(t))}}function me(e,t){return e.cellVersion[String(t)]??0}function he(e,t,n){let o=e.delivery.get(t);o||(o={},e.delivery.set(t,o)),o[String(n)]=me(e,n)}function ve(e,t,n){return e.allowed&&me(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)}var ye=8;function we(e){return e.cascade?()=>{}:(e.cascade={counts:new WeakMap},()=>{e.cascade=void 0})}function be(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<=ye||(a===ye+1&&e.logger.error("state delivery did not converge",{type:s}),!1)}function ke(e,t){return{collector:e,logger:e.logger.scope("on").scope(String(t))}}async function Ie(e,t,n){if(!ie(e))return void ue();const o=e.on,r=o[t]||[],s=(0,E.isArray)(n)?n:[n];s.forEach(e=>{r.push(e)}),o[t]=r,Se(e,t,s)}function Ce(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:We(t.env,t.config.env),reportError:H(e,"destination",n,a,t)};(0,O.tryCatch)(t.on,t=>de(e,"destination",t,{destId:n,type:o}))(o,i)}function Se(e,t,n,o){if(!ie(e))return void ue();const r=Ee(e,t,o);if(n.length)switch(t){case c.Commands.Consent:!function(e,t,n){const o=n||e.consent,r=ke(e,c.Commands.Consent);t.forEach(t=>{ve(e,t,c.Commands.Consent)&&be(e,t,c.Commands.Consent)&&(Object.keys(o).filter(e=>e in t).forEach(n=>{(0,O.tryCatch)(t[n],t=>de(e,"consent",t,{key:n}))(o,r)}),he(e,t,c.Commands.Consent))})}(e,n,o);break;case c.Commands.Ready:!function(e,t){if(!e.allowed)return;const n=ke(e,c.Commands.Ready);t.forEach(t=>{(0,O.tryCatch)(t,t=>de(e,"ready",t))(void 0,n)})}(e,n);break;case c.Commands.Run:!function(e,t){if(!e.allowed)return;const n=ke(e,c.Commands.Run);t.forEach(t=>{(0,O.tryCatch)(t,t=>de(e,"run",t))(void 0,n)})}(e,n);break;case c.Commands.Session:!function(e,t){if(!e.session)return;const n=ke(e,c.Commands.Session);t.forEach(t=>{(0,O.tryCatch)(t,t=>de(e,"session",t))(e.session,n)})}(e,n);break;default:{const o=ke(e,t),s=fe(t);n.forEach(n=>{"function"==typeof n&&(s&&!ve(e,n,t)||s&&!be(e,n,t)||((0,O.tryCatch)(n,n=>de(e,"generic",n,{type:t}))(r,o),s&&he(e,n,t)))});break}}}function Ee(e,t,n){switch(t){case c.Commands.Consent:return n||e.consent;case c.Commands.Session:return e.session;case c.Commands.User:return n||e.user;case c.Commands.Custom:return n||e.custom;case c.Commands.Globals:return n||e.globals;case c.Commands.Config:return n||e.config;default:return}}async function Oe(e,t,n,o,r){if(!t.on)return!1;if(fe(o)&&!ve(e,t,o))return!1;if(fe(o)&&!be(e,t,o))return!1;const s=await(0,O.tryCatchAsync)(t.on,t=>de(e,"source",t,{sourceId:n,type:o}))(o,r);return fe(o)&&he(e,t,o),!1===s}async function qe(e){if(ie(e))for(const t of le){if(!pe(e,t))continue;const n=Ee(e,t);Se(e,t,e.on[t]||[]);for(const[o,r]of Object.entries(e.sources))oe(r)&&await Oe(e,r,o,t,n)}else ue()}async function xe(e,t,n,o){if(!ie(e))return ue(),!0;e.seenEvents.add(String(t));let r=n||[];n||(r=e.on[t]||[]);const s=Ee(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)}if(o.on)if(oe(o)){await Oe(e,o,n,t,s)&&(a=!0)}else 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});Ce(e,o,n,t,s)}});for(const[t,n]of Object.entries(e.sources))oe(n)&&n.queueOn?.length&&await ne(e,n,t);const i=Object.values(e.sources).some(e=>!oe(e)&&e.config.require?.length);return(Object.keys(e.pending.destinations).length>0||i)&&await ae(e),Se(e,t,r,o),!a}var je=1e3,Ae=1e3,De=3e4,_e=1e4;function $e(e){return"number"==typeof e&&e>0?e:_e}var Te=class extends Error{constructor(e){super(e),this.name="DestinationTimeoutError"}};function Me(e,t,n){let o;const r=new Promise((e,r)=>{o=setTimeout(()=>r(new Te(n)),t)});return Promise.race([e,r]).finally(()=>{o&&clearTimeout(o)})}var Pe=Object.freeze({batched:!0});function Re(e){return e===Pe}var Be=" batch-all";function Ke(e){return void 0===e?{}:"number"==typeof e?{wait:e}:{wait:e.wait,size:e.size,age:e.age}}function Fe(e,t,n){if(!e)return[];if(Array.isArray(e)&&e.every(e=>"string"==typeof e))return Q(e,t);if("string"==typeof e)return Q(e,t);const o=(0,p.getNextSteps)(e,(0,p.buildCacheContext)(n));return 0===o.length?[]:1===o.length?Q(o[0],t):Q(o,t)}async function Ue(e,t){const{code:n,config:o={},env:r={},before:s,next:a,cache:i,state:c}=t;if(!(0,p.isFunction)(n.push))return Ve({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=(0,p.getId)(5,"abcdefghijklmnopqrstuvwxyz")}while(e.destinations[l]||e.pending.destinations[l]);if(d.require?.length){e.pending.destinations[l]=t,await ae(e);const n=e.destinations[l];return n?He(e,void 0,{},{[l]:n}):Ve({ok:!0})}const f={...n,config:d,env:We(n.env,r)};return e.destinations[l]=f,!1!==f.config.queue&&(f.queuePush=[...e.queue]),He(e,void 0,{},{[l]:f})}async function He(e,t,n={},o){const{allowed:r,consent:s,user:a}=e;if(!r)return Ve({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=x(e.queue,t,{max:n});if(o.dropped>0){const t=F(e.status,(0,p.stepId)("collector"),"queue",o.dropped);A(e.queue,e.logger,"collector.queue overflow; oldest events dropped",{buffer:"queue",cap:n,droppedCount:t})}else e.queue.length<n&&D(e.queue);e.status.in++}o||(o=e.destinations);const i=e.transformers?N(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,p.stepId)("destination",c),d=M(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=T();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&&P(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 h=(r.queuePush||[]).map(e=>({...e,consent:s}));r.queuePush=[],t&&h.push((0,p.clone)(t));const v=n.ingest?{...n.ingest,_meta:{...n.ingest._meta,path:[...n.ingest._meta.path]}}:(0,p.createIngest)("unknown");if(!h.length&&!r.queueOn?.length)return f(),{id:o,destination:r,skipped:!0};if(!h.length&&r.queueOn?.length){if(!(0,p.getGrantedConsent)(r.config.consent,s))return f(),{id:o,destination:r,skipped:!0};let t=!1;try{t=await Ge(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 y=[],w=h.filter(t=>{const n=(0,p.getGrantedConsent)(r.config.consent,s,t.consent);if(n)return t.consent=n,y.push(t),!1;const a=m(e,{stepId:(0,p.stepId)("destination",o),stepType:"destination",phase:"skip",eventId:"string"==typeof t.id?t.id:"",now:Date.now(),...g(t,v,e)});return a.skipReason="consent",s&&(a.consent={...s}),r.config.consent&&(a.meta={required:{...r.config.consent}}),(0,p.emitStep)(e,a),!0});if(w.length>0){const t=r.queuePush,n=r.config.id||o,s={max:r.config.queueMax??je};let a=0;for(const e of w){a+=x(t,e,s).dropped}if(a>0){K(e,n);const o=F(e.status,(0,p.stepId)("destination",n),"queue",a);A(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&&D(t)}if(!y.length)return f(),{id:o,destination:r,queue:h};let b,k,I=!1;try{I=await Ge(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(!I)return f(),{id:o,destination:r,queue:h};r.dlq||(r.dlq=[]);const C=Fe(r.config.before,i,v),S=r.config.next,E=r.config?.cache,O=E?(0,p.compileCache)(E):void 0,q=O?V(O,e):void 0,j=r.config?.state?(0,p.compileState)(r.config.state):void 0,_=j?.filter(e=>"get"===e.mode),$=j?.filter(e=>"set"===e.mode);let R=0,H=0,G=0;return await Promise.all(y.map(async t=>{let s,c;if(t.user=(0,p.assign)(a,t.user),O?.stop&&q){const e=(0,p.buildCacheContext)(v,t),n=await(0,p.checkCache)(O,q,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(C.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const r=await Z(e,e.transformers,C,t,v,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(O&&!O.stop&&q){const e=(0,p.buildCacheContext)(v,t),n=await(0,p.checkCache)(O,q,e);if("HIT"===n?.status)return!1;"MISS"===n?.status&&(s={key:n.key,ttl:n.rule.ttl},a=!0)}_&&_.length>0&&t&&(t=await(0,p.applyState)(_,t=>L(t,e),t,e));const u=Date.now();let l=!1;const f=await(0,p.tryCatchAsync)(ze,n=>{const s=r.type||"unknown";e.logger.scope(s).error("Push failed",{...U(n),event:t.name}),b=n,l=!0;const a=r.dlq,i=r.config.id||o,c={max:r.config.dlqMax??B},u=x(a,[t,n],c);if(u.dropped>0){K(e,i);const t=F(e.status,(0,p.stepId)("destination",i),"dlq",u.dropped);A(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&&D(a)})(e,r,o,t,v,d);if(R+=Date.now()-u,s&&q&&void 0===r.config.mock&&(a?(0,p.storeCache)(q,s.key,f??!0,s.ttl):void 0===c&&(c=f??!0)),!l&&!Re(f)&&$&&$.length>0&&t&&(t=await(0,p.applyState)($,t=>L(t,e),t,e)),void 0===f||Re(f)||(k=f),Re(f)&&H++,!l&&S){void 0!==f&&(v._response=f);const n=Fe(S,i,v);if(n.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const r=await Z(e,e.transformers,n,t,v,d,`destination.${o}.next`);r.respond&&(d=r.respond)}}return!0};for(const e of u)await l(e,s)&&G++;return s&&q&&void 0!==c&&void 0===r.config.mock&&(0,p.storeCache)(q,s.key,c,s.ttl),t})),{id:o,destination:r,error:b,response:k,totalDuration:R,batchedCount:H,allowedCount:y.length,pushedCount:G,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};K(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?(0,p.stepId)("destination",t.canonicalId):void 0,c=t=>{a&&i&&P(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 Ve({event:t,...Object.keys(u).length&&{done:u},...Object.keys(d).length&&{queued:d},...Object.keys(l).length&&{failed:l}})}async function Ge(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:We(t.env,t.config.env),reportError:H(e,"destination",n,s,t)};s.debug("init");const i=Date.now();let c;(0,p.emitStep)(e,m(e,{stepId:(0,p.stepId)("destination",n),stepType:"destination",phase:"init",eventId:"",now:i}));try{c=await(0,p.useHooks)(t.init,"DestinationInit",e.hooks,e.logger)(a)}catch(t){const o=Date.now(),r=m(e,{stepId:(0,p.stepId)("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)},(0,p.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)Ce(e,t,n,r,s)}s.debug("init done")}return!0}async function ze(e,t,n,o,r,s){const{config:a}=t,i=await(0,p.processEventMapping)(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:{...We(t.env,a.env),...s?{respond:s}:{}},reportError:H(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,h=f?i.mappingKey||"* *":Be;if((f||void 0!==a.batch)&&t.pushBatch&&void 0===a.mock){if(t.batches=t.batches||{},!t.batches[h]){const o={key:h,entries:[],events:[],data:[]},r=Ke(l?.batch),s=Ke(a.batch),i=r.wait??s.wait??De,c=r.size??s.size??Ae,d=r.age??s.age??De,v=We(t.env,a.env),y=async()=>{const o=t.batches[h],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:{...v,...i.respond?{respond:i.respond}:{}},reportError:H(e,"destination",n,u,t)};u.debug("push batch",{events:s.entries.length});const d=t.config.id||n,l=K(e,d),f=M(t.config.breaker),y=(0,p.stepId)("destination",d),w=t=>{f&&P(e.status.breakers,y,t,f.threshold,f.cooldown)},b=Date.now(),k=new Map;let I,C=!1;const S=n=>{const o=t.dlq=t.dlq||[],r={max:t.config.dlqMax??B};let s=0;for(const e of n){s+=x(o,e,r).dropped}if(s>0){const t=F(e.status,(0,p.stepId)("destination",d),"dlq",s);A(o,u,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:d,cap:r.max,droppedCount:t})}else o.length<r.max&&D(o);l.failed+=n.length,l.dlqSize=o.length,e.status.failed+=n.length};let E=s.entries.length;const O=$e(a.timeout),q=await(0,p.tryCatchAsync)((o,r)=>Me(Promise.resolve((0,p.useHooks)(t.pushBatch,"DestinationPushBatch",e.hooks,e.logger)(o,r)),O,`Destination "${n}" batch delivery timed out after ${O}ms`),e=>{E=0,C=!0,I=e,S(s.entries.map(t=>[t.event,e])),w("transport-failure"),u.error("Push batch failed",{error:e instanceof Error?e.message:String(e),entries:s.entries.length})})(s,c);if(j=q,(0,p.isObject)(j)&&Array.isArray(j.failed)&&q.failed.length>0){const e=[];for(const t of q.failed){const n=s.entries[t.index];if(!n||k.has(t.index))continue;const o=t.error??new Error(`Push batch entry ${t.index} failed (no per-row error provided)`);k.set(t.index,o),e.push([n.event,o])}e.length>0&&(S(e),E=Math.max(0,s.entries.length-e.length),u.error("Push batch partial failure",{failed:e.length,delivered:E,entries:s.entries.length}))}var j;const _=Date.now();s.entries.forEach((t,o)=>{const r=C||k.has(o),a=g(t.event,t.ingest,e),i=m(e,{stepId:(0,p.stepId)("destination",n),stepType:"destination",phase:r?"error":"flush",eventId:"string"==typeof t.event.id?t.event.id:"",now:_,traceId:a.traceId,sourceId:a.sourceId,parentEventId:a.parentEventId});if(i.batch={size:s.entries.length,index:o},i.durationMs=_-b,r){const e=C?I:k.get(o);i.error=e instanceof Error?{name:e.name,message:e.message}:{message:String(e)}}(0,p.emitStep)(e,i)}),u.debug("push batch done"),l.inFlightBatch=Math.max(0,(l.inFlightBatch??0)-s.entries.length),E>0&&(l.count+=E,l.lastAt=Date.now(),e.status.out+=E,w("success"))},w=(0,p.debounce)(y,{wait:i,size:c,age:d});t.batches[h]={batched:o,isDefault:!f,batchFn:()=>{w()},flush:async()=>{await w.flush()}}}const c=t.batches[h];c.batched.entries.push({event:i.event,ingest:r,respond:s,rule:l,data:i.data}),c.batched.events.push(i.event),(0,p.isDefined)(i.data)&&c.batched.data.push(i.data);const d="string"==typeof i.event.id?i.event.id:"",v=g(o,r,e),y=Date.now(),w=m(e,{stepId:(0,p.stepId)("destination",n),stepType:"destination",phase:"in",eventId:d,now:y,traceId:v.traceId,sourceId:v.sourceId,parentEventId:v.parentEventId});i.mappingKey&&(w.mappingKey=i.mappingKey),i.event.consent&&(w.consent={...i.event.consent}),w.inEvent=i.event,(0,p.emitStep)(e,w);const b=m(e,{stepId:(0,p.stepId)("destination",n),stepType:"destination",phase:"out",eventId:d,now:y,traceId:v.traceId,sourceId:v.sourceId,parentEventId:v.parentEventId});i.mappingKey&&(b.mappingKey=i.mappingKey),b.outEvent=i.event,b.batch={size:c.batched.entries.length,index:c.batched.entries.length-1},(0,p.emitStep)(e,b);const k=t.config.id||n,I=K(e,k);return I.inFlightBatch=(I.inFlightBatch??0)+1,c.batchFn(),Pe}{let s;if(u.debug("push",{event:i.event.name}),"trace"===e.observeLevel?.()&&Array.isArray(t.calls)&&t.calls.length>0){const e=b({...d.env,simulation:t.calls});d.env=e.wrappedEnv,s=e.calls,e.unresolved.length>0&&(e.wrappedEnv[p.OBSERVE_ENV_KEY]={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:h}=g(o,r,e),v=Date.now(),y=m(e,{stepId:(0,p.stepId)("destination",n),stepType:"destination",phase:"in",eventId:c,now:v,traceId:l,sourceId:f,parentEventId:h});i.mappingKey&&(y.mappingKey=i.mappingKey),i.event.consent&&(y.consent={...i.event.consent}),y.inEvent=i.event,(0,p.emitStep)(e,y);try{const o=$e(a.timeout),r=await Me(Promise.resolve((0,p.useHooks)(t.push,"DestinationPush",e.hooks,e.logger)(i.event,d)),o,`Destination "${n}" delivery timed out after ${o}ms`),g=Date.now(),y=m(e,{stepId:(0,p.stepId)("destination",n),stepType:"destination",phase:"out",eventId:c,now:g,traceId:l,sourceId:f,parentEventId:h});return y.durationMs=g-v,y.outEvent=i.event,s&&s.length>0&&(y.calls=S(s)),(0,p.isDefined)(r)&&(y.meta={...y.meta,response:r}),i.mappingKey&&(y.mappingKey=i.mappingKey),(0,p.emitStep)(e,y),u.debug("push done"),r}catch(t){const o=Date.now(),r=m(e,{stepId:(0,p.stepId)("destination",n),stepType:"destination",phase:"error",eventId:c,now:o,traceId:l,sourceId:f,parentEventId:h});throw r.durationMs=o-v,r.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},s&&s.length>0&&(r.calls=S(s)),i.mappingKey&&(r.mappingKey=i.mappingKey),(0,p.emitStep)(e,r),t}}}function Ve(e){return{ok:!e?.failed,...e}}function Le(e){const{code:t,config:n={},env:o={},cache:r,state:s}=e,{config:a}=W(e,"before"),{config:i}=W({...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=We(t.env,o);return{...t,config:c,env:u}}async function Ne(e,t={}){const n={};for(const[o,r]of Object.entries(t))r.config?.require?.length?e.pending.destinations[o]=r:n[o]=Le(r);return n}function We(e,t){return e||t?t?e&&(0,p.isObject)(e)&&(0,p.isObject)(t)?{...e,...t}:t:e:{}}var Qe=require("@walkeros/core"),Ye=require("@walkeros/core"),Xe=5e3;async function Je(e){const t=e.logger;await Ze(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`)),Xe)})])}catch(t){r.error(`destination '${e}' batch flush failed: ${t}`)}finally{n&&clearTimeout(n)}})});await Promise.allSettled(n)}(e.destinations,t),await Ze(e.destinations,"destination",t),await Ze(e.transformers,"transformer",t),await Ze(e.stores,"store",t)}async function Ze(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`)),Xe)})])}catch(n){a.error(`${t} '${e}' destroy failed: ${n}`)}finally{c&&clearTimeout(c)}});await Promise.allSettled(o)}function et(e,t){e.stateVersion++,e.cellVersion[t]=e.stateVersion}async function tt(e,t,n){let o,r,s=!1;const a=we(e);try{return await async function(){switch(t){case c.Commands.Config:(0,Ye.isObject)(n)&&((0,Qe.assign)(e.config,n,{shallow:!1}),r=n,s=!0);break;case c.Commands.Consent:if((0,Ye.isObject)(n)){const{update:t}=d(e,n);et(e,c.Commands.Consent),r=t,s=!0}break;case c.Commands.Custom:(0,Ye.isObject)(n)&&(e.custom=(0,Qe.assign)(e.custom,n),et(e,c.Commands.Custom),r=n,s=!0);break;case c.Commands.Destination:(0,Ye.isObject)(n)&&"code"in n&&(0,Ye.isObject)(n.code)&&(o=await Ue(e,n));break;case c.Commands.Globals:(0,Ye.isObject)(n)&&(e.globals=(0,Qe.assign)(e.globals,n),et(e,c.Commands.Globals),r=n,s=!0);break;case c.Commands.Hook:if((0,Ye.isObject)(n)&&(0,Qe.isString)(n.name)&&(0,Qe.isFunction)(n.fn)){const{name:t,fn:o}=n;e.hooks[t]=o,r=n,s=!0}break;case c.Commands.On:if((0,Ye.isObject)(n)&&(0,Qe.isString)(n.type)){const{type:t,rules:o}=n;await Ie(e,t,o)}break;case c.Commands.Ready:s=!0;break;case c.Commands.Run:o=await st(e,n),s=!0;break;case c.Commands.Session:s=!0;break;case c.Commands.Shutdown:e.hasShutdown||(e.hasShutdown=!0,await Je(e));break;case c.Commands.User:(0,Ye.isObject)(n)&&((0,Qe.assign)(e.user,n,{shallow:!1}),et(e,c.Commands.User),r=n,s=!0);break;default:return e.logger.warn("unknown command",{command:t}),Ve({ok:!1})}if(s){await xe(e,t,void 0,r);const n=await He(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||Ve({ok:!0})}()}finally{a()}}function nt(e,t){return{timing:Math.round((Date.now()-e.timing)/10)/100,source:{type:"collector",schema:"4"},...t}}function ot(e,t,n){const o=t.name;if("string"!=typeof o)throw new Qe.InvalidEventError(void 0===o?"Event name is required":"Event name is invalid");if(!o)throw new Qe.InvalidEventError("Event name is required");const[r,s]=o.split(" ");if(!r||!s)throw new Qe.InvalidEventError("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:m=(0,Qe.getSpanId)(),trigger:h="",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),C=k.trace??n?._meta.trace??e.trace,S={...k,count:I};void 0!==C&&(S.trace=C);const E=e.name??k.platform??"default",O=e.release??"4.6.0";S.release={...k.release,[E]:O};return{name:i,data:c,context:u,globals:(0,Qe.assign)(e.globals,d),custom:l,user:f,nested:p,consent:g,id:m,trigger:h,entity:v,action:y,timestamp:a,timing:w,source:S}}function rt(e,t,n){return ot(e,nt(e,t),n)}async function st(e,t){e.allowed=!0,e.timing=Date.now(),e.trace=(0,Qe.getTraceId)(),e.count=0,t&&(t.consent&&(e.consent=(0,Qe.assign)(e.consent,t.consent),et(e,c.Commands.Consent)),t.user&&(e.user=(0,Qe.assign)(e.user,t.user),et(e,c.Commands.User)),t.globals&&(e.globals=(0,Qe.assign)(e.config.globalsStatic||{},t.globals),et(e,c.Commands.Globals)),t.custom&&(e.custom=(0,Qe.assign)(e.custom,t.custom),et(e,c.Commands.Custom))),Object.values(e.destinations).forEach(e=>{e.queuePush=[]}),e.queue=[],e.round++,await ae(e),await qe(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 He(e);if(n)return r;const s={...r.failed??{},...o};return{...r,ok:!1,...Object.keys(s).length>0?{failed:s}:{}}}var at=require("@walkeros/core");function it(e,t){const n=(0,at.useHooks)(async(n,o={})=>await(0,at.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=x(e.preRunQueue,{event:n,options:o},{max:t});if(r.dropped>0){const n=F(e.status,"collector.preRun","queue",r.dropped);A(e.preRunQueue,e.logger,"collector.preRunQueue overflow; oldest events dropped",{buffer:"queue",cap:t,droppedCount:n})}else e.preRunQueue.length<t&&D(e.preRunQueue);return e.logger.debug("event held until run",{name:n.name,dropped:r.dropped}),Ve({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,m=a??(0,at.createIngest)(s||"unknown");if(c){const t=await(0,at.processEventMapping)(p,c,e);if(t.ignore)return Ve({ok:!0});if(c.consent){if(!(0,at.getGrantedConsent)(c.consent,e.consent,t.event.consent))return Ve({ok:!0})}p=t.event}if(u?.length&&e.transformers&&Object.keys(e.transformers).length>0){const n=await Z(e,e.transformers,u,p,m,f,s?`source.${s}.next`:void 0);if(null===n.event)return e.logger.debug("Event dropped by transformer chain"+(n.droppedBy?` (${n.droppedBy})`:"")),Ve({ok:!0,dropped:!0});if(n.stopped)return n.respond&&(f=n.respond),Ve({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:(0,at.getSpanId)()}:n,a=t(r),i=ot(e,a,m);return He(e,i,{id:s,ingest:m,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]??Ve({ok:!0})}p=""===o||"string"==typeof n.event.id&&""!==n.event.id?n.event:{...n.event,id:o}}const h=rt(e,p,m),v=await He(e,h,{id:s,ingest:m,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 at.FatalError)throw t;if(t instanceof at.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}),Ve({ok:!1,invalid:!0,error:t.message})}return e.status.failed++,e.logger.error("push failed",{...U(t),event:n.name}),Ve({ok:!1})})(),"Push",e.hooks,e.logger);return async(t,o)=>{const r="string"==typeof t.id&&""!==t.id?t:{...t,id:(0,at.getSpanId)()},s="string"==typeof r.id?r.id:"",{traceId:a,sourceId:i,parentEventId:c}=g(r,o?.ingest,e),u=Date.now(),d=m(e,{stepId:"collector.push",stepType:"collector",phase:"in",eventId:s,now:u,traceId:a,sourceId:i,parentEventId:c});d.inEvent=r,(0,at.emitStep)(e,d);try{const t=await n(r,o),d=Date.now(),l=m(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,(0,at.emitStep)(e,l),t}catch(t){const n=Date.now(),o=m(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)},(0,at.emitStep)(e,o),t}}}var ct=require("@walkeros/core");var ut=require("@walkeros/core"),dt=1e4,lt=6e4,ft=.8;function pt(e={}){const t=e.maxEntries??dt,n=e.lowWaterMark??ft,o=e.sweepIntervalMs??lt,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;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());return{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()}}}var gt=require("@walkeros/core");function mt(e,t){const{cacheConfig:n,cacheStore:o,namespace:r,logger:s,storeId:a,collector:i}=t,c=(e,t)=>{if(!i)return;const n=m(i,{stepId:`store.${a}`,stepType:"store",phase:"in",eventId:"",now:Date.now()});n.meta={op:"cache",cached:"hit"===t,status:t,key:e},(0,gt.emitStep)(i,n)},u={hits:0,misses:0,populates:0,writes:0,deletes:0,inflight_dedups:0},d=n.rules.map(e=>({match:e.match?(0,gt.compileMatcher)(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=(0,gt.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 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,(0,gt.wrapCacheEnvelope)(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),(0,gt.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(${a}): cache ${e} failed for "${t}"; backing succeeded, continuing`;s?s.warn(o,U(n)):console.warn(o,n)}}function ht(e,t,n){const o=`store.${n}`,r=(0,ut.useHooks)(t.get,"StoreGet",e.hooks,e.logger),s=(0,ut.useHooks)(t.set,"StoreSet",e.hooks,e.logger),a=(0,ut.useHooks)(t.delete,"StoreDelete",e.hooks,e.logger);t.get=async t=>{const n=Date.now(),s=m(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:n});s.meta={op:"get",key:t},(0,ut.emitStep)(e,s);try{const s=await r(t),a=Date.now(),i=m(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:a});return i.durationMs=a-n,i.meta={op:"get",key:t},(0,ut.emitStep)(e,i),s}catch(r){const s=Date.now(),a=m(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)},(0,ut.emitStep)(e,a),r}},t.set=async(t,n,r)=>{const a=Date.now(),i=m(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:a});i.meta={op:"set",key:t},(0,ut.emitStep)(e,i);try{await s(t,n,r);const i=Date.now(),c=m(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:i});c.durationMs=i-a,c.meta={op:"set",key:t},(0,ut.emitStep)(e,c)}catch(n){const r=Date.now(),s=m(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)},(0,ut.emitStep)(e,s),n}},t.delete=async t=>{const n=Date.now(),r=m(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:n});r.meta={op:"delete",key:t},(0,ut.emitStep)(e,r);try{await a(t);const r=Date.now(),s=m(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:r});s.durationMs=r-n,s.meta={op:"delete",key:t},(0,ut.emitStep)(e,s)}catch(r){const s=Date.now(),a=m(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)},(0,ut.emitStep)(e,a),r}}}async function vt(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:H(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=pt()),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]=mt(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&&ht(e,o,t);return n}async function yt(e){const t=(0,f.assign)({globalsStatic:{},sessionStatic:{},run:!0,queueMax:1e3},e,{merge:!1,extend:!1}),n={level:e.logger?.level,handler:e.logger?.handler},o=(0,f.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};void 0!==e.name&&(s.name=e.name),void 0!==e.release&&(s.release=e.release),s.push=it(s,e=>nt(s,e)),s.command=function(e,t){return(0,ct.useHooks)(async(n,o,r)=>await(0,ct.tryCatchAsync)(async()=>await t(e,n,o,r),t=>{if(t instanceof ct.FatalError)throw t;return e.status.failed++,e.logger.error("command failed",{...U(t),command:n}),Ve({ok:!1})})(),"Command",e.hooks,e.logger)}(s,tt),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 Ve({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 a=e.stores||{};return s.stores=await vt(s,a),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)}}}(a,s.stores,e),s.stores.__cache||(s.stores.__cache=pt()),s.destinations=await Ne(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=(0,z.validateStepEntry)(r,"Transformer");if(!a.ok){e.logger.warn(`Transformer ${o} invalid (${a.code}): ${a.reason}. Skipping.`);continue}const{config:i}=W(r,"before"),{config:c}=W({...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),m={collector:e,logger:g,id:o,ingest:(0,z.createIngest)(o),config:p,env:s,reportError:H(e,"transformer",o,g)},h=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,z.processEventMapping)(n,t,e.collector);return!o.ignore&&{event:o.event}}}}return{type:"pass",config:e.config,push:e=>({event:e})}}),v=await h(m);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 wt=globalThis;function bt(e){try{const t=wt.window;if(!t)return;t.localStorage.getItem(l.OBSERVE_STORAGE_KEY)===e&&t.localStorage.removeItem(l.OBSERVE_STORAGE_KEY)}catch{}}function kt(e,t){return void 0===t?e:n=>e({...n,release:t})}function It(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=wt.window,t=wt.URLSearchParams;if(!e||!t)return null;try{const n=new t(e.location.search.replace(/^\?/,"")).getAll(l.OBSERVE_STORAGE_KEY);return n.length>0?n[n.length-1]??null:null}catch{return null}}(),r=t??function(){try{return wt.window?.localStorage.getItem(l.OBSERVE_STORAGE_KEY)??null}catch{return null}}();if(!r)return;const s=(0,l.parseObserveCredential)(r);if(!s)return void(null===t?(e.logger.warn("observe: malformed stored credential cleared"),bt(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{wt.window?.localStorage.setItem(l.OBSERVE_STORAGE_KEY,e)}catch{}}(r),null!==t&&function(){const e=wt.window,t=wt.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(l.OBSERVE_STORAGE_KEY);const u=c.toString();e.history.replaceState({},"",`${i}${u?`?${u}`:""}${r}`)}catch{}}();const i=(0,l.createBatchedPoster)({url:`${n.url}/ingest/${s.ses}`,token:s.secret,headers:{"X-Walkeros-Binding":n.binding},onStatus:t=>{401===t&&(bt(r),a&&e.observers.delete(a))}});a=(0,l.createTelemetryObserver)(function(e,t){return void 0===t?e:n=>e({...n,flowId:t})}(kt(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((0,l.createTelemetryObserver)(kt((0,l.createBatchedPoster)({url:`${n.url}/ingest/${n.sessionId}`,token:n.token}),e.release),{flowId:o,level:n.level,sample:n.sample}))}async function Ct(e){e=e||{};const t=await yt(e);It(t,e),await se(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}}//# sourceMappingURL=index.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})})(s,{Code:()=>a,Commands:()=>i,Const:()=>c,DEFAULT_BREAKER_COOLDOWN_MS:()=>$,DEFAULT_BREAKER_THRESHOLD:()=>_,DEFAULT_DLQ_MAX:()=>B,addDestination:()=>Ue,buildReportError:()=>H,bumpDropped:()=>F,callDestinationOn:()=>Ce,commonHandleCommand:()=>tt,createEvent:()=>ot,createPush:()=>it,createPushResult:()=>Ve,destinationInit:()=>Ge,destinationPush:()=>ze,enrichEvent:()=>rt,ensureDestStatus:()=>K,enterCascade:()=>we,errorMeta:()=>U,extractTransformerNextMap:()=>N,fireCallbacks:()=>Se,flushSourceQueueOn:()=>ne,getCacheStore:()=>V,initDestinations:()=>Ne,initSource:()=>re,initSources:()=>se,isBreakerProbePermitted:()=>R,isRequireSatisfied:()=>ge,isSourceStarted:()=>oe,isStateDelivery:()=>fe,isStatePresent:()=>pe,mergeEnvironments:()=>We,on:()=>Ie,onApply:()=>xe,prepareEvent:()=>nt,processConsent:()=>d,pushToDestinations:()=>He,redeliverStateAtRun:()=>qe,registerDestination:()=>Le,resolveBreakerConfig:()=>M,runCollector:()=>st,runTransformerChain:()=>Z,setMark:()=>he,shouldDeliver:()=>ve,startFlow:()=>Ct,transformerInit:()=>Y,transformerPush:()=>X,walkChain:()=>Q,wrapEnv:()=>b}),module.exports=(e=s,((e,s,a,i)=>{if(s&&"object"==typeof s||"function"==typeof s)for(let c of o(s))r.call(e,c)||c===a||t(e,c,{get:()=>s[c],enumerable:!(i=n(s,c))||i.enumerable});return e})(t({},"__esModule",{value:!0}),e));var a={},i={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"},c={Commands:i,Utils:{Storage:{Cookie:"cookie",Local:"local",Session:"session"}}},u=require("@walkeros/core");function d(e,t){const n={};return Object.entries(t).forEach(([e,t])=>{n[e]=!!t}),e.consent=(0,u.assign)(e.consent,n),{update:n}}var l=require("@walkeros/core"),f=require("@walkeros/core"),p=require("@walkeros/core");require("@walkeros/core");function g(e,t,n){return{traceId:e.source?.trace??t?._meta.trace??n.trace,sourceId:t?._meta.path[0],parentEventId:t?._meta.parentEventId}}function m(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}var h=require("@walkeros/core");function v(e){return"object"==typeof e&&null!==e}var y=8;function w(e,t,n){if(null===e||"object"!=typeof e)return e;if(n>=y)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(w(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:w(s,t,n+1);return r}function b(e){const t=[],n=[],{simulation:o,...r}=e,s=w(r,new WeakMap,0);for(const e of o){const o=(0,h.parseCallPath)(e);if(0===o.length)continue;const r=o.join(".");if(o.length-1>=y){n.push(r);continue}let a=s,i=!0;for(let e=0;e<o.length-1;e++){const t=a[o[e]];if(!v(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}}var k=6;function I(e,t){try{return e[t]}catch{return"[unreadable]"}}function C(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>=k)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(I(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 S(e){return e.map(e=>({fn:e.fn,args:C(e.args),ts:e.ts}))}var E=require("@walkeros/core"),O=require("@walkeros/core"),q=require("@walkeros/core");function x(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 A(e,t,n,o){j.get(e)||(j.set(e,!0),t.warn(n,o))}function D(e){j.delete(e)}var _=5,$=3e4,T=()=>Date.now();function M(e){if(void 0!==e)return"number"==typeof e?{threshold:e,cooldown:$}:{threshold:e.threshold??_,cooldown:e.cooldown??$}}function P(e,t,n,o,r){if("partial"===n)return;const s=function(e,t){return e[t]||(e[t]={state:"closed",consecutiveFailures:0}),e[t]}(e,t);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=T()+r)):void(s.consecutiveFailures>=o&&(s.state="open",s.probing=!1,s.openUntil=T()+r)))}function R(e,t){return!e||("closed"===e.state||"half-open"===e.state||void 0!==e.openUntil&&t>=e.openUntil)}var B=100;function K(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 F(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 U(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 H(e,t,n,o,r){const s=(0,q.stepId)(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??B},c=x(a,[o,r],i);if(c.dropped>0){const t=F(e.status,(0,q.stepId)("destination",n),"dlq",c.dropped);A(a,s,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:n,cap:i.max,droppedCount:t})}else a.length<i.max&&D(a);const u=K(e,n);u.failed++,u.dlqSize=a.length,e.status.failed++;const d=M(t.config.breaker);if(d){const o=t.config.id||n;P(e.status.breakers,(0,q.stepId)("destination",o),"transport-failure",d.threshold,d.cooldown)}}(e,r,n,a,t,o):e.status.failed++,void o.error("report error",{...U(t),event:a.name});e.status.connectionErrors[s]=(e.status.connectionErrors[s]??0)+1,o.error("connection error",U(t))}catch{}}}var G=require("@walkeros/core"),z=require("@walkeros/core");function V(e,t){return e.storeId&&t.stores[e.storeId]?t.stores[e.storeId]:t.stores.__cache}function L(e,t){return e?t.stores[e]:t.stores.__cache}function N(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 W(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 Q(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 Y(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,z.createIngest)(n),config:t.config,env:ee(t.config.env),reportError:H(e,"transformer",n,r)};r.debug("init");const a=await(0,z.useHooks)(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 X(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:{...ee(t.config.env),...s?{respond:s}:{}},reportError:H(e,"transformer",n,i)};i.debug("push",{event:o.name});const u="string"==typeof o.id?o.id:"",{traceId:d,sourceId:l,parentEventId:f}=g(o,r,e),p=Date.now(),h=m(e,{stepId:(0,z.stepId)("transformer",n),stepType:"transformer",phase:"in",eventId:u,now:p,traceId:d,sourceId:l,parentEventId:f});h.inEvent=o,(0,z.emitStep)(e,h);try{const r=await(0,z.useHooks)(t.push,"TransformerPush",e.hooks,e.logger)(o,c),s=Date.now(),a=m(e,{stepId:(0,z.stepId)("transformer",n),stepType:"transformer",phase:"out",eventId:u,now:s,traceId:d,sourceId:l,parentEventId:f});return a.durationMs=s-p,a.outEvent=r,(0,z.emitStep)(e,a),i.debug("push done"),r}catch(t){const o=Date.now(),r=m(e,{stepId:(0,z.stepId)("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)},(0,z.emitStep)(e,r),t}}function J(e,t){return e?{...e,_meta:{...e._meta,path:[...e._meta.path]}}:(0,z.createIngest)(t)}async function Z(e,t,n,o,r,s,a){r||(r=(0,z.createIngest)(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};r&&r._meta&&(r._meta.hops++,r._meta.path.push(o));if(!await(0,z.tryCatchAsync)(Y,t=>{if(t instanceof z.FatalError)throw t;return e.status.failed++,e.logger.scope(`transformer:${s.type||"unknown"}`).error("transformer init failed",{transformer:o,...U(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?(0,z.compileCache)(u):void 0,l=d?V(d,e):void 0,f=s.config?.state?(0,z.compileState)(s.config.state):void 0,p=f?.filter(e=>"get"===e.mode),g=f?.filter(e=>"set"===e.mode),m=async t=>g&&0!==g.length?(0,z.applyState)(g,t=>L(t,e),t,e):t;let h;if(d&&l){const e=(0,z.buildCacheContext)(r,i),t=await(0,z.checkCache)(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&&(h={key:t.key,ttl:t.rule.ttl})}const v=s.config.before;if(v){const n=(0,z.getNextSteps)(v,(0,z.buildCacheContext)(r,i));if(1===n.length){const o=Q(n[0],N(t));if(o.length>0){const n=await Z(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=>(0,z.tryCatchAsync)(Z,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,U(t)),{event:null,respond:void 0}))(e,t,Q(n,N(t)),i,J(r,n),void 0,a)))}p&&p.length>0&&(i=await(0,z.applyState)(p,t=>L(t,e),i,e));const y=await(0,z.tryCatchAsync)(X,t=>(e.logger.scope(`transformer:${s.type||"unknown"}`).error("Push failed",U(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 m(n.event||i),u=J(r,"unknown");if(n.next){const r=(0,z.getNextSteps)(n.next,(0,z.buildCacheContext)(u,o));if(0===r.length)return{event:o,respond:c};if(1===r.length){const n=Q(r[0],N(t));return n.length>0?Z(e,t,n,o,u,c,a):{event:o,respond:c}}return(await Promise.all(r.map(n=>(0,z.tryCatchAsync)(Z,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,U(t)),{event:null,respond:void 0}))(e,t,Q(n,N(t)),o,J(u,n),void 0,a)))).map(e=>({event:e.event,respond:void 0}))}return s.length>0?Z(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 m(n||i),u=(0,z.getNextSteps)(s,(0,z.buildCacheContext)(r,o));if(0===u.length){i=o;continue}if(1===u.length){const n=Q(u[0],N(t));return n.length>0?Z(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=>(0,z.tryCatchAsync)(Z,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,U(t)),{event:null,respond:void 0}))(e,t,Q(n,N(t)),o,J(r,n),void 0,a))),{event:null,respond:void 0}}n&&(i=n)}g&&g.length>0&&(i=await(0,z.applyState)(g,t=>L(t,e),i,e)),h&&l&&(0,z.storeCache)(l,h.key,i,h.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,z.getNextSteps)(s.config.next,(0,z.buildCacheContext)(r,i));if(1===n.length){const o=Q(n[0],N(t));return o.length>0?Z(e,t,o,i,r,c,a):{event:i,respond:c}}return n.length>1?(await Promise.all(n.map(n=>(0,z.tryCatchAsync)(Z,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,U(t)),{event:null,respond:void 0}))(e,t,Q(n,N(t)),i,J(r,n),void 0,a))),{event:null,respond:void 0}):{event:i,respond:c}}}return{event:i,respond:c}}function ee(e){return e&&(0,z.isObject)(e)?e:{}}function te(e){return"string"==typeof e||!(!Array.isArray(e)||!e.every(e=>"string"==typeof e))}async function ne(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)fe(n)&&!ve(e,t,n)||(await(0,G.tryCatchAsync)(t.on,t=>{if(t instanceof G.FatalError)throw t;e.status.failed++,e.logger.scope("source").error("source on flush failed",{sourceId:r,type:n,...U(t)})})(n,s),fe(n)&&he(e,t,n))}function oe(e){return Boolean(e.config.init)&&!e.config.require?.length}async function re(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?(0,G.compileState)(l):void 0,p=u,g=p?(0,G.compileCache)({...p,stop:p.stop??!0}):void 0,m=te(i)?Q(i,N(e.transformers)):void 0,h=te(c)?Q(c,N(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:(0,G.getSpanId)()},d=h??(void 0!==c?(()=>{const t=(0,G.getNextSteps)(c,(0,G.buildCacheContext)(s.ingest));if(0===t.length)return[];return Q(1===t.length?t[0]:t,N(e.transformers))})():[]);let l=[u];if(d.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const n=await Z(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,G.getSpanId)()}:e);else{const e=n.event;l=""===o||"string"==typeof e.id&&""!==e.id?[e]:[{...e,id:o}]}}if(g){const t=V(g,e);if(t){const n=(0,G.buildCacheContext)(s.ingest),o=await(0,G.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,G.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,i=o.rule.update,c={...n,cache:{status:"MISS"}},u=o.key,d=o.rule.ttl,l=n=>{(0,G.storeCache)(t,u,n,d),i?a=(async()=>{const t=await(0,G.applyUpdate)(n,i,c,e);r(t)})():r(n)};s.respond=l}"MISS"!==o.status||g.stop||(0,G.storeCache)(t,o.key,!0,o.rule.ttl)}}}const p=m?{kind:"single",preChain:m}:void 0!==i?(()=>{const t=(0,G.getNextSteps)(i,(0,G.buildCacheContext)(s.ingest));return 0===t.length?{kind:"single",preChain:[]}:1===t.length?{kind:"single",preChain:Q(t[0],N(e.transformers))}:{kind:"many",branches:t.map(t=>Q(t,N(e.transformers)))}})():{kind:"single",preChain:[]};f&&f.length>0&&(l=await Promise.all(l.map(t=>(0,G.applyState)(f,t=>L(t,e),t,e))));let w={ok:!0};for(const n of l)"many"===p.kind?(await Promise.all(p.branches.map((a,i)=>(0,G.tryCatchAsync)(async()=>v(n,{...o,id:t,ingest:J(s.ingest,`${t}.${i}`),respond:void 0,mapping:r,preChain:a}),t=>(e.logger.scope("source:many").error(`many branch ${i} failed`,U(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=(0,G.createIngest)(t),s=(0,G.parseTraceparent)((0,G.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 a=await(0,G.getMappingValue)(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:(0,G.createIngest)(t),respond:void 0};return w(e,n,o)},command:e.command,sources:e.sources,elb:e.elb,logger:k},C={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:H(e,"source",t,k)},S=await(0,G.tryCatchAsync)(o,n=>{if(n instanceof G.FatalError)throw n;e.status.failed++,e.logger.scope("source").error("source factory failed",{sourceId:t,...U(n)})})(C);if(!S)return;const E=S.type||"unknown",O=e.logger.scope(E).scope(t);return I.logger=O,a&&(S.config={...S.config,primary:a}),S}async function se(e,t={}){const n={};for(const[o,r]of Object.entries(t)){const t=await re(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,G.tryCatchAsync)(n.init.bind(n),n=>{if(n instanceof G.FatalError)throw n;o=!0,e.status.failed++,e.logger.scope("source").error("source init failed",{sourceId:t,...U(n)})})(),o||(n.config.init=!0,oe(n)&&await ne(e,n,t))}return await ae(e),n}async function ae(e){for(const[t,n]of Object.entries(e.sources)){if(oe(n))continue;const o=n.config.require;if(!o?.length)continue;const r=o.filter(t=>!ge(e,t));r.length!==o.length&&(n.config.require=r,oe(n)&&await ne(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=>!ge(e,t));if(n.config&&(n.config.require=r),r.length>0)continue;delete e.pending.destinations[t];const s=Le(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 ce=!1;function ue(){ce||(ce=!0,"undefined"!=typeof console&&"function"==typeof console.warn&&console.warn("walkerOS: ignored an on-dispatch call with a non-collector argument"))}function de(e,t,n,o){if(n instanceof E.FatalError)throw n;e.logger.scope("on").error("on callback failed",{kind:t,...o,...U(n)})}var le=[c.Commands.Consent,c.Commands.User,c.Commands.Globals,c.Commands.Custom];function fe(e){return le.includes(e)}function pe(e,t){switch(t){case c.Commands.Consent:return Object.keys(e.consent).length>0;case c.Commands.User:return Object.keys(e.user).length>0;case c.Commands.Globals:return Object.keys(e.globals).length>0;case c.Commands.Custom:return Object.keys(e.custom).length>0;default:return!1}}function ge(e,t){switch(t){case c.Commands.Consent:case c.Commands.User:case c.Commands.Globals:case c.Commands.Custom:return pe(e,t);case c.Commands.Run:case c.Commands.Ready:return!0===e.allowed;default:return e.seenEvents.has(String(t))}}function me(e,t){return e.cellVersion[String(t)]??0}function he(e,t,n){let o=e.delivery.get(t);o||(o={},e.delivery.set(t,o)),o[String(n)]=me(e,n)}function ve(e,t,n){return e.allowed&&me(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)}var ye=8;function we(e){return e.cascade?()=>{}:(e.cascade={counts:new WeakMap},()=>{e.cascade=void 0})}function be(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<=ye||(a===ye+1&&e.logger.error("state delivery did not converge",{type:s}),!1)}function ke(e,t){return{collector:e,logger:e.logger.scope("on").scope(String(t))}}async function Ie(e,t,n){if(!ie(e))return void ue();const o=e.on,r=o[t]||[],s=(0,E.isArray)(n)?n:[n];s.forEach(e=>{r.push(e)}),o[t]=r,Se(e,t,s)}function Ce(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:We(t.env,t.config.env),reportError:H(e,"destination",n,a,t)};(0,O.tryCatch)(t.on,t=>de(e,"destination",t,{destId:n,type:o}))(o,i)}function Se(e,t,n,o){if(!ie(e))return void ue();const r=Ee(e,t,o);if(n.length)switch(t){case c.Commands.Consent:!function(e,t,n){const o=n||e.consent,r=ke(e,c.Commands.Consent);t.forEach(t=>{ve(e,t,c.Commands.Consent)&&be(e,t,c.Commands.Consent)&&(Object.keys(o).filter(e=>e in t).forEach(n=>{(0,O.tryCatch)(t[n],t=>de(e,"consent",t,{key:n}))(o,r)}),he(e,t,c.Commands.Consent))})}(e,n,o);break;case c.Commands.Ready:!function(e,t){if(!e.allowed)return;const n=ke(e,c.Commands.Ready);t.forEach(t=>{(0,O.tryCatch)(t,t=>de(e,"ready",t))(void 0,n)})}(e,n);break;case c.Commands.Run:!function(e,t){if(!e.allowed)return;const n=ke(e,c.Commands.Run);t.forEach(t=>{(0,O.tryCatch)(t,t=>de(e,"run",t))(void 0,n)})}(e,n);break;case c.Commands.Session:!function(e,t){if(!e.session)return;const n=ke(e,c.Commands.Session);t.forEach(t=>{(0,O.tryCatch)(t,t=>de(e,"session",t))(e.session,n)})}(e,n);break;default:{const o=ke(e,t),s=fe(t);n.forEach(n=>{"function"==typeof n&&(s&&!ve(e,n,t)||s&&!be(e,n,t)||((0,O.tryCatch)(n,n=>de(e,"generic",n,{type:t}))(r,o),s&&he(e,n,t)))});break}}}function Ee(e,t,n){switch(t){case c.Commands.Consent:return n||e.consent;case c.Commands.Session:return e.session;case c.Commands.User:return n||e.user;case c.Commands.Custom:return n||e.custom;case c.Commands.Globals:return n||e.globals;case c.Commands.Config:return n||e.config;default:return}}async function Oe(e,t,n,o,r){if(!t.on)return!1;if(fe(o)&&!ve(e,t,o))return!1;if(fe(o)&&!be(e,t,o))return!1;const s=await(0,O.tryCatchAsync)(t.on,t=>de(e,"source",t,{sourceId:n,type:o}))(o,r);return fe(o)&&he(e,t,o),!1===s}async function qe(e){if(ie(e))for(const t of le){if(!pe(e,t))continue;const n=Ee(e,t);Se(e,t,e.on[t]||[]);for(const[o,r]of Object.entries(e.sources))oe(r)&&await Oe(e,r,o,t,n)}else ue()}async function xe(e,t,n,o){if(!ie(e))return ue(),!0;e.seenEvents.add(String(t));let r=n||[];n||(r=e.on[t]||[]);const s=Ee(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)}if(o.on)if(oe(o)){await Oe(e,o,n,t,s)&&(a=!0)}else 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});Ce(e,o,n,t,s)}});for(const[t,n]of Object.entries(e.sources))oe(n)&&n.queueOn?.length&&await ne(e,n,t);const i=Object.values(e.sources).some(e=>!oe(e)&&e.config.require?.length);return(Object.keys(e.pending.destinations).length>0||i)&&await ae(e),Se(e,t,r,o),!a}var je=1e3,Ae=1e3,De=3e4,_e=1e4;function $e(e){return"number"==typeof e&&e>0?e:_e}var Te=class extends Error{constructor(e){super(e),this.name="DestinationTimeoutError"}};function Me(e,t,n){let o;const r=new Promise((e,r)=>{o=setTimeout(()=>r(new Te(n)),t)});return Promise.race([e,r]).finally(()=>{o&&clearTimeout(o)})}var Pe=Object.freeze({batched:!0});function Re(e){return e===Pe}var Be=" batch-all";function Ke(e){return void 0===e?{}:"number"==typeof e?{wait:e}:{wait:e.wait,size:e.size,age:e.age}}function Fe(e,t,n){if(!e)return[];if(Array.isArray(e)&&e.every(e=>"string"==typeof e))return Q(e,t);if("string"==typeof e)return Q(e,t);const o=(0,p.getNextSteps)(e,(0,p.buildCacheContext)(n));return 0===o.length?[]:1===o.length?Q(o[0],t):Q(o,t)}async function Ue(e,t){const{code:n,config:o={},env:r={},before:s,next:a,cache:i,state:c}=t;if(!(0,p.isFunction)(n.push))return Ve({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=(0,p.getId)(5,"abcdefghijklmnopqrstuvwxyz")}while(e.destinations[l]||e.pending.destinations[l]);if(d.require?.length){e.pending.destinations[l]=t,await ae(e);const n=e.destinations[l];return n?He(e,void 0,{},{[l]:n}):Ve({ok:!0})}const f={...n,config:d,env:We(n.env,r)};return e.destinations[l]=f,!1!==f.config.queue&&(f.queuePush=[...e.queue]),He(e,void 0,{},{[l]:f})}async function He(e,t,n={},o){const{allowed:r,consent:s,user:a}=e;if(!r)return Ve({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=x(e.queue,t,{max:n});if(o.dropped>0){const t=F(e.status,(0,p.stepId)("collector"),"queue",o.dropped);A(e.queue,e.logger,"collector.queue overflow; oldest events dropped",{buffer:"queue",cap:n,droppedCount:t})}else e.queue.length<n&&D(e.queue);e.status.in++}o||(o=e.destinations);const i=e.transformers?N(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,p.stepId)("destination",c),d=M(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=T();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&&P(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 h=(r.queuePush||[]).map(e=>({...e,consent:s}));r.queuePush=[],t&&h.push((0,p.clone)(t));const v=n.ingest?{...n.ingest,_meta:{...n.ingest._meta,path:[...n.ingest._meta.path]}}:(0,p.createIngest)("unknown");if(!h.length&&!r.queueOn?.length)return f(),{id:o,destination:r,skipped:!0};if(!h.length&&r.queueOn?.length){if(!(0,p.getGrantedConsent)(r.config.consent,s))return f(),{id:o,destination:r,skipped:!0};let t=!1;try{t=await Ge(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 y=[],w=h.filter(t=>{const n=(0,p.getGrantedConsent)(r.config.consent,s,t.consent);if(n)return t.consent=n,y.push(t),!1;const a=m(e,{stepId:(0,p.stepId)("destination",o),stepType:"destination",phase:"skip",eventId:"string"==typeof t.id?t.id:"",now:Date.now(),...g(t,v,e)});return a.skipReason="consent",s&&(a.consent={...s}),r.config.consent&&(a.meta={required:{...r.config.consent}}),(0,p.emitStep)(e,a),!0});if(w.length>0){const t=r.queuePush,n=r.config.id||o,s={max:r.config.queueMax??je};let a=0;for(const e of w){a+=x(t,e,s).dropped}if(a>0){K(e,n);const o=F(e.status,(0,p.stepId)("destination",n),"queue",a);A(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&&D(t)}if(!y.length)return f(),{id:o,destination:r,queue:h};let b,k,I=!1;try{I=await Ge(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(!I)return f(),{id:o,destination:r,queue:h};r.dlq||(r.dlq=[]);const C=Fe(r.config.before,i,v),S=r.config.next,E=r.config?.cache,O=E?(0,p.compileCache)(E):void 0,q=O?V(O,e):void 0,j=r.config?.state?(0,p.compileState)(r.config.state):void 0,_=j?.filter(e=>"get"===e.mode),$=j?.filter(e=>"set"===e.mode);let R=0,H=0,G=0;return await Promise.all(y.map(async t=>{let s,c;if(t.user=(0,p.assign)(a,t.user),O?.stop&&q){const e=(0,p.buildCacheContext)(v,t),n=await(0,p.checkCache)(O,q,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(C.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const r=await Z(e,e.transformers,C,t,v,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(O&&!O.stop&&q){const e=(0,p.buildCacheContext)(v,t),n=await(0,p.checkCache)(O,q,e);if("HIT"===n?.status)return!1;"MISS"===n?.status&&(s={key:n.key,ttl:n.rule.ttl},a=!0)}_&&_.length>0&&t&&(t=await(0,p.applyState)(_,t=>L(t,e),t,e));const u=Date.now();let l=!1;const f=await(0,p.tryCatchAsync)(ze,n=>{const s=r.type||"unknown";e.logger.scope(s).error("Push failed",{...U(n),event:t.name}),b=n,l=!0;const a=r.dlq,i=r.config.id||o,c={max:r.config.dlqMax??B},u=x(a,[t,n],c);if(u.dropped>0){K(e,i);const t=F(e.status,(0,p.stepId)("destination",i),"dlq",u.dropped);A(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&&D(a)})(e,r,o,t,v,d);if(R+=Date.now()-u,s&&q&&void 0===r.config.mock&&(a?(0,p.storeCache)(q,s.key,f??!0,s.ttl):void 0===c&&(c=f??!0)),!l&&!Re(f)&&$&&$.length>0&&t&&(t=await(0,p.applyState)($,t=>L(t,e),t,e)),void 0===f||Re(f)||(k=f),Re(f)&&H++,!l&&S){void 0!==f&&(v._response=f);const n=Fe(S,i,v);if(n.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const r=await Z(e,e.transformers,n,t,v,d,`destination.${o}.next`);r.respond&&(d=r.respond)}}return!0};for(const e of u)await l(e,s)&&G++;return s&&q&&void 0!==c&&void 0===r.config.mock&&(0,p.storeCache)(q,s.key,c,s.ttl),t})),{id:o,destination:r,error:b,response:k,totalDuration:R,batchedCount:H,allowedCount:y.length,pushedCount:G,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};K(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?(0,p.stepId)("destination",t.canonicalId):void 0,c=t=>{a&&i&&P(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 Ve({event:t,...Object.keys(u).length&&{done:u},...Object.keys(d).length&&{queued:d},...Object.keys(l).length&&{failed:l}})}async function Ge(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:We(t.env,t.config.env),reportError:H(e,"destination",n,s,t)};s.debug("init");const i=Date.now();let c;(0,p.emitStep)(e,m(e,{stepId:(0,p.stepId)("destination",n),stepType:"destination",phase:"init",eventId:"",now:i}));try{c=await(0,p.useHooks)(t.init,"DestinationInit",e.hooks,e.logger)(a)}catch(t){const o=Date.now(),r=m(e,{stepId:(0,p.stepId)("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)},(0,p.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)Ce(e,t,n,r,s)}s.debug("init done")}return!0}async function ze(e,t,n,o,r,s){const{config:a}=t,i=await(0,p.processEventMapping)(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:{...We(t.env,a.env),...s?{respond:s}:{}},reportError:H(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,h=f?i.mappingKey||"* *":Be;if((f||void 0!==a.batch)&&t.pushBatch&&void 0===a.mock){if(t.batches=t.batches||{},!t.batches[h]){const o={key:h,entries:[],events:[],data:[]},r=Ke(l?.batch),s=Ke(a.batch),i=r.wait??s.wait??De,c=r.size??s.size??Ae,d=r.age??s.age??De,v=We(t.env,a.env),y=async()=>{const o=t.batches[h],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:{...v,...i.respond?{respond:i.respond}:{}},reportError:H(e,"destination",n,u,t)};u.debug("push batch",{events:s.entries.length});const d=t.config.id||n,l=K(e,d),f=M(t.config.breaker),y=(0,p.stepId)("destination",d),w=t=>{f&&P(e.status.breakers,y,t,f.threshold,f.cooldown)},b=Date.now(),k=new Map;let I,C=!1;const S=n=>{const o=t.dlq=t.dlq||[],r={max:t.config.dlqMax??B};let s=0;for(const e of n){s+=x(o,e,r).dropped}if(s>0){const t=F(e.status,(0,p.stepId)("destination",d),"dlq",s);A(o,u,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:d,cap:r.max,droppedCount:t})}else o.length<r.max&&D(o);l.failed+=n.length,l.dlqSize=o.length,e.status.failed+=n.length};let E=s.entries.length;const O=$e(a.timeout),q=await(0,p.tryCatchAsync)((o,r)=>Me(Promise.resolve((0,p.useHooks)(t.pushBatch,"DestinationPushBatch",e.hooks,e.logger)(o,r)),O,`Destination "${n}" batch delivery timed out after ${O}ms`),e=>{E=0,C=!0,I=e,S(s.entries.map(t=>[t.event,e])),w("transport-failure"),u.error("Push batch failed",{error:e instanceof Error?e.message:String(e),entries:s.entries.length})})(s,c);if(j=q,(0,p.isObject)(j)&&Array.isArray(j.failed)&&q.failed.length>0){const e=[];for(const t of q.failed){const n=s.entries[t.index];if(!n||k.has(t.index))continue;const o=t.error??new Error(`Push batch entry ${t.index} failed (no per-row error provided)`);k.set(t.index,o),e.push([n.event,o])}e.length>0&&(S(e),E=Math.max(0,s.entries.length-e.length),u.error("Push batch partial failure",{failed:e.length,delivered:E,entries:s.entries.length}))}var j;const _=Date.now();s.entries.forEach((t,o)=>{const r=C||k.has(o),a=g(t.event,t.ingest,e),i=m(e,{stepId:(0,p.stepId)("destination",n),stepType:"destination",phase:r?"error":"flush",eventId:"string"==typeof t.event.id?t.event.id:"",now:_,traceId:a.traceId,sourceId:a.sourceId,parentEventId:a.parentEventId});if(i.batch={size:s.entries.length,index:o},i.durationMs=_-b,r){const e=C?I:k.get(o);i.error=e instanceof Error?{name:e.name,message:e.message}:{message:String(e)}}(0,p.emitStep)(e,i)}),u.debug("push batch done"),l.inFlightBatch=Math.max(0,(l.inFlightBatch??0)-s.entries.length),E>0&&(l.count+=E,l.lastAt=Date.now(),e.status.out+=E,w("success"))},w=(0,p.debounce)(y,{wait:i,size:c,age:d});t.batches[h]={batched:o,isDefault:!f,batchFn:()=>{w()},flush:async()=>{await w.flush()}}}const c=t.batches[h];c.batched.entries.push({event:i.event,ingest:r,respond:s,rule:l,data:i.data}),c.batched.events.push(i.event),(0,p.isDefined)(i.data)&&c.batched.data.push(i.data);const d="string"==typeof i.event.id?i.event.id:"",v=g(o,r,e),y=Date.now(),w=m(e,{stepId:(0,p.stepId)("destination",n),stepType:"destination",phase:"in",eventId:d,now:y,traceId:v.traceId,sourceId:v.sourceId,parentEventId:v.parentEventId});i.mappingKey&&(w.mappingKey=i.mappingKey),i.event.consent&&(w.consent={...i.event.consent}),w.inEvent=i.event,(0,p.emitStep)(e,w);const b=m(e,{stepId:(0,p.stepId)("destination",n),stepType:"destination",phase:"out",eventId:d,now:y,traceId:v.traceId,sourceId:v.sourceId,parentEventId:v.parentEventId});i.mappingKey&&(b.mappingKey=i.mappingKey),b.outEvent=i.event,b.batch={size:c.batched.entries.length,index:c.batched.entries.length-1},(0,p.emitStep)(e,b);const k=t.config.id||n,I=K(e,k);return I.inFlightBatch=(I.inFlightBatch??0)+1,c.batchFn(),Pe}{let s;if(u.debug("push",{event:i.event.name}),"trace"===e.observeLevel?.()&&Array.isArray(t.calls)&&t.calls.length>0){const e=b({...d.env,simulation:t.calls});d.env=e.wrappedEnv,s=e.calls,e.unresolved.length>0&&(e.wrappedEnv[p.OBSERVE_ENV_KEY]={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:h}=g(o,r,e),v=Date.now(),y=m(e,{stepId:(0,p.stepId)("destination",n),stepType:"destination",phase:"in",eventId:c,now:v,traceId:l,sourceId:f,parentEventId:h});i.mappingKey&&(y.mappingKey=i.mappingKey),i.event.consent&&(y.consent={...i.event.consent}),y.inEvent=i.event,(0,p.emitStep)(e,y);try{const o=$e(a.timeout),r=await Me(Promise.resolve((0,p.useHooks)(t.push,"DestinationPush",e.hooks,e.logger)(i.event,d)),o,`Destination "${n}" delivery timed out after ${o}ms`),g=Date.now(),y=m(e,{stepId:(0,p.stepId)("destination",n),stepType:"destination",phase:"out",eventId:c,now:g,traceId:l,sourceId:f,parentEventId:h});return y.durationMs=g-v,y.outEvent=i.event,s&&s.length>0&&(y.calls=S(s)),(0,p.isDefined)(r)&&(y.meta={...y.meta,response:r}),i.mappingKey&&(y.mappingKey=i.mappingKey),(0,p.emitStep)(e,y),u.debug("push done"),r}catch(t){const o=Date.now(),r=m(e,{stepId:(0,p.stepId)("destination",n),stepType:"destination",phase:"error",eventId:c,now:o,traceId:l,sourceId:f,parentEventId:h});throw r.durationMs=o-v,r.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},s&&s.length>0&&(r.calls=S(s)),i.mappingKey&&(r.mappingKey=i.mappingKey),(0,p.emitStep)(e,r),t}}}function Ve(e){return{ok:!e?.failed,...e}}function Le(e){const{code:t,config:n={},env:o={},cache:r,state:s}=e,{config:a}=W(e,"before"),{config:i}=W({...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=We(t.env,o);return{...t,config:c,env:u}}async function Ne(e,t={}){const n={};for(const[o,r]of Object.entries(t))r.config?.require?.length?e.pending.destinations[o]=r:n[o]=Le(r);return n}function We(e,t){return e||t?t?e&&(0,p.isObject)(e)&&(0,p.isObject)(t)?{...e,...t}:t:e:{}}var Qe=require("@walkeros/core"),Ye=require("@walkeros/core"),Xe=5e3;async function Je(e){const t=e.logger;await Ze(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`)),Xe)})])}catch(t){r.error(`destination '${e}' batch flush failed: ${t}`)}finally{n&&clearTimeout(n)}})});await Promise.allSettled(n)}(e.destinations,t),await Ze(e.destinations,"destination",t),await Ze(e.transformers,"transformer",t),await Ze(e.stores,"store",t)}async function Ze(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`)),Xe)})])}catch(n){a.error(`${t} '${e}' destroy failed: ${n}`)}finally{c&&clearTimeout(c)}});await Promise.allSettled(o)}function et(e,t){e.stateVersion++,e.cellVersion[t]=e.stateVersion}async function tt(e,t,n){let o,r,s=!1;const a=we(e);try{return await async function(){switch(t){case c.Commands.Config:(0,Ye.isObject)(n)&&((0,Qe.assign)(e.config,n,{shallow:!1}),r=n,s=!0);break;case c.Commands.Consent:if((0,Ye.isObject)(n)){const{update:t}=d(e,n);et(e,c.Commands.Consent),r=t,s=!0}break;case c.Commands.Custom:(0,Ye.isObject)(n)&&(e.custom=(0,Qe.assign)(e.custom,n),et(e,c.Commands.Custom),r=n,s=!0);break;case c.Commands.Destination:(0,Ye.isObject)(n)&&"code"in n&&(0,Ye.isObject)(n.code)&&(o=await Ue(e,n));break;case c.Commands.Globals:(0,Ye.isObject)(n)&&(e.globals=(0,Qe.assign)(e.globals,n),et(e,c.Commands.Globals),r=n,s=!0);break;case c.Commands.Hook:if((0,Ye.isObject)(n)&&(0,Qe.isString)(n.name)&&(0,Qe.isFunction)(n.fn)){const{name:t,fn:o}=n;e.hooks[t]=o,r=n,s=!0}break;case c.Commands.On:if((0,Ye.isObject)(n)&&(0,Qe.isString)(n.type)){const{type:t,rules:o}=n;await Ie(e,t,o)}break;case c.Commands.Ready:s=!0;break;case c.Commands.Run:o=await st(e,n),s=!0;break;case c.Commands.Session:s=!0;break;case c.Commands.Shutdown:e.hasShutdown||(e.hasShutdown=!0,await Je(e));break;case c.Commands.User:(0,Ye.isObject)(n)&&((0,Qe.assign)(e.user,n,{shallow:!1}),et(e,c.Commands.User),r=n,s=!0);break;default:return e.logger.warn("unknown command",{command:t}),Ve({ok:!1})}if(s){await xe(e,t,void 0,r);const n=await He(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||Ve({ok:!0})}()}finally{a()}}function nt(e,t){return{timing:Math.round((Date.now()-e.timing)/10)/100,source:{type:"collector",schema:"4"},...t}}function ot(e,t,n){const o=t.name;if("string"!=typeof o)throw new Qe.InvalidEventError(void 0===o?"Event name is required":"Event name is invalid");if(!o)throw new Qe.InvalidEventError("Event name is required");const[r,s]=o.split(" ");if(!r||!s)throw new Qe.InvalidEventError("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:m=(0,Qe.getSpanId)(),trigger:h="",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),C=k.trace??n?._meta.trace??e.trace,S={...k,count:I};void 0!==C&&(S.trace=C);const E=e.name??k.platform??"default",O=e.release??"4.6.1";S.release={...k.release,[E]:O};return{name:i,data:c,context:u,globals:(0,Qe.assign)(e.globals,d),custom:l,user:f,nested:p,consent:g,id:m,trigger:h,entity:v,action:y,timestamp:a,timing:w,source:S}}function rt(e,t,n){return ot(e,nt(e,t),n)}async function st(e,t){e.allowed=!0,e.timing=Date.now(),e.trace=(0,Qe.getTraceId)(),e.count=0,t&&(t.consent&&(e.consent=(0,Qe.assign)(e.consent,t.consent),et(e,c.Commands.Consent)),t.user&&(e.user=(0,Qe.assign)(e.user,t.user),et(e,c.Commands.User)),t.globals&&(e.globals=(0,Qe.assign)(e.config.globalsStatic||{},t.globals),et(e,c.Commands.Globals)),t.custom&&(e.custom=(0,Qe.assign)(e.custom,t.custom),et(e,c.Commands.Custom))),Object.values(e.destinations).forEach(e=>{e.queuePush=[]}),e.queue=[],e.round++,await ae(e),await qe(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 He(e);if(n)return r;const s={...r.failed??{},...o};return{...r,ok:!1,...Object.keys(s).length>0?{failed:s}:{}}}var at=require("@walkeros/core");function it(e,t){const n=(0,at.useHooks)(async(n,o={})=>await(0,at.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=x(e.preRunQueue,{event:n,options:o},{max:t});if(r.dropped>0){const n=F(e.status,"collector.preRun","queue",r.dropped);A(e.preRunQueue,e.logger,"collector.preRunQueue overflow; oldest events dropped",{buffer:"queue",cap:t,droppedCount:n})}else e.preRunQueue.length<t&&D(e.preRunQueue);return e.logger.debug("event held until run",{name:n.name,dropped:r.dropped}),Ve({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,m=a??(0,at.createIngest)(s||"unknown");if(c){const t=await(0,at.processEventMapping)(p,c,e);if(t.ignore)return Ve({ok:!0});if(c.consent){if(!(0,at.getGrantedConsent)(c.consent,e.consent,t.event.consent))return Ve({ok:!0})}p=t.event}if(u?.length&&e.transformers&&Object.keys(e.transformers).length>0){const n=await Z(e,e.transformers,u,p,m,f,s?`source.${s}.next`:void 0);if(null===n.event)return e.logger.debug("Event dropped by transformer chain"+(n.droppedBy?` (${n.droppedBy})`:"")),Ve({ok:!0,dropped:!0});if(n.stopped)return n.respond&&(f=n.respond),Ve({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:(0,at.getSpanId)()}:n,a=t(r),i=ot(e,a,m);return He(e,i,{id:s,ingest:m,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]??Ve({ok:!0})}p=""===o||"string"==typeof n.event.id&&""!==n.event.id?n.event:{...n.event,id:o}}const h=rt(e,p,m),v=await He(e,h,{id:s,ingest:m,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 at.FatalError)throw t;if(t instanceof at.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}),Ve({ok:!1,invalid:!0,error:t.message})}return e.status.failed++,e.logger.error("push failed",{...U(t),event:n.name}),Ve({ok:!1})})(),"Push",e.hooks,e.logger);return async(t,o)=>{const r="string"==typeof t.id&&""!==t.id?t:{...t,id:(0,at.getSpanId)()},s="string"==typeof r.id?r.id:"",{traceId:a,sourceId:i,parentEventId:c}=g(r,o?.ingest,e),u=Date.now(),d=m(e,{stepId:"collector.push",stepType:"collector",phase:"in",eventId:s,now:u,traceId:a,sourceId:i,parentEventId:c});d.inEvent=r,(0,at.emitStep)(e,d);try{const t=await n(r,o),d=Date.now(),l=m(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,(0,at.emitStep)(e,l),t}catch(t){const n=Date.now(),o=m(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)},(0,at.emitStep)(e,o),t}}}var ct=require("@walkeros/core");var ut=require("@walkeros/core"),dt=1e4,lt=6e4,ft=.8;function pt(e={}){const t=e.maxEntries??dt,n=e.lowWaterMark??ft,o=e.sweepIntervalMs??lt,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;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());return{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()}}}var gt=require("@walkeros/core");function mt(e,t){const{cacheConfig:n,cacheStore:o,namespace:r,logger:s,storeId:a,collector:i}=t,c=(e,t)=>{if(!i)return;const n=m(i,{stepId:`store.${a}`,stepType:"store",phase:"in",eventId:"",now:Date.now()});n.meta={op:"cache",cached:"hit"===t,status:t,key:e},(0,gt.emitStep)(i,n)},u={hits:0,misses:0,populates:0,writes:0,deletes:0,inflight_dedups:0},d=n.rules.map(e=>({match:e.match?(0,gt.compileMatcher)(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=(0,gt.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 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,(0,gt.wrapCacheEnvelope)(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),(0,gt.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(${a}): cache ${e} failed for "${t}"; backing succeeded, continuing`;s?s.warn(o,U(n)):console.warn(o,n)}}function ht(e,t,n){const o=`store.${n}`,r=(0,ut.useHooks)(t.get,"StoreGet",e.hooks,e.logger),s=(0,ut.useHooks)(t.set,"StoreSet",e.hooks,e.logger),a=(0,ut.useHooks)(t.delete,"StoreDelete",e.hooks,e.logger);t.get=async t=>{const n=Date.now(),s=m(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:n});s.meta={op:"get",key:t},(0,ut.emitStep)(e,s);try{const s=await r(t),a=Date.now(),i=m(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:a});return i.durationMs=a-n,i.meta={op:"get",key:t},(0,ut.emitStep)(e,i),s}catch(r){const s=Date.now(),a=m(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)},(0,ut.emitStep)(e,a),r}},t.set=async(t,n,r)=>{const a=Date.now(),i=m(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:a});i.meta={op:"set",key:t},(0,ut.emitStep)(e,i);try{await s(t,n,r);const i=Date.now(),c=m(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:i});c.durationMs=i-a,c.meta={op:"set",key:t},(0,ut.emitStep)(e,c)}catch(n){const r=Date.now(),s=m(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)},(0,ut.emitStep)(e,s),n}},t.delete=async t=>{const n=Date.now(),r=m(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:n});r.meta={op:"delete",key:t},(0,ut.emitStep)(e,r);try{await a(t);const r=Date.now(),s=m(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:r});s.durationMs=r-n,s.meta={op:"delete",key:t},(0,ut.emitStep)(e,s)}catch(r){const s=Date.now(),a=m(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)},(0,ut.emitStep)(e,a),r}}}async function vt(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:H(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=pt()),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]=mt(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&&ht(e,o,t);return n}async function yt(e){const t=(0,f.assign)({globalsStatic:{},sessionStatic:{},run:!0,queueMax:1e3},e,{merge:!1,extend:!1}),n={level:e.logger?.level,handler:e.logger?.handler},o=(0,f.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};void 0!==e.name&&(s.name=e.name),void 0!==e.release&&(s.release=e.release),s.push=it(s,e=>nt(s,e)),s.command=function(e,t){return(0,ct.useHooks)(async(n,o,r)=>await(0,ct.tryCatchAsync)(async()=>await t(e,n,o,r),t=>{if(t instanceof ct.FatalError)throw t;return e.status.failed++,e.logger.error("command failed",{...U(t),command:n}),Ve({ok:!1})})(),"Command",e.hooks,e.logger)}(s,tt),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 Ve({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 a=e.stores||{};return s.stores=await vt(s,a),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)}}}(a,s.stores,e),s.stores.__cache||(s.stores.__cache=pt()),s.destinations=await Ne(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=(0,z.validateStepEntry)(r,"Transformer");if(!a.ok){e.logger.warn(`Transformer ${o} invalid (${a.code}): ${a.reason}. Skipping.`);continue}const{config:i}=W(r,"before"),{config:c}=W({...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),m={collector:e,logger:g,id:o,ingest:(0,z.createIngest)(o),config:p,env:s,reportError:H(e,"transformer",o,g)},h=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,z.processEventMapping)(n,t,e.collector);return!o.ignore&&{event:o.event}}}}return{type:"pass",config:e.config,push:e=>({event:e})}}),v=await h(m);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 wt=globalThis;function bt(e){try{const t=wt.window;if(!t)return;t.localStorage.getItem(l.OBSERVE_STORAGE_KEY)===e&&t.localStorage.removeItem(l.OBSERVE_STORAGE_KEY)}catch{}}function kt(e,t){return void 0===t?e:n=>e({...n,release:t})}function It(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=wt.window,t=wt.URLSearchParams;if(!e||!t)return null;try{const n=new t(e.location.search.replace(/^\?/,"")).getAll(l.OBSERVE_STORAGE_KEY);return n.length>0?n[n.length-1]??null:null}catch{return null}}(),r=t??function(){try{return wt.window?.localStorage.getItem(l.OBSERVE_STORAGE_KEY)??null}catch{return null}}();if(!r)return;const s=(0,l.parseObserveCredential)(r);if(!s)return void(null===t?(e.logger.warn("observe: malformed stored credential cleared"),bt(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{wt.window?.localStorage.setItem(l.OBSERVE_STORAGE_KEY,e)}catch{}}(r),null!==t&&function(){const e=wt.window,t=wt.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(l.OBSERVE_STORAGE_KEY);const u=c.toString();e.history.replaceState({},"",`${i}${u?`?${u}`:""}${r}`)}catch{}}();const i=(0,l.createBatchedPoster)({url:`${n.url}/ingest/${s.ses}`,token:s.secret,headers:{"X-Walkeros-Binding":n.binding},onStatus:t=>{401===t&&(bt(r),a&&e.observers.delete(a))}});a=(0,l.createTelemetryObserver)(function(e,t){return void 0===t?e:n=>e({...n,flowId:t})}(kt(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((0,l.createTelemetryObserver)(kt((0,l.createBatchedPoster)({url:`${n.url}/ingest/${n.sessionId}`,token:n.token}),e.release),{flowId:o,level:n.level,sample:n.sample}))}async function Ct(e){e=e||{};const t=await yt(e);It(t,e),await se(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}}//# sourceMappingURL=index.js.map
package/dist/index.mjs CHANGED
@@ -1 +1 @@
1
- var e={},t={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"},n={Commands:t,Utils:{Storage:{Cookie:"cookie",Local:"local",Session:"session"}}};import{assign as o}from"@walkeros/core";function s(e,t){const n={};return Object.entries(t).forEach(([e,t])=>{n[e]=!!t}),e.consent=o(e.consent,n),{update:n}}import{OBSERVE_STORAGE_KEY as r,createBatchedPoster as a,createTelemetryObserver as i,parseObserveCredential as c}from"@walkeros/core";import{assign as u,createLogger as d}from"@walkeros/core";import{assign as l,buildCacheContext as f,clone as p,compileCache as g,checkCache as m,storeCache as h,createIngest as v,debounce as y,emitStep as w,getId as b,getGrantedConsent as k,getNextSteps as I,isDefined as C,isFunction as E,isObject as S,OBSERVE_ENV_KEY as q,processEventMapping as x,stepId as O,tryCatchAsync as j,useHooks as $,compileState as A,applyState as D}from"@walkeros/core";import{emitStep as M}from"@walkeros/core";function T(e,t,n){return{traceId:e.source?.trace??t?._meta.trace??n.trace,sourceId:t?._meta.path[0],parentEventId:t?._meta.parentEventId}}function _(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}import{parseCallPath as P}from"@walkeros/core";function R(e){return"object"==typeof e&&null!==e}function z(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 s of e)o.push(z(s,t,n+1));return o}const s={};t.set(e,s);for(const[o,r]of Object.entries(e))s[o]="function"==typeof r?r:z(r,t,n+1);return s}function U(e){const t=[],n=[],{simulation:o,...s}=e,r=z(s,new WeakMap,0);for(const e of o){const o=P(e);if(0===o.length)continue;const s=o.join(".");if(o.length-1>=8){n.push(s);continue}let a=r,i=!0;for(let e=0;e<o.length-1;e++){const t=a[o[e]];if(!R(t)){i=!1;break}a=t}const c=o[o.length-1];if(!i||!(c in a)){n.push(s);continue}const u=a[c];"function"==typeof u?a[c]=function(...e){return t.push({fn:s,args:e,ts:Date.now()}),u.apply(this,e)}:n.push(s)}return{wrappedEnv:r,calls:t,unresolved:n}}function K(e,t){try{return e[t]}catch{return"[unreadable]"}}function B(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 s=e;if(t.has(s))return"[circular]";if(o>=6)return"[truncated]";let r;t.add(s);try{if(Array.isArray(s))r=s.map(e=>n(e,o+1));else if(function(e){const t=Object.getPrototypeOf(e);return t===Object.prototype||null===t}(s)){const e={};for(const t of Object.keys(s))e[t]=n(K(s,t),o+1);r=e}else r=function(e){try{return String(e)}catch{return"[object]"}}(s)}catch{r="[unreadable]"}return t.delete(s),r};return e.map(e=>n(e,0))}function F(e){return e.map(e=>({fn:e.fn,args:B(e.args),ts:e.ts}))}import{isArray as H,FatalError as G}from"@walkeros/core";import{tryCatch as W,tryCatchAsync as L}from"@walkeros/core";import{stepId as Q}from"@walkeros/core";function V(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 s=[];for(;e.length>=n.max;)s.push(e.shift());return e.push(t),s.length>0&&o&&o(s),{appended:!0,dropped:s.length}}var N=new WeakMap;function Y(e,t,n,o){N.get(e)||(N.set(e,!0),t.warn(n,o))}function J(e){N.delete(e)}var X=5,Z=3e4,ee=()=>Date.now();function te(e){if(void 0!==e)return"number"==typeof e?{threshold:e,cooldown:Z}:{threshold:e.threshold??5,cooldown:e.cooldown??Z}}function ne(e,t,n,o,s){if("partial"===n)return;const r=function(e,t){return e[t]||(e[t]={state:"closed",consecutiveFailures:0}),e[t]}(e,t);return"success"===n?(r.consecutiveFailures=0,r.state="closed",r.probing=!1,void(r.openUntil=void 0)):(r.consecutiveFailures+=1,"half-open"===r.state?(r.state="open",r.probing=!1,void(r.openUntil=ee()+s)):void(r.consecutiveFailures>=o&&(r.state="open",r.probing=!1,r.openUntil=ee()+s)))}function oe(e,t){return!e||("closed"===e.state||"half-open"===e.state||void 0!==e.openUntil&&t>=e.openUntil)}var se=100;function re(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 ae(e,t,n,o){e.dropped[t]||(e.dropped[t]={});const s=e.dropped[t];return s[n]=(s[n]??0)+o,s[n]}function ie(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 ce(e,t,n,o,s){const r=Q(t,n);return(t,a)=>{try{if(a)return s?function(e,t,n,o,s,r){const a=t.dlq=t.dlq||[],i={max:t.config.dlqMax??se},c=V(a,[o,s],i);if(c.dropped>0){const t=ae(e.status,Q("destination",n),"dlq",c.dropped);Y(a,r,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:n,cap:i.max,droppedCount:t})}else a.length<i.max&&J(a);const u=re(e,n);u.failed++,u.dlqSize=a.length,e.status.failed++;const d=te(t.config.breaker);if(d){const o=t.config.id||n;ne(e.status.breakers,Q("destination",o),"transport-failure",d.threshold,d.cooldown)}}(e,s,n,a,t,o):e.status.failed++,void o.error("report error",{...ie(t),event:a.name});e.status.connectionErrors[r]=(e.status.connectionErrors[r]??0)+1,o.error("connection error",ie(t))}catch{}}}import{createIngest as ue,FatalError as de,getMappingValue as le,getSpanId as fe,parseTraceparent as pe,isScope as ge,tryCatchAsync as me,getNextSteps as he,compileCache as ve,checkCache as ye,storeCache as we,applyUpdate as be,buildCacheContext as ke,compileState as Ie,applyState as Ce}from"@walkeros/core";import{createIngest as Ee,emitStep as Se,FatalError as qe,isObject as xe,stepId as Oe,tryCatchAsync as je,useHooks as $e,getNextSteps as Ae,compileCache as De,checkCache as Me,storeCache as Te,buildCacheContext as _e,validateStepEntry as Pe,processEventMapping as Re,compileState as ze,applyState as Ue}from"@walkeros/core";function Ke(e,t){return e.storeId&&t.stores[e.storeId]?t.stores[e.storeId]:t.stores.__cache}function Be(e,t){return e?t.stores[e]:t.stores.__cache}function Fe(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 He(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 Ge(e,t={}){if(!e)return[];if(Array.isArray(e))return e;const n=[],o=new Set;let s=e;for(;s&&t[s]&&!o.has(s);){o.add(s),n.push(s);const e=t[s].next;if(Array.isArray(e)){n.push(...e);break}s=e}return n}async function We(e,t,n){if(t.init&&!t.config.init){const o=t.type||"unknown",s=e.logger.scope(`transformer:${o}`),r={collector:e,logger:s,id:n,ingest:Ee(n),config:t.config,env:Ne(t.config.env),reportError:ce(e,"transformer",n,s)};s.debug("init");const a=await $e(t.init,"TransformerInit",e.hooks,e.logger)(r);if(!1===a)return!1;t.config={...a||t.config,env:a?.env||t.config.env,init:!0},s.debug("init done")}return!0}async function Le(e,t,n,o,s,r){const a=t.type||"unknown",i=e.logger.scope(`transformer:${a}`),c={collector:e,logger:i,id:n,ingest:s,config:t.config,env:{...Ne(t.config.env),...r?{respond:r}:{}},reportError:ce(e,"transformer",n,i)};i.debug("push",{event:o.name});const u="string"==typeof o.id?o.id:"",{traceId:d,sourceId:l,parentEventId:f}=T(o,s,e),p=Date.now(),g=_(e,{stepId:Oe("transformer",n),stepType:"transformer",phase:"in",eventId:u,now:p,traceId:d,sourceId:l,parentEventId:f});g.inEvent=o,Se(e,g);try{const s=await $e(t.push,"TransformerPush",e.hooks,e.logger)(o,c),r=Date.now(),a=_(e,{stepId:Oe("transformer",n),stepType:"transformer",phase:"out",eventId:u,now:r,traceId:d,sourceId:l,parentEventId:f});return a.durationMs=r-p,a.outEvent=s,Se(e,a),i.debug("push done"),s}catch(t){const o=Date.now(),s=_(e,{stepId:Oe("transformer",n),stepType:"transformer",phase:"error",eventId:u,now:o,traceId:d,sourceId:l,parentEventId:f});throw s.durationMs=o-p,s.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},Se(e,s),t}}function Qe(e,t){return e?{...e,_meta:{...e._meta,path:[...e._meta.path]}}:Ee(t)}async function Ve(e,t,n,o,s,r,a){s||(s=Ee(n[0]??"chain")),a&&s._meta&&(s._meta.chainPath=a);let i=o,c=r;for(const o of n){const r=t[o];if(!r){e.logger.warn(`Transformer not found: ${o}`);continue}if(s&&s._meta&&s._meta.path.length>256)return e.logger.error(`Max path length exceeded at ${o}`),{event:null,respond:c};s&&s._meta&&(s._meta.hops++,s._meta.path.push(o));if(!await je(We,t=>{if(t instanceof qe)throw t;return e.status.failed++,e.logger.scope(`transformer:${r.type||"unknown"}`).error("transformer init failed",{transformer:o,...ie(t)}),!1})(e,r,o))return{event:null,respond:c};if(a&&void 0!==r.config?.chainMocks?.[a]){const t=r.config.chainMocks[a];e.logger.scope(`transformer:${r.type||"unknown"}`).debug("chainMock",{chain:a}),i=t;continue}if(void 0!==r.config?.mock){e.logger.scope(`transformer:${r.type||"unknown"}`).debug("mock"),i=r.config.mock;continue}if(r.config?.disabled)continue;const u=r.config?.cache,d=u?De(u):void 0,l=d?Ke(d,e):void 0,f=r.config?.state?ze(r.config.state):void 0,p=f?.filter(e=>"get"===e.mode),g=f?.filter(e=>"set"===e.mode),m=async t=>g&&0!==g.length?Ue(g,t=>Be(t,e),t,e):t;let h;if(d&&l){const e=_e(s,i),t=await Me(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&&(h={key:t.key,ttl:t.rule.ttl})}const v=r.config.before;if(v){const n=Ae(v,_e(s,i));if(1===n.length){const o=Ge(n[0],Fe(t));if(o.length>0){const n=await Ve(e,t,o,i,s,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=>je(Ve,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,ie(t)),{event:null,respond:void 0}))(e,t,Ge(n,Fe(t)),i,Qe(s,n),void 0,a)))}p&&p.length>0&&(i=await Ue(p,t=>Be(t,e),i,e));const y=await je(Le,t=>(e.logger.scope(`transformer:${r.type||"unknown"}`).error("Push failed",ie(t)),!1))(e,r,o,i,s,c);if(!1===y)return{event:null,respond:c,droppedBy:o};if(Array.isArray(y)){const r=n.slice(n.indexOf(o)+1),u=await Promise.all(y.map(async n=>{const o=await m(n.event||i),u=Qe(s,"unknown");if(n.next){const s=Ae(n.next,_e(u,o));if(0===s.length)return{event:o,respond:c};if(1===s.length){const n=Ge(s[0],Fe(t));return n.length>0?Ve(e,t,n,o,u,c,a):{event:o,respond:c}}return(await Promise.all(s.map(n=>je(Ve,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,ie(t)),{event:null,respond:void 0}))(e,t,Ge(n,Fe(t)),o,Qe(u,n),void 0,a)))).map(e=>({event:e.event,respond:void 0}))}return r.length>0?Ve(e,t,r,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:r}=y;if(o&&(c=o),void 0!==r){const o=await m(n||i),u=Ae(r,_e(s,o));if(0===u.length){i=o;continue}if(1===u.length){const n=Ge(u[0],Fe(t));return n.length>0?Ve(e,t,n,o,s,c,a):(e.logger.warn(`Branch target not found: ${JSON.stringify(r)}`),{event:null,respond:c})}return await Promise.all(u.map(n=>je(Ve,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,ie(t)),{event:null,respond:void 0}))(e,t,Ge(n,Fe(t)),o,Qe(s,n),void 0,a))),{event:null,respond:void 0}}n&&(i=n)}g&&g.length>0&&(i=await Ue(g,t=>Be(t,e),i,e)),h&&l&&Te(l,h.key,i,h.ttl);const w=r.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=Ae(r.config.next,_e(s,i));if(1===n.length){const o=Ge(n[0],Fe(t));return o.length>0?Ve(e,t,o,i,s,c,a):{event:i,respond:c}}return n.length>1?(await Promise.all(n.map(n=>je(Ve,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,ie(t)),{event:null,respond:void 0}))(e,t,Ge(n,Fe(t)),i,Qe(s,n),void 0,a))),{event:null,respond:void 0}):{event:i,respond:c}}}return{event:i,respond:c}}function Ne(e){return e&&xe(e)?e:{}}function Ye(e){return"string"==typeof e||!(!Array.isArray(e)||!e.every(e=>"string"==typeof e))}async function Je(e,t,n){if(!t.on||!t.queueOn?.length)return;const o=t.queueOn;t.queueOn=[];const s=n||t.config?.id||"unknown";for(const{type:n,data:r}of o)it(n)&&!ft(e,t,n)||(await me(t.on,t=>{if(t instanceof de)throw t;e.status.failed++,e.logger.scope("source").error("source on flush failed",{sourceId:s,type:n,...ie(t)})})(n,r),it(n)&&lt(e,t,n))}function Xe(e){return Boolean(e.config.init)&&!e.config.require?.length}async function Ze(e,t,n){const{code:o,config:s={},env:r={},primary:a,next:i,before:c,cache:u,terminus:d}=n,l=s.state??n.state,f=l?Ie(l):void 0,p=u,g=p?ve({...p,stop:p.stop??!0}):void 0,m=Ye(i)?Ge(i,Fe(e.transformers)):void 0,h=Ye(c)?Ge(c,Fe(e.transformers)):void 0,v=d??e.push,y=Boolean(d),w=async(n,o,r)=>{if(y)return v(n);let a;const u="string"==typeof n.id&&""!==n.id?n:{...n,id:fe()},d=h??(void 0!==c?(()=>{const t=he(c,ke(r.ingest));if(0===t.length)return[];return Ge(1===t.length?t[0]:t,Fe(e.transformers))})():[]);let l=[u];if(d.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const n=await Ve(e,e.transformers,d,u,r.ingest,r.respond,`source.${t}.before`);if(null===n.event)return{ok:!0};if(n.stopped)return n.respond&&(r.respond=n.respond),{ok:!0};n.respond&&(r.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:fe()}:e);else{const e=n.event;l=""===o||"string"==typeof e.id&&""!==e.id?[e]:[{...e,id:o}]}}if(g){const t=Ke(g,e);if(t){const n=ke(r.ingest),o=await ye(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 be(t,o.rule.update,{...n,cache:{status:"HIT"}},e)),r.respond?.(t),{ok:!0}}if("MISS"===o.status&&g.stop&&r.respond){const s=r.respond,i=o.rule.update,c={...n,cache:{status:"MISS"}},u=o.key,d=o.rule.ttl,l=n=>{we(t,u,n,d),i?a=(async()=>{const t=await be(n,i,c,e);s(t)})():s(n)};r.respond=l}"MISS"!==o.status||g.stop||we(t,o.key,!0,o.rule.ttl)}}}const p=m?{kind:"single",preChain:m}:void 0!==i?(()=>{const t=he(i,ke(r.ingest));return 0===t.length?{kind:"single",preChain:[]}:1===t.length?{kind:"single",preChain:Ge(t[0],Fe(e.transformers))}:{kind:"many",branches:t.map(t=>Ge(t,Fe(e.transformers)))}})():{kind:"single",preChain:[]};f&&f.length>0&&(l=await Promise.all(l.map(t=>Ce(f,t=>Be(t,e),t,e))));let w={ok:!0};for(const n of l)"many"===p.kind?(await Promise.all(p.branches.map((a,i)=>me(async()=>v(n,{...o,id:t,ingest:Qe(r.ingest,`${t}.${i}`),respond:void 0,mapping:s,preChain:a}),t=>(e.logger.scope("source:many").error(`many branch ${i} failed`,ie(t)),{ok:!0}))())),w={ok:!0}):w=await v(n,{...o,id:t,ingest:r.ingest,respond:r.respond,mapping:s,preChain:p.preChain});return a&&await a,w},b=async n=>{const o=ue(t),r=pe(ge(n)?n?.headers?.traceparent:void 0);if(r&&(o._meta.trace=r.trace,o._meta.parentEventId=r.parentSpan),!s.ingest||void 0===n)return o;const a=await le(n,s.ingest,{collector:e});return{...o,...a,_meta:o._meta}},k=e.logger.scope("source").scope(t),I={...r,push:async(e,n={})=>{const o={ingest:ue(t),respond:void 0};return w(e,n,o)},command:e.command,sources:e.sources,elb:e.elb,logger:k},C={collector:e,logger:k,id:t,config:s,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:ce(e,"source",t,k)},E=await me(o,n=>{if(n instanceof de)throw n;e.status.failed++,e.logger.scope("source").error("source factory failed",{sourceId:t,...ie(n)})})(C);if(!E)return;const S=E.type||"unknown",q=e.logger.scope(S).scope(t);return I.logger=q,a&&(E.config={...E.config,primary:a}),E}async function et(e,t={}){const n={};for(const[o,s]of Object.entries(t)){const t=await Ze(e,o,s);if(!t)continue;const r=s.config?.require;t.config={...t.config,init:!1,...r?{require:[...r]}:{}},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 me(n.init.bind(n),n=>{if(n instanceof de)throw n;o=!0,e.status.failed++,e.logger.scope("source").error("source init failed",{sourceId:t,...ie(n)})})(),o||(n.config.init=!0,Xe(n)&&await Je(e,n,t))}return await tt(e),n}async function tt(e){for(const[t,n]of Object.entries(e.sources)){if(Xe(n))continue;const o=n.config.require;if(!o?.length)continue;const s=o.filter(t=>!ut(e,t));s.length!==o.length&&(n.config.require=s,Xe(n)&&await Je(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 s=o.filter(t=>!ut(e,t));if(n.config&&(n.config.require=s),s.length>0)continue;delete e.pending.destinations[t];const r=_t(n);!1!==r.config.queue&&(r.queuePush=[...e.queue]),e.destinations[t]=r}}function nt(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 ot=!1;function st(){ot||(ot=!0,"undefined"!=typeof console&&"function"==typeof console.warn&&console.warn("walkerOS: ignored an on-dispatch call with a non-collector argument"))}function rt(e,t,n,o){if(n instanceof G)throw n;e.logger.scope("on").error("on callback failed",{kind:t,...o,...ie(n)})}var at=[n.Commands.Consent,n.Commands.User,n.Commands.Globals,n.Commands.Custom];function it(e){return at.includes(e)}function ct(e,t){switch(t){case n.Commands.Consent:return Object.keys(e.consent).length>0;case n.Commands.User:return Object.keys(e.user).length>0;case n.Commands.Globals:return Object.keys(e.globals).length>0;case n.Commands.Custom:return Object.keys(e.custom).length>0;default:return!1}}function ut(e,t){switch(t){case n.Commands.Consent:case n.Commands.User:case n.Commands.Globals:case n.Commands.Custom:return ct(e,t);case n.Commands.Run:case n.Commands.Ready:return!0===e.allowed;default:return e.seenEvents.has(String(t))}}function dt(e,t){return e.cellVersion[String(t)]??0}function lt(e,t,n){let o=e.delivery.get(t);o||(o={},e.delivery.set(t,o)),o[String(n)]=dt(e,n)}function ft(e,t,n){return e.allowed&&dt(e,n)>function(e,t,n){const o=e.delivery.get(t),s=o?.[String(n)];return void 0===s?-1:s}(e,t,n)}function pt(e){return e.cascade?()=>{}:(e.cascade={counts:new WeakMap},()=>{e.cascade=void 0})}function gt(e,t,n){const o=e.cascade;if(!o)return!0;let s=o.counts.get(t);s||(s={},o.counts.set(t,s));const r=String(n),a=(s[r]||0)+1;return s[r]=a,a<=8||(9===a&&e.logger.error("state delivery did not converge",{type:r}),!1)}function mt(e,t){return{collector:e,logger:e.logger.scope("on").scope(String(t))}}async function ht(e,t,n){if(!nt(e))return void st();const o=e.on,s=o[t]||[],r=H(n)?n:[n];r.forEach(e=>{s.push(e)}),o[t]=s,yt(e,t,r)}function vt(e,t,n,o,s){if(!t.on)return;const r=t.type||"unknown",a=e.logger.scope(r).scope("on").scope(o),i={collector:e,logger:a,id:n,config:t.config,data:s,env:Rt(t.env,t.config.env),reportError:ce(e,"destination",n,a,t)};W(t.on,t=>rt(e,"destination",t,{destId:n,type:o}))(o,i)}function yt(e,t,o,s){if(!nt(e))return void st();const r=wt(e,t,s);if(o.length)switch(t){case n.Commands.Consent:!function(e,t,o){const s=o||e.consent,r=mt(e,n.Commands.Consent);t.forEach(t=>{ft(e,t,n.Commands.Consent)&&gt(e,t,n.Commands.Consent)&&(Object.keys(s).filter(e=>e in t).forEach(n=>{W(t[n],t=>rt(e,"consent",t,{key:n}))(s,r)}),lt(e,t,n.Commands.Consent))})}(e,o,s);break;case n.Commands.Ready:!function(e,t){if(!e.allowed)return;const o=mt(e,n.Commands.Ready);t.forEach(t=>{W(t,t=>rt(e,"ready",t))(void 0,o)})}(e,o);break;case n.Commands.Run:!function(e,t){if(!e.allowed)return;const o=mt(e,n.Commands.Run);t.forEach(t=>{W(t,t=>rt(e,"run",t))(void 0,o)})}(e,o);break;case n.Commands.Session:!function(e,t){if(!e.session)return;const o=mt(e,n.Commands.Session);t.forEach(t=>{W(t,t=>rt(e,"session",t))(e.session,o)})}(e,o);break;default:{const n=mt(e,t),s=it(t);o.forEach(o=>{"function"==typeof o&&(s&&!ft(e,o,t)||s&&!gt(e,o,t)||(W(o,n=>rt(e,"generic",n,{type:t}))(r,n),s&&lt(e,o,t)))});break}}}function wt(e,t,o){switch(t){case n.Commands.Consent:return o||e.consent;case n.Commands.Session:return e.session;case n.Commands.User:return o||e.user;case n.Commands.Custom:return o||e.custom;case n.Commands.Globals:return o||e.globals;case n.Commands.Config:return o||e.config;default:return}}async function bt(e,t,n,o,s){if(!t.on)return!1;if(it(o)&&!ft(e,t,o))return!1;if(it(o)&&!gt(e,t,o))return!1;const r=await L(t.on,t=>rt(e,"source",t,{sourceId:n,type:o}))(o,s);return it(o)&&lt(e,t,o),!1===r}async function kt(e){if(nt(e))for(const t of at){if(!ct(e,t))continue;const n=wt(e,t);yt(e,t,e.on[t]||[]);for(const[o,s]of Object.entries(e.sources))Xe(s)&&await bt(e,s,o,t,n)}else st()}async function It(e,t,n,o){if(!nt(e))return st(),!0;e.seenEvents.add(String(t));let s=n||[];n||(s=e.on[t]||[]);const r=wt(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)}if(o.on)if(Xe(o)){await bt(e,o,n,t,r)&&(a=!0)}else o.queueOn=o.queueOn||[],o.queueOn.push({type:t,data:r})}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:r});vt(e,o,n,t,r)}});for(const[t,n]of Object.entries(e.sources))Xe(n)&&n.queueOn?.length&&await Je(e,n,t);const i=Object.values(e.sources).some(e=>!Xe(e)&&e.config.require?.length);return(Object.keys(e.pending.destinations).length>0||i)&&await tt(e),yt(e,t,s,o),!a}function Ct(e){return"number"==typeof e&&e>0?e:1e4}var Et=class extends Error{constructor(e){super(e),this.name="DestinationTimeoutError"}};function St(e,t,n){let o;const s=new Promise((e,s)=>{o=setTimeout(()=>s(new Et(n)),t)});return Promise.race([e,s]).finally(()=>{o&&clearTimeout(o)})}var qt=Object.freeze({batched:!0});function xt(e){return e===qt}function Ot(e){return void 0===e?{}:"number"==typeof e?{wait:e}:{wait:e.wait,size:e.size,age:e.age}}function jt(e,t,n){if(!e)return[];if(Array.isArray(e)&&e.every(e=>"string"==typeof e))return Ge(e,t);if("string"==typeof e)return Ge(e,t);const o=I(e,f(n));return 0===o.length?[]:1===o.length?Ge(o[0],t):Ge(o,t)}async function $t(e,t){const{code:n,config:o={},env:s={},before:r,next:a,cache:i,state:c}=t;if(!E(n.push))return Tt({ok:!1,failed:{invalid:{type:"invalid",error:"Destination code must have a push method"}}});const u=o||{init:!1};let d=r?{...u,before:r}:{...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=b(5,"abcdefghijklmnopqrstuvwxyz")}while(e.destinations[l]||e.pending.destinations[l]);if(d.require?.length){e.pending.destinations[l]=t,await tt(e);const n=e.destinations[l];return n?At(e,void 0,{},{[l]:n}):Tt({ok:!0})}const f={...n,config:d,env:Rt(n.env,s)};return e.destinations[l]=f,!1!==f.config.queue&&(f.queuePush=[...e.queue]),At(e,void 0,{},{[l]:f})}async function At(e,t,n={},o){const{allowed:s,consent:r,user:a}=e;if(!s)return Tt({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=V(e.queue,t,{max:n});if(o.dropped>0){const t=ae(e.status,O("collector"),"queue",o.dropped);Y(e.queue,e.logger,"collector.queue overflow; oldest events dropped",{buffer:"queue",cap:n,droppedCount:t})}else e.queue.length<n&&J(e.queue);e.status.in++}o||(o=e.destinations);const i=e.transformers?Fe(e.transformers):{},c=await Promise.all(Object.entries(o||{}).map(async([o,s])=>{if(s.config.disabled)return{id:o,destination:s,skipped:!0};const c=s.config.id||o,u=O("destination",c),d=te(s.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 s=ee();return void 0!==o.openUntil&&s<o.openUntil||(o.state="half-open",o.probing=!0,o.openUntil=s+n,!1)}(e.status.breakers,u,d.cooldown))return{id:o,destination:s,skipped:!0};const y=t=>{d&&ne(e.status.breakers,u,t,d.threshold,d.cooldown)},b=()=>{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 I=(s.queuePush||[]).map(e=>({...e,consent:r}));s.queuePush=[],t&&I.push(p(t));const C=n.ingest?{...n.ingest,_meta:{...n.ingest._meta,path:[...n.ingest._meta.path]}}:v("unknown");if(!I.length&&!s.queueOn?.length)return b(),{id:o,destination:s,skipped:!0};if(!I.length&&s.queueOn?.length){if(!k(s.config.consent,r))return b(),{id:o,destination:s,skipped:!0};let t=!1;try{t=await Dt(e,s,o,!0)}catch(t){e.status.failed++;const n=s.type||"unknown";e.logger.scope(n).error("destination init failed",{error:t instanceof Error?t.message:String(t)}),y("transport-failure")}return b(),{id:o,destination:s,skipped:!t}}const E=[],S=I.filter(t=>{const n=k(s.config.consent,r,t.consent);if(n)return t.consent=n,E.push(t),!1;const a=_(e,{stepId:O("destination",o),stepType:"destination",phase:"skip",eventId:"string"==typeof t.id?t.id:"",now:Date.now(),...T(t,C,e)});return a.skipReason="consent",r&&(a.consent={...r}),s.config.consent&&(a.meta={required:{...s.config.consent}}),w(e,a),!0});if(S.length>0){const t=s.queuePush,n=s.config.id||o,r={max:s.config.queueMax??1e3};let a=0;for(const e of S){a+=V(t,e,r).dropped}if(a>0){re(e,n);const o=ae(e.status,O("destination",n),"queue",a);Y(t,e.logger.scope(s.type||"unknown"),"destination.queuePush overflow; oldest events dropped",{buffer:"queuePush",destination:n,cap:r.max,droppedCount:o})}else t.length<r.max&&J(t)}if(!E.length)return b(),{id:o,destination:s,queue:I};let q,x,$=!1;try{$=await Dt(e,s,o,!0)}catch(t){e.status.failed++;const n=s.type||"unknown";e.logger.scope(n).error("destination init failed",{error:t instanceof Error?t.message:String(t)}),y("transport-failure")}if(!$)return b(),{id:o,destination:s,queue:I};s.dlq||(s.dlq=[]);const M=jt(s.config.before,i,C),P=s.config.next,R=s.config?.cache,z=R?g(R):void 0,U=z?Ke(z,e):void 0,K=s.config?.state?A(s.config.state):void 0,B=K?.filter(e=>"get"===e.mode),F=K?.filter(e=>"set"===e.mode);let H=0,G=0,W=0;return await Promise.all(E.map(async t=>{let r,c;if(t.user=l(a,t.user),z?.stop&&U){const e=f(C,t),n=await m(z,U,e);if("HIT"===n?.status)return t;"MISS"===n?.status&&(r={key:n.key,ttl:n.rule.ttl})}let u=[t],d=n.respond;if(M.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const s=await Ve(e,e.transformers,M,t,C,n.respond,`destination.${o}.before`);if(null===s.event)return t;s.respond&&(d=s.respond),u=Array.isArray(s.event)?s.event:[s.event]}const p=async(t,n)=>{let r=n,a=!1;if(z&&!z.stop&&U){const e=f(C,t),n=await m(z,U,e);if("HIT"===n?.status)return!1;"MISS"===n?.status&&(r={key:n.key,ttl:n.rule.ttl},a=!0)}B&&B.length>0&&t&&(t=await D(B,t=>Be(t,e),t,e));const u=Date.now();let l=!1;const p=await j(Mt,n=>{const r=s.type||"unknown";e.logger.scope(r).error("Push failed",{...ie(n),event:t.name}),q=n,l=!0;const a=s.dlq,i=s.config.id||o,c={max:s.config.dlqMax??se},u=V(a,[t,n],c);if(u.dropped>0){re(e,i);const t=ae(e.status,O("destination",i),"dlq",u.dropped);Y(a,e.logger.scope(s.type||"unknown"),"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:i,cap:c.max,droppedCount:t})}else a.length<c.max&&J(a)})(e,s,o,t,C,d);if(H+=Date.now()-u,r&&U&&void 0===s.config.mock&&(a?h(U,r.key,p??!0,r.ttl):void 0===c&&(c=p??!0)),!l&&!xt(p)&&F&&F.length>0&&t&&(t=await D(F,t=>Be(t,e),t,e)),void 0===p||xt(p)||(x=p),xt(p)&&G++,!l&&P){void 0!==p&&(C._response=p);const n=jt(P,i,C);if(n.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const s=await Ve(e,e.transformers,n,t,C,d,`destination.${o}.next`);s.respond&&(d=s.respond)}}return!0};for(const e of u)await p(e,r)&&W++;return r&&U&&void 0!==c&&void 0===s.config.mock&&h(U,r.key,c,r.ttl),t})),{id:o,destination:s,error:q,response:x,totalDuration:H,batchedCount:G,allowedCount:E.length,pushedCount:W,canonicalId:c,breakerConfig:d}})),u={},d={},y={};for(const t of c){if(t.skipped)continue;const n=t.destination,o={type:n.type||"unknown",data:t.response};re(e,t.id);const s=e.status.destinations[t.id],r=Date.now();s.queuePushSize=n.queuePush?.length??0,s.dlqSize=n.dlq?.length??0;const a=t.breakerConfig,i=t.canonicalId?O("destination",t.canonicalId):void 0,c=t=>{a&&i&&ne(e.status.breakers,i,t,a.threshold,a.cooldown)};if(t.error)o.error=t.error,y[t.id]=o,s.failed++,s.lastAt=r,s.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,s.count++,s.lastAt=r,s.duration+=t.totalDuration||0,e.status.out++,c("success"))}}return Tt({event:t,...Object.keys(u).length&&{done:u},...Object.keys(d).length&&{queued:d},...Object.keys(y).length&&{failed:y}})}async function Dt(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 s=t.type||"unknown",r=e.logger.scope(s),a={collector:e,logger:r,id:n,config:t.config,env:Rt(t.env,t.config.env),reportError:ce(e,"destination",n,r,t)};r.debug("init");const i=Date.now();let c;w(e,_(e,{stepId:O("destination",n),stepType:"destination",phase:"init",eventId:"",now:i}));try{c=await $(t.init,"DestinationInit",e.hooks,e.logger)(a)}catch(t){const o=Date.now(),s=_(e,{stepId:O("destination",n),stepType:"destination",phase:"error",eventId:"",now:o});throw s.durationMs=o-i,s.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},w(e,s),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:s,data:r}of o)vt(e,t,n,s,r)}r.debug("init done")}return!0}async function Mt(e,t,n,o,s,r){const{config:a}=t,i=await x(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:s,env:{...Rt(t.env,a.env),...r?{respond:r}:{}},reportError:ce(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:[]},s=Ot(l?.batch),r=Ot(a.batch),i=s.wait??r.wait??3e4,c=s.size??r.size??1e3,d=s.age??r.age??3e4,g=Rt(t.env,a.env),m=y(async()=>{const o=t.batches[p],s=o.batched;if(0===s.entries.length)return;const r={key:s.key,entries:s.entries,events:s.events,data:s.data};s.entries=[],s.events=[],s.data=[];const i=r.entries[0],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:ce(e,"destination",n,u,t)};u.debug("push batch",{events:r.entries.length});const d=t.config.id||n,l=re(e,d),f=te(t.config.breaker),m=O("destination",d),h=t=>{f&&ne(e.status.breakers,m,t,f.threshold,f.cooldown)},v=Date.now(),y=new Map;let b,k=!1;const I=n=>{const o=t.dlq=t.dlq||[],s={max:t.config.dlqMax??se};let r=0;for(const e of n){r+=V(o,e,s).dropped}if(r>0){const t=ae(e.status,O("destination",d),"dlq",r);Y(o,u,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:d,cap:s.max,droppedCount:t})}else o.length<s.max&&J(o);l.failed+=n.length,l.dlqSize=o.length,e.status.failed+=n.length};let C=r.entries.length;const E=Ct(a.timeout),q=await j((o,s)=>St(Promise.resolve($(t.pushBatch,"DestinationPushBatch",e.hooks,e.logger)(o,s)),E,`Destination "${n}" batch delivery timed out after ${E}ms`),e=>{C=0,k=!0,b=e,I(r.entries.map(t=>[t.event,e])),h("transport-failure"),u.error("Push batch failed",{error:e instanceof Error?e.message:String(e),entries:r.entries.length})})(r,c);if(S(x=q)&&Array.isArray(x.failed)&&q.failed.length>0){const e=[];for(const t of q.failed){const n=r.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&&(I(e),C=Math.max(0,r.entries.length-e.length),u.error("Push batch partial failure",{failed:e.length,delivered:C,entries:r.entries.length}))}var x;const A=Date.now();r.entries.forEach((t,o)=>{const s=k||y.has(o),a=T(t.event,t.ingest,e),i=_(e,{stepId:O("destination",n),stepType:"destination",phase:s?"error":"flush",eventId:"string"==typeof t.event.id?t.event.id:"",now:A,traceId:a.traceId,sourceId:a.sourceId,parentEventId:a.parentEventId});if(i.batch={size:r.entries.length,index:o},i.durationMs=A-v,s){const e=k?b:y.get(o);i.error=e instanceof Error?{name:e.name,message:e.message}:{message:String(e)}}w(e,i)}),u.debug("push batch done"),l.inFlightBatch=Math.max(0,(l.inFlightBatch??0)-r.entries.length),C>0&&(l.count+=C,l.lastAt=Date.now(),e.status.out+=C,h("success"))},{wait:i,size:c,age:d});t.batches[p]={batched:o,isDefault:!f,batchFn:()=>{m()},flush:async()=>{await m.flush()}}}const c=t.batches[p];c.batched.entries.push({event:i.event,ingest:s,respond:r,rule:l,data:i.data}),c.batched.events.push(i.event),C(i.data)&&c.batched.data.push(i.data);const d="string"==typeof i.event.id?i.event.id:"",g=T(o,s,e),m=Date.now(),h=_(e,{stepId:O("destination",n),stepType:"destination",phase:"in",eventId:d,now:m,traceId:g.traceId,sourceId:g.sourceId,parentEventId:g.parentEventId});i.mappingKey&&(h.mappingKey=i.mappingKey),i.event.consent&&(h.consent={...i.event.consent}),h.inEvent=i.event,w(e,h);const v=_(e,{stepId:O("destination",n),stepType:"destination",phase:"out",eventId:d,now:m,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},w(e,v);const b=t.config.id||n,k=re(e,b);return k.inFlightBatch=(k.inFlightBatch??0)+1,c.batchFn(),qt}{let r;if(u.debug("push",{event:i.event.name}),"trace"===e.observeLevel?.()&&Array.isArray(t.calls)&&t.calls.length>0){const e=U({...d.env,simulation:t.calls});d.env=e.wrappedEnv,r=e.calls,e.unresolved.length>0&&(e.wrappedEnv[q]={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}=T(o,s,e),g=Date.now(),m=_(e,{stepId:O("destination",n),stepType:"destination",phase:"in",eventId:c,now:g,traceId:l,sourceId:f,parentEventId:p});i.mappingKey&&(m.mappingKey=i.mappingKey),i.event.consent&&(m.consent={...i.event.consent}),m.inEvent=i.event,w(e,m);try{const o=Ct(a.timeout),s=await St(Promise.resolve($(t.push,"DestinationPush",e.hooks,e.logger)(i.event,d)),o,`Destination "${n}" delivery timed out after ${o}ms`),m=Date.now(),h=_(e,{stepId:O("destination",n),stepType:"destination",phase:"out",eventId:c,now:m,traceId:l,sourceId:f,parentEventId:p});return h.durationMs=m-g,h.outEvent=i.event,r&&r.length>0&&(h.calls=F(r)),C(s)&&(h.meta={...h.meta,response:s}),i.mappingKey&&(h.mappingKey=i.mappingKey),w(e,h),u.debug("push done"),s}catch(t){const o=Date.now(),s=_(e,{stepId:O("destination",n),stepType:"destination",phase:"error",eventId:c,now:o,traceId:l,sourceId:f,parentEventId:p});throw s.durationMs=o-g,s.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},r&&r.length>0&&(s.calls=F(r)),i.mappingKey&&(s.mappingKey=i.mappingKey),w(e,s),t}}}function Tt(e){return{ok:!e?.failed,...e}}function _t(e){const{code:t,config:n={},env:o={},cache:s,state:r}=e,{config:a}=He(e,"before"),{config:i}=He({...e,config:a},"next"),c={...t.config,...n,...i};s&&(c.cache=s),void 0!==r&&void 0===c.state&&(c.state=r);const u=Rt(t.env,o);return{...t,config:c,env:u}}async function Pt(e,t={}){const n={};for(const[o,s]of Object.entries(t))s.config?.require?.length?e.pending.destinations[o]=s:n[o]=_t(s);return n}function Rt(e,t){return e||t?t?e&&S(e)&&S(t)?{...e,...t}:t:e:{}}import{assign as zt,getSpanId as Ut,getTraceId as Kt,InvalidEventError as Bt,isFunction as Ft,isString as Ht}from"@walkeros/core";import{isObject as Gt}from"@walkeros/core";var Wt=5e3;async function Lt(e){const t=e.logger;await Qt(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 s=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`)),Wt)})])}catch(t){s.error(`destination '${e}' batch flush failed: ${t}`)}finally{n&&clearTimeout(n)}})});await Promise.allSettled(n)}(e.destinations,t),await Qt(e.destinations,"destination",t),await Qt(e.transformers,"transformer",t),await Qt(e.stores,"store",t)}async function Qt(e,t,n){const o=Object.entries(e).map(async([e,o])=>{const s=o.destroy;if(!s)return;const r=o.type||"unknown",a=n.scope(r),i={id:e,config:o.config,env:o.env??{},logger:a};let c;try{await Promise.race([s(i),new Promise((n,o)=>{c=setTimeout(()=>o(new Error(`${t} '${e}' destroy timed out`)),Wt)})])}catch(n){a.error(`${t} '${e}' destroy failed: ${n}`)}finally{c&&clearTimeout(c)}});await Promise.allSettled(o)}function Vt(e,t){e.stateVersion++,e.cellVersion[t]=e.stateVersion}async function Nt(e,t,o){let r,a,i=!1;const c=pt(e);try{return await async function(){switch(t){case n.Commands.Config:Gt(o)&&(zt(e.config,o,{shallow:!1}),a=o,i=!0);break;case n.Commands.Consent:if(Gt(o)){const{update:t}=s(e,o);Vt(e,n.Commands.Consent),a=t,i=!0}break;case n.Commands.Custom:Gt(o)&&(e.custom=zt(e.custom,o),Vt(e,n.Commands.Custom),a=o,i=!0);break;case n.Commands.Destination:Gt(o)&&"code"in o&&Gt(o.code)&&(r=await $t(e,o));break;case n.Commands.Globals:Gt(o)&&(e.globals=zt(e.globals,o),Vt(e,n.Commands.Globals),a=o,i=!0);break;case n.Commands.Hook:if(Gt(o)&&Ht(o.name)&&Ft(o.fn)){const{name:t,fn:n}=o;e.hooks[t]=n,a=o,i=!0}break;case n.Commands.On:if(Gt(o)&&Ht(o.type)){const{type:t,rules:n}=o;await ht(e,t,n)}break;case n.Commands.Ready:i=!0;break;case n.Commands.Run:r=await Zt(e,o),i=!0;break;case n.Commands.Session:i=!0;break;case n.Commands.Shutdown:e.hasShutdown||(e.hasShutdown=!0,await Lt(e));break;case n.Commands.User:Gt(o)&&(zt(e.user,o,{shallow:!1}),Vt(e,n.Commands.User),a=o,i=!0);break;default:return e.logger.warn("unknown command",{command:t}),Tt({ok:!1})}if(i){await It(e,t,void 0,a);const n=await At(e);if(r&&!1===r.ok){const e={...n.failed??{},...r.failed??{}};r={...n,ok:!1,...Object.keys(e).length>0?{failed:e}:{}}}else r=n}return r||Tt({ok:!0})}()}finally{c()}}function Yt(e,t){return{timing:Math.round((Date.now()-e.timing)/10)/100,source:{type:"collector",schema:"4"},...t}}function Jt(e,t,n){const o=t.name;if("string"!=typeof o)throw new Bt(void 0===o?"Event name is required":"Event name is invalid");if(!o)throw new Bt("Event name is required");const[s,r]=o.split(" ");if(!s||!r)throw new Bt("Event name is invalid");const{timestamp:a=Date.now(),name:i=`${s} ${r}`,data:c={},context:u={},globals:d={},custom:l={},user:f=e.user,nested:p=[],consent:g=e.consent,id:m=Ut(),trigger:h="",entity:v=s,action:y=r,timing:w=0,source:b={type:"collector",schema:"4"}}=t,k=b??{type:"collector",schema:"4"},I=k.count??(e.count+=1),C=k.trace??n?._meta.trace??e.trace,E={...k,count:I};void 0!==C&&(E.trace=C);const S=e.name??k.platform??"default",q=e.release??"4.6.0";E.release={...k.release,[S]:q};return{name:i,data:c,context:u,globals:zt(e.globals,d),custom:l,user:f,nested:p,consent:g,id:m,trigger:h,entity:v,action:y,timestamp:a,timing:w,source:E}}function Xt(e,t,n){return Jt(e,Yt(e,t),n)}async function Zt(e,t){e.allowed=!0,e.timing=Date.now(),e.trace=Kt(),e.count=0,t&&(t.consent&&(e.consent=zt(e.consent,t.consent),Vt(e,n.Commands.Consent)),t.user&&(e.user=zt(e.user,t.user),Vt(e,n.Commands.User)),t.globals&&(e.globals=zt(e.config.globalsStatic||{},t.globals),Vt(e,n.Commands.Globals)),t.custom&&(e.custom=zt(e.custom,t.custom),Vt(e,n.Commands.Custom))),Object.values(e.destinations).forEach(e=>{e.queuePush=[]}),e.queue=[],e.round++,await tt(e),await kt(e);let o=!0;const s={};if(e.preRunQueue.length){const t=e.preRunQueue.splice(0);e.logger.debug("replaying pre-run events",{count:t.length});for(const{event:n,options:r}of t){const t=await e.push(n,r);!1===t.ok&&(o=!1),t.failed&&Object.assign(s,t.failed)}}const r=await At(e);if(o)return r;const a={...r.failed??{},...s};return{...r,ok:!1,...Object.keys(a).length>0?{failed:a}:{}}}import{createIngest as en,emitStep as tn,FatalError as nn,getGrantedConsent as on,getSpanId as sn,InvalidEventError as rn,processEventMapping as an,tryCatchAsync as cn,useHooks as un}from"@walkeros/core";function dn(e,t){const n=un(async(n,o={})=>await cn(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 s=V(e.preRunQueue,{event:n,options:o},{max:t});if(s.dropped>0){const n=ae(e.status,"collector.preRun","queue",s.dropped);Y(e.preRunQueue,e.logger,"collector.preRunQueue overflow; oldest events dropped",{buffer:"queue",cap:t,droppedCount:n})}else e.preRunQueue.length<t&&J(e.preRunQueue);return e.logger.debug("event held until run",{name:n.name,dropped:s.dropped}),Tt({ok:!0})}const s=Date.now(),{id:r,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,m=a??en(r||"unknown");if(c){const t=await an(p,c,e);if(t.ignore)return Tt({ok:!0});if(c.consent){if(!on(c.consent,e.consent,t.event.consent))return Tt({ok:!0})}p=t.event}if(u?.length&&e.transformers&&Object.keys(e.transformers).length>0){const n=await Ve(e,e.transformers,u,p,m,f,r?`source.${r}.next`:void 0);if(null===n.event)return e.logger.debug("Event dropped by transformer chain"+(n.droppedBy?` (${n.droppedBy})`:"")),Tt({ok:!0,dropped:!0});if(n.stopped)return n.respond&&(f=n.respond),Tt({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 s=""!==o&&n.id===o?{...n,id:sn()}:n,a=t(s),i=Jt(e,a,m);return At(e,i,{id:r,ingest:m,respond:f},g)}));if(r){e.status.sources[r]||(e.status.sources[r]={count:0,duration:0});const t=e.status.sources[r];t.count+=n.event.length,t.lastAt=Date.now(),t.duration+=Date.now()-s}return a[0]??Tt({ok:!0})}p=""===o||"string"==typeof n.event.id&&""!==n.event.id?n.event:{...n.event,id:o}}const h=Xt(e,p,m),v=await At(e,h,{id:r,ingest:m,respond:f},g);if(r){e.status.sources[r]||(e.status.sources[r]={count:0,duration:0});const t=e.status.sources[r];t.count++,t.lastAt=Date.now(),t.duration+=Date.now()-s}return v},t=>{if(t instanceof nn)throw t;if(t instanceof rn){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}),Tt({ok:!1,invalid:!0,error:t.message})}return e.status.failed++,e.logger.error("push failed",{...ie(t),event:n.name}),Tt({ok:!1})})(),"Push",e.hooks,e.logger);return async(t,o)=>{const s="string"==typeof t.id&&""!==t.id?t:{...t,id:sn()},r="string"==typeof s.id?s.id:"",{traceId:a,sourceId:i,parentEventId:c}=T(s,o?.ingest,e),u=Date.now(),d=_(e,{stepId:"collector.push",stepType:"collector",phase:"in",eventId:r,now:u,traceId:a,sourceId:i,parentEventId:c});d.inEvent=s,tn(e,d);try{const t=await n(s,o),d=Date.now(),l=_(e,{stepId:"collector.push",stepType:"collector",phase:"out",eventId:r,now:d,traceId:a,sourceId:i,parentEventId:c});return l.durationMs=d-u,l.outEvent=t,tn(e,l),t}catch(t){const n=Date.now(),o=_(e,{stepId:"collector.push",stepType:"collector",phase:"error",eventId:r,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)},tn(e,o),t}}}import{FatalError as ln,useHooks as fn,tryCatchAsync as pn}from"@walkeros/core";import{emitStep as gn,useHooks as mn}from"@walkeros/core";function hn(e={}){const t=e.maxEntries??1e4,n=e.lowWaterMark??.8,o=e.sweepIntervalMs??6e4,s=Math.floor(t*n),r=new Map,a={hits:0,misses:0,populates:0,writes:0,deletes:0,evictions_entries:0,evictions_ttl:0};let i;o>0&&(i=setInterval(function(){const e=Date.now();let t=0;for(const[n,o]of r)void 0!==o.expires&&o.expires<=e&&(r.delete(n),t++);a.evictions_ttl+=t},o),i&&"function"==typeof i.unref&&i.unref());return{type:"memory",config:{},get(e){const t=r.get(e);if(t)return void 0!==t.expires&&t.expires<=Date.now()?(r.delete(e),a.evictions_ttl++,void a.misses++):(r.delete(e),r.set(e,t),a.hits++,t.value);a.misses++},set(e,n,o){const i=!r.has(e);i||r.delete(e),r.set(e,{value:n,expires:void 0!==o?Date.now()+o:void 0}),a.writes++,i&&a.populates++,r.size>t&&function(){if(r.size<=t)return;const e=r.size-s;let n=0;for(const t of r.keys()){if(n>=e)break;r.delete(t),n++}a.evictions_entries+=n}()},delete(e){r.delete(e)&&a.deletes++},get counters(){return{...a}},destroy(){void 0!==i&&(clearInterval(i),i=void 0),r.clear()}}}import{compileMatcher as vn,emitStep as yn,readCacheEnvelope as wn,wrapCacheEnvelope as bn}from"@walkeros/core";function kn(e,t){const{cacheConfig:n,cacheStore:o,namespace:s,logger:r,storeId:a,collector:i}=t,c=(e,t)=>{if(!i)return;const n=_(i,{stepId:`store.${a}`,stepType:"store",phase:"in",eventId:"",now:Date.now()});n.meta={op:"cache",cached:"hit"===t,status:t,key:e},yn(i,n)},u={hits:0,misses:0,populates:0,writes:0,deletes:0,inflight_dedups:0},d=n.rules.map(e=>({match:e.match?vn(e.match):()=>!0,ttl:e.ttl})),l=e=>`${s}:${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),s=await o.get(n),r=wn(s);if(void 0!==r){if(!("expired"in r))return u.hits++,c(t,"hit"),r.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 s=await e.get(t);if(void 0===s)return;const r=f(t,s);if(r)try{const e=1e3*r.ttl;await o.set(n,bn(s,e),e),u.populates++}catch(e){g("set",t,e)}return s}finally{p.delete(n)}})();return p.set(n,i),i},async set(t,n,s){u.writes++,await e.set(t,n,s);const r=f(t,n);if(r)try{const e=1e3*r.ttl;await o.set(l(t),bn(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`;r?r.warn(o,ie(n)):console.warn(o,n)}}function In(e,t,n){const o=`store.${n}`,s=mn(t.get,"StoreGet",e.hooks,e.logger),r=mn(t.set,"StoreSet",e.hooks,e.logger),a=mn(t.delete,"StoreDelete",e.hooks,e.logger);t.get=async t=>{const n=Date.now(),r=_(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:n});r.meta={op:"get",key:t},gn(e,r);try{const r=await s(t),a=Date.now(),i=_(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:a});return i.durationMs=a-n,i.meta={op:"get",key:t},gn(e,i),r}catch(s){const r=Date.now(),a=_(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:r});throw a.durationMs=r-n,a.meta={op:"get",key:t},a.error=s instanceof Error?{name:s.name,message:s.message}:{message:String(s)},gn(e,a),s}},t.set=async(t,n,s)=>{const a=Date.now(),i=_(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:a});i.meta={op:"set",key:t},gn(e,i);try{await r(t,n,s);const i=Date.now(),c=_(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:i});c.durationMs=i-a,c.meta={op:"set",key:t},gn(e,c)}catch(n){const s=Date.now(),r=_(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:s});throw r.durationMs=s-a,r.meta={op:"set",key:t},r.error=n instanceof Error?{name:n.name,message:n.message}:{message:String(n)},gn(e,r),n}},t.delete=async t=>{const n=Date.now(),s=_(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:n});s.meta={op:"delete",key:t},gn(e,s);try{await a(t);const s=Date.now(),r=_(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:s});r.durationMs=s-n,r.meta={op:"delete",key:t},gn(e,r)}catch(s){const r=Date.now(),a=_(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:r});throw a.durationMs=r-n,a.meta={op:"delete",key:t},a.error=s instanceof Error?{name:s.name,message:s.message}:{message:String(s)},gn(e,a),s}}}async function Cn(e,t={}){const n={};for(const[o,s]of Object.entries(t)){const{code:t,config:r={},env:a={}}=s,i=e.logger.scope("store").scope(o),c={collector:e,logger:i,id:o,config:r,env:a,reportError:ce(e,"store",o,i)},u=await t(c);n[o]=u}const o=t,s=function(e){const t={};for(const n of Object.keys(e))t[n]="WHITE";const n=[],o=[];function s(r){const a=t[r];if("BLACK"===a)return;if("GRAY"===a){const e=o.indexOf(r),t=o.slice(-1===e?0:e).concat(r).join(" -> ");throw new Error(`Cycle in cache.store chain: ${t}`)}t[r]="GRAY",o.push(r);const i=e[r].cache?.store;if(void 0!==i){if(!(i in e))throw new Error(`Store "${r}" cache.store references "${i}", which is not declared in flow.stores`);s(i)}o.pop(),t[r]="BLACK",n.push(r)}for(const n of Object.keys(e))"WHITE"===t[n]&&s(n);return n}(o);for(const t of s){const s=o[t].cache;if(!s)continue;let r,a;void 0!==s.store?(r=n[s.store],a=s.store):(n.__cache||(n.__cache=hn()),r=n.__cache,a="__cache");const i=s.namespace??t;e.logger.scope("store-cache").scope(t).info(`store "${t}" caches with namespace "${i}:" via ${a}`),n[t]=kn(n[t],{storeId:t,cacheConfig:s,cacheStore:r,namespace:i,logger:e.logger.scope("store-cache").scope(t),collector:e})}for(const[t,o]of Object.entries(n))"__cache"!==t&&In(e,o,t);return n}async function En(e){const t=u({globalsStatic:{},sessionStatic:{},run:!0,queueMax:1e3},e,{merge:!1,extend:!1}),n={level:e.logger?.level,handler:e.logger?.handler},o=d(n),s={...t.globalsStatic,...e.globals},r={allowed:!1,config:t,consent:e.consent||{},custom:e.custom||{},destinations:{},transformers:{},stores:{},globals:s,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};void 0!==e.name&&(r.name=e.name),void 0!==e.release&&(r.release=e.release),r.push=dn(r,e=>Yt(r,e)),r.command=function(e,t){return fn(async(n,o,s)=>await pn(async()=>await t(e,n,o,s),t=>{if(t instanceof ln)throw t;return e.status.failed++,e.logger.error("command failed",{...ie(t),command:n}),Tt({ok:!1})})(),"Command",e.hooks,e.logger)}(r,Nt),r.elb=function(e){return async(t,n,o,s,r)=>{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 Tt({ok:!1});a={...t},n&&"object"==typeof n&&!Array.isArray(n)&&(a.data={...a.data||{},...n})}return o&&"object"==typeof o&&(a.context=o),s&&Array.isArray(s)&&(a.nested=s),r&&"object"==typeof r&&(a.custom=r),e.push(a)}}(r);const a=e.stores||{};return r.stores=await Cn(r,a),function(e,t,n){const o=new Map;for(const[n,s]of Object.entries(e))t[n]&&o.set(s,t[n]);if(0!==o.size)for(const e of[n.transformers,n.destinations,n.sources])if(e)for(const t of Object.values(e))s(t.env);function s(e){if(e)for(const[t,n]of Object.entries(e))if("object"==typeof n&&null!==n){const s=o.get(n);s&&(e[t]=s)}}}(a,r.stores,e),r.stores.__cache||(r.stores.__cache=hn()),r.destinations=await Pt(r,e.destinations||{}),r.transformers=await async function(e,t={}){const n={};for(const[o,s]of Object.entries(t)){const{code:t,env:r={}}=s,a=Pe(s,"Transformer");if(!a.ok){e.logger.warn(`Transformer ${o} invalid (${a.code}): ${a.reason}. Skipping.`);continue}const{config:i}=He(s,"before"),{config:c}=He({...s,config:i},"next"),u=Object.keys(r).length>0?{...c,env:r}:c,{cache:d}=s,l=d?{...u,cache:d}:u,f=s.config?.state??s.state,p=void 0!==f&&void 0===l.state?{...l,state:f}:l,g=e.logger.scope("transformer").scope(o),m={collector:e,logger:g,id:o,ingest:Ee(o),config:p,env:r,reportError:ce(e,"transformer",o,g)},h=t??(e=>{const t=s.mapping;if(t){const n=[];if(void 0!==t.data&&n.push("data"),t.mapping)for(const[e,o]of Object.entries(t.mapping))if("object"==typeof o&&null!==o)for(const[t,s]of Object.entries(o)){if("object"!=typeof s||null===s)continue;const o=s;void 0!==o.data&&n.push(`mapping[${e}][${t}].data`),void 0!==o.silent&&n.push(`mapping[${e}][${t}].silent`)}return n.length>0&&e.collector.logger.warn(`Transformer ${o}: \`${n.join(", ")}\` ignored at transformer position (only event-mutating fields apply).`),{type:"pass",config:e.config,push:async n=>{const o=await Re(n,t,e.collector);return!o.ignore&&{event:o.event}}}}return{type:"pass",config:e.config,push:e=>({event:e})}}),v=await h(m);void 0!==s.before&&void 0===v.config?.before&&(v.config={...v.config??{},before:s.before}),void 0!==s.next&&void 0===v.config?.next&&(v.config={...v.config??{},next:s.next}),void 0!==f&&void 0===v.config?.state&&(v.config={...v.config??{},state:f}),n[o]=v}return n}(r,e.transformers||{}),r}var Sn=globalThis;function qn(e){try{const t=Sn.window;if(!t)return;t.localStorage.getItem(r)===e&&t.localStorage.removeItem(r)}catch{}}function xn(e,t){return void 0===t?e:n=>e({...n,release:t})}function On(e,t){if(t.observers)for(const n of t.observers)e.observers.add(n);const n=t.observe;if(!n)return;const o=e.name??"default";if("binding"in n){const t=function(){const e=Sn.window,t=Sn.URLSearchParams;if(!e||!t)return null;try{const n=new t(e.location.search.replace(/^\?/,"")).getAll(r);return n.length>0?n[n.length-1]??null:null}catch{return null}}(),s=t??function(){try{return Sn.window?.localStorage.getItem(r)??null}catch{return null}}();if(!s)return;const u=c(s);if(!u)return void(null===t?(e.logger.warn("observe: malformed stored credential cleared"),qn(s)):e.logger.warn("observe: malformed credential ignored"));if(u.pb!==n.binding)return void e.logger.warn("observe: credential binding mismatch, credential ignored");let d;!function(e){try{Sn.window?.localStorage.setItem(r,e)}catch{}}(s),null!==t&&function(){const e=Sn.window,t=Sn.URLSearchParams;if(e&&t)try{const n=e.location.href,o=n.indexOf("#"),s=o>=0?n.slice(o):"",a=o>=0?n.slice(0,o):n,i=a.indexOf("?"),c=i>=0?a.slice(0,i):a,u=new t(i>=0?a.slice(i+1):"");u.delete(r);const d=u.toString();e.history.replaceState({},"",`${c}${d?`?${d}`:""}${s}`)}catch{}}();const l=a({url:`${n.url}/ingest/${u.ses}`,token:u.secret,headers:{"X-Walkeros-Binding":n.binding},onStatus:t=>{401===t&&(qn(s),d&&e.observers.delete(d))}});d=i(function(e,t){return void 0===t?e:n=>e({...n,flowId:t})}(xn(l,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(d);const f=n.level;return void(void 0!==f&&(e.observeLevel=()=>f))}if("off"===n.level)return;const s=n.level;void 0!==s&&(e.observeLevel=()=>s),e.observers.add(i(xn(a({url:`${n.url}/ingest/${n.sessionId}`,token:n.token}),e.release),{flowId:o,level:n.level,sample:n.sample}))}async function jn(e){e=e||{};const t=await En(e);On(t,e),await et(t,e.sources||{});const{consent:n,user:o,globals:s,custom:r}=e;n&&await t.command("consent",n),o&&await t.command("user",o),s&&await t.command("globals",s),r&&await t.command("custom",r),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}}export{e as Code,t as Commands,n as Const,Z as DEFAULT_BREAKER_COOLDOWN_MS,X as DEFAULT_BREAKER_THRESHOLD,se as DEFAULT_DLQ_MAX,$t as addDestination,ce as buildReportError,ae as bumpDropped,vt as callDestinationOn,Nt as commonHandleCommand,Jt as createEvent,dn as createPush,Tt as createPushResult,Dt as destinationInit,Mt as destinationPush,Xt as enrichEvent,re as ensureDestStatus,pt as enterCascade,ie as errorMeta,Fe as extractTransformerNextMap,yt as fireCallbacks,Je as flushSourceQueueOn,Ke as getCacheStore,Pt as initDestinations,Ze as initSource,et as initSources,oe as isBreakerProbePermitted,ut as isRequireSatisfied,Xe as isSourceStarted,it as isStateDelivery,ct as isStatePresent,Rt as mergeEnvironments,ht as on,It as onApply,Yt as prepareEvent,s as processConsent,At as pushToDestinations,kt as redeliverStateAtRun,_t as registerDestination,te as resolveBreakerConfig,Zt as runCollector,Ve as runTransformerChain,lt as setMark,ft as shouldDeliver,jn as startFlow,We as transformerInit,Le as transformerPush,Ge as walkChain,U as wrapEnv};//# sourceMappingURL=index.mjs.map
1
+ var e={},t={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"},n={Commands:t,Utils:{Storage:{Cookie:"cookie",Local:"local",Session:"session"}}};import{assign as o}from"@walkeros/core";function s(e,t){const n={};return Object.entries(t).forEach(([e,t])=>{n[e]=!!t}),e.consent=o(e.consent,n),{update:n}}import{OBSERVE_STORAGE_KEY as r,createBatchedPoster as a,createTelemetryObserver as i,parseObserveCredential as c}from"@walkeros/core";import{assign as u,createLogger as d}from"@walkeros/core";import{assign as l,buildCacheContext as f,clone as p,compileCache as g,checkCache as m,storeCache as h,createIngest as v,debounce as y,emitStep as w,getId as b,getGrantedConsent as k,getNextSteps as I,isDefined as C,isFunction as E,isObject as S,OBSERVE_ENV_KEY as q,processEventMapping as x,stepId as O,tryCatchAsync as j,useHooks as $,compileState as A,applyState as D}from"@walkeros/core";import{emitStep as M}from"@walkeros/core";function T(e,t,n){return{traceId:e.source?.trace??t?._meta.trace??n.trace,sourceId:t?._meta.path[0],parentEventId:t?._meta.parentEventId}}function _(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}import{parseCallPath as P}from"@walkeros/core";function R(e){return"object"==typeof e&&null!==e}function z(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 s of e)o.push(z(s,t,n+1));return o}const s={};t.set(e,s);for(const[o,r]of Object.entries(e))s[o]="function"==typeof r?r:z(r,t,n+1);return s}function U(e){const t=[],n=[],{simulation:o,...s}=e,r=z(s,new WeakMap,0);for(const e of o){const o=P(e);if(0===o.length)continue;const s=o.join(".");if(o.length-1>=8){n.push(s);continue}let a=r,i=!0;for(let e=0;e<o.length-1;e++){const t=a[o[e]];if(!R(t)){i=!1;break}a=t}const c=o[o.length-1];if(!i||!(c in a)){n.push(s);continue}const u=a[c];"function"==typeof u?a[c]=function(...e){return t.push({fn:s,args:e,ts:Date.now()}),u.apply(this,e)}:n.push(s)}return{wrappedEnv:r,calls:t,unresolved:n}}function K(e,t){try{return e[t]}catch{return"[unreadable]"}}function B(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 s=e;if(t.has(s))return"[circular]";if(o>=6)return"[truncated]";let r;t.add(s);try{if(Array.isArray(s))r=s.map(e=>n(e,o+1));else if(function(e){const t=Object.getPrototypeOf(e);return t===Object.prototype||null===t}(s)){const e={};for(const t of Object.keys(s))e[t]=n(K(s,t),o+1);r=e}else r=function(e){try{return String(e)}catch{return"[object]"}}(s)}catch{r="[unreadable]"}return t.delete(s),r};return e.map(e=>n(e,0))}function F(e){return e.map(e=>({fn:e.fn,args:B(e.args),ts:e.ts}))}import{isArray as H,FatalError as G}from"@walkeros/core";import{tryCatch as W,tryCatchAsync as L}from"@walkeros/core";import{stepId as Q}from"@walkeros/core";function V(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 s=[];for(;e.length>=n.max;)s.push(e.shift());return e.push(t),s.length>0&&o&&o(s),{appended:!0,dropped:s.length}}var N=new WeakMap;function Y(e,t,n,o){N.get(e)||(N.set(e,!0),t.warn(n,o))}function J(e){N.delete(e)}var X=5,Z=3e4,ee=()=>Date.now();function te(e){if(void 0!==e)return"number"==typeof e?{threshold:e,cooldown:Z}:{threshold:e.threshold??5,cooldown:e.cooldown??Z}}function ne(e,t,n,o,s){if("partial"===n)return;const r=function(e,t){return e[t]||(e[t]={state:"closed",consecutiveFailures:0}),e[t]}(e,t);return"success"===n?(r.consecutiveFailures=0,r.state="closed",r.probing=!1,void(r.openUntil=void 0)):(r.consecutiveFailures+=1,"half-open"===r.state?(r.state="open",r.probing=!1,void(r.openUntil=ee()+s)):void(r.consecutiveFailures>=o&&(r.state="open",r.probing=!1,r.openUntil=ee()+s)))}function oe(e,t){return!e||("closed"===e.state||"half-open"===e.state||void 0!==e.openUntil&&t>=e.openUntil)}var se=100;function re(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 ae(e,t,n,o){e.dropped[t]||(e.dropped[t]={});const s=e.dropped[t];return s[n]=(s[n]??0)+o,s[n]}function ie(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 ce(e,t,n,o,s){const r=Q(t,n);return(t,a)=>{try{if(a)return s?function(e,t,n,o,s,r){const a=t.dlq=t.dlq||[],i={max:t.config.dlqMax??se},c=V(a,[o,s],i);if(c.dropped>0){const t=ae(e.status,Q("destination",n),"dlq",c.dropped);Y(a,r,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:n,cap:i.max,droppedCount:t})}else a.length<i.max&&J(a);const u=re(e,n);u.failed++,u.dlqSize=a.length,e.status.failed++;const d=te(t.config.breaker);if(d){const o=t.config.id||n;ne(e.status.breakers,Q("destination",o),"transport-failure",d.threshold,d.cooldown)}}(e,s,n,a,t,o):e.status.failed++,void o.error("report error",{...ie(t),event:a.name});e.status.connectionErrors[r]=(e.status.connectionErrors[r]??0)+1,o.error("connection error",ie(t))}catch{}}}import{createIngest as ue,FatalError as de,getMappingValue as le,getSpanId as fe,parseTraceparent as pe,isScope as ge,tryCatchAsync as me,getNextSteps as he,compileCache as ve,checkCache as ye,storeCache as we,applyUpdate as be,buildCacheContext as ke,compileState as Ie,applyState as Ce}from"@walkeros/core";import{createIngest as Ee,emitStep as Se,FatalError as qe,isObject as xe,stepId as Oe,tryCatchAsync as je,useHooks as $e,getNextSteps as Ae,compileCache as De,checkCache as Me,storeCache as Te,buildCacheContext as _e,validateStepEntry as Pe,processEventMapping as Re,compileState as ze,applyState as Ue}from"@walkeros/core";function Ke(e,t){return e.storeId&&t.stores[e.storeId]?t.stores[e.storeId]:t.stores.__cache}function Be(e,t){return e?t.stores[e]:t.stores.__cache}function Fe(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 He(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 Ge(e,t={}){if(!e)return[];if(Array.isArray(e))return e;const n=[],o=new Set;let s=e;for(;s&&t[s]&&!o.has(s);){o.add(s),n.push(s);const e=t[s].next;if(Array.isArray(e)){n.push(...e);break}s=e}return n}async function We(e,t,n){if(t.init&&!t.config.init){const o=t.type||"unknown",s=e.logger.scope(`transformer:${o}`),r={collector:e,logger:s,id:n,ingest:Ee(n),config:t.config,env:Ne(t.config.env),reportError:ce(e,"transformer",n,s)};s.debug("init");const a=await $e(t.init,"TransformerInit",e.hooks,e.logger)(r);if(!1===a)return!1;t.config={...a||t.config,env:a?.env||t.config.env,init:!0},s.debug("init done")}return!0}async function Le(e,t,n,o,s,r){const a=t.type||"unknown",i=e.logger.scope(`transformer:${a}`),c={collector:e,logger:i,id:n,ingest:s,config:t.config,env:{...Ne(t.config.env),...r?{respond:r}:{}},reportError:ce(e,"transformer",n,i)};i.debug("push",{event:o.name});const u="string"==typeof o.id?o.id:"",{traceId:d,sourceId:l,parentEventId:f}=T(o,s,e),p=Date.now(),g=_(e,{stepId:Oe("transformer",n),stepType:"transformer",phase:"in",eventId:u,now:p,traceId:d,sourceId:l,parentEventId:f});g.inEvent=o,Se(e,g);try{const s=await $e(t.push,"TransformerPush",e.hooks,e.logger)(o,c),r=Date.now(),a=_(e,{stepId:Oe("transformer",n),stepType:"transformer",phase:"out",eventId:u,now:r,traceId:d,sourceId:l,parentEventId:f});return a.durationMs=r-p,a.outEvent=s,Se(e,a),i.debug("push done"),s}catch(t){const o=Date.now(),s=_(e,{stepId:Oe("transformer",n),stepType:"transformer",phase:"error",eventId:u,now:o,traceId:d,sourceId:l,parentEventId:f});throw s.durationMs=o-p,s.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},Se(e,s),t}}function Qe(e,t){return e?{...e,_meta:{...e._meta,path:[...e._meta.path]}}:Ee(t)}async function Ve(e,t,n,o,s,r,a){s||(s=Ee(n[0]??"chain")),a&&s._meta&&(s._meta.chainPath=a);let i=o,c=r;for(const o of n){const r=t[o];if(!r){e.logger.warn(`Transformer not found: ${o}`);continue}if(s&&s._meta&&s._meta.path.length>256)return e.logger.error(`Max path length exceeded at ${o}`),{event:null,respond:c};s&&s._meta&&(s._meta.hops++,s._meta.path.push(o));if(!await je(We,t=>{if(t instanceof qe)throw t;return e.status.failed++,e.logger.scope(`transformer:${r.type||"unknown"}`).error("transformer init failed",{transformer:o,...ie(t)}),!1})(e,r,o))return{event:null,respond:c};if(a&&void 0!==r.config?.chainMocks?.[a]){const t=r.config.chainMocks[a];e.logger.scope(`transformer:${r.type||"unknown"}`).debug("chainMock",{chain:a}),i=t;continue}if(void 0!==r.config?.mock){e.logger.scope(`transformer:${r.type||"unknown"}`).debug("mock"),i=r.config.mock;continue}if(r.config?.disabled)continue;const u=r.config?.cache,d=u?De(u):void 0,l=d?Ke(d,e):void 0,f=r.config?.state?ze(r.config.state):void 0,p=f?.filter(e=>"get"===e.mode),g=f?.filter(e=>"set"===e.mode),m=async t=>g&&0!==g.length?Ue(g,t=>Be(t,e),t,e):t;let h;if(d&&l){const e=_e(s,i),t=await Me(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&&(h={key:t.key,ttl:t.rule.ttl})}const v=r.config.before;if(v){const n=Ae(v,_e(s,i));if(1===n.length){const o=Ge(n[0],Fe(t));if(o.length>0){const n=await Ve(e,t,o,i,s,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=>je(Ve,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,ie(t)),{event:null,respond:void 0}))(e,t,Ge(n,Fe(t)),i,Qe(s,n),void 0,a)))}p&&p.length>0&&(i=await Ue(p,t=>Be(t,e),i,e));const y=await je(Le,t=>(e.logger.scope(`transformer:${r.type||"unknown"}`).error("Push failed",ie(t)),!1))(e,r,o,i,s,c);if(!1===y)return{event:null,respond:c,droppedBy:o};if(Array.isArray(y)){const r=n.slice(n.indexOf(o)+1),u=await Promise.all(y.map(async n=>{const o=await m(n.event||i),u=Qe(s,"unknown");if(n.next){const s=Ae(n.next,_e(u,o));if(0===s.length)return{event:o,respond:c};if(1===s.length){const n=Ge(s[0],Fe(t));return n.length>0?Ve(e,t,n,o,u,c,a):{event:o,respond:c}}return(await Promise.all(s.map(n=>je(Ve,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,ie(t)),{event:null,respond:void 0}))(e,t,Ge(n,Fe(t)),o,Qe(u,n),void 0,a)))).map(e=>({event:e.event,respond:void 0}))}return r.length>0?Ve(e,t,r,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:r}=y;if(o&&(c=o),void 0!==r){const o=await m(n||i),u=Ae(r,_e(s,o));if(0===u.length){i=o;continue}if(1===u.length){const n=Ge(u[0],Fe(t));return n.length>0?Ve(e,t,n,o,s,c,a):(e.logger.warn(`Branch target not found: ${JSON.stringify(r)}`),{event:null,respond:c})}return await Promise.all(u.map(n=>je(Ve,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,ie(t)),{event:null,respond:void 0}))(e,t,Ge(n,Fe(t)),o,Qe(s,n),void 0,a))),{event:null,respond:void 0}}n&&(i=n)}g&&g.length>0&&(i=await Ue(g,t=>Be(t,e),i,e)),h&&l&&Te(l,h.key,i,h.ttl);const w=r.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=Ae(r.config.next,_e(s,i));if(1===n.length){const o=Ge(n[0],Fe(t));return o.length>0?Ve(e,t,o,i,s,c,a):{event:i,respond:c}}return n.length>1?(await Promise.all(n.map(n=>je(Ve,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,ie(t)),{event:null,respond:void 0}))(e,t,Ge(n,Fe(t)),i,Qe(s,n),void 0,a))),{event:null,respond:void 0}):{event:i,respond:c}}}return{event:i,respond:c}}function Ne(e){return e&&xe(e)?e:{}}function Ye(e){return"string"==typeof e||!(!Array.isArray(e)||!e.every(e=>"string"==typeof e))}async function Je(e,t,n){if(!t.on||!t.queueOn?.length)return;const o=t.queueOn;t.queueOn=[];const s=n||t.config?.id||"unknown";for(const{type:n,data:r}of o)it(n)&&!ft(e,t,n)||(await me(t.on,t=>{if(t instanceof de)throw t;e.status.failed++,e.logger.scope("source").error("source on flush failed",{sourceId:s,type:n,...ie(t)})})(n,r),it(n)&&lt(e,t,n))}function Xe(e){return Boolean(e.config.init)&&!e.config.require?.length}async function Ze(e,t,n){const{code:o,config:s={},env:r={},primary:a,next:i,before:c,cache:u,terminus:d}=n,l=s.state??n.state,f=l?Ie(l):void 0,p=u,g=p?ve({...p,stop:p.stop??!0}):void 0,m=Ye(i)?Ge(i,Fe(e.transformers)):void 0,h=Ye(c)?Ge(c,Fe(e.transformers)):void 0,v=d??e.push,y=Boolean(d),w=async(n,o,r)=>{if(y)return v(n);let a;const u="string"==typeof n.id&&""!==n.id?n:{...n,id:fe()},d=h??(void 0!==c?(()=>{const t=he(c,ke(r.ingest));if(0===t.length)return[];return Ge(1===t.length?t[0]:t,Fe(e.transformers))})():[]);let l=[u];if(d.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const n=await Ve(e,e.transformers,d,u,r.ingest,r.respond,`source.${t}.before`);if(null===n.event)return{ok:!0};if(n.stopped)return n.respond&&(r.respond=n.respond),{ok:!0};n.respond&&(r.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:fe()}:e);else{const e=n.event;l=""===o||"string"==typeof e.id&&""!==e.id?[e]:[{...e,id:o}]}}if(g){const t=Ke(g,e);if(t){const n=ke(r.ingest),o=await ye(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 be(t,o.rule.update,{...n,cache:{status:"HIT"}},e)),r.respond?.(t),{ok:!0}}if("MISS"===o.status&&g.stop&&r.respond){const s=r.respond,i=o.rule.update,c={...n,cache:{status:"MISS"}},u=o.key,d=o.rule.ttl,l=n=>{we(t,u,n,d),i?a=(async()=>{const t=await be(n,i,c,e);s(t)})():s(n)};r.respond=l}"MISS"!==o.status||g.stop||we(t,o.key,!0,o.rule.ttl)}}}const p=m?{kind:"single",preChain:m}:void 0!==i?(()=>{const t=he(i,ke(r.ingest));return 0===t.length?{kind:"single",preChain:[]}:1===t.length?{kind:"single",preChain:Ge(t[0],Fe(e.transformers))}:{kind:"many",branches:t.map(t=>Ge(t,Fe(e.transformers)))}})():{kind:"single",preChain:[]};f&&f.length>0&&(l=await Promise.all(l.map(t=>Ce(f,t=>Be(t,e),t,e))));let w={ok:!0};for(const n of l)"many"===p.kind?(await Promise.all(p.branches.map((a,i)=>me(async()=>v(n,{...o,id:t,ingest:Qe(r.ingest,`${t}.${i}`),respond:void 0,mapping:s,preChain:a}),t=>(e.logger.scope("source:many").error(`many branch ${i} failed`,ie(t)),{ok:!0}))())),w={ok:!0}):w=await v(n,{...o,id:t,ingest:r.ingest,respond:r.respond,mapping:s,preChain:p.preChain});return a&&await a,w},b=async n=>{const o=ue(t),r=pe(ge(n)?n?.headers?.traceparent:void 0);if(r&&(o._meta.trace=r.trace,o._meta.parentEventId=r.parentSpan),!s.ingest||void 0===n)return o;const a=await le(n,s.ingest,{collector:e});return{...o,...a,_meta:o._meta}},k=e.logger.scope("source").scope(t),I={...r,push:async(e,n={})=>{const o={ingest:ue(t),respond:void 0};return w(e,n,o)},command:e.command,sources:e.sources,elb:e.elb,logger:k},C={collector:e,logger:k,id:t,config:s,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:ce(e,"source",t,k)},E=await me(o,n=>{if(n instanceof de)throw n;e.status.failed++,e.logger.scope("source").error("source factory failed",{sourceId:t,...ie(n)})})(C);if(!E)return;const S=E.type||"unknown",q=e.logger.scope(S).scope(t);return I.logger=q,a&&(E.config={...E.config,primary:a}),E}async function et(e,t={}){const n={};for(const[o,s]of Object.entries(t)){const t=await Ze(e,o,s);if(!t)continue;const r=s.config?.require;t.config={...t.config,init:!1,...r?{require:[...r]}:{}},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 me(n.init.bind(n),n=>{if(n instanceof de)throw n;o=!0,e.status.failed++,e.logger.scope("source").error("source init failed",{sourceId:t,...ie(n)})})(),o||(n.config.init=!0,Xe(n)&&await Je(e,n,t))}return await tt(e),n}async function tt(e){for(const[t,n]of Object.entries(e.sources)){if(Xe(n))continue;const o=n.config.require;if(!o?.length)continue;const s=o.filter(t=>!ut(e,t));s.length!==o.length&&(n.config.require=s,Xe(n)&&await Je(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 s=o.filter(t=>!ut(e,t));if(n.config&&(n.config.require=s),s.length>0)continue;delete e.pending.destinations[t];const r=_t(n);!1!==r.config.queue&&(r.queuePush=[...e.queue]),e.destinations[t]=r}}function nt(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 ot=!1;function st(){ot||(ot=!0,"undefined"!=typeof console&&"function"==typeof console.warn&&console.warn("walkerOS: ignored an on-dispatch call with a non-collector argument"))}function rt(e,t,n,o){if(n instanceof G)throw n;e.logger.scope("on").error("on callback failed",{kind:t,...o,...ie(n)})}var at=[n.Commands.Consent,n.Commands.User,n.Commands.Globals,n.Commands.Custom];function it(e){return at.includes(e)}function ct(e,t){switch(t){case n.Commands.Consent:return Object.keys(e.consent).length>0;case n.Commands.User:return Object.keys(e.user).length>0;case n.Commands.Globals:return Object.keys(e.globals).length>0;case n.Commands.Custom:return Object.keys(e.custom).length>0;default:return!1}}function ut(e,t){switch(t){case n.Commands.Consent:case n.Commands.User:case n.Commands.Globals:case n.Commands.Custom:return ct(e,t);case n.Commands.Run:case n.Commands.Ready:return!0===e.allowed;default:return e.seenEvents.has(String(t))}}function dt(e,t){return e.cellVersion[String(t)]??0}function lt(e,t,n){let o=e.delivery.get(t);o||(o={},e.delivery.set(t,o)),o[String(n)]=dt(e,n)}function ft(e,t,n){return e.allowed&&dt(e,n)>function(e,t,n){const o=e.delivery.get(t),s=o?.[String(n)];return void 0===s?-1:s}(e,t,n)}function pt(e){return e.cascade?()=>{}:(e.cascade={counts:new WeakMap},()=>{e.cascade=void 0})}function gt(e,t,n){const o=e.cascade;if(!o)return!0;let s=o.counts.get(t);s||(s={},o.counts.set(t,s));const r=String(n),a=(s[r]||0)+1;return s[r]=a,a<=8||(9===a&&e.logger.error("state delivery did not converge",{type:r}),!1)}function mt(e,t){return{collector:e,logger:e.logger.scope("on").scope(String(t))}}async function ht(e,t,n){if(!nt(e))return void st();const o=e.on,s=o[t]||[],r=H(n)?n:[n];r.forEach(e=>{s.push(e)}),o[t]=s,yt(e,t,r)}function vt(e,t,n,o,s){if(!t.on)return;const r=t.type||"unknown",a=e.logger.scope(r).scope("on").scope(o),i={collector:e,logger:a,id:n,config:t.config,data:s,env:Rt(t.env,t.config.env),reportError:ce(e,"destination",n,a,t)};W(t.on,t=>rt(e,"destination",t,{destId:n,type:o}))(o,i)}function yt(e,t,o,s){if(!nt(e))return void st();const r=wt(e,t,s);if(o.length)switch(t){case n.Commands.Consent:!function(e,t,o){const s=o||e.consent,r=mt(e,n.Commands.Consent);t.forEach(t=>{ft(e,t,n.Commands.Consent)&&gt(e,t,n.Commands.Consent)&&(Object.keys(s).filter(e=>e in t).forEach(n=>{W(t[n],t=>rt(e,"consent",t,{key:n}))(s,r)}),lt(e,t,n.Commands.Consent))})}(e,o,s);break;case n.Commands.Ready:!function(e,t){if(!e.allowed)return;const o=mt(e,n.Commands.Ready);t.forEach(t=>{W(t,t=>rt(e,"ready",t))(void 0,o)})}(e,o);break;case n.Commands.Run:!function(e,t){if(!e.allowed)return;const o=mt(e,n.Commands.Run);t.forEach(t=>{W(t,t=>rt(e,"run",t))(void 0,o)})}(e,o);break;case n.Commands.Session:!function(e,t){if(!e.session)return;const o=mt(e,n.Commands.Session);t.forEach(t=>{W(t,t=>rt(e,"session",t))(e.session,o)})}(e,o);break;default:{const n=mt(e,t),s=it(t);o.forEach(o=>{"function"==typeof o&&(s&&!ft(e,o,t)||s&&!gt(e,o,t)||(W(o,n=>rt(e,"generic",n,{type:t}))(r,n),s&&lt(e,o,t)))});break}}}function wt(e,t,o){switch(t){case n.Commands.Consent:return o||e.consent;case n.Commands.Session:return e.session;case n.Commands.User:return o||e.user;case n.Commands.Custom:return o||e.custom;case n.Commands.Globals:return o||e.globals;case n.Commands.Config:return o||e.config;default:return}}async function bt(e,t,n,o,s){if(!t.on)return!1;if(it(o)&&!ft(e,t,o))return!1;if(it(o)&&!gt(e,t,o))return!1;const r=await L(t.on,t=>rt(e,"source",t,{sourceId:n,type:o}))(o,s);return it(o)&&lt(e,t,o),!1===r}async function kt(e){if(nt(e))for(const t of at){if(!ct(e,t))continue;const n=wt(e,t);yt(e,t,e.on[t]||[]);for(const[o,s]of Object.entries(e.sources))Xe(s)&&await bt(e,s,o,t,n)}else st()}async function It(e,t,n,o){if(!nt(e))return st(),!0;e.seenEvents.add(String(t));let s=n||[];n||(s=e.on[t]||[]);const r=wt(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)}if(o.on)if(Xe(o)){await bt(e,o,n,t,r)&&(a=!0)}else o.queueOn=o.queueOn||[],o.queueOn.push({type:t,data:r})}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:r});vt(e,o,n,t,r)}});for(const[t,n]of Object.entries(e.sources))Xe(n)&&n.queueOn?.length&&await Je(e,n,t);const i=Object.values(e.sources).some(e=>!Xe(e)&&e.config.require?.length);return(Object.keys(e.pending.destinations).length>0||i)&&await tt(e),yt(e,t,s,o),!a}function Ct(e){return"number"==typeof e&&e>0?e:1e4}var Et=class extends Error{constructor(e){super(e),this.name="DestinationTimeoutError"}};function St(e,t,n){let o;const s=new Promise((e,s)=>{o=setTimeout(()=>s(new Et(n)),t)});return Promise.race([e,s]).finally(()=>{o&&clearTimeout(o)})}var qt=Object.freeze({batched:!0});function xt(e){return e===qt}function Ot(e){return void 0===e?{}:"number"==typeof e?{wait:e}:{wait:e.wait,size:e.size,age:e.age}}function jt(e,t,n){if(!e)return[];if(Array.isArray(e)&&e.every(e=>"string"==typeof e))return Ge(e,t);if("string"==typeof e)return Ge(e,t);const o=I(e,f(n));return 0===o.length?[]:1===o.length?Ge(o[0],t):Ge(o,t)}async function $t(e,t){const{code:n,config:o={},env:s={},before:r,next:a,cache:i,state:c}=t;if(!E(n.push))return Tt({ok:!1,failed:{invalid:{type:"invalid",error:"Destination code must have a push method"}}});const u=o||{init:!1};let d=r?{...u,before:r}:{...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=b(5,"abcdefghijklmnopqrstuvwxyz")}while(e.destinations[l]||e.pending.destinations[l]);if(d.require?.length){e.pending.destinations[l]=t,await tt(e);const n=e.destinations[l];return n?At(e,void 0,{},{[l]:n}):Tt({ok:!0})}const f={...n,config:d,env:Rt(n.env,s)};return e.destinations[l]=f,!1!==f.config.queue&&(f.queuePush=[...e.queue]),At(e,void 0,{},{[l]:f})}async function At(e,t,n={},o){const{allowed:s,consent:r,user:a}=e;if(!s)return Tt({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=V(e.queue,t,{max:n});if(o.dropped>0){const t=ae(e.status,O("collector"),"queue",o.dropped);Y(e.queue,e.logger,"collector.queue overflow; oldest events dropped",{buffer:"queue",cap:n,droppedCount:t})}else e.queue.length<n&&J(e.queue);e.status.in++}o||(o=e.destinations);const i=e.transformers?Fe(e.transformers):{},c=await Promise.all(Object.entries(o||{}).map(async([o,s])=>{if(s.config.disabled)return{id:o,destination:s,skipped:!0};const c=s.config.id||o,u=O("destination",c),d=te(s.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 s=ee();return void 0!==o.openUntil&&s<o.openUntil||(o.state="half-open",o.probing=!0,o.openUntil=s+n,!1)}(e.status.breakers,u,d.cooldown))return{id:o,destination:s,skipped:!0};const y=t=>{d&&ne(e.status.breakers,u,t,d.threshold,d.cooldown)},b=()=>{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 I=(s.queuePush||[]).map(e=>({...e,consent:r}));s.queuePush=[],t&&I.push(p(t));const C=n.ingest?{...n.ingest,_meta:{...n.ingest._meta,path:[...n.ingest._meta.path]}}:v("unknown");if(!I.length&&!s.queueOn?.length)return b(),{id:o,destination:s,skipped:!0};if(!I.length&&s.queueOn?.length){if(!k(s.config.consent,r))return b(),{id:o,destination:s,skipped:!0};let t=!1;try{t=await Dt(e,s,o,!0)}catch(t){e.status.failed++;const n=s.type||"unknown";e.logger.scope(n).error("destination init failed",{error:t instanceof Error?t.message:String(t)}),y("transport-failure")}return b(),{id:o,destination:s,skipped:!t}}const E=[],S=I.filter(t=>{const n=k(s.config.consent,r,t.consent);if(n)return t.consent=n,E.push(t),!1;const a=_(e,{stepId:O("destination",o),stepType:"destination",phase:"skip",eventId:"string"==typeof t.id?t.id:"",now:Date.now(),...T(t,C,e)});return a.skipReason="consent",r&&(a.consent={...r}),s.config.consent&&(a.meta={required:{...s.config.consent}}),w(e,a),!0});if(S.length>0){const t=s.queuePush,n=s.config.id||o,r={max:s.config.queueMax??1e3};let a=0;for(const e of S){a+=V(t,e,r).dropped}if(a>0){re(e,n);const o=ae(e.status,O("destination",n),"queue",a);Y(t,e.logger.scope(s.type||"unknown"),"destination.queuePush overflow; oldest events dropped",{buffer:"queuePush",destination:n,cap:r.max,droppedCount:o})}else t.length<r.max&&J(t)}if(!E.length)return b(),{id:o,destination:s,queue:I};let q,x,$=!1;try{$=await Dt(e,s,o,!0)}catch(t){e.status.failed++;const n=s.type||"unknown";e.logger.scope(n).error("destination init failed",{error:t instanceof Error?t.message:String(t)}),y("transport-failure")}if(!$)return b(),{id:o,destination:s,queue:I};s.dlq||(s.dlq=[]);const M=jt(s.config.before,i,C),P=s.config.next,R=s.config?.cache,z=R?g(R):void 0,U=z?Ke(z,e):void 0,K=s.config?.state?A(s.config.state):void 0,B=K?.filter(e=>"get"===e.mode),F=K?.filter(e=>"set"===e.mode);let H=0,G=0,W=0;return await Promise.all(E.map(async t=>{let r,c;if(t.user=l(a,t.user),z?.stop&&U){const e=f(C,t),n=await m(z,U,e);if("HIT"===n?.status)return t;"MISS"===n?.status&&(r={key:n.key,ttl:n.rule.ttl})}let u=[t],d=n.respond;if(M.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const s=await Ve(e,e.transformers,M,t,C,n.respond,`destination.${o}.before`);if(null===s.event)return t;s.respond&&(d=s.respond),u=Array.isArray(s.event)?s.event:[s.event]}const p=async(t,n)=>{let r=n,a=!1;if(z&&!z.stop&&U){const e=f(C,t),n=await m(z,U,e);if("HIT"===n?.status)return!1;"MISS"===n?.status&&(r={key:n.key,ttl:n.rule.ttl},a=!0)}B&&B.length>0&&t&&(t=await D(B,t=>Be(t,e),t,e));const u=Date.now();let l=!1;const p=await j(Mt,n=>{const r=s.type||"unknown";e.logger.scope(r).error("Push failed",{...ie(n),event:t.name}),q=n,l=!0;const a=s.dlq,i=s.config.id||o,c={max:s.config.dlqMax??se},u=V(a,[t,n],c);if(u.dropped>0){re(e,i);const t=ae(e.status,O("destination",i),"dlq",u.dropped);Y(a,e.logger.scope(s.type||"unknown"),"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:i,cap:c.max,droppedCount:t})}else a.length<c.max&&J(a)})(e,s,o,t,C,d);if(H+=Date.now()-u,r&&U&&void 0===s.config.mock&&(a?h(U,r.key,p??!0,r.ttl):void 0===c&&(c=p??!0)),!l&&!xt(p)&&F&&F.length>0&&t&&(t=await D(F,t=>Be(t,e),t,e)),void 0===p||xt(p)||(x=p),xt(p)&&G++,!l&&P){void 0!==p&&(C._response=p);const n=jt(P,i,C);if(n.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const s=await Ve(e,e.transformers,n,t,C,d,`destination.${o}.next`);s.respond&&(d=s.respond)}}return!0};for(const e of u)await p(e,r)&&W++;return r&&U&&void 0!==c&&void 0===s.config.mock&&h(U,r.key,c,r.ttl),t})),{id:o,destination:s,error:q,response:x,totalDuration:H,batchedCount:G,allowedCount:E.length,pushedCount:W,canonicalId:c,breakerConfig:d}})),u={},d={},y={};for(const t of c){if(t.skipped)continue;const n=t.destination,o={type:n.type||"unknown",data:t.response};re(e,t.id);const s=e.status.destinations[t.id],r=Date.now();s.queuePushSize=n.queuePush?.length??0,s.dlqSize=n.dlq?.length??0;const a=t.breakerConfig,i=t.canonicalId?O("destination",t.canonicalId):void 0,c=t=>{a&&i&&ne(e.status.breakers,i,t,a.threshold,a.cooldown)};if(t.error)o.error=t.error,y[t.id]=o,s.failed++,s.lastAt=r,s.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,s.count++,s.lastAt=r,s.duration+=t.totalDuration||0,e.status.out++,c("success"))}}return Tt({event:t,...Object.keys(u).length&&{done:u},...Object.keys(d).length&&{queued:d},...Object.keys(y).length&&{failed:y}})}async function Dt(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 s=t.type||"unknown",r=e.logger.scope(s),a={collector:e,logger:r,id:n,config:t.config,env:Rt(t.env,t.config.env),reportError:ce(e,"destination",n,r,t)};r.debug("init");const i=Date.now();let c;w(e,_(e,{stepId:O("destination",n),stepType:"destination",phase:"init",eventId:"",now:i}));try{c=await $(t.init,"DestinationInit",e.hooks,e.logger)(a)}catch(t){const o=Date.now(),s=_(e,{stepId:O("destination",n),stepType:"destination",phase:"error",eventId:"",now:o});throw s.durationMs=o-i,s.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},w(e,s),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:s,data:r}of o)vt(e,t,n,s,r)}r.debug("init done")}return!0}async function Mt(e,t,n,o,s,r){const{config:a}=t,i=await x(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:s,env:{...Rt(t.env,a.env),...r?{respond:r}:{}},reportError:ce(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:[]},s=Ot(l?.batch),r=Ot(a.batch),i=s.wait??r.wait??3e4,c=s.size??r.size??1e3,d=s.age??r.age??3e4,g=Rt(t.env,a.env),m=y(async()=>{const o=t.batches[p],s=o.batched;if(0===s.entries.length)return;const r={key:s.key,entries:s.entries,events:s.events,data:s.data};s.entries=[],s.events=[],s.data=[];const i=r.entries[0],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:ce(e,"destination",n,u,t)};u.debug("push batch",{events:r.entries.length});const d=t.config.id||n,l=re(e,d),f=te(t.config.breaker),m=O("destination",d),h=t=>{f&&ne(e.status.breakers,m,t,f.threshold,f.cooldown)},v=Date.now(),y=new Map;let b,k=!1;const I=n=>{const o=t.dlq=t.dlq||[],s={max:t.config.dlqMax??se};let r=0;for(const e of n){r+=V(o,e,s).dropped}if(r>0){const t=ae(e.status,O("destination",d),"dlq",r);Y(o,u,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:d,cap:s.max,droppedCount:t})}else o.length<s.max&&J(o);l.failed+=n.length,l.dlqSize=o.length,e.status.failed+=n.length};let C=r.entries.length;const E=Ct(a.timeout),q=await j((o,s)=>St(Promise.resolve($(t.pushBatch,"DestinationPushBatch",e.hooks,e.logger)(o,s)),E,`Destination "${n}" batch delivery timed out after ${E}ms`),e=>{C=0,k=!0,b=e,I(r.entries.map(t=>[t.event,e])),h("transport-failure"),u.error("Push batch failed",{error:e instanceof Error?e.message:String(e),entries:r.entries.length})})(r,c);if(S(x=q)&&Array.isArray(x.failed)&&q.failed.length>0){const e=[];for(const t of q.failed){const n=r.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&&(I(e),C=Math.max(0,r.entries.length-e.length),u.error("Push batch partial failure",{failed:e.length,delivered:C,entries:r.entries.length}))}var x;const A=Date.now();r.entries.forEach((t,o)=>{const s=k||y.has(o),a=T(t.event,t.ingest,e),i=_(e,{stepId:O("destination",n),stepType:"destination",phase:s?"error":"flush",eventId:"string"==typeof t.event.id?t.event.id:"",now:A,traceId:a.traceId,sourceId:a.sourceId,parentEventId:a.parentEventId});if(i.batch={size:r.entries.length,index:o},i.durationMs=A-v,s){const e=k?b:y.get(o);i.error=e instanceof Error?{name:e.name,message:e.message}:{message:String(e)}}w(e,i)}),u.debug("push batch done"),l.inFlightBatch=Math.max(0,(l.inFlightBatch??0)-r.entries.length),C>0&&(l.count+=C,l.lastAt=Date.now(),e.status.out+=C,h("success"))},{wait:i,size:c,age:d});t.batches[p]={batched:o,isDefault:!f,batchFn:()=>{m()},flush:async()=>{await m.flush()}}}const c=t.batches[p];c.batched.entries.push({event:i.event,ingest:s,respond:r,rule:l,data:i.data}),c.batched.events.push(i.event),C(i.data)&&c.batched.data.push(i.data);const d="string"==typeof i.event.id?i.event.id:"",g=T(o,s,e),m=Date.now(),h=_(e,{stepId:O("destination",n),stepType:"destination",phase:"in",eventId:d,now:m,traceId:g.traceId,sourceId:g.sourceId,parentEventId:g.parentEventId});i.mappingKey&&(h.mappingKey=i.mappingKey),i.event.consent&&(h.consent={...i.event.consent}),h.inEvent=i.event,w(e,h);const v=_(e,{stepId:O("destination",n),stepType:"destination",phase:"out",eventId:d,now:m,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},w(e,v);const b=t.config.id||n,k=re(e,b);return k.inFlightBatch=(k.inFlightBatch??0)+1,c.batchFn(),qt}{let r;if(u.debug("push",{event:i.event.name}),"trace"===e.observeLevel?.()&&Array.isArray(t.calls)&&t.calls.length>0){const e=U({...d.env,simulation:t.calls});d.env=e.wrappedEnv,r=e.calls,e.unresolved.length>0&&(e.wrappedEnv[q]={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}=T(o,s,e),g=Date.now(),m=_(e,{stepId:O("destination",n),stepType:"destination",phase:"in",eventId:c,now:g,traceId:l,sourceId:f,parentEventId:p});i.mappingKey&&(m.mappingKey=i.mappingKey),i.event.consent&&(m.consent={...i.event.consent}),m.inEvent=i.event,w(e,m);try{const o=Ct(a.timeout),s=await St(Promise.resolve($(t.push,"DestinationPush",e.hooks,e.logger)(i.event,d)),o,`Destination "${n}" delivery timed out after ${o}ms`),m=Date.now(),h=_(e,{stepId:O("destination",n),stepType:"destination",phase:"out",eventId:c,now:m,traceId:l,sourceId:f,parentEventId:p});return h.durationMs=m-g,h.outEvent=i.event,r&&r.length>0&&(h.calls=F(r)),C(s)&&(h.meta={...h.meta,response:s}),i.mappingKey&&(h.mappingKey=i.mappingKey),w(e,h),u.debug("push done"),s}catch(t){const o=Date.now(),s=_(e,{stepId:O("destination",n),stepType:"destination",phase:"error",eventId:c,now:o,traceId:l,sourceId:f,parentEventId:p});throw s.durationMs=o-g,s.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},r&&r.length>0&&(s.calls=F(r)),i.mappingKey&&(s.mappingKey=i.mappingKey),w(e,s),t}}}function Tt(e){return{ok:!e?.failed,...e}}function _t(e){const{code:t,config:n={},env:o={},cache:s,state:r}=e,{config:a}=He(e,"before"),{config:i}=He({...e,config:a},"next"),c={...t.config,...n,...i};s&&(c.cache=s),void 0!==r&&void 0===c.state&&(c.state=r);const u=Rt(t.env,o);return{...t,config:c,env:u}}async function Pt(e,t={}){const n={};for(const[o,s]of Object.entries(t))s.config?.require?.length?e.pending.destinations[o]=s:n[o]=_t(s);return n}function Rt(e,t){return e||t?t?e&&S(e)&&S(t)?{...e,...t}:t:e:{}}import{assign as zt,getSpanId as Ut,getTraceId as Kt,InvalidEventError as Bt,isFunction as Ft,isString as Ht}from"@walkeros/core";import{isObject as Gt}from"@walkeros/core";var Wt=5e3;async function Lt(e){const t=e.logger;await Qt(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 s=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`)),Wt)})])}catch(t){s.error(`destination '${e}' batch flush failed: ${t}`)}finally{n&&clearTimeout(n)}})});await Promise.allSettled(n)}(e.destinations,t),await Qt(e.destinations,"destination",t),await Qt(e.transformers,"transformer",t),await Qt(e.stores,"store",t)}async function Qt(e,t,n){const o=Object.entries(e).map(async([e,o])=>{const s=o.destroy;if(!s)return;const r=o.type||"unknown",a=n.scope(r),i={id:e,config:o.config,env:o.env??{},logger:a};let c;try{await Promise.race([s(i),new Promise((n,o)=>{c=setTimeout(()=>o(new Error(`${t} '${e}' destroy timed out`)),Wt)})])}catch(n){a.error(`${t} '${e}' destroy failed: ${n}`)}finally{c&&clearTimeout(c)}});await Promise.allSettled(o)}function Vt(e,t){e.stateVersion++,e.cellVersion[t]=e.stateVersion}async function Nt(e,t,o){let r,a,i=!1;const c=pt(e);try{return await async function(){switch(t){case n.Commands.Config:Gt(o)&&(zt(e.config,o,{shallow:!1}),a=o,i=!0);break;case n.Commands.Consent:if(Gt(o)){const{update:t}=s(e,o);Vt(e,n.Commands.Consent),a=t,i=!0}break;case n.Commands.Custom:Gt(o)&&(e.custom=zt(e.custom,o),Vt(e,n.Commands.Custom),a=o,i=!0);break;case n.Commands.Destination:Gt(o)&&"code"in o&&Gt(o.code)&&(r=await $t(e,o));break;case n.Commands.Globals:Gt(o)&&(e.globals=zt(e.globals,o),Vt(e,n.Commands.Globals),a=o,i=!0);break;case n.Commands.Hook:if(Gt(o)&&Ht(o.name)&&Ft(o.fn)){const{name:t,fn:n}=o;e.hooks[t]=n,a=o,i=!0}break;case n.Commands.On:if(Gt(o)&&Ht(o.type)){const{type:t,rules:n}=o;await ht(e,t,n)}break;case n.Commands.Ready:i=!0;break;case n.Commands.Run:r=await Zt(e,o),i=!0;break;case n.Commands.Session:i=!0;break;case n.Commands.Shutdown:e.hasShutdown||(e.hasShutdown=!0,await Lt(e));break;case n.Commands.User:Gt(o)&&(zt(e.user,o,{shallow:!1}),Vt(e,n.Commands.User),a=o,i=!0);break;default:return e.logger.warn("unknown command",{command:t}),Tt({ok:!1})}if(i){await It(e,t,void 0,a);const n=await At(e);if(r&&!1===r.ok){const e={...n.failed??{},...r.failed??{}};r={...n,ok:!1,...Object.keys(e).length>0?{failed:e}:{}}}else r=n}return r||Tt({ok:!0})}()}finally{c()}}function Yt(e,t){return{timing:Math.round((Date.now()-e.timing)/10)/100,source:{type:"collector",schema:"4"},...t}}function Jt(e,t,n){const o=t.name;if("string"!=typeof o)throw new Bt(void 0===o?"Event name is required":"Event name is invalid");if(!o)throw new Bt("Event name is required");const[s,r]=o.split(" ");if(!s||!r)throw new Bt("Event name is invalid");const{timestamp:a=Date.now(),name:i=`${s} ${r}`,data:c={},context:u={},globals:d={},custom:l={},user:f=e.user,nested:p=[],consent:g=e.consent,id:m=Ut(),trigger:h="",entity:v=s,action:y=r,timing:w=0,source:b={type:"collector",schema:"4"}}=t,k=b??{type:"collector",schema:"4"},I=k.count??(e.count+=1),C=k.trace??n?._meta.trace??e.trace,E={...k,count:I};void 0!==C&&(E.trace=C);const S=e.name??k.platform??"default",q=e.release??"4.6.1";E.release={...k.release,[S]:q};return{name:i,data:c,context:u,globals:zt(e.globals,d),custom:l,user:f,nested:p,consent:g,id:m,trigger:h,entity:v,action:y,timestamp:a,timing:w,source:E}}function Xt(e,t,n){return Jt(e,Yt(e,t),n)}async function Zt(e,t){e.allowed=!0,e.timing=Date.now(),e.trace=Kt(),e.count=0,t&&(t.consent&&(e.consent=zt(e.consent,t.consent),Vt(e,n.Commands.Consent)),t.user&&(e.user=zt(e.user,t.user),Vt(e,n.Commands.User)),t.globals&&(e.globals=zt(e.config.globalsStatic||{},t.globals),Vt(e,n.Commands.Globals)),t.custom&&(e.custom=zt(e.custom,t.custom),Vt(e,n.Commands.Custom))),Object.values(e.destinations).forEach(e=>{e.queuePush=[]}),e.queue=[],e.round++,await tt(e),await kt(e);let o=!0;const s={};if(e.preRunQueue.length){const t=e.preRunQueue.splice(0);e.logger.debug("replaying pre-run events",{count:t.length});for(const{event:n,options:r}of t){const t=await e.push(n,r);!1===t.ok&&(o=!1),t.failed&&Object.assign(s,t.failed)}}const r=await At(e);if(o)return r;const a={...r.failed??{},...s};return{...r,ok:!1,...Object.keys(a).length>0?{failed:a}:{}}}import{createIngest as en,emitStep as tn,FatalError as nn,getGrantedConsent as on,getSpanId as sn,InvalidEventError as rn,processEventMapping as an,tryCatchAsync as cn,useHooks as un}from"@walkeros/core";function dn(e,t){const n=un(async(n,o={})=>await cn(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 s=V(e.preRunQueue,{event:n,options:o},{max:t});if(s.dropped>0){const n=ae(e.status,"collector.preRun","queue",s.dropped);Y(e.preRunQueue,e.logger,"collector.preRunQueue overflow; oldest events dropped",{buffer:"queue",cap:t,droppedCount:n})}else e.preRunQueue.length<t&&J(e.preRunQueue);return e.logger.debug("event held until run",{name:n.name,dropped:s.dropped}),Tt({ok:!0})}const s=Date.now(),{id:r,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,m=a??en(r||"unknown");if(c){const t=await an(p,c,e);if(t.ignore)return Tt({ok:!0});if(c.consent){if(!on(c.consent,e.consent,t.event.consent))return Tt({ok:!0})}p=t.event}if(u?.length&&e.transformers&&Object.keys(e.transformers).length>0){const n=await Ve(e,e.transformers,u,p,m,f,r?`source.${r}.next`:void 0);if(null===n.event)return e.logger.debug("Event dropped by transformer chain"+(n.droppedBy?` (${n.droppedBy})`:"")),Tt({ok:!0,dropped:!0});if(n.stopped)return n.respond&&(f=n.respond),Tt({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 s=""!==o&&n.id===o?{...n,id:sn()}:n,a=t(s),i=Jt(e,a,m);return At(e,i,{id:r,ingest:m,respond:f},g)}));if(r){e.status.sources[r]||(e.status.sources[r]={count:0,duration:0});const t=e.status.sources[r];t.count+=n.event.length,t.lastAt=Date.now(),t.duration+=Date.now()-s}return a[0]??Tt({ok:!0})}p=""===o||"string"==typeof n.event.id&&""!==n.event.id?n.event:{...n.event,id:o}}const h=Xt(e,p,m),v=await At(e,h,{id:r,ingest:m,respond:f},g);if(r){e.status.sources[r]||(e.status.sources[r]={count:0,duration:0});const t=e.status.sources[r];t.count++,t.lastAt=Date.now(),t.duration+=Date.now()-s}return v},t=>{if(t instanceof nn)throw t;if(t instanceof rn){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}),Tt({ok:!1,invalid:!0,error:t.message})}return e.status.failed++,e.logger.error("push failed",{...ie(t),event:n.name}),Tt({ok:!1})})(),"Push",e.hooks,e.logger);return async(t,o)=>{const s="string"==typeof t.id&&""!==t.id?t:{...t,id:sn()},r="string"==typeof s.id?s.id:"",{traceId:a,sourceId:i,parentEventId:c}=T(s,o?.ingest,e),u=Date.now(),d=_(e,{stepId:"collector.push",stepType:"collector",phase:"in",eventId:r,now:u,traceId:a,sourceId:i,parentEventId:c});d.inEvent=s,tn(e,d);try{const t=await n(s,o),d=Date.now(),l=_(e,{stepId:"collector.push",stepType:"collector",phase:"out",eventId:r,now:d,traceId:a,sourceId:i,parentEventId:c});return l.durationMs=d-u,l.outEvent=t,tn(e,l),t}catch(t){const n=Date.now(),o=_(e,{stepId:"collector.push",stepType:"collector",phase:"error",eventId:r,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)},tn(e,o),t}}}import{FatalError as ln,useHooks as fn,tryCatchAsync as pn}from"@walkeros/core";import{emitStep as gn,useHooks as mn}from"@walkeros/core";function hn(e={}){const t=e.maxEntries??1e4,n=e.lowWaterMark??.8,o=e.sweepIntervalMs??6e4,s=Math.floor(t*n),r=new Map,a={hits:0,misses:0,populates:0,writes:0,deletes:0,evictions_entries:0,evictions_ttl:0};let i;o>0&&(i=setInterval(function(){const e=Date.now();let t=0;for(const[n,o]of r)void 0!==o.expires&&o.expires<=e&&(r.delete(n),t++);a.evictions_ttl+=t},o),i&&"function"==typeof i.unref&&i.unref());return{type:"memory",config:{},get(e){const t=r.get(e);if(t)return void 0!==t.expires&&t.expires<=Date.now()?(r.delete(e),a.evictions_ttl++,void a.misses++):(r.delete(e),r.set(e,t),a.hits++,t.value);a.misses++},set(e,n,o){const i=!r.has(e);i||r.delete(e),r.set(e,{value:n,expires:void 0!==o?Date.now()+o:void 0}),a.writes++,i&&a.populates++,r.size>t&&function(){if(r.size<=t)return;const e=r.size-s;let n=0;for(const t of r.keys()){if(n>=e)break;r.delete(t),n++}a.evictions_entries+=n}()},delete(e){r.delete(e)&&a.deletes++},get counters(){return{...a}},destroy(){void 0!==i&&(clearInterval(i),i=void 0),r.clear()}}}import{compileMatcher as vn,emitStep as yn,readCacheEnvelope as wn,wrapCacheEnvelope as bn}from"@walkeros/core";function kn(e,t){const{cacheConfig:n,cacheStore:o,namespace:s,logger:r,storeId:a,collector:i}=t,c=(e,t)=>{if(!i)return;const n=_(i,{stepId:`store.${a}`,stepType:"store",phase:"in",eventId:"",now:Date.now()});n.meta={op:"cache",cached:"hit"===t,status:t,key:e},yn(i,n)},u={hits:0,misses:0,populates:0,writes:0,deletes:0,inflight_dedups:0},d=n.rules.map(e=>({match:e.match?vn(e.match):()=>!0,ttl:e.ttl})),l=e=>`${s}:${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),s=await o.get(n),r=wn(s);if(void 0!==r){if(!("expired"in r))return u.hits++,c(t,"hit"),r.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 s=await e.get(t);if(void 0===s)return;const r=f(t,s);if(r)try{const e=1e3*r.ttl;await o.set(n,bn(s,e),e),u.populates++}catch(e){g("set",t,e)}return s}finally{p.delete(n)}})();return p.set(n,i),i},async set(t,n,s){u.writes++,await e.set(t,n,s);const r=f(t,n);if(r)try{const e=1e3*r.ttl;await o.set(l(t),bn(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`;r?r.warn(o,ie(n)):console.warn(o,n)}}function In(e,t,n){const o=`store.${n}`,s=mn(t.get,"StoreGet",e.hooks,e.logger),r=mn(t.set,"StoreSet",e.hooks,e.logger),a=mn(t.delete,"StoreDelete",e.hooks,e.logger);t.get=async t=>{const n=Date.now(),r=_(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:n});r.meta={op:"get",key:t},gn(e,r);try{const r=await s(t),a=Date.now(),i=_(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:a});return i.durationMs=a-n,i.meta={op:"get",key:t},gn(e,i),r}catch(s){const r=Date.now(),a=_(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:r});throw a.durationMs=r-n,a.meta={op:"get",key:t},a.error=s instanceof Error?{name:s.name,message:s.message}:{message:String(s)},gn(e,a),s}},t.set=async(t,n,s)=>{const a=Date.now(),i=_(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:a});i.meta={op:"set",key:t},gn(e,i);try{await r(t,n,s);const i=Date.now(),c=_(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:i});c.durationMs=i-a,c.meta={op:"set",key:t},gn(e,c)}catch(n){const s=Date.now(),r=_(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:s});throw r.durationMs=s-a,r.meta={op:"set",key:t},r.error=n instanceof Error?{name:n.name,message:n.message}:{message:String(n)},gn(e,r),n}},t.delete=async t=>{const n=Date.now(),s=_(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:n});s.meta={op:"delete",key:t},gn(e,s);try{await a(t);const s=Date.now(),r=_(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:s});r.durationMs=s-n,r.meta={op:"delete",key:t},gn(e,r)}catch(s){const r=Date.now(),a=_(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:r});throw a.durationMs=r-n,a.meta={op:"delete",key:t},a.error=s instanceof Error?{name:s.name,message:s.message}:{message:String(s)},gn(e,a),s}}}async function Cn(e,t={}){const n={};for(const[o,s]of Object.entries(t)){const{code:t,config:r={},env:a={}}=s,i=e.logger.scope("store").scope(o),c={collector:e,logger:i,id:o,config:r,env:a,reportError:ce(e,"store",o,i)},u=await t(c);n[o]=u}const o=t,s=function(e){const t={};for(const n of Object.keys(e))t[n]="WHITE";const n=[],o=[];function s(r){const a=t[r];if("BLACK"===a)return;if("GRAY"===a){const e=o.indexOf(r),t=o.slice(-1===e?0:e).concat(r).join(" -> ");throw new Error(`Cycle in cache.store chain: ${t}`)}t[r]="GRAY",o.push(r);const i=e[r].cache?.store;if(void 0!==i){if(!(i in e))throw new Error(`Store "${r}" cache.store references "${i}", which is not declared in flow.stores`);s(i)}o.pop(),t[r]="BLACK",n.push(r)}for(const n of Object.keys(e))"WHITE"===t[n]&&s(n);return n}(o);for(const t of s){const s=o[t].cache;if(!s)continue;let r,a;void 0!==s.store?(r=n[s.store],a=s.store):(n.__cache||(n.__cache=hn()),r=n.__cache,a="__cache");const i=s.namespace??t;e.logger.scope("store-cache").scope(t).info(`store "${t}" caches with namespace "${i}:" via ${a}`),n[t]=kn(n[t],{storeId:t,cacheConfig:s,cacheStore:r,namespace:i,logger:e.logger.scope("store-cache").scope(t),collector:e})}for(const[t,o]of Object.entries(n))"__cache"!==t&&In(e,o,t);return n}async function En(e){const t=u({globalsStatic:{},sessionStatic:{},run:!0,queueMax:1e3},e,{merge:!1,extend:!1}),n={level:e.logger?.level,handler:e.logger?.handler},o=d(n),s={...t.globalsStatic,...e.globals},r={allowed:!1,config:t,consent:e.consent||{},custom:e.custom||{},destinations:{},transformers:{},stores:{},globals:s,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};void 0!==e.name&&(r.name=e.name),void 0!==e.release&&(r.release=e.release),r.push=dn(r,e=>Yt(r,e)),r.command=function(e,t){return fn(async(n,o,s)=>await pn(async()=>await t(e,n,o,s),t=>{if(t instanceof ln)throw t;return e.status.failed++,e.logger.error("command failed",{...ie(t),command:n}),Tt({ok:!1})})(),"Command",e.hooks,e.logger)}(r,Nt),r.elb=function(e){return async(t,n,o,s,r)=>{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 Tt({ok:!1});a={...t},n&&"object"==typeof n&&!Array.isArray(n)&&(a.data={...a.data||{},...n})}return o&&"object"==typeof o&&(a.context=o),s&&Array.isArray(s)&&(a.nested=s),r&&"object"==typeof r&&(a.custom=r),e.push(a)}}(r);const a=e.stores||{};return r.stores=await Cn(r,a),function(e,t,n){const o=new Map;for(const[n,s]of Object.entries(e))t[n]&&o.set(s,t[n]);if(0!==o.size)for(const e of[n.transformers,n.destinations,n.sources])if(e)for(const t of Object.values(e))s(t.env);function s(e){if(e)for(const[t,n]of Object.entries(e))if("object"==typeof n&&null!==n){const s=o.get(n);s&&(e[t]=s)}}}(a,r.stores,e),r.stores.__cache||(r.stores.__cache=hn()),r.destinations=await Pt(r,e.destinations||{}),r.transformers=await async function(e,t={}){const n={};for(const[o,s]of Object.entries(t)){const{code:t,env:r={}}=s,a=Pe(s,"Transformer");if(!a.ok){e.logger.warn(`Transformer ${o} invalid (${a.code}): ${a.reason}. Skipping.`);continue}const{config:i}=He(s,"before"),{config:c}=He({...s,config:i},"next"),u=Object.keys(r).length>0?{...c,env:r}:c,{cache:d}=s,l=d?{...u,cache:d}:u,f=s.config?.state??s.state,p=void 0!==f&&void 0===l.state?{...l,state:f}:l,g=e.logger.scope("transformer").scope(o),m={collector:e,logger:g,id:o,ingest:Ee(o),config:p,env:r,reportError:ce(e,"transformer",o,g)},h=t??(e=>{const t=s.mapping;if(t){const n=[];if(void 0!==t.data&&n.push("data"),t.mapping)for(const[e,o]of Object.entries(t.mapping))if("object"==typeof o&&null!==o)for(const[t,s]of Object.entries(o)){if("object"!=typeof s||null===s)continue;const o=s;void 0!==o.data&&n.push(`mapping[${e}][${t}].data`),void 0!==o.silent&&n.push(`mapping[${e}][${t}].silent`)}return n.length>0&&e.collector.logger.warn(`Transformer ${o}: \`${n.join(", ")}\` ignored at transformer position (only event-mutating fields apply).`),{type:"pass",config:e.config,push:async n=>{const o=await Re(n,t,e.collector);return!o.ignore&&{event:o.event}}}}return{type:"pass",config:e.config,push:e=>({event:e})}}),v=await h(m);void 0!==s.before&&void 0===v.config?.before&&(v.config={...v.config??{},before:s.before}),void 0!==s.next&&void 0===v.config?.next&&(v.config={...v.config??{},next:s.next}),void 0!==f&&void 0===v.config?.state&&(v.config={...v.config??{},state:f}),n[o]=v}return n}(r,e.transformers||{}),r}var Sn=globalThis;function qn(e){try{const t=Sn.window;if(!t)return;t.localStorage.getItem(r)===e&&t.localStorage.removeItem(r)}catch{}}function xn(e,t){return void 0===t?e:n=>e({...n,release:t})}function On(e,t){if(t.observers)for(const n of t.observers)e.observers.add(n);const n=t.observe;if(!n)return;const o=e.name??"default";if("binding"in n){const t=function(){const e=Sn.window,t=Sn.URLSearchParams;if(!e||!t)return null;try{const n=new t(e.location.search.replace(/^\?/,"")).getAll(r);return n.length>0?n[n.length-1]??null:null}catch{return null}}(),s=t??function(){try{return Sn.window?.localStorage.getItem(r)??null}catch{return null}}();if(!s)return;const u=c(s);if(!u)return void(null===t?(e.logger.warn("observe: malformed stored credential cleared"),qn(s)):e.logger.warn("observe: malformed credential ignored"));if(u.pb!==n.binding)return void e.logger.warn("observe: credential binding mismatch, credential ignored");let d;!function(e){try{Sn.window?.localStorage.setItem(r,e)}catch{}}(s),null!==t&&function(){const e=Sn.window,t=Sn.URLSearchParams;if(e&&t)try{const n=e.location.href,o=n.indexOf("#"),s=o>=0?n.slice(o):"",a=o>=0?n.slice(0,o):n,i=a.indexOf("?"),c=i>=0?a.slice(0,i):a,u=new t(i>=0?a.slice(i+1):"");u.delete(r);const d=u.toString();e.history.replaceState({},"",`${c}${d?`?${d}`:""}${s}`)}catch{}}();const l=a({url:`${n.url}/ingest/${u.ses}`,token:u.secret,headers:{"X-Walkeros-Binding":n.binding},onStatus:t=>{401===t&&(qn(s),d&&e.observers.delete(d))}});d=i(function(e,t){return void 0===t?e:n=>e({...n,flowId:t})}(xn(l,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(d);const f=n.level;return void(void 0!==f&&(e.observeLevel=()=>f))}if("off"===n.level)return;const s=n.level;void 0!==s&&(e.observeLevel=()=>s),e.observers.add(i(xn(a({url:`${n.url}/ingest/${n.sessionId}`,token:n.token}),e.release),{flowId:o,level:n.level,sample:n.sample}))}async function jn(e){e=e||{};const t=await En(e);On(t,e),await et(t,e.sources||{});const{consent:n,user:o,globals:s,custom:r}=e;n&&await t.command("consent",n),o&&await t.command("user",o),s&&await t.command("globals",s),r&&await t.command("custom",r),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}}export{e as Code,t as Commands,n as Const,Z as DEFAULT_BREAKER_COOLDOWN_MS,X as DEFAULT_BREAKER_THRESHOLD,se as DEFAULT_DLQ_MAX,$t as addDestination,ce as buildReportError,ae as bumpDropped,vt as callDestinationOn,Nt as commonHandleCommand,Jt as createEvent,dn as createPush,Tt as createPushResult,Dt as destinationInit,Mt as destinationPush,Xt as enrichEvent,re as ensureDestStatus,pt as enterCascade,ie as errorMeta,Fe as extractTransformerNextMap,yt as fireCallbacks,Je as flushSourceQueueOn,Ke as getCacheStore,Pt as initDestinations,Ze as initSource,et as initSources,oe as isBreakerProbePermitted,ut as isRequireSatisfied,Xe as isSourceStarted,it as isStateDelivery,ct as isStatePresent,Rt as mergeEnvironments,ht as on,It as onApply,Yt as prepareEvent,s as processConsent,At as pushToDestinations,kt as redeliverStateAtRun,_t as registerDestination,te as resolveBreakerConfig,Zt as runCollector,Ve as runTransformerChain,lt as setMark,ft as shouldDeliver,jn as startFlow,We as transformerInit,Le as transformerPush,Ge as walkChain,U as wrapEnv};//# sourceMappingURL=index.mjs.map
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@walkeros/collector",
3
3
  "description": "Unified platform-agnostic collector for walkerOS",
4
- "version": "4.6.0",
4
+ "version": "4.6.1",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.mjs",
7
7
  "types": "./dist/index.d.ts",
@@ -32,7 +32,7 @@
32
32
  "update": "npx npm-check-updates -u && npm update"
33
33
  },
34
34
  "devDependencies": {
35
- "@walkeros/core": "4.6.0"
35
+ "@walkeros/core": "4.6.1"
36
36
  },
37
37
  "repository": {
38
38
  "url": "git+https://github.com/elbwalker/walkerOS.git",
@@ -61,6 +61,6 @@
61
61
  }
62
62
  ],
63
63
  "dependencies": {
64
- "@walkeros/core": "4.6.0"
64
+ "@walkeros/core": "4.6.1"
65
65
  }
66
66
  }