@walkeros/server-source-aws 4.8.0 → 4.8.1-next-1792019907609

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/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.8.0";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:()=>vo,env:()=>o,step:()=>c,trigger:()=>wo});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 I,OBSERVE_ENV_KEY as P,processEventMapping as A,stepId as D,tryCatchAsync as M,useHooks as j}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 Ie}from"@walkeros/core";import{OBSERVE_STORAGE_KEY as Pe,createBatchedPoster as Ae,createTelemetryObserver as De,parseObserveCredential as Me}from"@walkeros/core";import{assign as je,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{isObject as Fe}from"@walkeros/core";import{emitStep as Ve,useHooks as Ue}from"@walkeros/core";import{compileMatcher as Je,emitStep as Ye,readCacheEnvelope as Xe,wrapCacheEnvelope as Ze}from"@walkeros/core";var et={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 tt(e,t,n){return{traceId:e.source?.trace??t?._meta.trace??n.trace,sourceId:t?._meta.path[0],parentEventId:t?._meta.parentEventId}}function nt(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 ot(e){return e instanceof Error?{name:e.name,message:e.message}:{message:String(e)}}function rt(e,t,n,o){e.status.in++;const r=nt(e,"collector.push","collector","skip","string"==typeof t.id?t.id:"",Date.now(),tt(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 st(e,t){return e.storeId&&t.stores[e.storeId]?t.stores[e.storeId]:t.stores.__cache}function it(e){return("undefined"==typeof __WALKEROS_STATE__||__WALKEROS_STATE__)&&e?R(e):void 0}function at(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 ct(e,t,n){"undefined"==typeof __WALKEROS_STATE__||__WALKEROS_STATE__||void 0===n||e.logger.warn(`state: not in this build, ${t} state ignored`)}function ut(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(ut(r,t,n+1));return o}const r={};t.set(e,r);for(const[o,s]of Object.entries(e))r[o]="function"==typeof s?s:ut(s,t,n+1);return r}function dt(e,t){try{return e[t]}catch{return"[unreadable]"}}function lt(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(dt(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 ft(e,t){("undefined"==typeof __WALKEROS_OBSERVE__||__WALKEROS_OBSERVE__)&&t&&t.length>0&&(e.calls=t.map(e=>({fn:e.fn,args:lt(e.args),ts:e.ts})))}function pt(e){if(void 0===e)throw new Error("Collector.Config.queueMax is undefined; defaults must be seeded by collector()");return e}function gt(e,t,n,o){if(!Number.isFinite(n.max)||n.max<=0)throw new Error(`pushBounded: max must be > 0 (got ${n.max})`);if("dropNewest"===(n.onOverflow??"dropOldest"))return e.length>=n.max?(o&&o([t]),{appended:!1,dropped:1}):(e.push(t),{appended:!0,dropped:0});const r=[];for(;e.length>=n.max;)r.push(e.shift());return e.push(t),r.length>0&&o&&o(r),{appended:!0,dropped:r.length}}var ht=new WeakMap;function mt(e,t,n,o){ht.get(e)||(ht.set(e,!0),t.warn(n,o))}function vt(e){ht.delete(e)}var wt=()=>Date.now();function yt(e){if(void 0!==e)return"number"==typeof e?{threshold:e,cooldown:3e4}:{threshold:e.threshold??5,cooldown:e.cooldown??3e4}}function bt(e,t,n,o,r){if("partial"===n)return;const s=((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=wt()+r)):void(s.consecutiveFailures>=o&&(s.state="open",s.probing=!1,s.openUntil=wt()+r)))}function kt(e,t){return e.status.destinations[t]||(e.status.destinations[t]={count:0,failed:0,duration:0,queuePushSize:0,dlqSize:0}),e.status.destinations[t]}function St(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 Ot(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 Et(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=gt(i,[o,r],a);if(c.dropped>0){const t=St(e.status,z("destination",n),"dlq",c.dropped);mt(i,s,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:n,cap:a.max,droppedCount:t})}else i.length<a.max&&vt(i);const u=kt(e,n);u.failed++,u.dlqSize=i.length,e.status.failed++;const d=yt(t.config.breaker);if(d){const o=t.config.id||n;bt(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",{...Ot(t),event:i.name});e.status.connectionErrors[s]=(e.status.connectionErrors[s]??0)+1,o.error("connection error",Ot(t))}catch{}}}function qt(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 _t(e,t,n){if(t.init&&!t.config.init){const o=t.type||"unknown",r=e.logger.scope(`transformer:${o}`),s={collector:e,logger:r,id:n,ingest:re(n),config:t.config,env:$t(t.config.env),reportError:Et(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 xt(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:{...$t(t.config.env),...s?{respond:s}:{}},reportError:Et(e,"transformer",n,a)};a.debug("push",{event:o.name});const u="string"==typeof o.id?o.id:"",d=tt(o,r,e),l=Date.now(),f=nt(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=nt(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=nt(e,le("transformer",n),"transformer","error",u,o,d);throw r.durationMs=o-l,r.error=ot(t),ie(e,r),t}}function It(e){return"string"==typeof e.id?e.id:""}function Pt(e,t){const n=It(e);return""!==n&&""===It(t)?{...t,id:n}:t}function At(e,t,n,o){const r=(a=n,{...a,_meta:{...a._meta,path:[...a._meta.path]}}),s=oe(t),i=It(e);var a;if(""===i)return{event:s,ingest:r};r._meta.parentEventId=i;const c=It(s);return""!==c&&c!==i||(s.id=se(i,o)),{event:s,ingest:r}}function Dt(e,t){return{copies:e,respond:t}}function Mt(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 jt(e,t,n){const o=await Promise.all(t.map((t,n)=>fe(Tt,t=>(e.collector.logger.scope("transformer:fork").error(`fork ${n} failed`,Ot(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}:{}}:Dt(r,i)}async function Tt(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 Dt([{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 jt(e,i.branches.map((e,o)=>({stack:e,...At(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 Ct(e,t,r,n,s,a);if("halt"===c.kind)return c.result;if("fork"===c.kind)return jt(e,c.copies,s);r=c.event,s=c.respond,o=c.stack}}async function Ct(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:Pt(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?st(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(_t,e=>{if(e instanceof ae)throw e;return i.status.failed++,i.logger.scope(`transformer:${d.type||"unknown"}`).error("transformer init failed",{transformer:u,...Ot(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:Pt(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 Rt(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=it(d.config?.state),b=y?.filter(e=>"get"===e.mode),k=y?.filter(e=>"set"===e.mode),S=async e=>k&&0!==k.length?at(i,k,e,o):e;b&&b.length>0&&(l=await at(i,b,l,o));const O=await fe(xt,e=>(i.status.failed++,i.logger.scope(`transformer:${d.type||"unknown"}`).error("Push failed",Ot(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:Mt(t,s.next),...At(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(Mt(t,q))}async function Rt(e,t,n,o,r,s,i){const a=r??re("string"==typeof n?n:"chain");return void 0===n?Dt([{event:o,ingest:a}],s):(i&&(a._meta.chainPath=i),Tt({collector:e,transformers:t,chainContext:i},{stack:ce(n)?n:de(n),event:o,ingest:a,respond:s}))}function $t(e){return e&&ue(e)?e:{}}var Bt=1e4;function Wt(e){return"number"==typeof e&&e>0?e:Bt}var Lt=class extends Error{constructor(e){super(e),this.name="DestinationTimeoutError"}};function Kt(e,t,n){let o;const r=new Promise((e,r)=>{o=setTimeout(()=>r(new Lt(n)),t)});return Promise.race([e,r]).finally(()=>{o&&clearTimeout(o)})}async function zt(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(Xt(n)&&!on(e,t,n))continue;const o=t.on;let i=!1;await U(()=>Kt(Promise.resolve(o(n,s)),Bt,`Source "${r}" on(${n}) did not settle within 10000ms`),t=>{if(t instanceof N)throw t;t instanceof Lt?i=!0:e.status.failed++,e.logger.scope("source").error("source on flush failed",{sourceId:r,type:n,...Ot(t)})})(),Xt(n)&&!i&&nn(e,t,n)}}function Ht(e){return Boolean(e.config.init)&&!e.config.require?.length}async function Nt(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=it(l);ct(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 Rt(e,e.transformers||{},c,u,s.ingest,s.respond,n);if(0===o.copies.length)return rt(e,u,s.ingest,{reason:"dropped",by:o.droppedBy,at:n}),Jn({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=st(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 at(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:Et(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,...Ot(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 Qt(e){for(const[t,n]of Object.entries(e.sources)){if(Ht(n))continue;const o=n.config.require;if(!o?.length)continue;const r=o.filter(t=>!en(e,t));r.length!==o.length&&(n.config.require=r,Ht(n)&&await zt(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=>!en(e,t));if(n.config&&(n.config.require=r),r.length>0)continue;delete e.pending.destinations[t];const s=Yn(n);!1!==s.config.queue&&(s.queuePush=[...e.queue]),e.destinations[t]=s,await Tn(e,s,t)}}function Gt(e){if("object"!=typeof e||null===e)return!1;if(!("logger"in e))return!1;const t=e.logger;return"object"==typeof t&&null!==t&&"scope"in t&&"function"==typeof t.scope}var Ft=!1;function Vt(){Ft||(Ft=!0,"undefined"!=typeof console&&"function"==typeof console.warn&&console.warn("walkerOS: ignored an on-dispatch call with a non-collector argument"))}function Ut(e,t,n,o){if(n instanceof W)throw n;e.logger.scope("on").error("on callback failed",{kind:t,...o,...Ot(n)})}var Jt=["consent","user","globals","custom"];function Yt(e){return Jt.includes(e)}function Xt(e){return Yt(e)}function Zt(e,t){return Yt(t)&&Object.keys(e[t]).length>0}function en(e,t){if(Yt(t))return Zt(e,t);switch(t){case et.Run:case et.Ready:return!0===e.allowed;default:return e.seenEvents.has(String(t))}}function tn(e,t){return e.cellVersion?.[String(t)]??0}function nn(e,t,n){_n(e,t,n,tn(e,n))}function on(e,t,n){return e.allowed&&tn(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 rn=8;function sn(e){const t=e.cascade;if(t&&!an.has(t))return()=>{};const n=t||{counts:new WeakMap};e.cascade=n,an.set(n,(an.get(n)||0)+1);let o=!1;return()=>{if(o)return;o=!0;const t=(an.get(n)||1)-1;t>0?an.set(n,t):(an.delete(n),e.cascade===n&&(e.cascade=void 0))}}var an=new WeakMap;function cn(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<=rn||(i===rn+1&&e.logger.error("state delivery did not converge",{type:s}),!1)}function un(e,t){return{collector:e,logger:e.logger.scope("on").scope(String(t))}}async function dn(e,t,n,o,r){const s=t.on;if(!s)return!0;const i=Xt(o);if(i&&(ln.get(t)||fn.has(t)))return Sn(e,t,o),ln.get(t)||pn.add(t),!1;const a=i?tn(e,o):0,c=i&&function(e,t,n,o){if(yn.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)?In(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:Xn(t.env,t.config.env),reportError:Et(e,"destination",n,d,t)};i&&(En(t,o),function(e,t,n){let o=vn.get(e);o||(o={},vn.set(e,o));const r=String(t),s=o[r];(void 0===s||s<n)&&(o[r]=n)}(t,o,a),fn.add(t));const f=Wt(t.config.timeout);let p=Promise.resolve(),g=!0,h=!1,m=!0;try{await K(()=>(p=Promise.resolve(s(o,l)),Kt(p,f,`Destination "${n}" on(${o}) did not settle within ${f}ms`)),t=>{g=!1,t instanceof Lt&&(h=!0),Ut(e,"destination",t,{destId:n,type:o})})(),m=!1}finally{if(i){fn.delete(t),m&&pn.delete(t);const r=yn.get(t);g?(_n(e,t,o,a),r?.delete(String(o))):Sn(e,t,o),h?function(e,t,n,o,r,s,i){ln.set(t,(ln.get(t)||0)+1);const a=()=>{const s=(ln.get(t)||0)-1;var a,c,u,d;s>0?ln.set(t,s):ln.delete(t),bn(t,o),wn(t,o,r),qn(e,t),i.debug("late settle after timeout"),pn.delete(t),e.allowed&&e.destinations[n]===t&&(a=e,c=t,u=n,d=i,K(async()=>{await Tn(a,c,u),!hn(c)&&c.queuePush?.length&&await Qn(a,void 0,{},{[u]:c})},e=>{d.error("state recovery failed",Ot(e))})())};s.then(a,a)}(e,t,n,o,a,p,d):(wn(t,o,a),qn(e,t))}}return i&&!h&&pn.delete(t)&&await Tn(e,t,n),g}var ln=new WeakMap,fn=new WeakSet,pn=new WeakSet,gn=new WeakMap;function hn(e){return gn.get(e)}var mn=new WeakMap,vn=new WeakMap;function wn(e,t,n){const o=vn.get(e);o&&o[String(t)]===n&&delete o[String(t)]}var yn=new WeakMap;function bn(e,t){const n=yn.get(e);n?n.add(String(t)):yn.set(e,new Set([String(t)]))}var kn=new WeakMap;function Sn(e,t,n){!function(e,t,n){const o=e.delivery?.get(t);o&&delete o[String(n)]}(e,t,n),bn(t,n),gn.set(t,{type:n,since:Date.now()})}function On(e,t){return!!yn.get(t)?.size||Jt.some(n=>Zt(e,n)&&on(e,t,n))}function En(e,t){mn.set(e,(mn.get(e)||0)+1),gn.set(e,{type:t,since:Date.now()})}function qn(e,t){const n=(mn.get(t)||0)-1;var o,r;n>0?mn.set(t,n):mn.delete(t),o=e,r=t,gn.has(r)&&(mn.get(r)||On(o,r)||gn.delete(r))}function _n(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 xn(e,t,n,o){if(!Gt(e))return void Vt();const r=In(e,t,o);if(n.length)switch(t){case et.Consent:!function(e,t,n){const o=n||e.consent,r=un(e,et.Consent);t.forEach(t=>{on(e,t,et.Consent)&&cn(e,t,et.Consent)&&(Object.keys(o).filter(e=>e in t).forEach(n=>{L(t[n],t=>Ut(e,"consent",t,{key:n}))(o,r)}),nn(e,t,et.Consent))})}(e,n,o);break;case et.Ready:!function(e,t){if(!e.allowed)return;const n=un(e,et.Ready);t.forEach(t=>{L(t,t=>Ut(e,"ready",t))(void 0,n)})}(e,n);break;case et.Run:!function(e,t){if(!e.allowed)return;const n=un(e,et.Run);t.forEach(t=>{L(t,t=>Ut(e,"run",t))(void 0,n)})}(e,n);break;case et.Session:!function(e,t){if(!e.session)return;const n=un(e,et.Session);t.forEach(t=>{L(t,t=>Ut(e,"session",t))(e.session,n)})}(e,n);break;default:{const o=un(e,t),s=Xt(t);n.forEach(n=>{"function"==typeof n&&(s&&!on(e,n,t)||s&&!cn(e,n,t)||(L(n,n=>Ut(e,"generic",n,{type:t}))(r,o),s&&nn(e,n,t)))});break}}}function In(e,t,n){if(Yt(t))return n||e[t];switch(t){case et.Session:return e.session;case et.Config:return n||e.config;default:return}}async function Pn(e,t,n,o,r){if(!t.on)return!1;if(Xt(o)&&!on(e,t,o))return!1;if(Xt(o)&&!cn(e,t,o))return!1;const s=Xt(o);if(s&&An.has(t))return Dn.add(t),!1;const i=s?tn(e,o):0;s&&An.add(t);const a=t.on;let c,u=Promise.resolve(),d=!1;try{c=await K(()=>(u=Promise.resolve(a(o,r)),Kt(u,Bt,`Source "${n}" on(${o}) did not settle within 10000ms`)),t=>{t instanceof Lt&&(d=!0),Ut(e,"source",t,{sourceId:n,type:o})})()}finally{s&&!d&&An.delete(t)}if(s)if(d){const o=()=>{An.delete(t),Dn.delete(t),e.allowed&&e.sources[n]===t&&K(()=>Mn(e,t,n),t=>{e.logger.scope("on").error("state recovery failed",Ot(t))})()};u.then(o,o)}else _n(e,t,o,i),Dn.delete(t)&&await Mn(e,t,n);return!1===c}var An=new WeakSet,Dn=new WeakSet;async function Mn(e,t,n){const o=sn(e);try{for(const o of Jt)await Pn(e,t,n,o,In(e,o))}finally{o()}}async function jn(e,t,n,o,r){if(!t.on)return;const s=Xt(o);if(s&&!on(e,t,o))return;const i=vn.get(t)?.[String(o)];if(s&&void 0!==i&&i>=tn(e,o))return;if(s&&!cn(e,t,o)){if(t.config.init)return void Sn(e,t,o);const n=t.queueOn=t.queueOn||[],r={type:o,data:In(e,o)},s=n[n.length-1];return s&&s.type===o?n[n.length-1]=r:n.push(r),nn(e,t,o),void yn.get(t)?.delete(String(o))}const a=kn.get(t);if(!t.config.init||a)return t.queueOn=t.queueOn||[],t.queueOn.push({type:o,data:r}),void(s&&(nn(e,t,o),a&&!a.held&&(En(t,o),a.held=!0)));await dn(e,t,n,o,r)}async function Tn(e,t,n){if(!t.on)return;const o=sn(e);try{for(const o of Jt)(Zt(e,o)||yn.get(t)?.has(String(o)))&&await jn(e,t,n,o,In(e,o))}finally{o()}}function Cn(e){return(mn.get(e)||0)>0}function Rn(e,t,n){return n.catch(()=>{}),{id:e,destination:t,done:n}}var $n=1e3,Bn=1e3,Wn=3e4,Ln=Object.freeze({batched:!0});function Kn(e){return e===Ln}var zn=" batch-all";function Hn(e){return void 0===e?{}:"number"==typeof e?{wait:e}:{wait:e.wait,size:e.size,age:e.age}}function Nn(e){for(const t of e)hn(t.destination)&&(t.drain=!0)}async function Qn(e,t,n={},o){if(!e.allowed)return Jn({ok:!1});if(!t)return Gn(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 Rt(e,e.transformers||{},r,t,o,n.respond,io),i=s.respond??n.respond;return 0===s.copies.length?(e.logger.debug("Event dropped by collector.next"+(s.droppedBy?` (${s.droppedBy})`:"")),rt(e,t,o,{reason:"dropped",by:s.droppedBy,at:io}),{copies:[],respond:i,dropped:!0}):s.stopped?{copies:[],respond:i}:{copies:s.copies.map(t=>({event:ro(e,t.event,t.ingest),ingest:t.ingest})),respond:i}}(e,t,n);if(0===r.copies.length)return Jn({ok:!0,...r.dropped?{dropped:!0}:{}});const s=[];for(const t of r.copies)s.push(await Gn(e,t.event,{id:n.id,ingest:t.ingest,respond:r.respond},o));return s[0]}async function Gn(e,t,n,o){const{user:r}=e;if(t){const n=pt(e.config.queueMax),o=gt(e.queue,t,{max:n});if(o.dropped>0){const t=St(e.status,D("collector"),"queue",o.dropped);mt(e.queue,e.logger,"collector.queue overflow; oldest events dropped",{buffer:"queue",cap:n,droppedCount:t})}else e.queue.length<n&&vt(e.queue);e.status.in++}o||(o=e.destinations);const 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=D("destination",a),u=yt(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=wt();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&&bt(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??$n};let a=0;for(const e of t)a+=gt(n,e,s).dropped;if(a>0){kt(e,r);const t=St(e.status,D("destination",r),"queue",a);mt(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&&vt(n)};i.on&&i.config.init&&!hn(i)&&!Cn(i)&&On(e,i)&&await Tn(e,i,o);const p=hn(i);if(p&&!Cn(i)&&Date.now()-p.since>=Wt(i.config.timeout)&&await Tn(e,i,o),hn(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 Vn(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(hn(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=nt(e,D("destination",o),"destination","skip","string"==typeof t.id?t.id:"",Date.now(),tt(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:I}=E(g);if(f(I),!x.length)return l(),{id:o,destination:i,queue:g};const P=new Set(i.queuePush);let A=!1;try{A=await Vn(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(!A)return l(),{id:o,destination:i,queue:g};if(hn(i))return l(),f(x),{id:o,destination:i,queue:x};const j=[];if(e.consent!==_){const t=E(x.map(t=>({...t,consent:e.consent})));x.splice(0,x.length,...t.allowed),j.push(...t.skipped)}const T=i.queuePush||[],C=T.filter(e=>!P.has(e));if(C.length){i.queuePush=T.filter(e=>P.has(e));const t=E(C.map(t=>({...t,consent:e.consent})));x.push(...t.allowed),j.push(...t.skipped)}if(f(j),!x.length)return l(),j.length?{id:o,destination:i,queue:j}:{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?st(K,e):void 0,H=it(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 Rt(e,s,B,t,S,n.respond,r);if(0===i.copies.length){const n=nt(e,D("destination",o),"destination","skip","string"==typeof t.id?t.id:"",Date.now(),tt(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 at(e,N,t,n));const l=Date.now();let f=!1;const p=await M(Un,n=>{const r=i.type||"unknown";e.logger.scope(r).error("Push failed",{...Ot(n),event:t.name}),R=n,f=!0;const s=i.dlq,a=i.config.id||o,c={max:i.config.dlqMax??100},u=gt(s,[t,n],c);if(u.dropped>0){kt(e,a);const t=St(e.status,D("destination",a),"dlq",u.dropped);mt(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&&vt(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&&!Kn(p)&&Q&&Q.length>0&&t&&(t=await at(e,Q,t,n)),void 0===p||Kn(p)||($=p),Kn(p)&&F++,!f&&W){void 0!==p&&(n._response=p);const r=await Rt(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};kt(e,t.id);const r=e.status.destinations[t.id],s=Date.now();r.queuePushSize=n.queuePush?.length??0,r.dlqSize=n.dlq?.length??0;const i=t.breakerConfig,d=t.canonicalId?D("destination",t.canonicalId):void 0,l=t=>{i&&d&&bt(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 Jn({event:t,...Object.keys(a).length&&{done:a},...Object.keys(c).length&&{queued:c},...Object.keys(u).length&&{failed:u}})}var Fn=new WeakMap;async function Vn(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=Fn.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:Xn(t.env,t.config.env),reportError:Et(e,"destination",o,s,t)};s.debug("init");const a=Date.now();let c;O(e,nt(e,D("destination",o),"destination","init","",a));try{c=await j(n,"DestinationInit",e.hooks,e.logger)(i)}catch(t){const n=Date.now(),r=nt(e,D("destination",o),"destination","error","",n);throw r.durationMs=n-a,r.error=ot(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=sn(e);!function(e){const t=e.queueOn?.find(({type:e})=>Xt(e));t&&En(e,t.type),kn.set(e,{held:!!t})}(t);try{for(let n=t.queueOn?.shift();n;n=t.queueOn?.shift())await dn(e,t,o,n.type,n.data)}catch(n){for(const{type:n}of t.queueOn||[])Xt(n)&&Sn(e,t,n);throw t.queueOn=[],n}finally{!function(e,t){const n=kn.get(t);kn.delete(t),n?.held&&qn(e,t)}(e,t),n()}}return e.logger.scope(t.type||"unknown").debug("init done"),!0}(e,t,t.init,n);Fn.set(t,s);try{return await s}finally{Fn.delete(t)}}return!0}async function Un(e,t,n,o,r,s){const{config:i}=t,a=await A(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:{...Xn(t.env,i.env),...s?{respond:s}:{}},reportError:Et(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||"* *":zn;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=Hn(l?.batch),s=Hn(i.batch),a=r.wait??s.wait??Wn,c=r.size??s.size??Bn,d=r.age??s.age??Wn,g=Xn(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:Et(e,"destination",n,u,t)};u.debug("push batch",{events:s.entries.length});const d=t.config.id||n,l=kt(e,d),f=yt(t.config.breaker),h=D("destination",d),m=t=>{f&&bt(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+=gt(o,e,r).dropped;if(s>0){const t=St(e.status,D("destination",d),"dlq",s);mt(o,u,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:d,cap:r.max,droppedCount:t})}else o.length<r.max&&vt(o);l.failed+=n.length,l.dlqSize=o.length,e.status.failed+=n.length};let S=s.entries.length;const E=Wt(i.timeout),q=await M((o,r)=>Kt(Promise.resolve(j(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(I(_=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=tt(t.event,t.ingest,e),a=nt(e,D("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=ot(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=tt(o,r,e),h=Date.now(),m=nt(e,D("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=nt(e,D("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=kt(e,w);return y.inFlightBatch=(y.inFlightBatch??0)+1,c.batchFn(),Ln}{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:ut(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[P]={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=tt(o,r,e),f=Date.now(),p=nt(e,D("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=Wt(i.timeout),r=await Kt(Promise.resolve(j(t.push,"DestinationPush",e.hooks,e.logger)(a.event,d)),o,`Destination "${n}" delivery timed out after ${o}ms`),p=Date.now(),g=nt(e,D("destination",n),"destination","out",c,p,l);return g.durationMs=p-f,g.outEvent=a.event,ft(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=nt(e,D("destination",n),"destination","error",c,o,l);throw r.durationMs=o-f,r.error=ot(t),ft(r,s),a.mappingKey&&(r.mappingKey=a.mappingKey),O(e,r),t}}}function Jn(e){return{ok:!e?.failed,...e}}function Yn(e){const{code:t,config:n={},env:o={},cache:r,state:s}=e,{config:i}=qt(e,"before"),{config:a}=qt({...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=Xn(t.env,o);return{...t,config:c,env:u}}function Xn(e,t){return e||t?t?e&&I(e)&&I(t)?{...e,...t}:t:e:{}}async function Zn(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 eo(e,t){e.stateVersion++,e.cellVersion[t]=e.stateVersion}async function to(e,t,n){let o,r,s=!1;const i=[],a=sn(e);try{return await async function(){switch(t){case et.Config:Ie(n)&&(Se(e.config,n,{shallow:!1,merge:!1}),r=n,s=!0);break;case et.Consent:if(Ie(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);eo(e,et.Consent),r=t,s=!0}break;case et.Custom:Ie(n)&&(e.custom=Se(e.custom,n),eo(e,et.Custom),r=n,s=!0);break;case et.Destination:Ie(n)&&"code"in n&&Ie(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 Jn({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(ct(e,D("destination",l),d.state),d.require?.length){e.pending.destinations[l]=t,await Qt(e);const n=e.destinations[l];return n?Qn(e,void 0,{},{[l]:n}):Jn({ok:!0})}const f={...n,config:d,env:Xn(n.env,r)};return e.destinations[l]=f,!1!==f.config.queue&&(f.queuePush=[...e.queue]),await Tn(e,f,l),Qn(e,void 0,{},{[l]:f})}(e,n));break;case et.Globals:Ie(n)&&(e.globals=Se(e.globals,n),eo(e,et.Globals),r=n,s=!0);break;case et.Hook:if(Ie(n)&&xe(n.name)&&_e(n.fn)){const{name:t,fn:o}=n;e.hooks[t]=o,r=n,s=!0}break;case et.On:if(Ie(n)&&xe(n.type)){const{type:t,rules:o}=n;await async function(e,t,n){if(!Gt(e))return void Vt();const o=e.on,r=o[t]||[],s=B(n)?n:[n];s.forEach(e=>{r.push(e)}),o[t]=r,xn(e,t,s)}(e,t,o)}break;case et.Ready:s=!0;break;case et.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),eo(e,et.Consent)),t.user&&(e.user=Se(e.user,t.user),eo(e,et.User)),t.globals&&(e.globals=Se(e.config.globalsStatic||{},t.globals),eo(e,et.Globals)),t.custom&&(e.custom=Se(e.custom,t.custom),eo(e,et.Custom))),Object.values(e.destinations).forEach(e=>{e.queuePush=[]}),e.queue=[],e.round++,await Qt(e);const o=await async function(e){if(!Gt(e))return Vt(),[];const t=[];for(const[n,o]of Object.entries(e.destinations)){if(!o.on)continue;const r=async()=>{for(const t of Jt)Zt(e,t)&&await jn(e,o,n,t,In(e,t))};t.push(Rn(n,o,r()))}for(const t of Jt){if(!Zt(e,t))continue;const n=In(e,t);xn(e,t,e.on[t]||[]),await Promise.all(Object.entries(e.sources).filter(([,e])=>Ht(e)).map(([o,r])=>Pn(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)}}Nn(o);const i=await Qn(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 et.Session:s=!0;break;case et.Shutdown:e.hasShutdown||(e.hasShutdown=!0,await async function(e){const t=e.logger;await Zn(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 Zn(e.destinations,"destination",t),await Zn(e.transformers,"transformer",t),await Zn(e.stores,"store",t)}(e));break;case et.User:Ie(n)&&(Se(e.user,n,{shallow:!1}),eo(e,et.User),r=n,s=!0);break;default:return e.logger.warn("unknown command",{command:t}),Jn({ok:!1})}if(s){const n=await async function(e,t,n,o){if(!Gt(e))return Vt(),{ok:!0,deliveries:[]};e.seenEvents.add(String(t));let r=n||[];n||(r=e.on[t]||[]);const s=In(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&&(Ht(o)?i.push(Pn(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(Rn(n,o,jn(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))Ht(n)&&n.queueOn?.length&&await zt(e,n,t);const u=Object.values(e.sources).some(e=>!Ht(e)&&e.config.require?.length);return(Object.keys(e.pending.destinations).length>0||u)&&await Qt(e),xn(e,t,r,o),{ok:!c,deliveries:a}}(e,t,void 0,r);i.push(...n.deliveries),Nn(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 Qn(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&&!hn(n)&&n.queuePush?.length&&e.destinations[t]===n)return Qn(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||Jn({ok:!0})}()}finally{a()}}function no(e,t){return{timing:Math.round((Date.now()-e.timing)/10)/100,source:{type:"collector",schema:"4"},...t}}function oo(e,t,n){return so(e,t,n,{globals:e.globals,user:e.user,consent:e.consent})}function ro(e,t,n){return so(e,no(e,t),n,{globals:{},user:{},consent:{}})}function so(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.1-next-1792019907609";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 io="collector.next";function ao(e,t){const n=He(async(n,o={})=>await ze(async()=>{if(!e.allowed){const t=pt(e.config.queueMax),r=gt(e.preRunQueue,{event:n,options:o},{max:t});if(r.dropped>0){const n=St(e.status,"collector.preRun","queue",r.dropped);mt(e.preRunQueue,e.logger,"collector.preRunQueue overflow; oldest events dropped",{buffer:"queue",cap:t,droppedCount:n})}else e.preRunQueue.length<t&&vt(e.preRunQueue);return e.logger.debug("event held until run",{name:n.name,dropped:r.dropped}),Jn({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 Jn({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}),rt(e,t.event,h,{reason:"consent",at:o,required:c.consent,consent:{...e.consent,...n}}),Jn({ok:!0,dropped:!0})}}p=t.event}if(void 0!==u){const n=s?`source.${s}.next`:void 0,o=await Rt(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})`:"")),rt(e,p,h,{reason:"dropped",by:o.droppedBy,at:n??"collector.push.preChain"}),Jn({ok:!0,dropped:!0});if(o.stopped)return o.respond&&(f=o.respond),Jn({ok:!0});if(o.respond&&(f=o.respond),o.copies.length>1){const n=await Promise.all(o.copies.map(async n=>{const o=oo(e,t(n.event),n.ingest);return Qn(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]??Jn({ok:!0})}p=o.copies[0].event,h=o.copies[0].ingest}const m=function(e,t,n){return oo(e,no(e,t),n)}(e,p,h),v=await Qn(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}),Jn({ok:!1,invalid:!0,error:t.message})}return e.status.failed++,e.logger.error("push failed",{...Ot(t),event:n.name}),Jn({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=tt(r,o?.ingest,e),a=Date.now(),c=nt(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=nt(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=nt(e,"collector.push","collector","error",s,n,i);throw o.durationMs=n-a,o.error=ot(t),Re(e,o),t}}}function co(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 uo(e,t){const{cacheConfig:n,cacheStore:o,namespace:r,logger:s,storeId:i,collector:a}=t,c=(e,t)=>{if(!a)return;const n=nt(a,`store.${i}`,"store","in","");n.meta={op:"cache",cached:"hit"===t,status:t,key:e},Ye(a,n)},u={hits:0,misses:0,populates:0,writes:0,deletes:0,inflight_dedups:0},d=n.rules.map(e=>({match:e.match?Je(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=Xe(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,Ze(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),Ze(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,Ot(n)):console.warn(o,n)}}function lo(e,t,n){const o=`store.${n}`,r=Ue(t.get,"StoreGet",e.hooks,e.logger),s=Ue(t.set,"StoreSet",e.hooks,e.logger),i=Ue(t.delete,"StoreDelete",e.hooks,e.logger);t.get=async t=>{const n=Date.now(),s=nt(e,o,"store","in","",n);s.meta={op:"get",key:t},Ve(e,s);try{const s=await r(t),i=Date.now(),a=nt(e,o,"store","out","",i);return a.durationMs=i-n,a.meta={op:"get",key:t},Ve(e,a),s}catch(r){const s=Date.now(),i=nt(e,o,"store","error","",s);throw i.durationMs=s-n,i.meta={op:"get",key:t},i.error=ot(r),Ve(e,i),r}},t.set=async(t,n,r)=>{const i=Date.now(),a=nt(e,o,"store","in","",i);a.meta={op:"set",key:t},Ve(e,a);try{await s(t,n,r);const a=Date.now(),c=nt(e,o,"store","out","",a);c.durationMs=a-i,c.meta={op:"set",key:t},Ve(e,c)}catch(n){const r=Date.now(),s=nt(e,o,"store","error","",r);throw s.durationMs=r-i,s.meta={op:"set",key:t},s.error=ot(n),Ve(e,s),n}},t.delete=async t=>{const n=Date.now(),r=nt(e,o,"store","in","",n);r.meta={op:"delete",key:t},Ve(e,r);try{await i(t);const r=Date.now(),s=nt(e,o,"store","out","",r);s.durationMs=r-n,s.meta={op:"delete",key:t},Ve(e,s)}catch(r){const s=Date.now(),i=nt(e,o,"store","error","",s);throw i.durationMs=s-n,i.meta={op:"delete",key:t},i.error=ot(r),Ve(e,i),r}}}async function fo(e){const t=je({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=ao(s,e=>no(s,e)),s.command=(a=to,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",{...Ot(t),command:e}),Jn({ok:!1})})(),"Command",(i=s).hooks,i.logger)),s.elb=function(e){const t=new Set,n=n=>{t.has(n)||(t.add(n),e.logger.error("elb ignored an argument it does not take: pass data as an object and put trigger, context, nested, custom inside the event object, elb({ name, data, trigger, context, nested, custom })",{event:n}))},o=e=>e.some(e=>void 0!==e);return async(t,r,...s)=>{if("string"==typeof t&&t.startsWith("walker ")){o(s)&&n(t);const i=t.replace("walker ","");return e.command(i,r)}let i;if("string"==typeof t)i={name:t},Fe(r)?i.data=r:void 0!==r&&n(t);else{if(!t||"object"!=typeof t||Array.isArray(t))return Jn({ok:!1});i={...t},void 0!==r&&n(String(i.name))}return o(s)&&n(String(i.name)),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:Et(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=co()),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]=uo(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&&lo(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=co()),s.destinations=await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t))ct(e,D("destination",o),r.config?.state??r.code.config?.state??r.state),r.config?.require?.length?e.pending.destinations[o]=r:n[o]=Yn(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}=qt(r,"before"),{config:a}=qt({...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;ct(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:Et(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 po=globalThis;function go(e){try{const t=po.window;if(!t)return;t.localStorage.getItem(Pe)===e&&t.localStorage.removeItem(Pe)}catch{}}function ho(e,t){return void 0===t?e:n=>e({...n,release:t})}async function mo(e){const t=e??{},n=await fo(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=po.window,t=po.URLSearchParams;if(!e||!t)return null;try{const n=new t(e.location.search.replace(/^\?/,"")).getAll(Pe);return n.length>0?n[n.length-1]??null:null}catch{return null}}(),r=t??function(){try{return po.window?.localStorage.getItem(Pe)??null}catch{return null}}();if(!r)return;const s=Me(r);if(!s)return void(null===t?(e.logger.warn("observe: malformed stored credential cleared"),go(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{po.window?.localStorage.setItem(Pe,e)}catch{}}(r),null!==t&&function(){const e=po.window,t=po.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(Pe);const u=c.toString();e.history.replaceState({},"",`${a}${u?`?${u}`:""}${r}`)}catch{}}();const a=Ae({url:`${n.url}/ingest/${s.ses}`,token:s.secret,headers:{"X-Walkeros-Binding":n.binding},onStatus:t=>{401===t&&(go(r),i&&e.observers.delete(i))}});i=De(function(e,t){return void 0===t?e:n=>e({...n,flowId:t})}(ho(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(De(ho(Ae({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 Nt(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,...Ot(n)})})(),o||(n.config.init=!0,Ht(n)&&await zt(e,n,t))}return await Qt(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 vo=async e=>{let t;return{get flow(){return t},trigger:()=>async n=>{if(!t){const n=await mo(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 wo(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 yo={};t(yo,{createTrigger:()=>To,env:()=>bo,step:()=>Io});var bo={};t(bo,{moduleMockEnv:()=>_o,push:()=>qo,simulation:()=>xo});var ko=()=>{},So={error:ko,warn:ko,info:ko,debug:ko,throw:e=>{throw"string"==typeof e?new Error(e):e},json:ko,scope:()=>So},Oo=()=>()=>Promise.resolve({ok:!0});function Eo(){return{get push(){return Oo()},get command(){return Oo()},get elb(){return Oo()},logger:So}}var qo=Object.assign(Eo(),{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(){}}}}),_o=Eo(),xo=["call:AWS.SQSClient.send"],Io={};t(Io,{decoderText:()=>Do,malformedJson:()=>Mo,orderComplete:()=>Ao,pageView:()=>Po});var Po={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"]]},Ao={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"]]},Do={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"]]},Mo={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 jo(e){if("object"!=typeof e||null===e)return!1;const t=e;return"sqs"===t.type&&"function"==typeof t.push}var To=async e=>{let t;return{get flow(){return t},trigger:()=>async n=>{if(!t){const n=await mo(e);t={collector:n.collector,elb:n.elb}}const o=function(e){for(const t of Object.values(e.sources??{}))if(jo(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 Co}from"@walkeros/core/dev";import{z as Ro}from"@walkeros/core/dev";import{z as $o}from"@walkeros/core/dev";var Bo=$o.enum(["GET","POST","PUT","PATCH","DELETE","OPTIONS","HEAD"]),Wo=$o.union([$o.string(),$o.array($o.string()),$o.literal("*")]),Lo=$o.object({origin:Wo.describe("Allowed origins (* for all, URL string, or array of URLs)").optional(),methods:$o.array(Bo).describe("Allowed HTTP methods").optional(),headers:$o.array($o.string()).describe("Allowed request headers").optional(),credentials:$o.boolean().describe("Allow credentials (cookies, authorization headers)").optional(),maxAge:$o.number().int().positive().describe("Preflight cache duration in seconds").optional()}),Ko=Ro.object({cors:Ro.union([Ro.boolean(),Lo]).describe("CORS configuration: false = disabled, true = allow all origins, object = custom configuration").default(!0),timeout:Ro.number().int().positive().max(9e5).describe("Request timeout in milliseconds (max: 900000 for Lambda)").default(3e4),enablePixelTracking:Ro.boolean().describe("Enable GET requests with 1x1 transparent GIF response for pixel tracking").default(!0),maxBatchSize:Ro.number().int().min(1).describe("Maximum number of events accepted in a single batch request").default(100),healthPath:Ro.string().describe("Health check endpoint path (e.g., /health)").default("/health")}),zo=Co(Ko);import{zodToSchema as Ho}from"@walkeros/core/dev";import{z as No}from"@walkeros/core/dev";var Qo=No.object({queueName:No.string().min(1).describe("SQS queue short name (like walkeros-events). Required for both setup and runtime poll."),region:No.string().describe("AWS region (like eu-central-1). Default: eu-central-1.").optional(),queueUrl:No.string().url().describe("Optional pre-resolved queue URL. When set, init skips the GetQueueUrl lookup.").optional(),client:No.any().describe("Pre-configured AWS SQSClient instance. Bypasses construction when supplied.").optional(),config:No.any().describe("AWS SDK SQSClientConfig (credentials, endpoint overrides, retries).").optional(),decoder:No.enum(["json","text","raw"]).describe("Decoder for the message body. json (default) parses JSON, text forwards UTF-8, raw forwards a Buffer.").optional(),maxMessages:No.number().int().min(1).max(10).describe("SQS receive batch size. Cap 10. Default: 10.").optional(),waitTimeSeconds:No.number().int().min(0).max(20).describe("Long-poll duration in seconds. Cap 20. Default: 20.").optional(),visibilityTimeout:No.number().int().nonnegative().describe("Per-receive visibility timeout override. Default: queue-configured value.").optional(),shutdownTimeoutMs:No.number().int().positive().describe("Graceful shutdown timeout in milliseconds. Default: 30000. After this window, destroy() force-closes.").optional(),onPushError:No.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 Go}from"@walkeros/core/dev";var Fo=Go.record(Go.string(),Go.string()),Vo=Go.object({region:Go.string().min(1).describe("AWS region.").optional(),fifoQueue:Go.boolean().describe("FIFO queue with content-based deduplication. Auto-appends .fifo suffix to the queue name.").optional(),visibilityTimeoutSeconds:Go.number().int().nonnegative().describe("Visibility timeout in seconds. Default: 30.").optional(),messageRetentionSeconds:Go.number().int().positive().describe("Message retention period in seconds. Default: 345600 (4 days).").optional(),maximumMessageSize:Go.number().int().min(1024).max(262144).describe("Max message size in bytes. Default: 262144 (256 KB).").optional(),kmsMasterKeyId:Go.string().describe("KMS key alias or ID for at-rest encryption.").optional(),deadLetterQueue:Go.object({arn:Go.string().describe("ARN of an existing DLQ. Mutually exclusive with create: true.").optional(),create:Go.boolean().describe("Create a sibling DLQ named <queueName>-dlq. Default: false.").optional(),maxReceiveCount:Go.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:Fo.describe("Tags applied to the queue (and inherited by an auto-created DLQ).").optional(),subscribeToSnsTopic:Go.object({topicArn:Go.string().min(1).describe("Topic ARN to subscribe to."),rawMessageDelivery:Go.boolean().describe("Deliver SNS messages without the SNS envelope.").optional(),filterPolicy:Go.record(Go.string(),Go.unknown()).describe("SNS filter policy applied at subscription level.").optional()}).describe("Optional SNS topic subscription. Creates the subscription and the matching queue policy.").optional()}),Uo=Ho(Qo),Jo=Ho(Vo),Yo={};t(Yo,{CorsOptionsSchema:()=>Lo,CorsOrigin:()=>Wo,HttpMethod:()=>Bo,SettingsSchema:()=>Ko,settings:()=>zo,sqsSettings:()=>Uo,sqsSetup:()=>Jo});var Xo={sourceLambda:n,sourceSqs:yo},Zo={sourceLambda:{settings:zo},sourceSqs:{settings:Uo,setup:Jo}};export{n as examples,Xo as exportExamples,Zo as exportSchemas,Yo as schemas,yo as sqsExamples};//# sourceMappingURL=dev.mjs.map
package/dist/dev.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/lambda/examples/index.ts","../src/lambda/examples/env.ts","../src/lambda/examples/step.ts","../src/lambda/examples/trigger.ts","../src/sqs/examples/index.ts","../src/sqs/examples/env.ts","../src/sqs/examples/step.ts","../src/sqs/examples/trigger.ts","../src/lambda/schemas/index.ts","../src/lambda/schemas/settings.ts","../src/lambda/schemas/primitives.ts","../src/sqs/schemas/index.ts","../src/sqs/schemas/settings.ts","../src/sqs/schemas/setup.ts","../src/schemas.ts","../src/dev.ts"],"sourcesContent":["export * as env from './env';\nexport * as step from './step';\nexport { createTrigger, trigger } from './trigger';\n","import type { Env } from '../types';\nimport type { Elb, Logger } from '@walkeros/core';\n\n/**\n * Example environment configurations for AWS Lambda source\n *\n * These environments provide standardized mock structures for testing\n * Lambda event handling without requiring actual Lambda deployment.\n */\n\n// Create a properly typed elb/push/command function that returns a promise with PushResult\nconst createMockElbFn = (): Elb.Fn => {\n const fn = (() =>\n Promise.resolve({\n ok: true,\n })) as Elb.Fn;\n return fn;\n};\n\n// Simple no-op logger for demo purposes\nconst noopFn = () => {};\nconst noopLogger: Logger.Instance = {\n error: noopFn,\n warn: noopFn,\n info: noopFn,\n debug: noopFn,\n throw: (message: string | Error) => {\n throw typeof message === 'string' ? new Error(message) : message;\n },\n json: noopFn,\n scope: () => noopLogger,\n};\n\n/**\n * Standard mock environment for testing Lambda source\n *\n * Use this for testing Lambda event ingestion and request/response handling\n * without requiring a real AWS Lambda environment.\n */\nexport const push: Env = {\n get push() {\n return createMockElbFn();\n },\n get command() {\n return createMockElbFn();\n },\n get elb() {\n return createMockElbFn();\n },\n logger: noopLogger,\n};\n","import type { Flow } from '@walkeros/core';\n\nexport const lambdaPost: Flow.StepExample = {\n title: 'Lambda POST',\n description:\n 'An API Gateway v2 HTTP POST with a JSON body is converted into a walker elb event.',\n trigger: { type: 'POST' },\n in: {\n version: '2.0',\n requestContext: {\n http: { method: 'POST', path: '/collect' },\n requestId: 'req-123',\n },\n body: JSON.stringify({\n name: 'page view',\n data: { title: 'Home' },\n }),\n isBase64Encoded: false,\n },\n out: [\n [\n 'elb',\n {\n name: 'page view',\n data: { title: 'Home' },\n },\n ],\n ],\n};\n\nexport const apiGatewayV1Post: Flow.StepExample = {\n title: 'API Gateway v1 POST',\n description:\n 'A REST API Gateway v1 POST request with a JSON body is converted into a walker elb event.',\n trigger: { type: 'POST' },\n in: {\n httpMethod: 'POST',\n path: '/collect',\n requestContext: {\n requestId: 'req-789',\n identity: { sourceIp: '203.0.113.42' },\n },\n queryStringParameters: null,\n body: JSON.stringify({\n name: 'page view',\n data: { title: 'Home' },\n }),\n isBase64Encoded: false,\n },\n out: [\n [\n 'elb',\n {\n name: 'page view',\n data: { title: 'Home' },\n },\n ],\n ],\n};\n\nexport const lambdaGet: Flow.StepExample = {\n title: 'Lambda GET',\n description:\n 'An API Gateway v2 HTTP GET with query parameters is parsed into an elb event payload.',\n trigger: { type: 'GET' },\n in: {\n version: '2.0',\n requestContext: {\n http: { method: 'GET', path: '/collect' },\n requestId: 'req-456',\n },\n rawQueryString: 'e=page+view&d=%7B%22title%22%3A%22Home%22%7D',\n isBase64Encoded: false,\n },\n out: [\n [\n 'elb',\n {\n e: 'page view',\n d: '{\"title\":\"Home\"}',\n },\n ],\n ],\n};\n\nexport const lambdaPostForwardsSource: Flow.StepExample = {\n title: 'Lambda POST with provenance',\n description:\n 'A POST body carrying a source map is forwarded in full, so release and trace provenance survive the crossing.',\n trigger: { type: 'POST' },\n in: {\n version: '2.0',\n requestContext: {\n http: { method: 'POST', path: '/collect' },\n requestId: 'req-321',\n },\n body: JSON.stringify({\n name: 'page view',\n data: { title: 'Home' },\n source: { release: { web: 'r1' } },\n }),\n isBase64Encoded: false,\n },\n out: [\n [\n 'elb',\n {\n name: 'page view',\n data: { title: 'Home' },\n source: { release: { web: 'r1' } },\n },\n ],\n ],\n};\n","import type { Trigger, Collector } from '@walkeros/core';\nimport type { LambdaEvent, LambdaContext, LambdaResult } from '../types';\nimport { startFlow } from '@walkeros/collector';\n\nexport interface Content {\n [key: string]: unknown;\n}\n\nexport interface Result {\n statusCode: number;\n body: unknown;\n headers: Record<string, string>;\n}\n\n/**\n * Find the lambda source instance from the collector's registered sources.\n */\nfunction findLambdaSource(collector: Collector.Instance) {\n for (const source of Object.values(collector.sources || {})) {\n if ((source as { type?: string }).type === 'lambda') return source;\n }\n}\n\n/**\n * Lambda source createTrigger.\n *\n * Boots the collector via startFlow, then invokes the Lambda source's push()\n * with a real API Gateway event and a minimal Lambda context.\n *\n * Content is the raw Lambda event object (API Gateway v1 or v2 format).\n * Result contains statusCode, parsed body, and headers.\n *\n * @example\n * const { trigger, flow } = await createTrigger(config);\n * const result = await trigger('POST')({ version: '2.0', ... });\n * console.log(result.statusCode, result.body);\n */\nconst createTrigger: Trigger.CreateFn<Content, Result> = async (\n config: Collector.InitConfig,\n) => {\n let flow: Trigger.FlowHandle | undefined;\n\n const trigger: Trigger.Fn<Content, Result> =\n () =>\n async (content: Content): Promise<Result> => {\n // Lazy startFlow\n if (!flow) {\n const result = await startFlow(config);\n flow = { collector: result.collector, elb: result.elb };\n }\n\n const source = findLambdaSource(flow.collector);\n if (!source) throw new Error('Lambda source not found in collector');\n\n // Create minimal Lambda context\n const lambdaContext = {\n awsRequestId: `test-${Date.now()}`,\n } as unknown as LambdaContext;\n\n // Call source.push with the raw Lambda event + context\n const pushFn = (\n source as unknown as {\n push: (...args: unknown[]) => Promise<LambdaResult>;\n }\n ).push;\n const lambdaResult = await pushFn(\n content as unknown as LambdaEvent,\n lambdaContext,\n );\n\n // Parse response\n let body: unknown;\n try {\n body = JSON.parse(lambdaResult.body || '{}');\n } catch {\n body = lambdaResult.body;\n }\n\n const headers: Record<string, string> = {};\n if (lambdaResult.headers) {\n for (const [k, v] of Object.entries(lambdaResult.headers)) {\n if (v !== undefined) headers[k] = String(v);\n }\n }\n\n return {\n statusCode: lambdaResult.statusCode,\n body,\n headers,\n };\n };\n\n return {\n get flow() {\n return flow;\n },\n trigger,\n };\n};\n\n/**\n * Legacy trigger — takes a source instance directly.\n * Preserved for CLI simulate path.\n */\nfunction trigger(source: {\n push: (event: LambdaEvent, context: LambdaContext) => Promise<LambdaResult>;\n}): (content: Content) => Promise<LambdaResult> {\n return async (content: Content) => {\n const lambdaEvent = { ...(content as Record<string, unknown>) };\n\n // Adapt body format: step examples may use `name`, source expects `event`\n if (lambdaEvent.body && typeof lambdaEvent.body === 'string') {\n const body = JSON.parse(lambdaEvent.body);\n if (body.name && !body.event) {\n lambdaEvent.body = JSON.stringify({\n ...body,\n event: body.name,\n name: undefined,\n });\n }\n }\n\n const context: LambdaContext = {\n awsRequestId: 'test-req',\n } as unknown as LambdaContext;\n\n return source.push(lambdaEvent as unknown as LambdaEvent, context);\n };\n}\n\nexport { createTrigger, trigger };\n","export * as env from './env';\nexport * as step from './step';\nexport { createTrigger } from './trigger';\nexport type { Content, Result } from './trigger';\n","import type {\n CreateQueueCommandOutput,\n DeleteMessageCommandOutput,\n GetQueueAttributesCommandOutput,\n GetQueueUrlCommandOutput,\n ReceiveMessageCommandOutput,\n SQSClientConfig,\n} from '@aws-sdk/client-sqs';\nimport type { Env, SqsClient } from '../types';\nimport type { Elb, Logger } from '@walkeros/core';\n\n/**\n * Example environment for the AWS SQS source.\n *\n * `push` injects a structural SQS client (`env.AWS.SQSClient`), so a\n * simulated run never reaches AWS and its `send` calls can be recorded. The\n * unit tests keep substituting the SDK module-wide via\n * `jest.mock('@aws-sdk/client-sqs')`; they use `push` without the client.\n */\n\nconst noopFn = (): void => undefined;\nconst noopLogger: Logger.Instance = {\n error: noopFn,\n warn: noopFn,\n info: noopFn,\n debug: noopFn,\n throw: (message: string | Error) => {\n throw typeof message === 'string' ? new Error(message) : message;\n },\n json: noopFn,\n scope: () => noopLogger,\n};\n\nconst createMockElbFn = (): Elb.Fn => {\n const fn: Elb.Fn = () => Promise.resolve({ ok: true });\n return fn;\n};\n\nconst QUEUE_URL =\n 'https://sqs.eu-central-1.amazonaws.com/000000000000/walkeros-events';\nconst QUEUE_ARN = 'arn:aws:sqs:eu-central-1:000000000000:walkeros-events';\n\n/** A long poll that finds nothing, kept short so a simulated run ends fast. */\nconst RECEIVE_WAIT_MS = 100;\n\n/** One response that satisfies every command the source sends. */\ntype SqsResponse = GetQueueUrlCommandOutput &\n GetQueueAttributesCommandOutput &\n ReceiveMessageCommandOutput &\n DeleteMessageCommandOutput &\n CreateQueueCommandOutput;\n\nfunction isReceive(command: object): boolean {\n if (!('input' in command)) return false;\n const { input } = command;\n return (\n typeof input === 'object' && input !== null && 'WaitTimeSeconds' in input\n );\n}\n\n/**\n * Answers every command with the queue URL and ARN and an empty receive, so\n * init resolves the queue and the long-poll loop idles without messages.\n */\nclass MockSQSClient implements SqsClient {\n constructor(public config?: SQSClientConfig) {}\n\n async send(command: object): Promise<SqsResponse> {\n if (isReceive(command)) {\n await new Promise<void>((resolve) =>\n setTimeout(resolve, RECEIVE_WAIT_MS),\n );\n }\n return {\n $metadata: {},\n QueueUrl: QUEUE_URL,\n Attributes: { QueueArn: QUEUE_ARN },\n Messages: [],\n };\n }\n\n destroy(): void {}\n}\n\nfunction createEnv(): Env {\n return {\n get push() {\n return createMockElbFn();\n },\n get command() {\n return createMockElbFn();\n },\n get elb() {\n return createMockElbFn();\n },\n logger: noopLogger,\n };\n}\n\n/** Standard mock environment, with the structural client for simulate. */\nexport const push: Env = Object.assign(createEnv(), {\n AWS: { SQSClient: MockSQSClient },\n});\n\n/**\n * The same environment without the client, for unit tests that substitute the\n * SDK module-wide with `jest.mock`.\n */\nexport const moduleMockEnv: Env = createEnv();\n\n/** Every request (queue lookup, receive, delete) goes through `send`. */\nexport const simulation = ['call:AWS.SQSClient.send'];\n","import type { Flow } from '@walkeros/core';\n\n/**\n * SQS source step examples.\n *\n * Each `in` is a partial SQS Message-like (MessageId, Body, optional\n * ReceiptHandle). The trigger synthesizes the missing fields and dispatches\n * through the source's `push()` (the same pipeline the long-poll loop uses).\n * `out` records the terminal state recorded by the trigger as\n * `[method, ...args]` entries.\n */\n\nconst eventPayload = {\n event: 'page view',\n data: { title: 'Documentation', url: 'https://example.com/docs' },\n};\n\nconst orderPayload = {\n event: 'order complete',\n data: { id: 'ORD-500', total: 199.99, currency: 'EUR' },\n};\n\nexport const pageView: Flow.StepExample = {\n title: 'Page view from SQS',\n description:\n 'A standard SQS message body containing a walker elb event payload as JSON.',\n in: {\n MessageId: 'm-1',\n Body: JSON.stringify(eventPayload),\n },\n out: [['message.ack', 'm-1']],\n};\n\nexport const orderComplete: Flow.StepExample = {\n title: 'Order complete from SQS',\n description: 'Order complete event flowing through the long-poll loop.',\n in: {\n MessageId: 'm-2',\n Body: JSON.stringify(orderPayload),\n },\n out: [['message.ack', 'm-2']],\n};\n\nexport const decoderText: Flow.StepExample = {\n title: 'Text decoder',\n description:\n 'When decoder is \"text\", the body string flows under data.payload.',\n in: { MessageId: 'm-3', Body: 'raw text payload' },\n out: [['message.ack', 'm-3']],\n};\n\nexport const malformedJson: Flow.StepExample = {\n title: 'Malformed JSON nacks',\n description:\n 'Default decoder is JSON. A malformed body throws DecoderError; the source nacks (skips DeleteMessage) so the message redelivers.',\n in: { MessageId: 'm-4', Body: '{not json' },\n out: [['message.nack', 'm-4']],\n};\n","import type { Collector, Trigger } from '@walkeros/core';\nimport { startFlow } from '@walkeros/collector';\nimport type { SyntheticMessage, SyntheticPushResult } from '../types';\n\n/**\n * Content shape for the SQS source trigger.\n *\n * The trigger synthesizes a SyntheticMessage from this partial input and\n * dispatches it through the source's `push()` (the same pipeline the\n * long-poll loop uses).\n */\nexport interface Content {\n MessageId: string;\n Body: string;\n ReceiptHandle?: string;\n Attributes?: Record<string, string>;\n MessageAttributes?: Record<\n string,\n { DataType: string; StringValue?: string }\n >;\n}\n\n/**\n * Trigger result: the recorded ack/nack as `[method, MessageId]` entries.\n * Mirrors the destination's `[method, ...args]` recording shape.\n */\nexport type Result = Array<[string, ...unknown[]]>;\n\ninterface SqsSourceLike {\n type: string;\n push: (content?: SyntheticMessage) => Promise<SyntheticPushResult | void>;\n}\n\nfunction isSqsSource(value: unknown): value is SqsSourceLike {\n if (typeof value !== 'object' || value === null) return false;\n const candidate: { type?: unknown; push?: unknown } = value;\n return candidate.type === 'sqs' && typeof candidate.push === 'function';\n}\n\nfunction findSource(collector: Collector.Instance): SqsSourceLike | undefined {\n for (const source of Object.values(collector.sources ?? {})) {\n if (isSqsSource(source)) return source;\n }\n return undefined;\n}\n\n/**\n * SQS source createTrigger.\n *\n * Boots the collector via startFlow, finds the registered SQS source, and\n * invokes its `push()` with a synthesized message. The source dispatches the\n * synthetic message through the same handler the long-poll loop uses,\n * exercising the full decode / forward / ack-nack pipeline without touching\n * real SQS infrastructure.\n */\nexport const createTrigger: Trigger.CreateFn<Content, Result> = async (\n config: Collector.InitConfig,\n) => {\n let flow: Trigger.FlowHandle | undefined;\n\n const trigger: Trigger.Fn<Content, Result> =\n () =>\n async (content: Content): Promise<Result> => {\n if (!flow) {\n const result = await startFlow(config);\n flow = { collector: result.collector, elb: result.elb };\n }\n\n const source = findSource(flow.collector);\n if (!source) {\n throw new Error(\n 'sqs source not registered in collector, ensure it is configured in sources',\n );\n }\n\n const synthetic: SyntheticMessage = {\n MessageId: content.MessageId,\n Body: content.Body,\n ReceiptHandle: content.ReceiptHandle,\n Attributes: content.Attributes,\n MessageAttributes: content.MessageAttributes,\n };\n\n const result = await source.push(synthetic);\n const recorded: Result = [];\n if (result && typeof result === 'object') {\n if (result.acked) recorded.push(['message.ack', content.MessageId]);\n if (result.nacked) recorded.push(['message.nack', content.MessageId]);\n }\n return recorded;\n };\n\n return {\n get flow() {\n return flow;\n },\n trigger,\n };\n};\n","import { zodToSchema } from '@walkeros/core/dev';\nimport { SettingsSchema } from './settings';\n\n// Export primitives\nexport * from './primitives';\n\n// Export Zod schemas and types\nexport { SettingsSchema, type Settings } from './settings';\n\n// JSON Schema exports (for website PropertyTable and documentation tools)\nexport const settings = zodToSchema(SettingsSchema);\n","import { z } from '@walkeros/core/dev';\nimport { CorsOptionsSchema } from './primitives';\n\n/**\n * AWS Lambda source settings schema\n */\nexport const SettingsSchema = z.object({\n cors: z\n .union([z.boolean(), CorsOptionsSchema])\n .describe(\n 'CORS configuration: false = disabled, true = allow all origins, object = custom configuration',\n )\n .default(true),\n\n timeout: z\n .number()\n .int()\n .positive()\n .max(900000) // AWS Lambda max timeout: 15 minutes\n .describe('Request timeout in milliseconds (max: 900000 for Lambda)')\n .default(30000),\n\n enablePixelTracking: z\n .boolean()\n .describe(\n 'Enable GET requests with 1x1 transparent GIF response for pixel tracking',\n )\n .default(true),\n\n maxBatchSize: z\n .number()\n .int()\n .min(1)\n .describe('Maximum number of events accepted in a single batch request')\n .default(100),\n\n healthPath: z\n .string()\n .describe('Health check endpoint path (e.g., /health)')\n .default('/health'),\n});\n\nexport type Settings = z.infer<typeof SettingsSchema>;\n","import { z } from '@walkeros/core/dev';\n\n/**\n * HTTP methods enum\n */\nexport const HttpMethod = z.enum([\n 'GET',\n 'POST',\n 'PUT',\n 'PATCH',\n 'DELETE',\n 'OPTIONS',\n 'HEAD',\n]);\n\n/**\n * CORS origin configuration\n * Accepts:\n * - '*' for all origins\n * - Single URL string\n * - Array of URL strings\n */\nexport const CorsOrigin = z.union([\n z.string(),\n z.array(z.string()),\n z.literal('*'),\n]);\n\n/**\n * CORS options schema\n * Configuration for Cross-Origin Resource Sharing\n */\nexport const CorsOptionsSchema = z.object({\n origin: CorsOrigin.describe(\n 'Allowed origins (* for all, URL string, or array of URLs)',\n ).optional(),\n\n methods: z.array(HttpMethod).describe('Allowed HTTP methods').optional(),\n\n headers: z.array(z.string()).describe('Allowed request headers').optional(),\n\n credentials: z\n .boolean()\n .describe('Allow credentials (cookies, authorization headers)')\n .optional(),\n\n maxAge: z\n .number()\n .int()\n .positive()\n .describe('Preflight cache duration in seconds')\n .optional(),\n});\n\nexport type CorsOptions = z.infer<typeof CorsOptionsSchema>;\n","import { zodToSchema } from '@walkeros/core/dev';\nimport { SettingsSchema } from './settings';\nimport { SetupSchema } from './setup';\n\nexport { SettingsSchema, type Settings } from './settings';\nexport { SetupSchema, type Setup } from './setup';\n\n// JSON Schema exports (for website PropertyTable + MCP package_get).\nexport const settings = zodToSchema(SettingsSchema);\nexport const setup = zodToSchema(SetupSchema);\n","import { z } from '@walkeros/core/dev';\n\n/**\n * AWS SQS source settings schema.\n *\n * Required: queueName. All other fields optional with sensible defaults\n * applied at runtime by `getConfig`.\n */\nexport const SettingsSchema = z.object({\n queueName: z\n .string()\n .min(1)\n .describe(\n 'SQS queue short name (like walkeros-events). Required for both setup and runtime poll.',\n ),\n region: z\n .string()\n .describe('AWS region (like eu-central-1). Default: eu-central-1.')\n .optional(),\n queueUrl: z\n .string()\n .url()\n .describe(\n 'Optional pre-resolved queue URL. When set, init skips the GetQueueUrl lookup.',\n )\n .optional(),\n client: z\n .any()\n .describe(\n 'Pre-configured AWS SQSClient instance. Bypasses construction when supplied.',\n )\n .optional(),\n config: z\n .any()\n .describe(\n 'AWS SDK SQSClientConfig (credentials, endpoint overrides, retries).',\n )\n .optional(),\n decoder: z\n .enum(['json', 'text', 'raw'])\n .describe(\n 'Decoder for the message body. json (default) parses JSON, text forwards UTF-8, raw forwards a Buffer.',\n )\n .optional(),\n maxMessages: z\n .number()\n .int()\n .min(1)\n .max(10)\n .describe('SQS receive batch size. Cap 10. Default: 10.')\n .optional(),\n waitTimeSeconds: z\n .number()\n .int()\n .min(0)\n .max(20)\n .describe('Long-poll duration in seconds. Cap 20. Default: 20.')\n .optional(),\n visibilityTimeout: z\n .number()\n .int()\n .nonnegative()\n .describe(\n 'Per-receive visibility timeout override. Default: queue-configured value.',\n )\n .optional(),\n shutdownTimeoutMs: z\n .number()\n .int()\n .positive()\n .describe(\n 'Graceful shutdown timeout in milliseconds. Default: 30000. After this window, destroy() force-closes.',\n )\n .optional(),\n onPushError: z\n .enum(['nack', 'ack'])\n .describe(\n 'Behavior when forwarding to the collector throws. nack (default) skips DeleteMessage so the message redelivers; ack drops it.',\n )\n .optional(),\n});\n\nexport type Settings = z.infer<typeof SettingsSchema>;\n","import { z } from '@walkeros/core/dev';\n\n/**\n * AWS SQS source setup schema.\n *\n * Provisioning options for `walkeros setup source.<id>`. Authoritative-apply:\n * declared state is written via a single CreateQueueCommand; non-declared\n * tags or attributes are left untouched.\n */\nconst TagsSchema = z.record(z.string(), z.string());\n\nexport const SetupSchema = z.object({\n region: z.string().min(1).describe('AWS region.').optional(),\n fifoQueue: z\n .boolean()\n .describe(\n 'FIFO queue with content-based deduplication. Auto-appends .fifo suffix to the queue name.',\n )\n .optional(),\n visibilityTimeoutSeconds: z\n .number()\n .int()\n .nonnegative()\n .describe('Visibility timeout in seconds. Default: 30.')\n .optional(),\n messageRetentionSeconds: z\n .number()\n .int()\n .positive()\n .describe('Message retention period in seconds. Default: 345600 (4 days).')\n .optional(),\n maximumMessageSize: z\n .number()\n .int()\n .min(1024)\n .max(262144)\n .describe('Max message size in bytes. Default: 262144 (256 KB).')\n .optional(),\n kmsMasterKeyId: z\n .string()\n .describe('KMS key alias or ID for at-rest encryption.')\n .optional(),\n deadLetterQueue: z\n .object({\n arn: z\n .string()\n .describe(\n 'ARN of an existing DLQ. Mutually exclusive with create: true.',\n )\n .optional(),\n create: z\n .boolean()\n .describe('Create a sibling DLQ named <queueName>-dlq. Default: false.')\n .optional(),\n maxReceiveCount: z\n .number()\n .int()\n .min(1)\n .max(1000)\n .describe('Max receive count before message goes to DLQ. Default: 5.')\n .optional(),\n })\n .describe('Optional dead-letter queue.')\n .optional(),\n tags: TagsSchema.describe(\n 'Tags applied to the queue (and inherited by an auto-created DLQ).',\n ).optional(),\n subscribeToSnsTopic: z\n .object({\n topicArn: z.string().min(1).describe('Topic ARN to subscribe to.'),\n rawMessageDelivery: z\n .boolean()\n .describe('Deliver SNS messages without the SNS envelope.')\n .optional(),\n filterPolicy: z\n .record(z.string(), z.unknown())\n .describe('SNS filter policy applied at subscription level.')\n .optional(),\n })\n .describe(\n 'Optional SNS topic subscription. Creates the subscription and the matching queue policy.',\n )\n .optional(),\n});\n\nexport type Setup = z.infer<typeof SetupSchema>;\n","// Lambda (default sub-source).\nexport { settings, SettingsSchema, type Settings } from './lambda/schemas';\nexport * from './lambda/schemas/primitives';\n\n// SQS sub-source. Prefixed so the website's <Configuration> snippet can\n// remap data.schemas.sqsSettings / sqsSetup onto data.schemas.settings.\nexport { settings as sqsSettings } from './sqs/schemas';\nexport { setup as sqsSetup } from './sqs/schemas';\n","import * as lambdaExamplesNs from './lambda/examples';\nimport * as sqsExamplesNs from './sqs/examples';\nimport * as lambdaSchemasNs from './lambda/schemas';\nimport * as sqsSchemasNs from './sqs/schemas';\n\nexport * as schemas from './schemas';\nexport * as examples from './lambda/examples';\nexport * as sqsExamples from './sqs/examples';\n\n/** Dev examples per export, keyed by the export names in package.json. */\nexport const exportExamples = {\n sourceLambda: lambdaExamplesNs,\n sourceSqs: sqsExamplesNs,\n};\n\n/** Schemas per export, keyed by the export names in package.json. */\nexport const exportSchemas = {\n sourceLambda: { settings: lambdaSchemasNs.settings },\n sourceSqs: {\n settings: sqsSchemasNs.settings,\n setup: sqsSchemasNs.setup,\n },\n};\n"],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AChGA,SAAS,iBAAiB,WAA+B;AACvD,aAAW,UAAU,OAAO,OAAO,UAAU,WAAW,CAAC,CAAC,GAAG;AAC3D,QAAK,OAA6B,SAAS,SAAU,QAAO;AAAA,EAC9D;AACF;AAgBA,IAAM,gBAAmD,OACvD,WACG;AACH,MAAI;AAEJ,QAAMC,WACJ,MACA,OAAO,YAAsC;AAE3C,QAAI,CAAC,MAAM;AACT,YAAM,SAAS,MAAM,GAAU,MAAM;AACrC,aAAO,EAAE,WAAW,OAAO,WAAW,KAAK,OAAO,IAAI;AAAA,IACxD;AAEA,UAAM,SAAS,iBAAiB,KAAK,SAAS;AAC9C,QAAI,CAAC,OAAQ,OAAM,IAAI,MAAM,sCAAsC;AAGnE,UAAM,gBAAgB;AAAA,MACpB,cAAc,QAAQ,KAAK,IAAI,CAAC;AAAA,IAClC;AAGA,UAAM,SACJ,OAGA;AACF,UAAM,eAAe,MAAM;AAAA,MACzB;AAAA,MACA;AAAA,IACF;AAGA,QAAI;AACJ,QAAI;AACF,aAAO,KAAK,MAAM,aAAa,QAAQ,IAAI;AAAA,IAC7C,QAAQ;AACN,aAAO,aAAa;AAAA,IACtB;AAEA,UAAM,UAAkC,CAAC;AACzC,QAAI,aAAa,SAAS;AACxB,iBAAW,CAACC,IAAGC,EAAC,KAAK,OAAO,QAAQ,aAAa,OAAO,GAAG;AACzD,YAAIA,OAAM,OAAW,SAAQD,EAAC,IAAI,OAAOC,EAAC;AAAA,MAC5C;AAAA,IACF;AAEA,WAAO;AAAA,MACL,YAAY,aAAa;AAAA,MACzB;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAEF,SAAO;AAAA,IACL,IAAI,OAAO;AACT,aAAO;AAAA,IACT;AAAA,IACA,SAAAF;AAAA,EACF;AACF;AAMA,SAAS,QAAQ,QAE+B;AAC9C,SAAO,OAAO,YAAqB;AACjC,UAAM,cAAc,EAAE,GAAI,QAAoC;AAG9D,QAAI,YAAY,QAAQ,OAAO,YAAY,SAAS,UAAU;AAC5D,YAAM,OAAO,KAAK,MAAM,YAAY,IAAI;AACxC,UAAI,KAAK,QAAQ,CAAC,KAAK,OAAO;AAC5B,oBAAY,OAAO,KAAK,UAAU;AAAA,UAChC,GAAG;AAAA,UACH,OAAO,KAAK;AAAA,UACZ,MAAM;AAAA,QACR,CAAC;AAAA,MACH;AAAA,IACF;AAEA,UAAM,UAAyB;AAAA,MAC7B,cAAc;AAAA,IAChB;AAEA,WAAO,OAAO,KAAK,aAAuC,OAAO;AAAA,EACnE;AACF;;;AChIA,IAAAG,oBAAA;AAAA,SAAAA,mBAAA;AAAA,uBAAAC;AAAA,EAAA,WAAAC;AAAA,EAAA,YAAAC;AAAA;;;ACAA,IAAAC,eAAA;AAAA,SAAAA,cAAA;AAAA;AAAA,cAAAC;AAAA,EAAA;AAAA;AAoBA,IAAMC,UAAS,MAAY;AAC3B,IAAMC,cAA8B;AAAA,EAClC,OAAOD;AAAA,EACP,MAAMA;AAAA,EACN,MAAMA;AAAA,EACN,OAAOA;AAAA,EACP,OAAO,CAAC,YAA4B;AAClC,UAAM,OAAO,YAAY,WAAW,IAAI,MAAM,OAAO,IAAI;AAAA,EAC3D;AAAA,EACA,MAAMA;AAAA,EACN,OAAO,MAAMC;AACf;AAEA,IAAMC,mBAAkB,MAAc;AACpC,QAAMC,MAAa,MAAM,QAAQ,QAAQ,EAAE,IAAI,KAAK,CAAC;AACrD,SAAOA;AACT;AAEA,IAAM,YACJ;AACF,IAAM,YAAY;AAGlB,IAAM,kBAAkB;AASxB,SAAS,UAAU,SAA0B;AAC3C,MAAI,EAAE,WAAW,SAAU,QAAO;AAClC,QAAM,EAAE,MAAM,IAAI;AAClB,SACE,OAAO,UAAU,YAAY,UAAU,QAAQ,qBAAqB;AAExE;AAMA,IAAM,gBAAN,MAAyC;AAAA,EACvC,YAAmB,QAA0B;AAA1B;AAAA,EAA2B;AAAA,EAA3B;AAAA,EAEnB,MAAM,KAAK,SAAuC;AAChD,QAAI,UAAU,OAAO,GAAG;AACtB,YAAM,IAAI;AAAA,QAAc,CAAC,YACvB,WAAW,SAAS,eAAe;AAAA,MACrC;AAAA,IACF;AACA,WAAO;AAAA,MACL,WAAW,CAAC;AAAA,MACZ,UAAU;AAAA,MACV,YAAY,EAAE,UAAU,UAAU;AAAA,MAClC,UAAU,CAAC;AAAA,IACb;AAAA,EACF;AAAA,EAEA,UAAgB;AAAA,EAAC;AACnB;AAEA,SAAS,YAAiB;AACxB,SAAO;AAAA,IACL,IAAI,OAAO;AACT,aAAOD,iBAAgB;AAAA,IACzB;AAAA,IACA,IAAI,UAAU;AACZ,aAAOA,iBAAgB;AAAA,IACzB;AAAA,IACA,IAAI,MAAM;AACR,aAAOA,iBAAgB;AAAA,IACzB;AAAA,IACA,QAAQD;AAAA,EACV;AACF;AAGO,IAAMF,QAAY,OAAO,OAAO,UAAU,GAAG;AAAA,EAClD,KAAK,EAAE,WAAW,cAAc;AAClC,CAAC;AAMM,IAAM,gBAAqB,UAAU;AAGrC,IAAM,aAAa,CAAC,yBAAyB;;;AC/GpD,IAAAK,gBAAA;AAAA,SAAAA,eAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAYA,IAAM,eAAe;AAAA,EACnB,OAAO;AAAA,EACP,MAAM,EAAE,OAAO,iBAAiB,KAAK,2BAA2B;AAClE;AAEA,IAAM,eAAe;AAAA,EACnB,OAAO;AAAA,EACP,MAAM,EAAE,IAAI,WAAW,OAAO,QAAQ,UAAU,MAAM;AACxD;AAEO,IAAM,WAA6B;AAAA,EACxC,OAAO;AAAA,EACP,aACE;AAAA,EACF,IAAI;AAAA,IACF,WAAW;AAAA,IACX,MAAM,KAAK,UAAU,YAAY;AAAA,EACnC;AAAA,EACA,KAAK,CAAC,CAAC,eAAe,KAAK,CAAC;AAC9B;AAEO,IAAM,gBAAkC;AAAA,EAC7C,OAAO;AAAA,EACP,aAAa;AAAA,EACb,IAAI;AAAA,IACF,WAAW;AAAA,IACX,MAAM,KAAK,UAAU,YAAY;AAAA,EACnC;AAAA,EACA,KAAK,CAAC,CAAC,eAAe,KAAK,CAAC;AAC9B;AAEO,IAAM,cAAgC;AAAA,EAC3C,OAAO;AAAA,EACP,aACE;AAAA,EACF,IAAI,EAAE,WAAW,OAAO,MAAM,mBAAmB;AAAA,EACjD,KAAK,CAAC,CAAC,eAAe,KAAK,CAAC;AAC9B;AAEO,IAAM,gBAAkC;AAAA,EAC7C,OAAO;AAAA,EACP,aACE;AAAA,EACF,IAAI,EAAE,WAAW,OAAO,MAAM,YAAY;AAAA,EAC1C,KAAK,CAAC,CAAC,gBAAgB,KAAK,CAAC;AAC/B;;;ACxBA,SAAS,YAAY,OAAwC;AAC3D,MAAI,OAAO,UAAU,YAAY,UAAU,KAAM,QAAO;AACxD,QAAM,YAAgD;AACtD,SAAO,UAAU,SAAS,SAAS,OAAO,UAAU,SAAS;AAC/D;AAEA,SAAS,WAAW,WAA0D;AAC5E,aAAW,UAAU,OAAO,OAAO,UAAU,WAAW,CAAC,CAAC,GAAG;AAC3D,QAAI,YAAY,MAAM,EAAG,QAAO;AAAA,EAClC;AACA,SAAO;AACT;AAWO,IAAMC,iBAAmD,OAC9D,WACG;AACH,MAAI;AAEJ,QAAMC,WACJ,MACA,OAAO,YAAsC;AAC3C,QAAI,CAAC,MAAM;AACT,YAAMC,UAAS,MAAM,GAAU,MAAM;AACrC,aAAO,EAAE,WAAWA,QAAO,WAAW,KAAKA,QAAO,IAAI;AAAA,IACxD;AAEA,UAAM,SAAS,WAAW,KAAK,SAAS;AACxC,QAAI,CAAC,QAAQ;AACX,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAEA,UAAM,YAA8B;AAAA,MAClC,WAAW,QAAQ;AAAA,MACnB,MAAM,QAAQ;AAAA,MACd,eAAe,QAAQ;AAAA,MACvB,YAAY,QAAQ;AAAA,MACpB,mBAAmB,QAAQ;AAAA,IAC7B;AAEA,UAAM,SAAS,MAAM,OAAO,KAAK,SAAS;AAC1C,UAAM,WAAmB,CAAC;AAC1B,QAAI,UAAU,OAAO,WAAW,UAAU;AACxC,UAAI,OAAO,MAAO,UAAS,KAAK,CAAC,eAAe,QAAQ,SAAS,CAAC;AAClE,UAAI,OAAO,OAAQ,UAAS,KAAK,CAAC,gBAAgB,QAAQ,SAAS,CAAC;AAAA,IACtE;AACA,WAAO;AAAA,EACT;AAEF,SAAO;AAAA,IACL,IAAI,OAAO;AACT,aAAO;AAAA,IACT;AAAA,IACA,SAAAD;AAAA,EACF;AACF;;;AClGA,SAAS,mBAAmB;;;ACA5B,SAAS,KAAAE,UAAS;;;ACAlB,SAAS,KAAAC,UAAS;AAKX,IAAM,aAAaA,GAAE,KAAK;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AASM,IAAM,aAAaA,GAAE,MAAM;AAAA,EAChCA,GAAE,OAAO;AAAA,EACTA,GAAE,MAAMA,GAAE,OAAO,CAAC;AAAA,EAClBA,GAAE,QAAQ,GAAG;AACf,CAAC;AAMM,IAAM,oBAAoBA,GAAE,OAAO;AAAA,EACxC,QAAQ,WAAW;AAAA,IACjB;AAAA,EACF,EAAE,SAAS;AAAA,EAEX,SAASA,GAAE,MAAM,UAAU,EAAE,SAAS,sBAAsB,EAAE,SAAS;AAAA,EAEvE,SAASA,GAAE,MAAMA,GAAE,OAAO,CAAC,EAAE,SAAS,yBAAyB,EAAE,SAAS;AAAA,EAE1E,aAAaA,GACV,QAAQ,EACR,SAAS,oDAAoD,EAC7D,SAAS;AAAA,EAEZ,QAAQA,GACL,OAAO,EACP,IAAI,EACJ,SAAS,EACT,SAAS,qCAAqC,EAC9C,SAAS;AACd,CAAC;;;AD9CM,IAAM,iBAAiBC,GAAE,OAAO;AAAA,EACrC,MAAMA,GACH,MAAM,CAACA,GAAE,QAAQ,GAAG,iBAAiB,CAAC,EACtC;AAAA,IACC;AAAA,EACF,EACC,QAAQ,IAAI;AAAA,EAEf,SAASA,GACN,OAAO,EACP,IAAI,EACJ,SAAS,EACT,IAAI,GAAM,EACV,SAAS,0DAA0D,EACnE,QAAQ,GAAK;AAAA,EAEhB,qBAAqBA,GAClB,QAAQ,EACR;AAAA,IACC;AAAA,EACF,EACC,QAAQ,IAAI;AAAA,EAEf,cAAcA,GACX,OAAO,EACP,IAAI,EACJ,IAAI,CAAC,EACL,SAAS,6DAA6D,EACtE,QAAQ,GAAG;AAAA,EAEd,YAAYA,GACT,OAAO,EACP,SAAS,4CAA4C,EACrD,QAAQ,SAAS;AACtB,CAAC;;;AD9BM,IAAM,WAAW,YAAY,cAAc;;;AGVlD,SAAS,eAAAC,oBAAmB;;;ACA5B,SAAS,KAAAC,UAAS;AAQX,IAAMC,kBAAiBD,GAAE,OAAO;AAAA,EACrC,WAAWA,GACR,OAAO,EACP,IAAI,CAAC,EACL;AAAA,IACC;AAAA,EACF;AAAA,EACF,QAAQA,GACL,OAAO,EACP,SAAS,wDAAwD,EACjE,SAAS;AAAA,EACZ,UAAUA,GACP,OAAO,EACP,IAAI,EACJ;AAAA,IACC;AAAA,EACF,EACC,SAAS;AAAA,EACZ,QAAQA,GACL,IAAI,EACJ;AAAA,IACC;AAAA,EACF,EACC,SAAS;AAAA,EACZ,QAAQA,GACL,IAAI,EACJ;AAAA,IACC;AAAA,EACF,EACC,SAAS;AAAA,EACZ,SAASA,GACN,KAAK,CAAC,QAAQ,QAAQ,KAAK,CAAC,EAC5B;AAAA,IACC;AAAA,EACF,EACC,SAAS;AAAA,EACZ,aAAaA,GACV,OAAO,EACP,IAAI,EACJ,IAAI,CAAC,EACL,IAAI,EAAE,EACN,SAAS,8CAA8C,EACvD,SAAS;AAAA,EACZ,iBAAiBA,GACd,OAAO,EACP,IAAI,EACJ,IAAI,CAAC,EACL,IAAI,EAAE,EACN,SAAS,qDAAqD,EAC9D,SAAS;AAAA,EACZ,mBAAmBA,GAChB,OAAO,EACP,IAAI,EACJ,YAAY,EACZ;AAAA,IACC;AAAA,EACF,EACC,SAAS;AAAA,EACZ,mBAAmBA,GAChB,OAAO,EACP,IAAI,EACJ,SAAS,EACT;AAAA,IACC;AAAA,EACF,EACC,SAAS;AAAA,EACZ,aAAaA,GACV,KAAK,CAAC,QAAQ,KAAK,CAAC,EACpB;AAAA,IACC;AAAA,EACF,EACC,SAAS;AACd,CAAC;;;AChFD,SAAS,KAAAE,UAAS;AASlB,IAAM,aAAaA,GAAE,OAAOA,GAAE,OAAO,GAAGA,GAAE,OAAO,CAAC;AAE3C,IAAM,cAAcA,GAAE,OAAO;AAAA,EAClC,QAAQA,GAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS,aAAa,EAAE,SAAS;AAAA,EAC3D,WAAWA,GACR,QAAQ,EACR;AAAA,IACC;AAAA,EACF,EACC,SAAS;AAAA,EACZ,0BAA0BA,GACvB,OAAO,EACP,IAAI,EACJ,YAAY,EACZ,SAAS,6CAA6C,EACtD,SAAS;AAAA,EACZ,yBAAyBA,GACtB,OAAO,EACP,IAAI,EACJ,SAAS,EACT,SAAS,gEAAgE,EACzE,SAAS;AAAA,EACZ,oBAAoBA,GACjB,OAAO,EACP,IAAI,EACJ,IAAI,IAAI,EACR,IAAI,MAAM,EACV,SAAS,sDAAsD,EAC/D,SAAS;AAAA,EACZ,gBAAgBA,GACb,OAAO,EACP,SAAS,6CAA6C,EACtD,SAAS;AAAA,EACZ,iBAAiBA,GACd,OAAO;AAAA,IACN,KAAKA,GACF,OAAO,EACP;AAAA,MACC;AAAA,IACF,EACC,SAAS;AAAA,IACZ,QAAQA,GACL,QAAQ,EACR,SAAS,6DAA6D,EACtE,SAAS;AAAA,IACZ,iBAAiBA,GACd,OAAO,EACP,IAAI,EACJ,IAAI,CAAC,EACL,IAAI,GAAI,EACR,SAAS,2DAA2D,EACpE,SAAS;AAAA,EACd,CAAC,EACA,SAAS,6BAA6B,EACtC,SAAS;AAAA,EACZ,MAAM,WAAW;AAAA,IACf;AAAA,EACF,EAAE,SAAS;AAAA,EACX,qBAAqBA,GAClB,OAAO;AAAA,IACN,UAAUA,GAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS,4BAA4B;AAAA,IACjE,oBAAoBA,GACjB,QAAQ,EACR,SAAS,gDAAgD,EACzD,SAAS;AAAA,IACZ,cAAcA,GACX,OAAOA,GAAE,OAAO,GAAGA,GAAE,QAAQ,CAAC,EAC9B,SAAS,kDAAkD,EAC3D,SAAS;AAAA,EACd,CAAC,EACA;AAAA,IACC;AAAA,EACF,EACC,SAAS;AACd,CAAC;;;AF3EM,IAAMC,YAAWC,aAAYC,eAAc;AAC3C,IAAM,QAAQD,aAAY,WAAW;;;AGT5C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAAAE;AAAA,EAAA;AAAA;;;ACUO,IAAM,iBAAiB;AAAA,EAC5B,cAAc;AAAA,EACd,WAAWC;AACb;AAGO,IAAM,gBAAgB;AAAA,EAC3B,cAAc,EAAE,SAAmC;AAAA,EACnD,WAAW;AAAA,IACT,UAAuBC;AAAA,IACvB;AAAA,EACF;AACF;","names":["fn","trigger","k","v","examples_exports","createTrigger","env_exports","step_exports","env_exports","push","noopFn","noopLogger","createMockElbFn","fn","step_exports","createTrigger","trigger","result","z","z","z","zodToSchema","z","SettingsSchema","z","settings","zodToSchema","SettingsSchema","settings","examples_exports","settings"]}
1
+ {"version":3,"sources":["../src/lambda/examples/index.ts","../src/lambda/examples/env.ts","../src/lambda/examples/step.ts","../src/lambda/examples/trigger.ts","../src/sqs/examples/index.ts","../src/sqs/examples/env.ts","../src/sqs/examples/step.ts","../src/sqs/examples/trigger.ts","../src/lambda/schemas/index.ts","../src/lambda/schemas/settings.ts","../src/lambda/schemas/primitives.ts","../src/sqs/schemas/index.ts","../src/sqs/schemas/settings.ts","../src/sqs/schemas/setup.ts","../src/schemas.ts","../src/dev.ts"],"sourcesContent":["export * as env from './env';\nexport * as step from './step';\nexport { createTrigger, trigger } from './trigger';\n","import type { Env } from '../types';\nimport type { Elb, Logger } from '@walkeros/core';\n\n/**\n * Example environment configurations for AWS Lambda source\n *\n * These environments provide standardized mock structures for testing\n * Lambda event handling without requiring actual Lambda deployment.\n */\n\n// Create a properly typed elb/push/command function that returns a promise with PushResult\nconst createMockElbFn = (): Elb.Fn => {\n const fn = (() =>\n Promise.resolve({\n ok: true,\n })) as Elb.Fn;\n return fn;\n};\n\n// Simple no-op logger for demo purposes\nconst noopFn = () => {};\nconst noopLogger: Logger.Instance = {\n error: noopFn,\n warn: noopFn,\n info: noopFn,\n debug: noopFn,\n throw: (message: string | Error) => {\n throw typeof message === 'string' ? new Error(message) : message;\n },\n json: noopFn,\n scope: () => noopLogger,\n};\n\n/**\n * Standard mock environment for testing Lambda source\n *\n * Use this for testing Lambda event ingestion and request/response handling\n * without requiring a real AWS Lambda environment.\n */\nexport const push: Env = {\n get push() {\n return createMockElbFn();\n },\n get command() {\n return createMockElbFn();\n },\n get elb() {\n return createMockElbFn();\n },\n logger: noopLogger,\n};\n","import type { Flow } from '@walkeros/core';\n\nexport const lambdaPost: Flow.StepExample = {\n title: 'Lambda POST',\n description:\n 'An API Gateway v2 HTTP POST with a JSON body is converted into a walker elb event.',\n trigger: { type: 'POST' },\n in: {\n version: '2.0',\n requestContext: {\n http: { method: 'POST', path: '/collect' },\n requestId: 'req-123',\n },\n body: JSON.stringify({\n name: 'page view',\n data: { title: 'Home' },\n }),\n isBase64Encoded: false,\n },\n out: [\n [\n 'elb',\n {\n name: 'page view',\n data: { title: 'Home' },\n },\n ],\n ],\n};\n\nexport const apiGatewayV1Post: Flow.StepExample = {\n title: 'API Gateway v1 POST',\n description:\n 'A REST API Gateway v1 POST request with a JSON body is converted into a walker elb event.',\n trigger: { type: 'POST' },\n in: {\n httpMethod: 'POST',\n path: '/collect',\n requestContext: {\n requestId: 'req-789',\n identity: { sourceIp: '203.0.113.42' },\n },\n queryStringParameters: null,\n body: JSON.stringify({\n name: 'page view',\n data: { title: 'Home' },\n }),\n isBase64Encoded: false,\n },\n out: [\n [\n 'elb',\n {\n name: 'page view',\n data: { title: 'Home' },\n },\n ],\n ],\n};\n\nexport const lambdaGet: Flow.StepExample = {\n title: 'Lambda GET',\n description:\n 'An API Gateway v2 HTTP GET with query parameters is parsed into an elb event payload.',\n trigger: { type: 'GET' },\n in: {\n version: '2.0',\n requestContext: {\n http: { method: 'GET', path: '/collect' },\n requestId: 'req-456',\n },\n rawQueryString: 'e=page+view&d=%7B%22title%22%3A%22Home%22%7D',\n isBase64Encoded: false,\n },\n out: [\n [\n 'elb',\n {\n e: 'page view',\n d: '{\"title\":\"Home\"}',\n },\n ],\n ],\n};\n\nexport const lambdaPostForwardsSource: Flow.StepExample = {\n title: 'Lambda POST with provenance',\n description:\n 'A POST body carrying a source map is forwarded in full, so release and trace provenance survive the crossing.',\n trigger: { type: 'POST' },\n in: {\n version: '2.0',\n requestContext: {\n http: { method: 'POST', path: '/collect' },\n requestId: 'req-321',\n },\n body: JSON.stringify({\n name: 'page view',\n data: { title: 'Home' },\n source: { release: { web: 'r1' } },\n }),\n isBase64Encoded: false,\n },\n out: [\n [\n 'elb',\n {\n name: 'page view',\n data: { title: 'Home' },\n source: { release: { web: 'r1' } },\n },\n ],\n ],\n};\n","import type { Trigger, Collector } from '@walkeros/core';\nimport type { LambdaEvent, LambdaContext, LambdaResult } from '../types';\nimport { startFlow } from '@walkeros/collector';\n\nexport interface Content {\n [key: string]: unknown;\n}\n\nexport interface Result {\n statusCode: number;\n body: unknown;\n headers: Record<string, string>;\n}\n\n/**\n * Find the lambda source instance from the collector's registered sources.\n */\nfunction findLambdaSource(collector: Collector.Instance) {\n for (const source of Object.values(collector.sources || {})) {\n if ((source as { type?: string }).type === 'lambda') return source;\n }\n}\n\n/**\n * Lambda source createTrigger.\n *\n * Boots the collector via startFlow, then invokes the Lambda source's push()\n * with a real API Gateway event and a minimal Lambda context.\n *\n * Content is the raw Lambda event object (API Gateway v1 or v2 format).\n * Result contains statusCode, parsed body, and headers.\n *\n * @example\n * const { trigger, flow } = await createTrigger(config);\n * const result = await trigger('POST')({ version: '2.0', ... });\n * console.log(result.statusCode, result.body);\n */\nconst createTrigger: Trigger.CreateFn<Content, Result> = async (\n config: Collector.InitConfig,\n) => {\n let flow: Trigger.FlowHandle | undefined;\n\n const trigger: Trigger.Fn<Content, Result> =\n () =>\n async (content: Content): Promise<Result> => {\n // Lazy startFlow\n if (!flow) {\n const result = await startFlow(config);\n flow = { collector: result.collector, elb: result.elb };\n }\n\n const source = findLambdaSource(flow.collector);\n if (!source) throw new Error('Lambda source not found in collector');\n\n // Create minimal Lambda context\n const lambdaContext = {\n awsRequestId: `test-${Date.now()}`,\n } as unknown as LambdaContext;\n\n // Call source.push with the raw Lambda event + context\n const pushFn = (\n source as unknown as {\n push: (...args: unknown[]) => Promise<LambdaResult>;\n }\n ).push;\n const lambdaResult = await pushFn(\n content as unknown as LambdaEvent,\n lambdaContext,\n );\n\n // Parse response\n let body: unknown;\n try {\n body = JSON.parse(lambdaResult.body || '{}');\n } catch {\n body = lambdaResult.body;\n }\n\n const headers: Record<string, string> = {};\n if (lambdaResult.headers) {\n for (const [k, v] of Object.entries(lambdaResult.headers)) {\n if (v !== undefined) headers[k] = String(v);\n }\n }\n\n return {\n statusCode: lambdaResult.statusCode,\n body,\n headers,\n };\n };\n\n return {\n get flow() {\n return flow;\n },\n trigger,\n };\n};\n\n/**\n * Legacy trigger — takes a source instance directly.\n * Preserved for CLI simulate path.\n */\nfunction trigger(source: {\n push: (event: LambdaEvent, context: LambdaContext) => Promise<LambdaResult>;\n}): (content: Content) => Promise<LambdaResult> {\n return async (content: Content) => {\n const lambdaEvent = { ...(content as Record<string, unknown>) };\n\n // Adapt body format: step examples may use `name`, source expects `event`\n if (lambdaEvent.body && typeof lambdaEvent.body === 'string') {\n const body = JSON.parse(lambdaEvent.body);\n if (body.name && !body.event) {\n lambdaEvent.body = JSON.stringify({\n ...body,\n event: body.name,\n name: undefined,\n });\n }\n }\n\n const context: LambdaContext = {\n awsRequestId: 'test-req',\n } as unknown as LambdaContext;\n\n return source.push(lambdaEvent as unknown as LambdaEvent, context);\n };\n}\n\nexport { createTrigger, trigger };\n","export * as env from './env';\nexport * as step from './step';\nexport { createTrigger } from './trigger';\nexport type { Content, Result } from './trigger';\n","import type {\n CreateQueueCommandOutput,\n DeleteMessageCommandOutput,\n GetQueueAttributesCommandOutput,\n GetQueueUrlCommandOutput,\n ReceiveMessageCommandOutput,\n SQSClientConfig,\n} from '@aws-sdk/client-sqs';\nimport type { Env, SqsClient } from '../types';\nimport type { Elb, Logger } from '@walkeros/core';\n\n/**\n * Example environment for the AWS SQS source.\n *\n * `push` injects a structural SQS client (`env.AWS.SQSClient`), so a\n * simulated run never reaches AWS and its `send` calls can be recorded. The\n * unit tests keep substituting the SDK module-wide via\n * `jest.mock('@aws-sdk/client-sqs')`; they use `push` without the client.\n */\n\nconst noopFn = (): void => undefined;\nconst noopLogger: Logger.Instance = {\n error: noopFn,\n warn: noopFn,\n info: noopFn,\n debug: noopFn,\n throw: (message: string | Error) => {\n throw typeof message === 'string' ? new Error(message) : message;\n },\n json: noopFn,\n scope: () => noopLogger,\n};\n\nconst createMockElbFn = (): Elb.Fn => {\n const fn: Elb.Fn = () => Promise.resolve({ ok: true });\n return fn;\n};\n\nconst QUEUE_URL =\n 'https://sqs.eu-central-1.amazonaws.com/000000000000/walkeros-events';\nconst QUEUE_ARN = 'arn:aws:sqs:eu-central-1:000000000000:walkeros-events';\n\n/** A long poll that finds nothing, kept short so a simulated run ends fast. */\nconst RECEIVE_WAIT_MS = 100;\n\n/** One response that satisfies every command the source sends. */\ntype SqsResponse = GetQueueUrlCommandOutput &\n GetQueueAttributesCommandOutput &\n ReceiveMessageCommandOutput &\n DeleteMessageCommandOutput &\n CreateQueueCommandOutput;\n\nfunction isReceive(command: object): boolean {\n if (!('input' in command)) return false;\n const { input } = command;\n return (\n typeof input === 'object' && input !== null && 'WaitTimeSeconds' in input\n );\n}\n\n/**\n * Answers every command with the queue URL and ARN and an empty receive, so\n * init resolves the queue and the long-poll loop idles without messages.\n */\nclass MockSQSClient implements SqsClient {\n constructor(public config?: SQSClientConfig) {}\n\n async send(command: object): Promise<SqsResponse> {\n if (isReceive(command)) {\n await new Promise<void>((resolve) =>\n setTimeout(resolve, RECEIVE_WAIT_MS),\n );\n }\n return {\n $metadata: {},\n QueueUrl: QUEUE_URL,\n Attributes: { QueueArn: QUEUE_ARN },\n Messages: [],\n };\n }\n\n destroy(): void {}\n}\n\nfunction createEnv(): Env {\n return {\n get push() {\n return createMockElbFn();\n },\n get command() {\n return createMockElbFn();\n },\n get elb() {\n return createMockElbFn();\n },\n logger: noopLogger,\n };\n}\n\n/** Standard mock environment, with the structural client for simulate. */\nexport const push: Env = Object.assign(createEnv(), {\n AWS: { SQSClient: MockSQSClient },\n});\n\n/**\n * The same environment without the client, for unit tests that substitute the\n * SDK module-wide with `jest.mock`.\n */\nexport const moduleMockEnv: Env = createEnv();\n\n/** Every request (queue lookup, receive, delete) goes through `send`. */\nexport const simulation = ['call:AWS.SQSClient.send'];\n","import type { Flow } from '@walkeros/core';\n\n/**\n * SQS source step examples.\n *\n * Each `in` is a partial SQS Message-like (MessageId, Body, optional\n * ReceiptHandle). The trigger synthesizes the missing fields and dispatches\n * through the source's `push()` (the same pipeline the long-poll loop uses).\n * `out` records the terminal state recorded by the trigger as\n * `[method, ...args]` entries.\n */\n\nconst eventPayload = {\n event: 'page view',\n data: { title: 'Documentation', url: 'https://example.com/docs' },\n};\n\nconst orderPayload = {\n event: 'order complete',\n data: { id: 'ORD-500', total: 199.99, currency: 'EUR' },\n};\n\nexport const pageView: Flow.StepExample = {\n title: 'Page view from SQS',\n description:\n 'A standard SQS message body containing a walker elb event payload as JSON.',\n in: {\n MessageId: 'm-1',\n Body: JSON.stringify(eventPayload),\n },\n out: [['message.ack', 'm-1']],\n};\n\nexport const orderComplete: Flow.StepExample = {\n title: 'Order complete from SQS',\n description: 'Order complete event flowing through the long-poll loop.',\n in: {\n MessageId: 'm-2',\n Body: JSON.stringify(orderPayload),\n },\n out: [['message.ack', 'm-2']],\n};\n\nexport const decoderText: Flow.StepExample = {\n title: 'Text decoder',\n description:\n 'When decoder is \"text\", the body string flows under data.payload.',\n in: { MessageId: 'm-3', Body: 'raw text payload' },\n out: [['message.ack', 'm-3']],\n};\n\nexport const malformedJson: Flow.StepExample = {\n title: 'Malformed JSON nacks',\n description:\n 'Default decoder is JSON. A malformed body throws DecoderError; the source nacks (skips DeleteMessage) so the message redelivers.',\n in: { MessageId: 'm-4', Body: '{not json' },\n out: [['message.nack', 'm-4']],\n};\n","import type { Collector, Trigger } from '@walkeros/core';\nimport { startFlow } from '@walkeros/collector';\nimport type { SyntheticMessage, SyntheticPushResult } from '../types';\n\n/**\n * Content shape for the SQS source trigger.\n *\n * The trigger synthesizes a SyntheticMessage from this partial input and\n * dispatches it through the source's `push()` (the same pipeline the\n * long-poll loop uses).\n */\nexport interface Content {\n MessageId: string;\n Body: string;\n ReceiptHandle?: string;\n Attributes?: Record<string, string>;\n MessageAttributes?: Record<\n string,\n { DataType: string; StringValue?: string }\n >;\n}\n\n/**\n * Trigger result: the recorded ack/nack as `[method, MessageId]` entries.\n * Mirrors the destination's `[method, ...args]` recording shape.\n */\nexport type Result = Array<[string, ...unknown[]]>;\n\ninterface SqsSourceLike {\n type: string;\n push: (content?: SyntheticMessage) => Promise<SyntheticPushResult | void>;\n}\n\nfunction isSqsSource(value: unknown): value is SqsSourceLike {\n if (typeof value !== 'object' || value === null) return false;\n const candidate: { type?: unknown; push?: unknown } = value;\n return candidate.type === 'sqs' && typeof candidate.push === 'function';\n}\n\nfunction findSource(collector: Collector.Instance): SqsSourceLike | undefined {\n for (const source of Object.values(collector.sources ?? {})) {\n if (isSqsSource(source)) return source;\n }\n return undefined;\n}\n\n/**\n * SQS source createTrigger.\n *\n * Boots the collector via startFlow, finds the registered SQS source, and\n * invokes its `push()` with a synthesized message. The source dispatches the\n * synthetic message through the same handler the long-poll loop uses,\n * exercising the full decode / forward / ack-nack pipeline without touching\n * real SQS infrastructure.\n */\nexport const createTrigger: Trigger.CreateFn<Content, Result> = async (\n config: Collector.InitConfig,\n) => {\n let flow: Trigger.FlowHandle | undefined;\n\n const trigger: Trigger.Fn<Content, Result> =\n () =>\n async (content: Content): Promise<Result> => {\n if (!flow) {\n const result = await startFlow(config);\n flow = { collector: result.collector, elb: result.elb };\n }\n\n const source = findSource(flow.collector);\n if (!source) {\n throw new Error(\n 'sqs source not registered in collector, ensure it is configured in sources',\n );\n }\n\n const synthetic: SyntheticMessage = {\n MessageId: content.MessageId,\n Body: content.Body,\n ReceiptHandle: content.ReceiptHandle,\n Attributes: content.Attributes,\n MessageAttributes: content.MessageAttributes,\n };\n\n const result = await source.push(synthetic);\n const recorded: Result = [];\n if (result && typeof result === 'object') {\n if (result.acked) recorded.push(['message.ack', content.MessageId]);\n if (result.nacked) recorded.push(['message.nack', content.MessageId]);\n }\n return recorded;\n };\n\n return {\n get flow() {\n return flow;\n },\n trigger,\n };\n};\n","import { zodToSchema } from '@walkeros/core/dev';\nimport { SettingsSchema } from './settings';\n\n// Export primitives\nexport * from './primitives';\n\n// Export Zod schemas and types\nexport { SettingsSchema, type Settings } from './settings';\n\n// JSON Schema exports (for website PropertyTable and documentation tools)\nexport const settings = zodToSchema(SettingsSchema);\n","import { z } from '@walkeros/core/dev';\nimport { CorsOptionsSchema } from './primitives';\n\n/**\n * AWS Lambda source settings schema\n */\nexport const SettingsSchema = z.object({\n cors: z\n .union([z.boolean(), CorsOptionsSchema])\n .describe(\n 'CORS configuration: false = disabled, true = allow all origins, object = custom configuration',\n )\n .default(true),\n\n timeout: z\n .number()\n .int()\n .positive()\n .max(900000) // AWS Lambda max timeout: 15 minutes\n .describe('Request timeout in milliseconds (max: 900000 for Lambda)')\n .default(30000),\n\n enablePixelTracking: z\n .boolean()\n .describe(\n 'Enable GET requests with 1x1 transparent GIF response for pixel tracking',\n )\n .default(true),\n\n maxBatchSize: z\n .number()\n .int()\n .min(1)\n .describe('Maximum number of events accepted in a single batch request')\n .default(100),\n\n healthPath: z\n .string()\n .describe('Health check endpoint path (e.g., /health)')\n .default('/health'),\n});\n\nexport type Settings = z.infer<typeof SettingsSchema>;\n","import { z } from '@walkeros/core/dev';\n\n/**\n * HTTP methods enum\n */\nexport const HttpMethod = z.enum([\n 'GET',\n 'POST',\n 'PUT',\n 'PATCH',\n 'DELETE',\n 'OPTIONS',\n 'HEAD',\n]);\n\n/**\n * CORS origin configuration\n * Accepts:\n * - '*' for all origins\n * - Single URL string\n * - Array of URL strings\n */\nexport const CorsOrigin = z.union([\n z.string(),\n z.array(z.string()),\n z.literal('*'),\n]);\n\n/**\n * CORS options schema\n * Configuration for Cross-Origin Resource Sharing\n */\nexport const CorsOptionsSchema = z.object({\n origin: CorsOrigin.describe(\n 'Allowed origins (* for all, URL string, or array of URLs)',\n ).optional(),\n\n methods: z.array(HttpMethod).describe('Allowed HTTP methods').optional(),\n\n headers: z.array(z.string()).describe('Allowed request headers').optional(),\n\n credentials: z\n .boolean()\n .describe('Allow credentials (cookies, authorization headers)')\n .optional(),\n\n maxAge: z\n .number()\n .int()\n .positive()\n .describe('Preflight cache duration in seconds')\n .optional(),\n});\n\nexport type CorsOptions = z.infer<typeof CorsOptionsSchema>;\n","import { zodToSchema } from '@walkeros/core/dev';\nimport { SettingsSchema } from './settings';\nimport { SetupSchema } from './setup';\n\nexport { SettingsSchema, type Settings } from './settings';\nexport { SetupSchema, type Setup } from './setup';\n\n// JSON Schema exports (for website PropertyTable + MCP package_get).\nexport const settings = zodToSchema(SettingsSchema);\nexport const setup = zodToSchema(SetupSchema);\n","import { z } from '@walkeros/core/dev';\n\n/**\n * AWS SQS source settings schema.\n *\n * Required: queueName. All other fields optional with sensible defaults\n * applied at runtime by `getConfig`.\n */\nexport const SettingsSchema = z.object({\n queueName: z\n .string()\n .min(1)\n .describe(\n 'SQS queue short name (like walkeros-events). Required for both setup and runtime poll.',\n ),\n region: z\n .string()\n .describe('AWS region (like eu-central-1). Default: eu-central-1.')\n .optional(),\n queueUrl: z\n .string()\n .url()\n .describe(\n 'Optional pre-resolved queue URL. When set, init skips the GetQueueUrl lookup.',\n )\n .optional(),\n client: z\n .any()\n .describe(\n 'Pre-configured AWS SQSClient instance. Bypasses construction when supplied.',\n )\n .optional(),\n config: z\n .any()\n .describe(\n 'AWS SDK SQSClientConfig (credentials, endpoint overrides, retries).',\n )\n .optional(),\n decoder: z\n .enum(['json', 'text', 'raw'])\n .describe(\n 'Decoder for the message body. json (default) parses JSON, text forwards UTF-8, raw forwards a Buffer.',\n )\n .optional(),\n maxMessages: z\n .number()\n .int()\n .min(1)\n .max(10)\n .describe('SQS receive batch size. Cap 10. Default: 10.')\n .optional(),\n waitTimeSeconds: z\n .number()\n .int()\n .min(0)\n .max(20)\n .describe('Long-poll duration in seconds. Cap 20. Default: 20.')\n .optional(),\n visibilityTimeout: z\n .number()\n .int()\n .nonnegative()\n .describe(\n 'Per-receive visibility timeout override. Default: queue-configured value.',\n )\n .optional(),\n shutdownTimeoutMs: z\n .number()\n .int()\n .positive()\n .describe(\n 'Graceful shutdown timeout in milliseconds. Default: 30000. After this window, destroy() force-closes.',\n )\n .optional(),\n onPushError: z\n .enum(['nack', 'ack'])\n .describe(\n 'Behavior when forwarding to the collector throws. nack (default) skips DeleteMessage so the message redelivers; ack drops it.',\n )\n .optional(),\n});\n\nexport type Settings = z.infer<typeof SettingsSchema>;\n","import { z } from '@walkeros/core/dev';\n\n/**\n * AWS SQS source setup schema.\n *\n * Provisioning options for `walkeros setup source.<id>`. Authoritative-apply:\n * declared state is written via a single CreateQueueCommand; non-declared\n * tags or attributes are left untouched.\n */\nconst TagsSchema = z.record(z.string(), z.string());\n\nexport const SetupSchema = z.object({\n region: z.string().min(1).describe('AWS region.').optional(),\n fifoQueue: z\n .boolean()\n .describe(\n 'FIFO queue with content-based deduplication. Auto-appends .fifo suffix to the queue name.',\n )\n .optional(),\n visibilityTimeoutSeconds: z\n .number()\n .int()\n .nonnegative()\n .describe('Visibility timeout in seconds. Default: 30.')\n .optional(),\n messageRetentionSeconds: z\n .number()\n .int()\n .positive()\n .describe('Message retention period in seconds. Default: 345600 (4 days).')\n .optional(),\n maximumMessageSize: z\n .number()\n .int()\n .min(1024)\n .max(262144)\n .describe('Max message size in bytes. Default: 262144 (256 KB).')\n .optional(),\n kmsMasterKeyId: z\n .string()\n .describe('KMS key alias or ID for at-rest encryption.')\n .optional(),\n deadLetterQueue: z\n .object({\n arn: z\n .string()\n .describe(\n 'ARN of an existing DLQ. Mutually exclusive with create: true.',\n )\n .optional(),\n create: z\n .boolean()\n .describe('Create a sibling DLQ named <queueName>-dlq. Default: false.')\n .optional(),\n maxReceiveCount: z\n .number()\n .int()\n .min(1)\n .max(1000)\n .describe('Max receive count before message goes to DLQ. Default: 5.')\n .optional(),\n })\n .describe('Optional dead-letter queue.')\n .optional(),\n tags: TagsSchema.describe(\n 'Tags applied to the queue (and inherited by an auto-created DLQ).',\n ).optional(),\n subscribeToSnsTopic: z\n .object({\n topicArn: z.string().min(1).describe('Topic ARN to subscribe to.'),\n rawMessageDelivery: z\n .boolean()\n .describe('Deliver SNS messages without the SNS envelope.')\n .optional(),\n filterPolicy: z\n .record(z.string(), z.unknown())\n .describe('SNS filter policy applied at subscription level.')\n .optional(),\n })\n .describe(\n 'Optional SNS topic subscription. Creates the subscription and the matching queue policy.',\n )\n .optional(),\n});\n\nexport type Setup = z.infer<typeof SetupSchema>;\n","// Lambda (default sub-source).\nexport { settings, SettingsSchema, type Settings } from './lambda/schemas';\nexport * from './lambda/schemas/primitives';\n\n// SQS sub-source. Prefixed so the website's <Configuration> snippet can\n// remap data.schemas.sqsSettings / sqsSetup onto data.schemas.settings.\nexport { settings as sqsSettings } from './sqs/schemas';\nexport { setup as sqsSetup } from './sqs/schemas';\n","import * as lambdaExamplesNs from './lambda/examples';\nimport * as sqsExamplesNs from './sqs/examples';\nimport * as lambdaSchemasNs from './lambda/schemas';\nimport * as sqsSchemasNs from './sqs/schemas';\n\nexport * as schemas from './schemas';\nexport * as examples from './lambda/examples';\nexport * as sqsExamples from './sqs/examples';\n\n/** Dev examples per export, keyed by the export names in package.json. */\nexport const exportExamples = {\n sourceLambda: lambdaExamplesNs,\n sourceSqs: sqsExamplesNs,\n};\n\n/** Schemas per export, keyed by the export names in package.json. */\nexport const exportSchemas = {\n sourceLambda: { settings: lambdaSchemasNs.settings },\n sourceSqs: {\n settings: sqsSchemasNs.settings,\n setup: sqsSchemasNs.setup,\n },\n};\n"],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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","names":["fn","trigger","k","v","examples_exports","createTrigger","env_exports","step_exports","env_exports","push","noopFn","noopLogger","createMockElbFn","fn","step_exports","createTrigger","trigger","result","z","z","z","zodToSchema","z","SettingsSchema","z","settings","zodToSchema","SettingsSchema","settings","examples_exports","settings"]}