@walkeros/server-source-aws 4.3.1 → 4.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # @walkeros/server-source-aws
2
2
 
3
+ ## 4.3.2
4
+
5
+ ### Patch Changes
6
+
7
+ - @walkeros/core@4.3.2
8
+
3
9
  ## 4.3.1
4
10
 
5
11
  ### Patch Changes
package/dist/dev.js CHANGED
@@ -1 +1 @@
1
- "use strict";var e,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,o=Object.getOwnPropertyNames,r=Object.prototype.hasOwnProperty,s=(e,n)=>{for(var o in n)t(e,o,{get:n[o],enumerable:!0})},i={};s(i,{examples:()=>E,schemas:()=>a,sqsExamples:()=>St}),module.exports=(e=i,((e,s,i,a)=>{if(s&&"object"==typeof s||"function"==typeof s)for(let c of o(s))r.call(e,c)||c===i||t(e,c,{get:()=>s[c],enumerable:!(a=n(s,c))||a.enumerable});return e})(t({},"__esModule",{value:!0}),e));var a={};s(a,{CorsOptionsSchema:()=>f,CorsOrigin:()=>p,HttpMethod:()=>l,SettingsSchema:()=>g,settings:()=>h,sqsSettings:()=>I,sqsSetup:()=>S});var c=require("@walkeros/core/dev"),u=require("@walkeros/core/dev"),d=require("@walkeros/core/dev"),l=d.z.enum(["GET","POST","PUT","PATCH","DELETE","OPTIONS","HEAD"]),p=d.z.union([d.z.string(),d.z.array(d.z.string()),d.z.literal("*")]),f=d.z.object({origin:p.describe("Allowed origins (* for all, URL string, or array of URLs)").optional(),methods:d.z.array(l).describe("Allowed HTTP methods").optional(),headers:d.z.array(d.z.string()).describe("Allowed request headers").optional(),credentials:d.z.boolean().describe("Allow credentials (cookies, authorization headers)").optional(),maxAge:d.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"),v=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()}),w=require("@walkeros/core/dev"),b=w.z.record(w.z.string(),w.z.string()),k=w.z.object({region:w.z.string().min(1).describe("AWS region.").optional(),fifoQueue:w.z.boolean().describe("FIFO queue with content-based deduplication. Auto-appends .fifo suffix to the queue name.").optional(),visibilityTimeoutSeconds:w.z.number().int().nonnegative().describe("Visibility timeout in seconds. Default: 30.").optional(),messageRetentionSeconds:w.z.number().int().positive().describe("Message retention period in seconds. Default: 345600 (4 days).").optional(),maximumMessageSize:w.z.number().int().min(1024).max(262144).describe("Max message size in bytes. Default: 262144 (256 KB).").optional(),kmsMasterKeyId:w.z.string().describe("KMS key alias or ID for at-rest encryption.").optional(),deadLetterQueue:w.z.object({arn:w.z.string().describe("ARN of an existing DLQ. Mutually exclusive with create: true.").optional(),create:w.z.boolean().describe("Create a sibling DLQ named <queueName>-dlq. Default: false.").optional(),maxReceiveCount:w.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:w.z.object({topicArn:w.z.string().min(1).describe("Topic ARN to subscribe to."),rawMessageDelivery:w.z.boolean().describe("Deliver SNS messages without the SNS envelope.").optional(),filterPolicy:w.z.record(w.z.string(),w.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()}),I=(0,m.zodToSchema)(v),S=(0,m.zodToSchema)(k),E={};s(E,{createTrigger:()=>kt,env:()=>O,step:()=>A,trigger:()=>It});var O={};s(O,{push:()=>j});var q=()=>()=>Promise.resolve({ok:!0}),C=()=>{},x={error:C,warn:C,info:C,debug:C,throw:e=>{throw"string"==typeof e?new Error(e):e},json:C,scope:()=>x},j={get push(){return q()},get command(){return q()},get elb(){return q()},logger:x},A={};s(A,{apiGatewayV1Post:()=>D,lambdaGet:()=>P,lambdaPost:()=>T});var T={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"}}]]},D={title:"API Gateway v1 POST",description:"A REST API Gateway v1 POST request with a JSON body is converted into a walker elb event.",trigger:{type:"POST"},in:{httpMethod:"POST",path:"/collect",requestContext:{requestId:"req-789",identity:{sourceIp:"203.0.113.42"}},queryStringParameters:null,body:JSON.stringify({event:"page view",data:{title:"Home"}}),isBase64Encoded:!1},out:[["elb",{name:"page view",data:{title:"Home"}}]]},P={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"}'}]]},M=require("@walkeros/core"),z=require("@walkeros/core"),$=require("@walkeros/core"),_=require("@walkeros/core"),R=(require("@walkeros/core"),require("@walkeros/core")),B=require("@walkeros/core"),G=require("@walkeros/core"),N=require("@walkeros/core"),H=require("@walkeros/core"),K=require("@walkeros/core"),U=require("@walkeros/core"),F=require("@walkeros/core"),L=require("@walkeros/core"),V=require("@walkeros/core"),W=require("@walkeros/core"),Q=require("@walkeros/core"),J={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 Y(e,t,n){return{traceId:e.source?.trace??t?._meta.trace??n.trace,sourceId:t?._meta.path[0],parentEventId:t?._meta.parentEventId}}function X(e,t){const n=e.status.startedAt,o={flowId:e.name??"default",stepId:t.stepId,stepType:t.stepType,phase:t.phase,eventId:t.eventId,timestamp:new Date(t.now).toISOString(),elapsedMs:t.now-n};return t.traceId&&(o.traceId=t.traceId),t.sourceId&&(o.sourceId=t.sourceId),t.parentEventId&&(o.parentEventId=t.parentEventId),o}function Z(e){return"object"==typeof e&&null!==e}function ee(e,t,n){if(null===e||"object"!=typeof e)return e;if(n>=8)return e;const o=t.get(e);if(void 0!==o)return o;if(Array.isArray(e)){const o=[];t.set(e,o);for(const r of e)o.push(ee(r,t,n+1));return o}const r={};t.set(e,r);for(const[o,s]of Object.entries(e))r[o]="function"==typeof s?s:ee(s,t,n+1);return r}function te(e){const t=[],n=[],{simulation:o,...r}=e,s=ee(r,new WeakMap,0);for(const e of o){const o=(0,R.parseCallPath)(e);if(0===o.length)continue;const r=o.join(".");if(o.length-1>=8){n.push(r);continue}let i=s,a=!0;for(let e=0;e<o.length-1;e++){const t=i[o[e]];if(!Z(t)){a=!1;break}i=t}const c=o[o.length-1];if(!a||!(c in i)){n.push(r);continue}const u=i[c];"function"==typeof u?i[c]=function(...e){return t.push({fn:r,args:e,ts:Date.now()}),u.apply(this,e)}:n.push(r)}return{wrappedEnv:s,calls:t,unresolved:n}}function ne(e,t){try{return e[t]}catch{return"[unreadable]"}}function oe(e){const t=new WeakSet,n=(e,o)=>{if(null===e)return null;if("function"==typeof e)return"[function]";if("string"==typeof e||"boolean"==typeof e)return e;if("number"==typeof e)return Number.isFinite(e)?e:null;if("bigint"==typeof e)return String(e);if("object"!=typeof e)return;const r=e;if(t.has(r))return"[circular]";if(o>=6)return"[truncated]";let s;t.add(r);try{if(Array.isArray(r))s=r.map(e=>n(e,o+1));else if(function(e){const t=Object.getPrototypeOf(e);return t===Object.prototype||null===t}(r)){const e={};for(const t of Object.keys(r))e[t]=n(ne(r,t),o+1);s=e}else s=function(e){try{return String(e)}catch{return"[object]"}}(r)}catch{s="[unreadable]"}return t.delete(r),s};return e.map(e=>n(e,0))}function re(e){return e.map(e=>({fn:e.fn,args:oe(e.args),ts:e.ts}))}function se(e,t,n,o){if(!Number.isFinite(n.max)||n.max<=0)throw new Error(`pushBounded: max must be > 0 (got ${n.max})`);if("dropNewest"===(n.onOverflow??"dropOldest"))return e.length>=n.max?(o&&o([t]),{appended:!1,dropped:1}):(e.push(t),{appended:!0,dropped:0});const r=[];for(;e.length>=n.max;)r.push(e.shift());return e.push(t),r.length>0&&o&&o(r),{appended:!0,dropped:r.length}}var ie=new WeakMap;function ae(e,t,n,o){ie.get(e)||(ie.set(e,!0),t.warn(n,o))}function ce(e){ie.delete(e)}var ue=()=>Date.now();function de(e){if(void 0!==e)return"number"==typeof e?{threshold:e,cooldown:3e4}:{threshold:e.threshold??5,cooldown:e.cooldown??3e4}}function le(e,t,n,o,r){if("partial"===n)return;const s=((i=e)[a=t]||(i[a]={state:"closed",consecutiveFailures:0}),i[a]);var i,a;return"success"===n?(s.consecutiveFailures=0,s.state="closed",s.probing=!1,void(s.openUntil=void 0)):(s.consecutiveFailures+=1,"half-open"===s.state?(s.state="open",s.probing=!1,void(s.openUntil=ue()+r)):void(s.consecutiveFailures>=o&&(s.state="open",s.probing=!1,s.openUntil=ue()+r)))}function pe(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 fe(e,t,n,o){e.dropped[t]||(e.dropped[t]={});const r=e.dropped[t];return r[n]=(r[n]??0)+o,r[n]}function ge(e,t,n,o,r){const s=(0,N.stepId)(t,n);return(t,i)=>{try{if(i)return r?function(e,t,n,o,r,s){const i=t.dlq=t.dlq||[],a={max:t.config.dlqMax??100},c=se(i,[o,r],a);if(c.dropped>0){const t=fe(e.status,(0,N.stepId)("destination",n),"dlq",c.dropped);ae(i,s,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:n,cap:a.max,droppedCount:t})}else i.length<a.max&&ce(i);const u=pe(e,n);u.failed++,u.dlqSize=i.length,e.status.failed++;const d=de(t.config.breaker);if(d){const o=t.config.id||n;le(e.status.breakers,(0,N.stepId)("destination",o),"transport-failure",d.threshold,d.cooldown)}}(e,r,n,i,t,o):e.status.failed++,void o.error("report error",{error:t instanceof Error?t.message:String(t),event:i.name});e.status.connectionErrors[s]=(e.status.connectionErrors[s]??0)+1,o.error("connection error",{error:t instanceof Error?t.message:String(t)})}catch{}}}function he(e,t){return e.storeId&&t.stores[e.storeId]?t.stores[e.storeId]:t.stores.__cache}function me(e,t){return e?t.stores[e]:t.stores.__cache}function ye(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 ve(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 we(e,t={}){if(!e)return[];if(Array.isArray(e))return e;const n=[],o=new Set;let r=e;for(;r&&t[r]&&!o.has(r);){o.add(r),n.push(r);const e=t[r].next;if(Array.isArray(e)){n.push(...e);break}r=e}return n}async function be(e,t,n){if(t.init&&!t.config.init){const o=t.type||"unknown",r=e.logger.scope(`transformer:${o}`),s={collector:e,logger:r,id:n,ingest:(0,K.createIngest)(n),config:t.config,env:Ee(t.config.env),reportError:ge(e,"transformer",n,r)};r.debug("init");const i=await(0,K.useHooks)(t.init,"TransformerInit",e.hooks,e.logger)(s);if(!1===i)return!1;t.config={...i||t.config,env:i?.env||t.config.env,init:!0},r.debug("init done")}return!0}async function ke(e,t,n,o,r,s){const i=t.type||"unknown",a=e.logger.scope(`transformer:${i}`),c={collector:e,logger:a,id:n,ingest:r,config:t.config,env:{...Ee(t.config.env),...s?{respond:s}:{}},reportError:ge(e,"transformer",n,a)};a.debug("push",{event:o.name});const u="string"==typeof o.id?o.id:"",{traceId:d,sourceId:l,parentEventId:p}=Y(o,r,e),f=Date.now(),g=X(e,{stepId:(0,K.stepId)("transformer",n),stepType:"transformer",phase:"in",eventId:u,now:f,traceId:d,sourceId:l,parentEventId:p});g.inEvent=o,(0,K.emitStep)(e,g);try{const r=await(0,K.useHooks)(t.push,"TransformerPush",e.hooks,e.logger)(o,c),s=Date.now(),i=X(e,{stepId:(0,K.stepId)("transformer",n),stepType:"transformer",phase:"out",eventId:u,now:s,traceId:d,sourceId:l,parentEventId:p});return i.durationMs=s-f,i.outEvent=r,(0,K.emitStep)(e,i),a.debug("push done"),r}catch(t){const o=Date.now(),r=X(e,{stepId:(0,K.stepId)("transformer",n),stepType:"transformer",phase:"error",eventId:u,now:o,traceId:d,sourceId:l,parentEventId:p});throw r.durationMs=o-f,r.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},(0,K.emitStep)(e,r),t}}function Ie(e,t){return e?{...e,_meta:{...e._meta,path:[...e._meta.path]}}:(0,K.createIngest)(t)}async function Se(e,t,n,o,r,s,i){r||(r=(0,K.createIngest)(n[0]??"chain")),i&&r._meta&&(r._meta.chainPath=i);let a=o,c=s;for(const o of n){const s=t[o];if(!s){e.logger.warn(`Transformer not found: ${o}`);continue}if(r&&r._meta&&r._meta.path.length>256)return e.logger.error(`Max path length exceeded at ${o}`),{event:null,respond:c};if(r&&r._meta&&(r._meta.hops++,r._meta.path.push(o)),!await(0,K.tryCatchAsync)(be,t=>{if(t instanceof K.FatalError)throw t;return e.status.failed++,e.logger.scope(`transformer:${s.type||"unknown"}`).error("transformer init failed",{transformer:o,error:t}),!1})(e,s,o))return{event:null,respond:c};if(i&&void 0!==s.config?.chainMocks?.[i]){const t=s.config.chainMocks[i];e.logger.scope(`transformer:${s.type||"unknown"}`).debug("chainMock",{chain:i}),a=t;continue}if(void 0!==s.config?.mock){e.logger.scope(`transformer:${s.type||"unknown"}`).debug("mock"),a=s.config.mock;continue}if(s.config?.disabled)continue;const u=s.config?.cache,d=u?(0,K.compileCache)(u):void 0,l=d?he(d,e):void 0,p=s.config?.state?(0,K.compileState)(s.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,K.applyState)(g,t=>me(t,e),t,e):t;let m;if(d&&l){const e=(0,K.buildCacheContext)(r,a),t=await(0,K.checkCache)(d,l,e);if("HIT"===t?.status&&t.value){if(a=t.value,d.stop)return{event:a,respond:c,stopped:!0};continue}"MISS"===t?.status&&(m={key:t.key,ttl:t.rule.ttl})}const y=s.config.before;if(y){const n=(0,K.getNextSteps)(y,(0,K.buildCacheContext)(r,a));if(1===n.length){const o=we(n[0],ye(t));if(o.length>0){const n=await Se(e,t,o,a,r,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,K.tryCatchAsync)(Se,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,we(n,ye(t)),a,Ie(r,n),void 0,i)))}f&&f.length>0&&(a=await(0,K.applyState)(f,t=>me(t,e),a,e));const v=await(0,K.tryCatchAsync)(ke,t=>(e.logger.scope(`transformer:${s.type||"unknown"}`).error("Push failed",{error:t}),!1))(e,s,o,a,r,c);if(!1===v)return{event:null,respond:c,droppedBy:o};if(Array.isArray(v)){const s=n.slice(n.indexOf(o)+1),u=await Promise.all(v.map(async n=>{const o=await h(n.event||a),u=Ie(r,"unknown");if(n.next){const r=(0,K.getNextSteps)(n.next,(0,K.buildCacheContext)(u,o));if(0===r.length)return{event:o,respond:c};if(1===r.length){const n=we(r[0],ye(t));return n.length>0?Se(e,t,n,o,u,c,i):{event:o,respond:c}}return(await Promise.all(r.map(n=>(0,K.tryCatchAsync)(Se,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,we(n,ye(t)),o,Ie(u,n),void 0,i)))).map(e=>({event:e.event,respond:void 0}))}return s.length>0?Se(e,t,s,o,u,c,i):{event:o,respond:c}}));let d=c;const l=[];for(const e of u.flat())if(null!==e)if(e&&"object"==typeof e&&"event"in e){const t=e;if(t.respond&&(d=t.respond),null===t.event)continue;Array.isArray(t.event)?l.push(...t.event):l.push(t.event)}else l.push(e);return 0===l.length?{event:null,respond:d}:1===l.length?{event:l[0],respond:d}:{event:l,respond:d}}if(v&&"object"==typeof v){const{event:n,respond:o,next:s}=v;if(o&&(c=o),void 0!==s){const o=await h(n||a),u=(0,K.getNextSteps)(s,(0,K.buildCacheContext)(r,o));if(0===u.length){a=o;continue}if(1===u.length){const n=we(u[0],ye(t));return n.length>0?Se(e,t,n,o,r,c,i):(e.logger.warn(`Branch target not found: ${JSON.stringify(s)}`),{event:null,respond:c})}return await Promise.all(u.map(n=>(0,K.tryCatchAsync)(Se,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,we(n,ye(t)),o,Ie(r,n),void 0,i))),{event:null,respond:void 0}}n&&(a=n)}g&&g.length>0&&(a=await(0,K.applyState)(g,t=>me(t,e),a,e)),m&&l&&(0,K.storeCache)(l,m.key,a,m.ttl);const w=s.config.next,b="string"==typeof w||Array.isArray(w)&&w.every(e=>"string"==typeof e),k=void 0!==w&&!b;if((!v||"object"==typeof v&&!v.next)&&k){const n=(0,K.getNextSteps)(s.config.next,(0,K.buildCacheContext)(r,a));if(1===n.length){const o=we(n[0],ye(t));return o.length>0?Se(e,t,o,a,r,c,i):{event:a,respond:c}}return n.length>1?(await Promise.all(n.map(n=>(0,K.tryCatchAsync)(Se,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,we(n,ye(t)),a,Ie(r,n),void 0,i))),{event:null,respond:void 0}):{event:a,respond:c}}}return{event:a,respond:c}}function Ee(e){return e&&(0,K.isObject)(e)?e:{}}function Oe(e){return"string"==typeof e||!(!Array.isArray(e)||!e.every(e=>"string"==typeof e))}async function qe(e,t,n){if(!t.on||!t.queueOn?.length)return;const o=t.queueOn;t.queueOn=[];const r=n||t.config?.id||"unknown";for(const{type:n,data:s}of o)$e(n)&&!Ne(e,t,n)||(await(0,H.tryCatchAsync)(t.on,t=>{if(t instanceof H.FatalError)throw t;e.status.failed++,e.logger.scope("source").error("source on flush failed",{sourceId:r,type:n,error:t})})(n,s),$e(n)&&Ge(e,t,n))}function Ce(e){return Boolean(e.config.init)&&!e.config.require?.length}function xe(e){return"object"==typeof e&&null!==e}async function je(e,t,n){const{code:o,config:r={},env:s={},primary:i,next:a,before:c,cache:u}=n,d=r.state??n.state,l=d?(0,H.compileState)(d):void 0,p=u,f=p?(0,H.compileCache)({...p,stop:p.stop??!0}):void 0,g=Oe(a)?we(a,ye(e.transformers)):void 0,h=Oe(c)?we(c,ye(e.transformers)):void 0,m=s.push,y=m??e.push,v=Boolean(m),w=async(n,o,s)=>{let i;const u=h??(void 0!==c?(()=>{const t=(0,H.getNextSteps)(c,(0,H.buildCacheContext)(s.ingest));return 0===t.length?[]:we(1===t.length?t[0]:t,ye(e.transformers))})():[]);let d=[n];if(u.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const o=await Se(e,e.transformers,u,n,s.ingest,s.respond,`source.${t}.before`);if(null===o.event)return{ok:!0};if(o.stopped)return o.respond&&(s.respond=o.respond),{ok:!0};o.respond&&(s.respond=o.respond),d=Array.isArray(o.event)?o.event:[o.event]}if(f){const t=he(f,e);if(t){const n=(0,H.buildCacheContext)(s.ingest),o=await(0,H.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,H.applyUpdate)(t,o.rule.update,{...n,cache:{status:"HIT"}},e)),s.respond?.(t),{ok:!0}}if("MISS"===o.status&&f.stop&&s.respond){const r=s.respond,a=o.rule.update,c={...n,cache:{status:"MISS"}},u=o.key,d=o.rule.ttl,l=n=>{(0,H.storeCache)(t,u,n,d),a?i=(async()=>{const t=await(0,H.applyUpdate)(n,a,c,e);r(t)})():r(n)};s.respond=l}"MISS"!==o.status||f.stop||(0,H.storeCache)(t,o.key,!0,o.rule.ttl)}}}const p=g?{kind:"single",preChain:g}:void 0!==a?(()=>{const t=(0,H.getNextSteps)(a,(0,H.buildCacheContext)(s.ingest));return 0===t.length?{kind:"single",preChain:[]}:1===t.length?{kind:"single",preChain:we(t[0],ye(e.transformers))}:{kind:"many",branches:t.map(t=>we(t,ye(e.transformers)))}})():{kind:"single",preChain:[]};!v&&l&&l.length>0&&(d=await Promise.all(d.map(t=>(0,H.applyState)(l,t=>me(t,e),t,e))));let m={ok:!0};for(const n of d)"many"===p.kind?(await Promise.all(p.branches.map((i,a)=>(0,H.tryCatchAsync)(async()=>v?y(n):y(n,{...o,id:t,ingest:Ie(s.ingest,`${t}.${a}`),respond:void 0,mapping:r,preChain:i}),t=>(e.logger.scope("source:many").error(`many branch ${a} failed`,{error:t}),{ok:!0}))())),m={ok:!0}):m=v?await y(n):await y(n,{...o,id:t,ingest:s.ingest,respond:s.respond,mapping:r,preChain:p.preChain});return i&&await i,m},b=async n=>{const o=(0,H.createIngest)(t),s=(0,H.parseTraceparent)(function(e){if(!xe(e))return;const t=e.headers;if(xe(t)){if("get"in(n=t)&&"function"==typeof n.get)return t.get("traceparent")??void 0;if("traceparent"in t)return t.traceparent;for(const e of Object.keys(t))if("traceparent"===e.toLowerCase())return t[e]}var n}(n));if(s&&(o._meta.trace=s.trace,o._meta.parentEventId=s.parentSpan),!r.ingest||void 0===n)return o;const i=await(0,H.getMappingValue)(n,r.ingest,{collector:e});return{...o,...i,_meta:o._meta}},k=e.logger.scope("source").scope(t),I={command:e.command,sources:e.sources,elb:e.elb,logger:k,...s,push:async(e,n={})=>{const o={ingest:(0,H.createIngest)(t),respond:void 0};return w(e,n,o)}},S={collector:e,logger:k,id:t,config:r,env:I,withScope:async(e,t,n)=>{const o={ingest:await b(e),respond:t};return n({...I,push:(e,t={})=>w(e,t,o),ingest:o.ingest,respond:o.respond})},reportError:ge(e,"source",t,k)},E=await(0,H.tryCatchAsync)(o,n=>{if(n instanceof H.FatalError)throw n;e.status.failed++,e.logger.scope("source").error("source factory failed",{sourceId:t,error:n})})(S);if(!E)return;const O=E.type||"unknown",q=e.logger.scope(O).scope(t);return I.logger=q,i&&(E.config={...E.config,primary:i}),E}async function Ae(e){for(const[t,n]of Object.entries(e.sources)){if(Ce(n))continue;const o=n.config.require;if(!o?.length)continue;const r=o.filter(t=>!Re(e,t));r.length!==o.length&&(n.config.require=r,Ce(n)&&await qe(e,n,t))}for(const[t,n]of Object.entries(e.pending.destinations)){if(!e.pending.destinations[t]||e.destinations[t])continue;const o=n.config?.require;if(!o)continue;const r=o.filter(t=>!Re(e,t));if(n.config&&(n.config.require=r),r.length>0)continue;delete e.pending.destinations[t];const s=st(n);!1!==s.config.queue&&(s.queuePush=[...e.queue]),e.destinations[t]=s}}function Te(e){if("object"!=typeof e||null===e)return!1;if(!("logger"in e))return!1;const t=e.logger;return"object"==typeof t&&null!==t&&"scope"in t&&"function"==typeof t.scope}var De=!1;function Pe(){De||(De=!0,"undefined"!=typeof console&&"function"==typeof console.warn&&console.warn("walkerOS: ignored an on-dispatch call with a non-collector argument"))}function Me(e,t,n,o){if(n instanceof B.FatalError)throw n;e.logger.scope("on").error("on callback failed",{kind:t,...o,error:n})}var ze=[J.Consent,J.User,J.Globals,J.Custom];function $e(e){return ze.includes(e)}function _e(e,t){switch(t){case J.Consent:return Object.keys(e.consent).length>0;case J.User:return Object.keys(e.user).length>0;case J.Globals:return Object.keys(e.globals).length>0;case J.Custom:return Object.keys(e.custom).length>0;default:return!1}}function Re(e,t){switch(t){case J.Consent:case J.User:case J.Globals:case J.Custom:return _e(e,t);case J.Run:case J.Ready:return!0===e.allowed;default:return e.seenEvents.has(String(t))}}function Be(e,t){return e.cellVersion[String(t)]??0}function Ge(e,t,n){let o=e.delivery.get(t);o||(o={},e.delivery.set(t,o)),o[String(n)]=Be(e,n)}function Ne(e,t,n){return e.allowed&&Be(e,n)>function(e,t,n){const o=e.delivery.get(t),r=o?.[String(n)];return void 0===r?-1:r}(e,t,n)}function He(e,t,n){const o=e.cascade;if(!o)return!0;let r=o.counts.get(t);r||(r={},o.counts.set(t,r));const s=String(n),i=(r[s]||0)+1;return r[s]=i,i<=8||(9===i&&e.logger.error("state delivery did not converge",{type:s}),!1)}function Ke(e,t){return{collector:e,logger:e.logger.scope("on").scope(String(t))}}function Ue(e,t,n,o,r){if(!t.on)return;const s=t.type||"unknown",i=e.logger.scope(s).scope("on").scope(o),a={collector:e,logger:i,id:n,config:t.config,data:r,env:it(t.env,t.config.env),reportError:ge(e,"destination",n,i,t)};(0,G.tryCatch)(t.on,t=>Me(e,"destination",t,{destId:n,type:o}))(o,a)}function Fe(e,t,n,o){if(!Te(e))return void Pe();const r=Le(e,t,o);if(n.length)switch(t){case J.Consent:!function(e,t,n){const o=n||e.consent,r=Ke(e,J.Consent);t.forEach(t=>{Ne(e,t,J.Consent)&&He(e,t,J.Consent)&&(Object.keys(o).filter(e=>e in t).forEach(n=>{(0,G.tryCatch)(t[n],t=>Me(e,"consent",t,{key:n}))(o,r)}),Ge(e,t,J.Consent))})}(e,n,o);break;case J.Ready:!function(e,t){if(!e.allowed)return;const n=Ke(e,J.Ready);t.forEach(t=>{(0,G.tryCatch)(t,t=>Me(e,"ready",t))(void 0,n)})}(e,n);break;case J.Run:!function(e,t){if(!e.allowed)return;const n=Ke(e,J.Run);t.forEach(t=>{(0,G.tryCatch)(t,t=>Me(e,"run",t))(void 0,n)})}(e,n);break;case J.Session:!function(e,t){if(!e.session)return;const n=Ke(e,J.Session);t.forEach(t=>{(0,G.tryCatch)(t,t=>Me(e,"session",t))(e.session,n)})}(e,n);break;default:{const o=Ke(e,t),s=$e(t);n.forEach(n=>{"function"==typeof n&&(s&&!Ne(e,n,t)||s&&!He(e,n,t)||((0,G.tryCatch)(n,n=>Me(e,"generic",n,{type:t}))(r,o),s&&Ge(e,n,t)))});break}}}function Le(e,t,n){switch(t){case J.Consent:return n||e.consent;case J.Session:return e.session;case J.User:return n||e.user;case J.Custom:return n||e.custom;case J.Globals:return n||e.globals;case J.Config:return n||e.config;default:return}}async function Ve(e,t,n,o,r){if(!t.on)return!1;if($e(o)&&!Ne(e,t,o))return!1;if($e(o)&&!He(e,t,o))return!1;const s=await(0,G.tryCatchAsync)(t.on,t=>Me(e,"source",t,{sourceId:n,type:o}))(o,r);return $e(o)&&Ge(e,t,o),!1===s}function We(e){return"number"==typeof e&&e>0?e:1e4}var Qe=class extends Error{constructor(e){super(e),this.name="DestinationTimeoutError"}};function Je(e,t,n){let o;const r=new Promise((e,r)=>{o=setTimeout(()=>r(new Qe(n)),t)});return Promise.race([e,r]).finally(()=>{o&&clearTimeout(o)})}var Ye=Object.freeze({batched:!0});function Xe(e){return e===Ye}function Ze(e){return void 0===e?{}:"number"==typeof e?{wait:e}:{wait:e.wait,size:e.size,age:e.age}}function et(e,t,n){if(!e)return[];if(Array.isArray(e)&&e.every(e=>"string"==typeof e))return we(e,t);if("string"==typeof e)return we(e,t);const o=(0,_.getNextSteps)(e,(0,_.buildCacheContext)(n));return 0===o.length?[]:1===o.length?we(o[0],t):we(o,t)}async function tt(e,t,n={},o){const{allowed:r,consent:s,globals:i,user:a}=e;if(!r)return rt({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=se(e.queue,t,{max:n});if(o.dropped>0){const t=fe(e.status,(0,_.stepId)("collector"),"queue",o.dropped);ae(e.queue,e.logger,"collector.queue overflow; oldest events dropped",{buffer:"queue",cap:n,droppedCount:t})}else e.queue.length<n&&ce(e.queue);e.status.in++}o||(o=e.destinations);const c=e.transformers?ye(e.transformers):{},u=await Promise.all(Object.entries(o||{}).map(async([o,r])=>{if(r.config.disabled)return{id:o,destination:r,skipped:!0};const u=r.config.id||o,d=(0,_.stepId)("destination",u),l=de(r.config.breaker);if(l&&function(e,t,n){const o=e[t];if(!o||"closed"===o.state)return!1;if("half-open"===o.state)return!0===o.probing;const r=ue();return void 0!==o.openUntil&&r<o.openUntil||(o.state="half-open",o.probing=!0,o.openUntil=r+n,!1)}(e.status.breakers,d,l.cooldown))return{id:o,destination:r,skipped:!0};const p=t=>{l&&le(e.status.breakers,d,t,l.threshold,l.cooldown)},f=()=>{l&&function(e,t){const n=e[t];n&&"half-open"===n.state&&!0===n.probing&&(n.state="open",n.probing=!1)}(e.status.breakers,d)};let g=(r.queuePush||[]).map(e=>({...e,consent:s}));r.queuePush=[],t&&g.push((0,_.clone)(t));const h=n.ingest?{...n.ingest,_meta:{...n.ingest._meta,path:[...n.ingest._meta.path]}}:(0,_.createIngest)("unknown");if(!g.length&&!r.queueOn?.length)return f(),{id:o,destination:r,skipped:!0};if(!g.length&&r.queueOn?.length){if(!(0,_.getGrantedConsent)(r.config.consent,s))return f(),{id:o,destination:r,skipped:!0};let t=!1;try{t=await nt(e,r,o,!0)}catch(t){e.status.failed++;const n=r.type||"unknown";e.logger.scope(n).error("destination init failed",{error:t instanceof Error?t.message:String(t)}),p("transport-failure")}return f(),{id:o,destination:r,skipped:!t}}const m=[],y=g.filter(t=>{const n=(0,_.getGrantedConsent)(r.config.consent,s,t.consent);if(n)return t.consent=n,m.push(t),!1;const i=X(e,{stepId:(0,_.stepId)("destination",o),stepType:"destination",phase:"skip",eventId:"string"==typeof t.id?t.id:"",now:Date.now(),...Y(t,h,e)});return i.skipReason="consent",s&&(i.consent={...s}),r.config.consent&&(i.meta={required:{...r.config.consent}}),(0,_.emitStep)(e,i),!0});if(y.length>0){const t=r.queuePush,n=r.config.id||o,s={max:r.config.queueMax??1e3};let i=0;for(const e of y)i+=se(t,e,s).dropped;if(i>0){pe(e,n);const o=fe(e.status,(0,_.stepId)("destination",n),"queue",i);ae(t,e.logger.scope(r.type||"unknown"),"destination.queuePush overflow; oldest events dropped",{buffer:"queuePush",destination:n,cap:s.max,droppedCount:o})}else t.length<s.max&&ce(t)}if(!m.length)return f(),{id:o,destination:r,queue:g};let v,w,b=!1;try{b=await nt(e,r,o,!0)}catch(t){e.status.failed++;const n=r.type||"unknown";e.logger.scope(n).error("destination init failed",{error:t instanceof Error?t.message:String(t)}),p("transport-failure")}if(!b)return f(),{id:o,destination:r,queue:g};r.dlq||(r.dlq=[]);const k=et(r.config.before,c,h),I=r.config.next,S=r.config?.cache,E=S?(0,_.compileCache)(S):void 0,O=E?he(E,e):void 0,q=r.config?.state?(0,_.compileState)(r.config.state):void 0,C=q?.filter(e=>"get"===e.mode),x=q?.filter(e=>"set"===e.mode);let j=0,A=0;return await Promise.all(m.map(async t=>{let s;if(t.globals=(0,_.assign)(i,t.globals),t.user=(0,_.assign)(a,t.user),E?.stop&&O){const e=(0,_.buildCacheContext)(h,t),n=await(0,_.checkCache)(E,O,e);if("HIT"===n?.status)return t;"MISS"===n?.status&&(s={key:n.key,ttl:n.rule.ttl})}let u=t,d=n.respond;if(k.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const r=await Se(e,e.transformers,k,t,h,n.respond,`destination.${o}.before`);if(null===r.event)return t;r.respond&&(d=r.respond),u=Array.isArray(r.event)?r.event[0]:r.event}if(E&&!E.stop&&O){const e=(0,_.buildCacheContext)(h,u),n=await(0,_.checkCache)(E,O,e);if("HIT"===n?.status)return t;"MISS"===n?.status&&(s={key:n.key,ttl:n.rule.ttl})}C&&C.length>0&&u&&(u=await(0,_.applyState)(C,t=>me(t,e),u,e));const l=Date.now();let p=!1;const f=await(0,_.tryCatchAsync)(ot,t=>{const n=r.type||"unknown";e.logger.scope(n).error("Push failed",{error:t,event:u.name}),v=t,p=!0;const s=r.dlq,i=r.config.id||o,a={max:r.config.dlqMax??100},c=se(s,[u,t],a);if(c.dropped>0){pe(e,i);const t=fe(e.status,(0,_.stepId)("destination",i),"dlq",c.dropped);ae(s,e.logger.scope(r.type||"unknown"),"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:i,cap:a.max,droppedCount:t})}else s.length<a.max&&ce(s)})(e,r,o,u,h,d);if(j+=Date.now()-l,s&&O&&void 0===r.config.mock&&(0,_.storeCache)(O,s.key,f??!0,s.ttl),!p&&!Xe(f)&&x&&x.length>0&&u&&(u=await(0,_.applyState)(x,t=>me(t,e),u,e)),void 0===f||Xe(f)||(w=f),Xe(f)&&A++,!p&&I){void 0!==f&&(h._response=f);const t=et(I,c,h);if(t.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const n=await Se(e,e.transformers,t,u,h,d,`destination.${o}.next`);n.respond&&(d=n.respond)}}return t})),{id:o,destination:r,error:v,response:w,totalDuration:j,batchedCount:A,allowedCount:m.length,canonicalId:u,breakerConfig:l}})),d={},l={},p={};for(const t of u){if(t.skipped)continue;const n=t.destination,o={type:n.type||"unknown",data:t.response};pe(e,t.id);const r=e.status.destinations[t.id],s=Date.now();r.queuePushSize=n.queuePush?.length??0,r.dlqSize=n.dlq?.length??0;const i=t.breakerConfig,a=t.canonicalId?(0,_.stepId)("destination",t.canonicalId):void 0,c=t=>{i&&a&&le(e.status.breakers,a,t,i.threshold,i.cooldown)};if(t.error)o.error=t.error,p[t.id]=o,r.failed++,r.lastAt=s,r.duration+=t.totalDuration||0,e.status.failed++,c("transport-failure");else if(t.queue&&t.queue.length)l[t.id]=o;else{const n=t.batchedCount??0,i=t.allowedCount??0;(Math.max(0,i-n)>0||0===i)&&(d[t.id]=o,r.count++,r.lastAt=s,r.duration+=t.totalDuration||0,e.status.out++,c("success"))}}return rt({event:t,...Object.keys(d).length&&{done:d},...Object.keys(l).length&&{queued:l},...Object.keys(p).length&&{failed:p}})}async function nt(e,t,n,o=!1){if(t.init&&!t.config.init){if(!o&&function(e){const t=e.config.consent;return!!t&&Object.keys(t).length>0}(t))return e.logger.scope(t.type||"unknown").debug("init blocked: consent gate not cleared"),!1;const r=t.type||"unknown",s=e.logger.scope(r),i={collector:e,logger:s,id:n,config:t.config,env:it(t.env,t.config.env),reportError:ge(e,"destination",n,s,t)};s.debug("init");const a=Date.now();let c;(0,_.emitStep)(e,X(e,{stepId:(0,_.stepId)("destination",n),stepType:"destination",phase:"init",eventId:"",now:a}));try{c=await(0,_.useHooks)(t.init,"DestinationInit",e.hooks,e.logger)(i)}catch(t){const o=Date.now(),r=X(e,{stepId:(0,_.stepId)("destination",n),stepType:"destination",phase:"error",eventId:"",now:o});throw r.durationMs=o-a,r.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},(0,_.emitStep)(e,r),t}if(!1===c)return c;if(t.config={...c||t.config,init:!0},t.queueOn?.length){const o=t.queueOn;t.queueOn=[];for(const{type:r,data:s}of o)Ue(e,t,n,r,s)}s.debug("init done")}return!0}async function ot(e,t,n,o,r,s){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),d={collector:e,logger:u,id:n,config:i,data:a.data,rule:a.mapping,ingest:r,env:{...it(t.env,i.env),...s?{respond:s}:{}},reportError:ge(e,"destination",n,u,t)};if(void 0!==i.mock)return u.debug("mock",{event:a.event.name}),i.mock;const l=a.mapping,p=void 0!==l?.batch,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:[]},r=Ze(l?.batch),s=Ze(i.batch),a=r.wait??s.wait??3e4,c=r.size??s.size??1e3,d=r.age??s.age??3e4,g=it(t.env,i.env),h=(0,_.debounce)(async()=>{const o=t.batches[f],r=o.batched;if(0===r.entries.length)return;const s={key:r.key,entries:r.entries,events:r.events,data:r.data};r.entries=[],r.events=[],r.data=[];const a=s.entries[0],{traceId:c,sourceId:d,parentEventId:l}=Y(a.event,a.ingest,e),p={collector:e,logger:u,id:n,config:i,data:void 0,rule:o.isDefault?void 0:a.rule,ingest:a.ingest,env:{...g,...a.respond?{respond:a.respond}:{}},reportError:ge(e,"destination",n,u,t)};u.debug("push batch",{events:s.entries.length});const h=t.config.id||n,m=pe(e,h),y=de(t.config.breaker),v=(0,_.stepId)("destination",h),w=t=>{y&&le(e.status.breakers,v,t,y.threshold,y.cooldown)},b=Date.now(),k=X(e,{stepId:(0,_.stepId)("destination",n),stepType:"destination",phase:"flush",eventId:"",now:b,traceId:c,sourceId:d,parentEventId:l});k.batch={size:s.entries.length,index:0},(0,_.emitStep)(e,k);const I=n=>{const o=t.dlq=t.dlq||[],r={max:t.config.dlqMax??100};let s=0;for(const e of n)s+=se(o,e,r).dropped;if(s>0){const t=fe(e.status,(0,_.stepId)("destination",h),"dlq",s);ae(o,u,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:h,cap:r.max,droppedCount:t})}else o.length<r.max&&ce(o);m.failed+=n.length,m.dlqSize=o.length,e.status.failed+=n.length};let S=s.entries.length;const E=We(i.timeout),O=await(0,_.tryCatchAsync)((o,r)=>Je(Promise.resolve((0,_.useHooks)(t.pushBatch,"DestinationPushBatch",e.hooks,e.logger)(o,r)),E,`Destination "${n}" batch delivery timed out after ${E}ms`),t=>{S=0;const o=Date.now(),r=X(e,{stepId:(0,_.stepId)("destination",n),stepType:"destination",phase:"error",eventId:"",now:o,traceId:c,sourceId:d,parentEventId:l});r.durationMs=o-b,r.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},r.batch={size:s.entries.length,index:0},(0,_.emitStep)(e,r),I(s.entries.map(e=>[e.event,t])),w("transport-failure"),u.error("Push batch failed",{error:t instanceof Error?t.message:String(t),entries:s.entries.length})})(s,p);if((0,_.isObject)(q=O)&&Array.isArray(q.failed)&&O.failed.length>0){const e=[],t=new Set;for(const n of O.failed){const o=s.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&&(I(e),S=Math.max(0,s.entries.length-e.length),u.error("Push batch partial failure",{failed:e.length,delivered:S,entries:s.entries.length}))}var q;u.debug("push batch done"),m.inFlightBatch=Math.max(0,(m.inFlightBatch??0)-s.entries.length),S>0&&(m.count+=S,m.lastAt=Date.now(),e.status.out+=S,w("success"))},{wait:a,size:c,age:d});t.batches[f]={batched:o,isDefault:!p,batchFn:()=>{h()},flush:async()=>{await h.flush()}}}const c=t.batches[f];c.batched.entries.push({event:a.event,ingest:r,respond:s,rule:l,data:a.data}),c.batched.events.push(a.event),(0,_.isDefined)(a.data)&&c.batched.data.push(a.data);const d="string"==typeof a.event.id?a.event.id:"",g=Y(o,r,e),h=Date.now(),m=X(e,{stepId:(0,_.stepId)("destination",n),stepType:"destination",phase:"in",eventId:d,now:h,traceId:g.traceId,sourceId:g.sourceId,parentEventId:g.parentEventId});a.mappingKey&&(m.mappingKey=a.mappingKey),a.event.consent&&(m.consent={...a.event.consent}),m.inEvent=a.event,(0,_.emitStep)(e,m);const y=X(e,{stepId:(0,_.stepId)("destination",n),stepType:"destination",phase:"out",eventId:d,now:h,traceId:g.traceId,sourceId:g.sourceId,parentEventId:g.parentEventId});a.mappingKey&&(y.mappingKey=a.mappingKey),y.outEvent=a.event,y.batch={size:c.batched.entries.length,index:c.batched.entries.length-1},(0,_.emitStep)(e,y);const v=t.config.id||n,w=pe(e,v);return w.inFlightBatch=(w.inFlightBatch??0)+1,c.batchFn(),Ye}{let s;if(u.debug("push",{event:a.event.name}),"trace"===e.observeLevel?.()&&Array.isArray(t.calls)&&t.calls.length>0){const e=te({...d.env,simulation:t.calls});d.env=e.wrappedEnv,s=e.calls,e.unresolved.length>0&&(e.wrappedEnv[_.OBSERVE_ENV_KEY]={paths:e.unresolved,record:(t,n)=>e.calls.push({fn:t,args:n,ts:Date.now()})})}const c="string"==typeof a.event.id?a.event.id:"",{traceId:l,sourceId:p,parentEventId:f}=Y(o,r,e),g=Date.now(),h=X(e,{stepId:(0,_.stepId)("destination",n),stepType:"destination",phase:"in",eventId:c,now:g,traceId:l,sourceId:p,parentEventId:f});a.mappingKey&&(h.mappingKey=a.mappingKey),a.event.consent&&(h.consent={...a.event.consent}),h.inEvent=a.event,(0,_.emitStep)(e,h);try{const o=We(i.timeout),r=await Je(Promise.resolve((0,_.useHooks)(t.push,"DestinationPush",e.hooks,e.logger)(a.event,d)),o,`Destination "${n}" delivery timed out after ${o}ms`),h=Date.now(),m=X(e,{stepId:(0,_.stepId)("destination",n),stepType:"destination",phase:"out",eventId:c,now:h,traceId:l,sourceId:p,parentEventId:f});return m.durationMs=h-g,m.outEvent=a.event,s&&s.length>0&&(m.calls=re(s)),(0,_.isDefined)(r)&&(m.meta={...m.meta,response:r}),a.mappingKey&&(m.mappingKey=a.mappingKey),(0,_.emitStep)(e,m),u.debug("push done"),r}catch(t){const o=Date.now(),r=X(e,{stepId:(0,_.stepId)("destination",n),stepType:"destination",phase:"error",eventId:c,now:o,traceId:l,sourceId:p,parentEventId:f});throw r.durationMs=o-g,r.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},s&&s.length>0&&(r.calls=re(s)),a.mappingKey&&(r.mappingKey=a.mappingKey),(0,_.emitStep)(e,r),t}}}function rt(e){return{ok:!e?.failed,...e}}function st(e){const{code:t,config:n={},env:o={},cache:r,state:s}=e,{config:i}=ve(e,"before"),{config:a}=ve({...e,config:i},"next"),c={...t.config,...n,...a};r&&(c.cache=r),void 0!==s&&void 0===c.state&&(c.state=s);const u=it(t.env,o);return{...t,config:c,env:u}}function it(e,t){return e||t?t?e&&(0,_.isObject)(e)&&(0,_.isObject)(t)?{...e,...t}:t:e:{}}async function at(e,t,n){const o=Object.entries(e).map(async([e,o])=>{const r=o.destroy;if(!r)return;const s=o.type||"unknown",i=n.scope(s),a={id:e,config:o.config,env:o.env??{},logger:i};let c;try{await Promise.race([r(a),new Promise((n,o)=>{c=setTimeout(()=>o(new Error(`${t} '${e}' destroy timed out`)),5e3)})])}catch(n){i.error(`${t} '${e}' destroy failed: ${n}`)}finally{c&&clearTimeout(c)}});await Promise.allSettled(o)}function ct(e,t){e.stateVersion++,e.cellVersion[t]=e.stateVersion}async function ut(e,t,n){let o,r,s=!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 J.Config:(0,F.isObject)(n)&&((0,U.assign)(e.config,n,{shallow:!1}),r=n,s=!0);break;case J.Consent:if((0,F.isObject)(n)){const{update:t}=function(e,t){const n={};return Object.entries(t).forEach(([e,t])=>{n[e]=!!t}),e.consent=(0,M.assign)(e.consent,n),{update:n}}(e,n);ct(e,J.Consent),r=t,s=!0}break;case J.Custom:(0,F.isObject)(n)&&(e.custom=(0,U.assign)(e.custom,n),ct(e,J.Custom),r=n,s=!0);break;case J.Destination:(0,F.isObject)(n)&&"code"in n&&(0,F.isObject)(n.code)&&(o=await async function(e,t){const{code:n,config:o={},env:r={},before:s,next:i,cache:a,state:c}=t;if(!(0,_.isFunction)(n.push))return rt({ok:!1,failed:{invalid:{type:"invalid",error:"Destination code must have a push method"}}});const u=o||{init:!1};let d=s?{...u,before:s}:{...u};i&&(d={...d,next:i}),a&&(d={...d,cache:a}),void 0!==c&&void 0===d.state&&(d={...d,state:c});let l=d.id;if(!l)do{l=(0,_.getId)(5,"abcdefghijklmnopqrstuvwxyz")}while(e.destinations[l]||e.pending.destinations[l]);if(d.require?.length){e.pending.destinations[l]=t,await Ae(e);const n=e.destinations[l];return n?tt(e,void 0,{},{[l]:n}):rt({ok:!0})}const p={...n,config:d,env:it(n.env,r)};return e.destinations[l]=p,!1!==p.config.queue&&(p.queuePush=[...e.queue]),tt(e,void 0,{},{[l]:p})}(e,n));break;case J.Globals:(0,F.isObject)(n)&&(e.globals=(0,U.assign)(e.globals,n),ct(e,J.Globals),r=n,s=!0);break;case J.Hook:if((0,F.isObject)(n)&&(0,U.isString)(n.name)&&(0,U.isFunction)(n.fn)){const{name:t,fn:o}=n;e.hooks[t]=o,r=n,s=!0}break;case J.On:if((0,F.isObject)(n)&&(0,U.isString)(n.type)){const{type:t,rules:o}=n;await async function(e,t,n){if(!Te(e))return void Pe();const o=e.on,r=o[t]||[],s=(0,B.isArray)(n)?n:[n];s.forEach(e=>{r.push(e)}),o[t]=r,Fe(e,t,s)}(e,t,o)}break;case J.Ready:s=!0;break;case J.Run:o=await async function(e,t){return e.allowed=!0,e.timing=Date.now(),e.trace=(0,U.getTraceId)(),e.count=0,t&&(t.consent&&(e.consent=(0,U.assign)(e.consent,t.consent),ct(e,J.Consent)),t.user&&(e.user=(0,U.assign)(e.user,t.user),ct(e,J.User)),t.globals&&(e.globals=(0,U.assign)(e.config.globalsStatic||{},t.globals),ct(e,J.Globals)),t.custom&&(e.custom=(0,U.assign)(e.custom,t.custom),ct(e,J.Custom))),Object.values(e.destinations).forEach(e=>{e.queuePush=[]}),e.queue=[],e.round++,await Ae(e),await async function(e){if(Te(e))for(const t of ze){if(!_e(e,t))continue;const n=Le(e,t);Fe(e,t,e.on[t]||[]);for(const[o,r]of Object.entries(e.sources))Ce(r)&&await Ve(e,r,o,t,n)}else Pe()}(e),await tt(e)}(e,n),s=!0;break;case J.Session:s=!0;break;case J.Shutdown:e.hasShutdown||(e.hasShutdown=!0,await async function(e){const t=e.logger;await at(e.sources,"source",t),await async function(e,t){const n=Object.entries(e).flatMap(([e,n])=>{const o=n.batches;if(!o)return[];const r=t.scope(n.type||"destination");return Object.values(o).map(async t=>{let n;try{await Promise.race([t.flush(),new Promise((t,o)=>{n=setTimeout(()=>o(new Error(`destination '${e}' batch flush timed out`)),5e3)})])}catch(t){r.error(`destination '${e}' batch flush failed: ${t}`)}finally{n&&clearTimeout(n)}})});await Promise.allSettled(n)}(e.destinations,t),await at(e.destinations,"destination",t),await at(e.transformers,"transformer",t),await at(e.stores,"store",t)}(e));break;case J.User:(0,F.isObject)(n)&&((0,U.assign)(e.user,n,{shallow:!1}),ct(e,J.User),r=n,s=!0);break;default:return e.logger.warn("unknown command",{command:t}),rt({ok:!1})}return s&&(await async function(e,t,n,o){if(!Te(e))return Pe(),!0;e.seenEvents.add(String(t));let r=n||[];n||(r=e.on[t]||[]);const s=Le(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&&(Ce(o)?await Ve(e,o,n,t,s)&&(i=!0):(o.queueOn=o.queueOn||[],o.queueOn.push({type:t,data:s})))}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:s});Ue(e,o,n,t,s)}});for(const[t,n]of Object.entries(e.sources))Ce(n)&&n.queueOn?.length&&await qe(e,n,t);const a=Object.values(e.sources).some(e=>!Ce(e)&&e.config.require?.length);return(Object.keys(e.pending.destinations).length>0||a)&&await Ae(e),Fe(e,t,r,o),!i}(e,t,void 0,r),o=await tt(e)),o||rt({ok:!0})}()}finally{i()}}function dt(e,t){return{timing:Math.round((Date.now()-e.timing)/10)/100,source:{type:"collector",schema:"4"},...t}}function lt(e,t,n){if(!t.name)throw new Error("Event name is required");const[o,r]=t.name.split(" ");if(!o||!r)throw new Error("Event name is invalid");const{timestamp:s=Date.now(),name:i=`${o} ${r}`,data:a={},context:c={},globals:u=e.globals,custom:d={},user:l=e.user,nested:p=[],consent:f=e.consent,id:g=(0,U.getSpanId)(),trigger:h="",entity:m=o,action:y=r,timing:v=0,source:w={type:"collector",schema:"4"}}=t,b=w.count??(e.count+=1),k=w.trace??n?._meta.trace??e.trace,I={...w,count:b};void 0!==k&&(I.trace=k);const S=e.name??w.platform??"default",E=e.release??"4.3.1";return I.release={...w.release,[S]:E},{name:i,data:a,context:c,globals:u,custom:d,user:l,nested:p,consent:f,id:g,trigger:h,entity:m,action:y,timestamp:s,timing:v,source:I}}function pt(e,t){const n=(0,L.useHooks)(async(n,o={})=>await(0,L.tryCatchAsync)(async()=>{const r=Date.now(),{id:s,ingest:i,respond:a,mapping:c,preChain:u,include:d,exclude:l}=o;let p=a,f=n;const g=d||l?function(e,t,n){let o=e;return t&&(o=Object.fromEntries(Object.entries(o).filter(([e])=>t.includes(e)))),n&&(o=Object.fromEntries(Object.entries(o).filter(([e])=>!n.includes(e)))),o}(e.destinations,d,l):void 0,h=i??(0,L.createIngest)(s||"unknown");if(c){const t=await(0,L.processEventMapping)(f,c,e);if(t.ignore)return rt({ok:!0});if(c.consent&&!(0,L.getGrantedConsent)(c.consent,e.consent,t.event.consent))return rt({ok:!0});f=t.event}if(u?.length&&e.transformers&&Object.keys(e.transformers).length>0){const n=await Se(e,e.transformers,u,f,h,p,s?`source.${s}.next`:void 0);if(null===n.event)return e.logger.debug("Event dropped by transformer chain"+(n.droppedBy?` (${n.droppedBy})`:"")),rt({ok:!0,dropped:!0});if(n.stopped)return n.respond&&(p=n.respond),rt({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),r=lt(e,o,h);return tt(e,r,{id:s,ingest:h,respond:p},g)}));if(s){e.status.sources[s]||(e.status.sources[s]={count:0,duration:0});const t=e.status.sources[s];t.count+=n.event.length,t.lastAt=Date.now(),t.duration+=Date.now()-r}return o[0]??rt({ok:!0})}f=n.event}const m=function(e,t,n){return lt(e,dt(e,t),n)}(e,f,h),y=await tt(e,m,{id:s,ingest:h,respond:p},g);if(s){e.status.sources[s]||(e.status.sources[s]={count:0,duration:0});const t=e.status.sources[s];t.count++,t.lastAt=Date.now(),t.duration+=Date.now()-r}return y},t=>{if(t instanceof L.FatalError)throw t;return e.status.failed++,e.logger.error("push failed",{event:n,ingest:o.ingest,error:t}),rt({ok:!1})})(),"Push",e.hooks,e.logger);return async(t,o)=>{const r="string"==typeof t.id?t.id:"",{traceId:s,sourceId:i,parentEventId:a}=Y(t,o?.ingest,e),c=Date.now(),u=X(e,{stepId:"collector.push",stepType:"collector",phase:"in",eventId:r,now:c,traceId:s,sourceId:i,parentEventId:a});u.inEvent=t,(0,L.emitStep)(e,u);try{const u=await n(t,o),d=Date.now(),l=X(e,{stepId:"collector.push",stepType:"collector",phase:"out",eventId:r,now:d,traceId:s,sourceId:i,parentEventId:a});return l.durationMs=d-c,l.outEvent=u,(0,L.emitStep)(e,l),u}catch(t){const n=Date.now(),o=X(e,{stepId:"collector.push",stepType:"collector",phase:"error",eventId:r,now:n,traceId:s,sourceId:i,parentEventId:a});throw o.durationMs=n-c,o.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},(0,L.emitStep)(e,o),t}}}function ft(e={}){const t=e.maxEntries??1e4,n=e.lowWaterMark??.8,o=e.sweepIntervalMs??6e4,r=Math.floor(t*n),s=new Map,i={hits:0,misses:0,populates:0,writes:0,deletes:0,evictions_entries:0,evictions_ttl:0};let a;return o>0&&(a=setInterval(function(){const e=Date.now();let t=0;for(const[n,o]of s)void 0!==o.expires&&o.expires<=e&&(s.delete(n),t++);i.evictions_ttl+=t},o),a&&"function"==typeof a.unref&&a.unref()),{type:"memory",config:{},get(e){const t=s.get(e);if(t)return void 0!==t.expires&&t.expires<=Date.now()?(s.delete(e),i.evictions_ttl++,void i.misses++):(s.delete(e),s.set(e,t),i.hits++,t.value);i.misses++},set(e,n,o){const a=!s.has(e);a||s.delete(e),s.set(e,{value:n,expires:void 0!==o?Date.now()+o:void 0}),i.writes++,a&&i.populates++,s.size>t&&function(){if(s.size<=t)return;const e=s.size-r;let n=0;for(const t of s.keys()){if(n>=e)break;s.delete(t),n++}i.evictions_entries+=n}()},delete(e){s.delete(e)&&i.deletes++},get counters(){return{...i}},destroy(){void 0!==a&&(clearInterval(a),a=void 0),s.clear()}}}function gt(e,t){const{cacheConfig:n,cacheStore:o,namespace:r,logger:s,storeId:i,collector:a}=t,c=(e,t)=>{if(!a)return;const n=X(a,{stepId:`store.${i}`,stepType:"store",phase:"in",eventId:"",now:Date.now()});n.meta={op:"cache",cached:"hit"===t,status:t,key:e},(0,Q.emitStep)(a,n)},u={hits:0,misses:0,populates:0,writes:0,deletes:0,inflight_dedups:0},d=n.rules.map(e=>({match:e.match?(0,Q.compileMatcher)(e.match):()=>!0,ttl:e.ttl})),l=e=>`${r}:${e}`;function p(e,t){const n=void 0===t?{key:e}:{key:e,value:t};return d.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=l(t),r=await o.get(n),s=(0,Q.readCacheEnvelope)(r);if(void 0!==s){if(!("expired"in s))return u.hits++,c(t,"hit"),s.value;try{await o.delete(n)}catch(e){g("delete",t,e)}}const i=f.get(n);if(i)return u.inflight_dedups++,c(t,"hit"),i;u.misses++,c(t,"miss");const a=(async()=>{try{const r=await e.get(t);if(void 0===r)return;const s=p(t,r);if(s)try{const e=1e3*s.ttl;await o.set(n,(0,Q.wrapCacheEnvelope)(r,e),e),u.populates++}catch(e){g("set",t,e)}return r}finally{f.delete(n)}})();return f.set(n,a),a},async set(t,n,r){u.writes++,await e.set(t,n,r);const s=p(t,n);if(s)try{const e=1e3*s.ttl;await o.set(l(t),(0,Q.wrapCacheEnvelope)(n,e),e)}catch(e){g("set",t,e)}},async delete(t){u.deletes++,await e.delete(t);try{await o.delete(l(t))}catch(e){g("delete",t,e)}}};function g(e,t,n){const o=`store-cache(${i}): cache ${e} failed for "${t}"; backing succeeded, continuing`;s?s.warn(o,{error:n}):console.warn(o,n)}}function ht(e,t,n){const o=`store.${n}`,r=(0,W.useHooks)(t.get,"StoreGet",e.hooks,e.logger),s=(0,W.useHooks)(t.set,"StoreSet",e.hooks,e.logger),i=(0,W.useHooks)(t.delete,"StoreDelete",e.hooks,e.logger);t.get=async t=>{const n=Date.now(),s=X(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:n});s.meta={op:"get",key:t},(0,W.emitStep)(e,s);try{const s=await r(t),i=Date.now(),a=X(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:i});return a.durationMs=i-n,a.meta={op:"get",key:t},(0,W.emitStep)(e,a),s}catch(r){const s=Date.now(),i=X(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:s});throw i.durationMs=s-n,i.meta={op:"get",key:t},i.error=r instanceof Error?{name:r.name,message:r.message}:{message:String(r)},(0,W.emitStep)(e,i),r}},t.set=async(t,n,r)=>{const i=Date.now(),a=X(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:i});a.meta={op:"set",key:t},(0,W.emitStep)(e,a);try{await s(t,n,r);const a=Date.now(),c=X(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:a});c.durationMs=a-i,c.meta={op:"set",key:t},(0,W.emitStep)(e,c)}catch(n){const r=Date.now(),s=X(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:r});throw s.durationMs=r-i,s.meta={op:"set",key:t},s.error=n instanceof Error?{name:n.name,message:n.message}:{message:String(n)},(0,W.emitStep)(e,s),n}},t.delete=async t=>{const n=Date.now(),r=X(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:n});r.meta={op:"delete",key:t},(0,W.emitStep)(e,r);try{await i(t);const r=Date.now(),s=X(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:r});s.durationMs=r-n,s.meta={op:"delete",key:t},(0,W.emitStep)(e,s)}catch(r){const s=Date.now(),i=X(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:s});throw i.durationMs=s-n,i.meta={op:"delete",key:t},i.error=r instanceof Error?{name:r.name,message:r.message}:{message:String(r)},(0,W.emitStep)(e,i),r}}}async function mt(e){const t=(0,$.assign)({globalsStatic:{},sessionStatic:{},run:!0,queueMax:1e3},e,{merge:!1,extend:!1}),n={level:e.logger?.level,handler:e.logger?.handler},o=(0,$.createLogger)(n),r={...t.globalsStatic,...e.globals},s={allowed:!1,config:t,consent:e.consent||{},custom:e.custom||{},destinations:{},transformers:{},stores:{},globals:r,hooks:e.hooks||{},observers:new Set,logger:o,on:{},queue:[],round:0,count:0,stateVersion:0,cellVersion:{},delivery:new WeakMap,session:void 0,status:{startedAt:Date.now(),in:0,out:0,failed:0,sources:{},destinations:{},dropped:{},connectionErrors:{},breakers:{}},timing:Date.now(),user:e.user||{},sources:{},pending:{destinations:{}},hasShutdown:!1,seenEvents:new Set,push:void 0,command:void 0,elb:void 0};var i,a;void 0!==e.name&&(s.name=e.name),void 0!==e.release&&(s.release=e.release),s.push=pt(s,e=>dt(s,e)),s.command=(i=s,a=ut,(0,V.useHooks)(async(e,t,n)=>await(0,V.tryCatchAsync)(async()=>await a(i,e,t,n),n=>{if(n instanceof V.FatalError)throw n;return i.status.failed++,i.logger.error("command failed",{command:e,data:t,error:n}),rt({ok:!1})})(),"Command",i.hooks,i.logger)),s.elb=function(e){return async(t,n,o,r,s)=>{if("string"==typeof t&&t.startsWith("walker ")){const o=t.replace("walker ","");return e.command(o,n)}let i;if("string"==typeof t)i={name:t},n&&"object"==typeof n&&!Array.isArray(n)&&(i.data=n);else{if(!t||"object"!=typeof t||Array.isArray(t))return rt({ok:!1});i={...t},n&&"object"==typeof n&&!Array.isArray(n)&&(i.data={...i.data||{},...n})}return o&&"object"==typeof o&&(i.context=o),r&&Array.isArray(r)&&(i.nested=r),s&&"object"==typeof s&&(i.custom=s),e.push(i)}}(s);const c=e.stores||{};return s.stores=await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t)){const{code:t,config:s={},env:i={}}=r,a=e.logger.scope("store").scope(o),c={collector:e,logger:a,id:o,config:s,env:i,reportError:ge(e,"store",o,a)},u=await t(c);n[o]=u}const o=t,r=function(e){const t={};for(const n of Object.keys(e))t[n]="WHITE";const n=[],o=[];function r(s){const i=t[s];if("BLACK"===i)return;if("GRAY"===i){const e=o.indexOf(s),t=o.slice(-1===e?0:e).concat(s).join(" -> ");throw new Error(`Cycle in cache.store chain: ${t}`)}t[s]="GRAY",o.push(s);const a=e[s].cache?.store;if(void 0!==a){if(!(a in e))throw new Error(`Store "${s}" cache.store references "${a}", which is not declared in flow.stores`);r(a)}o.pop(),t[s]="BLACK",n.push(s)}for(const n of Object.keys(e))"WHITE"===t[n]&&r(n);return n}(o);for(const t of r){const r=o[t].cache;if(!r)continue;let s,i;void 0!==r.store?(s=n[r.store],i=r.store):(n.__cache||(n.__cache=ft()),s=n.__cache,i="__cache");const a=r.namespace??t;e.logger.scope("store-cache").scope(t).info(`store "${t}" caches with namespace "${a}:" via ${i}`),n[t]=gt(n[t],{storeId:t,cacheConfig:r,cacheStore:s,namespace:a,logger:e.logger.scope("store-cache").scope(t),collector:e})}for(const[t,o]of Object.entries(n))"__cache"!==t&&ht(e,o,t);return n}(s,c),function(e,t,n){const o=new Map;for(const[n,r]of Object.entries(e))t[n]&&o.set(r,t[n]);if(0!==o.size)for(const e of[n.transformers,n.destinations,n.sources])if(e)for(const t of Object.values(e))r(t.env);function r(e){if(e)for(const[t,n]of Object.entries(e))if("object"==typeof n&&null!==n){const r=o.get(n);r&&(e[t]=r)}}}(c,s.stores,e),s.stores.__cache||(s.stores.__cache=ft()),s.destinations=await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t))r.config?.require?.length?e.pending.destinations[o]=r:n[o]=st(r);return n}(s,e.destinations||{}),s.transformers=await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t)){const{code:t,env:s={}}=r,i=(0,K.validateStepEntry)(r,"Transformer");if(!i.ok){e.logger.warn(`Transformer ${o} invalid (${i.code}): ${i.reason}. Skipping.`);continue}const{config:a}=ve(r,"before"),{config:c}=ve({...r,config:a},"next"),u=Object.keys(s).length>0?{...c,env:s}:c,{cache:d}=r,l=d?{...u,cache:d}:u,p=r.config?.state??r.state,f=void 0!==p&&void 0===l.state?{...l,state:p}:l,g=e.logger.scope("transformer").scope(o),h={collector:e,logger:g,id:o,ingest:(0,K.createIngest)(o),config:f,env:s,reportError:ge(e,"transformer",o,g)},m=t??(e=>{const t=r.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,r]of Object.entries(o)){if("object"!=typeof r||null===r)continue;const o=r;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,K.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!==r.before&&void 0===y.config?.before&&(y.config={...y.config??{},before:r.before}),void 0!==r.next&&void 0===y.config?.next&&(y.config={...y.config??{},next:r.next}),void 0!==p&&void 0===y.config?.state&&(y.config={...y.config??{},state:p}),n[o]=y}return n}(s,e.transformers||{}),s}var yt=globalThis;function vt(e){try{const t=yt.window;if(!t)return;t.localStorage.getItem(z.OBSERVE_STORAGE_KEY)===e&&t.localStorage.removeItem(z.OBSERVE_STORAGE_KEY)}catch{}}function wt(e,t){return void 0===t?e:n=>e({...n,release:t})}async function bt(e){e=e||{};const t=await mt(e);(function(e,t){if(t.observers)for(const n of t.observers)e.observers.add(n);const n=t.observe;if(!n)return;const o=e.name??"default";if("binding"in n){const t=function(){const e=yt.window,t=yt.URLSearchParams;if(!e||!t)return null;try{const n=new t(e.location.search.replace(/^\?/,"")).getAll(z.OBSERVE_STORAGE_KEY);return n.length>0?n[n.length-1]??null:null}catch{return null}}(),r=t??function(){try{return yt.window?.localStorage.getItem(z.OBSERVE_STORAGE_KEY)??null}catch{return null}}();if(!r)return;const s=(0,z.parseObserveCredential)(r);if(!s)return void(null===t?(e.logger.warn("observe: malformed stored credential cleared"),vt(r)):e.logger.warn("observe: malformed credential ignored"));if(s.pb!==n.binding)return void e.logger.warn("observe: credential binding mismatch, credential ignored");let i;!function(e){try{yt.window?.localStorage.setItem(z.OBSERVE_STORAGE_KEY,e)}catch{}}(r),null!==t&&function(){const e=yt.window,t=yt.URLSearchParams;if(e&&t)try{const n=e.location.href,o=n.indexOf("#"),r=o>=0?n.slice(o):"",s=o>=0?n.slice(0,o):n,i=s.indexOf("?"),a=i>=0?s.slice(0,i):s,c=new t(i>=0?s.slice(i+1):"");c.delete(z.OBSERVE_STORAGE_KEY);const u=c.toString();e.history.replaceState({},"",`${a}${u?`?${u}`:""}${r}`)}catch{}}();const a=(0,z.createBatchedPoster)({url:`${n.url}/ingest/${s.ses}`,token:s.secret,headers:{"X-Walkeros-Binding":n.binding},onStatus:t=>{401===t&&(vt(r),i&&e.observers.delete(i))}});i=(0,z.createTelemetryObserver)(function(e,t){return void 0===t?e:n=>e({...n,flowId:t})}(wt(a,e.release),n.flowId),{flowId:n.flowId??o,...void 0!==n.level?{level:n.level}:{},...void 0!==n.sample?{sample:n.sample}:{}}),e.observers.add(i);const c=n.level;return void(void 0!==c&&(e.observeLevel=()=>c))}if("off"===n.level)return;const r=n.level;void 0!==r&&(e.observeLevel=()=>r),e.observers.add((0,z.createTelemetryObserver)(wt((0,z.createBatchedPoster)({url:`${n.url}/ingest/${n.sessionId}`,token:n.token}),e.release),{flowId:o,level:n.level,sample:n.sample}))})(t,e),await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t)){const t=await je(e,o,r);if(!t)continue;const s=r.config?.require;t.config={...t.config,init:!1,...s?{require:[...s]}:{}},n[o]=t}Object.assign(e.sources,n);for(const t of Object.keys(n)){const n=e.sources[t];let o=!1;n.init&&await(0,H.tryCatchAsync)(n.init.bind(n),n=>{if(n instanceof H.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,Ce(n)&&await qe(e,n,t))}return await Ae(e),n}(t,e.sources||{});const{consent:n,user:o,globals:r,custom:s}=e;n&&await t.command("consent",n),o&&await t.command("user",o),r&&await t.command("globals",r),s&&await t.command("custom",s),t.config.run&&await t.command("run");let i=t.elb;const a=Object.values(t.sources),c=a.find(e=>e.config.primary);return c?i=c.push:a.length>0&&(i=a[0].push),{collector:t,elb:i}}var kt=async e=>{let t;return{get flow(){return t},trigger:()=>async n=>{if(!t){const n=await bt(e);t={collector:n.collector,elb:n.elb}}const o=function(e){for(const t of Object.values(e.sources||{}))if("lambda"===t.type)return t}(t.collector);if(!o)throw new Error("Lambda source not found in collector");const r={awsRequestId:`test-${Date.now()}`},s=o.push,i=await s(n,r);let a;try{a=JSON.parse(i.body||"{}")}catch{a=i.body}const c={};if(i.headers)for(const[e,t]of Object.entries(i.headers))void 0!==t&&(c[e]=String(t));return{statusCode:i.statusCode,body:a,headers:c}}}};function It(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 St={};s(St,{createTrigger:()=>$t,env:()=>Et,step:()=>At});var Et={};s(Et,{push:()=>xt,simulation:()=>jt});var Ot=()=>{},qt={error:Ot,warn:Ot,info:Ot,debug:Ot,throw:e=>{throw"string"==typeof e?new Error(e):e},json:Ot,scope:()=>qt},Ct=()=>()=>Promise.resolve({ok:!0}),xt={get push(){return Ct()},get command(){return Ct()},get elb(){return Ct()},logger:qt},jt=["AWS.SQSClient"],At={};s(At,{decoderText:()=>Pt,malformedJson:()=>Mt,orderComplete:()=>Dt,pageView:()=>Tt});var Tt={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"]]},Dt={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"]]},Pt={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"]]},Mt={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 zt(e){if("object"!=typeof e||null===e)return!1;const t=e;return"sqs"===t.type&&"function"==typeof t.push}var $t=async e=>{let t;return{get flow(){return t},trigger:()=>async n=>{if(!t){const n=await bt(e);t={collector:n.collector,elb:n.elb}}const o=function(e){for(const t of Object.values(e.sources??{}))if(zt(t))return t}(t.collector);if(!o)throw new Error("sqs source not registered in collector, ensure it is configured in sources");const r={MessageId:n.MessageId,Body:n.Body,ReceiptHandle:n.ReceiptHandle,Attributes:n.Attributes,MessageAttributes:n.MessageAttributes},s=await o.push(r),i=[];return s&&"object"==typeof s&&(s.acked&&i.push(["message.ack",n.MessageId]),s.nacked&&i.push(["message.nack",n.MessageId])),i}}};//# sourceMappingURL=dev.js.map
1
+ "use strict";var e,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,o=Object.getOwnPropertyNames,r=Object.prototype.hasOwnProperty,s=(e,n)=>{for(var o in n)t(e,o,{get:n[o],enumerable:!0})},i={};s(i,{examples:()=>E,schemas:()=>a,sqsExamples:()=>St}),module.exports=(e=i,((e,s,i,a)=>{if(s&&"object"==typeof s||"function"==typeof s)for(let c of o(s))r.call(e,c)||c===i||t(e,c,{get:()=>s[c],enumerable:!(a=n(s,c))||a.enumerable});return e})(t({},"__esModule",{value:!0}),e));var a={};s(a,{CorsOptionsSchema:()=>f,CorsOrigin:()=>p,HttpMethod:()=>l,SettingsSchema:()=>g,settings:()=>h,sqsSettings:()=>I,sqsSetup:()=>S});var c=require("@walkeros/core/dev"),u=require("@walkeros/core/dev"),d=require("@walkeros/core/dev"),l=d.z.enum(["GET","POST","PUT","PATCH","DELETE","OPTIONS","HEAD"]),p=d.z.union([d.z.string(),d.z.array(d.z.string()),d.z.literal("*")]),f=d.z.object({origin:p.describe("Allowed origins (* for all, URL string, or array of URLs)").optional(),methods:d.z.array(l).describe("Allowed HTTP methods").optional(),headers:d.z.array(d.z.string()).describe("Allowed request headers").optional(),credentials:d.z.boolean().describe("Allow credentials (cookies, authorization headers)").optional(),maxAge:d.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"),v=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()}),w=require("@walkeros/core/dev"),b=w.z.record(w.z.string(),w.z.string()),k=w.z.object({region:w.z.string().min(1).describe("AWS region.").optional(),fifoQueue:w.z.boolean().describe("FIFO queue with content-based deduplication. Auto-appends .fifo suffix to the queue name.").optional(),visibilityTimeoutSeconds:w.z.number().int().nonnegative().describe("Visibility timeout in seconds. Default: 30.").optional(),messageRetentionSeconds:w.z.number().int().positive().describe("Message retention period in seconds. Default: 345600 (4 days).").optional(),maximumMessageSize:w.z.number().int().min(1024).max(262144).describe("Max message size in bytes. Default: 262144 (256 KB).").optional(),kmsMasterKeyId:w.z.string().describe("KMS key alias or ID for at-rest encryption.").optional(),deadLetterQueue:w.z.object({arn:w.z.string().describe("ARN of an existing DLQ. Mutually exclusive with create: true.").optional(),create:w.z.boolean().describe("Create a sibling DLQ named <queueName>-dlq. Default: false.").optional(),maxReceiveCount:w.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:w.z.object({topicArn:w.z.string().min(1).describe("Topic ARN to subscribe to."),rawMessageDelivery:w.z.boolean().describe("Deliver SNS messages without the SNS envelope.").optional(),filterPolicy:w.z.record(w.z.string(),w.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()}),I=(0,m.zodToSchema)(v),S=(0,m.zodToSchema)(k),E={};s(E,{createTrigger:()=>kt,env:()=>O,step:()=>A,trigger:()=>It});var O={};s(O,{push:()=>j});var q=()=>()=>Promise.resolve({ok:!0}),C=()=>{},x={error:C,warn:C,info:C,debug:C,throw:e=>{throw"string"==typeof e?new Error(e):e},json:C,scope:()=>x},j={get push(){return q()},get command(){return q()},get elb(){return q()},logger:x},A={};s(A,{apiGatewayV1Post:()=>D,lambdaGet:()=>P,lambdaPost:()=>T});var T={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"}}]]},D={title:"API Gateway v1 POST",description:"A REST API Gateway v1 POST request with a JSON body is converted into a walker elb event.",trigger:{type:"POST"},in:{httpMethod:"POST",path:"/collect",requestContext:{requestId:"req-789",identity:{sourceIp:"203.0.113.42"}},queryStringParameters:null,body:JSON.stringify({event:"page view",data:{title:"Home"}}),isBase64Encoded:!1},out:[["elb",{name:"page view",data:{title:"Home"}}]]},P={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"}'}]]},M=require("@walkeros/core"),z=require("@walkeros/core"),$=require("@walkeros/core"),_=require("@walkeros/core"),R=(require("@walkeros/core"),require("@walkeros/core")),B=require("@walkeros/core"),G=require("@walkeros/core"),N=require("@walkeros/core"),H=require("@walkeros/core"),K=require("@walkeros/core"),U=require("@walkeros/core"),F=require("@walkeros/core"),L=require("@walkeros/core"),V=require("@walkeros/core"),W=require("@walkeros/core"),Q=require("@walkeros/core"),J={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 Y(e,t,n){return{traceId:e.source?.trace??t?._meta.trace??n.trace,sourceId:t?._meta.path[0],parentEventId:t?._meta.parentEventId}}function X(e,t){const n=e.status.startedAt,o={flowId:e.name??"default",stepId:t.stepId,stepType:t.stepType,phase:t.phase,eventId:t.eventId,timestamp:new Date(t.now).toISOString(),elapsedMs:t.now-n};return t.traceId&&(o.traceId=t.traceId),t.sourceId&&(o.sourceId=t.sourceId),t.parentEventId&&(o.parentEventId=t.parentEventId),o}function Z(e){return"object"==typeof e&&null!==e}function ee(e,t,n){if(null===e||"object"!=typeof e)return e;if(n>=8)return e;const o=t.get(e);if(void 0!==o)return o;if(Array.isArray(e)){const o=[];t.set(e,o);for(const r of e)o.push(ee(r,t,n+1));return o}const r={};t.set(e,r);for(const[o,s]of Object.entries(e))r[o]="function"==typeof s?s:ee(s,t,n+1);return r}function te(e){const t=[],n=[],{simulation:o,...r}=e,s=ee(r,new WeakMap,0);for(const e of o){const o=(0,R.parseCallPath)(e);if(0===o.length)continue;const r=o.join(".");if(o.length-1>=8){n.push(r);continue}let i=s,a=!0;for(let e=0;e<o.length-1;e++){const t=i[o[e]];if(!Z(t)){a=!1;break}i=t}const c=o[o.length-1];if(!a||!(c in i)){n.push(r);continue}const u=i[c];"function"==typeof u?i[c]=function(...e){return t.push({fn:r,args:e,ts:Date.now()}),u.apply(this,e)}:n.push(r)}return{wrappedEnv:s,calls:t,unresolved:n}}function ne(e,t){try{return e[t]}catch{return"[unreadable]"}}function oe(e){const t=new WeakSet,n=(e,o)=>{if(null===e)return null;if("function"==typeof e)return"[function]";if("string"==typeof e||"boolean"==typeof e)return e;if("number"==typeof e)return Number.isFinite(e)?e:null;if("bigint"==typeof e)return String(e);if("object"!=typeof e)return;const r=e;if(t.has(r))return"[circular]";if(o>=6)return"[truncated]";let s;t.add(r);try{if(Array.isArray(r))s=r.map(e=>n(e,o+1));else if(function(e){const t=Object.getPrototypeOf(e);return t===Object.prototype||null===t}(r)){const e={};for(const t of Object.keys(r))e[t]=n(ne(r,t),o+1);s=e}else s=function(e){try{return String(e)}catch{return"[object]"}}(r)}catch{s="[unreadable]"}return t.delete(r),s};return e.map(e=>n(e,0))}function re(e){return e.map(e=>({fn:e.fn,args:oe(e.args),ts:e.ts}))}function se(e,t,n,o){if(!Number.isFinite(n.max)||n.max<=0)throw new Error(`pushBounded: max must be > 0 (got ${n.max})`);if("dropNewest"===(n.onOverflow??"dropOldest"))return e.length>=n.max?(o&&o([t]),{appended:!1,dropped:1}):(e.push(t),{appended:!0,dropped:0});const r=[];for(;e.length>=n.max;)r.push(e.shift());return e.push(t),r.length>0&&o&&o(r),{appended:!0,dropped:r.length}}var ie=new WeakMap;function ae(e,t,n,o){ie.get(e)||(ie.set(e,!0),t.warn(n,o))}function ce(e){ie.delete(e)}var ue=()=>Date.now();function de(e){if(void 0!==e)return"number"==typeof e?{threshold:e,cooldown:3e4}:{threshold:e.threshold??5,cooldown:e.cooldown??3e4}}function le(e,t,n,o,r){if("partial"===n)return;const s=((i=e)[a=t]||(i[a]={state:"closed",consecutiveFailures:0}),i[a]);var i,a;return"success"===n?(s.consecutiveFailures=0,s.state="closed",s.probing=!1,void(s.openUntil=void 0)):(s.consecutiveFailures+=1,"half-open"===s.state?(s.state="open",s.probing=!1,void(s.openUntil=ue()+r)):void(s.consecutiveFailures>=o&&(s.state="open",s.probing=!1,s.openUntil=ue()+r)))}function pe(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 fe(e,t,n,o){e.dropped[t]||(e.dropped[t]={});const r=e.dropped[t];return r[n]=(r[n]??0)+o,r[n]}function ge(e,t,n,o,r){const s=(0,N.stepId)(t,n);return(t,i)=>{try{if(i)return r?function(e,t,n,o,r,s){const i=t.dlq=t.dlq||[],a={max:t.config.dlqMax??100},c=se(i,[o,r],a);if(c.dropped>0){const t=fe(e.status,(0,N.stepId)("destination",n),"dlq",c.dropped);ae(i,s,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:n,cap:a.max,droppedCount:t})}else i.length<a.max&&ce(i);const u=pe(e,n);u.failed++,u.dlqSize=i.length,e.status.failed++;const d=de(t.config.breaker);if(d){const o=t.config.id||n;le(e.status.breakers,(0,N.stepId)("destination",o),"transport-failure",d.threshold,d.cooldown)}}(e,r,n,i,t,o):e.status.failed++,void o.error("report error",{error:t instanceof Error?t.message:String(t),event:i.name});e.status.connectionErrors[s]=(e.status.connectionErrors[s]??0)+1,o.error("connection error",{error:t instanceof Error?t.message:String(t)})}catch{}}}function he(e,t){return e.storeId&&t.stores[e.storeId]?t.stores[e.storeId]:t.stores.__cache}function me(e,t){return e?t.stores[e]:t.stores.__cache}function ye(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 ve(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 we(e,t={}){if(!e)return[];if(Array.isArray(e))return e;const n=[],o=new Set;let r=e;for(;r&&t[r]&&!o.has(r);){o.add(r),n.push(r);const e=t[r].next;if(Array.isArray(e)){n.push(...e);break}r=e}return n}async function be(e,t,n){if(t.init&&!t.config.init){const o=t.type||"unknown",r=e.logger.scope(`transformer:${o}`),s={collector:e,logger:r,id:n,ingest:(0,K.createIngest)(n),config:t.config,env:Ee(t.config.env),reportError:ge(e,"transformer",n,r)};r.debug("init");const i=await(0,K.useHooks)(t.init,"TransformerInit",e.hooks,e.logger)(s);if(!1===i)return!1;t.config={...i||t.config,env:i?.env||t.config.env,init:!0},r.debug("init done")}return!0}async function ke(e,t,n,o,r,s){const i=t.type||"unknown",a=e.logger.scope(`transformer:${i}`),c={collector:e,logger:a,id:n,ingest:r,config:t.config,env:{...Ee(t.config.env),...s?{respond:s}:{}},reportError:ge(e,"transformer",n,a)};a.debug("push",{event:o.name});const u="string"==typeof o.id?o.id:"",{traceId:d,sourceId:l,parentEventId:p}=Y(o,r,e),f=Date.now(),g=X(e,{stepId:(0,K.stepId)("transformer",n),stepType:"transformer",phase:"in",eventId:u,now:f,traceId:d,sourceId:l,parentEventId:p});g.inEvent=o,(0,K.emitStep)(e,g);try{const r=await(0,K.useHooks)(t.push,"TransformerPush",e.hooks,e.logger)(o,c),s=Date.now(),i=X(e,{stepId:(0,K.stepId)("transformer",n),stepType:"transformer",phase:"out",eventId:u,now:s,traceId:d,sourceId:l,parentEventId:p});return i.durationMs=s-f,i.outEvent=r,(0,K.emitStep)(e,i),a.debug("push done"),r}catch(t){const o=Date.now(),r=X(e,{stepId:(0,K.stepId)("transformer",n),stepType:"transformer",phase:"error",eventId:u,now:o,traceId:d,sourceId:l,parentEventId:p});throw r.durationMs=o-f,r.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},(0,K.emitStep)(e,r),t}}function Ie(e,t){return e?{...e,_meta:{...e._meta,path:[...e._meta.path]}}:(0,K.createIngest)(t)}async function Se(e,t,n,o,r,s,i){r||(r=(0,K.createIngest)(n[0]??"chain")),i&&r._meta&&(r._meta.chainPath=i);let a=o,c=s;for(const o of n){const s=t[o];if(!s){e.logger.warn(`Transformer not found: ${o}`);continue}if(r&&r._meta&&r._meta.path.length>256)return e.logger.error(`Max path length exceeded at ${o}`),{event:null,respond:c};if(r&&r._meta&&(r._meta.hops++,r._meta.path.push(o)),!await(0,K.tryCatchAsync)(be,t=>{if(t instanceof K.FatalError)throw t;return e.status.failed++,e.logger.scope(`transformer:${s.type||"unknown"}`).error("transformer init failed",{transformer:o,error:t}),!1})(e,s,o))return{event:null,respond:c};if(i&&void 0!==s.config?.chainMocks?.[i]){const t=s.config.chainMocks[i];e.logger.scope(`transformer:${s.type||"unknown"}`).debug("chainMock",{chain:i}),a=t;continue}if(void 0!==s.config?.mock){e.logger.scope(`transformer:${s.type||"unknown"}`).debug("mock"),a=s.config.mock;continue}if(s.config?.disabled)continue;const u=s.config?.cache,d=u?(0,K.compileCache)(u):void 0,l=d?he(d,e):void 0,p=s.config?.state?(0,K.compileState)(s.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,K.applyState)(g,t=>me(t,e),t,e):t;let m;if(d&&l){const e=(0,K.buildCacheContext)(r,a),t=await(0,K.checkCache)(d,l,e);if("HIT"===t?.status&&t.value){if(a=t.value,d.stop)return{event:a,respond:c,stopped:!0};continue}"MISS"===t?.status&&(m={key:t.key,ttl:t.rule.ttl})}const y=s.config.before;if(y){const n=(0,K.getNextSteps)(y,(0,K.buildCacheContext)(r,a));if(1===n.length){const o=we(n[0],ye(t));if(o.length>0){const n=await Se(e,t,o,a,r,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,K.tryCatchAsync)(Se,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,we(n,ye(t)),a,Ie(r,n),void 0,i)))}f&&f.length>0&&(a=await(0,K.applyState)(f,t=>me(t,e),a,e));const v=await(0,K.tryCatchAsync)(ke,t=>(e.logger.scope(`transformer:${s.type||"unknown"}`).error("Push failed",{error:t}),!1))(e,s,o,a,r,c);if(!1===v)return{event:null,respond:c,droppedBy:o};if(Array.isArray(v)){const s=n.slice(n.indexOf(o)+1),u=await Promise.all(v.map(async n=>{const o=await h(n.event||a),u=Ie(r,"unknown");if(n.next){const r=(0,K.getNextSteps)(n.next,(0,K.buildCacheContext)(u,o));if(0===r.length)return{event:o,respond:c};if(1===r.length){const n=we(r[0],ye(t));return n.length>0?Se(e,t,n,o,u,c,i):{event:o,respond:c}}return(await Promise.all(r.map(n=>(0,K.tryCatchAsync)(Se,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,we(n,ye(t)),o,Ie(u,n),void 0,i)))).map(e=>({event:e.event,respond:void 0}))}return s.length>0?Se(e,t,s,o,u,c,i):{event:o,respond:c}}));let d=c;const l=[];for(const e of u.flat())if(null!==e)if(e&&"object"==typeof e&&"event"in e){const t=e;if(t.respond&&(d=t.respond),null===t.event)continue;Array.isArray(t.event)?l.push(...t.event):l.push(t.event)}else l.push(e);return 0===l.length?{event:null,respond:d}:1===l.length?{event:l[0],respond:d}:{event:l,respond:d}}if(v&&"object"==typeof v){const{event:n,respond:o,next:s}=v;if(o&&(c=o),void 0!==s){const o=await h(n||a),u=(0,K.getNextSteps)(s,(0,K.buildCacheContext)(r,o));if(0===u.length){a=o;continue}if(1===u.length){const n=we(u[0],ye(t));return n.length>0?Se(e,t,n,o,r,c,i):(e.logger.warn(`Branch target not found: ${JSON.stringify(s)}`),{event:null,respond:c})}return await Promise.all(u.map(n=>(0,K.tryCatchAsync)(Se,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,we(n,ye(t)),o,Ie(r,n),void 0,i))),{event:null,respond:void 0}}n&&(a=n)}g&&g.length>0&&(a=await(0,K.applyState)(g,t=>me(t,e),a,e)),m&&l&&(0,K.storeCache)(l,m.key,a,m.ttl);const w=s.config.next,b="string"==typeof w||Array.isArray(w)&&w.every(e=>"string"==typeof e),k=void 0!==w&&!b;if((!v||"object"==typeof v&&!v.next)&&k){const n=(0,K.getNextSteps)(s.config.next,(0,K.buildCacheContext)(r,a));if(1===n.length){const o=we(n[0],ye(t));return o.length>0?Se(e,t,o,a,r,c,i):{event:a,respond:c}}return n.length>1?(await Promise.all(n.map(n=>(0,K.tryCatchAsync)(Se,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,we(n,ye(t)),a,Ie(r,n),void 0,i))),{event:null,respond:void 0}):{event:a,respond:c}}}return{event:a,respond:c}}function Ee(e){return e&&(0,K.isObject)(e)?e:{}}function Oe(e){return"string"==typeof e||!(!Array.isArray(e)||!e.every(e=>"string"==typeof e))}async function qe(e,t,n){if(!t.on||!t.queueOn?.length)return;const o=t.queueOn;t.queueOn=[];const r=n||t.config?.id||"unknown";for(const{type:n,data:s}of o)$e(n)&&!Ne(e,t,n)||(await(0,H.tryCatchAsync)(t.on,t=>{if(t instanceof H.FatalError)throw t;e.status.failed++,e.logger.scope("source").error("source on flush failed",{sourceId:r,type:n,error:t})})(n,s),$e(n)&&Ge(e,t,n))}function Ce(e){return Boolean(e.config.init)&&!e.config.require?.length}function xe(e){return"object"==typeof e&&null!==e}async function je(e,t,n){const{code:o,config:r={},env:s={},primary:i,next:a,before:c,cache:u}=n,d=r.state??n.state,l=d?(0,H.compileState)(d):void 0,p=u,f=p?(0,H.compileCache)({...p,stop:p.stop??!0}):void 0,g=Oe(a)?we(a,ye(e.transformers)):void 0,h=Oe(c)?we(c,ye(e.transformers)):void 0,m=s.push,y=m??e.push,v=Boolean(m),w=async(n,o,s)=>{let i;const u=h??(void 0!==c?(()=>{const t=(0,H.getNextSteps)(c,(0,H.buildCacheContext)(s.ingest));return 0===t.length?[]:we(1===t.length?t[0]:t,ye(e.transformers))})():[]);let d=[n];if(u.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const o=await Se(e,e.transformers,u,n,s.ingest,s.respond,`source.${t}.before`);if(null===o.event)return{ok:!0};if(o.stopped)return o.respond&&(s.respond=o.respond),{ok:!0};o.respond&&(s.respond=o.respond),d=Array.isArray(o.event)?o.event:[o.event]}if(f){const t=he(f,e);if(t){const n=(0,H.buildCacheContext)(s.ingest),o=await(0,H.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,H.applyUpdate)(t,o.rule.update,{...n,cache:{status:"HIT"}},e)),s.respond?.(t),{ok:!0}}if("MISS"===o.status&&f.stop&&s.respond){const r=s.respond,a=o.rule.update,c={...n,cache:{status:"MISS"}},u=o.key,d=o.rule.ttl,l=n=>{(0,H.storeCache)(t,u,n,d),a?i=(async()=>{const t=await(0,H.applyUpdate)(n,a,c,e);r(t)})():r(n)};s.respond=l}"MISS"!==o.status||f.stop||(0,H.storeCache)(t,o.key,!0,o.rule.ttl)}}}const p=g?{kind:"single",preChain:g}:void 0!==a?(()=>{const t=(0,H.getNextSteps)(a,(0,H.buildCacheContext)(s.ingest));return 0===t.length?{kind:"single",preChain:[]}:1===t.length?{kind:"single",preChain:we(t[0],ye(e.transformers))}:{kind:"many",branches:t.map(t=>we(t,ye(e.transformers)))}})():{kind:"single",preChain:[]};!v&&l&&l.length>0&&(d=await Promise.all(d.map(t=>(0,H.applyState)(l,t=>me(t,e),t,e))));let m={ok:!0};for(const n of d)"many"===p.kind?(await Promise.all(p.branches.map((i,a)=>(0,H.tryCatchAsync)(async()=>v?y(n):y(n,{...o,id:t,ingest:Ie(s.ingest,`${t}.${a}`),respond:void 0,mapping:r,preChain:i}),t=>(e.logger.scope("source:many").error(`many branch ${a} failed`,{error:t}),{ok:!0}))())),m={ok:!0}):m=v?await y(n):await y(n,{...o,id:t,ingest:s.ingest,respond:s.respond,mapping:r,preChain:p.preChain});return i&&await i,m},b=async n=>{const o=(0,H.createIngest)(t),s=(0,H.parseTraceparent)(function(e){if(!xe(e))return;const t=e.headers;if(xe(t)){if("get"in(n=t)&&"function"==typeof n.get)return t.get("traceparent")??void 0;if("traceparent"in t)return t.traceparent;for(const e of Object.keys(t))if("traceparent"===e.toLowerCase())return t[e]}var n}(n));if(s&&(o._meta.trace=s.trace,o._meta.parentEventId=s.parentSpan),!r.ingest||void 0===n)return o;const i=await(0,H.getMappingValue)(n,r.ingest,{collector:e});return{...o,...i,_meta:o._meta}},k=e.logger.scope("source").scope(t),I={command:e.command,sources:e.sources,elb:e.elb,logger:k,...s,push:async(e,n={})=>{const o={ingest:(0,H.createIngest)(t),respond:void 0};return w(e,n,o)}},S={collector:e,logger:k,id:t,config:r,env:I,withScope:async(e,t,n)=>{const o={ingest:await b(e),respond:t};return n({...I,push:(e,t={})=>w(e,t,o),ingest:o.ingest,respond:o.respond})},reportError:ge(e,"source",t,k)},E=await(0,H.tryCatchAsync)(o,n=>{if(n instanceof H.FatalError)throw n;e.status.failed++,e.logger.scope("source").error("source factory failed",{sourceId:t,error:n})})(S);if(!E)return;const O=E.type||"unknown",q=e.logger.scope(O).scope(t);return I.logger=q,i&&(E.config={...E.config,primary:i}),E}async function Ae(e){for(const[t,n]of Object.entries(e.sources)){if(Ce(n))continue;const o=n.config.require;if(!o?.length)continue;const r=o.filter(t=>!Re(e,t));r.length!==o.length&&(n.config.require=r,Ce(n)&&await qe(e,n,t))}for(const[t,n]of Object.entries(e.pending.destinations)){if(!e.pending.destinations[t]||e.destinations[t])continue;const o=n.config?.require;if(!o)continue;const r=o.filter(t=>!Re(e,t));if(n.config&&(n.config.require=r),r.length>0)continue;delete e.pending.destinations[t];const s=st(n);!1!==s.config.queue&&(s.queuePush=[...e.queue]),e.destinations[t]=s}}function Te(e){if("object"!=typeof e||null===e)return!1;if(!("logger"in e))return!1;const t=e.logger;return"object"==typeof t&&null!==t&&"scope"in t&&"function"==typeof t.scope}var De=!1;function Pe(){De||(De=!0,"undefined"!=typeof console&&"function"==typeof console.warn&&console.warn("walkerOS: ignored an on-dispatch call with a non-collector argument"))}function Me(e,t,n,o){if(n instanceof B.FatalError)throw n;e.logger.scope("on").error("on callback failed",{kind:t,...o,error:n})}var ze=[J.Consent,J.User,J.Globals,J.Custom];function $e(e){return ze.includes(e)}function _e(e,t){switch(t){case J.Consent:return Object.keys(e.consent).length>0;case J.User:return Object.keys(e.user).length>0;case J.Globals:return Object.keys(e.globals).length>0;case J.Custom:return Object.keys(e.custom).length>0;default:return!1}}function Re(e,t){switch(t){case J.Consent:case J.User:case J.Globals:case J.Custom:return _e(e,t);case J.Run:case J.Ready:return!0===e.allowed;default:return e.seenEvents.has(String(t))}}function Be(e,t){return e.cellVersion[String(t)]??0}function Ge(e,t,n){let o=e.delivery.get(t);o||(o={},e.delivery.set(t,o)),o[String(n)]=Be(e,n)}function Ne(e,t,n){return e.allowed&&Be(e,n)>function(e,t,n){const o=e.delivery.get(t),r=o?.[String(n)];return void 0===r?-1:r}(e,t,n)}function He(e,t,n){const o=e.cascade;if(!o)return!0;let r=o.counts.get(t);r||(r={},o.counts.set(t,r));const s=String(n),i=(r[s]||0)+1;return r[s]=i,i<=8||(9===i&&e.logger.error("state delivery did not converge",{type:s}),!1)}function Ke(e,t){return{collector:e,logger:e.logger.scope("on").scope(String(t))}}function Ue(e,t,n,o,r){if(!t.on)return;const s=t.type||"unknown",i=e.logger.scope(s).scope("on").scope(o),a={collector:e,logger:i,id:n,config:t.config,data:r,env:it(t.env,t.config.env),reportError:ge(e,"destination",n,i,t)};(0,G.tryCatch)(t.on,t=>Me(e,"destination",t,{destId:n,type:o}))(o,a)}function Fe(e,t,n,o){if(!Te(e))return void Pe();const r=Le(e,t,o);if(n.length)switch(t){case J.Consent:!function(e,t,n){const o=n||e.consent,r=Ke(e,J.Consent);t.forEach(t=>{Ne(e,t,J.Consent)&&He(e,t,J.Consent)&&(Object.keys(o).filter(e=>e in t).forEach(n=>{(0,G.tryCatch)(t[n],t=>Me(e,"consent",t,{key:n}))(o,r)}),Ge(e,t,J.Consent))})}(e,n,o);break;case J.Ready:!function(e,t){if(!e.allowed)return;const n=Ke(e,J.Ready);t.forEach(t=>{(0,G.tryCatch)(t,t=>Me(e,"ready",t))(void 0,n)})}(e,n);break;case J.Run:!function(e,t){if(!e.allowed)return;const n=Ke(e,J.Run);t.forEach(t=>{(0,G.tryCatch)(t,t=>Me(e,"run",t))(void 0,n)})}(e,n);break;case J.Session:!function(e,t){if(!e.session)return;const n=Ke(e,J.Session);t.forEach(t=>{(0,G.tryCatch)(t,t=>Me(e,"session",t))(e.session,n)})}(e,n);break;default:{const o=Ke(e,t),s=$e(t);n.forEach(n=>{"function"==typeof n&&(s&&!Ne(e,n,t)||s&&!He(e,n,t)||((0,G.tryCatch)(n,n=>Me(e,"generic",n,{type:t}))(r,o),s&&Ge(e,n,t)))});break}}}function Le(e,t,n){switch(t){case J.Consent:return n||e.consent;case J.Session:return e.session;case J.User:return n||e.user;case J.Custom:return n||e.custom;case J.Globals:return n||e.globals;case J.Config:return n||e.config;default:return}}async function Ve(e,t,n,o,r){if(!t.on)return!1;if($e(o)&&!Ne(e,t,o))return!1;if($e(o)&&!He(e,t,o))return!1;const s=await(0,G.tryCatchAsync)(t.on,t=>Me(e,"source",t,{sourceId:n,type:o}))(o,r);return $e(o)&&Ge(e,t,o),!1===s}function We(e){return"number"==typeof e&&e>0?e:1e4}var Qe=class extends Error{constructor(e){super(e),this.name="DestinationTimeoutError"}};function Je(e,t,n){let o;const r=new Promise((e,r)=>{o=setTimeout(()=>r(new Qe(n)),t)});return Promise.race([e,r]).finally(()=>{o&&clearTimeout(o)})}var Ye=Object.freeze({batched:!0});function Xe(e){return e===Ye}function Ze(e){return void 0===e?{}:"number"==typeof e?{wait:e}:{wait:e.wait,size:e.size,age:e.age}}function et(e,t,n){if(!e)return[];if(Array.isArray(e)&&e.every(e=>"string"==typeof e))return we(e,t);if("string"==typeof e)return we(e,t);const o=(0,_.getNextSteps)(e,(0,_.buildCacheContext)(n));return 0===o.length?[]:1===o.length?we(o[0],t):we(o,t)}async function tt(e,t,n={},o){const{allowed:r,consent:s,globals:i,user:a}=e;if(!r)return rt({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=se(e.queue,t,{max:n});if(o.dropped>0){const t=fe(e.status,(0,_.stepId)("collector"),"queue",o.dropped);ae(e.queue,e.logger,"collector.queue overflow; oldest events dropped",{buffer:"queue",cap:n,droppedCount:t})}else e.queue.length<n&&ce(e.queue);e.status.in++}o||(o=e.destinations);const c=e.transformers?ye(e.transformers):{},u=await Promise.all(Object.entries(o||{}).map(async([o,r])=>{if(r.config.disabled)return{id:o,destination:r,skipped:!0};const u=r.config.id||o,d=(0,_.stepId)("destination",u),l=de(r.config.breaker);if(l&&function(e,t,n){const o=e[t];if(!o||"closed"===o.state)return!1;if("half-open"===o.state)return!0===o.probing;const r=ue();return void 0!==o.openUntil&&r<o.openUntil||(o.state="half-open",o.probing=!0,o.openUntil=r+n,!1)}(e.status.breakers,d,l.cooldown))return{id:o,destination:r,skipped:!0};const p=t=>{l&&le(e.status.breakers,d,t,l.threshold,l.cooldown)},f=()=>{l&&function(e,t){const n=e[t];n&&"half-open"===n.state&&!0===n.probing&&(n.state="open",n.probing=!1)}(e.status.breakers,d)};let g=(r.queuePush||[]).map(e=>({...e,consent:s}));r.queuePush=[],t&&g.push((0,_.clone)(t));const h=n.ingest?{...n.ingest,_meta:{...n.ingest._meta,path:[...n.ingest._meta.path]}}:(0,_.createIngest)("unknown");if(!g.length&&!r.queueOn?.length)return f(),{id:o,destination:r,skipped:!0};if(!g.length&&r.queueOn?.length){if(!(0,_.getGrantedConsent)(r.config.consent,s))return f(),{id:o,destination:r,skipped:!0};let t=!1;try{t=await nt(e,r,o,!0)}catch(t){e.status.failed++;const n=r.type||"unknown";e.logger.scope(n).error("destination init failed",{error:t instanceof Error?t.message:String(t)}),p("transport-failure")}return f(),{id:o,destination:r,skipped:!t}}const m=[],y=g.filter(t=>{const n=(0,_.getGrantedConsent)(r.config.consent,s,t.consent);if(n)return t.consent=n,m.push(t),!1;const i=X(e,{stepId:(0,_.stepId)("destination",o),stepType:"destination",phase:"skip",eventId:"string"==typeof t.id?t.id:"",now:Date.now(),...Y(t,h,e)});return i.skipReason="consent",s&&(i.consent={...s}),r.config.consent&&(i.meta={required:{...r.config.consent}}),(0,_.emitStep)(e,i),!0});if(y.length>0){const t=r.queuePush,n=r.config.id||o,s={max:r.config.queueMax??1e3};let i=0;for(const e of y)i+=se(t,e,s).dropped;if(i>0){pe(e,n);const o=fe(e.status,(0,_.stepId)("destination",n),"queue",i);ae(t,e.logger.scope(r.type||"unknown"),"destination.queuePush overflow; oldest events dropped",{buffer:"queuePush",destination:n,cap:s.max,droppedCount:o})}else t.length<s.max&&ce(t)}if(!m.length)return f(),{id:o,destination:r,queue:g};let v,w,b=!1;try{b=await nt(e,r,o,!0)}catch(t){e.status.failed++;const n=r.type||"unknown";e.logger.scope(n).error("destination init failed",{error:t instanceof Error?t.message:String(t)}),p("transport-failure")}if(!b)return f(),{id:o,destination:r,queue:g};r.dlq||(r.dlq=[]);const k=et(r.config.before,c,h),I=r.config.next,S=r.config?.cache,E=S?(0,_.compileCache)(S):void 0,O=E?he(E,e):void 0,q=r.config?.state?(0,_.compileState)(r.config.state):void 0,C=q?.filter(e=>"get"===e.mode),x=q?.filter(e=>"set"===e.mode);let j=0,A=0;return await Promise.all(m.map(async t=>{let s;if(t.globals=(0,_.assign)(i,t.globals),t.user=(0,_.assign)(a,t.user),E?.stop&&O){const e=(0,_.buildCacheContext)(h,t),n=await(0,_.checkCache)(E,O,e);if("HIT"===n?.status)return t;"MISS"===n?.status&&(s={key:n.key,ttl:n.rule.ttl})}let u=t,d=n.respond;if(k.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const r=await Se(e,e.transformers,k,t,h,n.respond,`destination.${o}.before`);if(null===r.event)return t;r.respond&&(d=r.respond),u=Array.isArray(r.event)?r.event[0]:r.event}if(E&&!E.stop&&O){const e=(0,_.buildCacheContext)(h,u),n=await(0,_.checkCache)(E,O,e);if("HIT"===n?.status)return t;"MISS"===n?.status&&(s={key:n.key,ttl:n.rule.ttl})}C&&C.length>0&&u&&(u=await(0,_.applyState)(C,t=>me(t,e),u,e));const l=Date.now();let p=!1;const f=await(0,_.tryCatchAsync)(ot,t=>{const n=r.type||"unknown";e.logger.scope(n).error("Push failed",{error:t,event:u.name}),v=t,p=!0;const s=r.dlq,i=r.config.id||o,a={max:r.config.dlqMax??100},c=se(s,[u,t],a);if(c.dropped>0){pe(e,i);const t=fe(e.status,(0,_.stepId)("destination",i),"dlq",c.dropped);ae(s,e.logger.scope(r.type||"unknown"),"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:i,cap:a.max,droppedCount:t})}else s.length<a.max&&ce(s)})(e,r,o,u,h,d);if(j+=Date.now()-l,s&&O&&void 0===r.config.mock&&(0,_.storeCache)(O,s.key,f??!0,s.ttl),!p&&!Xe(f)&&x&&x.length>0&&u&&(u=await(0,_.applyState)(x,t=>me(t,e),u,e)),void 0===f||Xe(f)||(w=f),Xe(f)&&A++,!p&&I){void 0!==f&&(h._response=f);const t=et(I,c,h);if(t.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const n=await Se(e,e.transformers,t,u,h,d,`destination.${o}.next`);n.respond&&(d=n.respond)}}return t})),{id:o,destination:r,error:v,response:w,totalDuration:j,batchedCount:A,allowedCount:m.length,canonicalId:u,breakerConfig:l}})),d={},l={},p={};for(const t of u){if(t.skipped)continue;const n=t.destination,o={type:n.type||"unknown",data:t.response};pe(e,t.id);const r=e.status.destinations[t.id],s=Date.now();r.queuePushSize=n.queuePush?.length??0,r.dlqSize=n.dlq?.length??0;const i=t.breakerConfig,a=t.canonicalId?(0,_.stepId)("destination",t.canonicalId):void 0,c=t=>{i&&a&&le(e.status.breakers,a,t,i.threshold,i.cooldown)};if(t.error)o.error=t.error,p[t.id]=o,r.failed++,r.lastAt=s,r.duration+=t.totalDuration||0,e.status.failed++,c("transport-failure");else if(t.queue&&t.queue.length)l[t.id]=o;else{const n=t.batchedCount??0,i=t.allowedCount??0;(Math.max(0,i-n)>0||0===i)&&(d[t.id]=o,r.count++,r.lastAt=s,r.duration+=t.totalDuration||0,e.status.out++,c("success"))}}return rt({event:t,...Object.keys(d).length&&{done:d},...Object.keys(l).length&&{queued:l},...Object.keys(p).length&&{failed:p}})}async function nt(e,t,n,o=!1){if(t.init&&!t.config.init){if(!o&&function(e){const t=e.config.consent;return!!t&&Object.keys(t).length>0}(t))return e.logger.scope(t.type||"unknown").debug("init blocked: consent gate not cleared"),!1;const r=t.type||"unknown",s=e.logger.scope(r),i={collector:e,logger:s,id:n,config:t.config,env:it(t.env,t.config.env),reportError:ge(e,"destination",n,s,t)};s.debug("init");const a=Date.now();let c;(0,_.emitStep)(e,X(e,{stepId:(0,_.stepId)("destination",n),stepType:"destination",phase:"init",eventId:"",now:a}));try{c=await(0,_.useHooks)(t.init,"DestinationInit",e.hooks,e.logger)(i)}catch(t){const o=Date.now(),r=X(e,{stepId:(0,_.stepId)("destination",n),stepType:"destination",phase:"error",eventId:"",now:o});throw r.durationMs=o-a,r.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},(0,_.emitStep)(e,r),t}if(!1===c)return c;if(t.config={...c||t.config,init:!0},t.queueOn?.length){const o=t.queueOn;t.queueOn=[];for(const{type:r,data:s}of o)Ue(e,t,n,r,s)}s.debug("init done")}return!0}async function ot(e,t,n,o,r,s){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),d={collector:e,logger:u,id:n,config:i,data:a.data,rule:a.mapping,ingest:r,env:{...it(t.env,i.env),...s?{respond:s}:{}},reportError:ge(e,"destination",n,u,t)};if(void 0!==i.mock)return u.debug("mock",{event:a.event.name}),i.mock;const l=a.mapping,p=void 0!==l?.batch,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:[]},r=Ze(l?.batch),s=Ze(i.batch),a=r.wait??s.wait??3e4,c=r.size??s.size??1e3,d=r.age??s.age??3e4,g=it(t.env,i.env),h=(0,_.debounce)(async()=>{const o=t.batches[f],r=o.batched;if(0===r.entries.length)return;const s={key:r.key,entries:r.entries,events:r.events,data:r.data};r.entries=[],r.events=[],r.data=[];const a=s.entries[0],{traceId:c,sourceId:d,parentEventId:l}=Y(a.event,a.ingest,e),p={collector:e,logger:u,id:n,config:i,data:void 0,rule:o.isDefault?void 0:a.rule,ingest:a.ingest,env:{...g,...a.respond?{respond:a.respond}:{}},reportError:ge(e,"destination",n,u,t)};u.debug("push batch",{events:s.entries.length});const h=t.config.id||n,m=pe(e,h),y=de(t.config.breaker),v=(0,_.stepId)("destination",h),w=t=>{y&&le(e.status.breakers,v,t,y.threshold,y.cooldown)},b=Date.now(),k=X(e,{stepId:(0,_.stepId)("destination",n),stepType:"destination",phase:"flush",eventId:"",now:b,traceId:c,sourceId:d,parentEventId:l});k.batch={size:s.entries.length,index:0},(0,_.emitStep)(e,k);const I=n=>{const o=t.dlq=t.dlq||[],r={max:t.config.dlqMax??100};let s=0;for(const e of n)s+=se(o,e,r).dropped;if(s>0){const t=fe(e.status,(0,_.stepId)("destination",h),"dlq",s);ae(o,u,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:h,cap:r.max,droppedCount:t})}else o.length<r.max&&ce(o);m.failed+=n.length,m.dlqSize=o.length,e.status.failed+=n.length};let S=s.entries.length;const E=We(i.timeout),O=await(0,_.tryCatchAsync)((o,r)=>Je(Promise.resolve((0,_.useHooks)(t.pushBatch,"DestinationPushBatch",e.hooks,e.logger)(o,r)),E,`Destination "${n}" batch delivery timed out after ${E}ms`),t=>{S=0;const o=Date.now(),r=X(e,{stepId:(0,_.stepId)("destination",n),stepType:"destination",phase:"error",eventId:"",now:o,traceId:c,sourceId:d,parentEventId:l});r.durationMs=o-b,r.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},r.batch={size:s.entries.length,index:0},(0,_.emitStep)(e,r),I(s.entries.map(e=>[e.event,t])),w("transport-failure"),u.error("Push batch failed",{error:t instanceof Error?t.message:String(t),entries:s.entries.length})})(s,p);if((0,_.isObject)(q=O)&&Array.isArray(q.failed)&&O.failed.length>0){const e=[],t=new Set;for(const n of O.failed){const o=s.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&&(I(e),S=Math.max(0,s.entries.length-e.length),u.error("Push batch partial failure",{failed:e.length,delivered:S,entries:s.entries.length}))}var q;u.debug("push batch done"),m.inFlightBatch=Math.max(0,(m.inFlightBatch??0)-s.entries.length),S>0&&(m.count+=S,m.lastAt=Date.now(),e.status.out+=S,w("success"))},{wait:a,size:c,age:d});t.batches[f]={batched:o,isDefault:!p,batchFn:()=>{h()},flush:async()=>{await h.flush()}}}const c=t.batches[f];c.batched.entries.push({event:a.event,ingest:r,respond:s,rule:l,data:a.data}),c.batched.events.push(a.event),(0,_.isDefined)(a.data)&&c.batched.data.push(a.data);const d="string"==typeof a.event.id?a.event.id:"",g=Y(o,r,e),h=Date.now(),m=X(e,{stepId:(0,_.stepId)("destination",n),stepType:"destination",phase:"in",eventId:d,now:h,traceId:g.traceId,sourceId:g.sourceId,parentEventId:g.parentEventId});a.mappingKey&&(m.mappingKey=a.mappingKey),a.event.consent&&(m.consent={...a.event.consent}),m.inEvent=a.event,(0,_.emitStep)(e,m);const y=X(e,{stepId:(0,_.stepId)("destination",n),stepType:"destination",phase:"out",eventId:d,now:h,traceId:g.traceId,sourceId:g.sourceId,parentEventId:g.parentEventId});a.mappingKey&&(y.mappingKey=a.mappingKey),y.outEvent=a.event,y.batch={size:c.batched.entries.length,index:c.batched.entries.length-1},(0,_.emitStep)(e,y);const v=t.config.id||n,w=pe(e,v);return w.inFlightBatch=(w.inFlightBatch??0)+1,c.batchFn(),Ye}{let s;if(u.debug("push",{event:a.event.name}),"trace"===e.observeLevel?.()&&Array.isArray(t.calls)&&t.calls.length>0){const e=te({...d.env,simulation:t.calls});d.env=e.wrappedEnv,s=e.calls,e.unresolved.length>0&&(e.wrappedEnv[_.OBSERVE_ENV_KEY]={paths:e.unresolved,record:(t,n)=>e.calls.push({fn:t,args:n,ts:Date.now()})})}const c="string"==typeof a.event.id?a.event.id:"",{traceId:l,sourceId:p,parentEventId:f}=Y(o,r,e),g=Date.now(),h=X(e,{stepId:(0,_.stepId)("destination",n),stepType:"destination",phase:"in",eventId:c,now:g,traceId:l,sourceId:p,parentEventId:f});a.mappingKey&&(h.mappingKey=a.mappingKey),a.event.consent&&(h.consent={...a.event.consent}),h.inEvent=a.event,(0,_.emitStep)(e,h);try{const o=We(i.timeout),r=await Je(Promise.resolve((0,_.useHooks)(t.push,"DestinationPush",e.hooks,e.logger)(a.event,d)),o,`Destination "${n}" delivery timed out after ${o}ms`),h=Date.now(),m=X(e,{stepId:(0,_.stepId)("destination",n),stepType:"destination",phase:"out",eventId:c,now:h,traceId:l,sourceId:p,parentEventId:f});return m.durationMs=h-g,m.outEvent=a.event,s&&s.length>0&&(m.calls=re(s)),(0,_.isDefined)(r)&&(m.meta={...m.meta,response:r}),a.mappingKey&&(m.mappingKey=a.mappingKey),(0,_.emitStep)(e,m),u.debug("push done"),r}catch(t){const o=Date.now(),r=X(e,{stepId:(0,_.stepId)("destination",n),stepType:"destination",phase:"error",eventId:c,now:o,traceId:l,sourceId:p,parentEventId:f});throw r.durationMs=o-g,r.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},s&&s.length>0&&(r.calls=re(s)),a.mappingKey&&(r.mappingKey=a.mappingKey),(0,_.emitStep)(e,r),t}}}function rt(e){return{ok:!e?.failed,...e}}function st(e){const{code:t,config:n={},env:o={},cache:r,state:s}=e,{config:i}=ve(e,"before"),{config:a}=ve({...e,config:i},"next"),c={...t.config,...n,...a};r&&(c.cache=r),void 0!==s&&void 0===c.state&&(c.state=s);const u=it(t.env,o);return{...t,config:c,env:u}}function it(e,t){return e||t?t?e&&(0,_.isObject)(e)&&(0,_.isObject)(t)?{...e,...t}:t:e:{}}async function at(e,t,n){const o=Object.entries(e).map(async([e,o])=>{const r=o.destroy;if(!r)return;const s=o.type||"unknown",i=n.scope(s),a={id:e,config:o.config,env:o.env??{},logger:i};let c;try{await Promise.race([r(a),new Promise((n,o)=>{c=setTimeout(()=>o(new Error(`${t} '${e}' destroy timed out`)),5e3)})])}catch(n){i.error(`${t} '${e}' destroy failed: ${n}`)}finally{c&&clearTimeout(c)}});await Promise.allSettled(o)}function ct(e,t){e.stateVersion++,e.cellVersion[t]=e.stateVersion}async function ut(e,t,n){let o,r,s=!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 J.Config:(0,F.isObject)(n)&&((0,U.assign)(e.config,n,{shallow:!1}),r=n,s=!0);break;case J.Consent:if((0,F.isObject)(n)){const{update:t}=function(e,t){const n={};return Object.entries(t).forEach(([e,t])=>{n[e]=!!t}),e.consent=(0,M.assign)(e.consent,n),{update:n}}(e,n);ct(e,J.Consent),r=t,s=!0}break;case J.Custom:(0,F.isObject)(n)&&(e.custom=(0,U.assign)(e.custom,n),ct(e,J.Custom),r=n,s=!0);break;case J.Destination:(0,F.isObject)(n)&&"code"in n&&(0,F.isObject)(n.code)&&(o=await async function(e,t){const{code:n,config:o={},env:r={},before:s,next:i,cache:a,state:c}=t;if(!(0,_.isFunction)(n.push))return rt({ok:!1,failed:{invalid:{type:"invalid",error:"Destination code must have a push method"}}});const u=o||{init:!1};let d=s?{...u,before:s}:{...u};i&&(d={...d,next:i}),a&&(d={...d,cache:a}),void 0!==c&&void 0===d.state&&(d={...d,state:c});let l=d.id;if(!l)do{l=(0,_.getId)(5,"abcdefghijklmnopqrstuvwxyz")}while(e.destinations[l]||e.pending.destinations[l]);if(d.require?.length){e.pending.destinations[l]=t,await Ae(e);const n=e.destinations[l];return n?tt(e,void 0,{},{[l]:n}):rt({ok:!0})}const p={...n,config:d,env:it(n.env,r)};return e.destinations[l]=p,!1!==p.config.queue&&(p.queuePush=[...e.queue]),tt(e,void 0,{},{[l]:p})}(e,n));break;case J.Globals:(0,F.isObject)(n)&&(e.globals=(0,U.assign)(e.globals,n),ct(e,J.Globals),r=n,s=!0);break;case J.Hook:if((0,F.isObject)(n)&&(0,U.isString)(n.name)&&(0,U.isFunction)(n.fn)){const{name:t,fn:o}=n;e.hooks[t]=o,r=n,s=!0}break;case J.On:if((0,F.isObject)(n)&&(0,U.isString)(n.type)){const{type:t,rules:o}=n;await async function(e,t,n){if(!Te(e))return void Pe();const o=e.on,r=o[t]||[],s=(0,B.isArray)(n)?n:[n];s.forEach(e=>{r.push(e)}),o[t]=r,Fe(e,t,s)}(e,t,o)}break;case J.Ready:s=!0;break;case J.Run:o=await async function(e,t){return e.allowed=!0,e.timing=Date.now(),e.trace=(0,U.getTraceId)(),e.count=0,t&&(t.consent&&(e.consent=(0,U.assign)(e.consent,t.consent),ct(e,J.Consent)),t.user&&(e.user=(0,U.assign)(e.user,t.user),ct(e,J.User)),t.globals&&(e.globals=(0,U.assign)(e.config.globalsStatic||{},t.globals),ct(e,J.Globals)),t.custom&&(e.custom=(0,U.assign)(e.custom,t.custom),ct(e,J.Custom))),Object.values(e.destinations).forEach(e=>{e.queuePush=[]}),e.queue=[],e.round++,await Ae(e),await async function(e){if(Te(e))for(const t of ze){if(!_e(e,t))continue;const n=Le(e,t);Fe(e,t,e.on[t]||[]);for(const[o,r]of Object.entries(e.sources))Ce(r)&&await Ve(e,r,o,t,n)}else Pe()}(e),await tt(e)}(e,n),s=!0;break;case J.Session:s=!0;break;case J.Shutdown:e.hasShutdown||(e.hasShutdown=!0,await async function(e){const t=e.logger;await at(e.sources,"source",t),await async function(e,t){const n=Object.entries(e).flatMap(([e,n])=>{const o=n.batches;if(!o)return[];const r=t.scope(n.type||"destination");return Object.values(o).map(async t=>{let n;try{await Promise.race([t.flush(),new Promise((t,o)=>{n=setTimeout(()=>o(new Error(`destination '${e}' batch flush timed out`)),5e3)})])}catch(t){r.error(`destination '${e}' batch flush failed: ${t}`)}finally{n&&clearTimeout(n)}})});await Promise.allSettled(n)}(e.destinations,t),await at(e.destinations,"destination",t),await at(e.transformers,"transformer",t),await at(e.stores,"store",t)}(e));break;case J.User:(0,F.isObject)(n)&&((0,U.assign)(e.user,n,{shallow:!1}),ct(e,J.User),r=n,s=!0);break;default:return e.logger.warn("unknown command",{command:t}),rt({ok:!1})}return s&&(await async function(e,t,n,o){if(!Te(e))return Pe(),!0;e.seenEvents.add(String(t));let r=n||[];n||(r=e.on[t]||[]);const s=Le(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&&(Ce(o)?await Ve(e,o,n,t,s)&&(i=!0):(o.queueOn=o.queueOn||[],o.queueOn.push({type:t,data:s})))}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:s});Ue(e,o,n,t,s)}});for(const[t,n]of Object.entries(e.sources))Ce(n)&&n.queueOn?.length&&await qe(e,n,t);const a=Object.values(e.sources).some(e=>!Ce(e)&&e.config.require?.length);return(Object.keys(e.pending.destinations).length>0||a)&&await Ae(e),Fe(e,t,r,o),!i}(e,t,void 0,r),o=await tt(e)),o||rt({ok:!0})}()}finally{i()}}function dt(e,t){return{timing:Math.round((Date.now()-e.timing)/10)/100,source:{type:"collector",schema:"4"},...t}}function lt(e,t,n){if(!t.name)throw new Error("Event name is required");const[o,r]=t.name.split(" ");if(!o||!r)throw new Error("Event name is invalid");const{timestamp:s=Date.now(),name:i=`${o} ${r}`,data:a={},context:c={},globals:u=e.globals,custom:d={},user:l=e.user,nested:p=[],consent:f=e.consent,id:g=(0,U.getSpanId)(),trigger:h="",entity:m=o,action:y=r,timing:v=0,source:w={type:"collector",schema:"4"}}=t,b=w.count??(e.count+=1),k=w.trace??n?._meta.trace??e.trace,I={...w,count:b};void 0!==k&&(I.trace=k);const S=e.name??w.platform??"default",E=e.release??"4.3.2";return I.release={...w.release,[S]:E},{name:i,data:a,context:c,globals:u,custom:d,user:l,nested:p,consent:f,id:g,trigger:h,entity:m,action:y,timestamp:s,timing:v,source:I}}function pt(e,t){const n=(0,L.useHooks)(async(n,o={})=>await(0,L.tryCatchAsync)(async()=>{const r=Date.now(),{id:s,ingest:i,respond:a,mapping:c,preChain:u,include:d,exclude:l}=o;let p=a,f=n;const g=d||l?function(e,t,n){let o=e;return t&&(o=Object.fromEntries(Object.entries(o).filter(([e])=>t.includes(e)))),n&&(o=Object.fromEntries(Object.entries(o).filter(([e])=>!n.includes(e)))),o}(e.destinations,d,l):void 0,h=i??(0,L.createIngest)(s||"unknown");if(c){const t=await(0,L.processEventMapping)(f,c,e);if(t.ignore)return rt({ok:!0});if(c.consent&&!(0,L.getGrantedConsent)(c.consent,e.consent,t.event.consent))return rt({ok:!0});f=t.event}if(u?.length&&e.transformers&&Object.keys(e.transformers).length>0){const n=await Se(e,e.transformers,u,f,h,p,s?`source.${s}.next`:void 0);if(null===n.event)return e.logger.debug("Event dropped by transformer chain"+(n.droppedBy?` (${n.droppedBy})`:"")),rt({ok:!0,dropped:!0});if(n.stopped)return n.respond&&(p=n.respond),rt({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),r=lt(e,o,h);return tt(e,r,{id:s,ingest:h,respond:p},g)}));if(s){e.status.sources[s]||(e.status.sources[s]={count:0,duration:0});const t=e.status.sources[s];t.count+=n.event.length,t.lastAt=Date.now(),t.duration+=Date.now()-r}return o[0]??rt({ok:!0})}f=n.event}const m=function(e,t,n){return lt(e,dt(e,t),n)}(e,f,h),y=await tt(e,m,{id:s,ingest:h,respond:p},g);if(s){e.status.sources[s]||(e.status.sources[s]={count:0,duration:0});const t=e.status.sources[s];t.count++,t.lastAt=Date.now(),t.duration+=Date.now()-r}return y},t=>{if(t instanceof L.FatalError)throw t;return e.status.failed++,e.logger.error("push failed",{event:n,ingest:o.ingest,error:t}),rt({ok:!1})})(),"Push",e.hooks,e.logger);return async(t,o)=>{const r="string"==typeof t.id?t.id:"",{traceId:s,sourceId:i,parentEventId:a}=Y(t,o?.ingest,e),c=Date.now(),u=X(e,{stepId:"collector.push",stepType:"collector",phase:"in",eventId:r,now:c,traceId:s,sourceId:i,parentEventId:a});u.inEvent=t,(0,L.emitStep)(e,u);try{const u=await n(t,o),d=Date.now(),l=X(e,{stepId:"collector.push",stepType:"collector",phase:"out",eventId:r,now:d,traceId:s,sourceId:i,parentEventId:a});return l.durationMs=d-c,l.outEvent=u,(0,L.emitStep)(e,l),u}catch(t){const n=Date.now(),o=X(e,{stepId:"collector.push",stepType:"collector",phase:"error",eventId:r,now:n,traceId:s,sourceId:i,parentEventId:a});throw o.durationMs=n-c,o.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},(0,L.emitStep)(e,o),t}}}function ft(e={}){const t=e.maxEntries??1e4,n=e.lowWaterMark??.8,o=e.sweepIntervalMs??6e4,r=Math.floor(t*n),s=new Map,i={hits:0,misses:0,populates:0,writes:0,deletes:0,evictions_entries:0,evictions_ttl:0};let a;return o>0&&(a=setInterval(function(){const e=Date.now();let t=0;for(const[n,o]of s)void 0!==o.expires&&o.expires<=e&&(s.delete(n),t++);i.evictions_ttl+=t},o),a&&"function"==typeof a.unref&&a.unref()),{type:"memory",config:{},get(e){const t=s.get(e);if(t)return void 0!==t.expires&&t.expires<=Date.now()?(s.delete(e),i.evictions_ttl++,void i.misses++):(s.delete(e),s.set(e,t),i.hits++,t.value);i.misses++},set(e,n,o){const a=!s.has(e);a||s.delete(e),s.set(e,{value:n,expires:void 0!==o?Date.now()+o:void 0}),i.writes++,a&&i.populates++,s.size>t&&function(){if(s.size<=t)return;const e=s.size-r;let n=0;for(const t of s.keys()){if(n>=e)break;s.delete(t),n++}i.evictions_entries+=n}()},delete(e){s.delete(e)&&i.deletes++},get counters(){return{...i}},destroy(){void 0!==a&&(clearInterval(a),a=void 0),s.clear()}}}function gt(e,t){const{cacheConfig:n,cacheStore:o,namespace:r,logger:s,storeId:i,collector:a}=t,c=(e,t)=>{if(!a)return;const n=X(a,{stepId:`store.${i}`,stepType:"store",phase:"in",eventId:"",now:Date.now()});n.meta={op:"cache",cached:"hit"===t,status:t,key:e},(0,Q.emitStep)(a,n)},u={hits:0,misses:0,populates:0,writes:0,deletes:0,inflight_dedups:0},d=n.rules.map(e=>({match:e.match?(0,Q.compileMatcher)(e.match):()=>!0,ttl:e.ttl})),l=e=>`${r}:${e}`;function p(e,t){const n=void 0===t?{key:e}:{key:e,value:t};return d.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=l(t),r=await o.get(n),s=(0,Q.readCacheEnvelope)(r);if(void 0!==s){if(!("expired"in s))return u.hits++,c(t,"hit"),s.value;try{await o.delete(n)}catch(e){g("delete",t,e)}}const i=f.get(n);if(i)return u.inflight_dedups++,c(t,"hit"),i;u.misses++,c(t,"miss");const a=(async()=>{try{const r=await e.get(t);if(void 0===r)return;const s=p(t,r);if(s)try{const e=1e3*s.ttl;await o.set(n,(0,Q.wrapCacheEnvelope)(r,e),e),u.populates++}catch(e){g("set",t,e)}return r}finally{f.delete(n)}})();return f.set(n,a),a},async set(t,n,r){u.writes++,await e.set(t,n,r);const s=p(t,n);if(s)try{const e=1e3*s.ttl;await o.set(l(t),(0,Q.wrapCacheEnvelope)(n,e),e)}catch(e){g("set",t,e)}},async delete(t){u.deletes++,await e.delete(t);try{await o.delete(l(t))}catch(e){g("delete",t,e)}}};function g(e,t,n){const o=`store-cache(${i}): cache ${e} failed for "${t}"; backing succeeded, continuing`;s?s.warn(o,{error:n}):console.warn(o,n)}}function ht(e,t,n){const o=`store.${n}`,r=(0,W.useHooks)(t.get,"StoreGet",e.hooks,e.logger),s=(0,W.useHooks)(t.set,"StoreSet",e.hooks,e.logger),i=(0,W.useHooks)(t.delete,"StoreDelete",e.hooks,e.logger);t.get=async t=>{const n=Date.now(),s=X(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:n});s.meta={op:"get",key:t},(0,W.emitStep)(e,s);try{const s=await r(t),i=Date.now(),a=X(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:i});return a.durationMs=i-n,a.meta={op:"get",key:t},(0,W.emitStep)(e,a),s}catch(r){const s=Date.now(),i=X(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:s});throw i.durationMs=s-n,i.meta={op:"get",key:t},i.error=r instanceof Error?{name:r.name,message:r.message}:{message:String(r)},(0,W.emitStep)(e,i),r}},t.set=async(t,n,r)=>{const i=Date.now(),a=X(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:i});a.meta={op:"set",key:t},(0,W.emitStep)(e,a);try{await s(t,n,r);const a=Date.now(),c=X(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:a});c.durationMs=a-i,c.meta={op:"set",key:t},(0,W.emitStep)(e,c)}catch(n){const r=Date.now(),s=X(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:r});throw s.durationMs=r-i,s.meta={op:"set",key:t},s.error=n instanceof Error?{name:n.name,message:n.message}:{message:String(n)},(0,W.emitStep)(e,s),n}},t.delete=async t=>{const n=Date.now(),r=X(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:n});r.meta={op:"delete",key:t},(0,W.emitStep)(e,r);try{await i(t);const r=Date.now(),s=X(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:r});s.durationMs=r-n,s.meta={op:"delete",key:t},(0,W.emitStep)(e,s)}catch(r){const s=Date.now(),i=X(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:s});throw i.durationMs=s-n,i.meta={op:"delete",key:t},i.error=r instanceof Error?{name:r.name,message:r.message}:{message:String(r)},(0,W.emitStep)(e,i),r}}}async function mt(e){const t=(0,$.assign)({globalsStatic:{},sessionStatic:{},run:!0,queueMax:1e3},e,{merge:!1,extend:!1}),n={level:e.logger?.level,handler:e.logger?.handler},o=(0,$.createLogger)(n),r={...t.globalsStatic,...e.globals},s={allowed:!1,config:t,consent:e.consent||{},custom:e.custom||{},destinations:{},transformers:{},stores:{},globals:r,hooks:e.hooks||{},observers:new Set,logger:o,on:{},queue:[],round:0,count:0,stateVersion:0,cellVersion:{},delivery:new WeakMap,session:void 0,status:{startedAt:Date.now(),in:0,out:0,failed:0,sources:{},destinations:{},dropped:{},connectionErrors:{},breakers:{}},timing:Date.now(),user:e.user||{},sources:{},pending:{destinations:{}},hasShutdown:!1,seenEvents:new Set,push:void 0,command:void 0,elb:void 0};var i,a;void 0!==e.name&&(s.name=e.name),void 0!==e.release&&(s.release=e.release),s.push=pt(s,e=>dt(s,e)),s.command=(i=s,a=ut,(0,V.useHooks)(async(e,t,n)=>await(0,V.tryCatchAsync)(async()=>await a(i,e,t,n),n=>{if(n instanceof V.FatalError)throw n;return i.status.failed++,i.logger.error("command failed",{command:e,data:t,error:n}),rt({ok:!1})})(),"Command",i.hooks,i.logger)),s.elb=function(e){return async(t,n,o,r,s)=>{if("string"==typeof t&&t.startsWith("walker ")){const o=t.replace("walker ","");return e.command(o,n)}let i;if("string"==typeof t)i={name:t},n&&"object"==typeof n&&!Array.isArray(n)&&(i.data=n);else{if(!t||"object"!=typeof t||Array.isArray(t))return rt({ok:!1});i={...t},n&&"object"==typeof n&&!Array.isArray(n)&&(i.data={...i.data||{},...n})}return o&&"object"==typeof o&&(i.context=o),r&&Array.isArray(r)&&(i.nested=r),s&&"object"==typeof s&&(i.custom=s),e.push(i)}}(s);const c=e.stores||{};return s.stores=await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t)){const{code:t,config:s={},env:i={}}=r,a=e.logger.scope("store").scope(o),c={collector:e,logger:a,id:o,config:s,env:i,reportError:ge(e,"store",o,a)},u=await t(c);n[o]=u}const o=t,r=function(e){const t={};for(const n of Object.keys(e))t[n]="WHITE";const n=[],o=[];function r(s){const i=t[s];if("BLACK"===i)return;if("GRAY"===i){const e=o.indexOf(s),t=o.slice(-1===e?0:e).concat(s).join(" -> ");throw new Error(`Cycle in cache.store chain: ${t}`)}t[s]="GRAY",o.push(s);const a=e[s].cache?.store;if(void 0!==a){if(!(a in e))throw new Error(`Store "${s}" cache.store references "${a}", which is not declared in flow.stores`);r(a)}o.pop(),t[s]="BLACK",n.push(s)}for(const n of Object.keys(e))"WHITE"===t[n]&&r(n);return n}(o);for(const t of r){const r=o[t].cache;if(!r)continue;let s,i;void 0!==r.store?(s=n[r.store],i=r.store):(n.__cache||(n.__cache=ft()),s=n.__cache,i="__cache");const a=r.namespace??t;e.logger.scope("store-cache").scope(t).info(`store "${t}" caches with namespace "${a}:" via ${i}`),n[t]=gt(n[t],{storeId:t,cacheConfig:r,cacheStore:s,namespace:a,logger:e.logger.scope("store-cache").scope(t),collector:e})}for(const[t,o]of Object.entries(n))"__cache"!==t&&ht(e,o,t);return n}(s,c),function(e,t,n){const o=new Map;for(const[n,r]of Object.entries(e))t[n]&&o.set(r,t[n]);if(0!==o.size)for(const e of[n.transformers,n.destinations,n.sources])if(e)for(const t of Object.values(e))r(t.env);function r(e){if(e)for(const[t,n]of Object.entries(e))if("object"==typeof n&&null!==n){const r=o.get(n);r&&(e[t]=r)}}}(c,s.stores,e),s.stores.__cache||(s.stores.__cache=ft()),s.destinations=await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t))r.config?.require?.length?e.pending.destinations[o]=r:n[o]=st(r);return n}(s,e.destinations||{}),s.transformers=await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t)){const{code:t,env:s={}}=r,i=(0,K.validateStepEntry)(r,"Transformer");if(!i.ok){e.logger.warn(`Transformer ${o} invalid (${i.code}): ${i.reason}. Skipping.`);continue}const{config:a}=ve(r,"before"),{config:c}=ve({...r,config:a},"next"),u=Object.keys(s).length>0?{...c,env:s}:c,{cache:d}=r,l=d?{...u,cache:d}:u,p=r.config?.state??r.state,f=void 0!==p&&void 0===l.state?{...l,state:p}:l,g=e.logger.scope("transformer").scope(o),h={collector:e,logger:g,id:o,ingest:(0,K.createIngest)(o),config:f,env:s,reportError:ge(e,"transformer",o,g)},m=t??(e=>{const t=r.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,r]of Object.entries(o)){if("object"!=typeof r||null===r)continue;const o=r;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,K.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!==r.before&&void 0===y.config?.before&&(y.config={...y.config??{},before:r.before}),void 0!==r.next&&void 0===y.config?.next&&(y.config={...y.config??{},next:r.next}),void 0!==p&&void 0===y.config?.state&&(y.config={...y.config??{},state:p}),n[o]=y}return n}(s,e.transformers||{}),s}var yt=globalThis;function vt(e){try{const t=yt.window;if(!t)return;t.localStorage.getItem(z.OBSERVE_STORAGE_KEY)===e&&t.localStorage.removeItem(z.OBSERVE_STORAGE_KEY)}catch{}}function wt(e,t){return void 0===t?e:n=>e({...n,release:t})}async function bt(e){e=e||{};const t=await mt(e);(function(e,t){if(t.observers)for(const n of t.observers)e.observers.add(n);const n=t.observe;if(!n)return;const o=e.name??"default";if("binding"in n){const t=function(){const e=yt.window,t=yt.URLSearchParams;if(!e||!t)return null;try{const n=new t(e.location.search.replace(/^\?/,"")).getAll(z.OBSERVE_STORAGE_KEY);return n.length>0?n[n.length-1]??null:null}catch{return null}}(),r=t??function(){try{return yt.window?.localStorage.getItem(z.OBSERVE_STORAGE_KEY)??null}catch{return null}}();if(!r)return;const s=(0,z.parseObserveCredential)(r);if(!s)return void(null===t?(e.logger.warn("observe: malformed stored credential cleared"),vt(r)):e.logger.warn("observe: malformed credential ignored"));if(s.pb!==n.binding)return void e.logger.warn("observe: credential binding mismatch, credential ignored");let i;!function(e){try{yt.window?.localStorage.setItem(z.OBSERVE_STORAGE_KEY,e)}catch{}}(r),null!==t&&function(){const e=yt.window,t=yt.URLSearchParams;if(e&&t)try{const n=e.location.href,o=n.indexOf("#"),r=o>=0?n.slice(o):"",s=o>=0?n.slice(0,o):n,i=s.indexOf("?"),a=i>=0?s.slice(0,i):s,c=new t(i>=0?s.slice(i+1):"");c.delete(z.OBSERVE_STORAGE_KEY);const u=c.toString();e.history.replaceState({},"",`${a}${u?`?${u}`:""}${r}`)}catch{}}();const a=(0,z.createBatchedPoster)({url:`${n.url}/ingest/${s.ses}`,token:s.secret,headers:{"X-Walkeros-Binding":n.binding},onStatus:t=>{401===t&&(vt(r),i&&e.observers.delete(i))}});i=(0,z.createTelemetryObserver)(function(e,t){return void 0===t?e:n=>e({...n,flowId:t})}(wt(a,e.release),n.flowId),{flowId:n.flowId??o,...void 0!==n.level?{level:n.level}:{},...void 0!==n.sample?{sample:n.sample}:{}}),e.observers.add(i);const c=n.level;return void(void 0!==c&&(e.observeLevel=()=>c))}if("off"===n.level)return;const r=n.level;void 0!==r&&(e.observeLevel=()=>r),e.observers.add((0,z.createTelemetryObserver)(wt((0,z.createBatchedPoster)({url:`${n.url}/ingest/${n.sessionId}`,token:n.token}),e.release),{flowId:o,level:n.level,sample:n.sample}))})(t,e),await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t)){const t=await je(e,o,r);if(!t)continue;const s=r.config?.require;t.config={...t.config,init:!1,...s?{require:[...s]}:{}},n[o]=t}Object.assign(e.sources,n);for(const t of Object.keys(n)){const n=e.sources[t];let o=!1;n.init&&await(0,H.tryCatchAsync)(n.init.bind(n),n=>{if(n instanceof H.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,Ce(n)&&await qe(e,n,t))}return await Ae(e),n}(t,e.sources||{});const{consent:n,user:o,globals:r,custom:s}=e;n&&await t.command("consent",n),o&&await t.command("user",o),r&&await t.command("globals",r),s&&await t.command("custom",s),t.config.run&&await t.command("run");let i=t.elb;const a=Object.values(t.sources),c=a.find(e=>e.config.primary);return c?i=c.push:a.length>0&&(i=a[0].push),{collector:t,elb:i}}var kt=async e=>{let t;return{get flow(){return t},trigger:()=>async n=>{if(!t){const n=await bt(e);t={collector:n.collector,elb:n.elb}}const o=function(e){for(const t of Object.values(e.sources||{}))if("lambda"===t.type)return t}(t.collector);if(!o)throw new Error("Lambda source not found in collector");const r={awsRequestId:`test-${Date.now()}`},s=o.push,i=await s(n,r);let a;try{a=JSON.parse(i.body||"{}")}catch{a=i.body}const c={};if(i.headers)for(const[e,t]of Object.entries(i.headers))void 0!==t&&(c[e]=String(t));return{statusCode:i.statusCode,body:a,headers:c}}}};function It(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 St={};s(St,{createTrigger:()=>$t,env:()=>Et,step:()=>At});var Et={};s(Et,{push:()=>xt,simulation:()=>jt});var Ot=()=>{},qt={error:Ot,warn:Ot,info:Ot,debug:Ot,throw:e=>{throw"string"==typeof e?new Error(e):e},json:Ot,scope:()=>qt},Ct=()=>()=>Promise.resolve({ok:!0}),xt={get push(){return Ct()},get command(){return Ct()},get elb(){return Ct()},logger:qt},jt=["AWS.SQSClient"],At={};s(At,{decoderText:()=>Pt,malformedJson:()=>Mt,orderComplete:()=>Dt,pageView:()=>Tt});var Tt={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"]]},Dt={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"]]},Pt={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"]]},Mt={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 zt(e){if("object"!=typeof e||null===e)return!1;const t=e;return"sqs"===t.type&&"function"==typeof t.push}var $t=async e=>{let t;return{get flow(){return t},trigger:()=>async n=>{if(!t){const n=await bt(e);t={collector:n.collector,elb:n.elb}}const o=function(e){for(const t of Object.values(e.sources??{}))if(zt(t))return t}(t.collector);if(!o)throw new Error("sqs source not registered in collector, ensure it is configured in sources");const r={MessageId:n.MessageId,Body:n.Body,ReceiptHandle:n.ReceiptHandle,Attributes:n.Attributes,MessageAttributes:n.MessageAttributes},s=await o.push(r),i=[];return s&&"object"==typeof s&&(s.acked&&i.push(["message.ack",n.MessageId]),s.nacked&&i.push(["message.nack",n.MessageId])),i}}};//# 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:()=>v,sqsSetup:()=>y});import{zodToSchema as o}from"@walkeros/core/dev";import{z as r}from"@walkeros/core/dev";import{z as s}from"@walkeros/core/dev";var a=s.enum(["GET","POST","PUT","PATCH","DELETE","OPTIONS","HEAD"]),i=s.union([s.string(),s.array(s.string()),s.literal("*")]),c=s.object({origin:i.describe("Allowed origins (* for all, URL string, or array of URLs)").optional(),methods:s.array(a).describe("Allowed HTTP methods").optional(),headers:s.array(s.string()).describe("Allowed request headers").optional(),credentials:s.boolean().describe("Allow credentials (cookies, authorization headers)").optional(),maxAge:s.number().int().positive().describe("Preflight cache duration in seconds").optional()}),u=r.object({cors:r.union([r.boolean(),c]).describe("CORS configuration: false = disabled, true = allow all origins, object = custom configuration").default(!0),timeout:r.number().int().positive().max(9e5).describe("Request timeout in milliseconds (max: 900000 for Lambda)").default(3e4),enablePixelTracking:r.boolean().describe("Enable GET requests with 1x1 transparent GIF response for pixel tracking").default(!0),healthPath:r.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()}),v=d(p),y=d(m),w={};t(w,{createTrigger:()=>Mn,env:()=>b,step:()=>O,trigger:()=>$n});var b={};t(b,{push:()=>E});var k=()=>()=>Promise.resolve({ok:!0}),I=()=>{},S={error:I,warn:I,info:I,debug:I,throw:e=>{throw"string"==typeof e?new Error(e):e},json:I,scope:()=>S},E={get push(){return k()},get command(){return k()},get elb(){return k()},logger:S},O={};t(O,{apiGatewayV1Post:()=>x,lambdaGet:()=>C,lambdaPost:()=>q});var q={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"}}]]},x={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"}}]]},C={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 j}from"@walkeros/core";import{OBSERVE_STORAGE_KEY as A,createBatchedPoster as T,createTelemetryObserver as D,parseObserveCredential as P}from"@walkeros/core";import{assign as M,createLogger as $}from"@walkeros/core";import{assign as _,buildCacheContext as R,clone as B,compileCache as N,checkCache as G,storeCache as H,createIngest as z,debounce as U,emitStep as K,getId as L,getGrantedConsent as F,getNextSteps as W,isDefined as Q,isFunction as J,isObject as V,OBSERVE_ENV_KEY as Y,processEventMapping as X,stepId as Z,tryCatchAsync as ee,useHooks as te,compileState as ne,applyState as oe}from"@walkeros/core";import{emitStep as re}from"@walkeros/core";import{parseCallPath as se}from"@walkeros/core";import{isArray as ae,FatalError as ie}from"@walkeros/core";import{tryCatch as ce,tryCatchAsync as ue}from"@walkeros/core";import{stepId as le}from"@walkeros/core";import{createIngest as de,FatalError as fe,getMappingValue as pe,parseTraceparent as ge,tryCatchAsync as he,getNextSteps as me,compileCache as ve,checkCache as ye,storeCache as we,applyUpdate as be,buildCacheContext as ke,compileState as Ie,applyState as Se}from"@walkeros/core";import{createIngest as Ee,emitStep as Oe,FatalError as qe,isObject as xe,stepId as Ce,tryCatchAsync as je,useHooks as Ae,getNextSteps as Te,compileCache as De,checkCache as Pe,storeCache as Me,buildCacheContext as $e,validateStepEntry as _e,processEventMapping as Re,compileState as Be,applyState as Ne}from"@walkeros/core";import{assign as Ge,getSpanId as He,getTraceId as ze,isFunction as Ue,isString as Ke}from"@walkeros/core";import{isObject as Le}from"@walkeros/core";import{createIngest as Fe,emitStep as We,FatalError as Qe,getGrantedConsent as Je,processEventMapping as Ve,tryCatchAsync as Ye,useHooks as Xe}from"@walkeros/core";import{FatalError as Ze,useHooks as et,tryCatchAsync as tt}from"@walkeros/core";import{emitStep as nt,useHooks as ot}from"@walkeros/core";import{compileMatcher as rt,emitStep as st,readCacheEnvelope as at,wrapCacheEnvelope as it}from"@walkeros/core";var ct={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 ut(e,t,n){return{traceId:e.source?.trace??t?._meta.trace??n.trace,sourceId:t?._meta.path[0],parentEventId:t?._meta.parentEventId}}function lt(e,t){const n=e.status.startedAt,o={flowId:e.name??"default",stepId:t.stepId,stepType:t.stepType,phase:t.phase,eventId:t.eventId,timestamp:new Date(t.now).toISOString(),elapsedMs:t.now-n};return t.traceId&&(o.traceId=t.traceId),t.sourceId&&(o.sourceId=t.sourceId),t.parentEventId&&(o.parentEventId=t.parentEventId),o}function dt(e){return"object"==typeof e&&null!==e}function ft(e,t,n){if(null===e||"object"!=typeof e)return e;if(n>=8)return e;const o=t.get(e);if(void 0!==o)return o;if(Array.isArray(e)){const o=[];t.set(e,o);for(const r of e)o.push(ft(r,t,n+1));return o}const r={};t.set(e,r);for(const[o,s]of Object.entries(e))r[o]="function"==typeof s?s:ft(s,t,n+1);return r}function pt(e){const t=[],n=[],{simulation:o,...r}=e,s=ft(r,new WeakMap,0);for(const e of o){const o=se(e);if(0===o.length)continue;const r=o.join(".");if(o.length-1>=8){n.push(r);continue}let a=s,i=!0;for(let e=0;e<o.length-1;e++){const t=a[o[e]];if(!dt(t)){i=!1;break}a=t}const c=o[o.length-1];if(!i||!(c in a)){n.push(r);continue}const u=a[c];"function"==typeof u?a[c]=function(...e){return t.push({fn:r,args:e,ts:Date.now()}),u.apply(this,e)}:n.push(r)}return{wrappedEnv:s,calls:t,unresolved:n}}function gt(e,t){try{return e[t]}catch{return"[unreadable]"}}function ht(e){const t=new WeakSet,n=(e,o)=>{if(null===e)return null;if("function"==typeof e)return"[function]";if("string"==typeof e||"boolean"==typeof e)return e;if("number"==typeof e)return Number.isFinite(e)?e:null;if("bigint"==typeof e)return String(e);if("object"!=typeof e)return;const r=e;if(t.has(r))return"[circular]";if(o>=6)return"[truncated]";let s;t.add(r);try{if(Array.isArray(r))s=r.map(e=>n(e,o+1));else if(function(e){const t=Object.getPrototypeOf(e);return t===Object.prototype||null===t}(r)){const e={};for(const t of Object.keys(r))e[t]=n(gt(r,t),o+1);s=e}else s=function(e){try{return String(e)}catch{return"[object]"}}(r)}catch{s="[unreadable]"}return t.delete(r),s};return e.map(e=>n(e,0))}function mt(e){return e.map(e=>({fn:e.fn,args:ht(e.args),ts:e.ts}))}function vt(e,t,n,o){if(!Number.isFinite(n.max)||n.max<=0)throw new Error(`pushBounded: max must be > 0 (got ${n.max})`);if("dropNewest"===(n.onOverflow??"dropOldest"))return e.length>=n.max?(o&&o([t]),{appended:!1,dropped:1}):(e.push(t),{appended:!0,dropped:0});const r=[];for(;e.length>=n.max;)r.push(e.shift());return e.push(t),r.length>0&&o&&o(r),{appended:!0,dropped:r.length}}var yt=new WeakMap;function wt(e,t,n,o){yt.get(e)||(yt.set(e,!0),t.warn(n,o))}function bt(e){yt.delete(e)}var kt=()=>Date.now();function It(e){if(void 0!==e)return"number"==typeof e?{threshold:e,cooldown:3e4}:{threshold:e.threshold??5,cooldown:e.cooldown??3e4}}function St(e,t,n,o,r){if("partial"===n)return;const s=((a=e)[i=t]||(a[i]={state:"closed",consecutiveFailures:0}),a[i]);var a,i;return"success"===n?(s.consecutiveFailures=0,s.state="closed",s.probing=!1,void(s.openUntil=void 0)):(s.consecutiveFailures+=1,"half-open"===s.state?(s.state="open",s.probing=!1,void(s.openUntil=kt()+r)):void(s.consecutiveFailures>=o&&(s.state="open",s.probing=!1,s.openUntil=kt()+r)))}function Et(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 Ot(e,t,n,o){e.dropped[t]||(e.dropped[t]={});const r=e.dropped[t];return r[n]=(r[n]??0)+o,r[n]}function qt(e,t,n,o,r){const s=le(t,n);return(t,a)=>{try{if(a)return r?function(e,t,n,o,r,s){const a=t.dlq=t.dlq||[],i={max:t.config.dlqMax??100},c=vt(a,[o,r],i);if(c.dropped>0){const t=Ot(e.status,le("destination",n),"dlq",c.dropped);wt(a,s,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:n,cap:i.max,droppedCount:t})}else a.length<i.max&&bt(a);const u=Et(e,n);u.failed++,u.dlqSize=a.length,e.status.failed++;const l=It(t.config.breaker);if(l){const o=t.config.id||n;St(e.status.breakers,le("destination",o),"transport-failure",l.threshold,l.cooldown)}}(e,r,n,a,t,o):e.status.failed++,void o.error("report error",{error:t instanceof Error?t.message:String(t),event:a.name});e.status.connectionErrors[s]=(e.status.connectionErrors[s]??0)+1,o.error("connection error",{error:t instanceof Error?t.message:String(t)})}catch{}}}function xt(e,t){return e.storeId&&t.stores[e.storeId]?t.stores[e.storeId]:t.stores.__cache}function Ct(e,t){return e?t.stores[e]:t.stores.__cache}function jt(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 At(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 Tt(e,t={}){if(!e)return[];if(Array.isArray(e))return e;const n=[],o=new Set;let r=e;for(;r&&t[r]&&!o.has(r);){o.add(r),n.push(r);const e=t[r].next;if(Array.isArray(e)){n.push(...e);break}r=e}return n}async function Dt(e,t,n){if(t.init&&!t.config.init){const o=t.type||"unknown",r=e.logger.scope(`transformer:${o}`),s={collector:e,logger:r,id:n,ingest:Ee(n),config:t.config,env:_t(t.config.env),reportError:qt(e,"transformer",n,r)};r.debug("init");const a=await Ae(t.init,"TransformerInit",e.hooks,e.logger)(s);if(!1===a)return!1;t.config={...a||t.config,env:a?.env||t.config.env,init:!0},r.debug("init done")}return!0}async function Pt(e,t,n,o,r,s){const a=t.type||"unknown",i=e.logger.scope(`transformer:${a}`),c={collector:e,logger:i,id:n,ingest:r,config:t.config,env:{..._t(t.config.env),...s?{respond:s}:{}},reportError:qt(e,"transformer",n,i)};i.debug("push",{event:o.name});const u="string"==typeof o.id?o.id:"",{traceId:l,sourceId:d,parentEventId:f}=ut(o,r,e),p=Date.now(),g=lt(e,{stepId:Ce("transformer",n),stepType:"transformer",phase:"in",eventId:u,now:p,traceId:l,sourceId:d,parentEventId:f});g.inEvent=o,Oe(e,g);try{const r=await Ae(t.push,"TransformerPush",e.hooks,e.logger)(o,c),s=Date.now(),a=lt(e,{stepId:Ce("transformer",n),stepType:"transformer",phase:"out",eventId:u,now:s,traceId:l,sourceId:d,parentEventId:f});return a.durationMs=s-p,a.outEvent=r,Oe(e,a),i.debug("push done"),r}catch(t){const o=Date.now(),r=lt(e,{stepId:Ce("transformer",n),stepType:"transformer",phase:"error",eventId:u,now:o,traceId:l,sourceId:d,parentEventId:f});throw r.durationMs=o-p,r.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},Oe(e,r),t}}function Mt(e,t){return e?{...e,_meta:{...e._meta,path:[...e._meta.path]}}:Ee(t)}async function $t(e,t,n,o,r,s,a){r||(r=Ee(n[0]??"chain")),a&&r._meta&&(r._meta.chainPath=a);let i=o,c=s;for(const o of n){const s=t[o];if(!s){e.logger.warn(`Transformer not found: ${o}`);continue}if(r&&r._meta&&r._meta.path.length>256)return e.logger.error(`Max path length exceeded at ${o}`),{event:null,respond:c};if(r&&r._meta&&(r._meta.hops++,r._meta.path.push(o)),!await je(Dt,t=>{if(t instanceof qe)throw t;return e.status.failed++,e.logger.scope(`transformer:${s.type||"unknown"}`).error("transformer init failed",{transformer:o,error:t}),!1})(e,s,o))return{event:null,respond:c};if(a&&void 0!==s.config?.chainMocks?.[a]){const t=s.config.chainMocks[a];e.logger.scope(`transformer:${s.type||"unknown"}`).debug("chainMock",{chain:a}),i=t;continue}if(void 0!==s.config?.mock){e.logger.scope(`transformer:${s.type||"unknown"}`).debug("mock"),i=s.config.mock;continue}if(s.config?.disabled)continue;const u=s.config?.cache,l=u?De(u):void 0,d=l?xt(l,e):void 0,f=s.config?.state?Be(s.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?Ne(g,t=>Ct(t,e),t,e):t;let m;if(l&&d){const e=$e(r,i),t=await Pe(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 v=s.config.before;if(v){const n=Te(v,$e(r,i));if(1===n.length){const o=Tt(n[0],jt(t));if(o.length>0){const n=await $t(e,t,o,i,r,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=>je($t,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,Tt(n,jt(t)),i,Mt(r,n),void 0,a)))}p&&p.length>0&&(i=await Ne(p,t=>Ct(t,e),i,e));const y=await je(Pt,t=>(e.logger.scope(`transformer:${s.type||"unknown"}`).error("Push failed",{error:t}),!1))(e,s,o,i,r,c);if(!1===y)return{event:null,respond:c,droppedBy:o};if(Array.isArray(y)){const s=n.slice(n.indexOf(o)+1),u=await Promise.all(y.map(async n=>{const o=await h(n.event||i),u=Mt(r,"unknown");if(n.next){const r=Te(n.next,$e(u,o));if(0===r.length)return{event:o,respond:c};if(1===r.length){const n=Tt(r[0],jt(t));return n.length>0?$t(e,t,n,o,u,c,a):{event:o,respond:c}}return(await Promise.all(r.map(n=>je($t,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,Tt(n,jt(t)),o,Mt(u,n),void 0,a)))).map(e=>({event:e.event,respond:void 0}))}return s.length>0?$t(e,t,s,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(y&&"object"==typeof y){const{event:n,respond:o,next:s}=y;if(o&&(c=o),void 0!==s){const o=await h(n||i),u=Te(s,$e(r,o));if(0===u.length){i=o;continue}if(1===u.length){const n=Tt(u[0],jt(t));return n.length>0?$t(e,t,n,o,r,c,a):(e.logger.warn(`Branch target not found: ${JSON.stringify(s)}`),{event:null,respond:c})}return await Promise.all(u.map(n=>je($t,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,Tt(n,jt(t)),o,Mt(r,n),void 0,a))),{event:null,respond:void 0}}n&&(i=n)}g&&g.length>0&&(i=await Ne(g,t=>Ct(t,e),i,e)),m&&d&&Me(d,m.key,i,m.ttl);const w=s.config.next,b="string"==typeof w||Array.isArray(w)&&w.every(e=>"string"==typeof e),k=void 0!==w&&!b;if((!y||"object"==typeof y&&!y.next)&&k){const n=Te(s.config.next,$e(r,i));if(1===n.length){const o=Tt(n[0],jt(t));return o.length>0?$t(e,t,o,i,r,c,a):{event:i,respond:c}}return n.length>1?(await Promise.all(n.map(n=>je($t,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,Tt(n,jt(t)),i,Mt(r,n),void 0,a))),{event:null,respond:void 0}):{event:i,respond:c}}}return{event:i,respond:c}}function _t(e){return e&&xe(e)?e:{}}function Rt(e){return"string"==typeof e||!(!Array.isArray(e)||!e.every(e=>"string"==typeof e))}async function Bt(e,t,n){if(!t.on||!t.queueOn?.length)return;const o=t.queueOn;t.queueOn=[];const r=n||t.config?.id||"unknown";for(const{type:n,data:s}of o)Qt(n)&&!Zt(e,t,n)||(await he(t.on,t=>{if(t instanceof fe)throw t;e.status.failed++,e.logger.scope("source").error("source on flush failed",{sourceId:r,type:n,error:t})})(n,s),Qt(n)&&Xt(e,t,n))}function Nt(e){return Boolean(e.config.init)&&!e.config.require?.length}function Gt(e){return"object"==typeof e&&null!==e}async function Ht(e,t,n){const{code:o,config:r={},env:s={},primary:a,next:i,before:c,cache:u}=n,l=r.state??n.state,d=l?Ie(l):void 0,f=u,p=f?ve({...f,stop:f.stop??!0}):void 0,g=Rt(i)?Tt(i,jt(e.transformers)):void 0,h=Rt(c)?Tt(c,jt(e.transformers)):void 0,m=s.push,v=m??e.push,y=Boolean(m),w=async(n,o,s)=>{let a;const u=h??(void 0!==c?(()=>{const t=me(c,ke(s.ingest));return 0===t.length?[]:Tt(1===t.length?t[0]:t,jt(e.transformers))})():[]);let l=[n];if(u.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const o=await $t(e,e.transformers,u,n,s.ingest,s.respond,`source.${t}.before`);if(null===o.event)return{ok:!0};if(o.stopped)return o.respond&&(s.respond=o.respond),{ok:!0};o.respond&&(s.respond=o.respond),l=Array.isArray(o.event)?o.event:[o.event]}if(p){const t=xt(p,e);if(t){const n=ke(s.ingest),o=await ye(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 be(t,o.rule.update,{...n,cache:{status:"HIT"}},e)),s.respond?.(t),{ok:!0}}if("MISS"===o.status&&p.stop&&s.respond){const r=s.respond,i=o.rule.update,c={...n,cache:{status:"MISS"}},u=o.key,l=o.rule.ttl,d=n=>{we(t,u,n,l),i?a=(async()=>{const t=await be(n,i,c,e);r(t)})():r(n)};s.respond=d}"MISS"!==o.status||p.stop||we(t,o.key,!0,o.rule.ttl)}}}const f=g?{kind:"single",preChain:g}:void 0!==i?(()=>{const t=me(i,ke(s.ingest));return 0===t.length?{kind:"single",preChain:[]}:1===t.length?{kind:"single",preChain:Tt(t[0],jt(e.transformers))}:{kind:"many",branches:t.map(t=>Tt(t,jt(e.transformers)))}})():{kind:"single",preChain:[]};!y&&d&&d.length>0&&(l=await Promise.all(l.map(t=>Se(d,t=>Ct(t,e),t,e))));let m={ok:!0};for(const n of l)"many"===f.kind?(await Promise.all(f.branches.map((a,i)=>he(async()=>y?v(n):v(n,{...o,id:t,ingest:Mt(s.ingest,`${t}.${i}`),respond:void 0,mapping:r,preChain:a}),t=>(e.logger.scope("source:many").error(`many branch ${i} failed`,{error:t}),{ok:!0}))())),m={ok:!0}):m=y?await v(n):await v(n,{...o,id:t,ingest:s.ingest,respond:s.respond,mapping:r,preChain:f.preChain});return a&&await a,m},b=async n=>{const o=de(t),s=ge(function(e){if(!Gt(e))return;const t=e.headers;if(Gt(t)){if("get"in(n=t)&&"function"==typeof n.get)return t.get("traceparent")??void 0;if("traceparent"in t)return t.traceparent;for(const e of Object.keys(t))if("traceparent"===e.toLowerCase())return t[e]}var n}(n));if(s&&(o._meta.trace=s.trace,o._meta.parentEventId=s.parentSpan),!r.ingest||void 0===n)return o;const a=await pe(n,r.ingest,{collector:e});return{...o,...a,_meta:o._meta}},k=e.logger.scope("source").scope(t),I={command:e.command,sources:e.sources,elb:e.elb,logger:k,...s,push:async(e,n={})=>{const o={ingest:de(t),respond:void 0};return w(e,n,o)}},S={collector:e,logger:k,id:t,config:r,env:I,withScope:async(e,t,n)=>{const o={ingest:await b(e),respond:t};return n({...I,push:(e,t={})=>w(e,t,o),ingest:o.ingest,respond:o.respond})},reportError:qt(e,"source",t,k)},E=await he(o,n=>{if(n instanceof fe)throw n;e.status.failed++,e.logger.scope("source").error("source factory failed",{sourceId:t,error:n})})(S);if(!E)return;const O=E.type||"unknown",q=e.logger.scope(O).scope(t);return I.logger=q,a&&(E.config={...E.config,primary:a}),E}async function zt(e){for(const[t,n]of Object.entries(e.sources)){if(Nt(n))continue;const o=n.config.require;if(!o?.length)continue;const r=o.filter(t=>!Vt(e,t));r.length!==o.length&&(n.config.require=r,Nt(n)&&await Bt(e,n,t))}for(const[t,n]of Object.entries(e.pending.destinations)){if(!e.pending.destinations[t]||e.destinations[t])continue;const o=n.config?.require;if(!o)continue;const r=o.filter(t=>!Vt(e,t));if(n.config&&(n.config.require=r),r.length>0)continue;delete e.pending.destinations[t];const s=yn(n);!1!==s.config.queue&&(s.queuePush=[...e.queue]),e.destinations[t]=s}}function Ut(e){if("object"!=typeof e||null===e)return!1;if(!("logger"in e))return!1;const t=e.logger;return"object"==typeof t&&null!==t&&"scope"in t&&"function"==typeof t.scope}var Kt=!1;function Lt(){Kt||(Kt=!0,"undefined"!=typeof console&&"function"==typeof console.warn&&console.warn("walkerOS: ignored an on-dispatch call with a non-collector argument"))}function Ft(e,t,n,o){if(n instanceof ie)throw n;e.logger.scope("on").error("on callback failed",{kind:t,...o,error:n})}var Wt=[ct.Consent,ct.User,ct.Globals,ct.Custom];function Qt(e){return Wt.includes(e)}function Jt(e,t){switch(t){case ct.Consent:return Object.keys(e.consent).length>0;case ct.User:return Object.keys(e.user).length>0;case ct.Globals:return Object.keys(e.globals).length>0;case ct.Custom:return Object.keys(e.custom).length>0;default:return!1}}function Vt(e,t){switch(t){case ct.Consent:case ct.User:case ct.Globals:case ct.Custom:return Jt(e,t);case ct.Run:case ct.Ready:return!0===e.allowed;default:return e.seenEvents.has(String(t))}}function Yt(e,t){return e.cellVersion[String(t)]??0}function Xt(e,t,n){let o=e.delivery.get(t);o||(o={},e.delivery.set(t,o)),o[String(n)]=Yt(e,n)}function Zt(e,t,n){return e.allowed&&Yt(e,n)>function(e,t,n){const o=e.delivery.get(t),r=o?.[String(n)];return void 0===r?-1:r}(e,t,n)}function en(e,t,n){const o=e.cascade;if(!o)return!0;let r=o.counts.get(t);r||(r={},o.counts.set(t,r));const s=String(n),a=(r[s]||0)+1;return r[s]=a,a<=8||(9===a&&e.logger.error("state delivery did not converge",{type:s}),!1)}function tn(e,t){return{collector:e,logger:e.logger.scope("on").scope(String(t))}}function nn(e,t,n,o,r){if(!t.on)return;const s=t.type||"unknown",a=e.logger.scope(s).scope("on").scope(o),i={collector:e,logger:a,id:n,config:t.config,data:r,env:wn(t.env,t.config.env),reportError:qt(e,"destination",n,a,t)};ce(t.on,t=>Ft(e,"destination",t,{destId:n,type:o}))(o,i)}function on(e,t,n,o){if(!Ut(e))return void Lt();const r=rn(e,t,o);if(n.length)switch(t){case ct.Consent:!function(e,t,n){const o=n||e.consent,r=tn(e,ct.Consent);t.forEach(t=>{Zt(e,t,ct.Consent)&&en(e,t,ct.Consent)&&(Object.keys(o).filter(e=>e in t).forEach(n=>{ce(t[n],t=>Ft(e,"consent",t,{key:n}))(o,r)}),Xt(e,t,ct.Consent))})}(e,n,o);break;case ct.Ready:!function(e,t){if(!e.allowed)return;const n=tn(e,ct.Ready);t.forEach(t=>{ce(t,t=>Ft(e,"ready",t))(void 0,n)})}(e,n);break;case ct.Run:!function(e,t){if(!e.allowed)return;const n=tn(e,ct.Run);t.forEach(t=>{ce(t,t=>Ft(e,"run",t))(void 0,n)})}(e,n);break;case ct.Session:!function(e,t){if(!e.session)return;const n=tn(e,ct.Session);t.forEach(t=>{ce(t,t=>Ft(e,"session",t))(e.session,n)})}(e,n);break;default:{const o=tn(e,t),s=Qt(t);n.forEach(n=>{"function"==typeof n&&(s&&!Zt(e,n,t)||s&&!en(e,n,t)||(ce(n,n=>Ft(e,"generic",n,{type:t}))(r,o),s&&Xt(e,n,t)))});break}}}function rn(e,t,n){switch(t){case ct.Consent:return n||e.consent;case ct.Session:return e.session;case ct.User:return n||e.user;case ct.Custom:return n||e.custom;case ct.Globals:return n||e.globals;case ct.Config:return n||e.config;default:return}}async function sn(e,t,n,o,r){if(!t.on)return!1;if(Qt(o)&&!Zt(e,t,o))return!1;if(Qt(o)&&!en(e,t,o))return!1;const s=await ue(t.on,t=>Ft(e,"source",t,{sourceId:n,type:o}))(o,r);return Qt(o)&&Xt(e,t,o),!1===s}function an(e){return"number"==typeof e&&e>0?e:1e4}var cn=class extends Error{constructor(e){super(e),this.name="DestinationTimeoutError"}};function un(e,t,n){let o;const r=new Promise((e,r)=>{o=setTimeout(()=>r(new cn(n)),t)});return Promise.race([e,r]).finally(()=>{o&&clearTimeout(o)})}var ln=Object.freeze({batched:!0});function dn(e){return e===ln}function fn(e){return void 0===e?{}:"number"==typeof e?{wait:e}:{wait:e.wait,size:e.size,age:e.age}}function pn(e,t,n){if(!e)return[];if(Array.isArray(e)&&e.every(e=>"string"==typeof e))return Tt(e,t);if("string"==typeof e)return Tt(e,t);const o=W(e,R(n));return 0===o.length?[]:1===o.length?Tt(o[0],t):Tt(o,t)}async function gn(e,t,n={},o){const{allowed:r,consent:s,globals:a,user:i}=e;if(!r)return vn({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=vt(e.queue,t,{max:n});if(o.dropped>0){const t=Ot(e.status,Z("collector"),"queue",o.dropped);wt(e.queue,e.logger,"collector.queue overflow; oldest events dropped",{buffer:"queue",cap:n,droppedCount:t})}else e.queue.length<n&&bt(e.queue);e.status.in++}o||(o=e.destinations);const c=e.transformers?jt(e.transformers):{},u=await Promise.all(Object.entries(o||{}).map(async([o,r])=>{if(r.config.disabled)return{id:o,destination:r,skipped:!0};const u=r.config.id||o,l=Z("destination",u),d=It(r.config.breaker);if(d&&function(e,t,n){const o=e[t];if(!o||"closed"===o.state)return!1;if("half-open"===o.state)return!0===o.probing;const r=kt();return void 0!==o.openUntil&&r<o.openUntil||(o.state="half-open",o.probing=!0,o.openUntil=r+n,!1)}(e.status.breakers,l,d.cooldown))return{id:o,destination:r,skipped:!0};const f=t=>{d&&St(e.status.breakers,l,t,d.threshold,d.cooldown)},p=()=>{d&&function(e,t){const n=e[t];n&&"half-open"===n.state&&!0===n.probing&&(n.state="open",n.probing=!1)}(e.status.breakers,l)};let g=(r.queuePush||[]).map(e=>({...e,consent:s}));r.queuePush=[],t&&g.push(B(t));const h=n.ingest?{...n.ingest,_meta:{...n.ingest._meta,path:[...n.ingest._meta.path]}}:z("unknown");if(!g.length&&!r.queueOn?.length)return p(),{id:o,destination:r,skipped:!0};if(!g.length&&r.queueOn?.length){if(!F(r.config.consent,s))return p(),{id:o,destination:r,skipped:!0};let t=!1;try{t=await hn(e,r,o,!0)}catch(t){e.status.failed++;const n=r.type||"unknown";e.logger.scope(n).error("destination init failed",{error:t instanceof Error?t.message:String(t)}),f("transport-failure")}return p(),{id:o,destination:r,skipped:!t}}const m=[],v=g.filter(t=>{const n=F(r.config.consent,s,t.consent);if(n)return t.consent=n,m.push(t),!1;const a=lt(e,{stepId:Z("destination",o),stepType:"destination",phase:"skip",eventId:"string"==typeof t.id?t.id:"",now:Date.now(),...ut(t,h,e)});return a.skipReason="consent",s&&(a.consent={...s}),r.config.consent&&(a.meta={required:{...r.config.consent}}),K(e,a),!0});if(v.length>0){const t=r.queuePush,n=r.config.id||o,s={max:r.config.queueMax??1e3};let a=0;for(const e of v)a+=vt(t,e,s).dropped;if(a>0){Et(e,n);const o=Ot(e.status,Z("destination",n),"queue",a);wt(t,e.logger.scope(r.type||"unknown"),"destination.queuePush overflow; oldest events dropped",{buffer:"queuePush",destination:n,cap:s.max,droppedCount:o})}else t.length<s.max&&bt(t)}if(!m.length)return p(),{id:o,destination:r,queue:g};let y,w,b=!1;try{b=await hn(e,r,o,!0)}catch(t){e.status.failed++;const n=r.type||"unknown";e.logger.scope(n).error("destination init failed",{error:t instanceof Error?t.message:String(t)}),f("transport-failure")}if(!b)return p(),{id:o,destination:r,queue:g};r.dlq||(r.dlq=[]);const k=pn(r.config.before,c,h),I=r.config.next,S=r.config?.cache,E=S?N(S):void 0,O=E?xt(E,e):void 0,q=r.config?.state?ne(r.config.state):void 0,x=q?.filter(e=>"get"===e.mode),C=q?.filter(e=>"set"===e.mode);let j=0,A=0;return await Promise.all(m.map(async t=>{let s;if(t.globals=_(a,t.globals),t.user=_(i,t.user),E?.stop&&O){const e=R(h,t),n=await G(E,O,e);if("HIT"===n?.status)return t;"MISS"===n?.status&&(s={key:n.key,ttl:n.rule.ttl})}let u=t,l=n.respond;if(k.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const r=await $t(e,e.transformers,k,t,h,n.respond,`destination.${o}.before`);if(null===r.event)return t;r.respond&&(l=r.respond),u=Array.isArray(r.event)?r.event[0]:r.event}if(E&&!E.stop&&O){const e=R(h,u),n=await G(E,O,e);if("HIT"===n?.status)return t;"MISS"===n?.status&&(s={key:n.key,ttl:n.rule.ttl})}x&&x.length>0&&u&&(u=await oe(x,t=>Ct(t,e),u,e));const d=Date.now();let f=!1;const p=await ee(mn,t=>{const n=r.type||"unknown";e.logger.scope(n).error("Push failed",{error:t,event:u.name}),y=t,f=!0;const s=r.dlq,a=r.config.id||o,i={max:r.config.dlqMax??100},c=vt(s,[u,t],i);if(c.dropped>0){Et(e,a);const t=Ot(e.status,Z("destination",a),"dlq",c.dropped);wt(s,e.logger.scope(r.type||"unknown"),"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:a,cap:i.max,droppedCount:t})}else s.length<i.max&&bt(s)})(e,r,o,u,h,l);if(j+=Date.now()-d,s&&O&&void 0===r.config.mock&&H(O,s.key,p??!0,s.ttl),!f&&!dn(p)&&C&&C.length>0&&u&&(u=await oe(C,t=>Ct(t,e),u,e)),void 0===p||dn(p)||(w=p),dn(p)&&A++,!f&&I){void 0!==p&&(h._response=p);const t=pn(I,c,h);if(t.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const n=await $t(e,e.transformers,t,u,h,l,`destination.${o}.next`);n.respond&&(l=n.respond)}}return t})),{id:o,destination:r,error:y,response:w,totalDuration:j,batchedCount:A,allowedCount:m.length,canonicalId:u,breakerConfig:d}})),l={},d={},f={};for(const t of u){if(t.skipped)continue;const n=t.destination,o={type:n.type||"unknown",data:t.response};Et(e,t.id);const r=e.status.destinations[t.id],s=Date.now();r.queuePushSize=n.queuePush?.length??0,r.dlqSize=n.dlq?.length??0;const a=t.breakerConfig,i=t.canonicalId?Z("destination",t.canonicalId):void 0,c=t=>{a&&i&&St(e.status.breakers,i,t,a.threshold,a.cooldown)};if(t.error)o.error=t.error,f[t.id]=o,r.failed++,r.lastAt=s,r.duration+=t.totalDuration||0,e.status.failed++,c("transport-failure");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,r.count++,r.lastAt=s,r.duration+=t.totalDuration||0,e.status.out++,c("success"))}}return vn({event:t,...Object.keys(l).length&&{done:l},...Object.keys(d).length&&{queued:d},...Object.keys(f).length&&{failed:f}})}async function hn(e,t,n,o=!1){if(t.init&&!t.config.init){if(!o&&function(e){const t=e.config.consent;return!!t&&Object.keys(t).length>0}(t))return e.logger.scope(t.type||"unknown").debug("init blocked: consent gate not cleared"),!1;const r=t.type||"unknown",s=e.logger.scope(r),a={collector:e,logger:s,id:n,config:t.config,env:wn(t.env,t.config.env),reportError:qt(e,"destination",n,s,t)};s.debug("init");const i=Date.now();let c;K(e,lt(e,{stepId:Z("destination",n),stepType:"destination",phase:"init",eventId:"",now:i}));try{c=await te(t.init,"DestinationInit",e.hooks,e.logger)(a)}catch(t){const o=Date.now(),r=lt(e,{stepId:Z("destination",n),stepType:"destination",phase:"error",eventId:"",now:o});throw r.durationMs=o-i,r.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},K(e,r),t}if(!1===c)return c;if(t.config={...c||t.config,init:!0},t.queueOn?.length){const o=t.queueOn;t.queueOn=[];for(const{type:r,data:s}of o)nn(e,t,n,r,s)}s.debug("init done")}return!0}async function mn(e,t,n,o,r,s){const{config:a}=t,i=await X(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:r,env:{...wn(t.env,a.env),...s?{respond:s}:{}},reportError:qt(e,"destination",n,u,t)};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:[]},r=fn(d?.batch),s=fn(a.batch),i=r.wait??s.wait??3e4,c=r.size??s.size??1e3,l=r.age??s.age??3e4,g=wn(t.env,a.env),h=U(async()=>{const o=t.batches[p],r=o.batched;if(0===r.entries.length)return;const s={key:r.key,entries:r.entries,events:r.events,data:r.data};r.entries=[],r.events=[],r.data=[];const i=s.entries[0],{traceId:c,sourceId:l,parentEventId:d}=ut(i.event,i.ingest,e),f={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}:{}},reportError:qt(e,"destination",n,u,t)};u.debug("push batch",{events:s.entries.length});const h=t.config.id||n,m=Et(e,h),v=It(t.config.breaker),y=Z("destination",h),w=t=>{v&&St(e.status.breakers,y,t,v.threshold,v.cooldown)},b=Date.now(),k=lt(e,{stepId:Z("destination",n),stepType:"destination",phase:"flush",eventId:"",now:b,traceId:c,sourceId:l,parentEventId:d});k.batch={size:s.entries.length,index:0},K(e,k);const I=n=>{const o=t.dlq=t.dlq||[],r={max:t.config.dlqMax??100};let s=0;for(const e of n)s+=vt(o,e,r).dropped;if(s>0){const t=Ot(e.status,Z("destination",h),"dlq",s);wt(o,u,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:h,cap:r.max,droppedCount:t})}else o.length<r.max&&bt(o);m.failed+=n.length,m.dlqSize=o.length,e.status.failed+=n.length};let S=s.entries.length;const E=an(a.timeout),O=await ee((o,r)=>un(Promise.resolve(te(t.pushBatch,"DestinationPushBatch",e.hooks,e.logger)(o,r)),E,`Destination "${n}" batch delivery timed out after ${E}ms`),t=>{S=0;const o=Date.now(),r=lt(e,{stepId:Z("destination",n),stepType:"destination",phase:"error",eventId:"",now:o,traceId:c,sourceId:l,parentEventId:d});r.durationMs=o-b,r.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},r.batch={size:s.entries.length,index:0},K(e,r),I(s.entries.map(e=>[e.event,t])),w("transport-failure"),u.error("Push batch failed",{error:t instanceof Error?t.message:String(t),entries:s.entries.length})})(s,f);if(V(q=O)&&Array.isArray(q.failed)&&O.failed.length>0){const e=[],t=new Set;for(const n of O.failed){const o=s.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&&(I(e),S=Math.max(0,s.entries.length-e.length),u.error("Push batch partial failure",{failed:e.length,delivered:S,entries:s.entries.length}))}var q;u.debug("push batch done"),m.inFlightBatch=Math.max(0,(m.inFlightBatch??0)-s.entries.length),S>0&&(m.count+=S,m.lastAt=Date.now(),e.status.out+=S,w("success"))},{wait:i,size:c,age:l});t.batches[p]={batched:o,isDefault:!f,batchFn:()=>{h()},flush:async()=>{await h.flush()}}}const c=t.batches[p];c.batched.entries.push({event:i.event,ingest:r,respond:s,rule:d,data:i.data}),c.batched.events.push(i.event),Q(i.data)&&c.batched.data.push(i.data);const l="string"==typeof i.event.id?i.event.id:"",g=ut(o,r,e),h=Date.now(),m=lt(e,{stepId:Z("destination",n),stepType:"destination",phase:"in",eventId:l,now:h,traceId:g.traceId,sourceId:g.sourceId,parentEventId:g.parentEventId});i.mappingKey&&(m.mappingKey=i.mappingKey),i.event.consent&&(m.consent={...i.event.consent}),m.inEvent=i.event,K(e,m);const v=lt(e,{stepId:Z("destination",n),stepType:"destination",phase:"out",eventId:l,now:h,traceId:g.traceId,sourceId:g.sourceId,parentEventId:g.parentEventId});i.mappingKey&&(v.mappingKey=i.mappingKey),v.outEvent=i.event,v.batch={size:c.batched.entries.length,index:c.batched.entries.length-1},K(e,v);const y=t.config.id||n,w=Et(e,y);return w.inFlightBatch=(w.inFlightBatch??0)+1,c.batchFn(),ln}{let s;if(u.debug("push",{event:i.event.name}),"trace"===e.observeLevel?.()&&Array.isArray(t.calls)&&t.calls.length>0){const e=pt({...l.env,simulation:t.calls});l.env=e.wrappedEnv,s=e.calls,e.unresolved.length>0&&(e.wrappedEnv[Y]={paths:e.unresolved,record:(t,n)=>e.calls.push({fn:t,args:n,ts:Date.now()})})}const c="string"==typeof i.event.id?i.event.id:"",{traceId:d,sourceId:f,parentEventId:p}=ut(o,r,e),g=Date.now(),h=lt(e,{stepId:Z("destination",n),stepType:"destination",phase:"in",eventId:c,now:g,traceId:d,sourceId:f,parentEventId:p});i.mappingKey&&(h.mappingKey=i.mappingKey),i.event.consent&&(h.consent={...i.event.consent}),h.inEvent=i.event,K(e,h);try{const o=an(a.timeout),r=await un(Promise.resolve(te(t.push,"DestinationPush",e.hooks,e.logger)(i.event,l)),o,`Destination "${n}" delivery timed out after ${o}ms`),h=Date.now(),m=lt(e,{stepId:Z("destination",n),stepType:"destination",phase:"out",eventId:c,now:h,traceId:d,sourceId:f,parentEventId:p});return m.durationMs=h-g,m.outEvent=i.event,s&&s.length>0&&(m.calls=mt(s)),Q(r)&&(m.meta={...m.meta,response:r}),i.mappingKey&&(m.mappingKey=i.mappingKey),K(e,m),u.debug("push done"),r}catch(t){const o=Date.now(),r=lt(e,{stepId:Z("destination",n),stepType:"destination",phase:"error",eventId:c,now:o,traceId:d,sourceId:f,parentEventId:p});throw r.durationMs=o-g,r.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},s&&s.length>0&&(r.calls=mt(s)),i.mappingKey&&(r.mappingKey=i.mappingKey),K(e,r),t}}}function vn(e){return{ok:!e?.failed,...e}}function yn(e){const{code:t,config:n={},env:o={},cache:r,state:s}=e,{config:a}=At(e,"before"),{config:i}=At({...e,config:a},"next"),c={...t.config,...n,...i};r&&(c.cache=r),void 0!==s&&void 0===c.state&&(c.state=s);const u=wn(t.env,o);return{...t,config:c,env:u}}function wn(e,t){return e||t?t?e&&V(e)&&V(t)?{...e,...t}:t:e:{}}async function bn(e,t,n){const o=Object.entries(e).map(async([e,o])=>{const r=o.destroy;if(!r)return;const s=o.type||"unknown",a=n.scope(s),i={id:e,config:o.config,env:o.env??{},logger:a};let c;try{await Promise.race([r(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 kn(e,t){e.stateVersion++,e.cellVersion[t]=e.stateVersion}async function In(e,t,n){let o,r,s=!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 ct.Config:Le(n)&&(Ge(e.config,n,{shallow:!1}),r=n,s=!0);break;case ct.Consent:if(Le(n)){const{update:t}=function(e,t){const n={};return Object.entries(t).forEach(([e,t])=>{n[e]=!!t}),e.consent=j(e.consent,n),{update:n}}(e,n);kn(e,ct.Consent),r=t,s=!0}break;case ct.Custom:Le(n)&&(e.custom=Ge(e.custom,n),kn(e,ct.Custom),r=n,s=!0);break;case ct.Destination:Le(n)&&"code"in n&&Le(n.code)&&(o=await async function(e,t){const{code:n,config:o={},env:r={},before:s,next:a,cache:i,state:c}=t;if(!J(n.push))return vn({ok:!1,failed:{invalid:{type:"invalid",error:"Destination code must have a push method"}}});const u=o||{init:!1};let l=s?{...u,before:s}:{...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=L(5,"abcdefghijklmnopqrstuvwxyz")}while(e.destinations[d]||e.pending.destinations[d]);if(l.require?.length){e.pending.destinations[d]=t,await zt(e);const n=e.destinations[d];return n?gn(e,void 0,{},{[d]:n}):vn({ok:!0})}const f={...n,config:l,env:wn(n.env,r)};return e.destinations[d]=f,!1!==f.config.queue&&(f.queuePush=[...e.queue]),gn(e,void 0,{},{[d]:f})}(e,n));break;case ct.Globals:Le(n)&&(e.globals=Ge(e.globals,n),kn(e,ct.Globals),r=n,s=!0);break;case ct.Hook:if(Le(n)&&Ke(n.name)&&Ue(n.fn)){const{name:t,fn:o}=n;e.hooks[t]=o,r=n,s=!0}break;case ct.On:if(Le(n)&&Ke(n.type)){const{type:t,rules:o}=n;await async function(e,t,n){if(!Ut(e))return void Lt();const o=e.on,r=o[t]||[],s=ae(n)?n:[n];s.forEach(e=>{r.push(e)}),o[t]=r,on(e,t,s)}(e,t,o)}break;case ct.Ready:s=!0;break;case ct.Run:o=await async function(e,t){return e.allowed=!0,e.timing=Date.now(),e.trace=ze(),e.count=0,t&&(t.consent&&(e.consent=Ge(e.consent,t.consent),kn(e,ct.Consent)),t.user&&(e.user=Ge(e.user,t.user),kn(e,ct.User)),t.globals&&(e.globals=Ge(e.config.globalsStatic||{},t.globals),kn(e,ct.Globals)),t.custom&&(e.custom=Ge(e.custom,t.custom),kn(e,ct.Custom))),Object.values(e.destinations).forEach(e=>{e.queuePush=[]}),e.queue=[],e.round++,await zt(e),await async function(e){if(Ut(e))for(const t of Wt){if(!Jt(e,t))continue;const n=rn(e,t);on(e,t,e.on[t]||[]);for(const[o,r]of Object.entries(e.sources))Nt(r)&&await sn(e,r,o,t,n)}else Lt()}(e),await gn(e)}(e,n),s=!0;break;case ct.Session:s=!0;break;case ct.Shutdown:e.hasShutdown||(e.hasShutdown=!0,await async function(e){const t=e.logger;await bn(e.sources,"source",t),await async function(e,t){const n=Object.entries(e).flatMap(([e,n])=>{const o=n.batches;if(!o)return[];const r=t.scope(n.type||"destination");return Object.values(o).map(async t=>{let n;try{await Promise.race([t.flush(),new Promise((t,o)=>{n=setTimeout(()=>o(new Error(`destination '${e}' batch flush timed out`)),5e3)})])}catch(t){r.error(`destination '${e}' batch flush failed: ${t}`)}finally{n&&clearTimeout(n)}})});await Promise.allSettled(n)}(e.destinations,t),await bn(e.destinations,"destination",t),await bn(e.transformers,"transformer",t),await bn(e.stores,"store",t)}(e));break;case ct.User:Le(n)&&(Ge(e.user,n,{shallow:!1}),kn(e,ct.User),r=n,s=!0);break;default:return e.logger.warn("unknown command",{command:t}),vn({ok:!1})}return s&&(await async function(e,t,n,o){if(!Ut(e))return Lt(),!0;e.seenEvents.add(String(t));let r=n||[];n||(r=e.on[t]||[]);const s=rn(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&&(Nt(o)?await sn(e,o,n,t,s)&&(a=!0):(o.queueOn=o.queueOn||[],o.queueOn.push({type:t,data:s})))}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:s});nn(e,o,n,t,s)}});for(const[t,n]of Object.entries(e.sources))Nt(n)&&n.queueOn?.length&&await Bt(e,n,t);const i=Object.values(e.sources).some(e=>!Nt(e)&&e.config.require?.length);return(Object.keys(e.pending.destinations).length>0||i)&&await zt(e),on(e,t,r,o),!a}(e,t,void 0,r),o=await gn(e)),o||vn({ok:!0})}()}finally{a()}}function Sn(e,t){return{timing:Math.round((Date.now()-e.timing)/10)/100,source:{type:"collector",schema:"4"},...t}}function En(e,t,n){if(!t.name)throw new Error("Event name is required");const[o,r]=t.name.split(" ");if(!o||!r)throw new Error("Event name is invalid");const{timestamp:s=Date.now(),name:a=`${o} ${r}`,data:i={},context:c={},globals:u=e.globals,custom:l={},user:d=e.user,nested:f=[],consent:p=e.consent,id:g=He(),trigger:h="",entity:m=o,action:v=r,timing:y=0,source:w={type:"collector",schema:"4"}}=t,b=w.count??(e.count+=1),k=w.trace??n?._meta.trace??e.trace,I={...w,count:b};void 0!==k&&(I.trace=k);const S=e.name??w.platform??"default",E=e.release??"4.3.1";return I.release={...w.release,[S]:E},{name:a,data:i,context:c,globals:u,custom:l,user:d,nested:f,consent:p,id:g,trigger:h,entity:m,action:v,timestamp:s,timing:y,source:I}}function On(e,t){const n=Xe(async(n,o={})=>await Ye(async()=>{const r=Date.now(),{id:s,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??Fe(s||"unknown");if(c){const t=await Ve(p,c,e);if(t.ignore)return vn({ok:!0});if(c.consent&&!Je(c.consent,e.consent,t.event.consent))return vn({ok:!0});p=t.event}if(u?.length&&e.transformers&&Object.keys(e.transformers).length>0){const n=await $t(e,e.transformers,u,p,h,f,s?`source.${s}.next`:void 0);if(null===n.event)return e.logger.debug("Event dropped by transformer chain"+(n.droppedBy?` (${n.droppedBy})`:"")),vn({ok:!0,dropped:!0});if(n.stopped)return n.respond&&(f=n.respond),vn({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),r=En(e,o,h);return gn(e,r,{id:s,ingest:h,respond:f},g)}));if(s){e.status.sources[s]||(e.status.sources[s]={count:0,duration:0});const t=e.status.sources[s];t.count+=n.event.length,t.lastAt=Date.now(),t.duration+=Date.now()-r}return o[0]??vn({ok:!0})}p=n.event}const m=function(e,t,n){return En(e,Sn(e,t),n)}(e,p,h),v=await gn(e,m,{id:s,ingest:h,respond:f},g);if(s){e.status.sources[s]||(e.status.sources[s]={count:0,duration:0});const t=e.status.sources[s];t.count++,t.lastAt=Date.now(),t.duration+=Date.now()-r}return v},t=>{if(t instanceof Qe)throw t;return e.status.failed++,e.logger.error("push failed",{event:n,ingest:o.ingest,error:t}),vn({ok:!1})})(),"Push",e.hooks,e.logger);return async(t,o)=>{const r="string"==typeof t.id?t.id:"",{traceId:s,sourceId:a,parentEventId:i}=ut(t,o?.ingest,e),c=Date.now(),u=lt(e,{stepId:"collector.push",stepType:"collector",phase:"in",eventId:r,now:c,traceId:s,sourceId:a,parentEventId:i});u.inEvent=t,We(e,u);try{const u=await n(t,o),l=Date.now(),d=lt(e,{stepId:"collector.push",stepType:"collector",phase:"out",eventId:r,now:l,traceId:s,sourceId:a,parentEventId:i});return d.durationMs=l-c,d.outEvent=u,We(e,d),u}catch(t){const n=Date.now(),o=lt(e,{stepId:"collector.push",stepType:"collector",phase:"error",eventId:r,now:n,traceId:s,sourceId:a,parentEventId:i});throw o.durationMs=n-c,o.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},We(e,o),t}}}function qn(e={}){const t=e.maxEntries??1e4,n=e.lowWaterMark??.8,o=e.sweepIntervalMs??6e4,r=Math.floor(t*n),s=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 s)void 0!==o.expires&&o.expires<=e&&(s.delete(n),t++);a.evictions_ttl+=t},o),i&&"function"==typeof i.unref&&i.unref()),{type:"memory",config:{},get(e){const t=s.get(e);if(t)return void 0!==t.expires&&t.expires<=Date.now()?(s.delete(e),a.evictions_ttl++,void a.misses++):(s.delete(e),s.set(e,t),a.hits++,t.value);a.misses++},set(e,n,o){const i=!s.has(e);i||s.delete(e),s.set(e,{value:n,expires:void 0!==o?Date.now()+o:void 0}),a.writes++,i&&a.populates++,s.size>t&&function(){if(s.size<=t)return;const e=s.size-r;let n=0;for(const t of s.keys()){if(n>=e)break;s.delete(t),n++}a.evictions_entries+=n}()},delete(e){s.delete(e)&&a.deletes++},get counters(){return{...a}},destroy(){void 0!==i&&(clearInterval(i),i=void 0),s.clear()}}}function xn(e,t){const{cacheConfig:n,cacheStore:o,namespace:r,logger:s,storeId:a,collector:i}=t,c=(e,t)=>{if(!i)return;const n=lt(i,{stepId:`store.${a}`,stepType:"store",phase:"in",eventId:"",now:Date.now()});n.meta={op:"cache",cached:"hit"===t,status:t,key:e},st(i,n)},u={hits:0,misses:0,populates:0,writes:0,deletes:0,inflight_dedups:0},l=n.rules.map(e=>({match:e.match?rt(e.match):()=>!0,ttl:e.ttl})),d=e=>`${r}:${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),r=await o.get(n),s=at(r);if(void 0!==s){if(!("expired"in s))return u.hits++,c(t,"hit"),s.value;try{await o.delete(n)}catch(e){g("delete",t,e)}}const a=p.get(n);if(a)return u.inflight_dedups++,c(t,"hit"),a;u.misses++,c(t,"miss");const i=(async()=>{try{const r=await e.get(t);if(void 0===r)return;const s=f(t,r);if(s)try{const e=1e3*s.ttl;await o.set(n,it(r,e),e),u.populates++}catch(e){g("set",t,e)}return r}finally{p.delete(n)}})();return p.set(n,i),i},async set(t,n,r){u.writes++,await e.set(t,n,r);const s=f(t,n);if(s)try{const e=1e3*s.ttl;await o.set(d(t),it(n,e),e)}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`;s?s.warn(o,{error:n}):console.warn(o,n)}}function Cn(e,t,n){const o=`store.${n}`,r=ot(t.get,"StoreGet",e.hooks,e.logger),s=ot(t.set,"StoreSet",e.hooks,e.logger),a=ot(t.delete,"StoreDelete",e.hooks,e.logger);t.get=async t=>{const n=Date.now(),s=lt(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:n});s.meta={op:"get",key:t},nt(e,s);try{const s=await r(t),a=Date.now(),i=lt(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:a});return i.durationMs=a-n,i.meta={op:"get",key:t},nt(e,i),s}catch(r){const s=Date.now(),a=lt(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:s});throw a.durationMs=s-n,a.meta={op:"get",key:t},a.error=r instanceof Error?{name:r.name,message:r.message}:{message:String(r)},nt(e,a),r}},t.set=async(t,n,r)=>{const a=Date.now(),i=lt(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:a});i.meta={op:"set",key:t},nt(e,i);try{await s(t,n,r);const i=Date.now(),c=lt(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:i});c.durationMs=i-a,c.meta={op:"set",key:t},nt(e,c)}catch(n){const r=Date.now(),s=lt(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:r});throw s.durationMs=r-a,s.meta={op:"set",key:t},s.error=n instanceof Error?{name:n.name,message:n.message}:{message:String(n)},nt(e,s),n}},t.delete=async t=>{const n=Date.now(),r=lt(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:n});r.meta={op:"delete",key:t},nt(e,r);try{await a(t);const r=Date.now(),s=lt(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:r});s.durationMs=r-n,s.meta={op:"delete",key:t},nt(e,s)}catch(r){const s=Date.now(),a=lt(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:s});throw a.durationMs=s-n,a.meta={op:"delete",key:t},a.error=r instanceof Error?{name:r.name,message:r.message}:{message:String(r)},nt(e,a),r}}}async function jn(e){const t=M({globalsStatic:{},sessionStatic:{},run:!0,queueMax:1e3},e,{merge:!1,extend:!1}),n={level:e.logger?.level,handler:e.logger?.handler},o=$(n),r={...t.globalsStatic,...e.globals},s={allowed:!1,config:t,consent:e.consent||{},custom:e.custom||{},destinations:{},transformers:{},stores:{},globals:r,hooks:e.hooks||{},observers:new Set,logger:o,on:{},queue:[],round:0,count:0,stateVersion:0,cellVersion:{},delivery:new WeakMap,session:void 0,status:{startedAt:Date.now(),in:0,out:0,failed:0,sources:{},destinations:{},dropped:{},connectionErrors:{},breakers:{}},timing:Date.now(),user:e.user||{},sources:{},pending:{destinations:{}},hasShutdown:!1,seenEvents:new Set,push:void 0,command:void 0,elb:void 0};var a,i;void 0!==e.name&&(s.name=e.name),void 0!==e.release&&(s.release=e.release),s.push=On(s,e=>Sn(s,e)),s.command=(i=In,et(async(e,t,n)=>await tt(async()=>await i(a,e,t,n),n=>{if(n instanceof Ze)throw n;return a.status.failed++,a.logger.error("command failed",{command:e,data:t,error:n}),vn({ok:!1})})(),"Command",(a=s).hooks,a.logger)),s.elb=function(e){return async(t,n,o,r,s)=>{if("string"==typeof t&&t.startsWith("walker ")){const o=t.replace("walker ","");return e.command(o,n)}let a;if("string"==typeof t)a={name:t},n&&"object"==typeof n&&!Array.isArray(n)&&(a.data=n);else{if(!t||"object"!=typeof t||Array.isArray(t))return vn({ok:!1});a={...t},n&&"object"==typeof n&&!Array.isArray(n)&&(a.data={...a.data||{},...n})}return o&&"object"==typeof o&&(a.context=o),r&&Array.isArray(r)&&(a.nested=r),s&&"object"==typeof s&&(a.custom=s),e.push(a)}}(s);const c=e.stores||{};return s.stores=await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t)){const{code:t,config:s={},env:a={}}=r,i=e.logger.scope("store").scope(o),c={collector:e,logger:i,id:o,config:s,env:a,reportError:qt(e,"store",o,i)},u=await t(c);n[o]=u}const o=t,r=function(e){const t={};for(const n of Object.keys(e))t[n]="WHITE";const n=[],o=[];function r(s){const a=t[s];if("BLACK"===a)return;if("GRAY"===a){const e=o.indexOf(s),t=o.slice(-1===e?0:e).concat(s).join(" -> ");throw new Error(`Cycle in cache.store chain: ${t}`)}t[s]="GRAY",o.push(s);const i=e[s].cache?.store;if(void 0!==i){if(!(i in e))throw new Error(`Store "${s}" cache.store references "${i}", which is not declared in flow.stores`);r(i)}o.pop(),t[s]="BLACK",n.push(s)}for(const n of Object.keys(e))"WHITE"===t[n]&&r(n);return n}(o);for(const t of r){const r=o[t].cache;if(!r)continue;let s,a;void 0!==r.store?(s=n[r.store],a=r.store):(n.__cache||(n.__cache=qn()),s=n.__cache,a="__cache");const i=r.namespace??t;e.logger.scope("store-cache").scope(t).info(`store "${t}" caches with namespace "${i}:" via ${a}`),n[t]=xn(n[t],{storeId:t,cacheConfig:r,cacheStore:s,namespace:i,logger:e.logger.scope("store-cache").scope(t),collector:e})}for(const[t,o]of Object.entries(n))"__cache"!==t&&Cn(e,o,t);return n}(s,c),function(e,t,n){const o=new Map;for(const[n,r]of Object.entries(e))t[n]&&o.set(r,t[n]);if(0!==o.size)for(const e of[n.transformers,n.destinations,n.sources])if(e)for(const t of Object.values(e))r(t.env);function r(e){if(e)for(const[t,n]of Object.entries(e))if("object"==typeof n&&null!==n){const r=o.get(n);r&&(e[t]=r)}}}(c,s.stores,e),s.stores.__cache||(s.stores.__cache=qn()),s.destinations=await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t))r.config?.require?.length?e.pending.destinations[o]=r:n[o]=yn(r);return n}(s,e.destinations||{}),s.transformers=await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t)){const{code:t,env:s={}}=r,a=_e(r,"Transformer");if(!a.ok){e.logger.warn(`Transformer ${o} invalid (${a.code}): ${a.reason}. Skipping.`);continue}const{config:i}=At(r,"before"),{config:c}=At({...r,config:i},"next"),u=Object.keys(s).length>0?{...c,env:s}:c,{cache:l}=r,d=l?{...u,cache:l}:u,f=r.config?.state??r.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:Ee(o),config:p,env:s,reportError:qt(e,"transformer",o,g)},m=t??(e=>{const t=r.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,r]of Object.entries(o)){if("object"!=typeof r||null===r)continue;const o=r;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 Re(n,t,e.collector);return!o.ignore&&{event:o.event}}}}return{type:"pass",config:e.config,push:e=>({event:e})}}),v=await m(h);void 0!==r.before&&void 0===v.config?.before&&(v.config={...v.config??{},before:r.before}),void 0!==r.next&&void 0===v.config?.next&&(v.config={...v.config??{},next:r.next}),void 0!==f&&void 0===v.config?.state&&(v.config={...v.config??{},state:f}),n[o]=v}return n}(s,e.transformers||{}),s}var An=globalThis;function Tn(e){try{const t=An.window;if(!t)return;t.localStorage.getItem(A)===e&&t.localStorage.removeItem(A)}catch{}}function Dn(e,t){return void 0===t?e:n=>e({...n,release:t})}async function Pn(e){e=e||{};const t=await jn(e);(function(e,t){if(t.observers)for(const n of t.observers)e.observers.add(n);const n=t.observe;if(!n)return;const o=e.name??"default";if("binding"in n){const t=function(){const e=An.window,t=An.URLSearchParams;if(!e||!t)return null;try{const n=new t(e.location.search.replace(/^\?/,"")).getAll(A);return n.length>0?n[n.length-1]??null:null}catch{return null}}(),r=t??function(){try{return An.window?.localStorage.getItem(A)??null}catch{return null}}();if(!r)return;const s=P(r);if(!s)return void(null===t?(e.logger.warn("observe: malformed stored credential cleared"),Tn(r)):e.logger.warn("observe: malformed credential ignored"));if(s.pb!==n.binding)return void e.logger.warn("observe: credential binding mismatch, credential ignored");let a;!function(e){try{An.window?.localStorage.setItem(A,e)}catch{}}(r),null!==t&&function(){const e=An.window,t=An.URLSearchParams;if(e&&t)try{const n=e.location.href,o=n.indexOf("#"),r=o>=0?n.slice(o):"",s=o>=0?n.slice(0,o):n,a=s.indexOf("?"),i=a>=0?s.slice(0,a):s,c=new t(a>=0?s.slice(a+1):"");c.delete(A);const u=c.toString();e.history.replaceState({},"",`${i}${u?`?${u}`:""}${r}`)}catch{}}();const i=T({url:`${n.url}/ingest/${s.ses}`,token:s.secret,headers:{"X-Walkeros-Binding":n.binding},onStatus:t=>{401===t&&(Tn(r),a&&e.observers.delete(a))}});a=D(function(e,t){return void 0===t?e:n=>e({...n,flowId:t})}(Dn(i,e.release),n.flowId),{flowId:n.flowId??o,...void 0!==n.level?{level:n.level}:{},...void 0!==n.sample?{sample:n.sample}:{}}),e.observers.add(a);const c=n.level;return void(void 0!==c&&(e.observeLevel=()=>c))}if("off"===n.level)return;const r=n.level;void 0!==r&&(e.observeLevel=()=>r),e.observers.add(D(Dn(T({url:`${n.url}/ingest/${n.sessionId}`,token:n.token}),e.release),{flowId:o,level:n.level,sample:n.sample}))})(t,e),await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t)){const t=await Ht(e,o,r);if(!t)continue;const s=r.config?.require;t.config={...t.config,init:!1,...s?{require:[...s]}:{}},n[o]=t}Object.assign(e.sources,n);for(const t of Object.keys(n)){const n=e.sources[t];let o=!1;n.init&&await he(n.init.bind(n),n=>{if(n instanceof fe)throw n;o=!0,e.status.failed++,e.logger.scope("source").error("source init failed",{sourceId:t,error:n})})(),o||(n.config.init=!0,Nt(n)&&await Bt(e,n,t))}return await zt(e),n}(t,e.sources||{});const{consent:n,user:o,globals:r,custom:s}=e;n&&await t.command("consent",n),o&&await t.command("user",o),r&&await t.command("globals",r),s&&await t.command("custom",s),t.config.run&&await t.command("run");let a=t.elb;const i=Object.values(t.sources),c=i.find(e=>e.config.primary);return c?a=c.push:i.length>0&&(a=i[0].push),{collector:t,elb:a}}var Mn=async e=>{let t;return{get flow(){return t},trigger:()=>async n=>{if(!t){const n=await Pn(e);t={collector:n.collector,elb:n.elb}}const o=function(e){for(const t of Object.values(e.sources||{}))if("lambda"===t.type)return t}(t.collector);if(!o)throw new Error("Lambda source not found in collector");const r={awsRequestId:`test-${Date.now()}`},s=o.push,a=await s(n,r);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 $n(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 _n={};t(_n,{createTrigger:()=>Jn,env:()=>Rn,step:()=>Un});var Rn={};t(Rn,{push:()=>Hn,simulation:()=>zn});var Bn=()=>{},Nn={error:Bn,warn:Bn,info:Bn,debug:Bn,throw:e=>{throw"string"==typeof e?new Error(e):e},json:Bn,scope:()=>Nn},Gn=()=>()=>Promise.resolve({ok:!0}),Hn={get push(){return Gn()},get command(){return Gn()},get elb(){return Gn()},logger:Nn},zn=["AWS.SQSClient"],Un={};t(Un,{decoderText:()=>Fn,malformedJson:()=>Wn,orderComplete:()=>Ln,pageView:()=>Kn});var Kn={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"]]},Ln={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"]]},Fn={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"]]},Wn={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 Qn(e){if("object"!=typeof e||null===e)return!1;const t=e;return"sqs"===t.type&&"function"==typeof t.push}var Jn=async e=>{let t;return{get flow(){return t},trigger:()=>async n=>{if(!t){const n=await Pn(e);t={collector:n.collector,elb:n.elb}}const o=function(e){for(const t of Object.values(e.sources??{}))if(Qn(t))return t}(t.collector);if(!o)throw new Error("sqs source not registered in collector, ensure it is configured in sources");const r={MessageId:n.MessageId,Body:n.Body,ReceiptHandle:n.ReceiptHandle,Attributes:n.Attributes,MessageAttributes:n.MessageAttributes},s=await o.push(r),a=[];return s&&"object"==typeof s&&(s.acked&&a.push(["message.ack",n.MessageId]),s.nacked&&a.push(["message.nack",n.MessageId])),a}}};export{w as examples,n as schemas,_n 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:()=>v,sqsSetup:()=>y});import{zodToSchema as o}from"@walkeros/core/dev";import{z as r}from"@walkeros/core/dev";import{z as s}from"@walkeros/core/dev";var a=s.enum(["GET","POST","PUT","PATCH","DELETE","OPTIONS","HEAD"]),i=s.union([s.string(),s.array(s.string()),s.literal("*")]),c=s.object({origin:i.describe("Allowed origins (* for all, URL string, or array of URLs)").optional(),methods:s.array(a).describe("Allowed HTTP methods").optional(),headers:s.array(s.string()).describe("Allowed request headers").optional(),credentials:s.boolean().describe("Allow credentials (cookies, authorization headers)").optional(),maxAge:s.number().int().positive().describe("Preflight cache duration in seconds").optional()}),u=r.object({cors:r.union([r.boolean(),c]).describe("CORS configuration: false = disabled, true = allow all origins, object = custom configuration").default(!0),timeout:r.number().int().positive().max(9e5).describe("Request timeout in milliseconds (max: 900000 for Lambda)").default(3e4),enablePixelTracking:r.boolean().describe("Enable GET requests with 1x1 transparent GIF response for pixel tracking").default(!0),healthPath:r.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()}),v=d(p),y=d(m),w={};t(w,{createTrigger:()=>Mn,env:()=>b,step:()=>O,trigger:()=>$n});var b={};t(b,{push:()=>E});var k=()=>()=>Promise.resolve({ok:!0}),I=()=>{},S={error:I,warn:I,info:I,debug:I,throw:e=>{throw"string"==typeof e?new Error(e):e},json:I,scope:()=>S},E={get push(){return k()},get command(){return k()},get elb(){return k()},logger:S},O={};t(O,{apiGatewayV1Post:()=>x,lambdaGet:()=>C,lambdaPost:()=>q});var q={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"}}]]},x={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"}}]]},C={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 j}from"@walkeros/core";import{OBSERVE_STORAGE_KEY as A,createBatchedPoster as T,createTelemetryObserver as D,parseObserveCredential as P}from"@walkeros/core";import{assign as M,createLogger as $}from"@walkeros/core";import{assign as _,buildCacheContext as R,clone as B,compileCache as N,checkCache as G,storeCache as H,createIngest as z,debounce as U,emitStep as K,getId as L,getGrantedConsent as F,getNextSteps as W,isDefined as Q,isFunction as J,isObject as V,OBSERVE_ENV_KEY as Y,processEventMapping as X,stepId as Z,tryCatchAsync as ee,useHooks as te,compileState as ne,applyState as oe}from"@walkeros/core";import{emitStep as re}from"@walkeros/core";import{parseCallPath as se}from"@walkeros/core";import{isArray as ae,FatalError as ie}from"@walkeros/core";import{tryCatch as ce,tryCatchAsync as ue}from"@walkeros/core";import{stepId as le}from"@walkeros/core";import{createIngest as de,FatalError as fe,getMappingValue as pe,parseTraceparent as ge,tryCatchAsync as he,getNextSteps as me,compileCache as ve,checkCache as ye,storeCache as we,applyUpdate as be,buildCacheContext as ke,compileState as Ie,applyState as Se}from"@walkeros/core";import{createIngest as Ee,emitStep as Oe,FatalError as qe,isObject as xe,stepId as Ce,tryCatchAsync as je,useHooks as Ae,getNextSteps as Te,compileCache as De,checkCache as Pe,storeCache as Me,buildCacheContext as $e,validateStepEntry as _e,processEventMapping as Re,compileState as Be,applyState as Ne}from"@walkeros/core";import{assign as Ge,getSpanId as He,getTraceId as ze,isFunction as Ue,isString as Ke}from"@walkeros/core";import{isObject as Le}from"@walkeros/core";import{createIngest as Fe,emitStep as We,FatalError as Qe,getGrantedConsent as Je,processEventMapping as Ve,tryCatchAsync as Ye,useHooks as Xe}from"@walkeros/core";import{FatalError as Ze,useHooks as et,tryCatchAsync as tt}from"@walkeros/core";import{emitStep as nt,useHooks as ot}from"@walkeros/core";import{compileMatcher as rt,emitStep as st,readCacheEnvelope as at,wrapCacheEnvelope as it}from"@walkeros/core";var ct={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 ut(e,t,n){return{traceId:e.source?.trace??t?._meta.trace??n.trace,sourceId:t?._meta.path[0],parentEventId:t?._meta.parentEventId}}function lt(e,t){const n=e.status.startedAt,o={flowId:e.name??"default",stepId:t.stepId,stepType:t.stepType,phase:t.phase,eventId:t.eventId,timestamp:new Date(t.now).toISOString(),elapsedMs:t.now-n};return t.traceId&&(o.traceId=t.traceId),t.sourceId&&(o.sourceId=t.sourceId),t.parentEventId&&(o.parentEventId=t.parentEventId),o}function dt(e){return"object"==typeof e&&null!==e}function ft(e,t,n){if(null===e||"object"!=typeof e)return e;if(n>=8)return e;const o=t.get(e);if(void 0!==o)return o;if(Array.isArray(e)){const o=[];t.set(e,o);for(const r of e)o.push(ft(r,t,n+1));return o}const r={};t.set(e,r);for(const[o,s]of Object.entries(e))r[o]="function"==typeof s?s:ft(s,t,n+1);return r}function pt(e){const t=[],n=[],{simulation:o,...r}=e,s=ft(r,new WeakMap,0);for(const e of o){const o=se(e);if(0===o.length)continue;const r=o.join(".");if(o.length-1>=8){n.push(r);continue}let a=s,i=!0;for(let e=0;e<o.length-1;e++){const t=a[o[e]];if(!dt(t)){i=!1;break}a=t}const c=o[o.length-1];if(!i||!(c in a)){n.push(r);continue}const u=a[c];"function"==typeof u?a[c]=function(...e){return t.push({fn:r,args:e,ts:Date.now()}),u.apply(this,e)}:n.push(r)}return{wrappedEnv:s,calls:t,unresolved:n}}function gt(e,t){try{return e[t]}catch{return"[unreadable]"}}function ht(e){const t=new WeakSet,n=(e,o)=>{if(null===e)return null;if("function"==typeof e)return"[function]";if("string"==typeof e||"boolean"==typeof e)return e;if("number"==typeof e)return Number.isFinite(e)?e:null;if("bigint"==typeof e)return String(e);if("object"!=typeof e)return;const r=e;if(t.has(r))return"[circular]";if(o>=6)return"[truncated]";let s;t.add(r);try{if(Array.isArray(r))s=r.map(e=>n(e,o+1));else if(function(e){const t=Object.getPrototypeOf(e);return t===Object.prototype||null===t}(r)){const e={};for(const t of Object.keys(r))e[t]=n(gt(r,t),o+1);s=e}else s=function(e){try{return String(e)}catch{return"[object]"}}(r)}catch{s="[unreadable]"}return t.delete(r),s};return e.map(e=>n(e,0))}function mt(e){return e.map(e=>({fn:e.fn,args:ht(e.args),ts:e.ts}))}function vt(e,t,n,o){if(!Number.isFinite(n.max)||n.max<=0)throw new Error(`pushBounded: max must be > 0 (got ${n.max})`);if("dropNewest"===(n.onOverflow??"dropOldest"))return e.length>=n.max?(o&&o([t]),{appended:!1,dropped:1}):(e.push(t),{appended:!0,dropped:0});const r=[];for(;e.length>=n.max;)r.push(e.shift());return e.push(t),r.length>0&&o&&o(r),{appended:!0,dropped:r.length}}var yt=new WeakMap;function wt(e,t,n,o){yt.get(e)||(yt.set(e,!0),t.warn(n,o))}function bt(e){yt.delete(e)}var kt=()=>Date.now();function It(e){if(void 0!==e)return"number"==typeof e?{threshold:e,cooldown:3e4}:{threshold:e.threshold??5,cooldown:e.cooldown??3e4}}function St(e,t,n,o,r){if("partial"===n)return;const s=((a=e)[i=t]||(a[i]={state:"closed",consecutiveFailures:0}),a[i]);var a,i;return"success"===n?(s.consecutiveFailures=0,s.state="closed",s.probing=!1,void(s.openUntil=void 0)):(s.consecutiveFailures+=1,"half-open"===s.state?(s.state="open",s.probing=!1,void(s.openUntil=kt()+r)):void(s.consecutiveFailures>=o&&(s.state="open",s.probing=!1,s.openUntil=kt()+r)))}function Et(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 Ot(e,t,n,o){e.dropped[t]||(e.dropped[t]={});const r=e.dropped[t];return r[n]=(r[n]??0)+o,r[n]}function qt(e,t,n,o,r){const s=le(t,n);return(t,a)=>{try{if(a)return r?function(e,t,n,o,r,s){const a=t.dlq=t.dlq||[],i={max:t.config.dlqMax??100},c=vt(a,[o,r],i);if(c.dropped>0){const t=Ot(e.status,le("destination",n),"dlq",c.dropped);wt(a,s,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:n,cap:i.max,droppedCount:t})}else a.length<i.max&&bt(a);const u=Et(e,n);u.failed++,u.dlqSize=a.length,e.status.failed++;const l=It(t.config.breaker);if(l){const o=t.config.id||n;St(e.status.breakers,le("destination",o),"transport-failure",l.threshold,l.cooldown)}}(e,r,n,a,t,o):e.status.failed++,void o.error("report error",{error:t instanceof Error?t.message:String(t),event:a.name});e.status.connectionErrors[s]=(e.status.connectionErrors[s]??0)+1,o.error("connection error",{error:t instanceof Error?t.message:String(t)})}catch{}}}function xt(e,t){return e.storeId&&t.stores[e.storeId]?t.stores[e.storeId]:t.stores.__cache}function Ct(e,t){return e?t.stores[e]:t.stores.__cache}function jt(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 At(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 Tt(e,t={}){if(!e)return[];if(Array.isArray(e))return e;const n=[],o=new Set;let r=e;for(;r&&t[r]&&!o.has(r);){o.add(r),n.push(r);const e=t[r].next;if(Array.isArray(e)){n.push(...e);break}r=e}return n}async function Dt(e,t,n){if(t.init&&!t.config.init){const o=t.type||"unknown",r=e.logger.scope(`transformer:${o}`),s={collector:e,logger:r,id:n,ingest:Ee(n),config:t.config,env:_t(t.config.env),reportError:qt(e,"transformer",n,r)};r.debug("init");const a=await Ae(t.init,"TransformerInit",e.hooks,e.logger)(s);if(!1===a)return!1;t.config={...a||t.config,env:a?.env||t.config.env,init:!0},r.debug("init done")}return!0}async function Pt(e,t,n,o,r,s){const a=t.type||"unknown",i=e.logger.scope(`transformer:${a}`),c={collector:e,logger:i,id:n,ingest:r,config:t.config,env:{..._t(t.config.env),...s?{respond:s}:{}},reportError:qt(e,"transformer",n,i)};i.debug("push",{event:o.name});const u="string"==typeof o.id?o.id:"",{traceId:l,sourceId:d,parentEventId:f}=ut(o,r,e),p=Date.now(),g=lt(e,{stepId:Ce("transformer",n),stepType:"transformer",phase:"in",eventId:u,now:p,traceId:l,sourceId:d,parentEventId:f});g.inEvent=o,Oe(e,g);try{const r=await Ae(t.push,"TransformerPush",e.hooks,e.logger)(o,c),s=Date.now(),a=lt(e,{stepId:Ce("transformer",n),stepType:"transformer",phase:"out",eventId:u,now:s,traceId:l,sourceId:d,parentEventId:f});return a.durationMs=s-p,a.outEvent=r,Oe(e,a),i.debug("push done"),r}catch(t){const o=Date.now(),r=lt(e,{stepId:Ce("transformer",n),stepType:"transformer",phase:"error",eventId:u,now:o,traceId:l,sourceId:d,parentEventId:f});throw r.durationMs=o-p,r.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},Oe(e,r),t}}function Mt(e,t){return e?{...e,_meta:{...e._meta,path:[...e._meta.path]}}:Ee(t)}async function $t(e,t,n,o,r,s,a){r||(r=Ee(n[0]??"chain")),a&&r._meta&&(r._meta.chainPath=a);let i=o,c=s;for(const o of n){const s=t[o];if(!s){e.logger.warn(`Transformer not found: ${o}`);continue}if(r&&r._meta&&r._meta.path.length>256)return e.logger.error(`Max path length exceeded at ${o}`),{event:null,respond:c};if(r&&r._meta&&(r._meta.hops++,r._meta.path.push(o)),!await je(Dt,t=>{if(t instanceof qe)throw t;return e.status.failed++,e.logger.scope(`transformer:${s.type||"unknown"}`).error("transformer init failed",{transformer:o,error:t}),!1})(e,s,o))return{event:null,respond:c};if(a&&void 0!==s.config?.chainMocks?.[a]){const t=s.config.chainMocks[a];e.logger.scope(`transformer:${s.type||"unknown"}`).debug("chainMock",{chain:a}),i=t;continue}if(void 0!==s.config?.mock){e.logger.scope(`transformer:${s.type||"unknown"}`).debug("mock"),i=s.config.mock;continue}if(s.config?.disabled)continue;const u=s.config?.cache,l=u?De(u):void 0,d=l?xt(l,e):void 0,f=s.config?.state?Be(s.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?Ne(g,t=>Ct(t,e),t,e):t;let m;if(l&&d){const e=$e(r,i),t=await Pe(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 v=s.config.before;if(v){const n=Te(v,$e(r,i));if(1===n.length){const o=Tt(n[0],jt(t));if(o.length>0){const n=await $t(e,t,o,i,r,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=>je($t,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,Tt(n,jt(t)),i,Mt(r,n),void 0,a)))}p&&p.length>0&&(i=await Ne(p,t=>Ct(t,e),i,e));const y=await je(Pt,t=>(e.logger.scope(`transformer:${s.type||"unknown"}`).error("Push failed",{error:t}),!1))(e,s,o,i,r,c);if(!1===y)return{event:null,respond:c,droppedBy:o};if(Array.isArray(y)){const s=n.slice(n.indexOf(o)+1),u=await Promise.all(y.map(async n=>{const o=await h(n.event||i),u=Mt(r,"unknown");if(n.next){const r=Te(n.next,$e(u,o));if(0===r.length)return{event:o,respond:c};if(1===r.length){const n=Tt(r[0],jt(t));return n.length>0?$t(e,t,n,o,u,c,a):{event:o,respond:c}}return(await Promise.all(r.map(n=>je($t,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,Tt(n,jt(t)),o,Mt(u,n),void 0,a)))).map(e=>({event:e.event,respond:void 0}))}return s.length>0?$t(e,t,s,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(y&&"object"==typeof y){const{event:n,respond:o,next:s}=y;if(o&&(c=o),void 0!==s){const o=await h(n||i),u=Te(s,$e(r,o));if(0===u.length){i=o;continue}if(1===u.length){const n=Tt(u[0],jt(t));return n.length>0?$t(e,t,n,o,r,c,a):(e.logger.warn(`Branch target not found: ${JSON.stringify(s)}`),{event:null,respond:c})}return await Promise.all(u.map(n=>je($t,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,Tt(n,jt(t)),o,Mt(r,n),void 0,a))),{event:null,respond:void 0}}n&&(i=n)}g&&g.length>0&&(i=await Ne(g,t=>Ct(t,e),i,e)),m&&d&&Me(d,m.key,i,m.ttl);const w=s.config.next,b="string"==typeof w||Array.isArray(w)&&w.every(e=>"string"==typeof e),k=void 0!==w&&!b;if((!y||"object"==typeof y&&!y.next)&&k){const n=Te(s.config.next,$e(r,i));if(1===n.length){const o=Tt(n[0],jt(t));return o.length>0?$t(e,t,o,i,r,c,a):{event:i,respond:c}}return n.length>1?(await Promise.all(n.map(n=>je($t,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,Tt(n,jt(t)),i,Mt(r,n),void 0,a))),{event:null,respond:void 0}):{event:i,respond:c}}}return{event:i,respond:c}}function _t(e){return e&&xe(e)?e:{}}function Rt(e){return"string"==typeof e||!(!Array.isArray(e)||!e.every(e=>"string"==typeof e))}async function Bt(e,t,n){if(!t.on||!t.queueOn?.length)return;const o=t.queueOn;t.queueOn=[];const r=n||t.config?.id||"unknown";for(const{type:n,data:s}of o)Qt(n)&&!Zt(e,t,n)||(await he(t.on,t=>{if(t instanceof fe)throw t;e.status.failed++,e.logger.scope("source").error("source on flush failed",{sourceId:r,type:n,error:t})})(n,s),Qt(n)&&Xt(e,t,n))}function Nt(e){return Boolean(e.config.init)&&!e.config.require?.length}function Gt(e){return"object"==typeof e&&null!==e}async function Ht(e,t,n){const{code:o,config:r={},env:s={},primary:a,next:i,before:c,cache:u}=n,l=r.state??n.state,d=l?Ie(l):void 0,f=u,p=f?ve({...f,stop:f.stop??!0}):void 0,g=Rt(i)?Tt(i,jt(e.transformers)):void 0,h=Rt(c)?Tt(c,jt(e.transformers)):void 0,m=s.push,v=m??e.push,y=Boolean(m),w=async(n,o,s)=>{let a;const u=h??(void 0!==c?(()=>{const t=me(c,ke(s.ingest));return 0===t.length?[]:Tt(1===t.length?t[0]:t,jt(e.transformers))})():[]);let l=[n];if(u.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const o=await $t(e,e.transformers,u,n,s.ingest,s.respond,`source.${t}.before`);if(null===o.event)return{ok:!0};if(o.stopped)return o.respond&&(s.respond=o.respond),{ok:!0};o.respond&&(s.respond=o.respond),l=Array.isArray(o.event)?o.event:[o.event]}if(p){const t=xt(p,e);if(t){const n=ke(s.ingest),o=await ye(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 be(t,o.rule.update,{...n,cache:{status:"HIT"}},e)),s.respond?.(t),{ok:!0}}if("MISS"===o.status&&p.stop&&s.respond){const r=s.respond,i=o.rule.update,c={...n,cache:{status:"MISS"}},u=o.key,l=o.rule.ttl,d=n=>{we(t,u,n,l),i?a=(async()=>{const t=await be(n,i,c,e);r(t)})():r(n)};s.respond=d}"MISS"!==o.status||p.stop||we(t,o.key,!0,o.rule.ttl)}}}const f=g?{kind:"single",preChain:g}:void 0!==i?(()=>{const t=me(i,ke(s.ingest));return 0===t.length?{kind:"single",preChain:[]}:1===t.length?{kind:"single",preChain:Tt(t[0],jt(e.transformers))}:{kind:"many",branches:t.map(t=>Tt(t,jt(e.transformers)))}})():{kind:"single",preChain:[]};!y&&d&&d.length>0&&(l=await Promise.all(l.map(t=>Se(d,t=>Ct(t,e),t,e))));let m={ok:!0};for(const n of l)"many"===f.kind?(await Promise.all(f.branches.map((a,i)=>he(async()=>y?v(n):v(n,{...o,id:t,ingest:Mt(s.ingest,`${t}.${i}`),respond:void 0,mapping:r,preChain:a}),t=>(e.logger.scope("source:many").error(`many branch ${i} failed`,{error:t}),{ok:!0}))())),m={ok:!0}):m=y?await v(n):await v(n,{...o,id:t,ingest:s.ingest,respond:s.respond,mapping:r,preChain:f.preChain});return a&&await a,m},b=async n=>{const o=de(t),s=ge(function(e){if(!Gt(e))return;const t=e.headers;if(Gt(t)){if("get"in(n=t)&&"function"==typeof n.get)return t.get("traceparent")??void 0;if("traceparent"in t)return t.traceparent;for(const e of Object.keys(t))if("traceparent"===e.toLowerCase())return t[e]}var n}(n));if(s&&(o._meta.trace=s.trace,o._meta.parentEventId=s.parentSpan),!r.ingest||void 0===n)return o;const a=await pe(n,r.ingest,{collector:e});return{...o,...a,_meta:o._meta}},k=e.logger.scope("source").scope(t),I={command:e.command,sources:e.sources,elb:e.elb,logger:k,...s,push:async(e,n={})=>{const o={ingest:de(t),respond:void 0};return w(e,n,o)}},S={collector:e,logger:k,id:t,config:r,env:I,withScope:async(e,t,n)=>{const o={ingest:await b(e),respond:t};return n({...I,push:(e,t={})=>w(e,t,o),ingest:o.ingest,respond:o.respond})},reportError:qt(e,"source",t,k)},E=await he(o,n=>{if(n instanceof fe)throw n;e.status.failed++,e.logger.scope("source").error("source factory failed",{sourceId:t,error:n})})(S);if(!E)return;const O=E.type||"unknown",q=e.logger.scope(O).scope(t);return I.logger=q,a&&(E.config={...E.config,primary:a}),E}async function zt(e){for(const[t,n]of Object.entries(e.sources)){if(Nt(n))continue;const o=n.config.require;if(!o?.length)continue;const r=o.filter(t=>!Vt(e,t));r.length!==o.length&&(n.config.require=r,Nt(n)&&await Bt(e,n,t))}for(const[t,n]of Object.entries(e.pending.destinations)){if(!e.pending.destinations[t]||e.destinations[t])continue;const o=n.config?.require;if(!o)continue;const r=o.filter(t=>!Vt(e,t));if(n.config&&(n.config.require=r),r.length>0)continue;delete e.pending.destinations[t];const s=yn(n);!1!==s.config.queue&&(s.queuePush=[...e.queue]),e.destinations[t]=s}}function Ut(e){if("object"!=typeof e||null===e)return!1;if(!("logger"in e))return!1;const t=e.logger;return"object"==typeof t&&null!==t&&"scope"in t&&"function"==typeof t.scope}var Kt=!1;function Lt(){Kt||(Kt=!0,"undefined"!=typeof console&&"function"==typeof console.warn&&console.warn("walkerOS: ignored an on-dispatch call with a non-collector argument"))}function Ft(e,t,n,o){if(n instanceof ie)throw n;e.logger.scope("on").error("on callback failed",{kind:t,...o,error:n})}var Wt=[ct.Consent,ct.User,ct.Globals,ct.Custom];function Qt(e){return Wt.includes(e)}function Jt(e,t){switch(t){case ct.Consent:return Object.keys(e.consent).length>0;case ct.User:return Object.keys(e.user).length>0;case ct.Globals:return Object.keys(e.globals).length>0;case ct.Custom:return Object.keys(e.custom).length>0;default:return!1}}function Vt(e,t){switch(t){case ct.Consent:case ct.User:case ct.Globals:case ct.Custom:return Jt(e,t);case ct.Run:case ct.Ready:return!0===e.allowed;default:return e.seenEvents.has(String(t))}}function Yt(e,t){return e.cellVersion[String(t)]??0}function Xt(e,t,n){let o=e.delivery.get(t);o||(o={},e.delivery.set(t,o)),o[String(n)]=Yt(e,n)}function Zt(e,t,n){return e.allowed&&Yt(e,n)>function(e,t,n){const o=e.delivery.get(t),r=o?.[String(n)];return void 0===r?-1:r}(e,t,n)}function en(e,t,n){const o=e.cascade;if(!o)return!0;let r=o.counts.get(t);r||(r={},o.counts.set(t,r));const s=String(n),a=(r[s]||0)+1;return r[s]=a,a<=8||(9===a&&e.logger.error("state delivery did not converge",{type:s}),!1)}function tn(e,t){return{collector:e,logger:e.logger.scope("on").scope(String(t))}}function nn(e,t,n,o,r){if(!t.on)return;const s=t.type||"unknown",a=e.logger.scope(s).scope("on").scope(o),i={collector:e,logger:a,id:n,config:t.config,data:r,env:wn(t.env,t.config.env),reportError:qt(e,"destination",n,a,t)};ce(t.on,t=>Ft(e,"destination",t,{destId:n,type:o}))(o,i)}function on(e,t,n,o){if(!Ut(e))return void Lt();const r=rn(e,t,o);if(n.length)switch(t){case ct.Consent:!function(e,t,n){const o=n||e.consent,r=tn(e,ct.Consent);t.forEach(t=>{Zt(e,t,ct.Consent)&&en(e,t,ct.Consent)&&(Object.keys(o).filter(e=>e in t).forEach(n=>{ce(t[n],t=>Ft(e,"consent",t,{key:n}))(o,r)}),Xt(e,t,ct.Consent))})}(e,n,o);break;case ct.Ready:!function(e,t){if(!e.allowed)return;const n=tn(e,ct.Ready);t.forEach(t=>{ce(t,t=>Ft(e,"ready",t))(void 0,n)})}(e,n);break;case ct.Run:!function(e,t){if(!e.allowed)return;const n=tn(e,ct.Run);t.forEach(t=>{ce(t,t=>Ft(e,"run",t))(void 0,n)})}(e,n);break;case ct.Session:!function(e,t){if(!e.session)return;const n=tn(e,ct.Session);t.forEach(t=>{ce(t,t=>Ft(e,"session",t))(e.session,n)})}(e,n);break;default:{const o=tn(e,t),s=Qt(t);n.forEach(n=>{"function"==typeof n&&(s&&!Zt(e,n,t)||s&&!en(e,n,t)||(ce(n,n=>Ft(e,"generic",n,{type:t}))(r,o),s&&Xt(e,n,t)))});break}}}function rn(e,t,n){switch(t){case ct.Consent:return n||e.consent;case ct.Session:return e.session;case ct.User:return n||e.user;case ct.Custom:return n||e.custom;case ct.Globals:return n||e.globals;case ct.Config:return n||e.config;default:return}}async function sn(e,t,n,o,r){if(!t.on)return!1;if(Qt(o)&&!Zt(e,t,o))return!1;if(Qt(o)&&!en(e,t,o))return!1;const s=await ue(t.on,t=>Ft(e,"source",t,{sourceId:n,type:o}))(o,r);return Qt(o)&&Xt(e,t,o),!1===s}function an(e){return"number"==typeof e&&e>0?e:1e4}var cn=class extends Error{constructor(e){super(e),this.name="DestinationTimeoutError"}};function un(e,t,n){let o;const r=new Promise((e,r)=>{o=setTimeout(()=>r(new cn(n)),t)});return Promise.race([e,r]).finally(()=>{o&&clearTimeout(o)})}var ln=Object.freeze({batched:!0});function dn(e){return e===ln}function fn(e){return void 0===e?{}:"number"==typeof e?{wait:e}:{wait:e.wait,size:e.size,age:e.age}}function pn(e,t,n){if(!e)return[];if(Array.isArray(e)&&e.every(e=>"string"==typeof e))return Tt(e,t);if("string"==typeof e)return Tt(e,t);const o=W(e,R(n));return 0===o.length?[]:1===o.length?Tt(o[0],t):Tt(o,t)}async function gn(e,t,n={},o){const{allowed:r,consent:s,globals:a,user:i}=e;if(!r)return vn({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=vt(e.queue,t,{max:n});if(o.dropped>0){const t=Ot(e.status,Z("collector"),"queue",o.dropped);wt(e.queue,e.logger,"collector.queue overflow; oldest events dropped",{buffer:"queue",cap:n,droppedCount:t})}else e.queue.length<n&&bt(e.queue);e.status.in++}o||(o=e.destinations);const c=e.transformers?jt(e.transformers):{},u=await Promise.all(Object.entries(o||{}).map(async([o,r])=>{if(r.config.disabled)return{id:o,destination:r,skipped:!0};const u=r.config.id||o,l=Z("destination",u),d=It(r.config.breaker);if(d&&function(e,t,n){const o=e[t];if(!o||"closed"===o.state)return!1;if("half-open"===o.state)return!0===o.probing;const r=kt();return void 0!==o.openUntil&&r<o.openUntil||(o.state="half-open",o.probing=!0,o.openUntil=r+n,!1)}(e.status.breakers,l,d.cooldown))return{id:o,destination:r,skipped:!0};const f=t=>{d&&St(e.status.breakers,l,t,d.threshold,d.cooldown)},p=()=>{d&&function(e,t){const n=e[t];n&&"half-open"===n.state&&!0===n.probing&&(n.state="open",n.probing=!1)}(e.status.breakers,l)};let g=(r.queuePush||[]).map(e=>({...e,consent:s}));r.queuePush=[],t&&g.push(B(t));const h=n.ingest?{...n.ingest,_meta:{...n.ingest._meta,path:[...n.ingest._meta.path]}}:z("unknown");if(!g.length&&!r.queueOn?.length)return p(),{id:o,destination:r,skipped:!0};if(!g.length&&r.queueOn?.length){if(!F(r.config.consent,s))return p(),{id:o,destination:r,skipped:!0};let t=!1;try{t=await hn(e,r,o,!0)}catch(t){e.status.failed++;const n=r.type||"unknown";e.logger.scope(n).error("destination init failed",{error:t instanceof Error?t.message:String(t)}),f("transport-failure")}return p(),{id:o,destination:r,skipped:!t}}const m=[],v=g.filter(t=>{const n=F(r.config.consent,s,t.consent);if(n)return t.consent=n,m.push(t),!1;const a=lt(e,{stepId:Z("destination",o),stepType:"destination",phase:"skip",eventId:"string"==typeof t.id?t.id:"",now:Date.now(),...ut(t,h,e)});return a.skipReason="consent",s&&(a.consent={...s}),r.config.consent&&(a.meta={required:{...r.config.consent}}),K(e,a),!0});if(v.length>0){const t=r.queuePush,n=r.config.id||o,s={max:r.config.queueMax??1e3};let a=0;for(const e of v)a+=vt(t,e,s).dropped;if(a>0){Et(e,n);const o=Ot(e.status,Z("destination",n),"queue",a);wt(t,e.logger.scope(r.type||"unknown"),"destination.queuePush overflow; oldest events dropped",{buffer:"queuePush",destination:n,cap:s.max,droppedCount:o})}else t.length<s.max&&bt(t)}if(!m.length)return p(),{id:o,destination:r,queue:g};let y,w,b=!1;try{b=await hn(e,r,o,!0)}catch(t){e.status.failed++;const n=r.type||"unknown";e.logger.scope(n).error("destination init failed",{error:t instanceof Error?t.message:String(t)}),f("transport-failure")}if(!b)return p(),{id:o,destination:r,queue:g};r.dlq||(r.dlq=[]);const k=pn(r.config.before,c,h),I=r.config.next,S=r.config?.cache,E=S?N(S):void 0,O=E?xt(E,e):void 0,q=r.config?.state?ne(r.config.state):void 0,x=q?.filter(e=>"get"===e.mode),C=q?.filter(e=>"set"===e.mode);let j=0,A=0;return await Promise.all(m.map(async t=>{let s;if(t.globals=_(a,t.globals),t.user=_(i,t.user),E?.stop&&O){const e=R(h,t),n=await G(E,O,e);if("HIT"===n?.status)return t;"MISS"===n?.status&&(s={key:n.key,ttl:n.rule.ttl})}let u=t,l=n.respond;if(k.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const r=await $t(e,e.transformers,k,t,h,n.respond,`destination.${o}.before`);if(null===r.event)return t;r.respond&&(l=r.respond),u=Array.isArray(r.event)?r.event[0]:r.event}if(E&&!E.stop&&O){const e=R(h,u),n=await G(E,O,e);if("HIT"===n?.status)return t;"MISS"===n?.status&&(s={key:n.key,ttl:n.rule.ttl})}x&&x.length>0&&u&&(u=await oe(x,t=>Ct(t,e),u,e));const d=Date.now();let f=!1;const p=await ee(mn,t=>{const n=r.type||"unknown";e.logger.scope(n).error("Push failed",{error:t,event:u.name}),y=t,f=!0;const s=r.dlq,a=r.config.id||o,i={max:r.config.dlqMax??100},c=vt(s,[u,t],i);if(c.dropped>0){Et(e,a);const t=Ot(e.status,Z("destination",a),"dlq",c.dropped);wt(s,e.logger.scope(r.type||"unknown"),"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:a,cap:i.max,droppedCount:t})}else s.length<i.max&&bt(s)})(e,r,o,u,h,l);if(j+=Date.now()-d,s&&O&&void 0===r.config.mock&&H(O,s.key,p??!0,s.ttl),!f&&!dn(p)&&C&&C.length>0&&u&&(u=await oe(C,t=>Ct(t,e),u,e)),void 0===p||dn(p)||(w=p),dn(p)&&A++,!f&&I){void 0!==p&&(h._response=p);const t=pn(I,c,h);if(t.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const n=await $t(e,e.transformers,t,u,h,l,`destination.${o}.next`);n.respond&&(l=n.respond)}}return t})),{id:o,destination:r,error:y,response:w,totalDuration:j,batchedCount:A,allowedCount:m.length,canonicalId:u,breakerConfig:d}})),l={},d={},f={};for(const t of u){if(t.skipped)continue;const n=t.destination,o={type:n.type||"unknown",data:t.response};Et(e,t.id);const r=e.status.destinations[t.id],s=Date.now();r.queuePushSize=n.queuePush?.length??0,r.dlqSize=n.dlq?.length??0;const a=t.breakerConfig,i=t.canonicalId?Z("destination",t.canonicalId):void 0,c=t=>{a&&i&&St(e.status.breakers,i,t,a.threshold,a.cooldown)};if(t.error)o.error=t.error,f[t.id]=o,r.failed++,r.lastAt=s,r.duration+=t.totalDuration||0,e.status.failed++,c("transport-failure");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,r.count++,r.lastAt=s,r.duration+=t.totalDuration||0,e.status.out++,c("success"))}}return vn({event:t,...Object.keys(l).length&&{done:l},...Object.keys(d).length&&{queued:d},...Object.keys(f).length&&{failed:f}})}async function hn(e,t,n,o=!1){if(t.init&&!t.config.init){if(!o&&function(e){const t=e.config.consent;return!!t&&Object.keys(t).length>0}(t))return e.logger.scope(t.type||"unknown").debug("init blocked: consent gate not cleared"),!1;const r=t.type||"unknown",s=e.logger.scope(r),a={collector:e,logger:s,id:n,config:t.config,env:wn(t.env,t.config.env),reportError:qt(e,"destination",n,s,t)};s.debug("init");const i=Date.now();let c;K(e,lt(e,{stepId:Z("destination",n),stepType:"destination",phase:"init",eventId:"",now:i}));try{c=await te(t.init,"DestinationInit",e.hooks,e.logger)(a)}catch(t){const o=Date.now(),r=lt(e,{stepId:Z("destination",n),stepType:"destination",phase:"error",eventId:"",now:o});throw r.durationMs=o-i,r.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},K(e,r),t}if(!1===c)return c;if(t.config={...c||t.config,init:!0},t.queueOn?.length){const o=t.queueOn;t.queueOn=[];for(const{type:r,data:s}of o)nn(e,t,n,r,s)}s.debug("init done")}return!0}async function mn(e,t,n,o,r,s){const{config:a}=t,i=await X(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:r,env:{...wn(t.env,a.env),...s?{respond:s}:{}},reportError:qt(e,"destination",n,u,t)};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:[]},r=fn(d?.batch),s=fn(a.batch),i=r.wait??s.wait??3e4,c=r.size??s.size??1e3,l=r.age??s.age??3e4,g=wn(t.env,a.env),h=U(async()=>{const o=t.batches[p],r=o.batched;if(0===r.entries.length)return;const s={key:r.key,entries:r.entries,events:r.events,data:r.data};r.entries=[],r.events=[],r.data=[];const i=s.entries[0],{traceId:c,sourceId:l,parentEventId:d}=ut(i.event,i.ingest,e),f={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}:{}},reportError:qt(e,"destination",n,u,t)};u.debug("push batch",{events:s.entries.length});const h=t.config.id||n,m=Et(e,h),v=It(t.config.breaker),y=Z("destination",h),w=t=>{v&&St(e.status.breakers,y,t,v.threshold,v.cooldown)},b=Date.now(),k=lt(e,{stepId:Z("destination",n),stepType:"destination",phase:"flush",eventId:"",now:b,traceId:c,sourceId:l,parentEventId:d});k.batch={size:s.entries.length,index:0},K(e,k);const I=n=>{const o=t.dlq=t.dlq||[],r={max:t.config.dlqMax??100};let s=0;for(const e of n)s+=vt(o,e,r).dropped;if(s>0){const t=Ot(e.status,Z("destination",h),"dlq",s);wt(o,u,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:h,cap:r.max,droppedCount:t})}else o.length<r.max&&bt(o);m.failed+=n.length,m.dlqSize=o.length,e.status.failed+=n.length};let S=s.entries.length;const E=an(a.timeout),O=await ee((o,r)=>un(Promise.resolve(te(t.pushBatch,"DestinationPushBatch",e.hooks,e.logger)(o,r)),E,`Destination "${n}" batch delivery timed out after ${E}ms`),t=>{S=0;const o=Date.now(),r=lt(e,{stepId:Z("destination",n),stepType:"destination",phase:"error",eventId:"",now:o,traceId:c,sourceId:l,parentEventId:d});r.durationMs=o-b,r.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},r.batch={size:s.entries.length,index:0},K(e,r),I(s.entries.map(e=>[e.event,t])),w("transport-failure"),u.error("Push batch failed",{error:t instanceof Error?t.message:String(t),entries:s.entries.length})})(s,f);if(V(q=O)&&Array.isArray(q.failed)&&O.failed.length>0){const e=[],t=new Set;for(const n of O.failed){const o=s.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&&(I(e),S=Math.max(0,s.entries.length-e.length),u.error("Push batch partial failure",{failed:e.length,delivered:S,entries:s.entries.length}))}var q;u.debug("push batch done"),m.inFlightBatch=Math.max(0,(m.inFlightBatch??0)-s.entries.length),S>0&&(m.count+=S,m.lastAt=Date.now(),e.status.out+=S,w("success"))},{wait:i,size:c,age:l});t.batches[p]={batched:o,isDefault:!f,batchFn:()=>{h()},flush:async()=>{await h.flush()}}}const c=t.batches[p];c.batched.entries.push({event:i.event,ingest:r,respond:s,rule:d,data:i.data}),c.batched.events.push(i.event),Q(i.data)&&c.batched.data.push(i.data);const l="string"==typeof i.event.id?i.event.id:"",g=ut(o,r,e),h=Date.now(),m=lt(e,{stepId:Z("destination",n),stepType:"destination",phase:"in",eventId:l,now:h,traceId:g.traceId,sourceId:g.sourceId,parentEventId:g.parentEventId});i.mappingKey&&(m.mappingKey=i.mappingKey),i.event.consent&&(m.consent={...i.event.consent}),m.inEvent=i.event,K(e,m);const v=lt(e,{stepId:Z("destination",n),stepType:"destination",phase:"out",eventId:l,now:h,traceId:g.traceId,sourceId:g.sourceId,parentEventId:g.parentEventId});i.mappingKey&&(v.mappingKey=i.mappingKey),v.outEvent=i.event,v.batch={size:c.batched.entries.length,index:c.batched.entries.length-1},K(e,v);const y=t.config.id||n,w=Et(e,y);return w.inFlightBatch=(w.inFlightBatch??0)+1,c.batchFn(),ln}{let s;if(u.debug("push",{event:i.event.name}),"trace"===e.observeLevel?.()&&Array.isArray(t.calls)&&t.calls.length>0){const e=pt({...l.env,simulation:t.calls});l.env=e.wrappedEnv,s=e.calls,e.unresolved.length>0&&(e.wrappedEnv[Y]={paths:e.unresolved,record:(t,n)=>e.calls.push({fn:t,args:n,ts:Date.now()})})}const c="string"==typeof i.event.id?i.event.id:"",{traceId:d,sourceId:f,parentEventId:p}=ut(o,r,e),g=Date.now(),h=lt(e,{stepId:Z("destination",n),stepType:"destination",phase:"in",eventId:c,now:g,traceId:d,sourceId:f,parentEventId:p});i.mappingKey&&(h.mappingKey=i.mappingKey),i.event.consent&&(h.consent={...i.event.consent}),h.inEvent=i.event,K(e,h);try{const o=an(a.timeout),r=await un(Promise.resolve(te(t.push,"DestinationPush",e.hooks,e.logger)(i.event,l)),o,`Destination "${n}" delivery timed out after ${o}ms`),h=Date.now(),m=lt(e,{stepId:Z("destination",n),stepType:"destination",phase:"out",eventId:c,now:h,traceId:d,sourceId:f,parentEventId:p});return m.durationMs=h-g,m.outEvent=i.event,s&&s.length>0&&(m.calls=mt(s)),Q(r)&&(m.meta={...m.meta,response:r}),i.mappingKey&&(m.mappingKey=i.mappingKey),K(e,m),u.debug("push done"),r}catch(t){const o=Date.now(),r=lt(e,{stepId:Z("destination",n),stepType:"destination",phase:"error",eventId:c,now:o,traceId:d,sourceId:f,parentEventId:p});throw r.durationMs=o-g,r.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},s&&s.length>0&&(r.calls=mt(s)),i.mappingKey&&(r.mappingKey=i.mappingKey),K(e,r),t}}}function vn(e){return{ok:!e?.failed,...e}}function yn(e){const{code:t,config:n={},env:o={},cache:r,state:s}=e,{config:a}=At(e,"before"),{config:i}=At({...e,config:a},"next"),c={...t.config,...n,...i};r&&(c.cache=r),void 0!==s&&void 0===c.state&&(c.state=s);const u=wn(t.env,o);return{...t,config:c,env:u}}function wn(e,t){return e||t?t?e&&V(e)&&V(t)?{...e,...t}:t:e:{}}async function bn(e,t,n){const o=Object.entries(e).map(async([e,o])=>{const r=o.destroy;if(!r)return;const s=o.type||"unknown",a=n.scope(s),i={id:e,config:o.config,env:o.env??{},logger:a};let c;try{await Promise.race([r(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 kn(e,t){e.stateVersion++,e.cellVersion[t]=e.stateVersion}async function In(e,t,n){let o,r,s=!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 ct.Config:Le(n)&&(Ge(e.config,n,{shallow:!1}),r=n,s=!0);break;case ct.Consent:if(Le(n)){const{update:t}=function(e,t){const n={};return Object.entries(t).forEach(([e,t])=>{n[e]=!!t}),e.consent=j(e.consent,n),{update:n}}(e,n);kn(e,ct.Consent),r=t,s=!0}break;case ct.Custom:Le(n)&&(e.custom=Ge(e.custom,n),kn(e,ct.Custom),r=n,s=!0);break;case ct.Destination:Le(n)&&"code"in n&&Le(n.code)&&(o=await async function(e,t){const{code:n,config:o={},env:r={},before:s,next:a,cache:i,state:c}=t;if(!J(n.push))return vn({ok:!1,failed:{invalid:{type:"invalid",error:"Destination code must have a push method"}}});const u=o||{init:!1};let l=s?{...u,before:s}:{...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=L(5,"abcdefghijklmnopqrstuvwxyz")}while(e.destinations[d]||e.pending.destinations[d]);if(l.require?.length){e.pending.destinations[d]=t,await zt(e);const n=e.destinations[d];return n?gn(e,void 0,{},{[d]:n}):vn({ok:!0})}const f={...n,config:l,env:wn(n.env,r)};return e.destinations[d]=f,!1!==f.config.queue&&(f.queuePush=[...e.queue]),gn(e,void 0,{},{[d]:f})}(e,n));break;case ct.Globals:Le(n)&&(e.globals=Ge(e.globals,n),kn(e,ct.Globals),r=n,s=!0);break;case ct.Hook:if(Le(n)&&Ke(n.name)&&Ue(n.fn)){const{name:t,fn:o}=n;e.hooks[t]=o,r=n,s=!0}break;case ct.On:if(Le(n)&&Ke(n.type)){const{type:t,rules:o}=n;await async function(e,t,n){if(!Ut(e))return void Lt();const o=e.on,r=o[t]||[],s=ae(n)?n:[n];s.forEach(e=>{r.push(e)}),o[t]=r,on(e,t,s)}(e,t,o)}break;case ct.Ready:s=!0;break;case ct.Run:o=await async function(e,t){return e.allowed=!0,e.timing=Date.now(),e.trace=ze(),e.count=0,t&&(t.consent&&(e.consent=Ge(e.consent,t.consent),kn(e,ct.Consent)),t.user&&(e.user=Ge(e.user,t.user),kn(e,ct.User)),t.globals&&(e.globals=Ge(e.config.globalsStatic||{},t.globals),kn(e,ct.Globals)),t.custom&&(e.custom=Ge(e.custom,t.custom),kn(e,ct.Custom))),Object.values(e.destinations).forEach(e=>{e.queuePush=[]}),e.queue=[],e.round++,await zt(e),await async function(e){if(Ut(e))for(const t of Wt){if(!Jt(e,t))continue;const n=rn(e,t);on(e,t,e.on[t]||[]);for(const[o,r]of Object.entries(e.sources))Nt(r)&&await sn(e,r,o,t,n)}else Lt()}(e),await gn(e)}(e,n),s=!0;break;case ct.Session:s=!0;break;case ct.Shutdown:e.hasShutdown||(e.hasShutdown=!0,await async function(e){const t=e.logger;await bn(e.sources,"source",t),await async function(e,t){const n=Object.entries(e).flatMap(([e,n])=>{const o=n.batches;if(!o)return[];const r=t.scope(n.type||"destination");return Object.values(o).map(async t=>{let n;try{await Promise.race([t.flush(),new Promise((t,o)=>{n=setTimeout(()=>o(new Error(`destination '${e}' batch flush timed out`)),5e3)})])}catch(t){r.error(`destination '${e}' batch flush failed: ${t}`)}finally{n&&clearTimeout(n)}})});await Promise.allSettled(n)}(e.destinations,t),await bn(e.destinations,"destination",t),await bn(e.transformers,"transformer",t),await bn(e.stores,"store",t)}(e));break;case ct.User:Le(n)&&(Ge(e.user,n,{shallow:!1}),kn(e,ct.User),r=n,s=!0);break;default:return e.logger.warn("unknown command",{command:t}),vn({ok:!1})}return s&&(await async function(e,t,n,o){if(!Ut(e))return Lt(),!0;e.seenEvents.add(String(t));let r=n||[];n||(r=e.on[t]||[]);const s=rn(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&&(Nt(o)?await sn(e,o,n,t,s)&&(a=!0):(o.queueOn=o.queueOn||[],o.queueOn.push({type:t,data:s})))}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:s});nn(e,o,n,t,s)}});for(const[t,n]of Object.entries(e.sources))Nt(n)&&n.queueOn?.length&&await Bt(e,n,t);const i=Object.values(e.sources).some(e=>!Nt(e)&&e.config.require?.length);return(Object.keys(e.pending.destinations).length>0||i)&&await zt(e),on(e,t,r,o),!a}(e,t,void 0,r),o=await gn(e)),o||vn({ok:!0})}()}finally{a()}}function Sn(e,t){return{timing:Math.round((Date.now()-e.timing)/10)/100,source:{type:"collector",schema:"4"},...t}}function En(e,t,n){if(!t.name)throw new Error("Event name is required");const[o,r]=t.name.split(" ");if(!o||!r)throw new Error("Event name is invalid");const{timestamp:s=Date.now(),name:a=`${o} ${r}`,data:i={},context:c={},globals:u=e.globals,custom:l={},user:d=e.user,nested:f=[],consent:p=e.consent,id:g=He(),trigger:h="",entity:m=o,action:v=r,timing:y=0,source:w={type:"collector",schema:"4"}}=t,b=w.count??(e.count+=1),k=w.trace??n?._meta.trace??e.trace,I={...w,count:b};void 0!==k&&(I.trace=k);const S=e.name??w.platform??"default",E=e.release??"4.3.2";return I.release={...w.release,[S]:E},{name:a,data:i,context:c,globals:u,custom:l,user:d,nested:f,consent:p,id:g,trigger:h,entity:m,action:v,timestamp:s,timing:y,source:I}}function On(e,t){const n=Xe(async(n,o={})=>await Ye(async()=>{const r=Date.now(),{id:s,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??Fe(s||"unknown");if(c){const t=await Ve(p,c,e);if(t.ignore)return vn({ok:!0});if(c.consent&&!Je(c.consent,e.consent,t.event.consent))return vn({ok:!0});p=t.event}if(u?.length&&e.transformers&&Object.keys(e.transformers).length>0){const n=await $t(e,e.transformers,u,p,h,f,s?`source.${s}.next`:void 0);if(null===n.event)return e.logger.debug("Event dropped by transformer chain"+(n.droppedBy?` (${n.droppedBy})`:"")),vn({ok:!0,dropped:!0});if(n.stopped)return n.respond&&(f=n.respond),vn({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),r=En(e,o,h);return gn(e,r,{id:s,ingest:h,respond:f},g)}));if(s){e.status.sources[s]||(e.status.sources[s]={count:0,duration:0});const t=e.status.sources[s];t.count+=n.event.length,t.lastAt=Date.now(),t.duration+=Date.now()-r}return o[0]??vn({ok:!0})}p=n.event}const m=function(e,t,n){return En(e,Sn(e,t),n)}(e,p,h),v=await gn(e,m,{id:s,ingest:h,respond:f},g);if(s){e.status.sources[s]||(e.status.sources[s]={count:0,duration:0});const t=e.status.sources[s];t.count++,t.lastAt=Date.now(),t.duration+=Date.now()-r}return v},t=>{if(t instanceof Qe)throw t;return e.status.failed++,e.logger.error("push failed",{event:n,ingest:o.ingest,error:t}),vn({ok:!1})})(),"Push",e.hooks,e.logger);return async(t,o)=>{const r="string"==typeof t.id?t.id:"",{traceId:s,sourceId:a,parentEventId:i}=ut(t,o?.ingest,e),c=Date.now(),u=lt(e,{stepId:"collector.push",stepType:"collector",phase:"in",eventId:r,now:c,traceId:s,sourceId:a,parentEventId:i});u.inEvent=t,We(e,u);try{const u=await n(t,o),l=Date.now(),d=lt(e,{stepId:"collector.push",stepType:"collector",phase:"out",eventId:r,now:l,traceId:s,sourceId:a,parentEventId:i});return d.durationMs=l-c,d.outEvent=u,We(e,d),u}catch(t){const n=Date.now(),o=lt(e,{stepId:"collector.push",stepType:"collector",phase:"error",eventId:r,now:n,traceId:s,sourceId:a,parentEventId:i});throw o.durationMs=n-c,o.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},We(e,o),t}}}function qn(e={}){const t=e.maxEntries??1e4,n=e.lowWaterMark??.8,o=e.sweepIntervalMs??6e4,r=Math.floor(t*n),s=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 s)void 0!==o.expires&&o.expires<=e&&(s.delete(n),t++);a.evictions_ttl+=t},o),i&&"function"==typeof i.unref&&i.unref()),{type:"memory",config:{},get(e){const t=s.get(e);if(t)return void 0!==t.expires&&t.expires<=Date.now()?(s.delete(e),a.evictions_ttl++,void a.misses++):(s.delete(e),s.set(e,t),a.hits++,t.value);a.misses++},set(e,n,o){const i=!s.has(e);i||s.delete(e),s.set(e,{value:n,expires:void 0!==o?Date.now()+o:void 0}),a.writes++,i&&a.populates++,s.size>t&&function(){if(s.size<=t)return;const e=s.size-r;let n=0;for(const t of s.keys()){if(n>=e)break;s.delete(t),n++}a.evictions_entries+=n}()},delete(e){s.delete(e)&&a.deletes++},get counters(){return{...a}},destroy(){void 0!==i&&(clearInterval(i),i=void 0),s.clear()}}}function xn(e,t){const{cacheConfig:n,cacheStore:o,namespace:r,logger:s,storeId:a,collector:i}=t,c=(e,t)=>{if(!i)return;const n=lt(i,{stepId:`store.${a}`,stepType:"store",phase:"in",eventId:"",now:Date.now()});n.meta={op:"cache",cached:"hit"===t,status:t,key:e},st(i,n)},u={hits:0,misses:0,populates:0,writes:0,deletes:0,inflight_dedups:0},l=n.rules.map(e=>({match:e.match?rt(e.match):()=>!0,ttl:e.ttl})),d=e=>`${r}:${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),r=await o.get(n),s=at(r);if(void 0!==s){if(!("expired"in s))return u.hits++,c(t,"hit"),s.value;try{await o.delete(n)}catch(e){g("delete",t,e)}}const a=p.get(n);if(a)return u.inflight_dedups++,c(t,"hit"),a;u.misses++,c(t,"miss");const i=(async()=>{try{const r=await e.get(t);if(void 0===r)return;const s=f(t,r);if(s)try{const e=1e3*s.ttl;await o.set(n,it(r,e),e),u.populates++}catch(e){g("set",t,e)}return r}finally{p.delete(n)}})();return p.set(n,i),i},async set(t,n,r){u.writes++,await e.set(t,n,r);const s=f(t,n);if(s)try{const e=1e3*s.ttl;await o.set(d(t),it(n,e),e)}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`;s?s.warn(o,{error:n}):console.warn(o,n)}}function Cn(e,t,n){const o=`store.${n}`,r=ot(t.get,"StoreGet",e.hooks,e.logger),s=ot(t.set,"StoreSet",e.hooks,e.logger),a=ot(t.delete,"StoreDelete",e.hooks,e.logger);t.get=async t=>{const n=Date.now(),s=lt(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:n});s.meta={op:"get",key:t},nt(e,s);try{const s=await r(t),a=Date.now(),i=lt(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:a});return i.durationMs=a-n,i.meta={op:"get",key:t},nt(e,i),s}catch(r){const s=Date.now(),a=lt(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:s});throw a.durationMs=s-n,a.meta={op:"get",key:t},a.error=r instanceof Error?{name:r.name,message:r.message}:{message:String(r)},nt(e,a),r}},t.set=async(t,n,r)=>{const a=Date.now(),i=lt(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:a});i.meta={op:"set",key:t},nt(e,i);try{await s(t,n,r);const i=Date.now(),c=lt(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:i});c.durationMs=i-a,c.meta={op:"set",key:t},nt(e,c)}catch(n){const r=Date.now(),s=lt(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:r});throw s.durationMs=r-a,s.meta={op:"set",key:t},s.error=n instanceof Error?{name:n.name,message:n.message}:{message:String(n)},nt(e,s),n}},t.delete=async t=>{const n=Date.now(),r=lt(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:n});r.meta={op:"delete",key:t},nt(e,r);try{await a(t);const r=Date.now(),s=lt(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:r});s.durationMs=r-n,s.meta={op:"delete",key:t},nt(e,s)}catch(r){const s=Date.now(),a=lt(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:s});throw a.durationMs=s-n,a.meta={op:"delete",key:t},a.error=r instanceof Error?{name:r.name,message:r.message}:{message:String(r)},nt(e,a),r}}}async function jn(e){const t=M({globalsStatic:{},sessionStatic:{},run:!0,queueMax:1e3},e,{merge:!1,extend:!1}),n={level:e.logger?.level,handler:e.logger?.handler},o=$(n),r={...t.globalsStatic,...e.globals},s={allowed:!1,config:t,consent:e.consent||{},custom:e.custom||{},destinations:{},transformers:{},stores:{},globals:r,hooks:e.hooks||{},observers:new Set,logger:o,on:{},queue:[],round:0,count:0,stateVersion:0,cellVersion:{},delivery:new WeakMap,session:void 0,status:{startedAt:Date.now(),in:0,out:0,failed:0,sources:{},destinations:{},dropped:{},connectionErrors:{},breakers:{}},timing:Date.now(),user:e.user||{},sources:{},pending:{destinations:{}},hasShutdown:!1,seenEvents:new Set,push:void 0,command:void 0,elb:void 0};var a,i;void 0!==e.name&&(s.name=e.name),void 0!==e.release&&(s.release=e.release),s.push=On(s,e=>Sn(s,e)),s.command=(i=In,et(async(e,t,n)=>await tt(async()=>await i(a,e,t,n),n=>{if(n instanceof Ze)throw n;return a.status.failed++,a.logger.error("command failed",{command:e,data:t,error:n}),vn({ok:!1})})(),"Command",(a=s).hooks,a.logger)),s.elb=function(e){return async(t,n,o,r,s)=>{if("string"==typeof t&&t.startsWith("walker ")){const o=t.replace("walker ","");return e.command(o,n)}let a;if("string"==typeof t)a={name:t},n&&"object"==typeof n&&!Array.isArray(n)&&(a.data=n);else{if(!t||"object"!=typeof t||Array.isArray(t))return vn({ok:!1});a={...t},n&&"object"==typeof n&&!Array.isArray(n)&&(a.data={...a.data||{},...n})}return o&&"object"==typeof o&&(a.context=o),r&&Array.isArray(r)&&(a.nested=r),s&&"object"==typeof s&&(a.custom=s),e.push(a)}}(s);const c=e.stores||{};return s.stores=await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t)){const{code:t,config:s={},env:a={}}=r,i=e.logger.scope("store").scope(o),c={collector:e,logger:i,id:o,config:s,env:a,reportError:qt(e,"store",o,i)},u=await t(c);n[o]=u}const o=t,r=function(e){const t={};for(const n of Object.keys(e))t[n]="WHITE";const n=[],o=[];function r(s){const a=t[s];if("BLACK"===a)return;if("GRAY"===a){const e=o.indexOf(s),t=o.slice(-1===e?0:e).concat(s).join(" -> ");throw new Error(`Cycle in cache.store chain: ${t}`)}t[s]="GRAY",o.push(s);const i=e[s].cache?.store;if(void 0!==i){if(!(i in e))throw new Error(`Store "${s}" cache.store references "${i}", which is not declared in flow.stores`);r(i)}o.pop(),t[s]="BLACK",n.push(s)}for(const n of Object.keys(e))"WHITE"===t[n]&&r(n);return n}(o);for(const t of r){const r=o[t].cache;if(!r)continue;let s,a;void 0!==r.store?(s=n[r.store],a=r.store):(n.__cache||(n.__cache=qn()),s=n.__cache,a="__cache");const i=r.namespace??t;e.logger.scope("store-cache").scope(t).info(`store "${t}" caches with namespace "${i}:" via ${a}`),n[t]=xn(n[t],{storeId:t,cacheConfig:r,cacheStore:s,namespace:i,logger:e.logger.scope("store-cache").scope(t),collector:e})}for(const[t,o]of Object.entries(n))"__cache"!==t&&Cn(e,o,t);return n}(s,c),function(e,t,n){const o=new Map;for(const[n,r]of Object.entries(e))t[n]&&o.set(r,t[n]);if(0!==o.size)for(const e of[n.transformers,n.destinations,n.sources])if(e)for(const t of Object.values(e))r(t.env);function r(e){if(e)for(const[t,n]of Object.entries(e))if("object"==typeof n&&null!==n){const r=o.get(n);r&&(e[t]=r)}}}(c,s.stores,e),s.stores.__cache||(s.stores.__cache=qn()),s.destinations=await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t))r.config?.require?.length?e.pending.destinations[o]=r:n[o]=yn(r);return n}(s,e.destinations||{}),s.transformers=await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t)){const{code:t,env:s={}}=r,a=_e(r,"Transformer");if(!a.ok){e.logger.warn(`Transformer ${o} invalid (${a.code}): ${a.reason}. Skipping.`);continue}const{config:i}=At(r,"before"),{config:c}=At({...r,config:i},"next"),u=Object.keys(s).length>0?{...c,env:s}:c,{cache:l}=r,d=l?{...u,cache:l}:u,f=r.config?.state??r.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:Ee(o),config:p,env:s,reportError:qt(e,"transformer",o,g)},m=t??(e=>{const t=r.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,r]of Object.entries(o)){if("object"!=typeof r||null===r)continue;const o=r;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 Re(n,t,e.collector);return!o.ignore&&{event:o.event}}}}return{type:"pass",config:e.config,push:e=>({event:e})}}),v=await m(h);void 0!==r.before&&void 0===v.config?.before&&(v.config={...v.config??{},before:r.before}),void 0!==r.next&&void 0===v.config?.next&&(v.config={...v.config??{},next:r.next}),void 0!==f&&void 0===v.config?.state&&(v.config={...v.config??{},state:f}),n[o]=v}return n}(s,e.transformers||{}),s}var An=globalThis;function Tn(e){try{const t=An.window;if(!t)return;t.localStorage.getItem(A)===e&&t.localStorage.removeItem(A)}catch{}}function Dn(e,t){return void 0===t?e:n=>e({...n,release:t})}async function Pn(e){e=e||{};const t=await jn(e);(function(e,t){if(t.observers)for(const n of t.observers)e.observers.add(n);const n=t.observe;if(!n)return;const o=e.name??"default";if("binding"in n){const t=function(){const e=An.window,t=An.URLSearchParams;if(!e||!t)return null;try{const n=new t(e.location.search.replace(/^\?/,"")).getAll(A);return n.length>0?n[n.length-1]??null:null}catch{return null}}(),r=t??function(){try{return An.window?.localStorage.getItem(A)??null}catch{return null}}();if(!r)return;const s=P(r);if(!s)return void(null===t?(e.logger.warn("observe: malformed stored credential cleared"),Tn(r)):e.logger.warn("observe: malformed credential ignored"));if(s.pb!==n.binding)return void e.logger.warn("observe: credential binding mismatch, credential ignored");let a;!function(e){try{An.window?.localStorage.setItem(A,e)}catch{}}(r),null!==t&&function(){const e=An.window,t=An.URLSearchParams;if(e&&t)try{const n=e.location.href,o=n.indexOf("#"),r=o>=0?n.slice(o):"",s=o>=0?n.slice(0,o):n,a=s.indexOf("?"),i=a>=0?s.slice(0,a):s,c=new t(a>=0?s.slice(a+1):"");c.delete(A);const u=c.toString();e.history.replaceState({},"",`${i}${u?`?${u}`:""}${r}`)}catch{}}();const i=T({url:`${n.url}/ingest/${s.ses}`,token:s.secret,headers:{"X-Walkeros-Binding":n.binding},onStatus:t=>{401===t&&(Tn(r),a&&e.observers.delete(a))}});a=D(function(e,t){return void 0===t?e:n=>e({...n,flowId:t})}(Dn(i,e.release),n.flowId),{flowId:n.flowId??o,...void 0!==n.level?{level:n.level}:{},...void 0!==n.sample?{sample:n.sample}:{}}),e.observers.add(a);const c=n.level;return void(void 0!==c&&(e.observeLevel=()=>c))}if("off"===n.level)return;const r=n.level;void 0!==r&&(e.observeLevel=()=>r),e.observers.add(D(Dn(T({url:`${n.url}/ingest/${n.sessionId}`,token:n.token}),e.release),{flowId:o,level:n.level,sample:n.sample}))})(t,e),await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t)){const t=await Ht(e,o,r);if(!t)continue;const s=r.config?.require;t.config={...t.config,init:!1,...s?{require:[...s]}:{}},n[o]=t}Object.assign(e.sources,n);for(const t of Object.keys(n)){const n=e.sources[t];let o=!1;n.init&&await he(n.init.bind(n),n=>{if(n instanceof fe)throw n;o=!0,e.status.failed++,e.logger.scope("source").error("source init failed",{sourceId:t,error:n})})(),o||(n.config.init=!0,Nt(n)&&await Bt(e,n,t))}return await zt(e),n}(t,e.sources||{});const{consent:n,user:o,globals:r,custom:s}=e;n&&await t.command("consent",n),o&&await t.command("user",o),r&&await t.command("globals",r),s&&await t.command("custom",s),t.config.run&&await t.command("run");let a=t.elb;const i=Object.values(t.sources),c=i.find(e=>e.config.primary);return c?a=c.push:i.length>0&&(a=i[0].push),{collector:t,elb:a}}var Mn=async e=>{let t;return{get flow(){return t},trigger:()=>async n=>{if(!t){const n=await Pn(e);t={collector:n.collector,elb:n.elb}}const o=function(e){for(const t of Object.values(e.sources||{}))if("lambda"===t.type)return t}(t.collector);if(!o)throw new Error("Lambda source not found in collector");const r={awsRequestId:`test-${Date.now()}`},s=o.push,a=await s(n,r);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 $n(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 _n={};t(_n,{createTrigger:()=>Jn,env:()=>Rn,step:()=>Un});var Rn={};t(Rn,{push:()=>Hn,simulation:()=>zn});var Bn=()=>{},Nn={error:Bn,warn:Bn,info:Bn,debug:Bn,throw:e=>{throw"string"==typeof e?new Error(e):e},json:Bn,scope:()=>Nn},Gn=()=>()=>Promise.resolve({ok:!0}),Hn={get push(){return Gn()},get command(){return Gn()},get elb(){return Gn()},logger:Nn},zn=["AWS.SQSClient"],Un={};t(Un,{decoderText:()=>Fn,malformedJson:()=>Wn,orderComplete:()=>Ln,pageView:()=>Kn});var Kn={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"]]},Ln={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"]]},Fn={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"]]},Wn={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 Qn(e){if("object"!=typeof e||null===e)return!1;const t=e;return"sqs"===t.type&&"function"==typeof t.push}var Jn=async e=>{let t;return{get flow(){return t},trigger:()=>async n=>{if(!t){const n=await Pn(e);t={collector:n.collector,elb:n.elb}}const o=function(e){for(const t of Object.values(e.sources??{}))if(Qn(t))return t}(t.collector);if(!o)throw new Error("sqs source not registered in collector, ensure it is configured in sources");const r={MessageId:n.MessageId,Body:n.Body,ReceiptHandle:n.ReceiptHandle,Attributes:n.Attributes,MessageAttributes:n.MessageAttributes},s=await o.push(r),a=[];return s&&"object"==typeof s&&(s.acked&&a.push(["message.ack",n.MessageId]),s.nacked&&a.push(["message.nack",n.MessageId])),a}}};export{w as examples,n as schemas,_n 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.3.1",
4
+ "version": "4.3.2",
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.3.1",
4
+ "version": "4.3.2",
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.3.1"
26
+ "@walkeros/core": "4.3.2"
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.3.1"
33
+ "@walkeros/collector": "4.3.2"
34
34
  },
35
35
  "repository": {
36
36
  "url": "git+https://github.com/elbwalker/walkerOS.git",