@walkeros/server-source-aws 4.2.0-next-1780610489068 → 4.2.0-next-1780690800063

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # @walkeros/server-source-aws
2
2
 
3
- ## 4.2.0-next-1780610489068
3
+ ## 4.2.0-next-1780690800063
4
4
 
5
5
  ### Patch Changes
6
6
 
@@ -10,13 +10,15 @@
10
10
  simulation and testing.
11
11
  - Updated dependencies [76d32c1]
12
12
  - Updated dependencies [908d6f0]
13
+ - Updated dependencies [e8f6909]
13
14
  - Updated dependencies [f4a9013]
14
15
  - Updated dependencies [d65bbde]
16
+ - Updated dependencies [e8f6909]
15
17
  - Updated dependencies [c27d3c1]
16
18
  - Updated dependencies [654ba38]
17
19
  - Updated dependencies [6a72a32]
18
20
  - Updated dependencies [3eb2467]
19
- - @walkeros/core@4.2.0-next-1780610489068
21
+ - @walkeros/core@4.2.0-next-1780690800063
20
22
 
21
23
  ## 4.1.2
22
24
 
package/dist/dev.js CHANGED
@@ -1 +1 @@
1
- "use strict";var e,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,o=Object.getOwnPropertyNames,s=Object.prototype.hasOwnProperty,r=(e,n)=>{for(var o in n)t(e,o,{get:n[o],enumerable:!0})},i={};r(i,{examples:()=>I,schemas:()=>a,sqsExamples:()=>Ze}),module.exports=(e=i,((e,r,i,a)=>{if(r&&"object"==typeof r||"function"==typeof r)for(let c of o(r))s.call(e,c)||c===i||t(e,c,{get:()=>r[c],enumerable:!(a=n(r,c))||a.enumerable});return e})(t({},"__esModule",{value:!0}),e));var a={};r(a,{CorsOptionsSchema:()=>f,CorsOrigin:()=>p,HttpMethod:()=>d,SettingsSchema:()=>g,settings:()=>h,sqsSettings:()=>S,sqsSetup:()=>q});var c=require("@walkeros/core/dev"),u=require("@walkeros/core/dev"),l=require("@walkeros/core/dev"),d=l.z.enum(["GET","POST","PUT","PATCH","DELETE","OPTIONS","HEAD"]),p=l.z.union([l.z.string(),l.z.array(l.z.string()),l.z.literal("*")]),f=l.z.object({origin:p.describe("Allowed origins (* for all, URL string, or array of URLs)").optional(),methods:l.z.array(d).describe("Allowed HTTP methods").optional(),headers:l.z.array(l.z.string()).describe("Allowed request headers").optional(),credentials:l.z.boolean().describe("Allow credentials (cookies, authorization headers)").optional(),maxAge:l.z.number().int().positive().describe("Preflight cache duration in seconds").optional()}),g=u.z.object({cors:u.z.union([u.z.boolean(),f]).describe("CORS configuration: false = disabled, true = allow all origins, object = custom configuration").default(!0),timeout:u.z.number().int().positive().max(9e5).describe("Request timeout in milliseconds (max: 900000 for Lambda)").default(3e4),enablePixelTracking:u.z.boolean().describe("Enable GET requests with 1x1 transparent GIF response for pixel tracking").default(!0),healthPath:u.z.string().describe("Health check endpoint path (e.g., /health)").default("/health")}),h=(0,c.zodToSchema)(g),m=require("@walkeros/core/dev"),y=require("@walkeros/core/dev"),w=y.z.object({queueName:y.z.string().min(1).describe("SQS queue short name (like walkeros-events). Required for both setup and runtime poll."),region:y.z.string().describe("AWS region (like eu-central-1). Default: eu-central-1.").optional(),queueUrl:y.z.string().url().describe("Optional pre-resolved queue URL. When set, init skips the GetQueueUrl lookup.").optional(),client:y.z.any().describe("Pre-configured AWS SQSClient instance. Bypasses construction when supplied.").optional(),config:y.z.any().describe("AWS SDK SQSClientConfig (credentials, endpoint overrides, retries).").optional(),decoder:y.z.enum(["json","text","raw"]).describe("Decoder for the message body. json (default) parses JSON, text forwards UTF-8, raw forwards a Buffer.").optional(),maxMessages:y.z.number().int().min(1).max(10).describe("SQS receive batch size. Cap 10. Default: 10.").optional(),waitTimeSeconds:y.z.number().int().min(0).max(20).describe("Long-poll duration in seconds. Cap 20. Default: 20.").optional(),visibilityTimeout:y.z.number().int().nonnegative().describe("Per-receive visibility timeout override. Default: queue-configured value.").optional(),shutdownTimeoutMs:y.z.number().int().positive().describe("Graceful shutdown timeout in milliseconds. Default: 30000. After this window, destroy() force-closes.").optional(),onPushError:y.z.enum(["nack","ack"]).describe("Behavior when forwarding to the collector throws. nack (default) skips DeleteMessage so the message redelivers; ack drops it.").optional()}),v=require("@walkeros/core/dev"),b=v.z.record(v.z.string(),v.z.string()),k=v.z.object({region:v.z.string().min(1).describe("AWS region.").optional(),fifoQueue:v.z.boolean().describe("FIFO queue with content-based deduplication. Auto-appends .fifo suffix to the queue name.").optional(),visibilityTimeoutSeconds:v.z.number().int().nonnegative().describe("Visibility timeout in seconds. Default: 30.").optional(),messageRetentionSeconds:v.z.number().int().positive().describe("Message retention period in seconds. Default: 345600 (4 days).").optional(),maximumMessageSize:v.z.number().int().min(1024).max(262144).describe("Max message size in bytes. Default: 262144 (256 KB).").optional(),kmsMasterKeyId:v.z.string().describe("KMS key alias or ID for at-rest encryption.").optional(),deadLetterQueue:v.z.object({arn:v.z.string().describe("ARN of an existing DLQ. Mutually exclusive with create: true.").optional(),create:v.z.boolean().describe("Create a sibling DLQ named <queueName>-dlq. Default: false.").optional(),maxReceiveCount:v.z.number().int().min(1).max(1e3).describe("Max receive count before message goes to DLQ. Default: 5.").optional()}).describe("Optional dead-letter queue.").optional(),tags:b.describe("Tags applied to the queue (and inherited by an auto-created DLQ).").optional(),subscribeToSnsTopic:v.z.object({topicArn:v.z.string().min(1).describe("Topic ARN to subscribe to."),rawMessageDelivery:v.z.boolean().describe("Deliver SNS messages without the SNS envelope.").optional(),filterPolicy:v.z.record(v.z.string(),v.z.unknown()).describe("SNS filter policy applied at subscription level.").optional()}).describe("Optional SNS topic subscription. Creates the subscription and the matching queue policy.").optional()}),S=(0,m.zodToSchema)(w),q=(0,m.zodToSchema)(k),I={};r(I,{createTrigger:()=>Ye,env:()=>O,step:()=>T,trigger:()=>Xe});var O={};r(O,{push:()=>A});var C=()=>()=>Promise.resolve({ok:!0}),x=()=>{},j={error:x,warn:x,info:x,debug:x,throw:e=>{throw"string"==typeof e?new Error(e):e},json:x,scope:()=>j},A={get push(){return C()},get command(){return C()},get elb(){return C()},logger:j},T={};r(T,{apiGatewayV1Post:()=>E,lambdaGet:()=>M,lambdaPost:()=>D});var D={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({event:"page view",data:{title:"Home"}}),isBase64Encoded:!1},out:[["elb",{name:"page view",data:{title:"Home"}}]]},E={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({event:"page view",data:{title:"Home"}}),isBase64Encoded:!1},out:[["elb",{name:"page view",data:{title:"Home"}}]]},M={title:"Lambda GET",description:"An API Gateway v2 HTTP GET with query parameters is parsed into an elb event payload.",trigger:{type:"GET"},in:{version:"2.0",requestContext:{http:{method:"GET",path:"/collect"},requestId:"req-456"},rawQueryString:"e=page+view&d=%7B%22title%22%3A%22Home%22%7D",isBase64Encoded:!1},out:[["elb",{e:"page view",d:'{"title":"Home"}'}]]},z=require("@walkeros/core"),P=require("@walkeros/core"),$=require("@walkeros/core"),_=(require("@walkeros/core"),require("@walkeros/core")),H=require("@walkeros/core"),N=require("@walkeros/core"),R=require("@walkeros/core"),G=require("@walkeros/core"),B=require("@walkeros/core"),F=require("@walkeros/core"),L=require("@walkeros/core"),U=require("@walkeros/core"),K=require("@walkeros/core"),Q={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 J(e,t){const n=e.status.startedAt;return{flowId:"default",stepId:t.stepId,stepType:t.stepType,phase:t.phase,eventId:t.eventId,timestamp:new Date(t.now).toISOString(),elapsedMs:t.now-n}}function W(e,t){return e.storeId&&t.stores[e.storeId]?t.stores[e.storeId]:t.stores.__cache}function V(e,t){return e?t.stores[e]:t.stores.__cache}function Y(e){const t={};for(const[n,o]of Object.entries(e)){const e=o.config?.next;"string"==typeof e||Array.isArray(e)&&e.every(e=>"string"==typeof e)?t[n]={next:e}:t[n]={}}return t}function X(e,t){const n=e.config||{},o=e[t];return void 0!==o?{config:{...n,[t]:o},chainValue:o}:{config:n,chainValue:void 0}}function Z(e,t={}){if(!e)return[];if(Array.isArray(e))return e;const n=[],o=new Set;let s=e;for(;s&&t[s]&&!o.has(s);){o.add(s),n.push(s);const e=t[s].next;if(Array.isArray(e)){n.push(...e);break}s=e}return n}async function ee(e,t,n){if(t.init&&!t.config.init){const o=t.type||"unknown",s=e.logger.scope(`transformer:${o}`),r={collector:e,logger:s,id:n,ingest:(0,R.createIngest)(n),config:t.config,env:se(t.config.env)};s.debug("init");const i=await(0,R.useHooks)(t.init,"TransformerInit",e.hooks,e.logger)(r);if(!1===i)return!1;t.config={...i||t.config,env:i?.env||t.config.env,init:!0},s.debug("init done")}return!0}async function te(e,t,n,o,s,r){const i=t.type||"unknown",a=e.logger.scope(`transformer:${i}`),c={collector:e,logger:a,id:n,ingest:s,config:t.config,env:{...se(t.config.env),...r?{respond:r}:{}}};a.debug("push",{event:o.name});const u="string"==typeof o.id?o.id:"",l=Date.now(),d=J(e,{stepId:(0,R.stepId)("transformer",n),stepType:"transformer",phase:"in",eventId:u,now:l});(0,R.emitStep)(e,d);try{const s=await(0,R.useHooks)(t.push,"TransformerPush",e.hooks,e.logger)(o,c),r=Date.now(),i=J(e,{stepId:(0,R.stepId)("transformer",n),stepType:"transformer",phase:"out",eventId:u,now:r});return i.durationMs=r-l,i.outEvent=s,(0,R.emitStep)(e,i),a.debug("push done"),s}catch(t){const o=Date.now(),s=J(e,{stepId:(0,R.stepId)("transformer",n),stepType:"transformer",phase:"error",eventId:u,now:o});throw s.durationMs=o-l,s.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},(0,R.emitStep)(e,s),t}}function ne(e,t){return e?{...e,_meta:{...e._meta,path:[...e._meta.path]}}:(0,R.createIngest)(t)}async function oe(e,t,n,o,s,r,i){s||(s=(0,R.createIngest)(n[0]??"chain")),i&&s._meta&&(s._meta.chainPath=i);let a=o,c=r;for(const o of n){const r=t[o];if(!r){e.logger.warn(`Transformer not found: ${o}`);continue}if(s&&s._meta&&s._meta.path.length>256)return e.logger.error(`Max path length exceeded at ${o}`),{event:null,respond:c};if(s&&s._meta&&(s._meta.hops++,s._meta.path.push(o)),!await(0,R.tryCatchAsync)(ee,t=>{if(t instanceof R.FatalError)throw t;return e.status.failed++,e.logger.scope(`transformer:${r.type||"unknown"}`).error("transformer init failed",{transformer:o,error:t}),!1})(e,r,o))return{event:null,respond:c};if(i&&void 0!==r.config?.chainMocks?.[i]){const t=r.config.chainMocks[i];e.logger.scope(`transformer:${r.type||"unknown"}`).debug("chainMock",{chain:i}),a=t;continue}if(void 0!==r.config?.mock){e.logger.scope(`transformer:${r.type||"unknown"}`).debug("mock"),a=r.config.mock;continue}if(r.config?.disabled)continue;const u=r.config?.cache,l=u?(0,R.compileCache)(u):void 0,d=l?W(l,e):void 0,p=r.config?.state?(0,R.compileState)(r.config.state):void 0,f=p?.filter(e=>"get"===e.mode),g=p?.filter(e=>"set"===e.mode),h=async t=>g&&0!==g.length?(0,R.applyState)(g,t=>V(t,e),t,e):t;let m;if(l&&d){const e=(0,R.buildCacheContext)(s,a),t=await(0,R.checkCache)(l,d,e);if("HIT"===t?.status&&t.value){if(a=t.value,l.stop)return{event:a,respond:c,stopped:!0};continue}"MISS"===t?.status&&(m={key:t.key,ttl:t.rule.ttl})}const y=r.config.before;if(y){const n=(0,R.getNextSteps)(y,(0,R.buildCacheContext)(s,a));if(1===n.length){const o=Z(n[0],Y(t));if(o.length>0){const n=await oe(e,t,o,a,s,c,i);if(null===n.event)return{event:null,respond:n.respond??c};if(n.stopped)return{event:Array.isArray(n.event)?n.event[0]:n.event,respond:n.respond??c,stopped:!0};n.respond&&(c=n.respond),a=Array.isArray(n.event)?n.event[0]:n.event}}else n.length>1&&await Promise.all(n.map(n=>(0,R.tryCatchAsync)(oe,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,Z(n,Y(t)),a,ne(s,n),void 0,i)))}f&&f.length>0&&(a=await(0,R.applyState)(f,t=>V(t,e),a,e));const w=await(0,R.tryCatchAsync)(te,t=>(e.logger.scope(`transformer:${r.type||"unknown"}`).error("Push failed",{error:t}),!1))(e,r,o,a,s,c);if(!1===w)return{event:null,respond:c};if(Array.isArray(w)){const r=n.slice(n.indexOf(o)+1),u=await Promise.all(w.map(async n=>{const o=await h(n.event||a),u=ne(s,"unknown");if(n.next){const s=(0,R.getNextSteps)(n.next,(0,R.buildCacheContext)(u,o));if(0===s.length)return{event:o,respond:c};if(1===s.length){const n=Z(s[0],Y(t));return n.length>0?oe(e,t,n,o,u,c,i):{event:o,respond:c}}return(await Promise.all(s.map(n=>(0,R.tryCatchAsync)(oe,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,Z(n,Y(t)),o,ne(u,n),void 0,i)))).map(e=>({event:e.event,respond:void 0}))}return r.length>0?oe(e,t,r,o,u,c,i):{event:o,respond:c}}));let l=c;const d=[];for(const e of u.flat())if(null!==e)if(e&&"object"==typeof e&&"event"in e){const t=e;if(t.respond&&(l=t.respond),null===t.event)continue;Array.isArray(t.event)?d.push(...t.event):d.push(t.event)}else d.push(e);return 0===d.length?{event:null,respond:l}:1===d.length?{event:d[0],respond:l}:{event:d,respond:l}}if(w&&"object"==typeof w){const{event:n,respond:o,next:r}=w;if(o&&(c=o),void 0!==r){const o=await h(n||a),u=(0,R.getNextSteps)(r,(0,R.buildCacheContext)(s,o));if(0===u.length){a=o;continue}if(1===u.length){const n=Z(u[0],Y(t));return n.length>0?oe(e,t,n,o,s,c,i):(e.logger.warn(`Branch target not found: ${JSON.stringify(r)}`),{event:null,respond:c})}return await Promise.all(u.map(n=>(0,R.tryCatchAsync)(oe,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,Z(n,Y(t)),o,ne(s,n),void 0,i))),{event:null,respond:void 0}}n&&(a=n)}g&&g.length>0&&(a=await(0,R.applyState)(g,t=>V(t,e),a,e)),m&&d&&(0,R.storeCache)(d,m.key,a,m.ttl);const v=r.config.next,b="string"==typeof v||Array.isArray(v)&&v.every(e=>"string"==typeof e),k=void 0!==v&&!b;if((!w||"object"==typeof w&&!w.next)&&k){const n=(0,R.getNextSteps)(r.config.next,(0,R.buildCacheContext)(s,a));if(1===n.length){const o=Z(n[0],Y(t));return o.length>0?oe(e,t,o,a,s,c,i):{event:a,respond:c}}return n.length>1?(await Promise.all(n.map(n=>(0,R.tryCatchAsync)(oe,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,Z(n,Y(t)),a,ne(s,n),void 0,i))),{event:null,respond:void 0}):{event:a,respond:c}}}return{event:a,respond:c}}function se(e){return e&&(0,R.isObject)(e)?e:{}}function re(e){return"string"==typeof e||!(!Array.isArray(e)||!e.every(e=>"string"==typeof e))}async function ie(e,t,n){if(!t.on||!t.queueOn?.length)return;const o=t.queueOn;t.queueOn=[];const s=n||t.config?.id||"unknown";for(const{type:n,data:r}of o)pe(n)&&!ye(e,t,n)||(await(0,N.tryCatchAsync)(t.on,t=>{if(t instanceof N.FatalError)throw t;e.status.failed++,e.logger.scope("source").error("source on flush failed",{sourceId:s,type:n,error:t})})(n,r),pe(n)&&me(e,t,n))}function ae(e){return Boolean(e.config.init)&&!e.config.require?.length}async function ce(e,t,n){const{code:o,config:s={},env:r={},primary:i,next:a,before:c,cache:u}=n,l=s.state??n.state,d=l?(0,N.compileState)(l):void 0,p=u,f=p?(0,N.compileCache)({...p,stop:p.stop??!0}):void 0,g=re(a)?Z(a,Y(e.transformers)):void 0,h=re(c)?Z(c,Y(e.transformers)):void 0,m=r.push,y=m??e.push,w=Boolean(m),v=async(n,o,r)=>{let i;const u=h??(void 0!==c?(()=>{const t=(0,N.getNextSteps)(c,(0,N.buildCacheContext)(r.ingest));return 0===t.length?[]:Z(1===t.length?t[0]:t,Y(e.transformers))})():[]);let l=[n];if(u.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const o=await oe(e,e.transformers,u,n,r.ingest,r.respond,`source.${t}.before`);if(null===o.event)return{ok:!0};if(o.stopped)return o.respond&&(r.respond=o.respond),{ok:!0};o.respond&&(r.respond=o.respond),l=Array.isArray(o.event)?o.event:[o.event]}if(f){const t=W(f,e);if(t){const n=(0,N.buildCacheContext)(r.ingest),o=await(0,N.checkCache)(f,t,n);if(o){if("HIT"===o.status&&void 0!==o.value&&f.stop){let t=o.value;return o.rule.update&&(t=await(0,N.applyUpdate)(t,o.rule.update,{...n,cache:{status:"HIT"}},e)),r.respond?.(t),{ok:!0}}if("MISS"===o.status&&f.stop&&r.respond){const s=r.respond,a=o.rule.update,c={...n,cache:{status:"MISS"}},u=o.key,l=o.rule.ttl,d=n=>{(0,N.storeCache)(t,u,n,l),a?i=(async()=>{const t=await(0,N.applyUpdate)(n,a,c,e);s(t)})():s(n)};r.respond=d}"MISS"!==o.status||f.stop||(0,N.storeCache)(t,o.key,!0,o.rule.ttl)}}}const p=g?{kind:"single",preChain:g}:void 0!==a?(()=>{const t=(0,N.getNextSteps)(a,(0,N.buildCacheContext)(r.ingest));return 0===t.length?{kind:"single",preChain:[]}:1===t.length?{kind:"single",preChain:Z(t[0],Y(e.transformers))}:{kind:"many",branches:t.map(t=>Z(t,Y(e.transformers)))}})():{kind:"single",preChain:[]};!w&&d&&d.length>0&&(l=await Promise.all(l.map(t=>(0,N.applyState)(d,t=>V(t,e),t,e))));let m={ok:!0};for(const n of l)"many"===p.kind?(await Promise.all(p.branches.map((i,a)=>(0,N.tryCatchAsync)(async()=>w?y(n):y(n,{...o,id:t,ingest:ne(r.ingest,`${t}.${a}`),respond:void 0,mapping:s,preChain:i}),t=>(e.logger.scope("source:many").error(`many branch ${a} failed`,{error:t}),{ok:!0}))())),m={ok:!0}):m=w?await y(n):await y(n,{...o,id:t,ingest:r.ingest,respond:r.respond,mapping:s,preChain:p.preChain});return i&&await i,m},b=async n=>{const o=(0,N.createIngest)(t);if(!s.ingest||void 0===n)return o;const r=await(0,N.getMappingValue)(n,s.ingest,{collector:e});return{...o,...r,_meta:o._meta}},k=e.logger.scope("source").scope(t),S={command:e.command,sources:e.sources,elb:e.sources.elb.push,logger:k,...r,push:async(e,n={})=>{const o={ingest:(0,N.createIngest)(t),respond:void 0};return v(e,n,o)}},q={collector:e,logger:k,id:t,config:s,env:S,withScope:async(e,t,n)=>{const o={ingest:await b(e),respond:t};return n({...S,push:(e,t={})=>v(e,t,o),ingest:o.ingest,respond:o.respond})}},I=await(0,N.tryCatchAsync)(o,n=>{if(n instanceof N.FatalError)throw n;e.status.failed++,e.logger.scope("source").error("source factory failed",{sourceId:t,error:n})})(q);if(!I)return;const O=I.type||"unknown",C=e.logger.scope(O).scope(t);return S.logger=C,i&&(I.config={...I.config,primary:i}),I}async function ue(e){for(const[t,n]of Object.entries(e.sources)){if(ae(n))continue;const o=n.config.require;if(!o?.length)continue;const s=o.filter(t=>!ge(e,t));s.length!==o.length&&(n.config.require=s,ae(n)&&await ie(e,n,t))}for(const[t,n]of Object.entries(e.pending.destinations)){if(!e.pending.destinations[t]||e.destinations[t])continue;const o=n.config?.require;if(!o)continue;const s=o.filter(t=>!ge(e,t));if(n.config&&(n.config.require=s),s.length>0)continue;delete e.pending.destinations[t];const r=He(n);!1!==r.config.queue&&(r.queuePush=[...e.queue]),e.destinations[t]=r}}function le(e,t,n,o){if(n instanceof _.FatalError)throw n;e.logger.scope("on").error("on callback failed",{kind:t,...o,error:n})}var de=[Q.Consent,Q.User,Q.Globals,Q.Custom];function pe(e){return de.includes(e)}function fe(e,t){switch(t){case Q.Consent:return Object.keys(e.consent).length>0;case Q.User:return Object.keys(e.user).length>0;case Q.Globals:return Object.keys(e.globals).length>0;case Q.Custom:return Object.keys(e.custom).length>0;default:return!1}}function ge(e,t){switch(t){case Q.Consent:case Q.User:case Q.Globals:case Q.Custom:return fe(e,t);case Q.Run:case Q.Ready:return!0===e.allowed;default:return e.seenEvents.has(String(t))}}function he(e,t){return e.cellVersion[String(t)]??0}function me(e,t,n){let o=e.delivery.get(t);o||(o={},e.delivery.set(t,o)),o[String(n)]=he(e,n)}function ye(e,t,n){return e.allowed&&he(e,n)>function(e,t,n){const o=e.delivery.get(t),s=o?.[String(n)];return void 0===s?-1:s}(e,t,n)}function we(e,t,n){const o=e.cascade;if(!o)return!0;let s=o.counts.get(t);s||(s={},o.counts.set(t,s));const r=String(n),i=(s[r]||0)+1;return s[r]=i,i<=8||(9===i&&e.logger.error("state delivery did not converge",{type:r}),!1)}function ve(e,t){return{collector:e,logger:e.logger.scope("on").scope(String(t))}}function be(e,t,n,o,s){if(!t.on)return;const r=t.type||"unknown",i=e.logger.scope(r).scope("on").scope(o),a={collector:e,logger:i,id:n,config:t.config,data:s,env:Ne(t.env,t.config.env)};(0,H.tryCatch)(t.on,t=>le(e,"destination",t,{destId:n,type:o}))(o,a)}function ke(e,t,n,o){const s=Se(e,t,o);if(n.length)switch(t){case Q.Consent:!function(e,t,n){const o=n||e.consent,s=ve(e,Q.Consent);t.forEach(t=>{ye(e,t,Q.Consent)&&we(e,t,Q.Consent)&&(Object.keys(o).filter(e=>e in t).forEach(n=>{(0,H.tryCatch)(t[n],t=>le(e,"consent",t,{key:n}))(o,s)}),me(e,t,Q.Consent))})}(e,n,o);break;case Q.Ready:!function(e,t){if(!e.allowed)return;const n=ve(e,Q.Ready);t.forEach(t=>{(0,H.tryCatch)(t,t=>le(e,"ready",t))(void 0,n)})}(e,n);break;case Q.Run:!function(e,t){if(!e.allowed)return;const n=ve(e,Q.Run);t.forEach(t=>{(0,H.tryCatch)(t,t=>le(e,"run",t))(void 0,n)})}(e,n);break;case Q.Session:!function(e,t){if(!e.session)return;const n=ve(e,Q.Session);t.forEach(t=>{(0,H.tryCatch)(t,t=>le(e,"session",t))(e.session,n)})}(e,n);break;default:{const o=ve(e,t),r=pe(t);n.forEach(n=>{"function"==typeof n&&(r&&!ye(e,n,t)||r&&!we(e,n,t)||((0,H.tryCatch)(n,n=>le(e,"generic",n,{type:t}))(s,o),r&&me(e,n,t)))});break}}}function Se(e,t,n){switch(t){case Q.Consent:return n||e.consent;case Q.Session:return e.session;case Q.User:return n||e.user;case Q.Custom:return n||e.custom;case Q.Globals:return n||e.globals;case Q.Config:return n||e.config;default:return}}async function qe(e,t,n,o,s){if(!t.on)return!1;if(pe(o)&&!ye(e,t,o))return!1;if(pe(o)&&!we(e,t,o))return!1;const r=await(0,H.tryCatchAsync)(t.on,t=>le(e,"source",t,{sourceId:n,type:o}))(o,s);return pe(o)&&me(e,t,o),!1===r}function Ie(e,t,n,o){if(!Number.isFinite(n.max)||n.max<=0)throw new Error(`pushBounded: max must be > 0 (got ${n.max})`);if("dropNewest"===(n.onOverflow??"dropOldest"))return e.length>=n.max?(o&&o([t]),{appended:!1,dropped:1}):(e.push(t),{appended:!0,dropped:0});const s=[];for(;e.length>=n.max;)s.push(e.shift());return e.push(t),s.length>0&&o&&o(s),{appended:!0,dropped:s.length}}var Oe=new WeakMap;function Ce(e,t,n,o){Oe.get(e)||(Oe.set(e,!0),t.warn(n,o))}function xe(e){Oe.delete(e)}var je=Object.freeze({batched:!0});function Ae(e){return e===je}function Te(e){return void 0===e?{}:"number"==typeof e?{wait:e}:{wait:e.wait,size:e.size,age:e.age}}function De(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 Ee(e,t,n,o){e.dropped[t]||(e.dropped[t]={});const s=e.dropped[t];return s[n]=(s[n]??0)+o,s[n]}function Me(e,t,n){if(!e)return[];if(Array.isArray(e)&&e.every(e=>"string"==typeof e))return Z(e,t);if("string"==typeof e)return Z(e,t);const o=(0,$.getNextSteps)(e,(0,$.buildCacheContext)(n));return 0===o.length?[]:1===o.length?Z(o[0],t):Z(o,t)}async function ze(e,t,n={},o){const{allowed:s,consent:r,globals:i,user:a}=e;if(!s)return _e({ok:!1});if(t){const n=e.config.queueMax;if(void 0===n)throw new Error("Collector.Config.queueMax is undefined; defaults must be seeded by collector()");const o=Ie(e.queue,t,{max:n});if(o.dropped>0){const t=Ee(e.status,(0,$.stepId)("collector"),"queue",o.dropped);Ce(e.queue,e.logger,"collector.queue overflow; oldest events dropped",{buffer:"queue",cap:n,droppedCount:t})}else e.queue.length<n&&xe(e.queue);e.status.in++}o||(o=e.destinations);const c=e.transformers?Y(e.transformers):{},u=await Promise.all(Object.entries(o||{}).map(async([o,s])=>{if(s.config.disabled)return{id:o,destination:s,skipped:!0};let u=(s.queuePush||[]).map(e=>({...e,consent:r}));s.queuePush=[],t&&u.push((0,$.clone)(t));const l=n.ingest?{...n.ingest,_meta:{...n.ingest._meta,path:[...n.ingest._meta.path]}}:(0,$.createIngest)("unknown");if(!u.length&&!s.queueOn?.length)return{id:o,destination:s,skipped:!0};if(!u.length&&s.queueOn?.length){let t=!1;try{t=await Pe(e,s,o)}catch(t){e.status.failed++;const n=s.type||"unknown";e.logger.scope(n).error("destination init failed",{error:t instanceof Error?t.message:String(t)})}return{id:o,destination:s,skipped:!t}}const d=[],p=u.filter(t=>{const n=(0,$.getGrantedConsent)(s.config.consent,r,t.consent);if(n)return t.consent=n,d.push(t),!1;const i=J(e,{stepId:(0,$.stepId)("destination",o),stepType:"destination",phase:"skip",eventId:"string"==typeof t.id?t.id:"",now:Date.now()});return i.skipReason="consent",r&&(i.consent={...r}),s.config.consent&&(i.meta={required:{...s.config.consent}}),(0,$.emitStep)(e,i),!0});if(p.length>0){const t=s.queuePush,n=s.config.id||o,r={max:s.config.queueMax??1e3};let i=0;for(const e of p)i+=Ie(t,e,r).dropped;if(i>0){De(e,n);const o=Ee(e.status,(0,$.stepId)("destination",n),"queue",i);Ce(t,e.logger.scope(s.type||"unknown"),"destination.queuePush overflow; oldest events dropped",{buffer:"queuePush",destination:n,cap:r.max,droppedCount:o})}else t.length<r.max&&xe(t)}if(!d.length)return{id:o,destination:s,queue:u};let f,g,h=!1;try{h=await Pe(e,s,o)}catch(t){e.status.failed++;const n=s.type||"unknown";e.logger.scope(n).error("destination init failed",{error:t instanceof Error?t.message:String(t)})}if(!h)return{id:o,destination:s,queue:u};s.dlq||(s.dlq=[]);const m=Me(s.config.before,c,l),y=s.config.next,w=s.config?.cache,v=w?(0,$.compileCache)(w):void 0,b=v?W(v,e):void 0,k=s.config?.state?(0,$.compileState)(s.config.state):void 0,S=k?.filter(e=>"get"===e.mode),q=k?.filter(e=>"set"===e.mode);let I=0,O=0;return await Promise.all(d.map(async t=>{let r;if(t.globals=(0,$.assign)(i,t.globals),t.user=(0,$.assign)(a,t.user),v?.stop&&b){const e=(0,$.buildCacheContext)(l,t),n=await(0,$.checkCache)(v,b,e);if("HIT"===n?.status)return t;"MISS"===n?.status&&(r={key:n.key,ttl:n.rule.ttl})}let u=t,d=n.respond;if(m.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const s=await oe(e,e.transformers,m,t,l,n.respond,`destination.${o}.before`);if(null===s.event)return t;s.respond&&(d=s.respond),u=Array.isArray(s.event)?s.event[0]:s.event}if(v&&!v.stop&&b){const e=(0,$.buildCacheContext)(l,u),n=await(0,$.checkCache)(v,b,e);if("HIT"===n?.status)return t;"MISS"===n?.status&&(r={key:n.key,ttl:n.rule.ttl})}S&&S.length>0&&u&&(u=await(0,$.applyState)(S,t=>V(t,e),u,e));const p=Date.now();let h=!1;const w=await(0,$.tryCatchAsync)($e,t=>{const n=s.type||"unknown";e.logger.scope(n).error("Push failed",{error:t,event:u.name}),f=t,h=!0;const r=s.dlq,i=s.config.id||o,a={max:s.config.dlqMax??100},c=Ie(r,[u,t],a);if(c.dropped>0){De(e,i);const t=Ee(e.status,(0,$.stepId)("destination",i),"dlq",c.dropped);Ce(r,e.logger.scope(s.type||"unknown"),"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:i,cap:a.max,droppedCount:t})}else r.length<a.max&&xe(r)})(e,s,o,u,l,d);if(I+=Date.now()-p,r&&b&&void 0===s.config.mock&&(0,$.storeCache)(b,r.key,w??!0,r.ttl),!h&&!Ae(w)&&q&&q.length>0&&u&&(u=await(0,$.applyState)(q,t=>V(t,e),u,e)),void 0===w||Ae(w)||(g=w),Ae(w)&&O++,!h&&y){void 0!==w&&(l._response=w);const t=Me(y,c,l);if(t.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const n=await oe(e,e.transformers,t,u,l,d,`destination.${o}.next`);n.respond&&(d=n.respond)}}return t})),{id:o,destination:s,error:f,response:g,totalDuration:I,batchedCount:O,allowedCount:d.length}})),l={},d={},p={};for(const t of u){if(t.skipped)continue;const n=t.destination,o={type:n.type||"unknown",data:t.response};De(e,t.id);const s=e.status.destinations[t.id],r=Date.now();if(s.queuePushSize=n.queuePush?.length??0,s.dlqSize=n.dlq?.length??0,t.error)o.error=t.error,p[t.id]=o,s.failed++,s.lastAt=r,s.duration+=t.totalDuration||0,e.status.failed++;else if(t.queue&&t.queue.length)d[t.id]=o;else{const n=t.batchedCount??0,i=t.allowedCount??0;(Math.max(0,i-n)>0||0===i)&&(l[t.id]=o,s.count++,s.lastAt=r,s.duration+=t.totalDuration||0,e.status.out++)}}return _e({event:t,...Object.keys(l).length&&{done:l},...Object.keys(d).length&&{queued:d},...Object.keys(p).length&&{failed:p}})}async function Pe(e,t,n){if(t.init&&!t.config.init){const o=t.type||"unknown",s=e.logger.scope(o),r={collector:e,logger:s,id:n,config:t.config,env:Ne(t.env,t.config.env)};s.debug("init");const i=Date.now();let a;(0,$.emitStep)(e,J(e,{stepId:(0,$.stepId)("destination",n),stepType:"destination",phase:"init",eventId:"",now:i}));try{a=await(0,$.useHooks)(t.init,"DestinationInit",e.hooks,e.logger)(r)}catch(t){const o=Date.now(),s=J(e,{stepId:(0,$.stepId)("destination",n),stepType:"destination",phase:"error",eventId:"",now:o});throw s.durationMs=o-i,s.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},(0,$.emitStep)(e,s),t}if(!1===a)return a;if(t.config={...a||t.config,init:!0},t.queueOn?.length){const o=t.queueOn;t.queueOn=[];for(const{type:s,data:r}of o)be(e,t,n,s,r)}s.debug("init done")}return!0}async function $e(e,t,n,o,s,r){const{config:i}=t,a=await(0,$.processEventMapping)(o,i,e);if(a.ignore)return!1;const c=t.type||"unknown",u=e.logger.scope(c),l={collector:e,logger:u,id:n,config:i,data:a.data,rule:a.mapping,ingest:s,env:{...Ne(t.env,i.env),...r?{respond:r}:{}}};if(void 0!==i.mock)return u.debug("mock",{event:a.event.name}),i.mock;const d=a.mapping,p=void 0!==d?.batch,f=p?a.mappingKey||"* *":" batch-all";if((p||void 0!==i.batch)&&t.pushBatch&&void 0===i.mock){if(t.batches=t.batches||{},!t.batches[f]){const o={key:f,entries:[],events:[],data:[]},s=Te(d?.batch),r=Te(i.batch),a=s.wait??r.wait??3e4,c=s.size??r.size??1e3,l=s.age??r.age??3e4,g=Ne(t.env,i.env),h=(0,$.debounce)(async()=>{const o=t.batches[f],s=o.batched;if(0===s.entries.length)return;const r={key:s.key,entries:s.entries,events:s.events,data:s.data};s.entries=[],s.events=[],s.data=[];const a=r.entries[0],c={collector:e,logger:u,id:n,config:i,data:void 0,rule:o.isDefault?void 0:a.rule,ingest:a.ingest,env:{...g,...a.respond?{respond:a.respond}:{}}};u.debug("push batch",{events:r.entries.length});const l=t.config.id||n,d=De(e,l),p=Date.now(),h=J(e,{stepId:(0,$.stepId)("destination",n),stepType:"destination",phase:"flush",eventId:"",now:p});h.batch={size:r.entries.length,index:0},(0,$.emitStep)(e,h);const m=n=>{const o=t.dlq=t.dlq||[],s={max:t.config.dlqMax??100};let r=0;for(const e of n)r+=Ie(o,e,s).dropped;if(r>0){const t=Ee(e.status,(0,$.stepId)("destination",l),"dlq",r);Ce(o,u,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:l,cap:s.max,droppedCount:t})}else o.length<s.max&&xe(o);d.failed+=n.length,d.dlqSize=o.length,e.status.failed+=n.length};let y=r.entries.length;const w=await(0,$.tryCatchAsync)((0,$.useHooks)(t.pushBatch,"DestinationPushBatch",e.hooks,e.logger),t=>{y=0;const o=Date.now(),s=J(e,{stepId:(0,$.stepId)("destination",n),stepType:"destination",phase:"error",eventId:"",now:o});s.durationMs=o-p,s.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},s.batch={size:r.entries.length,index:0},(0,$.emitStep)(e,s),m(r.entries.map(e=>[e.event,t])),u.error("Push batch failed",{error:t instanceof Error?t.message:String(t),entries:r.entries.length})})(r,c);if((0,$.isObject)(v=w)&&Array.isArray(v.failed)&&w.failed.length>0){const e=[],t=new Set;for(const n of w.failed){const o=r.entries[n.index];o&&!t.has(n.index)&&(t.add(n.index),e.push([o.event,n.error??new Error(`Push batch entry ${n.index} failed (no per-row error provided)`)]))}e.length>0&&(m(e),y=Math.max(0,r.entries.length-e.length),u.error("Push batch partial failure",{failed:e.length,delivered:y,entries:r.entries.length}))}var v;u.debug("push batch done"),d.inFlightBatch=Math.max(0,(d.inFlightBatch??0)-r.entries.length),y>0&&(d.count+=y,d.lastAt=Date.now(),e.status.out+=y)},{wait:a,size:c,age:l});t.batches[f]={batched:o,isDefault:!p,batchFn:()=>{h()},flush:async()=>{await h.flush()}}}const o=t.batches[f];o.batched.entries.push({event:a.event,ingest:s,respond:r,rule:d,data:a.data}),o.batched.events.push(a.event),(0,$.isDefined)(a.data)&&o.batched.data.push(a.data);const c=t.config.id||n,l=De(e,c);return l.inFlightBatch=(l.inFlightBatch??0)+1,o.batchFn(),je}{u.debug("push",{event:a.event.name});const o="string"==typeof a.event.id?a.event.id:"",s=Date.now(),r=J(e,{stepId:(0,$.stepId)("destination",n),stepType:"destination",phase:"in",eventId:o,now:s});a.mappingKey&&(r.mappingKey=a.mappingKey),a.event.consent&&(r.consent={...a.event.consent}),(0,$.emitStep)(e,r);try{const r=await(0,$.useHooks)(t.push,"DestinationPush",e.hooks,e.logger)(a.event,l),i=Date.now(),c=J(e,{stepId:(0,$.stepId)("destination",n),stepType:"destination",phase:"out",eventId:o,now:i});return c.durationMs=i-s,c.outEvent=r,a.mappingKey&&(c.mappingKey=a.mappingKey),(0,$.emitStep)(e,c),u.debug("push done"),r}catch(t){const r=Date.now(),i=J(e,{stepId:(0,$.stepId)("destination",n),stepType:"destination",phase:"error",eventId:o,now:r});throw i.durationMs=r-s,i.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},a.mappingKey&&(i.mappingKey=a.mappingKey),(0,$.emitStep)(e,i),t}}}function _e(e){return{ok:!e?.failed,...e}}function He(e){const{code:t,config:n={},env:o={},cache:s,state:r}=e,{config:i}=X(e,"before"),{config:a}=X({...e,config:i},"next"),c={...t.config,...n,...a};s&&(c.cache=s),void 0!==r&&void 0===c.state&&(c.state=r);const u=Ne(t.env,o);return{...t,config:c,env:u}}function Ne(e,t){return e||t?t?e&&(0,$.isObject)(e)&&(0,$.isObject)(t)?{...e,...t}:t:e:{}}async function Re(e,t,n){const o=Object.entries(e).map(async([e,o])=>{const s=o.destroy;if(!s)return;const r=o.type||"unknown",i=n.scope(r),a={id:e,config:o.config,env:o.env??{},logger:i};let c;try{await Promise.race([s(a),new Promise((n,o)=>{c=setTimeout(()=>o(new Error(`${t} '${e}' destroy timed out`)),5e3)})])}catch(n){i.error(`${t} '${e}' destroy failed: ${n}`)}finally{c&&clearTimeout(c)}});await Promise.allSettled(o)}function Ge(e,t){e.stateVersion++,e.cellVersion[t]=e.stateVersion}async function Be(e,t,n){let o,s,r=!1;const i=function(e){return e.cascade?()=>{}:(e.cascade={counts:new WeakMap},()=>{e.cascade=void 0})}(e);try{return await async function(){switch(t){case Q.Config:(0,B.isObject)(n)&&((0,G.assign)(e.config,n,{shallow:!1}),s=n,r=!0);break;case Q.Consent:if((0,B.isObject)(n)){const{update:t}=function(e,t){const n={};return Object.entries(t).forEach(([e,t])=>{n[e]=!!t}),e.consent=(0,z.assign)(e.consent,n),{update:n}}(e,n);Ge(e,Q.Consent),s=t,r=!0}break;case Q.Custom:(0,B.isObject)(n)&&(e.custom=(0,G.assign)(e.custom,n),Ge(e,Q.Custom),s=n,r=!0);break;case Q.Destination:(0,B.isObject)(n)&&"code"in n&&(0,B.isObject)(n.code)&&(o=await async function(e,t){const{code:n,config:o={},env:s={},before:r,next:i,cache:a,state:c}=t;if(!(0,$.isFunction)(n.push))return _e({ok:!1,failed:{invalid:{type:"invalid",error:"Destination code must have a push method"}}});const u=o||{init:!1};let l=r?{...u,before:r}:{...u};i&&(l={...l,next:i}),a&&(l={...l,cache:a}),void 0!==c&&void 0===l.state&&(l={...l,state:c});let d=l.id;if(!d)do{d=(0,$.getId)(5,"abcdefghijklmnopqrstuvwxyz")}while(e.destinations[d]||e.pending.destinations[d]);if(l.require?.length){e.pending.destinations[d]=t,await ue(e);const n=e.destinations[d];return n?ze(e,void 0,{},{[d]:n}):_e({ok:!0})}const p={...n,config:l,env:Ne(n.env,s)};return e.destinations[d]=p,!1!==p.config.queue&&(p.queuePush=[...e.queue]),ze(e,void 0,{},{[d]:p})}(e,n));break;case Q.Globals:(0,B.isObject)(n)&&(e.globals=(0,G.assign)(e.globals,n),Ge(e,Q.Globals),s=n,r=!0);break;case Q.Hook:if((0,B.isObject)(n)&&(0,G.isString)(n.name)&&(0,G.isFunction)(n.fn)){const{name:t,fn:o}=n;e.hooks[t]=o,s=n,r=!0}break;case Q.On:if((0,B.isObject)(n)&&(0,G.isString)(n.type)){const{type:t,rules:o}=n;await async function(e,t,n){const o=e.on,s=o[t]||[],r=(0,_.isArray)(n)?n:[n];r.forEach(e=>{s.push(e)}),o[t]=s,ke(e,t,r)}(e,t,o)}break;case Q.Ready:r=!0;break;case Q.Run:o=await async function(e,t){return e.allowed=!0,e.timing=Date.now(),t&&(t.consent&&(e.consent=(0,G.assign)(e.consent,t.consent),Ge(e,Q.Consent)),t.user&&(e.user=(0,G.assign)(e.user,t.user),Ge(e,Q.User)),t.globals&&(e.globals=(0,G.assign)(e.config.globalsStatic||{},t.globals),Ge(e,Q.Globals)),t.custom&&(e.custom=(0,G.assign)(e.custom,t.custom),Ge(e,Q.Custom))),Object.values(e.destinations).forEach(e=>{e.queuePush=[]}),e.queue=[],e.round++,await ue(e),await async function(e){for(const t of de){if(!fe(e,t))continue;const n=Se(e,t);ke(e,t,e.on[t]||[]);for(const[o,s]of Object.entries(e.sources))ae(s)&&await qe(e,s,o,t,n)}}(e),await ze(e)}(e,n),r=!0;break;case Q.Session:r=!0;break;case Q.Shutdown:e.hasShutdown||(e.hasShutdown=!0,await async function(e){const t=e.logger;await Re(e.sources,"source",t),await async function(e,t){const n=Object.entries(e).flatMap(([e,n])=>{const o=n.batches;if(!o)return[];const s=t.scope(n.type||"destination");return Object.values(o).map(async t=>{let n;try{await Promise.race([t.flush(),new Promise((t,o)=>{n=setTimeout(()=>o(new Error(`destination '${e}' batch flush timed out`)),5e3)})])}catch(t){s.error(`destination '${e}' batch flush failed: ${t}`)}finally{n&&clearTimeout(n)}})});await Promise.allSettled(n)}(e.destinations,t),await Re(e.destinations,"destination",t),await Re(e.transformers,"transformer",t),await Re(e.stores,"store",t)}(e));break;case Q.User:(0,B.isObject)(n)&&((0,G.assign)(e.user,n,{shallow:!1}),Ge(e,Q.User),s=n,r=!0)}return r&&(await async function(e,t,n,o){e.seenEvents.add(String(t));let s=n||[];n||(s=e.on[t]||[]);const r=Se(e,t,o);let i=!1;for(const[n,o]of Object.entries(e.sources)){if(o.config.require?.length){const e=o.config.require.indexOf(t);-1!==e&&o.config.require.splice(e,1)}o.on&&(ae(o)?await qe(e,o,n,t,r)&&(i=!0):(o.queueOn=o.queueOn||[],o.queueOn.push({type:t,data:r})))}Object.entries(e.destinations).forEach(([n,o])=>{if(o.on){if(!o.config.init)return o.queueOn=o.queueOn||[],void o.queueOn.push({type:t,data:r});be(e,o,n,t,r)}});for(const[t,n]of Object.entries(e.sources))ae(n)&&n.queueOn?.length&&await ie(e,n,t);const a=Object.values(e.sources).some(e=>!ae(e)&&e.config.require?.length);return(Object.keys(e.pending.destinations).length>0||a)&&await ue(e),ke(e,t,s,o),!i}(e,t,void 0,s),o=await ze(e)),o||_e({ok:!0})}()}finally{i()}}function Fe(e,t){return{timing:Math.round((Date.now()-e.timing)/10)/100,source:{type:"collector",schema:"4",version:"4.2.0-next-1780610489068"},...t}}function Le(e,t){if(!t.name)throw new Error("Event name is required");const[n,o]=t.name.split(" ");if(!n||!o)throw new Error("Event name is invalid");const{timestamp:s=Date.now(),name:r=`${n} ${o}`,data:i={},context:a={},globals:c=e.globals,custom:u={},user:l=e.user,nested:d=[],consent:p=e.consent,id:f=(0,G.getSpanId)(),trigger:g="",entity:h=n,action:m=o,timing:y=0,source:w={type:"collector",schema:"4"}}=t;return{name:r,data:i,context:a,globals:c,custom:u,user:l,nested:d,consent:p,id:f,trigger:g,entity:h,action:m,timestamp:s,timing:y,source:w}}function Ue(e,t){const n=(0,F.useHooks)(async(n,o={})=>await(0,F.tryCatchAsync)(async()=>{const s=Date.now(),{id:r,ingest:i,respond:a,mapping:c,preChain:u,include:l,exclude:d}=o;let p=a,f=n;const g=l||d?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,l,d):void 0,h=i??(0,F.createIngest)(r||"unknown");if(c){const t=await(0,F.processEventMapping)(f,c,e);if(t.ignore)return _e({ok:!0});if(c.consent&&!(0,F.getGrantedConsent)(c.consent,e.consent,t.event.consent))return _e({ok:!0});f=t.event}if(u?.length&&e.transformers&&Object.keys(e.transformers).length>0){const n=await oe(e,e.transformers,u,f,h,p,r?`source.${r}.next`:void 0);if(null===n.event)return _e({ok:!0});if(n.stopped)return n.respond&&(p=n.respond),_e({ok:!0});if(n.respond&&(p=n.respond),Array.isArray(n.event)){const o=await Promise.all(n.event.map(async n=>{const o=t(n),s=Le(e,o);return ze(e,s,{id:r,ingest:h,respond:p},g)}));if(r){e.status.sources[r]||(e.status.sources[r]={count:0,duration:0});const t=e.status.sources[r];t.count+=n.event.length,t.lastAt=Date.now(),t.duration+=Date.now()-s}return o[0]??_e({ok:!0})}f=n.event}const m=function(e,t){return Le(e,Fe(e,t))}(e,f),y=await ze(e,m,{id:r,ingest:h,respond:p},g);if(r){e.status.sources[r]||(e.status.sources[r]={count:0,duration:0});const t=e.status.sources[r];t.count++,t.lastAt=Date.now(),t.duration+=Date.now()-s}return y},t=>{if(t instanceof F.FatalError)throw t;return e.status.failed++,e.logger.error("push failed",{event:n,ingest:o.ingest,error:t}),_e({ok:!1})})(),"Push",e.hooks,e.logger);return async(t,o)=>{const s="string"==typeof t.id?t.id:"",r=Date.now();(0,F.emitStep)(e,J(e,{stepId:"collector.push",stepType:"collector",phase:"in",eventId:s,now:r}));try{const i=await n(t,o),a=Date.now(),c=J(e,{stepId:"collector.push",stepType:"collector",phase:"out",eventId:s,now:a});return c.durationMs=a-r,c.outEvent=i,(0,F.emitStep)(e,c),i}catch(t){const n=Date.now(),o=J(e,{stepId:"collector.push",stepType:"collector",phase:"error",eventId:s,now:n});throw o.durationMs=n-r,o.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},(0,F.emitStep)(e,o),t}}}function Ke(e={}){const t=e.maxEntries??1e4,n=e.lowWaterMark??.8,o=e.sweepIntervalMs??6e4,s=Math.floor(t*n),r=new Map,i={hits:0,misses:0,populates:0,writes:0,deletes:0,evictions_entries:0,evictions_ttl:0};let a;return o>0&&(a=setInterval(function(){const e=Date.now();let t=0;for(const[n,o]of r)void 0!==o.expires&&o.expires<=e&&(r.delete(n),t++);i.evictions_ttl+=t},o),a&&"function"==typeof a.unref&&a.unref()),{type:"memory",config:{},get(e){const t=r.get(e);if(t)return void 0!==t.expires&&t.expires<=Date.now()?(r.delete(e),i.evictions_ttl++,void i.misses++):(r.delete(e),r.set(e,t),i.hits++,t.value);i.misses++},set(e,n,o){const a=!r.has(e);a||r.delete(e),r.set(e,{value:n,expires:void 0!==o?Date.now()+o:void 0}),i.writes++,a&&i.populates++,r.size>t&&function(){if(r.size<=t)return;const e=r.size-s;let n=0;for(const t of r.keys()){if(n>=e)break;r.delete(t),n++}i.evictions_entries+=n}()},delete(e){r.delete(e)&&i.deletes++},get counters(){return{...i}},destroy(){void 0!==a&&(clearInterval(a),a=void 0),r.clear()}}}function Qe(e,t){const{cacheConfig:n,cacheStore:o,namespace:s,logger:r,storeId:i,collector:a}=t,c=(e,t)=>{if(!a)return;const n=J(a,{stepId:`store.${i}`,stepType:"store",phase:"in",eventId:"",now:Date.now()});n.meta={op:"cache",cached:"hit"===t,status:t,key:e},(0,K.emitStep)(a,n)},u={hits:0,misses:0,populates:0,writes:0,deletes:0,inflight_dedups:0},l=n.rules.map(e=>({match:e.match?(0,K.compileMatcher)(e.match):()=>!0,ttl:e.ttl})),d=e=>`${s}:${e}`;function p(e,t){const n=void 0===t?{key:e}:{key:e,value:t};return l.find(e=>e.match(n))}const f=new Map;return{type:e.type,config:e.config,setup:e.setup,get counters(){return{...u}},async get(t){const n=d(t),s=await o.get(n);if(void 0!==s)return u.hits++,c(t,"hit"),s;const r=f.get(n);if(r)return u.inflight_dedups++,c(t,"hit"),r;u.misses++,c(t,"miss");const i=(async()=>{try{const s=await e.get(t);if(void 0===s)return;const r=p(t,s);if(r)try{await o.set(n,s,1e3*r.ttl),u.populates++}catch(e){g("set",t,e)}return s}finally{f.delete(n)}})();return f.set(n,i),i},async set(t,n,s){u.writes++,await e.set(t,n,s);const r=p(t,n);if(r)try{await o.set(d(t),n,1e3*r.ttl)}catch(e){g("set",t,e)}},async delete(t){u.deletes++,await e.delete(t);try{await o.delete(d(t))}catch(e){g("delete",t,e)}}};function g(e,t,n){const o=`store-cache(${i}): cache ${e} failed for "${t}"; backing succeeded, continuing`;r?r.warn(o,{error:n}):console.warn(o,n)}}function Je(e,t,n){const o=`store.${n}`,s=(0,U.useHooks)(t.get,"StoreGet",e.hooks,e.logger),r=(0,U.useHooks)(t.set,"StoreSet",e.hooks,e.logger),i=(0,U.useHooks)(t.delete,"StoreDelete",e.hooks,e.logger);t.get=async t=>{const n=Date.now(),r=J(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:n});r.meta={op:"get",key:t},(0,U.emitStep)(e,r);try{const r=await s(t),i=Date.now(),a=J(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:i});return a.durationMs=i-n,a.meta={op:"get",key:t},(0,U.emitStep)(e,a),r}catch(s){const r=Date.now(),i=J(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:r});throw i.durationMs=r-n,i.meta={op:"get",key:t},i.error=s instanceof Error?{name:s.name,message:s.message}:{message:String(s)},(0,U.emitStep)(e,i),s}},t.set=async(t,n,s)=>{const i=Date.now(),a=J(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:i});a.meta={op:"set",key:t},(0,U.emitStep)(e,a);try{await r(t,n,s);const a=Date.now(),c=J(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:a});c.durationMs=a-i,c.meta={op:"set",key:t},(0,U.emitStep)(e,c)}catch(n){const s=Date.now(),r=J(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:s});throw r.durationMs=s-i,r.meta={op:"set",key:t},r.error=n instanceof Error?{name:n.name,message:n.message}:{message:String(n)},(0,U.emitStep)(e,r),n}},t.delete=async t=>{const n=Date.now(),s=J(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:n});s.meta={op:"delete",key:t},(0,U.emitStep)(e,s);try{await i(t);const s=Date.now(),r=J(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:s});r.durationMs=s-n,r.meta={op:"delete",key:t},(0,U.emitStep)(e,r)}catch(s){const r=Date.now(),i=J(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:r});throw i.durationMs=r-n,i.meta={op:"delete",key:t},i.error=s instanceof Error?{name:s.name,message:s.message}:{message:String(s)},(0,U.emitStep)(e,i),s}}}async function We(e){const t=(0,P.assign)({globalsStatic:{},sessionStatic:{},run:!0,queueMax:1e3},e,{merge:!1,extend:!1}),n={level:e.logger?.level,handler:e.logger?.handler},o=(0,P.createLogger)(n),s={...t.globalsStatic,...e.globals},r={allowed:!1,config:t,consent:e.consent||{},custom:e.custom||{},destinations:{},transformers:{},stores:{},globals:s,hooks:e.hooks||{},observers:new Set,logger:o,on:{},queue:[],round:0,stateVersion:0,cellVersion:{},delivery:new WeakMap,session:void 0,status:{startedAt:Date.now(),in:0,out:0,failed:0,sources:{},destinations:{},dropped:{}},timing:Date.now(),user:e.user||{},sources:{},pending:{destinations:{}},hasShutdown:!1,seenEvents:new Set,push:void 0,command:void 0};var i,a;r.push=Ue(r,e=>Fe(r,e)),r.command=(i=r,a=Be,(0,L.useHooks)(async(e,t,n)=>await(0,L.tryCatchAsync)(async()=>await a(i,e,t,n),n=>{if(n instanceof L.FatalError)throw n;return i.status.failed++,i.logger.error("command failed",{command:e,data:t,error:n}),_e({ok:!1})})(),"Command",i.hooks,i.logger));const c=e.stores||{};return r.stores=await async function(e,t={}){const n={};for(const[o,s]of Object.entries(t)){const{code:t,config:r={},env:i={}}=s,a=e.logger.scope("store").scope(o),c={collector:e,logger:a,id:o,config:r,env:i},u=await t(c);n[o]=u}const o=t,s=function(e){const t={};for(const n of Object.keys(e))t[n]="WHITE";const n=[],o=[];function s(r){const i=t[r];if("BLACK"===i)return;if("GRAY"===i){const e=o.indexOf(r),t=o.slice(-1===e?0:e).concat(r).join(" -> ");throw new Error(`Cycle in cache.store chain: ${t}`)}t[r]="GRAY",o.push(r);const a=e[r].cache?.store;if(void 0!==a){if(!(a in e))throw new Error(`Store "${r}" cache.store references "${a}", which is not declared in flow.stores`);s(a)}o.pop(),t[r]="BLACK",n.push(r)}for(const n of Object.keys(e))"WHITE"===t[n]&&s(n);return n}(o);for(const t of s){const s=o[t].cache;if(!s)continue;let r,i;void 0!==s.store?(r=n[s.store],i=s.store):(n.__cache||(n.__cache=Ke()),r=n.__cache,i="__cache");const a=s.namespace??t;e.logger.scope("store-cache").scope(t).info(`store "${t}" caches with namespace "${a}:" via ${i}`),n[t]=Qe(n[t],{storeId:t,cacheConfig:s,cacheStore:r,namespace:a,logger:e.logger.scope("store-cache").scope(t),collector:e})}for(const[t,o]of Object.entries(n))"__cache"!==t&&Je(e,o,t);return n}(r,c),function(e,t,n){const o=new Map;for(const[n,s]of Object.entries(e))t[n]&&o.set(s,t[n]);if(0!==o.size)for(const e of[n.transformers,n.destinations,n.sources])if(e)for(const t of Object.values(e))s(t.env);function s(e){if(e)for(const[t,n]of Object.entries(e))if("object"==typeof n&&null!==n){const s=o.get(n);s&&(e[t]=s)}}}(c,r.stores,e),r.stores.__cache||(r.stores.__cache=Ke()),r.destinations=await async function(e,t={}){const n={};for(const[o,s]of Object.entries(t))s.config?.require?.length?e.pending.destinations[o]=s:n[o]=He(s);return n}(r,e.destinations||{}),r.transformers=await async function(e,t={}){const n={};for(const[o,s]of Object.entries(t)){const{code:t,env:r={}}=s,i=(0,R.validateStepEntry)(s,"Transformer");if(!i.ok){e.logger.warn(`Transformer ${o} invalid (${i.code}): ${i.reason}. Skipping.`);continue}const{config:a}=X(s,"before"),{config:c}=X({...s,config:a},"next"),u=Object.keys(r).length>0?{...c,env:r}:c,{cache:l}=s,d=l?{...u,cache:l}:u,p=s.config?.state??s.state,f=void 0!==p&&void 0===d.state?{...d,state:p}:d,g=e.logger.scope("transformer").scope(o),h={collector:e,logger:g,id:o,ingest:(0,R.createIngest)(o),config:f,env:r},m=t??(e=>{const t=s.mapping;if(t){const n=[];if(void 0!==t.data&&n.push("data"),t.mapping)for(const[e,o]of Object.entries(t.mapping))if("object"==typeof o&&null!==o)for(const[t,s]of Object.entries(o)){if("object"!=typeof s||null===s)continue;const o=s;void 0!==o.data&&n.push(`mapping[${e}][${t}].data`),void 0!==o.silent&&n.push(`mapping[${e}][${t}].silent`)}return n.length>0&&e.collector.logger.warn(`Transformer ${o}: \`${n.join(", ")}\` ignored at transformer position (only event-mutating fields apply).`),{type:"pass",config:e.config,push:async n=>{const o=await(0,R.processEventMapping)(n,t,e.collector);return!o.ignore&&{event:o.event}}}}return{type:"pass",config:e.config,push:e=>({event:e})}}),y=await m(h);void 0!==s.before&&void 0===y.config?.before&&(y.config={...y.config??{},before:s.before}),void 0!==s.next&&void 0===y.config?.next&&(y.config={...y.config??{},next:s.next}),void 0!==p&&void 0===y.config?.state&&(y.config={...y.config??{},state:p}),n[o]=y}return n}(r,e.transformers||{}),r}async function Ve(e){e=e||{};const t=await We(e),n=(o=t,{type:"elb",config:{},push:async(e,t,n,s,r)=>{if("string"==typeof e&&e.startsWith("walker ")){const n=e.replace("walker ","");return o.command(n,t)}let i;if("string"==typeof e)i={name:e},t&&"object"==typeof t&&!Array.isArray(t)&&(i.data=t);else{if(!e||"object"!=typeof e)return _e({ok:!1});i=e,t&&"object"==typeof t&&!Array.isArray(t)&&(i.data={...i.data||{},...t})}return n&&"object"==typeof n&&(i.context=n),s&&Array.isArray(s)&&(i.nested=s),r&&"object"==typeof r&&(i.custom=r),o.push(i)}});var o;t.sources.elb=n,await async function(e,t={}){const n={};for(const[o,s]of Object.entries(t)){const t=await ce(e,o,s);if(!t)continue;const r=s.config?.require;t.config={...t.config,init:!1,...r?{require:[...r]}:{}},n[o]=t}Object.assign(e.sources,n);for(const t of Object.keys(n)){const n=e.sources[t];let o=!1;n.init&&await(0,N.tryCatchAsync)(n.init.bind(n),n=>{if(n instanceof N.FatalError)throw n;o=!0,e.status.failed++,e.logger.scope("source").error("source init failed",{sourceId:t,error:n})})(),o||(n.config.init=!0,ae(n)&&await ie(e,n,t))}return await ue(e),n}(t,e.sources||{});const{consent:s,user:r,globals:i,custom:a}=e;s&&await t.command("consent",s),r&&await t.command("user",r),i&&await t.command("globals",i),a&&await t.command("custom",a),t.config.run&&await t.command("run");let c=n.push;const u=Object.values(t.sources).filter(e=>"elb"!==e.type),l=u.find(e=>e.config.primary);return l?c=l.push:u.length>0&&(c=u[0].push),{collector:t,elb:c}}var Ye=async e=>{let t;return{get flow(){return t},trigger:()=>async n=>{if(!t){const n=await Ve(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 s={awsRequestId:`test-${Date.now()}`},r=o.push,i=await r(n,s);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 Xe(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 Ze={};r(Ze,{createTrigger:()=>pt,env:()=>et,step:()=>it});var et={};r(et,{push:()=>st,simulation:()=>rt});var tt=()=>{},nt={error:tt,warn:tt,info:tt,debug:tt,throw:e=>{throw"string"==typeof e?new Error(e):e},json:tt,scope:()=>nt},ot=()=>()=>Promise.resolve({ok:!0}),st={get push(){return ot()},get command(){return ot()},get elb(){return ot()},logger:nt},rt=["AWS.SQSClient"],it={};r(it,{decoderText:()=>ut,malformedJson:()=>lt,orderComplete:()=>ct,pageView:()=>at});var at={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"]]},ct={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"]]},ut={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"]]},lt={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 dt(e){if("object"!=typeof e||null===e)return!1;const t=e;return"sqs"===t.type&&"function"==typeof t.push}var pt=async e=>{let t;return{get flow(){return t},trigger:()=>async n=>{if(!t){const n=await Ve(e);t={collector:n.collector,elb:n.elb}}const o=function(e){for(const t of Object.values(e.sources??{}))if(dt(t))return t}(t.collector);if(!o)throw new Error("sqs source not registered in collector, ensure it is configured in sources");const s={MessageId:n.MessageId,Body:n.Body,ReceiptHandle:n.ReceiptHandle,Attributes:n.Attributes,MessageAttributes:n.MessageAttributes},r=await o.push(s),i=[];return r&&"object"==typeof r&&(r.acked&&i.push(["message.ack",n.MessageId]),r.nacked&&i.push(["message.nack",n.MessageId])),i}}};//# sourceMappingURL=dev.js.map
1
+ "use strict";var e,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,o=Object.getOwnPropertyNames,s=Object.prototype.hasOwnProperty,r=(e,n)=>{for(var o in n)t(e,o,{get:n[o],enumerable:!0})},i={};r(i,{examples:()=>I,schemas:()=>a,sqsExamples:()=>Ze}),module.exports=(e=i,((e,r,i,a)=>{if(r&&"object"==typeof r||"function"==typeof r)for(let c of o(r))s.call(e,c)||c===i||t(e,c,{get:()=>r[c],enumerable:!(a=n(r,c))||a.enumerable});return e})(t({},"__esModule",{value:!0}),e));var a={};r(a,{CorsOptionsSchema:()=>f,CorsOrigin:()=>p,HttpMethod:()=>d,SettingsSchema:()=>g,settings:()=>h,sqsSettings:()=>S,sqsSetup:()=>q});var c=require("@walkeros/core/dev"),u=require("@walkeros/core/dev"),l=require("@walkeros/core/dev"),d=l.z.enum(["GET","POST","PUT","PATCH","DELETE","OPTIONS","HEAD"]),p=l.z.union([l.z.string(),l.z.array(l.z.string()),l.z.literal("*")]),f=l.z.object({origin:p.describe("Allowed origins (* for all, URL string, or array of URLs)").optional(),methods:l.z.array(d).describe("Allowed HTTP methods").optional(),headers:l.z.array(l.z.string()).describe("Allowed request headers").optional(),credentials:l.z.boolean().describe("Allow credentials (cookies, authorization headers)").optional(),maxAge:l.z.number().int().positive().describe("Preflight cache duration in seconds").optional()}),g=u.z.object({cors:u.z.union([u.z.boolean(),f]).describe("CORS configuration: false = disabled, true = allow all origins, object = custom configuration").default(!0),timeout:u.z.number().int().positive().max(9e5).describe("Request timeout in milliseconds (max: 900000 for Lambda)").default(3e4),enablePixelTracking:u.z.boolean().describe("Enable GET requests with 1x1 transparent GIF response for pixel tracking").default(!0),healthPath:u.z.string().describe("Health check endpoint path (e.g., /health)").default("/health")}),h=(0,c.zodToSchema)(g),m=require("@walkeros/core/dev"),y=require("@walkeros/core/dev"),w=y.z.object({queueName:y.z.string().min(1).describe("SQS queue short name (like walkeros-events). Required for both setup and runtime poll."),region:y.z.string().describe("AWS region (like eu-central-1). Default: eu-central-1.").optional(),queueUrl:y.z.string().url().describe("Optional pre-resolved queue URL. When set, init skips the GetQueueUrl lookup.").optional(),client:y.z.any().describe("Pre-configured AWS SQSClient instance. Bypasses construction when supplied.").optional(),config:y.z.any().describe("AWS SDK SQSClientConfig (credentials, endpoint overrides, retries).").optional(),decoder:y.z.enum(["json","text","raw"]).describe("Decoder for the message body. json (default) parses JSON, text forwards UTF-8, raw forwards a Buffer.").optional(),maxMessages:y.z.number().int().min(1).max(10).describe("SQS receive batch size. Cap 10. Default: 10.").optional(),waitTimeSeconds:y.z.number().int().min(0).max(20).describe("Long-poll duration in seconds. Cap 20. Default: 20.").optional(),visibilityTimeout:y.z.number().int().nonnegative().describe("Per-receive visibility timeout override. Default: queue-configured value.").optional(),shutdownTimeoutMs:y.z.number().int().positive().describe("Graceful shutdown timeout in milliseconds. Default: 30000. After this window, destroy() force-closes.").optional(),onPushError:y.z.enum(["nack","ack"]).describe("Behavior when forwarding to the collector throws. nack (default) skips DeleteMessage so the message redelivers; ack drops it.").optional()}),v=require("@walkeros/core/dev"),b=v.z.record(v.z.string(),v.z.string()),k=v.z.object({region:v.z.string().min(1).describe("AWS region.").optional(),fifoQueue:v.z.boolean().describe("FIFO queue with content-based deduplication. Auto-appends .fifo suffix to the queue name.").optional(),visibilityTimeoutSeconds:v.z.number().int().nonnegative().describe("Visibility timeout in seconds. Default: 30.").optional(),messageRetentionSeconds:v.z.number().int().positive().describe("Message retention period in seconds. Default: 345600 (4 days).").optional(),maximumMessageSize:v.z.number().int().min(1024).max(262144).describe("Max message size in bytes. Default: 262144 (256 KB).").optional(),kmsMasterKeyId:v.z.string().describe("KMS key alias or ID for at-rest encryption.").optional(),deadLetterQueue:v.z.object({arn:v.z.string().describe("ARN of an existing DLQ. Mutually exclusive with create: true.").optional(),create:v.z.boolean().describe("Create a sibling DLQ named <queueName>-dlq. Default: false.").optional(),maxReceiveCount:v.z.number().int().min(1).max(1e3).describe("Max receive count before message goes to DLQ. Default: 5.").optional()}).describe("Optional dead-letter queue.").optional(),tags:b.describe("Tags applied to the queue (and inherited by an auto-created DLQ).").optional(),subscribeToSnsTopic:v.z.object({topicArn:v.z.string().min(1).describe("Topic ARN to subscribe to."),rawMessageDelivery:v.z.boolean().describe("Deliver SNS messages without the SNS envelope.").optional(),filterPolicy:v.z.record(v.z.string(),v.z.unknown()).describe("SNS filter policy applied at subscription level.").optional()}).describe("Optional SNS topic subscription. Creates the subscription and the matching queue policy.").optional()}),S=(0,m.zodToSchema)(w),q=(0,m.zodToSchema)(k),I={};r(I,{createTrigger:()=>Ye,env:()=>O,step:()=>T,trigger:()=>Xe});var O={};r(O,{push:()=>A});var C=()=>()=>Promise.resolve({ok:!0}),x=()=>{},j={error:x,warn:x,info:x,debug:x,throw:e=>{throw"string"==typeof e?new Error(e):e},json:x,scope:()=>j},A={get push(){return C()},get command(){return C()},get elb(){return C()},logger:j},T={};r(T,{apiGatewayV1Post:()=>E,lambdaGet:()=>M,lambdaPost:()=>D});var D={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({event:"page view",data:{title:"Home"}}),isBase64Encoded:!1},out:[["elb",{name:"page view",data:{title:"Home"}}]]},E={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({event:"page view",data:{title:"Home"}}),isBase64Encoded:!1},out:[["elb",{name:"page view",data:{title:"Home"}}]]},M={title:"Lambda GET",description:"An API Gateway v2 HTTP GET with query parameters is parsed into an elb event payload.",trigger:{type:"GET"},in:{version:"2.0",requestContext:{http:{method:"GET",path:"/collect"},requestId:"req-456"},rawQueryString:"e=page+view&d=%7B%22title%22%3A%22Home%22%7D",isBase64Encoded:!1},out:[["elb",{e:"page view",d:'{"title":"Home"}'}]]},z=require("@walkeros/core"),P=require("@walkeros/core"),$=require("@walkeros/core"),_=(require("@walkeros/core"),require("@walkeros/core")),H=require("@walkeros/core"),N=require("@walkeros/core"),R=require("@walkeros/core"),G=require("@walkeros/core"),B=require("@walkeros/core"),F=require("@walkeros/core"),L=require("@walkeros/core"),U=require("@walkeros/core"),K=require("@walkeros/core"),Q={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 J(e,t){const n=e.status.startedAt;return{flowId:"default",stepId:t.stepId,stepType:t.stepType,phase:t.phase,eventId:t.eventId,timestamp:new Date(t.now).toISOString(),elapsedMs:t.now-n}}function W(e,t){return e.storeId&&t.stores[e.storeId]?t.stores[e.storeId]:t.stores.__cache}function V(e,t){return e?t.stores[e]:t.stores.__cache}function Y(e){const t={};for(const[n,o]of Object.entries(e)){const e=o.config?.next;"string"==typeof e||Array.isArray(e)&&e.every(e=>"string"==typeof e)?t[n]={next:e}:t[n]={}}return t}function X(e,t){const n=e.config||{},o=e[t];return void 0!==o?{config:{...n,[t]:o},chainValue:o}:{config:n,chainValue:void 0}}function Z(e,t={}){if(!e)return[];if(Array.isArray(e))return e;const n=[],o=new Set;let s=e;for(;s&&t[s]&&!o.has(s);){o.add(s),n.push(s);const e=t[s].next;if(Array.isArray(e)){n.push(...e);break}s=e}return n}async function ee(e,t,n){if(t.init&&!t.config.init){const o=t.type||"unknown",s=e.logger.scope(`transformer:${o}`),r={collector:e,logger:s,id:n,ingest:(0,R.createIngest)(n),config:t.config,env:se(t.config.env)};s.debug("init");const i=await(0,R.useHooks)(t.init,"TransformerInit",e.hooks,e.logger)(r);if(!1===i)return!1;t.config={...i||t.config,env:i?.env||t.config.env,init:!0},s.debug("init done")}return!0}async function te(e,t,n,o,s,r){const i=t.type||"unknown",a=e.logger.scope(`transformer:${i}`),c={collector:e,logger:a,id:n,ingest:s,config:t.config,env:{...se(t.config.env),...r?{respond:r}:{}}};a.debug("push",{event:o.name});const u="string"==typeof o.id?o.id:"",l=Date.now(),d=J(e,{stepId:(0,R.stepId)("transformer",n),stepType:"transformer",phase:"in",eventId:u,now:l});(0,R.emitStep)(e,d);try{const s=await(0,R.useHooks)(t.push,"TransformerPush",e.hooks,e.logger)(o,c),r=Date.now(),i=J(e,{stepId:(0,R.stepId)("transformer",n),stepType:"transformer",phase:"out",eventId:u,now:r});return i.durationMs=r-l,i.outEvent=s,(0,R.emitStep)(e,i),a.debug("push done"),s}catch(t){const o=Date.now(),s=J(e,{stepId:(0,R.stepId)("transformer",n),stepType:"transformer",phase:"error",eventId:u,now:o});throw s.durationMs=o-l,s.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},(0,R.emitStep)(e,s),t}}function ne(e,t){return e?{...e,_meta:{...e._meta,path:[...e._meta.path]}}:(0,R.createIngest)(t)}async function oe(e,t,n,o,s,r,i){s||(s=(0,R.createIngest)(n[0]??"chain")),i&&s._meta&&(s._meta.chainPath=i);let a=o,c=r;for(const o of n){const r=t[o];if(!r){e.logger.warn(`Transformer not found: ${o}`);continue}if(s&&s._meta&&s._meta.path.length>256)return e.logger.error(`Max path length exceeded at ${o}`),{event:null,respond:c};if(s&&s._meta&&(s._meta.hops++,s._meta.path.push(o)),!await(0,R.tryCatchAsync)(ee,t=>{if(t instanceof R.FatalError)throw t;return e.status.failed++,e.logger.scope(`transformer:${r.type||"unknown"}`).error("transformer init failed",{transformer:o,error:t}),!1})(e,r,o))return{event:null,respond:c};if(i&&void 0!==r.config?.chainMocks?.[i]){const t=r.config.chainMocks[i];e.logger.scope(`transformer:${r.type||"unknown"}`).debug("chainMock",{chain:i}),a=t;continue}if(void 0!==r.config?.mock){e.logger.scope(`transformer:${r.type||"unknown"}`).debug("mock"),a=r.config.mock;continue}if(r.config?.disabled)continue;const u=r.config?.cache,l=u?(0,R.compileCache)(u):void 0,d=l?W(l,e):void 0,p=r.config?.state?(0,R.compileState)(r.config.state):void 0,f=p?.filter(e=>"get"===e.mode),g=p?.filter(e=>"set"===e.mode),h=async t=>g&&0!==g.length?(0,R.applyState)(g,t=>V(t,e),t,e):t;let m;if(l&&d){const e=(0,R.buildCacheContext)(s,a),t=await(0,R.checkCache)(l,d,e);if("HIT"===t?.status&&t.value){if(a=t.value,l.stop)return{event:a,respond:c,stopped:!0};continue}"MISS"===t?.status&&(m={key:t.key,ttl:t.rule.ttl})}const y=r.config.before;if(y){const n=(0,R.getNextSteps)(y,(0,R.buildCacheContext)(s,a));if(1===n.length){const o=Z(n[0],Y(t));if(o.length>0){const n=await oe(e,t,o,a,s,c,i);if(null===n.event)return{event:null,respond:n.respond??c};if(n.stopped)return{event:Array.isArray(n.event)?n.event[0]:n.event,respond:n.respond??c,stopped:!0};n.respond&&(c=n.respond),a=Array.isArray(n.event)?n.event[0]:n.event}}else n.length>1&&await Promise.all(n.map(n=>(0,R.tryCatchAsync)(oe,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,Z(n,Y(t)),a,ne(s,n),void 0,i)))}f&&f.length>0&&(a=await(0,R.applyState)(f,t=>V(t,e),a,e));const w=await(0,R.tryCatchAsync)(te,t=>(e.logger.scope(`transformer:${r.type||"unknown"}`).error("Push failed",{error:t}),!1))(e,r,o,a,s,c);if(!1===w)return{event:null,respond:c};if(Array.isArray(w)){const r=n.slice(n.indexOf(o)+1),u=await Promise.all(w.map(async n=>{const o=await h(n.event||a),u=ne(s,"unknown");if(n.next){const s=(0,R.getNextSteps)(n.next,(0,R.buildCacheContext)(u,o));if(0===s.length)return{event:o,respond:c};if(1===s.length){const n=Z(s[0],Y(t));return n.length>0?oe(e,t,n,o,u,c,i):{event:o,respond:c}}return(await Promise.all(s.map(n=>(0,R.tryCatchAsync)(oe,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,Z(n,Y(t)),o,ne(u,n),void 0,i)))).map(e=>({event:e.event,respond:void 0}))}return r.length>0?oe(e,t,r,o,u,c,i):{event:o,respond:c}}));let l=c;const d=[];for(const e of u.flat())if(null!==e)if(e&&"object"==typeof e&&"event"in e){const t=e;if(t.respond&&(l=t.respond),null===t.event)continue;Array.isArray(t.event)?d.push(...t.event):d.push(t.event)}else d.push(e);return 0===d.length?{event:null,respond:l}:1===d.length?{event:d[0],respond:l}:{event:d,respond:l}}if(w&&"object"==typeof w){const{event:n,respond:o,next:r}=w;if(o&&(c=o),void 0!==r){const o=await h(n||a),u=(0,R.getNextSteps)(r,(0,R.buildCacheContext)(s,o));if(0===u.length){a=o;continue}if(1===u.length){const n=Z(u[0],Y(t));return n.length>0?oe(e,t,n,o,s,c,i):(e.logger.warn(`Branch target not found: ${JSON.stringify(r)}`),{event:null,respond:c})}return await Promise.all(u.map(n=>(0,R.tryCatchAsync)(oe,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,Z(n,Y(t)),o,ne(s,n),void 0,i))),{event:null,respond:void 0}}n&&(a=n)}g&&g.length>0&&(a=await(0,R.applyState)(g,t=>V(t,e),a,e)),m&&d&&(0,R.storeCache)(d,m.key,a,m.ttl);const v=r.config.next,b="string"==typeof v||Array.isArray(v)&&v.every(e=>"string"==typeof e),k=void 0!==v&&!b;if((!w||"object"==typeof w&&!w.next)&&k){const n=(0,R.getNextSteps)(r.config.next,(0,R.buildCacheContext)(s,a));if(1===n.length){const o=Z(n[0],Y(t));return o.length>0?oe(e,t,o,a,s,c,i):{event:a,respond:c}}return n.length>1?(await Promise.all(n.map(n=>(0,R.tryCatchAsync)(oe,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,Z(n,Y(t)),a,ne(s,n),void 0,i))),{event:null,respond:void 0}):{event:a,respond:c}}}return{event:a,respond:c}}function se(e){return e&&(0,R.isObject)(e)?e:{}}function re(e){return"string"==typeof e||!(!Array.isArray(e)||!e.every(e=>"string"==typeof e))}async function ie(e,t,n){if(!t.on||!t.queueOn?.length)return;const o=t.queueOn;t.queueOn=[];const s=n||t.config?.id||"unknown";for(const{type:n,data:r}of o)pe(n)&&!ye(e,t,n)||(await(0,N.tryCatchAsync)(t.on,t=>{if(t instanceof N.FatalError)throw t;e.status.failed++,e.logger.scope("source").error("source on flush failed",{sourceId:s,type:n,error:t})})(n,r),pe(n)&&me(e,t,n))}function ae(e){return Boolean(e.config.init)&&!e.config.require?.length}async function ce(e,t,n){const{code:o,config:s={},env:r={},primary:i,next:a,before:c,cache:u}=n,l=s.state??n.state,d=l?(0,N.compileState)(l):void 0,p=u,f=p?(0,N.compileCache)({...p,stop:p.stop??!0}):void 0,g=re(a)?Z(a,Y(e.transformers)):void 0,h=re(c)?Z(c,Y(e.transformers)):void 0,m=r.push,y=m??e.push,w=Boolean(m),v=async(n,o,r)=>{let i;const u=h??(void 0!==c?(()=>{const t=(0,N.getNextSteps)(c,(0,N.buildCacheContext)(r.ingest));return 0===t.length?[]:Z(1===t.length?t[0]:t,Y(e.transformers))})():[]);let l=[n];if(u.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const o=await oe(e,e.transformers,u,n,r.ingest,r.respond,`source.${t}.before`);if(null===o.event)return{ok:!0};if(o.stopped)return o.respond&&(r.respond=o.respond),{ok:!0};o.respond&&(r.respond=o.respond),l=Array.isArray(o.event)?o.event:[o.event]}if(f){const t=W(f,e);if(t){const n=(0,N.buildCacheContext)(r.ingest),o=await(0,N.checkCache)(f,t,n);if(o){if("HIT"===o.status&&void 0!==o.value&&f.stop){let t=o.value;return o.rule.update&&(t=await(0,N.applyUpdate)(t,o.rule.update,{...n,cache:{status:"HIT"}},e)),r.respond?.(t),{ok:!0}}if("MISS"===o.status&&f.stop&&r.respond){const s=r.respond,a=o.rule.update,c={...n,cache:{status:"MISS"}},u=o.key,l=o.rule.ttl,d=n=>{(0,N.storeCache)(t,u,n,l),a?i=(async()=>{const t=await(0,N.applyUpdate)(n,a,c,e);s(t)})():s(n)};r.respond=d}"MISS"!==o.status||f.stop||(0,N.storeCache)(t,o.key,!0,o.rule.ttl)}}}const p=g?{kind:"single",preChain:g}:void 0!==a?(()=>{const t=(0,N.getNextSteps)(a,(0,N.buildCacheContext)(r.ingest));return 0===t.length?{kind:"single",preChain:[]}:1===t.length?{kind:"single",preChain:Z(t[0],Y(e.transformers))}:{kind:"many",branches:t.map(t=>Z(t,Y(e.transformers)))}})():{kind:"single",preChain:[]};!w&&d&&d.length>0&&(l=await Promise.all(l.map(t=>(0,N.applyState)(d,t=>V(t,e),t,e))));let m={ok:!0};for(const n of l)"many"===p.kind?(await Promise.all(p.branches.map((i,a)=>(0,N.tryCatchAsync)(async()=>w?y(n):y(n,{...o,id:t,ingest:ne(r.ingest,`${t}.${a}`),respond:void 0,mapping:s,preChain:i}),t=>(e.logger.scope("source:many").error(`many branch ${a} failed`,{error:t}),{ok:!0}))())),m={ok:!0}):m=w?await y(n):await y(n,{...o,id:t,ingest:r.ingest,respond:r.respond,mapping:s,preChain:p.preChain});return i&&await i,m},b=async n=>{const o=(0,N.createIngest)(t);if(!s.ingest||void 0===n)return o;const r=await(0,N.getMappingValue)(n,s.ingest,{collector:e});return{...o,...r,_meta:o._meta}},k=e.logger.scope("source").scope(t),S={command:e.command,sources:e.sources,elb:e.sources.elb.push,logger:k,...r,push:async(e,n={})=>{const o={ingest:(0,N.createIngest)(t),respond:void 0};return v(e,n,o)}},q={collector:e,logger:k,id:t,config:s,env:S,withScope:async(e,t,n)=>{const o={ingest:await b(e),respond:t};return n({...S,push:(e,t={})=>v(e,t,o),ingest:o.ingest,respond:o.respond})}},I=await(0,N.tryCatchAsync)(o,n=>{if(n instanceof N.FatalError)throw n;e.status.failed++,e.logger.scope("source").error("source factory failed",{sourceId:t,error:n})})(q);if(!I)return;const O=I.type||"unknown",C=e.logger.scope(O).scope(t);return S.logger=C,i&&(I.config={...I.config,primary:i}),I}async function ue(e){for(const[t,n]of Object.entries(e.sources)){if(ae(n))continue;const o=n.config.require;if(!o?.length)continue;const s=o.filter(t=>!ge(e,t));s.length!==o.length&&(n.config.require=s,ae(n)&&await ie(e,n,t))}for(const[t,n]of Object.entries(e.pending.destinations)){if(!e.pending.destinations[t]||e.destinations[t])continue;const o=n.config?.require;if(!o)continue;const s=o.filter(t=>!ge(e,t));if(n.config&&(n.config.require=s),s.length>0)continue;delete e.pending.destinations[t];const r=He(n);!1!==r.config.queue&&(r.queuePush=[...e.queue]),e.destinations[t]=r}}function le(e,t,n,o){if(n instanceof _.FatalError)throw n;e.logger.scope("on").error("on callback failed",{kind:t,...o,error:n})}var de=[Q.Consent,Q.User,Q.Globals,Q.Custom];function pe(e){return de.includes(e)}function fe(e,t){switch(t){case Q.Consent:return Object.keys(e.consent).length>0;case Q.User:return Object.keys(e.user).length>0;case Q.Globals:return Object.keys(e.globals).length>0;case Q.Custom:return Object.keys(e.custom).length>0;default:return!1}}function ge(e,t){switch(t){case Q.Consent:case Q.User:case Q.Globals:case Q.Custom:return fe(e,t);case Q.Run:case Q.Ready:return!0===e.allowed;default:return e.seenEvents.has(String(t))}}function he(e,t){return e.cellVersion[String(t)]??0}function me(e,t,n){let o=e.delivery.get(t);o||(o={},e.delivery.set(t,o)),o[String(n)]=he(e,n)}function ye(e,t,n){return e.allowed&&he(e,n)>function(e,t,n){const o=e.delivery.get(t),s=o?.[String(n)];return void 0===s?-1:s}(e,t,n)}function we(e,t,n){const o=e.cascade;if(!o)return!0;let s=o.counts.get(t);s||(s={},o.counts.set(t,s));const r=String(n),i=(s[r]||0)+1;return s[r]=i,i<=8||(9===i&&e.logger.error("state delivery did not converge",{type:r}),!1)}function ve(e,t){return{collector:e,logger:e.logger.scope("on").scope(String(t))}}function be(e,t,n,o,s){if(!t.on)return;const r=t.type||"unknown",i=e.logger.scope(r).scope("on").scope(o),a={collector:e,logger:i,id:n,config:t.config,data:s,env:Ne(t.env,t.config.env)};(0,H.tryCatch)(t.on,t=>le(e,"destination",t,{destId:n,type:o}))(o,a)}function ke(e,t,n,o){const s=Se(e,t,o);if(n.length)switch(t){case Q.Consent:!function(e,t,n){const o=n||e.consent,s=ve(e,Q.Consent);t.forEach(t=>{ye(e,t,Q.Consent)&&we(e,t,Q.Consent)&&(Object.keys(o).filter(e=>e in t).forEach(n=>{(0,H.tryCatch)(t[n],t=>le(e,"consent",t,{key:n}))(o,s)}),me(e,t,Q.Consent))})}(e,n,o);break;case Q.Ready:!function(e,t){if(!e.allowed)return;const n=ve(e,Q.Ready);t.forEach(t=>{(0,H.tryCatch)(t,t=>le(e,"ready",t))(void 0,n)})}(e,n);break;case Q.Run:!function(e,t){if(!e.allowed)return;const n=ve(e,Q.Run);t.forEach(t=>{(0,H.tryCatch)(t,t=>le(e,"run",t))(void 0,n)})}(e,n);break;case Q.Session:!function(e,t){if(!e.session)return;const n=ve(e,Q.Session);t.forEach(t=>{(0,H.tryCatch)(t,t=>le(e,"session",t))(e.session,n)})}(e,n);break;default:{const o=ve(e,t),r=pe(t);n.forEach(n=>{"function"==typeof n&&(r&&!ye(e,n,t)||r&&!we(e,n,t)||((0,H.tryCatch)(n,n=>le(e,"generic",n,{type:t}))(s,o),r&&me(e,n,t)))});break}}}function Se(e,t,n){switch(t){case Q.Consent:return n||e.consent;case Q.Session:return e.session;case Q.User:return n||e.user;case Q.Custom:return n||e.custom;case Q.Globals:return n||e.globals;case Q.Config:return n||e.config;default:return}}async function qe(e,t,n,o,s){if(!t.on)return!1;if(pe(o)&&!ye(e,t,o))return!1;if(pe(o)&&!we(e,t,o))return!1;const r=await(0,H.tryCatchAsync)(t.on,t=>le(e,"source",t,{sourceId:n,type:o}))(o,s);return pe(o)&&me(e,t,o),!1===r}function Ie(e,t,n,o){if(!Number.isFinite(n.max)||n.max<=0)throw new Error(`pushBounded: max must be > 0 (got ${n.max})`);if("dropNewest"===(n.onOverflow??"dropOldest"))return e.length>=n.max?(o&&o([t]),{appended:!1,dropped:1}):(e.push(t),{appended:!0,dropped:0});const s=[];for(;e.length>=n.max;)s.push(e.shift());return e.push(t),s.length>0&&o&&o(s),{appended:!0,dropped:s.length}}var Oe=new WeakMap;function Ce(e,t,n,o){Oe.get(e)||(Oe.set(e,!0),t.warn(n,o))}function xe(e){Oe.delete(e)}var je=Object.freeze({batched:!0});function Ae(e){return e===je}function Te(e){return void 0===e?{}:"number"==typeof e?{wait:e}:{wait:e.wait,size:e.size,age:e.age}}function De(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 Ee(e,t,n,o){e.dropped[t]||(e.dropped[t]={});const s=e.dropped[t];return s[n]=(s[n]??0)+o,s[n]}function Me(e,t,n){if(!e)return[];if(Array.isArray(e)&&e.every(e=>"string"==typeof e))return Z(e,t);if("string"==typeof e)return Z(e,t);const o=(0,$.getNextSteps)(e,(0,$.buildCacheContext)(n));return 0===o.length?[]:1===o.length?Z(o[0],t):Z(o,t)}async function ze(e,t,n={},o){const{allowed:s,consent:r,globals:i,user:a}=e;if(!s)return _e({ok:!1});if(t){const n=e.config.queueMax;if(void 0===n)throw new Error("Collector.Config.queueMax is undefined; defaults must be seeded by collector()");const o=Ie(e.queue,t,{max:n});if(o.dropped>0){const t=Ee(e.status,(0,$.stepId)("collector"),"queue",o.dropped);Ce(e.queue,e.logger,"collector.queue overflow; oldest events dropped",{buffer:"queue",cap:n,droppedCount:t})}else e.queue.length<n&&xe(e.queue);e.status.in++}o||(o=e.destinations);const c=e.transformers?Y(e.transformers):{},u=await Promise.all(Object.entries(o||{}).map(async([o,s])=>{if(s.config.disabled)return{id:o,destination:s,skipped:!0};let u=(s.queuePush||[]).map(e=>({...e,consent:r}));s.queuePush=[],t&&u.push((0,$.clone)(t));const l=n.ingest?{...n.ingest,_meta:{...n.ingest._meta,path:[...n.ingest._meta.path]}}:(0,$.createIngest)("unknown");if(!u.length&&!s.queueOn?.length)return{id:o,destination:s,skipped:!0};if(!u.length&&s.queueOn?.length){let t=!1;try{t=await Pe(e,s,o)}catch(t){e.status.failed++;const n=s.type||"unknown";e.logger.scope(n).error("destination init failed",{error:t instanceof Error?t.message:String(t)})}return{id:o,destination:s,skipped:!t}}const d=[],p=u.filter(t=>{const n=(0,$.getGrantedConsent)(s.config.consent,r,t.consent);if(n)return t.consent=n,d.push(t),!1;const i=J(e,{stepId:(0,$.stepId)("destination",o),stepType:"destination",phase:"skip",eventId:"string"==typeof t.id?t.id:"",now:Date.now()});return i.skipReason="consent",r&&(i.consent={...r}),s.config.consent&&(i.meta={required:{...s.config.consent}}),(0,$.emitStep)(e,i),!0});if(p.length>0){const t=s.queuePush,n=s.config.id||o,r={max:s.config.queueMax??1e3};let i=0;for(const e of p)i+=Ie(t,e,r).dropped;if(i>0){De(e,n);const o=Ee(e.status,(0,$.stepId)("destination",n),"queue",i);Ce(t,e.logger.scope(s.type||"unknown"),"destination.queuePush overflow; oldest events dropped",{buffer:"queuePush",destination:n,cap:r.max,droppedCount:o})}else t.length<r.max&&xe(t)}if(!d.length)return{id:o,destination:s,queue:u};let f,g,h=!1;try{h=await Pe(e,s,o)}catch(t){e.status.failed++;const n=s.type||"unknown";e.logger.scope(n).error("destination init failed",{error:t instanceof Error?t.message:String(t)})}if(!h)return{id:o,destination:s,queue:u};s.dlq||(s.dlq=[]);const m=Me(s.config.before,c,l),y=s.config.next,w=s.config?.cache,v=w?(0,$.compileCache)(w):void 0,b=v?W(v,e):void 0,k=s.config?.state?(0,$.compileState)(s.config.state):void 0,S=k?.filter(e=>"get"===e.mode),q=k?.filter(e=>"set"===e.mode);let I=0,O=0;return await Promise.all(d.map(async t=>{let r;if(t.globals=(0,$.assign)(i,t.globals),t.user=(0,$.assign)(a,t.user),v?.stop&&b){const e=(0,$.buildCacheContext)(l,t),n=await(0,$.checkCache)(v,b,e);if("HIT"===n?.status)return t;"MISS"===n?.status&&(r={key:n.key,ttl:n.rule.ttl})}let u=t,d=n.respond;if(m.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const s=await oe(e,e.transformers,m,t,l,n.respond,`destination.${o}.before`);if(null===s.event)return t;s.respond&&(d=s.respond),u=Array.isArray(s.event)?s.event[0]:s.event}if(v&&!v.stop&&b){const e=(0,$.buildCacheContext)(l,u),n=await(0,$.checkCache)(v,b,e);if("HIT"===n?.status)return t;"MISS"===n?.status&&(r={key:n.key,ttl:n.rule.ttl})}S&&S.length>0&&u&&(u=await(0,$.applyState)(S,t=>V(t,e),u,e));const p=Date.now();let h=!1;const w=await(0,$.tryCatchAsync)($e,t=>{const n=s.type||"unknown";e.logger.scope(n).error("Push failed",{error:t,event:u.name}),f=t,h=!0;const r=s.dlq,i=s.config.id||o,a={max:s.config.dlqMax??100},c=Ie(r,[u,t],a);if(c.dropped>0){De(e,i);const t=Ee(e.status,(0,$.stepId)("destination",i),"dlq",c.dropped);Ce(r,e.logger.scope(s.type||"unknown"),"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:i,cap:a.max,droppedCount:t})}else r.length<a.max&&xe(r)})(e,s,o,u,l,d);if(I+=Date.now()-p,r&&b&&void 0===s.config.mock&&(0,$.storeCache)(b,r.key,w??!0,r.ttl),!h&&!Ae(w)&&q&&q.length>0&&u&&(u=await(0,$.applyState)(q,t=>V(t,e),u,e)),void 0===w||Ae(w)||(g=w),Ae(w)&&O++,!h&&y){void 0!==w&&(l._response=w);const t=Me(y,c,l);if(t.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const n=await oe(e,e.transformers,t,u,l,d,`destination.${o}.next`);n.respond&&(d=n.respond)}}return t})),{id:o,destination:s,error:f,response:g,totalDuration:I,batchedCount:O,allowedCount:d.length}})),l={},d={},p={};for(const t of u){if(t.skipped)continue;const n=t.destination,o={type:n.type||"unknown",data:t.response};De(e,t.id);const s=e.status.destinations[t.id],r=Date.now();if(s.queuePushSize=n.queuePush?.length??0,s.dlqSize=n.dlq?.length??0,t.error)o.error=t.error,p[t.id]=o,s.failed++,s.lastAt=r,s.duration+=t.totalDuration||0,e.status.failed++;else if(t.queue&&t.queue.length)d[t.id]=o;else{const n=t.batchedCount??0,i=t.allowedCount??0;(Math.max(0,i-n)>0||0===i)&&(l[t.id]=o,s.count++,s.lastAt=r,s.duration+=t.totalDuration||0,e.status.out++)}}return _e({event:t,...Object.keys(l).length&&{done:l},...Object.keys(d).length&&{queued:d},...Object.keys(p).length&&{failed:p}})}async function Pe(e,t,n){if(t.init&&!t.config.init){const o=t.type||"unknown",s=e.logger.scope(o),r={collector:e,logger:s,id:n,config:t.config,env:Ne(t.env,t.config.env)};s.debug("init");const i=Date.now();let a;(0,$.emitStep)(e,J(e,{stepId:(0,$.stepId)("destination",n),stepType:"destination",phase:"init",eventId:"",now:i}));try{a=await(0,$.useHooks)(t.init,"DestinationInit",e.hooks,e.logger)(r)}catch(t){const o=Date.now(),s=J(e,{stepId:(0,$.stepId)("destination",n),stepType:"destination",phase:"error",eventId:"",now:o});throw s.durationMs=o-i,s.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},(0,$.emitStep)(e,s),t}if(!1===a)return a;if(t.config={...a||t.config,init:!0},t.queueOn?.length){const o=t.queueOn;t.queueOn=[];for(const{type:s,data:r}of o)be(e,t,n,s,r)}s.debug("init done")}return!0}async function $e(e,t,n,o,s,r){const{config:i}=t,a=await(0,$.processEventMapping)(o,i,e);if(a.ignore)return!1;const c=t.type||"unknown",u=e.logger.scope(c),l={collector:e,logger:u,id:n,config:i,data:a.data,rule:a.mapping,ingest:s,env:{...Ne(t.env,i.env),...r?{respond:r}:{}}};if(void 0!==i.mock)return u.debug("mock",{event:a.event.name}),i.mock;const d=a.mapping,p=void 0!==d?.batch,f=p?a.mappingKey||"* *":" batch-all";if((p||void 0!==i.batch)&&t.pushBatch&&void 0===i.mock){if(t.batches=t.batches||{},!t.batches[f]){const o={key:f,entries:[],events:[],data:[]},s=Te(d?.batch),r=Te(i.batch),a=s.wait??r.wait??3e4,c=s.size??r.size??1e3,l=s.age??r.age??3e4,g=Ne(t.env,i.env),h=(0,$.debounce)(async()=>{const o=t.batches[f],s=o.batched;if(0===s.entries.length)return;const r={key:s.key,entries:s.entries,events:s.events,data:s.data};s.entries=[],s.events=[],s.data=[];const a=r.entries[0],c={collector:e,logger:u,id:n,config:i,data:void 0,rule:o.isDefault?void 0:a.rule,ingest:a.ingest,env:{...g,...a.respond?{respond:a.respond}:{}}};u.debug("push batch",{events:r.entries.length});const l=t.config.id||n,d=De(e,l),p=Date.now(),h=J(e,{stepId:(0,$.stepId)("destination",n),stepType:"destination",phase:"flush",eventId:"",now:p});h.batch={size:r.entries.length,index:0},(0,$.emitStep)(e,h);const m=n=>{const o=t.dlq=t.dlq||[],s={max:t.config.dlqMax??100};let r=0;for(const e of n)r+=Ie(o,e,s).dropped;if(r>0){const t=Ee(e.status,(0,$.stepId)("destination",l),"dlq",r);Ce(o,u,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:l,cap:s.max,droppedCount:t})}else o.length<s.max&&xe(o);d.failed+=n.length,d.dlqSize=o.length,e.status.failed+=n.length};let y=r.entries.length;const w=await(0,$.tryCatchAsync)((0,$.useHooks)(t.pushBatch,"DestinationPushBatch",e.hooks,e.logger),t=>{y=0;const o=Date.now(),s=J(e,{stepId:(0,$.stepId)("destination",n),stepType:"destination",phase:"error",eventId:"",now:o});s.durationMs=o-p,s.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},s.batch={size:r.entries.length,index:0},(0,$.emitStep)(e,s),m(r.entries.map(e=>[e.event,t])),u.error("Push batch failed",{error:t instanceof Error?t.message:String(t),entries:r.entries.length})})(r,c);if((0,$.isObject)(v=w)&&Array.isArray(v.failed)&&w.failed.length>0){const e=[],t=new Set;for(const n of w.failed){const o=r.entries[n.index];o&&!t.has(n.index)&&(t.add(n.index),e.push([o.event,n.error??new Error(`Push batch entry ${n.index} failed (no per-row error provided)`)]))}e.length>0&&(m(e),y=Math.max(0,r.entries.length-e.length),u.error("Push batch partial failure",{failed:e.length,delivered:y,entries:r.entries.length}))}var v;u.debug("push batch done"),d.inFlightBatch=Math.max(0,(d.inFlightBatch??0)-r.entries.length),y>0&&(d.count+=y,d.lastAt=Date.now(),e.status.out+=y)},{wait:a,size:c,age:l});t.batches[f]={batched:o,isDefault:!p,batchFn:()=>{h()},flush:async()=>{await h.flush()}}}const o=t.batches[f];o.batched.entries.push({event:a.event,ingest:s,respond:r,rule:d,data:a.data}),o.batched.events.push(a.event),(0,$.isDefined)(a.data)&&o.batched.data.push(a.data);const c=t.config.id||n,l=De(e,c);return l.inFlightBatch=(l.inFlightBatch??0)+1,o.batchFn(),je}{u.debug("push",{event:a.event.name});const o="string"==typeof a.event.id?a.event.id:"",s=Date.now(),r=J(e,{stepId:(0,$.stepId)("destination",n),stepType:"destination",phase:"in",eventId:o,now:s});a.mappingKey&&(r.mappingKey=a.mappingKey),a.event.consent&&(r.consent={...a.event.consent}),(0,$.emitStep)(e,r);try{const r=await(0,$.useHooks)(t.push,"DestinationPush",e.hooks,e.logger)(a.event,l),i=Date.now(),c=J(e,{stepId:(0,$.stepId)("destination",n),stepType:"destination",phase:"out",eventId:o,now:i});return c.durationMs=i-s,c.outEvent=r,a.mappingKey&&(c.mappingKey=a.mappingKey),(0,$.emitStep)(e,c),u.debug("push done"),r}catch(t){const r=Date.now(),i=J(e,{stepId:(0,$.stepId)("destination",n),stepType:"destination",phase:"error",eventId:o,now:r});throw i.durationMs=r-s,i.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},a.mappingKey&&(i.mappingKey=a.mappingKey),(0,$.emitStep)(e,i),t}}}function _e(e){return{ok:!e?.failed,...e}}function He(e){const{code:t,config:n={},env:o={},cache:s,state:r}=e,{config:i}=X(e,"before"),{config:a}=X({...e,config:i},"next"),c={...t.config,...n,...a};s&&(c.cache=s),void 0!==r&&void 0===c.state&&(c.state=r);const u=Ne(t.env,o);return{...t,config:c,env:u}}function Ne(e,t){return e||t?t?e&&(0,$.isObject)(e)&&(0,$.isObject)(t)?{...e,...t}:t:e:{}}async function Re(e,t,n){const o=Object.entries(e).map(async([e,o])=>{const s=o.destroy;if(!s)return;const r=o.type||"unknown",i=n.scope(r),a={id:e,config:o.config,env:o.env??{},logger:i};let c;try{await Promise.race([s(a),new Promise((n,o)=>{c=setTimeout(()=>o(new Error(`${t} '${e}' destroy timed out`)),5e3)})])}catch(n){i.error(`${t} '${e}' destroy failed: ${n}`)}finally{c&&clearTimeout(c)}});await Promise.allSettled(o)}function Ge(e,t){e.stateVersion++,e.cellVersion[t]=e.stateVersion}async function Be(e,t,n){let o,s,r=!1;const i=function(e){return e.cascade?()=>{}:(e.cascade={counts:new WeakMap},()=>{e.cascade=void 0})}(e);try{return await async function(){switch(t){case Q.Config:(0,B.isObject)(n)&&((0,G.assign)(e.config,n,{shallow:!1}),s=n,r=!0);break;case Q.Consent:if((0,B.isObject)(n)){const{update:t}=function(e,t){const n={};return Object.entries(t).forEach(([e,t])=>{n[e]=!!t}),e.consent=(0,z.assign)(e.consent,n),{update:n}}(e,n);Ge(e,Q.Consent),s=t,r=!0}break;case Q.Custom:(0,B.isObject)(n)&&(e.custom=(0,G.assign)(e.custom,n),Ge(e,Q.Custom),s=n,r=!0);break;case Q.Destination:(0,B.isObject)(n)&&"code"in n&&(0,B.isObject)(n.code)&&(o=await async function(e,t){const{code:n,config:o={},env:s={},before:r,next:i,cache:a,state:c}=t;if(!(0,$.isFunction)(n.push))return _e({ok:!1,failed:{invalid:{type:"invalid",error:"Destination code must have a push method"}}});const u=o||{init:!1};let l=r?{...u,before:r}:{...u};i&&(l={...l,next:i}),a&&(l={...l,cache:a}),void 0!==c&&void 0===l.state&&(l={...l,state:c});let d=l.id;if(!d)do{d=(0,$.getId)(5,"abcdefghijklmnopqrstuvwxyz")}while(e.destinations[d]||e.pending.destinations[d]);if(l.require?.length){e.pending.destinations[d]=t,await ue(e);const n=e.destinations[d];return n?ze(e,void 0,{},{[d]:n}):_e({ok:!0})}const p={...n,config:l,env:Ne(n.env,s)};return e.destinations[d]=p,!1!==p.config.queue&&(p.queuePush=[...e.queue]),ze(e,void 0,{},{[d]:p})}(e,n));break;case Q.Globals:(0,B.isObject)(n)&&(e.globals=(0,G.assign)(e.globals,n),Ge(e,Q.Globals),s=n,r=!0);break;case Q.Hook:if((0,B.isObject)(n)&&(0,G.isString)(n.name)&&(0,G.isFunction)(n.fn)){const{name:t,fn:o}=n;e.hooks[t]=o,s=n,r=!0}break;case Q.On:if((0,B.isObject)(n)&&(0,G.isString)(n.type)){const{type:t,rules:o}=n;await async function(e,t,n){const o=e.on,s=o[t]||[],r=(0,_.isArray)(n)?n:[n];r.forEach(e=>{s.push(e)}),o[t]=s,ke(e,t,r)}(e,t,o)}break;case Q.Ready:r=!0;break;case Q.Run:o=await async function(e,t){return e.allowed=!0,e.timing=Date.now(),t&&(t.consent&&(e.consent=(0,G.assign)(e.consent,t.consent),Ge(e,Q.Consent)),t.user&&(e.user=(0,G.assign)(e.user,t.user),Ge(e,Q.User)),t.globals&&(e.globals=(0,G.assign)(e.config.globalsStatic||{},t.globals),Ge(e,Q.Globals)),t.custom&&(e.custom=(0,G.assign)(e.custom,t.custom),Ge(e,Q.Custom))),Object.values(e.destinations).forEach(e=>{e.queuePush=[]}),e.queue=[],e.round++,await ue(e),await async function(e){for(const t of de){if(!fe(e,t))continue;const n=Se(e,t);ke(e,t,e.on[t]||[]);for(const[o,s]of Object.entries(e.sources))ae(s)&&await qe(e,s,o,t,n)}}(e),await ze(e)}(e,n),r=!0;break;case Q.Session:r=!0;break;case Q.Shutdown:e.hasShutdown||(e.hasShutdown=!0,await async function(e){const t=e.logger;await Re(e.sources,"source",t),await async function(e,t){const n=Object.entries(e).flatMap(([e,n])=>{const o=n.batches;if(!o)return[];const s=t.scope(n.type||"destination");return Object.values(o).map(async t=>{let n;try{await Promise.race([t.flush(),new Promise((t,o)=>{n=setTimeout(()=>o(new Error(`destination '${e}' batch flush timed out`)),5e3)})])}catch(t){s.error(`destination '${e}' batch flush failed: ${t}`)}finally{n&&clearTimeout(n)}})});await Promise.allSettled(n)}(e.destinations,t),await Re(e.destinations,"destination",t),await Re(e.transformers,"transformer",t),await Re(e.stores,"store",t)}(e));break;case Q.User:(0,B.isObject)(n)&&((0,G.assign)(e.user,n,{shallow:!1}),Ge(e,Q.User),s=n,r=!0)}return r&&(await async function(e,t,n,o){e.seenEvents.add(String(t));let s=n||[];n||(s=e.on[t]||[]);const r=Se(e,t,o);let i=!1;for(const[n,o]of Object.entries(e.sources)){if(o.config.require?.length){const e=o.config.require.indexOf(t);-1!==e&&o.config.require.splice(e,1)}o.on&&(ae(o)?await qe(e,o,n,t,r)&&(i=!0):(o.queueOn=o.queueOn||[],o.queueOn.push({type:t,data:r})))}Object.entries(e.destinations).forEach(([n,o])=>{if(o.on){if(!o.config.init)return o.queueOn=o.queueOn||[],void o.queueOn.push({type:t,data:r});be(e,o,n,t,r)}});for(const[t,n]of Object.entries(e.sources))ae(n)&&n.queueOn?.length&&await ie(e,n,t);const a=Object.values(e.sources).some(e=>!ae(e)&&e.config.require?.length);return(Object.keys(e.pending.destinations).length>0||a)&&await ue(e),ke(e,t,s,o),!i}(e,t,void 0,s),o=await ze(e)),o||_e({ok:!0})}()}finally{i()}}function Fe(e,t){return{timing:Math.round((Date.now()-e.timing)/10)/100,source:{type:"collector",schema:"4",version:"4.2.0-next-1780690800063"},...t}}function Le(e,t){if(!t.name)throw new Error("Event name is required");const[n,o]=t.name.split(" ");if(!n||!o)throw new Error("Event name is invalid");const{timestamp:s=Date.now(),name:r=`${n} ${o}`,data:i={},context:a={},globals:c=e.globals,custom:u={},user:l=e.user,nested:d=[],consent:p=e.consent,id:f=(0,G.getSpanId)(),trigger:g="",entity:h=n,action:m=o,timing:y=0,source:w={type:"collector",schema:"4"}}=t;return{name:r,data:i,context:a,globals:c,custom:u,user:l,nested:d,consent:p,id:f,trigger:g,entity:h,action:m,timestamp:s,timing:y,source:w}}function Ue(e,t){const n=(0,F.useHooks)(async(n,o={})=>await(0,F.tryCatchAsync)(async()=>{const s=Date.now(),{id:r,ingest:i,respond:a,mapping:c,preChain:u,include:l,exclude:d}=o;let p=a,f=n;const g=l||d?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,l,d):void 0,h=i??(0,F.createIngest)(r||"unknown");if(c){const t=await(0,F.processEventMapping)(f,c,e);if(t.ignore)return _e({ok:!0});if(c.consent&&!(0,F.getGrantedConsent)(c.consent,e.consent,t.event.consent))return _e({ok:!0});f=t.event}if(u?.length&&e.transformers&&Object.keys(e.transformers).length>0){const n=await oe(e,e.transformers,u,f,h,p,r?`source.${r}.next`:void 0);if(null===n.event)return _e({ok:!0});if(n.stopped)return n.respond&&(p=n.respond),_e({ok:!0});if(n.respond&&(p=n.respond),Array.isArray(n.event)){const o=await Promise.all(n.event.map(async n=>{const o=t(n),s=Le(e,o);return ze(e,s,{id:r,ingest:h,respond:p},g)}));if(r){e.status.sources[r]||(e.status.sources[r]={count:0,duration:0});const t=e.status.sources[r];t.count+=n.event.length,t.lastAt=Date.now(),t.duration+=Date.now()-s}return o[0]??_e({ok:!0})}f=n.event}const m=function(e,t){return Le(e,Fe(e,t))}(e,f),y=await ze(e,m,{id:r,ingest:h,respond:p},g);if(r){e.status.sources[r]||(e.status.sources[r]={count:0,duration:0});const t=e.status.sources[r];t.count++,t.lastAt=Date.now(),t.duration+=Date.now()-s}return y},t=>{if(t instanceof F.FatalError)throw t;return e.status.failed++,e.logger.error("push failed",{event:n,ingest:o.ingest,error:t}),_e({ok:!1})})(),"Push",e.hooks,e.logger);return async(t,o)=>{const s="string"==typeof t.id?t.id:"",r=Date.now();(0,F.emitStep)(e,J(e,{stepId:"collector.push",stepType:"collector",phase:"in",eventId:s,now:r}));try{const i=await n(t,o),a=Date.now(),c=J(e,{stepId:"collector.push",stepType:"collector",phase:"out",eventId:s,now:a});return c.durationMs=a-r,c.outEvent=i,(0,F.emitStep)(e,c),i}catch(t){const n=Date.now(),o=J(e,{stepId:"collector.push",stepType:"collector",phase:"error",eventId:s,now:n});throw o.durationMs=n-r,o.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},(0,F.emitStep)(e,o),t}}}function Ke(e={}){const t=e.maxEntries??1e4,n=e.lowWaterMark??.8,o=e.sweepIntervalMs??6e4,s=Math.floor(t*n),r=new Map,i={hits:0,misses:0,populates:0,writes:0,deletes:0,evictions_entries:0,evictions_ttl:0};let a;return o>0&&(a=setInterval(function(){const e=Date.now();let t=0;for(const[n,o]of r)void 0!==o.expires&&o.expires<=e&&(r.delete(n),t++);i.evictions_ttl+=t},o),a&&"function"==typeof a.unref&&a.unref()),{type:"memory",config:{},get(e){const t=r.get(e);if(t)return void 0!==t.expires&&t.expires<=Date.now()?(r.delete(e),i.evictions_ttl++,void i.misses++):(r.delete(e),r.set(e,t),i.hits++,t.value);i.misses++},set(e,n,o){const a=!r.has(e);a||r.delete(e),r.set(e,{value:n,expires:void 0!==o?Date.now()+o:void 0}),i.writes++,a&&i.populates++,r.size>t&&function(){if(r.size<=t)return;const e=r.size-s;let n=0;for(const t of r.keys()){if(n>=e)break;r.delete(t),n++}i.evictions_entries+=n}()},delete(e){r.delete(e)&&i.deletes++},get counters(){return{...i}},destroy(){void 0!==a&&(clearInterval(a),a=void 0),r.clear()}}}function Qe(e,t){const{cacheConfig:n,cacheStore:o,namespace:s,logger:r,storeId:i,collector:a}=t,c=(e,t)=>{if(!a)return;const n=J(a,{stepId:`store.${i}`,stepType:"store",phase:"in",eventId:"",now:Date.now()});n.meta={op:"cache",cached:"hit"===t,status:t,key:e},(0,K.emitStep)(a,n)},u={hits:0,misses:0,populates:0,writes:0,deletes:0,inflight_dedups:0},l=n.rules.map(e=>({match:e.match?(0,K.compileMatcher)(e.match):()=>!0,ttl:e.ttl})),d=e=>`${s}:${e}`;function p(e,t){const n=void 0===t?{key:e}:{key:e,value:t};return l.find(e=>e.match(n))}const f=new Map;return{type:e.type,config:e.config,setup:e.setup,get counters(){return{...u}},async get(t){const n=d(t),s=await o.get(n);if(void 0!==s)return u.hits++,c(t,"hit"),s;const r=f.get(n);if(r)return u.inflight_dedups++,c(t,"hit"),r;u.misses++,c(t,"miss");const i=(async()=>{try{const s=await e.get(t);if(void 0===s)return;const r=p(t,s);if(r)try{await o.set(n,s,1e3*r.ttl),u.populates++}catch(e){g("set",t,e)}return s}finally{f.delete(n)}})();return f.set(n,i),i},async set(t,n,s){u.writes++,await e.set(t,n,s);const r=p(t,n);if(r)try{await o.set(d(t),n,1e3*r.ttl)}catch(e){g("set",t,e)}},async delete(t){u.deletes++,await e.delete(t);try{await o.delete(d(t))}catch(e){g("delete",t,e)}}};function g(e,t,n){const o=`store-cache(${i}): cache ${e} failed for "${t}"; backing succeeded, continuing`;r?r.warn(o,{error:n}):console.warn(o,n)}}function Je(e,t,n){const o=`store.${n}`,s=(0,U.useHooks)(t.get,"StoreGet",e.hooks,e.logger),r=(0,U.useHooks)(t.set,"StoreSet",e.hooks,e.logger),i=(0,U.useHooks)(t.delete,"StoreDelete",e.hooks,e.logger);t.get=async t=>{const n=Date.now(),r=J(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:n});r.meta={op:"get",key:t},(0,U.emitStep)(e,r);try{const r=await s(t),i=Date.now(),a=J(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:i});return a.durationMs=i-n,a.meta={op:"get",key:t},(0,U.emitStep)(e,a),r}catch(s){const r=Date.now(),i=J(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:r});throw i.durationMs=r-n,i.meta={op:"get",key:t},i.error=s instanceof Error?{name:s.name,message:s.message}:{message:String(s)},(0,U.emitStep)(e,i),s}},t.set=async(t,n,s)=>{const i=Date.now(),a=J(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:i});a.meta={op:"set",key:t},(0,U.emitStep)(e,a);try{await r(t,n,s);const a=Date.now(),c=J(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:a});c.durationMs=a-i,c.meta={op:"set",key:t},(0,U.emitStep)(e,c)}catch(n){const s=Date.now(),r=J(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:s});throw r.durationMs=s-i,r.meta={op:"set",key:t},r.error=n instanceof Error?{name:n.name,message:n.message}:{message:String(n)},(0,U.emitStep)(e,r),n}},t.delete=async t=>{const n=Date.now(),s=J(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:n});s.meta={op:"delete",key:t},(0,U.emitStep)(e,s);try{await i(t);const s=Date.now(),r=J(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:s});r.durationMs=s-n,r.meta={op:"delete",key:t},(0,U.emitStep)(e,r)}catch(s){const r=Date.now(),i=J(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:r});throw i.durationMs=r-n,i.meta={op:"delete",key:t},i.error=s instanceof Error?{name:s.name,message:s.message}:{message:String(s)},(0,U.emitStep)(e,i),s}}}async function We(e){const t=(0,P.assign)({globalsStatic:{},sessionStatic:{},run:!0,queueMax:1e3},e,{merge:!1,extend:!1}),n={level:e.logger?.level,handler:e.logger?.handler},o=(0,P.createLogger)(n),s={...t.globalsStatic,...e.globals},r={allowed:!1,config:t,consent:e.consent||{},custom:e.custom||{},destinations:{},transformers:{},stores:{},globals:s,hooks:e.hooks||{},observers:new Set,logger:o,on:{},queue:[],round:0,stateVersion:0,cellVersion:{},delivery:new WeakMap,session:void 0,status:{startedAt:Date.now(),in:0,out:0,failed:0,sources:{},destinations:{},dropped:{}},timing:Date.now(),user:e.user||{},sources:{},pending:{destinations:{}},hasShutdown:!1,seenEvents:new Set,push:void 0,command:void 0};var i,a;r.push=Ue(r,e=>Fe(r,e)),r.command=(i=r,a=Be,(0,L.useHooks)(async(e,t,n)=>await(0,L.tryCatchAsync)(async()=>await a(i,e,t,n),n=>{if(n instanceof L.FatalError)throw n;return i.status.failed++,i.logger.error("command failed",{command:e,data:t,error:n}),_e({ok:!1})})(),"Command",i.hooks,i.logger));const c=e.stores||{};return r.stores=await async function(e,t={}){const n={};for(const[o,s]of Object.entries(t)){const{code:t,config:r={},env:i={}}=s,a=e.logger.scope("store").scope(o),c={collector:e,logger:a,id:o,config:r,env:i},u=await t(c);n[o]=u}const o=t,s=function(e){const t={};for(const n of Object.keys(e))t[n]="WHITE";const n=[],o=[];function s(r){const i=t[r];if("BLACK"===i)return;if("GRAY"===i){const e=o.indexOf(r),t=o.slice(-1===e?0:e).concat(r).join(" -> ");throw new Error(`Cycle in cache.store chain: ${t}`)}t[r]="GRAY",o.push(r);const a=e[r].cache?.store;if(void 0!==a){if(!(a in e))throw new Error(`Store "${r}" cache.store references "${a}", which is not declared in flow.stores`);s(a)}o.pop(),t[r]="BLACK",n.push(r)}for(const n of Object.keys(e))"WHITE"===t[n]&&s(n);return n}(o);for(const t of s){const s=o[t].cache;if(!s)continue;let r,i;void 0!==s.store?(r=n[s.store],i=s.store):(n.__cache||(n.__cache=Ke()),r=n.__cache,i="__cache");const a=s.namespace??t;e.logger.scope("store-cache").scope(t).info(`store "${t}" caches with namespace "${a}:" via ${i}`),n[t]=Qe(n[t],{storeId:t,cacheConfig:s,cacheStore:r,namespace:a,logger:e.logger.scope("store-cache").scope(t),collector:e})}for(const[t,o]of Object.entries(n))"__cache"!==t&&Je(e,o,t);return n}(r,c),function(e,t,n){const o=new Map;for(const[n,s]of Object.entries(e))t[n]&&o.set(s,t[n]);if(0!==o.size)for(const e of[n.transformers,n.destinations,n.sources])if(e)for(const t of Object.values(e))s(t.env);function s(e){if(e)for(const[t,n]of Object.entries(e))if("object"==typeof n&&null!==n){const s=o.get(n);s&&(e[t]=s)}}}(c,r.stores,e),r.stores.__cache||(r.stores.__cache=Ke()),r.destinations=await async function(e,t={}){const n={};for(const[o,s]of Object.entries(t))s.config?.require?.length?e.pending.destinations[o]=s:n[o]=He(s);return n}(r,e.destinations||{}),r.transformers=await async function(e,t={}){const n={};for(const[o,s]of Object.entries(t)){const{code:t,env:r={}}=s,i=(0,R.validateStepEntry)(s,"Transformer");if(!i.ok){e.logger.warn(`Transformer ${o} invalid (${i.code}): ${i.reason}. Skipping.`);continue}const{config:a}=X(s,"before"),{config:c}=X({...s,config:a},"next"),u=Object.keys(r).length>0?{...c,env:r}:c,{cache:l}=s,d=l?{...u,cache:l}:u,p=s.config?.state??s.state,f=void 0!==p&&void 0===d.state?{...d,state:p}:d,g=e.logger.scope("transformer").scope(o),h={collector:e,logger:g,id:o,ingest:(0,R.createIngest)(o),config:f,env:r},m=t??(e=>{const t=s.mapping;if(t){const n=[];if(void 0!==t.data&&n.push("data"),t.mapping)for(const[e,o]of Object.entries(t.mapping))if("object"==typeof o&&null!==o)for(const[t,s]of Object.entries(o)){if("object"!=typeof s||null===s)continue;const o=s;void 0!==o.data&&n.push(`mapping[${e}][${t}].data`),void 0!==o.silent&&n.push(`mapping[${e}][${t}].silent`)}return n.length>0&&e.collector.logger.warn(`Transformer ${o}: \`${n.join(", ")}\` ignored at transformer position (only event-mutating fields apply).`),{type:"pass",config:e.config,push:async n=>{const o=await(0,R.processEventMapping)(n,t,e.collector);return!o.ignore&&{event:o.event}}}}return{type:"pass",config:e.config,push:e=>({event:e})}}),y=await m(h);void 0!==s.before&&void 0===y.config?.before&&(y.config={...y.config??{},before:s.before}),void 0!==s.next&&void 0===y.config?.next&&(y.config={...y.config??{},next:s.next}),void 0!==p&&void 0===y.config?.state&&(y.config={...y.config??{},state:p}),n[o]=y}return n}(r,e.transformers||{}),r}async function Ve(e){e=e||{};const t=await We(e),n=(o=t,{type:"elb",config:{},push:async(e,t,n,s,r)=>{if("string"==typeof e&&e.startsWith("walker ")){const n=e.replace("walker ","");return o.command(n,t)}let i;if("string"==typeof e)i={name:e},t&&"object"==typeof t&&!Array.isArray(t)&&(i.data=t);else{if(!e||"object"!=typeof e)return _e({ok:!1});i=e,t&&"object"==typeof t&&!Array.isArray(t)&&(i.data={...i.data||{},...t})}return n&&"object"==typeof n&&(i.context=n),s&&Array.isArray(s)&&(i.nested=s),r&&"object"==typeof r&&(i.custom=r),o.push(i)}});var o;t.sources.elb=n,await async function(e,t={}){const n={};for(const[o,s]of Object.entries(t)){const t=await ce(e,o,s);if(!t)continue;const r=s.config?.require;t.config={...t.config,init:!1,...r?{require:[...r]}:{}},n[o]=t}Object.assign(e.sources,n);for(const t of Object.keys(n)){const n=e.sources[t];let o=!1;n.init&&await(0,N.tryCatchAsync)(n.init.bind(n),n=>{if(n instanceof N.FatalError)throw n;o=!0,e.status.failed++,e.logger.scope("source").error("source init failed",{sourceId:t,error:n})})(),o||(n.config.init=!0,ae(n)&&await ie(e,n,t))}return await ue(e),n}(t,e.sources||{});const{consent:s,user:r,globals:i,custom:a}=e;s&&await t.command("consent",s),r&&await t.command("user",r),i&&await t.command("globals",i),a&&await t.command("custom",a),t.config.run&&await t.command("run");let c=n.push;const u=Object.values(t.sources).filter(e=>"elb"!==e.type),l=u.find(e=>e.config.primary);return l?c=l.push:u.length>0&&(c=u[0].push),{collector:t,elb:c}}var Ye=async e=>{let t;return{get flow(){return t},trigger:()=>async n=>{if(!t){const n=await Ve(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 s={awsRequestId:`test-${Date.now()}`},r=o.push,i=await r(n,s);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 Xe(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 Ze={};r(Ze,{createTrigger:()=>pt,env:()=>et,step:()=>it});var et={};r(et,{push:()=>st,simulation:()=>rt});var tt=()=>{},nt={error:tt,warn:tt,info:tt,debug:tt,throw:e=>{throw"string"==typeof e?new Error(e):e},json:tt,scope:()=>nt},ot=()=>()=>Promise.resolve({ok:!0}),st={get push(){return ot()},get command(){return ot()},get elb(){return ot()},logger:nt},rt=["AWS.SQSClient"],it={};r(it,{decoderText:()=>ut,malformedJson:()=>lt,orderComplete:()=>ct,pageView:()=>at});var at={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"]]},ct={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"]]},ut={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"]]},lt={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 dt(e){if("object"!=typeof e||null===e)return!1;const t=e;return"sqs"===t.type&&"function"==typeof t.push}var pt=async e=>{let t;return{get flow(){return t},trigger:()=>async n=>{if(!t){const n=await Ve(e);t={collector:n.collector,elb:n.elb}}const o=function(e){for(const t of Object.values(e.sources??{}))if(dt(t))return t}(t.collector);if(!o)throw new Error("sqs source not registered in collector, ensure it is configured in sources");const s={MessageId:n.MessageId,Body:n.Body,ReceiptHandle:n.ReceiptHandle,Attributes:n.Attributes,MessageAttributes:n.MessageAttributes},r=await o.push(s),i=[];return r&&"object"==typeof r&&(r.acked&&i.push(["message.ack",n.MessageId]),r.nacked&&i.push(["message.nack",n.MessageId])),i}}};//# sourceMappingURL=dev.js.map
package/dist/dev.mjs CHANGED
@@ -1 +1 @@
1
- var e=Object.defineProperty,t=(t,n)=>{for(var o in n)e(t,o,{get:n[o],enumerable:!0})},n={};t(n,{CorsOptionsSchema:()=>c,CorsOrigin:()=>i,HttpMethod:()=>a,SettingsSchema:()=>u,settings:()=>l,sqsSettings:()=>y,sqsSetup:()=>w});import{zodToSchema as o}from"@walkeros/core/dev";import{z as s}from"@walkeros/core/dev";import{z as r}from"@walkeros/core/dev";var a=r.enum(["GET","POST","PUT","PATCH","DELETE","OPTIONS","HEAD"]),i=r.union([r.string(),r.array(r.string()),r.literal("*")]),c=r.object({origin:i.describe("Allowed origins (* for all, URL string, or array of URLs)").optional(),methods:r.array(a).describe("Allowed HTTP methods").optional(),headers:r.array(r.string()).describe("Allowed request headers").optional(),credentials:r.boolean().describe("Allow credentials (cookies, authorization headers)").optional(),maxAge:r.number().int().positive().describe("Preflight cache duration in seconds").optional()}),u=s.object({cors:s.union([s.boolean(),c]).describe("CORS configuration: false = disabled, true = allow all origins, object = custom configuration").default(!0),timeout:s.number().int().positive().max(9e5).describe("Request timeout in milliseconds (max: 900000 for Lambda)").default(3e4),enablePixelTracking:s.boolean().describe("Enable GET requests with 1x1 transparent GIF response for pixel tracking").default(!0),healthPath:s.string().describe("Health check endpoint path (e.g., /health)").default("/health")}),l=o(u);import{zodToSchema as d}from"@walkeros/core/dev";import{z as f}from"@walkeros/core/dev";var p=f.object({queueName:f.string().min(1).describe("SQS queue short name (like walkeros-events). Required for both setup and runtime poll."),region:f.string().describe("AWS region (like eu-central-1). Default: eu-central-1.").optional(),queueUrl:f.string().url().describe("Optional pre-resolved queue URL. When set, init skips the GetQueueUrl lookup.").optional(),client:f.any().describe("Pre-configured AWS SQSClient instance. Bypasses construction when supplied.").optional(),config:f.any().describe("AWS SDK SQSClientConfig (credentials, endpoint overrides, retries).").optional(),decoder:f.enum(["json","text","raw"]).describe("Decoder for the message body. json (default) parses JSON, text forwards UTF-8, raw forwards a Buffer.").optional(),maxMessages:f.number().int().min(1).max(10).describe("SQS receive batch size. Cap 10. Default: 10.").optional(),waitTimeSeconds:f.number().int().min(0).max(20).describe("Long-poll duration in seconds. Cap 20. Default: 20.").optional(),visibilityTimeout:f.number().int().nonnegative().describe("Per-receive visibility timeout override. Default: queue-configured value.").optional(),shutdownTimeoutMs:f.number().int().positive().describe("Graceful shutdown timeout in milliseconds. Default: 30000. After this window, destroy() force-closes.").optional(),onPushError:f.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 g}from"@walkeros/core/dev";var h=g.record(g.string(),g.string()),m=g.object({region:g.string().min(1).describe("AWS region.").optional(),fifoQueue:g.boolean().describe("FIFO queue with content-based deduplication. Auto-appends .fifo suffix to the queue name.").optional(),visibilityTimeoutSeconds:g.number().int().nonnegative().describe("Visibility timeout in seconds. Default: 30.").optional(),messageRetentionSeconds:g.number().int().positive().describe("Message retention period in seconds. Default: 345600 (4 days).").optional(),maximumMessageSize:g.number().int().min(1024).max(262144).describe("Max message size in bytes. Default: 262144 (256 KB).").optional(),kmsMasterKeyId:g.string().describe("KMS key alias or ID for at-rest encryption.").optional(),deadLetterQueue:g.object({arn:g.string().describe("ARN of an existing DLQ. Mutually exclusive with create: true.").optional(),create:g.boolean().describe("Create a sibling DLQ named <queueName>-dlq. Default: false.").optional(),maxReceiveCount:g.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:h.describe("Tags applied to the queue (and inherited by an auto-created DLQ).").optional(),subscribeToSnsTopic:g.object({topicArn:g.string().min(1).describe("Topic ARN to subscribe to."),rawMessageDelivery:g.boolean().describe("Deliver SNS messages without the SNS envelope.").optional(),filterPolicy:g.record(g.string(),g.unknown()).describe("SNS filter policy applied at subscription level.").optional()}).describe("Optional SNS topic subscription. Creates the subscription and the matching queue policy.").optional()}),y=d(p),w=d(m),v={};t(v,{createTrigger:()=>tn,env:()=>b,step:()=>O,trigger:()=>nn});var b={};t(b,{push:()=>I});var k=()=>()=>Promise.resolve({ok:!0}),S=()=>{},q={error:S,warn:S,info:S,debug:S,throw:e=>{throw"string"==typeof e?new Error(e):e},json:S,scope:()=>q},I={get push(){return k()},get command(){return k()},get elb(){return k()},logger:q},O={};t(O,{apiGatewayV1Post:()=>C,lambdaGet:()=>A,lambdaPost:()=>x});var x={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({event:"page view",data:{title:"Home"}}),isBase64Encoded:!1},out:[["elb",{name:"page view",data:{title:"Home"}}]]},C={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({event:"page view",data:{title:"Home"}}),isBase64Encoded:!1},out:[["elb",{name:"page view",data:{title:"Home"}}]]},A={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"}'}]]};import{assign as D}from"@walkeros/core";import{assign as T,createLogger as j}from"@walkeros/core";import{assign as E,buildCacheContext as M,clone as P,compileCache as $,checkCache as _,storeCache as R,createIngest as H,debounce as G,emitStep as N,getId as B,getGrantedConsent as z,getNextSteps as F,isDefined as L,isFunction as U,isObject as K,processEventMapping as Q,stepId as J,tryCatchAsync as W,useHooks as V,compileState as Y,applyState as X}from"@walkeros/core";import{emitStep as Z}from"@walkeros/core";import{isArray as ee,FatalError as te}from"@walkeros/core";import{tryCatch as ne,tryCatchAsync as oe}from"@walkeros/core";import{createIngest as se,FatalError as re,getMappingValue as ae,tryCatchAsync as ie,getNextSteps as ce,compileCache as ue,checkCache as le,storeCache as de,applyUpdate as fe,buildCacheContext as pe,compileState as ge,applyState as he}from"@walkeros/core";import{createIngest as me,emitStep as ye,FatalError as we,isObject as ve,stepId as be,tryCatchAsync as ke,useHooks as Se,getNextSteps as qe,compileCache as Ie,checkCache as Oe,storeCache as xe,buildCacheContext as Ce,validateStepEntry as Ae,processEventMapping as De,compileState as Te,applyState as je}from"@walkeros/core";import{assign as Ee,getSpanId as Me,isFunction as Pe,isString as $e}from"@walkeros/core";import{isObject as _e}from"@walkeros/core";import{createIngest as Re,emitStep as He,FatalError as Ge,getGrantedConsent as Ne,processEventMapping as Be,tryCatchAsync as ze,useHooks as Fe}from"@walkeros/core";import{FatalError as Le,useHooks as Ue,tryCatchAsync as Ke}from"@walkeros/core";import{emitStep as Qe,useHooks as Je}from"@walkeros/core";import{compileMatcher as We,emitStep as Ve}from"@walkeros/core";var Ye={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 Xe(e,t){const n=e.status.startedAt;return{flowId:"default",stepId:t.stepId,stepType:t.stepType,phase:t.phase,eventId:t.eventId,timestamp:new Date(t.now).toISOString(),elapsedMs:t.now-n}}function Ze(e,t){return e.storeId&&t.stores[e.storeId]?t.stores[e.storeId]:t.stores.__cache}function et(e,t){return e?t.stores[e]:t.stores.__cache}function tt(e){const t={};for(const[n,o]of Object.entries(e)){const e=o.config?.next;"string"==typeof e||Array.isArray(e)&&e.every(e=>"string"==typeof e)?t[n]={next:e}:t[n]={}}return t}function nt(e,t){const n=e.config||{},o=e[t];return void 0!==o?{config:{...n,[t]:o},chainValue:o}:{config:n,chainValue:void 0}}function ot(e,t={}){if(!e)return[];if(Array.isArray(e))return e;const n=[],o=new Set;let s=e;for(;s&&t[s]&&!o.has(s);){o.add(s),n.push(s);const e=t[s].next;if(Array.isArray(e)){n.push(...e);break}s=e}return n}async function st(e,t,n){if(t.init&&!t.config.init){const o=t.type||"unknown",s=e.logger.scope(`transformer:${o}`),r={collector:e,logger:s,id:n,ingest:me(n),config:t.config,env:ct(t.config.env)};s.debug("init");const a=await Se(t.init,"TransformerInit",e.hooks,e.logger)(r);if(!1===a)return!1;t.config={...a||t.config,env:a?.env||t.config.env,init:!0},s.debug("init done")}return!0}async function rt(e,t,n,o,s,r){const a=t.type||"unknown",i=e.logger.scope(`transformer:${a}`),c={collector:e,logger:i,id:n,ingest:s,config:t.config,env:{...ct(t.config.env),...r?{respond:r}:{}}};i.debug("push",{event:o.name});const u="string"==typeof o.id?o.id:"",l=Date.now(),d=Xe(e,{stepId:be("transformer",n),stepType:"transformer",phase:"in",eventId:u,now:l});ye(e,d);try{const s=await Se(t.push,"TransformerPush",e.hooks,e.logger)(o,c),r=Date.now(),a=Xe(e,{stepId:be("transformer",n),stepType:"transformer",phase:"out",eventId:u,now:r});return a.durationMs=r-l,a.outEvent=s,ye(e,a),i.debug("push done"),s}catch(t){const o=Date.now(),s=Xe(e,{stepId:be("transformer",n),stepType:"transformer",phase:"error",eventId:u,now:o});throw s.durationMs=o-l,s.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},ye(e,s),t}}function at(e,t){return e?{...e,_meta:{...e._meta,path:[...e._meta.path]}}:me(t)}async function it(e,t,n,o,s,r,a){s||(s=me(n[0]??"chain")),a&&s._meta&&(s._meta.chainPath=a);let i=o,c=r;for(const o of n){const r=t[o];if(!r){e.logger.warn(`Transformer not found: ${o}`);continue}if(s&&s._meta&&s._meta.path.length>256)return e.logger.error(`Max path length exceeded at ${o}`),{event:null,respond:c};if(s&&s._meta&&(s._meta.hops++,s._meta.path.push(o)),!await ke(st,t=>{if(t instanceof we)throw t;return e.status.failed++,e.logger.scope(`transformer:${r.type||"unknown"}`).error("transformer init failed",{transformer:o,error:t}),!1})(e,r,o))return{event:null,respond:c};if(a&&void 0!==r.config?.chainMocks?.[a]){const t=r.config.chainMocks[a];e.logger.scope(`transformer:${r.type||"unknown"}`).debug("chainMock",{chain:a}),i=t;continue}if(void 0!==r.config?.mock){e.logger.scope(`transformer:${r.type||"unknown"}`).debug("mock"),i=r.config.mock;continue}if(r.config?.disabled)continue;const u=r.config?.cache,l=u?Ie(u):void 0,d=l?Ze(l,e):void 0,f=r.config?.state?Te(r.config.state):void 0,p=f?.filter(e=>"get"===e.mode),g=f?.filter(e=>"set"===e.mode),h=async t=>g&&0!==g.length?je(g,t=>et(t,e),t,e):t;let m;if(l&&d){const e=Ce(s,i),t=await Oe(l,d,e);if("HIT"===t?.status&&t.value){if(i=t.value,l.stop)return{event:i,respond:c,stopped:!0};continue}"MISS"===t?.status&&(m={key:t.key,ttl:t.rule.ttl})}const y=r.config.before;if(y){const n=qe(y,Ce(s,i));if(1===n.length){const o=ot(n[0],tt(t));if(o.length>0){const n=await it(e,t,o,i,s,c,a);if(null===n.event)return{event:null,respond:n.respond??c};if(n.stopped)return{event:Array.isArray(n.event)?n.event[0]:n.event,respond:n.respond??c,stopped:!0};n.respond&&(c=n.respond),i=Array.isArray(n.event)?n.event[0]:n.event}}else n.length>1&&await Promise.all(n.map(n=>ke(it,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,ot(n,tt(t)),i,at(s,n),void 0,a)))}p&&p.length>0&&(i=await je(p,t=>et(t,e),i,e));const w=await ke(rt,t=>(e.logger.scope(`transformer:${r.type||"unknown"}`).error("Push failed",{error:t}),!1))(e,r,o,i,s,c);if(!1===w)return{event:null,respond:c};if(Array.isArray(w)){const r=n.slice(n.indexOf(o)+1),u=await Promise.all(w.map(async n=>{const o=await h(n.event||i),u=at(s,"unknown");if(n.next){const s=qe(n.next,Ce(u,o));if(0===s.length)return{event:o,respond:c};if(1===s.length){const n=ot(s[0],tt(t));return n.length>0?it(e,t,n,o,u,c,a):{event:o,respond:c}}return(await Promise.all(s.map(n=>ke(it,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,ot(n,tt(t)),o,at(u,n),void 0,a)))).map(e=>({event:e.event,respond:void 0}))}return r.length>0?it(e,t,r,o,u,c,a):{event:o,respond:c}}));let l=c;const d=[];for(const e of u.flat())if(null!==e)if(e&&"object"==typeof e&&"event"in e){const t=e;if(t.respond&&(l=t.respond),null===t.event)continue;Array.isArray(t.event)?d.push(...t.event):d.push(t.event)}else d.push(e);return 0===d.length?{event:null,respond:l}:1===d.length?{event:d[0],respond:l}:{event:d,respond:l}}if(w&&"object"==typeof w){const{event:n,respond:o,next:r}=w;if(o&&(c=o),void 0!==r){const o=await h(n||i),u=qe(r,Ce(s,o));if(0===u.length){i=o;continue}if(1===u.length){const n=ot(u[0],tt(t));return n.length>0?it(e,t,n,o,s,c,a):(e.logger.warn(`Branch target not found: ${JSON.stringify(r)}`),{event:null,respond:c})}return await Promise.all(u.map(n=>ke(it,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,ot(n,tt(t)),o,at(s,n),void 0,a))),{event:null,respond:void 0}}n&&(i=n)}g&&g.length>0&&(i=await je(g,t=>et(t,e),i,e)),m&&d&&xe(d,m.key,i,m.ttl);const v=r.config.next,b="string"==typeof v||Array.isArray(v)&&v.every(e=>"string"==typeof e),k=void 0!==v&&!b;if((!w||"object"==typeof w&&!w.next)&&k){const n=qe(r.config.next,Ce(s,i));if(1===n.length){const o=ot(n[0],tt(t));return o.length>0?it(e,t,o,i,s,c,a):{event:i,respond:c}}return n.length>1?(await Promise.all(n.map(n=>ke(it,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,ot(n,tt(t)),i,at(s,n),void 0,a))),{event:null,respond:void 0}):{event:i,respond:c}}}return{event:i,respond:c}}function ct(e){return e&&ve(e)?e:{}}function ut(e){return"string"==typeof e||!(!Array.isArray(e)||!e.every(e=>"string"==typeof e))}async function lt(e,t,n){if(!t.on||!t.queueOn?.length)return;const o=t.queueOn;t.queueOn=[];const s=n||t.config?.id||"unknown";for(const{type:n,data:r}of o)mt(n)&&!kt(e,t,n)||(await ie(t.on,t=>{if(t instanceof re)throw t;e.status.failed++,e.logger.scope("source").error("source on flush failed",{sourceId:s,type:n,error:t})})(n,r),mt(n)&&bt(e,t,n))}function dt(e){return Boolean(e.config.init)&&!e.config.require?.length}async function ft(e,t,n){const{code:o,config:s={},env:r={},primary:a,next:i,before:c,cache:u}=n,l=s.state??n.state,d=l?ge(l):void 0,f=u,p=f?ue({...f,stop:f.stop??!0}):void 0,g=ut(i)?ot(i,tt(e.transformers)):void 0,h=ut(c)?ot(c,tt(e.transformers)):void 0,m=r.push,y=m??e.push,w=Boolean(m),v=async(n,o,r)=>{let a;const u=h??(void 0!==c?(()=>{const t=ce(c,pe(r.ingest));return 0===t.length?[]:ot(1===t.length?t[0]:t,tt(e.transformers))})():[]);let l=[n];if(u.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const o=await it(e,e.transformers,u,n,r.ingest,r.respond,`source.${t}.before`);if(null===o.event)return{ok:!0};if(o.stopped)return o.respond&&(r.respond=o.respond),{ok:!0};o.respond&&(r.respond=o.respond),l=Array.isArray(o.event)?o.event:[o.event]}if(p){const t=Ze(p,e);if(t){const n=pe(r.ingest),o=await le(p,t,n);if(o){if("HIT"===o.status&&void 0!==o.value&&p.stop){let t=o.value;return o.rule.update&&(t=await fe(t,o.rule.update,{...n,cache:{status:"HIT"}},e)),r.respond?.(t),{ok:!0}}if("MISS"===o.status&&p.stop&&r.respond){const s=r.respond,i=o.rule.update,c={...n,cache:{status:"MISS"}},u=o.key,l=o.rule.ttl,d=n=>{de(t,u,n,l),i?a=(async()=>{const t=await fe(n,i,c,e);s(t)})():s(n)};r.respond=d}"MISS"!==o.status||p.stop||de(t,o.key,!0,o.rule.ttl)}}}const f=g?{kind:"single",preChain:g}:void 0!==i?(()=>{const t=ce(i,pe(r.ingest));return 0===t.length?{kind:"single",preChain:[]}:1===t.length?{kind:"single",preChain:ot(t[0],tt(e.transformers))}:{kind:"many",branches:t.map(t=>ot(t,tt(e.transformers)))}})():{kind:"single",preChain:[]};!w&&d&&d.length>0&&(l=await Promise.all(l.map(t=>he(d,t=>et(t,e),t,e))));let m={ok:!0};for(const n of l)"many"===f.kind?(await Promise.all(f.branches.map((a,i)=>ie(async()=>w?y(n):y(n,{...o,id:t,ingest:at(r.ingest,`${t}.${i}`),respond:void 0,mapping:s,preChain:a}),t=>(e.logger.scope("source:many").error(`many branch ${i} failed`,{error:t}),{ok:!0}))())),m={ok:!0}):m=w?await y(n):await y(n,{...o,id:t,ingest:r.ingest,respond:r.respond,mapping:s,preChain:f.preChain});return a&&await a,m},b=async n=>{const o=se(t);if(!s.ingest||void 0===n)return o;const r=await ae(n,s.ingest,{collector:e});return{...o,...r,_meta:o._meta}},k=e.logger.scope("source").scope(t),S={command:e.command,sources:e.sources,elb:e.sources.elb.push,logger:k,...r,push:async(e,n={})=>{const o={ingest:se(t),respond:void 0};return v(e,n,o)}},q={collector:e,logger:k,id:t,config:s,env:S,withScope:async(e,t,n)=>{const o={ingest:await b(e),respond:t};return n({...S,push:(e,t={})=>v(e,t,o),ingest:o.ingest,respond:o.respond})}},I=await ie(o,n=>{if(n instanceof re)throw n;e.status.failed++,e.logger.scope("source").error("source factory failed",{sourceId:t,error:n})})(q);if(!I)return;const O=I.type||"unknown",x=e.logger.scope(O).scope(t);return S.logger=x,a&&(I.config={...I.config,primary:a}),I}async function pt(e){for(const[t,n]of Object.entries(e.sources)){if(dt(n))continue;const o=n.config.require;if(!o?.length)continue;const s=o.filter(t=>!wt(e,t));s.length!==o.length&&(n.config.require=s,dt(n)&&await lt(e,n,t))}for(const[t,n]of Object.entries(e.pending.destinations)){if(!e.pending.destinations[t]||e.destinations[t])continue;const o=n.config?.require;if(!o)continue;const s=o.filter(t=>!wt(e,t));if(n.config&&(n.config.require=s),s.length>0)continue;delete e.pending.destinations[t];const r=zt(n);!1!==r.config.queue&&(r.queuePush=[...e.queue]),e.destinations[t]=r}}function gt(e,t,n,o){if(n instanceof te)throw n;e.logger.scope("on").error("on callback failed",{kind:t,...o,error:n})}var ht=[Ye.Consent,Ye.User,Ye.Globals,Ye.Custom];function mt(e){return ht.includes(e)}function yt(e,t){switch(t){case Ye.Consent:return Object.keys(e.consent).length>0;case Ye.User:return Object.keys(e.user).length>0;case Ye.Globals:return Object.keys(e.globals).length>0;case Ye.Custom:return Object.keys(e.custom).length>0;default:return!1}}function wt(e,t){switch(t){case Ye.Consent:case Ye.User:case Ye.Globals:case Ye.Custom:return yt(e,t);case Ye.Run:case Ye.Ready:return!0===e.allowed;default:return e.seenEvents.has(String(t))}}function vt(e,t){return e.cellVersion[String(t)]??0}function bt(e,t,n){let o=e.delivery.get(t);o||(o={},e.delivery.set(t,o)),o[String(n)]=vt(e,n)}function kt(e,t,n){return e.allowed&&vt(e,n)>function(e,t,n){const o=e.delivery.get(t),s=o?.[String(n)];return void 0===s?-1:s}(e,t,n)}function St(e,t,n){const o=e.cascade;if(!o)return!0;let s=o.counts.get(t);s||(s={},o.counts.set(t,s));const r=String(n),a=(s[r]||0)+1;return s[r]=a,a<=8||(9===a&&e.logger.error("state delivery did not converge",{type:r}),!1)}function qt(e,t){return{collector:e,logger:e.logger.scope("on").scope(String(t))}}function It(e,t,n,o,s){if(!t.on)return;const r=t.type||"unknown",a=e.logger.scope(r).scope("on").scope(o),i={collector:e,logger:a,id:n,config:t.config,data:s,env:Ft(t.env,t.config.env)};ne(t.on,t=>gt(e,"destination",t,{destId:n,type:o}))(o,i)}function Ot(e,t,n,o){const s=xt(e,t,o);if(n.length)switch(t){case Ye.Consent:!function(e,t,n){const o=n||e.consent,s=qt(e,Ye.Consent);t.forEach(t=>{kt(e,t,Ye.Consent)&&St(e,t,Ye.Consent)&&(Object.keys(o).filter(e=>e in t).forEach(n=>{ne(t[n],t=>gt(e,"consent",t,{key:n}))(o,s)}),bt(e,t,Ye.Consent))})}(e,n,o);break;case Ye.Ready:!function(e,t){if(!e.allowed)return;const n=qt(e,Ye.Ready);t.forEach(t=>{ne(t,t=>gt(e,"ready",t))(void 0,n)})}(e,n);break;case Ye.Run:!function(e,t){if(!e.allowed)return;const n=qt(e,Ye.Run);t.forEach(t=>{ne(t,t=>gt(e,"run",t))(void 0,n)})}(e,n);break;case Ye.Session:!function(e,t){if(!e.session)return;const n=qt(e,Ye.Session);t.forEach(t=>{ne(t,t=>gt(e,"session",t))(e.session,n)})}(e,n);break;default:{const o=qt(e,t),r=mt(t);n.forEach(n=>{"function"==typeof n&&(r&&!kt(e,n,t)||r&&!St(e,n,t)||(ne(n,n=>gt(e,"generic",n,{type:t}))(s,o),r&&bt(e,n,t)))});break}}}function xt(e,t,n){switch(t){case Ye.Consent:return n||e.consent;case Ye.Session:return e.session;case Ye.User:return n||e.user;case Ye.Custom:return n||e.custom;case Ye.Globals:return n||e.globals;case Ye.Config:return n||e.config;default:return}}async function Ct(e,t,n,o,s){if(!t.on)return!1;if(mt(o)&&!kt(e,t,o))return!1;if(mt(o)&&!St(e,t,o))return!1;const r=await oe(t.on,t=>gt(e,"source",t,{sourceId:n,type:o}))(o,s);return mt(o)&&bt(e,t,o),!1===r}function At(e,t,n,o){if(!Number.isFinite(n.max)||n.max<=0)throw new Error(`pushBounded: max must be > 0 (got ${n.max})`);if("dropNewest"===(n.onOverflow??"dropOldest"))return e.length>=n.max?(o&&o([t]),{appended:!1,dropped:1}):(e.push(t),{appended:!0,dropped:0});const s=[];for(;e.length>=n.max;)s.push(e.shift());return e.push(t),s.length>0&&o&&o(s),{appended:!0,dropped:s.length}}var Dt=new WeakMap;function Tt(e,t,n,o){Dt.get(e)||(Dt.set(e,!0),t.warn(n,o))}function jt(e){Dt.delete(e)}var Et=Object.freeze({batched:!0});function Mt(e){return e===Et}function Pt(e){return void 0===e?{}:"number"==typeof e?{wait:e}:{wait:e.wait,size:e.size,age:e.age}}function $t(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 _t(e,t,n,o){e.dropped[t]||(e.dropped[t]={});const s=e.dropped[t];return s[n]=(s[n]??0)+o,s[n]}function Rt(e,t,n){if(!e)return[];if(Array.isArray(e)&&e.every(e=>"string"==typeof e))return ot(e,t);if("string"==typeof e)return ot(e,t);const o=F(e,M(n));return 0===o.length?[]:1===o.length?ot(o[0],t):ot(o,t)}async function Ht(e,t,n={},o){const{allowed:s,consent:r,globals:a,user:i}=e;if(!s)return Bt({ok:!1});if(t){const n=e.config.queueMax;if(void 0===n)throw new Error("Collector.Config.queueMax is undefined; defaults must be seeded by collector()");const o=At(e.queue,t,{max:n});if(o.dropped>0){const t=_t(e.status,J("collector"),"queue",o.dropped);Tt(e.queue,e.logger,"collector.queue overflow; oldest events dropped",{buffer:"queue",cap:n,droppedCount:t})}else e.queue.length<n&&jt(e.queue);e.status.in++}o||(o=e.destinations);const c=e.transformers?tt(e.transformers):{},u=await Promise.all(Object.entries(o||{}).map(async([o,s])=>{if(s.config.disabled)return{id:o,destination:s,skipped:!0};let u=(s.queuePush||[]).map(e=>({...e,consent:r}));s.queuePush=[],t&&u.push(P(t));const l=n.ingest?{...n.ingest,_meta:{...n.ingest._meta,path:[...n.ingest._meta.path]}}:H("unknown");if(!u.length&&!s.queueOn?.length)return{id:o,destination:s,skipped:!0};if(!u.length&&s.queueOn?.length){let t=!1;try{t=await Gt(e,s,o)}catch(t){e.status.failed++;const n=s.type||"unknown";e.logger.scope(n).error("destination init failed",{error:t instanceof Error?t.message:String(t)})}return{id:o,destination:s,skipped:!t}}const d=[],f=u.filter(t=>{const n=z(s.config.consent,r,t.consent);if(n)return t.consent=n,d.push(t),!1;const a=Xe(e,{stepId:J("destination",o),stepType:"destination",phase:"skip",eventId:"string"==typeof t.id?t.id:"",now:Date.now()});return a.skipReason="consent",r&&(a.consent={...r}),s.config.consent&&(a.meta={required:{...s.config.consent}}),N(e,a),!0});if(f.length>0){const t=s.queuePush,n=s.config.id||o,r={max:s.config.queueMax??1e3};let a=0;for(const e of f)a+=At(t,e,r).dropped;if(a>0){$t(e,n);const o=_t(e.status,J("destination",n),"queue",a);Tt(t,e.logger.scope(s.type||"unknown"),"destination.queuePush overflow; oldest events dropped",{buffer:"queuePush",destination:n,cap:r.max,droppedCount:o})}else t.length<r.max&&jt(t)}if(!d.length)return{id:o,destination:s,queue:u};let p,g,h=!1;try{h=await Gt(e,s,o)}catch(t){e.status.failed++;const n=s.type||"unknown";e.logger.scope(n).error("destination init failed",{error:t instanceof Error?t.message:String(t)})}if(!h)return{id:o,destination:s,queue:u};s.dlq||(s.dlq=[]);const m=Rt(s.config.before,c,l),y=s.config.next,w=s.config?.cache,v=w?$(w):void 0,b=v?Ze(v,e):void 0,k=s.config?.state?Y(s.config.state):void 0,S=k?.filter(e=>"get"===e.mode),q=k?.filter(e=>"set"===e.mode);let I=0,O=0;return await Promise.all(d.map(async t=>{let r;if(t.globals=E(a,t.globals),t.user=E(i,t.user),v?.stop&&b){const e=M(l,t),n=await _(v,b,e);if("HIT"===n?.status)return t;"MISS"===n?.status&&(r={key:n.key,ttl:n.rule.ttl})}let u=t,d=n.respond;if(m.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const s=await it(e,e.transformers,m,t,l,n.respond,`destination.${o}.before`);if(null===s.event)return t;s.respond&&(d=s.respond),u=Array.isArray(s.event)?s.event[0]:s.event}if(v&&!v.stop&&b){const e=M(l,u),n=await _(v,b,e);if("HIT"===n?.status)return t;"MISS"===n?.status&&(r={key:n.key,ttl:n.rule.ttl})}S&&S.length>0&&u&&(u=await X(S,t=>et(t,e),u,e));const f=Date.now();let h=!1;const w=await W(Nt,t=>{const n=s.type||"unknown";e.logger.scope(n).error("Push failed",{error:t,event:u.name}),p=t,h=!0;const r=s.dlq,a=s.config.id||o,i={max:s.config.dlqMax??100},c=At(r,[u,t],i);if(c.dropped>0){$t(e,a);const t=_t(e.status,J("destination",a),"dlq",c.dropped);Tt(r,e.logger.scope(s.type||"unknown"),"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:a,cap:i.max,droppedCount:t})}else r.length<i.max&&jt(r)})(e,s,o,u,l,d);if(I+=Date.now()-f,r&&b&&void 0===s.config.mock&&R(b,r.key,w??!0,r.ttl),!h&&!Mt(w)&&q&&q.length>0&&u&&(u=await X(q,t=>et(t,e),u,e)),void 0===w||Mt(w)||(g=w),Mt(w)&&O++,!h&&y){void 0!==w&&(l._response=w);const t=Rt(y,c,l);if(t.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const n=await it(e,e.transformers,t,u,l,d,`destination.${o}.next`);n.respond&&(d=n.respond)}}return t})),{id:o,destination:s,error:p,response:g,totalDuration:I,batchedCount:O,allowedCount:d.length}})),l={},d={},f={};for(const t of u){if(t.skipped)continue;const n=t.destination,o={type:n.type||"unknown",data:t.response};$t(e,t.id);const s=e.status.destinations[t.id],r=Date.now();if(s.queuePushSize=n.queuePush?.length??0,s.dlqSize=n.dlq?.length??0,t.error)o.error=t.error,f[t.id]=o,s.failed++,s.lastAt=r,s.duration+=t.totalDuration||0,e.status.failed++;else if(t.queue&&t.queue.length)d[t.id]=o;else{const n=t.batchedCount??0,a=t.allowedCount??0;(Math.max(0,a-n)>0||0===a)&&(l[t.id]=o,s.count++,s.lastAt=r,s.duration+=t.totalDuration||0,e.status.out++)}}return Bt({event:t,...Object.keys(l).length&&{done:l},...Object.keys(d).length&&{queued:d},...Object.keys(f).length&&{failed:f}})}async function Gt(e,t,n){if(t.init&&!t.config.init){const o=t.type||"unknown",s=e.logger.scope(o),r={collector:e,logger:s,id:n,config:t.config,env:Ft(t.env,t.config.env)};s.debug("init");const a=Date.now();let i;N(e,Xe(e,{stepId:J("destination",n),stepType:"destination",phase:"init",eventId:"",now:a}));try{i=await V(t.init,"DestinationInit",e.hooks,e.logger)(r)}catch(t){const o=Date.now(),s=Xe(e,{stepId:J("destination",n),stepType:"destination",phase:"error",eventId:"",now:o});throw s.durationMs=o-a,s.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},N(e,s),t}if(!1===i)return i;if(t.config={...i||t.config,init:!0},t.queueOn?.length){const o=t.queueOn;t.queueOn=[];for(const{type:s,data:r}of o)It(e,t,n,s,r)}s.debug("init done")}return!0}async function Nt(e,t,n,o,s,r){const{config:a}=t,i=await Q(o,a,e);if(i.ignore)return!1;const c=t.type||"unknown",u=e.logger.scope(c),l={collector:e,logger:u,id:n,config:a,data:i.data,rule:i.mapping,ingest:s,env:{...Ft(t.env,a.env),...r?{respond:r}:{}}};if(void 0!==a.mock)return u.debug("mock",{event:i.event.name}),a.mock;const d=i.mapping,f=void 0!==d?.batch,p=f?i.mappingKey||"* *":" batch-all";if((f||void 0!==a.batch)&&t.pushBatch&&void 0===a.mock){if(t.batches=t.batches||{},!t.batches[p]){const o={key:p,entries:[],events:[],data:[]},s=Pt(d?.batch),r=Pt(a.batch),i=s.wait??r.wait??3e4,c=s.size??r.size??1e3,l=s.age??r.age??3e4,g=Ft(t.env,a.env),h=G(async()=>{const o=t.batches[p],s=o.batched;if(0===s.entries.length)return;const r={key:s.key,entries:s.entries,events:s.events,data:s.data};s.entries=[],s.events=[],s.data=[];const i=r.entries[0],c={collector:e,logger:u,id:n,config:a,data:void 0,rule:o.isDefault?void 0:i.rule,ingest:i.ingest,env:{...g,...i.respond?{respond:i.respond}:{}}};u.debug("push batch",{events:r.entries.length});const l=t.config.id||n,d=$t(e,l),f=Date.now(),h=Xe(e,{stepId:J("destination",n),stepType:"destination",phase:"flush",eventId:"",now:f});h.batch={size:r.entries.length,index:0},N(e,h);const m=n=>{const o=t.dlq=t.dlq||[],s={max:t.config.dlqMax??100};let r=0;for(const e of n)r+=At(o,e,s).dropped;if(r>0){const t=_t(e.status,J("destination",l),"dlq",r);Tt(o,u,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:l,cap:s.max,droppedCount:t})}else o.length<s.max&&jt(o);d.failed+=n.length,d.dlqSize=o.length,e.status.failed+=n.length};let y=r.entries.length;const w=await W(V(t.pushBatch,"DestinationPushBatch",e.hooks,e.logger),t=>{y=0;const o=Date.now(),s=Xe(e,{stepId:J("destination",n),stepType:"destination",phase:"error",eventId:"",now:o});s.durationMs=o-f,s.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},s.batch={size:r.entries.length,index:0},N(e,s),m(r.entries.map(e=>[e.event,t])),u.error("Push batch failed",{error:t instanceof Error?t.message:String(t),entries:r.entries.length})})(r,c);if(K(v=w)&&Array.isArray(v.failed)&&w.failed.length>0){const e=[],t=new Set;for(const n of w.failed){const o=r.entries[n.index];o&&!t.has(n.index)&&(t.add(n.index),e.push([o.event,n.error??new Error(`Push batch entry ${n.index} failed (no per-row error provided)`)]))}e.length>0&&(m(e),y=Math.max(0,r.entries.length-e.length),u.error("Push batch partial failure",{failed:e.length,delivered:y,entries:r.entries.length}))}var v;u.debug("push batch done"),d.inFlightBatch=Math.max(0,(d.inFlightBatch??0)-r.entries.length),y>0&&(d.count+=y,d.lastAt=Date.now(),e.status.out+=y)},{wait:i,size:c,age:l});t.batches[p]={batched:o,isDefault:!f,batchFn:()=>{h()},flush:async()=>{await h.flush()}}}const o=t.batches[p];o.batched.entries.push({event:i.event,ingest:s,respond:r,rule:d,data:i.data}),o.batched.events.push(i.event),L(i.data)&&o.batched.data.push(i.data);const c=t.config.id||n,l=$t(e,c);return l.inFlightBatch=(l.inFlightBatch??0)+1,o.batchFn(),Et}{u.debug("push",{event:i.event.name});const o="string"==typeof i.event.id?i.event.id:"",s=Date.now(),r=Xe(e,{stepId:J("destination",n),stepType:"destination",phase:"in",eventId:o,now:s});i.mappingKey&&(r.mappingKey=i.mappingKey),i.event.consent&&(r.consent={...i.event.consent}),N(e,r);try{const r=await V(t.push,"DestinationPush",e.hooks,e.logger)(i.event,l),a=Date.now(),c=Xe(e,{stepId:J("destination",n),stepType:"destination",phase:"out",eventId:o,now:a});return c.durationMs=a-s,c.outEvent=r,i.mappingKey&&(c.mappingKey=i.mappingKey),N(e,c),u.debug("push done"),r}catch(t){const r=Date.now(),a=Xe(e,{stepId:J("destination",n),stepType:"destination",phase:"error",eventId:o,now:r});throw a.durationMs=r-s,a.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},i.mappingKey&&(a.mappingKey=i.mappingKey),N(e,a),t}}}function Bt(e){return{ok:!e?.failed,...e}}function zt(e){const{code:t,config:n={},env:o={},cache:s,state:r}=e,{config:a}=nt(e,"before"),{config:i}=nt({...e,config:a},"next"),c={...t.config,...n,...i};s&&(c.cache=s),void 0!==r&&void 0===c.state&&(c.state=r);const u=Ft(t.env,o);return{...t,config:c,env:u}}function Ft(e,t){return e||t?t?e&&K(e)&&K(t)?{...e,...t}:t:e:{}}async function Lt(e,t,n){const o=Object.entries(e).map(async([e,o])=>{const s=o.destroy;if(!s)return;const r=o.type||"unknown",a=n.scope(r),i={id:e,config:o.config,env:o.env??{},logger:a};let c;try{await Promise.race([s(i),new Promise((n,o)=>{c=setTimeout(()=>o(new Error(`${t} '${e}' destroy timed out`)),5e3)})])}catch(n){a.error(`${t} '${e}' destroy failed: ${n}`)}finally{c&&clearTimeout(c)}});await Promise.allSettled(o)}function Ut(e,t){e.stateVersion++,e.cellVersion[t]=e.stateVersion}async function Kt(e,t,n){let o,s,r=!1;const a=function(e){return e.cascade?()=>{}:(e.cascade={counts:new WeakMap},()=>{e.cascade=void 0})}(e);try{return await async function(){switch(t){case Ye.Config:_e(n)&&(Ee(e.config,n,{shallow:!1}),s=n,r=!0);break;case Ye.Consent:if(_e(n)){const{update:t}=function(e,t){const n={};return Object.entries(t).forEach(([e,t])=>{n[e]=!!t}),e.consent=D(e.consent,n),{update:n}}(e,n);Ut(e,Ye.Consent),s=t,r=!0}break;case Ye.Custom:_e(n)&&(e.custom=Ee(e.custom,n),Ut(e,Ye.Custom),s=n,r=!0);break;case Ye.Destination:_e(n)&&"code"in n&&_e(n.code)&&(o=await async function(e,t){const{code:n,config:o={},env:s={},before:r,next:a,cache:i,state:c}=t;if(!U(n.push))return Bt({ok:!1,failed:{invalid:{type:"invalid",error:"Destination code must have a push method"}}});const u=o||{init:!1};let l=r?{...u,before:r}:{...u};a&&(l={...l,next:a}),i&&(l={...l,cache:i}),void 0!==c&&void 0===l.state&&(l={...l,state:c});let d=l.id;if(!d)do{d=B(5,"abcdefghijklmnopqrstuvwxyz")}while(e.destinations[d]||e.pending.destinations[d]);if(l.require?.length){e.pending.destinations[d]=t,await pt(e);const n=e.destinations[d];return n?Ht(e,void 0,{},{[d]:n}):Bt({ok:!0})}const f={...n,config:l,env:Ft(n.env,s)};return e.destinations[d]=f,!1!==f.config.queue&&(f.queuePush=[...e.queue]),Ht(e,void 0,{},{[d]:f})}(e,n));break;case Ye.Globals:_e(n)&&(e.globals=Ee(e.globals,n),Ut(e,Ye.Globals),s=n,r=!0);break;case Ye.Hook:if(_e(n)&&$e(n.name)&&Pe(n.fn)){const{name:t,fn:o}=n;e.hooks[t]=o,s=n,r=!0}break;case Ye.On:if(_e(n)&&$e(n.type)){const{type:t,rules:o}=n;await async function(e,t,n){const o=e.on,s=o[t]||[],r=ee(n)?n:[n];r.forEach(e=>{s.push(e)}),o[t]=s,Ot(e,t,r)}(e,t,o)}break;case Ye.Ready:r=!0;break;case Ye.Run:o=await async function(e,t){return e.allowed=!0,e.timing=Date.now(),t&&(t.consent&&(e.consent=Ee(e.consent,t.consent),Ut(e,Ye.Consent)),t.user&&(e.user=Ee(e.user,t.user),Ut(e,Ye.User)),t.globals&&(e.globals=Ee(e.config.globalsStatic||{},t.globals),Ut(e,Ye.Globals)),t.custom&&(e.custom=Ee(e.custom,t.custom),Ut(e,Ye.Custom))),Object.values(e.destinations).forEach(e=>{e.queuePush=[]}),e.queue=[],e.round++,await pt(e),await async function(e){for(const t of ht){if(!yt(e,t))continue;const n=xt(e,t);Ot(e,t,e.on[t]||[]);for(const[o,s]of Object.entries(e.sources))dt(s)&&await Ct(e,s,o,t,n)}}(e),await Ht(e)}(e,n),r=!0;break;case Ye.Session:r=!0;break;case Ye.Shutdown:e.hasShutdown||(e.hasShutdown=!0,await async function(e){const t=e.logger;await Lt(e.sources,"source",t),await async function(e,t){const n=Object.entries(e).flatMap(([e,n])=>{const o=n.batches;if(!o)return[];const s=t.scope(n.type||"destination");return Object.values(o).map(async t=>{let n;try{await Promise.race([t.flush(),new Promise((t,o)=>{n=setTimeout(()=>o(new Error(`destination '${e}' batch flush timed out`)),5e3)})])}catch(t){s.error(`destination '${e}' batch flush failed: ${t}`)}finally{n&&clearTimeout(n)}})});await Promise.allSettled(n)}(e.destinations,t),await Lt(e.destinations,"destination",t),await Lt(e.transformers,"transformer",t),await Lt(e.stores,"store",t)}(e));break;case Ye.User:_e(n)&&(Ee(e.user,n,{shallow:!1}),Ut(e,Ye.User),s=n,r=!0)}return r&&(await async function(e,t,n,o){e.seenEvents.add(String(t));let s=n||[];n||(s=e.on[t]||[]);const r=xt(e,t,o);let a=!1;for(const[n,o]of Object.entries(e.sources)){if(o.config.require?.length){const e=o.config.require.indexOf(t);-1!==e&&o.config.require.splice(e,1)}o.on&&(dt(o)?await Ct(e,o,n,t,r)&&(a=!0):(o.queueOn=o.queueOn||[],o.queueOn.push({type:t,data:r})))}Object.entries(e.destinations).forEach(([n,o])=>{if(o.on){if(!o.config.init)return o.queueOn=o.queueOn||[],void o.queueOn.push({type:t,data:r});It(e,o,n,t,r)}});for(const[t,n]of Object.entries(e.sources))dt(n)&&n.queueOn?.length&&await lt(e,n,t);const i=Object.values(e.sources).some(e=>!dt(e)&&e.config.require?.length);return(Object.keys(e.pending.destinations).length>0||i)&&await pt(e),Ot(e,t,s,o),!a}(e,t,void 0,s),o=await Ht(e)),o||Bt({ok:!0})}()}finally{a()}}function Qt(e,t){return{timing:Math.round((Date.now()-e.timing)/10)/100,source:{type:"collector",schema:"4",version:"4.2.0-next-1780610489068"},...t}}function Jt(e,t){if(!t.name)throw new Error("Event name is required");const[n,o]=t.name.split(" ");if(!n||!o)throw new Error("Event name is invalid");const{timestamp:s=Date.now(),name:r=`${n} ${o}`,data:a={},context:i={},globals:c=e.globals,custom:u={},user:l=e.user,nested:d=[],consent:f=e.consent,id:p=Me(),trigger:g="",entity:h=n,action:m=o,timing:y=0,source:w={type:"collector",schema:"4"}}=t;return{name:r,data:a,context:i,globals:c,custom:u,user:l,nested:d,consent:f,id:p,trigger:g,entity:h,action:m,timestamp:s,timing:y,source:w}}function Wt(e,t){const n=Fe(async(n,o={})=>await ze(async()=>{const s=Date.now(),{id:r,ingest:a,respond:i,mapping:c,preChain:u,include:l,exclude:d}=o;let f=i,p=n;const g=l||d?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,l,d):void 0,h=a??Re(r||"unknown");if(c){const t=await Be(p,c,e);if(t.ignore)return Bt({ok:!0});if(c.consent&&!Ne(c.consent,e.consent,t.event.consent))return Bt({ok:!0});p=t.event}if(u?.length&&e.transformers&&Object.keys(e.transformers).length>0){const n=await it(e,e.transformers,u,p,h,f,r?`source.${r}.next`:void 0);if(null===n.event)return Bt({ok:!0});if(n.stopped)return n.respond&&(f=n.respond),Bt({ok:!0});if(n.respond&&(f=n.respond),Array.isArray(n.event)){const o=await Promise.all(n.event.map(async n=>{const o=t(n),s=Jt(e,o);return Ht(e,s,{id:r,ingest:h,respond:f},g)}));if(r){e.status.sources[r]||(e.status.sources[r]={count:0,duration:0});const t=e.status.sources[r];t.count+=n.event.length,t.lastAt=Date.now(),t.duration+=Date.now()-s}return o[0]??Bt({ok:!0})}p=n.event}const m=function(e,t){return Jt(e,Qt(e,t))}(e,p),y=await Ht(e,m,{id:r,ingest:h,respond:f},g);if(r){e.status.sources[r]||(e.status.sources[r]={count:0,duration:0});const t=e.status.sources[r];t.count++,t.lastAt=Date.now(),t.duration+=Date.now()-s}return y},t=>{if(t instanceof Ge)throw t;return e.status.failed++,e.logger.error("push failed",{event:n,ingest:o.ingest,error:t}),Bt({ok:!1})})(),"Push",e.hooks,e.logger);return async(t,o)=>{const s="string"==typeof t.id?t.id:"",r=Date.now();He(e,Xe(e,{stepId:"collector.push",stepType:"collector",phase:"in",eventId:s,now:r}));try{const a=await n(t,o),i=Date.now(),c=Xe(e,{stepId:"collector.push",stepType:"collector",phase:"out",eventId:s,now:i});return c.durationMs=i-r,c.outEvent=a,He(e,c),a}catch(t){const n=Date.now(),o=Xe(e,{stepId:"collector.push",stepType:"collector",phase:"error",eventId:s,now:n});throw o.durationMs=n-r,o.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},He(e,o),t}}}function Vt(e={}){const t=e.maxEntries??1e4,n=e.lowWaterMark??.8,o=e.sweepIntervalMs??6e4,s=Math.floor(t*n),r=new Map,a={hits:0,misses:0,populates:0,writes:0,deletes:0,evictions_entries:0,evictions_ttl:0};let i;return o>0&&(i=setInterval(function(){const e=Date.now();let t=0;for(const[n,o]of r)void 0!==o.expires&&o.expires<=e&&(r.delete(n),t++);a.evictions_ttl+=t},o),i&&"function"==typeof i.unref&&i.unref()),{type:"memory",config:{},get(e){const t=r.get(e);if(t)return void 0!==t.expires&&t.expires<=Date.now()?(r.delete(e),a.evictions_ttl++,void a.misses++):(r.delete(e),r.set(e,t),a.hits++,t.value);a.misses++},set(e,n,o){const i=!r.has(e);i||r.delete(e),r.set(e,{value:n,expires:void 0!==o?Date.now()+o:void 0}),a.writes++,i&&a.populates++,r.size>t&&function(){if(r.size<=t)return;const e=r.size-s;let n=0;for(const t of r.keys()){if(n>=e)break;r.delete(t),n++}a.evictions_entries+=n}()},delete(e){r.delete(e)&&a.deletes++},get counters(){return{...a}},destroy(){void 0!==i&&(clearInterval(i),i=void 0),r.clear()}}}function Yt(e,t){const{cacheConfig:n,cacheStore:o,namespace:s,logger:r,storeId:a,collector:i}=t,c=(e,t)=>{if(!i)return;const n=Xe(i,{stepId:`store.${a}`,stepType:"store",phase:"in",eventId:"",now:Date.now()});n.meta={op:"cache",cached:"hit"===t,status:t,key:e},Ve(i,n)},u={hits:0,misses:0,populates:0,writes:0,deletes:0,inflight_dedups:0},l=n.rules.map(e=>({match:e.match?We(e.match):()=>!0,ttl:e.ttl})),d=e=>`${s}:${e}`;function f(e,t){const n=void 0===t?{key:e}:{key:e,value:t};return l.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=d(t),s=await o.get(n);if(void 0!==s)return u.hits++,c(t,"hit"),s;const r=p.get(n);if(r)return u.inflight_dedups++,c(t,"hit"),r;u.misses++,c(t,"miss");const a=(async()=>{try{const s=await e.get(t);if(void 0===s)return;const r=f(t,s);if(r)try{await o.set(n,s,1e3*r.ttl),u.populates++}catch(e){g("set",t,e)}return s}finally{p.delete(n)}})();return p.set(n,a),a},async set(t,n,s){u.writes++,await e.set(t,n,s);const r=f(t,n);if(r)try{await o.set(d(t),n,1e3*r.ttl)}catch(e){g("set",t,e)}},async delete(t){u.deletes++,await e.delete(t);try{await o.delete(d(t))}catch(e){g("delete",t,e)}}};function g(e,t,n){const o=`store-cache(${a}): cache ${e} failed for "${t}"; backing succeeded, continuing`;r?r.warn(o,{error:n}):console.warn(o,n)}}function Xt(e,t,n){const o=`store.${n}`,s=Je(t.get,"StoreGet",e.hooks,e.logger),r=Je(t.set,"StoreSet",e.hooks,e.logger),a=Je(t.delete,"StoreDelete",e.hooks,e.logger);t.get=async t=>{const n=Date.now(),r=Xe(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:n});r.meta={op:"get",key:t},Qe(e,r);try{const r=await s(t),a=Date.now(),i=Xe(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:a});return i.durationMs=a-n,i.meta={op:"get",key:t},Qe(e,i),r}catch(s){const r=Date.now(),a=Xe(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:r});throw a.durationMs=r-n,a.meta={op:"get",key:t},a.error=s instanceof Error?{name:s.name,message:s.message}:{message:String(s)},Qe(e,a),s}},t.set=async(t,n,s)=>{const a=Date.now(),i=Xe(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:a});i.meta={op:"set",key:t},Qe(e,i);try{await r(t,n,s);const i=Date.now(),c=Xe(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:i});c.durationMs=i-a,c.meta={op:"set",key:t},Qe(e,c)}catch(n){const s=Date.now(),r=Xe(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:s});throw r.durationMs=s-a,r.meta={op:"set",key:t},r.error=n instanceof Error?{name:n.name,message:n.message}:{message:String(n)},Qe(e,r),n}},t.delete=async t=>{const n=Date.now(),s=Xe(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:n});s.meta={op:"delete",key:t},Qe(e,s);try{await a(t);const s=Date.now(),r=Xe(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:s});r.durationMs=s-n,r.meta={op:"delete",key:t},Qe(e,r)}catch(s){const r=Date.now(),a=Xe(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:r});throw a.durationMs=r-n,a.meta={op:"delete",key:t},a.error=s instanceof Error?{name:s.name,message:s.message}:{message:String(s)},Qe(e,a),s}}}async function Zt(e){const t=T({globalsStatic:{},sessionStatic:{},run:!0,queueMax:1e3},e,{merge:!1,extend:!1}),n={level:e.logger?.level,handler:e.logger?.handler},o=j(n),s={...t.globalsStatic,...e.globals},r={allowed:!1,config:t,consent:e.consent||{},custom:e.custom||{},destinations:{},transformers:{},stores:{},globals:s,hooks:e.hooks||{},observers:new Set,logger:o,on:{},queue:[],round:0,stateVersion:0,cellVersion:{},delivery:new WeakMap,session:void 0,status:{startedAt:Date.now(),in:0,out:0,failed:0,sources:{},destinations:{},dropped:{}},timing:Date.now(),user:e.user||{},sources:{},pending:{destinations:{}},hasShutdown:!1,seenEvents:new Set,push:void 0,command:void 0};var a,i;r.push=Wt(r,e=>Qt(r,e)),r.command=(i=Kt,Ue(async(e,t,n)=>await Ke(async()=>await i(a,e,t,n),n=>{if(n instanceof Le)throw n;return a.status.failed++,a.logger.error("command failed",{command:e,data:t,error:n}),Bt({ok:!1})})(),"Command",(a=r).hooks,a.logger));const c=e.stores||{};return r.stores=await async function(e,t={}){const n={};for(const[o,s]of Object.entries(t)){const{code:t,config:r={},env:a={}}=s,i=e.logger.scope("store").scope(o),c={collector:e,logger:i,id:o,config:r,env:a},u=await t(c);n[o]=u}const o=t,s=function(e){const t={};for(const n of Object.keys(e))t[n]="WHITE";const n=[],o=[];function s(r){const a=t[r];if("BLACK"===a)return;if("GRAY"===a){const e=o.indexOf(r),t=o.slice(-1===e?0:e).concat(r).join(" -> ");throw new Error(`Cycle in cache.store chain: ${t}`)}t[r]="GRAY",o.push(r);const i=e[r].cache?.store;if(void 0!==i){if(!(i in e))throw new Error(`Store "${r}" cache.store references "${i}", which is not declared in flow.stores`);s(i)}o.pop(),t[r]="BLACK",n.push(r)}for(const n of Object.keys(e))"WHITE"===t[n]&&s(n);return n}(o);for(const t of s){const s=o[t].cache;if(!s)continue;let r,a;void 0!==s.store?(r=n[s.store],a=s.store):(n.__cache||(n.__cache=Vt()),r=n.__cache,a="__cache");const i=s.namespace??t;e.logger.scope("store-cache").scope(t).info(`store "${t}" caches with namespace "${i}:" via ${a}`),n[t]=Yt(n[t],{storeId:t,cacheConfig:s,cacheStore:r,namespace:i,logger:e.logger.scope("store-cache").scope(t),collector:e})}for(const[t,o]of Object.entries(n))"__cache"!==t&&Xt(e,o,t);return n}(r,c),function(e,t,n){const o=new Map;for(const[n,s]of Object.entries(e))t[n]&&o.set(s,t[n]);if(0!==o.size)for(const e of[n.transformers,n.destinations,n.sources])if(e)for(const t of Object.values(e))s(t.env);function s(e){if(e)for(const[t,n]of Object.entries(e))if("object"==typeof n&&null!==n){const s=o.get(n);s&&(e[t]=s)}}}(c,r.stores,e),r.stores.__cache||(r.stores.__cache=Vt()),r.destinations=await async function(e,t={}){const n={};for(const[o,s]of Object.entries(t))s.config?.require?.length?e.pending.destinations[o]=s:n[o]=zt(s);return n}(r,e.destinations||{}),r.transformers=await async function(e,t={}){const n={};for(const[o,s]of Object.entries(t)){const{code:t,env:r={}}=s,a=Ae(s,"Transformer");if(!a.ok){e.logger.warn(`Transformer ${o} invalid (${a.code}): ${a.reason}. Skipping.`);continue}const{config:i}=nt(s,"before"),{config:c}=nt({...s,config:i},"next"),u=Object.keys(r).length>0?{...c,env:r}:c,{cache:l}=s,d=l?{...u,cache:l}:u,f=s.config?.state??s.state,p=void 0!==f&&void 0===d.state?{...d,state:f}:d,g=e.logger.scope("transformer").scope(o),h={collector:e,logger:g,id:o,ingest:me(o),config:p,env:r},m=t??(e=>{const t=s.mapping;if(t){const n=[];if(void 0!==t.data&&n.push("data"),t.mapping)for(const[e,o]of Object.entries(t.mapping))if("object"==typeof o&&null!==o)for(const[t,s]of Object.entries(o)){if("object"!=typeof s||null===s)continue;const o=s;void 0!==o.data&&n.push(`mapping[${e}][${t}].data`),void 0!==o.silent&&n.push(`mapping[${e}][${t}].silent`)}return n.length>0&&e.collector.logger.warn(`Transformer ${o}: \`${n.join(", ")}\` ignored at transformer position (only event-mutating fields apply).`),{type:"pass",config:e.config,push:async n=>{const o=await De(n,t,e.collector);return!o.ignore&&{event:o.event}}}}return{type:"pass",config:e.config,push:e=>({event:e})}}),y=await m(h);void 0!==s.before&&void 0===y.config?.before&&(y.config={...y.config??{},before:s.before}),void 0!==s.next&&void 0===y.config?.next&&(y.config={...y.config??{},next:s.next}),void 0!==f&&void 0===y.config?.state&&(y.config={...y.config??{},state:f}),n[o]=y}return n}(r,e.transformers||{}),r}async function en(e){e=e||{};const t=await Zt(e),n=(o=t,{type:"elb",config:{},push:async(e,t,n,s,r)=>{if("string"==typeof e&&e.startsWith("walker ")){const n=e.replace("walker ","");return o.command(n,t)}let a;if("string"==typeof e)a={name:e},t&&"object"==typeof t&&!Array.isArray(t)&&(a.data=t);else{if(!e||"object"!=typeof e)return Bt({ok:!1});a=e,t&&"object"==typeof t&&!Array.isArray(t)&&(a.data={...a.data||{},...t})}return n&&"object"==typeof n&&(a.context=n),s&&Array.isArray(s)&&(a.nested=s),r&&"object"==typeof r&&(a.custom=r),o.push(a)}});var o;t.sources.elb=n,await async function(e,t={}){const n={};for(const[o,s]of Object.entries(t)){const t=await ft(e,o,s);if(!t)continue;const r=s.config?.require;t.config={...t.config,init:!1,...r?{require:[...r]}:{}},n[o]=t}Object.assign(e.sources,n);for(const t of Object.keys(n)){const n=e.sources[t];let o=!1;n.init&&await ie(n.init.bind(n),n=>{if(n instanceof re)throw n;o=!0,e.status.failed++,e.logger.scope("source").error("source init failed",{sourceId:t,error:n})})(),o||(n.config.init=!0,dt(n)&&await lt(e,n,t))}return await pt(e),n}(t,e.sources||{});const{consent:s,user:r,globals:a,custom:i}=e;s&&await t.command("consent",s),r&&await t.command("user",r),a&&await t.command("globals",a),i&&await t.command("custom",i),t.config.run&&await t.command("run");let c=n.push;const u=Object.values(t.sources).filter(e=>"elb"!==e.type),l=u.find(e=>e.config.primary);return l?c=l.push:u.length>0&&(c=u[0].push),{collector:t,elb:c}}var tn=async e=>{let t;return{get flow(){return t},trigger:()=>async n=>{if(!t){const n=await en(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 s={awsRequestId:`test-${Date.now()}`},r=o.push,a=await r(n,s);let i;try{i=JSON.parse(a.body||"{}")}catch{i=a.body}const c={};if(a.headers)for(const[e,t]of Object.entries(a.headers))void 0!==t&&(c[e]=String(t));return{statusCode:a.statusCode,body:i,headers:c}}}};function nn(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 on={};t(on,{createTrigger:()=>yn,env:()=>sn,step:()=>dn});var sn={};t(sn,{push:()=>un,simulation:()=>ln});var rn=()=>{},an={error:rn,warn:rn,info:rn,debug:rn,throw:e=>{throw"string"==typeof e?new Error(e):e},json:rn,scope:()=>an},cn=()=>()=>Promise.resolve({ok:!0}),un={get push(){return cn()},get command(){return cn()},get elb(){return cn()},logger:an},ln=["AWS.SQSClient"],dn={};t(dn,{decoderText:()=>gn,malformedJson:()=>hn,orderComplete:()=>pn,pageView:()=>fn});var fn={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"]]},pn={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"]]},gn={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"]]},hn={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 mn(e){if("object"!=typeof e||null===e)return!1;const t=e;return"sqs"===t.type&&"function"==typeof t.push}var yn=async e=>{let t;return{get flow(){return t},trigger:()=>async n=>{if(!t){const n=await en(e);t={collector:n.collector,elb:n.elb}}const o=function(e){for(const t of Object.values(e.sources??{}))if(mn(t))return t}(t.collector);if(!o)throw new Error("sqs source not registered in collector, ensure it is configured in sources");const s={MessageId:n.MessageId,Body:n.Body,ReceiptHandle:n.ReceiptHandle,Attributes:n.Attributes,MessageAttributes:n.MessageAttributes},r=await o.push(s),a=[];return r&&"object"==typeof r&&(r.acked&&a.push(["message.ack",n.MessageId]),r.nacked&&a.push(["message.nack",n.MessageId])),a}}};export{v as examples,n as schemas,on 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,{CorsOptionsSchema:()=>c,CorsOrigin:()=>i,HttpMethod:()=>a,SettingsSchema:()=>u,settings:()=>l,sqsSettings:()=>y,sqsSetup:()=>w});import{zodToSchema as o}from"@walkeros/core/dev";import{z as s}from"@walkeros/core/dev";import{z as r}from"@walkeros/core/dev";var a=r.enum(["GET","POST","PUT","PATCH","DELETE","OPTIONS","HEAD"]),i=r.union([r.string(),r.array(r.string()),r.literal("*")]),c=r.object({origin:i.describe("Allowed origins (* for all, URL string, or array of URLs)").optional(),methods:r.array(a).describe("Allowed HTTP methods").optional(),headers:r.array(r.string()).describe("Allowed request headers").optional(),credentials:r.boolean().describe("Allow credentials (cookies, authorization headers)").optional(),maxAge:r.number().int().positive().describe("Preflight cache duration in seconds").optional()}),u=s.object({cors:s.union([s.boolean(),c]).describe("CORS configuration: false = disabled, true = allow all origins, object = custom configuration").default(!0),timeout:s.number().int().positive().max(9e5).describe("Request timeout in milliseconds (max: 900000 for Lambda)").default(3e4),enablePixelTracking:s.boolean().describe("Enable GET requests with 1x1 transparent GIF response for pixel tracking").default(!0),healthPath:s.string().describe("Health check endpoint path (e.g., /health)").default("/health")}),l=o(u);import{zodToSchema as d}from"@walkeros/core/dev";import{z as f}from"@walkeros/core/dev";var p=f.object({queueName:f.string().min(1).describe("SQS queue short name (like walkeros-events). Required for both setup and runtime poll."),region:f.string().describe("AWS region (like eu-central-1). Default: eu-central-1.").optional(),queueUrl:f.string().url().describe("Optional pre-resolved queue URL. When set, init skips the GetQueueUrl lookup.").optional(),client:f.any().describe("Pre-configured AWS SQSClient instance. Bypasses construction when supplied.").optional(),config:f.any().describe("AWS SDK SQSClientConfig (credentials, endpoint overrides, retries).").optional(),decoder:f.enum(["json","text","raw"]).describe("Decoder for the message body. json (default) parses JSON, text forwards UTF-8, raw forwards a Buffer.").optional(),maxMessages:f.number().int().min(1).max(10).describe("SQS receive batch size. Cap 10. Default: 10.").optional(),waitTimeSeconds:f.number().int().min(0).max(20).describe("Long-poll duration in seconds. Cap 20. Default: 20.").optional(),visibilityTimeout:f.number().int().nonnegative().describe("Per-receive visibility timeout override. Default: queue-configured value.").optional(),shutdownTimeoutMs:f.number().int().positive().describe("Graceful shutdown timeout in milliseconds. Default: 30000. After this window, destroy() force-closes.").optional(),onPushError:f.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 g}from"@walkeros/core/dev";var h=g.record(g.string(),g.string()),m=g.object({region:g.string().min(1).describe("AWS region.").optional(),fifoQueue:g.boolean().describe("FIFO queue with content-based deduplication. Auto-appends .fifo suffix to the queue name.").optional(),visibilityTimeoutSeconds:g.number().int().nonnegative().describe("Visibility timeout in seconds. Default: 30.").optional(),messageRetentionSeconds:g.number().int().positive().describe("Message retention period in seconds. Default: 345600 (4 days).").optional(),maximumMessageSize:g.number().int().min(1024).max(262144).describe("Max message size in bytes. Default: 262144 (256 KB).").optional(),kmsMasterKeyId:g.string().describe("KMS key alias or ID for at-rest encryption.").optional(),deadLetterQueue:g.object({arn:g.string().describe("ARN of an existing DLQ. Mutually exclusive with create: true.").optional(),create:g.boolean().describe("Create a sibling DLQ named <queueName>-dlq. Default: false.").optional(),maxReceiveCount:g.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:h.describe("Tags applied to the queue (and inherited by an auto-created DLQ).").optional(),subscribeToSnsTopic:g.object({topicArn:g.string().min(1).describe("Topic ARN to subscribe to."),rawMessageDelivery:g.boolean().describe("Deliver SNS messages without the SNS envelope.").optional(),filterPolicy:g.record(g.string(),g.unknown()).describe("SNS filter policy applied at subscription level.").optional()}).describe("Optional SNS topic subscription. Creates the subscription and the matching queue policy.").optional()}),y=d(p),w=d(m),v={};t(v,{createTrigger:()=>tn,env:()=>b,step:()=>O,trigger:()=>nn});var b={};t(b,{push:()=>I});var k=()=>()=>Promise.resolve({ok:!0}),S=()=>{},q={error:S,warn:S,info:S,debug:S,throw:e=>{throw"string"==typeof e?new Error(e):e},json:S,scope:()=>q},I={get push(){return k()},get command(){return k()},get elb(){return k()},logger:q},O={};t(O,{apiGatewayV1Post:()=>C,lambdaGet:()=>A,lambdaPost:()=>x});var x={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({event:"page view",data:{title:"Home"}}),isBase64Encoded:!1},out:[["elb",{name:"page view",data:{title:"Home"}}]]},C={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({event:"page view",data:{title:"Home"}}),isBase64Encoded:!1},out:[["elb",{name:"page view",data:{title:"Home"}}]]},A={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"}'}]]};import{assign as D}from"@walkeros/core";import{assign as T,createLogger as j}from"@walkeros/core";import{assign as E,buildCacheContext as M,clone as P,compileCache as $,checkCache as _,storeCache as R,createIngest as H,debounce as G,emitStep as N,getId as B,getGrantedConsent as z,getNextSteps as F,isDefined as L,isFunction as U,isObject as K,processEventMapping as Q,stepId as J,tryCatchAsync as W,useHooks as V,compileState as Y,applyState as X}from"@walkeros/core";import{emitStep as Z}from"@walkeros/core";import{isArray as ee,FatalError as te}from"@walkeros/core";import{tryCatch as ne,tryCatchAsync as oe}from"@walkeros/core";import{createIngest as se,FatalError as re,getMappingValue as ae,tryCatchAsync as ie,getNextSteps as ce,compileCache as ue,checkCache as le,storeCache as de,applyUpdate as fe,buildCacheContext as pe,compileState as ge,applyState as he}from"@walkeros/core";import{createIngest as me,emitStep as ye,FatalError as we,isObject as ve,stepId as be,tryCatchAsync as ke,useHooks as Se,getNextSteps as qe,compileCache as Ie,checkCache as Oe,storeCache as xe,buildCacheContext as Ce,validateStepEntry as Ae,processEventMapping as De,compileState as Te,applyState as je}from"@walkeros/core";import{assign as Ee,getSpanId as Me,isFunction as Pe,isString as $e}from"@walkeros/core";import{isObject as _e}from"@walkeros/core";import{createIngest as Re,emitStep as He,FatalError as Ge,getGrantedConsent as Ne,processEventMapping as Be,tryCatchAsync as ze,useHooks as Fe}from"@walkeros/core";import{FatalError as Le,useHooks as Ue,tryCatchAsync as Ke}from"@walkeros/core";import{emitStep as Qe,useHooks as Je}from"@walkeros/core";import{compileMatcher as We,emitStep as Ve}from"@walkeros/core";var Ye={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 Xe(e,t){const n=e.status.startedAt;return{flowId:"default",stepId:t.stepId,stepType:t.stepType,phase:t.phase,eventId:t.eventId,timestamp:new Date(t.now).toISOString(),elapsedMs:t.now-n}}function Ze(e,t){return e.storeId&&t.stores[e.storeId]?t.stores[e.storeId]:t.stores.__cache}function et(e,t){return e?t.stores[e]:t.stores.__cache}function tt(e){const t={};for(const[n,o]of Object.entries(e)){const e=o.config?.next;"string"==typeof e||Array.isArray(e)&&e.every(e=>"string"==typeof e)?t[n]={next:e}:t[n]={}}return t}function nt(e,t){const n=e.config||{},o=e[t];return void 0!==o?{config:{...n,[t]:o},chainValue:o}:{config:n,chainValue:void 0}}function ot(e,t={}){if(!e)return[];if(Array.isArray(e))return e;const n=[],o=new Set;let s=e;for(;s&&t[s]&&!o.has(s);){o.add(s),n.push(s);const e=t[s].next;if(Array.isArray(e)){n.push(...e);break}s=e}return n}async function st(e,t,n){if(t.init&&!t.config.init){const o=t.type||"unknown",s=e.logger.scope(`transformer:${o}`),r={collector:e,logger:s,id:n,ingest:me(n),config:t.config,env:ct(t.config.env)};s.debug("init");const a=await Se(t.init,"TransformerInit",e.hooks,e.logger)(r);if(!1===a)return!1;t.config={...a||t.config,env:a?.env||t.config.env,init:!0},s.debug("init done")}return!0}async function rt(e,t,n,o,s,r){const a=t.type||"unknown",i=e.logger.scope(`transformer:${a}`),c={collector:e,logger:i,id:n,ingest:s,config:t.config,env:{...ct(t.config.env),...r?{respond:r}:{}}};i.debug("push",{event:o.name});const u="string"==typeof o.id?o.id:"",l=Date.now(),d=Xe(e,{stepId:be("transformer",n),stepType:"transformer",phase:"in",eventId:u,now:l});ye(e,d);try{const s=await Se(t.push,"TransformerPush",e.hooks,e.logger)(o,c),r=Date.now(),a=Xe(e,{stepId:be("transformer",n),stepType:"transformer",phase:"out",eventId:u,now:r});return a.durationMs=r-l,a.outEvent=s,ye(e,a),i.debug("push done"),s}catch(t){const o=Date.now(),s=Xe(e,{stepId:be("transformer",n),stepType:"transformer",phase:"error",eventId:u,now:o});throw s.durationMs=o-l,s.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},ye(e,s),t}}function at(e,t){return e?{...e,_meta:{...e._meta,path:[...e._meta.path]}}:me(t)}async function it(e,t,n,o,s,r,a){s||(s=me(n[0]??"chain")),a&&s._meta&&(s._meta.chainPath=a);let i=o,c=r;for(const o of n){const r=t[o];if(!r){e.logger.warn(`Transformer not found: ${o}`);continue}if(s&&s._meta&&s._meta.path.length>256)return e.logger.error(`Max path length exceeded at ${o}`),{event:null,respond:c};if(s&&s._meta&&(s._meta.hops++,s._meta.path.push(o)),!await ke(st,t=>{if(t instanceof we)throw t;return e.status.failed++,e.logger.scope(`transformer:${r.type||"unknown"}`).error("transformer init failed",{transformer:o,error:t}),!1})(e,r,o))return{event:null,respond:c};if(a&&void 0!==r.config?.chainMocks?.[a]){const t=r.config.chainMocks[a];e.logger.scope(`transformer:${r.type||"unknown"}`).debug("chainMock",{chain:a}),i=t;continue}if(void 0!==r.config?.mock){e.logger.scope(`transformer:${r.type||"unknown"}`).debug("mock"),i=r.config.mock;continue}if(r.config?.disabled)continue;const u=r.config?.cache,l=u?Ie(u):void 0,d=l?Ze(l,e):void 0,f=r.config?.state?Te(r.config.state):void 0,p=f?.filter(e=>"get"===e.mode),g=f?.filter(e=>"set"===e.mode),h=async t=>g&&0!==g.length?je(g,t=>et(t,e),t,e):t;let m;if(l&&d){const e=Ce(s,i),t=await Oe(l,d,e);if("HIT"===t?.status&&t.value){if(i=t.value,l.stop)return{event:i,respond:c,stopped:!0};continue}"MISS"===t?.status&&(m={key:t.key,ttl:t.rule.ttl})}const y=r.config.before;if(y){const n=qe(y,Ce(s,i));if(1===n.length){const o=ot(n[0],tt(t));if(o.length>0){const n=await it(e,t,o,i,s,c,a);if(null===n.event)return{event:null,respond:n.respond??c};if(n.stopped)return{event:Array.isArray(n.event)?n.event[0]:n.event,respond:n.respond??c,stopped:!0};n.respond&&(c=n.respond),i=Array.isArray(n.event)?n.event[0]:n.event}}else n.length>1&&await Promise.all(n.map(n=>ke(it,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,ot(n,tt(t)),i,at(s,n),void 0,a)))}p&&p.length>0&&(i=await je(p,t=>et(t,e),i,e));const w=await ke(rt,t=>(e.logger.scope(`transformer:${r.type||"unknown"}`).error("Push failed",{error:t}),!1))(e,r,o,i,s,c);if(!1===w)return{event:null,respond:c};if(Array.isArray(w)){const r=n.slice(n.indexOf(o)+1),u=await Promise.all(w.map(async n=>{const o=await h(n.event||i),u=at(s,"unknown");if(n.next){const s=qe(n.next,Ce(u,o));if(0===s.length)return{event:o,respond:c};if(1===s.length){const n=ot(s[0],tt(t));return n.length>0?it(e,t,n,o,u,c,a):{event:o,respond:c}}return(await Promise.all(s.map(n=>ke(it,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,ot(n,tt(t)),o,at(u,n),void 0,a)))).map(e=>({event:e.event,respond:void 0}))}return r.length>0?it(e,t,r,o,u,c,a):{event:o,respond:c}}));let l=c;const d=[];for(const e of u.flat())if(null!==e)if(e&&"object"==typeof e&&"event"in e){const t=e;if(t.respond&&(l=t.respond),null===t.event)continue;Array.isArray(t.event)?d.push(...t.event):d.push(t.event)}else d.push(e);return 0===d.length?{event:null,respond:l}:1===d.length?{event:d[0],respond:l}:{event:d,respond:l}}if(w&&"object"==typeof w){const{event:n,respond:o,next:r}=w;if(o&&(c=o),void 0!==r){const o=await h(n||i),u=qe(r,Ce(s,o));if(0===u.length){i=o;continue}if(1===u.length){const n=ot(u[0],tt(t));return n.length>0?it(e,t,n,o,s,c,a):(e.logger.warn(`Branch target not found: ${JSON.stringify(r)}`),{event:null,respond:c})}return await Promise.all(u.map(n=>ke(it,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,ot(n,tt(t)),o,at(s,n),void 0,a))),{event:null,respond:void 0}}n&&(i=n)}g&&g.length>0&&(i=await je(g,t=>et(t,e),i,e)),m&&d&&xe(d,m.key,i,m.ttl);const v=r.config.next,b="string"==typeof v||Array.isArray(v)&&v.every(e=>"string"==typeof e),k=void 0!==v&&!b;if((!w||"object"==typeof w&&!w.next)&&k){const n=qe(r.config.next,Ce(s,i));if(1===n.length){const o=ot(n[0],tt(t));return o.length>0?it(e,t,o,i,s,c,a):{event:i,respond:c}}return n.length>1?(await Promise.all(n.map(n=>ke(it,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,ot(n,tt(t)),i,at(s,n),void 0,a))),{event:null,respond:void 0}):{event:i,respond:c}}}return{event:i,respond:c}}function ct(e){return e&&ve(e)?e:{}}function ut(e){return"string"==typeof e||!(!Array.isArray(e)||!e.every(e=>"string"==typeof e))}async function lt(e,t,n){if(!t.on||!t.queueOn?.length)return;const o=t.queueOn;t.queueOn=[];const s=n||t.config?.id||"unknown";for(const{type:n,data:r}of o)mt(n)&&!kt(e,t,n)||(await ie(t.on,t=>{if(t instanceof re)throw t;e.status.failed++,e.logger.scope("source").error("source on flush failed",{sourceId:s,type:n,error:t})})(n,r),mt(n)&&bt(e,t,n))}function dt(e){return Boolean(e.config.init)&&!e.config.require?.length}async function ft(e,t,n){const{code:o,config:s={},env:r={},primary:a,next:i,before:c,cache:u}=n,l=s.state??n.state,d=l?ge(l):void 0,f=u,p=f?ue({...f,stop:f.stop??!0}):void 0,g=ut(i)?ot(i,tt(e.transformers)):void 0,h=ut(c)?ot(c,tt(e.transformers)):void 0,m=r.push,y=m??e.push,w=Boolean(m),v=async(n,o,r)=>{let a;const u=h??(void 0!==c?(()=>{const t=ce(c,pe(r.ingest));return 0===t.length?[]:ot(1===t.length?t[0]:t,tt(e.transformers))})():[]);let l=[n];if(u.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const o=await it(e,e.transformers,u,n,r.ingest,r.respond,`source.${t}.before`);if(null===o.event)return{ok:!0};if(o.stopped)return o.respond&&(r.respond=o.respond),{ok:!0};o.respond&&(r.respond=o.respond),l=Array.isArray(o.event)?o.event:[o.event]}if(p){const t=Ze(p,e);if(t){const n=pe(r.ingest),o=await le(p,t,n);if(o){if("HIT"===o.status&&void 0!==o.value&&p.stop){let t=o.value;return o.rule.update&&(t=await fe(t,o.rule.update,{...n,cache:{status:"HIT"}},e)),r.respond?.(t),{ok:!0}}if("MISS"===o.status&&p.stop&&r.respond){const s=r.respond,i=o.rule.update,c={...n,cache:{status:"MISS"}},u=o.key,l=o.rule.ttl,d=n=>{de(t,u,n,l),i?a=(async()=>{const t=await fe(n,i,c,e);s(t)})():s(n)};r.respond=d}"MISS"!==o.status||p.stop||de(t,o.key,!0,o.rule.ttl)}}}const f=g?{kind:"single",preChain:g}:void 0!==i?(()=>{const t=ce(i,pe(r.ingest));return 0===t.length?{kind:"single",preChain:[]}:1===t.length?{kind:"single",preChain:ot(t[0],tt(e.transformers))}:{kind:"many",branches:t.map(t=>ot(t,tt(e.transformers)))}})():{kind:"single",preChain:[]};!w&&d&&d.length>0&&(l=await Promise.all(l.map(t=>he(d,t=>et(t,e),t,e))));let m={ok:!0};for(const n of l)"many"===f.kind?(await Promise.all(f.branches.map((a,i)=>ie(async()=>w?y(n):y(n,{...o,id:t,ingest:at(r.ingest,`${t}.${i}`),respond:void 0,mapping:s,preChain:a}),t=>(e.logger.scope("source:many").error(`many branch ${i} failed`,{error:t}),{ok:!0}))())),m={ok:!0}):m=w?await y(n):await y(n,{...o,id:t,ingest:r.ingest,respond:r.respond,mapping:s,preChain:f.preChain});return a&&await a,m},b=async n=>{const o=se(t);if(!s.ingest||void 0===n)return o;const r=await ae(n,s.ingest,{collector:e});return{...o,...r,_meta:o._meta}},k=e.logger.scope("source").scope(t),S={command:e.command,sources:e.sources,elb:e.sources.elb.push,logger:k,...r,push:async(e,n={})=>{const o={ingest:se(t),respond:void 0};return v(e,n,o)}},q={collector:e,logger:k,id:t,config:s,env:S,withScope:async(e,t,n)=>{const o={ingest:await b(e),respond:t};return n({...S,push:(e,t={})=>v(e,t,o),ingest:o.ingest,respond:o.respond})}},I=await ie(o,n=>{if(n instanceof re)throw n;e.status.failed++,e.logger.scope("source").error("source factory failed",{sourceId:t,error:n})})(q);if(!I)return;const O=I.type||"unknown",x=e.logger.scope(O).scope(t);return S.logger=x,a&&(I.config={...I.config,primary:a}),I}async function pt(e){for(const[t,n]of Object.entries(e.sources)){if(dt(n))continue;const o=n.config.require;if(!o?.length)continue;const s=o.filter(t=>!wt(e,t));s.length!==o.length&&(n.config.require=s,dt(n)&&await lt(e,n,t))}for(const[t,n]of Object.entries(e.pending.destinations)){if(!e.pending.destinations[t]||e.destinations[t])continue;const o=n.config?.require;if(!o)continue;const s=o.filter(t=>!wt(e,t));if(n.config&&(n.config.require=s),s.length>0)continue;delete e.pending.destinations[t];const r=zt(n);!1!==r.config.queue&&(r.queuePush=[...e.queue]),e.destinations[t]=r}}function gt(e,t,n,o){if(n instanceof te)throw n;e.logger.scope("on").error("on callback failed",{kind:t,...o,error:n})}var ht=[Ye.Consent,Ye.User,Ye.Globals,Ye.Custom];function mt(e){return ht.includes(e)}function yt(e,t){switch(t){case Ye.Consent:return Object.keys(e.consent).length>0;case Ye.User:return Object.keys(e.user).length>0;case Ye.Globals:return Object.keys(e.globals).length>0;case Ye.Custom:return Object.keys(e.custom).length>0;default:return!1}}function wt(e,t){switch(t){case Ye.Consent:case Ye.User:case Ye.Globals:case Ye.Custom:return yt(e,t);case Ye.Run:case Ye.Ready:return!0===e.allowed;default:return e.seenEvents.has(String(t))}}function vt(e,t){return e.cellVersion[String(t)]??0}function bt(e,t,n){let o=e.delivery.get(t);o||(o={},e.delivery.set(t,o)),o[String(n)]=vt(e,n)}function kt(e,t,n){return e.allowed&&vt(e,n)>function(e,t,n){const o=e.delivery.get(t),s=o?.[String(n)];return void 0===s?-1:s}(e,t,n)}function St(e,t,n){const o=e.cascade;if(!o)return!0;let s=o.counts.get(t);s||(s={},o.counts.set(t,s));const r=String(n),a=(s[r]||0)+1;return s[r]=a,a<=8||(9===a&&e.logger.error("state delivery did not converge",{type:r}),!1)}function qt(e,t){return{collector:e,logger:e.logger.scope("on").scope(String(t))}}function It(e,t,n,o,s){if(!t.on)return;const r=t.type||"unknown",a=e.logger.scope(r).scope("on").scope(o),i={collector:e,logger:a,id:n,config:t.config,data:s,env:Ft(t.env,t.config.env)};ne(t.on,t=>gt(e,"destination",t,{destId:n,type:o}))(o,i)}function Ot(e,t,n,o){const s=xt(e,t,o);if(n.length)switch(t){case Ye.Consent:!function(e,t,n){const o=n||e.consent,s=qt(e,Ye.Consent);t.forEach(t=>{kt(e,t,Ye.Consent)&&St(e,t,Ye.Consent)&&(Object.keys(o).filter(e=>e in t).forEach(n=>{ne(t[n],t=>gt(e,"consent",t,{key:n}))(o,s)}),bt(e,t,Ye.Consent))})}(e,n,o);break;case Ye.Ready:!function(e,t){if(!e.allowed)return;const n=qt(e,Ye.Ready);t.forEach(t=>{ne(t,t=>gt(e,"ready",t))(void 0,n)})}(e,n);break;case Ye.Run:!function(e,t){if(!e.allowed)return;const n=qt(e,Ye.Run);t.forEach(t=>{ne(t,t=>gt(e,"run",t))(void 0,n)})}(e,n);break;case Ye.Session:!function(e,t){if(!e.session)return;const n=qt(e,Ye.Session);t.forEach(t=>{ne(t,t=>gt(e,"session",t))(e.session,n)})}(e,n);break;default:{const o=qt(e,t),r=mt(t);n.forEach(n=>{"function"==typeof n&&(r&&!kt(e,n,t)||r&&!St(e,n,t)||(ne(n,n=>gt(e,"generic",n,{type:t}))(s,o),r&&bt(e,n,t)))});break}}}function xt(e,t,n){switch(t){case Ye.Consent:return n||e.consent;case Ye.Session:return e.session;case Ye.User:return n||e.user;case Ye.Custom:return n||e.custom;case Ye.Globals:return n||e.globals;case Ye.Config:return n||e.config;default:return}}async function Ct(e,t,n,o,s){if(!t.on)return!1;if(mt(o)&&!kt(e,t,o))return!1;if(mt(o)&&!St(e,t,o))return!1;const r=await oe(t.on,t=>gt(e,"source",t,{sourceId:n,type:o}))(o,s);return mt(o)&&bt(e,t,o),!1===r}function At(e,t,n,o){if(!Number.isFinite(n.max)||n.max<=0)throw new Error(`pushBounded: max must be > 0 (got ${n.max})`);if("dropNewest"===(n.onOverflow??"dropOldest"))return e.length>=n.max?(o&&o([t]),{appended:!1,dropped:1}):(e.push(t),{appended:!0,dropped:0});const s=[];for(;e.length>=n.max;)s.push(e.shift());return e.push(t),s.length>0&&o&&o(s),{appended:!0,dropped:s.length}}var Dt=new WeakMap;function Tt(e,t,n,o){Dt.get(e)||(Dt.set(e,!0),t.warn(n,o))}function jt(e){Dt.delete(e)}var Et=Object.freeze({batched:!0});function Mt(e){return e===Et}function Pt(e){return void 0===e?{}:"number"==typeof e?{wait:e}:{wait:e.wait,size:e.size,age:e.age}}function $t(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 _t(e,t,n,o){e.dropped[t]||(e.dropped[t]={});const s=e.dropped[t];return s[n]=(s[n]??0)+o,s[n]}function Rt(e,t,n){if(!e)return[];if(Array.isArray(e)&&e.every(e=>"string"==typeof e))return ot(e,t);if("string"==typeof e)return ot(e,t);const o=F(e,M(n));return 0===o.length?[]:1===o.length?ot(o[0],t):ot(o,t)}async function Ht(e,t,n={},o){const{allowed:s,consent:r,globals:a,user:i}=e;if(!s)return Bt({ok:!1});if(t){const n=e.config.queueMax;if(void 0===n)throw new Error("Collector.Config.queueMax is undefined; defaults must be seeded by collector()");const o=At(e.queue,t,{max:n});if(o.dropped>0){const t=_t(e.status,J("collector"),"queue",o.dropped);Tt(e.queue,e.logger,"collector.queue overflow; oldest events dropped",{buffer:"queue",cap:n,droppedCount:t})}else e.queue.length<n&&jt(e.queue);e.status.in++}o||(o=e.destinations);const c=e.transformers?tt(e.transformers):{},u=await Promise.all(Object.entries(o||{}).map(async([o,s])=>{if(s.config.disabled)return{id:o,destination:s,skipped:!0};let u=(s.queuePush||[]).map(e=>({...e,consent:r}));s.queuePush=[],t&&u.push(P(t));const l=n.ingest?{...n.ingest,_meta:{...n.ingest._meta,path:[...n.ingest._meta.path]}}:H("unknown");if(!u.length&&!s.queueOn?.length)return{id:o,destination:s,skipped:!0};if(!u.length&&s.queueOn?.length){let t=!1;try{t=await Gt(e,s,o)}catch(t){e.status.failed++;const n=s.type||"unknown";e.logger.scope(n).error("destination init failed",{error:t instanceof Error?t.message:String(t)})}return{id:o,destination:s,skipped:!t}}const d=[],f=u.filter(t=>{const n=z(s.config.consent,r,t.consent);if(n)return t.consent=n,d.push(t),!1;const a=Xe(e,{stepId:J("destination",o),stepType:"destination",phase:"skip",eventId:"string"==typeof t.id?t.id:"",now:Date.now()});return a.skipReason="consent",r&&(a.consent={...r}),s.config.consent&&(a.meta={required:{...s.config.consent}}),N(e,a),!0});if(f.length>0){const t=s.queuePush,n=s.config.id||o,r={max:s.config.queueMax??1e3};let a=0;for(const e of f)a+=At(t,e,r).dropped;if(a>0){$t(e,n);const o=_t(e.status,J("destination",n),"queue",a);Tt(t,e.logger.scope(s.type||"unknown"),"destination.queuePush overflow; oldest events dropped",{buffer:"queuePush",destination:n,cap:r.max,droppedCount:o})}else t.length<r.max&&jt(t)}if(!d.length)return{id:o,destination:s,queue:u};let p,g,h=!1;try{h=await Gt(e,s,o)}catch(t){e.status.failed++;const n=s.type||"unknown";e.logger.scope(n).error("destination init failed",{error:t instanceof Error?t.message:String(t)})}if(!h)return{id:o,destination:s,queue:u};s.dlq||(s.dlq=[]);const m=Rt(s.config.before,c,l),y=s.config.next,w=s.config?.cache,v=w?$(w):void 0,b=v?Ze(v,e):void 0,k=s.config?.state?Y(s.config.state):void 0,S=k?.filter(e=>"get"===e.mode),q=k?.filter(e=>"set"===e.mode);let I=0,O=0;return await Promise.all(d.map(async t=>{let r;if(t.globals=E(a,t.globals),t.user=E(i,t.user),v?.stop&&b){const e=M(l,t),n=await _(v,b,e);if("HIT"===n?.status)return t;"MISS"===n?.status&&(r={key:n.key,ttl:n.rule.ttl})}let u=t,d=n.respond;if(m.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const s=await it(e,e.transformers,m,t,l,n.respond,`destination.${o}.before`);if(null===s.event)return t;s.respond&&(d=s.respond),u=Array.isArray(s.event)?s.event[0]:s.event}if(v&&!v.stop&&b){const e=M(l,u),n=await _(v,b,e);if("HIT"===n?.status)return t;"MISS"===n?.status&&(r={key:n.key,ttl:n.rule.ttl})}S&&S.length>0&&u&&(u=await X(S,t=>et(t,e),u,e));const f=Date.now();let h=!1;const w=await W(Nt,t=>{const n=s.type||"unknown";e.logger.scope(n).error("Push failed",{error:t,event:u.name}),p=t,h=!0;const r=s.dlq,a=s.config.id||o,i={max:s.config.dlqMax??100},c=At(r,[u,t],i);if(c.dropped>0){$t(e,a);const t=_t(e.status,J("destination",a),"dlq",c.dropped);Tt(r,e.logger.scope(s.type||"unknown"),"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:a,cap:i.max,droppedCount:t})}else r.length<i.max&&jt(r)})(e,s,o,u,l,d);if(I+=Date.now()-f,r&&b&&void 0===s.config.mock&&R(b,r.key,w??!0,r.ttl),!h&&!Mt(w)&&q&&q.length>0&&u&&(u=await X(q,t=>et(t,e),u,e)),void 0===w||Mt(w)||(g=w),Mt(w)&&O++,!h&&y){void 0!==w&&(l._response=w);const t=Rt(y,c,l);if(t.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const n=await it(e,e.transformers,t,u,l,d,`destination.${o}.next`);n.respond&&(d=n.respond)}}return t})),{id:o,destination:s,error:p,response:g,totalDuration:I,batchedCount:O,allowedCount:d.length}})),l={},d={},f={};for(const t of u){if(t.skipped)continue;const n=t.destination,o={type:n.type||"unknown",data:t.response};$t(e,t.id);const s=e.status.destinations[t.id],r=Date.now();if(s.queuePushSize=n.queuePush?.length??0,s.dlqSize=n.dlq?.length??0,t.error)o.error=t.error,f[t.id]=o,s.failed++,s.lastAt=r,s.duration+=t.totalDuration||0,e.status.failed++;else if(t.queue&&t.queue.length)d[t.id]=o;else{const n=t.batchedCount??0,a=t.allowedCount??0;(Math.max(0,a-n)>0||0===a)&&(l[t.id]=o,s.count++,s.lastAt=r,s.duration+=t.totalDuration||0,e.status.out++)}}return Bt({event:t,...Object.keys(l).length&&{done:l},...Object.keys(d).length&&{queued:d},...Object.keys(f).length&&{failed:f}})}async function Gt(e,t,n){if(t.init&&!t.config.init){const o=t.type||"unknown",s=e.logger.scope(o),r={collector:e,logger:s,id:n,config:t.config,env:Ft(t.env,t.config.env)};s.debug("init");const a=Date.now();let i;N(e,Xe(e,{stepId:J("destination",n),stepType:"destination",phase:"init",eventId:"",now:a}));try{i=await V(t.init,"DestinationInit",e.hooks,e.logger)(r)}catch(t){const o=Date.now(),s=Xe(e,{stepId:J("destination",n),stepType:"destination",phase:"error",eventId:"",now:o});throw s.durationMs=o-a,s.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},N(e,s),t}if(!1===i)return i;if(t.config={...i||t.config,init:!0},t.queueOn?.length){const o=t.queueOn;t.queueOn=[];for(const{type:s,data:r}of o)It(e,t,n,s,r)}s.debug("init done")}return!0}async function Nt(e,t,n,o,s,r){const{config:a}=t,i=await Q(o,a,e);if(i.ignore)return!1;const c=t.type||"unknown",u=e.logger.scope(c),l={collector:e,logger:u,id:n,config:a,data:i.data,rule:i.mapping,ingest:s,env:{...Ft(t.env,a.env),...r?{respond:r}:{}}};if(void 0!==a.mock)return u.debug("mock",{event:i.event.name}),a.mock;const d=i.mapping,f=void 0!==d?.batch,p=f?i.mappingKey||"* *":" batch-all";if((f||void 0!==a.batch)&&t.pushBatch&&void 0===a.mock){if(t.batches=t.batches||{},!t.batches[p]){const o={key:p,entries:[],events:[],data:[]},s=Pt(d?.batch),r=Pt(a.batch),i=s.wait??r.wait??3e4,c=s.size??r.size??1e3,l=s.age??r.age??3e4,g=Ft(t.env,a.env),h=G(async()=>{const o=t.batches[p],s=o.batched;if(0===s.entries.length)return;const r={key:s.key,entries:s.entries,events:s.events,data:s.data};s.entries=[],s.events=[],s.data=[];const i=r.entries[0],c={collector:e,logger:u,id:n,config:a,data:void 0,rule:o.isDefault?void 0:i.rule,ingest:i.ingest,env:{...g,...i.respond?{respond:i.respond}:{}}};u.debug("push batch",{events:r.entries.length});const l=t.config.id||n,d=$t(e,l),f=Date.now(),h=Xe(e,{stepId:J("destination",n),stepType:"destination",phase:"flush",eventId:"",now:f});h.batch={size:r.entries.length,index:0},N(e,h);const m=n=>{const o=t.dlq=t.dlq||[],s={max:t.config.dlqMax??100};let r=0;for(const e of n)r+=At(o,e,s).dropped;if(r>0){const t=_t(e.status,J("destination",l),"dlq",r);Tt(o,u,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:l,cap:s.max,droppedCount:t})}else o.length<s.max&&jt(o);d.failed+=n.length,d.dlqSize=o.length,e.status.failed+=n.length};let y=r.entries.length;const w=await W(V(t.pushBatch,"DestinationPushBatch",e.hooks,e.logger),t=>{y=0;const o=Date.now(),s=Xe(e,{stepId:J("destination",n),stepType:"destination",phase:"error",eventId:"",now:o});s.durationMs=o-f,s.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},s.batch={size:r.entries.length,index:0},N(e,s),m(r.entries.map(e=>[e.event,t])),u.error("Push batch failed",{error:t instanceof Error?t.message:String(t),entries:r.entries.length})})(r,c);if(K(v=w)&&Array.isArray(v.failed)&&w.failed.length>0){const e=[],t=new Set;for(const n of w.failed){const o=r.entries[n.index];o&&!t.has(n.index)&&(t.add(n.index),e.push([o.event,n.error??new Error(`Push batch entry ${n.index} failed (no per-row error provided)`)]))}e.length>0&&(m(e),y=Math.max(0,r.entries.length-e.length),u.error("Push batch partial failure",{failed:e.length,delivered:y,entries:r.entries.length}))}var v;u.debug("push batch done"),d.inFlightBatch=Math.max(0,(d.inFlightBatch??0)-r.entries.length),y>0&&(d.count+=y,d.lastAt=Date.now(),e.status.out+=y)},{wait:i,size:c,age:l});t.batches[p]={batched:o,isDefault:!f,batchFn:()=>{h()},flush:async()=>{await h.flush()}}}const o=t.batches[p];o.batched.entries.push({event:i.event,ingest:s,respond:r,rule:d,data:i.data}),o.batched.events.push(i.event),L(i.data)&&o.batched.data.push(i.data);const c=t.config.id||n,l=$t(e,c);return l.inFlightBatch=(l.inFlightBatch??0)+1,o.batchFn(),Et}{u.debug("push",{event:i.event.name});const o="string"==typeof i.event.id?i.event.id:"",s=Date.now(),r=Xe(e,{stepId:J("destination",n),stepType:"destination",phase:"in",eventId:o,now:s});i.mappingKey&&(r.mappingKey=i.mappingKey),i.event.consent&&(r.consent={...i.event.consent}),N(e,r);try{const r=await V(t.push,"DestinationPush",e.hooks,e.logger)(i.event,l),a=Date.now(),c=Xe(e,{stepId:J("destination",n),stepType:"destination",phase:"out",eventId:o,now:a});return c.durationMs=a-s,c.outEvent=r,i.mappingKey&&(c.mappingKey=i.mappingKey),N(e,c),u.debug("push done"),r}catch(t){const r=Date.now(),a=Xe(e,{stepId:J("destination",n),stepType:"destination",phase:"error",eventId:o,now:r});throw a.durationMs=r-s,a.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},i.mappingKey&&(a.mappingKey=i.mappingKey),N(e,a),t}}}function Bt(e){return{ok:!e?.failed,...e}}function zt(e){const{code:t,config:n={},env:o={},cache:s,state:r}=e,{config:a}=nt(e,"before"),{config:i}=nt({...e,config:a},"next"),c={...t.config,...n,...i};s&&(c.cache=s),void 0!==r&&void 0===c.state&&(c.state=r);const u=Ft(t.env,o);return{...t,config:c,env:u}}function Ft(e,t){return e||t?t?e&&K(e)&&K(t)?{...e,...t}:t:e:{}}async function Lt(e,t,n){const o=Object.entries(e).map(async([e,o])=>{const s=o.destroy;if(!s)return;const r=o.type||"unknown",a=n.scope(r),i={id:e,config:o.config,env:o.env??{},logger:a};let c;try{await Promise.race([s(i),new Promise((n,o)=>{c=setTimeout(()=>o(new Error(`${t} '${e}' destroy timed out`)),5e3)})])}catch(n){a.error(`${t} '${e}' destroy failed: ${n}`)}finally{c&&clearTimeout(c)}});await Promise.allSettled(o)}function Ut(e,t){e.stateVersion++,e.cellVersion[t]=e.stateVersion}async function Kt(e,t,n){let o,s,r=!1;const a=function(e){return e.cascade?()=>{}:(e.cascade={counts:new WeakMap},()=>{e.cascade=void 0})}(e);try{return await async function(){switch(t){case Ye.Config:_e(n)&&(Ee(e.config,n,{shallow:!1}),s=n,r=!0);break;case Ye.Consent:if(_e(n)){const{update:t}=function(e,t){const n={};return Object.entries(t).forEach(([e,t])=>{n[e]=!!t}),e.consent=D(e.consent,n),{update:n}}(e,n);Ut(e,Ye.Consent),s=t,r=!0}break;case Ye.Custom:_e(n)&&(e.custom=Ee(e.custom,n),Ut(e,Ye.Custom),s=n,r=!0);break;case Ye.Destination:_e(n)&&"code"in n&&_e(n.code)&&(o=await async function(e,t){const{code:n,config:o={},env:s={},before:r,next:a,cache:i,state:c}=t;if(!U(n.push))return Bt({ok:!1,failed:{invalid:{type:"invalid",error:"Destination code must have a push method"}}});const u=o||{init:!1};let l=r?{...u,before:r}:{...u};a&&(l={...l,next:a}),i&&(l={...l,cache:i}),void 0!==c&&void 0===l.state&&(l={...l,state:c});let d=l.id;if(!d)do{d=B(5,"abcdefghijklmnopqrstuvwxyz")}while(e.destinations[d]||e.pending.destinations[d]);if(l.require?.length){e.pending.destinations[d]=t,await pt(e);const n=e.destinations[d];return n?Ht(e,void 0,{},{[d]:n}):Bt({ok:!0})}const f={...n,config:l,env:Ft(n.env,s)};return e.destinations[d]=f,!1!==f.config.queue&&(f.queuePush=[...e.queue]),Ht(e,void 0,{},{[d]:f})}(e,n));break;case Ye.Globals:_e(n)&&(e.globals=Ee(e.globals,n),Ut(e,Ye.Globals),s=n,r=!0);break;case Ye.Hook:if(_e(n)&&$e(n.name)&&Pe(n.fn)){const{name:t,fn:o}=n;e.hooks[t]=o,s=n,r=!0}break;case Ye.On:if(_e(n)&&$e(n.type)){const{type:t,rules:o}=n;await async function(e,t,n){const o=e.on,s=o[t]||[],r=ee(n)?n:[n];r.forEach(e=>{s.push(e)}),o[t]=s,Ot(e,t,r)}(e,t,o)}break;case Ye.Ready:r=!0;break;case Ye.Run:o=await async function(e,t){return e.allowed=!0,e.timing=Date.now(),t&&(t.consent&&(e.consent=Ee(e.consent,t.consent),Ut(e,Ye.Consent)),t.user&&(e.user=Ee(e.user,t.user),Ut(e,Ye.User)),t.globals&&(e.globals=Ee(e.config.globalsStatic||{},t.globals),Ut(e,Ye.Globals)),t.custom&&(e.custom=Ee(e.custom,t.custom),Ut(e,Ye.Custom))),Object.values(e.destinations).forEach(e=>{e.queuePush=[]}),e.queue=[],e.round++,await pt(e),await async function(e){for(const t of ht){if(!yt(e,t))continue;const n=xt(e,t);Ot(e,t,e.on[t]||[]);for(const[o,s]of Object.entries(e.sources))dt(s)&&await Ct(e,s,o,t,n)}}(e),await Ht(e)}(e,n),r=!0;break;case Ye.Session:r=!0;break;case Ye.Shutdown:e.hasShutdown||(e.hasShutdown=!0,await async function(e){const t=e.logger;await Lt(e.sources,"source",t),await async function(e,t){const n=Object.entries(e).flatMap(([e,n])=>{const o=n.batches;if(!o)return[];const s=t.scope(n.type||"destination");return Object.values(o).map(async t=>{let n;try{await Promise.race([t.flush(),new Promise((t,o)=>{n=setTimeout(()=>o(new Error(`destination '${e}' batch flush timed out`)),5e3)})])}catch(t){s.error(`destination '${e}' batch flush failed: ${t}`)}finally{n&&clearTimeout(n)}})});await Promise.allSettled(n)}(e.destinations,t),await Lt(e.destinations,"destination",t),await Lt(e.transformers,"transformer",t),await Lt(e.stores,"store",t)}(e));break;case Ye.User:_e(n)&&(Ee(e.user,n,{shallow:!1}),Ut(e,Ye.User),s=n,r=!0)}return r&&(await async function(e,t,n,o){e.seenEvents.add(String(t));let s=n||[];n||(s=e.on[t]||[]);const r=xt(e,t,o);let a=!1;for(const[n,o]of Object.entries(e.sources)){if(o.config.require?.length){const e=o.config.require.indexOf(t);-1!==e&&o.config.require.splice(e,1)}o.on&&(dt(o)?await Ct(e,o,n,t,r)&&(a=!0):(o.queueOn=o.queueOn||[],o.queueOn.push({type:t,data:r})))}Object.entries(e.destinations).forEach(([n,o])=>{if(o.on){if(!o.config.init)return o.queueOn=o.queueOn||[],void o.queueOn.push({type:t,data:r});It(e,o,n,t,r)}});for(const[t,n]of Object.entries(e.sources))dt(n)&&n.queueOn?.length&&await lt(e,n,t);const i=Object.values(e.sources).some(e=>!dt(e)&&e.config.require?.length);return(Object.keys(e.pending.destinations).length>0||i)&&await pt(e),Ot(e,t,s,o),!a}(e,t,void 0,s),o=await Ht(e)),o||Bt({ok:!0})}()}finally{a()}}function Qt(e,t){return{timing:Math.round((Date.now()-e.timing)/10)/100,source:{type:"collector",schema:"4",version:"4.2.0-next-1780690800063"},...t}}function Jt(e,t){if(!t.name)throw new Error("Event name is required");const[n,o]=t.name.split(" ");if(!n||!o)throw new Error("Event name is invalid");const{timestamp:s=Date.now(),name:r=`${n} ${o}`,data:a={},context:i={},globals:c=e.globals,custom:u={},user:l=e.user,nested:d=[],consent:f=e.consent,id:p=Me(),trigger:g="",entity:h=n,action:m=o,timing:y=0,source:w={type:"collector",schema:"4"}}=t;return{name:r,data:a,context:i,globals:c,custom:u,user:l,nested:d,consent:f,id:p,trigger:g,entity:h,action:m,timestamp:s,timing:y,source:w}}function Wt(e,t){const n=Fe(async(n,o={})=>await ze(async()=>{const s=Date.now(),{id:r,ingest:a,respond:i,mapping:c,preChain:u,include:l,exclude:d}=o;let f=i,p=n;const g=l||d?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,l,d):void 0,h=a??Re(r||"unknown");if(c){const t=await Be(p,c,e);if(t.ignore)return Bt({ok:!0});if(c.consent&&!Ne(c.consent,e.consent,t.event.consent))return Bt({ok:!0});p=t.event}if(u?.length&&e.transformers&&Object.keys(e.transformers).length>0){const n=await it(e,e.transformers,u,p,h,f,r?`source.${r}.next`:void 0);if(null===n.event)return Bt({ok:!0});if(n.stopped)return n.respond&&(f=n.respond),Bt({ok:!0});if(n.respond&&(f=n.respond),Array.isArray(n.event)){const o=await Promise.all(n.event.map(async n=>{const o=t(n),s=Jt(e,o);return Ht(e,s,{id:r,ingest:h,respond:f},g)}));if(r){e.status.sources[r]||(e.status.sources[r]={count:0,duration:0});const t=e.status.sources[r];t.count+=n.event.length,t.lastAt=Date.now(),t.duration+=Date.now()-s}return o[0]??Bt({ok:!0})}p=n.event}const m=function(e,t){return Jt(e,Qt(e,t))}(e,p),y=await Ht(e,m,{id:r,ingest:h,respond:f},g);if(r){e.status.sources[r]||(e.status.sources[r]={count:0,duration:0});const t=e.status.sources[r];t.count++,t.lastAt=Date.now(),t.duration+=Date.now()-s}return y},t=>{if(t instanceof Ge)throw t;return e.status.failed++,e.logger.error("push failed",{event:n,ingest:o.ingest,error:t}),Bt({ok:!1})})(),"Push",e.hooks,e.logger);return async(t,o)=>{const s="string"==typeof t.id?t.id:"",r=Date.now();He(e,Xe(e,{stepId:"collector.push",stepType:"collector",phase:"in",eventId:s,now:r}));try{const a=await n(t,o),i=Date.now(),c=Xe(e,{stepId:"collector.push",stepType:"collector",phase:"out",eventId:s,now:i});return c.durationMs=i-r,c.outEvent=a,He(e,c),a}catch(t){const n=Date.now(),o=Xe(e,{stepId:"collector.push",stepType:"collector",phase:"error",eventId:s,now:n});throw o.durationMs=n-r,o.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},He(e,o),t}}}function Vt(e={}){const t=e.maxEntries??1e4,n=e.lowWaterMark??.8,o=e.sweepIntervalMs??6e4,s=Math.floor(t*n),r=new Map,a={hits:0,misses:0,populates:0,writes:0,deletes:0,evictions_entries:0,evictions_ttl:0};let i;return o>0&&(i=setInterval(function(){const e=Date.now();let t=0;for(const[n,o]of r)void 0!==o.expires&&o.expires<=e&&(r.delete(n),t++);a.evictions_ttl+=t},o),i&&"function"==typeof i.unref&&i.unref()),{type:"memory",config:{},get(e){const t=r.get(e);if(t)return void 0!==t.expires&&t.expires<=Date.now()?(r.delete(e),a.evictions_ttl++,void a.misses++):(r.delete(e),r.set(e,t),a.hits++,t.value);a.misses++},set(e,n,o){const i=!r.has(e);i||r.delete(e),r.set(e,{value:n,expires:void 0!==o?Date.now()+o:void 0}),a.writes++,i&&a.populates++,r.size>t&&function(){if(r.size<=t)return;const e=r.size-s;let n=0;for(const t of r.keys()){if(n>=e)break;r.delete(t),n++}a.evictions_entries+=n}()},delete(e){r.delete(e)&&a.deletes++},get counters(){return{...a}},destroy(){void 0!==i&&(clearInterval(i),i=void 0),r.clear()}}}function Yt(e,t){const{cacheConfig:n,cacheStore:o,namespace:s,logger:r,storeId:a,collector:i}=t,c=(e,t)=>{if(!i)return;const n=Xe(i,{stepId:`store.${a}`,stepType:"store",phase:"in",eventId:"",now:Date.now()});n.meta={op:"cache",cached:"hit"===t,status:t,key:e},Ve(i,n)},u={hits:0,misses:0,populates:0,writes:0,deletes:0,inflight_dedups:0},l=n.rules.map(e=>({match:e.match?We(e.match):()=>!0,ttl:e.ttl})),d=e=>`${s}:${e}`;function f(e,t){const n=void 0===t?{key:e}:{key:e,value:t};return l.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=d(t),s=await o.get(n);if(void 0!==s)return u.hits++,c(t,"hit"),s;const r=p.get(n);if(r)return u.inflight_dedups++,c(t,"hit"),r;u.misses++,c(t,"miss");const a=(async()=>{try{const s=await e.get(t);if(void 0===s)return;const r=f(t,s);if(r)try{await o.set(n,s,1e3*r.ttl),u.populates++}catch(e){g("set",t,e)}return s}finally{p.delete(n)}})();return p.set(n,a),a},async set(t,n,s){u.writes++,await e.set(t,n,s);const r=f(t,n);if(r)try{await o.set(d(t),n,1e3*r.ttl)}catch(e){g("set",t,e)}},async delete(t){u.deletes++,await e.delete(t);try{await o.delete(d(t))}catch(e){g("delete",t,e)}}};function g(e,t,n){const o=`store-cache(${a}): cache ${e} failed for "${t}"; backing succeeded, continuing`;r?r.warn(o,{error:n}):console.warn(o,n)}}function Xt(e,t,n){const o=`store.${n}`,s=Je(t.get,"StoreGet",e.hooks,e.logger),r=Je(t.set,"StoreSet",e.hooks,e.logger),a=Je(t.delete,"StoreDelete",e.hooks,e.logger);t.get=async t=>{const n=Date.now(),r=Xe(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:n});r.meta={op:"get",key:t},Qe(e,r);try{const r=await s(t),a=Date.now(),i=Xe(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:a});return i.durationMs=a-n,i.meta={op:"get",key:t},Qe(e,i),r}catch(s){const r=Date.now(),a=Xe(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:r});throw a.durationMs=r-n,a.meta={op:"get",key:t},a.error=s instanceof Error?{name:s.name,message:s.message}:{message:String(s)},Qe(e,a),s}},t.set=async(t,n,s)=>{const a=Date.now(),i=Xe(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:a});i.meta={op:"set",key:t},Qe(e,i);try{await r(t,n,s);const i=Date.now(),c=Xe(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:i});c.durationMs=i-a,c.meta={op:"set",key:t},Qe(e,c)}catch(n){const s=Date.now(),r=Xe(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:s});throw r.durationMs=s-a,r.meta={op:"set",key:t},r.error=n instanceof Error?{name:n.name,message:n.message}:{message:String(n)},Qe(e,r),n}},t.delete=async t=>{const n=Date.now(),s=Xe(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:n});s.meta={op:"delete",key:t},Qe(e,s);try{await a(t);const s=Date.now(),r=Xe(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:s});r.durationMs=s-n,r.meta={op:"delete",key:t},Qe(e,r)}catch(s){const r=Date.now(),a=Xe(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:r});throw a.durationMs=r-n,a.meta={op:"delete",key:t},a.error=s instanceof Error?{name:s.name,message:s.message}:{message:String(s)},Qe(e,a),s}}}async function Zt(e){const t=T({globalsStatic:{},sessionStatic:{},run:!0,queueMax:1e3},e,{merge:!1,extend:!1}),n={level:e.logger?.level,handler:e.logger?.handler},o=j(n),s={...t.globalsStatic,...e.globals},r={allowed:!1,config:t,consent:e.consent||{},custom:e.custom||{},destinations:{},transformers:{},stores:{},globals:s,hooks:e.hooks||{},observers:new Set,logger:o,on:{},queue:[],round:0,stateVersion:0,cellVersion:{},delivery:new WeakMap,session:void 0,status:{startedAt:Date.now(),in:0,out:0,failed:0,sources:{},destinations:{},dropped:{}},timing:Date.now(),user:e.user||{},sources:{},pending:{destinations:{}},hasShutdown:!1,seenEvents:new Set,push:void 0,command:void 0};var a,i;r.push=Wt(r,e=>Qt(r,e)),r.command=(i=Kt,Ue(async(e,t,n)=>await Ke(async()=>await i(a,e,t,n),n=>{if(n instanceof Le)throw n;return a.status.failed++,a.logger.error("command failed",{command:e,data:t,error:n}),Bt({ok:!1})})(),"Command",(a=r).hooks,a.logger));const c=e.stores||{};return r.stores=await async function(e,t={}){const n={};for(const[o,s]of Object.entries(t)){const{code:t,config:r={},env:a={}}=s,i=e.logger.scope("store").scope(o),c={collector:e,logger:i,id:o,config:r,env:a},u=await t(c);n[o]=u}const o=t,s=function(e){const t={};for(const n of Object.keys(e))t[n]="WHITE";const n=[],o=[];function s(r){const a=t[r];if("BLACK"===a)return;if("GRAY"===a){const e=o.indexOf(r),t=o.slice(-1===e?0:e).concat(r).join(" -> ");throw new Error(`Cycle in cache.store chain: ${t}`)}t[r]="GRAY",o.push(r);const i=e[r].cache?.store;if(void 0!==i){if(!(i in e))throw new Error(`Store "${r}" cache.store references "${i}", which is not declared in flow.stores`);s(i)}o.pop(),t[r]="BLACK",n.push(r)}for(const n of Object.keys(e))"WHITE"===t[n]&&s(n);return n}(o);for(const t of s){const s=o[t].cache;if(!s)continue;let r,a;void 0!==s.store?(r=n[s.store],a=s.store):(n.__cache||(n.__cache=Vt()),r=n.__cache,a="__cache");const i=s.namespace??t;e.logger.scope("store-cache").scope(t).info(`store "${t}" caches with namespace "${i}:" via ${a}`),n[t]=Yt(n[t],{storeId:t,cacheConfig:s,cacheStore:r,namespace:i,logger:e.logger.scope("store-cache").scope(t),collector:e})}for(const[t,o]of Object.entries(n))"__cache"!==t&&Xt(e,o,t);return n}(r,c),function(e,t,n){const o=new Map;for(const[n,s]of Object.entries(e))t[n]&&o.set(s,t[n]);if(0!==o.size)for(const e of[n.transformers,n.destinations,n.sources])if(e)for(const t of Object.values(e))s(t.env);function s(e){if(e)for(const[t,n]of Object.entries(e))if("object"==typeof n&&null!==n){const s=o.get(n);s&&(e[t]=s)}}}(c,r.stores,e),r.stores.__cache||(r.stores.__cache=Vt()),r.destinations=await async function(e,t={}){const n={};for(const[o,s]of Object.entries(t))s.config?.require?.length?e.pending.destinations[o]=s:n[o]=zt(s);return n}(r,e.destinations||{}),r.transformers=await async function(e,t={}){const n={};for(const[o,s]of Object.entries(t)){const{code:t,env:r={}}=s,a=Ae(s,"Transformer");if(!a.ok){e.logger.warn(`Transformer ${o} invalid (${a.code}): ${a.reason}. Skipping.`);continue}const{config:i}=nt(s,"before"),{config:c}=nt({...s,config:i},"next"),u=Object.keys(r).length>0?{...c,env:r}:c,{cache:l}=s,d=l?{...u,cache:l}:u,f=s.config?.state??s.state,p=void 0!==f&&void 0===d.state?{...d,state:f}:d,g=e.logger.scope("transformer").scope(o),h={collector:e,logger:g,id:o,ingest:me(o),config:p,env:r},m=t??(e=>{const t=s.mapping;if(t){const n=[];if(void 0!==t.data&&n.push("data"),t.mapping)for(const[e,o]of Object.entries(t.mapping))if("object"==typeof o&&null!==o)for(const[t,s]of Object.entries(o)){if("object"!=typeof s||null===s)continue;const o=s;void 0!==o.data&&n.push(`mapping[${e}][${t}].data`),void 0!==o.silent&&n.push(`mapping[${e}][${t}].silent`)}return n.length>0&&e.collector.logger.warn(`Transformer ${o}: \`${n.join(", ")}\` ignored at transformer position (only event-mutating fields apply).`),{type:"pass",config:e.config,push:async n=>{const o=await De(n,t,e.collector);return!o.ignore&&{event:o.event}}}}return{type:"pass",config:e.config,push:e=>({event:e})}}),y=await m(h);void 0!==s.before&&void 0===y.config?.before&&(y.config={...y.config??{},before:s.before}),void 0!==s.next&&void 0===y.config?.next&&(y.config={...y.config??{},next:s.next}),void 0!==f&&void 0===y.config?.state&&(y.config={...y.config??{},state:f}),n[o]=y}return n}(r,e.transformers||{}),r}async function en(e){e=e||{};const t=await Zt(e),n=(o=t,{type:"elb",config:{},push:async(e,t,n,s,r)=>{if("string"==typeof e&&e.startsWith("walker ")){const n=e.replace("walker ","");return o.command(n,t)}let a;if("string"==typeof e)a={name:e},t&&"object"==typeof t&&!Array.isArray(t)&&(a.data=t);else{if(!e||"object"!=typeof e)return Bt({ok:!1});a=e,t&&"object"==typeof t&&!Array.isArray(t)&&(a.data={...a.data||{},...t})}return n&&"object"==typeof n&&(a.context=n),s&&Array.isArray(s)&&(a.nested=s),r&&"object"==typeof r&&(a.custom=r),o.push(a)}});var o;t.sources.elb=n,await async function(e,t={}){const n={};for(const[o,s]of Object.entries(t)){const t=await ft(e,o,s);if(!t)continue;const r=s.config?.require;t.config={...t.config,init:!1,...r?{require:[...r]}:{}},n[o]=t}Object.assign(e.sources,n);for(const t of Object.keys(n)){const n=e.sources[t];let o=!1;n.init&&await ie(n.init.bind(n),n=>{if(n instanceof re)throw n;o=!0,e.status.failed++,e.logger.scope("source").error("source init failed",{sourceId:t,error:n})})(),o||(n.config.init=!0,dt(n)&&await lt(e,n,t))}return await pt(e),n}(t,e.sources||{});const{consent:s,user:r,globals:a,custom:i}=e;s&&await t.command("consent",s),r&&await t.command("user",r),a&&await t.command("globals",a),i&&await t.command("custom",i),t.config.run&&await t.command("run");let c=n.push;const u=Object.values(t.sources).filter(e=>"elb"!==e.type),l=u.find(e=>e.config.primary);return l?c=l.push:u.length>0&&(c=u[0].push),{collector:t,elb:c}}var tn=async e=>{let t;return{get flow(){return t},trigger:()=>async n=>{if(!t){const n=await en(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 s={awsRequestId:`test-${Date.now()}`},r=o.push,a=await r(n,s);let i;try{i=JSON.parse(a.body||"{}")}catch{i=a.body}const c={};if(a.headers)for(const[e,t]of Object.entries(a.headers))void 0!==t&&(c[e]=String(t));return{statusCode:a.statusCode,body:i,headers:c}}}};function nn(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 on={};t(on,{createTrigger:()=>yn,env:()=>sn,step:()=>dn});var sn={};t(sn,{push:()=>un,simulation:()=>ln});var rn=()=>{},an={error:rn,warn:rn,info:rn,debug:rn,throw:e=>{throw"string"==typeof e?new Error(e):e},json:rn,scope:()=>an},cn=()=>()=>Promise.resolve({ok:!0}),un={get push(){return cn()},get command(){return cn()},get elb(){return cn()},logger:an},ln=["AWS.SQSClient"],dn={};t(dn,{decoderText:()=>gn,malformedJson:()=>hn,orderComplete:()=>pn,pageView:()=>fn});var fn={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"]]},pn={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"]]},gn={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"]]},hn={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 mn(e){if("object"!=typeof e||null===e)return!1;const t=e;return"sqs"===t.type&&"function"==typeof t.push}var yn=async e=>{let t;return{get flow(){return t},trigger:()=>async n=>{if(!t){const n=await en(e);t={collector:n.collector,elb:n.elb}}const o=function(e){for(const t of Object.values(e.sources??{}))if(mn(t))return t}(t.collector);if(!o)throw new Error("sqs source not registered in collector, ensure it is configured in sources");const s={MessageId:n.MessageId,Body:n.Body,ReceiptHandle:n.ReceiptHandle,Attributes:n.Attributes,MessageAttributes:n.MessageAttributes},r=await o.push(s),a=[];return r&&"object"==typeof r&&(r.acked&&a.push(["message.ack",n.MessageId]),r.nacked&&a.push(["message.nack",n.MessageId])),a}}};export{v as examples,n as schemas,on as sqsExamples};//# sourceMappingURL=dev.mjs.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$meta": {
3
3
  "package": "@walkeros/server-source-aws",
4
- "version": "4.2.0-next-1780610489068",
4
+ "version": "4.2.0-next-1780690800063",
5
5
  "type": "source",
6
6
  "platform": [
7
7
  "server"
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@walkeros/server-source-aws",
3
3
  "description": "AWS server sources for walkerOS (Lambda, API Gateway, Function URLs)",
4
- "version": "4.2.0-next-1780610489068",
4
+ "version": "4.2.0-next-1780690800063",
5
5
  "license": "MIT",
6
6
  "main": "./dist/index.js",
7
7
  "module": "./dist/index.mjs",
@@ -23,14 +23,14 @@
23
23
  "dependencies": {
24
24
  "@aws-sdk/client-sqs": "^3.952.0",
25
25
  "@aws-sdk/client-sns": "^3.952.0",
26
- "@walkeros/core": "4.2.0-next-1780610489068"
26
+ "@walkeros/core": "4.2.0-next-1780690800063"
27
27
  },
28
28
  "peerDependencies": {
29
29
  "@types/aws-lambda": "^8.10.0"
30
30
  },
31
31
  "devDependencies": {
32
32
  "@types/aws-lambda": "^8.10.159",
33
- "@walkeros/collector": "4.2.0-next-1780610489068"
33
+ "@walkeros/collector": "4.2.0-next-1780690800063"
34
34
  },
35
35
  "repository": {
36
36
  "url": "git+https://github.com/elbwalker/walkerOS.git",