@walkeros/collector 4.7.2-next-1791213015481 → 4.7.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # @walkeros/collector
2
2
 
3
- ## 4.7.2-next-1791213015481
3
+ ## 4.7.2
4
4
 
5
5
  ### Patch Changes
6
6
 
@@ -25,7 +25,7 @@
25
25
  - Updated dependencies [ff23953]
26
26
  - Updated dependencies [98398fe]
27
27
  - Updated dependencies [98398fe]
28
- - @walkeros/core@4.7.2-next-1791213015481
28
+ - @walkeros/core@4.7.2
29
29
 
30
30
  ## 4.7.1
31
31
 
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:()=>i,Commands:()=>a,Const:()=>c,DEFAULT_BREAKER_COOLDOWN_MS:()=>W,DEFAULT_BREAKER_THRESHOLD:()=>K,DEFAULT_DLQ_MAX:()=>z,addDestination:()=>Ot,buildReportError:()=>N,bumpDropped:()=>G,callDestinationOn:()=>We,commonHandleCommand:()=>Ht,completeEvent:()=>Gt,createEvent:()=>Ut,createPush:()=>on,createPushResult:()=>Rt,destinationInit:()=>Dt,destinationPush:()=>Mt,enrichEvent:()=>Nt,ensureDestStatus:()=>U,enterCascade:()=>Pe,errorMeta:()=>Q,fireCallbacks:()=>ot,flushSourceQueueOn:()=>ve,getCacheStore:()=>w,initDestinations:()=>$t,initSource:()=>we,initSources:()=>be,isBreakerProbePermitted:()=>H,isRequireSatisfied:()=>Ae,isSourceStarted:()=>ye,isStateDelivery:()=>Ie,isStatePresent:()=>je,mergeEnvironments:()=>Tt,on:()=>Ke,onApply:()=>gt,prepareEvent:()=>zt,processConsent:()=>d,pushToDestinations:()=>It,redeliverStateAtRun:()=>ft,registerDestination:()=>Pt,resolveBreakerConfig:()=>F,runCollector:()=>Yt,runCollectorNext:()=>Zt,runTransformerBefore:()=>le,runTransformerChain:()=>de,setMark:()=>De,shouldDeliver:()=>Me,startFlow:()=>bn,transformerInit:()=>Z,transformerPush:()=>ee,wrapEnv:()=>q}),module.exports=(e=s,((e,s,i,a)=>{if(s&&"object"==typeof s||"function"==typeof s)for(let c of o(s))r.call(e,c)||c===i||t(e,c,{get:()=>s[c],enumerable:!(a=n(s,c))||a.enumerable});return e})(t({},"__esModule",{value:!0}),e));var i={},a={Action:"action",Actions:"actions",Config:"config",Consent:"consent",Context:"context",Custom:"custom",Destination:"destination",Elb:"elb",Globals:"globals",Hook:"hook",Init:"init",Link:"link",On:"on",Prefix:"data-elb",Ready:"ready",Run:"run",Scoped:"_",Session:"session",Shutdown:"shutdown",User:"user",Walker:"walker"},c={Commands:a,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");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 h(e,t,n,o,r,s=Date.now(),i){const a={flowId:e.name??"default",stepId:t,stepType:n,phase:o,eventId:r,timestamp:new Date(s).toISOString(),elapsedMs:s-e.status.startedAt};return i?.traceId&&(a.traceId=i.traceId),i?.sourceId&&(a.sourceId=i.sourceId),i?.parentEventId&&(a.parentEventId=i.parentEventId),a}function m(e){return e instanceof Error?{name:e.name,message:e.message}:{message:String(e)}}function v(e,t,n,o){e.status.in++;const r=h(e,"collector.push","collector","skip","string"==typeof t.id?t.id:"",Date.now(),g(t,n,e));r.skipReason=o.reason,"consent"===o.reason?(r.consent={...o.consent},r.meta={at:o.at,required:{...o.required}}):r.meta={by:o.by??"route",at:o.at},(0,p.emitStep)(e,r)}var y=require("@walkeros/core");function w(e,t){return e.storeId&&t.stores[e.storeId]?t.stores[e.storeId]:t.stores.__cache}function b(e){return("undefined"==typeof __WALKEROS_STATE__||__WALKEROS_STATE__)&&e?(0,y.compileState)(e):void 0}function k(e,t,n,o){return"undefined"==typeof __WALKEROS_STATE__||__WALKEROS_STATE__?(0,y.applyState)(t,t=>function(e,t){return e?t.stores[e]:t.stores.__cache}(t,e),n,e,o):Promise.resolve(n)}function S(e,t,n){"undefined"==typeof __WALKEROS_STATE__||__WALKEROS_STATE__||void 0===n||e.logger.warn(`state: not in this build, ${t} state ignored`)}var E=require("@walkeros/core"),O=8;function _(e,t,n){if(null===e||"object"!=typeof e)return e;if(n>=O||!function(e){if(Array.isArray(e))return!0;const t=Object.getPrototypeOf(e);return t===Object.prototype||null===t}(e))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(_(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:_(s,t,n+1);return r}function q(e){const{simulation:t,...n}=e,o={},r=new WeakMap;for(const[e,t]of Object.entries(n))o[e]="function"==typeof t?t:_(t,r,1);const s=(0,E.observeEnv)(o,t);return{wrappedEnv:s.env,calls:s.calls,unresolved:s.unresolved}}var C=6;function I(e,t){try{return e[t]}catch{return"[unreadable]"}}function j(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>=C)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 A(e,t){("undefined"==typeof __WALKEROS_OBSERVE__||__WALKEROS_OBSERVE__)&&t&&t.length>0&&(e.calls=function(e){return e.map(e=>({fn:e.fn,args:j(e.args),ts:e.ts}))}(t))}var x=require("@walkeros/core"),D=require("@walkeros/core"),M=require("@walkeros/core");function R(e){if(void 0===e)throw new Error("Collector.Config.queueMax is undefined; defaults must be seeded by collector()");return e}function P(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 $=new WeakMap;function T(e,t,n,o){$.get(e)||($.set(e,!0),t.warn(n,o))}function B(e){$.delete(e)}var K=5,W=3e4,L=()=>Date.now();function F(e){if(void 0!==e)return"number"==typeof e?{threshold:e,cooldown:W}:{threshold:e.threshold??K,cooldown:e.cooldown??W}}function V(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=L()+r)):void(s.consecutiveFailures>=o&&(s.state="open",s.probing=!1,s.openUntil=L()+r)))}function H(e,t){return!e||("closed"===e.state||"half-open"===e.state||void 0!==e.openUntil&&t>=e.openUntil)}var z=100;function U(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 G(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 Q(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 N(e,t,n,o,r){const s=(0,M.stepId)(t,n);return(t,i)=>{try{if(i)return r?function(e,t,n,o,r,s){const i=t.dlq=t.dlq||[],a={max:t.config.dlqMax??z},c=P(i,[o,r],a);if(c.dropped>0){const t=G(e.status,(0,M.stepId)("destination",n),"dlq",c.dropped);T(i,s,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:n,cap:a.max,droppedCount:t})}else i.length<a.max&&B(i);const u=U(e,n);u.failed++,u.dlqSize=i.length,e.status.failed++;const d=F(t.config.breaker);if(d){const o=t.config.id||n;V(e.status.breakers,(0,M.stepId)("destination",o),"transport-failure",d.threshold,d.cooldown)}}(e,r,n,i,t,o):e.status.failed++,void o.error("report error",{...Q(t),event:i.name});e.status.connectionErrors[s]=(e.status.connectionErrors[s]??0)+1,o.error("connection error",Q(t))}catch{}}}var Y=require("@walkeros/core"),X=require("@walkeros/core");function J(e,t){const n=e.config||{},o=e[t];return void 0!==o?{config:{...n,[t]:o},chainValue:o}:{config:n,chainValue:void 0}}async function Z(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,X.createIngest)(n),config:t.config,env:fe(t.config.env),reportError:N(e,"transformer",n,r)};r.debug("init");const i=await(0,X.useHooks)(t.init,"TransformerInit",e.hooks,e.logger)(s);if(!1===i)return!1;t.config={...i||t.config,env:i?.env||t.config.env,init:!0},r.debug("init done")}return!0}async function ee(e,t,n,o,r,s){const i=t.type||"unknown",a=e.logger.scope(`transformer:${i}`),c={collector:e,logger:a,id:n,ingest:r,config:t.config,env:{...fe(t.config.env),...s?{respond:s}:{}},reportError:N(e,"transformer",n,a)};a.debug("push",{event:o.name});const u="string"==typeof o.id?o.id:"",d=g(o,r,e),l=Date.now(),f=h(e,(0,X.stepId)("transformer",n),"transformer","in",u,l,d);f.inEvent=o,(0,X.emitStep)(e,f);try{const r=await(0,X.useHooks)(t.push,"TransformerPush",e.hooks,e.logger)(o,c),s=Date.now(),i=h(e,(0,X.stepId)("transformer",n),"transformer","out",u,s,d);return i.durationMs=s-l,i.outEvent=r,(0,X.emitStep)(e,i),a.debug("push done"),r}catch(t){const o=Date.now(),r=h(e,(0,X.stepId)("transformer",n),"transformer","error",u,o,d);throw r.durationMs=o-l,r.error=m(t),(0,X.emitStep)(e,r),t}}var te=256;function ne(e){return"string"==typeof e.id?e.id:""}function oe(e,t){const n=ne(e);return""!==n&&""===ne(t)?{...t,id:n}:t}function re(e,t,n,o){const r=function(e){return{...e,_meta:{...e._meta,path:[...e._meta.path]}}}(n),s=(0,X.clone)(t),i=ne(e);if(""===i)return{event:s,ingest:r};r._meta.parentEventId=i;const a=ne(s);return""!==a&&a!==i||(s.id=(0,X.deriveSpanId)(i,o)),{event:s,ingest:r}}function se(e,t){return{copies:e,respond:t}}function ie(e,t){if(void 0===t)return e.rest;const n=e.ownNext?e.rest.slice(1):e.rest;return[{route:t,ancestry:e.ancestry},...n]}async function ae(e,t,n){const o=await Promise.all(t.map((t,n)=>(0,X.tryCatchAsync)(ce,t=>(e.collector.logger.scope("transformer:fork").error(`fork ${n} failed`,Q(t)),{copies:[]}))(e,t))),r=[];let s,i=n,a=o.length>0;return o.forEach((e,n)=>{void 0!==t[n].respond&&e.respond&&(i=e.respond),e.stopped||(a=!1),e.stopped||0===e.copies.length?void 0===s&&(s=e.droppedBy):r.push(...e.copies)}),0===r.length?{copies:r,respond:i,...a?{stopped:!0}:{},...void 0!==s?{droppedBy:s}:{}}:se(r,i)}async function ce(e,t){const{ingest:n}=t;let{stack:o,event:r,respond:s}=t,i=t.resume;for(;;){let t,a;if(i)t=i.member,a=i,i=void 0;else{const i=(0,X.advanceChain)(o,(0,X.createMappingRoot)(n,r),e.transformers);if("done"===i.kind)return se([{event:r,ingest:n}],s);if("stop"===i.kind)return{copies:[],respond:s,stopped:!0,...void 0!==i.owner?{droppedBy:i.owner}:{}};if("fork"===i.kind){const t=r;return ae(e,i.branches.map((e,o)=>({stack:e,...re(t,t,n,o),respond:void 0})),s)}const a=e.transformers[i.id];t={id:i.id,ancestry:i.ancestry,rest:i.rest,ownNext:!!a&&void 0!==a.config.next}}const c=await ue(e,t,r,n,s,a);if("halt"===c.kind)return c.result;if("fork"===c.kind)return ae(e,c.copies,s);r=c.event,s=c.respond,o=c.stack}}async function ue(e,t,n,o,r,s){const{collector:i,transformers:a,chainContext:c}=e,u=t.id,d=a[u];let l=n,f=r;const p=(e=t.rest)=>({kind:"continue",event:oe(n,l),respond:f,stack:e}),g=e=>({kind:"halt",result:e});if(!d)return i.logger.warn(`Transformer not found: ${u}`),p();const h=d.config?.cache,m=h?(0,X.compileCache)(h):void 0,v=m?w(m,i):void 0;let y=s?.cacheMiss;if(!s){if(o._meta.path.length>te)return i.logger.error(`Max path length exceeded at ${u}`),g({copies:[],respond:f});o._meta.hops++,o._meta.path.push(u);if(!await(0,X.tryCatchAsync)(Z,e=>{if(e instanceof X.FatalError)throw e;return i.status.failed++,i.logger.scope(`transformer:${d.type||"unknown"}`).error("transformer init failed",{transformer:u,...Q(e)}),!1})(i,d,u))return g({copies:[],respond:f});if(c&&void 0!==d.config?.chainMocks?.[c]){const e=d.config.chainMocks[c];return i.logger.scope(`transformer:${d.type||"unknown"}`).debug("chainMock",{chain:c}),l=e,p()}if(void 0!==d.config?.mock)return i.logger.scope(`transformer:${d.type||"unknown"}`).debug("mock"),l=d.config.mock,p();if(d.config?.disabled)return p();if(m&&v){const e=await(0,X.checkCache)(m,v,(0,X.createMappingRoot)(o,l));if("HIT"===e?.status&&e.value){if(l=e.value,m.stop){return g({copies:[{event:oe(n,l),ingest:o}],respond:f,stopped:!0})}return p()}"MISS"===e?.status&&(y={key:e.key,ttl:e.rule.ttl})}if(void 0!==d.config.before){const e=await le(i,a,u,l,o,f,c),n=e.respond??f;if(0===e.copies.length||e.stopped)return g({...e,respond:n});f=n;const[r]=e.copies;if(e.copies.length>1||r.ingest!==o){const n={member:t,cacheMiss:y};return{kind:"fork",copies:e.copies.map(e=>({stack:t.rest,event:e.event,ingest:e.ingest,respond:void 0,resume:n}))}}l=r.event}}const S=b(d.config?.state),E=S?.filter(e=>"get"===e.mode),O=S?.filter(e=>"set"===e.mode),_=async e=>O&&0!==O.length?k(i,O,e,o):e;E&&E.length>0&&(l=await k(i,E,l,o));const q=await(0,X.tryCatchAsync)(ee,e=>(i.status.failed++,i.logger.scope(`transformer:${d.type||"unknown"}`).error("Push failed",Q(e)),!1))(i,d,u,l,o,f);if(!1===q)return g({copies:[],respond:f,droppedBy:u});if(Array.isArray(q)&&1!==q.length){if(0===q.length)return g({copies:[],respond:f});const e=l,n=[];for(let r=0;r<q.length;r++){const s=q[r],i=await _(s.event||e);n.push({stack:ie(t,s.next),...re(e,i,o,r),respond:f})}return{kind:"fork",copies:n}}const C=Array.isArray(q)?q[0]:q;let I;return C&&"object"==typeof C&&(C.respond&&(f=C.respond),C.event&&(l=C.event),I=C.next),l=await _(l),y&&v&&(0,X.storeCache)(v,y.key,l,y.ttl),p(ie(t,I))}async function de(e,t,n,o,r,s,i){const a=r??(0,X.createIngest)("string"==typeof n?n:"chain");return void 0===n?se([{event:o,ingest:a}],s):(i&&(a._meta.chainPath=i),ce({collector:e,transformers:t,chainContext:i},{stack:(0,X.isChainContinuation)(n)?n:(0,X.startChain)(n),event:o,ingest:a,respond:s}))}async function le(e,t,n,o,r,s,i){const a=t[n],c=a?a.config.before:void 0,u=await de(e,t,c,o,r,s,i);return u.stopped&&0===u.copies.length&&!u.droppedBy?{...u,droppedBy:n}:u}function fe(e){return e&&(0,X.isObject)(e)?e:{}}var pe=1e4;function ge(e){return"number"==typeof e&&e>0?e:pe}var he=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 he(n)),t)});return Promise.race([e,r]).finally(()=>{o&&clearTimeout(o)})}async function ve(e,t,n){if(!t.on||!t.queueOn?.length)return;const o=t.queueOn;t.queueOn=[];const r=n||t.config?.id||"unknown";for(const{type:n,data:s}of o){if(Ie(n)&&!Me(e,t,n))continue;const o=t.on;let i=!1;await(0,Y.tryCatchAsync)(()=>me(Promise.resolve(o(n,s)),pe,`Source "${r}" on(${n}) did not settle within ${pe}ms`),t=>{if(t instanceof Y.FatalError)throw t;t instanceof he?i=!0:e.status.failed++,e.logger.scope("source").error("source on flush failed",{sourceId:r,type:n,...Q(t)})})(),Ie(n)&&!i&&De(e,t,n)}}function ye(e){return Boolean(e.config.init)&&!e.config.require?.length}async function we(e,t,n){const{code:o,config:r={},env:s={},primary:i,next:a,before:c,cache:u,terminus:d}=n,l=r.state??n.state,f=b(l);S(e,(0,Y.stepId)("source",t),l);const p=u,g=p?(0,Y.compileCache)({...p,stop:p.stop??!0}):void 0,h=d??e.push,m=Boolean(d),y=async(n,o,s)=>{if(m)return h(n);let i;const u="string"==typeof n.id&&""!==n.id?n:{...n,id:(0,Y.getSpanId)()};let d=[{event:u,ingest:s.ingest}];if(void 0!==c){const n=`source.${t}.before`,o=await de(e,e.transformers||{},c,u,s.ingest,s.respond,n);if(0===o.copies.length)return v(e,u,s.ingest,{reason:"dropped",by:o.droppedBy,at:n}),Rt({ok:!0,dropped:!0});if(o.stopped)return o.respond&&(s.respond=o.respond),{ok:!0};o.respond&&(s.respond=o.respond),d=o.copies}if(g){const t=w(g,e);if(t){const n=(0,Y.createMappingRoot)(s.ingest),o=await(0,Y.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,Y.applyUpdate)(t,o.rule.update,{...n,cache:{status:"HIT"}},e)),s.respond?.(t),{ok:!0}}if("MISS"===o.status&&g.stop&&s.respond){const r=s.respond,a=o.rule.update,c={...n,cache:{status:"MISS"}},u=o.key,d=o.rule.ttl,l=n=>{(0,Y.storeCache)(t,u,n,d),a?i=(async()=>{const t=await(0,Y.applyUpdate)(n,a,c,e);r(t)})():r(n)};s.respond=l}"MISS"!==o.status||g.stop||(0,Y.storeCache)(t,o.key,!0,o.rule.ttl)}}}f&&f.length>0&&(d=await Promise.all(d.map(async t=>({event:await k(e,f,t.event,t.ingest),ingest:t.ingest}))));let l={ok:!0};for(const e of d)l=await h(e.event,{...o,id:t,ingest:e.ingest,respond:s.respond,mapping:r,preChain:a});return i&&await i,l},E=async n=>{const o=(0,Y.createIngest)(t),s=(0,Y.parseTraceparent)((0,Y.isScope)(n)?n?.headers?.traceparent:void 0);if(s&&(o._meta.trace=s.trace,o._meta.parentEventId=s.parentSpan),!r.ingest||void 0===n)return o;const i=await(0,Y.getMappingValue)(n,r.ingest,{collector:e});return{...o,...i,_meta:o._meta}},O=e.logger.scope("source").scope(t),_={...s,push:async(e,n={})=>{const o={ingest:(0,Y.createIngest)(t),respond:void 0};return y(e,n,o)},command:e.command,sources:e.sources,elb:e.elb,logger:O},q={collector:e,logger:O,id:t,config:r,env:_,withScope:async(e,t,n)=>{const o={ingest:await E(e),respond:t};return n({..._,push:(e,t={})=>y(e,t,o),ingest:o.ingest,respond:o.respond})},reportError:N(e,"source",t,O)},C=await(0,Y.tryCatchAsync)(o,n=>{if(n instanceof Y.FatalError)throw n;e.status.failed++,e.logger.scope("source").error("source factory failed",{sourceId:t,...Q(n)})})(q);if(!C)return;const I=C.type||"unknown",j=e.logger.scope(I).scope(t);return _.logger=j,i&&(C.config={...C.config,primary:i}),C}async function be(e,t={}){const n={};for(const[o,r]of Object.entries(t)){const t=await we(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,Y.tryCatchAsync)(n.init.bind(n),n=>{if(n instanceof Y.FatalError)throw n;o=!0,e.status.failed++,e.logger.scope("source").error("source init failed",{sourceId:t,...Q(n)})})(),o||(n.config.init=!0,ye(n)&&await ve(e,n,t))}return await ke(e),n}async function ke(e){for(const[t,n]of Object.entries(e.sources)){if(ye(n))continue;const o=n.config.require;if(!o?.length)continue;const r=o.filter(t=>!Ae(e,t));r.length!==o.length&&(n.config.require=r,ye(n)&&await ve(e,n,t))}for(const[t,n]of Object.entries(e.pending.destinations)){if(!e.pending.destinations[t]||e.destinations[t])continue;const o=n.config?.require;if(!o)continue;const r=o.filter(t=>!Ae(e,t));if(n.config&&(n.config.require=r),r.length>0)continue;delete e.pending.destinations[t];const s=Pt(n);!1!==s.config.queue&&(s.queuePush=[...e.queue]),e.destinations[t]=s,await dt(e,s,t)}}function Se(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 Ee=!1;function Oe(){Ee||(Ee=!0,"undefined"!=typeof console&&"function"==typeof console.warn&&console.warn("walkerOS: ignored an on-dispatch call with a non-collector argument"))}function _e(e,t,n,o){if(n instanceof x.FatalError)throw n;e.logger.scope("on").error("on callback failed",{kind:t,...o,...Q(n)})}var qe=["consent","user","globals","custom"];function Ce(e){return qe.includes(e)}function Ie(e){return Ce(e)}function je(e,t){return Ce(t)&&Object.keys(e[t]).length>0}function Ae(e,t){if(Ce(t))return je(e,t);switch(t){case c.Commands.Run:case c.Commands.Ready:return!0===e.allowed;default:return e.seenEvents.has(String(t))}}function xe(e,t){return e.cellVersion?.[String(t)]??0}function De(e,t,n){nt(e,t,n,xe(e,n))}function Me(e,t,n){return e.allowed&&xe(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 Re=8;function Pe(e){const t=e.cascade;if(t&&!$e.has(t))return()=>{};const n=t||{counts:new WeakMap};e.cascade=n,$e.set(n,($e.get(n)||0)+1);let o=!1;return()=>{if(o)return;o=!0;const t=($e.get(n)||1)-1;t>0?$e.set(n,t):($e.delete(n),e.cascade===n&&(e.cascade=void 0))}}var $e=new WeakMap;function Te(e,t,n){const o=e.cascade;if(!o)return!0;let r=o.counts.get(t);r||(r={},o.counts.set(t,r));const s=String(n),i=(r[s]||0)+1;return r[s]=i,i<=Re||(i===Re+1&&e.logger.error("state delivery did not converge",{type:s}),!1)}function Be(e,t){return{collector:e,logger:e.logger.scope("on").scope(String(t))}}async function Ke(e,t,n){if(!Se(e))return void Oe();const o=e.on,r=o[t]||[],s=(0,x.isArray)(n)?n:[n];s.forEach(e=>{r.push(e)}),o[t]=r,ot(e,t,s)}async function We(e,t,n,o,r){const s=t.on;if(!s)return!0;const i=Ie(o);if(i&&(Le.get(t)||Fe.has(t)))return Je(e,t,o),Le.get(t)||Ve.add(t),!1;const a=i?xe(e,o):0,c=i&&function(e,t,n,o){if(Ne.get(t)?.has(String(n)))return!0;const r=e.delivery?.get(t)?.[String(n)];return void 0===r||r<o-1}(e,t,o,a)?rt(e,o):r,u=t.type||"unknown",d=e.logger.scope(u).scope("on").scope(o),l={collector:e,logger:d,id:n,config:t.config,data:c,env:Tt(t.env,t.config.env),reportError:N(e,"destination",n,d,t)};i&&(et(t,o),function(e,t,n){let o=Ge.get(e);o||(o={},Ge.set(e,o));const r=String(t),s=o[r];(void 0===s||s<n)&&(o[r]=n)}(t,o,a),Fe.add(t));const f=ge(t.config.timeout);let p=Promise.resolve(),g=!0,h=!1,m=!0;try{await(0,D.tryCatchAsync)(()=>(p=Promise.resolve(s(o,l)),me(p,f,`Destination "${n}" on(${o}) did not settle within ${f}ms`)),t=>{g=!1,t instanceof he&&(h=!0),_e(e,"destination",t,{destId:n,type:o})})(),m=!1}finally{if(i){Fe.delete(t),m&&Ve.delete(t);const r=Ne.get(t);g?(nt(e,t,o,a),r?.delete(String(o))):Je(e,t,o),h?function(e,t,n,o,r,s,i){Le.set(t,(Le.get(t)||0)+1);const a=()=>{const s=(Le.get(t)||0)-1;s>0?Le.set(t,s):Le.delete(t),Ye(t,o),Qe(t,o,r),tt(e,t),i.debug("late settle after timeout"),Ve.delete(t),e.allowed&&e.destinations[n]===t&&function(e,t,n,o){(0,D.tryCatchAsync)(async()=>{await dt(e,t,n),!ze(t)&&t.queuePush?.length&&await It(e,void 0,{},{[n]:t})},e=>{o.error("state recovery failed",Q(e))})()}(e,t,n,i)};s.then(a,a)}(e,t,n,o,a,p,d):(Qe(t,o,a),tt(e,t))}}return i&&!h&&Ve.delete(t)&&await dt(e,t,n),g}var Le=new WeakMap,Fe=new WeakSet,Ve=new WeakSet;var He=new WeakMap;function ze(e){return He.get(e)}var Ue=new WeakMap,Ge=new WeakMap;function Qe(e,t,n){const o=Ge.get(e);o&&o[String(t)]===n&&delete o[String(t)]}var Ne=new WeakMap;function Ye(e,t){const n=Ne.get(e);n?n.add(String(t)):Ne.set(e,new Set([String(t)]))}var Xe=new WeakMap;function Je(e,t,n){!function(e,t,n){const o=e.delivery?.get(t);o&&delete o[String(n)]}(e,t,n),Ye(t,n),He.set(t,{type:n,since:Date.now()})}function Ze(e,t){return!!Ne.get(t)?.size||qe.some(n=>je(e,n)&&Me(e,t,n))}function et(e,t){Ue.set(e,(Ue.get(e)||0)+1),He.set(e,{type:t,since:Date.now()})}function tt(e,t){const n=(Ue.get(t)||0)-1;n>0?Ue.set(t,n):Ue.delete(t),function(e,t){if(!He.has(t))return;if(Ue.get(t))return;Ze(e,t)||He.delete(t)}(e,t)}function nt(e,t,n,o){let r=e.delivery.get(t);r||(r={},e.delivery.set(t,r));const s=String(n),i=r[s];(void 0===i||i<o)&&(r[s]=o)}function ot(e,t,n,o){if(!Se(e))return void Oe();const r=rt(e,t,o);if(n.length)switch(t){case c.Commands.Consent:!function(e,t,n){const o=n||e.consent,r=Be(e,c.Commands.Consent);t.forEach(t=>{Me(e,t,c.Commands.Consent)&&Te(e,t,c.Commands.Consent)&&(Object.keys(o).filter(e=>e in t).forEach(n=>{(0,D.tryCatch)(t[n],t=>_e(e,"consent",t,{key:n}))(o,r)}),De(e,t,c.Commands.Consent))})}(e,n,o);break;case c.Commands.Ready:!function(e,t){if(!e.allowed)return;const n=Be(e,c.Commands.Ready);t.forEach(t=>{(0,D.tryCatch)(t,t=>_e(e,"ready",t))(void 0,n)})}(e,n);break;case c.Commands.Run:!function(e,t){if(!e.allowed)return;const n=Be(e,c.Commands.Run);t.forEach(t=>{(0,D.tryCatch)(t,t=>_e(e,"run",t))(void 0,n)})}(e,n);break;case c.Commands.Session:!function(e,t){if(!e.session)return;const n=Be(e,c.Commands.Session);t.forEach(t=>{(0,D.tryCatch)(t,t=>_e(e,"session",t))(e.session,n)})}(e,n);break;default:{const o=Be(e,t),s=Ie(t);n.forEach(n=>{"function"==typeof n&&(s&&!Me(e,n,t)||s&&!Te(e,n,t)||((0,D.tryCatch)(n,n=>_e(e,"generic",n,{type:t}))(r,o),s&&De(e,n,t)))});break}}}function rt(e,t,n){if(Ce(t))return n||e[t];switch(t){case c.Commands.Session:return e.session;case c.Commands.Config:return n||e.config;default:return}}async function st(e,t,n,o,r){if(!t.on)return!1;if(Ie(o)&&!Me(e,t,o))return!1;if(Ie(o)&&!Te(e,t,o))return!1;const s=Ie(o);if(s&&it.has(t))return at.add(t),!1;const i=s?xe(e,o):0;s&&it.add(t);const a=t.on;let c,u=Promise.resolve(),d=!1;try{c=await(0,D.tryCatchAsync)(()=>(u=Promise.resolve(a(o,r)),me(u,pe,`Source "${n}" on(${o}) did not settle within ${pe}ms`)),t=>{t instanceof he&&(d=!0),_e(e,"source",t,{sourceId:n,type:o})})()}finally{s&&!d&&it.delete(t)}if(s)if(d){const o=()=>{it.delete(t),at.delete(t),e.allowed&&e.sources[n]===t&&(0,D.tryCatchAsync)(()=>ct(e,t,n),t=>{e.logger.scope("on").error("state recovery failed",Q(t))})()};u.then(o,o)}else nt(e,t,o,i),at.delete(t)&&await ct(e,t,n);return!1===c}var it=new WeakSet,at=new WeakSet;async function ct(e,t,n){const o=Pe(e);try{for(const o of qe)await st(e,t,n,o,rt(e,o))}finally{o()}}async function ut(e,t,n,o,r){if(!t.on)return;const s=Ie(o);if(s&&!Me(e,t,o))return;const i=Ge.get(t)?.[String(o)];if(s&&void 0!==i&&i>=xe(e,o))return;if(s&&!Te(e,t,o)){if(t.config.init)return void Je(e,t,o);const n=t.queueOn=t.queueOn||[],r={type:o,data:rt(e,o)},s=n[n.length-1];return s&&s.type===o?n[n.length-1]=r:n.push(r),De(e,t,o),void Ne.get(t)?.delete(String(o))}const a=Xe.get(t);if(!t.config.init||a)return t.queueOn=t.queueOn||[],t.queueOn.push({type:o,data:r}),void(s&&(De(e,t,o),a&&!a.held&&(et(t,o),a.held=!0)));await We(e,t,n,o,r)}async function dt(e,t,n){if(!t.on)return;const o=Pe(e);try{for(const o of qe)(je(e,o)||Ne.get(t)?.has(String(o)))&&await ut(e,t,n,o,rt(e,o))}finally{o()}}function lt(e){return(Ue.get(e)||0)>0}async function ft(e){const t=await pt(e);await Promise.all(t.map(({done:e})=>e))}async function pt(e){if(!Se(e))return Oe(),[];const t=[];for(const[n,o]of Object.entries(e.destinations)){if(!o.on)continue;const r=async()=>{for(const t of qe)je(e,t)&&await ut(e,o,n,t,rt(e,t))};t.push(ht(n,o,r()))}for(const t of qe){if(!je(e,t))continue;const n=rt(e,t);ot(e,t,e.on[t]||[]),await Promise.all(Object.entries(e.sources).filter(([,e])=>ye(e)).map(([o,r])=>st(e,r,o,t,n)))}return t}async function gt(e,t,n,o){const{ok:r,deliveries:s}=await mt(e,t,n,o);return await Promise.all(s.map(({done:e})=>e)),r}function ht(e,t,n){return n.catch(()=>{}),{id:e,destination:t,done:n}}async function mt(e,t,n,o){if(!Se(e))return Oe(),{ok:!0,deliveries:[]};e.seenEvents.add(String(t));let r=n||[];n||(r=e.on[t]||[]);const s=rt(e,t,o),i=[];for(const[n,o]of Object.entries(e.sources)){if(o.config.require?.length){const e=o.config.require.indexOf(t);-1!==e&&o.config.require.splice(e,1)}o.on&&(ye(o)?i.push(st(e,o,n,t,s)):(o.queueOn=o.queueOn||[],o.queueOn.push({type:t,data:s})))}const a=[];for(const[n,o]of Object.entries(e.destinations))o.on&&a.push(ht(n,o,ut(e,o,n,t,s)));let c=!1;if(i.length){c=(await Promise.all(i)).some(Boolean)}for(const[t,n]of Object.entries(e.sources))ye(n)&&n.queueOn?.length&&await ve(e,n,t);const u=Object.values(e.sources).some(e=>!ye(e)&&e.config.require?.length);return(Object.keys(e.pending.destinations).length>0||u)&&await ke(e),ot(e,t,r,o),{ok:!c,deliveries:a}}var vt=1e3,yt=1e3,wt=3e4,bt=Object.freeze({batched:!0});function kt(e){return e===bt}var St=" batch-all";function Et(e){return void 0===e?{}:"number"==typeof e?{wait:e}:{wait:e.wait,size:e.size,age:e.age}}async function Ot(e,t){const{code:n,config:o={},env:r={},before:s,next:i,cache:a,state:c}=t;if(!(0,f.isFunction)(n.push))return Rt({ok:!1,failed:{invalid:{type:"invalid",error:"Destination code must have a push method"}}});const u={...n.config,...o||{init:!1}};let d=s?{...u,before:s}:{...u};i&&(d={...d,next:i}),a&&(d={...d,cache:a}),void 0!==c&&void 0===d.state&&(d={...d,state:c});let l=d.id;if(!l)do{l=(0,f.getId)(5,"abcdefghijklmnopqrstuvwxyz")}while(e.destinations[l]||e.pending.destinations[l]);if(S(e,(0,f.stepId)("destination",l),d.state),d.require?.length){e.pending.destinations[l]=t,await ke(e);const n=e.destinations[l];return n?It(e,void 0,{},{[l]:n}):Rt({ok:!0})}const p={...n,config:d,env:Tt(n.env,r)};return e.destinations[l]=p,!1!==p.config.queue&&(p.queuePush=[...e.queue]),await dt(e,p,l),It(e,void 0,{},{[l]:p})}function _t(e){for(const t of e)ze(t.destination)&&(t.drain=!0)}async function qt(e,t){return(await Promise.all(t.map(async({id:t,destination:n,done:o,drain:r})=>{if(await o,r&&e.allowed&&!ze(n)&&n.queuePush?.length&&e.destinations[t]===n)return It(e,void 0,{},{[t]:n})}))).filter(f.isDefined)}function Ct(e,t){if(!t.length)return e;const n={...e.done??{}},o={...e.queued??{}},r={...e.failed??{}};for(const e of t){for(const[t,r]of Object.entries(e.done??{}))n[t]=r,delete o[t];for(const[t,n]of Object.entries(e.failed??{}))r[t]=n,delete o[t];Object.assign(o,e.queued??{})}const s={...e,ok:e.ok&&t.every(e=>e.ok)};return delete s.done,delete s.queued,delete s.failed,Object.keys(n).length&&(s.done=n),Object.keys(o).length&&(s.queued=o),Object.keys(r).length&&(s.failed=r),s}async function It(e,t,n={},o){if(!e.allowed)return Rt({ok:!1});if(!t)return jt(e,void 0,n,o);const r=await Zt(e,t,n);if(0===r.copies.length)return Rt({ok:!0,...r.dropped?{dropped:!0}:{}});const s=[];for(const t of r.copies)s.push(await jt(e,t.event,{id:n.id,ingest:t.ingest,respond:r.respond},o));return s[0]}async function jt(e,t,n,o){const{user:r}=e;if(t){const n=R(e.config.queueMax),o=P(e.queue,t,{max:n});if(o.dropped>0){const t=G(e.status,(0,f.stepId)("collector"),"queue",o.dropped);T(e.queue,e.logger,"collector.queue overflow; oldest events dropped",{buffer:"queue",cap:n,droppedCount:t})}else e.queue.length<n&&B(e.queue);e.status.in++}o||(o=e.destinations);const s=e.transformers||{},i=await Promise.all(Object.entries(o||{}).map(async([o,i])=>{if(i.config.disabled)return{id:o,destination:i,skipped:!0};const a=i.config.id||o,c=(0,f.stepId)("destination",a),u=F(i.config.breaker);if(u&&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=L();return void 0!==o.openUntil&&r<o.openUntil||(o.state="half-open",o.probing=!0,o.openUntil=r+n,!1)}(e.status.breakers,c,u.cooldown))return{id:o,destination:i,skipped:!0};const d=t=>{u&&V(e.status.breakers,c,t,u.threshold,u.cooldown)},l=()=>{u&&function(e,t){const n=e[t];n&&"half-open"===n.state&&!0===n.probing&&(n.state="open",n.probing=!1)}(e.status.breakers,c)},p=t=>{if(!t.length)return;i.queuePush||(i.queuePush=[]);const n=i.queuePush,r=i.config.id||o,s={max:i.config.queueMax??vt};let a=0;for(const e of t){a+=P(n,e,s).dropped}if(a>0){U(e,r);const t=G(e.status,(0,f.stepId)("destination",r),"queue",a);T(n,e.logger.scope(i.type||"unknown"),"destination.queuePush overflow; oldest events dropped",{buffer:"queuePush",destination:r,cap:s.max,droppedCount:t})}else n.length<s.max&&B(n)};i.on&&i.config.init&&!ze(i)&&!lt(i)&&Ze(e,i)&&await dt(e,i,o);const m=ze(i);if(m&&!lt(i)&&Date.now()-m.since>=ge(i.config.timeout)&&await dt(e,i,o),ze(i)){if(l(),!t)return{id:o,destination:i,skipped:!0};const e=[(0,f.clone)(t)];return p(e),{id:o,destination:i,queue:e}}let v=(i.queuePush||[]).map(t=>({...t,consent:e.consent}));i.queuePush=[],t&&v.push((0,f.clone)(t));const y=n.ingest?{...n.ingest,_meta:{...n.ingest._meta,path:[...n.ingest._meta.path]}}:(0,f.createIngest)("unknown");if(!v.length&&!i.queueOn?.length)return l(),{id:o,destination:i,skipped:!0};if(!v.length&&i.queueOn?.length){if(!(0,f.getGrantedConsent)(i.config.consent,e.consent))return l(),{id:o,destination:i,skipped:!0};let t=!1;try{t=await Dt(e,i,o,!0)}catch(t){e.status.failed++;const n=i.type||"unknown";e.logger.scope(n).error("destination init failed",{error:t instanceof Error?t.message:String(t)}),d("transport-failure")}if(ze(i))return l(),{id:o,destination:i,skipped:!0};if(!t||!i.queuePush?.length)return l(),{id:o,destination:i,skipped:!t};v=i.queuePush.map(t=>({...t,consent:e.consent})),i.queuePush=[]}const S=t=>{const n=e.consent,r=[],s=t.filter(t=>{const s=(0,f.getGrantedConsent)(i.config.consent,n,t.consent);if(s)return t.consent=s,r.push(t),!1;const a=h(e,(0,f.stepId)("destination",o),"destination","skip","string"==typeof t.id?t.id:"",Date.now(),g(t,y,e));return a.skipReason="consent",n&&(a.consent={...n}),i.config.consent&&(a.meta={required:{...i.config.consent}}),(0,f.emitStep)(e,a),!0});return{allowed:r,skipped:s}},E=e.consent,{allowed:O,skipped:_}=S(v);if(p(_),!O.length)return l(),{id:o,destination:i,queue:v};const q=new Set(i.queuePush);let C=!1;try{C=await Dt(e,i,o,!0)}catch(t){e.status.failed++;const n=i.type||"unknown";e.logger.scope(n).error("destination init failed",{error:t instanceof Error?t.message:String(t)}),d("transport-failure")}if(!C)return l(),{id:o,destination:i,queue:v};if(ze(i))return l(),p(O),{id:o,destination:i,queue:O};const I=[];if(e.consent!==E){const t=S(O.map(t=>({...t,consent:e.consent})));O.splice(0,O.length,...t.allowed),I.push(...t.skipped)}const j=i.queuePush||[],A=j.filter(e=>!q.has(e));if(A.length){i.queuePush=j.filter(e=>q.has(e));const t=S(A.map(t=>({...t,consent:e.consent})));O.push(...t.allowed),I.push(...t.skipped)}if(p(I),!O.length)return l(),I.length?{id:o,destination:i,queue:I}:{id:o,destination:i,skipped:!0};let x,D;i.dlq||(i.dlq=[]);const M=i.config.before,R=i.config.next,$=i.config?.cache,K=$?(0,f.compileCache)($):void 0,W=K?w(K,e):void 0,H=b(i.config?.state),N=H?.filter(e=>"get"===e.mode),Y=H?.filter(e=>"set"===e.mode);let X=0,J=0,Z=0;return await Promise.all(O.map(async t=>{let a,c;if(t.user=(0,f.assign)(r,t.user),K?.stop&&W){const e=(0,f.createMappingRoot)(y,t),n=await(0,f.checkCache)(K,W,e);if("HIT"===n?.status)return t;"MISS"===n?.status&&(a={key:n.key,ttl:n.rule.ttl})}let u=[{event:t,ingest:y}],d=n.respond;if(void 0!==M){const r=`destination.${o}.before`,i=await de(e,s,M,t,y,n.respond,r);if(0===i.copies.length){const n=h(e,(0,f.stepId)("destination",o),"destination","skip","string"==typeof t.id?t.id:"",Date.now(),g(t,y,e));return n.skipReason="dropped",n.meta={by:i.droppedBy??"route",at:r},(0,f.emitStep)(e,n),t}i.respond&&(d=i.respond),u=i.copies.map(e=>({event:e.event,ingest:e.ingest}))}const l=async(t,n,r)=>{let a=r,u=!1;if(K&&!K.stop&&W){const e=(0,f.createMappingRoot)(n,t??void 0),o=await(0,f.checkCache)(K,W,e);if("HIT"===o?.status)return!1;"MISS"===o?.status&&(a={key:o.key,ttl:o.rule.ttl},u=!0)}N&&N.length>0&&t&&(t=await k(e,N,t,n));const l=Date.now();let p=!1;const g=await(0,f.tryCatchAsync)(Mt,n=>{const r=i.type||"unknown";e.logger.scope(r).error("Push failed",{...Q(n),event:t.name}),x=n,p=!0;const s=i.dlq,a=i.config.id||o,c={max:i.config.dlqMax??z},u=P(s,[t,n],c);if(u.dropped>0){U(e,a);const t=G(e.status,(0,f.stepId)("destination",a),"dlq",u.dropped);T(s,e.logger.scope(i.type||"unknown"),"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:a,cap:c.max,droppedCount:t})}else s.length<c.max&&B(s)})(e,i,o,t,n,d);if(X+=Date.now()-l,a&&W&&void 0===i.config.mock&&(u?(0,f.storeCache)(W,a.key,g??!0,a.ttl):void 0===c&&(c=g??!0)),!p&&!kt(g)&&Y&&Y.length>0&&t&&(t=await k(e,Y,t,n)),void 0===g||kt(g)||(D=g),kt(g)&&J++,!p&&R){void 0!==g&&(n._response=g);const r=await de(e,s,R,t,n,d,`destination.${o}.next`);r.respond&&(d=r.respond)}return!0};for(const e of u)await l(e.event,e.ingest,a)&&Z++;return a&&W&&void 0!==c&&void 0===i.config.mock&&(0,f.storeCache)(W,a.key,c,a.ttl),t})),{id:o,destination:i,error:x,response:D,totalDuration:X,batchedCount:J,allowedCount:O.length,pushedCount:Z,canonicalId:a,breakerConfig:u}})),a={},c={},u={};for(const t of i){if(t.skipped)continue;const n=t.destination,o={type:n.type||"unknown",data:t.response};U(e,t.id);const r=e.status.destinations[t.id],s=Date.now();r.queuePushSize=n.queuePush?.length??0,r.dlqSize=n.dlq?.length??0;const i=t.breakerConfig,d=t.canonicalId?(0,f.stepId)("destination",t.canonicalId):void 0,l=t=>{i&&d&&V(e.status.breakers,d,t,i.threshold,i.cooldown)};if(t.error)o.error=t.error,u[t.id]=o,r.failed++,r.lastAt=s,r.duration+=t.totalDuration||0,e.status.failed++,l("transport-failure");else if(t.queue&&t.queue.length)c[t.id]=o;else{const n=t.batchedCount??0,i=t.allowedCount??0,c=t.pushedCount??i;(Math.max(0,c-n)>0||0===i)&&(a[t.id]=o,r.count++,r.lastAt=s,r.duration+=t.totalDuration||0,e.status.out++,l("success"))}}return Rt({event:t,...Object.keys(a).length&&{done:a},...Object.keys(c).length&&{queued:c},...Object.keys(u).length&&{failed:u}})}async function At(e,t,n,o){const r=await async function(e,t,n,o){const r=t.type||"unknown",s=e.logger.scope(r),i={collector:e,logger:s,id:o,config:t.config,env:Tt(t.env,t.config.env),reportError:N(e,"destination",o,s,t)};s.debug("init");const a=Date.now();let c;(0,f.emitStep)(e,h(e,(0,f.stepId)("destination",o),"destination","init","",a));try{c=await(0,f.useHooks)(n,"DestinationInit",e.hooks,e.logger)(i)}catch(t){const n=Date.now(),r=h(e,(0,f.stepId)("destination",o),"destination","error","",n);throw r.durationMs=n-a,r.error=m(t),(0,f.emitStep)(e,r),t}return!1!==c&&{...c||t.config,init:!0}}(e,t,n,o);if(!1===r)return!1;if(t.config=r,t.queueOn?.length){const n=Pe(e);!function(e){const t=e.queueOn?.find(({type:e})=>Ie(e));t&&et(e,t.type),Xe.set(e,{held:!!t})}(t);try{for(let n=t.queueOn?.shift();n;n=t.queueOn?.shift())await We(e,t,o,n.type,n.data)}catch(n){for(const{type:n}of t.queueOn||[])Ie(n)&&Je(e,t,n);throw t.queueOn=[],n}finally{!function(e,t){const n=Xe.get(t);Xe.delete(t),n?.held&&tt(e,t)}(e,t),n()}}return e.logger.scope(t.type||"unknown").debug("init done"),!0}var xt=new WeakMap;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 r=xt.get(t);if(r)return r;const s=At(e,t,t.init,n);xt.set(t,s);try{return await s}finally{xt.delete(t)}}return!0}async function Mt(e,t,n,o,r,s){const{config:i}=t,a=await(0,f.processEventMapping)(o,i,e);if(a.ignore)return!1;const c=t.type||"unknown",u=e.logger.scope(c),d={collector:e,logger:u,id:n,config:i,data:a.data,rule:a.mapping,ingest:r,env:{...Tt(t.env,i.env),...s?{respond:s}:{}},reportError:N(e,"destination",n,u,t)};if(void 0!==i.mock)return u.debug("mock",{event:a.event.name}),i.mock;const l=a.mapping,p=void 0!==l?.batch,v=p?a.mappingKey||"* *":St;if((p||void 0!==i.batch)&&t.pushBatch&&void 0===i.mock){if(t.batches=t.batches||{},!t.batches[v]){const o={key:v,entries:[],events:[],data:[]},r=Et(l?.batch),s=Et(i.batch),a=r.wait??s.wait??wt,c=r.size??s.size??yt,d=r.age??s.age??wt,y=Tt(t.env,i.env),w=async()=>{const o=t.batches[v],r=o.batched;if(0===r.entries.length)return;const s={key:r.key,entries:r.entries,events:r.events,data:r.data};r.entries=[],r.events=[],r.data=[];const a=s.entries[0],c={collector:e,logger:u,id:n,config:i,data:void 0,rule:o.isDefault?void 0:a.rule,ingest:a.ingest,env:{...y,...a.respond?{respond:a.respond}:{}},reportError:N(e,"destination",n,u,t)};u.debug("push batch",{events:s.entries.length});const d=t.config.id||n,l=U(e,d),p=F(t.config.breaker),w=(0,f.stepId)("destination",d),b=t=>{p&&V(e.status.breakers,w,t,p.threshold,p.cooldown)},k=Date.now(),S=new Map;let E,O=!1;const _=n=>{const o=t.dlq=t.dlq||[],r={max:t.config.dlqMax??z};let s=0;for(const e of n){s+=P(o,e,r).dropped}if(s>0){const t=G(e.status,(0,f.stepId)("destination",d),"dlq",s);T(o,u,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:d,cap:r.max,droppedCount:t})}else o.length<r.max&&B(o);l.failed+=n.length,l.dlqSize=o.length,e.status.failed+=n.length};let q=s.entries.length;const C=ge(i.timeout),I=await(0,f.tryCatchAsync)((o,r)=>me(Promise.resolve((0,f.useHooks)(t.pushBatch,"DestinationPushBatch",e.hooks,e.logger)(o,r)),C,`Destination "${n}" batch delivery timed out after ${C}ms`),e=>{q=0,O=!0,E=e,_(s.entries.map(t=>[t.event,e])),b("transport-failure"),u.error("Push batch failed",{error:e instanceof Error?e.message:String(e),entries:s.entries.length})})(s,c);if(j=I,(0,f.isObject)(j)&&Array.isArray(j.failed)&&I.failed.length>0){const e=[];for(const t of I.failed){const n=s.entries[t.index];if(!n||S.has(t.index))continue;const o=t.error??new Error(`Push batch entry ${t.index} failed (no per-row error provided)`);S.set(t.index,o),e.push([n.event,o])}if(e.length>0){_(e),q=Math.max(0,s.entries.length-e.length);const t=new Map;for(const[,n]of e){const e=n instanceof Error&&"code"in n&&"string"==typeof n.code?n.code:n instanceof Error?n.name:"Error",o=t.get(e);o?o.count++:t.set(e,{code:e,count:1,message:n instanceof Error?n.message:String(n)})}u.error("Push batch partial failure",{failed:e.length,delivered:q,entries:s.entries.length,causes:[...t.values()]})}}var j;const A=Date.now();s.entries.forEach((t,o)=>{const r=O||S.has(o),i=g(t.event,t.ingest,e),a=h(e,(0,f.stepId)("destination",n),"destination",r?"error":"flush","string"==typeof t.event.id?t.event.id:"",A,i);if(a.batch={size:s.entries.length,index:o},a.durationMs=A-k,r){const e=O?E:S.get(o);a.error=m(e)}(0,f.emitStep)(e,a)}),u.debug("push batch done"),l.inFlightBatch=Math.max(0,(l.inFlightBatch??0)-s.entries.length),q>0&&(l.count+=q,l.lastAt=Date.now(),e.status.out+=q,b("success"))},b=(0,f.debounce)(w,{wait:a,size:c,age:d});t.batches[v]={batched:o,isDefault:!p,batchFn:()=>{b()},flush:async()=>{await b.flush()}}}const c=t.batches[v];c.batched.entries.push({event:a.event,ingest:r,respond:s,rule:l,data:a.data}),c.batched.events.push(a.event),(0,f.isDefined)(a.data)&&c.batched.data.push(a.data);const d="string"==typeof a.event.id?a.event.id:"",y=g(o,r,e),w=Date.now(),b=h(e,(0,f.stepId)("destination",n),"destination","in",d,w,y);a.mappingKey&&(b.mappingKey=a.mappingKey),a.event.consent&&(b.consent={...a.event.consent}),b.inEvent=a.event,(0,f.emitStep)(e,b);const k=h(e,(0,f.stepId)("destination",n),"destination","out",d,w,y);a.mappingKey&&(k.mappingKey=a.mappingKey),k.outEvent=a.event,k.batch={size:c.batched.entries.length,index:c.batched.entries.length-1},(0,f.emitStep)(e,k);const S=t.config.id||n,E=U(e,S);return E.inFlightBatch=(E.inFlightBatch??0)+1,c.batchFn(),bt}{let s;if(u.debug("push",{event:a.event.name}),("undefined"==typeof __WALKEROS_OBSERVE__||__WALKEROS_OBSERVE__)&&"trace"===e.observeLevel?.()&&Array.isArray(t.calls)&&t.calls.length>0){const e=q({...d.env,simulation:t.calls});d.env=e.wrappedEnv,s=e.calls,e.unresolved.length>0&&(e.wrappedEnv[f.OBSERVE_ENV_KEY]={paths:e.unresolved,record:(t,n)=>e.calls.push({fn:t,args:n,ts:Date.now()})})}const c="string"==typeof a.event.id?a.event.id:"",l=g(o,r,e),p=Date.now(),v=h(e,(0,f.stepId)("destination",n),"destination","in",c,p,l);a.mappingKey&&(v.mappingKey=a.mappingKey),a.event.consent&&(v.consent={...a.event.consent}),v.inEvent=a.event,(0,f.emitStep)(e,v);try{const o=ge(i.timeout),r=await me(Promise.resolve((0,f.useHooks)(t.push,"DestinationPush",e.hooks,e.logger)(a.event,d)),o,`Destination "${n}" delivery timed out after ${o}ms`),g=Date.now(),m=h(e,(0,f.stepId)("destination",n),"destination","out",c,g,l);return m.durationMs=g-p,m.outEvent=a.event,A(m,s),(0,f.isDefined)(r)&&(m.meta={...m.meta,response:r}),a.mappingKey&&(m.mappingKey=a.mappingKey),(0,f.emitStep)(e,m),u.debug("push done"),r}catch(t){const o=Date.now(),r=h(e,(0,f.stepId)("destination",n),"destination","error",c,o,l);throw r.durationMs=o-p,r.error=m(t),A(r,s),a.mappingKey&&(r.mappingKey=a.mappingKey),(0,f.emitStep)(e,r),t}}}function Rt(e){return{ok:!e?.failed,...e}}function Pt(e){const{code:t,config:n={},env:o={},cache:r,state:s}=e,{config:i}=J(e,"before"),{config:a}=J({...e,config:i},"next"),c={...t.config,...n,...a};r&&(c.cache=r),void 0!==s&&void 0===c.state&&(c.state=s);const u=Tt(t.env,o);return{...t,config:c,env:u}}async function $t(e,t={}){const n={};for(const[o,r]of Object.entries(t))S(e,(0,f.stepId)("destination",o),r.config?.state??r.code.config?.state??r.state),r.config?.require?.length?e.pending.destinations[o]=r:n[o]=Pt(r);return n}function Tt(e,t){return e||t?t?e&&(0,f.isObject)(e)&&(0,f.isObject)(t)?{...e,...t}:t:e:{}}var Bt=require("@walkeros/core"),Kt=require("@walkeros/core"),Wt=5e3;async function Lt(e){const t=e.logger;await Ft(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`)),Wt)})])}catch(t){r.error(`destination '${e}' batch flush failed: ${t}`)}finally{n&&clearTimeout(n)}})});await Promise.allSettled(n)}(e.destinations,t),await Ft(e.destinations,"destination",t),await Ft(e.transformers,"transformer",t),await Ft(e.stores,"store",t)}async function Ft(e,t,n){const o=Object.entries(e).map(async([e,o])=>{const r=o.destroy;if(!r)return;const s=o.type||"unknown",i=n.scope(s),a={id:e,config:o.config,env:o.env??{},logger:i};let c;try{await Promise.race([r(a),new Promise((n,o)=>{c=setTimeout(()=>o(new Error(`${t} '${e}' destroy timed out`)),Wt)})])}catch(n){i.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 Ht(e,t,n){let o,r,s=!1;const i=[],a=Pe(e);try{return await async function(){switch(t){case c.Commands.Config:(0,Kt.isObject)(n)&&((0,Bt.assign)(e.config,n,{shallow:!1,merge:!1}),r=n,s=!0);break;case c.Commands.Consent:if((0,Kt.isObject)(n)){const{update:t}=d(e,n);Vt(e,c.Commands.Consent),r=t,s=!0}break;case c.Commands.Custom:(0,Kt.isObject)(n)&&(e.custom=(0,Bt.assign)(e.custom,n),Vt(e,c.Commands.Custom),r=n,s=!0);break;case c.Commands.Destination:(0,Kt.isObject)(n)&&"code"in n&&(0,Kt.isObject)(n.code)&&(o=await Ot(e,n));break;case c.Commands.Globals:(0,Kt.isObject)(n)&&(e.globals=(0,Bt.assign)(e.globals,n),Vt(e,c.Commands.Globals),r=n,s=!0);break;case c.Commands.Hook:if((0,Kt.isObject)(n)&&(0,Bt.isString)(n.name)&&(0,Bt.isFunction)(n.fn)){const{name:t,fn:o}=n;e.hooks[t]=o,r=n,s=!0}break;case c.Commands.On:if((0,Kt.isObject)(n)&&(0,Bt.isString)(n.type)){const{type:t,rules:o}=n;await Ke(e,t,o)}break;case c.Commands.Ready:s=!0;break;case c.Commands.Run:o=await Xt(e,n,i),s=!0;break;case c.Commands.Session:s=!0;break;case c.Commands.Shutdown:e.hasShutdown||(e.hasShutdown=!0,await Lt(e));break;case c.Commands.User:(0,Kt.isObject)(n)&&((0,Bt.assign)(e.user,n,{shallow:!1}),Vt(e,c.Commands.User),r=n,s=!0);break;default:return e.logger.warn("unknown command",{command:t}),Rt({ok:!1})}if(s){const n=await mt(e,t,void 0,r);i.push(...n.deliveries),_t(n.deliveries);const s=Ct(await It(e),await qt(e,i));if(o&&!1===o.ok){const e={...s.failed??{},...o.failed??{}};o={...s,ok:!1,...Object.keys(e).length>0?{failed:e}:{}}}else o=s}return o||Rt({ok:!0})}()}finally{a()}}function zt(e,t){return{timing:Math.round((Date.now()-e.timing)/10)/100,source:{type:"collector",schema:"4"},...t}}function Ut(e,t,n){return Qt(e,t,n,{globals:e.globals,user:e.user,consent:e.consent})}function Gt(e,t,n){return Qt(e,zt(e,t),n,{globals:{},user:{},consent:{}})}function Qt(e,t,n,o){const r=t.name;if("string"!=typeof r)throw new Bt.InvalidEventError(void 0===r?"Event name is required":"Event name is invalid");if(!r)throw new Bt.InvalidEventError("Event name is required");const[s,i]=r.split(" ");if(!s||!i)throw new Bt.InvalidEventError("Event name is invalid");const{timestamp:a=Date.now(),name:c=`${s} ${i}`,data:u={},context:d={},globals:l={},custom:f={},user:p=o.user,nested:g=[],consent:h=o.consent,id:m=(0,Bt.getSpanId)(),trigger:v="",entity:y=s,action:w=i,timing:b=0,source:k={type:"collector",schema:"4"}}=t,S=k??{type:"collector",schema:"4"},E=S.count??(e.count+=1),O=S.trace??n?._meta.trace??e.trace,_={...S,count:E};void 0!==O&&(_.trace=O);const q=e.name??S.platform??"default",C=e.release??"4.7.2-next-1791213015481";_.release={...S.release,[q]:C};return{name:c,data:u,context:d,globals:(0,Bt.assign)(o.globals,l),custom:f,user:p,nested:g,consent:h,id:m,trigger:v,entity:y,action:w,timestamp:a,timing:b,source:_}}function Nt(e,t,n){return Ut(e,zt(e,t),n)}async function Yt(e,t){const n=[];return Ct(await Xt(e,t,n),await qt(e,n))}async function Xt(e,t,n){e.allowed=!0,e.timing=Date.now(),e.trace=(0,Bt.getTraceId)(),e.count=0,t&&(t.consent&&(e.consent=(0,Bt.assign)(e.consent,t.consent),Vt(e,c.Commands.Consent)),t.user&&(e.user=(0,Bt.assign)(e.user,t.user),Vt(e,c.Commands.User)),t.globals&&(e.globals=(0,Bt.assign)(e.config.globalsStatic||{},t.globals),Vt(e,c.Commands.Globals)),t.custom&&(e.custom=(0,Bt.assign)(e.custom,t.custom),Vt(e,c.Commands.Custom))),Object.values(e.destinations).forEach(e=>{e.queuePush=[]}),e.queue=[],e.round++,await ke(e);const o=await pt(e);let r=!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:o}of t){const t=await e.push(n,o);!1===t.ok&&(r=!1),t.failed&&Object.assign(s,t.failed)}}_t(o);const i=await It(e);if(n.push(...o),r)return i;const a={...i.failed??{},...s};return{...i,ok:!1,...Object.keys(a).length>0?{failed:a}:{}}}var Jt="collector.next";async function Zt(e,t,n={}){const o=n.ingest??(0,l.createIngest)(n.id||"unknown"),r=e.config.next;if(void 0===r)return{copies:[{event:t,ingest:o}],respond:n.respond};const s=await de(e,e.transformers||{},r,t,o,n.respond,Jt),i=s.respond??n.respond;return 0===s.copies.length?(e.logger.debug("Event dropped by collector.next"+(s.droppedBy?` (${s.droppedBy})`:"")),v(e,t,o,{reason:"dropped",by:s.droppedBy,at:Jt}),{copies:[],respond:i,dropped:!0}):s.stopped?{copies:[],respond:i}:{copies:s.copies.map(t=>({event:Gt(e,t.event,t.ingest),ingest:t.ingest})),respond:i}}var en=require("@walkeros/core"),tn=require("@walkeros/core"),nn=require("@walkeros/core");function on(e,t){const n=(0,nn.useHooks)(async(n,o={})=>await(0,nn.tryCatchAsync)(async()=>{if(!e.allowed){const t=R(e.config.queueMax),r=P(e.preRunQueue,{event:n,options:o},{max:t});if(r.dropped>0){const n=G(e.status,"collector.preRun","queue",r.dropped);T(e.preRunQueue,e.logger,"collector.preRunQueue overflow; oldest events dropped",{buffer:"queue",cap:t,droppedCount:n})}else e.preRunQueue.length<t&&B(e.preRunQueue);return e.logger.debug("event held until run",{name:n.name,dropped:r.dropped}),Rt({ok:!0})}const r=Date.now(),{id:s,ingest:i,respond:a,mapping:c,preChain:u,include:d,exclude:l}=o;let f=a,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;let h=i??(0,nn.createIngest)(s||"unknown");if(c){const t=await(0,nn.processEventMapping)(p,c,e);if(t.ignore)return Rt({ok:!0});if(c.consent){const n=t.event.consent;if(!(0,nn.getGrantedConsent)(c.consent,e.consent,n)){const o=s?`source.${s}`:"collector.push";return e.logger.debug("Event dropped by source consent",{at:o,required:c.consent}),v(e,t.event,h,{reason:"consent",at:o,required:c.consent,consent:{...e.consent,...n}}),Rt({ok:!0,dropped:!0})}}p=t.event}if(void 0!==u){const n=s?`source.${s}.next`:void 0,o=await de(e,e.transformers||{},u,p,h,f,n);if(0===o.copies.length)return e.logger.debug("Event dropped by transformer chain"+(o.droppedBy?` (${o.droppedBy})`:"")),v(e,p,h,{reason:"dropped",by:o.droppedBy,at:n??"collector.push.preChain"}),Rt({ok:!0,dropped:!0});if(o.stopped)return o.respond&&(f=o.respond),Rt({ok:!0});if(o.respond&&(f=o.respond),o.copies.length>1){const n=await Promise.all(o.copies.map(async n=>{const o=Ut(e,t(n.event),n.ingest);return It(e,o,{id:s,ingest:n.ingest,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+=o.copies.length,t.lastAt=Date.now(),t.duration+=Date.now()-r}return n[0]??Rt({ok:!0})}p=o.copies[0].event,h=o.copies[0].ingest}const m=Nt(e,p,h),y=await It(e,m,{id:s,ingest:h,respond:f},g);if(s){e.status.sources[s]||(e.status.sources[s]={count:0,duration:0});const t=e.status.sources[s];t.count++,t.lastAt=Date.now(),t.duration+=Date.now()-r}return y},t=>{if(t instanceof nn.FatalError)throw t;if(t instanceof nn.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}),Rt({ok:!1,invalid:!0,error:t.message})}return e.status.failed++,e.logger.error("push failed",{...Q(t),event:n.name}),Rt({ok:!1})})(),"Push",e.hooks,e.logger);return async(t,o)=>{const r="string"==typeof t.id&&""!==t.id?t:{...t,id:(0,nn.getSpanId)()},s="string"==typeof r.id?r.id:"",i=g(r,o?.ingest,e),a=Date.now(),c=h(e,"collector.push","collector","in",s,a,i);c.inEvent=r,(0,nn.emitStep)(e,c);try{const t=await n(r,o),c=Date.now(),u=h(e,"collector.push","collector","out",s,c,i);return u.durationMs=c-a,u.outEvent=t,(0,nn.emitStep)(e,u),t}catch(t){const n=Date.now(),o=h(e,"collector.push","collector","error",s,n,i);throw o.durationMs=n-a,o.error=m(t),(0,nn.emitStep)(e,o),t}}}var rn=require("@walkeros/core");var sn=require("@walkeros/core"),an=1e4,cn=6e4,un=.8;function dn(e={}){const t=e.maxEntries??an,n=e.lowWaterMark??un,o=e.sweepIntervalMs??cn,r=Math.floor(t*n),s=new Map,i={hits:0,misses:0,populates:0,writes:0,deletes:0,evictions_entries:0,evictions_ttl:0};let a;o>0&&(a=setInterval(function(){const e=Date.now();let t=0;for(const[n,o]of s)void 0!==o.expires&&o.expires<=e&&(s.delete(n),t++);i.evictions_ttl+=t},o),a&&"function"==typeof a.unref&&a.unref());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),i.evictions_ttl++,void i.misses++):(s.delete(e),s.set(e,t),i.hits++,t.value);i.misses++},set(e,n,o){const a=!s.has(e);a||s.delete(e),s.set(e,{value:n,expires:void 0!==o?Date.now()+o:void 0}),i.writes++,a&&i.populates++,s.size>t&&function(){if(s.size<=t)return;const e=s.size-r;let n=0;for(const t of s.keys()){if(n>=e)break;s.delete(t),n++}i.evictions_entries+=n}()},delete(e){s.delete(e)&&i.deletes++},get counters(){return{...i}},destroy(){void 0!==a&&(clearInterval(a),a=void 0),s.clear()}}}var ln=require("@walkeros/core");function fn(e,t){const{cacheConfig:n,cacheStore:o,namespace:r,logger:s,storeId:i,collector:a}=t,c=(e,t)=>{if(!a)return;const n=h(a,`store.${i}`,"store","in","");n.meta={op:"cache",cached:"hit"===t,status:t,key:e},(0,ln.emitStep)(a,n)},u={hits:0,misses:0,populates:0,writes:0,deletes:0,inflight_dedups:0},d=n.rules.map(e=>({match:e.match?(0,ln.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,ln.readCacheEnvelope)(r);if(void 0!==s){if(!("expired"in s))return u.hits++,c(t,"hit"),s.value;try{await o.delete(n)}catch(e){g("delete",t,e)}}const i=p.get(n);if(i)return u.inflight_dedups++,c(t,"hit"),i;u.misses++,c(t,"miss");const a=(async()=>{try{const r=await e.get(t);if(void 0===r)return;const s=f(t,r);if(s)try{const e=1e3*s.ttl;await o.set(n,(0,ln.wrapCacheEnvelope)(r,e),e),u.populates++}catch(e){g("set",t,e)}return r}finally{p.delete(n)}})();return p.set(n,a),a},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,ln.wrapCacheEnvelope)(n,e),e)}catch(e){g("set",t,e)}},async delete(t){u.deletes++,await e.delete(t);try{await o.delete(l(t))}catch(e){g("delete",t,e)}}};function g(e,t,n){const o=`store-cache(${i}): cache ${e} failed for "${t}"; backing succeeded, continuing`;s?s.warn(o,Q(n)):console.warn(o,n)}}function pn(e,t,n){const o=`store.${n}`,r=(0,sn.useHooks)(t.get,"StoreGet",e.hooks,e.logger),s=(0,sn.useHooks)(t.set,"StoreSet",e.hooks,e.logger),i=(0,sn.useHooks)(t.delete,"StoreDelete",e.hooks,e.logger);t.get=async t=>{const n=Date.now(),s=h(e,o,"store","in","",n);s.meta={op:"get",key:t},(0,sn.emitStep)(e,s);try{const s=await r(t),i=Date.now(),a=h(e,o,"store","out","",i);return a.durationMs=i-n,a.meta={op:"get",key:t},(0,sn.emitStep)(e,a),s}catch(r){const s=Date.now(),i=h(e,o,"store","error","",s);throw i.durationMs=s-n,i.meta={op:"get",key:t},i.error=m(r),(0,sn.emitStep)(e,i),r}},t.set=async(t,n,r)=>{const i=Date.now(),a=h(e,o,"store","in","",i);a.meta={op:"set",key:t},(0,sn.emitStep)(e,a);try{await s(t,n,r);const a=Date.now(),c=h(e,o,"store","out","",a);c.durationMs=a-i,c.meta={op:"set",key:t},(0,sn.emitStep)(e,c)}catch(n){const r=Date.now(),s=h(e,o,"store","error","",r);throw s.durationMs=r-i,s.meta={op:"set",key:t},s.error=m(n),(0,sn.emitStep)(e,s),n}},t.delete=async t=>{const n=Date.now(),r=h(e,o,"store","in","",n);r.meta={op:"delete",key:t},(0,sn.emitStep)(e,r);try{await i(t);const r=Date.now(),s=h(e,o,"store","out","",r);s.durationMs=r-n,s.meta={op:"delete",key:t},(0,sn.emitStep)(e,s)}catch(r){const s=Date.now(),i=h(e,o,"store","error","",s);throw i.durationMs=s-n,i.meta={op:"delete",key:t},i.error=m(r),(0,sn.emitStep)(e,i),r}}}async function gn(e,t={}){const n={};for(const[o,r]of Object.entries(t)){const{code:t,config:s={},env:i={}}=r,a=e.logger.scope("store").scope(o),c={collector:e,logger:a,id:o,config:s,env:i,reportError:N(e,"store",o,a)},u=await t(c);n[o]=u}const o=t,r=function(e){const t={};for(const n of Object.keys(e))t[n]="WHITE";const n=[],o=[];function r(s){const i=t[s];if("BLACK"===i)return;if("GRAY"===i){const e=o.indexOf(s),t=o.slice(-1===e?0:e).concat(s).join(" -> ");throw new Error(`Cycle in cache.store chain: ${t}`)}t[s]="GRAY",o.push(s);const a=e[s].cache?.store;if(void 0!==a){if(!(a in e))throw new Error(`Store "${s}" cache.store references "${a}", which is not declared in flow.stores`);r(a)}o.pop(),t[s]="BLACK",n.push(s)}for(const n of Object.keys(e))"WHITE"===t[n]&&r(n);return n}(o);for(const t of r){const r=o[t].cache;if(!r)continue;let s,i;void 0!==r.store?(s=n[r.store],i=r.store):(n.__cache||(n.__cache=dn()),s=n.__cache,i="__cache");const a=r.namespace??t;e.logger.scope("store-cache").scope(t).info(`store "${t}" caches with namespace "${a}:" via ${i}`),n[t]=fn(n[t],{storeId:t,cacheConfig:r,cacheStore:s,namespace:a,logger:e.logger.scope("store-cache").scope(t),collector:e})}for(const[t,o]of Object.entries(n))"__cache"!==t&&pn(e,o,t);return n}async function hn(e){const t=(0,tn.assign)({globalsStatic:{},sessionStatic:{},run:!0,queueMax:1e3},e,{merge:!1,extend:!1}),n={level:e.logger?.level,handler:e.logger?.handler},o=(0,tn.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),void 0!==e.next&&(t.next=e.next),s.push=on(s,e=>zt(s,e)),s.command=function(e,t){return(0,rn.useHooks)(async(n,o,r)=>await(0,rn.tryCatchAsync)(async()=>await t(e,n,o,r),t=>{if(t instanceof rn.FatalError)throw t;return e.status.failed++,e.logger.error("command failed",{...Q(t),command:n}),Rt({ok:!1})})(),"Command",e.hooks,e.logger)}(s,Ht),s.elb=function(e){return async(t,n,o,r,s)=>{if("string"==typeof t&&t.startsWith("walker ")){const o=t.replace("walker ","");return e.command(o,n)}let i;if("string"==typeof t)i={name:t},n&&"object"==typeof n&&!Array.isArray(n)&&(i.data=n);else{if(!t||"object"!=typeof t||Array.isArray(t))return Rt({ok:!1});i={...t},n&&"object"==typeof n&&!Array.isArray(n)&&(i.data={...i.data||{},...n})}return o&&"object"==typeof o&&(i.context=o),r&&Array.isArray(r)&&(i.nested=r),s&&"object"==typeof s&&(i.custom=s),e.push(i)}}(s);const i=e.stores||{};return"undefined"==typeof __WALKEROS_STORES__||__WALKEROS_STORES__?(s.stores=await gn(s,i),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)}}}(i,s.stores,e)):Object.keys(i).length>0&&o.warn("stores: not in this build, config ignored"),s.stores.__cache||(s.stores.__cache=dn()),s.destinations=await $t(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;if("undefined"==typeof __WALKEROS_VALIDATE__||__WALKEROS_VALIDATE__){const t=(0,X.validateStepEntry)(r,"Transformer");if(!t.ok){e.logger.warn(`Transformer ${o} invalid (${t.code}): ${t.reason}. Skipping.`);continue}}const{config:i}=J(r,"before"),{config:a}=J({...r,config:i},"next"),c=Object.keys(s).length>0?{...a,env:s}:a,{cache:u}=r,d=u?{...c,cache:u}:c,l=r.config?.state??r.state;S(e,(0,X.stepId)("transformer",o),l);const f=void 0!==l&&void 0===d.state?{...d,state:l}:d,p=e.logger.scope("transformer").scope(o),g={collector:e,logger:p,id:o,ingest:(0,X.createIngest)(o),config:f,env:s,reportError:N(e,"transformer",o,p)},h=(0,X.getTransformerMapping)(r);for(const t of(0,X.getTransformerMappingWarnings)(r))e.logger.warn(`Transformer ${o}: ${t}`);const m=t??(e=>h?{type:"pass",config:e.config,push:async t=>{const n=await(0,X.processEventMapping)(t,h,e.collector);return!n.ignore&&{event:n.event}}}:{type:"pass",config:e.config,push:e=>({event:e})}),v=await m(g);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!==l&&void 0===v.config?.state&&(v.config={...v.config??{},state:l}),n[o]=v}return n}(s,e.transformers||{}),s}var mn=globalThis;function vn(e){try{const t=mn.window;if(!t)return;t.localStorage.getItem(en.OBSERVE_STORAGE_KEY)===e&&t.localStorage.removeItem(en.OBSERVE_STORAGE_KEY)}catch{}}function yn(e,t){return void 0===t?e:n=>e({...n,release:t})}function wn(e,t){const n=t.observe;if(!n)return;const o=e.name??"default";if("binding"in n){const t=function(){const e=mn.window,t=mn.URLSearchParams;if(!e||!t)return null;try{const n=new t(e.location.search.replace(/^\?/,"")).getAll(en.OBSERVE_STORAGE_KEY);return n.length>0?n[n.length-1]??null:null}catch{return null}}(),r=t??function(){try{return mn.window?.localStorage.getItem(en.OBSERVE_STORAGE_KEY)??null}catch{return null}}();if(!r)return;const s=(0,en.parseObserveCredential)(r);if(!s)return void(null===t?(e.logger.warn("observe: malformed stored credential cleared"),vn(r)):e.logger.warn("observe: malformed credential ignored"));if(s.pb!==n.binding)return void e.logger.warn("observe: credential binding mismatch, credential ignored");let i;!function(e){try{mn.window?.localStorage.setItem(en.OBSERVE_STORAGE_KEY,e)}catch{}}(r),null!==t&&function(){const e=mn.window,t=mn.URLSearchParams;if(e&&t)try{const n=e.location.href,o=n.indexOf("#"),r=o>=0?n.slice(o):"",s=o>=0?n.slice(0,o):n,i=s.indexOf("?"),a=i>=0?s.slice(0,i):s,c=new t(i>=0?s.slice(i+1):"");c.delete(en.OBSERVE_STORAGE_KEY);const u=c.toString();e.history.replaceState({},"",`${a}${u?`?${u}`:""}${r}`)}catch{}}();const a=(0,en.createBatchedPoster)({url:`${n.url}/ingest/${s.ses}`,token:s.secret,headers:{"X-Walkeros-Binding":n.binding},onStatus:t=>{401===t&&(vn(r),i&&e.observers.delete(i))}});i=(0,en.createTelemetryObserver)(function(e,t){return void 0===t?e:n=>e({...n,flowId:t})}(yn(a,e.release),n.flowId),{flowId:n.flowId??o,...void 0!==n.level?{level:n.level}:{},...void 0!==n.sample?{sample:n.sample}:{}}),e.observers.add(i);const c=n.level;return void(void 0!==c&&(e.observeLevel=()=>c))}if("off"===n.level)return;const r=n.level;void 0!==r&&(e.observeLevel=()=>r),e.observers.add((0,en.createTelemetryObserver)(yn((0,en.createBatchedPoster)({url:`${n.url}/ingest/${n.sessionId}`,token:n.token}),e.release),{flowId:o,level:n.level,sample:n.sample}))}async function bn(e){const t=e??{},n=await hn(t);if(t.observers)for(const e of t.observers)n.observers.add(e);"undefined"==typeof __WALKEROS_OBSERVE__||__WALKEROS_OBSERVE__?wn(n,t):t.observe&&n.logger.warn("observe: not in this build, config ignored"),await be(n,t.sources||{});const{consent:o,user:r,globals:s,custom:i}=t;o&&await n.command("consent",o),r&&await n.command("user",r),s&&await n.command("globals",s),i&&await n.command("custom",i),n.config.run&&await n.command("run");let a=n.elb;const c=Object.values(n.sources),u=c.find(e=>e.config.primary);return u?a=u.push:c.length>0&&(a=c[0].push),{collector:n,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:()=>i,Commands:()=>a,Const:()=>c,DEFAULT_BREAKER_COOLDOWN_MS:()=>W,DEFAULT_BREAKER_THRESHOLD:()=>K,DEFAULT_DLQ_MAX:()=>z,addDestination:()=>Ot,buildReportError:()=>N,bumpDropped:()=>G,callDestinationOn:()=>We,commonHandleCommand:()=>Ht,completeEvent:()=>Gt,createEvent:()=>Ut,createPush:()=>on,createPushResult:()=>Rt,destinationInit:()=>Dt,destinationPush:()=>Mt,enrichEvent:()=>Nt,ensureDestStatus:()=>U,enterCascade:()=>Pe,errorMeta:()=>Q,fireCallbacks:()=>ot,flushSourceQueueOn:()=>ve,getCacheStore:()=>w,initDestinations:()=>$t,initSource:()=>we,initSources:()=>be,isBreakerProbePermitted:()=>H,isRequireSatisfied:()=>Ae,isSourceStarted:()=>ye,isStateDelivery:()=>Ie,isStatePresent:()=>je,mergeEnvironments:()=>Tt,on:()=>Ke,onApply:()=>gt,prepareEvent:()=>zt,processConsent:()=>d,pushToDestinations:()=>It,redeliverStateAtRun:()=>ft,registerDestination:()=>Pt,resolveBreakerConfig:()=>F,runCollector:()=>Yt,runCollectorNext:()=>Zt,runTransformerBefore:()=>le,runTransformerChain:()=>de,setMark:()=>De,shouldDeliver:()=>Me,startFlow:()=>bn,transformerInit:()=>Z,transformerPush:()=>ee,wrapEnv:()=>q}),module.exports=(e=s,((e,s,i,a)=>{if(s&&"object"==typeof s||"function"==typeof s)for(let c of o(s))r.call(e,c)||c===i||t(e,c,{get:()=>s[c],enumerable:!(a=n(s,c))||a.enumerable});return e})(t({},"__esModule",{value:!0}),e));var i={},a={Action:"action",Actions:"actions",Config:"config",Consent:"consent",Context:"context",Custom:"custom",Destination:"destination",Elb:"elb",Globals:"globals",Hook:"hook",Init:"init",Link:"link",On:"on",Prefix:"data-elb",Ready:"ready",Run:"run",Scoped:"_",Session:"session",Shutdown:"shutdown",User:"user",Walker:"walker"},c={Commands:a,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");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 h(e,t,n,o,r,s=Date.now(),i){const a={flowId:e.name??"default",stepId:t,stepType:n,phase:o,eventId:r,timestamp:new Date(s).toISOString(),elapsedMs:s-e.status.startedAt};return i?.traceId&&(a.traceId=i.traceId),i?.sourceId&&(a.sourceId=i.sourceId),i?.parentEventId&&(a.parentEventId=i.parentEventId),a}function m(e){return e instanceof Error?{name:e.name,message:e.message}:{message:String(e)}}function v(e,t,n,o){e.status.in++;const r=h(e,"collector.push","collector","skip","string"==typeof t.id?t.id:"",Date.now(),g(t,n,e));r.skipReason=o.reason,"consent"===o.reason?(r.consent={...o.consent},r.meta={at:o.at,required:{...o.required}}):r.meta={by:o.by??"route",at:o.at},(0,p.emitStep)(e,r)}var y=require("@walkeros/core");function w(e,t){return e.storeId&&t.stores[e.storeId]?t.stores[e.storeId]:t.stores.__cache}function b(e){return("undefined"==typeof __WALKEROS_STATE__||__WALKEROS_STATE__)&&e?(0,y.compileState)(e):void 0}function k(e,t,n,o){return"undefined"==typeof __WALKEROS_STATE__||__WALKEROS_STATE__?(0,y.applyState)(t,t=>function(e,t){return e?t.stores[e]:t.stores.__cache}(t,e),n,e,o):Promise.resolve(n)}function S(e,t,n){"undefined"==typeof __WALKEROS_STATE__||__WALKEROS_STATE__||void 0===n||e.logger.warn(`state: not in this build, ${t} state ignored`)}var E=require("@walkeros/core"),O=8;function _(e,t,n){if(null===e||"object"!=typeof e)return e;if(n>=O||!function(e){if(Array.isArray(e))return!0;const t=Object.getPrototypeOf(e);return t===Object.prototype||null===t}(e))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(_(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:_(s,t,n+1);return r}function q(e){const{simulation:t,...n}=e,o={},r=new WeakMap;for(const[e,t]of Object.entries(n))o[e]="function"==typeof t?t:_(t,r,1);const s=(0,E.observeEnv)(o,t);return{wrappedEnv:s.env,calls:s.calls,unresolved:s.unresolved}}var C=6;function I(e,t){try{return e[t]}catch{return"[unreadable]"}}function j(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>=C)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 A(e,t){("undefined"==typeof __WALKEROS_OBSERVE__||__WALKEROS_OBSERVE__)&&t&&t.length>0&&(e.calls=function(e){return e.map(e=>({fn:e.fn,args:j(e.args),ts:e.ts}))}(t))}var x=require("@walkeros/core"),D=require("@walkeros/core"),M=require("@walkeros/core");function R(e){if(void 0===e)throw new Error("Collector.Config.queueMax is undefined; defaults must be seeded by collector()");return e}function P(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 $=new WeakMap;function T(e,t,n,o){$.get(e)||($.set(e,!0),t.warn(n,o))}function B(e){$.delete(e)}var K=5,W=3e4,L=()=>Date.now();function F(e){if(void 0!==e)return"number"==typeof e?{threshold:e,cooldown:W}:{threshold:e.threshold??K,cooldown:e.cooldown??W}}function V(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=L()+r)):void(s.consecutiveFailures>=o&&(s.state="open",s.probing=!1,s.openUntil=L()+r)))}function H(e,t){return!e||("closed"===e.state||"half-open"===e.state||void 0!==e.openUntil&&t>=e.openUntil)}var z=100;function U(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 G(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 Q(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 N(e,t,n,o,r){const s=(0,M.stepId)(t,n);return(t,i)=>{try{if(i)return r?function(e,t,n,o,r,s){const i=t.dlq=t.dlq||[],a={max:t.config.dlqMax??z},c=P(i,[o,r],a);if(c.dropped>0){const t=G(e.status,(0,M.stepId)("destination",n),"dlq",c.dropped);T(i,s,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:n,cap:a.max,droppedCount:t})}else i.length<a.max&&B(i);const u=U(e,n);u.failed++,u.dlqSize=i.length,e.status.failed++;const d=F(t.config.breaker);if(d){const o=t.config.id||n;V(e.status.breakers,(0,M.stepId)("destination",o),"transport-failure",d.threshold,d.cooldown)}}(e,r,n,i,t,o):e.status.failed++,void o.error("report error",{...Q(t),event:i.name});e.status.connectionErrors[s]=(e.status.connectionErrors[s]??0)+1,o.error("connection error",Q(t))}catch{}}}var Y=require("@walkeros/core"),X=require("@walkeros/core");function J(e,t){const n=e.config||{},o=e[t];return void 0!==o?{config:{...n,[t]:o},chainValue:o}:{config:n,chainValue:void 0}}async function Z(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,X.createIngest)(n),config:t.config,env:fe(t.config.env),reportError:N(e,"transformer",n,r)};r.debug("init");const i=await(0,X.useHooks)(t.init,"TransformerInit",e.hooks,e.logger)(s);if(!1===i)return!1;t.config={...i||t.config,env:i?.env||t.config.env,init:!0},r.debug("init done")}return!0}async function ee(e,t,n,o,r,s){const i=t.type||"unknown",a=e.logger.scope(`transformer:${i}`),c={collector:e,logger:a,id:n,ingest:r,config:t.config,env:{...fe(t.config.env),...s?{respond:s}:{}},reportError:N(e,"transformer",n,a)};a.debug("push",{event:o.name});const u="string"==typeof o.id?o.id:"",d=g(o,r,e),l=Date.now(),f=h(e,(0,X.stepId)("transformer",n),"transformer","in",u,l,d);f.inEvent=o,(0,X.emitStep)(e,f);try{const r=await(0,X.useHooks)(t.push,"TransformerPush",e.hooks,e.logger)(o,c),s=Date.now(),i=h(e,(0,X.stepId)("transformer",n),"transformer","out",u,s,d);return i.durationMs=s-l,i.outEvent=r,(0,X.emitStep)(e,i),a.debug("push done"),r}catch(t){const o=Date.now(),r=h(e,(0,X.stepId)("transformer",n),"transformer","error",u,o,d);throw r.durationMs=o-l,r.error=m(t),(0,X.emitStep)(e,r),t}}var te=256;function ne(e){return"string"==typeof e.id?e.id:""}function oe(e,t){const n=ne(e);return""!==n&&""===ne(t)?{...t,id:n}:t}function re(e,t,n,o){const r=function(e){return{...e,_meta:{...e._meta,path:[...e._meta.path]}}}(n),s=(0,X.clone)(t),i=ne(e);if(""===i)return{event:s,ingest:r};r._meta.parentEventId=i;const a=ne(s);return""!==a&&a!==i||(s.id=(0,X.deriveSpanId)(i,o)),{event:s,ingest:r}}function se(e,t){return{copies:e,respond:t}}function ie(e,t){if(void 0===t)return e.rest;const n=e.ownNext?e.rest.slice(1):e.rest;return[{route:t,ancestry:e.ancestry},...n]}async function ae(e,t,n){const o=await Promise.all(t.map((t,n)=>(0,X.tryCatchAsync)(ce,t=>(e.collector.logger.scope("transformer:fork").error(`fork ${n} failed`,Q(t)),{copies:[]}))(e,t))),r=[];let s,i=n,a=o.length>0;return o.forEach((e,n)=>{void 0!==t[n].respond&&e.respond&&(i=e.respond),e.stopped||(a=!1),e.stopped||0===e.copies.length?void 0===s&&(s=e.droppedBy):r.push(...e.copies)}),0===r.length?{copies:r,respond:i,...a?{stopped:!0}:{},...void 0!==s?{droppedBy:s}:{}}:se(r,i)}async function ce(e,t){const{ingest:n}=t;let{stack:o,event:r,respond:s}=t,i=t.resume;for(;;){let t,a;if(i)t=i.member,a=i,i=void 0;else{const i=(0,X.advanceChain)(o,(0,X.createMappingRoot)(n,r),e.transformers);if("done"===i.kind)return se([{event:r,ingest:n}],s);if("stop"===i.kind)return{copies:[],respond:s,stopped:!0,...void 0!==i.owner?{droppedBy:i.owner}:{}};if("fork"===i.kind){const t=r;return ae(e,i.branches.map((e,o)=>({stack:e,...re(t,t,n,o),respond:void 0})),s)}const a=e.transformers[i.id];t={id:i.id,ancestry:i.ancestry,rest:i.rest,ownNext:!!a&&void 0!==a.config.next}}const c=await ue(e,t,r,n,s,a);if("halt"===c.kind)return c.result;if("fork"===c.kind)return ae(e,c.copies,s);r=c.event,s=c.respond,o=c.stack}}async function ue(e,t,n,o,r,s){const{collector:i,transformers:a,chainContext:c}=e,u=t.id,d=a[u];let l=n,f=r;const p=(e=t.rest)=>({kind:"continue",event:oe(n,l),respond:f,stack:e}),g=e=>({kind:"halt",result:e});if(!d)return i.logger.warn(`Transformer not found: ${u}`),p();const h=d.config?.cache,m=h?(0,X.compileCache)(h):void 0,v=m?w(m,i):void 0;let y=s?.cacheMiss;if(!s){if(o._meta.path.length>te)return i.logger.error(`Max path length exceeded at ${u}`),g({copies:[],respond:f});o._meta.hops++,o._meta.path.push(u);if(!await(0,X.tryCatchAsync)(Z,e=>{if(e instanceof X.FatalError)throw e;return i.status.failed++,i.logger.scope(`transformer:${d.type||"unknown"}`).error("transformer init failed",{transformer:u,...Q(e)}),!1})(i,d,u))return g({copies:[],respond:f});if(c&&void 0!==d.config?.chainMocks?.[c]){const e=d.config.chainMocks[c];return i.logger.scope(`transformer:${d.type||"unknown"}`).debug("chainMock",{chain:c}),l=e,p()}if(void 0!==d.config?.mock)return i.logger.scope(`transformer:${d.type||"unknown"}`).debug("mock"),l=d.config.mock,p();if(d.config?.disabled)return p();if(m&&v){const e=await(0,X.checkCache)(m,v,(0,X.createMappingRoot)(o,l));if("HIT"===e?.status&&e.value){if(l=e.value,m.stop){return g({copies:[{event:oe(n,l),ingest:o}],respond:f,stopped:!0})}return p()}"MISS"===e?.status&&(y={key:e.key,ttl:e.rule.ttl})}if(void 0!==d.config.before){const e=await le(i,a,u,l,o,f,c),n=e.respond??f;if(0===e.copies.length||e.stopped)return g({...e,respond:n});f=n;const[r]=e.copies;if(e.copies.length>1||r.ingest!==o){const n={member:t,cacheMiss:y};return{kind:"fork",copies:e.copies.map(e=>({stack:t.rest,event:e.event,ingest:e.ingest,respond:void 0,resume:n}))}}l=r.event}}const S=b(d.config?.state),E=S?.filter(e=>"get"===e.mode),O=S?.filter(e=>"set"===e.mode),_=async e=>O&&0!==O.length?k(i,O,e,o):e;E&&E.length>0&&(l=await k(i,E,l,o));const q=await(0,X.tryCatchAsync)(ee,e=>(i.status.failed++,i.logger.scope(`transformer:${d.type||"unknown"}`).error("Push failed",Q(e)),!1))(i,d,u,l,o,f);if(!1===q)return g({copies:[],respond:f,droppedBy:u});if(Array.isArray(q)&&1!==q.length){if(0===q.length)return g({copies:[],respond:f});const e=l,n=[];for(let r=0;r<q.length;r++){const s=q[r],i=await _(s.event||e);n.push({stack:ie(t,s.next),...re(e,i,o,r),respond:f})}return{kind:"fork",copies:n}}const C=Array.isArray(q)?q[0]:q;let I;return C&&"object"==typeof C&&(C.respond&&(f=C.respond),C.event&&(l=C.event),I=C.next),l=await _(l),y&&v&&(0,X.storeCache)(v,y.key,l,y.ttl),p(ie(t,I))}async function de(e,t,n,o,r,s,i){const a=r??(0,X.createIngest)("string"==typeof n?n:"chain");return void 0===n?se([{event:o,ingest:a}],s):(i&&(a._meta.chainPath=i),ce({collector:e,transformers:t,chainContext:i},{stack:(0,X.isChainContinuation)(n)?n:(0,X.startChain)(n),event:o,ingest:a,respond:s}))}async function le(e,t,n,o,r,s,i){const a=t[n],c=a?a.config.before:void 0,u=await de(e,t,c,o,r,s,i);return u.stopped&&0===u.copies.length&&!u.droppedBy?{...u,droppedBy:n}:u}function fe(e){return e&&(0,X.isObject)(e)?e:{}}var pe=1e4;function ge(e){return"number"==typeof e&&e>0?e:pe}var he=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 he(n)),t)});return Promise.race([e,r]).finally(()=>{o&&clearTimeout(o)})}async function ve(e,t,n){if(!t.on||!t.queueOn?.length)return;const o=t.queueOn;t.queueOn=[];const r=n||t.config?.id||"unknown";for(const{type:n,data:s}of o){if(Ie(n)&&!Me(e,t,n))continue;const o=t.on;let i=!1;await(0,Y.tryCatchAsync)(()=>me(Promise.resolve(o(n,s)),pe,`Source "${r}" on(${n}) did not settle within ${pe}ms`),t=>{if(t instanceof Y.FatalError)throw t;t instanceof he?i=!0:e.status.failed++,e.logger.scope("source").error("source on flush failed",{sourceId:r,type:n,...Q(t)})})(),Ie(n)&&!i&&De(e,t,n)}}function ye(e){return Boolean(e.config.init)&&!e.config.require?.length}async function we(e,t,n){const{code:o,config:r={},env:s={},primary:i,next:a,before:c,cache:u,terminus:d}=n,l=r.state??n.state,f=b(l);S(e,(0,Y.stepId)("source",t),l);const p=u,g=p?(0,Y.compileCache)({...p,stop:p.stop??!0}):void 0,h=d??e.push,m=Boolean(d),y=async(n,o,s)=>{if(m)return h(n);let i;const u="string"==typeof n.id&&""!==n.id?n:{...n,id:(0,Y.getSpanId)()};let d=[{event:u,ingest:s.ingest}];if(void 0!==c){const n=`source.${t}.before`,o=await de(e,e.transformers||{},c,u,s.ingest,s.respond,n);if(0===o.copies.length)return v(e,u,s.ingest,{reason:"dropped",by:o.droppedBy,at:n}),Rt({ok:!0,dropped:!0});if(o.stopped)return o.respond&&(s.respond=o.respond),{ok:!0};o.respond&&(s.respond=o.respond),d=o.copies}if(g){const t=w(g,e);if(t){const n=(0,Y.createMappingRoot)(s.ingest),o=await(0,Y.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,Y.applyUpdate)(t,o.rule.update,{...n,cache:{status:"HIT"}},e)),s.respond?.(t),{ok:!0}}if("MISS"===o.status&&g.stop&&s.respond){const r=s.respond,a=o.rule.update,c={...n,cache:{status:"MISS"}},u=o.key,d=o.rule.ttl,l=n=>{(0,Y.storeCache)(t,u,n,d),a?i=(async()=>{const t=await(0,Y.applyUpdate)(n,a,c,e);r(t)})():r(n)};s.respond=l}"MISS"!==o.status||g.stop||(0,Y.storeCache)(t,o.key,!0,o.rule.ttl)}}}f&&f.length>0&&(d=await Promise.all(d.map(async t=>({event:await k(e,f,t.event,t.ingest),ingest:t.ingest}))));let l={ok:!0};for(const e of d)l=await h(e.event,{...o,id:t,ingest:e.ingest,respond:s.respond,mapping:r,preChain:a});return i&&await i,l},E=async n=>{const o=(0,Y.createIngest)(t),s=(0,Y.parseTraceparent)((0,Y.isScope)(n)?n?.headers?.traceparent:void 0);if(s&&(o._meta.trace=s.trace,o._meta.parentEventId=s.parentSpan),!r.ingest||void 0===n)return o;const i=await(0,Y.getMappingValue)(n,r.ingest,{collector:e});return{...o,...i,_meta:o._meta}},O=e.logger.scope("source").scope(t),_={...s,push:async(e,n={})=>{const o={ingest:(0,Y.createIngest)(t),respond:void 0};return y(e,n,o)},command:e.command,sources:e.sources,elb:e.elb,logger:O},q={collector:e,logger:O,id:t,config:r,env:_,withScope:async(e,t,n)=>{const o={ingest:await E(e),respond:t};return n({..._,push:(e,t={})=>y(e,t,o),ingest:o.ingest,respond:o.respond})},reportError:N(e,"source",t,O)},C=await(0,Y.tryCatchAsync)(o,n=>{if(n instanceof Y.FatalError)throw n;e.status.failed++,e.logger.scope("source").error("source factory failed",{sourceId:t,...Q(n)})})(q);if(!C)return;const I=C.type||"unknown",j=e.logger.scope(I).scope(t);return _.logger=j,i&&(C.config={...C.config,primary:i}),C}async function be(e,t={}){const n={};for(const[o,r]of Object.entries(t)){const t=await we(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,Y.tryCatchAsync)(n.init.bind(n),n=>{if(n instanceof Y.FatalError)throw n;o=!0,e.status.failed++,e.logger.scope("source").error("source init failed",{sourceId:t,...Q(n)})})(),o||(n.config.init=!0,ye(n)&&await ve(e,n,t))}return await ke(e),n}async function ke(e){for(const[t,n]of Object.entries(e.sources)){if(ye(n))continue;const o=n.config.require;if(!o?.length)continue;const r=o.filter(t=>!Ae(e,t));r.length!==o.length&&(n.config.require=r,ye(n)&&await ve(e,n,t))}for(const[t,n]of Object.entries(e.pending.destinations)){if(!e.pending.destinations[t]||e.destinations[t])continue;const o=n.config?.require;if(!o)continue;const r=o.filter(t=>!Ae(e,t));if(n.config&&(n.config.require=r),r.length>0)continue;delete e.pending.destinations[t];const s=Pt(n);!1!==s.config.queue&&(s.queuePush=[...e.queue]),e.destinations[t]=s,await dt(e,s,t)}}function Se(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 Ee=!1;function Oe(){Ee||(Ee=!0,"undefined"!=typeof console&&"function"==typeof console.warn&&console.warn("walkerOS: ignored an on-dispatch call with a non-collector argument"))}function _e(e,t,n,o){if(n instanceof x.FatalError)throw n;e.logger.scope("on").error("on callback failed",{kind:t,...o,...Q(n)})}var qe=["consent","user","globals","custom"];function Ce(e){return qe.includes(e)}function Ie(e){return Ce(e)}function je(e,t){return Ce(t)&&Object.keys(e[t]).length>0}function Ae(e,t){if(Ce(t))return je(e,t);switch(t){case c.Commands.Run:case c.Commands.Ready:return!0===e.allowed;default:return e.seenEvents.has(String(t))}}function xe(e,t){return e.cellVersion?.[String(t)]??0}function De(e,t,n){nt(e,t,n,xe(e,n))}function Me(e,t,n){return e.allowed&&xe(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 Re=8;function Pe(e){const t=e.cascade;if(t&&!$e.has(t))return()=>{};const n=t||{counts:new WeakMap};e.cascade=n,$e.set(n,($e.get(n)||0)+1);let o=!1;return()=>{if(o)return;o=!0;const t=($e.get(n)||1)-1;t>0?$e.set(n,t):($e.delete(n),e.cascade===n&&(e.cascade=void 0))}}var $e=new WeakMap;function Te(e,t,n){const o=e.cascade;if(!o)return!0;let r=o.counts.get(t);r||(r={},o.counts.set(t,r));const s=String(n),i=(r[s]||0)+1;return r[s]=i,i<=Re||(i===Re+1&&e.logger.error("state delivery did not converge",{type:s}),!1)}function Be(e,t){return{collector:e,logger:e.logger.scope("on").scope(String(t))}}async function Ke(e,t,n){if(!Se(e))return void Oe();const o=e.on,r=o[t]||[],s=(0,x.isArray)(n)?n:[n];s.forEach(e=>{r.push(e)}),o[t]=r,ot(e,t,s)}async function We(e,t,n,o,r){const s=t.on;if(!s)return!0;const i=Ie(o);if(i&&(Le.get(t)||Fe.has(t)))return Je(e,t,o),Le.get(t)||Ve.add(t),!1;const a=i?xe(e,o):0,c=i&&function(e,t,n,o){if(Ne.get(t)?.has(String(n)))return!0;const r=e.delivery?.get(t)?.[String(n)];return void 0===r||r<o-1}(e,t,o,a)?rt(e,o):r,u=t.type||"unknown",d=e.logger.scope(u).scope("on").scope(o),l={collector:e,logger:d,id:n,config:t.config,data:c,env:Tt(t.env,t.config.env),reportError:N(e,"destination",n,d,t)};i&&(et(t,o),function(e,t,n){let o=Ge.get(e);o||(o={},Ge.set(e,o));const r=String(t),s=o[r];(void 0===s||s<n)&&(o[r]=n)}(t,o,a),Fe.add(t));const f=ge(t.config.timeout);let p=Promise.resolve(),g=!0,h=!1,m=!0;try{await(0,D.tryCatchAsync)(()=>(p=Promise.resolve(s(o,l)),me(p,f,`Destination "${n}" on(${o}) did not settle within ${f}ms`)),t=>{g=!1,t instanceof he&&(h=!0),_e(e,"destination",t,{destId:n,type:o})})(),m=!1}finally{if(i){Fe.delete(t),m&&Ve.delete(t);const r=Ne.get(t);g?(nt(e,t,o,a),r?.delete(String(o))):Je(e,t,o),h?function(e,t,n,o,r,s,i){Le.set(t,(Le.get(t)||0)+1);const a=()=>{const s=(Le.get(t)||0)-1;s>0?Le.set(t,s):Le.delete(t),Ye(t,o),Qe(t,o,r),tt(e,t),i.debug("late settle after timeout"),Ve.delete(t),e.allowed&&e.destinations[n]===t&&function(e,t,n,o){(0,D.tryCatchAsync)(async()=>{await dt(e,t,n),!ze(t)&&t.queuePush?.length&&await It(e,void 0,{},{[n]:t})},e=>{o.error("state recovery failed",Q(e))})()}(e,t,n,i)};s.then(a,a)}(e,t,n,o,a,p,d):(Qe(t,o,a),tt(e,t))}}return i&&!h&&Ve.delete(t)&&await dt(e,t,n),g}var Le=new WeakMap,Fe=new WeakSet,Ve=new WeakSet;var He=new WeakMap;function ze(e){return He.get(e)}var Ue=new WeakMap,Ge=new WeakMap;function Qe(e,t,n){const o=Ge.get(e);o&&o[String(t)]===n&&delete o[String(t)]}var Ne=new WeakMap;function Ye(e,t){const n=Ne.get(e);n?n.add(String(t)):Ne.set(e,new Set([String(t)]))}var Xe=new WeakMap;function Je(e,t,n){!function(e,t,n){const o=e.delivery?.get(t);o&&delete o[String(n)]}(e,t,n),Ye(t,n),He.set(t,{type:n,since:Date.now()})}function Ze(e,t){return!!Ne.get(t)?.size||qe.some(n=>je(e,n)&&Me(e,t,n))}function et(e,t){Ue.set(e,(Ue.get(e)||0)+1),He.set(e,{type:t,since:Date.now()})}function tt(e,t){const n=(Ue.get(t)||0)-1;n>0?Ue.set(t,n):Ue.delete(t),function(e,t){if(!He.has(t))return;if(Ue.get(t))return;Ze(e,t)||He.delete(t)}(e,t)}function nt(e,t,n,o){let r=e.delivery.get(t);r||(r={},e.delivery.set(t,r));const s=String(n),i=r[s];(void 0===i||i<o)&&(r[s]=o)}function ot(e,t,n,o){if(!Se(e))return void Oe();const r=rt(e,t,o);if(n.length)switch(t){case c.Commands.Consent:!function(e,t,n){const o=n||e.consent,r=Be(e,c.Commands.Consent);t.forEach(t=>{Me(e,t,c.Commands.Consent)&&Te(e,t,c.Commands.Consent)&&(Object.keys(o).filter(e=>e in t).forEach(n=>{(0,D.tryCatch)(t[n],t=>_e(e,"consent",t,{key:n}))(o,r)}),De(e,t,c.Commands.Consent))})}(e,n,o);break;case c.Commands.Ready:!function(e,t){if(!e.allowed)return;const n=Be(e,c.Commands.Ready);t.forEach(t=>{(0,D.tryCatch)(t,t=>_e(e,"ready",t))(void 0,n)})}(e,n);break;case c.Commands.Run:!function(e,t){if(!e.allowed)return;const n=Be(e,c.Commands.Run);t.forEach(t=>{(0,D.tryCatch)(t,t=>_e(e,"run",t))(void 0,n)})}(e,n);break;case c.Commands.Session:!function(e,t){if(!e.session)return;const n=Be(e,c.Commands.Session);t.forEach(t=>{(0,D.tryCatch)(t,t=>_e(e,"session",t))(e.session,n)})}(e,n);break;default:{const o=Be(e,t),s=Ie(t);n.forEach(n=>{"function"==typeof n&&(s&&!Me(e,n,t)||s&&!Te(e,n,t)||((0,D.tryCatch)(n,n=>_e(e,"generic",n,{type:t}))(r,o),s&&De(e,n,t)))});break}}}function rt(e,t,n){if(Ce(t))return n||e[t];switch(t){case c.Commands.Session:return e.session;case c.Commands.Config:return n||e.config;default:return}}async function st(e,t,n,o,r){if(!t.on)return!1;if(Ie(o)&&!Me(e,t,o))return!1;if(Ie(o)&&!Te(e,t,o))return!1;const s=Ie(o);if(s&&it.has(t))return at.add(t),!1;const i=s?xe(e,o):0;s&&it.add(t);const a=t.on;let c,u=Promise.resolve(),d=!1;try{c=await(0,D.tryCatchAsync)(()=>(u=Promise.resolve(a(o,r)),me(u,pe,`Source "${n}" on(${o}) did not settle within ${pe}ms`)),t=>{t instanceof he&&(d=!0),_e(e,"source",t,{sourceId:n,type:o})})()}finally{s&&!d&&it.delete(t)}if(s)if(d){const o=()=>{it.delete(t),at.delete(t),e.allowed&&e.sources[n]===t&&(0,D.tryCatchAsync)(()=>ct(e,t,n),t=>{e.logger.scope("on").error("state recovery failed",Q(t))})()};u.then(o,o)}else nt(e,t,o,i),at.delete(t)&&await ct(e,t,n);return!1===c}var it=new WeakSet,at=new WeakSet;async function ct(e,t,n){const o=Pe(e);try{for(const o of qe)await st(e,t,n,o,rt(e,o))}finally{o()}}async function ut(e,t,n,o,r){if(!t.on)return;const s=Ie(o);if(s&&!Me(e,t,o))return;const i=Ge.get(t)?.[String(o)];if(s&&void 0!==i&&i>=xe(e,o))return;if(s&&!Te(e,t,o)){if(t.config.init)return void Je(e,t,o);const n=t.queueOn=t.queueOn||[],r={type:o,data:rt(e,o)},s=n[n.length-1];return s&&s.type===o?n[n.length-1]=r:n.push(r),De(e,t,o),void Ne.get(t)?.delete(String(o))}const a=Xe.get(t);if(!t.config.init||a)return t.queueOn=t.queueOn||[],t.queueOn.push({type:o,data:r}),void(s&&(De(e,t,o),a&&!a.held&&(et(t,o),a.held=!0)));await We(e,t,n,o,r)}async function dt(e,t,n){if(!t.on)return;const o=Pe(e);try{for(const o of qe)(je(e,o)||Ne.get(t)?.has(String(o)))&&await ut(e,t,n,o,rt(e,o))}finally{o()}}function lt(e){return(Ue.get(e)||0)>0}async function ft(e){const t=await pt(e);await Promise.all(t.map(({done:e})=>e))}async function pt(e){if(!Se(e))return Oe(),[];const t=[];for(const[n,o]of Object.entries(e.destinations)){if(!o.on)continue;const r=async()=>{for(const t of qe)je(e,t)&&await ut(e,o,n,t,rt(e,t))};t.push(ht(n,o,r()))}for(const t of qe){if(!je(e,t))continue;const n=rt(e,t);ot(e,t,e.on[t]||[]),await Promise.all(Object.entries(e.sources).filter(([,e])=>ye(e)).map(([o,r])=>st(e,r,o,t,n)))}return t}async function gt(e,t,n,o){const{ok:r,deliveries:s}=await mt(e,t,n,o);return await Promise.all(s.map(({done:e})=>e)),r}function ht(e,t,n){return n.catch(()=>{}),{id:e,destination:t,done:n}}async function mt(e,t,n,o){if(!Se(e))return Oe(),{ok:!0,deliveries:[]};e.seenEvents.add(String(t));let r=n||[];n||(r=e.on[t]||[]);const s=rt(e,t,o),i=[];for(const[n,o]of Object.entries(e.sources)){if(o.config.require?.length){const e=o.config.require.indexOf(t);-1!==e&&o.config.require.splice(e,1)}o.on&&(ye(o)?i.push(st(e,o,n,t,s)):(o.queueOn=o.queueOn||[],o.queueOn.push({type:t,data:s})))}const a=[];for(const[n,o]of Object.entries(e.destinations))o.on&&a.push(ht(n,o,ut(e,o,n,t,s)));let c=!1;if(i.length){c=(await Promise.all(i)).some(Boolean)}for(const[t,n]of Object.entries(e.sources))ye(n)&&n.queueOn?.length&&await ve(e,n,t);const u=Object.values(e.sources).some(e=>!ye(e)&&e.config.require?.length);return(Object.keys(e.pending.destinations).length>0||u)&&await ke(e),ot(e,t,r,o),{ok:!c,deliveries:a}}var vt=1e3,yt=1e3,wt=3e4,bt=Object.freeze({batched:!0});function kt(e){return e===bt}var St=" batch-all";function Et(e){return void 0===e?{}:"number"==typeof e?{wait:e}:{wait:e.wait,size:e.size,age:e.age}}async function Ot(e,t){const{code:n,config:o={},env:r={},before:s,next:i,cache:a,state:c}=t;if(!(0,f.isFunction)(n.push))return Rt({ok:!1,failed:{invalid:{type:"invalid",error:"Destination code must have a push method"}}});const u={...n.config,...o||{init:!1}};let d=s?{...u,before:s}:{...u};i&&(d={...d,next:i}),a&&(d={...d,cache:a}),void 0!==c&&void 0===d.state&&(d={...d,state:c});let l=d.id;if(!l)do{l=(0,f.getId)(5,"abcdefghijklmnopqrstuvwxyz")}while(e.destinations[l]||e.pending.destinations[l]);if(S(e,(0,f.stepId)("destination",l),d.state),d.require?.length){e.pending.destinations[l]=t,await ke(e);const n=e.destinations[l];return n?It(e,void 0,{},{[l]:n}):Rt({ok:!0})}const p={...n,config:d,env:Tt(n.env,r)};return e.destinations[l]=p,!1!==p.config.queue&&(p.queuePush=[...e.queue]),await dt(e,p,l),It(e,void 0,{},{[l]:p})}function _t(e){for(const t of e)ze(t.destination)&&(t.drain=!0)}async function qt(e,t){return(await Promise.all(t.map(async({id:t,destination:n,done:o,drain:r})=>{if(await o,r&&e.allowed&&!ze(n)&&n.queuePush?.length&&e.destinations[t]===n)return It(e,void 0,{},{[t]:n})}))).filter(f.isDefined)}function Ct(e,t){if(!t.length)return e;const n={...e.done??{}},o={...e.queued??{}},r={...e.failed??{}};for(const e of t){for(const[t,r]of Object.entries(e.done??{}))n[t]=r,delete o[t];for(const[t,n]of Object.entries(e.failed??{}))r[t]=n,delete o[t];Object.assign(o,e.queued??{})}const s={...e,ok:e.ok&&t.every(e=>e.ok)};return delete s.done,delete s.queued,delete s.failed,Object.keys(n).length&&(s.done=n),Object.keys(o).length&&(s.queued=o),Object.keys(r).length&&(s.failed=r),s}async function It(e,t,n={},o){if(!e.allowed)return Rt({ok:!1});if(!t)return jt(e,void 0,n,o);const r=await Zt(e,t,n);if(0===r.copies.length)return Rt({ok:!0,...r.dropped?{dropped:!0}:{}});const s=[];for(const t of r.copies)s.push(await jt(e,t.event,{id:n.id,ingest:t.ingest,respond:r.respond},o));return s[0]}async function jt(e,t,n,o){const{user:r}=e;if(t){const n=R(e.config.queueMax),o=P(e.queue,t,{max:n});if(o.dropped>0){const t=G(e.status,(0,f.stepId)("collector"),"queue",o.dropped);T(e.queue,e.logger,"collector.queue overflow; oldest events dropped",{buffer:"queue",cap:n,droppedCount:t})}else e.queue.length<n&&B(e.queue);e.status.in++}o||(o=e.destinations);const s=e.transformers||{},i=await Promise.all(Object.entries(o||{}).map(async([o,i])=>{if(i.config.disabled)return{id:o,destination:i,skipped:!0};const a=i.config.id||o,c=(0,f.stepId)("destination",a),u=F(i.config.breaker);if(u&&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=L();return void 0!==o.openUntil&&r<o.openUntil||(o.state="half-open",o.probing=!0,o.openUntil=r+n,!1)}(e.status.breakers,c,u.cooldown))return{id:o,destination:i,skipped:!0};const d=t=>{u&&V(e.status.breakers,c,t,u.threshold,u.cooldown)},l=()=>{u&&function(e,t){const n=e[t];n&&"half-open"===n.state&&!0===n.probing&&(n.state="open",n.probing=!1)}(e.status.breakers,c)},p=t=>{if(!t.length)return;i.queuePush||(i.queuePush=[]);const n=i.queuePush,r=i.config.id||o,s={max:i.config.queueMax??vt};let a=0;for(const e of t){a+=P(n,e,s).dropped}if(a>0){U(e,r);const t=G(e.status,(0,f.stepId)("destination",r),"queue",a);T(n,e.logger.scope(i.type||"unknown"),"destination.queuePush overflow; oldest events dropped",{buffer:"queuePush",destination:r,cap:s.max,droppedCount:t})}else n.length<s.max&&B(n)};i.on&&i.config.init&&!ze(i)&&!lt(i)&&Ze(e,i)&&await dt(e,i,o);const m=ze(i);if(m&&!lt(i)&&Date.now()-m.since>=ge(i.config.timeout)&&await dt(e,i,o),ze(i)){if(l(),!t)return{id:o,destination:i,skipped:!0};const e=[(0,f.clone)(t)];return p(e),{id:o,destination:i,queue:e}}let v=(i.queuePush||[]).map(t=>({...t,consent:e.consent}));i.queuePush=[],t&&v.push((0,f.clone)(t));const y=n.ingest?{...n.ingest,_meta:{...n.ingest._meta,path:[...n.ingest._meta.path]}}:(0,f.createIngest)("unknown");if(!v.length&&!i.queueOn?.length)return l(),{id:o,destination:i,skipped:!0};if(!v.length&&i.queueOn?.length){if(!(0,f.getGrantedConsent)(i.config.consent,e.consent))return l(),{id:o,destination:i,skipped:!0};let t=!1;try{t=await Dt(e,i,o,!0)}catch(t){e.status.failed++;const n=i.type||"unknown";e.logger.scope(n).error("destination init failed",{error:t instanceof Error?t.message:String(t)}),d("transport-failure")}if(ze(i))return l(),{id:o,destination:i,skipped:!0};if(!t||!i.queuePush?.length)return l(),{id:o,destination:i,skipped:!t};v=i.queuePush.map(t=>({...t,consent:e.consent})),i.queuePush=[]}const S=t=>{const n=e.consent,r=[],s=t.filter(t=>{const s=(0,f.getGrantedConsent)(i.config.consent,n,t.consent);if(s)return t.consent=s,r.push(t),!1;const a=h(e,(0,f.stepId)("destination",o),"destination","skip","string"==typeof t.id?t.id:"",Date.now(),g(t,y,e));return a.skipReason="consent",n&&(a.consent={...n}),i.config.consent&&(a.meta={required:{...i.config.consent}}),(0,f.emitStep)(e,a),!0});return{allowed:r,skipped:s}},E=e.consent,{allowed:O,skipped:_}=S(v);if(p(_),!O.length)return l(),{id:o,destination:i,queue:v};const q=new Set(i.queuePush);let C=!1;try{C=await Dt(e,i,o,!0)}catch(t){e.status.failed++;const n=i.type||"unknown";e.logger.scope(n).error("destination init failed",{error:t instanceof Error?t.message:String(t)}),d("transport-failure")}if(!C)return l(),{id:o,destination:i,queue:v};if(ze(i))return l(),p(O),{id:o,destination:i,queue:O};const I=[];if(e.consent!==E){const t=S(O.map(t=>({...t,consent:e.consent})));O.splice(0,O.length,...t.allowed),I.push(...t.skipped)}const j=i.queuePush||[],A=j.filter(e=>!q.has(e));if(A.length){i.queuePush=j.filter(e=>q.has(e));const t=S(A.map(t=>({...t,consent:e.consent})));O.push(...t.allowed),I.push(...t.skipped)}if(p(I),!O.length)return l(),I.length?{id:o,destination:i,queue:I}:{id:o,destination:i,skipped:!0};let x,D;i.dlq||(i.dlq=[]);const M=i.config.before,R=i.config.next,$=i.config?.cache,K=$?(0,f.compileCache)($):void 0,W=K?w(K,e):void 0,H=b(i.config?.state),N=H?.filter(e=>"get"===e.mode),Y=H?.filter(e=>"set"===e.mode);let X=0,J=0,Z=0;return await Promise.all(O.map(async t=>{let a,c;if(t.user=(0,f.assign)(r,t.user),K?.stop&&W){const e=(0,f.createMappingRoot)(y,t),n=await(0,f.checkCache)(K,W,e);if("HIT"===n?.status)return t;"MISS"===n?.status&&(a={key:n.key,ttl:n.rule.ttl})}let u=[{event:t,ingest:y}],d=n.respond;if(void 0!==M){const r=`destination.${o}.before`,i=await de(e,s,M,t,y,n.respond,r);if(0===i.copies.length){const n=h(e,(0,f.stepId)("destination",o),"destination","skip","string"==typeof t.id?t.id:"",Date.now(),g(t,y,e));return n.skipReason="dropped",n.meta={by:i.droppedBy??"route",at:r},(0,f.emitStep)(e,n),t}i.respond&&(d=i.respond),u=i.copies.map(e=>({event:e.event,ingest:e.ingest}))}const l=async(t,n,r)=>{let a=r,u=!1;if(K&&!K.stop&&W){const e=(0,f.createMappingRoot)(n,t??void 0),o=await(0,f.checkCache)(K,W,e);if("HIT"===o?.status)return!1;"MISS"===o?.status&&(a={key:o.key,ttl:o.rule.ttl},u=!0)}N&&N.length>0&&t&&(t=await k(e,N,t,n));const l=Date.now();let p=!1;const g=await(0,f.tryCatchAsync)(Mt,n=>{const r=i.type||"unknown";e.logger.scope(r).error("Push failed",{...Q(n),event:t.name}),x=n,p=!0;const s=i.dlq,a=i.config.id||o,c={max:i.config.dlqMax??z},u=P(s,[t,n],c);if(u.dropped>0){U(e,a);const t=G(e.status,(0,f.stepId)("destination",a),"dlq",u.dropped);T(s,e.logger.scope(i.type||"unknown"),"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:a,cap:c.max,droppedCount:t})}else s.length<c.max&&B(s)})(e,i,o,t,n,d);if(X+=Date.now()-l,a&&W&&void 0===i.config.mock&&(u?(0,f.storeCache)(W,a.key,g??!0,a.ttl):void 0===c&&(c=g??!0)),!p&&!kt(g)&&Y&&Y.length>0&&t&&(t=await k(e,Y,t,n)),void 0===g||kt(g)||(D=g),kt(g)&&J++,!p&&R){void 0!==g&&(n._response=g);const r=await de(e,s,R,t,n,d,`destination.${o}.next`);r.respond&&(d=r.respond)}return!0};for(const e of u)await l(e.event,e.ingest,a)&&Z++;return a&&W&&void 0!==c&&void 0===i.config.mock&&(0,f.storeCache)(W,a.key,c,a.ttl),t})),{id:o,destination:i,error:x,response:D,totalDuration:X,batchedCount:J,allowedCount:O.length,pushedCount:Z,canonicalId:a,breakerConfig:u}})),a={},c={},u={};for(const t of i){if(t.skipped)continue;const n=t.destination,o={type:n.type||"unknown",data:t.response};U(e,t.id);const r=e.status.destinations[t.id],s=Date.now();r.queuePushSize=n.queuePush?.length??0,r.dlqSize=n.dlq?.length??0;const i=t.breakerConfig,d=t.canonicalId?(0,f.stepId)("destination",t.canonicalId):void 0,l=t=>{i&&d&&V(e.status.breakers,d,t,i.threshold,i.cooldown)};if(t.error)o.error=t.error,u[t.id]=o,r.failed++,r.lastAt=s,r.duration+=t.totalDuration||0,e.status.failed++,l("transport-failure");else if(t.queue&&t.queue.length)c[t.id]=o;else{const n=t.batchedCount??0,i=t.allowedCount??0,c=t.pushedCount??i;(Math.max(0,c-n)>0||0===i)&&(a[t.id]=o,r.count++,r.lastAt=s,r.duration+=t.totalDuration||0,e.status.out++,l("success"))}}return Rt({event:t,...Object.keys(a).length&&{done:a},...Object.keys(c).length&&{queued:c},...Object.keys(u).length&&{failed:u}})}async function At(e,t,n,o){const r=await async function(e,t,n,o){const r=t.type||"unknown",s=e.logger.scope(r),i={collector:e,logger:s,id:o,config:t.config,env:Tt(t.env,t.config.env),reportError:N(e,"destination",o,s,t)};s.debug("init");const a=Date.now();let c;(0,f.emitStep)(e,h(e,(0,f.stepId)("destination",o),"destination","init","",a));try{c=await(0,f.useHooks)(n,"DestinationInit",e.hooks,e.logger)(i)}catch(t){const n=Date.now(),r=h(e,(0,f.stepId)("destination",o),"destination","error","",n);throw r.durationMs=n-a,r.error=m(t),(0,f.emitStep)(e,r),t}return!1!==c&&{...c||t.config,init:!0}}(e,t,n,o);if(!1===r)return!1;if(t.config=r,t.queueOn?.length){const n=Pe(e);!function(e){const t=e.queueOn?.find(({type:e})=>Ie(e));t&&et(e,t.type),Xe.set(e,{held:!!t})}(t);try{for(let n=t.queueOn?.shift();n;n=t.queueOn?.shift())await We(e,t,o,n.type,n.data)}catch(n){for(const{type:n}of t.queueOn||[])Ie(n)&&Je(e,t,n);throw t.queueOn=[],n}finally{!function(e,t){const n=Xe.get(t);Xe.delete(t),n?.held&&tt(e,t)}(e,t),n()}}return e.logger.scope(t.type||"unknown").debug("init done"),!0}var xt=new WeakMap;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 r=xt.get(t);if(r)return r;const s=At(e,t,t.init,n);xt.set(t,s);try{return await s}finally{xt.delete(t)}}return!0}async function Mt(e,t,n,o,r,s){const{config:i}=t,a=await(0,f.processEventMapping)(o,i,e);if(a.ignore)return!1;const c=t.type||"unknown",u=e.logger.scope(c),d={collector:e,logger:u,id:n,config:i,data:a.data,rule:a.mapping,ingest:r,env:{...Tt(t.env,i.env),...s?{respond:s}:{}},reportError:N(e,"destination",n,u,t)};if(void 0!==i.mock)return u.debug("mock",{event:a.event.name}),i.mock;const l=a.mapping,p=void 0!==l?.batch,v=p?a.mappingKey||"* *":St;if((p||void 0!==i.batch)&&t.pushBatch&&void 0===i.mock){if(t.batches=t.batches||{},!t.batches[v]){const o={key:v,entries:[],events:[],data:[]},r=Et(l?.batch),s=Et(i.batch),a=r.wait??s.wait??wt,c=r.size??s.size??yt,d=r.age??s.age??wt,y=Tt(t.env,i.env),w=async()=>{const o=t.batches[v],r=o.batched;if(0===r.entries.length)return;const s={key:r.key,entries:r.entries,events:r.events,data:r.data};r.entries=[],r.events=[],r.data=[];const a=s.entries[0],c={collector:e,logger:u,id:n,config:i,data:void 0,rule:o.isDefault?void 0:a.rule,ingest:a.ingest,env:{...y,...a.respond?{respond:a.respond}:{}},reportError:N(e,"destination",n,u,t)};u.debug("push batch",{events:s.entries.length});const d=t.config.id||n,l=U(e,d),p=F(t.config.breaker),w=(0,f.stepId)("destination",d),b=t=>{p&&V(e.status.breakers,w,t,p.threshold,p.cooldown)},k=Date.now(),S=new Map;let E,O=!1;const _=n=>{const o=t.dlq=t.dlq||[],r={max:t.config.dlqMax??z};let s=0;for(const e of n){s+=P(o,e,r).dropped}if(s>0){const t=G(e.status,(0,f.stepId)("destination",d),"dlq",s);T(o,u,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:d,cap:r.max,droppedCount:t})}else o.length<r.max&&B(o);l.failed+=n.length,l.dlqSize=o.length,e.status.failed+=n.length};let q=s.entries.length;const C=ge(i.timeout),I=await(0,f.tryCatchAsync)((o,r)=>me(Promise.resolve((0,f.useHooks)(t.pushBatch,"DestinationPushBatch",e.hooks,e.logger)(o,r)),C,`Destination "${n}" batch delivery timed out after ${C}ms`),e=>{q=0,O=!0,E=e,_(s.entries.map(t=>[t.event,e])),b("transport-failure"),u.error("Push batch failed",{error:e instanceof Error?e.message:String(e),entries:s.entries.length})})(s,c);if(j=I,(0,f.isObject)(j)&&Array.isArray(j.failed)&&I.failed.length>0){const e=[];for(const t of I.failed){const n=s.entries[t.index];if(!n||S.has(t.index))continue;const o=t.error??new Error(`Push batch entry ${t.index} failed (no per-row error provided)`);S.set(t.index,o),e.push([n.event,o])}if(e.length>0){_(e),q=Math.max(0,s.entries.length-e.length);const t=new Map;for(const[,n]of e){const e=n instanceof Error&&"code"in n&&"string"==typeof n.code?n.code:n instanceof Error?n.name:"Error",o=t.get(e);o?o.count++:t.set(e,{code:e,count:1,message:n instanceof Error?n.message:String(n)})}u.error("Push batch partial failure",{failed:e.length,delivered:q,entries:s.entries.length,causes:[...t.values()]})}}var j;const A=Date.now();s.entries.forEach((t,o)=>{const r=O||S.has(o),i=g(t.event,t.ingest,e),a=h(e,(0,f.stepId)("destination",n),"destination",r?"error":"flush","string"==typeof t.event.id?t.event.id:"",A,i);if(a.batch={size:s.entries.length,index:o},a.durationMs=A-k,r){const e=O?E:S.get(o);a.error=m(e)}(0,f.emitStep)(e,a)}),u.debug("push batch done"),l.inFlightBatch=Math.max(0,(l.inFlightBatch??0)-s.entries.length),q>0&&(l.count+=q,l.lastAt=Date.now(),e.status.out+=q,b("success"))},b=(0,f.debounce)(w,{wait:a,size:c,age:d});t.batches[v]={batched:o,isDefault:!p,batchFn:()=>{b()},flush:async()=>{await b.flush()}}}const c=t.batches[v];c.batched.entries.push({event:a.event,ingest:r,respond:s,rule:l,data:a.data}),c.batched.events.push(a.event),(0,f.isDefined)(a.data)&&c.batched.data.push(a.data);const d="string"==typeof a.event.id?a.event.id:"",y=g(o,r,e),w=Date.now(),b=h(e,(0,f.stepId)("destination",n),"destination","in",d,w,y);a.mappingKey&&(b.mappingKey=a.mappingKey),a.event.consent&&(b.consent={...a.event.consent}),b.inEvent=a.event,(0,f.emitStep)(e,b);const k=h(e,(0,f.stepId)("destination",n),"destination","out",d,w,y);a.mappingKey&&(k.mappingKey=a.mappingKey),k.outEvent=a.event,k.batch={size:c.batched.entries.length,index:c.batched.entries.length-1},(0,f.emitStep)(e,k);const S=t.config.id||n,E=U(e,S);return E.inFlightBatch=(E.inFlightBatch??0)+1,c.batchFn(),bt}{let s;if(u.debug("push",{event:a.event.name}),("undefined"==typeof __WALKEROS_OBSERVE__||__WALKEROS_OBSERVE__)&&"trace"===e.observeLevel?.()&&Array.isArray(t.calls)&&t.calls.length>0){const e=q({...d.env,simulation:t.calls});d.env=e.wrappedEnv,s=e.calls,e.unresolved.length>0&&(e.wrappedEnv[f.OBSERVE_ENV_KEY]={paths:e.unresolved,record:(t,n)=>e.calls.push({fn:t,args:n,ts:Date.now()})})}const c="string"==typeof a.event.id?a.event.id:"",l=g(o,r,e),p=Date.now(),v=h(e,(0,f.stepId)("destination",n),"destination","in",c,p,l);a.mappingKey&&(v.mappingKey=a.mappingKey),a.event.consent&&(v.consent={...a.event.consent}),v.inEvent=a.event,(0,f.emitStep)(e,v);try{const o=ge(i.timeout),r=await me(Promise.resolve((0,f.useHooks)(t.push,"DestinationPush",e.hooks,e.logger)(a.event,d)),o,`Destination "${n}" delivery timed out after ${o}ms`),g=Date.now(),m=h(e,(0,f.stepId)("destination",n),"destination","out",c,g,l);return m.durationMs=g-p,m.outEvent=a.event,A(m,s),(0,f.isDefined)(r)&&(m.meta={...m.meta,response:r}),a.mappingKey&&(m.mappingKey=a.mappingKey),(0,f.emitStep)(e,m),u.debug("push done"),r}catch(t){const o=Date.now(),r=h(e,(0,f.stepId)("destination",n),"destination","error",c,o,l);throw r.durationMs=o-p,r.error=m(t),A(r,s),a.mappingKey&&(r.mappingKey=a.mappingKey),(0,f.emitStep)(e,r),t}}}function Rt(e){return{ok:!e?.failed,...e}}function Pt(e){const{code:t,config:n={},env:o={},cache:r,state:s}=e,{config:i}=J(e,"before"),{config:a}=J({...e,config:i},"next"),c={...t.config,...n,...a};r&&(c.cache=r),void 0!==s&&void 0===c.state&&(c.state=s);const u=Tt(t.env,o);return{...t,config:c,env:u}}async function $t(e,t={}){const n={};for(const[o,r]of Object.entries(t))S(e,(0,f.stepId)("destination",o),r.config?.state??r.code.config?.state??r.state),r.config?.require?.length?e.pending.destinations[o]=r:n[o]=Pt(r);return n}function Tt(e,t){return e||t?t?e&&(0,f.isObject)(e)&&(0,f.isObject)(t)?{...e,...t}:t:e:{}}var Bt=require("@walkeros/core"),Kt=require("@walkeros/core"),Wt=5e3;async function Lt(e){const t=e.logger;await Ft(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`)),Wt)})])}catch(t){r.error(`destination '${e}' batch flush failed: ${t}`)}finally{n&&clearTimeout(n)}})});await Promise.allSettled(n)}(e.destinations,t),await Ft(e.destinations,"destination",t),await Ft(e.transformers,"transformer",t),await Ft(e.stores,"store",t)}async function Ft(e,t,n){const o=Object.entries(e).map(async([e,o])=>{const r=o.destroy;if(!r)return;const s=o.type||"unknown",i=n.scope(s),a={id:e,config:o.config,env:o.env??{},logger:i};let c;try{await Promise.race([r(a),new Promise((n,o)=>{c=setTimeout(()=>o(new Error(`${t} '${e}' destroy timed out`)),Wt)})])}catch(n){i.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 Ht(e,t,n){let o,r,s=!1;const i=[],a=Pe(e);try{return await async function(){switch(t){case c.Commands.Config:(0,Kt.isObject)(n)&&((0,Bt.assign)(e.config,n,{shallow:!1,merge:!1}),r=n,s=!0);break;case c.Commands.Consent:if((0,Kt.isObject)(n)){const{update:t}=d(e,n);Vt(e,c.Commands.Consent),r=t,s=!0}break;case c.Commands.Custom:(0,Kt.isObject)(n)&&(e.custom=(0,Bt.assign)(e.custom,n),Vt(e,c.Commands.Custom),r=n,s=!0);break;case c.Commands.Destination:(0,Kt.isObject)(n)&&"code"in n&&(0,Kt.isObject)(n.code)&&(o=await Ot(e,n));break;case c.Commands.Globals:(0,Kt.isObject)(n)&&(e.globals=(0,Bt.assign)(e.globals,n),Vt(e,c.Commands.Globals),r=n,s=!0);break;case c.Commands.Hook:if((0,Kt.isObject)(n)&&(0,Bt.isString)(n.name)&&(0,Bt.isFunction)(n.fn)){const{name:t,fn:o}=n;e.hooks[t]=o,r=n,s=!0}break;case c.Commands.On:if((0,Kt.isObject)(n)&&(0,Bt.isString)(n.type)){const{type:t,rules:o}=n;await Ke(e,t,o)}break;case c.Commands.Ready:s=!0;break;case c.Commands.Run:o=await Xt(e,n,i),s=!0;break;case c.Commands.Session:s=!0;break;case c.Commands.Shutdown:e.hasShutdown||(e.hasShutdown=!0,await Lt(e));break;case c.Commands.User:(0,Kt.isObject)(n)&&((0,Bt.assign)(e.user,n,{shallow:!1}),Vt(e,c.Commands.User),r=n,s=!0);break;default:return e.logger.warn("unknown command",{command:t}),Rt({ok:!1})}if(s){const n=await mt(e,t,void 0,r);i.push(...n.deliveries),_t(n.deliveries);const s=Ct(await It(e),await qt(e,i));if(o&&!1===o.ok){const e={...s.failed??{},...o.failed??{}};o={...s,ok:!1,...Object.keys(e).length>0?{failed:e}:{}}}else o=s}return o||Rt({ok:!0})}()}finally{a()}}function zt(e,t){return{timing:Math.round((Date.now()-e.timing)/10)/100,source:{type:"collector",schema:"4"},...t}}function Ut(e,t,n){return Qt(e,t,n,{globals:e.globals,user:e.user,consent:e.consent})}function Gt(e,t,n){return Qt(e,zt(e,t),n,{globals:{},user:{},consent:{}})}function Qt(e,t,n,o){const r=t.name;if("string"!=typeof r)throw new Bt.InvalidEventError(void 0===r?"Event name is required":"Event name is invalid");if(!r)throw new Bt.InvalidEventError("Event name is required");const[s,i]=r.split(" ");if(!s||!i)throw new Bt.InvalidEventError("Event name is invalid");const{timestamp:a=Date.now(),name:c=`${s} ${i}`,data:u={},context:d={},globals:l={},custom:f={},user:p=o.user,nested:g=[],consent:h=o.consent,id:m=(0,Bt.getSpanId)(),trigger:v="",entity:y=s,action:w=i,timing:b=0,source:k={type:"collector",schema:"4"}}=t,S=k??{type:"collector",schema:"4"},E=S.count??(e.count+=1),O=S.trace??n?._meta.trace??e.trace,_={...S,count:E};void 0!==O&&(_.trace=O);const q=e.name??S.platform??"default",C=e.release??"4.7.2";_.release={...S.release,[q]:C};return{name:c,data:u,context:d,globals:(0,Bt.assign)(o.globals,l),custom:f,user:p,nested:g,consent:h,id:m,trigger:v,entity:y,action:w,timestamp:a,timing:b,source:_}}function Nt(e,t,n){return Ut(e,zt(e,t),n)}async function Yt(e,t){const n=[];return Ct(await Xt(e,t,n),await qt(e,n))}async function Xt(e,t,n){e.allowed=!0,e.timing=Date.now(),e.trace=(0,Bt.getTraceId)(),e.count=0,t&&(t.consent&&(e.consent=(0,Bt.assign)(e.consent,t.consent),Vt(e,c.Commands.Consent)),t.user&&(e.user=(0,Bt.assign)(e.user,t.user),Vt(e,c.Commands.User)),t.globals&&(e.globals=(0,Bt.assign)(e.config.globalsStatic||{},t.globals),Vt(e,c.Commands.Globals)),t.custom&&(e.custom=(0,Bt.assign)(e.custom,t.custom),Vt(e,c.Commands.Custom))),Object.values(e.destinations).forEach(e=>{e.queuePush=[]}),e.queue=[],e.round++,await ke(e);const o=await pt(e);let r=!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:o}of t){const t=await e.push(n,o);!1===t.ok&&(r=!1),t.failed&&Object.assign(s,t.failed)}}_t(o);const i=await It(e);if(n.push(...o),r)return i;const a={...i.failed??{},...s};return{...i,ok:!1,...Object.keys(a).length>0?{failed:a}:{}}}var Jt="collector.next";async function Zt(e,t,n={}){const o=n.ingest??(0,l.createIngest)(n.id||"unknown"),r=e.config.next;if(void 0===r)return{copies:[{event:t,ingest:o}],respond:n.respond};const s=await de(e,e.transformers||{},r,t,o,n.respond,Jt),i=s.respond??n.respond;return 0===s.copies.length?(e.logger.debug("Event dropped by collector.next"+(s.droppedBy?` (${s.droppedBy})`:"")),v(e,t,o,{reason:"dropped",by:s.droppedBy,at:Jt}),{copies:[],respond:i,dropped:!0}):s.stopped?{copies:[],respond:i}:{copies:s.copies.map(t=>({event:Gt(e,t.event,t.ingest),ingest:t.ingest})),respond:i}}var en=require("@walkeros/core"),tn=require("@walkeros/core"),nn=require("@walkeros/core");function on(e,t){const n=(0,nn.useHooks)(async(n,o={})=>await(0,nn.tryCatchAsync)(async()=>{if(!e.allowed){const t=R(e.config.queueMax),r=P(e.preRunQueue,{event:n,options:o},{max:t});if(r.dropped>0){const n=G(e.status,"collector.preRun","queue",r.dropped);T(e.preRunQueue,e.logger,"collector.preRunQueue overflow; oldest events dropped",{buffer:"queue",cap:t,droppedCount:n})}else e.preRunQueue.length<t&&B(e.preRunQueue);return e.logger.debug("event held until run",{name:n.name,dropped:r.dropped}),Rt({ok:!0})}const r=Date.now(),{id:s,ingest:i,respond:a,mapping:c,preChain:u,include:d,exclude:l}=o;let f=a,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;let h=i??(0,nn.createIngest)(s||"unknown");if(c){const t=await(0,nn.processEventMapping)(p,c,e);if(t.ignore)return Rt({ok:!0});if(c.consent){const n=t.event.consent;if(!(0,nn.getGrantedConsent)(c.consent,e.consent,n)){const o=s?`source.${s}`:"collector.push";return e.logger.debug("Event dropped by source consent",{at:o,required:c.consent}),v(e,t.event,h,{reason:"consent",at:o,required:c.consent,consent:{...e.consent,...n}}),Rt({ok:!0,dropped:!0})}}p=t.event}if(void 0!==u){const n=s?`source.${s}.next`:void 0,o=await de(e,e.transformers||{},u,p,h,f,n);if(0===o.copies.length)return e.logger.debug("Event dropped by transformer chain"+(o.droppedBy?` (${o.droppedBy})`:"")),v(e,p,h,{reason:"dropped",by:o.droppedBy,at:n??"collector.push.preChain"}),Rt({ok:!0,dropped:!0});if(o.stopped)return o.respond&&(f=o.respond),Rt({ok:!0});if(o.respond&&(f=o.respond),o.copies.length>1){const n=await Promise.all(o.copies.map(async n=>{const o=Ut(e,t(n.event),n.ingest);return It(e,o,{id:s,ingest:n.ingest,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+=o.copies.length,t.lastAt=Date.now(),t.duration+=Date.now()-r}return n[0]??Rt({ok:!0})}p=o.copies[0].event,h=o.copies[0].ingest}const m=Nt(e,p,h),y=await It(e,m,{id:s,ingest:h,respond:f},g);if(s){e.status.sources[s]||(e.status.sources[s]={count:0,duration:0});const t=e.status.sources[s];t.count++,t.lastAt=Date.now(),t.duration+=Date.now()-r}return y},t=>{if(t instanceof nn.FatalError)throw t;if(t instanceof nn.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}),Rt({ok:!1,invalid:!0,error:t.message})}return e.status.failed++,e.logger.error("push failed",{...Q(t),event:n.name}),Rt({ok:!1})})(),"Push",e.hooks,e.logger);return async(t,o)=>{const r="string"==typeof t.id&&""!==t.id?t:{...t,id:(0,nn.getSpanId)()},s="string"==typeof r.id?r.id:"",i=g(r,o?.ingest,e),a=Date.now(),c=h(e,"collector.push","collector","in",s,a,i);c.inEvent=r,(0,nn.emitStep)(e,c);try{const t=await n(r,o),c=Date.now(),u=h(e,"collector.push","collector","out",s,c,i);return u.durationMs=c-a,u.outEvent=t,(0,nn.emitStep)(e,u),t}catch(t){const n=Date.now(),o=h(e,"collector.push","collector","error",s,n,i);throw o.durationMs=n-a,o.error=m(t),(0,nn.emitStep)(e,o),t}}}var rn=require("@walkeros/core");var sn=require("@walkeros/core"),an=1e4,cn=6e4,un=.8;function dn(e={}){const t=e.maxEntries??an,n=e.lowWaterMark??un,o=e.sweepIntervalMs??cn,r=Math.floor(t*n),s=new Map,i={hits:0,misses:0,populates:0,writes:0,deletes:0,evictions_entries:0,evictions_ttl:0};let a;o>0&&(a=setInterval(function(){const e=Date.now();let t=0;for(const[n,o]of s)void 0!==o.expires&&o.expires<=e&&(s.delete(n),t++);i.evictions_ttl+=t},o),a&&"function"==typeof a.unref&&a.unref());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),i.evictions_ttl++,void i.misses++):(s.delete(e),s.set(e,t),i.hits++,t.value);i.misses++},set(e,n,o){const a=!s.has(e);a||s.delete(e),s.set(e,{value:n,expires:void 0!==o?Date.now()+o:void 0}),i.writes++,a&&i.populates++,s.size>t&&function(){if(s.size<=t)return;const e=s.size-r;let n=0;for(const t of s.keys()){if(n>=e)break;s.delete(t),n++}i.evictions_entries+=n}()},delete(e){s.delete(e)&&i.deletes++},get counters(){return{...i}},destroy(){void 0!==a&&(clearInterval(a),a=void 0),s.clear()}}}var ln=require("@walkeros/core");function fn(e,t){const{cacheConfig:n,cacheStore:o,namespace:r,logger:s,storeId:i,collector:a}=t,c=(e,t)=>{if(!a)return;const n=h(a,`store.${i}`,"store","in","");n.meta={op:"cache",cached:"hit"===t,status:t,key:e},(0,ln.emitStep)(a,n)},u={hits:0,misses:0,populates:0,writes:0,deletes:0,inflight_dedups:0},d=n.rules.map(e=>({match:e.match?(0,ln.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,ln.readCacheEnvelope)(r);if(void 0!==s){if(!("expired"in s))return u.hits++,c(t,"hit"),s.value;try{await o.delete(n)}catch(e){g("delete",t,e)}}const i=p.get(n);if(i)return u.inflight_dedups++,c(t,"hit"),i;u.misses++,c(t,"miss");const a=(async()=>{try{const r=await e.get(t);if(void 0===r)return;const s=f(t,r);if(s)try{const e=1e3*s.ttl;await o.set(n,(0,ln.wrapCacheEnvelope)(r,e),e),u.populates++}catch(e){g("set",t,e)}return r}finally{p.delete(n)}})();return p.set(n,a),a},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,ln.wrapCacheEnvelope)(n,e),e)}catch(e){g("set",t,e)}},async delete(t){u.deletes++,await e.delete(t);try{await o.delete(l(t))}catch(e){g("delete",t,e)}}};function g(e,t,n){const o=`store-cache(${i}): cache ${e} failed for "${t}"; backing succeeded, continuing`;s?s.warn(o,Q(n)):console.warn(o,n)}}function pn(e,t,n){const o=`store.${n}`,r=(0,sn.useHooks)(t.get,"StoreGet",e.hooks,e.logger),s=(0,sn.useHooks)(t.set,"StoreSet",e.hooks,e.logger),i=(0,sn.useHooks)(t.delete,"StoreDelete",e.hooks,e.logger);t.get=async t=>{const n=Date.now(),s=h(e,o,"store","in","",n);s.meta={op:"get",key:t},(0,sn.emitStep)(e,s);try{const s=await r(t),i=Date.now(),a=h(e,o,"store","out","",i);return a.durationMs=i-n,a.meta={op:"get",key:t},(0,sn.emitStep)(e,a),s}catch(r){const s=Date.now(),i=h(e,o,"store","error","",s);throw i.durationMs=s-n,i.meta={op:"get",key:t},i.error=m(r),(0,sn.emitStep)(e,i),r}},t.set=async(t,n,r)=>{const i=Date.now(),a=h(e,o,"store","in","",i);a.meta={op:"set",key:t},(0,sn.emitStep)(e,a);try{await s(t,n,r);const a=Date.now(),c=h(e,o,"store","out","",a);c.durationMs=a-i,c.meta={op:"set",key:t},(0,sn.emitStep)(e,c)}catch(n){const r=Date.now(),s=h(e,o,"store","error","",r);throw s.durationMs=r-i,s.meta={op:"set",key:t},s.error=m(n),(0,sn.emitStep)(e,s),n}},t.delete=async t=>{const n=Date.now(),r=h(e,o,"store","in","",n);r.meta={op:"delete",key:t},(0,sn.emitStep)(e,r);try{await i(t);const r=Date.now(),s=h(e,o,"store","out","",r);s.durationMs=r-n,s.meta={op:"delete",key:t},(0,sn.emitStep)(e,s)}catch(r){const s=Date.now(),i=h(e,o,"store","error","",s);throw i.durationMs=s-n,i.meta={op:"delete",key:t},i.error=m(r),(0,sn.emitStep)(e,i),r}}}async function gn(e,t={}){const n={};for(const[o,r]of Object.entries(t)){const{code:t,config:s={},env:i={}}=r,a=e.logger.scope("store").scope(o),c={collector:e,logger:a,id:o,config:s,env:i,reportError:N(e,"store",o,a)},u=await t(c);n[o]=u}const o=t,r=function(e){const t={};for(const n of Object.keys(e))t[n]="WHITE";const n=[],o=[];function r(s){const i=t[s];if("BLACK"===i)return;if("GRAY"===i){const e=o.indexOf(s),t=o.slice(-1===e?0:e).concat(s).join(" -> ");throw new Error(`Cycle in cache.store chain: ${t}`)}t[s]="GRAY",o.push(s);const a=e[s].cache?.store;if(void 0!==a){if(!(a in e))throw new Error(`Store "${s}" cache.store references "${a}", which is not declared in flow.stores`);r(a)}o.pop(),t[s]="BLACK",n.push(s)}for(const n of Object.keys(e))"WHITE"===t[n]&&r(n);return n}(o);for(const t of r){const r=o[t].cache;if(!r)continue;let s,i;void 0!==r.store?(s=n[r.store],i=r.store):(n.__cache||(n.__cache=dn()),s=n.__cache,i="__cache");const a=r.namespace??t;e.logger.scope("store-cache").scope(t).info(`store "${t}" caches with namespace "${a}:" via ${i}`),n[t]=fn(n[t],{storeId:t,cacheConfig:r,cacheStore:s,namespace:a,logger:e.logger.scope("store-cache").scope(t),collector:e})}for(const[t,o]of Object.entries(n))"__cache"!==t&&pn(e,o,t);return n}async function hn(e){const t=(0,tn.assign)({globalsStatic:{},sessionStatic:{},run:!0,queueMax:1e3},e,{merge:!1,extend:!1}),n={level:e.logger?.level,handler:e.logger?.handler},o=(0,tn.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),void 0!==e.next&&(t.next=e.next),s.push=on(s,e=>zt(s,e)),s.command=function(e,t){return(0,rn.useHooks)(async(n,o,r)=>await(0,rn.tryCatchAsync)(async()=>await t(e,n,o,r),t=>{if(t instanceof rn.FatalError)throw t;return e.status.failed++,e.logger.error("command failed",{...Q(t),command:n}),Rt({ok:!1})})(),"Command",e.hooks,e.logger)}(s,Ht),s.elb=function(e){return async(t,n,o,r,s)=>{if("string"==typeof t&&t.startsWith("walker ")){const o=t.replace("walker ","");return e.command(o,n)}let i;if("string"==typeof t)i={name:t},n&&"object"==typeof n&&!Array.isArray(n)&&(i.data=n);else{if(!t||"object"!=typeof t||Array.isArray(t))return Rt({ok:!1});i={...t},n&&"object"==typeof n&&!Array.isArray(n)&&(i.data={...i.data||{},...n})}return o&&"object"==typeof o&&(i.context=o),r&&Array.isArray(r)&&(i.nested=r),s&&"object"==typeof s&&(i.custom=s),e.push(i)}}(s);const i=e.stores||{};return"undefined"==typeof __WALKEROS_STORES__||__WALKEROS_STORES__?(s.stores=await gn(s,i),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)}}}(i,s.stores,e)):Object.keys(i).length>0&&o.warn("stores: not in this build, config ignored"),s.stores.__cache||(s.stores.__cache=dn()),s.destinations=await $t(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;if("undefined"==typeof __WALKEROS_VALIDATE__||__WALKEROS_VALIDATE__){const t=(0,X.validateStepEntry)(r,"Transformer");if(!t.ok){e.logger.warn(`Transformer ${o} invalid (${t.code}): ${t.reason}. Skipping.`);continue}}const{config:i}=J(r,"before"),{config:a}=J({...r,config:i},"next"),c=Object.keys(s).length>0?{...a,env:s}:a,{cache:u}=r,d=u?{...c,cache:u}:c,l=r.config?.state??r.state;S(e,(0,X.stepId)("transformer",o),l);const f=void 0!==l&&void 0===d.state?{...d,state:l}:d,p=e.logger.scope("transformer").scope(o),g={collector:e,logger:p,id:o,ingest:(0,X.createIngest)(o),config:f,env:s,reportError:N(e,"transformer",o,p)},h=(0,X.getTransformerMapping)(r);for(const t of(0,X.getTransformerMappingWarnings)(r))e.logger.warn(`Transformer ${o}: ${t}`);const m=t??(e=>h?{type:"pass",config:e.config,push:async t=>{const n=await(0,X.processEventMapping)(t,h,e.collector);return!n.ignore&&{event:n.event}}}:{type:"pass",config:e.config,push:e=>({event:e})}),v=await m(g);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!==l&&void 0===v.config?.state&&(v.config={...v.config??{},state:l}),n[o]=v}return n}(s,e.transformers||{}),s}var mn=globalThis;function vn(e){try{const t=mn.window;if(!t)return;t.localStorage.getItem(en.OBSERVE_STORAGE_KEY)===e&&t.localStorage.removeItem(en.OBSERVE_STORAGE_KEY)}catch{}}function yn(e,t){return void 0===t?e:n=>e({...n,release:t})}function wn(e,t){const n=t.observe;if(!n)return;const o=e.name??"default";if("binding"in n){const t=function(){const e=mn.window,t=mn.URLSearchParams;if(!e||!t)return null;try{const n=new t(e.location.search.replace(/^\?/,"")).getAll(en.OBSERVE_STORAGE_KEY);return n.length>0?n[n.length-1]??null:null}catch{return null}}(),r=t??function(){try{return mn.window?.localStorage.getItem(en.OBSERVE_STORAGE_KEY)??null}catch{return null}}();if(!r)return;const s=(0,en.parseObserveCredential)(r);if(!s)return void(null===t?(e.logger.warn("observe: malformed stored credential cleared"),vn(r)):e.logger.warn("observe: malformed credential ignored"));if(s.pb!==n.binding)return void e.logger.warn("observe: credential binding mismatch, credential ignored");let i;!function(e){try{mn.window?.localStorage.setItem(en.OBSERVE_STORAGE_KEY,e)}catch{}}(r),null!==t&&function(){const e=mn.window,t=mn.URLSearchParams;if(e&&t)try{const n=e.location.href,o=n.indexOf("#"),r=o>=0?n.slice(o):"",s=o>=0?n.slice(0,o):n,i=s.indexOf("?"),a=i>=0?s.slice(0,i):s,c=new t(i>=0?s.slice(i+1):"");c.delete(en.OBSERVE_STORAGE_KEY);const u=c.toString();e.history.replaceState({},"",`${a}${u?`?${u}`:""}${r}`)}catch{}}();const a=(0,en.createBatchedPoster)({url:`${n.url}/ingest/${s.ses}`,token:s.secret,headers:{"X-Walkeros-Binding":n.binding},onStatus:t=>{401===t&&(vn(r),i&&e.observers.delete(i))}});i=(0,en.createTelemetryObserver)(function(e,t){return void 0===t?e:n=>e({...n,flowId:t})}(yn(a,e.release),n.flowId),{flowId:n.flowId??o,...void 0!==n.level?{level:n.level}:{},...void 0!==n.sample?{sample:n.sample}:{}}),e.observers.add(i);const c=n.level;return void(void 0!==c&&(e.observeLevel=()=>c))}if("off"===n.level)return;const r=n.level;void 0!==r&&(e.observeLevel=()=>r),e.observers.add((0,en.createTelemetryObserver)(yn((0,en.createBatchedPoster)({url:`${n.url}/ingest/${n.sessionId}`,token:n.token}),e.release),{flowId:o,level:n.level,sample:n.sample}))}async function bn(e){const t=e??{},n=await hn(t);if(t.observers)for(const e of t.observers)n.observers.add(e);"undefined"==typeof __WALKEROS_OBSERVE__||__WALKEROS_OBSERVE__?wn(n,t):t.observe&&n.logger.warn("observe: not in this build, config ignored"),await be(n,t.sources||{});const{consent:o,user:r,globals:s,custom:i}=t;o&&await n.command("consent",o),r&&await n.command("user",r),s&&await n.command("globals",s),i&&await n.command("custom",i),n.config.run&&await n.command("run");let a=n.elb;const c=Object.values(n.sources),u=c.find(e=>e.config.primary);return u?a=u.push:c.length>0&&(a=c[0].push),{collector:n,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{createIngest as r}from"@walkeros/core";import{assign as i,createMappingRoot as a,clone as c,compileCache as u,checkCache as d,storeCache as l,createIngest as f,debounce as p,emitStep as g,getId as h,getGrantedConsent as m,isDefined as w,isFunction as v,isObject as y,OBSERVE_ENV_KEY as b,processEventMapping as k,stepId as S,tryCatchAsync as _,useHooks as E}from"@walkeros/core";import{emitStep as q}from"@walkeros/core";function O(e,t,n){return{traceId:e.source?.trace??t?._meta.trace??n.trace,sourceId:t?._meta.path[0],parentEventId:t?._meta.parentEventId}}function C(e,t,n,o,s,r=Date.now(),i){const a={flowId:e.name??"default",stepId:t,stepType:n,phase:o,eventId:s,timestamp:new Date(r).toISOString(),elapsedMs:r-e.status.startedAt};return i?.traceId&&(a.traceId=i.traceId),i?.sourceId&&(a.sourceId=i.sourceId),i?.parentEventId&&(a.parentEventId=i.parentEventId),a}function x(e){return e instanceof Error?{name:e.name,message:e.message}:{message:String(e)}}function j(e,t,n,o){e.status.in++;const s=C(e,"collector.push","collector","skip","string"==typeof t.id?t.id:"",Date.now(),O(t,n,e));s.skipReason=o.reason,"consent"===o.reason?(s.consent={...o.consent},s.meta={at:o.at,required:{...o.required}}):s.meta={by:o.by??"route",at:o.at},q(e,s)}import{applyState as I,compileState as D}from"@walkeros/core";function A(e,t){return e.storeId&&t.stores[e.storeId]?t.stores[e.storeId]:t.stores.__cache}function $(e){return("undefined"==typeof __WALKEROS_STATE__||__WALKEROS_STATE__)&&e?D(e):void 0}function M(e,t,n,o){return"undefined"==typeof __WALKEROS_STATE__||__WALKEROS_STATE__?I(t,t=>function(e,t){return e?t.stores[e]:t.stores.__cache}(t,e),n,e,o):Promise.resolve(n)}function P(e,t,n){"undefined"==typeof __WALKEROS_STATE__||__WALKEROS_STATE__||void 0===n||e.logger.warn(`state: not in this build, ${t} state ignored`)}import{observeEnv as R}from"@walkeros/core";function W(e,t,n){if(null===e||"object"!=typeof e)return e;if(n>=8||!function(e){if(Array.isArray(e))return!0;const t=Object.getPrototypeOf(e);return t===Object.prototype||null===t}(e))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(W(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:W(r,t,n+1);return s}function T(e){const{simulation:t,...n}=e,o={},s=new WeakMap;for(const[e,t]of Object.entries(n))o[e]="function"==typeof t?t:W(t,s,1);const r=R(o,t);return{wrappedEnv:r.env,calls:r.calls,unresolved:r.unresolved}}function B(e,t){try{return e[t]}catch{return"[unreadable]"}}function K(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(B(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 L(e,t){("undefined"==typeof __WALKEROS_OBSERVE__||__WALKEROS_OBSERVE__)&&t&&t.length>0&&(e.calls=function(e){return e.map(e=>({fn:e.fn,args:K(e.args),ts:e.ts}))}(t))}import{isArray as z,FatalError as F}from"@walkeros/core";import{tryCatch as V,tryCatchAsync as U}from"@walkeros/core";import{stepId as H}from"@walkeros/core";function G(e){if(void 0===e)throw new Error("Collector.Config.queueMax is undefined; defaults must be seeded by collector()");return e}function Q(e,t,n,o){if(!Number.isFinite(n.max)||n.max<=0)throw new Error(`pushBounded: max must be > 0 (got ${n.max})`);if("dropNewest"===(n.onOverflow??"dropOldest"))return e.length>=n.max?(o&&o([t]),{appended:!1,dropped:1}):(e.push(t),{appended:!0,dropped:0});const 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 X(e){N.delete(e)}var J=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 ie(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 ae(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=H(t,n);return(t,i)=>{try{if(i)return s?function(e,t,n,o,s,r){const i=t.dlq=t.dlq||[],a={max:t.config.dlqMax??se},c=Q(i,[o,s],a);if(c.dropped>0){const t=ie(e.status,H("destination",n),"dlq",c.dropped);Y(i,r,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:n,cap:a.max,droppedCount:t})}else i.length<a.max&&X(i);const u=re(e,n);u.failed++,u.dlqSize=i.length,e.status.failed++;const d=te(t.config.breaker);if(d){const o=t.config.id||n;ne(e.status.breakers,H("destination",o),"transport-failure",d.threshold,d.cooldown)}}(e,s,n,i,t,o):e.status.failed++,void o.error("report error",{...ae(t),event:i.name});e.status.connectionErrors[r]=(e.status.connectionErrors[r]??0)+1,o.error("connection error",ae(t))}catch{}}}import{createIngest as ue,FatalError as de,getMappingValue as le,getSpanId as fe,parseTraceparent as pe,isScope as ge,tryCatchAsync as he,compileCache as me,checkCache as we,storeCache as ve,applyUpdate as ye,createMappingRoot as be,stepId as ke}from"@walkeros/core";import{advanceChain as Se,clone as _e,createIngest as Ee,deriveSpanId as qe,emitStep as Oe,FatalError as Ce,isChainContinuation as xe,isObject as je,startChain as Ie,stepId as De,tryCatchAsync as Ae,useHooks as $e,compileCache as Me,checkCache as Pe,storeCache as Re,createMappingRoot as We,validateStepEntry as Te,processEventMapping as Be,getTransformerMapping as Ke,getTransformerMappingWarnings as Le}from"@walkeros/core";function ze(e,t){const n=e.config||{},o=e[t];return void 0!==o?{config:{...n,[t]:o},chainValue:o}:{config:n,chainValue:void 0}}async function Fe(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:tt(t.config.env),reportError:ce(e,"transformer",n,s)};s.debug("init");const i=await $e(t.init,"TransformerInit",e.hooks,e.logger)(r);if(!1===i)return!1;t.config={...i||t.config,env:i?.env||t.config.env,init:!0},s.debug("init done")}return!0}async function Ve(e,t,n,o,s,r){const i=t.type||"unknown",a=e.logger.scope(`transformer:${i}`),c={collector:e,logger:a,id:n,ingest:s,config:t.config,env:{...tt(t.config.env),...r?{respond:r}:{}},reportError:ce(e,"transformer",n,a)};a.debug("push",{event:o.name});const u="string"==typeof o.id?o.id:"",d=O(o,s,e),l=Date.now(),f=C(e,De("transformer",n),"transformer","in",u,l,d);f.inEvent=o,Oe(e,f);try{const s=await $e(t.push,"TransformerPush",e.hooks,e.logger)(o,c),r=Date.now(),i=C(e,De("transformer",n),"transformer","out",u,r,d);return i.durationMs=r-l,i.outEvent=s,Oe(e,i),a.debug("push done"),s}catch(t){const o=Date.now(),s=C(e,De("transformer",n),"transformer","error",u,o,d);throw s.durationMs=o-l,s.error=x(t),Oe(e,s),t}}function Ue(e){return"string"==typeof e.id?e.id:""}function He(e,t){const n=Ue(e);return""!==n&&""===Ue(t)?{...t,id:n}:t}function Ge(e,t,n,o){const s=function(e){return{...e,_meta:{...e._meta,path:[...e._meta.path]}}}(n),r=_e(t),i=Ue(e);if(""===i)return{event:r,ingest:s};s._meta.parentEventId=i;const a=Ue(r);return""!==a&&a!==i||(r.id=qe(i,o)),{event:r,ingest:s}}function Qe(e,t){return{copies:e,respond:t}}function Ne(e,t){if(void 0===t)return e.rest;const n=e.ownNext?e.rest.slice(1):e.rest;return[{route:t,ancestry:e.ancestry},...n]}async function Ye(e,t,n){const o=await Promise.all(t.map((t,n)=>Ae(Xe,t=>(e.collector.logger.scope("transformer:fork").error(`fork ${n} failed`,ae(t)),{copies:[]}))(e,t))),s=[];let r,i=n,a=o.length>0;return o.forEach((e,n)=>{void 0!==t[n].respond&&e.respond&&(i=e.respond),e.stopped||(a=!1),e.stopped||0===e.copies.length?void 0===r&&(r=e.droppedBy):s.push(...e.copies)}),0===s.length?{copies:s,respond:i,...a?{stopped:!0}:{},...void 0!==r?{droppedBy:r}:{}}:Qe(s,i)}async function Xe(e,t){const{ingest:n}=t;let{stack:o,event:s,respond:r}=t,i=t.resume;for(;;){let t,a;if(i)t=i.member,a=i,i=void 0;else{const i=Se(o,We(n,s),e.transformers);if("done"===i.kind)return Qe([{event:s,ingest:n}],r);if("stop"===i.kind)return{copies:[],respond:r,stopped:!0,...void 0!==i.owner?{droppedBy:i.owner}:{}};if("fork"===i.kind){const t=s;return Ye(e,i.branches.map((e,o)=>({stack:e,...Ge(t,t,n,o),respond:void 0})),r)}const a=e.transformers[i.id];t={id:i.id,ancestry:i.ancestry,rest:i.rest,ownNext:!!a&&void 0!==a.config.next}}const c=await Je(e,t,s,n,r,a);if("halt"===c.kind)return c.result;if("fork"===c.kind)return Ye(e,c.copies,r);s=c.event,r=c.respond,o=c.stack}}async function Je(e,t,n,o,s,r){const{collector:i,transformers:a,chainContext:c}=e,u=t.id,d=a[u];let l=n,f=s;const p=(e=t.rest)=>({kind:"continue",event:He(n,l),respond:f,stack:e}),g=e=>({kind:"halt",result:e});if(!d)return i.logger.warn(`Transformer not found: ${u}`),p();const h=d.config?.cache,m=h?Me(h):void 0,w=m?A(m,i):void 0;let v=r?.cacheMiss;if(!r){if(o._meta.path.length>256)return i.logger.error(`Max path length exceeded at ${u}`),g({copies:[],respond:f});o._meta.hops++,o._meta.path.push(u);if(!await Ae(Fe,e=>{if(e instanceof Ce)throw e;return i.status.failed++,i.logger.scope(`transformer:${d.type||"unknown"}`).error("transformer init failed",{transformer:u,...ae(e)}),!1})(i,d,u))return g({copies:[],respond:f});if(c&&void 0!==d.config?.chainMocks?.[c]){const e=d.config.chainMocks[c];return i.logger.scope(`transformer:${d.type||"unknown"}`).debug("chainMock",{chain:c}),l=e,p()}if(void 0!==d.config?.mock)return i.logger.scope(`transformer:${d.type||"unknown"}`).debug("mock"),l=d.config.mock,p();if(d.config?.disabled)return p();if(m&&w){const e=await Pe(m,w,We(o,l));if("HIT"===e?.status&&e.value){if(l=e.value,m.stop){return g({copies:[{event:He(n,l),ingest:o}],respond:f,stopped:!0})}return p()}"MISS"===e?.status&&(v={key:e.key,ttl:e.rule.ttl})}if(void 0!==d.config.before){const e=await et(i,a,u,l,o,f,c),n=e.respond??f;if(0===e.copies.length||e.stopped)return g({...e,respond:n});f=n;const[s]=e.copies;if(e.copies.length>1||s.ingest!==o){const n={member:t,cacheMiss:v};return{kind:"fork",copies:e.copies.map(e=>({stack:t.rest,event:e.event,ingest:e.ingest,respond:void 0,resume:n}))}}l=s.event}}const y=$(d.config?.state),b=y?.filter(e=>"get"===e.mode),k=y?.filter(e=>"set"===e.mode),S=async e=>k&&0!==k.length?M(i,k,e,o):e;b&&b.length>0&&(l=await M(i,b,l,o));const _=await Ae(Ve,e=>(i.status.failed++,i.logger.scope(`transformer:${d.type||"unknown"}`).error("Push failed",ae(e)),!1))(i,d,u,l,o,f);if(!1===_)return g({copies:[],respond:f,droppedBy:u});if(Array.isArray(_)&&1!==_.length){if(0===_.length)return g({copies:[],respond:f});const e=l,n=[];for(let s=0;s<_.length;s++){const r=_[s],i=await S(r.event||e);n.push({stack:Ne(t,r.next),...Ge(e,i,o,s),respond:f})}return{kind:"fork",copies:n}}const E=Array.isArray(_)?_[0]:_;let q;return E&&"object"==typeof E&&(E.respond&&(f=E.respond),E.event&&(l=E.event),q=E.next),l=await S(l),v&&w&&Re(w,v.key,l,v.ttl),p(Ne(t,q))}async function Ze(e,t,n,o,s,r,i){const a=s??Ee("string"==typeof n?n:"chain");return void 0===n?Qe([{event:o,ingest:a}],r):(i&&(a._meta.chainPath=i),Xe({collector:e,transformers:t,chainContext:i},{stack:xe(n)?n:Ie(n),event:o,ingest:a,respond:r}))}async function et(e,t,n,o,s,r,i){const a=t[n],c=a?a.config.before:void 0,u=await Ze(e,t,c,o,s,r,i);return u.stopped&&0===u.copies.length&&!u.droppedBy?{...u,droppedBy:n}:u}function tt(e){return e&&je(e)?e:{}}var nt=1e4;function ot(e){return"number"==typeof e&&e>0?e:nt}var st=class extends Error{constructor(e){super(e),this.name="DestinationTimeoutError"}};function rt(e,t,n){let o;const s=new Promise((e,s)=>{o=setTimeout(()=>s(new st(n)),t)});return Promise.race([e,s]).finally(()=>{o&&clearTimeout(o)})}async function it(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){if(wt(n)&&!St(e,t,n))continue;const o=t.on;let i=!1;await he(()=>rt(Promise.resolve(o(n,r)),nt,`Source "${s}" on(${n}) did not settle within 10000ms`),t=>{if(t instanceof de)throw t;t instanceof st?i=!0:e.status.failed++,e.logger.scope("source").error("source on flush failed",{sourceId:s,type:n,...ae(t)})})(),wt(n)&&!i&&kt(e,t,n)}}function at(e){return Boolean(e.config.init)&&!e.config.require?.length}async function ct(e,t,n){const{code:o,config:s={},env:r={},primary:i,next:a,before:c,cache:u,terminus:d}=n,l=s.state??n.state,f=$(l);P(e,ke("source",t),l);const p=u,g=p?me({...p,stop:p.stop??!0}):void 0,h=d??e.push,m=Boolean(d),w=async(n,o,r)=>{if(m)return h(n);let i;const u="string"==typeof n.id&&""!==n.id?n:{...n,id:fe()};let d=[{event:u,ingest:r.ingest}];if(void 0!==c){const n=`source.${t}.before`,o=await Ze(e,e.transformers||{},c,u,r.ingest,r.respond,n);if(0===o.copies.length)return j(e,u,r.ingest,{reason:"dropped",by:o.droppedBy,at:n}),En({ok:!0,dropped:!0});if(o.stopped)return o.respond&&(r.respond=o.respond),{ok:!0};o.respond&&(r.respond=o.respond),d=o.copies}if(g){const t=A(g,e);if(t){const n=be(r.ingest),o=await we(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 ye(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,a=o.rule.update,c={...n,cache:{status:"MISS"}},u=o.key,d=o.rule.ttl,l=n=>{ve(t,u,n,d),a?i=(async()=>{const t=await ye(n,a,c,e);s(t)})():s(n)};r.respond=l}"MISS"!==o.status||g.stop||ve(t,o.key,!0,o.rule.ttl)}}}f&&f.length>0&&(d=await Promise.all(d.map(async t=>({event:await M(e,f,t.event,t.ingest),ingest:t.ingest}))));let l={ok:!0};for(const e of d)l=await h(e.event,{...o,id:t,ingest:e.ingest,respond:r.respond,mapping:s,preChain:a});return i&&await i,l},v=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 i=await le(n,s.ingest,{collector:e});return{...o,...i,_meta:o._meta}},y=e.logger.scope("source").scope(t),b={...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:y},k={collector:e,logger:y,id:t,config:s,env:b,withScope:async(e,t,n)=>{const o={ingest:await v(e),respond:t};return n({...b,push:(e,t={})=>w(e,t,o),ingest:o.ingest,respond:o.respond})},reportError:ce(e,"source",t,y)},S=await he(o,n=>{if(n instanceof de)throw n;e.status.failed++,e.logger.scope("source").error("source factory failed",{sourceId:t,...ae(n)})})(k);if(!S)return;const _=S.type||"unknown",E=e.logger.scope(_).scope(t);return b.logger=E,i&&(S.config={...S.config,primary:i}),S}async function ut(e,t={}){const n={};for(const[o,s]of Object.entries(t)){const t=await ct(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 he(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,...ae(n)})})(),o||(n.config.init=!0,at(n)&&await it(e,n,t))}return await dt(e),n}async function dt(e){for(const[t,n]of Object.entries(e.sources)){if(at(n))continue;const o=n.config.require;if(!o?.length)continue;const s=o.filter(t=>!yt(e,t));s.length!==o.length&&(n.config.require=s,at(n)&&await it(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=>!yt(e,t));if(n.config&&(n.config.require=s),s.length>0)continue;delete e.pending.destinations[t];const r=qn(n);!1!==r.config.queue&&(r.queuePush=[...e.queue]),e.destinations[t]=r,await Zt(e,r,t)}}function lt(e){if("object"!=typeof e||null===e)return!1;if(!("logger"in e))return!1;const t=e.logger;return"object"==typeof t&&null!==t&&("scope"in t&&"function"==typeof t.scope)}var ft=!1;function pt(){ft||(ft=!0,"undefined"!=typeof console&&"function"==typeof console.warn&&console.warn("walkerOS: ignored an on-dispatch call with a non-collector argument"))}function gt(e,t,n,o){if(n instanceof F)throw n;e.logger.scope("on").error("on callback failed",{kind:t,...o,...ae(n)})}var ht=["consent","user","globals","custom"];function mt(e){return ht.includes(e)}function wt(e){return mt(e)}function vt(e,t){return mt(t)&&Object.keys(e[t]).length>0}function yt(e,t){if(mt(t))return vt(e,t);switch(t){case n.Commands.Run:case n.Commands.Ready:return!0===e.allowed;default:return e.seenEvents.has(String(t))}}function bt(e,t){return e.cellVersion?.[String(t)]??0}function kt(e,t,n){Ut(e,t,n,bt(e,n))}function St(e,t,n){return e.allowed&&bt(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)}var _t=8;function Et(e){const t=e.cascade;if(t&&!qt.has(t))return()=>{};const n=t||{counts:new WeakMap};e.cascade=n,qt.set(n,(qt.get(n)||0)+1);let o=!1;return()=>{if(o)return;o=!0;const t=(qt.get(n)||1)-1;t>0?qt.set(n,t):(qt.delete(n),e.cascade===n&&(e.cascade=void 0))}}var qt=new WeakMap;function Ot(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),i=(s[r]||0)+1;return s[r]=i,i<=_t||(i===_t+1&&e.logger.error("state delivery did not converge",{type:r}),!1)}function Ct(e,t){return{collector:e,logger:e.logger.scope("on").scope(String(t))}}async function xt(e,t,n){if(!lt(e))return void pt();const o=e.on,s=o[t]||[],r=z(n)?n:[n];r.forEach(e=>{s.push(e)}),o[t]=s,Ht(e,t,r)}async function jt(e,t,n,o,s){const r=t.on;if(!r)return!0;const i=wt(o);if(i&&(It.get(t)||Dt.has(t)))return Lt(e,t,o),It.get(t)||At.add(t),!1;const a=i?bt(e,o):0,c=i&&function(e,t,n,o){if(Tt.get(t)?.has(String(n)))return!0;const s=e.delivery?.get(t)?.[String(n)];return void 0===s||s<o-1}(e,t,o,a)?Gt(e,o):s,u=t.type||"unknown",d=e.logger.scope(u).scope("on").scope(o),l={collector:e,logger:d,id:n,config:t.config,data:c,env:Cn(t.env,t.config.env),reportError:ce(e,"destination",n,d,t)};i&&(Ft(t,o),function(e,t,n){let o=Rt.get(e);o||(o={},Rt.set(e,o));const s=String(t),r=o[s];(void 0===r||r<n)&&(o[s]=n)}(t,o,a),Dt.add(t));const f=ot(t.config.timeout);let p=Promise.resolve(),g=!0,h=!1,m=!0;try{await U(()=>(p=Promise.resolve(r(o,l)),rt(p,f,`Destination "${n}" on(${o}) did not settle within ${f}ms`)),t=>{g=!1,t instanceof st&&(h=!0),gt(e,"destination",t,{destId:n,type:o})})(),m=!1}finally{if(i){Dt.delete(t),m&&At.delete(t);const s=Tt.get(t);g?(Ut(e,t,o,a),s?.delete(String(o))):Lt(e,t,o),h?function(e,t,n,o,s,r,i){It.set(t,(It.get(t)||0)+1);const a=()=>{const r=(It.get(t)||0)-1;r>0?It.set(t,r):It.delete(t),Bt(t,o),Wt(t,o,s),Vt(e,t),i.debug("late settle after timeout"),At.delete(t),e.allowed&&e.destinations[n]===t&&function(e,t,n,o){U(async()=>{await Zt(e,t,n),!Mt(t)&&t.queuePush?.length&&await vn(e,void 0,{},{[n]:t})},e=>{o.error("state recovery failed",ae(e))})()}(e,t,n,i)};r.then(a,a)}(e,t,n,o,a,p,d):(Wt(t,o,a),Vt(e,t))}}return i&&!h&&At.delete(t)&&await Zt(e,t,n),g}var It=new WeakMap,Dt=new WeakSet,At=new WeakSet;var $t=new WeakMap;function Mt(e){return $t.get(e)}var Pt=new WeakMap,Rt=new WeakMap;function Wt(e,t,n){const o=Rt.get(e);o&&o[String(t)]===n&&delete o[String(t)]}var Tt=new WeakMap;function Bt(e,t){const n=Tt.get(e);n?n.add(String(t)):Tt.set(e,new Set([String(t)]))}var Kt=new WeakMap;function Lt(e,t,n){!function(e,t,n){const o=e.delivery?.get(t);o&&delete o[String(n)]}(e,t,n),Bt(t,n),$t.set(t,{type:n,since:Date.now()})}function zt(e,t){return!!Tt.get(t)?.size||ht.some(n=>vt(e,n)&&St(e,t,n))}function Ft(e,t){Pt.set(e,(Pt.get(e)||0)+1),$t.set(e,{type:t,since:Date.now()})}function Vt(e,t){const n=(Pt.get(t)||0)-1;n>0?Pt.set(t,n):Pt.delete(t),function(e,t){if(!$t.has(t))return;if(Pt.get(t))return;zt(e,t)||$t.delete(t)}(e,t)}function Ut(e,t,n,o){let s=e.delivery.get(t);s||(s={},e.delivery.set(t,s));const r=String(n),i=s[r];(void 0===i||i<o)&&(s[r]=o)}function Ht(e,t,o,s){if(!lt(e))return void pt();const r=Gt(e,t,s);if(o.length)switch(t){case n.Commands.Consent:!function(e,t,o){const s=o||e.consent,r=Ct(e,n.Commands.Consent);t.forEach(t=>{St(e,t,n.Commands.Consent)&&Ot(e,t,n.Commands.Consent)&&(Object.keys(s).filter(e=>e in t).forEach(n=>{V(t[n],t=>gt(e,"consent",t,{key:n}))(s,r)}),kt(e,t,n.Commands.Consent))})}(e,o,s);break;case n.Commands.Ready:!function(e,t){if(!e.allowed)return;const o=Ct(e,n.Commands.Ready);t.forEach(t=>{V(t,t=>gt(e,"ready",t))(void 0,o)})}(e,o);break;case n.Commands.Run:!function(e,t){if(!e.allowed)return;const o=Ct(e,n.Commands.Run);t.forEach(t=>{V(t,t=>gt(e,"run",t))(void 0,o)})}(e,o);break;case n.Commands.Session:!function(e,t){if(!e.session)return;const o=Ct(e,n.Commands.Session);t.forEach(t=>{V(t,t=>gt(e,"session",t))(e.session,o)})}(e,o);break;default:{const n=Ct(e,t),s=wt(t);o.forEach(o=>{"function"==typeof o&&(s&&!St(e,o,t)||s&&!Ot(e,o,t)||(V(o,n=>gt(e,"generic",n,{type:t}))(r,n),s&&kt(e,o,t)))});break}}}function Gt(e,t,o){if(mt(t))return o||e[t];switch(t){case n.Commands.Session:return e.session;case n.Commands.Config:return o||e.config;default:return}}async function Qt(e,t,n,o,s){if(!t.on)return!1;if(wt(o)&&!St(e,t,o))return!1;if(wt(o)&&!Ot(e,t,o))return!1;const r=wt(o);if(r&&Nt.has(t))return Yt.add(t),!1;const i=r?bt(e,o):0;r&&Nt.add(t);const a=t.on;let c,u=Promise.resolve(),d=!1;try{c=await U(()=>(u=Promise.resolve(a(o,s)),rt(u,nt,`Source "${n}" on(${o}) did not settle within 10000ms`)),t=>{t instanceof st&&(d=!0),gt(e,"source",t,{sourceId:n,type:o})})()}finally{r&&!d&&Nt.delete(t)}if(r)if(d){const o=()=>{Nt.delete(t),Yt.delete(t),e.allowed&&e.sources[n]===t&&U(()=>Xt(e,t,n),t=>{e.logger.scope("on").error("state recovery failed",ae(t))})()};u.then(o,o)}else Ut(e,t,o,i),Yt.delete(t)&&await Xt(e,t,n);return!1===c}var Nt=new WeakSet,Yt=new WeakSet;async function Xt(e,t,n){const o=Et(e);try{for(const o of ht)await Qt(e,t,n,o,Gt(e,o))}finally{o()}}async function Jt(e,t,n,o,s){if(!t.on)return;const r=wt(o);if(r&&!St(e,t,o))return;const i=Rt.get(t)?.[String(o)];if(r&&void 0!==i&&i>=bt(e,o))return;if(r&&!Ot(e,t,o)){if(t.config.init)return void Lt(e,t,o);const n=t.queueOn=t.queueOn||[],s={type:o,data:Gt(e,o)},r=n[n.length-1];return r&&r.type===o?n[n.length-1]=s:n.push(s),kt(e,t,o),void Tt.get(t)?.delete(String(o))}const a=Kt.get(t);if(!t.config.init||a)return t.queueOn=t.queueOn||[],t.queueOn.push({type:o,data:s}),void(r&&(kt(e,t,o),a&&!a.held&&(Ft(t,o),a.held=!0)));await jt(e,t,n,o,s)}async function Zt(e,t,n){if(!t.on)return;const o=Et(e);try{for(const o of ht)(vt(e,o)||Tt.get(t)?.has(String(o)))&&await Jt(e,t,n,o,Gt(e,o))}finally{o()}}function en(e){return(Pt.get(e)||0)>0}async function tn(e){const t=await nn(e);await Promise.all(t.map(({done:e})=>e))}async function nn(e){if(!lt(e))return pt(),[];const t=[];for(const[n,o]of Object.entries(e.destinations)){if(!o.on)continue;const s=async()=>{for(const t of ht)vt(e,t)&&await Jt(e,o,n,t,Gt(e,t))};t.push(sn(n,o,s()))}for(const t of ht){if(!vt(e,t))continue;const n=Gt(e,t);Ht(e,t,e.on[t]||[]),await Promise.all(Object.entries(e.sources).filter(([,e])=>at(e)).map(([o,s])=>Qt(e,s,o,t,n)))}return t}async function on(e,t,n,o){const{ok:s,deliveries:r}=await rn(e,t,n,o);return await Promise.all(r.map(({done:e})=>e)),s}function sn(e,t,n){return n.catch(()=>{}),{id:e,destination:t,done:n}}async function rn(e,t,n,o){if(!lt(e))return pt(),{ok:!0,deliveries:[]};e.seenEvents.add(String(t));let s=n||[];n||(s=e.on[t]||[]);const r=Gt(e,t,o),i=[];for(const[n,o]of Object.entries(e.sources)){if(o.config.require?.length){const e=o.config.require.indexOf(t);-1!==e&&o.config.require.splice(e,1)}o.on&&(at(o)?i.push(Qt(e,o,n,t,r)):(o.queueOn=o.queueOn||[],o.queueOn.push({type:t,data:r})))}const a=[];for(const[n,o]of Object.entries(e.destinations))o.on&&a.push(sn(n,o,Jt(e,o,n,t,r)));let c=!1;if(i.length){c=(await Promise.all(i)).some(Boolean)}for(const[t,n]of Object.entries(e.sources))at(n)&&n.queueOn?.length&&await it(e,n,t);const u=Object.values(e.sources).some(e=>!at(e)&&e.config.require?.length);return(Object.keys(e.pending.destinations).length>0||u)&&await dt(e),Ht(e,t,s,o),{ok:!c,deliveries:a}}var an=1e3,cn=1e3,un=3e4,dn=Object.freeze({batched:!0});function ln(e){return e===dn}var fn=" batch-all";function pn(e){return void 0===e?{}:"number"==typeof e?{wait:e}:{wait:e.wait,size:e.size,age:e.age}}async function gn(e,t){const{code:n,config:o={},env:s={},before:r,next:i,cache:a,state:c}=t;if(!v(n.push))return En({ok:!1,failed:{invalid:{type:"invalid",error:"Destination code must have a push method"}}});const u={...n.config,...o||{init:!1}};let d=r?{...u,before:r}:{...u};i&&(d={...d,next:i}),a&&(d={...d,cache:a}),void 0!==c&&void 0===d.state&&(d={...d,state:c});let l=d.id;if(!l)do{l=h(5,"abcdefghijklmnopqrstuvwxyz")}while(e.destinations[l]||e.pending.destinations[l]);if(P(e,S("destination",l),d.state),d.require?.length){e.pending.destinations[l]=t,await dt(e);const n=e.destinations[l];return n?vn(e,void 0,{},{[l]:n}):En({ok:!0})}const f={...n,config:d,env:Cn(n.env,s)};return e.destinations[l]=f,!1!==f.config.queue&&(f.queuePush=[...e.queue]),await Zt(e,f,l),vn(e,void 0,{},{[l]:f})}function hn(e){for(const t of e)Mt(t.destination)&&(t.drain=!0)}async function mn(e,t){return(await Promise.all(t.map(async({id:t,destination:n,done:o,drain:s})=>{if(await o,s&&e.allowed&&!Mt(n)&&n.queuePush?.length&&e.destinations[t]===n)return vn(e,void 0,{},{[t]:n})}))).filter(w)}function wn(e,t){if(!t.length)return e;const n={...e.done??{}},o={...e.queued??{}},s={...e.failed??{}};for(const e of t){for(const[t,s]of Object.entries(e.done??{}))n[t]=s,delete o[t];for(const[t,n]of Object.entries(e.failed??{}))s[t]=n,delete o[t];Object.assign(o,e.queued??{})}const r={...e,ok:e.ok&&t.every(e=>e.ok)};return delete r.done,delete r.queued,delete r.failed,Object.keys(n).length&&(r.done=n),Object.keys(o).length&&(r.queued=o),Object.keys(s).length&&(r.failed=s),r}async function vn(e,t,n={},o){if(!e.allowed)return En({ok:!1});if(!t)return yn(e,void 0,n,o);const s=await Qn(e,t,n);if(0===s.copies.length)return En({ok:!0,...s.dropped?{dropped:!0}:{}});const r=[];for(const t of s.copies)r.push(await yn(e,t.event,{id:n.id,ingest:t.ingest,respond:s.respond},o));return r[0]}async function yn(e,t,n,o){const{user:s}=e;if(t){const n=G(e.config.queueMax),o=Q(e.queue,t,{max:n});if(o.dropped>0){const t=ie(e.status,S("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&&X(e.queue);e.status.in++}o||(o=e.destinations);const r=e.transformers||{},p=await Promise.all(Object.entries(o||{}).map(async([o,p])=>{if(p.config.disabled)return{id:o,destination:p,skipped:!0};const h=p.config.id||o,w=S("destination",h),v=te(p.config.breaker);if(v&&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,w,v.cooldown))return{id:o,destination:p,skipped:!0};const y=t=>{v&&ne(e.status.breakers,w,t,v.threshold,v.cooldown)},b=()=>{v&&function(e,t){const n=e[t];n&&"half-open"===n.state&&!0===n.probing&&(n.state="open",n.probing=!1)}(e.status.breakers,w)},k=t=>{if(!t.length)return;p.queuePush||(p.queuePush=[]);const n=p.queuePush,s=p.config.id||o,r={max:p.config.queueMax??an};let i=0;for(const e of t){i+=Q(n,e,r).dropped}if(i>0){re(e,s);const t=ie(e.status,S("destination",s),"queue",i);Y(n,e.logger.scope(p.type||"unknown"),"destination.queuePush overflow; oldest events dropped",{buffer:"queuePush",destination:s,cap:r.max,droppedCount:t})}else n.length<r.max&&X(n)};p.on&&p.config.init&&!Mt(p)&&!en(p)&&zt(e,p)&&await Zt(e,p,o);const E=Mt(p);if(E&&!en(p)&&Date.now()-E.since>=ot(p.config.timeout)&&await Zt(e,p,o),Mt(p)){if(b(),!t)return{id:o,destination:p,skipped:!0};const e=[c(t)];return k(e),{id:o,destination:p,queue:e}}let q=(p.queuePush||[]).map(t=>({...t,consent:e.consent}));p.queuePush=[],t&&q.push(c(t));const x=n.ingest?{...n.ingest,_meta:{...n.ingest._meta,path:[...n.ingest._meta.path]}}:f("unknown");if(!q.length&&!p.queueOn?.length)return b(),{id:o,destination:p,skipped:!0};if(!q.length&&p.queueOn?.length){if(!m(p.config.consent,e.consent))return b(),{id:o,destination:p,skipped:!0};let t=!1;try{t=await Sn(e,p,o,!0)}catch(t){e.status.failed++;const n=p.type||"unknown";e.logger.scope(n).error("destination init failed",{error:t instanceof Error?t.message:String(t)}),y("transport-failure")}if(Mt(p))return b(),{id:o,destination:p,skipped:!0};if(!t||!p.queuePush?.length)return b(),{id:o,destination:p,skipped:!t};q=p.queuePush.map(t=>({...t,consent:e.consent})),p.queuePush=[]}const j=t=>{const n=e.consent,s=[],r=t.filter(t=>{const r=m(p.config.consent,n,t.consent);if(r)return t.consent=r,s.push(t),!1;const i=C(e,S("destination",o),"destination","skip","string"==typeof t.id?t.id:"",Date.now(),O(t,x,e));return i.skipReason="consent",n&&(i.consent={...n}),p.config.consent&&(i.meta={required:{...p.config.consent}}),g(e,i),!0});return{allowed:s,skipped:r}},I=e.consent,{allowed:D,skipped:P}=j(q);if(k(P),!D.length)return b(),{id:o,destination:p,queue:q};const R=new Set(p.queuePush);let W=!1;try{W=await Sn(e,p,o,!0)}catch(t){e.status.failed++;const n=p.type||"unknown";e.logger.scope(n).error("destination init failed",{error:t instanceof Error?t.message:String(t)}),y("transport-failure")}if(!W)return b(),{id:o,destination:p,queue:q};if(Mt(p))return b(),k(D),{id:o,destination:p,queue:D};const T=[];if(e.consent!==I){const t=j(D.map(t=>({...t,consent:e.consent})));D.splice(0,D.length,...t.allowed),T.push(...t.skipped)}const B=p.queuePush||[],K=B.filter(e=>!R.has(e));if(K.length){p.queuePush=B.filter(e=>R.has(e));const t=j(K.map(t=>({...t,consent:e.consent})));D.push(...t.allowed),T.push(...t.skipped)}if(k(T),!D.length)return b(),T.length?{id:o,destination:p,queue:T}:{id:o,destination:p,skipped:!0};let L,z;p.dlq||(p.dlq=[]);const F=p.config.before,V=p.config.next,U=p.config?.cache,H=U?u(U):void 0,G=H?A(H,e):void 0,N=$(p.config?.state),J=N?.filter(e=>"get"===e.mode),Z=N?.filter(e=>"set"===e.mode);let oe=0,ce=0,ue=0;return await Promise.all(D.map(async t=>{let c,u;if(t.user=i(s,t.user),H?.stop&&G){const e=a(x,t),n=await d(H,G,e);if("HIT"===n?.status)return t;"MISS"===n?.status&&(c={key:n.key,ttl:n.rule.ttl})}let f=[{event:t,ingest:x}],h=n.respond;if(void 0!==F){const s=`destination.${o}.before`,i=await Ze(e,r,F,t,x,n.respond,s);if(0===i.copies.length){const n=C(e,S("destination",o),"destination","skip","string"==typeof t.id?t.id:"",Date.now(),O(t,x,e));return n.skipReason="dropped",n.meta={by:i.droppedBy??"route",at:s},g(e,n),t}i.respond&&(h=i.respond),f=i.copies.map(e=>({event:e.event,ingest:e.ingest}))}const m=async(t,n,s)=>{let i=s,c=!1;if(H&&!H.stop&&G){const e=a(n,t??void 0),o=await d(H,G,e);if("HIT"===o?.status)return!1;"MISS"===o?.status&&(i={key:o.key,ttl:o.rule.ttl},c=!0)}J&&J.length>0&&t&&(t=await M(e,J,t,n));const f=Date.now();let g=!1;const m=await _(_n,n=>{const s=p.type||"unknown";e.logger.scope(s).error("Push failed",{...ae(n),event:t.name}),L=n,g=!0;const r=p.dlq,i=p.config.id||o,a={max:p.config.dlqMax??se},c=Q(r,[t,n],a);if(c.dropped>0){re(e,i);const t=ie(e.status,S("destination",i),"dlq",c.dropped);Y(r,e.logger.scope(p.type||"unknown"),"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:i,cap:a.max,droppedCount:t})}else r.length<a.max&&X(r)})(e,p,o,t,n,h);if(oe+=Date.now()-f,i&&G&&void 0===p.config.mock&&(c?l(G,i.key,m??!0,i.ttl):void 0===u&&(u=m??!0)),!g&&!ln(m)&&Z&&Z.length>0&&t&&(t=await M(e,Z,t,n)),void 0===m||ln(m)||(z=m),ln(m)&&ce++,!g&&V){void 0!==m&&(n._response=m);const s=await Ze(e,r,V,t,n,h,`destination.${o}.next`);s.respond&&(h=s.respond)}return!0};for(const e of f)await m(e.event,e.ingest,c)&&ue++;return c&&G&&void 0!==u&&void 0===p.config.mock&&l(G,c.key,u,c.ttl),t})),{id:o,destination:p,error:L,response:z,totalDuration:oe,batchedCount:ce,allowedCount:D.length,pushedCount:ue,canonicalId:h,breakerConfig:v}})),h={},w={},v={};for(const t of p){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 i=t.breakerConfig,a=t.canonicalId?S("destination",t.canonicalId):void 0,c=t=>{i&&a&&ne(e.status.breakers,a,t,i.threshold,i.cooldown)};if(t.error)o.error=t.error,v[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)w[t.id]=o;else{const n=t.batchedCount??0,i=t.allowedCount??0,a=t.pushedCount??i;(Math.max(0,a-n)>0||0===i)&&(h[t.id]=o,s.count++,s.lastAt=r,s.duration+=t.totalDuration||0,e.status.out++,c("success"))}}return En({event:t,...Object.keys(h).length&&{done:h},...Object.keys(w).length&&{queued:w},...Object.keys(v).length&&{failed:v}})}async function bn(e,t,n,o){const s=await async function(e,t,n,o){const s=t.type||"unknown",r=e.logger.scope(s),i={collector:e,logger:r,id:o,config:t.config,env:Cn(t.env,t.config.env),reportError:ce(e,"destination",o,r,t)};r.debug("init");const a=Date.now();let c;g(e,C(e,S("destination",o),"destination","init","",a));try{c=await E(n,"DestinationInit",e.hooks,e.logger)(i)}catch(t){const n=Date.now(),s=C(e,S("destination",o),"destination","error","",n);throw s.durationMs=n-a,s.error=x(t),g(e,s),t}return!1!==c&&{...c||t.config,init:!0}}(e,t,n,o);if(!1===s)return!1;if(t.config=s,t.queueOn?.length){const n=Et(e);!function(e){const t=e.queueOn?.find(({type:e})=>wt(e));t&&Ft(e,t.type),Kt.set(e,{held:!!t})}(t);try{for(let n=t.queueOn?.shift();n;n=t.queueOn?.shift())await jt(e,t,o,n.type,n.data)}catch(n){for(const{type:n}of t.queueOn||[])wt(n)&&Lt(e,t,n);throw t.queueOn=[],n}finally{!function(e,t){const n=Kt.get(t);Kt.delete(t),n?.held&&Vt(e,t)}(e,t),n()}}return e.logger.scope(t.type||"unknown").debug("init done"),!0}var kn=new WeakMap;async function Sn(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=kn.get(t);if(s)return s;const r=bn(e,t,t.init,n);kn.set(t,r);try{return await r}finally{kn.delete(t)}}return!0}async function _n(e,t,n,o,s,r){const{config:i}=t,a=await k(o,i,e);if(a.ignore)return!1;const c=t.type||"unknown",u=e.logger.scope(c),d={collector:e,logger:u,id:n,config:i,data:a.data,rule:a.mapping,ingest:s,env:{...Cn(t.env,i.env),...r?{respond:r}:{}},reportError:ce(e,"destination",n,u,t)};if(void 0!==i.mock)return u.debug("mock",{event:a.event.name}),i.mock;const l=a.mapping,f=void 0!==l?.batch,h=f?a.mappingKey||"* *":fn;if((f||void 0!==i.batch)&&t.pushBatch&&void 0===i.mock){if(t.batches=t.batches||{},!t.batches[h]){const o={key:h,entries:[],events:[],data:[]},s=pn(l?.batch),r=pn(i.batch),a=s.wait??r.wait??un,c=s.size??r.size??cn,d=s.age??r.age??un,m=Cn(t.env,i.env),w=p(async()=>{const o=t.batches[h],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 a=r.entries[0],c={collector:e,logger:u,id:n,config:i,data:void 0,rule:o.isDefault?void 0:a.rule,ingest:a.ingest,env:{...m,...a.respond?{respond:a.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),p=S("destination",d),w=t=>{f&&ne(e.status.breakers,p,t,f.threshold,f.cooldown)},v=Date.now(),b=new Map;let k,q=!1;const j=n=>{const o=t.dlq=t.dlq||[],s={max:t.config.dlqMax??se};let r=0;for(const e of n){r+=Q(o,e,s).dropped}if(r>0){const t=ie(e.status,S("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&&X(o);l.failed+=n.length,l.dlqSize=o.length,e.status.failed+=n.length};let I=r.entries.length;const D=ot(i.timeout),A=await _((o,s)=>rt(Promise.resolve(E(t.pushBatch,"DestinationPushBatch",e.hooks,e.logger)(o,s)),D,`Destination "${n}" batch delivery timed out after ${D}ms`),e=>{I=0,q=!0,k=e,j(r.entries.map(t=>[t.event,e])),w("transport-failure"),u.error("Push batch failed",{error:e instanceof Error?e.message:String(e),entries:r.entries.length})})(r,c);if(y($=A)&&Array.isArray($.failed)&&A.failed.length>0){const e=[];for(const t of A.failed){const n=r.entries[t.index];if(!n||b.has(t.index))continue;const o=t.error??new Error(`Push batch entry ${t.index} failed (no per-row error provided)`);b.set(t.index,o),e.push([n.event,o])}if(e.length>0){j(e),I=Math.max(0,r.entries.length-e.length);const t=new Map;for(const[,n]of e){const e=n instanceof Error&&"code"in n&&"string"==typeof n.code?n.code:n instanceof Error?n.name:"Error",o=t.get(e);o?o.count++:t.set(e,{code:e,count:1,message:n instanceof Error?n.message:String(n)})}u.error("Push batch partial failure",{failed:e.length,delivered:I,entries:r.entries.length,causes:[...t.values()]})}}var $;const M=Date.now();r.entries.forEach((t,o)=>{const s=q||b.has(o),i=O(t.event,t.ingest,e),a=C(e,S("destination",n),"destination",s?"error":"flush","string"==typeof t.event.id?t.event.id:"",M,i);if(a.batch={size:r.entries.length,index:o},a.durationMs=M-v,s){const e=q?k:b.get(o);a.error=x(e)}g(e,a)}),u.debug("push batch done"),l.inFlightBatch=Math.max(0,(l.inFlightBatch??0)-r.entries.length),I>0&&(l.count+=I,l.lastAt=Date.now(),e.status.out+=I,w("success"))},{wait:a,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:a.event,ingest:s,respond:r,rule:l,data:a.data}),c.batched.events.push(a.event),w(a.data)&&c.batched.data.push(a.data);const d="string"==typeof a.event.id?a.event.id:"",m=O(o,s,e),v=Date.now(),b=C(e,S("destination",n),"destination","in",d,v,m);a.mappingKey&&(b.mappingKey=a.mappingKey),a.event.consent&&(b.consent={...a.event.consent}),b.inEvent=a.event,g(e,b);const k=C(e,S("destination",n),"destination","out",d,v,m);a.mappingKey&&(k.mappingKey=a.mappingKey),k.outEvent=a.event,k.batch={size:c.batched.entries.length,index:c.batched.entries.length-1},g(e,k);const q=t.config.id||n,j=re(e,q);return j.inFlightBatch=(j.inFlightBatch??0)+1,c.batchFn(),dn}{let r;if(u.debug("push",{event:a.event.name}),("undefined"==typeof __WALKEROS_OBSERVE__||__WALKEROS_OBSERVE__)&&"trace"===e.observeLevel?.()&&Array.isArray(t.calls)&&t.calls.length>0){const e=T({...d.env,simulation:t.calls});d.env=e.wrappedEnv,r=e.calls,e.unresolved.length>0&&(e.wrappedEnv[b]={paths:e.unresolved,record:(t,n)=>e.calls.push({fn:t,args:n,ts:Date.now()})})}const c="string"==typeof a.event.id?a.event.id:"",l=O(o,s,e),f=Date.now(),p=C(e,S("destination",n),"destination","in",c,f,l);a.mappingKey&&(p.mappingKey=a.mappingKey),a.event.consent&&(p.consent={...a.event.consent}),p.inEvent=a.event,g(e,p);try{const o=ot(i.timeout),s=await rt(Promise.resolve(E(t.push,"DestinationPush",e.hooks,e.logger)(a.event,d)),o,`Destination "${n}" delivery timed out after ${o}ms`),p=Date.now(),h=C(e,S("destination",n),"destination","out",c,p,l);return h.durationMs=p-f,h.outEvent=a.event,L(h,r),w(s)&&(h.meta={...h.meta,response:s}),a.mappingKey&&(h.mappingKey=a.mappingKey),g(e,h),u.debug("push done"),s}catch(t){const o=Date.now(),s=C(e,S("destination",n),"destination","error",c,o,l);throw s.durationMs=o-f,s.error=x(t),L(s,r),a.mappingKey&&(s.mappingKey=a.mappingKey),g(e,s),t}}}function En(e){return{ok:!e?.failed,...e}}function qn(e){const{code:t,config:n={},env:o={},cache:s,state:r}=e,{config:i}=ze(e,"before"),{config:a}=ze({...e,config:i},"next"),c={...t.config,...n,...a};s&&(c.cache=s),void 0!==r&&void 0===c.state&&(c.state=r);const u=Cn(t.env,o);return{...t,config:c,env:u}}async function On(e,t={}){const n={};for(const[o,s]of Object.entries(t))P(e,S("destination",o),s.config?.state??s.code.config?.state??s.state),s.config?.require?.length?e.pending.destinations[o]=s:n[o]=qn(s);return n}function Cn(e,t){return e||t?t?e&&y(e)&&y(t)?{...e,...t}:t:e:{}}import{assign as xn,getSpanId as jn,getTraceId as In,InvalidEventError as Dn,isFunction as An,isString as $n}from"@walkeros/core";import{isObject as Mn}from"@walkeros/core";var Pn=5e3;async function Rn(e){const t=e.logger;await Wn(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`)),Pn)})])}catch(t){s.error(`destination '${e}' batch flush failed: ${t}`)}finally{n&&clearTimeout(n)}})});await Promise.allSettled(n)}(e.destinations,t),await Wn(e.destinations,"destination",t),await Wn(e.transformers,"transformer",t),await Wn(e.stores,"store",t)}async function Wn(e,t,n){const o=Object.entries(e).map(async([e,o])=>{const s=o.destroy;if(!s)return;const r=o.type||"unknown",i=n.scope(r),a={id:e,config:o.config,env:o.env??{},logger:i};let c;try{await Promise.race([s(a),new Promise((n,o)=>{c=setTimeout(()=>o(new Error(`${t} '${e}' destroy timed out`)),Pn)})])}catch(n){i.error(`${t} '${e}' destroy failed: ${n}`)}finally{c&&clearTimeout(c)}});await Promise.allSettled(o)}function Tn(e,t){e.stateVersion++,e.cellVersion[t]=e.stateVersion}async function Bn(e,t,o){let r,i,a=!1;const c=[],u=Et(e);try{return await async function(){switch(t){case n.Commands.Config:Mn(o)&&(xn(e.config,o,{shallow:!1,merge:!1}),i=o,a=!0);break;case n.Commands.Consent:if(Mn(o)){const{update:t}=s(e,o);Tn(e,n.Commands.Consent),i=t,a=!0}break;case n.Commands.Custom:Mn(o)&&(e.custom=xn(e.custom,o),Tn(e,n.Commands.Custom),i=o,a=!0);break;case n.Commands.Destination:Mn(o)&&"code"in o&&Mn(o.code)&&(r=await gn(e,o));break;case n.Commands.Globals:Mn(o)&&(e.globals=xn(e.globals,o),Tn(e,n.Commands.Globals),i=o,a=!0);break;case n.Commands.Hook:if(Mn(o)&&$n(o.name)&&An(o.fn)){const{name:t,fn:n}=o;e.hooks[t]=n,i=o,a=!0}break;case n.Commands.On:if(Mn(o)&&$n(o.type)){const{type:t,rules:n}=o;await xt(e,t,n)}break;case n.Commands.Ready:a=!0;break;case n.Commands.Run:r=await Hn(e,o,c),a=!0;break;case n.Commands.Session:a=!0;break;case n.Commands.Shutdown:e.hasShutdown||(e.hasShutdown=!0,await Rn(e));break;case n.Commands.User:Mn(o)&&(xn(e.user,o,{shallow:!1}),Tn(e,n.Commands.User),i=o,a=!0);break;default:return e.logger.warn("unknown command",{command:t}),En({ok:!1})}if(a){const n=await rn(e,t,void 0,i);c.push(...n.deliveries),hn(n.deliveries);const o=wn(await vn(e),await mn(e,c));if(r&&!1===r.ok){const e={...o.failed??{},...r.failed??{}};r={...o,ok:!1,...Object.keys(e).length>0?{failed:e}:{}}}else r=o}return r||En({ok:!0})}()}finally{u()}}function Kn(e,t){return{timing:Math.round((Date.now()-e.timing)/10)/100,source:{type:"collector",schema:"4"},...t}}function Ln(e,t,n){return Fn(e,t,n,{globals:e.globals,user:e.user,consent:e.consent})}function zn(e,t,n){return Fn(e,Kn(e,t),n,{globals:{},user:{},consent:{}})}function Fn(e,t,n,o){const s=t.name;if("string"!=typeof s)throw new Dn(void 0===s?"Event name is required":"Event name is invalid");if(!s)throw new Dn("Event name is required");const[r,i]=s.split(" ");if(!r||!i)throw new Dn("Event name is invalid");const{timestamp:a=Date.now(),name:c=`${r} ${i}`,data:u={},context:d={},globals:l={},custom:f={},user:p=o.user,nested:g=[],consent:h=o.consent,id:m=jn(),trigger:w="",entity:v=r,action:y=i,timing:b=0,source:k={type:"collector",schema:"4"}}=t,S=k??{type:"collector",schema:"4"},_=S.count??(e.count+=1),E=S.trace??n?._meta.trace??e.trace,q={...S,count:_};void 0!==E&&(q.trace=E);const O=e.name??S.platform??"default",C=e.release??"4.7.2-next-1791213015481";q.release={...S.release,[O]:C};return{name:c,data:u,context:d,globals:xn(o.globals,l),custom:f,user:p,nested:g,consent:h,id:m,trigger:w,entity:v,action:y,timestamp:a,timing:b,source:q}}function Vn(e,t,n){return Ln(e,Kn(e,t),n)}async function Un(e,t){const n=[];return wn(await Hn(e,t,n),await mn(e,n))}async function Hn(e,t,o){e.allowed=!0,e.timing=Date.now(),e.trace=In(),e.count=0,t&&(t.consent&&(e.consent=xn(e.consent,t.consent),Tn(e,n.Commands.Consent)),t.user&&(e.user=xn(e.user,t.user),Tn(e,n.Commands.User)),t.globals&&(e.globals=xn(e.config.globalsStatic||{},t.globals),Tn(e,n.Commands.Globals)),t.custom&&(e.custom=xn(e.custom,t.custom),Tn(e,n.Commands.Custom))),Object.values(e.destinations).forEach(e=>{e.queuePush=[]}),e.queue=[],e.round++,await dt(e);const s=await nn(e);let r=!0;const i={};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:o}of t){const t=await e.push(n,o);!1===t.ok&&(r=!1),t.failed&&Object.assign(i,t.failed)}}hn(s);const a=await vn(e);if(o.push(...s),r)return a;const c={...a.failed??{},...i};return{...a,ok:!1,...Object.keys(c).length>0?{failed:c}:{}}}var Gn="collector.next";async function Qn(e,t,n={}){const o=n.ingest??r(n.id||"unknown"),s=e.config.next;if(void 0===s)return{copies:[{event:t,ingest:o}],respond:n.respond};const i=await Ze(e,e.transformers||{},s,t,o,n.respond,Gn),a=i.respond??n.respond;return 0===i.copies.length?(e.logger.debug("Event dropped by collector.next"+(i.droppedBy?` (${i.droppedBy})`:"")),j(e,t,o,{reason:"dropped",by:i.droppedBy,at:Gn}),{copies:[],respond:a,dropped:!0}):i.stopped?{copies:[],respond:a}:{copies:i.copies.map(t=>({event:zn(e,t.event,t.ingest),ingest:t.ingest})),respond:a}}import{OBSERVE_STORAGE_KEY as Nn,createBatchedPoster as Yn,createTelemetryObserver as Xn,parseObserveCredential as Jn}from"@walkeros/core";import{assign as Zn,createLogger as eo}from"@walkeros/core";import{createIngest as to,emitStep as no,FatalError as oo,getGrantedConsent as so,getSpanId as ro,InvalidEventError as io,processEventMapping as ao,tryCatchAsync as co,useHooks as uo}from"@walkeros/core";function lo(e,t){const n=uo(async(n,o={})=>await co(async()=>{if(!e.allowed){const t=G(e.config.queueMax),s=Q(e.preRunQueue,{event:n,options:o},{max:t});if(s.dropped>0){const n=ie(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&&X(e.preRunQueue);return e.logger.debug("event held until run",{name:n.name,dropped:s.dropped}),En({ok:!0})}const s=Date.now(),{id:r,ingest:i,respond:a,mapping:c,preChain:u,include:d,exclude:l}=o;let f=a,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;let h=i??to(r||"unknown");if(c){const t=await ao(p,c,e);if(t.ignore)return En({ok:!0});if(c.consent){const n=t.event.consent;if(!so(c.consent,e.consent,n)){const o=r?`source.${r}`:"collector.push";return e.logger.debug("Event dropped by source consent",{at:o,required:c.consent}),j(e,t.event,h,{reason:"consent",at:o,required:c.consent,consent:{...e.consent,...n}}),En({ok:!0,dropped:!0})}}p=t.event}if(void 0!==u){const n=r?`source.${r}.next`:void 0,o=await Ze(e,e.transformers||{},u,p,h,f,n);if(0===o.copies.length)return e.logger.debug("Event dropped by transformer chain"+(o.droppedBy?` (${o.droppedBy})`:"")),j(e,p,h,{reason:"dropped",by:o.droppedBy,at:n??"collector.push.preChain"}),En({ok:!0,dropped:!0});if(o.stopped)return o.respond&&(f=o.respond),En({ok:!0});if(o.respond&&(f=o.respond),o.copies.length>1){const n=await Promise.all(o.copies.map(async n=>{const o=Ln(e,t(n.event),n.ingest);return vn(e,o,{id:r,ingest:n.ingest,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+=o.copies.length,t.lastAt=Date.now(),t.duration+=Date.now()-s}return n[0]??En({ok:!0})}p=o.copies[0].event,h=o.copies[0].ingest}const m=Vn(e,p,h),w=await vn(e,m,{id:r,ingest:h,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 w},t=>{if(t instanceof oo)throw t;if(t instanceof io){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}),En({ok:!1,invalid:!0,error:t.message})}return e.status.failed++,e.logger.error("push failed",{...ae(t),event:n.name}),En({ok:!1})})(),"Push",e.hooks,e.logger);return async(t,o)=>{const s="string"==typeof t.id&&""!==t.id?t:{...t,id:ro()},r="string"==typeof s.id?s.id:"",i=O(s,o?.ingest,e),a=Date.now(),c=C(e,"collector.push","collector","in",r,a,i);c.inEvent=s,no(e,c);try{const t=await n(s,o),c=Date.now(),u=C(e,"collector.push","collector","out",r,c,i);return u.durationMs=c-a,u.outEvent=t,no(e,u),t}catch(t){const n=Date.now(),o=C(e,"collector.push","collector","error",r,n,i);throw o.durationMs=n-a,o.error=x(t),no(e,o),t}}}import{FatalError as fo,useHooks as po,tryCatchAsync as go}from"@walkeros/core";import{emitStep as ho,useHooks as mo}from"@walkeros/core";function wo(e={}){const t=e.maxEntries??1e4,n=e.lowWaterMark??.8,o=e.sweepIntervalMs??6e4,s=Math.floor(t*n),r=new Map,i={hits:0,misses:0,populates:0,writes:0,deletes:0,evictions_entries:0,evictions_ttl:0};let a;o>0&&(a=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++);i.evictions_ttl+=t},o),a&&"function"==typeof a.unref&&a.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),i.evictions_ttl++,void i.misses++):(r.delete(e),r.set(e,t),i.hits++,t.value);i.misses++},set(e,n,o){const a=!r.has(e);a||r.delete(e),r.set(e,{value:n,expires:void 0!==o?Date.now()+o:void 0}),i.writes++,a&&i.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++}i.evictions_entries+=n}()},delete(e){r.delete(e)&&i.deletes++},get counters(){return{...i}},destroy(){void 0!==a&&(clearInterval(a),a=void 0),r.clear()}}}import{compileMatcher as vo,emitStep as yo,readCacheEnvelope as bo,wrapCacheEnvelope as ko}from"@walkeros/core";function So(e,t){const{cacheConfig:n,cacheStore:o,namespace:s,logger:r,storeId:i,collector:a}=t,c=(e,t)=>{if(!a)return;const n=C(a,`store.${i}`,"store","in","");n.meta={op:"cache",cached:"hit"===t,status:t,key:e},yo(a,n)},u={hits:0,misses:0,populates:0,writes:0,deletes:0,inflight_dedups:0},d=n.rules.map(e=>({match:e.match?vo(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=bo(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 i=p.get(n);if(i)return u.inflight_dedups++,c(t,"hit"),i;u.misses++,c(t,"miss");const a=(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,ko(s,e),e),u.populates++}catch(e){g("set",t,e)}return s}finally{p.delete(n)}})();return p.set(n,a),a},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),ko(n,e),e)}catch(e){g("set",t,e)}},async delete(t){u.deletes++,await e.delete(t);try{await o.delete(l(t))}catch(e){g("delete",t,e)}}};function g(e,t,n){const o=`store-cache(${i}): cache ${e} failed for "${t}"; backing succeeded, continuing`;r?r.warn(o,ae(n)):console.warn(o,n)}}function _o(e,t,n){const o=`store.${n}`,s=mo(t.get,"StoreGet",e.hooks,e.logger),r=mo(t.set,"StoreSet",e.hooks,e.logger),i=mo(t.delete,"StoreDelete",e.hooks,e.logger);t.get=async t=>{const n=Date.now(),r=C(e,o,"store","in","",n);r.meta={op:"get",key:t},ho(e,r);try{const r=await s(t),i=Date.now(),a=C(e,o,"store","out","",i);return a.durationMs=i-n,a.meta={op:"get",key:t},ho(e,a),r}catch(s){const r=Date.now(),i=C(e,o,"store","error","",r);throw i.durationMs=r-n,i.meta={op:"get",key:t},i.error=x(s),ho(e,i),s}},t.set=async(t,n,s)=>{const i=Date.now(),a=C(e,o,"store","in","",i);a.meta={op:"set",key:t},ho(e,a);try{await r(t,n,s);const a=Date.now(),c=C(e,o,"store","out","",a);c.durationMs=a-i,c.meta={op:"set",key:t},ho(e,c)}catch(n){const s=Date.now(),r=C(e,o,"store","error","",s);throw r.durationMs=s-i,r.meta={op:"set",key:t},r.error=x(n),ho(e,r),n}},t.delete=async t=>{const n=Date.now(),s=C(e,o,"store","in","",n);s.meta={op:"delete",key:t},ho(e,s);try{await i(t);const s=Date.now(),r=C(e,o,"store","out","",s);r.durationMs=s-n,r.meta={op:"delete",key:t},ho(e,r)}catch(s){const r=Date.now(),i=C(e,o,"store","error","",r);throw i.durationMs=r-n,i.meta={op:"delete",key:t},i.error=x(s),ho(e,i),s}}}async function Eo(e,t={}){const n={};for(const[o,s]of Object.entries(t)){const{code:t,config:r={},env:i={}}=s,a=e.logger.scope("store").scope(o),c={collector:e,logger:a,id:o,config:r,env:i,reportError:ce(e,"store",o,a)},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 i=t[r];if("BLACK"===i)return;if("GRAY"===i){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 a=e[r].cache?.store;if(void 0!==a){if(!(a in e))throw new Error(`Store "${r}" cache.store references "${a}", which is not declared in flow.stores`);s(a)}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,i;void 0!==s.store?(r=n[s.store],i=s.store):(n.__cache||(n.__cache=wo()),r=n.__cache,i="__cache");const a=s.namespace??t;e.logger.scope("store-cache").scope(t).info(`store "${t}" caches with namespace "${a}:" via ${i}`),n[t]=So(n[t],{storeId:t,cacheConfig:s,cacheStore:r,namespace:a,logger:e.logger.scope("store-cache").scope(t),collector:e})}for(const[t,o]of Object.entries(n))"__cache"!==t&&_o(e,o,t);return n}async function qo(e){const t=Zn({globalsStatic:{},sessionStatic:{},run:!0,queueMax:1e3},e,{merge:!1,extend:!1}),n={level:e.logger?.level,handler:e.logger?.handler},o=eo(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),void 0!==e.next&&(t.next=e.next),r.push=lo(r,e=>Kn(r,e)),r.command=function(e,t){return po(async(n,o,s)=>await go(async()=>await t(e,n,o,s),t=>{if(t instanceof fo)throw t;return e.status.failed++,e.logger.error("command failed",{...ae(t),command:n}),En({ok:!1})})(),"Command",e.hooks,e.logger)}(r,Bn),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 i;if("string"==typeof t)i={name:t},n&&"object"==typeof n&&!Array.isArray(n)&&(i.data=n);else{if(!t||"object"!=typeof t||Array.isArray(t))return En({ok:!1});i={...t},n&&"object"==typeof n&&!Array.isArray(n)&&(i.data={...i.data||{},...n})}return o&&"object"==typeof o&&(i.context=o),s&&Array.isArray(s)&&(i.nested=s),r&&"object"==typeof r&&(i.custom=r),e.push(i)}}(r);const i=e.stores||{};return"undefined"==typeof __WALKEROS_STORES__||__WALKEROS_STORES__?(r.stores=await Eo(r,i),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)}}}(i,r.stores,e)):Object.keys(i).length>0&&o.warn("stores: not in this build, config ignored"),r.stores.__cache||(r.stores.__cache=wo()),r.destinations=await On(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;if("undefined"==typeof __WALKEROS_VALIDATE__||__WALKEROS_VALIDATE__){const t=Te(s,"Transformer");if(!t.ok){e.logger.warn(`Transformer ${o} invalid (${t.code}): ${t.reason}. Skipping.`);continue}}const{config:i}=ze(s,"before"),{config:a}=ze({...s,config:i},"next"),c=Object.keys(r).length>0?{...a,env:r}:a,{cache:u}=s,d=u?{...c,cache:u}:c,l=s.config?.state??s.state;P(e,De("transformer",o),l);const f=void 0!==l&&void 0===d.state?{...d,state:l}:d,p=e.logger.scope("transformer").scope(o),g={collector:e,logger:p,id:o,ingest:Ee(o),config:f,env:r,reportError:ce(e,"transformer",o,p)},h=Ke(s);for(const t of Le(s))e.logger.warn(`Transformer ${o}: ${t}`);const m=t??(e=>h?{type:"pass",config:e.config,push:async t=>{const n=await Be(t,h,e.collector);return!n.ignore&&{event:n.event}}}:{type:"pass",config:e.config,push:e=>({event:e})}),w=await m(g);void 0!==s.before&&void 0===w.config?.before&&(w.config={...w.config??{},before:s.before}),void 0!==s.next&&void 0===w.config?.next&&(w.config={...w.config??{},next:s.next}),void 0!==l&&void 0===w.config?.state&&(w.config={...w.config??{},state:l}),n[o]=w}return n}(r,e.transformers||{}),r}var Oo=globalThis;function Co(e){try{const t=Oo.window;if(!t)return;t.localStorage.getItem(Nn)===e&&t.localStorage.removeItem(Nn)}catch{}}function xo(e,t){return void 0===t?e:n=>e({...n,release:t})}function jo(e,t){const n=t.observe;if(!n)return;const o=e.name??"default";if("binding"in n){const t=function(){const e=Oo.window,t=Oo.URLSearchParams;if(!e||!t)return null;try{const n=new t(e.location.search.replace(/^\?/,"")).getAll(Nn);return n.length>0?n[n.length-1]??null:null}catch{return null}}(),s=t??function(){try{return Oo.window?.localStorage.getItem(Nn)??null}catch{return null}}();if(!s)return;const r=Jn(s);if(!r)return void(null===t?(e.logger.warn("observe: malformed stored credential cleared"),Co(s)):e.logger.warn("observe: malformed credential ignored"));if(r.pb!==n.binding)return void e.logger.warn("observe: credential binding mismatch, credential ignored");let i;!function(e){try{Oo.window?.localStorage.setItem(Nn,e)}catch{}}(s),null!==t&&function(){const e=Oo.window,t=Oo.URLSearchParams;if(e&&t)try{const n=e.location.href,o=n.indexOf("#"),s=o>=0?n.slice(o):"",r=o>=0?n.slice(0,o):n,i=r.indexOf("?"),a=i>=0?r.slice(0,i):r,c=new t(i>=0?r.slice(i+1):"");c.delete(Nn);const u=c.toString();e.history.replaceState({},"",`${a}${u?`?${u}`:""}${s}`)}catch{}}();const a=Yn({url:`${n.url}/ingest/${r.ses}`,token:r.secret,headers:{"X-Walkeros-Binding":n.binding},onStatus:t=>{401===t&&(Co(s),i&&e.observers.delete(i))}});i=Xn(function(e,t){return void 0===t?e:n=>e({...n,flowId:t})}(xo(a,e.release),n.flowId),{flowId:n.flowId??o,...void 0!==n.level?{level:n.level}:{},...void 0!==n.sample?{sample:n.sample}:{}}),e.observers.add(i);const c=n.level;return void(void 0!==c&&(e.observeLevel=()=>c))}if("off"===n.level)return;const s=n.level;void 0!==s&&(e.observeLevel=()=>s),e.observers.add(Xn(xo(Yn({url:`${n.url}/ingest/${n.sessionId}`,token:n.token}),e.release),{flowId:o,level:n.level,sample:n.sample}))}async function Io(e){const t=e??{},n=await qo(t);if(t.observers)for(const e of t.observers)n.observers.add(e);"undefined"==typeof __WALKEROS_OBSERVE__||__WALKEROS_OBSERVE__?jo(n,t):t.observe&&n.logger.warn("observe: not in this build, config ignored"),await ut(n,t.sources||{});const{consent:o,user:s,globals:r,custom:i}=t;o&&await n.command("consent",o),s&&await n.command("user",s),r&&await n.command("globals",r),i&&await n.command("custom",i),n.config.run&&await n.command("run");let a=n.elb;const c=Object.values(n.sources),u=c.find(e=>e.config.primary);return u?a=u.push:c.length>0&&(a=c[0].push),{collector:n,elb:a}}export{e as Code,t as Commands,n as Const,Z as DEFAULT_BREAKER_COOLDOWN_MS,J as DEFAULT_BREAKER_THRESHOLD,se as DEFAULT_DLQ_MAX,gn as addDestination,ce as buildReportError,ie as bumpDropped,jt as callDestinationOn,Bn as commonHandleCommand,zn as completeEvent,Ln as createEvent,lo as createPush,En as createPushResult,Sn as destinationInit,_n as destinationPush,Vn as enrichEvent,re as ensureDestStatus,Et as enterCascade,ae as errorMeta,Ht as fireCallbacks,it as flushSourceQueueOn,A as getCacheStore,On as initDestinations,ct as initSource,ut as initSources,oe as isBreakerProbePermitted,yt as isRequireSatisfied,at as isSourceStarted,wt as isStateDelivery,vt as isStatePresent,Cn as mergeEnvironments,xt as on,on as onApply,Kn as prepareEvent,s as processConsent,vn as pushToDestinations,tn as redeliverStateAtRun,qn as registerDestination,te as resolveBreakerConfig,Un as runCollector,Qn as runCollectorNext,et as runTransformerBefore,Ze as runTransformerChain,kt as setMark,St as shouldDeliver,Io as startFlow,Fe as transformerInit,Ve as transformerPush,T 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{createIngest as r}from"@walkeros/core";import{assign as i,createMappingRoot as a,clone as c,compileCache as u,checkCache as d,storeCache as l,createIngest as f,debounce as p,emitStep as g,getId as h,getGrantedConsent as m,isDefined as w,isFunction as v,isObject as y,OBSERVE_ENV_KEY as b,processEventMapping as k,stepId as S,tryCatchAsync as _,useHooks as E}from"@walkeros/core";import{emitStep as q}from"@walkeros/core";function O(e,t,n){return{traceId:e.source?.trace??t?._meta.trace??n.trace,sourceId:t?._meta.path[0],parentEventId:t?._meta.parentEventId}}function C(e,t,n,o,s,r=Date.now(),i){const a={flowId:e.name??"default",stepId:t,stepType:n,phase:o,eventId:s,timestamp:new Date(r).toISOString(),elapsedMs:r-e.status.startedAt};return i?.traceId&&(a.traceId=i.traceId),i?.sourceId&&(a.sourceId=i.sourceId),i?.parentEventId&&(a.parentEventId=i.parentEventId),a}function x(e){return e instanceof Error?{name:e.name,message:e.message}:{message:String(e)}}function j(e,t,n,o){e.status.in++;const s=C(e,"collector.push","collector","skip","string"==typeof t.id?t.id:"",Date.now(),O(t,n,e));s.skipReason=o.reason,"consent"===o.reason?(s.consent={...o.consent},s.meta={at:o.at,required:{...o.required}}):s.meta={by:o.by??"route",at:o.at},q(e,s)}import{applyState as I,compileState as D}from"@walkeros/core";function A(e,t){return e.storeId&&t.stores[e.storeId]?t.stores[e.storeId]:t.stores.__cache}function $(e){return("undefined"==typeof __WALKEROS_STATE__||__WALKEROS_STATE__)&&e?D(e):void 0}function M(e,t,n,o){return"undefined"==typeof __WALKEROS_STATE__||__WALKEROS_STATE__?I(t,t=>function(e,t){return e?t.stores[e]:t.stores.__cache}(t,e),n,e,o):Promise.resolve(n)}function P(e,t,n){"undefined"==typeof __WALKEROS_STATE__||__WALKEROS_STATE__||void 0===n||e.logger.warn(`state: not in this build, ${t} state ignored`)}import{observeEnv as R}from"@walkeros/core";function W(e,t,n){if(null===e||"object"!=typeof e)return e;if(n>=8||!function(e){if(Array.isArray(e))return!0;const t=Object.getPrototypeOf(e);return t===Object.prototype||null===t}(e))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(W(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:W(r,t,n+1);return s}function T(e){const{simulation:t,...n}=e,o={},s=new WeakMap;for(const[e,t]of Object.entries(n))o[e]="function"==typeof t?t:W(t,s,1);const r=R(o,t);return{wrappedEnv:r.env,calls:r.calls,unresolved:r.unresolved}}function B(e,t){try{return e[t]}catch{return"[unreadable]"}}function K(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(B(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 L(e,t){("undefined"==typeof __WALKEROS_OBSERVE__||__WALKEROS_OBSERVE__)&&t&&t.length>0&&(e.calls=function(e){return e.map(e=>({fn:e.fn,args:K(e.args),ts:e.ts}))}(t))}import{isArray as z,FatalError as F}from"@walkeros/core";import{tryCatch as V,tryCatchAsync as U}from"@walkeros/core";import{stepId as H}from"@walkeros/core";function G(e){if(void 0===e)throw new Error("Collector.Config.queueMax is undefined; defaults must be seeded by collector()");return e}function Q(e,t,n,o){if(!Number.isFinite(n.max)||n.max<=0)throw new Error(`pushBounded: max must be > 0 (got ${n.max})`);if("dropNewest"===(n.onOverflow??"dropOldest"))return e.length>=n.max?(o&&o([t]),{appended:!1,dropped:1}):(e.push(t),{appended:!0,dropped:0});const 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 X(e){N.delete(e)}var J=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 ie(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 ae(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=H(t,n);return(t,i)=>{try{if(i)return s?function(e,t,n,o,s,r){const i=t.dlq=t.dlq||[],a={max:t.config.dlqMax??se},c=Q(i,[o,s],a);if(c.dropped>0){const t=ie(e.status,H("destination",n),"dlq",c.dropped);Y(i,r,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:n,cap:a.max,droppedCount:t})}else i.length<a.max&&X(i);const u=re(e,n);u.failed++,u.dlqSize=i.length,e.status.failed++;const d=te(t.config.breaker);if(d){const o=t.config.id||n;ne(e.status.breakers,H("destination",o),"transport-failure",d.threshold,d.cooldown)}}(e,s,n,i,t,o):e.status.failed++,void o.error("report error",{...ae(t),event:i.name});e.status.connectionErrors[r]=(e.status.connectionErrors[r]??0)+1,o.error("connection error",ae(t))}catch{}}}import{createIngest as ue,FatalError as de,getMappingValue as le,getSpanId as fe,parseTraceparent as pe,isScope as ge,tryCatchAsync as he,compileCache as me,checkCache as we,storeCache as ve,applyUpdate as ye,createMappingRoot as be,stepId as ke}from"@walkeros/core";import{advanceChain as Se,clone as _e,createIngest as Ee,deriveSpanId as qe,emitStep as Oe,FatalError as Ce,isChainContinuation as xe,isObject as je,startChain as Ie,stepId as De,tryCatchAsync as Ae,useHooks as $e,compileCache as Me,checkCache as Pe,storeCache as Re,createMappingRoot as We,validateStepEntry as Te,processEventMapping as Be,getTransformerMapping as Ke,getTransformerMappingWarnings as Le}from"@walkeros/core";function ze(e,t){const n=e.config||{},o=e[t];return void 0!==o?{config:{...n,[t]:o},chainValue:o}:{config:n,chainValue:void 0}}async function Fe(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:tt(t.config.env),reportError:ce(e,"transformer",n,s)};s.debug("init");const i=await $e(t.init,"TransformerInit",e.hooks,e.logger)(r);if(!1===i)return!1;t.config={...i||t.config,env:i?.env||t.config.env,init:!0},s.debug("init done")}return!0}async function Ve(e,t,n,o,s,r){const i=t.type||"unknown",a=e.logger.scope(`transformer:${i}`),c={collector:e,logger:a,id:n,ingest:s,config:t.config,env:{...tt(t.config.env),...r?{respond:r}:{}},reportError:ce(e,"transformer",n,a)};a.debug("push",{event:o.name});const u="string"==typeof o.id?o.id:"",d=O(o,s,e),l=Date.now(),f=C(e,De("transformer",n),"transformer","in",u,l,d);f.inEvent=o,Oe(e,f);try{const s=await $e(t.push,"TransformerPush",e.hooks,e.logger)(o,c),r=Date.now(),i=C(e,De("transformer",n),"transformer","out",u,r,d);return i.durationMs=r-l,i.outEvent=s,Oe(e,i),a.debug("push done"),s}catch(t){const o=Date.now(),s=C(e,De("transformer",n),"transformer","error",u,o,d);throw s.durationMs=o-l,s.error=x(t),Oe(e,s),t}}function Ue(e){return"string"==typeof e.id?e.id:""}function He(e,t){const n=Ue(e);return""!==n&&""===Ue(t)?{...t,id:n}:t}function Ge(e,t,n,o){const s=function(e){return{...e,_meta:{...e._meta,path:[...e._meta.path]}}}(n),r=_e(t),i=Ue(e);if(""===i)return{event:r,ingest:s};s._meta.parentEventId=i;const a=Ue(r);return""!==a&&a!==i||(r.id=qe(i,o)),{event:r,ingest:s}}function Qe(e,t){return{copies:e,respond:t}}function Ne(e,t){if(void 0===t)return e.rest;const n=e.ownNext?e.rest.slice(1):e.rest;return[{route:t,ancestry:e.ancestry},...n]}async function Ye(e,t,n){const o=await Promise.all(t.map((t,n)=>Ae(Xe,t=>(e.collector.logger.scope("transformer:fork").error(`fork ${n} failed`,ae(t)),{copies:[]}))(e,t))),s=[];let r,i=n,a=o.length>0;return o.forEach((e,n)=>{void 0!==t[n].respond&&e.respond&&(i=e.respond),e.stopped||(a=!1),e.stopped||0===e.copies.length?void 0===r&&(r=e.droppedBy):s.push(...e.copies)}),0===s.length?{copies:s,respond:i,...a?{stopped:!0}:{},...void 0!==r?{droppedBy:r}:{}}:Qe(s,i)}async function Xe(e,t){const{ingest:n}=t;let{stack:o,event:s,respond:r}=t,i=t.resume;for(;;){let t,a;if(i)t=i.member,a=i,i=void 0;else{const i=Se(o,We(n,s),e.transformers);if("done"===i.kind)return Qe([{event:s,ingest:n}],r);if("stop"===i.kind)return{copies:[],respond:r,stopped:!0,...void 0!==i.owner?{droppedBy:i.owner}:{}};if("fork"===i.kind){const t=s;return Ye(e,i.branches.map((e,o)=>({stack:e,...Ge(t,t,n,o),respond:void 0})),r)}const a=e.transformers[i.id];t={id:i.id,ancestry:i.ancestry,rest:i.rest,ownNext:!!a&&void 0!==a.config.next}}const c=await Je(e,t,s,n,r,a);if("halt"===c.kind)return c.result;if("fork"===c.kind)return Ye(e,c.copies,r);s=c.event,r=c.respond,o=c.stack}}async function Je(e,t,n,o,s,r){const{collector:i,transformers:a,chainContext:c}=e,u=t.id,d=a[u];let l=n,f=s;const p=(e=t.rest)=>({kind:"continue",event:He(n,l),respond:f,stack:e}),g=e=>({kind:"halt",result:e});if(!d)return i.logger.warn(`Transformer not found: ${u}`),p();const h=d.config?.cache,m=h?Me(h):void 0,w=m?A(m,i):void 0;let v=r?.cacheMiss;if(!r){if(o._meta.path.length>256)return i.logger.error(`Max path length exceeded at ${u}`),g({copies:[],respond:f});o._meta.hops++,o._meta.path.push(u);if(!await Ae(Fe,e=>{if(e instanceof Ce)throw e;return i.status.failed++,i.logger.scope(`transformer:${d.type||"unknown"}`).error("transformer init failed",{transformer:u,...ae(e)}),!1})(i,d,u))return g({copies:[],respond:f});if(c&&void 0!==d.config?.chainMocks?.[c]){const e=d.config.chainMocks[c];return i.logger.scope(`transformer:${d.type||"unknown"}`).debug("chainMock",{chain:c}),l=e,p()}if(void 0!==d.config?.mock)return i.logger.scope(`transformer:${d.type||"unknown"}`).debug("mock"),l=d.config.mock,p();if(d.config?.disabled)return p();if(m&&w){const e=await Pe(m,w,We(o,l));if("HIT"===e?.status&&e.value){if(l=e.value,m.stop){return g({copies:[{event:He(n,l),ingest:o}],respond:f,stopped:!0})}return p()}"MISS"===e?.status&&(v={key:e.key,ttl:e.rule.ttl})}if(void 0!==d.config.before){const e=await et(i,a,u,l,o,f,c),n=e.respond??f;if(0===e.copies.length||e.stopped)return g({...e,respond:n});f=n;const[s]=e.copies;if(e.copies.length>1||s.ingest!==o){const n={member:t,cacheMiss:v};return{kind:"fork",copies:e.copies.map(e=>({stack:t.rest,event:e.event,ingest:e.ingest,respond:void 0,resume:n}))}}l=s.event}}const y=$(d.config?.state),b=y?.filter(e=>"get"===e.mode),k=y?.filter(e=>"set"===e.mode),S=async e=>k&&0!==k.length?M(i,k,e,o):e;b&&b.length>0&&(l=await M(i,b,l,o));const _=await Ae(Ve,e=>(i.status.failed++,i.logger.scope(`transformer:${d.type||"unknown"}`).error("Push failed",ae(e)),!1))(i,d,u,l,o,f);if(!1===_)return g({copies:[],respond:f,droppedBy:u});if(Array.isArray(_)&&1!==_.length){if(0===_.length)return g({copies:[],respond:f});const e=l,n=[];for(let s=0;s<_.length;s++){const r=_[s],i=await S(r.event||e);n.push({stack:Ne(t,r.next),...Ge(e,i,o,s),respond:f})}return{kind:"fork",copies:n}}const E=Array.isArray(_)?_[0]:_;let q;return E&&"object"==typeof E&&(E.respond&&(f=E.respond),E.event&&(l=E.event),q=E.next),l=await S(l),v&&w&&Re(w,v.key,l,v.ttl),p(Ne(t,q))}async function Ze(e,t,n,o,s,r,i){const a=s??Ee("string"==typeof n?n:"chain");return void 0===n?Qe([{event:o,ingest:a}],r):(i&&(a._meta.chainPath=i),Xe({collector:e,transformers:t,chainContext:i},{stack:xe(n)?n:Ie(n),event:o,ingest:a,respond:r}))}async function et(e,t,n,o,s,r,i){const a=t[n],c=a?a.config.before:void 0,u=await Ze(e,t,c,o,s,r,i);return u.stopped&&0===u.copies.length&&!u.droppedBy?{...u,droppedBy:n}:u}function tt(e){return e&&je(e)?e:{}}var nt=1e4;function ot(e){return"number"==typeof e&&e>0?e:nt}var st=class extends Error{constructor(e){super(e),this.name="DestinationTimeoutError"}};function rt(e,t,n){let o;const s=new Promise((e,s)=>{o=setTimeout(()=>s(new st(n)),t)});return Promise.race([e,s]).finally(()=>{o&&clearTimeout(o)})}async function it(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){if(wt(n)&&!St(e,t,n))continue;const o=t.on;let i=!1;await he(()=>rt(Promise.resolve(o(n,r)),nt,`Source "${s}" on(${n}) did not settle within 10000ms`),t=>{if(t instanceof de)throw t;t instanceof st?i=!0:e.status.failed++,e.logger.scope("source").error("source on flush failed",{sourceId:s,type:n,...ae(t)})})(),wt(n)&&!i&&kt(e,t,n)}}function at(e){return Boolean(e.config.init)&&!e.config.require?.length}async function ct(e,t,n){const{code:o,config:s={},env:r={},primary:i,next:a,before:c,cache:u,terminus:d}=n,l=s.state??n.state,f=$(l);P(e,ke("source",t),l);const p=u,g=p?me({...p,stop:p.stop??!0}):void 0,h=d??e.push,m=Boolean(d),w=async(n,o,r)=>{if(m)return h(n);let i;const u="string"==typeof n.id&&""!==n.id?n:{...n,id:fe()};let d=[{event:u,ingest:r.ingest}];if(void 0!==c){const n=`source.${t}.before`,o=await Ze(e,e.transformers||{},c,u,r.ingest,r.respond,n);if(0===o.copies.length)return j(e,u,r.ingest,{reason:"dropped",by:o.droppedBy,at:n}),En({ok:!0,dropped:!0});if(o.stopped)return o.respond&&(r.respond=o.respond),{ok:!0};o.respond&&(r.respond=o.respond),d=o.copies}if(g){const t=A(g,e);if(t){const n=be(r.ingest),o=await we(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 ye(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,a=o.rule.update,c={...n,cache:{status:"MISS"}},u=o.key,d=o.rule.ttl,l=n=>{ve(t,u,n,d),a?i=(async()=>{const t=await ye(n,a,c,e);s(t)})():s(n)};r.respond=l}"MISS"!==o.status||g.stop||ve(t,o.key,!0,o.rule.ttl)}}}f&&f.length>0&&(d=await Promise.all(d.map(async t=>({event:await M(e,f,t.event,t.ingest),ingest:t.ingest}))));let l={ok:!0};for(const e of d)l=await h(e.event,{...o,id:t,ingest:e.ingest,respond:r.respond,mapping:s,preChain:a});return i&&await i,l},v=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 i=await le(n,s.ingest,{collector:e});return{...o,...i,_meta:o._meta}},y=e.logger.scope("source").scope(t),b={...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:y},k={collector:e,logger:y,id:t,config:s,env:b,withScope:async(e,t,n)=>{const o={ingest:await v(e),respond:t};return n({...b,push:(e,t={})=>w(e,t,o),ingest:o.ingest,respond:o.respond})},reportError:ce(e,"source",t,y)},S=await he(o,n=>{if(n instanceof de)throw n;e.status.failed++,e.logger.scope("source").error("source factory failed",{sourceId:t,...ae(n)})})(k);if(!S)return;const _=S.type||"unknown",E=e.logger.scope(_).scope(t);return b.logger=E,i&&(S.config={...S.config,primary:i}),S}async function ut(e,t={}){const n={};for(const[o,s]of Object.entries(t)){const t=await ct(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 he(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,...ae(n)})})(),o||(n.config.init=!0,at(n)&&await it(e,n,t))}return await dt(e),n}async function dt(e){for(const[t,n]of Object.entries(e.sources)){if(at(n))continue;const o=n.config.require;if(!o?.length)continue;const s=o.filter(t=>!yt(e,t));s.length!==o.length&&(n.config.require=s,at(n)&&await it(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=>!yt(e,t));if(n.config&&(n.config.require=s),s.length>0)continue;delete e.pending.destinations[t];const r=qn(n);!1!==r.config.queue&&(r.queuePush=[...e.queue]),e.destinations[t]=r,await Zt(e,r,t)}}function lt(e){if("object"!=typeof e||null===e)return!1;if(!("logger"in e))return!1;const t=e.logger;return"object"==typeof t&&null!==t&&("scope"in t&&"function"==typeof t.scope)}var ft=!1;function pt(){ft||(ft=!0,"undefined"!=typeof console&&"function"==typeof console.warn&&console.warn("walkerOS: ignored an on-dispatch call with a non-collector argument"))}function gt(e,t,n,o){if(n instanceof F)throw n;e.logger.scope("on").error("on callback failed",{kind:t,...o,...ae(n)})}var ht=["consent","user","globals","custom"];function mt(e){return ht.includes(e)}function wt(e){return mt(e)}function vt(e,t){return mt(t)&&Object.keys(e[t]).length>0}function yt(e,t){if(mt(t))return vt(e,t);switch(t){case n.Commands.Run:case n.Commands.Ready:return!0===e.allowed;default:return e.seenEvents.has(String(t))}}function bt(e,t){return e.cellVersion?.[String(t)]??0}function kt(e,t,n){Ut(e,t,n,bt(e,n))}function St(e,t,n){return e.allowed&&bt(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)}var _t=8;function Et(e){const t=e.cascade;if(t&&!qt.has(t))return()=>{};const n=t||{counts:new WeakMap};e.cascade=n,qt.set(n,(qt.get(n)||0)+1);let o=!1;return()=>{if(o)return;o=!0;const t=(qt.get(n)||1)-1;t>0?qt.set(n,t):(qt.delete(n),e.cascade===n&&(e.cascade=void 0))}}var qt=new WeakMap;function Ot(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),i=(s[r]||0)+1;return s[r]=i,i<=_t||(i===_t+1&&e.logger.error("state delivery did not converge",{type:r}),!1)}function Ct(e,t){return{collector:e,logger:e.logger.scope("on").scope(String(t))}}async function xt(e,t,n){if(!lt(e))return void pt();const o=e.on,s=o[t]||[],r=z(n)?n:[n];r.forEach(e=>{s.push(e)}),o[t]=s,Ht(e,t,r)}async function jt(e,t,n,o,s){const r=t.on;if(!r)return!0;const i=wt(o);if(i&&(It.get(t)||Dt.has(t)))return Lt(e,t,o),It.get(t)||At.add(t),!1;const a=i?bt(e,o):0,c=i&&function(e,t,n,o){if(Tt.get(t)?.has(String(n)))return!0;const s=e.delivery?.get(t)?.[String(n)];return void 0===s||s<o-1}(e,t,o,a)?Gt(e,o):s,u=t.type||"unknown",d=e.logger.scope(u).scope("on").scope(o),l={collector:e,logger:d,id:n,config:t.config,data:c,env:Cn(t.env,t.config.env),reportError:ce(e,"destination",n,d,t)};i&&(Ft(t,o),function(e,t,n){let o=Rt.get(e);o||(o={},Rt.set(e,o));const s=String(t),r=o[s];(void 0===r||r<n)&&(o[s]=n)}(t,o,a),Dt.add(t));const f=ot(t.config.timeout);let p=Promise.resolve(),g=!0,h=!1,m=!0;try{await U(()=>(p=Promise.resolve(r(o,l)),rt(p,f,`Destination "${n}" on(${o}) did not settle within ${f}ms`)),t=>{g=!1,t instanceof st&&(h=!0),gt(e,"destination",t,{destId:n,type:o})})(),m=!1}finally{if(i){Dt.delete(t),m&&At.delete(t);const s=Tt.get(t);g?(Ut(e,t,o,a),s?.delete(String(o))):Lt(e,t,o),h?function(e,t,n,o,s,r,i){It.set(t,(It.get(t)||0)+1);const a=()=>{const r=(It.get(t)||0)-1;r>0?It.set(t,r):It.delete(t),Bt(t,o),Wt(t,o,s),Vt(e,t),i.debug("late settle after timeout"),At.delete(t),e.allowed&&e.destinations[n]===t&&function(e,t,n,o){U(async()=>{await Zt(e,t,n),!Mt(t)&&t.queuePush?.length&&await vn(e,void 0,{},{[n]:t})},e=>{o.error("state recovery failed",ae(e))})()}(e,t,n,i)};r.then(a,a)}(e,t,n,o,a,p,d):(Wt(t,o,a),Vt(e,t))}}return i&&!h&&At.delete(t)&&await Zt(e,t,n),g}var It=new WeakMap,Dt=new WeakSet,At=new WeakSet;var $t=new WeakMap;function Mt(e){return $t.get(e)}var Pt=new WeakMap,Rt=new WeakMap;function Wt(e,t,n){const o=Rt.get(e);o&&o[String(t)]===n&&delete o[String(t)]}var Tt=new WeakMap;function Bt(e,t){const n=Tt.get(e);n?n.add(String(t)):Tt.set(e,new Set([String(t)]))}var Kt=new WeakMap;function Lt(e,t,n){!function(e,t,n){const o=e.delivery?.get(t);o&&delete o[String(n)]}(e,t,n),Bt(t,n),$t.set(t,{type:n,since:Date.now()})}function zt(e,t){return!!Tt.get(t)?.size||ht.some(n=>vt(e,n)&&St(e,t,n))}function Ft(e,t){Pt.set(e,(Pt.get(e)||0)+1),$t.set(e,{type:t,since:Date.now()})}function Vt(e,t){const n=(Pt.get(t)||0)-1;n>0?Pt.set(t,n):Pt.delete(t),function(e,t){if(!$t.has(t))return;if(Pt.get(t))return;zt(e,t)||$t.delete(t)}(e,t)}function Ut(e,t,n,o){let s=e.delivery.get(t);s||(s={},e.delivery.set(t,s));const r=String(n),i=s[r];(void 0===i||i<o)&&(s[r]=o)}function Ht(e,t,o,s){if(!lt(e))return void pt();const r=Gt(e,t,s);if(o.length)switch(t){case n.Commands.Consent:!function(e,t,o){const s=o||e.consent,r=Ct(e,n.Commands.Consent);t.forEach(t=>{St(e,t,n.Commands.Consent)&&Ot(e,t,n.Commands.Consent)&&(Object.keys(s).filter(e=>e in t).forEach(n=>{V(t[n],t=>gt(e,"consent",t,{key:n}))(s,r)}),kt(e,t,n.Commands.Consent))})}(e,o,s);break;case n.Commands.Ready:!function(e,t){if(!e.allowed)return;const o=Ct(e,n.Commands.Ready);t.forEach(t=>{V(t,t=>gt(e,"ready",t))(void 0,o)})}(e,o);break;case n.Commands.Run:!function(e,t){if(!e.allowed)return;const o=Ct(e,n.Commands.Run);t.forEach(t=>{V(t,t=>gt(e,"run",t))(void 0,o)})}(e,o);break;case n.Commands.Session:!function(e,t){if(!e.session)return;const o=Ct(e,n.Commands.Session);t.forEach(t=>{V(t,t=>gt(e,"session",t))(e.session,o)})}(e,o);break;default:{const n=Ct(e,t),s=wt(t);o.forEach(o=>{"function"==typeof o&&(s&&!St(e,o,t)||s&&!Ot(e,o,t)||(V(o,n=>gt(e,"generic",n,{type:t}))(r,n),s&&kt(e,o,t)))});break}}}function Gt(e,t,o){if(mt(t))return o||e[t];switch(t){case n.Commands.Session:return e.session;case n.Commands.Config:return o||e.config;default:return}}async function Qt(e,t,n,o,s){if(!t.on)return!1;if(wt(o)&&!St(e,t,o))return!1;if(wt(o)&&!Ot(e,t,o))return!1;const r=wt(o);if(r&&Nt.has(t))return Yt.add(t),!1;const i=r?bt(e,o):0;r&&Nt.add(t);const a=t.on;let c,u=Promise.resolve(),d=!1;try{c=await U(()=>(u=Promise.resolve(a(o,s)),rt(u,nt,`Source "${n}" on(${o}) did not settle within 10000ms`)),t=>{t instanceof st&&(d=!0),gt(e,"source",t,{sourceId:n,type:o})})()}finally{r&&!d&&Nt.delete(t)}if(r)if(d){const o=()=>{Nt.delete(t),Yt.delete(t),e.allowed&&e.sources[n]===t&&U(()=>Xt(e,t,n),t=>{e.logger.scope("on").error("state recovery failed",ae(t))})()};u.then(o,o)}else Ut(e,t,o,i),Yt.delete(t)&&await Xt(e,t,n);return!1===c}var Nt=new WeakSet,Yt=new WeakSet;async function Xt(e,t,n){const o=Et(e);try{for(const o of ht)await Qt(e,t,n,o,Gt(e,o))}finally{o()}}async function Jt(e,t,n,o,s){if(!t.on)return;const r=wt(o);if(r&&!St(e,t,o))return;const i=Rt.get(t)?.[String(o)];if(r&&void 0!==i&&i>=bt(e,o))return;if(r&&!Ot(e,t,o)){if(t.config.init)return void Lt(e,t,o);const n=t.queueOn=t.queueOn||[],s={type:o,data:Gt(e,o)},r=n[n.length-1];return r&&r.type===o?n[n.length-1]=s:n.push(s),kt(e,t,o),void Tt.get(t)?.delete(String(o))}const a=Kt.get(t);if(!t.config.init||a)return t.queueOn=t.queueOn||[],t.queueOn.push({type:o,data:s}),void(r&&(kt(e,t,o),a&&!a.held&&(Ft(t,o),a.held=!0)));await jt(e,t,n,o,s)}async function Zt(e,t,n){if(!t.on)return;const o=Et(e);try{for(const o of ht)(vt(e,o)||Tt.get(t)?.has(String(o)))&&await Jt(e,t,n,o,Gt(e,o))}finally{o()}}function en(e){return(Pt.get(e)||0)>0}async function tn(e){const t=await nn(e);await Promise.all(t.map(({done:e})=>e))}async function nn(e){if(!lt(e))return pt(),[];const t=[];for(const[n,o]of Object.entries(e.destinations)){if(!o.on)continue;const s=async()=>{for(const t of ht)vt(e,t)&&await Jt(e,o,n,t,Gt(e,t))};t.push(sn(n,o,s()))}for(const t of ht){if(!vt(e,t))continue;const n=Gt(e,t);Ht(e,t,e.on[t]||[]),await Promise.all(Object.entries(e.sources).filter(([,e])=>at(e)).map(([o,s])=>Qt(e,s,o,t,n)))}return t}async function on(e,t,n,o){const{ok:s,deliveries:r}=await rn(e,t,n,o);return await Promise.all(r.map(({done:e})=>e)),s}function sn(e,t,n){return n.catch(()=>{}),{id:e,destination:t,done:n}}async function rn(e,t,n,o){if(!lt(e))return pt(),{ok:!0,deliveries:[]};e.seenEvents.add(String(t));let s=n||[];n||(s=e.on[t]||[]);const r=Gt(e,t,o),i=[];for(const[n,o]of Object.entries(e.sources)){if(o.config.require?.length){const e=o.config.require.indexOf(t);-1!==e&&o.config.require.splice(e,1)}o.on&&(at(o)?i.push(Qt(e,o,n,t,r)):(o.queueOn=o.queueOn||[],o.queueOn.push({type:t,data:r})))}const a=[];for(const[n,o]of Object.entries(e.destinations))o.on&&a.push(sn(n,o,Jt(e,o,n,t,r)));let c=!1;if(i.length){c=(await Promise.all(i)).some(Boolean)}for(const[t,n]of Object.entries(e.sources))at(n)&&n.queueOn?.length&&await it(e,n,t);const u=Object.values(e.sources).some(e=>!at(e)&&e.config.require?.length);return(Object.keys(e.pending.destinations).length>0||u)&&await dt(e),Ht(e,t,s,o),{ok:!c,deliveries:a}}var an=1e3,cn=1e3,un=3e4,dn=Object.freeze({batched:!0});function ln(e){return e===dn}var fn=" batch-all";function pn(e){return void 0===e?{}:"number"==typeof e?{wait:e}:{wait:e.wait,size:e.size,age:e.age}}async function gn(e,t){const{code:n,config:o={},env:s={},before:r,next:i,cache:a,state:c}=t;if(!v(n.push))return En({ok:!1,failed:{invalid:{type:"invalid",error:"Destination code must have a push method"}}});const u={...n.config,...o||{init:!1}};let d=r?{...u,before:r}:{...u};i&&(d={...d,next:i}),a&&(d={...d,cache:a}),void 0!==c&&void 0===d.state&&(d={...d,state:c});let l=d.id;if(!l)do{l=h(5,"abcdefghijklmnopqrstuvwxyz")}while(e.destinations[l]||e.pending.destinations[l]);if(P(e,S("destination",l),d.state),d.require?.length){e.pending.destinations[l]=t,await dt(e);const n=e.destinations[l];return n?vn(e,void 0,{},{[l]:n}):En({ok:!0})}const f={...n,config:d,env:Cn(n.env,s)};return e.destinations[l]=f,!1!==f.config.queue&&(f.queuePush=[...e.queue]),await Zt(e,f,l),vn(e,void 0,{},{[l]:f})}function hn(e){for(const t of e)Mt(t.destination)&&(t.drain=!0)}async function mn(e,t){return(await Promise.all(t.map(async({id:t,destination:n,done:o,drain:s})=>{if(await o,s&&e.allowed&&!Mt(n)&&n.queuePush?.length&&e.destinations[t]===n)return vn(e,void 0,{},{[t]:n})}))).filter(w)}function wn(e,t){if(!t.length)return e;const n={...e.done??{}},o={...e.queued??{}},s={...e.failed??{}};for(const e of t){for(const[t,s]of Object.entries(e.done??{}))n[t]=s,delete o[t];for(const[t,n]of Object.entries(e.failed??{}))s[t]=n,delete o[t];Object.assign(o,e.queued??{})}const r={...e,ok:e.ok&&t.every(e=>e.ok)};return delete r.done,delete r.queued,delete r.failed,Object.keys(n).length&&(r.done=n),Object.keys(o).length&&(r.queued=o),Object.keys(s).length&&(r.failed=s),r}async function vn(e,t,n={},o){if(!e.allowed)return En({ok:!1});if(!t)return yn(e,void 0,n,o);const s=await Qn(e,t,n);if(0===s.copies.length)return En({ok:!0,...s.dropped?{dropped:!0}:{}});const r=[];for(const t of s.copies)r.push(await yn(e,t.event,{id:n.id,ingest:t.ingest,respond:s.respond},o));return r[0]}async function yn(e,t,n,o){const{user:s}=e;if(t){const n=G(e.config.queueMax),o=Q(e.queue,t,{max:n});if(o.dropped>0){const t=ie(e.status,S("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&&X(e.queue);e.status.in++}o||(o=e.destinations);const r=e.transformers||{},p=await Promise.all(Object.entries(o||{}).map(async([o,p])=>{if(p.config.disabled)return{id:o,destination:p,skipped:!0};const h=p.config.id||o,w=S("destination",h),v=te(p.config.breaker);if(v&&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,w,v.cooldown))return{id:o,destination:p,skipped:!0};const y=t=>{v&&ne(e.status.breakers,w,t,v.threshold,v.cooldown)},b=()=>{v&&function(e,t){const n=e[t];n&&"half-open"===n.state&&!0===n.probing&&(n.state="open",n.probing=!1)}(e.status.breakers,w)},k=t=>{if(!t.length)return;p.queuePush||(p.queuePush=[]);const n=p.queuePush,s=p.config.id||o,r={max:p.config.queueMax??an};let i=0;for(const e of t){i+=Q(n,e,r).dropped}if(i>0){re(e,s);const t=ie(e.status,S("destination",s),"queue",i);Y(n,e.logger.scope(p.type||"unknown"),"destination.queuePush overflow; oldest events dropped",{buffer:"queuePush",destination:s,cap:r.max,droppedCount:t})}else n.length<r.max&&X(n)};p.on&&p.config.init&&!Mt(p)&&!en(p)&&zt(e,p)&&await Zt(e,p,o);const E=Mt(p);if(E&&!en(p)&&Date.now()-E.since>=ot(p.config.timeout)&&await Zt(e,p,o),Mt(p)){if(b(),!t)return{id:o,destination:p,skipped:!0};const e=[c(t)];return k(e),{id:o,destination:p,queue:e}}let q=(p.queuePush||[]).map(t=>({...t,consent:e.consent}));p.queuePush=[],t&&q.push(c(t));const x=n.ingest?{...n.ingest,_meta:{...n.ingest._meta,path:[...n.ingest._meta.path]}}:f("unknown");if(!q.length&&!p.queueOn?.length)return b(),{id:o,destination:p,skipped:!0};if(!q.length&&p.queueOn?.length){if(!m(p.config.consent,e.consent))return b(),{id:o,destination:p,skipped:!0};let t=!1;try{t=await Sn(e,p,o,!0)}catch(t){e.status.failed++;const n=p.type||"unknown";e.logger.scope(n).error("destination init failed",{error:t instanceof Error?t.message:String(t)}),y("transport-failure")}if(Mt(p))return b(),{id:o,destination:p,skipped:!0};if(!t||!p.queuePush?.length)return b(),{id:o,destination:p,skipped:!t};q=p.queuePush.map(t=>({...t,consent:e.consent})),p.queuePush=[]}const j=t=>{const n=e.consent,s=[],r=t.filter(t=>{const r=m(p.config.consent,n,t.consent);if(r)return t.consent=r,s.push(t),!1;const i=C(e,S("destination",o),"destination","skip","string"==typeof t.id?t.id:"",Date.now(),O(t,x,e));return i.skipReason="consent",n&&(i.consent={...n}),p.config.consent&&(i.meta={required:{...p.config.consent}}),g(e,i),!0});return{allowed:s,skipped:r}},I=e.consent,{allowed:D,skipped:P}=j(q);if(k(P),!D.length)return b(),{id:o,destination:p,queue:q};const R=new Set(p.queuePush);let W=!1;try{W=await Sn(e,p,o,!0)}catch(t){e.status.failed++;const n=p.type||"unknown";e.logger.scope(n).error("destination init failed",{error:t instanceof Error?t.message:String(t)}),y("transport-failure")}if(!W)return b(),{id:o,destination:p,queue:q};if(Mt(p))return b(),k(D),{id:o,destination:p,queue:D};const T=[];if(e.consent!==I){const t=j(D.map(t=>({...t,consent:e.consent})));D.splice(0,D.length,...t.allowed),T.push(...t.skipped)}const B=p.queuePush||[],K=B.filter(e=>!R.has(e));if(K.length){p.queuePush=B.filter(e=>R.has(e));const t=j(K.map(t=>({...t,consent:e.consent})));D.push(...t.allowed),T.push(...t.skipped)}if(k(T),!D.length)return b(),T.length?{id:o,destination:p,queue:T}:{id:o,destination:p,skipped:!0};let L,z;p.dlq||(p.dlq=[]);const F=p.config.before,V=p.config.next,U=p.config?.cache,H=U?u(U):void 0,G=H?A(H,e):void 0,N=$(p.config?.state),J=N?.filter(e=>"get"===e.mode),Z=N?.filter(e=>"set"===e.mode);let oe=0,ce=0,ue=0;return await Promise.all(D.map(async t=>{let c,u;if(t.user=i(s,t.user),H?.stop&&G){const e=a(x,t),n=await d(H,G,e);if("HIT"===n?.status)return t;"MISS"===n?.status&&(c={key:n.key,ttl:n.rule.ttl})}let f=[{event:t,ingest:x}],h=n.respond;if(void 0!==F){const s=`destination.${o}.before`,i=await Ze(e,r,F,t,x,n.respond,s);if(0===i.copies.length){const n=C(e,S("destination",o),"destination","skip","string"==typeof t.id?t.id:"",Date.now(),O(t,x,e));return n.skipReason="dropped",n.meta={by:i.droppedBy??"route",at:s},g(e,n),t}i.respond&&(h=i.respond),f=i.copies.map(e=>({event:e.event,ingest:e.ingest}))}const m=async(t,n,s)=>{let i=s,c=!1;if(H&&!H.stop&&G){const e=a(n,t??void 0),o=await d(H,G,e);if("HIT"===o?.status)return!1;"MISS"===o?.status&&(i={key:o.key,ttl:o.rule.ttl},c=!0)}J&&J.length>0&&t&&(t=await M(e,J,t,n));const f=Date.now();let g=!1;const m=await _(_n,n=>{const s=p.type||"unknown";e.logger.scope(s).error("Push failed",{...ae(n),event:t.name}),L=n,g=!0;const r=p.dlq,i=p.config.id||o,a={max:p.config.dlqMax??se},c=Q(r,[t,n],a);if(c.dropped>0){re(e,i);const t=ie(e.status,S("destination",i),"dlq",c.dropped);Y(r,e.logger.scope(p.type||"unknown"),"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:i,cap:a.max,droppedCount:t})}else r.length<a.max&&X(r)})(e,p,o,t,n,h);if(oe+=Date.now()-f,i&&G&&void 0===p.config.mock&&(c?l(G,i.key,m??!0,i.ttl):void 0===u&&(u=m??!0)),!g&&!ln(m)&&Z&&Z.length>0&&t&&(t=await M(e,Z,t,n)),void 0===m||ln(m)||(z=m),ln(m)&&ce++,!g&&V){void 0!==m&&(n._response=m);const s=await Ze(e,r,V,t,n,h,`destination.${o}.next`);s.respond&&(h=s.respond)}return!0};for(const e of f)await m(e.event,e.ingest,c)&&ue++;return c&&G&&void 0!==u&&void 0===p.config.mock&&l(G,c.key,u,c.ttl),t})),{id:o,destination:p,error:L,response:z,totalDuration:oe,batchedCount:ce,allowedCount:D.length,pushedCount:ue,canonicalId:h,breakerConfig:v}})),h={},w={},v={};for(const t of p){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 i=t.breakerConfig,a=t.canonicalId?S("destination",t.canonicalId):void 0,c=t=>{i&&a&&ne(e.status.breakers,a,t,i.threshold,i.cooldown)};if(t.error)o.error=t.error,v[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)w[t.id]=o;else{const n=t.batchedCount??0,i=t.allowedCount??0,a=t.pushedCount??i;(Math.max(0,a-n)>0||0===i)&&(h[t.id]=o,s.count++,s.lastAt=r,s.duration+=t.totalDuration||0,e.status.out++,c("success"))}}return En({event:t,...Object.keys(h).length&&{done:h},...Object.keys(w).length&&{queued:w},...Object.keys(v).length&&{failed:v}})}async function bn(e,t,n,o){const s=await async function(e,t,n,o){const s=t.type||"unknown",r=e.logger.scope(s),i={collector:e,logger:r,id:o,config:t.config,env:Cn(t.env,t.config.env),reportError:ce(e,"destination",o,r,t)};r.debug("init");const a=Date.now();let c;g(e,C(e,S("destination",o),"destination","init","",a));try{c=await E(n,"DestinationInit",e.hooks,e.logger)(i)}catch(t){const n=Date.now(),s=C(e,S("destination",o),"destination","error","",n);throw s.durationMs=n-a,s.error=x(t),g(e,s),t}return!1!==c&&{...c||t.config,init:!0}}(e,t,n,o);if(!1===s)return!1;if(t.config=s,t.queueOn?.length){const n=Et(e);!function(e){const t=e.queueOn?.find(({type:e})=>wt(e));t&&Ft(e,t.type),Kt.set(e,{held:!!t})}(t);try{for(let n=t.queueOn?.shift();n;n=t.queueOn?.shift())await jt(e,t,o,n.type,n.data)}catch(n){for(const{type:n}of t.queueOn||[])wt(n)&&Lt(e,t,n);throw t.queueOn=[],n}finally{!function(e,t){const n=Kt.get(t);Kt.delete(t),n?.held&&Vt(e,t)}(e,t),n()}}return e.logger.scope(t.type||"unknown").debug("init done"),!0}var kn=new WeakMap;async function Sn(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=kn.get(t);if(s)return s;const r=bn(e,t,t.init,n);kn.set(t,r);try{return await r}finally{kn.delete(t)}}return!0}async function _n(e,t,n,o,s,r){const{config:i}=t,a=await k(o,i,e);if(a.ignore)return!1;const c=t.type||"unknown",u=e.logger.scope(c),d={collector:e,logger:u,id:n,config:i,data:a.data,rule:a.mapping,ingest:s,env:{...Cn(t.env,i.env),...r?{respond:r}:{}},reportError:ce(e,"destination",n,u,t)};if(void 0!==i.mock)return u.debug("mock",{event:a.event.name}),i.mock;const l=a.mapping,f=void 0!==l?.batch,h=f?a.mappingKey||"* *":fn;if((f||void 0!==i.batch)&&t.pushBatch&&void 0===i.mock){if(t.batches=t.batches||{},!t.batches[h]){const o={key:h,entries:[],events:[],data:[]},s=pn(l?.batch),r=pn(i.batch),a=s.wait??r.wait??un,c=s.size??r.size??cn,d=s.age??r.age??un,m=Cn(t.env,i.env),w=p(async()=>{const o=t.batches[h],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 a=r.entries[0],c={collector:e,logger:u,id:n,config:i,data:void 0,rule:o.isDefault?void 0:a.rule,ingest:a.ingest,env:{...m,...a.respond?{respond:a.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),p=S("destination",d),w=t=>{f&&ne(e.status.breakers,p,t,f.threshold,f.cooldown)},v=Date.now(),b=new Map;let k,q=!1;const j=n=>{const o=t.dlq=t.dlq||[],s={max:t.config.dlqMax??se};let r=0;for(const e of n){r+=Q(o,e,s).dropped}if(r>0){const t=ie(e.status,S("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&&X(o);l.failed+=n.length,l.dlqSize=o.length,e.status.failed+=n.length};let I=r.entries.length;const D=ot(i.timeout),A=await _((o,s)=>rt(Promise.resolve(E(t.pushBatch,"DestinationPushBatch",e.hooks,e.logger)(o,s)),D,`Destination "${n}" batch delivery timed out after ${D}ms`),e=>{I=0,q=!0,k=e,j(r.entries.map(t=>[t.event,e])),w("transport-failure"),u.error("Push batch failed",{error:e instanceof Error?e.message:String(e),entries:r.entries.length})})(r,c);if(y($=A)&&Array.isArray($.failed)&&A.failed.length>0){const e=[];for(const t of A.failed){const n=r.entries[t.index];if(!n||b.has(t.index))continue;const o=t.error??new Error(`Push batch entry ${t.index} failed (no per-row error provided)`);b.set(t.index,o),e.push([n.event,o])}if(e.length>0){j(e),I=Math.max(0,r.entries.length-e.length);const t=new Map;for(const[,n]of e){const e=n instanceof Error&&"code"in n&&"string"==typeof n.code?n.code:n instanceof Error?n.name:"Error",o=t.get(e);o?o.count++:t.set(e,{code:e,count:1,message:n instanceof Error?n.message:String(n)})}u.error("Push batch partial failure",{failed:e.length,delivered:I,entries:r.entries.length,causes:[...t.values()]})}}var $;const M=Date.now();r.entries.forEach((t,o)=>{const s=q||b.has(o),i=O(t.event,t.ingest,e),a=C(e,S("destination",n),"destination",s?"error":"flush","string"==typeof t.event.id?t.event.id:"",M,i);if(a.batch={size:r.entries.length,index:o},a.durationMs=M-v,s){const e=q?k:b.get(o);a.error=x(e)}g(e,a)}),u.debug("push batch done"),l.inFlightBatch=Math.max(0,(l.inFlightBatch??0)-r.entries.length),I>0&&(l.count+=I,l.lastAt=Date.now(),e.status.out+=I,w("success"))},{wait:a,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:a.event,ingest:s,respond:r,rule:l,data:a.data}),c.batched.events.push(a.event),w(a.data)&&c.batched.data.push(a.data);const d="string"==typeof a.event.id?a.event.id:"",m=O(o,s,e),v=Date.now(),b=C(e,S("destination",n),"destination","in",d,v,m);a.mappingKey&&(b.mappingKey=a.mappingKey),a.event.consent&&(b.consent={...a.event.consent}),b.inEvent=a.event,g(e,b);const k=C(e,S("destination",n),"destination","out",d,v,m);a.mappingKey&&(k.mappingKey=a.mappingKey),k.outEvent=a.event,k.batch={size:c.batched.entries.length,index:c.batched.entries.length-1},g(e,k);const q=t.config.id||n,j=re(e,q);return j.inFlightBatch=(j.inFlightBatch??0)+1,c.batchFn(),dn}{let r;if(u.debug("push",{event:a.event.name}),("undefined"==typeof __WALKEROS_OBSERVE__||__WALKEROS_OBSERVE__)&&"trace"===e.observeLevel?.()&&Array.isArray(t.calls)&&t.calls.length>0){const e=T({...d.env,simulation:t.calls});d.env=e.wrappedEnv,r=e.calls,e.unresolved.length>0&&(e.wrappedEnv[b]={paths:e.unresolved,record:(t,n)=>e.calls.push({fn:t,args:n,ts:Date.now()})})}const c="string"==typeof a.event.id?a.event.id:"",l=O(o,s,e),f=Date.now(),p=C(e,S("destination",n),"destination","in",c,f,l);a.mappingKey&&(p.mappingKey=a.mappingKey),a.event.consent&&(p.consent={...a.event.consent}),p.inEvent=a.event,g(e,p);try{const o=ot(i.timeout),s=await rt(Promise.resolve(E(t.push,"DestinationPush",e.hooks,e.logger)(a.event,d)),o,`Destination "${n}" delivery timed out after ${o}ms`),p=Date.now(),h=C(e,S("destination",n),"destination","out",c,p,l);return h.durationMs=p-f,h.outEvent=a.event,L(h,r),w(s)&&(h.meta={...h.meta,response:s}),a.mappingKey&&(h.mappingKey=a.mappingKey),g(e,h),u.debug("push done"),s}catch(t){const o=Date.now(),s=C(e,S("destination",n),"destination","error",c,o,l);throw s.durationMs=o-f,s.error=x(t),L(s,r),a.mappingKey&&(s.mappingKey=a.mappingKey),g(e,s),t}}}function En(e){return{ok:!e?.failed,...e}}function qn(e){const{code:t,config:n={},env:o={},cache:s,state:r}=e,{config:i}=ze(e,"before"),{config:a}=ze({...e,config:i},"next"),c={...t.config,...n,...a};s&&(c.cache=s),void 0!==r&&void 0===c.state&&(c.state=r);const u=Cn(t.env,o);return{...t,config:c,env:u}}async function On(e,t={}){const n={};for(const[o,s]of Object.entries(t))P(e,S("destination",o),s.config?.state??s.code.config?.state??s.state),s.config?.require?.length?e.pending.destinations[o]=s:n[o]=qn(s);return n}function Cn(e,t){return e||t?t?e&&y(e)&&y(t)?{...e,...t}:t:e:{}}import{assign as xn,getSpanId as jn,getTraceId as In,InvalidEventError as Dn,isFunction as An,isString as $n}from"@walkeros/core";import{isObject as Mn}from"@walkeros/core";var Pn=5e3;async function Rn(e){const t=e.logger;await Wn(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`)),Pn)})])}catch(t){s.error(`destination '${e}' batch flush failed: ${t}`)}finally{n&&clearTimeout(n)}})});await Promise.allSettled(n)}(e.destinations,t),await Wn(e.destinations,"destination",t),await Wn(e.transformers,"transformer",t),await Wn(e.stores,"store",t)}async function Wn(e,t,n){const o=Object.entries(e).map(async([e,o])=>{const s=o.destroy;if(!s)return;const r=o.type||"unknown",i=n.scope(r),a={id:e,config:o.config,env:o.env??{},logger:i};let c;try{await Promise.race([s(a),new Promise((n,o)=>{c=setTimeout(()=>o(new Error(`${t} '${e}' destroy timed out`)),Pn)})])}catch(n){i.error(`${t} '${e}' destroy failed: ${n}`)}finally{c&&clearTimeout(c)}});await Promise.allSettled(o)}function Tn(e,t){e.stateVersion++,e.cellVersion[t]=e.stateVersion}async function Bn(e,t,o){let r,i,a=!1;const c=[],u=Et(e);try{return await async function(){switch(t){case n.Commands.Config:Mn(o)&&(xn(e.config,o,{shallow:!1,merge:!1}),i=o,a=!0);break;case n.Commands.Consent:if(Mn(o)){const{update:t}=s(e,o);Tn(e,n.Commands.Consent),i=t,a=!0}break;case n.Commands.Custom:Mn(o)&&(e.custom=xn(e.custom,o),Tn(e,n.Commands.Custom),i=o,a=!0);break;case n.Commands.Destination:Mn(o)&&"code"in o&&Mn(o.code)&&(r=await gn(e,o));break;case n.Commands.Globals:Mn(o)&&(e.globals=xn(e.globals,o),Tn(e,n.Commands.Globals),i=o,a=!0);break;case n.Commands.Hook:if(Mn(o)&&$n(o.name)&&An(o.fn)){const{name:t,fn:n}=o;e.hooks[t]=n,i=o,a=!0}break;case n.Commands.On:if(Mn(o)&&$n(o.type)){const{type:t,rules:n}=o;await xt(e,t,n)}break;case n.Commands.Ready:a=!0;break;case n.Commands.Run:r=await Hn(e,o,c),a=!0;break;case n.Commands.Session:a=!0;break;case n.Commands.Shutdown:e.hasShutdown||(e.hasShutdown=!0,await Rn(e));break;case n.Commands.User:Mn(o)&&(xn(e.user,o,{shallow:!1}),Tn(e,n.Commands.User),i=o,a=!0);break;default:return e.logger.warn("unknown command",{command:t}),En({ok:!1})}if(a){const n=await rn(e,t,void 0,i);c.push(...n.deliveries),hn(n.deliveries);const o=wn(await vn(e),await mn(e,c));if(r&&!1===r.ok){const e={...o.failed??{},...r.failed??{}};r={...o,ok:!1,...Object.keys(e).length>0?{failed:e}:{}}}else r=o}return r||En({ok:!0})}()}finally{u()}}function Kn(e,t){return{timing:Math.round((Date.now()-e.timing)/10)/100,source:{type:"collector",schema:"4"},...t}}function Ln(e,t,n){return Fn(e,t,n,{globals:e.globals,user:e.user,consent:e.consent})}function zn(e,t,n){return Fn(e,Kn(e,t),n,{globals:{},user:{},consent:{}})}function Fn(e,t,n,o){const s=t.name;if("string"!=typeof s)throw new Dn(void 0===s?"Event name is required":"Event name is invalid");if(!s)throw new Dn("Event name is required");const[r,i]=s.split(" ");if(!r||!i)throw new Dn("Event name is invalid");const{timestamp:a=Date.now(),name:c=`${r} ${i}`,data:u={},context:d={},globals:l={},custom:f={},user:p=o.user,nested:g=[],consent:h=o.consent,id:m=jn(),trigger:w="",entity:v=r,action:y=i,timing:b=0,source:k={type:"collector",schema:"4"}}=t,S=k??{type:"collector",schema:"4"},_=S.count??(e.count+=1),E=S.trace??n?._meta.trace??e.trace,q={...S,count:_};void 0!==E&&(q.trace=E);const O=e.name??S.platform??"default",C=e.release??"4.7.2";q.release={...S.release,[O]:C};return{name:c,data:u,context:d,globals:xn(o.globals,l),custom:f,user:p,nested:g,consent:h,id:m,trigger:w,entity:v,action:y,timestamp:a,timing:b,source:q}}function Vn(e,t,n){return Ln(e,Kn(e,t),n)}async function Un(e,t){const n=[];return wn(await Hn(e,t,n),await mn(e,n))}async function Hn(e,t,o){e.allowed=!0,e.timing=Date.now(),e.trace=In(),e.count=0,t&&(t.consent&&(e.consent=xn(e.consent,t.consent),Tn(e,n.Commands.Consent)),t.user&&(e.user=xn(e.user,t.user),Tn(e,n.Commands.User)),t.globals&&(e.globals=xn(e.config.globalsStatic||{},t.globals),Tn(e,n.Commands.Globals)),t.custom&&(e.custom=xn(e.custom,t.custom),Tn(e,n.Commands.Custom))),Object.values(e.destinations).forEach(e=>{e.queuePush=[]}),e.queue=[],e.round++,await dt(e);const s=await nn(e);let r=!0;const i={};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:o}of t){const t=await e.push(n,o);!1===t.ok&&(r=!1),t.failed&&Object.assign(i,t.failed)}}hn(s);const a=await vn(e);if(o.push(...s),r)return a;const c={...a.failed??{},...i};return{...a,ok:!1,...Object.keys(c).length>0?{failed:c}:{}}}var Gn="collector.next";async function Qn(e,t,n={}){const o=n.ingest??r(n.id||"unknown"),s=e.config.next;if(void 0===s)return{copies:[{event:t,ingest:o}],respond:n.respond};const i=await Ze(e,e.transformers||{},s,t,o,n.respond,Gn),a=i.respond??n.respond;return 0===i.copies.length?(e.logger.debug("Event dropped by collector.next"+(i.droppedBy?` (${i.droppedBy})`:"")),j(e,t,o,{reason:"dropped",by:i.droppedBy,at:Gn}),{copies:[],respond:a,dropped:!0}):i.stopped?{copies:[],respond:a}:{copies:i.copies.map(t=>({event:zn(e,t.event,t.ingest),ingest:t.ingest})),respond:a}}import{OBSERVE_STORAGE_KEY as Nn,createBatchedPoster as Yn,createTelemetryObserver as Xn,parseObserveCredential as Jn}from"@walkeros/core";import{assign as Zn,createLogger as eo}from"@walkeros/core";import{createIngest as to,emitStep as no,FatalError as oo,getGrantedConsent as so,getSpanId as ro,InvalidEventError as io,processEventMapping as ao,tryCatchAsync as co,useHooks as uo}from"@walkeros/core";function lo(e,t){const n=uo(async(n,o={})=>await co(async()=>{if(!e.allowed){const t=G(e.config.queueMax),s=Q(e.preRunQueue,{event:n,options:o},{max:t});if(s.dropped>0){const n=ie(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&&X(e.preRunQueue);return e.logger.debug("event held until run",{name:n.name,dropped:s.dropped}),En({ok:!0})}const s=Date.now(),{id:r,ingest:i,respond:a,mapping:c,preChain:u,include:d,exclude:l}=o;let f=a,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;let h=i??to(r||"unknown");if(c){const t=await ao(p,c,e);if(t.ignore)return En({ok:!0});if(c.consent){const n=t.event.consent;if(!so(c.consent,e.consent,n)){const o=r?`source.${r}`:"collector.push";return e.logger.debug("Event dropped by source consent",{at:o,required:c.consent}),j(e,t.event,h,{reason:"consent",at:o,required:c.consent,consent:{...e.consent,...n}}),En({ok:!0,dropped:!0})}}p=t.event}if(void 0!==u){const n=r?`source.${r}.next`:void 0,o=await Ze(e,e.transformers||{},u,p,h,f,n);if(0===o.copies.length)return e.logger.debug("Event dropped by transformer chain"+(o.droppedBy?` (${o.droppedBy})`:"")),j(e,p,h,{reason:"dropped",by:o.droppedBy,at:n??"collector.push.preChain"}),En({ok:!0,dropped:!0});if(o.stopped)return o.respond&&(f=o.respond),En({ok:!0});if(o.respond&&(f=o.respond),o.copies.length>1){const n=await Promise.all(o.copies.map(async n=>{const o=Ln(e,t(n.event),n.ingest);return vn(e,o,{id:r,ingest:n.ingest,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+=o.copies.length,t.lastAt=Date.now(),t.duration+=Date.now()-s}return n[0]??En({ok:!0})}p=o.copies[0].event,h=o.copies[0].ingest}const m=Vn(e,p,h),w=await vn(e,m,{id:r,ingest:h,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 w},t=>{if(t instanceof oo)throw t;if(t instanceof io){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}),En({ok:!1,invalid:!0,error:t.message})}return e.status.failed++,e.logger.error("push failed",{...ae(t),event:n.name}),En({ok:!1})})(),"Push",e.hooks,e.logger);return async(t,o)=>{const s="string"==typeof t.id&&""!==t.id?t:{...t,id:ro()},r="string"==typeof s.id?s.id:"",i=O(s,o?.ingest,e),a=Date.now(),c=C(e,"collector.push","collector","in",r,a,i);c.inEvent=s,no(e,c);try{const t=await n(s,o),c=Date.now(),u=C(e,"collector.push","collector","out",r,c,i);return u.durationMs=c-a,u.outEvent=t,no(e,u),t}catch(t){const n=Date.now(),o=C(e,"collector.push","collector","error",r,n,i);throw o.durationMs=n-a,o.error=x(t),no(e,o),t}}}import{FatalError as fo,useHooks as po,tryCatchAsync as go}from"@walkeros/core";import{emitStep as ho,useHooks as mo}from"@walkeros/core";function wo(e={}){const t=e.maxEntries??1e4,n=e.lowWaterMark??.8,o=e.sweepIntervalMs??6e4,s=Math.floor(t*n),r=new Map,i={hits:0,misses:0,populates:0,writes:0,deletes:0,evictions_entries:0,evictions_ttl:0};let a;o>0&&(a=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++);i.evictions_ttl+=t},o),a&&"function"==typeof a.unref&&a.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),i.evictions_ttl++,void i.misses++):(r.delete(e),r.set(e,t),i.hits++,t.value);i.misses++},set(e,n,o){const a=!r.has(e);a||r.delete(e),r.set(e,{value:n,expires:void 0!==o?Date.now()+o:void 0}),i.writes++,a&&i.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++}i.evictions_entries+=n}()},delete(e){r.delete(e)&&i.deletes++},get counters(){return{...i}},destroy(){void 0!==a&&(clearInterval(a),a=void 0),r.clear()}}}import{compileMatcher as vo,emitStep as yo,readCacheEnvelope as bo,wrapCacheEnvelope as ko}from"@walkeros/core";function So(e,t){const{cacheConfig:n,cacheStore:o,namespace:s,logger:r,storeId:i,collector:a}=t,c=(e,t)=>{if(!a)return;const n=C(a,`store.${i}`,"store","in","");n.meta={op:"cache",cached:"hit"===t,status:t,key:e},yo(a,n)},u={hits:0,misses:0,populates:0,writes:0,deletes:0,inflight_dedups:0},d=n.rules.map(e=>({match:e.match?vo(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=bo(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 i=p.get(n);if(i)return u.inflight_dedups++,c(t,"hit"),i;u.misses++,c(t,"miss");const a=(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,ko(s,e),e),u.populates++}catch(e){g("set",t,e)}return s}finally{p.delete(n)}})();return p.set(n,a),a},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),ko(n,e),e)}catch(e){g("set",t,e)}},async delete(t){u.deletes++,await e.delete(t);try{await o.delete(l(t))}catch(e){g("delete",t,e)}}};function g(e,t,n){const o=`store-cache(${i}): cache ${e} failed for "${t}"; backing succeeded, continuing`;r?r.warn(o,ae(n)):console.warn(o,n)}}function _o(e,t,n){const o=`store.${n}`,s=mo(t.get,"StoreGet",e.hooks,e.logger),r=mo(t.set,"StoreSet",e.hooks,e.logger),i=mo(t.delete,"StoreDelete",e.hooks,e.logger);t.get=async t=>{const n=Date.now(),r=C(e,o,"store","in","",n);r.meta={op:"get",key:t},ho(e,r);try{const r=await s(t),i=Date.now(),a=C(e,o,"store","out","",i);return a.durationMs=i-n,a.meta={op:"get",key:t},ho(e,a),r}catch(s){const r=Date.now(),i=C(e,o,"store","error","",r);throw i.durationMs=r-n,i.meta={op:"get",key:t},i.error=x(s),ho(e,i),s}},t.set=async(t,n,s)=>{const i=Date.now(),a=C(e,o,"store","in","",i);a.meta={op:"set",key:t},ho(e,a);try{await r(t,n,s);const a=Date.now(),c=C(e,o,"store","out","",a);c.durationMs=a-i,c.meta={op:"set",key:t},ho(e,c)}catch(n){const s=Date.now(),r=C(e,o,"store","error","",s);throw r.durationMs=s-i,r.meta={op:"set",key:t},r.error=x(n),ho(e,r),n}},t.delete=async t=>{const n=Date.now(),s=C(e,o,"store","in","",n);s.meta={op:"delete",key:t},ho(e,s);try{await i(t);const s=Date.now(),r=C(e,o,"store","out","",s);r.durationMs=s-n,r.meta={op:"delete",key:t},ho(e,r)}catch(s){const r=Date.now(),i=C(e,o,"store","error","",r);throw i.durationMs=r-n,i.meta={op:"delete",key:t},i.error=x(s),ho(e,i),s}}}async function Eo(e,t={}){const n={};for(const[o,s]of Object.entries(t)){const{code:t,config:r={},env:i={}}=s,a=e.logger.scope("store").scope(o),c={collector:e,logger:a,id:o,config:r,env:i,reportError:ce(e,"store",o,a)},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 i=t[r];if("BLACK"===i)return;if("GRAY"===i){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 a=e[r].cache?.store;if(void 0!==a){if(!(a in e))throw new Error(`Store "${r}" cache.store references "${a}", which is not declared in flow.stores`);s(a)}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,i;void 0!==s.store?(r=n[s.store],i=s.store):(n.__cache||(n.__cache=wo()),r=n.__cache,i="__cache");const a=s.namespace??t;e.logger.scope("store-cache").scope(t).info(`store "${t}" caches with namespace "${a}:" via ${i}`),n[t]=So(n[t],{storeId:t,cacheConfig:s,cacheStore:r,namespace:a,logger:e.logger.scope("store-cache").scope(t),collector:e})}for(const[t,o]of Object.entries(n))"__cache"!==t&&_o(e,o,t);return n}async function qo(e){const t=Zn({globalsStatic:{},sessionStatic:{},run:!0,queueMax:1e3},e,{merge:!1,extend:!1}),n={level:e.logger?.level,handler:e.logger?.handler},o=eo(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),void 0!==e.next&&(t.next=e.next),r.push=lo(r,e=>Kn(r,e)),r.command=function(e,t){return po(async(n,o,s)=>await go(async()=>await t(e,n,o,s),t=>{if(t instanceof fo)throw t;return e.status.failed++,e.logger.error("command failed",{...ae(t),command:n}),En({ok:!1})})(),"Command",e.hooks,e.logger)}(r,Bn),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 i;if("string"==typeof t)i={name:t},n&&"object"==typeof n&&!Array.isArray(n)&&(i.data=n);else{if(!t||"object"!=typeof t||Array.isArray(t))return En({ok:!1});i={...t},n&&"object"==typeof n&&!Array.isArray(n)&&(i.data={...i.data||{},...n})}return o&&"object"==typeof o&&(i.context=o),s&&Array.isArray(s)&&(i.nested=s),r&&"object"==typeof r&&(i.custom=r),e.push(i)}}(r);const i=e.stores||{};return"undefined"==typeof __WALKEROS_STORES__||__WALKEROS_STORES__?(r.stores=await Eo(r,i),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)}}}(i,r.stores,e)):Object.keys(i).length>0&&o.warn("stores: not in this build, config ignored"),r.stores.__cache||(r.stores.__cache=wo()),r.destinations=await On(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;if("undefined"==typeof __WALKEROS_VALIDATE__||__WALKEROS_VALIDATE__){const t=Te(s,"Transformer");if(!t.ok){e.logger.warn(`Transformer ${o} invalid (${t.code}): ${t.reason}. Skipping.`);continue}}const{config:i}=ze(s,"before"),{config:a}=ze({...s,config:i},"next"),c=Object.keys(r).length>0?{...a,env:r}:a,{cache:u}=s,d=u?{...c,cache:u}:c,l=s.config?.state??s.state;P(e,De("transformer",o),l);const f=void 0!==l&&void 0===d.state?{...d,state:l}:d,p=e.logger.scope("transformer").scope(o),g={collector:e,logger:p,id:o,ingest:Ee(o),config:f,env:r,reportError:ce(e,"transformer",o,p)},h=Ke(s);for(const t of Le(s))e.logger.warn(`Transformer ${o}: ${t}`);const m=t??(e=>h?{type:"pass",config:e.config,push:async t=>{const n=await Be(t,h,e.collector);return!n.ignore&&{event:n.event}}}:{type:"pass",config:e.config,push:e=>({event:e})}),w=await m(g);void 0!==s.before&&void 0===w.config?.before&&(w.config={...w.config??{},before:s.before}),void 0!==s.next&&void 0===w.config?.next&&(w.config={...w.config??{},next:s.next}),void 0!==l&&void 0===w.config?.state&&(w.config={...w.config??{},state:l}),n[o]=w}return n}(r,e.transformers||{}),r}var Oo=globalThis;function Co(e){try{const t=Oo.window;if(!t)return;t.localStorage.getItem(Nn)===e&&t.localStorage.removeItem(Nn)}catch{}}function xo(e,t){return void 0===t?e:n=>e({...n,release:t})}function jo(e,t){const n=t.observe;if(!n)return;const o=e.name??"default";if("binding"in n){const t=function(){const e=Oo.window,t=Oo.URLSearchParams;if(!e||!t)return null;try{const n=new t(e.location.search.replace(/^\?/,"")).getAll(Nn);return n.length>0?n[n.length-1]??null:null}catch{return null}}(),s=t??function(){try{return Oo.window?.localStorage.getItem(Nn)??null}catch{return null}}();if(!s)return;const r=Jn(s);if(!r)return void(null===t?(e.logger.warn("observe: malformed stored credential cleared"),Co(s)):e.logger.warn("observe: malformed credential ignored"));if(r.pb!==n.binding)return void e.logger.warn("observe: credential binding mismatch, credential ignored");let i;!function(e){try{Oo.window?.localStorage.setItem(Nn,e)}catch{}}(s),null!==t&&function(){const e=Oo.window,t=Oo.URLSearchParams;if(e&&t)try{const n=e.location.href,o=n.indexOf("#"),s=o>=0?n.slice(o):"",r=o>=0?n.slice(0,o):n,i=r.indexOf("?"),a=i>=0?r.slice(0,i):r,c=new t(i>=0?r.slice(i+1):"");c.delete(Nn);const u=c.toString();e.history.replaceState({},"",`${a}${u?`?${u}`:""}${s}`)}catch{}}();const a=Yn({url:`${n.url}/ingest/${r.ses}`,token:r.secret,headers:{"X-Walkeros-Binding":n.binding},onStatus:t=>{401===t&&(Co(s),i&&e.observers.delete(i))}});i=Xn(function(e,t){return void 0===t?e:n=>e({...n,flowId:t})}(xo(a,e.release),n.flowId),{flowId:n.flowId??o,...void 0!==n.level?{level:n.level}:{},...void 0!==n.sample?{sample:n.sample}:{}}),e.observers.add(i);const c=n.level;return void(void 0!==c&&(e.observeLevel=()=>c))}if("off"===n.level)return;const s=n.level;void 0!==s&&(e.observeLevel=()=>s),e.observers.add(Xn(xo(Yn({url:`${n.url}/ingest/${n.sessionId}`,token:n.token}),e.release),{flowId:o,level:n.level,sample:n.sample}))}async function Io(e){const t=e??{},n=await qo(t);if(t.observers)for(const e of t.observers)n.observers.add(e);"undefined"==typeof __WALKEROS_OBSERVE__||__WALKEROS_OBSERVE__?jo(n,t):t.observe&&n.logger.warn("observe: not in this build, config ignored"),await ut(n,t.sources||{});const{consent:o,user:s,globals:r,custom:i}=t;o&&await n.command("consent",o),s&&await n.command("user",s),r&&await n.command("globals",r),i&&await n.command("custom",i),n.config.run&&await n.command("run");let a=n.elb;const c=Object.values(n.sources),u=c.find(e=>e.config.primary);return u?a=u.push:c.length>0&&(a=c[0].push),{collector:n,elb:a}}export{e as Code,t as Commands,n as Const,Z as DEFAULT_BREAKER_COOLDOWN_MS,J as DEFAULT_BREAKER_THRESHOLD,se as DEFAULT_DLQ_MAX,gn as addDestination,ce as buildReportError,ie as bumpDropped,jt as callDestinationOn,Bn as commonHandleCommand,zn as completeEvent,Ln as createEvent,lo as createPush,En as createPushResult,Sn as destinationInit,_n as destinationPush,Vn as enrichEvent,re as ensureDestStatus,Et as enterCascade,ae as errorMeta,Ht as fireCallbacks,it as flushSourceQueueOn,A as getCacheStore,On as initDestinations,ct as initSource,ut as initSources,oe as isBreakerProbePermitted,yt as isRequireSatisfied,at as isSourceStarted,wt as isStateDelivery,vt as isStatePresent,Cn as mergeEnvironments,xt as on,on as onApply,Kn as prepareEvent,s as processConsent,vn as pushToDestinations,tn as redeliverStateAtRun,qn as registerDestination,te as resolveBreakerConfig,Un as runCollector,Qn as runCollectorNext,et as runTransformerBefore,Ze as runTransformerChain,kt as setMark,St as shouldDeliver,Io as startFlow,Fe as transformerInit,Ve as transformerPush,T 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.7.2-next-1791213015481",
4
+ "version": "4.7.2",
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.7.2-next-1791213015481"
35
+ "@walkeros/core": "4.7.2"
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.7.2-next-1791213015481"
64
+ "@walkeros/core": "4.7.2"
65
65
  }
66
66
  }