@walkeros/server-source-aws 4.7.2 → 4.8.0-next-1791496487198

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,14 @@
1
1
  # @walkeros/server-source-aws
2
2
 
3
+ ## 4.8.0-next-1791496487198
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies [7132619]
8
+ - Updated dependencies [5593d7b]
9
+ - Updated dependencies [421233d]
10
+ - @walkeros/core@4.8.0-next-1791496487198
11
+
3
12
  ## 4.7.2
4
13
 
5
14
  ### Patch Changes
package/dist/dev.js CHANGED
@@ -1 +1 @@
1
- "use strict";var e,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,o=Object.getOwnPropertyNames,r=Object.prototype.hasOwnProperty,s=(e,n)=>{for(var o in n)t(e,o,{get:n[o],enumerable:!0})},i={};s(i,{examples:()=>a,exportExamples:()=>Mn,exportSchemas:()=>Tn,schemas:()=>Dn,sqsExamples:()=>en}),module.exports=(e=i,((e,s,i,a)=>{if(s&&"object"==typeof s||"function"==typeof s)for(let c of o(s))r.call(e,c)||c===i||t(e,c,{get:()=>s[c],enumerable:!(a=n(s,c))||a.enumerable});return e})(t({},"__esModule",{value:!0}),e));var a={};s(a,{createTrigger:()=>Xt,env:()=>c,step:()=>p,trigger:()=>Zt});var c={};s(c,{push:()=>f});var u=()=>()=>Promise.resolve({ok:!0}),d=()=>{},l={error:d,warn:d,info:d,debug:d,throw:e=>{throw"string"==typeof e?new Error(e):e},json:d,scope:()=>l},f={get push(){return u()},get command(){return u()},get elb(){return u()},logger:l},p={};s(p,{apiGatewayV1Post:()=>h,lambdaGet:()=>m,lambdaPost:()=>g,lambdaPostForwardsSource:()=>v});var g={title:"Lambda POST",description:"An API Gateway v2 HTTP POST with a JSON body is converted into a walker elb event.",trigger:{type:"POST"},in:{version:"2.0",requestContext:{http:{method:"POST",path:"/collect"},requestId:"req-123"},body:JSON.stringify({name:"page view",data:{title:"Home"}}),isBase64Encoded:!1},out:[["elb",{name:"page view",data:{title:"Home"}}]]},h={title:"API Gateway v1 POST",description:"A REST API Gateway v1 POST request with a JSON body is converted into a walker elb event.",trigger:{type:"POST"},in:{httpMethod:"POST",path:"/collect",requestContext:{requestId:"req-789",identity:{sourceIp:"203.0.113.42"}},queryStringParameters:null,body:JSON.stringify({name:"page view",data:{title:"Home"}}),isBase64Encoded:!1},out:[["elb",{name:"page view",data:{title:"Home"}}]]},m={title:"Lambda GET",description:"An API Gateway v2 HTTP GET with query parameters is parsed into an elb event payload.",trigger:{type:"GET"},in:{version:"2.0",requestContext:{http:{method:"GET",path:"/collect"},requestId:"req-456"},rawQueryString:"e=page+view&d=%7B%22title%22%3A%22Home%22%7D",isBase64Encoded:!1},out:[["elb",{e:"page view",d:'{"title":"Home"}'}]]},v={title:"Lambda POST with provenance",description:"A POST body carrying a source map is forwarded in full, so release and trace provenance survive the crossing.",trigger:{type:"POST"},in:{version:"2.0",requestContext:{http:{method:"POST",path:"/collect"},requestId:"req-321"},body:JSON.stringify({name:"page view",data:{title:"Home"},source:{release:{web:"r1"}}}),isBase64Encoded:!1},out:[["elb",{name:"page view",data:{title:"Home"},source:{release:{web:"r1"}}}]]},y=require("@walkeros/core"),w=require("@walkeros/core"),b=require("@walkeros/core"),k=require("@walkeros/core"),S=require("@walkeros/core"),E=require("@walkeros/core"),O=require("@walkeros/core"),q=require("@walkeros/core"),_=require("@walkeros/core"),I=require("@walkeros/core"),x=require("@walkeros/core"),A=require("@walkeros/core"),j=require("@walkeros/core"),C=require("@walkeros/core"),P=require("@walkeros/core"),D=require("@walkeros/core"),M=require("@walkeros/core"),T=require("@walkeros/core"),R=require("@walkeros/core"),z={Action:"action",Actions:"actions",Config:"config",Consent:"consent",Context:"context",Custom:"custom",Destination:"destination",Elb:"elb",Globals:"globals",Hook:"hook",Init:"init",Link:"link",On:"on",Prefix:"data-elb",Ready:"ready",Run:"run",Scoped:"_",Session:"session",Shutdown:"shutdown",User:"user",Walker:"walker"};function $(e,t,n){return{traceId:e.source?.trace??t?._meta.trace??n.trace,sourceId:t?._meta.path[0],parentEventId:t?._meta.parentEventId}}function B(e,t,n,o,r,s=Date.now(),i){const a={flowId:e.name??"default",stepId:t,stepType:n,phase:o,eventId:r,timestamp:new Date(s).toISOString(),elapsedMs:s-e.status.startedAt};return i?.traceId&&(a.traceId=i.traceId),i?.sourceId&&(a.sourceId=i.sourceId),i?.parentEventId&&(a.parentEventId=i.parentEventId),a}function W(e){return e instanceof Error?{name:e.name,message:e.message}:{message:String(e)}}function K(e,t,n,o){e.status.in++;const r=B(e,"collector.push","collector","skip","string"==typeof t.id?t.id:"",Date.now(),$(t,n,e));r.skipReason=o.reason,"consent"===o.reason?(r.consent={...o.consent},r.meta={at:o.at,required:{...o.required}}):r.meta={by:o.by??"route",at:o.at},(0,k.emitStep)(e,r)}function L(e,t){return e.storeId&&t.stores[e.storeId]?t.stores[e.storeId]:t.stores.__cache}function H(e){return("undefined"==typeof __WALKEROS_STATE__||__WALKEROS_STATE__)&&e?(0,S.compileState)(e):void 0}function G(e,t,n,o){return"undefined"==typeof __WALKEROS_STATE__||__WALKEROS_STATE__?(0,S.applyState)(t,t=>{return o=e,(n=t)?o.stores[n]:o.stores.__cache;var n,o},n,e,o):Promise.resolve(n)}function N(e,t,n){"undefined"==typeof __WALKEROS_STATE__||__WALKEROS_STATE__||void 0===n||e.logger.warn(`state: not in this build, ${t} state ignored`)}function V(e,t,n){if(null===e||"object"!=typeof e)return e;if(n>=8||!function(e){if(Array.isArray(e))return!0;const t=Object.getPrototypeOf(e);return t===Object.prototype||null===t}(e))return e;const o=t.get(e);if(void 0!==o)return o;if(Array.isArray(e)){const o=[];t.set(e,o);for(const r of e)o.push(V(r,t,n+1));return o}const r={};t.set(e,r);for(const[o,s]of Object.entries(e))r[o]="function"==typeof s?s:V(s,t,n+1);return r}function Q(e,t){try{return e[t]}catch{return"[unreadable]"}}function F(e){const t=new WeakSet,n=(e,o)=>{if(null===e)return null;if("function"==typeof e)return"[function]";if("string"==typeof e||"boolean"==typeof e)return e;if("number"==typeof e)return Number.isFinite(e)?e:null;if("bigint"==typeof e)return String(e);if("object"!=typeof e)return;const r=e;if(t.has(r))return"[circular]";if(o>=6)return"[truncated]";let s;t.add(r);try{if(Array.isArray(r))s=r.map(e=>n(e,o+1));else if(function(e){const t=Object.getPrototypeOf(e);return t===Object.prototype||null===t}(r)){const e={};for(const t of Object.keys(r))e[t]=n(Q(r,t),o+1);s=e}else s=function(e){try{return String(e)}catch{return"[object]"}}(r)}catch{s="[unreadable]"}return t.delete(r),s};return e.map(e=>n(e,0))}function U(e,t){("undefined"==typeof __WALKEROS_OBSERVE__||__WALKEROS_OBSERVE__)&&t&&t.length>0&&(e.calls=t.map(e=>({fn:e.fn,args:F(e.args),ts:e.ts})))}function J(e){if(void 0===e)throw new Error("Collector.Config.queueMax is undefined; defaults must be seeded by collector()");return e}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 r=[];for(;e.length>=n.max;)r.push(e.shift());return e.push(t),r.length>0&&o&&o(r),{appended:!0,dropped:r.length}}var X=new WeakMap;function Z(e,t,n,o){X.get(e)||(X.set(e,!0),t.warn(n,o))}function ee(e){X.delete(e)}var te=()=>Date.now();function ne(e){if(void 0!==e)return"number"==typeof e?{threshold:e,cooldown:3e4}:{threshold:e.threshold??5,cooldown:e.cooldown??3e4}}function oe(e,t,n,o,r){if("partial"===n)return;const s=((i=e)[a=t]||(i[a]={state:"closed",consecutiveFailures:0}),i[a]);var i,a;return"success"===n?(s.consecutiveFailures=0,s.state="closed",s.probing=!1,void(s.openUntil=void 0)):(s.consecutiveFailures+=1,"half-open"===s.state?(s.state="open",s.probing=!1,void(s.openUntil=te()+r)):void(s.consecutiveFailures>=o&&(s.state="open",s.probing=!1,s.openUntil=te()+r)))}function re(e,t){return e.status.destinations[t]||(e.status.destinations[t]={count:0,failed:0,duration:0,queuePushSize:0,dlqSize:0}),e.status.destinations[t]}function se(e,t,n,o){e.dropped[t]||(e.dropped[t]={});const r=e.dropped[t];return r[n]=(r[n]??0)+o,r[n]}function ie(e){const t={error:e instanceof Error?e.message:String(e)};if(e instanceof Error&&e.name&&"Error"!==e.name&&(t.name=e.name),"object"==typeof e&&null!==e&&"code"in e){const n=e;"number"!=typeof n.code&&"string"!=typeof n.code||(t.code=n.code)}return t}function ae(e,t,n,o,r){const s=(0,_.stepId)(t,n);return(t,i)=>{try{if(i)return r?function(e,t,n,o,r,s){const i=t.dlq=t.dlq||[],a={max:t.config.dlqMax??100},c=Y(i,[o,r],a);if(c.dropped>0){const t=se(e.status,(0,_.stepId)("destination",n),"dlq",c.dropped);Z(i,s,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:n,cap:a.max,droppedCount:t})}else i.length<a.max&&ee(i);const u=re(e,n);u.failed++,u.dlqSize=i.length,e.status.failed++;const d=ne(t.config.breaker);if(d){const o=t.config.id||n;oe(e.status.breakers,(0,_.stepId)("destination",o),"transport-failure",d.threshold,d.cooldown)}}(e,r,n,i,t,o):e.status.failed++,void o.error("report error",{...ie(t),event:i.name});e.status.connectionErrors[s]=(e.status.connectionErrors[s]??0)+1,o.error("connection error",ie(t))}catch{}}}function ce(e,t){const n=e.config||{},o=e[t];return void 0!==o?{config:{...n,[t]:o},chainValue:o}:{config:n,chainValue:void 0}}async function ue(e,t,n){if(t.init&&!t.config.init){const o=t.type||"unknown",r=e.logger.scope(`transformer:${o}`),s={collector:e,logger:r,id:n,ingest:(0,x.createIngest)(n),config:t.config,env:be(t.config.env),reportError:ae(e,"transformer",n,r)};r.debug("init");const i=await(0,x.useHooks)(t.init,"TransformerInit",e.hooks,e.logger)(s);if(!1===i)return!1;t.config={...i||t.config,env:i?.env||t.config.env,init:!0},r.debug("init done")}return!0}async function de(e,t,n,o,r,s){const i=t.type||"unknown",a=e.logger.scope(`transformer:${i}`),c={collector:e,logger:a,id:n,ingest:r,config:t.config,env:{...be(t.config.env),...s?{respond:s}:{}},reportError:ae(e,"transformer",n,a)};a.debug("push",{event:o.name});const u="string"==typeof o.id?o.id:"",d=$(o,r,e),l=Date.now(),f=B(e,(0,x.stepId)("transformer",n),"transformer","in",u,l,d);f.inEvent=o,(0,x.emitStep)(e,f);try{const r=await(0,x.useHooks)(t.push,"TransformerPush",e.hooks,e.logger)(o,c),s=Date.now(),i=B(e,(0,x.stepId)("transformer",n),"transformer","out",u,s,d);return i.durationMs=s-l,i.outEvent=r,(0,x.emitStep)(e,i),a.debug("push done"),r}catch(t){const o=Date.now(),r=B(e,(0,x.stepId)("transformer",n),"transformer","error",u,o,d);throw r.durationMs=o-l,r.error=W(t),(0,x.emitStep)(e,r),t}}function le(e){return"string"==typeof e.id?e.id:""}function fe(e,t){const n=le(e);return""!==n&&""===le(t)?{...t,id:n}:t}function pe(e,t,n,o){const r=(a=n,{...a,_meta:{...a._meta,path:[...a._meta.path]}}),s=(0,x.clone)(t),i=le(e);var a;if(""===i)return{event:s,ingest:r};r._meta.parentEventId=i;const c=le(s);return""!==c&&c!==i||(s.id=(0,x.deriveSpanId)(i,o)),{event:s,ingest:r}}function ge(e,t){return{copies:e,respond:t}}function he(e,t){if(void 0===t)return e.rest;const n=e.ownNext?e.rest.slice(1):e.rest;return[{route:t,ancestry:e.ancestry},...n]}async function me(e,t,n){const o=await Promise.all(t.map((t,n)=>(0,x.tryCatchAsync)(ve,t=>(e.collector.logger.scope("transformer:fork").error(`fork ${n} failed`,ie(t)),{copies:[]}))(e,t))),r=[];let s,i=n,a=o.length>0;return o.forEach((e,n)=>{void 0!==t[n].respond&&e.respond&&(i=e.respond),e.stopped||(a=!1),e.stopped||0===e.copies.length?void 0===s&&(s=e.droppedBy):r.push(...e.copies)}),0===r.length?{copies:r,respond:i,...a?{stopped:!0}:{},...void 0!==s?{droppedBy:s}:{}}:ge(r,i)}async function ve(e,t){const{ingest:n}=t;let{stack:o,event:r,respond:s}=t,i=t.resume;for(;;){let t,a;if(i)t=i.member,a=i,i=void 0;else{const i=(0,x.advanceChain)(o,(0,x.createMappingRoot)(n,r),e.transformers);if("done"===i.kind)return ge([{event:r,ingest:n}],s);if("stop"===i.kind)return{copies:[],respond:s,stopped:!0,...void 0!==i.owner?{droppedBy:i.owner}:{}};if("fork"===i.kind){const t=r;return me(e,i.branches.map((e,o)=>({stack:e,...pe(t,t,n,o),respond:void 0})),s)}const a=e.transformers[i.id];t={id:i.id,ancestry:i.ancestry,rest:i.rest,ownNext:!!a&&void 0!==a.config.next}}const c=await ye(e,t,r,n,s,a);if("halt"===c.kind)return c.result;if("fork"===c.kind)return me(e,c.copies,s);r=c.event,s=c.respond,o=c.stack}}async function ye(e,t,n,o,r,s){const{collector:i,transformers:a,chainContext:c}=e,u=t.id,d=a[u];let l=n,f=r;const p=(e=t.rest)=>({kind:"continue",event:fe(n,l),respond:f,stack:e}),g=e=>({kind:"halt",result:e});if(!d)return i.logger.warn(`Transformer not found: ${u}`),p();const h=d.config?.cache,m=h?(0,x.compileCache)(h):void 0,v=m?L(m,i):void 0;let y=s?.cacheMiss;if(!s){if(o._meta.path.length>256)return i.logger.error(`Max path length exceeded at ${u}`),g({copies:[],respond:f});if(o._meta.hops++,o._meta.path.push(u),!await(0,x.tryCatchAsync)(ue,e=>{if(e instanceof x.FatalError)throw e;return i.status.failed++,i.logger.scope(`transformer:${d.type||"unknown"}`).error("transformer init failed",{transformer:u,...ie(e)}),!1})(i,d,u))return g({copies:[],respond:f});if(c&&void 0!==d.config?.chainMocks?.[c]){const e=d.config.chainMocks[c];return i.logger.scope(`transformer:${d.type||"unknown"}`).debug("chainMock",{chain:c}),l=e,p()}if(void 0!==d.config?.mock)return i.logger.scope(`transformer:${d.type||"unknown"}`).debug("mock"),l=d.config.mock,p();if(d.config?.disabled)return p();if(m&&v){const e=await(0,x.checkCache)(m,v,(0,x.createMappingRoot)(o,l));if("HIT"===e?.status&&e.value)return l=e.value,m.stop?g({copies:[{event:fe(n,l),ingest:o}],respond:f,stopped:!0}):p();"MISS"===e?.status&&(y={key:e.key,ttl:e.rule.ttl})}if(void 0!==d.config.before){const e=await async function(e,t,n,o,r,s,i){const a=t[n],c=a?a.config.before:void 0,u=await we(e,t,c,o,r,s,i);return u.stopped&&0===u.copies.length&&!u.droppedBy?{...u,droppedBy:n}:u}(i,a,u,l,o,f,c),n=e.respond??f;if(0===e.copies.length||e.stopped)return g({...e,respond:n});f=n;const[r]=e.copies;if(e.copies.length>1||r.ingest!==o){const n={member:t,cacheMiss:y};return{kind:"fork",copies:e.copies.map(e=>({stack:t.rest,event:e.event,ingest:e.ingest,respond:void 0,resume:n}))}}l=r.event}}const w=H(d.config?.state),b=w?.filter(e=>"get"===e.mode),k=w?.filter(e=>"set"===e.mode),S=async e=>k&&0!==k.length?G(i,k,e,o):e;b&&b.length>0&&(l=await G(i,b,l,o));const E=await(0,x.tryCatchAsync)(de,e=>(i.status.failed++,i.logger.scope(`transformer:${d.type||"unknown"}`).error("Push failed",ie(e)),!1))(i,d,u,l,o,f);if(!1===E)return g({copies:[],respond:f,droppedBy:u});if(Array.isArray(E)&&1!==E.length){if(0===E.length)return g({copies:[],respond:f});const e=l,n=[];for(let r=0;r<E.length;r++){const s=E[r],i=await S(s.event||e);n.push({stack:he(t,s.next),...pe(e,i,o,r),respond:f})}return{kind:"fork",copies:n}}const O=Array.isArray(E)?E[0]:E;let q;return O&&"object"==typeof O&&(O.respond&&(f=O.respond),O.event&&(l=O.event),q=O.next),l=await S(l),y&&v&&(0,x.storeCache)(v,y.key,l,y.ttl),p(he(t,q))}async function we(e,t,n,o,r,s,i){const a=r??(0,x.createIngest)("string"==typeof n?n:"chain");return void 0===n?ge([{event:o,ingest:a}],s):(i&&(a._meta.chainPath=i),ve({collector:e,transformers:t,chainContext:i},{stack:(0,x.isChainContinuation)(n)?n:(0,x.startChain)(n),event:o,ingest:a,respond:s}))}function be(e){return e&&(0,x.isObject)(e)?e:{}}var ke=1e4;function Se(e){return"number"==typeof e&&e>0?e:ke}var Ee=class extends Error{constructor(e){super(e),this.name="DestinationTimeoutError"}};function Oe(e,t,n){let o;const r=new Promise((e,r)=>{o=setTimeout(()=>r(new Ee(n)),t)});return Promise.race([e,r]).finally(()=>{o&&clearTimeout(o)})}async function qe(e,t,n){if(!t.on||!t.queueOn?.length)return;const o=t.queueOn;t.queueOn=[];const r=n||t.config?.id||"unknown";for(const{type:n,data:s}of o){if(Te(n)&&!We(e,t,n))continue;const o=t.on;let i=!1;await(0,I.tryCatchAsync)(()=>Oe(Promise.resolve(o(n,s)),ke,`Source "${r}" on(${n}) did not settle within 10000ms`),t=>{if(t instanceof I.FatalError)throw t;t instanceof Ee?i=!0:e.status.failed++,e.logger.scope("source").error("source on flush failed",{sourceId:r,type:n,...ie(t)})})(),Te(n)&&!i&&Be(e,t,n)}}function _e(e){return Boolean(e.config.init)&&!e.config.require?.length}async function Ie(e,t,n){const{code:o,config:r={},env:s={},primary:i,next:a,before:c,cache:u,terminus:d}=n,l=r.state??n.state,f=H(l);N(e,(0,I.stepId)("source",t),l);const p=u,g=p?(0,I.compileCache)({...p,stop:p.stop??!0}):void 0,h=d??e.push,m=Boolean(d),v=async(n,o,s)=>{if(m)return h(n);let i;const u="string"==typeof n.id&&""!==n.id?n:{...n,id:(0,I.getSpanId)()};let d=[{event:u,ingest:s.ingest}];if(void 0!==c){const n=`source.${t}.before`,o=await we(e,e.transformers||{},c,u,s.ingest,s.respond,n);if(0===o.copies.length)return K(e,u,s.ingest,{reason:"dropped",by:o.droppedBy,at:n}),Pt({ok:!0,dropped:!0});if(o.stopped)return o.respond&&(s.respond=o.respond),{ok:!0};o.respond&&(s.respond=o.respond),d=o.copies}if(g){const t=L(g,e);if(t){const n=(0,I.createMappingRoot)(s.ingest),o=await(0,I.checkCache)(g,t,n);if(o){if("HIT"===o.status&&void 0!==o.value&&g.stop){let t=o.value;return o.rule.update&&(t=await(0,I.applyUpdate)(t,o.rule.update,{...n,cache:{status:"HIT"}},e)),s.respond?.(t),{ok:!0}}if("MISS"===o.status&&g.stop&&s.respond){const r=s.respond,a=o.rule.update,c={...n,cache:{status:"MISS"}},u=o.key,d=o.rule.ttl,l=n=>{(0,I.storeCache)(t,u,n,d),a?i=(async()=>{const t=await(0,I.applyUpdate)(n,a,c,e);r(t)})():r(n)};s.respond=l}"MISS"!==o.status||g.stop||(0,I.storeCache)(t,o.key,!0,o.rule.ttl)}}}f&&f.length>0&&(d=await Promise.all(d.map(async t=>({event:await G(e,f,t.event,t.ingest),ingest:t.ingest}))));let l={ok:!0};for(const e of d)l=await h(e.event,{...o,id:t,ingest:e.ingest,respond:s.respond,mapping:r,preChain:a});return i&&await i,l},y=async n=>{const o=(0,I.createIngest)(t),s=(0,I.parseTraceparent)((0,I.isScope)(n)?n?.headers?.traceparent:void 0);if(s&&(o._meta.trace=s.trace,o._meta.parentEventId=s.parentSpan),!r.ingest||void 0===n)return o;const i=await(0,I.getMappingValue)(n,r.ingest,{collector:e});return{...o,...i,_meta:o._meta}},w=e.logger.scope("source").scope(t),b={...s,push:async(e,n={})=>{const o={ingest:(0,I.createIngest)(t),respond:void 0};return v(e,n,o)},command:e.command,sources:e.sources,elb:e.elb,logger:w},k={collector:e,logger:w,id:t,config:r,env:b,withScope:async(e,t,n)=>{const o={ingest:await y(e),respond:t};return n({...b,push:(e,t={})=>v(e,t,o),ingest:o.ingest,respond:o.respond})},reportError:ae(e,"source",t,w)},S=await(0,I.tryCatchAsync)(o,n=>{if(n instanceof I.FatalError)throw n;e.status.failed++,e.logger.scope("source").error("source factory failed",{sourceId:t,...ie(n)})})(k);if(!S)return;const E=S.type||"unknown",O=e.logger.scope(E).scope(t);return b.logger=O,i&&(S.config={...S.config,primary:i}),S}async function xe(e){for(const[t,n]of Object.entries(e.sources)){if(_e(n))continue;const o=n.config.require;if(!o?.length)continue;const r=o.filter(t=>!ze(e,t));r.length!==o.length&&(n.config.require=r,_e(n)&&await qe(e,n,t))}for(const[t,n]of Object.entries(e.pending.destinations)){if(!e.pending.destinations[t]||e.destinations[t])continue;const o=n.config?.require;if(!o)continue;const r=o.filter(t=>!ze(e,t));if(n.config&&(n.config.require=r),r.length>0)continue;delete e.pending.destinations[t];const s=Dt(n);!1!==s.config.queue&&(s.queuePush=[...e.queue]),e.destinations[t]=s,await mt(e,s,t)}}function Ae(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 je=!1;function Ce(){je||(je=!0,"undefined"!=typeof console&&"function"==typeof console.warn&&console.warn("walkerOS: ignored an on-dispatch call with a non-collector argument"))}function Pe(e,t,n,o){if(n instanceof O.FatalError)throw n;e.logger.scope("on").error("on callback failed",{kind:t,...o,...ie(n)})}var De=["consent","user","globals","custom"];function Me(e){return De.includes(e)}function Te(e){return Me(e)}function Re(e,t){return Me(t)&&Object.keys(e[t]).length>0}function ze(e,t){if(Me(t))return Re(e,t);switch(t){case z.Run:case z.Ready:return!0===e.allowed;default:return e.seenEvents.has(String(t))}}function $e(e,t){return e.cellVersion?.[String(t)]??0}function Be(e,t,n){ct(e,t,n,$e(e,n))}function We(e,t,n){return e.allowed&&$e(e,n)>function(e,t,n){const o=e.delivery.get(t),r=o?.[String(n)];return void 0===r?-1:r}(e,t,n)}var Ke=8;function Le(e){const t=e.cascade;if(t&&!He.has(t))return()=>{};const n=t||{counts:new WeakMap};e.cascade=n,He.set(n,(He.get(n)||0)+1);let o=!1;return()=>{if(o)return;o=!0;const t=(He.get(n)||1)-1;t>0?He.set(n,t):(He.delete(n),e.cascade===n&&(e.cascade=void 0))}}var He=new WeakMap;function Ge(e,t,n){const o=e.cascade;if(!o)return!0;let r=o.counts.get(t);r||(r={},o.counts.set(t,r));const s=String(n),i=(r[s]||0)+1;return r[s]=i,i<=Ke||(i===Ke+1&&e.logger.error("state delivery did not converge",{type:s}),!1)}function Ne(e,t){return{collector:e,logger:e.logger.scope("on").scope(String(t))}}async function Ve(e,t,n,o,r){const s=t.on;if(!s)return!0;const i=Te(o);if(i&&(Qe.get(t)||Fe.has(t)))return rt(e,t,o),Qe.get(t)||Ue.add(t),!1;const a=i?$e(e,o):0,c=i&&function(e,t,n,o){if(tt.get(t)?.has(String(n)))return!0;const r=e.delivery?.get(t)?.[String(n)];return void 0===r||r<o-1}(e,t,o,a)?dt(e,o):r,u=t.type||"unknown",d=e.logger.scope(u).scope("on").scope(o),l={collector:e,logger:d,id:n,config:t.config,data:c,env:Mt(t.env,t.config.env),reportError:ae(e,"destination",n,d,t)};i&&(it(t,o),function(e,t,n){let o=Ze.get(e);o||(o={},Ze.set(e,o));const r=String(t),s=o[r];(void 0===s||s<n)&&(o[r]=n)}(t,o,a),Fe.add(t));const f=Se(t.config.timeout);let p=Promise.resolve(),g=!0,h=!1,m=!0;try{await(0,q.tryCatchAsync)(()=>(p=Promise.resolve(s(o,l)),Oe(p,f,`Destination "${n}" on(${o}) did not settle within ${f}ms`)),t=>{g=!1,t instanceof Ee&&(h=!0),Pe(e,"destination",t,{destId:n,type:o})})(),m=!1}finally{if(i){Fe.delete(t),m&&Ue.delete(t);const r=tt.get(t);g?(ct(e,t,o,a),r?.delete(String(o))):rt(e,t,o),h?function(e,t,n,o,r,s,i){Qe.set(t,(Qe.get(t)||0)+1);const a=()=>{const s=(Qe.get(t)||0)-1;var a,c,u,d;s>0?Qe.set(t,s):Qe.delete(t),nt(t,o),et(t,o,r),at(e,t),i.debug("late settle after timeout"),Ue.delete(t),e.allowed&&e.destinations[n]===t&&(a=e,c=t,u=n,d=i,(0,q.tryCatchAsync)(async()=>{await mt(a,c,u),!Ye(c)&&c.queuePush?.length&&await It(a,void 0,{},{[u]:c})},e=>{d.error("state recovery failed",ie(e))})())};s.then(a,a)}(e,t,n,o,a,p,d):(et(t,o,a),at(e,t))}}return i&&!h&&Ue.delete(t)&&await mt(e,t,n),g}var Qe=new WeakMap,Fe=new WeakSet,Ue=new WeakSet,Je=new WeakMap;function Ye(e){return Je.get(e)}var Xe=new WeakMap,Ze=new WeakMap;function et(e,t,n){const o=Ze.get(e);o&&o[String(t)]===n&&delete o[String(t)]}var tt=new WeakMap;function nt(e,t){const n=tt.get(e);n?n.add(String(t)):tt.set(e,new Set([String(t)]))}var ot=new WeakMap;function rt(e,t,n){!function(e,t,n){const o=e.delivery?.get(t);o&&delete o[String(n)]}(e,t,n),nt(t,n),Je.set(t,{type:n,since:Date.now()})}function st(e,t){return!!tt.get(t)?.size||De.some(n=>Re(e,n)&&We(e,t,n))}function it(e,t){Xe.set(e,(Xe.get(e)||0)+1),Je.set(e,{type:t,since:Date.now()})}function at(e,t){const n=(Xe.get(t)||0)-1;var o,r;n>0?Xe.set(t,n):Xe.delete(t),o=e,r=t,Je.has(r)&&(Xe.get(r)||st(o,r)||Je.delete(r))}function ct(e,t,n,o){let r=e.delivery.get(t);r||(r={},e.delivery.set(t,r));const s=String(n),i=r[s];(void 0===i||i<o)&&(r[s]=o)}function ut(e,t,n,o){if(!Ae(e))return void Ce();const r=dt(e,t,o);if(n.length)switch(t){case z.Consent:!function(e,t,n){const o=n||e.consent,r=Ne(e,z.Consent);t.forEach(t=>{We(e,t,z.Consent)&&Ge(e,t,z.Consent)&&(Object.keys(o).filter(e=>e in t).forEach(n=>{(0,q.tryCatch)(t[n],t=>Pe(e,"consent",t,{key:n}))(o,r)}),Be(e,t,z.Consent))})}(e,n,o);break;case z.Ready:!function(e,t){if(!e.allowed)return;const n=Ne(e,z.Ready);t.forEach(t=>{(0,q.tryCatch)(t,t=>Pe(e,"ready",t))(void 0,n)})}(e,n);break;case z.Run:!function(e,t){if(!e.allowed)return;const n=Ne(e,z.Run);t.forEach(t=>{(0,q.tryCatch)(t,t=>Pe(e,"run",t))(void 0,n)})}(e,n);break;case z.Session:!function(e,t){if(!e.session)return;const n=Ne(e,z.Session);t.forEach(t=>{(0,q.tryCatch)(t,t=>Pe(e,"session",t))(e.session,n)})}(e,n);break;default:{const o=Ne(e,t),s=Te(t);n.forEach(n=>{"function"==typeof n&&(s&&!We(e,n,t)||s&&!Ge(e,n,t)||((0,q.tryCatch)(n,n=>Pe(e,"generic",n,{type:t}))(r,o),s&&Be(e,n,t)))});break}}}function dt(e,t,n){if(Me(t))return n||e[t];switch(t){case z.Session:return e.session;case z.Config:return n||e.config;default:return}}async function lt(e,t,n,o,r){if(!t.on)return!1;if(Te(o)&&!We(e,t,o))return!1;if(Te(o)&&!Ge(e,t,o))return!1;const s=Te(o);if(s&&ft.has(t))return pt.add(t),!1;const i=s?$e(e,o):0;s&&ft.add(t);const a=t.on;let c,u=Promise.resolve(),d=!1;try{c=await(0,q.tryCatchAsync)(()=>(u=Promise.resolve(a(o,r)),Oe(u,ke,`Source "${n}" on(${o}) did not settle within 10000ms`)),t=>{t instanceof Ee&&(d=!0),Pe(e,"source",t,{sourceId:n,type:o})})()}finally{s&&!d&&ft.delete(t)}if(s)if(d){const o=()=>{ft.delete(t),pt.delete(t),e.allowed&&e.sources[n]===t&&(0,q.tryCatchAsync)(()=>gt(e,t,n),t=>{e.logger.scope("on").error("state recovery failed",ie(t))})()};u.then(o,o)}else ct(e,t,o,i),pt.delete(t)&&await gt(e,t,n);return!1===c}var ft=new WeakSet,pt=new WeakSet;async function gt(e,t,n){const o=Le(e);try{for(const o of De)await lt(e,t,n,o,dt(e,o))}finally{o()}}async function ht(e,t,n,o,r){if(!t.on)return;const s=Te(o);if(s&&!We(e,t,o))return;const i=Ze.get(t)?.[String(o)];if(s&&void 0!==i&&i>=$e(e,o))return;if(s&&!Ge(e,t,o)){if(t.config.init)return void rt(e,t,o);const n=t.queueOn=t.queueOn||[],r={type:o,data:dt(e,o)},s=n[n.length-1];return s&&s.type===o?n[n.length-1]=r:n.push(r),Be(e,t,o),void tt.get(t)?.delete(String(o))}const a=ot.get(t);if(!t.config.init||a)return t.queueOn=t.queueOn||[],t.queueOn.push({type:o,data:r}),void(s&&(Be(e,t,o),a&&!a.held&&(it(t,o),a.held=!0)));await Ve(e,t,n,o,r)}async function mt(e,t,n){if(!t.on)return;const o=Le(e);try{for(const o of De)(Re(e,o)||tt.get(t)?.has(String(o)))&&await ht(e,t,n,o,dt(e,o))}finally{o()}}function vt(e){return(Xe.get(e)||0)>0}function yt(e,t,n){return n.catch(()=>{}),{id:e,destination:t,done:n}}var wt=1e3,bt=1e3,kt=3e4,St=Object.freeze({batched:!0});function Et(e){return e===St}var Ot=" batch-all";function qt(e){return void 0===e?{}:"number"==typeof e?{wait:e}:{wait:e.wait,size:e.size,age:e.age}}function _t(e){for(const t of e)Ye(t.destination)&&(t.drain=!0)}async function It(e,t,n={},o){if(!e.allowed)return Pt({ok:!1});if(!t)return xt(e,void 0,n,o);const r=await async function(e,t,n={}){const o=n.ingest??(0,w.createIngest)(n.id||"unknown"),r=e.config.next;if(void 0===r)return{copies:[{event:t,ingest:o}],respond:n.respond};const s=await we(e,e.transformers||{},r,t,o,n.respond,Lt),i=s.respond??n.respond;return 0===s.copies.length?(e.logger.debug("Event dropped by collector.next"+(s.droppedBy?` (${s.droppedBy})`:"")),K(e,t,o,{reason:"dropped",by:s.droppedBy,at:Lt}),{copies:[],respond:i,dropped:!0}):s.stopped?{copies:[],respond:i}:{copies:s.copies.map(t=>({event:Wt(e,t.event,t.ingest),ingest:t.ingest})),respond:i}}(e,t,n);if(0===r.copies.length)return Pt({ok:!0,...r.dropped?{dropped:!0}:{}});const s=[];for(const t of r.copies)s.push(await xt(e,t.event,{id:n.id,ingest:t.ingest,respond:r.respond},o));return s[0]}async function xt(e,t,n,o){const{user:r}=e;if(t){const n=J(e.config.queueMax),o=Y(e.queue,t,{max:n});if(o.dropped>0){const t=se(e.status,(0,b.stepId)("collector"),"queue",o.dropped);Z(e.queue,e.logger,"collector.queue overflow; oldest events dropped",{buffer:"queue",cap:n,droppedCount:t})}else e.queue.length<n&&ee(e.queue);e.status.in++}o||(o=e.destinations);const s=e.transformers||{},i=await Promise.all(Object.entries(o||{}).map(async([o,i])=>{if(i.config.disabled)return{id:o,destination:i,skipped:!0};const a=i.config.id||o,c=(0,b.stepId)("destination",a),u=ne(i.config.breaker);if(u&&function(e,t,n){const o=e[t];if(!o||"closed"===o.state)return!1;if("half-open"===o.state)return!0===o.probing;const r=te();return void 0!==o.openUntil&&r<o.openUntil||(o.state="half-open",o.probing=!0,o.openUntil=r+n,!1)}(e.status.breakers,c,u.cooldown))return{id:o,destination:i,skipped:!0};const d=t=>{u&&oe(e.status.breakers,c,t,u.threshold,u.cooldown)},l=()=>{u&&function(e,t){const n=e[t];n&&"half-open"===n.state&&!0===n.probing&&(n.state="open",n.probing=!1)}(e.status.breakers,c)},f=t=>{if(!t.length)return;i.queuePush||(i.queuePush=[]);const n=i.queuePush,r=i.config.id||o,s={max:i.config.queueMax??wt};let a=0;for(const e of t)a+=Y(n,e,s).dropped;if(a>0){re(e,r);const t=se(e.status,(0,b.stepId)("destination",r),"queue",a);Z(n,e.logger.scope(i.type||"unknown"),"destination.queuePush overflow; oldest events dropped",{buffer:"queuePush",destination:r,cap:s.max,droppedCount:t})}else n.length<s.max&&ee(n)};i.on&&i.config.init&&!Ye(i)&&!vt(i)&&st(e,i)&&await mt(e,i,o);const p=Ye(i);if(p&&!vt(i)&&Date.now()-p.since>=Se(i.config.timeout)&&await mt(e,i,o),Ye(i)){if(l(),!t)return{id:o,destination:i,skipped:!0};const e=[(0,b.clone)(t)];return f(e),{id:o,destination:i,queue:e}}let g=(i.queuePush||[]).map(t=>({...t,consent:e.consent}));i.queuePush=[],t&&g.push((0,b.clone)(t));const h=n.ingest?{...n.ingest,_meta:{...n.ingest._meta,path:[...n.ingest._meta.path]}}:(0,b.createIngest)("unknown");if(!g.length&&!i.queueOn?.length)return l(),{id:o,destination:i,skipped:!0};if(!g.length&&i.queueOn?.length){if(!(0,b.getGrantedConsent)(i.config.consent,e.consent))return l(),{id:o,destination:i,skipped:!0};let t=!1;try{t=await jt(e,i,o,!0)}catch(t){e.status.failed++;const n=i.type||"unknown";e.logger.scope(n).error("destination init failed",{error:t instanceof Error?t.message:String(t)}),d("transport-failure")}if(Ye(i))return l(),{id:o,destination:i,skipped:!0};if(!t||!i.queuePush?.length)return l(),{id:o,destination:i,skipped:!t};g=i.queuePush.map(t=>({...t,consent:e.consent})),i.queuePush=[]}const m=t=>{const n=e.consent,r=[],s=t.filter(t=>{const s=(0,b.getGrantedConsent)(i.config.consent,n,t.consent);if(s)return t.consent=s,r.push(t),!1;const a=B(e,(0,b.stepId)("destination",o),"destination","skip","string"==typeof t.id?t.id:"",Date.now(),$(t,h,e));return a.skipReason="consent",n&&(a.consent={...n}),i.config.consent&&(a.meta={required:{...i.config.consent}}),(0,b.emitStep)(e,a),!0});return{allowed:r,skipped:s}},v=e.consent,{allowed:y,skipped:w}=m(g);if(f(w),!y.length)return l(),{id:o,destination:i,queue:g};const k=new Set(i.queuePush);let S=!1;try{S=await jt(e,i,o,!0)}catch(t){e.status.failed++;const n=i.type||"unknown";e.logger.scope(n).error("destination init failed",{error:t instanceof Error?t.message:String(t)}),d("transport-failure")}if(!S)return l(),{id:o,destination:i,queue:g};if(Ye(i))return l(),f(y),{id:o,destination:i,queue:y};const E=[];if(e.consent!==v){const t=m(y.map(t=>({...t,consent:e.consent})));y.splice(0,y.length,...t.allowed),E.push(...t.skipped)}const O=i.queuePush||[],q=O.filter(e=>!k.has(e));if(q.length){i.queuePush=O.filter(e=>k.has(e));const t=m(q.map(t=>({...t,consent:e.consent})));y.push(...t.allowed),E.push(...t.skipped)}if(f(E),!y.length)return l(),E.length?{id:o,destination:i,queue:E}:{id:o,destination:i,skipped:!0};let _,I;i.dlq||(i.dlq=[]);const x=i.config.before,A=i.config.next,j=i.config?.cache,C=j?(0,b.compileCache)(j):void 0,P=C?L(C,e):void 0,D=H(i.config?.state),M=D?.filter(e=>"get"===e.mode),T=D?.filter(e=>"set"===e.mode);let R=0,z=0,W=0;return await Promise.all(y.map(async t=>{let a,c;if(t.user=(0,b.assign)(r,t.user),C?.stop&&P){const e=(0,b.createMappingRoot)(h,t),n=await(0,b.checkCache)(C,P,e);if("HIT"===n?.status)return t;"MISS"===n?.status&&(a={key:n.key,ttl:n.rule.ttl})}let u=[{event:t,ingest:h}],d=n.respond;if(void 0!==x){const r=`destination.${o}.before`,i=await we(e,s,x,t,h,n.respond,r);if(0===i.copies.length){const n=B(e,(0,b.stepId)("destination",o),"destination","skip","string"==typeof t.id?t.id:"",Date.now(),$(t,h,e));return n.skipReason="dropped",n.meta={by:i.droppedBy??"route",at:r},(0,b.emitStep)(e,n),t}i.respond&&(d=i.respond),u=i.copies.map(e=>({event:e.event,ingest:e.ingest}))}const l=async(t,n,r)=>{let a=r,u=!1;if(C&&!C.stop&&P){const e=(0,b.createMappingRoot)(n,t??void 0),o=await(0,b.checkCache)(C,P,e);if("HIT"===o?.status)return!1;"MISS"===o?.status&&(a={key:o.key,ttl:o.rule.ttl},u=!0)}M&&M.length>0&&t&&(t=await G(e,M,t,n));const l=Date.now();let f=!1;const p=await(0,b.tryCatchAsync)(Ct,n=>{const r=i.type||"unknown";e.logger.scope(r).error("Push failed",{...ie(n),event:t.name}),_=n,f=!0;const s=i.dlq,a=i.config.id||o,c={max:i.config.dlqMax??100},u=Y(s,[t,n],c);if(u.dropped>0){re(e,a);const t=se(e.status,(0,b.stepId)("destination",a),"dlq",u.dropped);Z(s,e.logger.scope(i.type||"unknown"),"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:a,cap:c.max,droppedCount:t})}else s.length<c.max&&ee(s)})(e,i,o,t,n,d);if(R+=Date.now()-l,a&&P&&void 0===i.config.mock&&(u?(0,b.storeCache)(P,a.key,p??!0,a.ttl):void 0===c&&(c=p??!0)),!f&&!Et(p)&&T&&T.length>0&&t&&(t=await G(e,T,t,n)),void 0===p||Et(p)||(I=p),Et(p)&&z++,!f&&A){void 0!==p&&(n._response=p);const r=await we(e,s,A,t,n,d,`destination.${o}.next`);r.respond&&(d=r.respond)}return!0};for(const e of u)await l(e.event,e.ingest,a)&&W++;return a&&P&&void 0!==c&&void 0===i.config.mock&&(0,b.storeCache)(P,a.key,c,a.ttl),t})),{id:o,destination:i,error:_,response:I,totalDuration:R,batchedCount:z,allowedCount:y.length,pushedCount:W,canonicalId:a,breakerConfig:u}})),a={},c={},u={};for(const t of i){if(t.skipped)continue;const n=t.destination,o={type:n.type||"unknown",data:t.response};re(e,t.id);const r=e.status.destinations[t.id],s=Date.now();r.queuePushSize=n.queuePush?.length??0,r.dlqSize=n.dlq?.length??0;const i=t.breakerConfig,d=t.canonicalId?(0,b.stepId)("destination",t.canonicalId):void 0,l=t=>{i&&d&&oe(e.status.breakers,d,t,i.threshold,i.cooldown)};if(t.error)o.error=t.error,u[t.id]=o,r.failed++,r.lastAt=s,r.duration+=t.totalDuration||0,e.status.failed++,l("transport-failure");else if(t.queue&&t.queue.length)c[t.id]=o;else{const n=t.batchedCount??0,i=t.allowedCount??0,c=t.pushedCount??i;(Math.max(0,c-n)>0||0===i)&&(a[t.id]=o,r.count++,r.lastAt=s,r.duration+=t.totalDuration||0,e.status.out++,l("success"))}}return Pt({event:t,...Object.keys(a).length&&{done:a},...Object.keys(c).length&&{queued:c},...Object.keys(u).length&&{failed:u}})}var At=new WeakMap;async function jt(e,t,n,o=!1){if(t.init&&!t.config.init){if(!o&&function(e){const t=e.config.consent;return!!t&&Object.keys(t).length>0}(t))return e.logger.scope(t.type||"unknown").debug("init blocked: consent gate not cleared"),!1;const r=At.get(t);if(r)return r;const s=async function(e,t,n,o){const r=await async function(e,t,n,o){const r=t.type||"unknown",s=e.logger.scope(r),i={collector:e,logger:s,id:o,config:t.config,env:Mt(t.env,t.config.env),reportError:ae(e,"destination",o,s,t)};s.debug("init");const a=Date.now();let c;(0,b.emitStep)(e,B(e,(0,b.stepId)("destination",o),"destination","init","",a));try{c=await(0,b.useHooks)(n,"DestinationInit",e.hooks,e.logger)(i)}catch(t){const n=Date.now(),r=B(e,(0,b.stepId)("destination",o),"destination","error","",n);throw r.durationMs=n-a,r.error=W(t),(0,b.emitStep)(e,r),t}return!1!==c&&{...c||t.config,init:!0}}(e,t,n,o);if(!1===r)return!1;if(t.config=r,t.queueOn?.length){const n=Le(e);!function(e){const t=e.queueOn?.find(({type:e})=>Te(e));t&&it(e,t.type),ot.set(e,{held:!!t})}(t);try{for(let n=t.queueOn?.shift();n;n=t.queueOn?.shift())await Ve(e,t,o,n.type,n.data)}catch(n){for(const{type:n}of t.queueOn||[])Te(n)&&rt(e,t,n);throw t.queueOn=[],n}finally{!function(e,t){const n=ot.get(t);ot.delete(t),n?.held&&at(e,t)}(e,t),n()}}return e.logger.scope(t.type||"unknown").debug("init done"),!0}(e,t,t.init,n);At.set(t,s);try{return await s}finally{At.delete(t)}}return!0}async function Ct(e,t,n,o,r,s){const{config:i}=t,a=await(0,b.processEventMapping)(o,i,e);if(a.ignore)return!1;const c=t.type||"unknown",u=e.logger.scope(c),d={collector:e,logger:u,id:n,config:i,data:a.data,rule:a.mapping,ingest:r,env:{...Mt(t.env,i.env),...s?{respond:s}:{}},reportError:ae(e,"destination",n,u,t)};if(void 0!==i.mock)return u.debug("mock",{event:a.event.name}),i.mock;const l=a.mapping,f=void 0!==l?.batch,p=f?a.mappingKey||"* *":Ot;if((f||void 0!==i.batch)&&t.pushBatch&&void 0===i.mock){if(t.batches=t.batches||{},!t.batches[p]){const o={key:p,entries:[],events:[],data:[]},r=qt(l?.batch),s=qt(i.batch),a=r.wait??s.wait??kt,c=r.size??s.size??bt,d=r.age??s.age??kt,g=Mt(t.env,i.env),h=(0,b.debounce)(async()=>{const o=t.batches[p],r=o.batched;if(0===r.entries.length)return;const s={key:r.key,entries:r.entries,events:r.events,data:r.data};r.entries=[],r.events=[],r.data=[];const a=s.entries[0],c={collector:e,logger:u,id:n,config:i,data:void 0,rule:o.isDefault?void 0:a.rule,ingest:a.ingest,env:{...g,...a.respond?{respond:a.respond}:{}},reportError:ae(e,"destination",n,u,t)};u.debug("push batch",{events:s.entries.length});const d=t.config.id||n,l=re(e,d),f=ne(t.config.breaker),h=(0,b.stepId)("destination",d),m=t=>{f&&oe(e.status.breakers,h,t,f.threshold,f.cooldown)},v=Date.now(),y=new Map;let w,k=!1;const S=n=>{const o=t.dlq=t.dlq||[],r={max:t.config.dlqMax??100};let s=0;for(const e of n)s+=Y(o,e,r).dropped;if(s>0){const t=se(e.status,(0,b.stepId)("destination",d),"dlq",s);Z(o,u,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:d,cap:r.max,droppedCount:t})}else o.length<r.max&&ee(o);l.failed+=n.length,l.dlqSize=o.length,e.status.failed+=n.length};let E=s.entries.length;const O=Se(i.timeout),q=await(0,b.tryCatchAsync)((o,r)=>Oe(Promise.resolve((0,b.useHooks)(t.pushBatch,"DestinationPushBatch",e.hooks,e.logger)(o,r)),O,`Destination "${n}" batch delivery timed out after ${O}ms`),e=>{E=0,k=!0,w=e,S(s.entries.map(t=>[t.event,e])),m("transport-failure"),u.error("Push batch failed",{error:e instanceof Error?e.message:String(e),entries:s.entries.length})})(s,c);if((0,b.isObject)(_=q)&&Array.isArray(_.failed)&&q.failed.length>0){const e=[];for(const t of q.failed){const n=s.entries[t.index];if(!n||y.has(t.index))continue;const o=t.error??new Error(`Push batch entry ${t.index} failed (no per-row error provided)`);y.set(t.index,o),e.push([n.event,o])}if(e.length>0){S(e),E=Math.max(0,s.entries.length-e.length);const t=new Map;for(const[,n]of e){const e=n instanceof Error&&"code"in n&&"string"==typeof n.code?n.code:n instanceof Error?n.name:"Error",o=t.get(e);o?o.count++:t.set(e,{code:e,count:1,message:n instanceof Error?n.message:String(n)})}u.error("Push batch partial failure",{failed:e.length,delivered:E,entries:s.entries.length,causes:[...t.values()]})}}var _;const I=Date.now();s.entries.forEach((t,o)=>{const r=k||y.has(o),i=$(t.event,t.ingest,e),a=B(e,(0,b.stepId)("destination",n),"destination",r?"error":"flush","string"==typeof t.event.id?t.event.id:"",I,i);if(a.batch={size:s.entries.length,index:o},a.durationMs=I-v,r){const e=k?w:y.get(o);a.error=W(e)}(0,b.emitStep)(e,a)}),u.debug("push batch done"),l.inFlightBatch=Math.max(0,(l.inFlightBatch??0)-s.entries.length),E>0&&(l.count+=E,l.lastAt=Date.now(),e.status.out+=E,m("success"))},{wait:a,size:c,age:d});t.batches[p]={batched:o,isDefault:!f,batchFn:()=>{h()},flush:async()=>{await h.flush()}}}const c=t.batches[p];c.batched.entries.push({event:a.event,ingest:r,respond:s,rule:l,data:a.data}),c.batched.events.push(a.event),(0,b.isDefined)(a.data)&&c.batched.data.push(a.data);const d="string"==typeof a.event.id?a.event.id:"",g=$(o,r,e),h=Date.now(),m=B(e,(0,b.stepId)("destination",n),"destination","in",d,h,g);a.mappingKey&&(m.mappingKey=a.mappingKey),a.event.consent&&(m.consent={...a.event.consent}),m.inEvent=a.event,(0,b.emitStep)(e,m);const v=B(e,(0,b.stepId)("destination",n),"destination","out",d,h,g);a.mappingKey&&(v.mappingKey=a.mappingKey),v.outEvent=a.event,v.batch={size:c.batched.entries.length,index:c.batched.entries.length-1},(0,b.emitStep)(e,v);const y=t.config.id||n,w=re(e,y);return w.inFlightBatch=(w.inFlightBatch??0)+1,c.batchFn(),St}{let s;if(u.debug("push",{event:a.event.name}),("undefined"==typeof __WALKEROS_OBSERVE__||__WALKEROS_OBSERVE__)&&"trace"===e.observeLevel?.()&&Array.isArray(t.calls)&&t.calls.length>0){const e=function(e){const{simulation:t,...n}=e,o={},r=new WeakMap;for(const[e,t]of Object.entries(n))o[e]="function"==typeof t?t:V(t,r,1);const s=(0,E.observeEnv)(o,t);return{wrappedEnv:s.env,calls:s.calls,unresolved:s.unresolved}}({...d.env,simulation:t.calls});d.env=e.wrappedEnv,s=e.calls,e.unresolved.length>0&&(e.wrappedEnv[b.OBSERVE_ENV_KEY]={paths:e.unresolved,record:(t,n)=>e.calls.push({fn:t,args:n,ts:Date.now()})})}const c="string"==typeof a.event.id?a.event.id:"",l=$(o,r,e),f=Date.now(),p=B(e,(0,b.stepId)("destination",n),"destination","in",c,f,l);a.mappingKey&&(p.mappingKey=a.mappingKey),a.event.consent&&(p.consent={...a.event.consent}),p.inEvent=a.event,(0,b.emitStep)(e,p);try{const o=Se(i.timeout),r=await Oe(Promise.resolve((0,b.useHooks)(t.push,"DestinationPush",e.hooks,e.logger)(a.event,d)),o,`Destination "${n}" delivery timed out after ${o}ms`),p=Date.now(),g=B(e,(0,b.stepId)("destination",n),"destination","out",c,p,l);return g.durationMs=p-f,g.outEvent=a.event,U(g,s),(0,b.isDefined)(r)&&(g.meta={...g.meta,response:r}),a.mappingKey&&(g.mappingKey=a.mappingKey),(0,b.emitStep)(e,g),u.debug("push done"),r}catch(t){const o=Date.now(),r=B(e,(0,b.stepId)("destination",n),"destination","error",c,o,l);throw r.durationMs=o-f,r.error=W(t),U(r,s),a.mappingKey&&(r.mappingKey=a.mappingKey),(0,b.emitStep)(e,r),t}}}function Pt(e){return{ok:!e?.failed,...e}}function Dt(e){const{code:t,config:n={},env:o={},cache:r,state:s}=e,{config:i}=ce(e,"before"),{config:a}=ce({...e,config:i},"next"),c={...t.config,...n,...a};r&&(c.cache=r),void 0!==s&&void 0===c.state&&(c.state=s);const u=Mt(t.env,o);return{...t,config:c,env:u}}function Mt(e,t){return e||t?t?e&&(0,b.isObject)(e)&&(0,b.isObject)(t)?{...e,...t}:t:e:{}}async function Tt(e,t,n){const o=Object.entries(e).map(async([e,o])=>{const r=o.destroy;if(!r)return;const s=o.type||"unknown",i=n.scope(s),a={id:e,config:o.config,env:o.env??{},logger:i};let c;try{await Promise.race([r(a),new Promise((n,o)=>{c=setTimeout(()=>o(new Error(`${t} '${e}' destroy timed out`)),5e3)})])}catch(n){i.error(`${t} '${e}' destroy failed: ${n}`)}finally{c&&clearTimeout(c)}});await Promise.allSettled(o)}function Rt(e,t){e.stateVersion++,e.cellVersion[t]=e.stateVersion}async function zt(e,t,n){let o,r,s=!1;const i=[],a=Le(e);try{return await async function(){switch(t){case z.Config:(0,j.isObject)(n)&&((0,A.assign)(e.config,n,{shallow:!1,merge:!1}),r=n,s=!0);break;case z.Consent:if((0,j.isObject)(n)){const{update:t}=function(e,t){const n={};return Object.entries(t).forEach(([e,t])=>{n[e]=!!t}),e.consent=(0,y.assign)(e.consent,n),{update:n}}(e,n);Rt(e,z.Consent),r=t,s=!0}break;case z.Custom:(0,j.isObject)(n)&&(e.custom=(0,A.assign)(e.custom,n),Rt(e,z.Custom),r=n,s=!0);break;case z.Destination:(0,j.isObject)(n)&&"code"in n&&(0,j.isObject)(n.code)&&(o=await async function(e,t){const{code:n,config:o={},env:r={},before:s,next:i,cache:a,state:c}=t;if(!(0,b.isFunction)(n.push))return Pt({ok:!1,failed:{invalid:{type:"invalid",error:"Destination code must have a push method"}}});const u={...n.config,...o||{init:!1}};let d=s?{...u,before:s}:{...u};i&&(d={...d,next:i}),a&&(d={...d,cache:a}),void 0!==c&&void 0===d.state&&(d={...d,state:c});let l=d.id;if(!l)do{l=(0,b.getId)(5,"abcdefghijklmnopqrstuvwxyz")}while(e.destinations[l]||e.pending.destinations[l]);if(N(e,(0,b.stepId)("destination",l),d.state),d.require?.length){e.pending.destinations[l]=t,await xe(e);const n=e.destinations[l];return n?It(e,void 0,{},{[l]:n}):Pt({ok:!0})}const f={...n,config:d,env:Mt(n.env,r)};return e.destinations[l]=f,!1!==f.config.queue&&(f.queuePush=[...e.queue]),await mt(e,f,l),It(e,void 0,{},{[l]:f})}(e,n));break;case z.Globals:(0,j.isObject)(n)&&(e.globals=(0,A.assign)(e.globals,n),Rt(e,z.Globals),r=n,s=!0);break;case z.Hook:if((0,j.isObject)(n)&&(0,A.isString)(n.name)&&(0,A.isFunction)(n.fn)){const{name:t,fn:o}=n;e.hooks[t]=o,r=n,s=!0}break;case z.On:if((0,j.isObject)(n)&&(0,A.isString)(n.type)){const{type:t,rules:o}=n;await async function(e,t,n){if(!Ae(e))return void Ce();const o=e.on,r=o[t]||[],s=(0,O.isArray)(n)?n:[n];s.forEach(e=>{r.push(e)}),o[t]=r,ut(e,t,s)}(e,t,o)}break;case z.Ready:s=!0;break;case z.Run:o=await async function(e,t,n){e.allowed=!0,e.timing=Date.now(),e.trace=(0,A.getTraceId)(),e.count=0,t&&(t.consent&&(e.consent=(0,A.assign)(e.consent,t.consent),Rt(e,z.Consent)),t.user&&(e.user=(0,A.assign)(e.user,t.user),Rt(e,z.User)),t.globals&&(e.globals=(0,A.assign)(e.config.globalsStatic||{},t.globals),Rt(e,z.Globals)),t.custom&&(e.custom=(0,A.assign)(e.custom,t.custom),Rt(e,z.Custom))),Object.values(e.destinations).forEach(e=>{e.queuePush=[]}),e.queue=[],e.round++,await xe(e);const o=await async function(e){if(!Ae(e))return Ce(),[];const t=[];for(const[n,o]of Object.entries(e.destinations)){if(!o.on)continue;const r=async()=>{for(const t of De)Re(e,t)&&await ht(e,o,n,t,dt(e,t))};t.push(yt(n,o,r()))}for(const t of De){if(!Re(e,t))continue;const n=dt(e,t);ut(e,t,e.on[t]||[]),await Promise.all(Object.entries(e.sources).filter(([,e])=>_e(e)).map(([o,r])=>lt(e,r,o,t,n)))}return t}(e);let r=!0;const s={};if(e.preRunQueue.length){const t=e.preRunQueue.splice(0);e.logger.debug("replaying pre-run events",{count:t.length});for(const{event:n,options:o}of t){const t=await e.push(n,o);!1===t.ok&&(r=!1),t.failed&&Object.assign(s,t.failed)}}_t(o);const i=await It(e);if(n.push(...o),r)return i;const a={...i.failed??{},...s};return{...i,ok:!1,...Object.keys(a).length>0?{failed:a}:{}}}(e,n,i),s=!0;break;case z.Session:s=!0;break;case z.Shutdown:e.hasShutdown||(e.hasShutdown=!0,await async function(e){const t=e.logger;await Tt(e.sources,"source",t),await async function(e,t){const n=Object.entries(e).flatMap(([e,n])=>{const o=n.batches;if(!o)return[];const r=t.scope(n.type||"destination");return Object.values(o).map(async t=>{let n;try{await Promise.race([t.flush(),new Promise((t,o)=>{n=setTimeout(()=>o(new Error(`destination '${e}' batch flush timed out`)),5e3)})])}catch(t){r.error(`destination '${e}' batch flush failed: ${t}`)}finally{n&&clearTimeout(n)}})});await Promise.allSettled(n)}(e.destinations,t),await Tt(e.destinations,"destination",t),await Tt(e.transformers,"transformer",t),await Tt(e.stores,"store",t)}(e));break;case z.User:(0,j.isObject)(n)&&((0,A.assign)(e.user,n,{shallow:!1}),Rt(e,z.User),r=n,s=!0);break;default:return e.logger.warn("unknown command",{command:t}),Pt({ok:!1})}if(s){const n=await async function(e,t,n,o){if(!Ae(e))return Ce(),{ok:!0,deliveries:[]};e.seenEvents.add(String(t));let r=n||[];n||(r=e.on[t]||[]);const s=dt(e,t,o),i=[];for(const[n,o]of Object.entries(e.sources)){if(o.config.require?.length){const e=o.config.require.indexOf(t);-1!==e&&o.config.require.splice(e,1)}o.on&&(_e(o)?i.push(lt(e,o,n,t,s)):(o.queueOn=o.queueOn||[],o.queueOn.push({type:t,data:s})))}const a=[];for(const[n,o]of Object.entries(e.destinations))o.on&&a.push(yt(n,o,ht(e,o,n,t,s)));let c=!1;i.length&&(c=(await Promise.all(i)).some(Boolean));for(const[t,n]of Object.entries(e.sources))_e(n)&&n.queueOn?.length&&await qe(e,n,t);const u=Object.values(e.sources).some(e=>!_e(e)&&e.config.require?.length);return(Object.keys(e.pending.destinations).length>0||u)&&await xe(e),ut(e,t,r,o),{ok:!c,deliveries:a}}(e,t,void 0,r);i.push(...n.deliveries),_t(n.deliveries);const s=function(e,t){if(!t.length)return e;const n={...e.done??{}},o={...e.queued??{}},r={...e.failed??{}};for(const e of t){for(const[t,r]of Object.entries(e.done??{}))n[t]=r,delete o[t];for(const[t,n]of Object.entries(e.failed??{}))r[t]=n,delete o[t];Object.assign(o,e.queued??{})}const s={...e,ok:e.ok&&t.every(e=>e.ok)};return delete s.done,delete s.queued,delete s.failed,Object.keys(n).length&&(s.done=n),Object.keys(o).length&&(s.queued=o),Object.keys(r).length&&(s.failed=r),s}(await It(e),await async function(e,t){return(await Promise.all(t.map(async({id:t,destination:n,done:o,drain:r})=>{if(await o,r&&e.allowed&&!Ye(n)&&n.queuePush?.length&&e.destinations[t]===n)return It(e,void 0,{},{[t]:n})}))).filter(b.isDefined)}(e,i));if(o&&!1===o.ok){const e={...s.failed??{},...o.failed??{}};o={...s,ok:!1,...Object.keys(e).length>0?{failed:e}:{}}}else o=s}return o||Pt({ok:!0})}()}finally{a()}}function $t(e,t){return{timing:Math.round((Date.now()-e.timing)/10)/100,source:{type:"collector",schema:"4"},...t}}function Bt(e,t,n){return Kt(e,t,n,{globals:e.globals,user:e.user,consent:e.consent})}function Wt(e,t,n){return Kt(e,$t(e,t),n,{globals:{},user:{},consent:{}})}function Kt(e,t,n,o){const r=t.name;if("string"!=typeof r)throw new A.InvalidEventError(void 0===r?"Event name is required":"Event name is invalid");if(!r)throw new A.InvalidEventError("Event name is required");const[s,i]=r.split(" ");if(!s||!i)throw new A.InvalidEventError("Event name is invalid");const{timestamp:a=Date.now(),name:c=`${s} ${i}`,data:u={},context:d={},globals:l={},custom:f={},user:p=o.user,nested:g=[],consent:h=o.consent,id:m=(0,A.getSpanId)(),trigger:v="",entity:y=s,action:w=i,timing:b=0,source:k={type:"collector",schema:"4"}}=t,S=k??{type:"collector",schema:"4"},E=S.count??(e.count+=1),O=S.trace??n?._meta.trace??e.trace,q={...S,count:E};void 0!==O&&(q.trace=O);const _=e.name??S.platform??"default",I=e.release??"4.7.2";return q.release={...S.release,[_]:I},{name:c,data:u,context:d,globals:(0,A.assign)(o.globals,l),custom:f,user:p,nested:g,consent:h,id:m,trigger:v,entity:y,action:w,timestamp:a,timing:b,source:q}}var Lt="collector.next";function Ht(e,t){const n=(0,D.useHooks)(async(n,o={})=>await(0,D.tryCatchAsync)(async()=>{if(!e.allowed){const t=J(e.config.queueMax),r=Y(e.preRunQueue,{event:n,options:o},{max:t});if(r.dropped>0){const n=se(e.status,"collector.preRun","queue",r.dropped);Z(e.preRunQueue,e.logger,"collector.preRunQueue overflow; oldest events dropped",{buffer:"queue",cap:t,droppedCount:n})}else e.preRunQueue.length<t&&ee(e.preRunQueue);return e.logger.debug("event held until run",{name:n.name,dropped:r.dropped}),Pt({ok:!0})}const r=Date.now(),{id:s,ingest:i,respond:a,mapping:c,preChain:u,include:d,exclude:l}=o;let f=a,p=n;const g=d||l?function(e,t,n){let o=e;return t&&(o=Object.fromEntries(Object.entries(o).filter(([e])=>t.includes(e)))),n&&(o=Object.fromEntries(Object.entries(o).filter(([e])=>!n.includes(e)))),o}(e.destinations,d,l):void 0;let h=i??(0,D.createIngest)(s||"unknown");if(c){const t=await(0,D.processEventMapping)(p,c,e);if(t.ignore)return Pt({ok:!0});if(c.consent){const n=t.event.consent;if(!(0,D.getGrantedConsent)(c.consent,e.consent,n)){const o=s?`source.${s}`:"collector.push";return e.logger.debug("Event dropped by source consent",{at:o,required:c.consent}),K(e,t.event,h,{reason:"consent",at:o,required:c.consent,consent:{...e.consent,...n}}),Pt({ok:!0,dropped:!0})}}p=t.event}if(void 0!==u){const n=s?`source.${s}.next`:void 0,o=await we(e,e.transformers||{},u,p,h,f,n);if(0===o.copies.length)return e.logger.debug("Event dropped by transformer chain"+(o.droppedBy?` (${o.droppedBy})`:"")),K(e,p,h,{reason:"dropped",by:o.droppedBy,at:n??"collector.push.preChain"}),Pt({ok:!0,dropped:!0});if(o.stopped)return o.respond&&(f=o.respond),Pt({ok:!0});if(o.respond&&(f=o.respond),o.copies.length>1){const n=await Promise.all(o.copies.map(async n=>{const o=Bt(e,t(n.event),n.ingest);return It(e,o,{id:s,ingest:n.ingest,respond:f},g)}));if(s){e.status.sources[s]||(e.status.sources[s]={count:0,duration:0});const t=e.status.sources[s];t.count+=o.copies.length,t.lastAt=Date.now(),t.duration+=Date.now()-r}return n[0]??Pt({ok:!0})}p=o.copies[0].event,h=o.copies[0].ingest}const m=function(e,t,n){return Bt(e,$t(e,t),n)}(e,p,h),v=await It(e,m,{id:s,ingest:h,respond:f},g);if(s){e.status.sources[s]||(e.status.sources[s]={count:0,duration:0});const t=e.status.sources[s];t.count++,t.lastAt=Date.now(),t.duration+=Date.now()-r}return v},t=>{if(t instanceof D.FatalError)throw t;if(t instanceof D.InvalidEventError){const n=o.id;if(n){e.status.sources[n]||(e.status.sources[n]={count:0,duration:0});const t=e.status.sources[n];t.rejected=(t.rejected??0)+1}return e.logger.warn("invalid event rejected",{error:t.message}),Pt({ok:!1,invalid:!0,error:t.message})}return e.status.failed++,e.logger.error("push failed",{...ie(t),event:n.name}),Pt({ok:!1})})(),"Push",e.hooks,e.logger);return async(t,o)=>{const r="string"==typeof t.id&&""!==t.id?t:{...t,id:(0,D.getSpanId)()},s="string"==typeof r.id?r.id:"",i=$(r,o?.ingest,e),a=Date.now(),c=B(e,"collector.push","collector","in",s,a,i);c.inEvent=r,(0,D.emitStep)(e,c);try{const t=await n(r,o),c=Date.now(),u=B(e,"collector.push","collector","out",s,c,i);return u.durationMs=c-a,u.outEvent=t,(0,D.emitStep)(e,u),t}catch(t){const n=Date.now(),o=B(e,"collector.push","collector","error",s,n,i);throw o.durationMs=n-a,o.error=W(t),(0,D.emitStep)(e,o),t}}}function Gt(e={}){const t=e.maxEntries??1e4,n=e.lowWaterMark??.8,o=e.sweepIntervalMs??6e4,r=Math.floor(t*n),s=new Map,i={hits:0,misses:0,populates:0,writes:0,deletes:0,evictions_entries:0,evictions_ttl:0};let a;return o>0&&(a=setInterval(function(){const e=Date.now();let t=0;for(const[n,o]of s)void 0!==o.expires&&o.expires<=e&&(s.delete(n),t++);i.evictions_ttl+=t},o),a&&"function"==typeof a.unref&&a.unref()),{type:"memory",config:{},get(e){const t=s.get(e);if(t)return void 0!==t.expires&&t.expires<=Date.now()?(s.delete(e),i.evictions_ttl++,void i.misses++):(s.delete(e),s.set(e,t),i.hits++,t.value);i.misses++},set(e,n,o){const a=!s.has(e);a||s.delete(e),s.set(e,{value:n,expires:void 0!==o?Date.now()+o:void 0}),i.writes++,a&&i.populates++,s.size>t&&function(){if(s.size<=t)return;const e=s.size-r;let n=0;for(const t of s.keys()){if(n>=e)break;s.delete(t),n++}i.evictions_entries+=n}()},delete(e){s.delete(e)&&i.deletes++},get counters(){return{...i}},destroy(){void 0!==a&&(clearInterval(a),a=void 0),s.clear()}}}function Nt(e,t){const{cacheConfig:n,cacheStore:o,namespace:r,logger:s,storeId:i,collector:a}=t,c=(e,t)=>{if(!a)return;const n=B(a,`store.${i}`,"store","in","");n.meta={op:"cache",cached:"hit"===t,status:t,key:e},(0,R.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,R.compileMatcher)(e.match):()=>!0,ttl:e.ttl})),l=e=>`${r}:${e}`;function f(e,t){const n=void 0===t?{key:e}:{key:e,value:t};return d.find(e=>e.match(n))}const p=new Map;return{type:e.type,config:e.config,setup:e.setup,get counters(){return{...u}},async get(t){const n=l(t),r=await o.get(n),s=(0,R.readCacheEnvelope)(r);if(void 0!==s){if(!("expired"in s))return u.hits++,c(t,"hit"),s.value;try{await o.delete(n)}catch(e){g("delete",t,e)}}const i=p.get(n);if(i)return u.inflight_dedups++,c(t,"hit"),i;u.misses++,c(t,"miss");const a=(async()=>{try{const r=await e.get(t);if(void 0===r)return;const s=f(t,r);if(s)try{const e=1e3*s.ttl;await o.set(n,(0,R.wrapCacheEnvelope)(r,e),e),u.populates++}catch(e){g("set",t,e)}return r}finally{p.delete(n)}})();return p.set(n,a),a},async set(t,n,r){u.writes++,await e.set(t,n,r);const s=f(t,n);if(s)try{const e=1e3*s.ttl;await o.set(l(t),(0,R.wrapCacheEnvelope)(n,e),e)}catch(e){g("set",t,e)}},async delete(t){u.deletes++,await e.delete(t);try{await o.delete(l(t))}catch(e){g("delete",t,e)}}};function g(e,t,n){const o=`store-cache(${i}): cache ${e} failed for "${t}"; backing succeeded, continuing`;s?s.warn(o,ie(n)):console.warn(o,n)}}function Vt(e,t,n){const o=`store.${n}`,r=(0,T.useHooks)(t.get,"StoreGet",e.hooks,e.logger),s=(0,T.useHooks)(t.set,"StoreSet",e.hooks,e.logger),i=(0,T.useHooks)(t.delete,"StoreDelete",e.hooks,e.logger);t.get=async t=>{const n=Date.now(),s=B(e,o,"store","in","",n);s.meta={op:"get",key:t},(0,T.emitStep)(e,s);try{const s=await r(t),i=Date.now(),a=B(e,o,"store","out","",i);return a.durationMs=i-n,a.meta={op:"get",key:t},(0,T.emitStep)(e,a),s}catch(r){const s=Date.now(),i=B(e,o,"store","error","",s);throw i.durationMs=s-n,i.meta={op:"get",key:t},i.error=W(r),(0,T.emitStep)(e,i),r}},t.set=async(t,n,r)=>{const i=Date.now(),a=B(e,o,"store","in","",i);a.meta={op:"set",key:t},(0,T.emitStep)(e,a);try{await s(t,n,r);const a=Date.now(),c=B(e,o,"store","out","",a);c.durationMs=a-i,c.meta={op:"set",key:t},(0,T.emitStep)(e,c)}catch(n){const r=Date.now(),s=B(e,o,"store","error","",r);throw s.durationMs=r-i,s.meta={op:"set",key:t},s.error=W(n),(0,T.emitStep)(e,s),n}},t.delete=async t=>{const n=Date.now(),r=B(e,o,"store","in","",n);r.meta={op:"delete",key:t},(0,T.emitStep)(e,r);try{await i(t);const r=Date.now(),s=B(e,o,"store","out","",r);s.durationMs=r-n,s.meta={op:"delete",key:t},(0,T.emitStep)(e,s)}catch(r){const s=Date.now(),i=B(e,o,"store","error","",s);throw i.durationMs=s-n,i.meta={op:"delete",key:t},i.error=W(r),(0,T.emitStep)(e,i),r}}}async function Qt(e){const t=(0,P.assign)({globalsStatic:{},sessionStatic:{},run:!0,queueMax:1e3},e,{merge:!1,extend:!1}),n={level:e.logger?.level,handler:e.logger?.handler},o=(0,P.createLogger)(n),r={...t.globalsStatic,...e.globals},s={allowed:!1,config:t,consent:e.consent||{},custom:e.custom||{},destinations:{},transformers:{},stores:{},globals:r,hooks:e.hooks||{},observers:new Set,logger:o,on:{},queue:[],preRunQueue:[],round:0,count:0,stateVersion:0,cellVersion:{},delivery:new WeakMap,session:void 0,status:{startedAt:Date.now(),in:0,out:0,failed:0,sources:{},destinations:{},dropped:{},connectionErrors:{},breakers:{}},timing:Date.now(),user:e.user||{},sources:{},pending:{destinations:{}},hasShutdown:!1,seenEvents:new Set,push:void 0,command:void 0,elb:void 0};var i,a;void 0!==e.name&&(s.name=e.name),void 0!==e.release&&(s.release=e.release),void 0!==e.next&&(t.next=e.next),s.push=Ht(s,e=>$t(s,e)),s.command=(i=s,a=zt,(0,M.useHooks)(async(e,t,n)=>await(0,M.tryCatchAsync)(async()=>await a(i,e,t,n),t=>{if(t instanceof M.FatalError)throw t;return i.status.failed++,i.logger.error("command failed",{...ie(t),command:e}),Pt({ok:!1})})(),"Command",i.hooks,i.logger)),s.elb=function(e){return async(t,n,o,r,s)=>{if("string"==typeof t&&t.startsWith("walker ")){const o=t.replace("walker ","");return e.command(o,n)}let i;if("string"==typeof t)i={name:t},n&&"object"==typeof n&&!Array.isArray(n)&&(i.data=n);else{if(!t||"object"!=typeof t||Array.isArray(t))return Pt({ok:!1});i={...t},n&&"object"==typeof n&&!Array.isArray(n)&&(i.data={...i.data||{},...n})}return o&&"object"==typeof o&&(i.context=o),r&&Array.isArray(r)&&(i.nested=r),s&&"object"==typeof s&&(i.custom=s),e.push(i)}}(s);const c=e.stores||{};return"undefined"==typeof __WALKEROS_STORES__||__WALKEROS_STORES__?(s.stores=await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t)){const{code:t,config:s={},env:i={}}=r,a=e.logger.scope("store").scope(o),c={collector:e,logger:a,id:o,config:s,env:i,reportError:ae(e,"store",o,a)},u=await t(c);n[o]=u}const o=t,r=function(e){const t={};for(const n of Object.keys(e))t[n]="WHITE";const n=[],o=[];function r(s){const i=t[s];if("BLACK"===i)return;if("GRAY"===i){const e=o.indexOf(s),t=o.slice(-1===e?0:e).concat(s).join(" -> ");throw new Error(`Cycle in cache.store chain: ${t}`)}t[s]="GRAY",o.push(s);const a=e[s].cache?.store;if(void 0!==a){if(!(a in e))throw new Error(`Store "${s}" cache.store references "${a}", which is not declared in flow.stores`);r(a)}o.pop(),t[s]="BLACK",n.push(s)}for(const n of Object.keys(e))"WHITE"===t[n]&&r(n);return n}(o);for(const t of r){const r=o[t].cache;if(!r)continue;let s,i;void 0!==r.store?(s=n[r.store],i=r.store):(n.__cache||(n.__cache=Gt()),s=n.__cache,i="__cache");const a=r.namespace??t;e.logger.scope("store-cache").scope(t).info(`store "${t}" caches with namespace "${a}:" via ${i}`),n[t]=Nt(n[t],{storeId:t,cacheConfig:r,cacheStore:s,namespace:a,logger:e.logger.scope("store-cache").scope(t),collector:e})}for(const[t,o]of Object.entries(n))"__cache"!==t&&Vt(e,o,t);return n}(s,c),function(e,t,n){const o=new Map;for(const[n,r]of Object.entries(e))t[n]&&o.set(r,t[n]);if(0!==o.size)for(const e of[n.transformers,n.destinations,n.sources])if(e)for(const t of Object.values(e))r(t.env);function r(e){if(e)for(const[t,n]of Object.entries(e))if("object"==typeof n&&null!==n){const r=o.get(n);r&&(e[t]=r)}}}(c,s.stores,e)):Object.keys(c).length>0&&o.warn("stores: not in this build, config ignored"),s.stores.__cache||(s.stores.__cache=Gt()),s.destinations=await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t))N(e,(0,b.stepId)("destination",o),r.config?.state??r.code.config?.state??r.state),r.config?.require?.length?e.pending.destinations[o]=r:n[o]=Dt(r);return n}(s,e.destinations||{}),s.transformers=await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t)){const{code:t,env:s={}}=r;if("undefined"==typeof __WALKEROS_VALIDATE__||__WALKEROS_VALIDATE__){const t=(0,x.validateStepEntry)(r,"Transformer");if(!t.ok){e.logger.warn(`Transformer ${o} invalid (${t.code}): ${t.reason}. Skipping.`);continue}}const{config:i}=ce(r,"before"),{config:a}=ce({...r,config:i},"next"),c=Object.keys(s).length>0?{...a,env:s}:a,{cache:u}=r,d=u?{...c,cache:u}:c,l=r.config?.state??r.state;N(e,(0,x.stepId)("transformer",o),l);const f=void 0!==l&&void 0===d.state?{...d,state:l}:d,p=e.logger.scope("transformer").scope(o),g={collector:e,logger:p,id:o,ingest:(0,x.createIngest)(o),config:f,env:s,reportError:ae(e,"transformer",o,p)},h=(0,x.getTransformerMapping)(r);for(const t of(0,x.getTransformerMappingWarnings)(r))e.logger.warn(`Transformer ${o}: ${t}`);const m=t??(e=>h?{type:"pass",config:e.config,push:async t=>{const n=await(0,x.processEventMapping)(t,h,e.collector);return!n.ignore&&{event:n.event}}}:{type:"pass",config:e.config,push:e=>({event:e})}),v=await m(g);void 0!==r.before&&void 0===v.config?.before&&(v.config={...v.config??{},before:r.before}),void 0!==r.next&&void 0===v.config?.next&&(v.config={...v.config??{},next:r.next}),void 0!==l&&void 0===v.config?.state&&(v.config={...v.config??{},state:l}),n[o]=v}return n}(s,e.transformers||{}),s}var Ft=globalThis;function Ut(e){try{const t=Ft.window;if(!t)return;t.localStorage.getItem(C.OBSERVE_STORAGE_KEY)===e&&t.localStorage.removeItem(C.OBSERVE_STORAGE_KEY)}catch{}}function Jt(e,t){return void 0===t?e:n=>e({...n,release:t})}async function Yt(e){const t=e??{},n=await Qt(t);if(t.observers)for(const e of t.observers)n.observers.add(e);"undefined"==typeof __WALKEROS_OBSERVE__||__WALKEROS_OBSERVE__?function(e,t){const n=t.observe;if(!n)return;const o=e.name??"default";if("binding"in n){const t=function(){const e=Ft.window,t=Ft.URLSearchParams;if(!e||!t)return null;try{const n=new t(e.location.search.replace(/^\?/,"")).getAll(C.OBSERVE_STORAGE_KEY);return n.length>0?n[n.length-1]??null:null}catch{return null}}(),r=t??function(){try{return Ft.window?.localStorage.getItem(C.OBSERVE_STORAGE_KEY)??null}catch{return null}}();if(!r)return;const s=(0,C.parseObserveCredential)(r);if(!s)return void(null===t?(e.logger.warn("observe: malformed stored credential cleared"),Ut(r)):e.logger.warn("observe: malformed credential ignored"));if(s.pb!==n.binding)return void e.logger.warn("observe: credential binding mismatch, credential ignored");let i;!function(e){try{Ft.window?.localStorage.setItem(C.OBSERVE_STORAGE_KEY,e)}catch{}}(r),null!==t&&function(){const e=Ft.window,t=Ft.URLSearchParams;if(e&&t)try{const n=e.location.href,o=n.indexOf("#"),r=o>=0?n.slice(o):"",s=o>=0?n.slice(0,o):n,i=s.indexOf("?"),a=i>=0?s.slice(0,i):s,c=new t(i>=0?s.slice(i+1):"");c.delete(C.OBSERVE_STORAGE_KEY);const u=c.toString();e.history.replaceState({},"",`${a}${u?`?${u}`:""}${r}`)}catch{}}();const a=(0,C.createBatchedPoster)({url:`${n.url}/ingest/${s.ses}`,token:s.secret,headers:{"X-Walkeros-Binding":n.binding},onStatus:t=>{401===t&&(Ut(r),i&&e.observers.delete(i))}});i=(0,C.createTelemetryObserver)(function(e,t){return void 0===t?e:n=>e({...n,flowId:t})}(Jt(a,e.release),n.flowId),{flowId:n.flowId??o,...void 0!==n.level?{level:n.level}:{},...void 0!==n.sample?{sample:n.sample}:{}}),e.observers.add(i);const c=n.level;return void(void 0!==c&&(e.observeLevel=()=>c))}if("off"===n.level)return;const r=n.level;void 0!==r&&(e.observeLevel=()=>r),e.observers.add((0,C.createTelemetryObserver)(Jt((0,C.createBatchedPoster)({url:`${n.url}/ingest/${n.sessionId}`,token:n.token}),e.release),{flowId:o,level:n.level,sample:n.sample}))}(n,t):t.observe&&n.logger.warn("observe: not in this build, config ignored"),await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t)){const t=await Ie(e,o,r);if(!t)continue;const s=r.config?.require;t.config={...t.config,init:!1,...s?{require:[...s]}:{}},n[o]=t}Object.assign(e.sources,n);for(const t of Object.keys(n)){const n=e.sources[t];let o=!1;n.init&&await(0,I.tryCatchAsync)(n.init.bind(n),n=>{if(n instanceof I.FatalError)throw n;o=!0,e.status.failed++,e.logger.scope("source").error("source init failed",{sourceId:t,...ie(n)})})(),o||(n.config.init=!0,_e(n)&&await qe(e,n,t))}return await xe(e),n}(n,t.sources||{});const{consent:o,user:r,globals:s,custom:i}=t;o&&await n.command("consent",o),r&&await n.command("user",r),s&&await n.command("globals",s),i&&await n.command("custom",i),n.config.run&&await n.command("run");let a=n.elb;const c=Object.values(n.sources),u=c.find(e=>e.config.primary);return u?a=u.push:c.length>0&&(a=c[0].push),{collector:n,elb:a}}var Xt=async e=>{let t;return{get flow(){return t},trigger:()=>async n=>{if(!t){const n=await Yt(e);t={collector:n.collector,elb:n.elb}}const o=function(e){for(const t of Object.values(e.sources||{}))if("lambda"===t.type)return t}(t.collector);if(!o)throw new Error("Lambda source not found in collector");const r={awsRequestId:`test-${Date.now()}`},s=o.push,i=await s(n,r);let a;try{a=JSON.parse(i.body||"{}")}catch{a=i.body}const c={};if(i.headers)for(const[e,t]of Object.entries(i.headers))void 0!==t&&(c[e]=String(t));return{statusCode:i.statusCode,body:a,headers:c}}}};function Zt(e){return async t=>{const n={...t};if(n.body&&"string"==typeof n.body){const e=JSON.parse(n.body);e.name&&!e.event&&(n.body=JSON.stringify({...e,event:e.name,name:void 0}))}return e.push(n,{awsRequestId:"test-req"})}}var en={};s(en,{createTrigger:()=>mn,env:()=>tn,step:()=>dn});var tn={};s(tn,{moduleMockEnv:()=>cn,push:()=>an,simulation:()=>un});var nn=()=>{},on={error:nn,warn:nn,info:nn,debug:nn,throw:e=>{throw"string"==typeof e?new Error(e):e},json:nn,scope:()=>on},rn=()=>()=>Promise.resolve({ok:!0});function sn(){return{get push(){return rn()},get command(){return rn()},get elb(){return rn()},logger:on}}var an=Object.assign(sn(),{AWS:{SQSClient:class{constructor(e){this.config=e}config;async send(e){return function(e){if(!("input"in e))return!1;const{input:t}=e;return"object"==typeof t&&null!==t&&"WaitTimeSeconds"in t}(e)&&await new Promise(e=>setTimeout(e,100)),{$metadata:{},QueueUrl:"https://sqs.eu-central-1.amazonaws.com/000000000000/walkeros-events",Attributes:{QueueArn:"arn:aws:sqs:eu-central-1:000000000000:walkeros-events"},Messages:[]}}destroy(){}}}}),cn=sn(),un=["call:AWS.SQSClient.send"],dn={};s(dn,{decoderText:()=>pn,malformedJson:()=>gn,orderComplete:()=>fn,pageView:()=>ln});var ln={title:"Page view from SQS",description:"A standard SQS message body containing a walker elb event payload as JSON.",in:{MessageId:"m-1",Body:JSON.stringify({event:"page view",data:{title:"Documentation",url:"https://example.com/docs"}})},out:[["message.ack","m-1"]]},fn={title:"Order complete from SQS",description:"Order complete event flowing through the long-poll loop.",in:{MessageId:"m-2",Body:JSON.stringify({event:"order complete",data:{id:"ORD-500",total:199.99,currency:"EUR"}})},out:[["message.ack","m-2"]]},pn={title:"Text decoder",description:'When decoder is "text", the body string flows under data.payload.',in:{MessageId:"m-3",Body:"raw text payload"},out:[["message.ack","m-3"]]},gn={title:"Malformed JSON nacks",description:"Default decoder is JSON. A malformed body throws DecoderError; the source nacks (skips DeleteMessage) so the message redelivers.",in:{MessageId:"m-4",Body:"{not json"},out:[["message.nack","m-4"]]};function hn(e){if("object"!=typeof e||null===e)return!1;const t=e;return"sqs"===t.type&&"function"==typeof t.push}var mn=async e=>{let t;return{get flow(){return t},trigger:()=>async n=>{if(!t){const n=await Yt(e);t={collector:n.collector,elb:n.elb}}const o=function(e){for(const t of Object.values(e.sources??{}))if(hn(t))return t}(t.collector);if(!o)throw new Error("sqs source not registered in collector, ensure it is configured in sources");const r={MessageId:n.MessageId,Body:n.Body,ReceiptHandle:n.ReceiptHandle,Attributes:n.Attributes,MessageAttributes:n.MessageAttributes},s=await o.push(r),i=[];return s&&"object"==typeof s&&(s.acked&&i.push(["message.ack",n.MessageId]),s.nacked&&i.push(["message.nack",n.MessageId])),i}}},vn=require("@walkeros/core/dev"),yn=require("@walkeros/core/dev"),wn=require("@walkeros/core/dev"),bn=wn.z.enum(["GET","POST","PUT","PATCH","DELETE","OPTIONS","HEAD"]),kn=wn.z.union([wn.z.string(),wn.z.array(wn.z.string()),wn.z.literal("*")]),Sn=wn.z.object({origin:kn.describe("Allowed origins (* for all, URL string, or array of URLs)").optional(),methods:wn.z.array(bn).describe("Allowed HTTP methods").optional(),headers:wn.z.array(wn.z.string()).describe("Allowed request headers").optional(),credentials:wn.z.boolean().describe("Allow credentials (cookies, authorization headers)").optional(),maxAge:wn.z.number().int().positive().describe("Preflight cache duration in seconds").optional()}),En=yn.z.object({cors:yn.z.union([yn.z.boolean(),Sn]).describe("CORS configuration: false = disabled, true = allow all origins, object = custom configuration").default(!0),timeout:yn.z.number().int().positive().max(9e5).describe("Request timeout in milliseconds (max: 900000 for Lambda)").default(3e4),enablePixelTracking:yn.z.boolean().describe("Enable GET requests with 1x1 transparent GIF response for pixel tracking").default(!0),maxBatchSize:yn.z.number().int().min(1).describe("Maximum number of events accepted in a single batch request").default(100),healthPath:yn.z.string().describe("Health check endpoint path (e.g., /health)").default("/health")}),On=(0,vn.zodToSchema)(En),qn=require("@walkeros/core/dev"),_n=require("@walkeros/core/dev"),In=_n.z.object({queueName:_n.z.string().min(1).describe("SQS queue short name (like walkeros-events). Required for both setup and runtime poll."),region:_n.z.string().describe("AWS region (like eu-central-1). Default: eu-central-1.").optional(),queueUrl:_n.z.string().url().describe("Optional pre-resolved queue URL. When set, init skips the GetQueueUrl lookup.").optional(),client:_n.z.any().describe("Pre-configured AWS SQSClient instance. Bypasses construction when supplied.").optional(),config:_n.z.any().describe("AWS SDK SQSClientConfig (credentials, endpoint overrides, retries).").optional(),decoder:_n.z.enum(["json","text","raw"]).describe("Decoder for the message body. json (default) parses JSON, text forwards UTF-8, raw forwards a Buffer.").optional(),maxMessages:_n.z.number().int().min(1).max(10).describe("SQS receive batch size. Cap 10. Default: 10.").optional(),waitTimeSeconds:_n.z.number().int().min(0).max(20).describe("Long-poll duration in seconds. Cap 20. Default: 20.").optional(),visibilityTimeout:_n.z.number().int().nonnegative().describe("Per-receive visibility timeout override. Default: queue-configured value.").optional(),shutdownTimeoutMs:_n.z.number().int().positive().describe("Graceful shutdown timeout in milliseconds. Default: 30000. After this window, destroy() force-closes.").optional(),onPushError:_n.z.enum(["nack","ack"]).describe("Behavior when forwarding to the collector throws. nack (default) skips DeleteMessage so the message redelivers; ack drops it.").optional()}),xn=require("@walkeros/core/dev"),An=xn.z.record(xn.z.string(),xn.z.string()),jn=xn.z.object({region:xn.z.string().min(1).describe("AWS region.").optional(),fifoQueue:xn.z.boolean().describe("FIFO queue with content-based deduplication. Auto-appends .fifo suffix to the queue name.").optional(),visibilityTimeoutSeconds:xn.z.number().int().nonnegative().describe("Visibility timeout in seconds. Default: 30.").optional(),messageRetentionSeconds:xn.z.number().int().positive().describe("Message retention period in seconds. Default: 345600 (4 days).").optional(),maximumMessageSize:xn.z.number().int().min(1024).max(262144).describe("Max message size in bytes. Default: 262144 (256 KB).").optional(),kmsMasterKeyId:xn.z.string().describe("KMS key alias or ID for at-rest encryption.").optional(),deadLetterQueue:xn.z.object({arn:xn.z.string().describe("ARN of an existing DLQ. Mutually exclusive with create: true.").optional(),create:xn.z.boolean().describe("Create a sibling DLQ named <queueName>-dlq. Default: false.").optional(),maxReceiveCount:xn.z.number().int().min(1).max(1e3).describe("Max receive count before message goes to DLQ. Default: 5.").optional()}).describe("Optional dead-letter queue.").optional(),tags:An.describe("Tags applied to the queue (and inherited by an auto-created DLQ).").optional(),subscribeToSnsTopic:xn.z.object({topicArn:xn.z.string().min(1).describe("Topic ARN to subscribe to."),rawMessageDelivery:xn.z.boolean().describe("Deliver SNS messages without the SNS envelope.").optional(),filterPolicy:xn.z.record(xn.z.string(),xn.z.unknown()).describe("SNS filter policy applied at subscription level.").optional()}).describe("Optional SNS topic subscription. Creates the subscription and the matching queue policy.").optional()}),Cn=(0,qn.zodToSchema)(In),Pn=(0,qn.zodToSchema)(jn),Dn={};s(Dn,{CorsOptionsSchema:()=>Sn,CorsOrigin:()=>kn,HttpMethod:()=>bn,SettingsSchema:()=>En,settings:()=>On,sqsSettings:()=>Cn,sqsSetup:()=>Pn});var Mn={sourceLambda:a,sourceSqs:en},Tn={sourceLambda:{settings:On},sourceSqs:{settings:Cn,setup:Pn}};//# sourceMappingURL=dev.js.map
1
+ "use strict";var e,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,o=Object.getOwnPropertyNames,r=Object.prototype.hasOwnProperty,s=(e,n)=>{for(var o in n)t(e,o,{get:n[o],enumerable:!0})},i={};s(i,{examples:()=>a,exportExamples:()=>Mn,exportSchemas:()=>Tn,schemas:()=>Dn,sqsExamples:()=>en}),module.exports=(e=i,((e,s,i,a)=>{if(s&&"object"==typeof s||"function"==typeof s)for(let c of o(s))r.call(e,c)||c===i||t(e,c,{get:()=>s[c],enumerable:!(a=n(s,c))||a.enumerable});return e})(t({},"__esModule",{value:!0}),e));var a={};s(a,{createTrigger:()=>Xt,env:()=>c,step:()=>p,trigger:()=>Zt});var c={};s(c,{push:()=>f});var u=()=>()=>Promise.resolve({ok:!0}),d=()=>{},l={error:d,warn:d,info:d,debug:d,throw:e=>{throw"string"==typeof e?new Error(e):e},json:d,scope:()=>l},f={get push(){return u()},get command(){return u()},get elb(){return u()},logger:l},p={};s(p,{apiGatewayV1Post:()=>h,lambdaGet:()=>m,lambdaPost:()=>g,lambdaPostForwardsSource:()=>v});var g={title:"Lambda POST",description:"An API Gateway v2 HTTP POST with a JSON body is converted into a walker elb event.",trigger:{type:"POST"},in:{version:"2.0",requestContext:{http:{method:"POST",path:"/collect"},requestId:"req-123"},body:JSON.stringify({name:"page view",data:{title:"Home"}}),isBase64Encoded:!1},out:[["elb",{name:"page view",data:{title:"Home"}}]]},h={title:"API Gateway v1 POST",description:"A REST API Gateway v1 POST request with a JSON body is converted into a walker elb event.",trigger:{type:"POST"},in:{httpMethod:"POST",path:"/collect",requestContext:{requestId:"req-789",identity:{sourceIp:"203.0.113.42"}},queryStringParameters:null,body:JSON.stringify({name:"page view",data:{title:"Home"}}),isBase64Encoded:!1},out:[["elb",{name:"page view",data:{title:"Home"}}]]},m={title:"Lambda GET",description:"An API Gateway v2 HTTP GET with query parameters is parsed into an elb event payload.",trigger:{type:"GET"},in:{version:"2.0",requestContext:{http:{method:"GET",path:"/collect"},requestId:"req-456"},rawQueryString:"e=page+view&d=%7B%22title%22%3A%22Home%22%7D",isBase64Encoded:!1},out:[["elb",{e:"page view",d:'{"title":"Home"}'}]]},v={title:"Lambda POST with provenance",description:"A POST body carrying a source map is forwarded in full, so release and trace provenance survive the crossing.",trigger:{type:"POST"},in:{version:"2.0",requestContext:{http:{method:"POST",path:"/collect"},requestId:"req-321"},body:JSON.stringify({name:"page view",data:{title:"Home"},source:{release:{web:"r1"}}}),isBase64Encoded:!1},out:[["elb",{name:"page view",data:{title:"Home"},source:{release:{web:"r1"}}}]]},y=require("@walkeros/core"),w=require("@walkeros/core"),b=require("@walkeros/core"),k=require("@walkeros/core"),S=require("@walkeros/core"),E=require("@walkeros/core"),O=require("@walkeros/core"),q=require("@walkeros/core"),_=require("@walkeros/core"),I=require("@walkeros/core"),x=require("@walkeros/core"),A=require("@walkeros/core"),j=require("@walkeros/core"),C=require("@walkeros/core"),P=require("@walkeros/core"),D=require("@walkeros/core"),M=require("@walkeros/core"),T=require("@walkeros/core"),R=require("@walkeros/core"),z={Action:"action",Actions:"actions",Config:"config",Consent:"consent",Context:"context",Custom:"custom",Destination:"destination",Elb:"elb",Globals:"globals",Hook:"hook",Init:"init",Link:"link",On:"on",Prefix:"data-elb",Ready:"ready",Run:"run",Scoped:"_",Session:"session",Shutdown:"shutdown",User:"user",Walker:"walker"};function $(e,t,n){return{traceId:e.source?.trace??t?._meta.trace??n.trace,sourceId:t?._meta.path[0],parentEventId:t?._meta.parentEventId}}function B(e,t,n,o,r,s=Date.now(),i){const a={flowId:e.name??"default",stepId:t,stepType:n,phase:o,eventId:r,timestamp:new Date(s).toISOString(),elapsedMs:s-e.status.startedAt};return i?.traceId&&(a.traceId=i.traceId),i?.sourceId&&(a.sourceId=i.sourceId),i?.parentEventId&&(a.parentEventId=i.parentEventId),a}function W(e){return e instanceof Error?{name:e.name,message:e.message}:{message:String(e)}}function K(e,t,n,o){e.status.in++;const r=B(e,"collector.push","collector","skip","string"==typeof t.id?t.id:"",Date.now(),$(t,n,e));r.skipReason=o.reason,"consent"===o.reason?(r.consent={...o.consent},r.meta={at:o.at,required:{...o.required}}):r.meta={by:o.by??"route",at:o.at},(0,k.emitStep)(e,r)}function L(e,t){return e.storeId&&t.stores[e.storeId]?t.stores[e.storeId]:t.stores.__cache}function H(e){return("undefined"==typeof __WALKEROS_STATE__||__WALKEROS_STATE__)&&e?(0,S.compileState)(e):void 0}function G(e,t,n,o){return"undefined"==typeof __WALKEROS_STATE__||__WALKEROS_STATE__?(0,S.applyState)(t,t=>{return o=e,(n=t)?o.stores[n]:o.stores.__cache;var n,o},n,e,o):Promise.resolve(n)}function N(e,t,n){"undefined"==typeof __WALKEROS_STATE__||__WALKEROS_STATE__||void 0===n||e.logger.warn(`state: not in this build, ${t} state ignored`)}function V(e,t,n){if(null===e||"object"!=typeof e)return e;if(n>=8||!function(e){if(Array.isArray(e))return!0;const t=Object.getPrototypeOf(e);return t===Object.prototype||null===t}(e))return e;const o=t.get(e);if(void 0!==o)return o;if(Array.isArray(e)){const o=[];t.set(e,o);for(const r of e)o.push(V(r,t,n+1));return o}const r={};t.set(e,r);for(const[o,s]of Object.entries(e))r[o]="function"==typeof s?s:V(s,t,n+1);return r}function Q(e,t){try{return e[t]}catch{return"[unreadable]"}}function F(e){const t=new WeakSet,n=(e,o)=>{if(null===e)return null;if("function"==typeof e)return"[function]";if("string"==typeof e||"boolean"==typeof e)return e;if("number"==typeof e)return Number.isFinite(e)?e:null;if("bigint"==typeof e)return String(e);if("object"!=typeof e)return;const r=e;if(t.has(r))return"[circular]";if(o>=6)return"[truncated]";let s;t.add(r);try{if(Array.isArray(r))s=r.map(e=>n(e,o+1));else if(function(e){const t=Object.getPrototypeOf(e);return t===Object.prototype||null===t}(r)){const e={};for(const t of Object.keys(r))e[t]=n(Q(r,t),o+1);s=e}else s=function(e){try{return String(e)}catch{return"[object]"}}(r)}catch{s="[unreadable]"}return t.delete(r),s};return e.map(e=>n(e,0))}function U(e,t){("undefined"==typeof __WALKEROS_OBSERVE__||__WALKEROS_OBSERVE__)&&t&&t.length>0&&(e.calls=t.map(e=>({fn:e.fn,args:F(e.args),ts:e.ts})))}function J(e){if(void 0===e)throw new Error("Collector.Config.queueMax is undefined; defaults must be seeded by collector()");return e}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 r=[];for(;e.length>=n.max;)r.push(e.shift());return e.push(t),r.length>0&&o&&o(r),{appended:!0,dropped:r.length}}var X=new WeakMap;function Z(e,t,n,o){X.get(e)||(X.set(e,!0),t.warn(n,o))}function ee(e){X.delete(e)}var te=()=>Date.now();function ne(e){if(void 0!==e)return"number"==typeof e?{threshold:e,cooldown:3e4}:{threshold:e.threshold??5,cooldown:e.cooldown??3e4}}function oe(e,t,n,o,r){if("partial"===n)return;const s=((i=e)[a=t]||(i[a]={state:"closed",consecutiveFailures:0}),i[a]);var i,a;return"success"===n?(s.consecutiveFailures=0,s.state="closed",s.probing=!1,void(s.openUntil=void 0)):(s.consecutiveFailures+=1,"half-open"===s.state?(s.state="open",s.probing=!1,void(s.openUntil=te()+r)):void(s.consecutiveFailures>=o&&(s.state="open",s.probing=!1,s.openUntil=te()+r)))}function re(e,t){return e.status.destinations[t]||(e.status.destinations[t]={count:0,failed:0,duration:0,queuePushSize:0,dlqSize:0}),e.status.destinations[t]}function se(e,t,n,o){e.dropped[t]||(e.dropped[t]={});const r=e.dropped[t];return r[n]=(r[n]??0)+o,r[n]}function ie(e){const t={error:e instanceof Error?e.message:String(e)};if(e instanceof Error&&e.name&&"Error"!==e.name&&(t.name=e.name),"object"==typeof e&&null!==e&&"code"in e){const n=e;"number"!=typeof n.code&&"string"!=typeof n.code||(t.code=n.code)}return t}function ae(e,t,n,o,r){const s=(0,_.stepId)(t,n);return(t,i)=>{try{if(i)return r?function(e,t,n,o,r,s){const i=t.dlq=t.dlq||[],a={max:t.config.dlqMax??100},c=Y(i,[o,r],a);if(c.dropped>0){const t=se(e.status,(0,_.stepId)("destination",n),"dlq",c.dropped);Z(i,s,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:n,cap:a.max,droppedCount:t})}else i.length<a.max&&ee(i);const u=re(e,n);u.failed++,u.dlqSize=i.length,e.status.failed++;const d=ne(t.config.breaker);if(d){const o=t.config.id||n;oe(e.status.breakers,(0,_.stepId)("destination",o),"transport-failure",d.threshold,d.cooldown)}}(e,r,n,i,t,o):e.status.failed++,void o.error("report error",{...ie(t),event:i.name});e.status.connectionErrors[s]=(e.status.connectionErrors[s]??0)+1,o.error("connection error",ie(t))}catch{}}}function ce(e,t){const n=e.config||{},o=e[t];return void 0!==o?{config:{...n,[t]:o},chainValue:o}:{config:n,chainValue:void 0}}async function ue(e,t,n){if(t.init&&!t.config.init){const o=t.type||"unknown",r=e.logger.scope(`transformer:${o}`),s={collector:e,logger:r,id:n,ingest:(0,x.createIngest)(n),config:t.config,env:be(t.config.env),reportError:ae(e,"transformer",n,r)};r.debug("init");const i=await(0,x.useHooks)(t.init,"TransformerInit",e.hooks,e.logger)(s);if(!1===i)return!1;t.config={...i||t.config,env:i?.env||t.config.env,init:!0},r.debug("init done")}return!0}async function de(e,t,n,o,r,s){const i=t.type||"unknown",a=e.logger.scope(`transformer:${i}`),c={collector:e,logger:a,id:n,ingest:r,config:t.config,env:{...be(t.config.env),...s?{respond:s}:{}},reportError:ae(e,"transformer",n,a)};a.debug("push",{event:o.name});const u="string"==typeof o.id?o.id:"",d=$(o,r,e),l=Date.now(),f=B(e,(0,x.stepId)("transformer",n),"transformer","in",u,l,d);f.inEvent=o,(0,x.emitStep)(e,f);try{const r=await(0,x.useHooks)(t.push,"TransformerPush",e.hooks,e.logger)(o,c),s=Date.now(),i=B(e,(0,x.stepId)("transformer",n),"transformer","out",u,s,d);return i.durationMs=s-l,i.outEvent=r,(0,x.emitStep)(e,i),a.debug("push done"),r}catch(t){const o=Date.now(),r=B(e,(0,x.stepId)("transformer",n),"transformer","error",u,o,d);throw r.durationMs=o-l,r.error=W(t),(0,x.emitStep)(e,r),t}}function le(e){return"string"==typeof e.id?e.id:""}function fe(e,t){const n=le(e);return""!==n&&""===le(t)?{...t,id:n}:t}function pe(e,t,n,o){const r=(a=n,{...a,_meta:{...a._meta,path:[...a._meta.path]}}),s=(0,x.clone)(t),i=le(e);var a;if(""===i)return{event:s,ingest:r};r._meta.parentEventId=i;const c=le(s);return""!==c&&c!==i||(s.id=(0,x.deriveSpanId)(i,o)),{event:s,ingest:r}}function ge(e,t){return{copies:e,respond:t}}function he(e,t){if(void 0===t)return e.rest;const n=e.ownNext?e.rest.slice(1):e.rest;return[{route:t,ancestry:e.ancestry},...n]}async function me(e,t,n){const o=await Promise.all(t.map((t,n)=>(0,x.tryCatchAsync)(ve,t=>(e.collector.logger.scope("transformer:fork").error(`fork ${n} failed`,ie(t)),{copies:[]}))(e,t))),r=[];let s,i=n,a=o.length>0;return o.forEach((e,n)=>{void 0!==t[n].respond&&e.respond&&(i=e.respond),e.stopped||(a=!1),e.stopped||0===e.copies.length?void 0===s&&(s=e.droppedBy):r.push(...e.copies)}),0===r.length?{copies:r,respond:i,...a?{stopped:!0}:{},...void 0!==s?{droppedBy:s}:{}}:ge(r,i)}async function ve(e,t){const{ingest:n}=t;let{stack:o,event:r,respond:s}=t,i=t.resume;for(;;){let t,a;if(i)t=i.member,a=i,i=void 0;else{const i=(0,x.advanceChain)(o,(0,x.createMappingRoot)(n,r),e.transformers);if("done"===i.kind)return ge([{event:r,ingest:n}],s);if("stop"===i.kind)return{copies:[],respond:s,stopped:!0,...void 0!==i.owner?{droppedBy:i.owner}:{}};if("fork"===i.kind){const t=r;return me(e,i.branches.map((e,o)=>({stack:e,...pe(t,t,n,o),respond:void 0})),s)}const a=e.transformers[i.id];t={id:i.id,ancestry:i.ancestry,rest:i.rest,ownNext:!!a&&void 0!==a.config.next}}const c=await ye(e,t,r,n,s,a);if("halt"===c.kind)return c.result;if("fork"===c.kind)return me(e,c.copies,s);r=c.event,s=c.respond,o=c.stack}}async function ye(e,t,n,o,r,s){const{collector:i,transformers:a,chainContext:c}=e,u=t.id,d=a[u];let l=n,f=r;const p=(e=t.rest)=>({kind:"continue",event:fe(n,l),respond:f,stack:e}),g=e=>({kind:"halt",result:e});if(!d)return i.logger.warn(`Transformer not found: ${u}`),p();const h=d.config?.cache,m=h?(0,x.compileCache)(h):void 0,v=m?L(m,i):void 0;let y=s?.cacheMiss;if(!s){if(o._meta.path.length>256)return i.logger.error(`Max path length exceeded at ${u}`),g({copies:[],respond:f});if(o._meta.hops++,o._meta.path.push(u),!await(0,x.tryCatchAsync)(ue,e=>{if(e instanceof x.FatalError)throw e;return i.status.failed++,i.logger.scope(`transformer:${d.type||"unknown"}`).error("transformer init failed",{transformer:u,...ie(e)}),!1})(i,d,u))return g({copies:[],respond:f});if(c&&void 0!==d.config?.chainMocks?.[c]){const e=d.config.chainMocks[c];return i.logger.scope(`transformer:${d.type||"unknown"}`).debug("chainMock",{chain:c}),l=e,p()}if(void 0!==d.config?.mock)return i.logger.scope(`transformer:${d.type||"unknown"}`).debug("mock"),l=d.config.mock,p();if(d.config?.disabled)return p();if(m&&v){const e=await(0,x.checkCache)(m,v,(0,x.createMappingRoot)(o,l));if("HIT"===e?.status&&e.value)return l=e.value,m.stop?g({copies:[{event:fe(n,l),ingest:o}],respond:f,stopped:!0}):p();"MISS"===e?.status&&(y={key:e.key,ttl:e.rule.ttl})}if(void 0!==d.config.before){const e=await async function(e,t,n,o,r,s,i){const a=t[n],c=a?a.config.before:void 0,u=await we(e,t,c,o,r,s,i);return u.stopped&&0===u.copies.length&&!u.droppedBy?{...u,droppedBy:n}:u}(i,a,u,l,o,f,c),n=e.respond??f;if(0===e.copies.length||e.stopped)return g({...e,respond:n});f=n;const[r]=e.copies;if(e.copies.length>1||r.ingest!==o){const n={member:t,cacheMiss:y};return{kind:"fork",copies:e.copies.map(e=>({stack:t.rest,event:e.event,ingest:e.ingest,respond:void 0,resume:n}))}}l=r.event}}const w=H(d.config?.state),b=w?.filter(e=>"get"===e.mode),k=w?.filter(e=>"set"===e.mode),S=async e=>k&&0!==k.length?G(i,k,e,o):e;b&&b.length>0&&(l=await G(i,b,l,o));const E=await(0,x.tryCatchAsync)(de,e=>(i.status.failed++,i.logger.scope(`transformer:${d.type||"unknown"}`).error("Push failed",ie(e)),!1))(i,d,u,l,o,f);if(!1===E)return g({copies:[],respond:f,droppedBy:u});if(Array.isArray(E)&&1!==E.length){if(0===E.length)return g({copies:[],respond:f});const e=l,n=[];for(let r=0;r<E.length;r++){const s=E[r],i=await S(s.event||e);n.push({stack:he(t,s.next),...pe(e,i,o,r),respond:f})}return{kind:"fork",copies:n}}const O=Array.isArray(E)?E[0]:E;let q;return O&&"object"==typeof O&&(O.respond&&(f=O.respond),O.event&&(l=O.event),q=O.next),l=await S(l),y&&v&&(0,x.storeCache)(v,y.key,l,y.ttl),p(he(t,q))}async function we(e,t,n,o,r,s,i){const a=r??(0,x.createIngest)("string"==typeof n?n:"chain");return void 0===n?ge([{event:o,ingest:a}],s):(i&&(a._meta.chainPath=i),ve({collector:e,transformers:t,chainContext:i},{stack:(0,x.isChainContinuation)(n)?n:(0,x.startChain)(n),event:o,ingest:a,respond:s}))}function be(e){return e&&(0,x.isObject)(e)?e:{}}var ke=1e4;function Se(e){return"number"==typeof e&&e>0?e:ke}var Ee=class extends Error{constructor(e){super(e),this.name="DestinationTimeoutError"}};function Oe(e,t,n){let o;const r=new Promise((e,r)=>{o=setTimeout(()=>r(new Ee(n)),t)});return Promise.race([e,r]).finally(()=>{o&&clearTimeout(o)})}async function qe(e,t,n){if(!t.on||!t.queueOn?.length)return;const o=t.queueOn;t.queueOn=[];const r=n||t.config?.id||"unknown";for(const{type:n,data:s}of o){if(Te(n)&&!We(e,t,n))continue;const o=t.on;let i=!1;await(0,I.tryCatchAsync)(()=>Oe(Promise.resolve(o(n,s)),ke,`Source "${r}" on(${n}) did not settle within 10000ms`),t=>{if(t instanceof I.FatalError)throw t;t instanceof Ee?i=!0:e.status.failed++,e.logger.scope("source").error("source on flush failed",{sourceId:r,type:n,...ie(t)})})(),Te(n)&&!i&&Be(e,t,n)}}function _e(e){return Boolean(e.config.init)&&!e.config.require?.length}async function Ie(e,t,n){const{code:o,config:r={},env:s={},primary:i,next:a,before:c,cache:u,terminus:d}=n,l=r.state??n.state,f=H(l);N(e,(0,I.stepId)("source",t),l);const p=u,g=p?(0,I.compileCache)({...p,stop:p.stop??!0}):void 0,h=d??e.push,m=Boolean(d),v=async(n,o,s)=>{if(m)return h(n);let i;const u="string"==typeof n.id&&""!==n.id?n:{...n,id:(0,I.getSpanId)()};let d=[{event:u,ingest:s.ingest}];if(void 0!==c){const n=`source.${t}.before`,o=await we(e,e.transformers||{},c,u,s.ingest,s.respond,n);if(0===o.copies.length)return K(e,u,s.ingest,{reason:"dropped",by:o.droppedBy,at:n}),Pt({ok:!0,dropped:!0});if(o.stopped)return o.respond&&(s.respond=o.respond),{ok:!0};o.respond&&(s.respond=o.respond),d=o.copies}if(g){const t=L(g,e);if(t){const n=(0,I.createMappingRoot)(s.ingest),o=await(0,I.checkCache)(g,t,n);if(o){if("HIT"===o.status&&void 0!==o.value&&g.stop){let t=o.value;return o.rule.update&&(t=await(0,I.applyUpdate)(t,o.rule.update,{...n,cache:{status:"HIT"}},e)),s.respond?.(t),{ok:!0}}if("MISS"===o.status&&g.stop&&s.respond){const r=s.respond,a=o.rule.update,c={...n,cache:{status:"MISS"}},u=o.key,d=o.rule.ttl,l=n=>{(0,I.storeCache)(t,u,n,d),a?i=(async()=>{const t=await(0,I.applyUpdate)(n,a,c,e);r(t)})():r(n)};s.respond=l}"MISS"!==o.status||g.stop||(0,I.storeCache)(t,o.key,!0,o.rule.ttl)}}}f&&f.length>0&&(d=await Promise.all(d.map(async t=>({event:await G(e,f,t.event,t.ingest),ingest:t.ingest}))));let l={ok:!0};for(const e of d)l=await h(e.event,{...o,id:t,ingest:e.ingest,respond:s.respond,mapping:r,preChain:a});return i&&await i,l},y=async n=>{const o=(0,I.createIngest)(t),s=(0,I.parseTraceparent)((0,I.isScope)(n)?n?.headers?.traceparent:void 0);if(s&&(o._meta.trace=s.trace,o._meta.parentEventId=s.parentSpan),!r.ingest||void 0===n)return o;const i=await(0,I.getMappingValue)(n,r.ingest,{collector:e});return{...o,...i,_meta:o._meta}},w=e.logger.scope("source").scope(t),b={...s,push:async(e,n={})=>{const o={ingest:(0,I.createIngest)(t),respond:void 0};return v(e,n,o)},command:e.command,sources:e.sources,elb:e.elb,logger:w},k={collector:e,logger:w,id:t,config:r,env:b,withScope:async(e,t,n)=>{const o={ingest:await y(e),respond:t};return n({...b,push:(e,t={})=>v(e,t,o),ingest:o.ingest,respond:o.respond})},reportError:ae(e,"source",t,w)},S=await(0,I.tryCatchAsync)(o,n=>{if(n instanceof I.FatalError)throw n;e.status.failed++,e.logger.scope("source").error("source factory failed",{sourceId:t,...ie(n)})})(k);if(!S)return;const E=S.type||"unknown",O=e.logger.scope(E).scope(t);return b.logger=O,i&&(S.config={...S.config,primary:i}),S}async function xe(e){for(const[t,n]of Object.entries(e.sources)){if(_e(n))continue;const o=n.config.require;if(!o?.length)continue;const r=o.filter(t=>!ze(e,t));r.length!==o.length&&(n.config.require=r,_e(n)&&await qe(e,n,t))}for(const[t,n]of Object.entries(e.pending.destinations)){if(!e.pending.destinations[t]||e.destinations[t])continue;const o=n.config?.require;if(!o)continue;const r=o.filter(t=>!ze(e,t));if(n.config&&(n.config.require=r),r.length>0)continue;delete e.pending.destinations[t];const s=Dt(n);!1!==s.config.queue&&(s.queuePush=[...e.queue]),e.destinations[t]=s,await mt(e,s,t)}}function Ae(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 je=!1;function Ce(){je||(je=!0,"undefined"!=typeof console&&"function"==typeof console.warn&&console.warn("walkerOS: ignored an on-dispatch call with a non-collector argument"))}function Pe(e,t,n,o){if(n instanceof O.FatalError)throw n;e.logger.scope("on").error("on callback failed",{kind:t,...o,...ie(n)})}var De=["consent","user","globals","custom"];function Me(e){return De.includes(e)}function Te(e){return Me(e)}function Re(e,t){return Me(t)&&Object.keys(e[t]).length>0}function ze(e,t){if(Me(t))return Re(e,t);switch(t){case z.Run:case z.Ready:return!0===e.allowed;default:return e.seenEvents.has(String(t))}}function $e(e,t){return e.cellVersion?.[String(t)]??0}function Be(e,t,n){ct(e,t,n,$e(e,n))}function We(e,t,n){return e.allowed&&$e(e,n)>function(e,t,n){const o=e.delivery.get(t),r=o?.[String(n)];return void 0===r?-1:r}(e,t,n)}var Ke=8;function Le(e){const t=e.cascade;if(t&&!He.has(t))return()=>{};const n=t||{counts:new WeakMap};e.cascade=n,He.set(n,(He.get(n)||0)+1);let o=!1;return()=>{if(o)return;o=!0;const t=(He.get(n)||1)-1;t>0?He.set(n,t):(He.delete(n),e.cascade===n&&(e.cascade=void 0))}}var He=new WeakMap;function Ge(e,t,n){const o=e.cascade;if(!o)return!0;let r=o.counts.get(t);r||(r={},o.counts.set(t,r));const s=String(n),i=(r[s]||0)+1;return r[s]=i,i<=Ke||(i===Ke+1&&e.logger.error("state delivery did not converge",{type:s}),!1)}function Ne(e,t){return{collector:e,logger:e.logger.scope("on").scope(String(t))}}async function Ve(e,t,n,o,r){const s=t.on;if(!s)return!0;const i=Te(o);if(i&&(Qe.get(t)||Fe.has(t)))return rt(e,t,o),Qe.get(t)||Ue.add(t),!1;const a=i?$e(e,o):0,c=i&&function(e,t,n,o){if(tt.get(t)?.has(String(n)))return!0;const r=e.delivery?.get(t)?.[String(n)];return void 0===r||r<o-1}(e,t,o,a)?dt(e,o):r,u=t.type||"unknown",d=e.logger.scope(u).scope("on").scope(o),l={collector:e,logger:d,id:n,config:t.config,data:c,env:Mt(t.env,t.config.env),reportError:ae(e,"destination",n,d,t)};i&&(it(t,o),function(e,t,n){let o=Ze.get(e);o||(o={},Ze.set(e,o));const r=String(t),s=o[r];(void 0===s||s<n)&&(o[r]=n)}(t,o,a),Fe.add(t));const f=Se(t.config.timeout);let p=Promise.resolve(),g=!0,h=!1,m=!0;try{await(0,q.tryCatchAsync)(()=>(p=Promise.resolve(s(o,l)),Oe(p,f,`Destination "${n}" on(${o}) did not settle within ${f}ms`)),t=>{g=!1,t instanceof Ee&&(h=!0),Pe(e,"destination",t,{destId:n,type:o})})(),m=!1}finally{if(i){Fe.delete(t),m&&Ue.delete(t);const r=tt.get(t);g?(ct(e,t,o,a),r?.delete(String(o))):rt(e,t,o),h?function(e,t,n,o,r,s,i){Qe.set(t,(Qe.get(t)||0)+1);const a=()=>{const s=(Qe.get(t)||0)-1;var a,c,u,d;s>0?Qe.set(t,s):Qe.delete(t),nt(t,o),et(t,o,r),at(e,t),i.debug("late settle after timeout"),Ue.delete(t),e.allowed&&e.destinations[n]===t&&(a=e,c=t,u=n,d=i,(0,q.tryCatchAsync)(async()=>{await mt(a,c,u),!Ye(c)&&c.queuePush?.length&&await It(a,void 0,{},{[u]:c})},e=>{d.error("state recovery failed",ie(e))})())};s.then(a,a)}(e,t,n,o,a,p,d):(et(t,o,a),at(e,t))}}return i&&!h&&Ue.delete(t)&&await mt(e,t,n),g}var Qe=new WeakMap,Fe=new WeakSet,Ue=new WeakSet,Je=new WeakMap;function Ye(e){return Je.get(e)}var Xe=new WeakMap,Ze=new WeakMap;function et(e,t,n){const o=Ze.get(e);o&&o[String(t)]===n&&delete o[String(t)]}var tt=new WeakMap;function nt(e,t){const n=tt.get(e);n?n.add(String(t)):tt.set(e,new Set([String(t)]))}var ot=new WeakMap;function rt(e,t,n){!function(e,t,n){const o=e.delivery?.get(t);o&&delete o[String(n)]}(e,t,n),nt(t,n),Je.set(t,{type:n,since:Date.now()})}function st(e,t){return!!tt.get(t)?.size||De.some(n=>Re(e,n)&&We(e,t,n))}function it(e,t){Xe.set(e,(Xe.get(e)||0)+1),Je.set(e,{type:t,since:Date.now()})}function at(e,t){const n=(Xe.get(t)||0)-1;var o,r;n>0?Xe.set(t,n):Xe.delete(t),o=e,r=t,Je.has(r)&&(Xe.get(r)||st(o,r)||Je.delete(r))}function ct(e,t,n,o){let r=e.delivery.get(t);r||(r={},e.delivery.set(t,r));const s=String(n),i=r[s];(void 0===i||i<o)&&(r[s]=o)}function ut(e,t,n,o){if(!Ae(e))return void Ce();const r=dt(e,t,o);if(n.length)switch(t){case z.Consent:!function(e,t,n){const o=n||e.consent,r=Ne(e,z.Consent);t.forEach(t=>{We(e,t,z.Consent)&&Ge(e,t,z.Consent)&&(Object.keys(o).filter(e=>e in t).forEach(n=>{(0,q.tryCatch)(t[n],t=>Pe(e,"consent",t,{key:n}))(o,r)}),Be(e,t,z.Consent))})}(e,n,o);break;case z.Ready:!function(e,t){if(!e.allowed)return;const n=Ne(e,z.Ready);t.forEach(t=>{(0,q.tryCatch)(t,t=>Pe(e,"ready",t))(void 0,n)})}(e,n);break;case z.Run:!function(e,t){if(!e.allowed)return;const n=Ne(e,z.Run);t.forEach(t=>{(0,q.tryCatch)(t,t=>Pe(e,"run",t))(void 0,n)})}(e,n);break;case z.Session:!function(e,t){if(!e.session)return;const n=Ne(e,z.Session);t.forEach(t=>{(0,q.tryCatch)(t,t=>Pe(e,"session",t))(e.session,n)})}(e,n);break;default:{const o=Ne(e,t),s=Te(t);n.forEach(n=>{"function"==typeof n&&(s&&!We(e,n,t)||s&&!Ge(e,n,t)||((0,q.tryCatch)(n,n=>Pe(e,"generic",n,{type:t}))(r,o),s&&Be(e,n,t)))});break}}}function dt(e,t,n){if(Me(t))return n||e[t];switch(t){case z.Session:return e.session;case z.Config:return n||e.config;default:return}}async function lt(e,t,n,o,r){if(!t.on)return!1;if(Te(o)&&!We(e,t,o))return!1;if(Te(o)&&!Ge(e,t,o))return!1;const s=Te(o);if(s&&ft.has(t))return pt.add(t),!1;const i=s?$e(e,o):0;s&&ft.add(t);const a=t.on;let c,u=Promise.resolve(),d=!1;try{c=await(0,q.tryCatchAsync)(()=>(u=Promise.resolve(a(o,r)),Oe(u,ke,`Source "${n}" on(${o}) did not settle within 10000ms`)),t=>{t instanceof Ee&&(d=!0),Pe(e,"source",t,{sourceId:n,type:o})})()}finally{s&&!d&&ft.delete(t)}if(s)if(d){const o=()=>{ft.delete(t),pt.delete(t),e.allowed&&e.sources[n]===t&&(0,q.tryCatchAsync)(()=>gt(e,t,n),t=>{e.logger.scope("on").error("state recovery failed",ie(t))})()};u.then(o,o)}else ct(e,t,o,i),pt.delete(t)&&await gt(e,t,n);return!1===c}var ft=new WeakSet,pt=new WeakSet;async function gt(e,t,n){const o=Le(e);try{for(const o of De)await lt(e,t,n,o,dt(e,o))}finally{o()}}async function ht(e,t,n,o,r){if(!t.on)return;const s=Te(o);if(s&&!We(e,t,o))return;const i=Ze.get(t)?.[String(o)];if(s&&void 0!==i&&i>=$e(e,o))return;if(s&&!Ge(e,t,o)){if(t.config.init)return void rt(e,t,o);const n=t.queueOn=t.queueOn||[],r={type:o,data:dt(e,o)},s=n[n.length-1];return s&&s.type===o?n[n.length-1]=r:n.push(r),Be(e,t,o),void tt.get(t)?.delete(String(o))}const a=ot.get(t);if(!t.config.init||a)return t.queueOn=t.queueOn||[],t.queueOn.push({type:o,data:r}),void(s&&(Be(e,t,o),a&&!a.held&&(it(t,o),a.held=!0)));await Ve(e,t,n,o,r)}async function mt(e,t,n){if(!t.on)return;const o=Le(e);try{for(const o of De)(Re(e,o)||tt.get(t)?.has(String(o)))&&await ht(e,t,n,o,dt(e,o))}finally{o()}}function vt(e){return(Xe.get(e)||0)>0}function yt(e,t,n){return n.catch(()=>{}),{id:e,destination:t,done:n}}var wt=1e3,bt=1e3,kt=3e4,St=Object.freeze({batched:!0});function Et(e){return e===St}var Ot=" batch-all";function qt(e){return void 0===e?{}:"number"==typeof e?{wait:e}:{wait:e.wait,size:e.size,age:e.age}}function _t(e){for(const t of e)Ye(t.destination)&&(t.drain=!0)}async function It(e,t,n={},o){if(!e.allowed)return Pt({ok:!1});if(!t)return xt(e,void 0,n,o);const r=await async function(e,t,n={}){const o=n.ingest??(0,w.createIngest)(n.id||"unknown"),r=e.config.next;if(void 0===r)return{copies:[{event:t,ingest:o}],respond:n.respond};const s=await we(e,e.transformers||{},r,t,o,n.respond,Lt),i=s.respond??n.respond;return 0===s.copies.length?(e.logger.debug("Event dropped by collector.next"+(s.droppedBy?` (${s.droppedBy})`:"")),K(e,t,o,{reason:"dropped",by:s.droppedBy,at:Lt}),{copies:[],respond:i,dropped:!0}):s.stopped?{copies:[],respond:i}:{copies:s.copies.map(t=>({event:Wt(e,t.event,t.ingest),ingest:t.ingest})),respond:i}}(e,t,n);if(0===r.copies.length)return Pt({ok:!0,...r.dropped?{dropped:!0}:{}});const s=[];for(const t of r.copies)s.push(await xt(e,t.event,{id:n.id,ingest:t.ingest,respond:r.respond},o));return s[0]}async function xt(e,t,n,o){const{user:r}=e;if(t){const n=J(e.config.queueMax),o=Y(e.queue,t,{max:n});if(o.dropped>0){const t=se(e.status,(0,b.stepId)("collector"),"queue",o.dropped);Z(e.queue,e.logger,"collector.queue overflow; oldest events dropped",{buffer:"queue",cap:n,droppedCount:t})}else e.queue.length<n&&ee(e.queue);e.status.in++}o||(o=e.destinations);const s=e.transformers||{},i=await Promise.all(Object.entries(o||{}).map(async([o,i])=>{if(i.config.disabled)return{id:o,destination:i,skipped:!0};const a=i.config.id||o,c=(0,b.stepId)("destination",a),u=ne(i.config.breaker);if(u&&function(e,t,n){const o=e[t];if(!o||"closed"===o.state)return!1;if("half-open"===o.state)return!0===o.probing;const r=te();return void 0!==o.openUntil&&r<o.openUntil||(o.state="half-open",o.probing=!0,o.openUntil=r+n,!1)}(e.status.breakers,c,u.cooldown))return{id:o,destination:i,skipped:!0};const d=t=>{u&&oe(e.status.breakers,c,t,u.threshold,u.cooldown)},l=()=>{u&&function(e,t){const n=e[t];n&&"half-open"===n.state&&!0===n.probing&&(n.state="open",n.probing=!1)}(e.status.breakers,c)},f=t=>{if(!t.length)return;i.queuePush||(i.queuePush=[]);const n=i.queuePush,r=i.config.id||o,s={max:i.config.queueMax??wt};let a=0;for(const e of t)a+=Y(n,e,s).dropped;if(a>0){re(e,r);const t=se(e.status,(0,b.stepId)("destination",r),"queue",a);Z(n,e.logger.scope(i.type||"unknown"),"destination.queuePush overflow; oldest events dropped",{buffer:"queuePush",destination:r,cap:s.max,droppedCount:t})}else n.length<s.max&&ee(n)};i.on&&i.config.init&&!Ye(i)&&!vt(i)&&st(e,i)&&await mt(e,i,o);const p=Ye(i);if(p&&!vt(i)&&Date.now()-p.since>=Se(i.config.timeout)&&await mt(e,i,o),Ye(i)){if(l(),!t)return{id:o,destination:i,skipped:!0};const e=[(0,b.clone)(t)];return f(e),{id:o,destination:i,queue:e}}let g=(i.queuePush||[]).map(t=>({...t,consent:e.consent}));i.queuePush=[],t&&g.push((0,b.clone)(t));const h=n.ingest?{...n.ingest,_meta:{...n.ingest._meta,path:[...n.ingest._meta.path]}}:(0,b.createIngest)("unknown");if(!g.length&&!i.queueOn?.length)return l(),{id:o,destination:i,skipped:!0};if(!g.length&&i.queueOn?.length){if(!(0,b.getGrantedConsent)(i.config.consent,e.consent))return l(),{id:o,destination:i,skipped:!0};let t=!1;try{t=await jt(e,i,o,!0)}catch(t){e.status.failed++;const n=i.type||"unknown";e.logger.scope(n).error("destination init failed",{error:t instanceof Error?t.message:String(t)}),d("transport-failure")}if(Ye(i))return l(),{id:o,destination:i,skipped:!0};if(!t||!i.queuePush?.length)return l(),{id:o,destination:i,skipped:!t};g=i.queuePush.map(t=>({...t,consent:e.consent})),i.queuePush=[]}const m=t=>{const n=e.consent,r=[],s=t.filter(t=>{const s=(0,b.getGrantedConsent)(i.config.consent,n,t.consent);if(s)return t.consent=s,r.push(t),!1;const a=B(e,(0,b.stepId)("destination",o),"destination","skip","string"==typeof t.id?t.id:"",Date.now(),$(t,h,e));return a.skipReason="consent",n&&(a.consent={...n}),i.config.consent&&(a.meta={required:{...i.config.consent}}),(0,b.emitStep)(e,a),!0});return{allowed:r,skipped:s}},v=e.consent,{allowed:y,skipped:w}=m(g);if(f(w),!y.length)return l(),{id:o,destination:i,queue:g};const k=new Set(i.queuePush);let S=!1;try{S=await jt(e,i,o,!0)}catch(t){e.status.failed++;const n=i.type||"unknown";e.logger.scope(n).error("destination init failed",{error:t instanceof Error?t.message:String(t)}),d("transport-failure")}if(!S)return l(),{id:o,destination:i,queue:g};if(Ye(i))return l(),f(y),{id:o,destination:i,queue:y};const E=[];if(e.consent!==v){const t=m(y.map(t=>({...t,consent:e.consent})));y.splice(0,y.length,...t.allowed),E.push(...t.skipped)}const O=i.queuePush||[],q=O.filter(e=>!k.has(e));if(q.length){i.queuePush=O.filter(e=>k.has(e));const t=m(q.map(t=>({...t,consent:e.consent})));y.push(...t.allowed),E.push(...t.skipped)}if(f(E),!y.length)return l(),E.length?{id:o,destination:i,queue:E}:{id:o,destination:i,skipped:!0};let _,I;i.dlq||(i.dlq=[]);const x=i.config.before,A=i.config.next,j=i.config?.cache,C=j?(0,b.compileCache)(j):void 0,P=C?L(C,e):void 0,D=H(i.config?.state),M=D?.filter(e=>"get"===e.mode),T=D?.filter(e=>"set"===e.mode);let R=0,z=0,W=0;return await Promise.all(y.map(async t=>{let a,c;if(t.user=(0,b.assign)(r,t.user),C?.stop&&P){const e=(0,b.createMappingRoot)(h,t),n=await(0,b.checkCache)(C,P,e);if("HIT"===n?.status)return t;"MISS"===n?.status&&(a={key:n.key,ttl:n.rule.ttl})}let u=[{event:t,ingest:h}],d=n.respond;if(void 0!==x){const r=`destination.${o}.before`,i=await we(e,s,x,t,h,n.respond,r);if(0===i.copies.length){const n=B(e,(0,b.stepId)("destination",o),"destination","skip","string"==typeof t.id?t.id:"",Date.now(),$(t,h,e));return n.skipReason="dropped",n.meta={by:i.droppedBy??"route",at:r},(0,b.emitStep)(e,n),t}i.respond&&(d=i.respond),u=i.copies.map(e=>({event:e.event,ingest:e.ingest}))}const l=async(t,n,r)=>{let a=r,u=!1;if(C&&!C.stop&&P){const e=(0,b.createMappingRoot)(n,t??void 0),o=await(0,b.checkCache)(C,P,e);if("HIT"===o?.status)return!1;"MISS"===o?.status&&(a={key:o.key,ttl:o.rule.ttl},u=!0)}M&&M.length>0&&t&&(t=await G(e,M,t,n));const l=Date.now();let f=!1;const p=await(0,b.tryCatchAsync)(Ct,n=>{const r=i.type||"unknown";e.logger.scope(r).error("Push failed",{...ie(n),event:t.name}),_=n,f=!0;const s=i.dlq,a=i.config.id||o,c={max:i.config.dlqMax??100},u=Y(s,[t,n],c);if(u.dropped>0){re(e,a);const t=se(e.status,(0,b.stepId)("destination",a),"dlq",u.dropped);Z(s,e.logger.scope(i.type||"unknown"),"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:a,cap:c.max,droppedCount:t})}else s.length<c.max&&ee(s)})(e,i,o,t,n,d);if(R+=Date.now()-l,a&&P&&void 0===i.config.mock&&(u?(0,b.storeCache)(P,a.key,p??!0,a.ttl):void 0===c&&(c=p??!0)),!f&&!Et(p)&&T&&T.length>0&&t&&(t=await G(e,T,t,n)),void 0===p||Et(p)||(I=p),Et(p)&&z++,!f&&A){void 0!==p&&(n._response=p);const r=await we(e,s,A,t,n,d,`destination.${o}.next`);r.respond&&(d=r.respond)}return!0};for(const e of u)await l(e.event,e.ingest,a)&&W++;return a&&P&&void 0!==c&&void 0===i.config.mock&&(0,b.storeCache)(P,a.key,c,a.ttl),t})),{id:o,destination:i,error:_,response:I,totalDuration:R,batchedCount:z,allowedCount:y.length,pushedCount:W,canonicalId:a,breakerConfig:u}})),a={},c={},u={};for(const t of i){if(t.skipped)continue;const n=t.destination,o={type:n.type||"unknown",data:t.response};re(e,t.id);const r=e.status.destinations[t.id],s=Date.now();r.queuePushSize=n.queuePush?.length??0,r.dlqSize=n.dlq?.length??0;const i=t.breakerConfig,d=t.canonicalId?(0,b.stepId)("destination",t.canonicalId):void 0,l=t=>{i&&d&&oe(e.status.breakers,d,t,i.threshold,i.cooldown)};if(t.error)o.error=t.error,u[t.id]=o,r.failed++,r.lastAt=s,r.duration+=t.totalDuration||0,e.status.failed++,l("transport-failure");else if(t.queue&&t.queue.length)c[t.id]=o;else{const n=t.batchedCount??0,i=t.allowedCount??0,c=t.pushedCount??i;(Math.max(0,c-n)>0||0===i)&&(a[t.id]=o,r.count++,r.lastAt=s,r.duration+=t.totalDuration||0,e.status.out++,l("success"))}}return Pt({event:t,...Object.keys(a).length&&{done:a},...Object.keys(c).length&&{queued:c},...Object.keys(u).length&&{failed:u}})}var At=new WeakMap;async function jt(e,t,n,o=!1){if(t.init&&!t.config.init){if(!o&&function(e){const t=e.config.consent;return!!t&&Object.keys(t).length>0}(t))return e.logger.scope(t.type||"unknown").debug("init blocked: consent gate not cleared"),!1;const r=At.get(t);if(r)return r;const s=async function(e,t,n,o){const r=await async function(e,t,n,o){const r=t.type||"unknown",s=e.logger.scope(r),i={collector:e,logger:s,id:o,config:t.config,env:Mt(t.env,t.config.env),reportError:ae(e,"destination",o,s,t)};s.debug("init");const a=Date.now();let c;(0,b.emitStep)(e,B(e,(0,b.stepId)("destination",o),"destination","init","",a));try{c=await(0,b.useHooks)(n,"DestinationInit",e.hooks,e.logger)(i)}catch(t){const n=Date.now(),r=B(e,(0,b.stepId)("destination",o),"destination","error","",n);throw r.durationMs=n-a,r.error=W(t),(0,b.emitStep)(e,r),t}return!1!==c&&{...c||t.config,init:!0}}(e,t,n,o);if(!1===r)return!1;if(t.config=r,t.queueOn?.length){const n=Le(e);!function(e){const t=e.queueOn?.find(({type:e})=>Te(e));t&&it(e,t.type),ot.set(e,{held:!!t})}(t);try{for(let n=t.queueOn?.shift();n;n=t.queueOn?.shift())await Ve(e,t,o,n.type,n.data)}catch(n){for(const{type:n}of t.queueOn||[])Te(n)&&rt(e,t,n);throw t.queueOn=[],n}finally{!function(e,t){const n=ot.get(t);ot.delete(t),n?.held&&at(e,t)}(e,t),n()}}return e.logger.scope(t.type||"unknown").debug("init done"),!0}(e,t,t.init,n);At.set(t,s);try{return await s}finally{At.delete(t)}}return!0}async function Ct(e,t,n,o,r,s){const{config:i}=t,a=await(0,b.processEventMapping)(o,i,e);if(a.ignore)return!1;const c=t.type||"unknown",u=e.logger.scope(c),d={collector:e,logger:u,id:n,config:i,data:a.data,rule:a.mapping,ingest:r,env:{...Mt(t.env,i.env),...s?{respond:s}:{}},reportError:ae(e,"destination",n,u,t)};if(void 0!==i.mock)return u.debug("mock",{event:a.event.name}),i.mock;const l=a.mapping,f=void 0!==l?.batch,p=f?a.mappingKey||"* *":Ot;if((f||void 0!==i.batch)&&t.pushBatch&&void 0===i.mock){if(t.batches=t.batches||{},!t.batches[p]){const o={key:p,entries:[],events:[],data:[]},r=qt(l?.batch),s=qt(i.batch),a=r.wait??s.wait??kt,c=r.size??s.size??bt,d=r.age??s.age??kt,g=Mt(t.env,i.env),h=(0,b.debounce)(async()=>{const o=t.batches[p],r=o.batched;if(0===r.entries.length)return;const s={key:r.key,entries:r.entries,events:r.events,data:r.data};r.entries=[],r.events=[],r.data=[];const a=s.entries[0],c={collector:e,logger:u,id:n,config:i,data:void 0,rule:o.isDefault?void 0:a.rule,ingest:a.ingest,env:{...g,...a.respond?{respond:a.respond}:{}},reportError:ae(e,"destination",n,u,t)};u.debug("push batch",{events:s.entries.length});const d=t.config.id||n,l=re(e,d),f=ne(t.config.breaker),h=(0,b.stepId)("destination",d),m=t=>{f&&oe(e.status.breakers,h,t,f.threshold,f.cooldown)},v=Date.now(),y=new Map;let w,k=!1;const S=n=>{const o=t.dlq=t.dlq||[],r={max:t.config.dlqMax??100};let s=0;for(const e of n)s+=Y(o,e,r).dropped;if(s>0){const t=se(e.status,(0,b.stepId)("destination",d),"dlq",s);Z(o,u,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:d,cap:r.max,droppedCount:t})}else o.length<r.max&&ee(o);l.failed+=n.length,l.dlqSize=o.length,e.status.failed+=n.length};let E=s.entries.length;const O=Se(i.timeout),q=await(0,b.tryCatchAsync)((o,r)=>Oe(Promise.resolve((0,b.useHooks)(t.pushBatch,"DestinationPushBatch",e.hooks,e.logger)(o,r)),O,`Destination "${n}" batch delivery timed out after ${O}ms`),e=>{E=0,k=!0,w=e,S(s.entries.map(t=>[t.event,e])),m("transport-failure"),u.error("Push batch failed",{error:e instanceof Error?e.message:String(e),entries:s.entries.length})})(s,c);if((0,b.isObject)(_=q)&&Array.isArray(_.failed)&&q.failed.length>0){const e=[];for(const t of q.failed){const n=s.entries[t.index];if(!n||y.has(t.index))continue;const o=t.error??new Error(`Push batch entry ${t.index} failed (no per-row error provided)`);y.set(t.index,o),e.push([n.event,o])}if(e.length>0){S(e),E=Math.max(0,s.entries.length-e.length);const t=new Map;for(const[,n]of e){const e=n instanceof Error&&"code"in n&&"string"==typeof n.code?n.code:n instanceof Error?n.name:"Error",o=t.get(e);o?o.count++:t.set(e,{code:e,count:1,message:n instanceof Error?n.message:String(n)})}u.error("Push batch partial failure",{failed:e.length,delivered:E,entries:s.entries.length,causes:[...t.values()]})}}var _;const I=Date.now();s.entries.forEach((t,o)=>{const r=k||y.has(o),i=$(t.event,t.ingest,e),a=B(e,(0,b.stepId)("destination",n),"destination",r?"error":"flush","string"==typeof t.event.id?t.event.id:"",I,i);if(a.batch={size:s.entries.length,index:o},a.durationMs=I-v,r){const e=k?w:y.get(o);a.error=W(e)}(0,b.emitStep)(e,a)}),u.debug("push batch done"),l.inFlightBatch=Math.max(0,(l.inFlightBatch??0)-s.entries.length),E>0&&(l.count+=E,l.lastAt=Date.now(),e.status.out+=E,m("success"))},{wait:a,size:c,age:d});t.batches[p]={batched:o,isDefault:!f,batchFn:()=>{h()},flush:async()=>{await h.flush()}}}const c=t.batches[p];c.batched.entries.push({event:a.event,ingest:r,respond:s,rule:l,data:a.data}),c.batched.events.push(a.event),(0,b.isDefined)(a.data)&&c.batched.data.push(a.data);const d="string"==typeof a.event.id?a.event.id:"",g=$(o,r,e),h=Date.now(),m=B(e,(0,b.stepId)("destination",n),"destination","in",d,h,g);a.mappingKey&&(m.mappingKey=a.mappingKey),a.event.consent&&(m.consent={...a.event.consent}),m.inEvent=a.event,(0,b.emitStep)(e,m);const v=B(e,(0,b.stepId)("destination",n),"destination","out",d,h,g);a.mappingKey&&(v.mappingKey=a.mappingKey),v.outEvent=a.event,v.batch={size:c.batched.entries.length,index:c.batched.entries.length-1},(0,b.emitStep)(e,v);const y=t.config.id||n,w=re(e,y);return w.inFlightBatch=(w.inFlightBatch??0)+1,c.batchFn(),St}{let s;if(u.debug("push",{event:a.event.name}),("undefined"==typeof __WALKEROS_OBSERVE__||__WALKEROS_OBSERVE__)&&"trace"===e.observeLevel?.()&&Array.isArray(t.calls)&&t.calls.length>0){const e=function(e){const{simulation:t,...n}=e,o={},r=new WeakMap;for(const[e,t]of Object.entries(n))o[e]="function"==typeof t?t:V(t,r,1);const s=(0,E.observeEnv)(o,t);return{wrappedEnv:s.env,calls:s.calls,unresolved:s.unresolved}}({...d.env,simulation:t.calls});d.env=e.wrappedEnv,s=e.calls,e.unresolved.length>0&&(e.wrappedEnv[b.OBSERVE_ENV_KEY]={paths:e.unresolved,record:(t,n)=>e.calls.push({fn:t,args:n,ts:Date.now()})})}const c="string"==typeof a.event.id?a.event.id:"",l=$(o,r,e),f=Date.now(),p=B(e,(0,b.stepId)("destination",n),"destination","in",c,f,l);a.mappingKey&&(p.mappingKey=a.mappingKey),a.event.consent&&(p.consent={...a.event.consent}),p.inEvent=a.event,(0,b.emitStep)(e,p);try{const o=Se(i.timeout),r=await Oe(Promise.resolve((0,b.useHooks)(t.push,"DestinationPush",e.hooks,e.logger)(a.event,d)),o,`Destination "${n}" delivery timed out after ${o}ms`),p=Date.now(),g=B(e,(0,b.stepId)("destination",n),"destination","out",c,p,l);return g.durationMs=p-f,g.outEvent=a.event,U(g,s),(0,b.isDefined)(r)&&(g.meta={...g.meta,response:r}),a.mappingKey&&(g.mappingKey=a.mappingKey),(0,b.emitStep)(e,g),u.debug("push done"),r}catch(t){const o=Date.now(),r=B(e,(0,b.stepId)("destination",n),"destination","error",c,o,l);throw r.durationMs=o-f,r.error=W(t),U(r,s),a.mappingKey&&(r.mappingKey=a.mappingKey),(0,b.emitStep)(e,r),t}}}function Pt(e){return{ok:!e?.failed,...e}}function Dt(e){const{code:t,config:n={},env:o={},cache:r,state:s}=e,{config:i}=ce(e,"before"),{config:a}=ce({...e,config:i},"next"),c={...t.config,...n,...a};r&&(c.cache=r),void 0!==s&&void 0===c.state&&(c.state=s);const u=Mt(t.env,o);return{...t,config:c,env:u}}function Mt(e,t){return e||t?t?e&&(0,b.isObject)(e)&&(0,b.isObject)(t)?{...e,...t}:t:e:{}}async function Tt(e,t,n){const o=Object.entries(e).map(async([e,o])=>{const r=o.destroy;if(!r)return;const s=o.type||"unknown",i=n.scope(s),a={id:e,config:o.config,env:o.env??{},logger:i};let c;try{await Promise.race([r(a),new Promise((n,o)=>{c=setTimeout(()=>o(new Error(`${t} '${e}' destroy timed out`)),5e3)})])}catch(n){i.error(`${t} '${e}' destroy failed: ${n}`)}finally{c&&clearTimeout(c)}});await Promise.allSettled(o)}function Rt(e,t){e.stateVersion++,e.cellVersion[t]=e.stateVersion}async function zt(e,t,n){let o,r,s=!1;const i=[],a=Le(e);try{return await async function(){switch(t){case z.Config:(0,j.isObject)(n)&&((0,A.assign)(e.config,n,{shallow:!1,merge:!1}),r=n,s=!0);break;case z.Consent:if((0,j.isObject)(n)){const{update:t}=function(e,t){const n={};return Object.entries(t).forEach(([e,t])=>{n[e]=!!t}),e.consent=(0,y.assign)(e.consent,n),{update:n}}(e,n);Rt(e,z.Consent),r=t,s=!0}break;case z.Custom:(0,j.isObject)(n)&&(e.custom=(0,A.assign)(e.custom,n),Rt(e,z.Custom),r=n,s=!0);break;case z.Destination:(0,j.isObject)(n)&&"code"in n&&(0,j.isObject)(n.code)&&(o=await async function(e,t){const{code:n,config:o={},env:r={},before:s,next:i,cache:a,state:c}=t;if(!(0,b.isFunction)(n.push))return Pt({ok:!1,failed:{invalid:{type:"invalid",error:"Destination code must have a push method"}}});const u={...n.config,...o||{init:!1}};let d=s?{...u,before:s}:{...u};i&&(d={...d,next:i}),a&&(d={...d,cache:a}),void 0!==c&&void 0===d.state&&(d={...d,state:c});let l=d.id;if(!l)do{l=(0,b.getId)(5,"abcdefghijklmnopqrstuvwxyz")}while(e.destinations[l]||e.pending.destinations[l]);if(N(e,(0,b.stepId)("destination",l),d.state),d.require?.length){e.pending.destinations[l]=t,await xe(e);const n=e.destinations[l];return n?It(e,void 0,{},{[l]:n}):Pt({ok:!0})}const f={...n,config:d,env:Mt(n.env,r)};return e.destinations[l]=f,!1!==f.config.queue&&(f.queuePush=[...e.queue]),await mt(e,f,l),It(e,void 0,{},{[l]:f})}(e,n));break;case z.Globals:(0,j.isObject)(n)&&(e.globals=(0,A.assign)(e.globals,n),Rt(e,z.Globals),r=n,s=!0);break;case z.Hook:if((0,j.isObject)(n)&&(0,A.isString)(n.name)&&(0,A.isFunction)(n.fn)){const{name:t,fn:o}=n;e.hooks[t]=o,r=n,s=!0}break;case z.On:if((0,j.isObject)(n)&&(0,A.isString)(n.type)){const{type:t,rules:o}=n;await async function(e,t,n){if(!Ae(e))return void Ce();const o=e.on,r=o[t]||[],s=(0,O.isArray)(n)?n:[n];s.forEach(e=>{r.push(e)}),o[t]=r,ut(e,t,s)}(e,t,o)}break;case z.Ready:s=!0;break;case z.Run:o=await async function(e,t,n){e.allowed=!0,e.timing=Date.now(),e.trace=(0,A.getTraceId)(),e.count=0,t&&(t.consent&&(e.consent=(0,A.assign)(e.consent,t.consent),Rt(e,z.Consent)),t.user&&(e.user=(0,A.assign)(e.user,t.user),Rt(e,z.User)),t.globals&&(e.globals=(0,A.assign)(e.config.globalsStatic||{},t.globals),Rt(e,z.Globals)),t.custom&&(e.custom=(0,A.assign)(e.custom,t.custom),Rt(e,z.Custom))),Object.values(e.destinations).forEach(e=>{e.queuePush=[]}),e.queue=[],e.round++,await xe(e);const o=await async function(e){if(!Ae(e))return Ce(),[];const t=[];for(const[n,o]of Object.entries(e.destinations)){if(!o.on)continue;const r=async()=>{for(const t of De)Re(e,t)&&await ht(e,o,n,t,dt(e,t))};t.push(yt(n,o,r()))}for(const t of De){if(!Re(e,t))continue;const n=dt(e,t);ut(e,t,e.on[t]||[]),await Promise.all(Object.entries(e.sources).filter(([,e])=>_e(e)).map(([o,r])=>lt(e,r,o,t,n)))}return t}(e);let r=!0;const s={};if(e.preRunQueue.length){const t=e.preRunQueue.splice(0);e.logger.debug("replaying pre-run events",{count:t.length});for(const{event:n,options:o}of t){const t=await e.push(n,o);!1===t.ok&&(r=!1),t.failed&&Object.assign(s,t.failed)}}_t(o);const i=await It(e);if(n.push(...o),r)return i;const a={...i.failed??{},...s};return{...i,ok:!1,...Object.keys(a).length>0?{failed:a}:{}}}(e,n,i),s=!0;break;case z.Session:s=!0;break;case z.Shutdown:e.hasShutdown||(e.hasShutdown=!0,await async function(e){const t=e.logger;await Tt(e.sources,"source",t),await async function(e,t){const n=Object.entries(e).flatMap(([e,n])=>{const o=n.batches;if(!o)return[];const r=t.scope(n.type||"destination");return Object.values(o).map(async t=>{let n;try{await Promise.race([t.flush(),new Promise((t,o)=>{n=setTimeout(()=>o(new Error(`destination '${e}' batch flush timed out`)),5e3)})])}catch(t){r.error(`destination '${e}' batch flush failed: ${t}`)}finally{n&&clearTimeout(n)}})});await Promise.allSettled(n)}(e.destinations,t),await Tt(e.destinations,"destination",t),await Tt(e.transformers,"transformer",t),await Tt(e.stores,"store",t)}(e));break;case z.User:(0,j.isObject)(n)&&((0,A.assign)(e.user,n,{shallow:!1}),Rt(e,z.User),r=n,s=!0);break;default:return e.logger.warn("unknown command",{command:t}),Pt({ok:!1})}if(s){const n=await async function(e,t,n,o){if(!Ae(e))return Ce(),{ok:!0,deliveries:[]};e.seenEvents.add(String(t));let r=n||[];n||(r=e.on[t]||[]);const s=dt(e,t,o),i=[];for(const[n,o]of Object.entries(e.sources)){if(o.config.require?.length){const e=o.config.require.indexOf(t);-1!==e&&o.config.require.splice(e,1)}o.on&&(_e(o)?i.push(lt(e,o,n,t,s)):(o.queueOn=o.queueOn||[],o.queueOn.push({type:t,data:s})))}const a=[];for(const[n,o]of Object.entries(e.destinations))o.on&&a.push(yt(n,o,ht(e,o,n,t,s)));let c=!1;i.length&&(c=(await Promise.all(i)).some(Boolean));for(const[t,n]of Object.entries(e.sources))_e(n)&&n.queueOn?.length&&await qe(e,n,t);const u=Object.values(e.sources).some(e=>!_e(e)&&e.config.require?.length);return(Object.keys(e.pending.destinations).length>0||u)&&await xe(e),ut(e,t,r,o),{ok:!c,deliveries:a}}(e,t,void 0,r);i.push(...n.deliveries),_t(n.deliveries);const s=function(e,t){if(!t.length)return e;const n={...e.done??{}},o={...e.queued??{}},r={...e.failed??{}};for(const e of t){for(const[t,r]of Object.entries(e.done??{}))n[t]=r,delete o[t];for(const[t,n]of Object.entries(e.failed??{}))r[t]=n,delete o[t];Object.assign(o,e.queued??{})}const s={...e,ok:e.ok&&t.every(e=>e.ok)};return delete s.done,delete s.queued,delete s.failed,Object.keys(n).length&&(s.done=n),Object.keys(o).length&&(s.queued=o),Object.keys(r).length&&(s.failed=r),s}(await It(e),await async function(e,t){return(await Promise.all(t.map(async({id:t,destination:n,done:o,drain:r})=>{if(await o,r&&e.allowed&&!Ye(n)&&n.queuePush?.length&&e.destinations[t]===n)return It(e,void 0,{},{[t]:n})}))).filter(b.isDefined)}(e,i));if(o&&!1===o.ok){const e={...s.failed??{},...o.failed??{}};o={...s,ok:!1,...Object.keys(e).length>0?{failed:e}:{}}}else o=s}return o||Pt({ok:!0})}()}finally{a()}}function $t(e,t){return{timing:Math.round((Date.now()-e.timing)/10)/100,source:{type:"collector",schema:"4"},...t}}function Bt(e,t,n){return Kt(e,t,n,{globals:e.globals,user:e.user,consent:e.consent})}function Wt(e,t,n){return Kt(e,$t(e,t),n,{globals:{},user:{},consent:{}})}function Kt(e,t,n,o){const r=t.name;if("string"!=typeof r)throw new A.InvalidEventError(void 0===r?"Event name is required":"Event name is invalid");if(!r)throw new A.InvalidEventError("Event name is required");const[s,i]=r.split(" ");if(!s||!i)throw new A.InvalidEventError("Event name is invalid");const{timestamp:a=Date.now(),name:c=`${s} ${i}`,data:u={},context:d={},globals:l={},custom:f={},user:p=o.user,nested:g=[],consent:h=o.consent,id:m=(0,A.getSpanId)(),trigger:v="",entity:y=s,action:w=i,timing:b=0,source:k={type:"collector",schema:"4"}}=t,S=k??{type:"collector",schema:"4"},E=S.count??(e.count+=1),O=S.trace??n?._meta.trace??e.trace,q={...S,count:E};void 0!==O&&(q.trace=O);const _=e.name??S.platform??"default",I=e.release??"4.8.0-next-1791496487198";return q.release={...S.release,[_]:I},{name:c,data:u,context:d,globals:(0,A.assign)(o.globals,l),custom:f,user:p,nested:g,consent:h,id:m,trigger:v,entity:y,action:w,timestamp:a,timing:b,source:q}}var Lt="collector.next";function Ht(e,t){const n=(0,D.useHooks)(async(n,o={})=>await(0,D.tryCatchAsync)(async()=>{if(!e.allowed){const t=J(e.config.queueMax),r=Y(e.preRunQueue,{event:n,options:o},{max:t});if(r.dropped>0){const n=se(e.status,"collector.preRun","queue",r.dropped);Z(e.preRunQueue,e.logger,"collector.preRunQueue overflow; oldest events dropped",{buffer:"queue",cap:t,droppedCount:n})}else e.preRunQueue.length<t&&ee(e.preRunQueue);return e.logger.debug("event held until run",{name:n.name,dropped:r.dropped}),Pt({ok:!0})}const r=Date.now(),{id:s,ingest:i,respond:a,mapping:c,preChain:u,include:d,exclude:l}=o;let f=a,p=n;const g=d||l?function(e,t,n){let o=e;return t&&(o=Object.fromEntries(Object.entries(o).filter(([e])=>t.includes(e)))),n&&(o=Object.fromEntries(Object.entries(o).filter(([e])=>!n.includes(e)))),o}(e.destinations,d,l):void 0;let h=i??(0,D.createIngest)(s||"unknown");if(c){const t=await(0,D.processEventMapping)(p,c,e);if(t.ignore)return Pt({ok:!0});if(c.consent){const n=t.event.consent;if(!(0,D.getGrantedConsent)(c.consent,e.consent,n)){const o=s?`source.${s}`:"collector.push";return e.logger.debug("Event dropped by source consent",{at:o,required:c.consent}),K(e,t.event,h,{reason:"consent",at:o,required:c.consent,consent:{...e.consent,...n}}),Pt({ok:!0,dropped:!0})}}p=t.event}if(void 0!==u){const n=s?`source.${s}.next`:void 0,o=await we(e,e.transformers||{},u,p,h,f,n);if(0===o.copies.length)return e.logger.debug("Event dropped by transformer chain"+(o.droppedBy?` (${o.droppedBy})`:"")),K(e,p,h,{reason:"dropped",by:o.droppedBy,at:n??"collector.push.preChain"}),Pt({ok:!0,dropped:!0});if(o.stopped)return o.respond&&(f=o.respond),Pt({ok:!0});if(o.respond&&(f=o.respond),o.copies.length>1){const n=await Promise.all(o.copies.map(async n=>{const o=Bt(e,t(n.event),n.ingest);return It(e,o,{id:s,ingest:n.ingest,respond:f},g)}));if(s){e.status.sources[s]||(e.status.sources[s]={count:0,duration:0});const t=e.status.sources[s];t.count+=o.copies.length,t.lastAt=Date.now(),t.duration+=Date.now()-r}return n[0]??Pt({ok:!0})}p=o.copies[0].event,h=o.copies[0].ingest}const m=function(e,t,n){return Bt(e,$t(e,t),n)}(e,p,h),v=await It(e,m,{id:s,ingest:h,respond:f},g);if(s){e.status.sources[s]||(e.status.sources[s]={count:0,duration:0});const t=e.status.sources[s];t.count++,t.lastAt=Date.now(),t.duration+=Date.now()-r}return v},t=>{if(t instanceof D.FatalError)throw t;if(t instanceof D.InvalidEventError){const n=o.id;if(n){e.status.sources[n]||(e.status.sources[n]={count:0,duration:0});const t=e.status.sources[n];t.rejected=(t.rejected??0)+1}return e.logger.warn("invalid event rejected",{error:t.message}),Pt({ok:!1,invalid:!0,error:t.message})}return e.status.failed++,e.logger.error("push failed",{...ie(t),event:n.name}),Pt({ok:!1})})(),"Push",e.hooks,e.logger);return async(t,o)=>{const r="string"==typeof t.id&&""!==t.id?t:{...t,id:(0,D.getSpanId)()},s="string"==typeof r.id?r.id:"",i=$(r,o?.ingest,e),a=Date.now(),c=B(e,"collector.push","collector","in",s,a,i);c.inEvent=r,(0,D.emitStep)(e,c);try{const t=await n(r,o),c=Date.now(),u=B(e,"collector.push","collector","out",s,c,i);return u.durationMs=c-a,u.outEvent=t,(0,D.emitStep)(e,u),t}catch(t){const n=Date.now(),o=B(e,"collector.push","collector","error",s,n,i);throw o.durationMs=n-a,o.error=W(t),(0,D.emitStep)(e,o),t}}}function Gt(e={}){const t=e.maxEntries??1e4,n=e.lowWaterMark??.8,o=e.sweepIntervalMs??6e4,r=Math.floor(t*n),s=new Map,i={hits:0,misses:0,populates:0,writes:0,deletes:0,evictions_entries:0,evictions_ttl:0};let a;return o>0&&(a=setInterval(function(){const e=Date.now();let t=0;for(const[n,o]of s)void 0!==o.expires&&o.expires<=e&&(s.delete(n),t++);i.evictions_ttl+=t},o),a&&"function"==typeof a.unref&&a.unref()),{type:"memory",config:{},get(e){const t=s.get(e);if(t)return void 0!==t.expires&&t.expires<=Date.now()?(s.delete(e),i.evictions_ttl++,void i.misses++):(s.delete(e),s.set(e,t),i.hits++,t.value);i.misses++},set(e,n,o){const a=!s.has(e);a||s.delete(e),s.set(e,{value:n,expires:void 0!==o?Date.now()+o:void 0}),i.writes++,a&&i.populates++,s.size>t&&function(){if(s.size<=t)return;const e=s.size-r;let n=0;for(const t of s.keys()){if(n>=e)break;s.delete(t),n++}i.evictions_entries+=n}()},delete(e){s.delete(e)&&i.deletes++},get counters(){return{...i}},destroy(){void 0!==a&&(clearInterval(a),a=void 0),s.clear()}}}function Nt(e,t){const{cacheConfig:n,cacheStore:o,namespace:r,logger:s,storeId:i,collector:a}=t,c=(e,t)=>{if(!a)return;const n=B(a,`store.${i}`,"store","in","");n.meta={op:"cache",cached:"hit"===t,status:t,key:e},(0,R.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,R.compileMatcher)(e.match):()=>!0,ttl:e.ttl})),l=e=>`${r}:${e}`;function f(e,t){const n=void 0===t?{key:e}:{key:e,value:t};return d.find(e=>e.match(n))}const p=new Map;return{type:e.type,config:e.config,setup:e.setup,get counters(){return{...u}},async get(t){const n=l(t),r=await o.get(n),s=(0,R.readCacheEnvelope)(r);if(void 0!==s){if(!("expired"in s))return u.hits++,c(t,"hit"),s.value;try{await o.delete(n)}catch(e){g("delete",t,e)}}const i=p.get(n);if(i)return u.inflight_dedups++,c(t,"hit"),i;u.misses++,c(t,"miss");const a=(async()=>{try{const r=await e.get(t);if(void 0===r)return;const s=f(t,r);if(s)try{const e=1e3*s.ttl;await o.set(n,(0,R.wrapCacheEnvelope)(r,e),e),u.populates++}catch(e){g("set",t,e)}return r}finally{p.delete(n)}})();return p.set(n,a),a},async set(t,n,r){u.writes++,await e.set(t,n,r);const s=f(t,n);if(s)try{const e=1e3*s.ttl;await o.set(l(t),(0,R.wrapCacheEnvelope)(n,e),e)}catch(e){g("set",t,e)}},async delete(t){u.deletes++,await e.delete(t);try{await o.delete(l(t))}catch(e){g("delete",t,e)}}};function g(e,t,n){const o=`store-cache(${i}): cache ${e} failed for "${t}"; backing succeeded, continuing`;s?s.warn(o,ie(n)):console.warn(o,n)}}function Vt(e,t,n){const o=`store.${n}`,r=(0,T.useHooks)(t.get,"StoreGet",e.hooks,e.logger),s=(0,T.useHooks)(t.set,"StoreSet",e.hooks,e.logger),i=(0,T.useHooks)(t.delete,"StoreDelete",e.hooks,e.logger);t.get=async t=>{const n=Date.now(),s=B(e,o,"store","in","",n);s.meta={op:"get",key:t},(0,T.emitStep)(e,s);try{const s=await r(t),i=Date.now(),a=B(e,o,"store","out","",i);return a.durationMs=i-n,a.meta={op:"get",key:t},(0,T.emitStep)(e,a),s}catch(r){const s=Date.now(),i=B(e,o,"store","error","",s);throw i.durationMs=s-n,i.meta={op:"get",key:t},i.error=W(r),(0,T.emitStep)(e,i),r}},t.set=async(t,n,r)=>{const i=Date.now(),a=B(e,o,"store","in","",i);a.meta={op:"set",key:t},(0,T.emitStep)(e,a);try{await s(t,n,r);const a=Date.now(),c=B(e,o,"store","out","",a);c.durationMs=a-i,c.meta={op:"set",key:t},(0,T.emitStep)(e,c)}catch(n){const r=Date.now(),s=B(e,o,"store","error","",r);throw s.durationMs=r-i,s.meta={op:"set",key:t},s.error=W(n),(0,T.emitStep)(e,s),n}},t.delete=async t=>{const n=Date.now(),r=B(e,o,"store","in","",n);r.meta={op:"delete",key:t},(0,T.emitStep)(e,r);try{await i(t);const r=Date.now(),s=B(e,o,"store","out","",r);s.durationMs=r-n,s.meta={op:"delete",key:t},(0,T.emitStep)(e,s)}catch(r){const s=Date.now(),i=B(e,o,"store","error","",s);throw i.durationMs=s-n,i.meta={op:"delete",key:t},i.error=W(r),(0,T.emitStep)(e,i),r}}}async function Qt(e){const t=(0,P.assign)({globalsStatic:{},sessionStatic:{},run:!0,queueMax:1e3},e,{merge:!1,extend:!1}),n={level:e.logger?.level,handler:e.logger?.handler},o=(0,P.createLogger)(n),r={...t.globalsStatic,...e.globals},s={allowed:!1,config:t,consent:e.consent||{},custom:e.custom||{},destinations:{},transformers:{},stores:{},globals:r,hooks:e.hooks||{},observers:new Set,logger:o,on:{},queue:[],preRunQueue:[],round:0,count:0,stateVersion:0,cellVersion:{},delivery:new WeakMap,session:void 0,status:{startedAt:Date.now(),in:0,out:0,failed:0,sources:{},destinations:{},dropped:{},connectionErrors:{},breakers:{}},timing:Date.now(),user:e.user||{},sources:{},pending:{destinations:{}},hasShutdown:!1,seenEvents:new Set,push:void 0,command:void 0,elb:void 0};var i,a;void 0!==e.name&&(s.name=e.name),void 0!==e.release&&(s.release=e.release),void 0!==e.next&&(t.next=e.next),s.push=Ht(s,e=>$t(s,e)),s.command=(i=s,a=zt,(0,M.useHooks)(async(e,t,n)=>await(0,M.tryCatchAsync)(async()=>await a(i,e,t,n),t=>{if(t instanceof M.FatalError)throw t;return i.status.failed++,i.logger.error("command failed",{...ie(t),command:e}),Pt({ok:!1})})(),"Command",i.hooks,i.logger)),s.elb=function(e){return async(t,n,o,r,s)=>{if("string"==typeof t&&t.startsWith("walker ")){const o=t.replace("walker ","");return e.command(o,n)}let i;if("string"==typeof t)i={name:t},n&&"object"==typeof n&&!Array.isArray(n)&&(i.data=n);else{if(!t||"object"!=typeof t||Array.isArray(t))return Pt({ok:!1});i={...t},n&&"object"==typeof n&&!Array.isArray(n)&&(i.data={...i.data||{},...n})}return o&&"object"==typeof o&&(i.context=o),r&&Array.isArray(r)&&(i.nested=r),s&&"object"==typeof s&&(i.custom=s),e.push(i)}}(s);const c=e.stores||{};return"undefined"==typeof __WALKEROS_STORES__||__WALKEROS_STORES__?(s.stores=await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t)){const{code:t,config:s={},env:i={}}=r,a=e.logger.scope("store").scope(o),c={collector:e,logger:a,id:o,config:s,env:i,reportError:ae(e,"store",o,a)},u=await t(c);n[o]=u}const o=t,r=function(e){const t={};for(const n of Object.keys(e))t[n]="WHITE";const n=[],o=[];function r(s){const i=t[s];if("BLACK"===i)return;if("GRAY"===i){const e=o.indexOf(s),t=o.slice(-1===e?0:e).concat(s).join(" -> ");throw new Error(`Cycle in cache.store chain: ${t}`)}t[s]="GRAY",o.push(s);const a=e[s].cache?.store;if(void 0!==a){if(!(a in e))throw new Error(`Store "${s}" cache.store references "${a}", which is not declared in flow.stores`);r(a)}o.pop(),t[s]="BLACK",n.push(s)}for(const n of Object.keys(e))"WHITE"===t[n]&&r(n);return n}(o);for(const t of r){const r=o[t].cache;if(!r)continue;let s,i;void 0!==r.store?(s=n[r.store],i=r.store):(n.__cache||(n.__cache=Gt()),s=n.__cache,i="__cache");const a=r.namespace??t;e.logger.scope("store-cache").scope(t).info(`store "${t}" caches with namespace "${a}:" via ${i}`),n[t]=Nt(n[t],{storeId:t,cacheConfig:r,cacheStore:s,namespace:a,logger:e.logger.scope("store-cache").scope(t),collector:e})}for(const[t,o]of Object.entries(n))"__cache"!==t&&Vt(e,o,t);return n}(s,c),function(e,t,n){const o=new Map;for(const[n,r]of Object.entries(e))t[n]&&o.set(r,t[n]);if(0!==o.size)for(const e of[n.transformers,n.destinations,n.sources])if(e)for(const t of Object.values(e))r(t.env);function r(e){if(e)for(const[t,n]of Object.entries(e))if("object"==typeof n&&null!==n){const r=o.get(n);r&&(e[t]=r)}}}(c,s.stores,e)):Object.keys(c).length>0&&o.warn("stores: not in this build, config ignored"),s.stores.__cache||(s.stores.__cache=Gt()),s.destinations=await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t))N(e,(0,b.stepId)("destination",o),r.config?.state??r.code.config?.state??r.state),r.config?.require?.length?e.pending.destinations[o]=r:n[o]=Dt(r);return n}(s,e.destinations||{}),s.transformers=await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t)){const{code:t,env:s={}}=r;if("undefined"==typeof __WALKEROS_VALIDATE__||__WALKEROS_VALIDATE__){const t=(0,x.validateStepEntry)(r,"Transformer");if(!t.ok){e.logger.warn(`Transformer ${o} invalid (${t.code}): ${t.reason}. Skipping.`);continue}}const{config:i}=ce(r,"before"),{config:a}=ce({...r,config:i},"next"),c=Object.keys(s).length>0?{...a,env:s}:a,{cache:u}=r,d=u?{...c,cache:u}:c,l=r.config?.state??r.state;N(e,(0,x.stepId)("transformer",o),l);const f=void 0!==l&&void 0===d.state?{...d,state:l}:d,p=e.logger.scope("transformer").scope(o),g={collector:e,logger:p,id:o,ingest:(0,x.createIngest)(o),config:f,env:s,reportError:ae(e,"transformer",o,p)},h=(0,x.getTransformerMapping)(r);for(const t of(0,x.getTransformerMappingWarnings)(r))e.logger.warn(`Transformer ${o}: ${t}`);const m=t??(e=>h?{type:"pass",config:e.config,push:async t=>{const n=await(0,x.processEventMapping)(t,h,e.collector);return!n.ignore&&{event:n.event}}}:{type:"pass",config:e.config,push:e=>({event:e})}),v=await m(g);void 0!==r.before&&void 0===v.config?.before&&(v.config={...v.config??{},before:r.before}),void 0!==r.next&&void 0===v.config?.next&&(v.config={...v.config??{},next:r.next}),void 0!==l&&void 0===v.config?.state&&(v.config={...v.config??{},state:l}),n[o]=v}return n}(s,e.transformers||{}),s}var Ft=globalThis;function Ut(e){try{const t=Ft.window;if(!t)return;t.localStorage.getItem(C.OBSERVE_STORAGE_KEY)===e&&t.localStorage.removeItem(C.OBSERVE_STORAGE_KEY)}catch{}}function Jt(e,t){return void 0===t?e:n=>e({...n,release:t})}async function Yt(e){const t=e??{},n=await Qt(t);if(t.observers)for(const e of t.observers)n.observers.add(e);"undefined"==typeof __WALKEROS_OBSERVE__||__WALKEROS_OBSERVE__?function(e,t){const n=t.observe;if(!n)return;const o=e.name??"default";if("binding"in n){const t=function(){const e=Ft.window,t=Ft.URLSearchParams;if(!e||!t)return null;try{const n=new t(e.location.search.replace(/^\?/,"")).getAll(C.OBSERVE_STORAGE_KEY);return n.length>0?n[n.length-1]??null:null}catch{return null}}(),r=t??function(){try{return Ft.window?.localStorage.getItem(C.OBSERVE_STORAGE_KEY)??null}catch{return null}}();if(!r)return;const s=(0,C.parseObserveCredential)(r);if(!s)return void(null===t?(e.logger.warn("observe: malformed stored credential cleared"),Ut(r)):e.logger.warn("observe: malformed credential ignored"));if(s.pb!==n.binding)return void e.logger.warn("observe: credential binding mismatch, credential ignored");let i;!function(e){try{Ft.window?.localStorage.setItem(C.OBSERVE_STORAGE_KEY,e)}catch{}}(r),null!==t&&function(){const e=Ft.window,t=Ft.URLSearchParams;if(e&&t)try{const n=e.location.href,o=n.indexOf("#"),r=o>=0?n.slice(o):"",s=o>=0?n.slice(0,o):n,i=s.indexOf("?"),a=i>=0?s.slice(0,i):s,c=new t(i>=0?s.slice(i+1):"");c.delete(C.OBSERVE_STORAGE_KEY);const u=c.toString();e.history.replaceState({},"",`${a}${u?`?${u}`:""}${r}`)}catch{}}();const a=(0,C.createBatchedPoster)({url:`${n.url}/ingest/${s.ses}`,token:s.secret,headers:{"X-Walkeros-Binding":n.binding},onStatus:t=>{401===t&&(Ut(r),i&&e.observers.delete(i))}});i=(0,C.createTelemetryObserver)(function(e,t){return void 0===t?e:n=>e({...n,flowId:t})}(Jt(a,e.release),n.flowId),{flowId:n.flowId??o,...void 0!==n.level?{level:n.level}:{},...void 0!==n.sample?{sample:n.sample}:{}}),e.observers.add(i);const c=n.level;return void(void 0!==c&&(e.observeLevel=()=>c))}if("off"===n.level)return;const r=n.level;void 0!==r&&(e.observeLevel=()=>r),e.observers.add((0,C.createTelemetryObserver)(Jt((0,C.createBatchedPoster)({url:`${n.url}/ingest/${n.sessionId}`,token:n.token}),e.release),{flowId:o,level:n.level,sample:n.sample}))}(n,t):t.observe&&n.logger.warn("observe: not in this build, config ignored"),await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t)){const t=await Ie(e,o,r);if(!t)continue;const s=r.config?.require;t.config={...t.config,init:!1,...s?{require:[...s]}:{}},n[o]=t}Object.assign(e.sources,n);for(const t of Object.keys(n)){const n=e.sources[t];let o=!1;n.init&&await(0,I.tryCatchAsync)(n.init.bind(n),n=>{if(n instanceof I.FatalError)throw n;o=!0,e.status.failed++,e.logger.scope("source").error("source init failed",{sourceId:t,...ie(n)})})(),o||(n.config.init=!0,_e(n)&&await qe(e,n,t))}return await xe(e),n}(n,t.sources||{});const{consent:o,user:r,globals:s,custom:i}=t;o&&await n.command("consent",o),r&&await n.command("user",r),s&&await n.command("globals",s),i&&await n.command("custom",i),n.config.run&&await n.command("run");let a=n.elb;const c=Object.values(n.sources),u=c.find(e=>e.config.primary);return u?a=u.push:c.length>0&&(a=c[0].push),{collector:n,elb:a}}var Xt=async e=>{let t;return{get flow(){return t},trigger:()=>async n=>{if(!t){const n=await Yt(e);t={collector:n.collector,elb:n.elb}}const o=function(e){for(const t of Object.values(e.sources||{}))if("lambda"===t.type)return t}(t.collector);if(!o)throw new Error("Lambda source not found in collector");const r={awsRequestId:`test-${Date.now()}`},s=o.push,i=await s(n,r);let a;try{a=JSON.parse(i.body||"{}")}catch{a=i.body}const c={};if(i.headers)for(const[e,t]of Object.entries(i.headers))void 0!==t&&(c[e]=String(t));return{statusCode:i.statusCode,body:a,headers:c}}}};function Zt(e){return async t=>{const n={...t};if(n.body&&"string"==typeof n.body){const e=JSON.parse(n.body);e.name&&!e.event&&(n.body=JSON.stringify({...e,event:e.name,name:void 0}))}return e.push(n,{awsRequestId:"test-req"})}}var en={};s(en,{createTrigger:()=>mn,env:()=>tn,step:()=>dn});var tn={};s(tn,{moduleMockEnv:()=>cn,push:()=>an,simulation:()=>un});var nn=()=>{},on={error:nn,warn:nn,info:nn,debug:nn,throw:e=>{throw"string"==typeof e?new Error(e):e},json:nn,scope:()=>on},rn=()=>()=>Promise.resolve({ok:!0});function sn(){return{get push(){return rn()},get command(){return rn()},get elb(){return rn()},logger:on}}var an=Object.assign(sn(),{AWS:{SQSClient:class{constructor(e){this.config=e}config;async send(e){return function(e){if(!("input"in e))return!1;const{input:t}=e;return"object"==typeof t&&null!==t&&"WaitTimeSeconds"in t}(e)&&await new Promise(e=>setTimeout(e,100)),{$metadata:{},QueueUrl:"https://sqs.eu-central-1.amazonaws.com/000000000000/walkeros-events",Attributes:{QueueArn:"arn:aws:sqs:eu-central-1:000000000000:walkeros-events"},Messages:[]}}destroy(){}}}}),cn=sn(),un=["call:AWS.SQSClient.send"],dn={};s(dn,{decoderText:()=>pn,malformedJson:()=>gn,orderComplete:()=>fn,pageView:()=>ln});var ln={title:"Page view from SQS",description:"A standard SQS message body containing a walker elb event payload as JSON.",in:{MessageId:"m-1",Body:JSON.stringify({event:"page view",data:{title:"Documentation",url:"https://example.com/docs"}})},out:[["message.ack","m-1"]]},fn={title:"Order complete from SQS",description:"Order complete event flowing through the long-poll loop.",in:{MessageId:"m-2",Body:JSON.stringify({event:"order complete",data:{id:"ORD-500",total:199.99,currency:"EUR"}})},out:[["message.ack","m-2"]]},pn={title:"Text decoder",description:'When decoder is "text", the body string flows under data.payload.',in:{MessageId:"m-3",Body:"raw text payload"},out:[["message.ack","m-3"]]},gn={title:"Malformed JSON nacks",description:"Default decoder is JSON. A malformed body throws DecoderError; the source nacks (skips DeleteMessage) so the message redelivers.",in:{MessageId:"m-4",Body:"{not json"},out:[["message.nack","m-4"]]};function hn(e){if("object"!=typeof e||null===e)return!1;const t=e;return"sqs"===t.type&&"function"==typeof t.push}var mn=async e=>{let t;return{get flow(){return t},trigger:()=>async n=>{if(!t){const n=await Yt(e);t={collector:n.collector,elb:n.elb}}const o=function(e){for(const t of Object.values(e.sources??{}))if(hn(t))return t}(t.collector);if(!o)throw new Error("sqs source not registered in collector, ensure it is configured in sources");const r={MessageId:n.MessageId,Body:n.Body,ReceiptHandle:n.ReceiptHandle,Attributes:n.Attributes,MessageAttributes:n.MessageAttributes},s=await o.push(r),i=[];return s&&"object"==typeof s&&(s.acked&&i.push(["message.ack",n.MessageId]),s.nacked&&i.push(["message.nack",n.MessageId])),i}}},vn=require("@walkeros/core/dev"),yn=require("@walkeros/core/dev"),wn=require("@walkeros/core/dev"),bn=wn.z.enum(["GET","POST","PUT","PATCH","DELETE","OPTIONS","HEAD"]),kn=wn.z.union([wn.z.string(),wn.z.array(wn.z.string()),wn.z.literal("*")]),Sn=wn.z.object({origin:kn.describe("Allowed origins (* for all, URL string, or array of URLs)").optional(),methods:wn.z.array(bn).describe("Allowed HTTP methods").optional(),headers:wn.z.array(wn.z.string()).describe("Allowed request headers").optional(),credentials:wn.z.boolean().describe("Allow credentials (cookies, authorization headers)").optional(),maxAge:wn.z.number().int().positive().describe("Preflight cache duration in seconds").optional()}),En=yn.z.object({cors:yn.z.union([yn.z.boolean(),Sn]).describe("CORS configuration: false = disabled, true = allow all origins, object = custom configuration").default(!0),timeout:yn.z.number().int().positive().max(9e5).describe("Request timeout in milliseconds (max: 900000 for Lambda)").default(3e4),enablePixelTracking:yn.z.boolean().describe("Enable GET requests with 1x1 transparent GIF response for pixel tracking").default(!0),maxBatchSize:yn.z.number().int().min(1).describe("Maximum number of events accepted in a single batch request").default(100),healthPath:yn.z.string().describe("Health check endpoint path (e.g., /health)").default("/health")}),On=(0,vn.zodToSchema)(En),qn=require("@walkeros/core/dev"),_n=require("@walkeros/core/dev"),In=_n.z.object({queueName:_n.z.string().min(1).describe("SQS queue short name (like walkeros-events). Required for both setup and runtime poll."),region:_n.z.string().describe("AWS region (like eu-central-1). Default: eu-central-1.").optional(),queueUrl:_n.z.string().url().describe("Optional pre-resolved queue URL. When set, init skips the GetQueueUrl lookup.").optional(),client:_n.z.any().describe("Pre-configured AWS SQSClient instance. Bypasses construction when supplied.").optional(),config:_n.z.any().describe("AWS SDK SQSClientConfig (credentials, endpoint overrides, retries).").optional(),decoder:_n.z.enum(["json","text","raw"]).describe("Decoder for the message body. json (default) parses JSON, text forwards UTF-8, raw forwards a Buffer.").optional(),maxMessages:_n.z.number().int().min(1).max(10).describe("SQS receive batch size. Cap 10. Default: 10.").optional(),waitTimeSeconds:_n.z.number().int().min(0).max(20).describe("Long-poll duration in seconds. Cap 20. Default: 20.").optional(),visibilityTimeout:_n.z.number().int().nonnegative().describe("Per-receive visibility timeout override. Default: queue-configured value.").optional(),shutdownTimeoutMs:_n.z.number().int().positive().describe("Graceful shutdown timeout in milliseconds. Default: 30000. After this window, destroy() force-closes.").optional(),onPushError:_n.z.enum(["nack","ack"]).describe("Behavior when forwarding to the collector throws. nack (default) skips DeleteMessage so the message redelivers; ack drops it.").optional()}),xn=require("@walkeros/core/dev"),An=xn.z.record(xn.z.string(),xn.z.string()),jn=xn.z.object({region:xn.z.string().min(1).describe("AWS region.").optional(),fifoQueue:xn.z.boolean().describe("FIFO queue with content-based deduplication. Auto-appends .fifo suffix to the queue name.").optional(),visibilityTimeoutSeconds:xn.z.number().int().nonnegative().describe("Visibility timeout in seconds. Default: 30.").optional(),messageRetentionSeconds:xn.z.number().int().positive().describe("Message retention period in seconds. Default: 345600 (4 days).").optional(),maximumMessageSize:xn.z.number().int().min(1024).max(262144).describe("Max message size in bytes. Default: 262144 (256 KB).").optional(),kmsMasterKeyId:xn.z.string().describe("KMS key alias or ID for at-rest encryption.").optional(),deadLetterQueue:xn.z.object({arn:xn.z.string().describe("ARN of an existing DLQ. Mutually exclusive with create: true.").optional(),create:xn.z.boolean().describe("Create a sibling DLQ named <queueName>-dlq. Default: false.").optional(),maxReceiveCount:xn.z.number().int().min(1).max(1e3).describe("Max receive count before message goes to DLQ. Default: 5.").optional()}).describe("Optional dead-letter queue.").optional(),tags:An.describe("Tags applied to the queue (and inherited by an auto-created DLQ).").optional(),subscribeToSnsTopic:xn.z.object({topicArn:xn.z.string().min(1).describe("Topic ARN to subscribe to."),rawMessageDelivery:xn.z.boolean().describe("Deliver SNS messages without the SNS envelope.").optional(),filterPolicy:xn.z.record(xn.z.string(),xn.z.unknown()).describe("SNS filter policy applied at subscription level.").optional()}).describe("Optional SNS topic subscription. Creates the subscription and the matching queue policy.").optional()}),Cn=(0,qn.zodToSchema)(In),Pn=(0,qn.zodToSchema)(jn),Dn={};s(Dn,{CorsOptionsSchema:()=>Sn,CorsOrigin:()=>kn,HttpMethod:()=>bn,SettingsSchema:()=>En,settings:()=>On,sqsSettings:()=>Cn,sqsSetup:()=>Pn});var Mn={sourceLambda:a,sourceSqs:en},Tn={sourceLambda:{settings:On},sourceSqs:{settings:Cn,setup:Pn}};//# sourceMappingURL=dev.js.map
package/dist/dev.mjs CHANGED
@@ -1 +1 @@
1
- var e=Object.defineProperty,t=(t,n)=>{for(var o in n)e(t,o,{get:n[o],enumerable:!0})},n={};t(n,{createTrigger:()=>mo,env:()=>o,step:()=>c,trigger:()=>vo});var o={};t(o,{push:()=>a});var r=()=>()=>Promise.resolve({ok:!0}),s=()=>{},i={error:s,warn:s,info:s,debug:s,throw:e=>{throw"string"==typeof e?new Error(e):e},json:s,scope:()=>i},a={get push(){return r()},get command(){return r()},get elb(){return r()},logger:i},c={};t(c,{apiGatewayV1Post:()=>d,lambdaGet:()=>l,lambdaPost:()=>u,lambdaPostForwardsSource:()=>f});var u={title:"Lambda POST",description:"An API Gateway v2 HTTP POST with a JSON body is converted into a walker elb event.",trigger:{type:"POST"},in:{version:"2.0",requestContext:{http:{method:"POST",path:"/collect"},requestId:"req-123"},body:JSON.stringify({name:"page view",data:{title:"Home"}}),isBase64Encoded:!1},out:[["elb",{name:"page view",data:{title:"Home"}}]]},d={title:"API Gateway v1 POST",description:"A REST API Gateway v1 POST request with a JSON body is converted into a walker elb event.",trigger:{type:"POST"},in:{httpMethod:"POST",path:"/collect",requestContext:{requestId:"req-789",identity:{sourceIp:"203.0.113.42"}},queryStringParameters:null,body:JSON.stringify({name:"page view",data:{title:"Home"}}),isBase64Encoded:!1},out:[["elb",{name:"page view",data:{title:"Home"}}]]},l={title:"Lambda GET",description:"An API Gateway v2 HTTP GET with query parameters is parsed into an elb event payload.",trigger:{type:"GET"},in:{version:"2.0",requestContext:{http:{method:"GET",path:"/collect"},requestId:"req-456"},rawQueryString:"e=page+view&d=%7B%22title%22%3A%22Home%22%7D",isBase64Encoded:!1},out:[["elb",{e:"page view",d:'{"title":"Home"}'}]]},f={title:"Lambda POST with provenance",description:"A POST body carrying a source map is forwarded in full, so release and trace provenance survive the crossing.",trigger:{type:"POST"},in:{version:"2.0",requestContext:{http:{method:"POST",path:"/collect"},requestId:"req-321"},body:JSON.stringify({name:"page view",data:{title:"Home"},source:{release:{web:"r1"}}}),isBase64Encoded:!1},out:[["elb",{name:"page view",data:{title:"Home"},source:{release:{web:"r1"}}}]]};import{assign as p}from"@walkeros/core";import{createIngest as g}from"@walkeros/core";import{assign as h,createMappingRoot as m,clone as v,compileCache as w,checkCache as y,storeCache as b,createIngest as k,debounce as S,emitStep as O,getId as E,getGrantedConsent as q,isDefined as _,isFunction as x,isObject as A,OBSERVE_ENV_KEY as I,processEventMapping as P,stepId as j,tryCatchAsync as D,useHooks as M}from"@walkeros/core";import{emitStep as T}from"@walkeros/core";import{applyState as C,compileState as R}from"@walkeros/core";import{observeEnv as $}from"@walkeros/core";import{isArray as B,FatalError as W}from"@walkeros/core";import{tryCatch as L,tryCatchAsync as K}from"@walkeros/core";import{stepId as z}from"@walkeros/core";import{createIngest as H,FatalError as N,getMappingValue as Q,getSpanId as G,parseTraceparent as F,isScope as V,tryCatchAsync as U,compileCache as J,checkCache as Y,storeCache as X,applyUpdate as Z,createMappingRoot as ee,stepId as te}from"@walkeros/core";import{advanceChain as ne,clone as oe,createIngest as re,deriveSpanId as se,emitStep as ie,FatalError as ae,isChainContinuation as ce,isObject as ue,startChain as de,stepId as le,tryCatchAsync as fe,useHooks as pe,compileCache as ge,checkCache as he,storeCache as me,createMappingRoot as ve,validateStepEntry as we,processEventMapping as ye,getTransformerMapping as be,getTransformerMappingWarnings as ke}from"@walkeros/core";import{assign as Se,getSpanId as Oe,getTraceId as Ee,InvalidEventError as qe,isFunction as _e,isString as xe}from"@walkeros/core";import{isObject as Ae}from"@walkeros/core";import{OBSERVE_STORAGE_KEY as Ie,createBatchedPoster as Pe,createTelemetryObserver as je,parseObserveCredential as De}from"@walkeros/core";import{assign as Me,createLogger as Te}from"@walkeros/core";import{createIngest as Ce,emitStep as Re,FatalError as $e,getGrantedConsent as Be,getSpanId as We,InvalidEventError as Le,processEventMapping as Ke,tryCatchAsync as ze,useHooks as He}from"@walkeros/core";import{FatalError as Ne,useHooks as Qe,tryCatchAsync as Ge}from"@walkeros/core";import{emitStep as Fe,useHooks as Ve}from"@walkeros/core";import{compileMatcher as Ue,emitStep as Je,readCacheEnvelope as Ye,wrapCacheEnvelope as Xe}from"@walkeros/core";var Ze={Action:"action",Actions:"actions",Config:"config",Consent:"consent",Context:"context",Custom:"custom",Destination:"destination",Elb:"elb",Globals:"globals",Hook:"hook",Init:"init",Link:"link",On:"on",Prefix:"data-elb",Ready:"ready",Run:"run",Scoped:"_",Session:"session",Shutdown:"shutdown",User:"user",Walker:"walker"};function et(e,t,n){return{traceId:e.source?.trace??t?._meta.trace??n.trace,sourceId:t?._meta.path[0],parentEventId:t?._meta.parentEventId}}function tt(e,t,n,o,r,s=Date.now(),i){const a={flowId:e.name??"default",stepId:t,stepType:n,phase:o,eventId:r,timestamp:new Date(s).toISOString(),elapsedMs:s-e.status.startedAt};return i?.traceId&&(a.traceId=i.traceId),i?.sourceId&&(a.sourceId=i.sourceId),i?.parentEventId&&(a.parentEventId=i.parentEventId),a}function nt(e){return e instanceof Error?{name:e.name,message:e.message}:{message:String(e)}}function ot(e,t,n,o){e.status.in++;const r=tt(e,"collector.push","collector","skip","string"==typeof t.id?t.id:"",Date.now(),et(t,n,e));r.skipReason=o.reason,"consent"===o.reason?(r.consent={...o.consent},r.meta={at:o.at,required:{...o.required}}):r.meta={by:o.by??"route",at:o.at},T(e,r)}function rt(e,t){return e.storeId&&t.stores[e.storeId]?t.stores[e.storeId]:t.stores.__cache}function st(e){return("undefined"==typeof __WALKEROS_STATE__||__WALKEROS_STATE__)&&e?R(e):void 0}function it(e,t,n,o){return"undefined"==typeof __WALKEROS_STATE__||__WALKEROS_STATE__?C(t,t=>{return o=e,(n=t)?o.stores[n]:o.stores.__cache;var n,o},n,e,o):Promise.resolve(n)}function at(e,t,n){"undefined"==typeof __WALKEROS_STATE__||__WALKEROS_STATE__||void 0===n||e.logger.warn(`state: not in this build, ${t} state ignored`)}function ct(e,t,n){if(null===e||"object"!=typeof e)return e;if(n>=8||!function(e){if(Array.isArray(e))return!0;const t=Object.getPrototypeOf(e);return t===Object.prototype||null===t}(e))return e;const o=t.get(e);if(void 0!==o)return o;if(Array.isArray(e)){const o=[];t.set(e,o);for(const r of e)o.push(ct(r,t,n+1));return o}const r={};t.set(e,r);for(const[o,s]of Object.entries(e))r[o]="function"==typeof s?s:ct(s,t,n+1);return r}function ut(e,t){try{return e[t]}catch{return"[unreadable]"}}function dt(e){const t=new WeakSet,n=(e,o)=>{if(null===e)return null;if("function"==typeof e)return"[function]";if("string"==typeof e||"boolean"==typeof e)return e;if("number"==typeof e)return Number.isFinite(e)?e:null;if("bigint"==typeof e)return String(e);if("object"!=typeof e)return;const r=e;if(t.has(r))return"[circular]";if(o>=6)return"[truncated]";let s;t.add(r);try{if(Array.isArray(r))s=r.map(e=>n(e,o+1));else if(function(e){const t=Object.getPrototypeOf(e);return t===Object.prototype||null===t}(r)){const e={};for(const t of Object.keys(r))e[t]=n(ut(r,t),o+1);s=e}else s=function(e){try{return String(e)}catch{return"[object]"}}(r)}catch{s="[unreadable]"}return t.delete(r),s};return e.map(e=>n(e,0))}function lt(e,t){("undefined"==typeof __WALKEROS_OBSERVE__||__WALKEROS_OBSERVE__)&&t&&t.length>0&&(e.calls=t.map(e=>({fn:e.fn,args:dt(e.args),ts:e.ts})))}function ft(e){if(void 0===e)throw new Error("Collector.Config.queueMax is undefined; defaults must be seeded by collector()");return e}function pt(e,t,n,o){if(!Number.isFinite(n.max)||n.max<=0)throw new Error(`pushBounded: max must be > 0 (got ${n.max})`);if("dropNewest"===(n.onOverflow??"dropOldest"))return e.length>=n.max?(o&&o([t]),{appended:!1,dropped:1}):(e.push(t),{appended:!0,dropped:0});const r=[];for(;e.length>=n.max;)r.push(e.shift());return e.push(t),r.length>0&&o&&o(r),{appended:!0,dropped:r.length}}var gt=new WeakMap;function ht(e,t,n,o){gt.get(e)||(gt.set(e,!0),t.warn(n,o))}function mt(e){gt.delete(e)}var vt=()=>Date.now();function wt(e){if(void 0!==e)return"number"==typeof e?{threshold:e,cooldown:3e4}:{threshold:e.threshold??5,cooldown:e.cooldown??3e4}}function yt(e,t,n,o,r){if("partial"===n)return;const s=((i=e)[a=t]||(i[a]={state:"closed",consecutiveFailures:0}),i[a]);var i,a;return"success"===n?(s.consecutiveFailures=0,s.state="closed",s.probing=!1,void(s.openUntil=void 0)):(s.consecutiveFailures+=1,"half-open"===s.state?(s.state="open",s.probing=!1,void(s.openUntil=vt()+r)):void(s.consecutiveFailures>=o&&(s.state="open",s.probing=!1,s.openUntil=vt()+r)))}function bt(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 kt(e,t,n,o){e.dropped[t]||(e.dropped[t]={});const r=e.dropped[t];return r[n]=(r[n]??0)+o,r[n]}function St(e){const t={error:e instanceof Error?e.message:String(e)};if(e instanceof Error&&e.name&&"Error"!==e.name&&(t.name=e.name),"object"==typeof e&&null!==e&&"code"in e){const n=e;"number"!=typeof n.code&&"string"!=typeof n.code||(t.code=n.code)}return t}function Ot(e,t,n,o,r){const s=z(t,n);return(t,i)=>{try{if(i)return r?function(e,t,n,o,r,s){const i=t.dlq=t.dlq||[],a={max:t.config.dlqMax??100},c=pt(i,[o,r],a);if(c.dropped>0){const t=kt(e.status,z("destination",n),"dlq",c.dropped);ht(i,s,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:n,cap:a.max,droppedCount:t})}else i.length<a.max&&mt(i);const u=bt(e,n);u.failed++,u.dlqSize=i.length,e.status.failed++;const d=wt(t.config.breaker);if(d){const o=t.config.id||n;yt(e.status.breakers,z("destination",o),"transport-failure",d.threshold,d.cooldown)}}(e,r,n,i,t,o):e.status.failed++,void o.error("report error",{...St(t),event:i.name});e.status.connectionErrors[s]=(e.status.connectionErrors[s]??0)+1,o.error("connection error",St(t))}catch{}}}function Et(e,t){const n=e.config||{},o=e[t];return void 0!==o?{config:{...n,[t]:o},chainValue:o}:{config:n,chainValue:void 0}}async function qt(e,t,n){if(t.init&&!t.config.init){const o=t.type||"unknown",r=e.logger.scope(`transformer:${o}`),s={collector:e,logger:r,id:n,ingest:re(n),config:t.config,env:Rt(t.config.env),reportError:Ot(e,"transformer",n,r)};r.debug("init");const i=await pe(t.init,"TransformerInit",e.hooks,e.logger)(s);if(!1===i)return!1;t.config={...i||t.config,env:i?.env||t.config.env,init:!0},r.debug("init done")}return!0}async function _t(e,t,n,o,r,s){const i=t.type||"unknown",a=e.logger.scope(`transformer:${i}`),c={collector:e,logger:a,id:n,ingest:r,config:t.config,env:{...Rt(t.config.env),...s?{respond:s}:{}},reportError:Ot(e,"transformer",n,a)};a.debug("push",{event:o.name});const u="string"==typeof o.id?o.id:"",d=et(o,r,e),l=Date.now(),f=tt(e,le("transformer",n),"transformer","in",u,l,d);f.inEvent=o,ie(e,f);try{const r=await pe(t.push,"TransformerPush",e.hooks,e.logger)(o,c),s=Date.now(),i=tt(e,le("transformer",n),"transformer","out",u,s,d);return i.durationMs=s-l,i.outEvent=r,ie(e,i),a.debug("push done"),r}catch(t){const o=Date.now(),r=tt(e,le("transformer",n),"transformer","error",u,o,d);throw r.durationMs=o-l,r.error=nt(t),ie(e,r),t}}function xt(e){return"string"==typeof e.id?e.id:""}function At(e,t){const n=xt(e);return""!==n&&""===xt(t)?{...t,id:n}:t}function It(e,t,n,o){const r=(a=n,{...a,_meta:{...a._meta,path:[...a._meta.path]}}),s=oe(t),i=xt(e);var a;if(""===i)return{event:s,ingest:r};r._meta.parentEventId=i;const c=xt(s);return""!==c&&c!==i||(s.id=se(i,o)),{event:s,ingest:r}}function Pt(e,t){return{copies:e,respond:t}}function jt(e,t){if(void 0===t)return e.rest;const n=e.ownNext?e.rest.slice(1):e.rest;return[{route:t,ancestry:e.ancestry},...n]}async function Dt(e,t,n){const o=await Promise.all(t.map((t,n)=>fe(Mt,t=>(e.collector.logger.scope("transformer:fork").error(`fork ${n} failed`,St(t)),{copies:[]}))(e,t))),r=[];let s,i=n,a=o.length>0;return o.forEach((e,n)=>{void 0!==t[n].respond&&e.respond&&(i=e.respond),e.stopped||(a=!1),e.stopped||0===e.copies.length?void 0===s&&(s=e.droppedBy):r.push(...e.copies)}),0===r.length?{copies:r,respond:i,...a?{stopped:!0}:{},...void 0!==s?{droppedBy:s}:{}}:Pt(r,i)}async function Mt(e,t){const{ingest:n}=t;let{stack:o,event:r,respond:s}=t,i=t.resume;for(;;){let t,a;if(i)t=i.member,a=i,i=void 0;else{const i=ne(o,ve(n,r),e.transformers);if("done"===i.kind)return Pt([{event:r,ingest:n}],s);if("stop"===i.kind)return{copies:[],respond:s,stopped:!0,...void 0!==i.owner?{droppedBy:i.owner}:{}};if("fork"===i.kind){const t=r;return Dt(e,i.branches.map((e,o)=>({stack:e,...It(t,t,n,o),respond:void 0})),s)}const a=e.transformers[i.id];t={id:i.id,ancestry:i.ancestry,rest:i.rest,ownNext:!!a&&void 0!==a.config.next}}const c=await Tt(e,t,r,n,s,a);if("halt"===c.kind)return c.result;if("fork"===c.kind)return Dt(e,c.copies,s);r=c.event,s=c.respond,o=c.stack}}async function Tt(e,t,n,o,r,s){const{collector:i,transformers:a,chainContext:c}=e,u=t.id,d=a[u];let l=n,f=r;const p=(e=t.rest)=>({kind:"continue",event:At(n,l),respond:f,stack:e}),g=e=>({kind:"halt",result:e});if(!d)return i.logger.warn(`Transformer not found: ${u}`),p();const h=d.config?.cache,m=h?ge(h):void 0,v=m?rt(m,i):void 0;let w=s?.cacheMiss;if(!s){if(o._meta.path.length>256)return i.logger.error(`Max path length exceeded at ${u}`),g({copies:[],respond:f});if(o._meta.hops++,o._meta.path.push(u),!await fe(qt,e=>{if(e instanceof ae)throw e;return i.status.failed++,i.logger.scope(`transformer:${d.type||"unknown"}`).error("transformer init failed",{transformer:u,...St(e)}),!1})(i,d,u))return g({copies:[],respond:f});if(c&&void 0!==d.config?.chainMocks?.[c]){const e=d.config.chainMocks[c];return i.logger.scope(`transformer:${d.type||"unknown"}`).debug("chainMock",{chain:c}),l=e,p()}if(void 0!==d.config?.mock)return i.logger.scope(`transformer:${d.type||"unknown"}`).debug("mock"),l=d.config.mock,p();if(d.config?.disabled)return p();if(m&&v){const e=await he(m,v,ve(o,l));if("HIT"===e?.status&&e.value)return l=e.value,m.stop?g({copies:[{event:At(n,l),ingest:o}],respond:f,stopped:!0}):p();"MISS"===e?.status&&(w={key:e.key,ttl:e.rule.ttl})}if(void 0!==d.config.before){const e=await async function(e,t,n,o,r,s,i){const a=t[n],c=a?a.config.before:void 0,u=await Ct(e,t,c,o,r,s,i);return u.stopped&&0===u.copies.length&&!u.droppedBy?{...u,droppedBy:n}:u}(i,a,u,l,o,f,c),n=e.respond??f;if(0===e.copies.length||e.stopped)return g({...e,respond:n});f=n;const[r]=e.copies;if(e.copies.length>1||r.ingest!==o){const n={member:t,cacheMiss:w};return{kind:"fork",copies:e.copies.map(e=>({stack:t.rest,event:e.event,ingest:e.ingest,respond:void 0,resume:n}))}}l=r.event}}const y=st(d.config?.state),b=y?.filter(e=>"get"===e.mode),k=y?.filter(e=>"set"===e.mode),S=async e=>k&&0!==k.length?it(i,k,e,o):e;b&&b.length>0&&(l=await it(i,b,l,o));const O=await fe(_t,e=>(i.status.failed++,i.logger.scope(`transformer:${d.type||"unknown"}`).error("Push failed",St(e)),!1))(i,d,u,l,o,f);if(!1===O)return g({copies:[],respond:f,droppedBy:u});if(Array.isArray(O)&&1!==O.length){if(0===O.length)return g({copies:[],respond:f});const e=l,n=[];for(let r=0;r<O.length;r++){const s=O[r],i=await S(s.event||e);n.push({stack:jt(t,s.next),...It(e,i,o,r),respond:f})}return{kind:"fork",copies:n}}const E=Array.isArray(O)?O[0]:O;let q;return E&&"object"==typeof E&&(E.respond&&(f=E.respond),E.event&&(l=E.event),q=E.next),l=await S(l),w&&v&&me(v,w.key,l,w.ttl),p(jt(t,q))}async function Ct(e,t,n,o,r,s,i){const a=r??re("string"==typeof n?n:"chain");return void 0===n?Pt([{event:o,ingest:a}],s):(i&&(a._meta.chainPath=i),Mt({collector:e,transformers:t,chainContext:i},{stack:ce(n)?n:de(n),event:o,ingest:a,respond:s}))}function Rt(e){return e&&ue(e)?e:{}}var $t=1e4;function Bt(e){return"number"==typeof e&&e>0?e:$t}var Wt=class extends Error{constructor(e){super(e),this.name="DestinationTimeoutError"}};function Lt(e,t,n){let o;const r=new Promise((e,r)=>{o=setTimeout(()=>r(new Wt(n)),t)});return Promise.race([e,r]).finally(()=>{o&&clearTimeout(o)})}async function Kt(e,t,n){if(!t.on||!t.queueOn?.length)return;const o=t.queueOn;t.queueOn=[];const r=n||t.config?.id||"unknown";for(const{type:n,data:s}of o){if(Yt(n)&&!nn(e,t,n))continue;const o=t.on;let i=!1;await U(()=>Lt(Promise.resolve(o(n,s)),$t,`Source "${r}" on(${n}) did not settle within 10000ms`),t=>{if(t instanceof N)throw t;t instanceof Wt?i=!0:e.status.failed++,e.logger.scope("source").error("source on flush failed",{sourceId:r,type:n,...St(t)})})(),Yt(n)&&!i&&tn(e,t,n)}}function zt(e){return Boolean(e.config.init)&&!e.config.require?.length}async function Ht(e,t,n){const{code:o,config:r={},env:s={},primary:i,next:a,before:c,cache:u,terminus:d}=n,l=r.state??n.state,f=st(l);at(e,te("source",t),l);const p=u,g=p?J({...p,stop:p.stop??!0}):void 0,h=d??e.push,m=Boolean(d),v=async(n,o,s)=>{if(m)return h(n);let i;const u="string"==typeof n.id&&""!==n.id?n:{...n,id:G()};let d=[{event:u,ingest:s.ingest}];if(void 0!==c){const n=`source.${t}.before`,o=await Ct(e,e.transformers||{},c,u,s.ingest,s.respond,n);if(0===o.copies.length)return ot(e,u,s.ingest,{reason:"dropped",by:o.droppedBy,at:n}),Un({ok:!0,dropped:!0});if(o.stopped)return o.respond&&(s.respond=o.respond),{ok:!0};o.respond&&(s.respond=o.respond),d=o.copies}if(g){const t=rt(g,e);if(t){const n=ee(s.ingest),o=await Y(g,t,n);if(o){if("HIT"===o.status&&void 0!==o.value&&g.stop){let t=o.value;return o.rule.update&&(t=await Z(t,o.rule.update,{...n,cache:{status:"HIT"}},e)),s.respond?.(t),{ok:!0}}if("MISS"===o.status&&g.stop&&s.respond){const r=s.respond,a=o.rule.update,c={...n,cache:{status:"MISS"}},u=o.key,d=o.rule.ttl,l=n=>{X(t,u,n,d),a?i=(async()=>{const t=await Z(n,a,c,e);r(t)})():r(n)};s.respond=l}"MISS"!==o.status||g.stop||X(t,o.key,!0,o.rule.ttl)}}}f&&f.length>0&&(d=await Promise.all(d.map(async t=>({event:await it(e,f,t.event,t.ingest),ingest:t.ingest}))));let l={ok:!0};for(const e of d)l=await h(e.event,{...o,id:t,ingest:e.ingest,respond:s.respond,mapping:r,preChain:a});return i&&await i,l},w=async n=>{const o=H(t),s=F(V(n)?n?.headers?.traceparent:void 0);if(s&&(o._meta.trace=s.trace,o._meta.parentEventId=s.parentSpan),!r.ingest||void 0===n)return o;const i=await Q(n,r.ingest,{collector:e});return{...o,...i,_meta:o._meta}},y=e.logger.scope("source").scope(t),b={...s,push:async(e,n={})=>{const o={ingest:H(t),respond:void 0};return v(e,n,o)},command:e.command,sources:e.sources,elb:e.elb,logger:y},k={collector:e,logger:y,id:t,config:r,env:b,withScope:async(e,t,n)=>{const o={ingest:await w(e),respond:t};return n({...b,push:(e,t={})=>v(e,t,o),ingest:o.ingest,respond:o.respond})},reportError:Ot(e,"source",t,y)},S=await U(o,n=>{if(n instanceof N)throw n;e.status.failed++,e.logger.scope("source").error("source factory failed",{sourceId:t,...St(n)})})(k);if(!S)return;const O=S.type||"unknown",E=e.logger.scope(O).scope(t);return b.logger=E,i&&(S.config={...S.config,primary:i}),S}async function Nt(e){for(const[t,n]of Object.entries(e.sources)){if(zt(n))continue;const o=n.config.require;if(!o?.length)continue;const r=o.filter(t=>!Zt(e,t));r.length!==o.length&&(n.config.require=r,zt(n)&&await Kt(e,n,t))}for(const[t,n]of Object.entries(e.pending.destinations)){if(!e.pending.destinations[t]||e.destinations[t])continue;const o=n.config?.require;if(!o)continue;const r=o.filter(t=>!Zt(e,t));if(n.config&&(n.config.require=r),r.length>0)continue;delete e.pending.destinations[t];const s=Jn(n);!1!==s.config.queue&&(s.queuePush=[...e.queue]),e.destinations[t]=s,await Mn(e,s,t)}}function Qt(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 Gt=!1;function Ft(){Gt||(Gt=!0,"undefined"!=typeof console&&"function"==typeof console.warn&&console.warn("walkerOS: ignored an on-dispatch call with a non-collector argument"))}function Vt(e,t,n,o){if(n instanceof W)throw n;e.logger.scope("on").error("on callback failed",{kind:t,...o,...St(n)})}var Ut=["consent","user","globals","custom"];function Jt(e){return Ut.includes(e)}function Yt(e){return Jt(e)}function Xt(e,t){return Jt(t)&&Object.keys(e[t]).length>0}function Zt(e,t){if(Jt(t))return Xt(e,t);switch(t){case Ze.Run:case Ze.Ready:return!0===e.allowed;default:return e.seenEvents.has(String(t))}}function en(e,t){return e.cellVersion?.[String(t)]??0}function tn(e,t,n){qn(e,t,n,en(e,n))}function nn(e,t,n){return e.allowed&&en(e,n)>function(e,t,n){const o=e.delivery.get(t),r=o?.[String(n)];return void 0===r?-1:r}(e,t,n)}var on=8;function rn(e){const t=e.cascade;if(t&&!sn.has(t))return()=>{};const n=t||{counts:new WeakMap};e.cascade=n,sn.set(n,(sn.get(n)||0)+1);let o=!1;return()=>{if(o)return;o=!0;const t=(sn.get(n)||1)-1;t>0?sn.set(n,t):(sn.delete(n),e.cascade===n&&(e.cascade=void 0))}}var sn=new WeakMap;function an(e,t,n){const o=e.cascade;if(!o)return!0;let r=o.counts.get(t);r||(r={},o.counts.set(t,r));const s=String(n),i=(r[s]||0)+1;return r[s]=i,i<=on||(i===on+1&&e.logger.error("state delivery did not converge",{type:s}),!1)}function cn(e,t){return{collector:e,logger:e.logger.scope("on").scope(String(t))}}async function un(e,t,n,o,r){const s=t.on;if(!s)return!0;const i=Yt(o);if(i&&(dn.get(t)||ln.has(t)))return kn(e,t,o),dn.get(t)||fn.add(t),!1;const a=i?en(e,o):0,c=i&&function(e,t,n,o){if(wn.get(t)?.has(String(n)))return!0;const r=e.delivery?.get(t)?.[String(n)];return void 0===r||r<o-1}(e,t,o,a)?xn(e,o):r,u=t.type||"unknown",d=e.logger.scope(u).scope("on").scope(o),l={collector:e,logger:d,id:n,config:t.config,data:c,env:Yn(t.env,t.config.env),reportError:Ot(e,"destination",n,d,t)};i&&(On(t,o),function(e,t,n){let o=mn.get(e);o||(o={},mn.set(e,o));const r=String(t),s=o[r];(void 0===s||s<n)&&(o[r]=n)}(t,o,a),ln.add(t));const f=Bt(t.config.timeout);let p=Promise.resolve(),g=!0,h=!1,m=!0;try{await K(()=>(p=Promise.resolve(s(o,l)),Lt(p,f,`Destination "${n}" on(${o}) did not settle within ${f}ms`)),t=>{g=!1,t instanceof Wt&&(h=!0),Vt(e,"destination",t,{destId:n,type:o})})(),m=!1}finally{if(i){ln.delete(t),m&&fn.delete(t);const r=wn.get(t);g?(qn(e,t,o,a),r?.delete(String(o))):kn(e,t,o),h?function(e,t,n,o,r,s,i){dn.set(t,(dn.get(t)||0)+1);const a=()=>{const s=(dn.get(t)||0)-1;var a,c,u,d;s>0?dn.set(t,s):dn.delete(t),yn(t,o),vn(t,o,r),En(e,t),i.debug("late settle after timeout"),fn.delete(t),e.allowed&&e.destinations[n]===t&&(a=e,c=t,u=n,d=i,K(async()=>{await Mn(a,c,u),!gn(c)&&c.queuePush?.length&&await Nn(a,void 0,{},{[u]:c})},e=>{d.error("state recovery failed",St(e))})())};s.then(a,a)}(e,t,n,o,a,p,d):(vn(t,o,a),En(e,t))}}return i&&!h&&fn.delete(t)&&await Mn(e,t,n),g}var dn=new WeakMap,ln=new WeakSet,fn=new WeakSet,pn=new WeakMap;function gn(e){return pn.get(e)}var hn=new WeakMap,mn=new WeakMap;function vn(e,t,n){const o=mn.get(e);o&&o[String(t)]===n&&delete o[String(t)]}var wn=new WeakMap;function yn(e,t){const n=wn.get(e);n?n.add(String(t)):wn.set(e,new Set([String(t)]))}var bn=new WeakMap;function kn(e,t,n){!function(e,t,n){const o=e.delivery?.get(t);o&&delete o[String(n)]}(e,t,n),yn(t,n),pn.set(t,{type:n,since:Date.now()})}function Sn(e,t){return!!wn.get(t)?.size||Ut.some(n=>Xt(e,n)&&nn(e,t,n))}function On(e,t){hn.set(e,(hn.get(e)||0)+1),pn.set(e,{type:t,since:Date.now()})}function En(e,t){const n=(hn.get(t)||0)-1;var o,r;n>0?hn.set(t,n):hn.delete(t),o=e,r=t,pn.has(r)&&(hn.get(r)||Sn(o,r)||pn.delete(r))}function qn(e,t,n,o){let r=e.delivery.get(t);r||(r={},e.delivery.set(t,r));const s=String(n),i=r[s];(void 0===i||i<o)&&(r[s]=o)}function _n(e,t,n,o){if(!Qt(e))return void Ft();const r=xn(e,t,o);if(n.length)switch(t){case Ze.Consent:!function(e,t,n){const o=n||e.consent,r=cn(e,Ze.Consent);t.forEach(t=>{nn(e,t,Ze.Consent)&&an(e,t,Ze.Consent)&&(Object.keys(o).filter(e=>e in t).forEach(n=>{L(t[n],t=>Vt(e,"consent",t,{key:n}))(o,r)}),tn(e,t,Ze.Consent))})}(e,n,o);break;case Ze.Ready:!function(e,t){if(!e.allowed)return;const n=cn(e,Ze.Ready);t.forEach(t=>{L(t,t=>Vt(e,"ready",t))(void 0,n)})}(e,n);break;case Ze.Run:!function(e,t){if(!e.allowed)return;const n=cn(e,Ze.Run);t.forEach(t=>{L(t,t=>Vt(e,"run",t))(void 0,n)})}(e,n);break;case Ze.Session:!function(e,t){if(!e.session)return;const n=cn(e,Ze.Session);t.forEach(t=>{L(t,t=>Vt(e,"session",t))(e.session,n)})}(e,n);break;default:{const o=cn(e,t),s=Yt(t);n.forEach(n=>{"function"==typeof n&&(s&&!nn(e,n,t)||s&&!an(e,n,t)||(L(n,n=>Vt(e,"generic",n,{type:t}))(r,o),s&&tn(e,n,t)))});break}}}function xn(e,t,n){if(Jt(t))return n||e[t];switch(t){case Ze.Session:return e.session;case Ze.Config:return n||e.config;default:return}}async function An(e,t,n,o,r){if(!t.on)return!1;if(Yt(o)&&!nn(e,t,o))return!1;if(Yt(o)&&!an(e,t,o))return!1;const s=Yt(o);if(s&&In.has(t))return Pn.add(t),!1;const i=s?en(e,o):0;s&&In.add(t);const a=t.on;let c,u=Promise.resolve(),d=!1;try{c=await K(()=>(u=Promise.resolve(a(o,r)),Lt(u,$t,`Source "${n}" on(${o}) did not settle within 10000ms`)),t=>{t instanceof Wt&&(d=!0),Vt(e,"source",t,{sourceId:n,type:o})})()}finally{s&&!d&&In.delete(t)}if(s)if(d){const o=()=>{In.delete(t),Pn.delete(t),e.allowed&&e.sources[n]===t&&K(()=>jn(e,t,n),t=>{e.logger.scope("on").error("state recovery failed",St(t))})()};u.then(o,o)}else qn(e,t,o,i),Pn.delete(t)&&await jn(e,t,n);return!1===c}var In=new WeakSet,Pn=new WeakSet;async function jn(e,t,n){const o=rn(e);try{for(const o of Ut)await An(e,t,n,o,xn(e,o))}finally{o()}}async function Dn(e,t,n,o,r){if(!t.on)return;const s=Yt(o);if(s&&!nn(e,t,o))return;const i=mn.get(t)?.[String(o)];if(s&&void 0!==i&&i>=en(e,o))return;if(s&&!an(e,t,o)){if(t.config.init)return void kn(e,t,o);const n=t.queueOn=t.queueOn||[],r={type:o,data:xn(e,o)},s=n[n.length-1];return s&&s.type===o?n[n.length-1]=r:n.push(r),tn(e,t,o),void wn.get(t)?.delete(String(o))}const a=bn.get(t);if(!t.config.init||a)return t.queueOn=t.queueOn||[],t.queueOn.push({type:o,data:r}),void(s&&(tn(e,t,o),a&&!a.held&&(On(t,o),a.held=!0)));await un(e,t,n,o,r)}async function Mn(e,t,n){if(!t.on)return;const o=rn(e);try{for(const o of Ut)(Xt(e,o)||wn.get(t)?.has(String(o)))&&await Dn(e,t,n,o,xn(e,o))}finally{o()}}function Tn(e){return(hn.get(e)||0)>0}function Cn(e,t,n){return n.catch(()=>{}),{id:e,destination:t,done:n}}var Rn=1e3,$n=1e3,Bn=3e4,Wn=Object.freeze({batched:!0});function Ln(e){return e===Wn}var Kn=" batch-all";function zn(e){return void 0===e?{}:"number"==typeof e?{wait:e}:{wait:e.wait,size:e.size,age:e.age}}function Hn(e){for(const t of e)gn(t.destination)&&(t.drain=!0)}async function Nn(e,t,n={},o){if(!e.allowed)return Un({ok:!1});if(!t)return Qn(e,void 0,n,o);const r=await async function(e,t,n={}){const o=n.ingest??g(n.id||"unknown"),r=e.config.next;if(void 0===r)return{copies:[{event:t,ingest:o}],respond:n.respond};const s=await Ct(e,e.transformers||{},r,t,o,n.respond,so),i=s.respond??n.respond;return 0===s.copies.length?(e.logger.debug("Event dropped by collector.next"+(s.droppedBy?` (${s.droppedBy})`:"")),ot(e,t,o,{reason:"dropped",by:s.droppedBy,at:so}),{copies:[],respond:i,dropped:!0}):s.stopped?{copies:[],respond:i}:{copies:s.copies.map(t=>({event:oo(e,t.event,t.ingest),ingest:t.ingest})),respond:i}}(e,t,n);if(0===r.copies.length)return Un({ok:!0,...r.dropped?{dropped:!0}:{}});const s=[];for(const t of r.copies)s.push(await Qn(e,t.event,{id:n.id,ingest:t.ingest,respond:r.respond},o));return s[0]}async function Qn(e,t,n,o){const{user:r}=e;if(t){const n=ft(e.config.queueMax),o=pt(e.queue,t,{max:n});if(o.dropped>0){const t=kt(e.status,j("collector"),"queue",o.dropped);ht(e.queue,e.logger,"collector.queue overflow; oldest events dropped",{buffer:"queue",cap:n,droppedCount:t})}else e.queue.length<n&&mt(e.queue);e.status.in++}o||(o=e.destinations);const s=e.transformers||{},i=await Promise.all(Object.entries(o||{}).map(async([o,i])=>{if(i.config.disabled)return{id:o,destination:i,skipped:!0};const a=i.config.id||o,c=j("destination",a),u=wt(i.config.breaker);if(u&&function(e,t,n){const o=e[t];if(!o||"closed"===o.state)return!1;if("half-open"===o.state)return!0===o.probing;const r=vt();return void 0!==o.openUntil&&r<o.openUntil||(o.state="half-open",o.probing=!0,o.openUntil=r+n,!1)}(e.status.breakers,c,u.cooldown))return{id:o,destination:i,skipped:!0};const d=t=>{u&&yt(e.status.breakers,c,t,u.threshold,u.cooldown)},l=()=>{u&&function(e,t){const n=e[t];n&&"half-open"===n.state&&!0===n.probing&&(n.state="open",n.probing=!1)}(e.status.breakers,c)},f=t=>{if(!t.length)return;i.queuePush||(i.queuePush=[]);const n=i.queuePush,r=i.config.id||o,s={max:i.config.queueMax??Rn};let a=0;for(const e of t)a+=pt(n,e,s).dropped;if(a>0){bt(e,r);const t=kt(e.status,j("destination",r),"queue",a);ht(n,e.logger.scope(i.type||"unknown"),"destination.queuePush overflow; oldest events dropped",{buffer:"queuePush",destination:r,cap:s.max,droppedCount:t})}else n.length<s.max&&mt(n)};i.on&&i.config.init&&!gn(i)&&!Tn(i)&&Sn(e,i)&&await Mn(e,i,o);const p=gn(i);if(p&&!Tn(i)&&Date.now()-p.since>=Bt(i.config.timeout)&&await Mn(e,i,o),gn(i)){if(l(),!t)return{id:o,destination:i,skipped:!0};const e=[v(t)];return f(e),{id:o,destination:i,queue:e}}let g=(i.queuePush||[]).map(t=>({...t,consent:e.consent}));i.queuePush=[],t&&g.push(v(t));const S=n.ingest?{...n.ingest,_meta:{...n.ingest._meta,path:[...n.ingest._meta.path]}}:k("unknown");if(!g.length&&!i.queueOn?.length)return l(),{id:o,destination:i,skipped:!0};if(!g.length&&i.queueOn?.length){if(!q(i.config.consent,e.consent))return l(),{id:o,destination:i,skipped:!0};let t=!1;try{t=await Fn(e,i,o,!0)}catch(t){e.status.failed++;const n=i.type||"unknown";e.logger.scope(n).error("destination init failed",{error:t instanceof Error?t.message:String(t)}),d("transport-failure")}if(gn(i))return l(),{id:o,destination:i,skipped:!0};if(!t||!i.queuePush?.length)return l(),{id:o,destination:i,skipped:!t};g=i.queuePush.map(t=>({...t,consent:e.consent})),i.queuePush=[]}const E=t=>{const n=e.consent,r=[],s=t.filter(t=>{const s=q(i.config.consent,n,t.consent);if(s)return t.consent=s,r.push(t),!1;const a=tt(e,j("destination",o),"destination","skip","string"==typeof t.id?t.id:"",Date.now(),et(t,S,e));return a.skipReason="consent",n&&(a.consent={...n}),i.config.consent&&(a.meta={required:{...i.config.consent}}),O(e,a),!0});return{allowed:r,skipped:s}},_=e.consent,{allowed:x,skipped:A}=E(g);if(f(A),!x.length)return l(),{id:o,destination:i,queue:g};const I=new Set(i.queuePush);let P=!1;try{P=await Fn(e,i,o,!0)}catch(t){e.status.failed++;const n=i.type||"unknown";e.logger.scope(n).error("destination init failed",{error:t instanceof Error?t.message:String(t)}),d("transport-failure")}if(!P)return l(),{id:o,destination:i,queue:g};if(gn(i))return l(),f(x),{id:o,destination:i,queue:x};const M=[];if(e.consent!==_){const t=E(x.map(t=>({...t,consent:e.consent})));x.splice(0,x.length,...t.allowed),M.push(...t.skipped)}const T=i.queuePush||[],C=T.filter(e=>!I.has(e));if(C.length){i.queuePush=T.filter(e=>I.has(e));const t=E(C.map(t=>({...t,consent:e.consent})));x.push(...t.allowed),M.push(...t.skipped)}if(f(M),!x.length)return l(),M.length?{id:o,destination:i,queue:M}:{id:o,destination:i,skipped:!0};let R,$;i.dlq||(i.dlq=[]);const B=i.config.before,W=i.config.next,L=i.config?.cache,K=L?w(L):void 0,z=K?rt(K,e):void 0,H=st(i.config?.state),N=H?.filter(e=>"get"===e.mode),Q=H?.filter(e=>"set"===e.mode);let G=0,F=0,V=0;return await Promise.all(x.map(async t=>{let a,c;if(t.user=h(r,t.user),K?.stop&&z){const e=m(S,t),n=await y(K,z,e);if("HIT"===n?.status)return t;"MISS"===n?.status&&(a={key:n.key,ttl:n.rule.ttl})}let u=[{event:t,ingest:S}],d=n.respond;if(void 0!==B){const r=`destination.${o}.before`,i=await Ct(e,s,B,t,S,n.respond,r);if(0===i.copies.length){const n=tt(e,j("destination",o),"destination","skip","string"==typeof t.id?t.id:"",Date.now(),et(t,S,e));return n.skipReason="dropped",n.meta={by:i.droppedBy??"route",at:r},O(e,n),t}i.respond&&(d=i.respond),u=i.copies.map(e=>({event:e.event,ingest:e.ingest}))}const l=async(t,n,r)=>{let a=r,u=!1;if(K&&!K.stop&&z){const e=m(n,t??void 0),o=await y(K,z,e);if("HIT"===o?.status)return!1;"MISS"===o?.status&&(a={key:o.key,ttl:o.rule.ttl},u=!0)}N&&N.length>0&&t&&(t=await it(e,N,t,n));const l=Date.now();let f=!1;const p=await D(Vn,n=>{const r=i.type||"unknown";e.logger.scope(r).error("Push failed",{...St(n),event:t.name}),R=n,f=!0;const s=i.dlq,a=i.config.id||o,c={max:i.config.dlqMax??100},u=pt(s,[t,n],c);if(u.dropped>0){bt(e,a);const t=kt(e.status,j("destination",a),"dlq",u.dropped);ht(s,e.logger.scope(i.type||"unknown"),"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:a,cap:c.max,droppedCount:t})}else s.length<c.max&&mt(s)})(e,i,o,t,n,d);if(G+=Date.now()-l,a&&z&&void 0===i.config.mock&&(u?b(z,a.key,p??!0,a.ttl):void 0===c&&(c=p??!0)),!f&&!Ln(p)&&Q&&Q.length>0&&t&&(t=await it(e,Q,t,n)),void 0===p||Ln(p)||($=p),Ln(p)&&F++,!f&&W){void 0!==p&&(n._response=p);const r=await Ct(e,s,W,t,n,d,`destination.${o}.next`);r.respond&&(d=r.respond)}return!0};for(const e of u)await l(e.event,e.ingest,a)&&V++;return a&&z&&void 0!==c&&void 0===i.config.mock&&b(z,a.key,c,a.ttl),t})),{id:o,destination:i,error:R,response:$,totalDuration:G,batchedCount:F,allowedCount:x.length,pushedCount:V,canonicalId:a,breakerConfig:u}})),a={},c={},u={};for(const t of i){if(t.skipped)continue;const n=t.destination,o={type:n.type||"unknown",data:t.response};bt(e,t.id);const r=e.status.destinations[t.id],s=Date.now();r.queuePushSize=n.queuePush?.length??0,r.dlqSize=n.dlq?.length??0;const i=t.breakerConfig,d=t.canonicalId?j("destination",t.canonicalId):void 0,l=t=>{i&&d&&yt(e.status.breakers,d,t,i.threshold,i.cooldown)};if(t.error)o.error=t.error,u[t.id]=o,r.failed++,r.lastAt=s,r.duration+=t.totalDuration||0,e.status.failed++,l("transport-failure");else if(t.queue&&t.queue.length)c[t.id]=o;else{const n=t.batchedCount??0,i=t.allowedCount??0,c=t.pushedCount??i;(Math.max(0,c-n)>0||0===i)&&(a[t.id]=o,r.count++,r.lastAt=s,r.duration+=t.totalDuration||0,e.status.out++,l("success"))}}return Un({event:t,...Object.keys(a).length&&{done:a},...Object.keys(c).length&&{queued:c},...Object.keys(u).length&&{failed:u}})}var Gn=new WeakMap;async function Fn(e,t,n,o=!1){if(t.init&&!t.config.init){if(!o&&function(e){const t=e.config.consent;return!!t&&Object.keys(t).length>0}(t))return e.logger.scope(t.type||"unknown").debug("init blocked: consent gate not cleared"),!1;const r=Gn.get(t);if(r)return r;const s=async function(e,t,n,o){const r=await async function(e,t,n,o){const r=t.type||"unknown",s=e.logger.scope(r),i={collector:e,logger:s,id:o,config:t.config,env:Yn(t.env,t.config.env),reportError:Ot(e,"destination",o,s,t)};s.debug("init");const a=Date.now();let c;O(e,tt(e,j("destination",o),"destination","init","",a));try{c=await M(n,"DestinationInit",e.hooks,e.logger)(i)}catch(t){const n=Date.now(),r=tt(e,j("destination",o),"destination","error","",n);throw r.durationMs=n-a,r.error=nt(t),O(e,r),t}return!1!==c&&{...c||t.config,init:!0}}(e,t,n,o);if(!1===r)return!1;if(t.config=r,t.queueOn?.length){const n=rn(e);!function(e){const t=e.queueOn?.find(({type:e})=>Yt(e));t&&On(e,t.type),bn.set(e,{held:!!t})}(t);try{for(let n=t.queueOn?.shift();n;n=t.queueOn?.shift())await un(e,t,o,n.type,n.data)}catch(n){for(const{type:n}of t.queueOn||[])Yt(n)&&kn(e,t,n);throw t.queueOn=[],n}finally{!function(e,t){const n=bn.get(t);bn.delete(t),n?.held&&En(e,t)}(e,t),n()}}return e.logger.scope(t.type||"unknown").debug("init done"),!0}(e,t,t.init,n);Gn.set(t,s);try{return await s}finally{Gn.delete(t)}}return!0}async function Vn(e,t,n,o,r,s){const{config:i}=t,a=await P(o,i,e);if(a.ignore)return!1;const c=t.type||"unknown",u=e.logger.scope(c),d={collector:e,logger:u,id:n,config:i,data:a.data,rule:a.mapping,ingest:r,env:{...Yn(t.env,i.env),...s?{respond:s}:{}},reportError:Ot(e,"destination",n,u,t)};if(void 0!==i.mock)return u.debug("mock",{event:a.event.name}),i.mock;const l=a.mapping,f=void 0!==l?.batch,p=f?a.mappingKey||"* *":Kn;if((f||void 0!==i.batch)&&t.pushBatch&&void 0===i.mock){if(t.batches=t.batches||{},!t.batches[p]){const o={key:p,entries:[],events:[],data:[]},r=zn(l?.batch),s=zn(i.batch),a=r.wait??s.wait??Bn,c=r.size??s.size??$n,d=r.age??s.age??Bn,g=Yn(t.env,i.env),h=S(async()=>{const o=t.batches[p],r=o.batched;if(0===r.entries.length)return;const s={key:r.key,entries:r.entries,events:r.events,data:r.data};r.entries=[],r.events=[],r.data=[];const a=s.entries[0],c={collector:e,logger:u,id:n,config:i,data:void 0,rule:o.isDefault?void 0:a.rule,ingest:a.ingest,env:{...g,...a.respond?{respond:a.respond}:{}},reportError:Ot(e,"destination",n,u,t)};u.debug("push batch",{events:s.entries.length});const d=t.config.id||n,l=bt(e,d),f=wt(t.config.breaker),h=j("destination",d),m=t=>{f&&yt(e.status.breakers,h,t,f.threshold,f.cooldown)},v=Date.now(),w=new Map;let y,b=!1;const k=n=>{const o=t.dlq=t.dlq||[],r={max:t.config.dlqMax??100};let s=0;for(const e of n)s+=pt(o,e,r).dropped;if(s>0){const t=kt(e.status,j("destination",d),"dlq",s);ht(o,u,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:d,cap:r.max,droppedCount:t})}else o.length<r.max&&mt(o);l.failed+=n.length,l.dlqSize=o.length,e.status.failed+=n.length};let S=s.entries.length;const E=Bt(i.timeout),q=await D((o,r)=>Lt(Promise.resolve(M(t.pushBatch,"DestinationPushBatch",e.hooks,e.logger)(o,r)),E,`Destination "${n}" batch delivery timed out after ${E}ms`),e=>{S=0,b=!0,y=e,k(s.entries.map(t=>[t.event,e])),m("transport-failure"),u.error("Push batch failed",{error:e instanceof Error?e.message:String(e),entries:s.entries.length})})(s,c);if(A(_=q)&&Array.isArray(_.failed)&&q.failed.length>0){const e=[];for(const t of q.failed){const n=s.entries[t.index];if(!n||w.has(t.index))continue;const o=t.error??new Error(`Push batch entry ${t.index} failed (no per-row error provided)`);w.set(t.index,o),e.push([n.event,o])}if(e.length>0){k(e),S=Math.max(0,s.entries.length-e.length);const t=new Map;for(const[,n]of e){const e=n instanceof Error&&"code"in n&&"string"==typeof n.code?n.code:n instanceof Error?n.name:"Error",o=t.get(e);o?o.count++:t.set(e,{code:e,count:1,message:n instanceof Error?n.message:String(n)})}u.error("Push batch partial failure",{failed:e.length,delivered:S,entries:s.entries.length,causes:[...t.values()]})}}var _;const x=Date.now();s.entries.forEach((t,o)=>{const r=b||w.has(o),i=et(t.event,t.ingest,e),a=tt(e,j("destination",n),"destination",r?"error":"flush","string"==typeof t.event.id?t.event.id:"",x,i);if(a.batch={size:s.entries.length,index:o},a.durationMs=x-v,r){const e=b?y:w.get(o);a.error=nt(e)}O(e,a)}),u.debug("push batch done"),l.inFlightBatch=Math.max(0,(l.inFlightBatch??0)-s.entries.length),S>0&&(l.count+=S,l.lastAt=Date.now(),e.status.out+=S,m("success"))},{wait:a,size:c,age:d});t.batches[p]={batched:o,isDefault:!f,batchFn:()=>{h()},flush:async()=>{await h.flush()}}}const c=t.batches[p];c.batched.entries.push({event:a.event,ingest:r,respond:s,rule:l,data:a.data}),c.batched.events.push(a.event),_(a.data)&&c.batched.data.push(a.data);const d="string"==typeof a.event.id?a.event.id:"",g=et(o,r,e),h=Date.now(),m=tt(e,j("destination",n),"destination","in",d,h,g);a.mappingKey&&(m.mappingKey=a.mappingKey),a.event.consent&&(m.consent={...a.event.consent}),m.inEvent=a.event,O(e,m);const v=tt(e,j("destination",n),"destination","out",d,h,g);a.mappingKey&&(v.mappingKey=a.mappingKey),v.outEvent=a.event,v.batch={size:c.batched.entries.length,index:c.batched.entries.length-1},O(e,v);const w=t.config.id||n,y=bt(e,w);return y.inFlightBatch=(y.inFlightBatch??0)+1,c.batchFn(),Wn}{let s;if(u.debug("push",{event:a.event.name}),("undefined"==typeof __WALKEROS_OBSERVE__||__WALKEROS_OBSERVE__)&&"trace"===e.observeLevel?.()&&Array.isArray(t.calls)&&t.calls.length>0){const e=function(e){const{simulation:t,...n}=e,o={},r=new WeakMap;for(const[e,t]of Object.entries(n))o[e]="function"==typeof t?t:ct(t,r,1);const s=$(o,t);return{wrappedEnv:s.env,calls:s.calls,unresolved:s.unresolved}}({...d.env,simulation:t.calls});d.env=e.wrappedEnv,s=e.calls,e.unresolved.length>0&&(e.wrappedEnv[I]={paths:e.unresolved,record:(t,n)=>e.calls.push({fn:t,args:n,ts:Date.now()})})}const c="string"==typeof a.event.id?a.event.id:"",l=et(o,r,e),f=Date.now(),p=tt(e,j("destination",n),"destination","in",c,f,l);a.mappingKey&&(p.mappingKey=a.mappingKey),a.event.consent&&(p.consent={...a.event.consent}),p.inEvent=a.event,O(e,p);try{const o=Bt(i.timeout),r=await Lt(Promise.resolve(M(t.push,"DestinationPush",e.hooks,e.logger)(a.event,d)),o,`Destination "${n}" delivery timed out after ${o}ms`),p=Date.now(),g=tt(e,j("destination",n),"destination","out",c,p,l);return g.durationMs=p-f,g.outEvent=a.event,lt(g,s),_(r)&&(g.meta={...g.meta,response:r}),a.mappingKey&&(g.mappingKey=a.mappingKey),O(e,g),u.debug("push done"),r}catch(t){const o=Date.now(),r=tt(e,j("destination",n),"destination","error",c,o,l);throw r.durationMs=o-f,r.error=nt(t),lt(r,s),a.mappingKey&&(r.mappingKey=a.mappingKey),O(e,r),t}}}function Un(e){return{ok:!e?.failed,...e}}function Jn(e){const{code:t,config:n={},env:o={},cache:r,state:s}=e,{config:i}=Et(e,"before"),{config:a}=Et({...e,config:i},"next"),c={...t.config,...n,...a};r&&(c.cache=r),void 0!==s&&void 0===c.state&&(c.state=s);const u=Yn(t.env,o);return{...t,config:c,env:u}}function Yn(e,t){return e||t?t?e&&A(e)&&A(t)?{...e,...t}:t:e:{}}async function Xn(e,t,n){const o=Object.entries(e).map(async([e,o])=>{const r=o.destroy;if(!r)return;const s=o.type||"unknown",i=n.scope(s),a={id:e,config:o.config,env:o.env??{},logger:i};let c;try{await Promise.race([r(a),new Promise((n,o)=>{c=setTimeout(()=>o(new Error(`${t} '${e}' destroy timed out`)),5e3)})])}catch(n){i.error(`${t} '${e}' destroy failed: ${n}`)}finally{c&&clearTimeout(c)}});await Promise.allSettled(o)}function Zn(e,t){e.stateVersion++,e.cellVersion[t]=e.stateVersion}async function eo(e,t,n){let o,r,s=!1;const i=[],a=rn(e);try{return await async function(){switch(t){case Ze.Config:Ae(n)&&(Se(e.config,n,{shallow:!1,merge:!1}),r=n,s=!0);break;case Ze.Consent:if(Ae(n)){const{update:t}=function(e,t){const n={};return Object.entries(t).forEach(([e,t])=>{n[e]=!!t}),e.consent=p(e.consent,n),{update:n}}(e,n);Zn(e,Ze.Consent),r=t,s=!0}break;case Ze.Custom:Ae(n)&&(e.custom=Se(e.custom,n),Zn(e,Ze.Custom),r=n,s=!0);break;case Ze.Destination:Ae(n)&&"code"in n&&Ae(n.code)&&(o=await async function(e,t){const{code:n,config:o={},env:r={},before:s,next:i,cache:a,state:c}=t;if(!x(n.push))return Un({ok:!1,failed:{invalid:{type:"invalid",error:"Destination code must have a push method"}}});const u={...n.config,...o||{init:!1}};let d=s?{...u,before:s}:{...u};i&&(d={...d,next:i}),a&&(d={...d,cache:a}),void 0!==c&&void 0===d.state&&(d={...d,state:c});let l=d.id;if(!l)do{l=E(5,"abcdefghijklmnopqrstuvwxyz")}while(e.destinations[l]||e.pending.destinations[l]);if(at(e,j("destination",l),d.state),d.require?.length){e.pending.destinations[l]=t,await Nt(e);const n=e.destinations[l];return n?Nn(e,void 0,{},{[l]:n}):Un({ok:!0})}const f={...n,config:d,env:Yn(n.env,r)};return e.destinations[l]=f,!1!==f.config.queue&&(f.queuePush=[...e.queue]),await Mn(e,f,l),Nn(e,void 0,{},{[l]:f})}(e,n));break;case Ze.Globals:Ae(n)&&(e.globals=Se(e.globals,n),Zn(e,Ze.Globals),r=n,s=!0);break;case Ze.Hook:if(Ae(n)&&xe(n.name)&&_e(n.fn)){const{name:t,fn:o}=n;e.hooks[t]=o,r=n,s=!0}break;case Ze.On:if(Ae(n)&&xe(n.type)){const{type:t,rules:o}=n;await async function(e,t,n){if(!Qt(e))return void Ft();const o=e.on,r=o[t]||[],s=B(n)?n:[n];s.forEach(e=>{r.push(e)}),o[t]=r,_n(e,t,s)}(e,t,o)}break;case Ze.Ready:s=!0;break;case Ze.Run:o=await async function(e,t,n){e.allowed=!0,e.timing=Date.now(),e.trace=Ee(),e.count=0,t&&(t.consent&&(e.consent=Se(e.consent,t.consent),Zn(e,Ze.Consent)),t.user&&(e.user=Se(e.user,t.user),Zn(e,Ze.User)),t.globals&&(e.globals=Se(e.config.globalsStatic||{},t.globals),Zn(e,Ze.Globals)),t.custom&&(e.custom=Se(e.custom,t.custom),Zn(e,Ze.Custom))),Object.values(e.destinations).forEach(e=>{e.queuePush=[]}),e.queue=[],e.round++,await Nt(e);const o=await async function(e){if(!Qt(e))return Ft(),[];const t=[];for(const[n,o]of Object.entries(e.destinations)){if(!o.on)continue;const r=async()=>{for(const t of Ut)Xt(e,t)&&await Dn(e,o,n,t,xn(e,t))};t.push(Cn(n,o,r()))}for(const t of Ut){if(!Xt(e,t))continue;const n=xn(e,t);_n(e,t,e.on[t]||[]),await Promise.all(Object.entries(e.sources).filter(([,e])=>zt(e)).map(([o,r])=>An(e,r,o,t,n)))}return t}(e);let r=!0;const s={};if(e.preRunQueue.length){const t=e.preRunQueue.splice(0);e.logger.debug("replaying pre-run events",{count:t.length});for(const{event:n,options:o}of t){const t=await e.push(n,o);!1===t.ok&&(r=!1),t.failed&&Object.assign(s,t.failed)}}Hn(o);const i=await Nn(e);if(n.push(...o),r)return i;const a={...i.failed??{},...s};return{...i,ok:!1,...Object.keys(a).length>0?{failed:a}:{}}}(e,n,i),s=!0;break;case Ze.Session:s=!0;break;case Ze.Shutdown:e.hasShutdown||(e.hasShutdown=!0,await async function(e){const t=e.logger;await Xn(e.sources,"source",t),await async function(e,t){const n=Object.entries(e).flatMap(([e,n])=>{const o=n.batches;if(!o)return[];const r=t.scope(n.type||"destination");return Object.values(o).map(async t=>{let n;try{await Promise.race([t.flush(),new Promise((t,o)=>{n=setTimeout(()=>o(new Error(`destination '${e}' batch flush timed out`)),5e3)})])}catch(t){r.error(`destination '${e}' batch flush failed: ${t}`)}finally{n&&clearTimeout(n)}})});await Promise.allSettled(n)}(e.destinations,t),await Xn(e.destinations,"destination",t),await Xn(e.transformers,"transformer",t),await Xn(e.stores,"store",t)}(e));break;case Ze.User:Ae(n)&&(Se(e.user,n,{shallow:!1}),Zn(e,Ze.User),r=n,s=!0);break;default:return e.logger.warn("unknown command",{command:t}),Un({ok:!1})}if(s){const n=await async function(e,t,n,o){if(!Qt(e))return Ft(),{ok:!0,deliveries:[]};e.seenEvents.add(String(t));let r=n||[];n||(r=e.on[t]||[]);const s=xn(e,t,o),i=[];for(const[n,o]of Object.entries(e.sources)){if(o.config.require?.length){const e=o.config.require.indexOf(t);-1!==e&&o.config.require.splice(e,1)}o.on&&(zt(o)?i.push(An(e,o,n,t,s)):(o.queueOn=o.queueOn||[],o.queueOn.push({type:t,data:s})))}const a=[];for(const[n,o]of Object.entries(e.destinations))o.on&&a.push(Cn(n,o,Dn(e,o,n,t,s)));let c=!1;i.length&&(c=(await Promise.all(i)).some(Boolean));for(const[t,n]of Object.entries(e.sources))zt(n)&&n.queueOn?.length&&await Kt(e,n,t);const u=Object.values(e.sources).some(e=>!zt(e)&&e.config.require?.length);return(Object.keys(e.pending.destinations).length>0||u)&&await Nt(e),_n(e,t,r,o),{ok:!c,deliveries:a}}(e,t,void 0,r);i.push(...n.deliveries),Hn(n.deliveries);const s=function(e,t){if(!t.length)return e;const n={...e.done??{}},o={...e.queued??{}},r={...e.failed??{}};for(const e of t){for(const[t,r]of Object.entries(e.done??{}))n[t]=r,delete o[t];for(const[t,n]of Object.entries(e.failed??{}))r[t]=n,delete o[t];Object.assign(o,e.queued??{})}const s={...e,ok:e.ok&&t.every(e=>e.ok)};return delete s.done,delete s.queued,delete s.failed,Object.keys(n).length&&(s.done=n),Object.keys(o).length&&(s.queued=o),Object.keys(r).length&&(s.failed=r),s}(await Nn(e),await async function(e,t){return(await Promise.all(t.map(async({id:t,destination:n,done:o,drain:r})=>{if(await o,r&&e.allowed&&!gn(n)&&n.queuePush?.length&&e.destinations[t]===n)return Nn(e,void 0,{},{[t]:n})}))).filter(_)}(e,i));if(o&&!1===o.ok){const e={...s.failed??{},...o.failed??{}};o={...s,ok:!1,...Object.keys(e).length>0?{failed:e}:{}}}else o=s}return o||Un({ok:!0})}()}finally{a()}}function to(e,t){return{timing:Math.round((Date.now()-e.timing)/10)/100,source:{type:"collector",schema:"4"},...t}}function no(e,t,n){return ro(e,t,n,{globals:e.globals,user:e.user,consent:e.consent})}function oo(e,t,n){return ro(e,to(e,t),n,{globals:{},user:{},consent:{}})}function ro(e,t,n,o){const r=t.name;if("string"!=typeof r)throw new qe(void 0===r?"Event name is required":"Event name is invalid");if(!r)throw new qe("Event name is required");const[s,i]=r.split(" ");if(!s||!i)throw new qe("Event name is invalid");const{timestamp:a=Date.now(),name:c=`${s} ${i}`,data:u={},context:d={},globals:l={},custom:f={},user:p=o.user,nested:g=[],consent:h=o.consent,id:m=Oe(),trigger:v="",entity:w=s,action:y=i,timing:b=0,source:k={type:"collector",schema:"4"}}=t,S=k??{type:"collector",schema:"4"},O=S.count??(e.count+=1),E=S.trace??n?._meta.trace??e.trace,q={...S,count:O};void 0!==E&&(q.trace=E);const _=e.name??S.platform??"default",x=e.release??"4.7.2";return q.release={...S.release,[_]:x},{name:c,data:u,context:d,globals:Se(o.globals,l),custom:f,user:p,nested:g,consent:h,id:m,trigger:v,entity:w,action:y,timestamp:a,timing:b,source:q}}var so="collector.next";function io(e,t){const n=He(async(n,o={})=>await ze(async()=>{if(!e.allowed){const t=ft(e.config.queueMax),r=pt(e.preRunQueue,{event:n,options:o},{max:t});if(r.dropped>0){const n=kt(e.status,"collector.preRun","queue",r.dropped);ht(e.preRunQueue,e.logger,"collector.preRunQueue overflow; oldest events dropped",{buffer:"queue",cap:t,droppedCount:n})}else e.preRunQueue.length<t&&mt(e.preRunQueue);return e.logger.debug("event held until run",{name:n.name,dropped:r.dropped}),Un({ok:!0})}const r=Date.now(),{id:s,ingest:i,respond:a,mapping:c,preChain:u,include:d,exclude:l}=o;let f=a,p=n;const g=d||l?function(e,t,n){let o=e;return t&&(o=Object.fromEntries(Object.entries(o).filter(([e])=>t.includes(e)))),n&&(o=Object.fromEntries(Object.entries(o).filter(([e])=>!n.includes(e)))),o}(e.destinations,d,l):void 0;let h=i??Ce(s||"unknown");if(c){const t=await Ke(p,c,e);if(t.ignore)return Un({ok:!0});if(c.consent){const n=t.event.consent;if(!Be(c.consent,e.consent,n)){const o=s?`source.${s}`:"collector.push";return e.logger.debug("Event dropped by source consent",{at:o,required:c.consent}),ot(e,t.event,h,{reason:"consent",at:o,required:c.consent,consent:{...e.consent,...n}}),Un({ok:!0,dropped:!0})}}p=t.event}if(void 0!==u){const n=s?`source.${s}.next`:void 0,o=await Ct(e,e.transformers||{},u,p,h,f,n);if(0===o.copies.length)return e.logger.debug("Event dropped by transformer chain"+(o.droppedBy?` (${o.droppedBy})`:"")),ot(e,p,h,{reason:"dropped",by:o.droppedBy,at:n??"collector.push.preChain"}),Un({ok:!0,dropped:!0});if(o.stopped)return o.respond&&(f=o.respond),Un({ok:!0});if(o.respond&&(f=o.respond),o.copies.length>1){const n=await Promise.all(o.copies.map(async n=>{const o=no(e,t(n.event),n.ingest);return Nn(e,o,{id:s,ingest:n.ingest,respond:f},g)}));if(s){e.status.sources[s]||(e.status.sources[s]={count:0,duration:0});const t=e.status.sources[s];t.count+=o.copies.length,t.lastAt=Date.now(),t.duration+=Date.now()-r}return n[0]??Un({ok:!0})}p=o.copies[0].event,h=o.copies[0].ingest}const m=function(e,t,n){return no(e,to(e,t),n)}(e,p,h),v=await Nn(e,m,{id:s,ingest:h,respond:f},g);if(s){e.status.sources[s]||(e.status.sources[s]={count:0,duration:0});const t=e.status.sources[s];t.count++,t.lastAt=Date.now(),t.duration+=Date.now()-r}return v},t=>{if(t instanceof $e)throw t;if(t instanceof Le){const n=o.id;if(n){e.status.sources[n]||(e.status.sources[n]={count:0,duration:0});const t=e.status.sources[n];t.rejected=(t.rejected??0)+1}return e.logger.warn("invalid event rejected",{error:t.message}),Un({ok:!1,invalid:!0,error:t.message})}return e.status.failed++,e.logger.error("push failed",{...St(t),event:n.name}),Un({ok:!1})})(),"Push",e.hooks,e.logger);return async(t,o)=>{const r="string"==typeof t.id&&""!==t.id?t:{...t,id:We()},s="string"==typeof r.id?r.id:"",i=et(r,o?.ingest,e),a=Date.now(),c=tt(e,"collector.push","collector","in",s,a,i);c.inEvent=r,Re(e,c);try{const t=await n(r,o),c=Date.now(),u=tt(e,"collector.push","collector","out",s,c,i);return u.durationMs=c-a,u.outEvent=t,Re(e,u),t}catch(t){const n=Date.now(),o=tt(e,"collector.push","collector","error",s,n,i);throw o.durationMs=n-a,o.error=nt(t),Re(e,o),t}}}function ao(e={}){const t=e.maxEntries??1e4,n=e.lowWaterMark??.8,o=e.sweepIntervalMs??6e4,r=Math.floor(t*n),s=new Map,i={hits:0,misses:0,populates:0,writes:0,deletes:0,evictions_entries:0,evictions_ttl:0};let a;return o>0&&(a=setInterval(function(){const e=Date.now();let t=0;for(const[n,o]of s)void 0!==o.expires&&o.expires<=e&&(s.delete(n),t++);i.evictions_ttl+=t},o),a&&"function"==typeof a.unref&&a.unref()),{type:"memory",config:{},get(e){const t=s.get(e);if(t)return void 0!==t.expires&&t.expires<=Date.now()?(s.delete(e),i.evictions_ttl++,void i.misses++):(s.delete(e),s.set(e,t),i.hits++,t.value);i.misses++},set(e,n,o){const a=!s.has(e);a||s.delete(e),s.set(e,{value:n,expires:void 0!==o?Date.now()+o:void 0}),i.writes++,a&&i.populates++,s.size>t&&function(){if(s.size<=t)return;const e=s.size-r;let n=0;for(const t of s.keys()){if(n>=e)break;s.delete(t),n++}i.evictions_entries+=n}()},delete(e){s.delete(e)&&i.deletes++},get counters(){return{...i}},destroy(){void 0!==a&&(clearInterval(a),a=void 0),s.clear()}}}function co(e,t){const{cacheConfig:n,cacheStore:o,namespace:r,logger:s,storeId:i,collector:a}=t,c=(e,t)=>{if(!a)return;const n=tt(a,`store.${i}`,"store","in","");n.meta={op:"cache",cached:"hit"===t,status:t,key:e},Je(a,n)},u={hits:0,misses:0,populates:0,writes:0,deletes:0,inflight_dedups:0},d=n.rules.map(e=>({match:e.match?Ue(e.match):()=>!0,ttl:e.ttl})),l=e=>`${r}:${e}`;function f(e,t){const n=void 0===t?{key:e}:{key:e,value:t};return d.find(e=>e.match(n))}const p=new Map;return{type:e.type,config:e.config,setup:e.setup,get counters(){return{...u}},async get(t){const n=l(t),r=await o.get(n),s=Ye(r);if(void 0!==s){if(!("expired"in s))return u.hits++,c(t,"hit"),s.value;try{await o.delete(n)}catch(e){g("delete",t,e)}}const i=p.get(n);if(i)return u.inflight_dedups++,c(t,"hit"),i;u.misses++,c(t,"miss");const a=(async()=>{try{const r=await e.get(t);if(void 0===r)return;const s=f(t,r);if(s)try{const e=1e3*s.ttl;await o.set(n,Xe(r,e),e),u.populates++}catch(e){g("set",t,e)}return r}finally{p.delete(n)}})();return p.set(n,a),a},async set(t,n,r){u.writes++,await e.set(t,n,r);const s=f(t,n);if(s)try{const e=1e3*s.ttl;await o.set(l(t),Xe(n,e),e)}catch(e){g("set",t,e)}},async delete(t){u.deletes++,await e.delete(t);try{await o.delete(l(t))}catch(e){g("delete",t,e)}}};function g(e,t,n){const o=`store-cache(${i}): cache ${e} failed for "${t}"; backing succeeded, continuing`;s?s.warn(o,St(n)):console.warn(o,n)}}function uo(e,t,n){const o=`store.${n}`,r=Ve(t.get,"StoreGet",e.hooks,e.logger),s=Ve(t.set,"StoreSet",e.hooks,e.logger),i=Ve(t.delete,"StoreDelete",e.hooks,e.logger);t.get=async t=>{const n=Date.now(),s=tt(e,o,"store","in","",n);s.meta={op:"get",key:t},Fe(e,s);try{const s=await r(t),i=Date.now(),a=tt(e,o,"store","out","",i);return a.durationMs=i-n,a.meta={op:"get",key:t},Fe(e,a),s}catch(r){const s=Date.now(),i=tt(e,o,"store","error","",s);throw i.durationMs=s-n,i.meta={op:"get",key:t},i.error=nt(r),Fe(e,i),r}},t.set=async(t,n,r)=>{const i=Date.now(),a=tt(e,o,"store","in","",i);a.meta={op:"set",key:t},Fe(e,a);try{await s(t,n,r);const a=Date.now(),c=tt(e,o,"store","out","",a);c.durationMs=a-i,c.meta={op:"set",key:t},Fe(e,c)}catch(n){const r=Date.now(),s=tt(e,o,"store","error","",r);throw s.durationMs=r-i,s.meta={op:"set",key:t},s.error=nt(n),Fe(e,s),n}},t.delete=async t=>{const n=Date.now(),r=tt(e,o,"store","in","",n);r.meta={op:"delete",key:t},Fe(e,r);try{await i(t);const r=Date.now(),s=tt(e,o,"store","out","",r);s.durationMs=r-n,s.meta={op:"delete",key:t},Fe(e,s)}catch(r){const s=Date.now(),i=tt(e,o,"store","error","",s);throw i.durationMs=s-n,i.meta={op:"delete",key:t},i.error=nt(r),Fe(e,i),r}}}async function lo(e){const t=Me({globalsStatic:{},sessionStatic:{},run:!0,queueMax:1e3},e,{merge:!1,extend:!1}),n={level:e.logger?.level,handler:e.logger?.handler},o=Te(n),r={...t.globalsStatic,...e.globals},s={allowed:!1,config:t,consent:e.consent||{},custom:e.custom||{},destinations:{},transformers:{},stores:{},globals:r,hooks:e.hooks||{},observers:new Set,logger:o,on:{},queue:[],preRunQueue:[],round:0,count:0,stateVersion:0,cellVersion:{},delivery:new WeakMap,session:void 0,status:{startedAt:Date.now(),in:0,out:0,failed:0,sources:{},destinations:{},dropped:{},connectionErrors:{},breakers:{}},timing:Date.now(),user:e.user||{},sources:{},pending:{destinations:{}},hasShutdown:!1,seenEvents:new Set,push:void 0,command:void 0,elb:void 0};var i,a;void 0!==e.name&&(s.name=e.name),void 0!==e.release&&(s.release=e.release),void 0!==e.next&&(t.next=e.next),s.push=io(s,e=>to(s,e)),s.command=(a=eo,Qe(async(e,t,n)=>await Ge(async()=>await a(i,e,t,n),t=>{if(t instanceof Ne)throw t;return i.status.failed++,i.logger.error("command failed",{...St(t),command:e}),Un({ok:!1})})(),"Command",(i=s).hooks,i.logger)),s.elb=function(e){return async(t,n,o,r,s)=>{if("string"==typeof t&&t.startsWith("walker ")){const o=t.replace("walker ","");return e.command(o,n)}let i;if("string"==typeof t)i={name:t},n&&"object"==typeof n&&!Array.isArray(n)&&(i.data=n);else{if(!t||"object"!=typeof t||Array.isArray(t))return Un({ok:!1});i={...t},n&&"object"==typeof n&&!Array.isArray(n)&&(i.data={...i.data||{},...n})}return o&&"object"==typeof o&&(i.context=o),r&&Array.isArray(r)&&(i.nested=r),s&&"object"==typeof s&&(i.custom=s),e.push(i)}}(s);const c=e.stores||{};return"undefined"==typeof __WALKEROS_STORES__||__WALKEROS_STORES__?(s.stores=await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t)){const{code:t,config:s={},env:i={}}=r,a=e.logger.scope("store").scope(o),c={collector:e,logger:a,id:o,config:s,env:i,reportError:Ot(e,"store",o,a)},u=await t(c);n[o]=u}const o=t,r=function(e){const t={};for(const n of Object.keys(e))t[n]="WHITE";const n=[],o=[];function r(s){const i=t[s];if("BLACK"===i)return;if("GRAY"===i){const e=o.indexOf(s),t=o.slice(-1===e?0:e).concat(s).join(" -> ");throw new Error(`Cycle in cache.store chain: ${t}`)}t[s]="GRAY",o.push(s);const a=e[s].cache?.store;if(void 0!==a){if(!(a in e))throw new Error(`Store "${s}" cache.store references "${a}", which is not declared in flow.stores`);r(a)}o.pop(),t[s]="BLACK",n.push(s)}for(const n of Object.keys(e))"WHITE"===t[n]&&r(n);return n}(o);for(const t of r){const r=o[t].cache;if(!r)continue;let s,i;void 0!==r.store?(s=n[r.store],i=r.store):(n.__cache||(n.__cache=ao()),s=n.__cache,i="__cache");const a=r.namespace??t;e.logger.scope("store-cache").scope(t).info(`store "${t}" caches with namespace "${a}:" via ${i}`),n[t]=co(n[t],{storeId:t,cacheConfig:r,cacheStore:s,namespace:a,logger:e.logger.scope("store-cache").scope(t),collector:e})}for(const[t,o]of Object.entries(n))"__cache"!==t&&uo(e,o,t);return n}(s,c),function(e,t,n){const o=new Map;for(const[n,r]of Object.entries(e))t[n]&&o.set(r,t[n]);if(0!==o.size)for(const e of[n.transformers,n.destinations,n.sources])if(e)for(const t of Object.values(e))r(t.env);function r(e){if(e)for(const[t,n]of Object.entries(e))if("object"==typeof n&&null!==n){const r=o.get(n);r&&(e[t]=r)}}}(c,s.stores,e)):Object.keys(c).length>0&&o.warn("stores: not in this build, config ignored"),s.stores.__cache||(s.stores.__cache=ao()),s.destinations=await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t))at(e,j("destination",o),r.config?.state??r.code.config?.state??r.state),r.config?.require?.length?e.pending.destinations[o]=r:n[o]=Jn(r);return n}(s,e.destinations||{}),s.transformers=await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t)){const{code:t,env:s={}}=r;if("undefined"==typeof __WALKEROS_VALIDATE__||__WALKEROS_VALIDATE__){const t=we(r,"Transformer");if(!t.ok){e.logger.warn(`Transformer ${o} invalid (${t.code}): ${t.reason}. Skipping.`);continue}}const{config:i}=Et(r,"before"),{config:a}=Et({...r,config:i},"next"),c=Object.keys(s).length>0?{...a,env:s}:a,{cache:u}=r,d=u?{...c,cache:u}:c,l=r.config?.state??r.state;at(e,le("transformer",o),l);const f=void 0!==l&&void 0===d.state?{...d,state:l}:d,p=e.logger.scope("transformer").scope(o),g={collector:e,logger:p,id:o,ingest:re(o),config:f,env:s,reportError:Ot(e,"transformer",o,p)},h=be(r);for(const t of ke(r))e.logger.warn(`Transformer ${o}: ${t}`);const m=t??(e=>h?{type:"pass",config:e.config,push:async t=>{const n=await ye(t,h,e.collector);return!n.ignore&&{event:n.event}}}:{type:"pass",config:e.config,push:e=>({event:e})}),v=await m(g);void 0!==r.before&&void 0===v.config?.before&&(v.config={...v.config??{},before:r.before}),void 0!==r.next&&void 0===v.config?.next&&(v.config={...v.config??{},next:r.next}),void 0!==l&&void 0===v.config?.state&&(v.config={...v.config??{},state:l}),n[o]=v}return n}(s,e.transformers||{}),s}var fo=globalThis;function po(e){try{const t=fo.window;if(!t)return;t.localStorage.getItem(Ie)===e&&t.localStorage.removeItem(Ie)}catch{}}function go(e,t){return void 0===t?e:n=>e({...n,release:t})}async function ho(e){const t=e??{},n=await lo(t);if(t.observers)for(const e of t.observers)n.observers.add(e);"undefined"==typeof __WALKEROS_OBSERVE__||__WALKEROS_OBSERVE__?function(e,t){const n=t.observe;if(!n)return;const o=e.name??"default";if("binding"in n){const t=function(){const e=fo.window,t=fo.URLSearchParams;if(!e||!t)return null;try{const n=new t(e.location.search.replace(/^\?/,"")).getAll(Ie);return n.length>0?n[n.length-1]??null:null}catch{return null}}(),r=t??function(){try{return fo.window?.localStorage.getItem(Ie)??null}catch{return null}}();if(!r)return;const s=De(r);if(!s)return void(null===t?(e.logger.warn("observe: malformed stored credential cleared"),po(r)):e.logger.warn("observe: malformed credential ignored"));if(s.pb!==n.binding)return void e.logger.warn("observe: credential binding mismatch, credential ignored");let i;!function(e){try{fo.window?.localStorage.setItem(Ie,e)}catch{}}(r),null!==t&&function(){const e=fo.window,t=fo.URLSearchParams;if(e&&t)try{const n=e.location.href,o=n.indexOf("#"),r=o>=0?n.slice(o):"",s=o>=0?n.slice(0,o):n,i=s.indexOf("?"),a=i>=0?s.slice(0,i):s,c=new t(i>=0?s.slice(i+1):"");c.delete(Ie);const u=c.toString();e.history.replaceState({},"",`${a}${u?`?${u}`:""}${r}`)}catch{}}();const a=Pe({url:`${n.url}/ingest/${s.ses}`,token:s.secret,headers:{"X-Walkeros-Binding":n.binding},onStatus:t=>{401===t&&(po(r),i&&e.observers.delete(i))}});i=je(function(e,t){return void 0===t?e:n=>e({...n,flowId:t})}(go(a,e.release),n.flowId),{flowId:n.flowId??o,...void 0!==n.level?{level:n.level}:{},...void 0!==n.sample?{sample:n.sample}:{}}),e.observers.add(i);const c=n.level;return void(void 0!==c&&(e.observeLevel=()=>c))}if("off"===n.level)return;const r=n.level;void 0!==r&&(e.observeLevel=()=>r),e.observers.add(je(go(Pe({url:`${n.url}/ingest/${n.sessionId}`,token:n.token}),e.release),{flowId:o,level:n.level,sample:n.sample}))}(n,t):t.observe&&n.logger.warn("observe: not in this build, config ignored"),await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t)){const t=await Ht(e,o,r);if(!t)continue;const s=r.config?.require;t.config={...t.config,init:!1,...s?{require:[...s]}:{}},n[o]=t}Object.assign(e.sources,n);for(const t of Object.keys(n)){const n=e.sources[t];let o=!1;n.init&&await U(n.init.bind(n),n=>{if(n instanceof N)throw n;o=!0,e.status.failed++,e.logger.scope("source").error("source init failed",{sourceId:t,...St(n)})})(),o||(n.config.init=!0,zt(n)&&await Kt(e,n,t))}return await Nt(e),n}(n,t.sources||{});const{consent:o,user:r,globals:s,custom:i}=t;o&&await n.command("consent",o),r&&await n.command("user",r),s&&await n.command("globals",s),i&&await n.command("custom",i),n.config.run&&await n.command("run");let a=n.elb;const c=Object.values(n.sources),u=c.find(e=>e.config.primary);return u?a=u.push:c.length>0&&(a=c[0].push),{collector:n,elb:a}}var mo=async e=>{let t;return{get flow(){return t},trigger:()=>async n=>{if(!t){const n=await ho(e);t={collector:n.collector,elb:n.elb}}const o=function(e){for(const t of Object.values(e.sources||{}))if("lambda"===t.type)return t}(t.collector);if(!o)throw new Error("Lambda source not found in collector");const r={awsRequestId:`test-${Date.now()}`},s=o.push,i=await s(n,r);let a;try{a=JSON.parse(i.body||"{}")}catch{a=i.body}const c={};if(i.headers)for(const[e,t]of Object.entries(i.headers))void 0!==t&&(c[e]=String(t));return{statusCode:i.statusCode,body:a,headers:c}}}};function vo(e){return async t=>{const n={...t};if(n.body&&"string"==typeof n.body){const e=JSON.parse(n.body);e.name&&!e.event&&(n.body=JSON.stringify({...e,event:e.name,name:void 0}))}return e.push(n,{awsRequestId:"test-req"})}}var wo={};t(wo,{createTrigger:()=>Mo,env:()=>yo,step:()=>xo});var yo={};t(yo,{moduleMockEnv:()=>qo,push:()=>Eo,simulation:()=>_o});var bo=()=>{},ko={error:bo,warn:bo,info:bo,debug:bo,throw:e=>{throw"string"==typeof e?new Error(e):e},json:bo,scope:()=>ko},So=()=>()=>Promise.resolve({ok:!0});function Oo(){return{get push(){return So()},get command(){return So()},get elb(){return So()},logger:ko}}var Eo=Object.assign(Oo(),{AWS:{SQSClient:class{constructor(e){this.config=e}config;async send(e){return function(e){if(!("input"in e))return!1;const{input:t}=e;return"object"==typeof t&&null!==t&&"WaitTimeSeconds"in t}(e)&&await new Promise(e=>setTimeout(e,100)),{$metadata:{},QueueUrl:"https://sqs.eu-central-1.amazonaws.com/000000000000/walkeros-events",Attributes:{QueueArn:"arn:aws:sqs:eu-central-1:000000000000:walkeros-events"},Messages:[]}}destroy(){}}}}),qo=Oo(),_o=["call:AWS.SQSClient.send"],xo={};t(xo,{decoderText:()=>Po,malformedJson:()=>jo,orderComplete:()=>Io,pageView:()=>Ao});var Ao={title:"Page view from SQS",description:"A standard SQS message body containing a walker elb event payload as JSON.",in:{MessageId:"m-1",Body:JSON.stringify({event:"page view",data:{title:"Documentation",url:"https://example.com/docs"}})},out:[["message.ack","m-1"]]},Io={title:"Order complete from SQS",description:"Order complete event flowing through the long-poll loop.",in:{MessageId:"m-2",Body:JSON.stringify({event:"order complete",data:{id:"ORD-500",total:199.99,currency:"EUR"}})},out:[["message.ack","m-2"]]},Po={title:"Text decoder",description:'When decoder is "text", the body string flows under data.payload.',in:{MessageId:"m-3",Body:"raw text payload"},out:[["message.ack","m-3"]]},jo={title:"Malformed JSON nacks",description:"Default decoder is JSON. A malformed body throws DecoderError; the source nacks (skips DeleteMessage) so the message redelivers.",in:{MessageId:"m-4",Body:"{not json"},out:[["message.nack","m-4"]]};function Do(e){if("object"!=typeof e||null===e)return!1;const t=e;return"sqs"===t.type&&"function"==typeof t.push}var Mo=async e=>{let t;return{get flow(){return t},trigger:()=>async n=>{if(!t){const n=await ho(e);t={collector:n.collector,elb:n.elb}}const o=function(e){for(const t of Object.values(e.sources??{}))if(Do(t))return t}(t.collector);if(!o)throw new Error("sqs source not registered in collector, ensure it is configured in sources");const r={MessageId:n.MessageId,Body:n.Body,ReceiptHandle:n.ReceiptHandle,Attributes:n.Attributes,MessageAttributes:n.MessageAttributes},s=await o.push(r),i=[];return s&&"object"==typeof s&&(s.acked&&i.push(["message.ack",n.MessageId]),s.nacked&&i.push(["message.nack",n.MessageId])),i}}};import{zodToSchema as To}from"@walkeros/core/dev";import{z as Co}from"@walkeros/core/dev";import{z as Ro}from"@walkeros/core/dev";var $o=Ro.enum(["GET","POST","PUT","PATCH","DELETE","OPTIONS","HEAD"]),Bo=Ro.union([Ro.string(),Ro.array(Ro.string()),Ro.literal("*")]),Wo=Ro.object({origin:Bo.describe("Allowed origins (* for all, URL string, or array of URLs)").optional(),methods:Ro.array($o).describe("Allowed HTTP methods").optional(),headers:Ro.array(Ro.string()).describe("Allowed request headers").optional(),credentials:Ro.boolean().describe("Allow credentials (cookies, authorization headers)").optional(),maxAge:Ro.number().int().positive().describe("Preflight cache duration in seconds").optional()}),Lo=Co.object({cors:Co.union([Co.boolean(),Wo]).describe("CORS configuration: false = disabled, true = allow all origins, object = custom configuration").default(!0),timeout:Co.number().int().positive().max(9e5).describe("Request timeout in milliseconds (max: 900000 for Lambda)").default(3e4),enablePixelTracking:Co.boolean().describe("Enable GET requests with 1x1 transparent GIF response for pixel tracking").default(!0),maxBatchSize:Co.number().int().min(1).describe("Maximum number of events accepted in a single batch request").default(100),healthPath:Co.string().describe("Health check endpoint path (e.g., /health)").default("/health")}),Ko=To(Lo);import{zodToSchema as zo}from"@walkeros/core/dev";import{z as Ho}from"@walkeros/core/dev";var No=Ho.object({queueName:Ho.string().min(1).describe("SQS queue short name (like walkeros-events). Required for both setup and runtime poll."),region:Ho.string().describe("AWS region (like eu-central-1). Default: eu-central-1.").optional(),queueUrl:Ho.string().url().describe("Optional pre-resolved queue URL. When set, init skips the GetQueueUrl lookup.").optional(),client:Ho.any().describe("Pre-configured AWS SQSClient instance. Bypasses construction when supplied.").optional(),config:Ho.any().describe("AWS SDK SQSClientConfig (credentials, endpoint overrides, retries).").optional(),decoder:Ho.enum(["json","text","raw"]).describe("Decoder for the message body. json (default) parses JSON, text forwards UTF-8, raw forwards a Buffer.").optional(),maxMessages:Ho.number().int().min(1).max(10).describe("SQS receive batch size. Cap 10. Default: 10.").optional(),waitTimeSeconds:Ho.number().int().min(0).max(20).describe("Long-poll duration in seconds. Cap 20. Default: 20.").optional(),visibilityTimeout:Ho.number().int().nonnegative().describe("Per-receive visibility timeout override. Default: queue-configured value.").optional(),shutdownTimeoutMs:Ho.number().int().positive().describe("Graceful shutdown timeout in milliseconds. Default: 30000. After this window, destroy() force-closes.").optional(),onPushError:Ho.enum(["nack","ack"]).describe("Behavior when forwarding to the collector throws. nack (default) skips DeleteMessage so the message redelivers; ack drops it.").optional()});import{z as Qo}from"@walkeros/core/dev";var Go=Qo.record(Qo.string(),Qo.string()),Fo=Qo.object({region:Qo.string().min(1).describe("AWS region.").optional(),fifoQueue:Qo.boolean().describe("FIFO queue with content-based deduplication. Auto-appends .fifo suffix to the queue name.").optional(),visibilityTimeoutSeconds:Qo.number().int().nonnegative().describe("Visibility timeout in seconds. Default: 30.").optional(),messageRetentionSeconds:Qo.number().int().positive().describe("Message retention period in seconds. Default: 345600 (4 days).").optional(),maximumMessageSize:Qo.number().int().min(1024).max(262144).describe("Max message size in bytes. Default: 262144 (256 KB).").optional(),kmsMasterKeyId:Qo.string().describe("KMS key alias or ID for at-rest encryption.").optional(),deadLetterQueue:Qo.object({arn:Qo.string().describe("ARN of an existing DLQ. Mutually exclusive with create: true.").optional(),create:Qo.boolean().describe("Create a sibling DLQ named <queueName>-dlq. Default: false.").optional(),maxReceiveCount:Qo.number().int().min(1).max(1e3).describe("Max receive count before message goes to DLQ. Default: 5.").optional()}).describe("Optional dead-letter queue.").optional(),tags:Go.describe("Tags applied to the queue (and inherited by an auto-created DLQ).").optional(),subscribeToSnsTopic:Qo.object({topicArn:Qo.string().min(1).describe("Topic ARN to subscribe to."),rawMessageDelivery:Qo.boolean().describe("Deliver SNS messages without the SNS envelope.").optional(),filterPolicy:Qo.record(Qo.string(),Qo.unknown()).describe("SNS filter policy applied at subscription level.").optional()}).describe("Optional SNS topic subscription. Creates the subscription and the matching queue policy.").optional()}),Vo=zo(No),Uo=zo(Fo),Jo={};t(Jo,{CorsOptionsSchema:()=>Wo,CorsOrigin:()=>Bo,HttpMethod:()=>$o,SettingsSchema:()=>Lo,settings:()=>Ko,sqsSettings:()=>Vo,sqsSetup:()=>Uo});var Yo={sourceLambda:n,sourceSqs:wo},Xo={sourceLambda:{settings:Ko},sourceSqs:{settings:Vo,setup:Uo}};export{n as examples,Yo as exportExamples,Xo as exportSchemas,Jo as schemas,wo as sqsExamples};//# sourceMappingURL=dev.mjs.map
1
+ var e=Object.defineProperty,t=(t,n)=>{for(var o in n)e(t,o,{get:n[o],enumerable:!0})},n={};t(n,{createTrigger:()=>mo,env:()=>o,step:()=>c,trigger:()=>vo});var o={};t(o,{push:()=>a});var r=()=>()=>Promise.resolve({ok:!0}),s=()=>{},i={error:s,warn:s,info:s,debug:s,throw:e=>{throw"string"==typeof e?new Error(e):e},json:s,scope:()=>i},a={get push(){return r()},get command(){return r()},get elb(){return r()},logger:i},c={};t(c,{apiGatewayV1Post:()=>d,lambdaGet:()=>l,lambdaPost:()=>u,lambdaPostForwardsSource:()=>f});var u={title:"Lambda POST",description:"An API Gateway v2 HTTP POST with a JSON body is converted into a walker elb event.",trigger:{type:"POST"},in:{version:"2.0",requestContext:{http:{method:"POST",path:"/collect"},requestId:"req-123"},body:JSON.stringify({name:"page view",data:{title:"Home"}}),isBase64Encoded:!1},out:[["elb",{name:"page view",data:{title:"Home"}}]]},d={title:"API Gateway v1 POST",description:"A REST API Gateway v1 POST request with a JSON body is converted into a walker elb event.",trigger:{type:"POST"},in:{httpMethod:"POST",path:"/collect",requestContext:{requestId:"req-789",identity:{sourceIp:"203.0.113.42"}},queryStringParameters:null,body:JSON.stringify({name:"page view",data:{title:"Home"}}),isBase64Encoded:!1},out:[["elb",{name:"page view",data:{title:"Home"}}]]},l={title:"Lambda GET",description:"An API Gateway v2 HTTP GET with query parameters is parsed into an elb event payload.",trigger:{type:"GET"},in:{version:"2.0",requestContext:{http:{method:"GET",path:"/collect"},requestId:"req-456"},rawQueryString:"e=page+view&d=%7B%22title%22%3A%22Home%22%7D",isBase64Encoded:!1},out:[["elb",{e:"page view",d:'{"title":"Home"}'}]]},f={title:"Lambda POST with provenance",description:"A POST body carrying a source map is forwarded in full, so release and trace provenance survive the crossing.",trigger:{type:"POST"},in:{version:"2.0",requestContext:{http:{method:"POST",path:"/collect"},requestId:"req-321"},body:JSON.stringify({name:"page view",data:{title:"Home"},source:{release:{web:"r1"}}}),isBase64Encoded:!1},out:[["elb",{name:"page view",data:{title:"Home"},source:{release:{web:"r1"}}}]]};import{assign as p}from"@walkeros/core";import{createIngest as g}from"@walkeros/core";import{assign as h,createMappingRoot as m,clone as v,compileCache as w,checkCache as y,storeCache as b,createIngest as k,debounce as S,emitStep as O,getId as E,getGrantedConsent as q,isDefined as _,isFunction as x,isObject as A,OBSERVE_ENV_KEY as I,processEventMapping as P,stepId as j,tryCatchAsync as D,useHooks as M}from"@walkeros/core";import{emitStep as T}from"@walkeros/core";import{applyState as C,compileState as R}from"@walkeros/core";import{observeEnv as $}from"@walkeros/core";import{isArray as B,FatalError as W}from"@walkeros/core";import{tryCatch as L,tryCatchAsync as K}from"@walkeros/core";import{stepId as z}from"@walkeros/core";import{createIngest as H,FatalError as N,getMappingValue as Q,getSpanId as G,parseTraceparent as F,isScope as V,tryCatchAsync as U,compileCache as J,checkCache as Y,storeCache as X,applyUpdate as Z,createMappingRoot as ee,stepId as te}from"@walkeros/core";import{advanceChain as ne,clone as oe,createIngest as re,deriveSpanId as se,emitStep as ie,FatalError as ae,isChainContinuation as ce,isObject as ue,startChain as de,stepId as le,tryCatchAsync as fe,useHooks as pe,compileCache as ge,checkCache as he,storeCache as me,createMappingRoot as ve,validateStepEntry as we,processEventMapping as ye,getTransformerMapping as be,getTransformerMappingWarnings as ke}from"@walkeros/core";import{assign as Se,getSpanId as Oe,getTraceId as Ee,InvalidEventError as qe,isFunction as _e,isString as xe}from"@walkeros/core";import{isObject as Ae}from"@walkeros/core";import{OBSERVE_STORAGE_KEY as Ie,createBatchedPoster as Pe,createTelemetryObserver as je,parseObserveCredential as De}from"@walkeros/core";import{assign as Me,createLogger as Te}from"@walkeros/core";import{createIngest as Ce,emitStep as Re,FatalError as $e,getGrantedConsent as Be,getSpanId as We,InvalidEventError as Le,processEventMapping as Ke,tryCatchAsync as ze,useHooks as He}from"@walkeros/core";import{FatalError as Ne,useHooks as Qe,tryCatchAsync as Ge}from"@walkeros/core";import{emitStep as Fe,useHooks as Ve}from"@walkeros/core";import{compileMatcher as Ue,emitStep as Je,readCacheEnvelope as Ye,wrapCacheEnvelope as Xe}from"@walkeros/core";var Ze={Action:"action",Actions:"actions",Config:"config",Consent:"consent",Context:"context",Custom:"custom",Destination:"destination",Elb:"elb",Globals:"globals",Hook:"hook",Init:"init",Link:"link",On:"on",Prefix:"data-elb",Ready:"ready",Run:"run",Scoped:"_",Session:"session",Shutdown:"shutdown",User:"user",Walker:"walker"};function et(e,t,n){return{traceId:e.source?.trace??t?._meta.trace??n.trace,sourceId:t?._meta.path[0],parentEventId:t?._meta.parentEventId}}function tt(e,t,n,o,r,s=Date.now(),i){const a={flowId:e.name??"default",stepId:t,stepType:n,phase:o,eventId:r,timestamp:new Date(s).toISOString(),elapsedMs:s-e.status.startedAt};return i?.traceId&&(a.traceId=i.traceId),i?.sourceId&&(a.sourceId=i.sourceId),i?.parentEventId&&(a.parentEventId=i.parentEventId),a}function nt(e){return e instanceof Error?{name:e.name,message:e.message}:{message:String(e)}}function ot(e,t,n,o){e.status.in++;const r=tt(e,"collector.push","collector","skip","string"==typeof t.id?t.id:"",Date.now(),et(t,n,e));r.skipReason=o.reason,"consent"===o.reason?(r.consent={...o.consent},r.meta={at:o.at,required:{...o.required}}):r.meta={by:o.by??"route",at:o.at},T(e,r)}function rt(e,t){return e.storeId&&t.stores[e.storeId]?t.stores[e.storeId]:t.stores.__cache}function st(e){return("undefined"==typeof __WALKEROS_STATE__||__WALKEROS_STATE__)&&e?R(e):void 0}function it(e,t,n,o){return"undefined"==typeof __WALKEROS_STATE__||__WALKEROS_STATE__?C(t,t=>{return o=e,(n=t)?o.stores[n]:o.stores.__cache;var n,o},n,e,o):Promise.resolve(n)}function at(e,t,n){"undefined"==typeof __WALKEROS_STATE__||__WALKEROS_STATE__||void 0===n||e.logger.warn(`state: not in this build, ${t} state ignored`)}function ct(e,t,n){if(null===e||"object"!=typeof e)return e;if(n>=8||!function(e){if(Array.isArray(e))return!0;const t=Object.getPrototypeOf(e);return t===Object.prototype||null===t}(e))return e;const o=t.get(e);if(void 0!==o)return o;if(Array.isArray(e)){const o=[];t.set(e,o);for(const r of e)o.push(ct(r,t,n+1));return o}const r={};t.set(e,r);for(const[o,s]of Object.entries(e))r[o]="function"==typeof s?s:ct(s,t,n+1);return r}function ut(e,t){try{return e[t]}catch{return"[unreadable]"}}function dt(e){const t=new WeakSet,n=(e,o)=>{if(null===e)return null;if("function"==typeof e)return"[function]";if("string"==typeof e||"boolean"==typeof e)return e;if("number"==typeof e)return Number.isFinite(e)?e:null;if("bigint"==typeof e)return String(e);if("object"!=typeof e)return;const r=e;if(t.has(r))return"[circular]";if(o>=6)return"[truncated]";let s;t.add(r);try{if(Array.isArray(r))s=r.map(e=>n(e,o+1));else if(function(e){const t=Object.getPrototypeOf(e);return t===Object.prototype||null===t}(r)){const e={};for(const t of Object.keys(r))e[t]=n(ut(r,t),o+1);s=e}else s=function(e){try{return String(e)}catch{return"[object]"}}(r)}catch{s="[unreadable]"}return t.delete(r),s};return e.map(e=>n(e,0))}function lt(e,t){("undefined"==typeof __WALKEROS_OBSERVE__||__WALKEROS_OBSERVE__)&&t&&t.length>0&&(e.calls=t.map(e=>({fn:e.fn,args:dt(e.args),ts:e.ts})))}function ft(e){if(void 0===e)throw new Error("Collector.Config.queueMax is undefined; defaults must be seeded by collector()");return e}function pt(e,t,n,o){if(!Number.isFinite(n.max)||n.max<=0)throw new Error(`pushBounded: max must be > 0 (got ${n.max})`);if("dropNewest"===(n.onOverflow??"dropOldest"))return e.length>=n.max?(o&&o([t]),{appended:!1,dropped:1}):(e.push(t),{appended:!0,dropped:0});const r=[];for(;e.length>=n.max;)r.push(e.shift());return e.push(t),r.length>0&&o&&o(r),{appended:!0,dropped:r.length}}var gt=new WeakMap;function ht(e,t,n,o){gt.get(e)||(gt.set(e,!0),t.warn(n,o))}function mt(e){gt.delete(e)}var vt=()=>Date.now();function wt(e){if(void 0!==e)return"number"==typeof e?{threshold:e,cooldown:3e4}:{threshold:e.threshold??5,cooldown:e.cooldown??3e4}}function yt(e,t,n,o,r){if("partial"===n)return;const s=((i=e)[a=t]||(i[a]={state:"closed",consecutiveFailures:0}),i[a]);var i,a;return"success"===n?(s.consecutiveFailures=0,s.state="closed",s.probing=!1,void(s.openUntil=void 0)):(s.consecutiveFailures+=1,"half-open"===s.state?(s.state="open",s.probing=!1,void(s.openUntil=vt()+r)):void(s.consecutiveFailures>=o&&(s.state="open",s.probing=!1,s.openUntil=vt()+r)))}function bt(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 kt(e,t,n,o){e.dropped[t]||(e.dropped[t]={});const r=e.dropped[t];return r[n]=(r[n]??0)+o,r[n]}function St(e){const t={error:e instanceof Error?e.message:String(e)};if(e instanceof Error&&e.name&&"Error"!==e.name&&(t.name=e.name),"object"==typeof e&&null!==e&&"code"in e){const n=e;"number"!=typeof n.code&&"string"!=typeof n.code||(t.code=n.code)}return t}function Ot(e,t,n,o,r){const s=z(t,n);return(t,i)=>{try{if(i)return r?function(e,t,n,o,r,s){const i=t.dlq=t.dlq||[],a={max:t.config.dlqMax??100},c=pt(i,[o,r],a);if(c.dropped>0){const t=kt(e.status,z("destination",n),"dlq",c.dropped);ht(i,s,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:n,cap:a.max,droppedCount:t})}else i.length<a.max&&mt(i);const u=bt(e,n);u.failed++,u.dlqSize=i.length,e.status.failed++;const d=wt(t.config.breaker);if(d){const o=t.config.id||n;yt(e.status.breakers,z("destination",o),"transport-failure",d.threshold,d.cooldown)}}(e,r,n,i,t,o):e.status.failed++,void o.error("report error",{...St(t),event:i.name});e.status.connectionErrors[s]=(e.status.connectionErrors[s]??0)+1,o.error("connection error",St(t))}catch{}}}function Et(e,t){const n=e.config||{},o=e[t];return void 0!==o?{config:{...n,[t]:o},chainValue:o}:{config:n,chainValue:void 0}}async function qt(e,t,n){if(t.init&&!t.config.init){const o=t.type||"unknown",r=e.logger.scope(`transformer:${o}`),s={collector:e,logger:r,id:n,ingest:re(n),config:t.config,env:Rt(t.config.env),reportError:Ot(e,"transformer",n,r)};r.debug("init");const i=await pe(t.init,"TransformerInit",e.hooks,e.logger)(s);if(!1===i)return!1;t.config={...i||t.config,env:i?.env||t.config.env,init:!0},r.debug("init done")}return!0}async function _t(e,t,n,o,r,s){const i=t.type||"unknown",a=e.logger.scope(`transformer:${i}`),c={collector:e,logger:a,id:n,ingest:r,config:t.config,env:{...Rt(t.config.env),...s?{respond:s}:{}},reportError:Ot(e,"transformer",n,a)};a.debug("push",{event:o.name});const u="string"==typeof o.id?o.id:"",d=et(o,r,e),l=Date.now(),f=tt(e,le("transformer",n),"transformer","in",u,l,d);f.inEvent=o,ie(e,f);try{const r=await pe(t.push,"TransformerPush",e.hooks,e.logger)(o,c),s=Date.now(),i=tt(e,le("transformer",n),"transformer","out",u,s,d);return i.durationMs=s-l,i.outEvent=r,ie(e,i),a.debug("push done"),r}catch(t){const o=Date.now(),r=tt(e,le("transformer",n),"transformer","error",u,o,d);throw r.durationMs=o-l,r.error=nt(t),ie(e,r),t}}function xt(e){return"string"==typeof e.id?e.id:""}function At(e,t){const n=xt(e);return""!==n&&""===xt(t)?{...t,id:n}:t}function It(e,t,n,o){const r=(a=n,{...a,_meta:{...a._meta,path:[...a._meta.path]}}),s=oe(t),i=xt(e);var a;if(""===i)return{event:s,ingest:r};r._meta.parentEventId=i;const c=xt(s);return""!==c&&c!==i||(s.id=se(i,o)),{event:s,ingest:r}}function Pt(e,t){return{copies:e,respond:t}}function jt(e,t){if(void 0===t)return e.rest;const n=e.ownNext?e.rest.slice(1):e.rest;return[{route:t,ancestry:e.ancestry},...n]}async function Dt(e,t,n){const o=await Promise.all(t.map((t,n)=>fe(Mt,t=>(e.collector.logger.scope("transformer:fork").error(`fork ${n} failed`,St(t)),{copies:[]}))(e,t))),r=[];let s,i=n,a=o.length>0;return o.forEach((e,n)=>{void 0!==t[n].respond&&e.respond&&(i=e.respond),e.stopped||(a=!1),e.stopped||0===e.copies.length?void 0===s&&(s=e.droppedBy):r.push(...e.copies)}),0===r.length?{copies:r,respond:i,...a?{stopped:!0}:{},...void 0!==s?{droppedBy:s}:{}}:Pt(r,i)}async function Mt(e,t){const{ingest:n}=t;let{stack:o,event:r,respond:s}=t,i=t.resume;for(;;){let t,a;if(i)t=i.member,a=i,i=void 0;else{const i=ne(o,ve(n,r),e.transformers);if("done"===i.kind)return Pt([{event:r,ingest:n}],s);if("stop"===i.kind)return{copies:[],respond:s,stopped:!0,...void 0!==i.owner?{droppedBy:i.owner}:{}};if("fork"===i.kind){const t=r;return Dt(e,i.branches.map((e,o)=>({stack:e,...It(t,t,n,o),respond:void 0})),s)}const a=e.transformers[i.id];t={id:i.id,ancestry:i.ancestry,rest:i.rest,ownNext:!!a&&void 0!==a.config.next}}const c=await Tt(e,t,r,n,s,a);if("halt"===c.kind)return c.result;if("fork"===c.kind)return Dt(e,c.copies,s);r=c.event,s=c.respond,o=c.stack}}async function Tt(e,t,n,o,r,s){const{collector:i,transformers:a,chainContext:c}=e,u=t.id,d=a[u];let l=n,f=r;const p=(e=t.rest)=>({kind:"continue",event:At(n,l),respond:f,stack:e}),g=e=>({kind:"halt",result:e});if(!d)return i.logger.warn(`Transformer not found: ${u}`),p();const h=d.config?.cache,m=h?ge(h):void 0,v=m?rt(m,i):void 0;let w=s?.cacheMiss;if(!s){if(o._meta.path.length>256)return i.logger.error(`Max path length exceeded at ${u}`),g({copies:[],respond:f});if(o._meta.hops++,o._meta.path.push(u),!await fe(qt,e=>{if(e instanceof ae)throw e;return i.status.failed++,i.logger.scope(`transformer:${d.type||"unknown"}`).error("transformer init failed",{transformer:u,...St(e)}),!1})(i,d,u))return g({copies:[],respond:f});if(c&&void 0!==d.config?.chainMocks?.[c]){const e=d.config.chainMocks[c];return i.logger.scope(`transformer:${d.type||"unknown"}`).debug("chainMock",{chain:c}),l=e,p()}if(void 0!==d.config?.mock)return i.logger.scope(`transformer:${d.type||"unknown"}`).debug("mock"),l=d.config.mock,p();if(d.config?.disabled)return p();if(m&&v){const e=await he(m,v,ve(o,l));if("HIT"===e?.status&&e.value)return l=e.value,m.stop?g({copies:[{event:At(n,l),ingest:o}],respond:f,stopped:!0}):p();"MISS"===e?.status&&(w={key:e.key,ttl:e.rule.ttl})}if(void 0!==d.config.before){const e=await async function(e,t,n,o,r,s,i){const a=t[n],c=a?a.config.before:void 0,u=await Ct(e,t,c,o,r,s,i);return u.stopped&&0===u.copies.length&&!u.droppedBy?{...u,droppedBy:n}:u}(i,a,u,l,o,f,c),n=e.respond??f;if(0===e.copies.length||e.stopped)return g({...e,respond:n});f=n;const[r]=e.copies;if(e.copies.length>1||r.ingest!==o){const n={member:t,cacheMiss:w};return{kind:"fork",copies:e.copies.map(e=>({stack:t.rest,event:e.event,ingest:e.ingest,respond:void 0,resume:n}))}}l=r.event}}const y=st(d.config?.state),b=y?.filter(e=>"get"===e.mode),k=y?.filter(e=>"set"===e.mode),S=async e=>k&&0!==k.length?it(i,k,e,o):e;b&&b.length>0&&(l=await it(i,b,l,o));const O=await fe(_t,e=>(i.status.failed++,i.logger.scope(`transformer:${d.type||"unknown"}`).error("Push failed",St(e)),!1))(i,d,u,l,o,f);if(!1===O)return g({copies:[],respond:f,droppedBy:u});if(Array.isArray(O)&&1!==O.length){if(0===O.length)return g({copies:[],respond:f});const e=l,n=[];for(let r=0;r<O.length;r++){const s=O[r],i=await S(s.event||e);n.push({stack:jt(t,s.next),...It(e,i,o,r),respond:f})}return{kind:"fork",copies:n}}const E=Array.isArray(O)?O[0]:O;let q;return E&&"object"==typeof E&&(E.respond&&(f=E.respond),E.event&&(l=E.event),q=E.next),l=await S(l),w&&v&&me(v,w.key,l,w.ttl),p(jt(t,q))}async function Ct(e,t,n,o,r,s,i){const a=r??re("string"==typeof n?n:"chain");return void 0===n?Pt([{event:o,ingest:a}],s):(i&&(a._meta.chainPath=i),Mt({collector:e,transformers:t,chainContext:i},{stack:ce(n)?n:de(n),event:o,ingest:a,respond:s}))}function Rt(e){return e&&ue(e)?e:{}}var $t=1e4;function Bt(e){return"number"==typeof e&&e>0?e:$t}var Wt=class extends Error{constructor(e){super(e),this.name="DestinationTimeoutError"}};function Lt(e,t,n){let o;const r=new Promise((e,r)=>{o=setTimeout(()=>r(new Wt(n)),t)});return Promise.race([e,r]).finally(()=>{o&&clearTimeout(o)})}async function Kt(e,t,n){if(!t.on||!t.queueOn?.length)return;const o=t.queueOn;t.queueOn=[];const r=n||t.config?.id||"unknown";for(const{type:n,data:s}of o){if(Yt(n)&&!nn(e,t,n))continue;const o=t.on;let i=!1;await U(()=>Lt(Promise.resolve(o(n,s)),$t,`Source "${r}" on(${n}) did not settle within 10000ms`),t=>{if(t instanceof N)throw t;t instanceof Wt?i=!0:e.status.failed++,e.logger.scope("source").error("source on flush failed",{sourceId:r,type:n,...St(t)})})(),Yt(n)&&!i&&tn(e,t,n)}}function zt(e){return Boolean(e.config.init)&&!e.config.require?.length}async function Ht(e,t,n){const{code:o,config:r={},env:s={},primary:i,next:a,before:c,cache:u,terminus:d}=n,l=r.state??n.state,f=st(l);at(e,te("source",t),l);const p=u,g=p?J({...p,stop:p.stop??!0}):void 0,h=d??e.push,m=Boolean(d),v=async(n,o,s)=>{if(m)return h(n);let i;const u="string"==typeof n.id&&""!==n.id?n:{...n,id:G()};let d=[{event:u,ingest:s.ingest}];if(void 0!==c){const n=`source.${t}.before`,o=await Ct(e,e.transformers||{},c,u,s.ingest,s.respond,n);if(0===o.copies.length)return ot(e,u,s.ingest,{reason:"dropped",by:o.droppedBy,at:n}),Un({ok:!0,dropped:!0});if(o.stopped)return o.respond&&(s.respond=o.respond),{ok:!0};o.respond&&(s.respond=o.respond),d=o.copies}if(g){const t=rt(g,e);if(t){const n=ee(s.ingest),o=await Y(g,t,n);if(o){if("HIT"===o.status&&void 0!==o.value&&g.stop){let t=o.value;return o.rule.update&&(t=await Z(t,o.rule.update,{...n,cache:{status:"HIT"}},e)),s.respond?.(t),{ok:!0}}if("MISS"===o.status&&g.stop&&s.respond){const r=s.respond,a=o.rule.update,c={...n,cache:{status:"MISS"}},u=o.key,d=o.rule.ttl,l=n=>{X(t,u,n,d),a?i=(async()=>{const t=await Z(n,a,c,e);r(t)})():r(n)};s.respond=l}"MISS"!==o.status||g.stop||X(t,o.key,!0,o.rule.ttl)}}}f&&f.length>0&&(d=await Promise.all(d.map(async t=>({event:await it(e,f,t.event,t.ingest),ingest:t.ingest}))));let l={ok:!0};for(const e of d)l=await h(e.event,{...o,id:t,ingest:e.ingest,respond:s.respond,mapping:r,preChain:a});return i&&await i,l},w=async n=>{const o=H(t),s=F(V(n)?n?.headers?.traceparent:void 0);if(s&&(o._meta.trace=s.trace,o._meta.parentEventId=s.parentSpan),!r.ingest||void 0===n)return o;const i=await Q(n,r.ingest,{collector:e});return{...o,...i,_meta:o._meta}},y=e.logger.scope("source").scope(t),b={...s,push:async(e,n={})=>{const o={ingest:H(t),respond:void 0};return v(e,n,o)},command:e.command,sources:e.sources,elb:e.elb,logger:y},k={collector:e,logger:y,id:t,config:r,env:b,withScope:async(e,t,n)=>{const o={ingest:await w(e),respond:t};return n({...b,push:(e,t={})=>v(e,t,o),ingest:o.ingest,respond:o.respond})},reportError:Ot(e,"source",t,y)},S=await U(o,n=>{if(n instanceof N)throw n;e.status.failed++,e.logger.scope("source").error("source factory failed",{sourceId:t,...St(n)})})(k);if(!S)return;const O=S.type||"unknown",E=e.logger.scope(O).scope(t);return b.logger=E,i&&(S.config={...S.config,primary:i}),S}async function Nt(e){for(const[t,n]of Object.entries(e.sources)){if(zt(n))continue;const o=n.config.require;if(!o?.length)continue;const r=o.filter(t=>!Zt(e,t));r.length!==o.length&&(n.config.require=r,zt(n)&&await Kt(e,n,t))}for(const[t,n]of Object.entries(e.pending.destinations)){if(!e.pending.destinations[t]||e.destinations[t])continue;const o=n.config?.require;if(!o)continue;const r=o.filter(t=>!Zt(e,t));if(n.config&&(n.config.require=r),r.length>0)continue;delete e.pending.destinations[t];const s=Jn(n);!1!==s.config.queue&&(s.queuePush=[...e.queue]),e.destinations[t]=s,await Mn(e,s,t)}}function Qt(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 Gt=!1;function Ft(){Gt||(Gt=!0,"undefined"!=typeof console&&"function"==typeof console.warn&&console.warn("walkerOS: ignored an on-dispatch call with a non-collector argument"))}function Vt(e,t,n,o){if(n instanceof W)throw n;e.logger.scope("on").error("on callback failed",{kind:t,...o,...St(n)})}var Ut=["consent","user","globals","custom"];function Jt(e){return Ut.includes(e)}function Yt(e){return Jt(e)}function Xt(e,t){return Jt(t)&&Object.keys(e[t]).length>0}function Zt(e,t){if(Jt(t))return Xt(e,t);switch(t){case Ze.Run:case Ze.Ready:return!0===e.allowed;default:return e.seenEvents.has(String(t))}}function en(e,t){return e.cellVersion?.[String(t)]??0}function tn(e,t,n){qn(e,t,n,en(e,n))}function nn(e,t,n){return e.allowed&&en(e,n)>function(e,t,n){const o=e.delivery.get(t),r=o?.[String(n)];return void 0===r?-1:r}(e,t,n)}var on=8;function rn(e){const t=e.cascade;if(t&&!sn.has(t))return()=>{};const n=t||{counts:new WeakMap};e.cascade=n,sn.set(n,(sn.get(n)||0)+1);let o=!1;return()=>{if(o)return;o=!0;const t=(sn.get(n)||1)-1;t>0?sn.set(n,t):(sn.delete(n),e.cascade===n&&(e.cascade=void 0))}}var sn=new WeakMap;function an(e,t,n){const o=e.cascade;if(!o)return!0;let r=o.counts.get(t);r||(r={},o.counts.set(t,r));const s=String(n),i=(r[s]||0)+1;return r[s]=i,i<=on||(i===on+1&&e.logger.error("state delivery did not converge",{type:s}),!1)}function cn(e,t){return{collector:e,logger:e.logger.scope("on").scope(String(t))}}async function un(e,t,n,o,r){const s=t.on;if(!s)return!0;const i=Yt(o);if(i&&(dn.get(t)||ln.has(t)))return kn(e,t,o),dn.get(t)||fn.add(t),!1;const a=i?en(e,o):0,c=i&&function(e,t,n,o){if(wn.get(t)?.has(String(n)))return!0;const r=e.delivery?.get(t)?.[String(n)];return void 0===r||r<o-1}(e,t,o,a)?xn(e,o):r,u=t.type||"unknown",d=e.logger.scope(u).scope("on").scope(o),l={collector:e,logger:d,id:n,config:t.config,data:c,env:Yn(t.env,t.config.env),reportError:Ot(e,"destination",n,d,t)};i&&(On(t,o),function(e,t,n){let o=mn.get(e);o||(o={},mn.set(e,o));const r=String(t),s=o[r];(void 0===s||s<n)&&(o[r]=n)}(t,o,a),ln.add(t));const f=Bt(t.config.timeout);let p=Promise.resolve(),g=!0,h=!1,m=!0;try{await K(()=>(p=Promise.resolve(s(o,l)),Lt(p,f,`Destination "${n}" on(${o}) did not settle within ${f}ms`)),t=>{g=!1,t instanceof Wt&&(h=!0),Vt(e,"destination",t,{destId:n,type:o})})(),m=!1}finally{if(i){ln.delete(t),m&&fn.delete(t);const r=wn.get(t);g?(qn(e,t,o,a),r?.delete(String(o))):kn(e,t,o),h?function(e,t,n,o,r,s,i){dn.set(t,(dn.get(t)||0)+1);const a=()=>{const s=(dn.get(t)||0)-1;var a,c,u,d;s>0?dn.set(t,s):dn.delete(t),yn(t,o),vn(t,o,r),En(e,t),i.debug("late settle after timeout"),fn.delete(t),e.allowed&&e.destinations[n]===t&&(a=e,c=t,u=n,d=i,K(async()=>{await Mn(a,c,u),!gn(c)&&c.queuePush?.length&&await Nn(a,void 0,{},{[u]:c})},e=>{d.error("state recovery failed",St(e))})())};s.then(a,a)}(e,t,n,o,a,p,d):(vn(t,o,a),En(e,t))}}return i&&!h&&fn.delete(t)&&await Mn(e,t,n),g}var dn=new WeakMap,ln=new WeakSet,fn=new WeakSet,pn=new WeakMap;function gn(e){return pn.get(e)}var hn=new WeakMap,mn=new WeakMap;function vn(e,t,n){const o=mn.get(e);o&&o[String(t)]===n&&delete o[String(t)]}var wn=new WeakMap;function yn(e,t){const n=wn.get(e);n?n.add(String(t)):wn.set(e,new Set([String(t)]))}var bn=new WeakMap;function kn(e,t,n){!function(e,t,n){const o=e.delivery?.get(t);o&&delete o[String(n)]}(e,t,n),yn(t,n),pn.set(t,{type:n,since:Date.now()})}function Sn(e,t){return!!wn.get(t)?.size||Ut.some(n=>Xt(e,n)&&nn(e,t,n))}function On(e,t){hn.set(e,(hn.get(e)||0)+1),pn.set(e,{type:t,since:Date.now()})}function En(e,t){const n=(hn.get(t)||0)-1;var o,r;n>0?hn.set(t,n):hn.delete(t),o=e,r=t,pn.has(r)&&(hn.get(r)||Sn(o,r)||pn.delete(r))}function qn(e,t,n,o){let r=e.delivery.get(t);r||(r={},e.delivery.set(t,r));const s=String(n),i=r[s];(void 0===i||i<o)&&(r[s]=o)}function _n(e,t,n,o){if(!Qt(e))return void Ft();const r=xn(e,t,o);if(n.length)switch(t){case Ze.Consent:!function(e,t,n){const o=n||e.consent,r=cn(e,Ze.Consent);t.forEach(t=>{nn(e,t,Ze.Consent)&&an(e,t,Ze.Consent)&&(Object.keys(o).filter(e=>e in t).forEach(n=>{L(t[n],t=>Vt(e,"consent",t,{key:n}))(o,r)}),tn(e,t,Ze.Consent))})}(e,n,o);break;case Ze.Ready:!function(e,t){if(!e.allowed)return;const n=cn(e,Ze.Ready);t.forEach(t=>{L(t,t=>Vt(e,"ready",t))(void 0,n)})}(e,n);break;case Ze.Run:!function(e,t){if(!e.allowed)return;const n=cn(e,Ze.Run);t.forEach(t=>{L(t,t=>Vt(e,"run",t))(void 0,n)})}(e,n);break;case Ze.Session:!function(e,t){if(!e.session)return;const n=cn(e,Ze.Session);t.forEach(t=>{L(t,t=>Vt(e,"session",t))(e.session,n)})}(e,n);break;default:{const o=cn(e,t),s=Yt(t);n.forEach(n=>{"function"==typeof n&&(s&&!nn(e,n,t)||s&&!an(e,n,t)||(L(n,n=>Vt(e,"generic",n,{type:t}))(r,o),s&&tn(e,n,t)))});break}}}function xn(e,t,n){if(Jt(t))return n||e[t];switch(t){case Ze.Session:return e.session;case Ze.Config:return n||e.config;default:return}}async function An(e,t,n,o,r){if(!t.on)return!1;if(Yt(o)&&!nn(e,t,o))return!1;if(Yt(o)&&!an(e,t,o))return!1;const s=Yt(o);if(s&&In.has(t))return Pn.add(t),!1;const i=s?en(e,o):0;s&&In.add(t);const a=t.on;let c,u=Promise.resolve(),d=!1;try{c=await K(()=>(u=Promise.resolve(a(o,r)),Lt(u,$t,`Source "${n}" on(${o}) did not settle within 10000ms`)),t=>{t instanceof Wt&&(d=!0),Vt(e,"source",t,{sourceId:n,type:o})})()}finally{s&&!d&&In.delete(t)}if(s)if(d){const o=()=>{In.delete(t),Pn.delete(t),e.allowed&&e.sources[n]===t&&K(()=>jn(e,t,n),t=>{e.logger.scope("on").error("state recovery failed",St(t))})()};u.then(o,o)}else qn(e,t,o,i),Pn.delete(t)&&await jn(e,t,n);return!1===c}var In=new WeakSet,Pn=new WeakSet;async function jn(e,t,n){const o=rn(e);try{for(const o of Ut)await An(e,t,n,o,xn(e,o))}finally{o()}}async function Dn(e,t,n,o,r){if(!t.on)return;const s=Yt(o);if(s&&!nn(e,t,o))return;const i=mn.get(t)?.[String(o)];if(s&&void 0!==i&&i>=en(e,o))return;if(s&&!an(e,t,o)){if(t.config.init)return void kn(e,t,o);const n=t.queueOn=t.queueOn||[],r={type:o,data:xn(e,o)},s=n[n.length-1];return s&&s.type===o?n[n.length-1]=r:n.push(r),tn(e,t,o),void wn.get(t)?.delete(String(o))}const a=bn.get(t);if(!t.config.init||a)return t.queueOn=t.queueOn||[],t.queueOn.push({type:o,data:r}),void(s&&(tn(e,t,o),a&&!a.held&&(On(t,o),a.held=!0)));await un(e,t,n,o,r)}async function Mn(e,t,n){if(!t.on)return;const o=rn(e);try{for(const o of Ut)(Xt(e,o)||wn.get(t)?.has(String(o)))&&await Dn(e,t,n,o,xn(e,o))}finally{o()}}function Tn(e){return(hn.get(e)||0)>0}function Cn(e,t,n){return n.catch(()=>{}),{id:e,destination:t,done:n}}var Rn=1e3,$n=1e3,Bn=3e4,Wn=Object.freeze({batched:!0});function Ln(e){return e===Wn}var Kn=" batch-all";function zn(e){return void 0===e?{}:"number"==typeof e?{wait:e}:{wait:e.wait,size:e.size,age:e.age}}function Hn(e){for(const t of e)gn(t.destination)&&(t.drain=!0)}async function Nn(e,t,n={},o){if(!e.allowed)return Un({ok:!1});if(!t)return Qn(e,void 0,n,o);const r=await async function(e,t,n={}){const o=n.ingest??g(n.id||"unknown"),r=e.config.next;if(void 0===r)return{copies:[{event:t,ingest:o}],respond:n.respond};const s=await Ct(e,e.transformers||{},r,t,o,n.respond,so),i=s.respond??n.respond;return 0===s.copies.length?(e.logger.debug("Event dropped by collector.next"+(s.droppedBy?` (${s.droppedBy})`:"")),ot(e,t,o,{reason:"dropped",by:s.droppedBy,at:so}),{copies:[],respond:i,dropped:!0}):s.stopped?{copies:[],respond:i}:{copies:s.copies.map(t=>({event:oo(e,t.event,t.ingest),ingest:t.ingest})),respond:i}}(e,t,n);if(0===r.copies.length)return Un({ok:!0,...r.dropped?{dropped:!0}:{}});const s=[];for(const t of r.copies)s.push(await Qn(e,t.event,{id:n.id,ingest:t.ingest,respond:r.respond},o));return s[0]}async function Qn(e,t,n,o){const{user:r}=e;if(t){const n=ft(e.config.queueMax),o=pt(e.queue,t,{max:n});if(o.dropped>0){const t=kt(e.status,j("collector"),"queue",o.dropped);ht(e.queue,e.logger,"collector.queue overflow; oldest events dropped",{buffer:"queue",cap:n,droppedCount:t})}else e.queue.length<n&&mt(e.queue);e.status.in++}o||(o=e.destinations);const s=e.transformers||{},i=await Promise.all(Object.entries(o||{}).map(async([o,i])=>{if(i.config.disabled)return{id:o,destination:i,skipped:!0};const a=i.config.id||o,c=j("destination",a),u=wt(i.config.breaker);if(u&&function(e,t,n){const o=e[t];if(!o||"closed"===o.state)return!1;if("half-open"===o.state)return!0===o.probing;const r=vt();return void 0!==o.openUntil&&r<o.openUntil||(o.state="half-open",o.probing=!0,o.openUntil=r+n,!1)}(e.status.breakers,c,u.cooldown))return{id:o,destination:i,skipped:!0};const d=t=>{u&&yt(e.status.breakers,c,t,u.threshold,u.cooldown)},l=()=>{u&&function(e,t){const n=e[t];n&&"half-open"===n.state&&!0===n.probing&&(n.state="open",n.probing=!1)}(e.status.breakers,c)},f=t=>{if(!t.length)return;i.queuePush||(i.queuePush=[]);const n=i.queuePush,r=i.config.id||o,s={max:i.config.queueMax??Rn};let a=0;for(const e of t)a+=pt(n,e,s).dropped;if(a>0){bt(e,r);const t=kt(e.status,j("destination",r),"queue",a);ht(n,e.logger.scope(i.type||"unknown"),"destination.queuePush overflow; oldest events dropped",{buffer:"queuePush",destination:r,cap:s.max,droppedCount:t})}else n.length<s.max&&mt(n)};i.on&&i.config.init&&!gn(i)&&!Tn(i)&&Sn(e,i)&&await Mn(e,i,o);const p=gn(i);if(p&&!Tn(i)&&Date.now()-p.since>=Bt(i.config.timeout)&&await Mn(e,i,o),gn(i)){if(l(),!t)return{id:o,destination:i,skipped:!0};const e=[v(t)];return f(e),{id:o,destination:i,queue:e}}let g=(i.queuePush||[]).map(t=>({...t,consent:e.consent}));i.queuePush=[],t&&g.push(v(t));const S=n.ingest?{...n.ingest,_meta:{...n.ingest._meta,path:[...n.ingest._meta.path]}}:k("unknown");if(!g.length&&!i.queueOn?.length)return l(),{id:o,destination:i,skipped:!0};if(!g.length&&i.queueOn?.length){if(!q(i.config.consent,e.consent))return l(),{id:o,destination:i,skipped:!0};let t=!1;try{t=await Fn(e,i,o,!0)}catch(t){e.status.failed++;const n=i.type||"unknown";e.logger.scope(n).error("destination init failed",{error:t instanceof Error?t.message:String(t)}),d("transport-failure")}if(gn(i))return l(),{id:o,destination:i,skipped:!0};if(!t||!i.queuePush?.length)return l(),{id:o,destination:i,skipped:!t};g=i.queuePush.map(t=>({...t,consent:e.consent})),i.queuePush=[]}const E=t=>{const n=e.consent,r=[],s=t.filter(t=>{const s=q(i.config.consent,n,t.consent);if(s)return t.consent=s,r.push(t),!1;const a=tt(e,j("destination",o),"destination","skip","string"==typeof t.id?t.id:"",Date.now(),et(t,S,e));return a.skipReason="consent",n&&(a.consent={...n}),i.config.consent&&(a.meta={required:{...i.config.consent}}),O(e,a),!0});return{allowed:r,skipped:s}},_=e.consent,{allowed:x,skipped:A}=E(g);if(f(A),!x.length)return l(),{id:o,destination:i,queue:g};const I=new Set(i.queuePush);let P=!1;try{P=await Fn(e,i,o,!0)}catch(t){e.status.failed++;const n=i.type||"unknown";e.logger.scope(n).error("destination init failed",{error:t instanceof Error?t.message:String(t)}),d("transport-failure")}if(!P)return l(),{id:o,destination:i,queue:g};if(gn(i))return l(),f(x),{id:o,destination:i,queue:x};const M=[];if(e.consent!==_){const t=E(x.map(t=>({...t,consent:e.consent})));x.splice(0,x.length,...t.allowed),M.push(...t.skipped)}const T=i.queuePush||[],C=T.filter(e=>!I.has(e));if(C.length){i.queuePush=T.filter(e=>I.has(e));const t=E(C.map(t=>({...t,consent:e.consent})));x.push(...t.allowed),M.push(...t.skipped)}if(f(M),!x.length)return l(),M.length?{id:o,destination:i,queue:M}:{id:o,destination:i,skipped:!0};let R,$;i.dlq||(i.dlq=[]);const B=i.config.before,W=i.config.next,L=i.config?.cache,K=L?w(L):void 0,z=K?rt(K,e):void 0,H=st(i.config?.state),N=H?.filter(e=>"get"===e.mode),Q=H?.filter(e=>"set"===e.mode);let G=0,F=0,V=0;return await Promise.all(x.map(async t=>{let a,c;if(t.user=h(r,t.user),K?.stop&&z){const e=m(S,t),n=await y(K,z,e);if("HIT"===n?.status)return t;"MISS"===n?.status&&(a={key:n.key,ttl:n.rule.ttl})}let u=[{event:t,ingest:S}],d=n.respond;if(void 0!==B){const r=`destination.${o}.before`,i=await Ct(e,s,B,t,S,n.respond,r);if(0===i.copies.length){const n=tt(e,j("destination",o),"destination","skip","string"==typeof t.id?t.id:"",Date.now(),et(t,S,e));return n.skipReason="dropped",n.meta={by:i.droppedBy??"route",at:r},O(e,n),t}i.respond&&(d=i.respond),u=i.copies.map(e=>({event:e.event,ingest:e.ingest}))}const l=async(t,n,r)=>{let a=r,u=!1;if(K&&!K.stop&&z){const e=m(n,t??void 0),o=await y(K,z,e);if("HIT"===o?.status)return!1;"MISS"===o?.status&&(a={key:o.key,ttl:o.rule.ttl},u=!0)}N&&N.length>0&&t&&(t=await it(e,N,t,n));const l=Date.now();let f=!1;const p=await D(Vn,n=>{const r=i.type||"unknown";e.logger.scope(r).error("Push failed",{...St(n),event:t.name}),R=n,f=!0;const s=i.dlq,a=i.config.id||o,c={max:i.config.dlqMax??100},u=pt(s,[t,n],c);if(u.dropped>0){bt(e,a);const t=kt(e.status,j("destination",a),"dlq",u.dropped);ht(s,e.logger.scope(i.type||"unknown"),"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:a,cap:c.max,droppedCount:t})}else s.length<c.max&&mt(s)})(e,i,o,t,n,d);if(G+=Date.now()-l,a&&z&&void 0===i.config.mock&&(u?b(z,a.key,p??!0,a.ttl):void 0===c&&(c=p??!0)),!f&&!Ln(p)&&Q&&Q.length>0&&t&&(t=await it(e,Q,t,n)),void 0===p||Ln(p)||($=p),Ln(p)&&F++,!f&&W){void 0!==p&&(n._response=p);const r=await Ct(e,s,W,t,n,d,`destination.${o}.next`);r.respond&&(d=r.respond)}return!0};for(const e of u)await l(e.event,e.ingest,a)&&V++;return a&&z&&void 0!==c&&void 0===i.config.mock&&b(z,a.key,c,a.ttl),t})),{id:o,destination:i,error:R,response:$,totalDuration:G,batchedCount:F,allowedCount:x.length,pushedCount:V,canonicalId:a,breakerConfig:u}})),a={},c={},u={};for(const t of i){if(t.skipped)continue;const n=t.destination,o={type:n.type||"unknown",data:t.response};bt(e,t.id);const r=e.status.destinations[t.id],s=Date.now();r.queuePushSize=n.queuePush?.length??0,r.dlqSize=n.dlq?.length??0;const i=t.breakerConfig,d=t.canonicalId?j("destination",t.canonicalId):void 0,l=t=>{i&&d&&yt(e.status.breakers,d,t,i.threshold,i.cooldown)};if(t.error)o.error=t.error,u[t.id]=o,r.failed++,r.lastAt=s,r.duration+=t.totalDuration||0,e.status.failed++,l("transport-failure");else if(t.queue&&t.queue.length)c[t.id]=o;else{const n=t.batchedCount??0,i=t.allowedCount??0,c=t.pushedCount??i;(Math.max(0,c-n)>0||0===i)&&(a[t.id]=o,r.count++,r.lastAt=s,r.duration+=t.totalDuration||0,e.status.out++,l("success"))}}return Un({event:t,...Object.keys(a).length&&{done:a},...Object.keys(c).length&&{queued:c},...Object.keys(u).length&&{failed:u}})}var Gn=new WeakMap;async function Fn(e,t,n,o=!1){if(t.init&&!t.config.init){if(!o&&function(e){const t=e.config.consent;return!!t&&Object.keys(t).length>0}(t))return e.logger.scope(t.type||"unknown").debug("init blocked: consent gate not cleared"),!1;const r=Gn.get(t);if(r)return r;const s=async function(e,t,n,o){const r=await async function(e,t,n,o){const r=t.type||"unknown",s=e.logger.scope(r),i={collector:e,logger:s,id:o,config:t.config,env:Yn(t.env,t.config.env),reportError:Ot(e,"destination",o,s,t)};s.debug("init");const a=Date.now();let c;O(e,tt(e,j("destination",o),"destination","init","",a));try{c=await M(n,"DestinationInit",e.hooks,e.logger)(i)}catch(t){const n=Date.now(),r=tt(e,j("destination",o),"destination","error","",n);throw r.durationMs=n-a,r.error=nt(t),O(e,r),t}return!1!==c&&{...c||t.config,init:!0}}(e,t,n,o);if(!1===r)return!1;if(t.config=r,t.queueOn?.length){const n=rn(e);!function(e){const t=e.queueOn?.find(({type:e})=>Yt(e));t&&On(e,t.type),bn.set(e,{held:!!t})}(t);try{for(let n=t.queueOn?.shift();n;n=t.queueOn?.shift())await un(e,t,o,n.type,n.data)}catch(n){for(const{type:n}of t.queueOn||[])Yt(n)&&kn(e,t,n);throw t.queueOn=[],n}finally{!function(e,t){const n=bn.get(t);bn.delete(t),n?.held&&En(e,t)}(e,t),n()}}return e.logger.scope(t.type||"unknown").debug("init done"),!0}(e,t,t.init,n);Gn.set(t,s);try{return await s}finally{Gn.delete(t)}}return!0}async function Vn(e,t,n,o,r,s){const{config:i}=t,a=await P(o,i,e);if(a.ignore)return!1;const c=t.type||"unknown",u=e.logger.scope(c),d={collector:e,logger:u,id:n,config:i,data:a.data,rule:a.mapping,ingest:r,env:{...Yn(t.env,i.env),...s?{respond:s}:{}},reportError:Ot(e,"destination",n,u,t)};if(void 0!==i.mock)return u.debug("mock",{event:a.event.name}),i.mock;const l=a.mapping,f=void 0!==l?.batch,p=f?a.mappingKey||"* *":Kn;if((f||void 0!==i.batch)&&t.pushBatch&&void 0===i.mock){if(t.batches=t.batches||{},!t.batches[p]){const o={key:p,entries:[],events:[],data:[]},r=zn(l?.batch),s=zn(i.batch),a=r.wait??s.wait??Bn,c=r.size??s.size??$n,d=r.age??s.age??Bn,g=Yn(t.env,i.env),h=S(async()=>{const o=t.batches[p],r=o.batched;if(0===r.entries.length)return;const s={key:r.key,entries:r.entries,events:r.events,data:r.data};r.entries=[],r.events=[],r.data=[];const a=s.entries[0],c={collector:e,logger:u,id:n,config:i,data:void 0,rule:o.isDefault?void 0:a.rule,ingest:a.ingest,env:{...g,...a.respond?{respond:a.respond}:{}},reportError:Ot(e,"destination",n,u,t)};u.debug("push batch",{events:s.entries.length});const d=t.config.id||n,l=bt(e,d),f=wt(t.config.breaker),h=j("destination",d),m=t=>{f&&yt(e.status.breakers,h,t,f.threshold,f.cooldown)},v=Date.now(),w=new Map;let y,b=!1;const k=n=>{const o=t.dlq=t.dlq||[],r={max:t.config.dlqMax??100};let s=0;for(const e of n)s+=pt(o,e,r).dropped;if(s>0){const t=kt(e.status,j("destination",d),"dlq",s);ht(o,u,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:d,cap:r.max,droppedCount:t})}else o.length<r.max&&mt(o);l.failed+=n.length,l.dlqSize=o.length,e.status.failed+=n.length};let S=s.entries.length;const E=Bt(i.timeout),q=await D((o,r)=>Lt(Promise.resolve(M(t.pushBatch,"DestinationPushBatch",e.hooks,e.logger)(o,r)),E,`Destination "${n}" batch delivery timed out after ${E}ms`),e=>{S=0,b=!0,y=e,k(s.entries.map(t=>[t.event,e])),m("transport-failure"),u.error("Push batch failed",{error:e instanceof Error?e.message:String(e),entries:s.entries.length})})(s,c);if(A(_=q)&&Array.isArray(_.failed)&&q.failed.length>0){const e=[];for(const t of q.failed){const n=s.entries[t.index];if(!n||w.has(t.index))continue;const o=t.error??new Error(`Push batch entry ${t.index} failed (no per-row error provided)`);w.set(t.index,o),e.push([n.event,o])}if(e.length>0){k(e),S=Math.max(0,s.entries.length-e.length);const t=new Map;for(const[,n]of e){const e=n instanceof Error&&"code"in n&&"string"==typeof n.code?n.code:n instanceof Error?n.name:"Error",o=t.get(e);o?o.count++:t.set(e,{code:e,count:1,message:n instanceof Error?n.message:String(n)})}u.error("Push batch partial failure",{failed:e.length,delivered:S,entries:s.entries.length,causes:[...t.values()]})}}var _;const x=Date.now();s.entries.forEach((t,o)=>{const r=b||w.has(o),i=et(t.event,t.ingest,e),a=tt(e,j("destination",n),"destination",r?"error":"flush","string"==typeof t.event.id?t.event.id:"",x,i);if(a.batch={size:s.entries.length,index:o},a.durationMs=x-v,r){const e=b?y:w.get(o);a.error=nt(e)}O(e,a)}),u.debug("push batch done"),l.inFlightBatch=Math.max(0,(l.inFlightBatch??0)-s.entries.length),S>0&&(l.count+=S,l.lastAt=Date.now(),e.status.out+=S,m("success"))},{wait:a,size:c,age:d});t.batches[p]={batched:o,isDefault:!f,batchFn:()=>{h()},flush:async()=>{await h.flush()}}}const c=t.batches[p];c.batched.entries.push({event:a.event,ingest:r,respond:s,rule:l,data:a.data}),c.batched.events.push(a.event),_(a.data)&&c.batched.data.push(a.data);const d="string"==typeof a.event.id?a.event.id:"",g=et(o,r,e),h=Date.now(),m=tt(e,j("destination",n),"destination","in",d,h,g);a.mappingKey&&(m.mappingKey=a.mappingKey),a.event.consent&&(m.consent={...a.event.consent}),m.inEvent=a.event,O(e,m);const v=tt(e,j("destination",n),"destination","out",d,h,g);a.mappingKey&&(v.mappingKey=a.mappingKey),v.outEvent=a.event,v.batch={size:c.batched.entries.length,index:c.batched.entries.length-1},O(e,v);const w=t.config.id||n,y=bt(e,w);return y.inFlightBatch=(y.inFlightBatch??0)+1,c.batchFn(),Wn}{let s;if(u.debug("push",{event:a.event.name}),("undefined"==typeof __WALKEROS_OBSERVE__||__WALKEROS_OBSERVE__)&&"trace"===e.observeLevel?.()&&Array.isArray(t.calls)&&t.calls.length>0){const e=function(e){const{simulation:t,...n}=e,o={},r=new WeakMap;for(const[e,t]of Object.entries(n))o[e]="function"==typeof t?t:ct(t,r,1);const s=$(o,t);return{wrappedEnv:s.env,calls:s.calls,unresolved:s.unresolved}}({...d.env,simulation:t.calls});d.env=e.wrappedEnv,s=e.calls,e.unresolved.length>0&&(e.wrappedEnv[I]={paths:e.unresolved,record:(t,n)=>e.calls.push({fn:t,args:n,ts:Date.now()})})}const c="string"==typeof a.event.id?a.event.id:"",l=et(o,r,e),f=Date.now(),p=tt(e,j("destination",n),"destination","in",c,f,l);a.mappingKey&&(p.mappingKey=a.mappingKey),a.event.consent&&(p.consent={...a.event.consent}),p.inEvent=a.event,O(e,p);try{const o=Bt(i.timeout),r=await Lt(Promise.resolve(M(t.push,"DestinationPush",e.hooks,e.logger)(a.event,d)),o,`Destination "${n}" delivery timed out after ${o}ms`),p=Date.now(),g=tt(e,j("destination",n),"destination","out",c,p,l);return g.durationMs=p-f,g.outEvent=a.event,lt(g,s),_(r)&&(g.meta={...g.meta,response:r}),a.mappingKey&&(g.mappingKey=a.mappingKey),O(e,g),u.debug("push done"),r}catch(t){const o=Date.now(),r=tt(e,j("destination",n),"destination","error",c,o,l);throw r.durationMs=o-f,r.error=nt(t),lt(r,s),a.mappingKey&&(r.mappingKey=a.mappingKey),O(e,r),t}}}function Un(e){return{ok:!e?.failed,...e}}function Jn(e){const{code:t,config:n={},env:o={},cache:r,state:s}=e,{config:i}=Et(e,"before"),{config:a}=Et({...e,config:i},"next"),c={...t.config,...n,...a};r&&(c.cache=r),void 0!==s&&void 0===c.state&&(c.state=s);const u=Yn(t.env,o);return{...t,config:c,env:u}}function Yn(e,t){return e||t?t?e&&A(e)&&A(t)?{...e,...t}:t:e:{}}async function Xn(e,t,n){const o=Object.entries(e).map(async([e,o])=>{const r=o.destroy;if(!r)return;const s=o.type||"unknown",i=n.scope(s),a={id:e,config:o.config,env:o.env??{},logger:i};let c;try{await Promise.race([r(a),new Promise((n,o)=>{c=setTimeout(()=>o(new Error(`${t} '${e}' destroy timed out`)),5e3)})])}catch(n){i.error(`${t} '${e}' destroy failed: ${n}`)}finally{c&&clearTimeout(c)}});await Promise.allSettled(o)}function Zn(e,t){e.stateVersion++,e.cellVersion[t]=e.stateVersion}async function eo(e,t,n){let o,r,s=!1;const i=[],a=rn(e);try{return await async function(){switch(t){case Ze.Config:Ae(n)&&(Se(e.config,n,{shallow:!1,merge:!1}),r=n,s=!0);break;case Ze.Consent:if(Ae(n)){const{update:t}=function(e,t){const n={};return Object.entries(t).forEach(([e,t])=>{n[e]=!!t}),e.consent=p(e.consent,n),{update:n}}(e,n);Zn(e,Ze.Consent),r=t,s=!0}break;case Ze.Custom:Ae(n)&&(e.custom=Se(e.custom,n),Zn(e,Ze.Custom),r=n,s=!0);break;case Ze.Destination:Ae(n)&&"code"in n&&Ae(n.code)&&(o=await async function(e,t){const{code:n,config:o={},env:r={},before:s,next:i,cache:a,state:c}=t;if(!x(n.push))return Un({ok:!1,failed:{invalid:{type:"invalid",error:"Destination code must have a push method"}}});const u={...n.config,...o||{init:!1}};let d=s?{...u,before:s}:{...u};i&&(d={...d,next:i}),a&&(d={...d,cache:a}),void 0!==c&&void 0===d.state&&(d={...d,state:c});let l=d.id;if(!l)do{l=E(5,"abcdefghijklmnopqrstuvwxyz")}while(e.destinations[l]||e.pending.destinations[l]);if(at(e,j("destination",l),d.state),d.require?.length){e.pending.destinations[l]=t,await Nt(e);const n=e.destinations[l];return n?Nn(e,void 0,{},{[l]:n}):Un({ok:!0})}const f={...n,config:d,env:Yn(n.env,r)};return e.destinations[l]=f,!1!==f.config.queue&&(f.queuePush=[...e.queue]),await Mn(e,f,l),Nn(e,void 0,{},{[l]:f})}(e,n));break;case Ze.Globals:Ae(n)&&(e.globals=Se(e.globals,n),Zn(e,Ze.Globals),r=n,s=!0);break;case Ze.Hook:if(Ae(n)&&xe(n.name)&&_e(n.fn)){const{name:t,fn:o}=n;e.hooks[t]=o,r=n,s=!0}break;case Ze.On:if(Ae(n)&&xe(n.type)){const{type:t,rules:o}=n;await async function(e,t,n){if(!Qt(e))return void Ft();const o=e.on,r=o[t]||[],s=B(n)?n:[n];s.forEach(e=>{r.push(e)}),o[t]=r,_n(e,t,s)}(e,t,o)}break;case Ze.Ready:s=!0;break;case Ze.Run:o=await async function(e,t,n){e.allowed=!0,e.timing=Date.now(),e.trace=Ee(),e.count=0,t&&(t.consent&&(e.consent=Se(e.consent,t.consent),Zn(e,Ze.Consent)),t.user&&(e.user=Se(e.user,t.user),Zn(e,Ze.User)),t.globals&&(e.globals=Se(e.config.globalsStatic||{},t.globals),Zn(e,Ze.Globals)),t.custom&&(e.custom=Se(e.custom,t.custom),Zn(e,Ze.Custom))),Object.values(e.destinations).forEach(e=>{e.queuePush=[]}),e.queue=[],e.round++,await Nt(e);const o=await async function(e){if(!Qt(e))return Ft(),[];const t=[];for(const[n,o]of Object.entries(e.destinations)){if(!o.on)continue;const r=async()=>{for(const t of Ut)Xt(e,t)&&await Dn(e,o,n,t,xn(e,t))};t.push(Cn(n,o,r()))}for(const t of Ut){if(!Xt(e,t))continue;const n=xn(e,t);_n(e,t,e.on[t]||[]),await Promise.all(Object.entries(e.sources).filter(([,e])=>zt(e)).map(([o,r])=>An(e,r,o,t,n)))}return t}(e);let r=!0;const s={};if(e.preRunQueue.length){const t=e.preRunQueue.splice(0);e.logger.debug("replaying pre-run events",{count:t.length});for(const{event:n,options:o}of t){const t=await e.push(n,o);!1===t.ok&&(r=!1),t.failed&&Object.assign(s,t.failed)}}Hn(o);const i=await Nn(e);if(n.push(...o),r)return i;const a={...i.failed??{},...s};return{...i,ok:!1,...Object.keys(a).length>0?{failed:a}:{}}}(e,n,i),s=!0;break;case Ze.Session:s=!0;break;case Ze.Shutdown:e.hasShutdown||(e.hasShutdown=!0,await async function(e){const t=e.logger;await Xn(e.sources,"source",t),await async function(e,t){const n=Object.entries(e).flatMap(([e,n])=>{const o=n.batches;if(!o)return[];const r=t.scope(n.type||"destination");return Object.values(o).map(async t=>{let n;try{await Promise.race([t.flush(),new Promise((t,o)=>{n=setTimeout(()=>o(new Error(`destination '${e}' batch flush timed out`)),5e3)})])}catch(t){r.error(`destination '${e}' batch flush failed: ${t}`)}finally{n&&clearTimeout(n)}})});await Promise.allSettled(n)}(e.destinations,t),await Xn(e.destinations,"destination",t),await Xn(e.transformers,"transformer",t),await Xn(e.stores,"store",t)}(e));break;case Ze.User:Ae(n)&&(Se(e.user,n,{shallow:!1}),Zn(e,Ze.User),r=n,s=!0);break;default:return e.logger.warn("unknown command",{command:t}),Un({ok:!1})}if(s){const n=await async function(e,t,n,o){if(!Qt(e))return Ft(),{ok:!0,deliveries:[]};e.seenEvents.add(String(t));let r=n||[];n||(r=e.on[t]||[]);const s=xn(e,t,o),i=[];for(const[n,o]of Object.entries(e.sources)){if(o.config.require?.length){const e=o.config.require.indexOf(t);-1!==e&&o.config.require.splice(e,1)}o.on&&(zt(o)?i.push(An(e,o,n,t,s)):(o.queueOn=o.queueOn||[],o.queueOn.push({type:t,data:s})))}const a=[];for(const[n,o]of Object.entries(e.destinations))o.on&&a.push(Cn(n,o,Dn(e,o,n,t,s)));let c=!1;i.length&&(c=(await Promise.all(i)).some(Boolean));for(const[t,n]of Object.entries(e.sources))zt(n)&&n.queueOn?.length&&await Kt(e,n,t);const u=Object.values(e.sources).some(e=>!zt(e)&&e.config.require?.length);return(Object.keys(e.pending.destinations).length>0||u)&&await Nt(e),_n(e,t,r,o),{ok:!c,deliveries:a}}(e,t,void 0,r);i.push(...n.deliveries),Hn(n.deliveries);const s=function(e,t){if(!t.length)return e;const n={...e.done??{}},o={...e.queued??{}},r={...e.failed??{}};for(const e of t){for(const[t,r]of Object.entries(e.done??{}))n[t]=r,delete o[t];for(const[t,n]of Object.entries(e.failed??{}))r[t]=n,delete o[t];Object.assign(o,e.queued??{})}const s={...e,ok:e.ok&&t.every(e=>e.ok)};return delete s.done,delete s.queued,delete s.failed,Object.keys(n).length&&(s.done=n),Object.keys(o).length&&(s.queued=o),Object.keys(r).length&&(s.failed=r),s}(await Nn(e),await async function(e,t){return(await Promise.all(t.map(async({id:t,destination:n,done:o,drain:r})=>{if(await o,r&&e.allowed&&!gn(n)&&n.queuePush?.length&&e.destinations[t]===n)return Nn(e,void 0,{},{[t]:n})}))).filter(_)}(e,i));if(o&&!1===o.ok){const e={...s.failed??{},...o.failed??{}};o={...s,ok:!1,...Object.keys(e).length>0?{failed:e}:{}}}else o=s}return o||Un({ok:!0})}()}finally{a()}}function to(e,t){return{timing:Math.round((Date.now()-e.timing)/10)/100,source:{type:"collector",schema:"4"},...t}}function no(e,t,n){return ro(e,t,n,{globals:e.globals,user:e.user,consent:e.consent})}function oo(e,t,n){return ro(e,to(e,t),n,{globals:{},user:{},consent:{}})}function ro(e,t,n,o){const r=t.name;if("string"!=typeof r)throw new qe(void 0===r?"Event name is required":"Event name is invalid");if(!r)throw new qe("Event name is required");const[s,i]=r.split(" ");if(!s||!i)throw new qe("Event name is invalid");const{timestamp:a=Date.now(),name:c=`${s} ${i}`,data:u={},context:d={},globals:l={},custom:f={},user:p=o.user,nested:g=[],consent:h=o.consent,id:m=Oe(),trigger:v="",entity:w=s,action:y=i,timing:b=0,source:k={type:"collector",schema:"4"}}=t,S=k??{type:"collector",schema:"4"},O=S.count??(e.count+=1),E=S.trace??n?._meta.trace??e.trace,q={...S,count:O};void 0!==E&&(q.trace=E);const _=e.name??S.platform??"default",x=e.release??"4.8.0-next-1791496487198";return q.release={...S.release,[_]:x},{name:c,data:u,context:d,globals:Se(o.globals,l),custom:f,user:p,nested:g,consent:h,id:m,trigger:v,entity:w,action:y,timestamp:a,timing:b,source:q}}var so="collector.next";function io(e,t){const n=He(async(n,o={})=>await ze(async()=>{if(!e.allowed){const t=ft(e.config.queueMax),r=pt(e.preRunQueue,{event:n,options:o},{max:t});if(r.dropped>0){const n=kt(e.status,"collector.preRun","queue",r.dropped);ht(e.preRunQueue,e.logger,"collector.preRunQueue overflow; oldest events dropped",{buffer:"queue",cap:t,droppedCount:n})}else e.preRunQueue.length<t&&mt(e.preRunQueue);return e.logger.debug("event held until run",{name:n.name,dropped:r.dropped}),Un({ok:!0})}const r=Date.now(),{id:s,ingest:i,respond:a,mapping:c,preChain:u,include:d,exclude:l}=o;let f=a,p=n;const g=d||l?function(e,t,n){let o=e;return t&&(o=Object.fromEntries(Object.entries(o).filter(([e])=>t.includes(e)))),n&&(o=Object.fromEntries(Object.entries(o).filter(([e])=>!n.includes(e)))),o}(e.destinations,d,l):void 0;let h=i??Ce(s||"unknown");if(c){const t=await Ke(p,c,e);if(t.ignore)return Un({ok:!0});if(c.consent){const n=t.event.consent;if(!Be(c.consent,e.consent,n)){const o=s?`source.${s}`:"collector.push";return e.logger.debug("Event dropped by source consent",{at:o,required:c.consent}),ot(e,t.event,h,{reason:"consent",at:o,required:c.consent,consent:{...e.consent,...n}}),Un({ok:!0,dropped:!0})}}p=t.event}if(void 0!==u){const n=s?`source.${s}.next`:void 0,o=await Ct(e,e.transformers||{},u,p,h,f,n);if(0===o.copies.length)return e.logger.debug("Event dropped by transformer chain"+(o.droppedBy?` (${o.droppedBy})`:"")),ot(e,p,h,{reason:"dropped",by:o.droppedBy,at:n??"collector.push.preChain"}),Un({ok:!0,dropped:!0});if(o.stopped)return o.respond&&(f=o.respond),Un({ok:!0});if(o.respond&&(f=o.respond),o.copies.length>1){const n=await Promise.all(o.copies.map(async n=>{const o=no(e,t(n.event),n.ingest);return Nn(e,o,{id:s,ingest:n.ingest,respond:f},g)}));if(s){e.status.sources[s]||(e.status.sources[s]={count:0,duration:0});const t=e.status.sources[s];t.count+=o.copies.length,t.lastAt=Date.now(),t.duration+=Date.now()-r}return n[0]??Un({ok:!0})}p=o.copies[0].event,h=o.copies[0].ingest}const m=function(e,t,n){return no(e,to(e,t),n)}(e,p,h),v=await Nn(e,m,{id:s,ingest:h,respond:f},g);if(s){e.status.sources[s]||(e.status.sources[s]={count:0,duration:0});const t=e.status.sources[s];t.count++,t.lastAt=Date.now(),t.duration+=Date.now()-r}return v},t=>{if(t instanceof $e)throw t;if(t instanceof Le){const n=o.id;if(n){e.status.sources[n]||(e.status.sources[n]={count:0,duration:0});const t=e.status.sources[n];t.rejected=(t.rejected??0)+1}return e.logger.warn("invalid event rejected",{error:t.message}),Un({ok:!1,invalid:!0,error:t.message})}return e.status.failed++,e.logger.error("push failed",{...St(t),event:n.name}),Un({ok:!1})})(),"Push",e.hooks,e.logger);return async(t,o)=>{const r="string"==typeof t.id&&""!==t.id?t:{...t,id:We()},s="string"==typeof r.id?r.id:"",i=et(r,o?.ingest,e),a=Date.now(),c=tt(e,"collector.push","collector","in",s,a,i);c.inEvent=r,Re(e,c);try{const t=await n(r,o),c=Date.now(),u=tt(e,"collector.push","collector","out",s,c,i);return u.durationMs=c-a,u.outEvent=t,Re(e,u),t}catch(t){const n=Date.now(),o=tt(e,"collector.push","collector","error",s,n,i);throw o.durationMs=n-a,o.error=nt(t),Re(e,o),t}}}function ao(e={}){const t=e.maxEntries??1e4,n=e.lowWaterMark??.8,o=e.sweepIntervalMs??6e4,r=Math.floor(t*n),s=new Map,i={hits:0,misses:0,populates:0,writes:0,deletes:0,evictions_entries:0,evictions_ttl:0};let a;return o>0&&(a=setInterval(function(){const e=Date.now();let t=0;for(const[n,o]of s)void 0!==o.expires&&o.expires<=e&&(s.delete(n),t++);i.evictions_ttl+=t},o),a&&"function"==typeof a.unref&&a.unref()),{type:"memory",config:{},get(e){const t=s.get(e);if(t)return void 0!==t.expires&&t.expires<=Date.now()?(s.delete(e),i.evictions_ttl++,void i.misses++):(s.delete(e),s.set(e,t),i.hits++,t.value);i.misses++},set(e,n,o){const a=!s.has(e);a||s.delete(e),s.set(e,{value:n,expires:void 0!==o?Date.now()+o:void 0}),i.writes++,a&&i.populates++,s.size>t&&function(){if(s.size<=t)return;const e=s.size-r;let n=0;for(const t of s.keys()){if(n>=e)break;s.delete(t),n++}i.evictions_entries+=n}()},delete(e){s.delete(e)&&i.deletes++},get counters(){return{...i}},destroy(){void 0!==a&&(clearInterval(a),a=void 0),s.clear()}}}function co(e,t){const{cacheConfig:n,cacheStore:o,namespace:r,logger:s,storeId:i,collector:a}=t,c=(e,t)=>{if(!a)return;const n=tt(a,`store.${i}`,"store","in","");n.meta={op:"cache",cached:"hit"===t,status:t,key:e},Je(a,n)},u={hits:0,misses:0,populates:0,writes:0,deletes:0,inflight_dedups:0},d=n.rules.map(e=>({match:e.match?Ue(e.match):()=>!0,ttl:e.ttl})),l=e=>`${r}:${e}`;function f(e,t){const n=void 0===t?{key:e}:{key:e,value:t};return d.find(e=>e.match(n))}const p=new Map;return{type:e.type,config:e.config,setup:e.setup,get counters(){return{...u}},async get(t){const n=l(t),r=await o.get(n),s=Ye(r);if(void 0!==s){if(!("expired"in s))return u.hits++,c(t,"hit"),s.value;try{await o.delete(n)}catch(e){g("delete",t,e)}}const i=p.get(n);if(i)return u.inflight_dedups++,c(t,"hit"),i;u.misses++,c(t,"miss");const a=(async()=>{try{const r=await e.get(t);if(void 0===r)return;const s=f(t,r);if(s)try{const e=1e3*s.ttl;await o.set(n,Xe(r,e),e),u.populates++}catch(e){g("set",t,e)}return r}finally{p.delete(n)}})();return p.set(n,a),a},async set(t,n,r){u.writes++,await e.set(t,n,r);const s=f(t,n);if(s)try{const e=1e3*s.ttl;await o.set(l(t),Xe(n,e),e)}catch(e){g("set",t,e)}},async delete(t){u.deletes++,await e.delete(t);try{await o.delete(l(t))}catch(e){g("delete",t,e)}}};function g(e,t,n){const o=`store-cache(${i}): cache ${e} failed for "${t}"; backing succeeded, continuing`;s?s.warn(o,St(n)):console.warn(o,n)}}function uo(e,t,n){const o=`store.${n}`,r=Ve(t.get,"StoreGet",e.hooks,e.logger),s=Ve(t.set,"StoreSet",e.hooks,e.logger),i=Ve(t.delete,"StoreDelete",e.hooks,e.logger);t.get=async t=>{const n=Date.now(),s=tt(e,o,"store","in","",n);s.meta={op:"get",key:t},Fe(e,s);try{const s=await r(t),i=Date.now(),a=tt(e,o,"store","out","",i);return a.durationMs=i-n,a.meta={op:"get",key:t},Fe(e,a),s}catch(r){const s=Date.now(),i=tt(e,o,"store","error","",s);throw i.durationMs=s-n,i.meta={op:"get",key:t},i.error=nt(r),Fe(e,i),r}},t.set=async(t,n,r)=>{const i=Date.now(),a=tt(e,o,"store","in","",i);a.meta={op:"set",key:t},Fe(e,a);try{await s(t,n,r);const a=Date.now(),c=tt(e,o,"store","out","",a);c.durationMs=a-i,c.meta={op:"set",key:t},Fe(e,c)}catch(n){const r=Date.now(),s=tt(e,o,"store","error","",r);throw s.durationMs=r-i,s.meta={op:"set",key:t},s.error=nt(n),Fe(e,s),n}},t.delete=async t=>{const n=Date.now(),r=tt(e,o,"store","in","",n);r.meta={op:"delete",key:t},Fe(e,r);try{await i(t);const r=Date.now(),s=tt(e,o,"store","out","",r);s.durationMs=r-n,s.meta={op:"delete",key:t},Fe(e,s)}catch(r){const s=Date.now(),i=tt(e,o,"store","error","",s);throw i.durationMs=s-n,i.meta={op:"delete",key:t},i.error=nt(r),Fe(e,i),r}}}async function lo(e){const t=Me({globalsStatic:{},sessionStatic:{},run:!0,queueMax:1e3},e,{merge:!1,extend:!1}),n={level:e.logger?.level,handler:e.logger?.handler},o=Te(n),r={...t.globalsStatic,...e.globals},s={allowed:!1,config:t,consent:e.consent||{},custom:e.custom||{},destinations:{},transformers:{},stores:{},globals:r,hooks:e.hooks||{},observers:new Set,logger:o,on:{},queue:[],preRunQueue:[],round:0,count:0,stateVersion:0,cellVersion:{},delivery:new WeakMap,session:void 0,status:{startedAt:Date.now(),in:0,out:0,failed:0,sources:{},destinations:{},dropped:{},connectionErrors:{},breakers:{}},timing:Date.now(),user:e.user||{},sources:{},pending:{destinations:{}},hasShutdown:!1,seenEvents:new Set,push:void 0,command:void 0,elb:void 0};var i,a;void 0!==e.name&&(s.name=e.name),void 0!==e.release&&(s.release=e.release),void 0!==e.next&&(t.next=e.next),s.push=io(s,e=>to(s,e)),s.command=(a=eo,Qe(async(e,t,n)=>await Ge(async()=>await a(i,e,t,n),t=>{if(t instanceof Ne)throw t;return i.status.failed++,i.logger.error("command failed",{...St(t),command:e}),Un({ok:!1})})(),"Command",(i=s).hooks,i.logger)),s.elb=function(e){return async(t,n,o,r,s)=>{if("string"==typeof t&&t.startsWith("walker ")){const o=t.replace("walker ","");return e.command(o,n)}let i;if("string"==typeof t)i={name:t},n&&"object"==typeof n&&!Array.isArray(n)&&(i.data=n);else{if(!t||"object"!=typeof t||Array.isArray(t))return Un({ok:!1});i={...t},n&&"object"==typeof n&&!Array.isArray(n)&&(i.data={...i.data||{},...n})}return o&&"object"==typeof o&&(i.context=o),r&&Array.isArray(r)&&(i.nested=r),s&&"object"==typeof s&&(i.custom=s),e.push(i)}}(s);const c=e.stores||{};return"undefined"==typeof __WALKEROS_STORES__||__WALKEROS_STORES__?(s.stores=await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t)){const{code:t,config:s={},env:i={}}=r,a=e.logger.scope("store").scope(o),c={collector:e,logger:a,id:o,config:s,env:i,reportError:Ot(e,"store",o,a)},u=await t(c);n[o]=u}const o=t,r=function(e){const t={};for(const n of Object.keys(e))t[n]="WHITE";const n=[],o=[];function r(s){const i=t[s];if("BLACK"===i)return;if("GRAY"===i){const e=o.indexOf(s),t=o.slice(-1===e?0:e).concat(s).join(" -> ");throw new Error(`Cycle in cache.store chain: ${t}`)}t[s]="GRAY",o.push(s);const a=e[s].cache?.store;if(void 0!==a){if(!(a in e))throw new Error(`Store "${s}" cache.store references "${a}", which is not declared in flow.stores`);r(a)}o.pop(),t[s]="BLACK",n.push(s)}for(const n of Object.keys(e))"WHITE"===t[n]&&r(n);return n}(o);for(const t of r){const r=o[t].cache;if(!r)continue;let s,i;void 0!==r.store?(s=n[r.store],i=r.store):(n.__cache||(n.__cache=ao()),s=n.__cache,i="__cache");const a=r.namespace??t;e.logger.scope("store-cache").scope(t).info(`store "${t}" caches with namespace "${a}:" via ${i}`),n[t]=co(n[t],{storeId:t,cacheConfig:r,cacheStore:s,namespace:a,logger:e.logger.scope("store-cache").scope(t),collector:e})}for(const[t,o]of Object.entries(n))"__cache"!==t&&uo(e,o,t);return n}(s,c),function(e,t,n){const o=new Map;for(const[n,r]of Object.entries(e))t[n]&&o.set(r,t[n]);if(0!==o.size)for(const e of[n.transformers,n.destinations,n.sources])if(e)for(const t of Object.values(e))r(t.env);function r(e){if(e)for(const[t,n]of Object.entries(e))if("object"==typeof n&&null!==n){const r=o.get(n);r&&(e[t]=r)}}}(c,s.stores,e)):Object.keys(c).length>0&&o.warn("stores: not in this build, config ignored"),s.stores.__cache||(s.stores.__cache=ao()),s.destinations=await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t))at(e,j("destination",o),r.config?.state??r.code.config?.state??r.state),r.config?.require?.length?e.pending.destinations[o]=r:n[o]=Jn(r);return n}(s,e.destinations||{}),s.transformers=await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t)){const{code:t,env:s={}}=r;if("undefined"==typeof __WALKEROS_VALIDATE__||__WALKEROS_VALIDATE__){const t=we(r,"Transformer");if(!t.ok){e.logger.warn(`Transformer ${o} invalid (${t.code}): ${t.reason}. Skipping.`);continue}}const{config:i}=Et(r,"before"),{config:a}=Et({...r,config:i},"next"),c=Object.keys(s).length>0?{...a,env:s}:a,{cache:u}=r,d=u?{...c,cache:u}:c,l=r.config?.state??r.state;at(e,le("transformer",o),l);const f=void 0!==l&&void 0===d.state?{...d,state:l}:d,p=e.logger.scope("transformer").scope(o),g={collector:e,logger:p,id:o,ingest:re(o),config:f,env:s,reportError:Ot(e,"transformer",o,p)},h=be(r);for(const t of ke(r))e.logger.warn(`Transformer ${o}: ${t}`);const m=t??(e=>h?{type:"pass",config:e.config,push:async t=>{const n=await ye(t,h,e.collector);return!n.ignore&&{event:n.event}}}:{type:"pass",config:e.config,push:e=>({event:e})}),v=await m(g);void 0!==r.before&&void 0===v.config?.before&&(v.config={...v.config??{},before:r.before}),void 0!==r.next&&void 0===v.config?.next&&(v.config={...v.config??{},next:r.next}),void 0!==l&&void 0===v.config?.state&&(v.config={...v.config??{},state:l}),n[o]=v}return n}(s,e.transformers||{}),s}var fo=globalThis;function po(e){try{const t=fo.window;if(!t)return;t.localStorage.getItem(Ie)===e&&t.localStorage.removeItem(Ie)}catch{}}function go(e,t){return void 0===t?e:n=>e({...n,release:t})}async function ho(e){const t=e??{},n=await lo(t);if(t.observers)for(const e of t.observers)n.observers.add(e);"undefined"==typeof __WALKEROS_OBSERVE__||__WALKEROS_OBSERVE__?function(e,t){const n=t.observe;if(!n)return;const o=e.name??"default";if("binding"in n){const t=function(){const e=fo.window,t=fo.URLSearchParams;if(!e||!t)return null;try{const n=new t(e.location.search.replace(/^\?/,"")).getAll(Ie);return n.length>0?n[n.length-1]??null:null}catch{return null}}(),r=t??function(){try{return fo.window?.localStorage.getItem(Ie)??null}catch{return null}}();if(!r)return;const s=De(r);if(!s)return void(null===t?(e.logger.warn("observe: malformed stored credential cleared"),po(r)):e.logger.warn("observe: malformed credential ignored"));if(s.pb!==n.binding)return void e.logger.warn("observe: credential binding mismatch, credential ignored");let i;!function(e){try{fo.window?.localStorage.setItem(Ie,e)}catch{}}(r),null!==t&&function(){const e=fo.window,t=fo.URLSearchParams;if(e&&t)try{const n=e.location.href,o=n.indexOf("#"),r=o>=0?n.slice(o):"",s=o>=0?n.slice(0,o):n,i=s.indexOf("?"),a=i>=0?s.slice(0,i):s,c=new t(i>=0?s.slice(i+1):"");c.delete(Ie);const u=c.toString();e.history.replaceState({},"",`${a}${u?`?${u}`:""}${r}`)}catch{}}();const a=Pe({url:`${n.url}/ingest/${s.ses}`,token:s.secret,headers:{"X-Walkeros-Binding":n.binding},onStatus:t=>{401===t&&(po(r),i&&e.observers.delete(i))}});i=je(function(e,t){return void 0===t?e:n=>e({...n,flowId:t})}(go(a,e.release),n.flowId),{flowId:n.flowId??o,...void 0!==n.level?{level:n.level}:{},...void 0!==n.sample?{sample:n.sample}:{}}),e.observers.add(i);const c=n.level;return void(void 0!==c&&(e.observeLevel=()=>c))}if("off"===n.level)return;const r=n.level;void 0!==r&&(e.observeLevel=()=>r),e.observers.add(je(go(Pe({url:`${n.url}/ingest/${n.sessionId}`,token:n.token}),e.release),{flowId:o,level:n.level,sample:n.sample}))}(n,t):t.observe&&n.logger.warn("observe: not in this build, config ignored"),await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t)){const t=await Ht(e,o,r);if(!t)continue;const s=r.config?.require;t.config={...t.config,init:!1,...s?{require:[...s]}:{}},n[o]=t}Object.assign(e.sources,n);for(const t of Object.keys(n)){const n=e.sources[t];let o=!1;n.init&&await U(n.init.bind(n),n=>{if(n instanceof N)throw n;o=!0,e.status.failed++,e.logger.scope("source").error("source init failed",{sourceId:t,...St(n)})})(),o||(n.config.init=!0,zt(n)&&await Kt(e,n,t))}return await Nt(e),n}(n,t.sources||{});const{consent:o,user:r,globals:s,custom:i}=t;o&&await n.command("consent",o),r&&await n.command("user",r),s&&await n.command("globals",s),i&&await n.command("custom",i),n.config.run&&await n.command("run");let a=n.elb;const c=Object.values(n.sources),u=c.find(e=>e.config.primary);return u?a=u.push:c.length>0&&(a=c[0].push),{collector:n,elb:a}}var mo=async e=>{let t;return{get flow(){return t},trigger:()=>async n=>{if(!t){const n=await ho(e);t={collector:n.collector,elb:n.elb}}const o=function(e){for(const t of Object.values(e.sources||{}))if("lambda"===t.type)return t}(t.collector);if(!o)throw new Error("Lambda source not found in collector");const r={awsRequestId:`test-${Date.now()}`},s=o.push,i=await s(n,r);let a;try{a=JSON.parse(i.body||"{}")}catch{a=i.body}const c={};if(i.headers)for(const[e,t]of Object.entries(i.headers))void 0!==t&&(c[e]=String(t));return{statusCode:i.statusCode,body:a,headers:c}}}};function vo(e){return async t=>{const n={...t};if(n.body&&"string"==typeof n.body){const e=JSON.parse(n.body);e.name&&!e.event&&(n.body=JSON.stringify({...e,event:e.name,name:void 0}))}return e.push(n,{awsRequestId:"test-req"})}}var wo={};t(wo,{createTrigger:()=>Mo,env:()=>yo,step:()=>xo});var yo={};t(yo,{moduleMockEnv:()=>qo,push:()=>Eo,simulation:()=>_o});var bo=()=>{},ko={error:bo,warn:bo,info:bo,debug:bo,throw:e=>{throw"string"==typeof e?new Error(e):e},json:bo,scope:()=>ko},So=()=>()=>Promise.resolve({ok:!0});function Oo(){return{get push(){return So()},get command(){return So()},get elb(){return So()},logger:ko}}var Eo=Object.assign(Oo(),{AWS:{SQSClient:class{constructor(e){this.config=e}config;async send(e){return function(e){if(!("input"in e))return!1;const{input:t}=e;return"object"==typeof t&&null!==t&&"WaitTimeSeconds"in t}(e)&&await new Promise(e=>setTimeout(e,100)),{$metadata:{},QueueUrl:"https://sqs.eu-central-1.amazonaws.com/000000000000/walkeros-events",Attributes:{QueueArn:"arn:aws:sqs:eu-central-1:000000000000:walkeros-events"},Messages:[]}}destroy(){}}}}),qo=Oo(),_o=["call:AWS.SQSClient.send"],xo={};t(xo,{decoderText:()=>Po,malformedJson:()=>jo,orderComplete:()=>Io,pageView:()=>Ao});var Ao={title:"Page view from SQS",description:"A standard SQS message body containing a walker elb event payload as JSON.",in:{MessageId:"m-1",Body:JSON.stringify({event:"page view",data:{title:"Documentation",url:"https://example.com/docs"}})},out:[["message.ack","m-1"]]},Io={title:"Order complete from SQS",description:"Order complete event flowing through the long-poll loop.",in:{MessageId:"m-2",Body:JSON.stringify({event:"order complete",data:{id:"ORD-500",total:199.99,currency:"EUR"}})},out:[["message.ack","m-2"]]},Po={title:"Text decoder",description:'When decoder is "text", the body string flows under data.payload.',in:{MessageId:"m-3",Body:"raw text payload"},out:[["message.ack","m-3"]]},jo={title:"Malformed JSON nacks",description:"Default decoder is JSON. A malformed body throws DecoderError; the source nacks (skips DeleteMessage) so the message redelivers.",in:{MessageId:"m-4",Body:"{not json"},out:[["message.nack","m-4"]]};function Do(e){if("object"!=typeof e||null===e)return!1;const t=e;return"sqs"===t.type&&"function"==typeof t.push}var Mo=async e=>{let t;return{get flow(){return t},trigger:()=>async n=>{if(!t){const n=await ho(e);t={collector:n.collector,elb:n.elb}}const o=function(e){for(const t of Object.values(e.sources??{}))if(Do(t))return t}(t.collector);if(!o)throw new Error("sqs source not registered in collector, ensure it is configured in sources");const r={MessageId:n.MessageId,Body:n.Body,ReceiptHandle:n.ReceiptHandle,Attributes:n.Attributes,MessageAttributes:n.MessageAttributes},s=await o.push(r),i=[];return s&&"object"==typeof s&&(s.acked&&i.push(["message.ack",n.MessageId]),s.nacked&&i.push(["message.nack",n.MessageId])),i}}};import{zodToSchema as To}from"@walkeros/core/dev";import{z as Co}from"@walkeros/core/dev";import{z as Ro}from"@walkeros/core/dev";var $o=Ro.enum(["GET","POST","PUT","PATCH","DELETE","OPTIONS","HEAD"]),Bo=Ro.union([Ro.string(),Ro.array(Ro.string()),Ro.literal("*")]),Wo=Ro.object({origin:Bo.describe("Allowed origins (* for all, URL string, or array of URLs)").optional(),methods:Ro.array($o).describe("Allowed HTTP methods").optional(),headers:Ro.array(Ro.string()).describe("Allowed request headers").optional(),credentials:Ro.boolean().describe("Allow credentials (cookies, authorization headers)").optional(),maxAge:Ro.number().int().positive().describe("Preflight cache duration in seconds").optional()}),Lo=Co.object({cors:Co.union([Co.boolean(),Wo]).describe("CORS configuration: false = disabled, true = allow all origins, object = custom configuration").default(!0),timeout:Co.number().int().positive().max(9e5).describe("Request timeout in milliseconds (max: 900000 for Lambda)").default(3e4),enablePixelTracking:Co.boolean().describe("Enable GET requests with 1x1 transparent GIF response for pixel tracking").default(!0),maxBatchSize:Co.number().int().min(1).describe("Maximum number of events accepted in a single batch request").default(100),healthPath:Co.string().describe("Health check endpoint path (e.g., /health)").default("/health")}),Ko=To(Lo);import{zodToSchema as zo}from"@walkeros/core/dev";import{z as Ho}from"@walkeros/core/dev";var No=Ho.object({queueName:Ho.string().min(1).describe("SQS queue short name (like walkeros-events). Required for both setup and runtime poll."),region:Ho.string().describe("AWS region (like eu-central-1). Default: eu-central-1.").optional(),queueUrl:Ho.string().url().describe("Optional pre-resolved queue URL. When set, init skips the GetQueueUrl lookup.").optional(),client:Ho.any().describe("Pre-configured AWS SQSClient instance. Bypasses construction when supplied.").optional(),config:Ho.any().describe("AWS SDK SQSClientConfig (credentials, endpoint overrides, retries).").optional(),decoder:Ho.enum(["json","text","raw"]).describe("Decoder for the message body. json (default) parses JSON, text forwards UTF-8, raw forwards a Buffer.").optional(),maxMessages:Ho.number().int().min(1).max(10).describe("SQS receive batch size. Cap 10. Default: 10.").optional(),waitTimeSeconds:Ho.number().int().min(0).max(20).describe("Long-poll duration in seconds. Cap 20. Default: 20.").optional(),visibilityTimeout:Ho.number().int().nonnegative().describe("Per-receive visibility timeout override. Default: queue-configured value.").optional(),shutdownTimeoutMs:Ho.number().int().positive().describe("Graceful shutdown timeout in milliseconds. Default: 30000. After this window, destroy() force-closes.").optional(),onPushError:Ho.enum(["nack","ack"]).describe("Behavior when forwarding to the collector throws. nack (default) skips DeleteMessage so the message redelivers; ack drops it.").optional()});import{z as Qo}from"@walkeros/core/dev";var Go=Qo.record(Qo.string(),Qo.string()),Fo=Qo.object({region:Qo.string().min(1).describe("AWS region.").optional(),fifoQueue:Qo.boolean().describe("FIFO queue with content-based deduplication. Auto-appends .fifo suffix to the queue name.").optional(),visibilityTimeoutSeconds:Qo.number().int().nonnegative().describe("Visibility timeout in seconds. Default: 30.").optional(),messageRetentionSeconds:Qo.number().int().positive().describe("Message retention period in seconds. Default: 345600 (4 days).").optional(),maximumMessageSize:Qo.number().int().min(1024).max(262144).describe("Max message size in bytes. Default: 262144 (256 KB).").optional(),kmsMasterKeyId:Qo.string().describe("KMS key alias or ID for at-rest encryption.").optional(),deadLetterQueue:Qo.object({arn:Qo.string().describe("ARN of an existing DLQ. Mutually exclusive with create: true.").optional(),create:Qo.boolean().describe("Create a sibling DLQ named <queueName>-dlq. Default: false.").optional(),maxReceiveCount:Qo.number().int().min(1).max(1e3).describe("Max receive count before message goes to DLQ. Default: 5.").optional()}).describe("Optional dead-letter queue.").optional(),tags:Go.describe("Tags applied to the queue (and inherited by an auto-created DLQ).").optional(),subscribeToSnsTopic:Qo.object({topicArn:Qo.string().min(1).describe("Topic ARN to subscribe to."),rawMessageDelivery:Qo.boolean().describe("Deliver SNS messages without the SNS envelope.").optional(),filterPolicy:Qo.record(Qo.string(),Qo.unknown()).describe("SNS filter policy applied at subscription level.").optional()}).describe("Optional SNS topic subscription. Creates the subscription and the matching queue policy.").optional()}),Vo=zo(No),Uo=zo(Fo),Jo={};t(Jo,{CorsOptionsSchema:()=>Wo,CorsOrigin:()=>Bo,HttpMethod:()=>$o,SettingsSchema:()=>Lo,settings:()=>Ko,sqsSettings:()=>Vo,sqsSetup:()=>Uo});var Yo={sourceLambda:n,sourceSqs:wo},Xo={sourceLambda:{settings:Ko},sourceSqs:{settings:Vo,setup:Uo}};export{n as examples,Yo as exportExamples,Xo as exportSchemas,Jo as schemas,wo as sqsExamples};//# sourceMappingURL=dev.mjs.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$meta": {
3
3
  "package": "@walkeros/server-source-aws",
4
- "version": "4.7.2",
4
+ "version": "4.8.0-next-1791496487198",
5
5
  "type": "source",
6
6
  "platform": [
7
7
  "server"
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@walkeros/server-source-aws",
3
3
  "description": "AWS server sources for walkerOS (Lambda, API Gateway, Function URLs)",
4
- "version": "4.7.2",
4
+ "version": "4.8.0-next-1791496487198",
5
5
  "license": "MIT",
6
6
  "main": "./dist/index.js",
7
7
  "module": "./dist/index.mjs",
@@ -23,14 +23,14 @@
23
23
  "dependencies": {
24
24
  "@aws-sdk/client-sqs": "^3.952.0",
25
25
  "@aws-sdk/client-sns": "^3.952.0",
26
- "@walkeros/core": "4.7.2"
26
+ "@walkeros/core": "4.8.0-next-1791496487198"
27
27
  },
28
28
  "peerDependencies": {
29
29
  "@types/aws-lambda": "^8.10.0"
30
30
  },
31
31
  "devDependencies": {
32
32
  "@types/aws-lambda": "^8.10.159",
33
- "@walkeros/collector": "4.7.2"
33
+ "@walkeros/collector": "4.8.0-next-1791496487198"
34
34
  },
35
35
  "repository": {
36
36
  "url": "git+https://github.com/elbwalker/walkerOS.git",