@walkeros/collector 4.2.1-next-1781715165983 → 4.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # @walkeros/collector
2
2
 
3
- ## 4.2.1-next-1781715165983
3
+ ## 4.2.1
4
4
 
5
5
  ### Patch Changes
6
6
 
@@ -30,7 +30,7 @@
30
30
  - Updated dependencies [d1b41ca]
31
31
  - Updated dependencies [0a8a08b]
32
32
  - Updated dependencies [8afb7cc]
33
- - @walkeros/core@4.2.1-next-1781715165983
33
+ - @walkeros/core@4.2.1
34
34
 
35
35
  ## 4.2.0
36
36
 
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- "use strict";var e,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,o=Object.getOwnPropertyNames,s=Object.prototype.hasOwnProperty,r={};((e,n)=>{for(var o in n)t(e,o,{get:n[o],enumerable:!0})})(r,{Code:()=>i,Commands:()=>a,Const:()=>c,DEFAULT_BREAKER_COOLDOWN_MS:()=>C,DEFAULT_BREAKER_THRESHOLD:()=>k,DEFAULT_DLQ_MAX:()=>x,addDestination:()=>je,buildReportError:()=>D,bumpDropped:()=>j,callDestinationOn:()=>le,commonHandleCommand:()=>Ge,createEvent:()=>Ne,createPush:()=>Qe,createPushResult:()=>Me,destinationInit:()=>Ae,destinationPush:()=>$e,enrichEvent:()=>Le,ensureDestStatus:()=>E,enterCascade:()=>ae,extractTransformerNextMap:()=>P,fireCallbacks:()=>fe,flushSourceQueueOn:()=>K,getCacheStore:()=>M,initDestinations:()=>Pe,initSource:()=>L,initSources:()=>W,isBreakerProbePermitted:()=>O,isRequireSatisfied:()=>ne,isSourceStarted:()=>N,isStateDelivery:()=>ee,isStatePresent:()=>te,mergeEnvironments:()=>_e,on:()=>de,onApply:()=>me,prepareEvent:()=>Ke,processConsent:()=>d,pushToDestinations:()=>De,redeliverStateAtRun:()=>he,registerDestination:()=>Te,resolveBreakerConfig:()=>I,runCollector:()=>We,runTransformerChain:()=>z,setMark:()=>se,shouldDeliver:()=>re,startFlow:()=>at,transformerInit:()=>H,transformerPush:()=>R,walkChain:()=>F,wrapEnv:()=>ut}),module.exports=(e=r,((e,r,i,a)=>{if(r&&"object"==typeof r||"function"==typeof r)for(let c of o(r))s.call(e,c)||c===i||t(e,c,{get:()=>r[c],enumerable:!(a=n(r,c))||a.enumerable});return e})(t({},"__esModule",{value:!0}),e));var 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");require("@walkeros/core");function p(e,t){const n=e.status.startedAt;return{flowId:"default",stepId:t.stepId,stepType:t.stepType,phase:t.phase,eventId:t.eventId,timestamp:new Date(t.now).toISOString(),elapsedMs:t.now-n}}var g=require("@walkeros/core"),h=require("@walkeros/core"),m=require("@walkeros/core");function y(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 v=new WeakMap;function w(e,t,n,o){v.get(e)||(v.set(e,!0),t.warn(n,o))}function b(e){v.delete(e)}var k=5,C=3e4,S=()=>Date.now();function I(e){if(void 0!==e)return"number"==typeof e?{threshold:e,cooldown:C}:{threshold:e.threshold??k,cooldown:e.cooldown??C}}function q(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=S()+s)):void(r.consecutiveFailures>=o&&(r.state="open",r.probing=!1,r.openUntil=S()+s)))}function O(e,t){return!e||("closed"===e.state||"half-open"===e.state||void 0!==e.openUntil&&t>=e.openUntil)}var x=100;function E(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 j(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 D(e,t,n,o,s){const r=(0,m.stepId)(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??x},c=y(i,[o,s],a);if(c.dropped>0){const t=j(e.status,(0,m.stepId)("destination",n),"dlq",c.dropped);w(i,r,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:n,cap:a.max,droppedCount:t})}else i.length<a.max&&b(i);const u=E(e,n);u.failed++,u.dlqSize=i.length,e.status.failed++;const d=I(t.config.breaker);if(d){const o=t.config.id||n;q(e.status.breakers,(0,m.stepId)("destination",o),"transport-failure",d.threshold,d.cooldown)}}(e,s,n,i,t,o):e.status.failed++,void o.error("report error",{error:t instanceof Error?t.message:String(t),event:i.name});e.status.connectionErrors[r]=(e.status.connectionErrors[r]??0)+1,o.error("connection error",{error:t instanceof Error?t.message:String(t)})}catch{}}}var A=require("@walkeros/core"),$=require("@walkeros/core");function M(e,t){return e.storeId&&t.stores[e.storeId]?t.stores[e.storeId]:t.stores.__cache}function T(e,t){return e?t.stores[e]:t.stores.__cache}function P(e){const t={};for(const[n,o]of Object.entries(e)){const e=o.config?.next;"string"==typeof e||Array.isArray(e)&&e.every(e=>"string"==typeof e)?t[n]={next:e}:t[n]={}}return t}function _(e,t){const n=e.config||{},o=e[t];return void 0!==o?{config:{...n,[t]:o},chainValue:o}:{config:n,chainValue:void 0}}function F(e,t={}){if(!e)return[];if(Array.isArray(e))return e;const n=[],o=new Set;let s=e;for(;s&&t[s]&&!o.has(s);){o.add(s),n.push(s);const e=t[s].next;if(Array.isArray(e)){n.push(...e);break}s=e}return n}async function H(e,t,n){if(t.init&&!t.config.init){const o=t.type||"unknown",s=e.logger.scope(`transformer:${o}`),r={collector:e,logger:s,id:n,ingest:(0,$.createIngest)(n),config:t.config,env:B(t.config.env),reportError:D(e,"transformer",n,s)};s.debug("init");const i=await(0,$.useHooks)(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 R(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:{...B(t.config.env),...r?{respond:r}:{}},reportError:D(e,"transformer",n,a)};a.debug("push",{event:o.name});const u="string"==typeof o.id?o.id:"",d=Date.now(),l=p(e,{stepId:(0,$.stepId)("transformer",n),stepType:"transformer",phase:"in",eventId:u,now:d});l.inEvent=o,(0,$.emitStep)(e,l);try{const s=await(0,$.useHooks)(t.push,"TransformerPush",e.hooks,e.logger)(o,c),r=Date.now(),i=p(e,{stepId:(0,$.stepId)("transformer",n),stepType:"transformer",phase:"out",eventId:u,now:r});return i.durationMs=r-d,i.outEvent=s,(0,$.emitStep)(e,i),a.debug("push done"),s}catch(t){const o=Date.now(),s=p(e,{stepId:(0,$.stepId)("transformer",n),stepType:"transformer",phase:"error",eventId:u,now:o});throw s.durationMs=o-d,s.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},(0,$.emitStep)(e,s),t}}function U(e,t){return e?{...e,_meta:{...e._meta,path:[...e._meta.path]}}:(0,$.createIngest)(t)}async function z(e,t,n,o,s,r,i){s||(s=(0,$.createIngest)(n[0]??"chain")),i&&s._meta&&(s._meta.chainPath=i);let a=o,c=r;for(const o of n){const r=t[o];if(!r){e.logger.warn(`Transformer not found: ${o}`);continue}if(s&&s._meta&&s._meta.path.length>256)return e.logger.error(`Max path length exceeded at ${o}`),{event:null,respond:c};s&&s._meta&&(s._meta.hops++,s._meta.path.push(o));if(!await(0,$.tryCatchAsync)(H,t=>{if(t instanceof $.FatalError)throw t;return e.status.failed++,e.logger.scope(`transformer:${r.type||"unknown"}`).error("transformer init failed",{transformer:o,error:t}),!1})(e,r,o))return{event:null,respond:c};if(i&&void 0!==r.config?.chainMocks?.[i]){const t=r.config.chainMocks[i];e.logger.scope(`transformer:${r.type||"unknown"}`).debug("chainMock",{chain:i}),a=t;continue}if(void 0!==r.config?.mock){e.logger.scope(`transformer:${r.type||"unknown"}`).debug("mock"),a=r.config.mock;continue}if(r.config?.disabled)continue;const u=r.config?.cache,d=u?(0,$.compileCache)(u):void 0,l=d?M(d,e):void 0,f=r.config?.state?(0,$.compileState)(r.config.state):void 0,p=f?.filter(e=>"get"===e.mode),g=f?.filter(e=>"set"===e.mode),h=async t=>g&&0!==g.length?(0,$.applyState)(g,t=>T(t,e),t,e):t;let m;if(d&&l){const e=(0,$.buildCacheContext)(s,a),t=await(0,$.checkCache)(d,l,e);if("HIT"===t?.status&&t.value){if(a=t.value,d.stop)return{event:a,respond:c,stopped:!0};continue}"MISS"===t?.status&&(m={key:t.key,ttl:t.rule.ttl})}const y=r.config.before;if(y){const n=(0,$.getNextSteps)(y,(0,$.buildCacheContext)(s,a));if(1===n.length){const o=F(n[0],P(t));if(o.length>0){const n=await z(e,t,o,a,s,c,i);if(null===n.event)return{event:null,respond:n.respond??c};if(n.stopped)return{event:Array.isArray(n.event)?n.event[0]:n.event,respond:n.respond??c,stopped:!0};n.respond&&(c=n.respond),a=Array.isArray(n.event)?n.event[0]:n.event}}else n.length>1&&await Promise.all(n.map(n=>(0,$.tryCatchAsync)(z,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,F(n,P(t)),a,U(s,n),void 0,i)))}p&&p.length>0&&(a=await(0,$.applyState)(p,t=>T(t,e),a,e));const v=await(0,$.tryCatchAsync)(R,t=>(e.logger.scope(`transformer:${r.type||"unknown"}`).error("Push failed",{error:t}),!1))(e,r,o,a,s,c);if(!1===v)return{event:null,respond:c};if(Array.isArray(v)){const r=n.slice(n.indexOf(o)+1),u=await Promise.all(v.map(async n=>{const o=await h(n.event||a),u=U(s,"unknown");if(n.next){const s=(0,$.getNextSteps)(n.next,(0,$.buildCacheContext)(u,o));if(0===s.length)return{event:o,respond:c};if(1===s.length){const n=F(s[0],P(t));return n.length>0?z(e,t,n,o,u,c,i):{event:o,respond:c}}return(await Promise.all(s.map(n=>(0,$.tryCatchAsync)(z,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,F(n,P(t)),o,U(u,n),void 0,i)))).map(e=>({event:e.event,respond:void 0}))}return r.length>0?z(e,t,r,o,u,c,i):{event:o,respond:c}}));let d=c;const l=[];for(const e of u.flat())if(null!==e)if(e&&"object"==typeof e&&"event"in e){const t=e;if(t.respond&&(d=t.respond),null===t.event)continue;Array.isArray(t.event)?l.push(...t.event):l.push(t.event)}else l.push(e);return 0===l.length?{event:null,respond:d}:1===l.length?{event:l[0],respond:d}:{event:l,respond:d}}if(v&&"object"==typeof v){const{event:n,respond:o,next:r}=v;if(o&&(c=o),void 0!==r){const o=await h(n||a),u=(0,$.getNextSteps)(r,(0,$.buildCacheContext)(s,o));if(0===u.length){a=o;continue}if(1===u.length){const n=F(u[0],P(t));return n.length>0?z(e,t,n,o,s,c,i):(e.logger.warn(`Branch target not found: ${JSON.stringify(r)}`),{event:null,respond:c})}return await Promise.all(u.map(n=>(0,$.tryCatchAsync)(z,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,F(n,P(t)),o,U(s,n),void 0,i))),{event:null,respond:void 0}}n&&(a=n)}g&&g.length>0&&(a=await(0,$.applyState)(g,t=>T(t,e),a,e)),m&&l&&(0,$.storeCache)(l,m.key,a,m.ttl);const w=r.config.next,b="string"==typeof w||Array.isArray(w)&&w.every(e=>"string"==typeof e),k=void 0!==w&&!b;if((!v||"object"==typeof v&&!v.next)&&k){const n=(0,$.getNextSteps)(r.config.next,(0,$.buildCacheContext)(s,a));if(1===n.length){const o=F(n[0],P(t));return o.length>0?z(e,t,o,a,s,c,i):{event:a,respond:c}}return n.length>1?(await Promise.all(n.map(n=>(0,$.tryCatchAsync)(z,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,F(n,P(t)),a,U(s,n),void 0,i))),{event:null,respond:void 0}):{event:a,respond:c}}}return{event:a,respond:c}}function B(e){return e&&(0,$.isObject)(e)?e:{}}function G(e){return"string"==typeof e||!(!Array.isArray(e)||!e.every(e=>"string"==typeof e))}async function K(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)ee(n)&&!re(e,t,n)||(await(0,A.tryCatchAsync)(t.on,t=>{if(t instanceof A.FatalError)throw t;e.status.failed++,e.logger.scope("source").error("source on flush failed",{sourceId:s,type:n,error:t})})(n,r),ee(n)&&se(e,t,n))}function N(e){return Boolean(e.config.init)&&!e.config.require?.length}async function L(e,t,n){const{code:o,config:s={},env:r={},primary:i,next:a,before:c,cache:u}=n,d=s.state??n.state,l=d?(0,A.compileState)(d):void 0,f=u,p=f?(0,A.compileCache)({...f,stop:f.stop??!0}):void 0,g=G(a)?F(a,P(e.transformers)):void 0,h=G(c)?F(c,P(e.transformers)):void 0,m=r.push,y=m??e.push,v=Boolean(m),w=async(n,o,r)=>{let i;const u=h??(void 0!==c?(()=>{const t=(0,A.getNextSteps)(c,(0,A.buildCacheContext)(r.ingest));if(0===t.length)return[];return F(1===t.length?t[0]:t,P(e.transformers))})():[]);let d=[n];if(u.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const o=await z(e,e.transformers,u,n,r.ingest,r.respond,`source.${t}.before`);if(null===o.event)return{ok:!0};if(o.stopped)return o.respond&&(r.respond=o.respond),{ok:!0};o.respond&&(r.respond=o.respond),d=Array.isArray(o.event)?o.event:[o.event]}if(p){const t=M(p,e);if(t){const n=(0,A.buildCacheContext)(r.ingest),o=await(0,A.checkCache)(p,t,n);if(o){if("HIT"===o.status&&void 0!==o.value&&p.stop){let t=o.value;return o.rule.update&&(t=await(0,A.applyUpdate)(t,o.rule.update,{...n,cache:{status:"HIT"}},e)),r.respond?.(t),{ok:!0}}if("MISS"===o.status&&p.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=>{(0,A.storeCache)(t,u,n,d),a?i=(async()=>{const t=await(0,A.applyUpdate)(n,a,c,e);s(t)})():s(n)};r.respond=l}"MISS"!==o.status||p.stop||(0,A.storeCache)(t,o.key,!0,o.rule.ttl)}}}const f=g?{kind:"single",preChain:g}:void 0!==a?(()=>{const t=(0,A.getNextSteps)(a,(0,A.buildCacheContext)(r.ingest));return 0===t.length?{kind:"single",preChain:[]}:1===t.length?{kind:"single",preChain:F(t[0],P(e.transformers))}:{kind:"many",branches:t.map(t=>F(t,P(e.transformers)))}})():{kind:"single",preChain:[]};!v&&l&&l.length>0&&(d=await Promise.all(d.map(t=>(0,A.applyState)(l,t=>T(t,e),t,e))));let m={ok:!0};for(const n of d)"many"===f.kind?(await Promise.all(f.branches.map((i,a)=>(0,A.tryCatchAsync)(async()=>v?y(n):y(n,{...o,id:t,ingest:U(r.ingest,`${t}.${a}`),respond:void 0,mapping:s,preChain:i}),t=>(e.logger.scope("source:many").error(`many branch ${a} failed`,{error:t}),{ok:!0}))())),m={ok:!0}):m=v?await y(n):await y(n,{...o,id:t,ingest:r.ingest,respond:r.respond,mapping:s,preChain:f.preChain});return i&&await i,m},b=async n=>{const o=(0,A.createIngest)(t);if(!s.ingest||void 0===n)return o;const r=await(0,A.getMappingValue)(n,s.ingest,{collector:e});return{...o,...r,_meta:o._meta}},k=e.logger.scope("source").scope(t),C={command:e.command,sources:e.sources,elb:e.sources.elb.push,logger:k,...r,push:async(e,n={})=>{const o={ingest:(0,A.createIngest)(t),respond:void 0};return w(e,n,o)}},S={collector:e,logger:k,id:t,config:s,env:C,withScope:async(e,t,n)=>{const o={ingest:await b(e),respond:t};return n({...C,push:(e,t={})=>w(e,t,o),ingest:o.ingest,respond:o.respond})},reportError:D(e,"source",t,k)},I=await(0,A.tryCatchAsync)(o,n=>{if(n instanceof A.FatalError)throw n;e.status.failed++,e.logger.scope("source").error("source factory failed",{sourceId:t,error:n})})(S);if(!I)return;const q=I.type||"unknown",O=e.logger.scope(q).scope(t);return C.logger=O,i&&(I.config={...I.config,primary:i}),I}async function W(e,t={}){const n={};for(const[o,s]of Object.entries(t)){const t=await L(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(0,A.tryCatchAsync)(n.init.bind(n),n=>{if(n instanceof A.FatalError)throw n;o=!0,e.status.failed++,e.logger.scope("source").error("source init failed",{sourceId:t,error:n})})(),o||(n.config.init=!0,N(n)&&await K(e,n,t))}return await V(e),n}async function V(e){for(const[t,n]of Object.entries(e.sources)){if(N(n))continue;const o=n.config.require;if(!o?.length)continue;const s=o.filter(t=>!ne(e,t));s.length!==o.length&&(n.config.require=s,N(n)&&await K(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=>!ne(e,t));if(n.config&&(n.config.require=s),s.length>0)continue;delete e.pending.destinations[t];const r=Te(n);!1!==r.config.queue&&(r.queuePush=[...e.queue]),e.destinations[t]=r}}function Q(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 Y=!1;function J(){Y||(Y=!0,"undefined"!=typeof console&&"function"==typeof console.warn&&console.warn("walkerOS: ignored an on-dispatch call with a non-collector argument"))}function X(e,t,n,o){if(n instanceof g.FatalError)throw n;e.logger.scope("on").error("on callback failed",{kind:t,...o,error:n})}var Z=[c.Commands.Consent,c.Commands.User,c.Commands.Globals,c.Commands.Custom];function ee(e){return Z.includes(e)}function te(e,t){switch(t){case c.Commands.Consent:return Object.keys(e.consent).length>0;case c.Commands.User:return Object.keys(e.user).length>0;case c.Commands.Globals:return Object.keys(e.globals).length>0;case c.Commands.Custom:return Object.keys(e.custom).length>0;default:return!1}}function ne(e,t){switch(t){case c.Commands.Consent:case c.Commands.User:case c.Commands.Globals:case c.Commands.Custom:return te(e,t);case c.Commands.Run:case c.Commands.Ready:return!0===e.allowed;default:return e.seenEvents.has(String(t))}}function oe(e,t){return e.cellVersion[String(t)]??0}function se(e,t,n){let o=e.delivery.get(t);o||(o={},e.delivery.set(t,o)),o[String(n)]=oe(e,n)}function re(e,t,n){return e.allowed&&oe(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 ie=8;function ae(e){return e.cascade?()=>{}:(e.cascade={counts:new WeakMap},()=>{e.cascade=void 0})}function ce(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<=ie||(i===ie+1&&e.logger.error("state delivery did not converge",{type:r}),!1)}function ue(e,t){return{collector:e,logger:e.logger.scope("on").scope(String(t))}}async function de(e,t,n){if(!Q(e))return void J();const o=e.on,s=o[t]||[],r=(0,g.isArray)(n)?n:[n];r.forEach(e=>{s.push(e)}),o[t]=s,fe(e,t,r)}function le(e,t,n,o,s){if(!t.on)return;const r=t.type||"unknown",i=e.logger.scope(r).scope("on").scope(o),a={collector:e,logger:i,id:n,config:t.config,data:s,env:_e(t.env,t.config.env),reportError:D(e,"destination",n,i,t)};(0,h.tryCatch)(t.on,t=>X(e,"destination",t,{destId:n,type:o}))(o,a)}function fe(e,t,n,o){if(!Q(e))return void J();const s=pe(e,t,o);if(n.length)switch(t){case c.Commands.Consent:!function(e,t,n){const o=n||e.consent,s=ue(e,c.Commands.Consent);t.forEach(t=>{re(e,t,c.Commands.Consent)&&ce(e,t,c.Commands.Consent)&&(Object.keys(o).filter(e=>e in t).forEach(n=>{(0,h.tryCatch)(t[n],t=>X(e,"consent",t,{key:n}))(o,s)}),se(e,t,c.Commands.Consent))})}(e,n,o);break;case c.Commands.Ready:!function(e,t){if(!e.allowed)return;const n=ue(e,c.Commands.Ready);t.forEach(t=>{(0,h.tryCatch)(t,t=>X(e,"ready",t))(void 0,n)})}(e,n);break;case c.Commands.Run:!function(e,t){if(!e.allowed)return;const n=ue(e,c.Commands.Run);t.forEach(t=>{(0,h.tryCatch)(t,t=>X(e,"run",t))(void 0,n)})}(e,n);break;case c.Commands.Session:!function(e,t){if(!e.session)return;const n=ue(e,c.Commands.Session);t.forEach(t=>{(0,h.tryCatch)(t,t=>X(e,"session",t))(e.session,n)})}(e,n);break;default:{const o=ue(e,t),r=ee(t);n.forEach(n=>{"function"==typeof n&&(r&&!re(e,n,t)||r&&!ce(e,n,t)||((0,h.tryCatch)(n,n=>X(e,"generic",n,{type:t}))(s,o),r&&se(e,n,t)))});break}}}function pe(e,t,n){switch(t){case c.Commands.Consent:return n||e.consent;case c.Commands.Session:return e.session;case c.Commands.User:return n||e.user;case c.Commands.Custom:return n||e.custom;case c.Commands.Globals:return n||e.globals;case c.Commands.Config:return n||e.config;default:return}}async function ge(e,t,n,o,s){if(!t.on)return!1;if(ee(o)&&!re(e,t,o))return!1;if(ee(o)&&!ce(e,t,o))return!1;const r=await(0,h.tryCatchAsync)(t.on,t=>X(e,"source",t,{sourceId:n,type:o}))(o,s);return ee(o)&&se(e,t,o),!1===r}async function he(e){if(Q(e))for(const t of Z){if(!te(e,t))continue;const n=pe(e,t);fe(e,t,e.on[t]||[]);for(const[o,s]of Object.entries(e.sources))N(s)&&await ge(e,s,o,t,n)}else J()}async function me(e,t,n,o){if(!Q(e))return J(),!0;e.seenEvents.add(String(t));let s=n||[];n||(s=e.on[t]||[]);const r=pe(e,t,o);let i=!1;for(const[n,o]of Object.entries(e.sources)){if(o.config.require?.length){const e=o.config.require.indexOf(t);-1!==e&&o.config.require.splice(e,1)}if(o.on)if(N(o)){await ge(e,o,n,t,r)&&(i=!0)}else o.queueOn=o.queueOn||[],o.queueOn.push({type:t,data:r})}Object.entries(e.destinations).forEach(([n,o])=>{if(o.on){if(!o.config.init)return o.queueOn=o.queueOn||[],void o.queueOn.push({type:t,data:r});le(e,o,n,t,r)}});for(const[t,n]of Object.entries(e.sources))N(n)&&n.queueOn?.length&&await K(e,n,t);const a=Object.values(e.sources).some(e=>!N(e)&&e.config.require?.length);return(Object.keys(e.pending.destinations).length>0||a)&&await V(e),fe(e,t,s,o),!i}var ye=1e3,ve=1e3,we=3e4,be=1e4;function ke(e){return"number"==typeof e&&e>0?e:be}var Ce=class extends Error{constructor(e){super(e),this.name="DestinationTimeoutError"}};function Se(e,t,n){let o;const s=new Promise((e,s)=>{o=setTimeout(()=>s(new Ce(n)),t)});return Promise.race([e,s]).finally(()=>{o&&clearTimeout(o)})}var Ie=Object.freeze({batched:!0});function qe(e){return e===Ie}var Oe=" batch-all";function xe(e){return void 0===e?{}:"number"==typeof e?{wait:e}:{wait:e.wait,size:e.size,age:e.age}}function Ee(e,t,n){if(!e)return[];if(Array.isArray(e)&&e.every(e=>"string"==typeof e))return F(e,t);if("string"==typeof e)return F(e,t);const o=(0,f.getNextSteps)(e,(0,f.buildCacheContext)(n));return 0===o.length?[]:1===o.length?F(o[0],t):F(o,t)}async function je(e,t){const{code:n,config:o={},env:s={},before:r,next:i,cache:a,state:c}=t;if(!(0,f.isFunction)(n.push))return Me({ok:!1,failed:{invalid:{type:"invalid",error:"Destination code must have a push method"}}});const u=o||{init:!1};let d=r?{...u,before:r}:{...u};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(d.require?.length){e.pending.destinations[l]=t,await V(e);const n=e.destinations[l];return n?De(e,void 0,{},{[l]:n}):Me({ok:!0})}const p={...n,config:d,env:_e(n.env,s)};return e.destinations[l]=p,!1!==p.config.queue&&(p.queuePush=[...e.queue]),De(e,void 0,{},{[l]:p})}async function De(e,t,n={},o){const{allowed:s,consent:r,globals:i,user:a}=e;if(!s)return Me({ok:!1});if(t){const n=e.config.queueMax;if(void 0===n)throw new Error("Collector.Config.queueMax is undefined; defaults must be seeded by collector()");const o=y(e.queue,t,{max:n});if(o.dropped>0){const t=j(e.status,(0,f.stepId)("collector"),"queue",o.dropped);w(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 c=e.transformers?P(e.transformers):{},u=await Promise.all(Object.entries(o||{}).map(async([o,s])=>{if(s.config.disabled)return{id:o,destination:s,skipped:!0};const u=s.config.id||o,d=(0,f.stepId)("destination",u),l=I(s.config.breaker);if(l&&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=S();return void 0!==o.openUntil&&s<o.openUntil||(o.state="half-open",o.probing=!0,o.openUntil=s+n,!1)}(e.status.breakers,d,l.cooldown))return{id:o,destination:s,skipped:!0};const g=t=>{l&&q(e.status.breakers,d,t,l.threshold,l.cooldown)},h=()=>{l&&function(e,t){const n=e[t];n&&"half-open"===n.state&&!0===n.probing&&(n.state="open",n.probing=!1)}(e.status.breakers,d)};let m=(s.queuePush||[]).map(e=>({...e,consent:r}));s.queuePush=[],t&&m.push((0,f.clone)(t));const v=n.ingest?{...n.ingest,_meta:{...n.ingest._meta,path:[...n.ingest._meta.path]}}:(0,f.createIngest)("unknown");if(!m.length&&!s.queueOn?.length)return h(),{id:o,destination:s,skipped:!0};if(!m.length&&s.queueOn?.length){if(!(0,f.getGrantedConsent)(s.config.consent,r))return h(),{id:o,destination:s,skipped:!0};let t=!1;try{t=await Ae(e,s,o,!0)}catch(t){e.status.failed++;const n=s.type||"unknown";e.logger.scope(n).error("destination init failed",{error:t instanceof Error?t.message:String(t)}),g("transport-failure")}return h(),{id:o,destination:s,skipped:!t}}const k=[],C=m.filter(t=>{const n=(0,f.getGrantedConsent)(s.config.consent,r,t.consent);if(n)return t.consent=n,k.push(t),!1;const i=p(e,{stepId:(0,f.stepId)("destination",o),stepType:"destination",phase:"skip",eventId:"string"==typeof t.id?t.id:"",now:Date.now()});return i.skipReason="consent",r&&(i.consent={...r}),s.config.consent&&(i.meta={required:{...s.config.consent}}),(0,f.emitStep)(e,i),!0});if(C.length>0){const t=s.queuePush,n=s.config.id||o,r={max:s.config.queueMax??ye};let i=0;for(const e of C){i+=y(t,e,r).dropped}if(i>0){E(e,n);const o=j(e.status,(0,f.stepId)("destination",n),"queue",i);w(t,e.logger.scope(s.type||"unknown"),"destination.queuePush overflow; oldest events dropped",{buffer:"queuePush",destination:n,cap:r.max,droppedCount:o})}else t.length<r.max&&b(t)}if(!k.length)return h(),{id:o,destination:s,queue:m};let O,D,A=!1;try{A=await Ae(e,s,o,!0)}catch(t){e.status.failed++;const n=s.type||"unknown";e.logger.scope(n).error("destination init failed",{error:t instanceof Error?t.message:String(t)}),g("transport-failure")}if(!A)return h(),{id:o,destination:s,queue:m};s.dlq||(s.dlq=[]);const $=Ee(s.config.before,c,v),P=s.config.next,_=s.config?.cache,F=_?(0,f.compileCache)(_):void 0,H=F?M(F,e):void 0,R=s.config?.state?(0,f.compileState)(s.config.state):void 0,U=R?.filter(e=>"get"===e.mode),B=R?.filter(e=>"set"===e.mode);let G=0,K=0;return await Promise.all(k.map(async t=>{let r;if(t.globals=(0,f.assign)(i,t.globals),t.user=(0,f.assign)(a,t.user),F?.stop&&H){const e=(0,f.buildCacheContext)(v,t),n=await(0,f.checkCache)(F,H,e);if("HIT"===n?.status)return t;"MISS"===n?.status&&(r={key:n.key,ttl:n.rule.ttl})}let u=t,d=n.respond;if($.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const s=await z(e,e.transformers,$,t,v,n.respond,`destination.${o}.before`);if(null===s.event)return t;s.respond&&(d=s.respond),u=Array.isArray(s.event)?s.event[0]:s.event}if(F&&!F.stop&&H){const e=(0,f.buildCacheContext)(v,u),n=await(0,f.checkCache)(F,H,e);if("HIT"===n?.status)return t;"MISS"===n?.status&&(r={key:n.key,ttl:n.rule.ttl})}U&&U.length>0&&u&&(u=await(0,f.applyState)(U,t=>T(t,e),u,e));const l=Date.now();let p=!1;const g=await(0,f.tryCatchAsync)($e,t=>{const n=s.type||"unknown";e.logger.scope(n).error("Push failed",{error:t,event:u.name}),O=t,p=!0;const r=s.dlq,i=s.config.id||o,a={max:s.config.dlqMax??x},c=y(r,[u,t],a);if(c.dropped>0){E(e,i);const t=j(e.status,(0,f.stepId)("destination",i),"dlq",c.dropped);w(r,e.logger.scope(s.type||"unknown"),"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:i,cap:a.max,droppedCount:t})}else r.length<a.max&&b(r)})(e,s,o,u,v,d);if(G+=Date.now()-l,r&&H&&void 0===s.config.mock&&(0,f.storeCache)(H,r.key,g??!0,r.ttl),!p&&!qe(g)&&B&&B.length>0&&u&&(u=await(0,f.applyState)(B,t=>T(t,e),u,e)),void 0===g||qe(g)||(D=g),qe(g)&&K++,!p&&P){void 0!==g&&(v._response=g);const t=Ee(P,c,v);if(t.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const n=await z(e,e.transformers,t,u,v,d,`destination.${o}.next`);n.respond&&(d=n.respond)}}return t})),{id:o,destination:s,error:O,response:D,totalDuration:G,batchedCount:K,allowedCount:k.length,canonicalId:u,breakerConfig:l}})),d={},l={},g={};for(const t of u){if(t.skipped)continue;const n=t.destination,o={type:n.type||"unknown",data:t.response};E(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?(0,f.stepId)("destination",t.canonicalId):void 0,c=t=>{i&&a&&q(e.status.breakers,a,t,i.threshold,i.cooldown)};if(t.error)o.error=t.error,g[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)l[t.id]=o;else{const n=t.batchedCount??0,i=t.allowedCount??0;(Math.max(0,i-n)>0||0===i)&&(d[t.id]=o,s.count++,s.lastAt=r,s.duration+=t.totalDuration||0,e.status.out++,c("success"))}}return Me({event:t,...Object.keys(d).length&&{done:d},...Object.keys(l).length&&{queued:l},...Object.keys(g).length&&{failed:g}})}async function Ae(e,t,n,o=!1){if(t.init&&!t.config.init){if(!o&&function(e){const t=e.config.consent;return!!t&&Object.keys(t).length>0}(t))return e.logger.scope(t.type||"unknown").debug("init blocked: consent gate not cleared"),!1;const s=t.type||"unknown",r=e.logger.scope(s),i={collector:e,logger:r,id:n,config:t.config,env:_e(t.env,t.config.env),reportError:D(e,"destination",n,r,t)};r.debug("init");const a=Date.now();let c;(0,f.emitStep)(e,p(e,{stepId:(0,f.stepId)("destination",n),stepType:"destination",phase:"init",eventId:"",now:a}));try{c=await(0,f.useHooks)(t.init,"DestinationInit",e.hooks,e.logger)(i)}catch(t){const o=Date.now(),s=p(e,{stepId:(0,f.stepId)("destination",n),stepType:"destination",phase:"error",eventId:"",now:o});throw s.durationMs=o-a,s.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},(0,f.emitStep)(e,s),t}if(!1===c)return c;if(t.config={...c||t.config,init:!0},t.queueOn?.length){const o=t.queueOn;t.queueOn=[];for(const{type:s,data:r}of o)le(e,t,n,s,r)}r.debug("init done")}return!0}async function $e(e,t,n,o,s,r){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:s,env:{..._e(t.env,i.env),...r?{respond:r}:{}},reportError:D(e,"destination",n,u,t)};if(void 0!==i.mock)return u.debug("mock",{event:a.event.name}),i.mock;const l=a.mapping,g=void 0!==l?.batch,h=g?a.mappingKey||"* *":Oe;if((g||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=xe(l?.batch),r=xe(i.batch),a=s.wait??r.wait??we,c=s.size??r.size??ve,d=s.age??r.age??we,m=_e(t.env,i.env),v=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:D(e,"destination",n,u,t)};u.debug("push batch",{events:r.entries.length});const d=t.config.id||n,l=E(e,d),g=I(t.config.breaker),v=(0,f.stepId)("destination",d),k=t=>{g&&q(e.status.breakers,v,t,g.threshold,g.cooldown)},C=Date.now(),S=p(e,{stepId:(0,f.stepId)("destination",n),stepType:"destination",phase:"flush",eventId:"",now:C});S.batch={size:r.entries.length,index:0},(0,f.emitStep)(e,S);const O=n=>{const o=t.dlq=t.dlq||[],s={max:t.config.dlqMax??x};let r=0;for(const e of n){r+=y(o,e,s).dropped}if(r>0){const t=j(e.status,(0,f.stepId)("destination",d),"dlq",r);w(o,u,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:d,cap:s.max,droppedCount:t})}else o.length<s.max&&b(o);l.failed+=n.length,l.dlqSize=o.length,e.status.failed+=n.length};let A=r.entries.length;const $=ke(i.timeout),M=await(0,f.tryCatchAsync)((o,s)=>Se(Promise.resolve((0,f.useHooks)(t.pushBatch,"DestinationPushBatch",e.hooks,e.logger)(o,s)),$,`Destination "${n}" batch delivery timed out after ${$}ms`),t=>{A=0;const o=Date.now(),s=p(e,{stepId:(0,f.stepId)("destination",n),stepType:"destination",phase:"error",eventId:"",now:o});s.durationMs=o-C,s.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},s.batch={size:r.entries.length,index:0},(0,f.emitStep)(e,s),O(r.entries.map(e=>[e.event,t])),k("transport-failure"),u.error("Push batch failed",{error:t instanceof Error?t.message:String(t),entries:r.entries.length})})(r,c);if(T=M,(0,f.isObject)(T)&&Array.isArray(T.failed)&&M.failed.length>0){const e=[],t=new Set;for(const n of M.failed){const o=r.entries[n.index];o&&!t.has(n.index)&&(t.add(n.index),e.push([o.event,n.error??new Error(`Push batch entry ${n.index} failed (no per-row error provided)`)]))}e.length>0&&(O(e),A=Math.max(0,r.entries.length-e.length),u.error("Push batch partial failure",{failed:e.length,delivered:A,entries:r.entries.length}))}var T;u.debug("push batch done"),l.inFlightBatch=Math.max(0,(l.inFlightBatch??0)-r.entries.length),A>0&&(l.count+=A,l.lastAt=Date.now(),e.status.out+=A,k("success"))},k=(0,f.debounce)(v,{wait:a,size:c,age:d});t.batches[h]={batched:o,isDefault:!g,batchFn:()=>{k()},flush:async()=>{await k.flush()}}}const o=t.batches[h];o.batched.entries.push({event:a.event,ingest:s,respond:r,rule:l,data:a.data}),o.batched.events.push(a.event),(0,f.isDefined)(a.data)&&o.batched.data.push(a.data);const c=t.config.id||n,d=E(e,c);return d.inFlightBatch=(d.inFlightBatch??0)+1,o.batchFn(),Ie}{u.debug("push",{event:a.event.name});const o="string"==typeof a.event.id?a.event.id:"",s=Date.now(),r=p(e,{stepId:(0,f.stepId)("destination",n),stepType:"destination",phase:"in",eventId:o,now:s});a.mappingKey&&(r.mappingKey=a.mappingKey),a.event.consent&&(r.consent={...a.event.consent}),r.inEvent=a.event,(0,f.emitStep)(e,r);try{const r=ke(i.timeout),c=await Se(Promise.resolve((0,f.useHooks)(t.push,"DestinationPush",e.hooks,e.logger)(a.event,d)),r,`Destination "${n}" delivery timed out after ${r}ms`),l=Date.now(),g=p(e,{stepId:(0,f.stepId)("destination",n),stepType:"destination",phase:"out",eventId:o,now:l});return g.durationMs=l-s,g.outEvent=a.event,(0,f.isDefined)(c)&&(g.meta={...g.meta,response:c}),a.mappingKey&&(g.mappingKey=a.mappingKey),(0,f.emitStep)(e,g),u.debug("push done"),c}catch(t){const r=Date.now(),i=p(e,{stepId:(0,f.stepId)("destination",n),stepType:"destination",phase:"error",eventId:o,now:r});throw i.durationMs=r-s,i.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},a.mappingKey&&(i.mappingKey=a.mappingKey),(0,f.emitStep)(e,i),t}}}function Me(e){return{ok:!e?.failed,...e}}function Te(e){const{code:t,config:n={},env:o={},cache:s,state:r}=e,{config:i}=_(e,"before"),{config:a}=_({...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=_e(t.env,o);return{...t,config:c,env:u}}async function Pe(e,t={}){const n={};for(const[o,s]of Object.entries(t))s.config?.require?.length?e.pending.destinations[o]=s:n[o]=Te(s);return n}function _e(e,t){return e||t?t?e&&(0,f.isObject)(e)&&(0,f.isObject)(t)?{...e,...t}:t:e:{}}var Fe=require("@walkeros/core"),He=require("@walkeros/core"),Re=5e3;async function Ue(e){const t=e.logger;await ze(e.sources,"source",t),await async function(e,t){const n=Object.entries(e).flatMap(([e,n])=>{const o=n.batches;if(!o)return[];const 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`)),Re)})])}catch(t){s.error(`destination '${e}' batch flush failed: ${t}`)}finally{n&&clearTimeout(n)}})});await Promise.allSettled(n)}(e.destinations,t),await ze(e.destinations,"destination",t),await ze(e.transformers,"transformer",t),await ze(e.stores,"store",t)}async function ze(e,t,n){const o=Object.entries(e).map(async([e,o])=>{const 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`)),Re)})])}catch(n){i.error(`${t} '${e}' destroy failed: ${n}`)}finally{c&&clearTimeout(c)}});await Promise.allSettled(o)}function Be(e,t){e.stateVersion++,e.cellVersion[t]=e.stateVersion}async function Ge(e,t,n){let o,s,r=!1;const i=ae(e);try{return await async function(){switch(t){case c.Commands.Config:(0,He.isObject)(n)&&((0,Fe.assign)(e.config,n,{shallow:!1}),s=n,r=!0);break;case c.Commands.Consent:if((0,He.isObject)(n)){const{update:t}=d(e,n);Be(e,c.Commands.Consent),s=t,r=!0}break;case c.Commands.Custom:(0,He.isObject)(n)&&(e.custom=(0,Fe.assign)(e.custom,n),Be(e,c.Commands.Custom),s=n,r=!0);break;case c.Commands.Destination:(0,He.isObject)(n)&&"code"in n&&(0,He.isObject)(n.code)&&(o=await je(e,n));break;case c.Commands.Globals:(0,He.isObject)(n)&&(e.globals=(0,Fe.assign)(e.globals,n),Be(e,c.Commands.Globals),s=n,r=!0);break;case c.Commands.Hook:if((0,He.isObject)(n)&&(0,Fe.isString)(n.name)&&(0,Fe.isFunction)(n.fn)){const{name:t,fn:o}=n;e.hooks[t]=o,s=n,r=!0}break;case c.Commands.On:if((0,He.isObject)(n)&&(0,Fe.isString)(n.type)){const{type:t,rules:o}=n;await de(e,t,o)}break;case c.Commands.Ready:r=!0;break;case c.Commands.Run:o=await We(e,n),r=!0;break;case c.Commands.Session:r=!0;break;case c.Commands.Shutdown:e.hasShutdown||(e.hasShutdown=!0,await Ue(e));break;case c.Commands.User:(0,He.isObject)(n)&&((0,Fe.assign)(e.user,n,{shallow:!1}),Be(e,c.Commands.User),s=n,r=!0)}r&&(await me(e,t,void 0,s),o=await De(e));return o||Me({ok:!0})}()}finally{i()}}function Ke(e,t){return{timing:Math.round((Date.now()-e.timing)/10)/100,source:{type:"collector",schema:"4",version:"4.2.1-next-1781715165983"},...t}}function Ne(e,t){if(!t.name)throw new Error("Event name is required");const[n,o]=t.name.split(" ");if(!n||!o)throw new Error("Event name is invalid");const{timestamp:s=Date.now(),name:r=`${n} ${o}`,data:i={},context:a={},globals:c=e.globals,custom:u={},user:d=e.user,nested:l=[],consent:f=e.consent,id:p=(0,Fe.getSpanId)(),trigger:g="",entity:h=n,action:m=o,timing:y=0,source:v={type:"collector",schema:"4"}}=t,w=v.count??(e.count+=1),b=v.trace??e.trace,k={...v,count:w};return void 0!==b&&(k.trace=b),{name:r,data:i,context:a,globals:c,custom:u,user:d,nested:l,consent:f,id:p,trigger:g,entity:h,action:m,timestamp:s,timing:y,source:k}}function Le(e,t){return Ne(e,Ke(e,t))}async function We(e,t){e.allowed=!0,e.timing=Date.now(),e.trace=(0,Fe.getTraceId)(),e.count=0,t&&(t.consent&&(e.consent=(0,Fe.assign)(e.consent,t.consent),Be(e,c.Commands.Consent)),t.user&&(e.user=(0,Fe.assign)(e.user,t.user),Be(e,c.Commands.User)),t.globals&&(e.globals=(0,Fe.assign)(e.config.globalsStatic||{},t.globals),Be(e,c.Commands.Globals)),t.custom&&(e.custom=(0,Fe.assign)(e.custom,t.custom),Be(e,c.Commands.Custom))),Object.values(e.destinations).forEach(e=>{e.queuePush=[]}),e.queue=[],e.round++,await V(e),await he(e);return await De(e)}var Ve=require("@walkeros/core");function Qe(e,t){const n=(0,Ve.useHooks)(async(n,o={})=>await(0,Ve.tryCatchAsync)(async()=>{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,h=i??(0,Ve.createIngest)(r||"unknown");if(c){const t=await(0,Ve.processEventMapping)(p,c,e);if(t.ignore)return Me({ok:!0});if(c.consent){if(!(0,Ve.getGrantedConsent)(c.consent,e.consent,t.event.consent))return Me({ok:!0})}p=t.event}if(u?.length&&e.transformers&&Object.keys(e.transformers).length>0){const n=await z(e,e.transformers,u,p,h,f,r?`source.${r}.next`:void 0);if(null===n.event)return Me({ok:!0});if(n.stopped)return n.respond&&(f=n.respond),Me({ok:!0});if(n.respond&&(f=n.respond),Array.isArray(n.event)){const o=await Promise.all(n.event.map(async n=>{const o=t(n),s=Ne(e,o);return De(e,s,{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+=n.event.length,t.lastAt=Date.now(),t.duration+=Date.now()-s}return o[0]??Me({ok:!0})}p=n.event}const m=Le(e,p),y=await De(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 y},t=>{if(t instanceof Ve.FatalError)throw t;return e.status.failed++,e.logger.error("push failed",{event:n,ingest:o.ingest,error:t}),Me({ok:!1})})(),"Push",e.hooks,e.logger);return async(t,o)=>{const s="string"==typeof t.id?t.id:"",r=Date.now(),i=p(e,{stepId:"collector.push",stepType:"collector",phase:"in",eventId:s,now:r});i.inEvent=t,(0,Ve.emitStep)(e,i);try{const i=await n(t,o),a=Date.now(),c=p(e,{stepId:"collector.push",stepType:"collector",phase:"out",eventId:s,now:a});return c.durationMs=a-r,c.outEvent=i,(0,Ve.emitStep)(e,c),i}catch(t){const n=Date.now(),o=p(e,{stepId:"collector.push",stepType:"collector",phase:"error",eventId:s,now:n});throw o.durationMs=n-r,o.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},(0,Ve.emitStep)(e,o),t}}}var Ye=require("@walkeros/core");var Je=require("@walkeros/core"),Xe=1e4,Ze=6e4,et=.8;function tt(e={}){const t=e.maxEntries??Xe,n=e.lowWaterMark??et,o=e.sweepIntervalMs??Ze,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()}}}var nt=require("@walkeros/core");function ot(e,t){const{cacheConfig:n,cacheStore:o,namespace:s,logger:r,storeId:i,collector:a}=t,c=(e,t)=>{if(!a)return;const n=p(a,{stepId:`store.${i}`,stepType:"store",phase:"in",eventId:"",now:Date.now()});n.meta={op:"cache",cached:"hit"===t,status:t,key:e},(0,nt.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,nt.compileMatcher)(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 g=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=(0,nt.readCacheEnvelope)(s);if(void 0!==r){if(!("expired"in r))return u.hits++,c(t,"hit"),r.value;try{await o.delete(n)}catch(e){h("delete",t,e)}}const i=g.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,(0,nt.wrapCacheEnvelope)(s,e),e),u.populates++}catch(e){h("set",t,e)}return s}finally{g.delete(n)}})();return g.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),(0,nt.wrapCacheEnvelope)(n,e),e)}catch(e){h("set",t,e)}},async delete(t){u.deletes++,await e.delete(t);try{await o.delete(l(t))}catch(e){h("delete",t,e)}}};function h(e,t,n){const o=`store-cache(${i}): cache ${e} failed for "${t}"; backing succeeded, continuing`;r?r.warn(o,{error:n}):console.warn(o,n)}}function st(e,t,n){const o=`store.${n}`,s=(0,Je.useHooks)(t.get,"StoreGet",e.hooks,e.logger),r=(0,Je.useHooks)(t.set,"StoreSet",e.hooks,e.logger),i=(0,Je.useHooks)(t.delete,"StoreDelete",e.hooks,e.logger);t.get=async t=>{const n=Date.now(),r=p(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:n});r.meta={op:"get",key:t},(0,Je.emitStep)(e,r);try{const r=await s(t),i=Date.now(),a=p(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:i});return a.durationMs=i-n,a.meta={op:"get",key:t},(0,Je.emitStep)(e,a),r}catch(s){const r=Date.now(),i=p(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:r});throw i.durationMs=r-n,i.meta={op:"get",key:t},i.error=s instanceof Error?{name:s.name,message:s.message}:{message:String(s)},(0,Je.emitStep)(e,i),s}},t.set=async(t,n,s)=>{const i=Date.now(),a=p(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:i});a.meta={op:"set",key:t},(0,Je.emitStep)(e,a);try{await r(t,n,s);const a=Date.now(),c=p(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:a});c.durationMs=a-i,c.meta={op:"set",key:t},(0,Je.emitStep)(e,c)}catch(n){const s=Date.now(),r=p(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:s});throw r.durationMs=s-i,r.meta={op:"set",key:t},r.error=n instanceof Error?{name:n.name,message:n.message}:{message:String(n)},(0,Je.emitStep)(e,r),n}},t.delete=async t=>{const n=Date.now(),s=p(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:n});s.meta={op:"delete",key:t},(0,Je.emitStep)(e,s);try{await i(t);const s=Date.now(),r=p(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:s});r.durationMs=s-n,r.meta={op:"delete",key:t},(0,Je.emitStep)(e,r)}catch(s){const r=Date.now(),i=p(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:r});throw i.durationMs=r-n,i.meta={op:"delete",key:t},i.error=s instanceof Error?{name:s.name,message:s.message}:{message:String(s)},(0,Je.emitStep)(e,i),s}}}async function rt(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:D(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=tt()),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]=ot(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&&st(e,o,t);return n}async function it(e){const t=(0,l.assign)({globalsStatic:{},sessionStatic:{},run:!0,queueMax:1e3},e,{merge:!1,extend:!1}),n={level:e.logger?.level,handler:e.logger?.handler},o=(0,l.createLogger)(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:[],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};r.push=Qe(r,e=>Ke(r,e)),r.command=function(e,t){return(0,Ye.useHooks)(async(n,o,s)=>await(0,Ye.tryCatchAsync)(async()=>await t(e,n,o,s),t=>{if(t instanceof Ye.FatalError)throw t;return e.status.failed++,e.logger.error("command failed",{command:n,data:o,error:t}),Me({ok:!1})})(),"Command",e.hooks,e.logger)}(r,Ge);const i=e.stores||{};return r.stores=await rt(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),r.stores.__cache||(r.stores.__cache=tt()),r.destinations=await Pe(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,i=(0,$.validateStepEntry)(s,"Transformer");if(!i.ok){e.logger.warn(`Transformer ${o} invalid (${i.code}): ${i.reason}. Skipping.`);continue}const{config:a}=_(s,"before"),{config:c}=_({...s,config:a},"next"),u=Object.keys(r).length>0?{...c,env:r}:c,{cache:d}=s,l=d?{...u,cache:d}:u,f=s.config?.state??s.state,p=void 0!==f&&void 0===l.state?{...l,state:f}:l,g=e.logger.scope("transformer").scope(o),h={collector:e,logger:g,id:o,ingest:(0,$.createIngest)(o),config:p,env:r,reportError:D(e,"transformer",o,g)},m=t??(e=>{const t=s.mapping;if(t){const n=[];if(void 0!==t.data&&n.push("data"),t.mapping)for(const[e,o]of Object.entries(t.mapping))if("object"==typeof o&&null!==o)for(const[t,s]of Object.entries(o)){if("object"!=typeof s||null===s)continue;const o=s;void 0!==o.data&&n.push(`mapping[${e}][${t}].data`),void 0!==o.silent&&n.push(`mapping[${e}][${t}].silent`)}return n.length>0&&e.collector.logger.warn(`Transformer ${o}: \`${n.join(", ")}\` ignored at transformer position (only event-mutating fields apply).`),{type:"pass",config:e.config,push:async n=>{const o=await(0,$.processEventMapping)(n,t,e.collector);return!o.ignore&&{event:o.event}}}}return{type:"pass",config:e.config,push:e=>({event:e})}}),y=await m(h);void 0!==s.before&&void 0===y.config?.before&&(y.config={...y.config??{},before:s.before}),void 0!==s.next&&void 0===y.config?.next&&(y.config={...y.config??{},next:s.next}),void 0!==f&&void 0===y.config?.state&&(y.config={...y.config??{},state:f}),n[o]=y}return n}(r,e.transformers||{}),r}async function at(e){e=e||{};const t=await it(e),n=(o=t,{type:"elb",config:{},push:async(e,t,n,s,r)=>{if("string"==typeof e&&e.startsWith("walker ")){const n=e.replace("walker ","");return o.command(n,t)}let i;if("string"==typeof e)i={name:e},t&&"object"==typeof t&&!Array.isArray(t)&&(i.data=t);else{if(!e||"object"!=typeof e)return Me({ok:!1});i=e,t&&"object"==typeof t&&!Array.isArray(t)&&(i.data={...i.data||{},...t})}return n&&"object"==typeof n&&(i.context=n),s&&Array.isArray(s)&&(i.nested=s),r&&"object"==typeof r&&(i.custom=r),o.push(i)}});var o;t.sources.elb=n,await W(t,e.sources||{});const{consent:s,user:r,globals:i,custom:a}=e;s&&await t.command("consent",s),r&&await t.command("user",r),i&&await t.command("globals",i),a&&await t.command("custom",a),t.config.run&&await t.command("run");let c=n.push;const u=Object.values(t.sources).filter(e=>"elb"!==e.type),d=u.find(e=>e.config.primary);return d?c=d.push:u.length>0&&(c=u[0].push),{collector:t,elb:c}}function ct(e){if(null===e||"object"!=typeof e)return e;if(Array.isArray(e))return e.map(ct);const t={};for(const[n,o]of Object.entries(e))t[n]="function"==typeof o?o:ct(o);return t}function ut(e){const t=[],{simulation:n,...o}=e,s=ct(o);for(const e of n){const n=e.startsWith("call:")?e.slice(5):e,o=n.split(".");let r=s;for(let e=0;e<o.length-1&&null!=r[o[e]];e++)r=r[o[e]];const i=o[o.length-1];if(null==r||!(i in r))continue;const a=r[i];"function"==typeof a&&(r[i]=function(...e){return t.push({fn:n,args:e,ts:Date.now()}),a.apply(this,e)})}return{wrappedEnv:s,calls:t}}//# sourceMappingURL=index.js.map
1
+ "use strict";var e,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,o=Object.getOwnPropertyNames,s=Object.prototype.hasOwnProperty,r={};((e,n)=>{for(var o in n)t(e,o,{get:n[o],enumerable:!0})})(r,{Code:()=>i,Commands:()=>a,Const:()=>c,DEFAULT_BREAKER_COOLDOWN_MS:()=>C,DEFAULT_BREAKER_THRESHOLD:()=>k,DEFAULT_DLQ_MAX:()=>x,addDestination:()=>je,buildReportError:()=>D,bumpDropped:()=>j,callDestinationOn:()=>le,commonHandleCommand:()=>Ge,createEvent:()=>Ne,createPush:()=>Qe,createPushResult:()=>Me,destinationInit:()=>Ae,destinationPush:()=>$e,enrichEvent:()=>Le,ensureDestStatus:()=>E,enterCascade:()=>ae,extractTransformerNextMap:()=>P,fireCallbacks:()=>fe,flushSourceQueueOn:()=>K,getCacheStore:()=>M,initDestinations:()=>Pe,initSource:()=>L,initSources:()=>W,isBreakerProbePermitted:()=>O,isRequireSatisfied:()=>ne,isSourceStarted:()=>N,isStateDelivery:()=>ee,isStatePresent:()=>te,mergeEnvironments:()=>_e,on:()=>de,onApply:()=>me,prepareEvent:()=>Ke,processConsent:()=>d,pushToDestinations:()=>De,redeliverStateAtRun:()=>he,registerDestination:()=>Te,resolveBreakerConfig:()=>I,runCollector:()=>We,runTransformerChain:()=>z,setMark:()=>se,shouldDeliver:()=>re,startFlow:()=>at,transformerInit:()=>H,transformerPush:()=>R,walkChain:()=>F,wrapEnv:()=>ut}),module.exports=(e=r,((e,r,i,a)=>{if(r&&"object"==typeof r||"function"==typeof r)for(let c of o(r))s.call(e,c)||c===i||t(e,c,{get:()=>r[c],enumerable:!(a=n(r,c))||a.enumerable});return e})(t({},"__esModule",{value:!0}),e));var 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");require("@walkeros/core");function p(e,t){const n=e.status.startedAt;return{flowId:"default",stepId:t.stepId,stepType:t.stepType,phase:t.phase,eventId:t.eventId,timestamp:new Date(t.now).toISOString(),elapsedMs:t.now-n}}var g=require("@walkeros/core"),h=require("@walkeros/core"),m=require("@walkeros/core");function y(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 v=new WeakMap;function w(e,t,n,o){v.get(e)||(v.set(e,!0),t.warn(n,o))}function b(e){v.delete(e)}var k=5,C=3e4,S=()=>Date.now();function I(e){if(void 0!==e)return"number"==typeof e?{threshold:e,cooldown:C}:{threshold:e.threshold??k,cooldown:e.cooldown??C}}function q(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=S()+s)):void(r.consecutiveFailures>=o&&(r.state="open",r.probing=!1,r.openUntil=S()+s)))}function O(e,t){return!e||("closed"===e.state||"half-open"===e.state||void 0!==e.openUntil&&t>=e.openUntil)}var x=100;function E(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 j(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 D(e,t,n,o,s){const r=(0,m.stepId)(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??x},c=y(i,[o,s],a);if(c.dropped>0){const t=j(e.status,(0,m.stepId)("destination",n),"dlq",c.dropped);w(i,r,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:n,cap:a.max,droppedCount:t})}else i.length<a.max&&b(i);const u=E(e,n);u.failed++,u.dlqSize=i.length,e.status.failed++;const d=I(t.config.breaker);if(d){const o=t.config.id||n;q(e.status.breakers,(0,m.stepId)("destination",o),"transport-failure",d.threshold,d.cooldown)}}(e,s,n,i,t,o):e.status.failed++,void o.error("report error",{error:t instanceof Error?t.message:String(t),event:i.name});e.status.connectionErrors[r]=(e.status.connectionErrors[r]??0)+1,o.error("connection error",{error:t instanceof Error?t.message:String(t)})}catch{}}}var A=require("@walkeros/core"),$=require("@walkeros/core");function M(e,t){return e.storeId&&t.stores[e.storeId]?t.stores[e.storeId]:t.stores.__cache}function T(e,t){return e?t.stores[e]:t.stores.__cache}function P(e){const t={};for(const[n,o]of Object.entries(e)){const e=o.config?.next;"string"==typeof e||Array.isArray(e)&&e.every(e=>"string"==typeof e)?t[n]={next:e}:t[n]={}}return t}function _(e,t){const n=e.config||{},o=e[t];return void 0!==o?{config:{...n,[t]:o},chainValue:o}:{config:n,chainValue:void 0}}function F(e,t={}){if(!e)return[];if(Array.isArray(e))return e;const n=[],o=new Set;let s=e;for(;s&&t[s]&&!o.has(s);){o.add(s),n.push(s);const e=t[s].next;if(Array.isArray(e)){n.push(...e);break}s=e}return n}async function H(e,t,n){if(t.init&&!t.config.init){const o=t.type||"unknown",s=e.logger.scope(`transformer:${o}`),r={collector:e,logger:s,id:n,ingest:(0,$.createIngest)(n),config:t.config,env:B(t.config.env),reportError:D(e,"transformer",n,s)};s.debug("init");const i=await(0,$.useHooks)(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 R(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:{...B(t.config.env),...r?{respond:r}:{}},reportError:D(e,"transformer",n,a)};a.debug("push",{event:o.name});const u="string"==typeof o.id?o.id:"",d=Date.now(),l=p(e,{stepId:(0,$.stepId)("transformer",n),stepType:"transformer",phase:"in",eventId:u,now:d});l.inEvent=o,(0,$.emitStep)(e,l);try{const s=await(0,$.useHooks)(t.push,"TransformerPush",e.hooks,e.logger)(o,c),r=Date.now(),i=p(e,{stepId:(0,$.stepId)("transformer",n),stepType:"transformer",phase:"out",eventId:u,now:r});return i.durationMs=r-d,i.outEvent=s,(0,$.emitStep)(e,i),a.debug("push done"),s}catch(t){const o=Date.now(),s=p(e,{stepId:(0,$.stepId)("transformer",n),stepType:"transformer",phase:"error",eventId:u,now:o});throw s.durationMs=o-d,s.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},(0,$.emitStep)(e,s),t}}function U(e,t){return e?{...e,_meta:{...e._meta,path:[...e._meta.path]}}:(0,$.createIngest)(t)}async function z(e,t,n,o,s,r,i){s||(s=(0,$.createIngest)(n[0]??"chain")),i&&s._meta&&(s._meta.chainPath=i);let a=o,c=r;for(const o of n){const r=t[o];if(!r){e.logger.warn(`Transformer not found: ${o}`);continue}if(s&&s._meta&&s._meta.path.length>256)return e.logger.error(`Max path length exceeded at ${o}`),{event:null,respond:c};s&&s._meta&&(s._meta.hops++,s._meta.path.push(o));if(!await(0,$.tryCatchAsync)(H,t=>{if(t instanceof $.FatalError)throw t;return e.status.failed++,e.logger.scope(`transformer:${r.type||"unknown"}`).error("transformer init failed",{transformer:o,error:t}),!1})(e,r,o))return{event:null,respond:c};if(i&&void 0!==r.config?.chainMocks?.[i]){const t=r.config.chainMocks[i];e.logger.scope(`transformer:${r.type||"unknown"}`).debug("chainMock",{chain:i}),a=t;continue}if(void 0!==r.config?.mock){e.logger.scope(`transformer:${r.type||"unknown"}`).debug("mock"),a=r.config.mock;continue}if(r.config?.disabled)continue;const u=r.config?.cache,d=u?(0,$.compileCache)(u):void 0,l=d?M(d,e):void 0,f=r.config?.state?(0,$.compileState)(r.config.state):void 0,p=f?.filter(e=>"get"===e.mode),g=f?.filter(e=>"set"===e.mode),h=async t=>g&&0!==g.length?(0,$.applyState)(g,t=>T(t,e),t,e):t;let m;if(d&&l){const e=(0,$.buildCacheContext)(s,a),t=await(0,$.checkCache)(d,l,e);if("HIT"===t?.status&&t.value){if(a=t.value,d.stop)return{event:a,respond:c,stopped:!0};continue}"MISS"===t?.status&&(m={key:t.key,ttl:t.rule.ttl})}const y=r.config.before;if(y){const n=(0,$.getNextSteps)(y,(0,$.buildCacheContext)(s,a));if(1===n.length){const o=F(n[0],P(t));if(o.length>0){const n=await z(e,t,o,a,s,c,i);if(null===n.event)return{event:null,respond:n.respond??c};if(n.stopped)return{event:Array.isArray(n.event)?n.event[0]:n.event,respond:n.respond??c,stopped:!0};n.respond&&(c=n.respond),a=Array.isArray(n.event)?n.event[0]:n.event}}else n.length>1&&await Promise.all(n.map(n=>(0,$.tryCatchAsync)(z,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,F(n,P(t)),a,U(s,n),void 0,i)))}p&&p.length>0&&(a=await(0,$.applyState)(p,t=>T(t,e),a,e));const v=await(0,$.tryCatchAsync)(R,t=>(e.logger.scope(`transformer:${r.type||"unknown"}`).error("Push failed",{error:t}),!1))(e,r,o,a,s,c);if(!1===v)return{event:null,respond:c};if(Array.isArray(v)){const r=n.slice(n.indexOf(o)+1),u=await Promise.all(v.map(async n=>{const o=await h(n.event||a),u=U(s,"unknown");if(n.next){const s=(0,$.getNextSteps)(n.next,(0,$.buildCacheContext)(u,o));if(0===s.length)return{event:o,respond:c};if(1===s.length){const n=F(s[0],P(t));return n.length>0?z(e,t,n,o,u,c,i):{event:o,respond:c}}return(await Promise.all(s.map(n=>(0,$.tryCatchAsync)(z,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,F(n,P(t)),o,U(u,n),void 0,i)))).map(e=>({event:e.event,respond:void 0}))}return r.length>0?z(e,t,r,o,u,c,i):{event:o,respond:c}}));let d=c;const l=[];for(const e of u.flat())if(null!==e)if(e&&"object"==typeof e&&"event"in e){const t=e;if(t.respond&&(d=t.respond),null===t.event)continue;Array.isArray(t.event)?l.push(...t.event):l.push(t.event)}else l.push(e);return 0===l.length?{event:null,respond:d}:1===l.length?{event:l[0],respond:d}:{event:l,respond:d}}if(v&&"object"==typeof v){const{event:n,respond:o,next:r}=v;if(o&&(c=o),void 0!==r){const o=await h(n||a),u=(0,$.getNextSteps)(r,(0,$.buildCacheContext)(s,o));if(0===u.length){a=o;continue}if(1===u.length){const n=F(u[0],P(t));return n.length>0?z(e,t,n,o,s,c,i):(e.logger.warn(`Branch target not found: ${JSON.stringify(r)}`),{event:null,respond:c})}return await Promise.all(u.map(n=>(0,$.tryCatchAsync)(z,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,F(n,P(t)),o,U(s,n),void 0,i))),{event:null,respond:void 0}}n&&(a=n)}g&&g.length>0&&(a=await(0,$.applyState)(g,t=>T(t,e),a,e)),m&&l&&(0,$.storeCache)(l,m.key,a,m.ttl);const w=r.config.next,b="string"==typeof w||Array.isArray(w)&&w.every(e=>"string"==typeof e),k=void 0!==w&&!b;if((!v||"object"==typeof v&&!v.next)&&k){const n=(0,$.getNextSteps)(r.config.next,(0,$.buildCacheContext)(s,a));if(1===n.length){const o=F(n[0],P(t));return o.length>0?z(e,t,o,a,s,c,i):{event:a,respond:c}}return n.length>1?(await Promise.all(n.map(n=>(0,$.tryCatchAsync)(z,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,F(n,P(t)),a,U(s,n),void 0,i))),{event:null,respond:void 0}):{event:a,respond:c}}}return{event:a,respond:c}}function B(e){return e&&(0,$.isObject)(e)?e:{}}function G(e){return"string"==typeof e||!(!Array.isArray(e)||!e.every(e=>"string"==typeof e))}async function K(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)ee(n)&&!re(e,t,n)||(await(0,A.tryCatchAsync)(t.on,t=>{if(t instanceof A.FatalError)throw t;e.status.failed++,e.logger.scope("source").error("source on flush failed",{sourceId:s,type:n,error:t})})(n,r),ee(n)&&se(e,t,n))}function N(e){return Boolean(e.config.init)&&!e.config.require?.length}async function L(e,t,n){const{code:o,config:s={},env:r={},primary:i,next:a,before:c,cache:u}=n,d=s.state??n.state,l=d?(0,A.compileState)(d):void 0,f=u,p=f?(0,A.compileCache)({...f,stop:f.stop??!0}):void 0,g=G(a)?F(a,P(e.transformers)):void 0,h=G(c)?F(c,P(e.transformers)):void 0,m=r.push,y=m??e.push,v=Boolean(m),w=async(n,o,r)=>{let i;const u=h??(void 0!==c?(()=>{const t=(0,A.getNextSteps)(c,(0,A.buildCacheContext)(r.ingest));if(0===t.length)return[];return F(1===t.length?t[0]:t,P(e.transformers))})():[]);let d=[n];if(u.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const o=await z(e,e.transformers,u,n,r.ingest,r.respond,`source.${t}.before`);if(null===o.event)return{ok:!0};if(o.stopped)return o.respond&&(r.respond=o.respond),{ok:!0};o.respond&&(r.respond=o.respond),d=Array.isArray(o.event)?o.event:[o.event]}if(p){const t=M(p,e);if(t){const n=(0,A.buildCacheContext)(r.ingest),o=await(0,A.checkCache)(p,t,n);if(o){if("HIT"===o.status&&void 0!==o.value&&p.stop){let t=o.value;return o.rule.update&&(t=await(0,A.applyUpdate)(t,o.rule.update,{...n,cache:{status:"HIT"}},e)),r.respond?.(t),{ok:!0}}if("MISS"===o.status&&p.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=>{(0,A.storeCache)(t,u,n,d),a?i=(async()=>{const t=await(0,A.applyUpdate)(n,a,c,e);s(t)})():s(n)};r.respond=l}"MISS"!==o.status||p.stop||(0,A.storeCache)(t,o.key,!0,o.rule.ttl)}}}const f=g?{kind:"single",preChain:g}:void 0!==a?(()=>{const t=(0,A.getNextSteps)(a,(0,A.buildCacheContext)(r.ingest));return 0===t.length?{kind:"single",preChain:[]}:1===t.length?{kind:"single",preChain:F(t[0],P(e.transformers))}:{kind:"many",branches:t.map(t=>F(t,P(e.transformers)))}})():{kind:"single",preChain:[]};!v&&l&&l.length>0&&(d=await Promise.all(d.map(t=>(0,A.applyState)(l,t=>T(t,e),t,e))));let m={ok:!0};for(const n of d)"many"===f.kind?(await Promise.all(f.branches.map((i,a)=>(0,A.tryCatchAsync)(async()=>v?y(n):y(n,{...o,id:t,ingest:U(r.ingest,`${t}.${a}`),respond:void 0,mapping:s,preChain:i}),t=>(e.logger.scope("source:many").error(`many branch ${a} failed`,{error:t}),{ok:!0}))())),m={ok:!0}):m=v?await y(n):await y(n,{...o,id:t,ingest:r.ingest,respond:r.respond,mapping:s,preChain:f.preChain});return i&&await i,m},b=async n=>{const o=(0,A.createIngest)(t);if(!s.ingest||void 0===n)return o;const r=await(0,A.getMappingValue)(n,s.ingest,{collector:e});return{...o,...r,_meta:o._meta}},k=e.logger.scope("source").scope(t),C={command:e.command,sources:e.sources,elb:e.sources.elb.push,logger:k,...r,push:async(e,n={})=>{const o={ingest:(0,A.createIngest)(t),respond:void 0};return w(e,n,o)}},S={collector:e,logger:k,id:t,config:s,env:C,withScope:async(e,t,n)=>{const o={ingest:await b(e),respond:t};return n({...C,push:(e,t={})=>w(e,t,o),ingest:o.ingest,respond:o.respond})},reportError:D(e,"source",t,k)},I=await(0,A.tryCatchAsync)(o,n=>{if(n instanceof A.FatalError)throw n;e.status.failed++,e.logger.scope("source").error("source factory failed",{sourceId:t,error:n})})(S);if(!I)return;const q=I.type||"unknown",O=e.logger.scope(q).scope(t);return C.logger=O,i&&(I.config={...I.config,primary:i}),I}async function W(e,t={}){const n={};for(const[o,s]of Object.entries(t)){const t=await L(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(0,A.tryCatchAsync)(n.init.bind(n),n=>{if(n instanceof A.FatalError)throw n;o=!0,e.status.failed++,e.logger.scope("source").error("source init failed",{sourceId:t,error:n})})(),o||(n.config.init=!0,N(n)&&await K(e,n,t))}return await V(e),n}async function V(e){for(const[t,n]of Object.entries(e.sources)){if(N(n))continue;const o=n.config.require;if(!o?.length)continue;const s=o.filter(t=>!ne(e,t));s.length!==o.length&&(n.config.require=s,N(n)&&await K(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=>!ne(e,t));if(n.config&&(n.config.require=s),s.length>0)continue;delete e.pending.destinations[t];const r=Te(n);!1!==r.config.queue&&(r.queuePush=[...e.queue]),e.destinations[t]=r}}function Q(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 Y=!1;function J(){Y||(Y=!0,"undefined"!=typeof console&&"function"==typeof console.warn&&console.warn("walkerOS: ignored an on-dispatch call with a non-collector argument"))}function X(e,t,n,o){if(n instanceof g.FatalError)throw n;e.logger.scope("on").error("on callback failed",{kind:t,...o,error:n})}var Z=[c.Commands.Consent,c.Commands.User,c.Commands.Globals,c.Commands.Custom];function ee(e){return Z.includes(e)}function te(e,t){switch(t){case c.Commands.Consent:return Object.keys(e.consent).length>0;case c.Commands.User:return Object.keys(e.user).length>0;case c.Commands.Globals:return Object.keys(e.globals).length>0;case c.Commands.Custom:return Object.keys(e.custom).length>0;default:return!1}}function ne(e,t){switch(t){case c.Commands.Consent:case c.Commands.User:case c.Commands.Globals:case c.Commands.Custom:return te(e,t);case c.Commands.Run:case c.Commands.Ready:return!0===e.allowed;default:return e.seenEvents.has(String(t))}}function oe(e,t){return e.cellVersion[String(t)]??0}function se(e,t,n){let o=e.delivery.get(t);o||(o={},e.delivery.set(t,o)),o[String(n)]=oe(e,n)}function re(e,t,n){return e.allowed&&oe(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 ie=8;function ae(e){return e.cascade?()=>{}:(e.cascade={counts:new WeakMap},()=>{e.cascade=void 0})}function ce(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<=ie||(i===ie+1&&e.logger.error("state delivery did not converge",{type:r}),!1)}function ue(e,t){return{collector:e,logger:e.logger.scope("on").scope(String(t))}}async function de(e,t,n){if(!Q(e))return void J();const o=e.on,s=o[t]||[],r=(0,g.isArray)(n)?n:[n];r.forEach(e=>{s.push(e)}),o[t]=s,fe(e,t,r)}function le(e,t,n,o,s){if(!t.on)return;const r=t.type||"unknown",i=e.logger.scope(r).scope("on").scope(o),a={collector:e,logger:i,id:n,config:t.config,data:s,env:_e(t.env,t.config.env),reportError:D(e,"destination",n,i,t)};(0,h.tryCatch)(t.on,t=>X(e,"destination",t,{destId:n,type:o}))(o,a)}function fe(e,t,n,o){if(!Q(e))return void J();const s=pe(e,t,o);if(n.length)switch(t){case c.Commands.Consent:!function(e,t,n){const o=n||e.consent,s=ue(e,c.Commands.Consent);t.forEach(t=>{re(e,t,c.Commands.Consent)&&ce(e,t,c.Commands.Consent)&&(Object.keys(o).filter(e=>e in t).forEach(n=>{(0,h.tryCatch)(t[n],t=>X(e,"consent",t,{key:n}))(o,s)}),se(e,t,c.Commands.Consent))})}(e,n,o);break;case c.Commands.Ready:!function(e,t){if(!e.allowed)return;const n=ue(e,c.Commands.Ready);t.forEach(t=>{(0,h.tryCatch)(t,t=>X(e,"ready",t))(void 0,n)})}(e,n);break;case c.Commands.Run:!function(e,t){if(!e.allowed)return;const n=ue(e,c.Commands.Run);t.forEach(t=>{(0,h.tryCatch)(t,t=>X(e,"run",t))(void 0,n)})}(e,n);break;case c.Commands.Session:!function(e,t){if(!e.session)return;const n=ue(e,c.Commands.Session);t.forEach(t=>{(0,h.tryCatch)(t,t=>X(e,"session",t))(e.session,n)})}(e,n);break;default:{const o=ue(e,t),r=ee(t);n.forEach(n=>{"function"==typeof n&&(r&&!re(e,n,t)||r&&!ce(e,n,t)||((0,h.tryCatch)(n,n=>X(e,"generic",n,{type:t}))(s,o),r&&se(e,n,t)))});break}}}function pe(e,t,n){switch(t){case c.Commands.Consent:return n||e.consent;case c.Commands.Session:return e.session;case c.Commands.User:return n||e.user;case c.Commands.Custom:return n||e.custom;case c.Commands.Globals:return n||e.globals;case c.Commands.Config:return n||e.config;default:return}}async function ge(e,t,n,o,s){if(!t.on)return!1;if(ee(o)&&!re(e,t,o))return!1;if(ee(o)&&!ce(e,t,o))return!1;const r=await(0,h.tryCatchAsync)(t.on,t=>X(e,"source",t,{sourceId:n,type:o}))(o,s);return ee(o)&&se(e,t,o),!1===r}async function he(e){if(Q(e))for(const t of Z){if(!te(e,t))continue;const n=pe(e,t);fe(e,t,e.on[t]||[]);for(const[o,s]of Object.entries(e.sources))N(s)&&await ge(e,s,o,t,n)}else J()}async function me(e,t,n,o){if(!Q(e))return J(),!0;e.seenEvents.add(String(t));let s=n||[];n||(s=e.on[t]||[]);const r=pe(e,t,o);let i=!1;for(const[n,o]of Object.entries(e.sources)){if(o.config.require?.length){const e=o.config.require.indexOf(t);-1!==e&&o.config.require.splice(e,1)}if(o.on)if(N(o)){await ge(e,o,n,t,r)&&(i=!0)}else o.queueOn=o.queueOn||[],o.queueOn.push({type:t,data:r})}Object.entries(e.destinations).forEach(([n,o])=>{if(o.on){if(!o.config.init)return o.queueOn=o.queueOn||[],void o.queueOn.push({type:t,data:r});le(e,o,n,t,r)}});for(const[t,n]of Object.entries(e.sources))N(n)&&n.queueOn?.length&&await K(e,n,t);const a=Object.values(e.sources).some(e=>!N(e)&&e.config.require?.length);return(Object.keys(e.pending.destinations).length>0||a)&&await V(e),fe(e,t,s,o),!i}var ye=1e3,ve=1e3,we=3e4,be=1e4;function ke(e){return"number"==typeof e&&e>0?e:be}var Ce=class extends Error{constructor(e){super(e),this.name="DestinationTimeoutError"}};function Se(e,t,n){let o;const s=new Promise((e,s)=>{o=setTimeout(()=>s(new Ce(n)),t)});return Promise.race([e,s]).finally(()=>{o&&clearTimeout(o)})}var Ie=Object.freeze({batched:!0});function qe(e){return e===Ie}var Oe=" batch-all";function xe(e){return void 0===e?{}:"number"==typeof e?{wait:e}:{wait:e.wait,size:e.size,age:e.age}}function Ee(e,t,n){if(!e)return[];if(Array.isArray(e)&&e.every(e=>"string"==typeof e))return F(e,t);if("string"==typeof e)return F(e,t);const o=(0,f.getNextSteps)(e,(0,f.buildCacheContext)(n));return 0===o.length?[]:1===o.length?F(o[0],t):F(o,t)}async function je(e,t){const{code:n,config:o={},env:s={},before:r,next:i,cache:a,state:c}=t;if(!(0,f.isFunction)(n.push))return Me({ok:!1,failed:{invalid:{type:"invalid",error:"Destination code must have a push method"}}});const u=o||{init:!1};let d=r?{...u,before:r}:{...u};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(d.require?.length){e.pending.destinations[l]=t,await V(e);const n=e.destinations[l];return n?De(e,void 0,{},{[l]:n}):Me({ok:!0})}const p={...n,config:d,env:_e(n.env,s)};return e.destinations[l]=p,!1!==p.config.queue&&(p.queuePush=[...e.queue]),De(e,void 0,{},{[l]:p})}async function De(e,t,n={},o){const{allowed:s,consent:r,globals:i,user:a}=e;if(!s)return Me({ok:!1});if(t){const n=e.config.queueMax;if(void 0===n)throw new Error("Collector.Config.queueMax is undefined; defaults must be seeded by collector()");const o=y(e.queue,t,{max:n});if(o.dropped>0){const t=j(e.status,(0,f.stepId)("collector"),"queue",o.dropped);w(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 c=e.transformers?P(e.transformers):{},u=await Promise.all(Object.entries(o||{}).map(async([o,s])=>{if(s.config.disabled)return{id:o,destination:s,skipped:!0};const u=s.config.id||o,d=(0,f.stepId)("destination",u),l=I(s.config.breaker);if(l&&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=S();return void 0!==o.openUntil&&s<o.openUntil||(o.state="half-open",o.probing=!0,o.openUntil=s+n,!1)}(e.status.breakers,d,l.cooldown))return{id:o,destination:s,skipped:!0};const g=t=>{l&&q(e.status.breakers,d,t,l.threshold,l.cooldown)},h=()=>{l&&function(e,t){const n=e[t];n&&"half-open"===n.state&&!0===n.probing&&(n.state="open",n.probing=!1)}(e.status.breakers,d)};let m=(s.queuePush||[]).map(e=>({...e,consent:r}));s.queuePush=[],t&&m.push((0,f.clone)(t));const v=n.ingest?{...n.ingest,_meta:{...n.ingest._meta,path:[...n.ingest._meta.path]}}:(0,f.createIngest)("unknown");if(!m.length&&!s.queueOn?.length)return h(),{id:o,destination:s,skipped:!0};if(!m.length&&s.queueOn?.length){if(!(0,f.getGrantedConsent)(s.config.consent,r))return h(),{id:o,destination:s,skipped:!0};let t=!1;try{t=await Ae(e,s,o,!0)}catch(t){e.status.failed++;const n=s.type||"unknown";e.logger.scope(n).error("destination init failed",{error:t instanceof Error?t.message:String(t)}),g("transport-failure")}return h(),{id:o,destination:s,skipped:!t}}const k=[],C=m.filter(t=>{const n=(0,f.getGrantedConsent)(s.config.consent,r,t.consent);if(n)return t.consent=n,k.push(t),!1;const i=p(e,{stepId:(0,f.stepId)("destination",o),stepType:"destination",phase:"skip",eventId:"string"==typeof t.id?t.id:"",now:Date.now()});return i.skipReason="consent",r&&(i.consent={...r}),s.config.consent&&(i.meta={required:{...s.config.consent}}),(0,f.emitStep)(e,i),!0});if(C.length>0){const t=s.queuePush,n=s.config.id||o,r={max:s.config.queueMax??ye};let i=0;for(const e of C){i+=y(t,e,r).dropped}if(i>0){E(e,n);const o=j(e.status,(0,f.stepId)("destination",n),"queue",i);w(t,e.logger.scope(s.type||"unknown"),"destination.queuePush overflow; oldest events dropped",{buffer:"queuePush",destination:n,cap:r.max,droppedCount:o})}else t.length<r.max&&b(t)}if(!k.length)return h(),{id:o,destination:s,queue:m};let O,D,A=!1;try{A=await Ae(e,s,o,!0)}catch(t){e.status.failed++;const n=s.type||"unknown";e.logger.scope(n).error("destination init failed",{error:t instanceof Error?t.message:String(t)}),g("transport-failure")}if(!A)return h(),{id:o,destination:s,queue:m};s.dlq||(s.dlq=[]);const $=Ee(s.config.before,c,v),P=s.config.next,_=s.config?.cache,F=_?(0,f.compileCache)(_):void 0,H=F?M(F,e):void 0,R=s.config?.state?(0,f.compileState)(s.config.state):void 0,U=R?.filter(e=>"get"===e.mode),B=R?.filter(e=>"set"===e.mode);let G=0,K=0;return await Promise.all(k.map(async t=>{let r;if(t.globals=(0,f.assign)(i,t.globals),t.user=(0,f.assign)(a,t.user),F?.stop&&H){const e=(0,f.buildCacheContext)(v,t),n=await(0,f.checkCache)(F,H,e);if("HIT"===n?.status)return t;"MISS"===n?.status&&(r={key:n.key,ttl:n.rule.ttl})}let u=t,d=n.respond;if($.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const s=await z(e,e.transformers,$,t,v,n.respond,`destination.${o}.before`);if(null===s.event)return t;s.respond&&(d=s.respond),u=Array.isArray(s.event)?s.event[0]:s.event}if(F&&!F.stop&&H){const e=(0,f.buildCacheContext)(v,u),n=await(0,f.checkCache)(F,H,e);if("HIT"===n?.status)return t;"MISS"===n?.status&&(r={key:n.key,ttl:n.rule.ttl})}U&&U.length>0&&u&&(u=await(0,f.applyState)(U,t=>T(t,e),u,e));const l=Date.now();let p=!1;const g=await(0,f.tryCatchAsync)($e,t=>{const n=s.type||"unknown";e.logger.scope(n).error("Push failed",{error:t,event:u.name}),O=t,p=!0;const r=s.dlq,i=s.config.id||o,a={max:s.config.dlqMax??x},c=y(r,[u,t],a);if(c.dropped>0){E(e,i);const t=j(e.status,(0,f.stepId)("destination",i),"dlq",c.dropped);w(r,e.logger.scope(s.type||"unknown"),"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:i,cap:a.max,droppedCount:t})}else r.length<a.max&&b(r)})(e,s,o,u,v,d);if(G+=Date.now()-l,r&&H&&void 0===s.config.mock&&(0,f.storeCache)(H,r.key,g??!0,r.ttl),!p&&!qe(g)&&B&&B.length>0&&u&&(u=await(0,f.applyState)(B,t=>T(t,e),u,e)),void 0===g||qe(g)||(D=g),qe(g)&&K++,!p&&P){void 0!==g&&(v._response=g);const t=Ee(P,c,v);if(t.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const n=await z(e,e.transformers,t,u,v,d,`destination.${o}.next`);n.respond&&(d=n.respond)}}return t})),{id:o,destination:s,error:O,response:D,totalDuration:G,batchedCount:K,allowedCount:k.length,canonicalId:u,breakerConfig:l}})),d={},l={},g={};for(const t of u){if(t.skipped)continue;const n=t.destination,o={type:n.type||"unknown",data:t.response};E(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?(0,f.stepId)("destination",t.canonicalId):void 0,c=t=>{i&&a&&q(e.status.breakers,a,t,i.threshold,i.cooldown)};if(t.error)o.error=t.error,g[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)l[t.id]=o;else{const n=t.batchedCount??0,i=t.allowedCount??0;(Math.max(0,i-n)>0||0===i)&&(d[t.id]=o,s.count++,s.lastAt=r,s.duration+=t.totalDuration||0,e.status.out++,c("success"))}}return Me({event:t,...Object.keys(d).length&&{done:d},...Object.keys(l).length&&{queued:l},...Object.keys(g).length&&{failed:g}})}async function Ae(e,t,n,o=!1){if(t.init&&!t.config.init){if(!o&&function(e){const t=e.config.consent;return!!t&&Object.keys(t).length>0}(t))return e.logger.scope(t.type||"unknown").debug("init blocked: consent gate not cleared"),!1;const s=t.type||"unknown",r=e.logger.scope(s),i={collector:e,logger:r,id:n,config:t.config,env:_e(t.env,t.config.env),reportError:D(e,"destination",n,r,t)};r.debug("init");const a=Date.now();let c;(0,f.emitStep)(e,p(e,{stepId:(0,f.stepId)("destination",n),stepType:"destination",phase:"init",eventId:"",now:a}));try{c=await(0,f.useHooks)(t.init,"DestinationInit",e.hooks,e.logger)(i)}catch(t){const o=Date.now(),s=p(e,{stepId:(0,f.stepId)("destination",n),stepType:"destination",phase:"error",eventId:"",now:o});throw s.durationMs=o-a,s.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},(0,f.emitStep)(e,s),t}if(!1===c)return c;if(t.config={...c||t.config,init:!0},t.queueOn?.length){const o=t.queueOn;t.queueOn=[];for(const{type:s,data:r}of o)le(e,t,n,s,r)}r.debug("init done")}return!0}async function $e(e,t,n,o,s,r){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:s,env:{..._e(t.env,i.env),...r?{respond:r}:{}},reportError:D(e,"destination",n,u,t)};if(void 0!==i.mock)return u.debug("mock",{event:a.event.name}),i.mock;const l=a.mapping,g=void 0!==l?.batch,h=g?a.mappingKey||"* *":Oe;if((g||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=xe(l?.batch),r=xe(i.batch),a=s.wait??r.wait??we,c=s.size??r.size??ve,d=s.age??r.age??we,m=_e(t.env,i.env),v=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:D(e,"destination",n,u,t)};u.debug("push batch",{events:r.entries.length});const d=t.config.id||n,l=E(e,d),g=I(t.config.breaker),v=(0,f.stepId)("destination",d),k=t=>{g&&q(e.status.breakers,v,t,g.threshold,g.cooldown)},C=Date.now(),S=p(e,{stepId:(0,f.stepId)("destination",n),stepType:"destination",phase:"flush",eventId:"",now:C});S.batch={size:r.entries.length,index:0},(0,f.emitStep)(e,S);const O=n=>{const o=t.dlq=t.dlq||[],s={max:t.config.dlqMax??x};let r=0;for(const e of n){r+=y(o,e,s).dropped}if(r>0){const t=j(e.status,(0,f.stepId)("destination",d),"dlq",r);w(o,u,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:d,cap:s.max,droppedCount:t})}else o.length<s.max&&b(o);l.failed+=n.length,l.dlqSize=o.length,e.status.failed+=n.length};let A=r.entries.length;const $=ke(i.timeout),M=await(0,f.tryCatchAsync)((o,s)=>Se(Promise.resolve((0,f.useHooks)(t.pushBatch,"DestinationPushBatch",e.hooks,e.logger)(o,s)),$,`Destination "${n}" batch delivery timed out after ${$}ms`),t=>{A=0;const o=Date.now(),s=p(e,{stepId:(0,f.stepId)("destination",n),stepType:"destination",phase:"error",eventId:"",now:o});s.durationMs=o-C,s.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},s.batch={size:r.entries.length,index:0},(0,f.emitStep)(e,s),O(r.entries.map(e=>[e.event,t])),k("transport-failure"),u.error("Push batch failed",{error:t instanceof Error?t.message:String(t),entries:r.entries.length})})(r,c);if(T=M,(0,f.isObject)(T)&&Array.isArray(T.failed)&&M.failed.length>0){const e=[],t=new Set;for(const n of M.failed){const o=r.entries[n.index];o&&!t.has(n.index)&&(t.add(n.index),e.push([o.event,n.error??new Error(`Push batch entry ${n.index} failed (no per-row error provided)`)]))}e.length>0&&(O(e),A=Math.max(0,r.entries.length-e.length),u.error("Push batch partial failure",{failed:e.length,delivered:A,entries:r.entries.length}))}var T;u.debug("push batch done"),l.inFlightBatch=Math.max(0,(l.inFlightBatch??0)-r.entries.length),A>0&&(l.count+=A,l.lastAt=Date.now(),e.status.out+=A,k("success"))},k=(0,f.debounce)(v,{wait:a,size:c,age:d});t.batches[h]={batched:o,isDefault:!g,batchFn:()=>{k()},flush:async()=>{await k.flush()}}}const o=t.batches[h];o.batched.entries.push({event:a.event,ingest:s,respond:r,rule:l,data:a.data}),o.batched.events.push(a.event),(0,f.isDefined)(a.data)&&o.batched.data.push(a.data);const c=t.config.id||n,d=E(e,c);return d.inFlightBatch=(d.inFlightBatch??0)+1,o.batchFn(),Ie}{u.debug("push",{event:a.event.name});const o="string"==typeof a.event.id?a.event.id:"",s=Date.now(),r=p(e,{stepId:(0,f.stepId)("destination",n),stepType:"destination",phase:"in",eventId:o,now:s});a.mappingKey&&(r.mappingKey=a.mappingKey),a.event.consent&&(r.consent={...a.event.consent}),r.inEvent=a.event,(0,f.emitStep)(e,r);try{const r=ke(i.timeout),c=await Se(Promise.resolve((0,f.useHooks)(t.push,"DestinationPush",e.hooks,e.logger)(a.event,d)),r,`Destination "${n}" delivery timed out after ${r}ms`),l=Date.now(),g=p(e,{stepId:(0,f.stepId)("destination",n),stepType:"destination",phase:"out",eventId:o,now:l});return g.durationMs=l-s,g.outEvent=a.event,(0,f.isDefined)(c)&&(g.meta={...g.meta,response:c}),a.mappingKey&&(g.mappingKey=a.mappingKey),(0,f.emitStep)(e,g),u.debug("push done"),c}catch(t){const r=Date.now(),i=p(e,{stepId:(0,f.stepId)("destination",n),stepType:"destination",phase:"error",eventId:o,now:r});throw i.durationMs=r-s,i.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},a.mappingKey&&(i.mappingKey=a.mappingKey),(0,f.emitStep)(e,i),t}}}function Me(e){return{ok:!e?.failed,...e}}function Te(e){const{code:t,config:n={},env:o={},cache:s,state:r}=e,{config:i}=_(e,"before"),{config:a}=_({...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=_e(t.env,o);return{...t,config:c,env:u}}async function Pe(e,t={}){const n={};for(const[o,s]of Object.entries(t))s.config?.require?.length?e.pending.destinations[o]=s:n[o]=Te(s);return n}function _e(e,t){return e||t?t?e&&(0,f.isObject)(e)&&(0,f.isObject)(t)?{...e,...t}:t:e:{}}var Fe=require("@walkeros/core"),He=require("@walkeros/core"),Re=5e3;async function Ue(e){const t=e.logger;await ze(e.sources,"source",t),await async function(e,t){const n=Object.entries(e).flatMap(([e,n])=>{const o=n.batches;if(!o)return[];const 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`)),Re)})])}catch(t){s.error(`destination '${e}' batch flush failed: ${t}`)}finally{n&&clearTimeout(n)}})});await Promise.allSettled(n)}(e.destinations,t),await ze(e.destinations,"destination",t),await ze(e.transformers,"transformer",t),await ze(e.stores,"store",t)}async function ze(e,t,n){const o=Object.entries(e).map(async([e,o])=>{const 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`)),Re)})])}catch(n){i.error(`${t} '${e}' destroy failed: ${n}`)}finally{c&&clearTimeout(c)}});await Promise.allSettled(o)}function Be(e,t){e.stateVersion++,e.cellVersion[t]=e.stateVersion}async function Ge(e,t,n){let o,s,r=!1;const i=ae(e);try{return await async function(){switch(t){case c.Commands.Config:(0,He.isObject)(n)&&((0,Fe.assign)(e.config,n,{shallow:!1}),s=n,r=!0);break;case c.Commands.Consent:if((0,He.isObject)(n)){const{update:t}=d(e,n);Be(e,c.Commands.Consent),s=t,r=!0}break;case c.Commands.Custom:(0,He.isObject)(n)&&(e.custom=(0,Fe.assign)(e.custom,n),Be(e,c.Commands.Custom),s=n,r=!0);break;case c.Commands.Destination:(0,He.isObject)(n)&&"code"in n&&(0,He.isObject)(n.code)&&(o=await je(e,n));break;case c.Commands.Globals:(0,He.isObject)(n)&&(e.globals=(0,Fe.assign)(e.globals,n),Be(e,c.Commands.Globals),s=n,r=!0);break;case c.Commands.Hook:if((0,He.isObject)(n)&&(0,Fe.isString)(n.name)&&(0,Fe.isFunction)(n.fn)){const{name:t,fn:o}=n;e.hooks[t]=o,s=n,r=!0}break;case c.Commands.On:if((0,He.isObject)(n)&&(0,Fe.isString)(n.type)){const{type:t,rules:o}=n;await de(e,t,o)}break;case c.Commands.Ready:r=!0;break;case c.Commands.Run:o=await We(e,n),r=!0;break;case c.Commands.Session:r=!0;break;case c.Commands.Shutdown:e.hasShutdown||(e.hasShutdown=!0,await Ue(e));break;case c.Commands.User:(0,He.isObject)(n)&&((0,Fe.assign)(e.user,n,{shallow:!1}),Be(e,c.Commands.User),s=n,r=!0)}r&&(await me(e,t,void 0,s),o=await De(e));return o||Me({ok:!0})}()}finally{i()}}function Ke(e,t){return{timing:Math.round((Date.now()-e.timing)/10)/100,source:{type:"collector",schema:"4",version:"4.2.1"},...t}}function Ne(e,t){if(!t.name)throw new Error("Event name is required");const[n,o]=t.name.split(" ");if(!n||!o)throw new Error("Event name is invalid");const{timestamp:s=Date.now(),name:r=`${n} ${o}`,data:i={},context:a={},globals:c=e.globals,custom:u={},user:d=e.user,nested:l=[],consent:f=e.consent,id:p=(0,Fe.getSpanId)(),trigger:g="",entity:h=n,action:m=o,timing:y=0,source:v={type:"collector",schema:"4"}}=t,w=v.count??(e.count+=1),b=v.trace??e.trace,k={...v,count:w};return void 0!==b&&(k.trace=b),{name:r,data:i,context:a,globals:c,custom:u,user:d,nested:l,consent:f,id:p,trigger:g,entity:h,action:m,timestamp:s,timing:y,source:k}}function Le(e,t){return Ne(e,Ke(e,t))}async function We(e,t){e.allowed=!0,e.timing=Date.now(),e.trace=(0,Fe.getTraceId)(),e.count=0,t&&(t.consent&&(e.consent=(0,Fe.assign)(e.consent,t.consent),Be(e,c.Commands.Consent)),t.user&&(e.user=(0,Fe.assign)(e.user,t.user),Be(e,c.Commands.User)),t.globals&&(e.globals=(0,Fe.assign)(e.config.globalsStatic||{},t.globals),Be(e,c.Commands.Globals)),t.custom&&(e.custom=(0,Fe.assign)(e.custom,t.custom),Be(e,c.Commands.Custom))),Object.values(e.destinations).forEach(e=>{e.queuePush=[]}),e.queue=[],e.round++,await V(e),await he(e);return await De(e)}var Ve=require("@walkeros/core");function Qe(e,t){const n=(0,Ve.useHooks)(async(n,o={})=>await(0,Ve.tryCatchAsync)(async()=>{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,h=i??(0,Ve.createIngest)(r||"unknown");if(c){const t=await(0,Ve.processEventMapping)(p,c,e);if(t.ignore)return Me({ok:!0});if(c.consent){if(!(0,Ve.getGrantedConsent)(c.consent,e.consent,t.event.consent))return Me({ok:!0})}p=t.event}if(u?.length&&e.transformers&&Object.keys(e.transformers).length>0){const n=await z(e,e.transformers,u,p,h,f,r?`source.${r}.next`:void 0);if(null===n.event)return Me({ok:!0});if(n.stopped)return n.respond&&(f=n.respond),Me({ok:!0});if(n.respond&&(f=n.respond),Array.isArray(n.event)){const o=await Promise.all(n.event.map(async n=>{const o=t(n),s=Ne(e,o);return De(e,s,{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+=n.event.length,t.lastAt=Date.now(),t.duration+=Date.now()-s}return o[0]??Me({ok:!0})}p=n.event}const m=Le(e,p),y=await De(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 y},t=>{if(t instanceof Ve.FatalError)throw t;return e.status.failed++,e.logger.error("push failed",{event:n,ingest:o.ingest,error:t}),Me({ok:!1})})(),"Push",e.hooks,e.logger);return async(t,o)=>{const s="string"==typeof t.id?t.id:"",r=Date.now(),i=p(e,{stepId:"collector.push",stepType:"collector",phase:"in",eventId:s,now:r});i.inEvent=t,(0,Ve.emitStep)(e,i);try{const i=await n(t,o),a=Date.now(),c=p(e,{stepId:"collector.push",stepType:"collector",phase:"out",eventId:s,now:a});return c.durationMs=a-r,c.outEvent=i,(0,Ve.emitStep)(e,c),i}catch(t){const n=Date.now(),o=p(e,{stepId:"collector.push",stepType:"collector",phase:"error",eventId:s,now:n});throw o.durationMs=n-r,o.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},(0,Ve.emitStep)(e,o),t}}}var Ye=require("@walkeros/core");var Je=require("@walkeros/core"),Xe=1e4,Ze=6e4,et=.8;function tt(e={}){const t=e.maxEntries??Xe,n=e.lowWaterMark??et,o=e.sweepIntervalMs??Ze,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()}}}var nt=require("@walkeros/core");function ot(e,t){const{cacheConfig:n,cacheStore:o,namespace:s,logger:r,storeId:i,collector:a}=t,c=(e,t)=>{if(!a)return;const n=p(a,{stepId:`store.${i}`,stepType:"store",phase:"in",eventId:"",now:Date.now()});n.meta={op:"cache",cached:"hit"===t,status:t,key:e},(0,nt.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,nt.compileMatcher)(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 g=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=(0,nt.readCacheEnvelope)(s);if(void 0!==r){if(!("expired"in r))return u.hits++,c(t,"hit"),r.value;try{await o.delete(n)}catch(e){h("delete",t,e)}}const i=g.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,(0,nt.wrapCacheEnvelope)(s,e),e),u.populates++}catch(e){h("set",t,e)}return s}finally{g.delete(n)}})();return g.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),(0,nt.wrapCacheEnvelope)(n,e),e)}catch(e){h("set",t,e)}},async delete(t){u.deletes++,await e.delete(t);try{await o.delete(l(t))}catch(e){h("delete",t,e)}}};function h(e,t,n){const o=`store-cache(${i}): cache ${e} failed for "${t}"; backing succeeded, continuing`;r?r.warn(o,{error:n}):console.warn(o,n)}}function st(e,t,n){const o=`store.${n}`,s=(0,Je.useHooks)(t.get,"StoreGet",e.hooks,e.logger),r=(0,Je.useHooks)(t.set,"StoreSet",e.hooks,e.logger),i=(0,Je.useHooks)(t.delete,"StoreDelete",e.hooks,e.logger);t.get=async t=>{const n=Date.now(),r=p(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:n});r.meta={op:"get",key:t},(0,Je.emitStep)(e,r);try{const r=await s(t),i=Date.now(),a=p(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:i});return a.durationMs=i-n,a.meta={op:"get",key:t},(0,Je.emitStep)(e,a),r}catch(s){const r=Date.now(),i=p(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:r});throw i.durationMs=r-n,i.meta={op:"get",key:t},i.error=s instanceof Error?{name:s.name,message:s.message}:{message:String(s)},(0,Je.emitStep)(e,i),s}},t.set=async(t,n,s)=>{const i=Date.now(),a=p(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:i});a.meta={op:"set",key:t},(0,Je.emitStep)(e,a);try{await r(t,n,s);const a=Date.now(),c=p(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:a});c.durationMs=a-i,c.meta={op:"set",key:t},(0,Je.emitStep)(e,c)}catch(n){const s=Date.now(),r=p(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:s});throw r.durationMs=s-i,r.meta={op:"set",key:t},r.error=n instanceof Error?{name:n.name,message:n.message}:{message:String(n)},(0,Je.emitStep)(e,r),n}},t.delete=async t=>{const n=Date.now(),s=p(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:n});s.meta={op:"delete",key:t},(0,Je.emitStep)(e,s);try{await i(t);const s=Date.now(),r=p(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:s});r.durationMs=s-n,r.meta={op:"delete",key:t},(0,Je.emitStep)(e,r)}catch(s){const r=Date.now(),i=p(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:r});throw i.durationMs=r-n,i.meta={op:"delete",key:t},i.error=s instanceof Error?{name:s.name,message:s.message}:{message:String(s)},(0,Je.emitStep)(e,i),s}}}async function rt(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:D(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=tt()),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]=ot(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&&st(e,o,t);return n}async function it(e){const t=(0,l.assign)({globalsStatic:{},sessionStatic:{},run:!0,queueMax:1e3},e,{merge:!1,extend:!1}),n={level:e.logger?.level,handler:e.logger?.handler},o=(0,l.createLogger)(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:[],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};r.push=Qe(r,e=>Ke(r,e)),r.command=function(e,t){return(0,Ye.useHooks)(async(n,o,s)=>await(0,Ye.tryCatchAsync)(async()=>await t(e,n,o,s),t=>{if(t instanceof Ye.FatalError)throw t;return e.status.failed++,e.logger.error("command failed",{command:n,data:o,error:t}),Me({ok:!1})})(),"Command",e.hooks,e.logger)}(r,Ge);const i=e.stores||{};return r.stores=await rt(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),r.stores.__cache||(r.stores.__cache=tt()),r.destinations=await Pe(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,i=(0,$.validateStepEntry)(s,"Transformer");if(!i.ok){e.logger.warn(`Transformer ${o} invalid (${i.code}): ${i.reason}. Skipping.`);continue}const{config:a}=_(s,"before"),{config:c}=_({...s,config:a},"next"),u=Object.keys(r).length>0?{...c,env:r}:c,{cache:d}=s,l=d?{...u,cache:d}:u,f=s.config?.state??s.state,p=void 0!==f&&void 0===l.state?{...l,state:f}:l,g=e.logger.scope("transformer").scope(o),h={collector:e,logger:g,id:o,ingest:(0,$.createIngest)(o),config:p,env:r,reportError:D(e,"transformer",o,g)},m=t??(e=>{const t=s.mapping;if(t){const n=[];if(void 0!==t.data&&n.push("data"),t.mapping)for(const[e,o]of Object.entries(t.mapping))if("object"==typeof o&&null!==o)for(const[t,s]of Object.entries(o)){if("object"!=typeof s||null===s)continue;const o=s;void 0!==o.data&&n.push(`mapping[${e}][${t}].data`),void 0!==o.silent&&n.push(`mapping[${e}][${t}].silent`)}return n.length>0&&e.collector.logger.warn(`Transformer ${o}: \`${n.join(", ")}\` ignored at transformer position (only event-mutating fields apply).`),{type:"pass",config:e.config,push:async n=>{const o=await(0,$.processEventMapping)(n,t,e.collector);return!o.ignore&&{event:o.event}}}}return{type:"pass",config:e.config,push:e=>({event:e})}}),y=await m(h);void 0!==s.before&&void 0===y.config?.before&&(y.config={...y.config??{},before:s.before}),void 0!==s.next&&void 0===y.config?.next&&(y.config={...y.config??{},next:s.next}),void 0!==f&&void 0===y.config?.state&&(y.config={...y.config??{},state:f}),n[o]=y}return n}(r,e.transformers||{}),r}async function at(e){e=e||{};const t=await it(e),n=(o=t,{type:"elb",config:{},push:async(e,t,n,s,r)=>{if("string"==typeof e&&e.startsWith("walker ")){const n=e.replace("walker ","");return o.command(n,t)}let i;if("string"==typeof e)i={name:e},t&&"object"==typeof t&&!Array.isArray(t)&&(i.data=t);else{if(!e||"object"!=typeof e)return Me({ok:!1});i=e,t&&"object"==typeof t&&!Array.isArray(t)&&(i.data={...i.data||{},...t})}return n&&"object"==typeof n&&(i.context=n),s&&Array.isArray(s)&&(i.nested=s),r&&"object"==typeof r&&(i.custom=r),o.push(i)}});var o;t.sources.elb=n,await W(t,e.sources||{});const{consent:s,user:r,globals:i,custom:a}=e;s&&await t.command("consent",s),r&&await t.command("user",r),i&&await t.command("globals",i),a&&await t.command("custom",a),t.config.run&&await t.command("run");let c=n.push;const u=Object.values(t.sources).filter(e=>"elb"!==e.type),d=u.find(e=>e.config.primary);return d?c=d.push:u.length>0&&(c=u[0].push),{collector:t,elb:c}}function ct(e){if(null===e||"object"!=typeof e)return e;if(Array.isArray(e))return e.map(ct);const t={};for(const[n,o]of Object.entries(e))t[n]="function"==typeof o?o:ct(o);return t}function ut(e){const t=[],{simulation:n,...o}=e,s=ct(o);for(const e of n){const n=e.startsWith("call:")?e.slice(5):e,o=n.split(".");let r=s;for(let e=0;e<o.length-1&&null!=r[o[e]];e++)r=r[o[e]];const i=o[o.length-1];if(null==r||!(i in r))continue;const a=r[i];"function"==typeof a&&(r[i]=function(...e){return t.push({fn:n,args:e,ts:Date.now()}),a.apply(this,e)})}return{wrappedEnv:s,calls:t}}//# sourceMappingURL=index.js.map