@walkeros/server-source-aws 4.6.0-next-1788933594957 → 4.6.0
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 +2 -2
- package/dist/dev.js +1 -1
- package/dist/dev.mjs +1 -1
- package/dist/walkerOS.json +1 -1
- package/package.json +3 -3
package/CHANGELOG.md
CHANGED
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:()=>Et}),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),maxBatchSize:u.z.number().int().min(1).describe("Maximum number of events accepted in a single batch request").default(100),healthPath:u.z.string().describe("Health check endpoint path (e.g., /health)").default("/health")}),h=(0,c.zodToSchema)(g),m=require("@walkeros/core/dev"),v=require("@walkeros/core/dev"),y=v.z.object({queueName:v.z.string().min(1).describe("SQS queue short name (like walkeros-events). Required for both setup and runtime poll."),region:v.z.string().describe("AWS region (like eu-central-1). Default: eu-central-1.").optional(),queueUrl:v.z.string().url().describe("Optional pre-resolved queue URL. When set, init skips the GetQueueUrl lookup.").optional(),client:v.z.any().describe("Pre-configured AWS SQSClient instance. Bypasses construction when supplied.").optional(),config:v.z.any().describe("AWS SDK SQSClientConfig (credentials, endpoint overrides, retries).").optional(),decoder:v.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:v.z.number().int().min(1).max(10).describe("SQS receive batch size. Cap 10. Default: 10.").optional(),waitTimeSeconds:v.z.number().int().min(0).max(20).describe("Long-poll duration in seconds. Cap 20. Default: 20.").optional(),visibilityTimeout:v.z.number().int().nonnegative().describe("Per-receive visibility timeout override. Default: queue-configured value.").optional(),shutdownTimeoutMs:v.z.number().int().positive().describe("Graceful shutdown timeout in milliseconds. Default: 30000. After this window, destroy() force-closes.").optional(),onPushError:v.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)(y),S=(0,m.zodToSchema)(k),E={};s(E,{createTrigger:()=>It,env:()=>O,step:()=>A,trigger:()=>St});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,lambdaPostForwardsSource:()=>M});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({name:"page view",data:{title:"Home"}}),isBase64Encoded:!1},out:[["elb",{name:"page view",data:{title:"Home"}}]]},D={title:"API Gateway v1 POST",description:"A REST API Gateway v1 POST request with a JSON body is converted into a walker elb event.",trigger:{type:"POST"},in:{httpMethod:"POST",path:"/collect",requestContext:{requestId:"req-789",identity:{sourceIp:"203.0.113.42"}},queryStringParameters:null,body:JSON.stringify({name:"page view",data:{title:"Home"}}),isBase64Encoded:!1},out:[["elb",{name:"page view",data:{title:"Home"}}]]},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={title:"Lambda POST with provenance",description:"A POST body carrying a source map is forwarded in full, so release and trace provenance survive the crossing.",trigger:{type:"POST"},in:{version:"2.0",requestContext:{http:{method:"POST",path:"/collect"},requestId:"req-321"},body:JSON.stringify({name:"page view",data:{title:"Home"},source:{release:{web:"r1"}}}),isBase64Encoded:!1},out:[["elb",{name:"page view",data:{title:"Home"},source:{release:{web:"r1"}}}]]},z=require("@walkeros/core"),$=require("@walkeros/core"),_=require("@walkeros/core"),R=require("@walkeros/core"),B=(require("@walkeros/core"),require("@walkeros/core")),H=require("@walkeros/core"),N=require("@walkeros/core"),G=require("@walkeros/core"),K=require("@walkeros/core"),F=require("@walkeros/core"),U=require("@walkeros/core"),L=require("@walkeros/core"),Q=require("@walkeros/core"),V=require("@walkeros/core"),W=require("@walkeros/core"),J=require("@walkeros/core"),Y={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 X(e,t,n){return{traceId:e.source?.trace??t?._meta.trace??n.trace,sourceId:t?._meta.path[0],parentEventId:t?._meta.parentEventId}}function Z(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 ee(e){return"object"==typeof e&&null!==e}function te(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(te(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:te(s,t,n+1);return r}function ne(e){const t=[],n=[],{simulation:o,...r}=e,s=te(r,new WeakMap,0);for(const e of o){const o=(0,B.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(!ee(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 oe(e,t){try{return e[t]}catch{return"[unreadable]"}}function re(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(oe(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 se(e){return e.map(e=>({fn:e.fn,args:re(e.args),ts:e.ts}))}function ie(e,t,n,o){if(!Number.isFinite(n.max)||n.max<=0)throw new Error(`pushBounded: max must be > 0 (got ${n.max})`);if("dropNewest"===(n.onOverflow??"dropOldest"))return e.length>=n.max?(o&&o([t]),{appended:!1,dropped:1}):(e.push(t),{appended:!0,dropped:0});const 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 ae=new WeakMap;function ce(e,t,n,o){ae.get(e)||(ae.set(e,!0),t.warn(n,o))}function ue(e){ae.delete(e)}var de=()=>Date.now();function le(e){if(void 0!==e)return"number"==typeof e?{threshold:e,cooldown:3e4}:{threshold:e.threshold??5,cooldown:e.cooldown??3e4}}function pe(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=de()+r)):void(s.consecutiveFailures>=o&&(s.state="open",s.probing=!1,s.openUntil=de()+r)))}function fe(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 ge(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 he(e){const t={error:e instanceof Error?e.message:String(e)};if(e instanceof Error&&e.name&&"Error"!==e.name&&(t.name=e.name),"object"==typeof e&&null!==e&&"code"in e){const n=e;"number"!=typeof n.code&&"string"!=typeof n.code||(t.code=n.code)}return t}function me(e,t,n,o,r){const s=(0,G.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=ie(i,[o,r],a);if(c.dropped>0){const t=ge(e.status,(0,G.stepId)("destination",n),"dlq",c.dropped);ce(i,s,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:n,cap:a.max,droppedCount:t})}else i.length<a.max&&ue(i);const u=fe(e,n);u.failed++,u.dlqSize=i.length,e.status.failed++;const d=le(t.config.breaker);if(d){const o=t.config.id||n;pe(e.status.breakers,(0,G.stepId)("destination",o),"transport-failure",d.threshold,d.cooldown)}}(e,r,n,i,t,o):e.status.failed++,void o.error("report error",{...he(t),event:i.name});e.status.connectionErrors[s]=(e.status.connectionErrors[s]??0)+1,o.error("connection error",he(t))}catch{}}}function ve(e,t){return e.storeId&&t.stores[e.storeId]?t.stores[e.storeId]:t.stores.__cache}function ye(e,t){return e?t.stores[e]:t.stores.__cache}function we(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 be(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 ke(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 Ie(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,F.createIngest)(n),config:t.config,env:qe(t.config.env),reportError:me(e,"transformer",n,r)};r.debug("init");const i=await(0,F.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 Se(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:{...qe(t.config.env),...s?{respond:s}:{}},reportError:me(e,"transformer",n,a)};a.debug("push",{event:o.name});const u="string"==typeof o.id?o.id:"",{traceId:d,sourceId:l,parentEventId:p}=X(o,r,e),f=Date.now(),g=Z(e,{stepId:(0,F.stepId)("transformer",n),stepType:"transformer",phase:"in",eventId:u,now:f,traceId:d,sourceId:l,parentEventId:p});g.inEvent=o,(0,F.emitStep)(e,g);try{const r=await(0,F.useHooks)(t.push,"TransformerPush",e.hooks,e.logger)(o,c),s=Date.now(),i=Z(e,{stepId:(0,F.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,F.emitStep)(e,i),a.debug("push done"),r}catch(t){const o=Date.now(),r=Z(e,{stepId:(0,F.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,F.emitStep)(e,r),t}}function Ee(e,t){return e?{...e,_meta:{...e._meta,path:[...e._meta.path]}}:(0,F.createIngest)(t)}async function Oe(e,t,n,o,r,s,i){r||(r=(0,F.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,F.tryCatchAsync)(Ie,t=>{if(t instanceof F.FatalError)throw t;return e.status.failed++,e.logger.scope(`transformer:${s.type||"unknown"}`).error("transformer init failed",{transformer:o,...he(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,F.compileCache)(u):void 0,l=d?ve(d,e):void 0,p=s.config?.state?(0,F.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,F.applyState)(g,t=>ye(t,e),t,e):t;let m;if(d&&l){const e=(0,F.buildCacheContext)(r,a),t=await(0,F.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 v=s.config.before;if(v){const n=(0,F.getNextSteps)(v,(0,F.buildCacheContext)(r,a));if(1===n.length){const o=ke(n[0],we(t));if(o.length>0){const n=await Oe(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,F.tryCatchAsync)(Oe,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,he(t)),{event:null,respond:void 0}))(e,t,ke(n,we(t)),a,Ee(r,n),void 0,i)))}f&&f.length>0&&(a=await(0,F.applyState)(f,t=>ye(t,e),a,e));const y=await(0,F.tryCatchAsync)(Se,t=>(e.logger.scope(`transformer:${s.type||"unknown"}`).error("Push failed",he(t)),!1))(e,s,o,a,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||a),u=Ee(r,"unknown");if(n.next){const r=(0,F.getNextSteps)(n.next,(0,F.buildCacheContext)(u,o));if(0===r.length)return{event:o,respond:c};if(1===r.length){const n=ke(r[0],we(t));return n.length>0?Oe(e,t,n,o,u,c,i):{event:o,respond:c}}return(await Promise.all(r.map(n=>(0,F.tryCatchAsync)(Oe,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,he(t)),{event:null,respond:void 0}))(e,t,ke(n,we(t)),o,Ee(u,n),void 0,i)))).map(e=>({event:e.event,respond:void 0}))}return s.length>0?Oe(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(y&&"object"==typeof y){const{event:n,respond:o,next:s}=y;if(o&&(c=o),void 0!==s){const o=await h(n||a),u=(0,F.getNextSteps)(s,(0,F.buildCacheContext)(r,o));if(0===u.length){a=o;continue}if(1===u.length){const n=ke(u[0],we(t));return n.length>0?Oe(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,F.tryCatchAsync)(Oe,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,he(t)),{event:null,respond:void 0}))(e,t,ke(n,we(t)),o,Ee(r,n),void 0,i))),{event:null,respond:void 0}}n&&(a=n)}g&&g.length>0&&(a=await(0,F.applyState)(g,t=>ye(t,e),a,e)),m&&l&&(0,F.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((!y||"object"==typeof y&&!y.next)&&k){const n=(0,F.getNextSteps)(s.config.next,(0,F.buildCacheContext)(r,a));if(1===n.length){const o=ke(n[0],we(t));return o.length>0?Oe(e,t,o,a,r,c,i):{event:a,respond:c}}return n.length>1?(await Promise.all(n.map(n=>(0,F.tryCatchAsync)(Oe,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,he(t)),{event:null,respond:void 0}))(e,t,ke(n,we(t)),a,Ee(r,n),void 0,i))),{event:null,respond:void 0}):{event:a,respond:c}}}return{event:a,respond:c}}function qe(e){return e&&(0,F.isObject)(e)?e:{}}function Ce(e){return"string"==typeof e||!(!Array.isArray(e)||!e.every(e=>"string"==typeof e))}async function xe(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)&&!Ge(e,t,n)||(await(0,K.tryCatchAsync)(t.on,t=>{if(t instanceof K.FatalError)throw t;e.status.failed++,e.logger.scope("source").error("source on flush failed",{sourceId:r,type:n,...he(t)})})(n,s),_e(n)&&Ne(e,t,n))}function je(e){return Boolean(e.config.init)&&!e.config.require?.length}async function Ae(e,t,n){const{code:o,config:r={},env:s={},primary:i,next:a,before:c,cache:u,terminus:d}=n,l=r.state??n.state,p=l?(0,K.compileState)(l):void 0,f=u,g=f?(0,K.compileCache)({...f,stop:f.stop??!0}):void 0,h=Ce(a)?ke(a,we(e.transformers)):void 0,m=Ce(c)?ke(c,we(e.transformers)):void 0,v=d??e.push,y=Boolean(d),w=async(n,o,s)=>{if(y)return v(n);let i;const u="string"==typeof n.id&&""!==n.id?n:{...n,id:(0,K.getSpanId)()},d=m??(void 0!==c?(()=>{const t=(0,K.getNextSteps)(c,(0,K.buildCacheContext)(s.ingest));return 0===t.length?[]:ke(1===t.length?t[0]:t,we(e.transformers))})():[]);let l=[u];if(d.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const n=await Oe(e,e.transformers,d,u,s.ingest,s.respond,`source.${t}.before`);if(null===n.event)return{ok:!0};if(n.stopped)return n.respond&&(s.respond=n.respond),{ok:!0};n.respond&&(s.respond=n.respond);const o="string"==typeof u.id?u.id:"";if(Array.isArray(n.event))l=n.event.map(e=>""!==o&&e.id===o?{...e,id:(0,K.getSpanId)()}:e);else{const e=n.event;l=""===o||"string"==typeof e.id&&""!==e.id?[e]:[{...e,id:o}]}}if(g){const t=ve(g,e);if(t){const n=(0,K.buildCacheContext)(s.ingest),o=await(0,K.checkCache)(g,t,n);if(o){if("HIT"===o.status&&void 0!==o.value&&g.stop){let t=o.value;return o.rule.update&&(t=await(0,K.applyUpdate)(t,o.rule.update,{...n,cache:{status:"HIT"}},e)),s.respond?.(t),{ok:!0}}if("MISS"===o.status&&g.stop&&s.respond){const r=s.respond,a=o.rule.update,c={...n,cache:{status:"MISS"}},u=o.key,d=o.rule.ttl,l=n=>{(0,K.storeCache)(t,u,n,d),a?i=(async()=>{const t=await(0,K.applyUpdate)(n,a,c,e);r(t)})():r(n)};s.respond=l}"MISS"!==o.status||g.stop||(0,K.storeCache)(t,o.key,!0,o.rule.ttl)}}}const f=h?{kind:"single",preChain:h}:void 0!==a?(()=>{const t=(0,K.getNextSteps)(a,(0,K.buildCacheContext)(s.ingest));return 0===t.length?{kind:"single",preChain:[]}:1===t.length?{kind:"single",preChain:ke(t[0],we(e.transformers))}:{kind:"many",branches:t.map(t=>ke(t,we(e.transformers)))}})():{kind:"single",preChain:[]};p&&p.length>0&&(l=await Promise.all(l.map(t=>(0,K.applyState)(p,t=>ye(t,e),t,e))));let w={ok:!0};for(const n of l)"many"===f.kind?(await Promise.all(f.branches.map((i,a)=>(0,K.tryCatchAsync)(async()=>v(n,{...o,id:t,ingest:Ee(s.ingest,`${t}.${a}`),respond:void 0,mapping:r,preChain:i}),t=>(e.logger.scope("source:many").error(`many branch ${a} failed`,he(t)),{ok:!0}))())),w={ok:!0}):w=await v(n,{...o,id:t,ingest:s.ingest,respond:s.respond,mapping:r,preChain:f.preChain});return i&&await i,w},b=async n=>{const o=(0,K.createIngest)(t),s=(0,K.parseTraceparent)((0,K.isScope)(n)?n?.headers?.traceparent:void 0);if(s&&(o._meta.trace=s.trace,o._meta.parentEventId=s.parentSpan),!r.ingest||void 0===n)return o;const i=await(0,K.getMappingValue)(n,r.ingest,{collector:e});return{...o,...i,_meta:o._meta}},k=e.logger.scope("source").scope(t),I={...s,push:async(e,n={})=>{const o={ingest:(0,K.createIngest)(t),respond:void 0};return w(e,n,o)},command:e.command,sources:e.sources,elb:e.elb,logger:k},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:me(e,"source",t,k)},E=await(0,K.tryCatchAsync)(o,n=>{if(n instanceof K.FatalError)throw n;e.status.failed++,e.logger.scope("source").error("source factory failed",{sourceId:t,...he(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 Te(e){for(const[t,n]of Object.entries(e.sources)){if(je(n))continue;const o=n.config.require;if(!o?.length)continue;const r=o.filter(t=>!Be(e,t));r.length!==o.length&&(n.config.require=r,je(n)&&await xe(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=>!Be(e,t));if(n.config&&(n.config.require=r),r.length>0)continue;delete e.pending.destinations[t];const s=it(n);!1!==s.config.queue&&(s.queuePush=[...e.queue]),e.destinations[t]=s}}function De(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 Pe=!1;function Me(){Pe||(Pe=!0,"undefined"!=typeof console&&"function"==typeof console.warn&&console.warn("walkerOS: ignored an on-dispatch call with a non-collector argument"))}function ze(e,t,n,o){if(n instanceof H.FatalError)throw n;e.logger.scope("on").error("on callback failed",{kind:t,...o,...he(n)})}var $e=[Y.Consent,Y.User,Y.Globals,Y.Custom];function _e(e){return $e.includes(e)}function Re(e,t){switch(t){case Y.Consent:return Object.keys(e.consent).length>0;case Y.User:return Object.keys(e.user).length>0;case Y.Globals:return Object.keys(e.globals).length>0;case Y.Custom:return Object.keys(e.custom).length>0;default:return!1}}function Be(e,t){switch(t){case Y.Consent:case Y.User:case Y.Globals:case Y.Custom:return Re(e,t);case Y.Run:case Y.Ready:return!0===e.allowed;default:return e.seenEvents.has(String(t))}}function He(e,t){return e.cellVersion[String(t)]??0}function Ne(e,t,n){let o=e.delivery.get(t);o||(o={},e.delivery.set(t,o)),o[String(n)]=He(e,n)}function Ge(e,t,n){return e.allowed&&He(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 Ke(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 Fe(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:at(t.env,t.config.env),reportError:me(e,"destination",n,i,t)};(0,N.tryCatch)(t.on,t=>ze(e,"destination",t,{destId:n,type:o}))(o,a)}function Le(e,t,n,o){if(!De(e))return void Me();const r=Qe(e,t,o);if(n.length)switch(t){case Y.Consent:!function(e,t,n){const o=n||e.consent,r=Fe(e,Y.Consent);t.forEach(t=>{Ge(e,t,Y.Consent)&&Ke(e,t,Y.Consent)&&(Object.keys(o).filter(e=>e in t).forEach(n=>{(0,N.tryCatch)(t[n],t=>ze(e,"consent",t,{key:n}))(o,r)}),Ne(e,t,Y.Consent))})}(e,n,o);break;case Y.Ready:!function(e,t){if(!e.allowed)return;const n=Fe(e,Y.Ready);t.forEach(t=>{(0,N.tryCatch)(t,t=>ze(e,"ready",t))(void 0,n)})}(e,n);break;case Y.Run:!function(e,t){if(!e.allowed)return;const n=Fe(e,Y.Run);t.forEach(t=>{(0,N.tryCatch)(t,t=>ze(e,"run",t))(void 0,n)})}(e,n);break;case Y.Session:!function(e,t){if(!e.session)return;const n=Fe(e,Y.Session);t.forEach(t=>{(0,N.tryCatch)(t,t=>ze(e,"session",t))(e.session,n)})}(e,n);break;default:{const o=Fe(e,t),s=_e(t);n.forEach(n=>{"function"==typeof n&&(s&&!Ge(e,n,t)||s&&!Ke(e,n,t)||((0,N.tryCatch)(n,n=>ze(e,"generic",n,{type:t}))(r,o),s&&Ne(e,n,t)))});break}}}function Qe(e,t,n){switch(t){case Y.Consent:return n||e.consent;case Y.Session:return e.session;case Y.User:return n||e.user;case Y.Custom:return n||e.custom;case Y.Globals:return n||e.globals;case Y.Config:return n||e.config;default:return}}async function Ve(e,t,n,o,r){if(!t.on)return!1;if(_e(o)&&!Ge(e,t,o))return!1;if(_e(o)&&!Ke(e,t,o))return!1;const s=await(0,N.tryCatchAsync)(t.on,t=>ze(e,"source",t,{sourceId:n,type:o}))(o,r);return _e(o)&&Ne(e,t,o),!1===s}function We(e){return"number"==typeof e&&e>0?e:1e4}var Je=class extends Error{constructor(e){super(e),this.name="DestinationTimeoutError"}};function Ye(e,t,n){let o;const r=new Promise((e,r)=>{o=setTimeout(()=>r(new Je(n)),t)});return Promise.race([e,r]).finally(()=>{o&&clearTimeout(o)})}var Xe=Object.freeze({batched:!0});function Ze(e){return e===Xe}function et(e){return void 0===e?{}:"number"==typeof e?{wait:e}:{wait:e.wait,size:e.size,age:e.age}}function tt(e,t,n){if(!e)return[];if(Array.isArray(e)&&e.every(e=>"string"==typeof e))return ke(e,t);if("string"==typeof e)return ke(e,t);const o=(0,R.getNextSteps)(e,(0,R.buildCacheContext)(n));return 0===o.length?[]:1===o.length?ke(o[0],t):ke(o,t)}async function nt(e,t,n={},o){const{allowed:r,consent:s,user:i}=e;if(!r)return st({ok:!1});if(t){const n=e.config.queueMax;if(void 0===n)throw new Error("Collector.Config.queueMax is undefined; defaults must be seeded by collector()");const o=ie(e.queue,t,{max:n});if(o.dropped>0){const t=ge(e.status,(0,R.stepId)("collector"),"queue",o.dropped);ce(e.queue,e.logger,"collector.queue overflow; oldest events dropped",{buffer:"queue",cap:n,droppedCount:t})}else e.queue.length<n&&ue(e.queue);e.status.in++}o||(o=e.destinations);const a=e.transformers?we(e.transformers):{},c=await Promise.all(Object.entries(o||{}).map(async([o,r])=>{if(r.config.disabled)return{id:o,destination:r,skipped:!0};const c=r.config.id||o,u=(0,R.stepId)("destination",c),d=le(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=de();return void 0!==o.openUntil&&r<o.openUntil||(o.state="half-open",o.probing=!0,o.openUntil=r+n,!1)}(e.status.breakers,u,d.cooldown))return{id:o,destination:r,skipped:!0};const l=t=>{d&&pe(e.status.breakers,u,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,u)};let f=(r.queuePush||[]).map(e=>({...e,consent:s}));r.queuePush=[],t&&f.push((0,R.clone)(t));const g=n.ingest?{...n.ingest,_meta:{...n.ingest._meta,path:[...n.ingest._meta.path]}}:(0,R.createIngest)("unknown");if(!f.length&&!r.queueOn?.length)return p(),{id:o,destination:r,skipped:!0};if(!f.length&&r.queueOn?.length){if(!(0,R.getGrantedConsent)(r.config.consent,s))return p(),{id:o,destination:r,skipped:!0};let t=!1;try{t=await ot(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)}),l("transport-failure")}return p(),{id:o,destination:r,skipped:!t}}const h=[],m=f.filter(t=>{const n=(0,R.getGrantedConsent)(r.config.consent,s,t.consent);if(n)return t.consent=n,h.push(t),!1;const i=Z(e,{stepId:(0,R.stepId)("destination",o),stepType:"destination",phase:"skip",eventId:"string"==typeof t.id?t.id:"",now:Date.now(),...X(t,g,e)});return i.skipReason="consent",s&&(i.consent={...s}),r.config.consent&&(i.meta={required:{...r.config.consent}}),(0,R.emitStep)(e,i),!0});if(m.length>0){const t=r.queuePush,n=r.config.id||o,s={max:r.config.queueMax??1e3};let i=0;for(const e of m)i+=ie(t,e,s).dropped;if(i>0){fe(e,n);const o=ge(e.status,(0,R.stepId)("destination",n),"queue",i);ce(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&&ue(t)}if(!h.length)return p(),{id:o,destination:r,queue:f};let v,y,w=!1;try{w=await ot(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)}),l("transport-failure")}if(!w)return p(),{id:o,destination:r,queue:f};r.dlq||(r.dlq=[]);const b=tt(r.config.before,a,g),k=r.config.next,I=r.config?.cache,S=I?(0,R.compileCache)(I):void 0,E=S?ve(S,e):void 0,O=r.config?.state?(0,R.compileState)(r.config.state):void 0,q=O?.filter(e=>"get"===e.mode),C=O?.filter(e=>"set"===e.mode);let x=0,j=0,A=0;return await Promise.all(h.map(async t=>{let s,c;if(t.user=(0,R.assign)(i,t.user),S?.stop&&E){const e=(0,R.buildCacheContext)(g,t),n=await(0,R.checkCache)(S,E,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(b.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const r=await Oe(e,e.transformers,b,t,g,n.respond,`destination.${o}.before`);if(null===r.event)return t;r.respond&&(d=r.respond),u=Array.isArray(r.event)?r.event:[r.event]}const l=async(t,n)=>{let s=n,i=!1;if(S&&!S.stop&&E){const e=(0,R.buildCacheContext)(g,t),n=await(0,R.checkCache)(S,E,e);if("HIT"===n?.status)return!1;"MISS"===n?.status&&(s={key:n.key,ttl:n.rule.ttl},i=!0)}q&&q.length>0&&t&&(t=await(0,R.applyState)(q,t=>ye(t,e),t,e));const u=Date.now();let l=!1;const p=await(0,R.tryCatchAsync)(rt,n=>{const s=r.type||"unknown";e.logger.scope(s).error("Push failed",{...he(n),event:t.name}),v=n,l=!0;const i=r.dlq,a=r.config.id||o,c={max:r.config.dlqMax??100},u=ie(i,[t,n],c);if(u.dropped>0){fe(e,a);const t=ge(e.status,(0,R.stepId)("destination",a),"dlq",u.dropped);ce(i,e.logger.scope(r.type||"unknown"),"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:a,cap:c.max,droppedCount:t})}else i.length<c.max&&ue(i)})(e,r,o,t,g,d);if(x+=Date.now()-u,s&&E&&void 0===r.config.mock&&(i?(0,R.storeCache)(E,s.key,p??!0,s.ttl):void 0===c&&(c=p??!0)),!l&&!Ze(p)&&C&&C.length>0&&t&&(t=await(0,R.applyState)(C,t=>ye(t,e),t,e)),void 0===p||Ze(p)||(y=p),Ze(p)&&j++,!l&&k){void 0!==p&&(g._response=p);const n=tt(k,a,g);if(n.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const r=await Oe(e,e.transformers,n,t,g,d,`destination.${o}.next`);r.respond&&(d=r.respond)}}return!0};for(const e of u)await l(e,s)&&A++;return s&&E&&void 0!==c&&void 0===r.config.mock&&(0,R.storeCache)(E,s.key,c,s.ttl),t})),{id:o,destination:r,error:v,response:y,totalDuration:x,batchedCount:j,allowedCount:h.length,pushedCount:A,canonicalId:c,breakerConfig:d}})),u={},d={},l={};for(const t of c){if(t.skipped)continue;const n=t.destination,o={type:n.type||"unknown",data:t.response};fe(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,R.stepId)("destination",t.canonicalId):void 0,c=t=>{i&&a&&pe(e.status.breakers,a,t,i.threshold,i.cooldown)};if(t.error)o.error=t.error,l[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,i=t.allowedCount??0,a=t.pushedCount??i;(Math.max(0,a-n)>0||0===i)&&(u[t.id]=o,r.count++,r.lastAt=s,r.duration+=t.totalDuration||0,e.status.out++,c("success"))}}return st({event:t,...Object.keys(u).length&&{done:u},...Object.keys(d).length&&{queued:d},...Object.keys(l).length&&{failed:l}})}async function ot(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:at(t.env,t.config.env),reportError:me(e,"destination",n,s,t)};s.debug("init");const a=Date.now();let c;(0,R.emitStep)(e,Z(e,{stepId:(0,R.stepId)("destination",n),stepType:"destination",phase:"init",eventId:"",now:a}));try{c=await(0,R.useHooks)(t.init,"DestinationInit",e.hooks,e.logger)(i)}catch(t){const o=Date.now(),r=Z(e,{stepId:(0,R.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,R.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 rt(e,t,n,o,r,s){const{config:i}=t,a=await(0,R.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:{...at(t.env,i.env),...s?{respond:s}:{}},reportError:me(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=et(l?.batch),s=et(i.batch),a=r.wait??s.wait??3e4,c=r.size??s.size??1e3,d=r.age??s.age??3e4,g=at(t.env,i.env),h=(0,R.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],c={collector:e,logger:u,id:n,config:i,data:void 0,rule:o.isDefault?void 0:a.rule,ingest:a.ingest,env:{...g,...a.respond?{respond:a.respond}:{}},reportError:me(e,"destination",n,u,t)};u.debug("push batch",{events:s.entries.length});const d=t.config.id||n,l=fe(e,d),p=le(t.config.breaker),h=(0,R.stepId)("destination",d),m=t=>{p&&pe(e.status.breakers,h,t,p.threshold,p.cooldown)},v=Date.now(),y=new Map;let w,b=!1;const k=n=>{const o=t.dlq=t.dlq||[],r={max:t.config.dlqMax??100};let s=0;for(const e of n)s+=ie(o,e,r).dropped;if(s>0){const t=ge(e.status,(0,R.stepId)("destination",d),"dlq",s);ce(o,u,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:d,cap:r.max,droppedCount:t})}else o.length<r.max&&ue(o);l.failed+=n.length,l.dlqSize=o.length,e.status.failed+=n.length};let I=s.entries.length;const S=We(i.timeout),E=await(0,R.tryCatchAsync)((o,r)=>Ye(Promise.resolve((0,R.useHooks)(t.pushBatch,"DestinationPushBatch",e.hooks,e.logger)(o,r)),S,`Destination "${n}" batch delivery timed out after ${S}ms`),e=>{I=0,b=!0,w=e,k(s.entries.map(t=>[t.event,e])),m("transport-failure"),u.error("Push batch failed",{error:e instanceof Error?e.message:String(e),entries:s.entries.length})})(s,c);if((0,R.isObject)(O=E)&&Array.isArray(O.failed)&&E.failed.length>0){const e=[];for(const t of E.failed){const n=s.entries[t.index];if(!n||y.has(t.index))continue;const o=t.error??new Error(`Push batch entry ${t.index} failed (no per-row error provided)`);y.set(t.index,o),e.push([n.event,o])}e.length>0&&(k(e),I=Math.max(0,s.entries.length-e.length),u.error("Push batch partial failure",{failed:e.length,delivered:I,entries:s.entries.length}))}var O;const q=Date.now();s.entries.forEach((t,o)=>{const r=b||y.has(o),i=X(t.event,t.ingest,e),a=Z(e,{stepId:(0,R.stepId)("destination",n),stepType:"destination",phase:r?"error":"flush",eventId:"string"==typeof t.event.id?t.event.id:"",now:q,traceId:i.traceId,sourceId:i.sourceId,parentEventId:i.parentEventId});if(a.batch={size:s.entries.length,index:o},a.durationMs=q-v,r){const e=b?w:y.get(o);a.error=e instanceof Error?{name:e.name,message:e.message}:{message:String(e)}}(0,R.emitStep)(e,a)}),u.debug("push batch done"),l.inFlightBatch=Math.max(0,(l.inFlightBatch??0)-s.entries.length),I>0&&(l.count+=I,l.lastAt=Date.now(),e.status.out+=I,m("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,R.isDefined)(a.data)&&c.batched.data.push(a.data);const d="string"==typeof a.event.id?a.event.id:"",g=X(o,r,e),h=Date.now(),m=Z(e,{stepId:(0,R.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,R.emitStep)(e,m);const v=Z(e,{stepId:(0,R.stepId)("destination",n),stepType:"destination",phase:"out",eventId:d,now:h,traceId:g.traceId,sourceId:g.sourceId,parentEventId:g.parentEventId});a.mappingKey&&(v.mappingKey=a.mappingKey),v.outEvent=a.event,v.batch={size:c.batched.entries.length,index:c.batched.entries.length-1},(0,R.emitStep)(e,v);const y=t.config.id||n,w=fe(e,y);return w.inFlightBatch=(w.inFlightBatch??0)+1,c.batchFn(),Xe}{let s;if(u.debug("push",{event:a.event.name}),"trace"===e.observeLevel?.()&&Array.isArray(t.calls)&&t.calls.length>0){const e=ne({...d.env,simulation:t.calls});d.env=e.wrappedEnv,s=e.calls,e.unresolved.length>0&&(e.wrappedEnv[R.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}=X(o,r,e),g=Date.now(),h=Z(e,{stepId:(0,R.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,R.emitStep)(e,h);try{const o=We(i.timeout),r=await Ye(Promise.resolve((0,R.useHooks)(t.push,"DestinationPush",e.hooks,e.logger)(a.event,d)),o,`Destination "${n}" delivery timed out after ${o}ms`),h=Date.now(),m=Z(e,{stepId:(0,R.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=se(s)),(0,R.isDefined)(r)&&(m.meta={...m.meta,response:r}),a.mappingKey&&(m.mappingKey=a.mappingKey),(0,R.emitStep)(e,m),u.debug("push done"),r}catch(t){const o=Date.now(),r=Z(e,{stepId:(0,R.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=se(s)),a.mappingKey&&(r.mappingKey=a.mappingKey),(0,R.emitStep)(e,r),t}}}function st(e){return{ok:!e?.failed,...e}}function it(e){const{code:t,config:n={},env:o={},cache:r,state:s}=e,{config:i}=be(e,"before"),{config:a}=be({...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=at(t.env,o);return{...t,config:c,env:u}}function at(e,t){return e||t?t?e&&(0,R.isObject)(e)&&(0,R.isObject)(t)?{...e,...t}:t:e:{}}async function ct(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 ut(e,t){e.stateVersion++,e.cellVersion[t]=e.stateVersion}async function dt(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 Y.Config:(0,L.isObject)(n)&&((0,U.assign)(e.config,n,{shallow:!1}),r=n,s=!0);break;case Y.Consent:if((0,L.isObject)(n)){const{update:t}=function(e,t){const n={};return Object.entries(t).forEach(([e,t])=>{n[e]=!!t}),e.consent=(0,z.assign)(e.consent,n),{update:n}}(e,n);ut(e,Y.Consent),r=t,s=!0}break;case Y.Custom:(0,L.isObject)(n)&&(e.custom=(0,U.assign)(e.custom,n),ut(e,Y.Custom),r=n,s=!0);break;case Y.Destination:(0,L.isObject)(n)&&"code"in n&&(0,L.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,R.isFunction)(n.push))return st({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,R.getId)(5,"abcdefghijklmnopqrstuvwxyz")}while(e.destinations[l]||e.pending.destinations[l]);if(d.require?.length){e.pending.destinations[l]=t,await Te(e);const n=e.destinations[l];return n?nt(e,void 0,{},{[l]:n}):st({ok:!0})}const p={...n,config:d,env:at(n.env,r)};return e.destinations[l]=p,!1!==p.config.queue&&(p.queuePush=[...e.queue]),nt(e,void 0,{},{[l]:p})}(e,n));break;case Y.Globals:(0,L.isObject)(n)&&(e.globals=(0,U.assign)(e.globals,n),ut(e,Y.Globals),r=n,s=!0);break;case Y.Hook:if((0,L.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 Y.On:if((0,L.isObject)(n)&&(0,U.isString)(n.type)){const{type:t,rules:o}=n;await async function(e,t,n){if(!De(e))return void Me();const o=e.on,r=o[t]||[],s=(0,H.isArray)(n)?n:[n];s.forEach(e=>{r.push(e)}),o[t]=r,Le(e,t,s)}(e,t,o)}break;case Y.Ready:s=!0;break;case Y.Run:o=await async function(e,t){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),ut(e,Y.Consent)),t.user&&(e.user=(0,U.assign)(e.user,t.user),ut(e,Y.User)),t.globals&&(e.globals=(0,U.assign)(e.config.globalsStatic||{},t.globals),ut(e,Y.Globals)),t.custom&&(e.custom=(0,U.assign)(e.custom,t.custom),ut(e,Y.Custom))),Object.values(e.destinations).forEach(e=>{e.queuePush=[]}),e.queue=[],e.round++,await Te(e),await async function(e){if(De(e))for(const t of $e){if(!Re(e,t))continue;const n=Qe(e,t);Le(e,t,e.on[t]||[]);for(const[o,r]of Object.entries(e.sources))je(r)&&await Ve(e,r,o,t,n)}else Me()}(e);let n=!0;const o={};if(e.preRunQueue.length){const t=e.preRunQueue.splice(0);e.logger.debug("replaying pre-run events",{count:t.length});for(const{event:r,options:s}of t){const t=await e.push(r,s);!1===t.ok&&(n=!1),t.failed&&Object.assign(o,t.failed)}}const r=await nt(e);if(n)return r;const s={...r.failed??{},...o};return{...r,ok:!1,...Object.keys(s).length>0?{failed:s}:{}}}(e,n),s=!0;break;case Y.Session:s=!0;break;case Y.Shutdown:e.hasShutdown||(e.hasShutdown=!0,await async function(e){const t=e.logger;await ct(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 ct(e.destinations,"destination",t),await ct(e.transformers,"transformer",t),await ct(e.stores,"store",t)}(e));break;case Y.User:(0,L.isObject)(n)&&((0,U.assign)(e.user,n,{shallow:!1}),ut(e,Y.User),r=n,s=!0);break;default:return e.logger.warn("unknown command",{command:t}),st({ok:!1})}if(s){await async function(e,t,n,o){if(!De(e))return Me(),!0;e.seenEvents.add(String(t));let r=n||[];n||(r=e.on[t]||[]);const s=Qe(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&&(je(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))je(n)&&n.queueOn?.length&&await xe(e,n,t);const a=Object.values(e.sources).some(e=>!je(e)&&e.config.require?.length);return(Object.keys(e.pending.destinations).length>0||a)&&await Te(e),Le(e,t,r,o),!i}(e,t,void 0,r);const n=await nt(e);if(o&&!1===o.ok){const e={...n.failed??{},...o.failed??{}};o={...n,ok:!1,...Object.keys(e).length>0?{failed:e}:{}}}else o=n}return o||st({ok:!0})}()}finally{i()}}function lt(e,t){return{timing:Math.round((Date.now()-e.timing)/10)/100,source:{type:"collector",schema:"4"},...t}}function pt(e,t,n){const o=t.name;if("string"!=typeof o)throw new U.InvalidEventError(void 0===o?"Event name is required":"Event name is invalid");if(!o)throw new U.InvalidEventError("Event name is required");const[r,s]=o.split(" ");if(!r||!s)throw new U.InvalidEventError("Event name is invalid");const{timestamp:i=Date.now(),name:a=`${r} ${s}`,data:c={},context:u={},globals:d={},custom:l={},user:p=e.user,nested:f=[],consent:g=e.consent,id:h=(0,U.getSpanId)(),trigger:m="",entity:v=r,action:y=s,timing:w=0,source:b={type:"collector",schema:"4"}}=t,k=b??{type:"collector",schema:"4"},I=k.count??(e.count+=1),S=k.trace??n?._meta.trace??e.trace,E={...k,count:I};void 0!==S&&(E.trace=S);const O=e.name??k.platform??"default",q=e.release??"4.6.0-next-1788933594957";return E.release={...k.release,[O]:q},{name:a,data:c,context:u,globals:(0,U.assign)(e.globals,d),custom:l,user:p,nested:f,consent:g,id:h,trigger:m,entity:v,action:y,timestamp:i,timing:w,source:E}}function ft(e,t){const n=(0,Q.useHooks)(async(n,o={})=>await(0,Q.tryCatchAsync)(async()=>{if(!e.allowed){const t=e.config.queueMax;if(void 0===t)throw new Error("Collector.Config.queueMax is undefined; defaults must be seeded by collector()");const r=ie(e.preRunQueue,{event:n,options:o},{max:t});if(r.dropped>0){const n=ge(e.status,"collector.preRun","queue",r.dropped);ce(e.preRunQueue,e.logger,"collector.preRunQueue overflow; oldest events dropped",{buffer:"queue",cap:t,droppedCount:n})}else e.preRunQueue.length<t&&ue(e.preRunQueue);return e.logger.debug("event held until run",{name:n.name,dropped:r.dropped}),st({ok:!0})}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,Q.createIngest)(s||"unknown");if(c){const t=await(0,Q.processEventMapping)(f,c,e);if(t.ignore)return st({ok:!0});if(c.consent&&!(0,Q.getGrantedConsent)(c.consent,e.consent,t.event.consent))return st({ok:!0});f=t.event}if(u?.length&&e.transformers&&Object.keys(e.transformers).length>0){const n=await Oe(e,e.transformers,u,f,h,p,s?`source.${s}.next`:void 0);if(null===n.event)return e.logger.debug("Event dropped by transformer chain"+(n.droppedBy?` (${n.droppedBy})`:"")),st({ok:!0,dropped:!0});if(n.stopped)return n.respond&&(p=n.respond),st({ok:!0});n.respond&&(p=n.respond);const o="string"==typeof f.id?f.id:"";if(Array.isArray(n.event)){const i=await Promise.all(n.event.map(async n=>{const r=""!==o&&n.id===o?{...n,id:(0,Q.getSpanId)()}:n,i=t(r),a=pt(e,i,h);return nt(e,a,{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 i[0]??st({ok:!0})}f=""===o||"string"==typeof n.event.id&&""!==n.event.id?n.event:{...n.event,id:o}}const m=function(e,t,n){return pt(e,lt(e,t),n)}(e,f,h),v=await nt(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 v},t=>{if(t instanceof Q.FatalError)throw t;if(t instanceof Q.InvalidEventError){const n=o.id;if(n){e.status.sources[n]||(e.status.sources[n]={count:0,duration:0});const t=e.status.sources[n];t.rejected=(t.rejected??0)+1}return e.logger.warn("invalid event rejected",{error:t.message}),st({ok:!1,invalid:!0,error:t.message})}return e.status.failed++,e.logger.error("push failed",{...he(t),event:n.name}),st({ok:!1})})(),"Push",e.hooks,e.logger);return async(t,o)=>{const r="string"==typeof t.id&&""!==t.id?t:{...t,id:(0,Q.getSpanId)()},s="string"==typeof r.id?r.id:"",{traceId:i,sourceId:a,parentEventId:c}=X(r,o?.ingest,e),u=Date.now(),d=Z(e,{stepId:"collector.push",stepType:"collector",phase:"in",eventId:s,now:u,traceId:i,sourceId:a,parentEventId:c});d.inEvent=r,(0,Q.emitStep)(e,d);try{const t=await n(r,o),d=Date.now(),l=Z(e,{stepId:"collector.push",stepType:"collector",phase:"out",eventId:s,now:d,traceId:i,sourceId:a,parentEventId:c});return l.durationMs=d-u,l.outEvent=t,(0,Q.emitStep)(e,l),t}catch(t){const n=Date.now(),o=Z(e,{stepId:"collector.push",stepType:"collector",phase:"error",eventId:s,now:n,traceId:i,sourceId:a,parentEventId:c});throw o.durationMs=n-u,o.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},(0,Q.emitStep)(e,o),t}}}function gt(e={}){const t=e.maxEntries??1e4,n=e.lowWaterMark??.8,o=e.sweepIntervalMs??6e4,r=Math.floor(t*n),s=new Map,i={hits:0,misses:0,populates:0,writes:0,deletes:0,evictions_entries:0,evictions_ttl:0};let a;return o>0&&(a=setInterval(function(){const e=Date.now();let t=0;for(const[n,o]of s)void 0!==o.expires&&o.expires<=e&&(s.delete(n),t++);i.evictions_ttl+=t},o),a&&"function"==typeof a.unref&&a.unref()),{type:"memory",config:{},get(e){const t=s.get(e);if(t)return void 0!==t.expires&&t.expires<=Date.now()?(s.delete(e),i.evictions_ttl++,void i.misses++):(s.delete(e),s.set(e,t),i.hits++,t.value);i.misses++},set(e,n,o){const a=!s.has(e);a||s.delete(e),s.set(e,{value:n,expires:void 0!==o?Date.now()+o:void 0}),i.writes++,a&&i.populates++,s.size>t&&function(){if(s.size<=t)return;const e=s.size-r;let n=0;for(const t of s.keys()){if(n>=e)break;s.delete(t),n++}i.evictions_entries+=n}()},delete(e){s.delete(e)&&i.deletes++},get counters(){return{...i}},destroy(){void 0!==a&&(clearInterval(a),a=void 0),s.clear()}}}function ht(e,t){const{cacheConfig:n,cacheStore:o,namespace:r,logger:s,storeId:i,collector:a}=t,c=(e,t)=>{if(!a)return;const n=Z(a,{stepId:`store.${i}`,stepType:"store",phase:"in",eventId:"",now:Date.now()});n.meta={op:"cache",cached:"hit"===t,status:t,key:e},(0,J.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,J.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,J.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,J.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,J.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,he(n)):console.warn(o,n)}}function mt(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=Z(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=Z(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=Z(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=Z(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=Z(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=Z(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=Z(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=Z(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=Z(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 vt(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:[],preRunQueue:[],round:0,count:0,stateVersion:0,cellVersion:{},delivery:new WeakMap,session:void 0,status:{startedAt:Date.now(),in:0,out:0,failed:0,sources:{},destinations:{},dropped:{},connectionErrors:{},breakers:{}},timing:Date.now(),user:e.user||{},sources:{},pending:{destinations:{}},hasShutdown:!1,seenEvents:new Set,push:void 0,command:void 0,elb:void 0};var i,a;void 0!==e.name&&(s.name=e.name),void 0!==e.release&&(s.release=e.release),s.push=ft(s,e=>lt(s,e)),s.command=(i=s,a=dt,(0,V.useHooks)(async(e,t,n)=>await(0,V.tryCatchAsync)(async()=>await a(i,e,t,n),t=>{if(t instanceof V.FatalError)throw t;return i.status.failed++,i.logger.error("command failed",{...he(t),command:e}),st({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 st({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:me(e,"store",o,a)},u=await t(c);n[o]=u}const o=t,r=function(e){const t={};for(const n of Object.keys(e))t[n]="WHITE";const n=[],o=[];function r(s){const i=t[s];if("BLACK"===i)return;if("GRAY"===i){const e=o.indexOf(s),t=o.slice(-1===e?0:e).concat(s).join(" -> ");throw new Error(`Cycle in cache.store chain: ${t}`)}t[s]="GRAY",o.push(s);const a=e[s].cache?.store;if(void 0!==a){if(!(a in e))throw new Error(`Store "${s}" cache.store references "${a}", which is not declared in flow.stores`);r(a)}o.pop(),t[s]="BLACK",n.push(s)}for(const n of Object.keys(e))"WHITE"===t[n]&&r(n);return n}(o);for(const t of r){const r=o[t].cache;if(!r)continue;let s,i;void 0!==r.store?(s=n[r.store],i=r.store):(n.__cache||(n.__cache=gt()),s=n.__cache,i="__cache");const a=r.namespace??t;e.logger.scope("store-cache").scope(t).info(`store "${t}" caches with namespace "${a}:" via ${i}`),n[t]=ht(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&&mt(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=gt()),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]=it(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,F.validateStepEntry)(r,"Transformer");if(!i.ok){e.logger.warn(`Transformer ${o} invalid (${i.code}): ${i.reason}. Skipping.`);continue}const{config:a}=be(r,"before"),{config:c}=be({...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,F.createIngest)(o),config:f,env:s,reportError:me(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,F.processEventMapping)(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!==p&&void 0===v.config?.state&&(v.config={...v.config??{},state:p}),n[o]=v}return n}(s,e.transformers||{}),s}var yt=globalThis;function wt(e){try{const t=yt.window;if(!t)return;t.localStorage.getItem($.OBSERVE_STORAGE_KEY)===e&&t.localStorage.removeItem($.OBSERVE_STORAGE_KEY)}catch{}}function bt(e,t){return void 0===t?e:n=>e({...n,release:t})}async function kt(e){e=e||{};const t=await vt(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($.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($.OBSERVE_STORAGE_KEY)??null}catch{return null}}();if(!r)return;const s=(0,$.parseObserveCredential)(r);if(!s)return void(null===t?(e.logger.warn("observe: malformed stored credential cleared"),wt(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($.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($.OBSERVE_STORAGE_KEY);const u=c.toString();e.history.replaceState({},"",`${a}${u?`?${u}`:""}${r}`)}catch{}}();const a=(0,$.createBatchedPoster)({url:`${n.url}/ingest/${s.ses}`,token:s.secret,headers:{"X-Walkeros-Binding":n.binding},onStatus:t=>{401===t&&(wt(r),i&&e.observers.delete(i))}});i=(0,$.createTelemetryObserver)(function(e,t){return void 0===t?e:n=>e({...n,flowId:t})}(bt(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,$.createTelemetryObserver)(bt((0,$.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 Ae(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,K.tryCatchAsync)(n.init.bind(n),n=>{if(n instanceof K.FatalError)throw n;o=!0,e.status.failed++,e.logger.scope("source").error("source init failed",{sourceId:t,...he(n)})})(),o||(n.config.init=!0,je(n)&&await xe(e,n,t))}return await Te(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 It=async e=>{let t;return{get flow(){return t},trigger:()=>async n=>{if(!t){const n=await kt(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 St(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 Et={};s(Et,{createTrigger:()=>_t,env:()=>Ot,step:()=>Tt});var Ot={};s(Ot,{push:()=>jt,simulation:()=>At});var qt=()=>{},Ct={error:qt,warn:qt,info:qt,debug:qt,throw:e=>{throw"string"==typeof e?new Error(e):e},json:qt,scope:()=>Ct},xt=()=>()=>Promise.resolve({ok:!0}),jt={get push(){return xt()},get command(){return xt()},get elb(){return xt()},logger:Ct},At=["AWS.SQSClient"],Tt={};s(Tt,{decoderText:()=>Mt,malformedJson:()=>zt,orderComplete:()=>Pt,pageView:()=>Dt});var Dt={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"]]},Pt={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"]]},Mt={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"]]},zt={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 $t(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 kt(e);t={collector:n.collector,elb:n.elb}}const o=function(e){for(const t of Object.values(e.sources??{}))if($t(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:()=>Et}),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),maxBatchSize:u.z.number().int().min(1).describe("Maximum number of events accepted in a single batch request").default(100),healthPath:u.z.string().describe("Health check endpoint path (e.g., /health)").default("/health")}),h=(0,c.zodToSchema)(g),m=require("@walkeros/core/dev"),v=require("@walkeros/core/dev"),y=v.z.object({queueName:v.z.string().min(1).describe("SQS queue short name (like walkeros-events). Required for both setup and runtime poll."),region:v.z.string().describe("AWS region (like eu-central-1). Default: eu-central-1.").optional(),queueUrl:v.z.string().url().describe("Optional pre-resolved queue URL. When set, init skips the GetQueueUrl lookup.").optional(),client:v.z.any().describe("Pre-configured AWS SQSClient instance. Bypasses construction when supplied.").optional(),config:v.z.any().describe("AWS SDK SQSClientConfig (credentials, endpoint overrides, retries).").optional(),decoder:v.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:v.z.number().int().min(1).max(10).describe("SQS receive batch size. Cap 10. Default: 10.").optional(),waitTimeSeconds:v.z.number().int().min(0).max(20).describe("Long-poll duration in seconds. Cap 20. Default: 20.").optional(),visibilityTimeout:v.z.number().int().nonnegative().describe("Per-receive visibility timeout override. Default: queue-configured value.").optional(),shutdownTimeoutMs:v.z.number().int().positive().describe("Graceful shutdown timeout in milliseconds. Default: 30000. After this window, destroy() force-closes.").optional(),onPushError:v.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)(y),S=(0,m.zodToSchema)(k),E={};s(E,{createTrigger:()=>It,env:()=>O,step:()=>A,trigger:()=>St});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,lambdaPostForwardsSource:()=>M});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({name:"page view",data:{title:"Home"}}),isBase64Encoded:!1},out:[["elb",{name:"page view",data:{title:"Home"}}]]},D={title:"API Gateway v1 POST",description:"A REST API Gateway v1 POST request with a JSON body is converted into a walker elb event.",trigger:{type:"POST"},in:{httpMethod:"POST",path:"/collect",requestContext:{requestId:"req-789",identity:{sourceIp:"203.0.113.42"}},queryStringParameters:null,body:JSON.stringify({name:"page view",data:{title:"Home"}}),isBase64Encoded:!1},out:[["elb",{name:"page view",data:{title:"Home"}}]]},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={title:"Lambda POST with provenance",description:"A POST body carrying a source map is forwarded in full, so release and trace provenance survive the crossing.",trigger:{type:"POST"},in:{version:"2.0",requestContext:{http:{method:"POST",path:"/collect"},requestId:"req-321"},body:JSON.stringify({name:"page view",data:{title:"Home"},source:{release:{web:"r1"}}}),isBase64Encoded:!1},out:[["elb",{name:"page view",data:{title:"Home"},source:{release:{web:"r1"}}}]]},z=require("@walkeros/core"),$=require("@walkeros/core"),_=require("@walkeros/core"),R=require("@walkeros/core"),B=(require("@walkeros/core"),require("@walkeros/core")),H=require("@walkeros/core"),N=require("@walkeros/core"),G=require("@walkeros/core"),K=require("@walkeros/core"),F=require("@walkeros/core"),U=require("@walkeros/core"),L=require("@walkeros/core"),Q=require("@walkeros/core"),V=require("@walkeros/core"),W=require("@walkeros/core"),J=require("@walkeros/core"),Y={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 X(e,t,n){return{traceId:e.source?.trace??t?._meta.trace??n.trace,sourceId:t?._meta.path[0],parentEventId:t?._meta.parentEventId}}function Z(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 ee(e){return"object"==typeof e&&null!==e}function te(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(te(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:te(s,t,n+1);return r}function ne(e){const t=[],n=[],{simulation:o,...r}=e,s=te(r,new WeakMap,0);for(const e of o){const o=(0,B.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(!ee(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 oe(e,t){try{return e[t]}catch{return"[unreadable]"}}function re(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(oe(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 se(e){return e.map(e=>({fn:e.fn,args:re(e.args),ts:e.ts}))}function ie(e,t,n,o){if(!Number.isFinite(n.max)||n.max<=0)throw new Error(`pushBounded: max must be > 0 (got ${n.max})`);if("dropNewest"===(n.onOverflow??"dropOldest"))return e.length>=n.max?(o&&o([t]),{appended:!1,dropped:1}):(e.push(t),{appended:!0,dropped:0});const 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 ae=new WeakMap;function ce(e,t,n,o){ae.get(e)||(ae.set(e,!0),t.warn(n,o))}function ue(e){ae.delete(e)}var de=()=>Date.now();function le(e){if(void 0!==e)return"number"==typeof e?{threshold:e,cooldown:3e4}:{threshold:e.threshold??5,cooldown:e.cooldown??3e4}}function pe(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=de()+r)):void(s.consecutiveFailures>=o&&(s.state="open",s.probing=!1,s.openUntil=de()+r)))}function fe(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 ge(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 he(e){const t={error:e instanceof Error?e.message:String(e)};if(e instanceof Error&&e.name&&"Error"!==e.name&&(t.name=e.name),"object"==typeof e&&null!==e&&"code"in e){const n=e;"number"!=typeof n.code&&"string"!=typeof n.code||(t.code=n.code)}return t}function me(e,t,n,o,r){const s=(0,G.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=ie(i,[o,r],a);if(c.dropped>0){const t=ge(e.status,(0,G.stepId)("destination",n),"dlq",c.dropped);ce(i,s,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:n,cap:a.max,droppedCount:t})}else i.length<a.max&&ue(i);const u=fe(e,n);u.failed++,u.dlqSize=i.length,e.status.failed++;const d=le(t.config.breaker);if(d){const o=t.config.id||n;pe(e.status.breakers,(0,G.stepId)("destination",o),"transport-failure",d.threshold,d.cooldown)}}(e,r,n,i,t,o):e.status.failed++,void o.error("report error",{...he(t),event:i.name});e.status.connectionErrors[s]=(e.status.connectionErrors[s]??0)+1,o.error("connection error",he(t))}catch{}}}function ve(e,t){return e.storeId&&t.stores[e.storeId]?t.stores[e.storeId]:t.stores.__cache}function ye(e,t){return e?t.stores[e]:t.stores.__cache}function we(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 be(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 ke(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 Ie(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,F.createIngest)(n),config:t.config,env:qe(t.config.env),reportError:me(e,"transformer",n,r)};r.debug("init");const i=await(0,F.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 Se(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:{...qe(t.config.env),...s?{respond:s}:{}},reportError:me(e,"transformer",n,a)};a.debug("push",{event:o.name});const u="string"==typeof o.id?o.id:"",{traceId:d,sourceId:l,parentEventId:p}=X(o,r,e),f=Date.now(),g=Z(e,{stepId:(0,F.stepId)("transformer",n),stepType:"transformer",phase:"in",eventId:u,now:f,traceId:d,sourceId:l,parentEventId:p});g.inEvent=o,(0,F.emitStep)(e,g);try{const r=await(0,F.useHooks)(t.push,"TransformerPush",e.hooks,e.logger)(o,c),s=Date.now(),i=Z(e,{stepId:(0,F.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,F.emitStep)(e,i),a.debug("push done"),r}catch(t){const o=Date.now(),r=Z(e,{stepId:(0,F.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,F.emitStep)(e,r),t}}function Ee(e,t){return e?{...e,_meta:{...e._meta,path:[...e._meta.path]}}:(0,F.createIngest)(t)}async function Oe(e,t,n,o,r,s,i){r||(r=(0,F.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,F.tryCatchAsync)(Ie,t=>{if(t instanceof F.FatalError)throw t;return e.status.failed++,e.logger.scope(`transformer:${s.type||"unknown"}`).error("transformer init failed",{transformer:o,...he(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,F.compileCache)(u):void 0,l=d?ve(d,e):void 0,p=s.config?.state?(0,F.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,F.applyState)(g,t=>ye(t,e),t,e):t;let m;if(d&&l){const e=(0,F.buildCacheContext)(r,a),t=await(0,F.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 v=s.config.before;if(v){const n=(0,F.getNextSteps)(v,(0,F.buildCacheContext)(r,a));if(1===n.length){const o=ke(n[0],we(t));if(o.length>0){const n=await Oe(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,F.tryCatchAsync)(Oe,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,he(t)),{event:null,respond:void 0}))(e,t,ke(n,we(t)),a,Ee(r,n),void 0,i)))}f&&f.length>0&&(a=await(0,F.applyState)(f,t=>ye(t,e),a,e));const y=await(0,F.tryCatchAsync)(Se,t=>(e.logger.scope(`transformer:${s.type||"unknown"}`).error("Push failed",he(t)),!1))(e,s,o,a,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||a),u=Ee(r,"unknown");if(n.next){const r=(0,F.getNextSteps)(n.next,(0,F.buildCacheContext)(u,o));if(0===r.length)return{event:o,respond:c};if(1===r.length){const n=ke(r[0],we(t));return n.length>0?Oe(e,t,n,o,u,c,i):{event:o,respond:c}}return(await Promise.all(r.map(n=>(0,F.tryCatchAsync)(Oe,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,he(t)),{event:null,respond:void 0}))(e,t,ke(n,we(t)),o,Ee(u,n),void 0,i)))).map(e=>({event:e.event,respond:void 0}))}return s.length>0?Oe(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(y&&"object"==typeof y){const{event:n,respond:o,next:s}=y;if(o&&(c=o),void 0!==s){const o=await h(n||a),u=(0,F.getNextSteps)(s,(0,F.buildCacheContext)(r,o));if(0===u.length){a=o;continue}if(1===u.length){const n=ke(u[0],we(t));return n.length>0?Oe(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,F.tryCatchAsync)(Oe,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,he(t)),{event:null,respond:void 0}))(e,t,ke(n,we(t)),o,Ee(r,n),void 0,i))),{event:null,respond:void 0}}n&&(a=n)}g&&g.length>0&&(a=await(0,F.applyState)(g,t=>ye(t,e),a,e)),m&&l&&(0,F.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((!y||"object"==typeof y&&!y.next)&&k){const n=(0,F.getNextSteps)(s.config.next,(0,F.buildCacheContext)(r,a));if(1===n.length){const o=ke(n[0],we(t));return o.length>0?Oe(e,t,o,a,r,c,i):{event:a,respond:c}}return n.length>1?(await Promise.all(n.map(n=>(0,F.tryCatchAsync)(Oe,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,he(t)),{event:null,respond:void 0}))(e,t,ke(n,we(t)),a,Ee(r,n),void 0,i))),{event:null,respond:void 0}):{event:a,respond:c}}}return{event:a,respond:c}}function qe(e){return e&&(0,F.isObject)(e)?e:{}}function Ce(e){return"string"==typeof e||!(!Array.isArray(e)||!e.every(e=>"string"==typeof e))}async function xe(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)&&!Ge(e,t,n)||(await(0,K.tryCatchAsync)(t.on,t=>{if(t instanceof K.FatalError)throw t;e.status.failed++,e.logger.scope("source").error("source on flush failed",{sourceId:r,type:n,...he(t)})})(n,s),_e(n)&&Ne(e,t,n))}function je(e){return Boolean(e.config.init)&&!e.config.require?.length}async function Ae(e,t,n){const{code:o,config:r={},env:s={},primary:i,next:a,before:c,cache:u,terminus:d}=n,l=r.state??n.state,p=l?(0,K.compileState)(l):void 0,f=u,g=f?(0,K.compileCache)({...f,stop:f.stop??!0}):void 0,h=Ce(a)?ke(a,we(e.transformers)):void 0,m=Ce(c)?ke(c,we(e.transformers)):void 0,v=d??e.push,y=Boolean(d),w=async(n,o,s)=>{if(y)return v(n);let i;const u="string"==typeof n.id&&""!==n.id?n:{...n,id:(0,K.getSpanId)()},d=m??(void 0!==c?(()=>{const t=(0,K.getNextSteps)(c,(0,K.buildCacheContext)(s.ingest));return 0===t.length?[]:ke(1===t.length?t[0]:t,we(e.transformers))})():[]);let l=[u];if(d.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const n=await Oe(e,e.transformers,d,u,s.ingest,s.respond,`source.${t}.before`);if(null===n.event)return{ok:!0};if(n.stopped)return n.respond&&(s.respond=n.respond),{ok:!0};n.respond&&(s.respond=n.respond);const o="string"==typeof u.id?u.id:"";if(Array.isArray(n.event))l=n.event.map(e=>""!==o&&e.id===o?{...e,id:(0,K.getSpanId)()}:e);else{const e=n.event;l=""===o||"string"==typeof e.id&&""!==e.id?[e]:[{...e,id:o}]}}if(g){const t=ve(g,e);if(t){const n=(0,K.buildCacheContext)(s.ingest),o=await(0,K.checkCache)(g,t,n);if(o){if("HIT"===o.status&&void 0!==o.value&&g.stop){let t=o.value;return o.rule.update&&(t=await(0,K.applyUpdate)(t,o.rule.update,{...n,cache:{status:"HIT"}},e)),s.respond?.(t),{ok:!0}}if("MISS"===o.status&&g.stop&&s.respond){const r=s.respond,a=o.rule.update,c={...n,cache:{status:"MISS"}},u=o.key,d=o.rule.ttl,l=n=>{(0,K.storeCache)(t,u,n,d),a?i=(async()=>{const t=await(0,K.applyUpdate)(n,a,c,e);r(t)})():r(n)};s.respond=l}"MISS"!==o.status||g.stop||(0,K.storeCache)(t,o.key,!0,o.rule.ttl)}}}const f=h?{kind:"single",preChain:h}:void 0!==a?(()=>{const t=(0,K.getNextSteps)(a,(0,K.buildCacheContext)(s.ingest));return 0===t.length?{kind:"single",preChain:[]}:1===t.length?{kind:"single",preChain:ke(t[0],we(e.transformers))}:{kind:"many",branches:t.map(t=>ke(t,we(e.transformers)))}})():{kind:"single",preChain:[]};p&&p.length>0&&(l=await Promise.all(l.map(t=>(0,K.applyState)(p,t=>ye(t,e),t,e))));let w={ok:!0};for(const n of l)"many"===f.kind?(await Promise.all(f.branches.map((i,a)=>(0,K.tryCatchAsync)(async()=>v(n,{...o,id:t,ingest:Ee(s.ingest,`${t}.${a}`),respond:void 0,mapping:r,preChain:i}),t=>(e.logger.scope("source:many").error(`many branch ${a} failed`,he(t)),{ok:!0}))())),w={ok:!0}):w=await v(n,{...o,id:t,ingest:s.ingest,respond:s.respond,mapping:r,preChain:f.preChain});return i&&await i,w},b=async n=>{const o=(0,K.createIngest)(t),s=(0,K.parseTraceparent)((0,K.isScope)(n)?n?.headers?.traceparent:void 0);if(s&&(o._meta.trace=s.trace,o._meta.parentEventId=s.parentSpan),!r.ingest||void 0===n)return o;const i=await(0,K.getMappingValue)(n,r.ingest,{collector:e});return{...o,...i,_meta:o._meta}},k=e.logger.scope("source").scope(t),I={...s,push:async(e,n={})=>{const o={ingest:(0,K.createIngest)(t),respond:void 0};return w(e,n,o)},command:e.command,sources:e.sources,elb:e.elb,logger:k},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:me(e,"source",t,k)},E=await(0,K.tryCatchAsync)(o,n=>{if(n instanceof K.FatalError)throw n;e.status.failed++,e.logger.scope("source").error("source factory failed",{sourceId:t,...he(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 Te(e){for(const[t,n]of Object.entries(e.sources)){if(je(n))continue;const o=n.config.require;if(!o?.length)continue;const r=o.filter(t=>!Be(e,t));r.length!==o.length&&(n.config.require=r,je(n)&&await xe(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=>!Be(e,t));if(n.config&&(n.config.require=r),r.length>0)continue;delete e.pending.destinations[t];const s=it(n);!1!==s.config.queue&&(s.queuePush=[...e.queue]),e.destinations[t]=s}}function De(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 Pe=!1;function Me(){Pe||(Pe=!0,"undefined"!=typeof console&&"function"==typeof console.warn&&console.warn("walkerOS: ignored an on-dispatch call with a non-collector argument"))}function ze(e,t,n,o){if(n instanceof H.FatalError)throw n;e.logger.scope("on").error("on callback failed",{kind:t,...o,...he(n)})}var $e=[Y.Consent,Y.User,Y.Globals,Y.Custom];function _e(e){return $e.includes(e)}function Re(e,t){switch(t){case Y.Consent:return Object.keys(e.consent).length>0;case Y.User:return Object.keys(e.user).length>0;case Y.Globals:return Object.keys(e.globals).length>0;case Y.Custom:return Object.keys(e.custom).length>0;default:return!1}}function Be(e,t){switch(t){case Y.Consent:case Y.User:case Y.Globals:case Y.Custom:return Re(e,t);case Y.Run:case Y.Ready:return!0===e.allowed;default:return e.seenEvents.has(String(t))}}function He(e,t){return e.cellVersion[String(t)]??0}function Ne(e,t,n){let o=e.delivery.get(t);o||(o={},e.delivery.set(t,o)),o[String(n)]=He(e,n)}function Ge(e,t,n){return e.allowed&&He(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 Ke(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 Fe(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:at(t.env,t.config.env),reportError:me(e,"destination",n,i,t)};(0,N.tryCatch)(t.on,t=>ze(e,"destination",t,{destId:n,type:o}))(o,a)}function Le(e,t,n,o){if(!De(e))return void Me();const r=Qe(e,t,o);if(n.length)switch(t){case Y.Consent:!function(e,t,n){const o=n||e.consent,r=Fe(e,Y.Consent);t.forEach(t=>{Ge(e,t,Y.Consent)&&Ke(e,t,Y.Consent)&&(Object.keys(o).filter(e=>e in t).forEach(n=>{(0,N.tryCatch)(t[n],t=>ze(e,"consent",t,{key:n}))(o,r)}),Ne(e,t,Y.Consent))})}(e,n,o);break;case Y.Ready:!function(e,t){if(!e.allowed)return;const n=Fe(e,Y.Ready);t.forEach(t=>{(0,N.tryCatch)(t,t=>ze(e,"ready",t))(void 0,n)})}(e,n);break;case Y.Run:!function(e,t){if(!e.allowed)return;const n=Fe(e,Y.Run);t.forEach(t=>{(0,N.tryCatch)(t,t=>ze(e,"run",t))(void 0,n)})}(e,n);break;case Y.Session:!function(e,t){if(!e.session)return;const n=Fe(e,Y.Session);t.forEach(t=>{(0,N.tryCatch)(t,t=>ze(e,"session",t))(e.session,n)})}(e,n);break;default:{const o=Fe(e,t),s=_e(t);n.forEach(n=>{"function"==typeof n&&(s&&!Ge(e,n,t)||s&&!Ke(e,n,t)||((0,N.tryCatch)(n,n=>ze(e,"generic",n,{type:t}))(r,o),s&&Ne(e,n,t)))});break}}}function Qe(e,t,n){switch(t){case Y.Consent:return n||e.consent;case Y.Session:return e.session;case Y.User:return n||e.user;case Y.Custom:return n||e.custom;case Y.Globals:return n||e.globals;case Y.Config:return n||e.config;default:return}}async function Ve(e,t,n,o,r){if(!t.on)return!1;if(_e(o)&&!Ge(e,t,o))return!1;if(_e(o)&&!Ke(e,t,o))return!1;const s=await(0,N.tryCatchAsync)(t.on,t=>ze(e,"source",t,{sourceId:n,type:o}))(o,r);return _e(o)&&Ne(e,t,o),!1===s}function We(e){return"number"==typeof e&&e>0?e:1e4}var Je=class extends Error{constructor(e){super(e),this.name="DestinationTimeoutError"}};function Ye(e,t,n){let o;const r=new Promise((e,r)=>{o=setTimeout(()=>r(new Je(n)),t)});return Promise.race([e,r]).finally(()=>{o&&clearTimeout(o)})}var Xe=Object.freeze({batched:!0});function Ze(e){return e===Xe}function et(e){return void 0===e?{}:"number"==typeof e?{wait:e}:{wait:e.wait,size:e.size,age:e.age}}function tt(e,t,n){if(!e)return[];if(Array.isArray(e)&&e.every(e=>"string"==typeof e))return ke(e,t);if("string"==typeof e)return ke(e,t);const o=(0,R.getNextSteps)(e,(0,R.buildCacheContext)(n));return 0===o.length?[]:1===o.length?ke(o[0],t):ke(o,t)}async function nt(e,t,n={},o){const{allowed:r,consent:s,user:i}=e;if(!r)return st({ok:!1});if(t){const n=e.config.queueMax;if(void 0===n)throw new Error("Collector.Config.queueMax is undefined; defaults must be seeded by collector()");const o=ie(e.queue,t,{max:n});if(o.dropped>0){const t=ge(e.status,(0,R.stepId)("collector"),"queue",o.dropped);ce(e.queue,e.logger,"collector.queue overflow; oldest events dropped",{buffer:"queue",cap:n,droppedCount:t})}else e.queue.length<n&&ue(e.queue);e.status.in++}o||(o=e.destinations);const a=e.transformers?we(e.transformers):{},c=await Promise.all(Object.entries(o||{}).map(async([o,r])=>{if(r.config.disabled)return{id:o,destination:r,skipped:!0};const c=r.config.id||o,u=(0,R.stepId)("destination",c),d=le(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=de();return void 0!==o.openUntil&&r<o.openUntil||(o.state="half-open",o.probing=!0,o.openUntil=r+n,!1)}(e.status.breakers,u,d.cooldown))return{id:o,destination:r,skipped:!0};const l=t=>{d&&pe(e.status.breakers,u,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,u)};let f=(r.queuePush||[]).map(e=>({...e,consent:s}));r.queuePush=[],t&&f.push((0,R.clone)(t));const g=n.ingest?{...n.ingest,_meta:{...n.ingest._meta,path:[...n.ingest._meta.path]}}:(0,R.createIngest)("unknown");if(!f.length&&!r.queueOn?.length)return p(),{id:o,destination:r,skipped:!0};if(!f.length&&r.queueOn?.length){if(!(0,R.getGrantedConsent)(r.config.consent,s))return p(),{id:o,destination:r,skipped:!0};let t=!1;try{t=await ot(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)}),l("transport-failure")}return p(),{id:o,destination:r,skipped:!t}}const h=[],m=f.filter(t=>{const n=(0,R.getGrantedConsent)(r.config.consent,s,t.consent);if(n)return t.consent=n,h.push(t),!1;const i=Z(e,{stepId:(0,R.stepId)("destination",o),stepType:"destination",phase:"skip",eventId:"string"==typeof t.id?t.id:"",now:Date.now(),...X(t,g,e)});return i.skipReason="consent",s&&(i.consent={...s}),r.config.consent&&(i.meta={required:{...r.config.consent}}),(0,R.emitStep)(e,i),!0});if(m.length>0){const t=r.queuePush,n=r.config.id||o,s={max:r.config.queueMax??1e3};let i=0;for(const e of m)i+=ie(t,e,s).dropped;if(i>0){fe(e,n);const o=ge(e.status,(0,R.stepId)("destination",n),"queue",i);ce(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&&ue(t)}if(!h.length)return p(),{id:o,destination:r,queue:f};let v,y,w=!1;try{w=await ot(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)}),l("transport-failure")}if(!w)return p(),{id:o,destination:r,queue:f};r.dlq||(r.dlq=[]);const b=tt(r.config.before,a,g),k=r.config.next,I=r.config?.cache,S=I?(0,R.compileCache)(I):void 0,E=S?ve(S,e):void 0,O=r.config?.state?(0,R.compileState)(r.config.state):void 0,q=O?.filter(e=>"get"===e.mode),C=O?.filter(e=>"set"===e.mode);let x=0,j=0,A=0;return await Promise.all(h.map(async t=>{let s,c;if(t.user=(0,R.assign)(i,t.user),S?.stop&&E){const e=(0,R.buildCacheContext)(g,t),n=await(0,R.checkCache)(S,E,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(b.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const r=await Oe(e,e.transformers,b,t,g,n.respond,`destination.${o}.before`);if(null===r.event)return t;r.respond&&(d=r.respond),u=Array.isArray(r.event)?r.event:[r.event]}const l=async(t,n)=>{let s=n,i=!1;if(S&&!S.stop&&E){const e=(0,R.buildCacheContext)(g,t),n=await(0,R.checkCache)(S,E,e);if("HIT"===n?.status)return!1;"MISS"===n?.status&&(s={key:n.key,ttl:n.rule.ttl},i=!0)}q&&q.length>0&&t&&(t=await(0,R.applyState)(q,t=>ye(t,e),t,e));const u=Date.now();let l=!1;const p=await(0,R.tryCatchAsync)(rt,n=>{const s=r.type||"unknown";e.logger.scope(s).error("Push failed",{...he(n),event:t.name}),v=n,l=!0;const i=r.dlq,a=r.config.id||o,c={max:r.config.dlqMax??100},u=ie(i,[t,n],c);if(u.dropped>0){fe(e,a);const t=ge(e.status,(0,R.stepId)("destination",a),"dlq",u.dropped);ce(i,e.logger.scope(r.type||"unknown"),"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:a,cap:c.max,droppedCount:t})}else i.length<c.max&&ue(i)})(e,r,o,t,g,d);if(x+=Date.now()-u,s&&E&&void 0===r.config.mock&&(i?(0,R.storeCache)(E,s.key,p??!0,s.ttl):void 0===c&&(c=p??!0)),!l&&!Ze(p)&&C&&C.length>0&&t&&(t=await(0,R.applyState)(C,t=>ye(t,e),t,e)),void 0===p||Ze(p)||(y=p),Ze(p)&&j++,!l&&k){void 0!==p&&(g._response=p);const n=tt(k,a,g);if(n.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const r=await Oe(e,e.transformers,n,t,g,d,`destination.${o}.next`);r.respond&&(d=r.respond)}}return!0};for(const e of u)await l(e,s)&&A++;return s&&E&&void 0!==c&&void 0===r.config.mock&&(0,R.storeCache)(E,s.key,c,s.ttl),t})),{id:o,destination:r,error:v,response:y,totalDuration:x,batchedCount:j,allowedCount:h.length,pushedCount:A,canonicalId:c,breakerConfig:d}})),u={},d={},l={};for(const t of c){if(t.skipped)continue;const n=t.destination,o={type:n.type||"unknown",data:t.response};fe(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,R.stepId)("destination",t.canonicalId):void 0,c=t=>{i&&a&&pe(e.status.breakers,a,t,i.threshold,i.cooldown)};if(t.error)o.error=t.error,l[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,i=t.allowedCount??0,a=t.pushedCount??i;(Math.max(0,a-n)>0||0===i)&&(u[t.id]=o,r.count++,r.lastAt=s,r.duration+=t.totalDuration||0,e.status.out++,c("success"))}}return st({event:t,...Object.keys(u).length&&{done:u},...Object.keys(d).length&&{queued:d},...Object.keys(l).length&&{failed:l}})}async function ot(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:at(t.env,t.config.env),reportError:me(e,"destination",n,s,t)};s.debug("init");const a=Date.now();let c;(0,R.emitStep)(e,Z(e,{stepId:(0,R.stepId)("destination",n),stepType:"destination",phase:"init",eventId:"",now:a}));try{c=await(0,R.useHooks)(t.init,"DestinationInit",e.hooks,e.logger)(i)}catch(t){const o=Date.now(),r=Z(e,{stepId:(0,R.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,R.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 rt(e,t,n,o,r,s){const{config:i}=t,a=await(0,R.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:{...at(t.env,i.env),...s?{respond:s}:{}},reportError:me(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=et(l?.batch),s=et(i.batch),a=r.wait??s.wait??3e4,c=r.size??s.size??1e3,d=r.age??s.age??3e4,g=at(t.env,i.env),h=(0,R.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],c={collector:e,logger:u,id:n,config:i,data:void 0,rule:o.isDefault?void 0:a.rule,ingest:a.ingest,env:{...g,...a.respond?{respond:a.respond}:{}},reportError:me(e,"destination",n,u,t)};u.debug("push batch",{events:s.entries.length});const d=t.config.id||n,l=fe(e,d),p=le(t.config.breaker),h=(0,R.stepId)("destination",d),m=t=>{p&&pe(e.status.breakers,h,t,p.threshold,p.cooldown)},v=Date.now(),y=new Map;let w,b=!1;const k=n=>{const o=t.dlq=t.dlq||[],r={max:t.config.dlqMax??100};let s=0;for(const e of n)s+=ie(o,e,r).dropped;if(s>0){const t=ge(e.status,(0,R.stepId)("destination",d),"dlq",s);ce(o,u,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:d,cap:r.max,droppedCount:t})}else o.length<r.max&&ue(o);l.failed+=n.length,l.dlqSize=o.length,e.status.failed+=n.length};let I=s.entries.length;const S=We(i.timeout),E=await(0,R.tryCatchAsync)((o,r)=>Ye(Promise.resolve((0,R.useHooks)(t.pushBatch,"DestinationPushBatch",e.hooks,e.logger)(o,r)),S,`Destination "${n}" batch delivery timed out after ${S}ms`),e=>{I=0,b=!0,w=e,k(s.entries.map(t=>[t.event,e])),m("transport-failure"),u.error("Push batch failed",{error:e instanceof Error?e.message:String(e),entries:s.entries.length})})(s,c);if((0,R.isObject)(O=E)&&Array.isArray(O.failed)&&E.failed.length>0){const e=[];for(const t of E.failed){const n=s.entries[t.index];if(!n||y.has(t.index))continue;const o=t.error??new Error(`Push batch entry ${t.index} failed (no per-row error provided)`);y.set(t.index,o),e.push([n.event,o])}e.length>0&&(k(e),I=Math.max(0,s.entries.length-e.length),u.error("Push batch partial failure",{failed:e.length,delivered:I,entries:s.entries.length}))}var O;const q=Date.now();s.entries.forEach((t,o)=>{const r=b||y.has(o),i=X(t.event,t.ingest,e),a=Z(e,{stepId:(0,R.stepId)("destination",n),stepType:"destination",phase:r?"error":"flush",eventId:"string"==typeof t.event.id?t.event.id:"",now:q,traceId:i.traceId,sourceId:i.sourceId,parentEventId:i.parentEventId});if(a.batch={size:s.entries.length,index:o},a.durationMs=q-v,r){const e=b?w:y.get(o);a.error=e instanceof Error?{name:e.name,message:e.message}:{message:String(e)}}(0,R.emitStep)(e,a)}),u.debug("push batch done"),l.inFlightBatch=Math.max(0,(l.inFlightBatch??0)-s.entries.length),I>0&&(l.count+=I,l.lastAt=Date.now(),e.status.out+=I,m("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,R.isDefined)(a.data)&&c.batched.data.push(a.data);const d="string"==typeof a.event.id?a.event.id:"",g=X(o,r,e),h=Date.now(),m=Z(e,{stepId:(0,R.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,R.emitStep)(e,m);const v=Z(e,{stepId:(0,R.stepId)("destination",n),stepType:"destination",phase:"out",eventId:d,now:h,traceId:g.traceId,sourceId:g.sourceId,parentEventId:g.parentEventId});a.mappingKey&&(v.mappingKey=a.mappingKey),v.outEvent=a.event,v.batch={size:c.batched.entries.length,index:c.batched.entries.length-1},(0,R.emitStep)(e,v);const y=t.config.id||n,w=fe(e,y);return w.inFlightBatch=(w.inFlightBatch??0)+1,c.batchFn(),Xe}{let s;if(u.debug("push",{event:a.event.name}),"trace"===e.observeLevel?.()&&Array.isArray(t.calls)&&t.calls.length>0){const e=ne({...d.env,simulation:t.calls});d.env=e.wrappedEnv,s=e.calls,e.unresolved.length>0&&(e.wrappedEnv[R.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}=X(o,r,e),g=Date.now(),h=Z(e,{stepId:(0,R.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,R.emitStep)(e,h);try{const o=We(i.timeout),r=await Ye(Promise.resolve((0,R.useHooks)(t.push,"DestinationPush",e.hooks,e.logger)(a.event,d)),o,`Destination "${n}" delivery timed out after ${o}ms`),h=Date.now(),m=Z(e,{stepId:(0,R.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=se(s)),(0,R.isDefined)(r)&&(m.meta={...m.meta,response:r}),a.mappingKey&&(m.mappingKey=a.mappingKey),(0,R.emitStep)(e,m),u.debug("push done"),r}catch(t){const o=Date.now(),r=Z(e,{stepId:(0,R.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=se(s)),a.mappingKey&&(r.mappingKey=a.mappingKey),(0,R.emitStep)(e,r),t}}}function st(e){return{ok:!e?.failed,...e}}function it(e){const{code:t,config:n={},env:o={},cache:r,state:s}=e,{config:i}=be(e,"before"),{config:a}=be({...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=at(t.env,o);return{...t,config:c,env:u}}function at(e,t){return e||t?t?e&&(0,R.isObject)(e)&&(0,R.isObject)(t)?{...e,...t}:t:e:{}}async function ct(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 ut(e,t){e.stateVersion++,e.cellVersion[t]=e.stateVersion}async function dt(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 Y.Config:(0,L.isObject)(n)&&((0,U.assign)(e.config,n,{shallow:!1}),r=n,s=!0);break;case Y.Consent:if((0,L.isObject)(n)){const{update:t}=function(e,t){const n={};return Object.entries(t).forEach(([e,t])=>{n[e]=!!t}),e.consent=(0,z.assign)(e.consent,n),{update:n}}(e,n);ut(e,Y.Consent),r=t,s=!0}break;case Y.Custom:(0,L.isObject)(n)&&(e.custom=(0,U.assign)(e.custom,n),ut(e,Y.Custom),r=n,s=!0);break;case Y.Destination:(0,L.isObject)(n)&&"code"in n&&(0,L.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,R.isFunction)(n.push))return st({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,R.getId)(5,"abcdefghijklmnopqrstuvwxyz")}while(e.destinations[l]||e.pending.destinations[l]);if(d.require?.length){e.pending.destinations[l]=t,await Te(e);const n=e.destinations[l];return n?nt(e,void 0,{},{[l]:n}):st({ok:!0})}const p={...n,config:d,env:at(n.env,r)};return e.destinations[l]=p,!1!==p.config.queue&&(p.queuePush=[...e.queue]),nt(e,void 0,{},{[l]:p})}(e,n));break;case Y.Globals:(0,L.isObject)(n)&&(e.globals=(0,U.assign)(e.globals,n),ut(e,Y.Globals),r=n,s=!0);break;case Y.Hook:if((0,L.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 Y.On:if((0,L.isObject)(n)&&(0,U.isString)(n.type)){const{type:t,rules:o}=n;await async function(e,t,n){if(!De(e))return void Me();const o=e.on,r=o[t]||[],s=(0,H.isArray)(n)?n:[n];s.forEach(e=>{r.push(e)}),o[t]=r,Le(e,t,s)}(e,t,o)}break;case Y.Ready:s=!0;break;case Y.Run:o=await async function(e,t){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),ut(e,Y.Consent)),t.user&&(e.user=(0,U.assign)(e.user,t.user),ut(e,Y.User)),t.globals&&(e.globals=(0,U.assign)(e.config.globalsStatic||{},t.globals),ut(e,Y.Globals)),t.custom&&(e.custom=(0,U.assign)(e.custom,t.custom),ut(e,Y.Custom))),Object.values(e.destinations).forEach(e=>{e.queuePush=[]}),e.queue=[],e.round++,await Te(e),await async function(e){if(De(e))for(const t of $e){if(!Re(e,t))continue;const n=Qe(e,t);Le(e,t,e.on[t]||[]);for(const[o,r]of Object.entries(e.sources))je(r)&&await Ve(e,r,o,t,n)}else Me()}(e);let n=!0;const o={};if(e.preRunQueue.length){const t=e.preRunQueue.splice(0);e.logger.debug("replaying pre-run events",{count:t.length});for(const{event:r,options:s}of t){const t=await e.push(r,s);!1===t.ok&&(n=!1),t.failed&&Object.assign(o,t.failed)}}const r=await nt(e);if(n)return r;const s={...r.failed??{},...o};return{...r,ok:!1,...Object.keys(s).length>0?{failed:s}:{}}}(e,n),s=!0;break;case Y.Session:s=!0;break;case Y.Shutdown:e.hasShutdown||(e.hasShutdown=!0,await async function(e){const t=e.logger;await ct(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 ct(e.destinations,"destination",t),await ct(e.transformers,"transformer",t),await ct(e.stores,"store",t)}(e));break;case Y.User:(0,L.isObject)(n)&&((0,U.assign)(e.user,n,{shallow:!1}),ut(e,Y.User),r=n,s=!0);break;default:return e.logger.warn("unknown command",{command:t}),st({ok:!1})}if(s){await async function(e,t,n,o){if(!De(e))return Me(),!0;e.seenEvents.add(String(t));let r=n||[];n||(r=e.on[t]||[]);const s=Qe(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&&(je(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))je(n)&&n.queueOn?.length&&await xe(e,n,t);const a=Object.values(e.sources).some(e=>!je(e)&&e.config.require?.length);return(Object.keys(e.pending.destinations).length>0||a)&&await Te(e),Le(e,t,r,o),!i}(e,t,void 0,r);const n=await nt(e);if(o&&!1===o.ok){const e={...n.failed??{},...o.failed??{}};o={...n,ok:!1,...Object.keys(e).length>0?{failed:e}:{}}}else o=n}return o||st({ok:!0})}()}finally{i()}}function lt(e,t){return{timing:Math.round((Date.now()-e.timing)/10)/100,source:{type:"collector",schema:"4"},...t}}function pt(e,t,n){const o=t.name;if("string"!=typeof o)throw new U.InvalidEventError(void 0===o?"Event name is required":"Event name is invalid");if(!o)throw new U.InvalidEventError("Event name is required");const[r,s]=o.split(" ");if(!r||!s)throw new U.InvalidEventError("Event name is invalid");const{timestamp:i=Date.now(),name:a=`${r} ${s}`,data:c={},context:u={},globals:d={},custom:l={},user:p=e.user,nested:f=[],consent:g=e.consent,id:h=(0,U.getSpanId)(),trigger:m="",entity:v=r,action:y=s,timing:w=0,source:b={type:"collector",schema:"4"}}=t,k=b??{type:"collector",schema:"4"},I=k.count??(e.count+=1),S=k.trace??n?._meta.trace??e.trace,E={...k,count:I};void 0!==S&&(E.trace=S);const O=e.name??k.platform??"default",q=e.release??"4.6.0";return E.release={...k.release,[O]:q},{name:a,data:c,context:u,globals:(0,U.assign)(e.globals,d),custom:l,user:p,nested:f,consent:g,id:h,trigger:m,entity:v,action:y,timestamp:i,timing:w,source:E}}function ft(e,t){const n=(0,Q.useHooks)(async(n,o={})=>await(0,Q.tryCatchAsync)(async()=>{if(!e.allowed){const t=e.config.queueMax;if(void 0===t)throw new Error("Collector.Config.queueMax is undefined; defaults must be seeded by collector()");const r=ie(e.preRunQueue,{event:n,options:o},{max:t});if(r.dropped>0){const n=ge(e.status,"collector.preRun","queue",r.dropped);ce(e.preRunQueue,e.logger,"collector.preRunQueue overflow; oldest events dropped",{buffer:"queue",cap:t,droppedCount:n})}else e.preRunQueue.length<t&&ue(e.preRunQueue);return e.logger.debug("event held until run",{name:n.name,dropped:r.dropped}),st({ok:!0})}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,Q.createIngest)(s||"unknown");if(c){const t=await(0,Q.processEventMapping)(f,c,e);if(t.ignore)return st({ok:!0});if(c.consent&&!(0,Q.getGrantedConsent)(c.consent,e.consent,t.event.consent))return st({ok:!0});f=t.event}if(u?.length&&e.transformers&&Object.keys(e.transformers).length>0){const n=await Oe(e,e.transformers,u,f,h,p,s?`source.${s}.next`:void 0);if(null===n.event)return e.logger.debug("Event dropped by transformer chain"+(n.droppedBy?` (${n.droppedBy})`:"")),st({ok:!0,dropped:!0});if(n.stopped)return n.respond&&(p=n.respond),st({ok:!0});n.respond&&(p=n.respond);const o="string"==typeof f.id?f.id:"";if(Array.isArray(n.event)){const i=await Promise.all(n.event.map(async n=>{const r=""!==o&&n.id===o?{...n,id:(0,Q.getSpanId)()}:n,i=t(r),a=pt(e,i,h);return nt(e,a,{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 i[0]??st({ok:!0})}f=""===o||"string"==typeof n.event.id&&""!==n.event.id?n.event:{...n.event,id:o}}const m=function(e,t,n){return pt(e,lt(e,t),n)}(e,f,h),v=await nt(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 v},t=>{if(t instanceof Q.FatalError)throw t;if(t instanceof Q.InvalidEventError){const n=o.id;if(n){e.status.sources[n]||(e.status.sources[n]={count:0,duration:0});const t=e.status.sources[n];t.rejected=(t.rejected??0)+1}return e.logger.warn("invalid event rejected",{error:t.message}),st({ok:!1,invalid:!0,error:t.message})}return e.status.failed++,e.logger.error("push failed",{...he(t),event:n.name}),st({ok:!1})})(),"Push",e.hooks,e.logger);return async(t,o)=>{const r="string"==typeof t.id&&""!==t.id?t:{...t,id:(0,Q.getSpanId)()},s="string"==typeof r.id?r.id:"",{traceId:i,sourceId:a,parentEventId:c}=X(r,o?.ingest,e),u=Date.now(),d=Z(e,{stepId:"collector.push",stepType:"collector",phase:"in",eventId:s,now:u,traceId:i,sourceId:a,parentEventId:c});d.inEvent=r,(0,Q.emitStep)(e,d);try{const t=await n(r,o),d=Date.now(),l=Z(e,{stepId:"collector.push",stepType:"collector",phase:"out",eventId:s,now:d,traceId:i,sourceId:a,parentEventId:c});return l.durationMs=d-u,l.outEvent=t,(0,Q.emitStep)(e,l),t}catch(t){const n=Date.now(),o=Z(e,{stepId:"collector.push",stepType:"collector",phase:"error",eventId:s,now:n,traceId:i,sourceId:a,parentEventId:c});throw o.durationMs=n-u,o.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},(0,Q.emitStep)(e,o),t}}}function gt(e={}){const t=e.maxEntries??1e4,n=e.lowWaterMark??.8,o=e.sweepIntervalMs??6e4,r=Math.floor(t*n),s=new Map,i={hits:0,misses:0,populates:0,writes:0,deletes:0,evictions_entries:0,evictions_ttl:0};let a;return o>0&&(a=setInterval(function(){const e=Date.now();let t=0;for(const[n,o]of s)void 0!==o.expires&&o.expires<=e&&(s.delete(n),t++);i.evictions_ttl+=t},o),a&&"function"==typeof a.unref&&a.unref()),{type:"memory",config:{},get(e){const t=s.get(e);if(t)return void 0!==t.expires&&t.expires<=Date.now()?(s.delete(e),i.evictions_ttl++,void i.misses++):(s.delete(e),s.set(e,t),i.hits++,t.value);i.misses++},set(e,n,o){const a=!s.has(e);a||s.delete(e),s.set(e,{value:n,expires:void 0!==o?Date.now()+o:void 0}),i.writes++,a&&i.populates++,s.size>t&&function(){if(s.size<=t)return;const e=s.size-r;let n=0;for(const t of s.keys()){if(n>=e)break;s.delete(t),n++}i.evictions_entries+=n}()},delete(e){s.delete(e)&&i.deletes++},get counters(){return{...i}},destroy(){void 0!==a&&(clearInterval(a),a=void 0),s.clear()}}}function ht(e,t){const{cacheConfig:n,cacheStore:o,namespace:r,logger:s,storeId:i,collector:a}=t,c=(e,t)=>{if(!a)return;const n=Z(a,{stepId:`store.${i}`,stepType:"store",phase:"in",eventId:"",now:Date.now()});n.meta={op:"cache",cached:"hit"===t,status:t,key:e},(0,J.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,J.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,J.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,J.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,J.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,he(n)):console.warn(o,n)}}function mt(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=Z(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=Z(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=Z(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=Z(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=Z(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=Z(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=Z(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=Z(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=Z(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 vt(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:[],preRunQueue:[],round:0,count:0,stateVersion:0,cellVersion:{},delivery:new WeakMap,session:void 0,status:{startedAt:Date.now(),in:0,out:0,failed:0,sources:{},destinations:{},dropped:{},connectionErrors:{},breakers:{}},timing:Date.now(),user:e.user||{},sources:{},pending:{destinations:{}},hasShutdown:!1,seenEvents:new Set,push:void 0,command:void 0,elb:void 0};var i,a;void 0!==e.name&&(s.name=e.name),void 0!==e.release&&(s.release=e.release),s.push=ft(s,e=>lt(s,e)),s.command=(i=s,a=dt,(0,V.useHooks)(async(e,t,n)=>await(0,V.tryCatchAsync)(async()=>await a(i,e,t,n),t=>{if(t instanceof V.FatalError)throw t;return i.status.failed++,i.logger.error("command failed",{...he(t),command:e}),st({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 st({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:me(e,"store",o,a)},u=await t(c);n[o]=u}const o=t,r=function(e){const t={};for(const n of Object.keys(e))t[n]="WHITE";const n=[],o=[];function r(s){const i=t[s];if("BLACK"===i)return;if("GRAY"===i){const e=o.indexOf(s),t=o.slice(-1===e?0:e).concat(s).join(" -> ");throw new Error(`Cycle in cache.store chain: ${t}`)}t[s]="GRAY",o.push(s);const a=e[s].cache?.store;if(void 0!==a){if(!(a in e))throw new Error(`Store "${s}" cache.store references "${a}", which is not declared in flow.stores`);r(a)}o.pop(),t[s]="BLACK",n.push(s)}for(const n of Object.keys(e))"WHITE"===t[n]&&r(n);return n}(o);for(const t of r){const r=o[t].cache;if(!r)continue;let s,i;void 0!==r.store?(s=n[r.store],i=r.store):(n.__cache||(n.__cache=gt()),s=n.__cache,i="__cache");const a=r.namespace??t;e.logger.scope("store-cache").scope(t).info(`store "${t}" caches with namespace "${a}:" via ${i}`),n[t]=ht(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&&mt(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=gt()),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]=it(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,F.validateStepEntry)(r,"Transformer");if(!i.ok){e.logger.warn(`Transformer ${o} invalid (${i.code}): ${i.reason}. Skipping.`);continue}const{config:a}=be(r,"before"),{config:c}=be({...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,F.createIngest)(o),config:f,env:s,reportError:me(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,F.processEventMapping)(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!==p&&void 0===v.config?.state&&(v.config={...v.config??{},state:p}),n[o]=v}return n}(s,e.transformers||{}),s}var yt=globalThis;function wt(e){try{const t=yt.window;if(!t)return;t.localStorage.getItem($.OBSERVE_STORAGE_KEY)===e&&t.localStorage.removeItem($.OBSERVE_STORAGE_KEY)}catch{}}function bt(e,t){return void 0===t?e:n=>e({...n,release:t})}async function kt(e){e=e||{};const t=await vt(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($.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($.OBSERVE_STORAGE_KEY)??null}catch{return null}}();if(!r)return;const s=(0,$.parseObserveCredential)(r);if(!s)return void(null===t?(e.logger.warn("observe: malformed stored credential cleared"),wt(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($.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($.OBSERVE_STORAGE_KEY);const u=c.toString();e.history.replaceState({},"",`${a}${u?`?${u}`:""}${r}`)}catch{}}();const a=(0,$.createBatchedPoster)({url:`${n.url}/ingest/${s.ses}`,token:s.secret,headers:{"X-Walkeros-Binding":n.binding},onStatus:t=>{401===t&&(wt(r),i&&e.observers.delete(i))}});i=(0,$.createTelemetryObserver)(function(e,t){return void 0===t?e:n=>e({...n,flowId:t})}(bt(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,$.createTelemetryObserver)(bt((0,$.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 Ae(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,K.tryCatchAsync)(n.init.bind(n),n=>{if(n instanceof K.FatalError)throw n;o=!0,e.status.failed++,e.logger.scope("source").error("source init failed",{sourceId:t,...he(n)})})(),o||(n.config.init=!0,je(n)&&await xe(e,n,t))}return await Te(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 It=async e=>{let t;return{get flow(){return t},trigger:()=>async n=>{if(!t){const n=await kt(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 St(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 Et={};s(Et,{createTrigger:()=>_t,env:()=>Ot,step:()=>Tt});var Ot={};s(Ot,{push:()=>jt,simulation:()=>At});var qt=()=>{},Ct={error:qt,warn:qt,info:qt,debug:qt,throw:e=>{throw"string"==typeof e?new Error(e):e},json:qt,scope:()=>Ct},xt=()=>()=>Promise.resolve({ok:!0}),jt={get push(){return xt()},get command(){return xt()},get elb(){return xt()},logger:Ct},At=["AWS.SQSClient"],Tt={};s(Tt,{decoderText:()=>Mt,malformedJson:()=>zt,orderComplete:()=>Pt,pageView:()=>Dt});var Dt={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"]]},Pt={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"]]},Mt={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"]]},zt={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 $t(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 kt(e);t={collector:n.collector,elb:n.elb}}const o=function(e){for(const t of Object.values(e.sources??{}))if($t(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:()=>d,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),maxBatchSize:r.number().int().min(1).describe("Maximum number of events accepted in a single batch request").default(100),healthPath:r.string().describe("Health check endpoint path (e.g., /health)").default("/health")}),d=o(u);import{zodToSchema as l}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=l(p),y=l(m),w={};t(w,{createTrigger:()=>Nn,env:()=>b,step:()=>O,trigger:()=>Gn});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,lambdaPostForwardsSource:()=>j});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({name:"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({name:"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"}'}]]},j={title:"Lambda POST with provenance",description:"A POST body carrying a source map is forwarded in full, so release and trace provenance survive the crossing.",trigger:{type:"POST"},in:{version:"2.0",requestContext:{http:{method:"POST",path:"/collect"},requestId:"req-321"},body:JSON.stringify({name:"page view",data:{title:"Home"},source:{release:{web:"r1"}}}),isBase64Encoded:!1},out:[["elb",{name:"page view",data:{title:"Home"},source:{release:{web:"r1"}}}]]};import{assign as T}from"@walkeros/core";import{OBSERVE_STORAGE_KEY as A,createBatchedPoster as D,createTelemetryObserver as P,parseObserveCredential as M}from"@walkeros/core";import{assign as $,createLogger as _}from"@walkeros/core";import{assign as R,buildCacheContext as B,clone as H,compileCache as N,checkCache as G,storeCache as z,createIngest as U,debounce as F,emitStep as K,getId as L,getGrantedConsent as Q,getNextSteps as W,isDefined as J,isFunction as V,isObject as Y,OBSERVE_ENV_KEY as X,processEventMapping as Z,stepId as ee,tryCatchAsync as te,useHooks as ne,compileState as oe,applyState as re}from"@walkeros/core";import{emitStep as se}from"@walkeros/core";import{parseCallPath as ae}from"@walkeros/core";import{isArray as ie,FatalError as ce}from"@walkeros/core";import{tryCatch as ue,tryCatchAsync as de}from"@walkeros/core";import{stepId as le}from"@walkeros/core";import{createIngest as fe,FatalError as pe,getMappingValue as ge,getSpanId as he,parseTraceparent as me,isScope as ve,tryCatchAsync as ye,getNextSteps as we,compileCache as be,checkCache as ke,storeCache as Ie,applyUpdate as Se,buildCacheContext as Ee,compileState as Oe,applyState as qe}from"@walkeros/core";import{createIngest as xe,emitStep as Ce,FatalError as je,isObject as Te,stepId as Ae,tryCatchAsync as De,useHooks as Pe,getNextSteps as Me,compileCache as $e,checkCache as _e,storeCache as Re,buildCacheContext as Be,validateStepEntry as He,processEventMapping as Ne,compileState as Ge,applyState as ze}from"@walkeros/core";import{assign as Ue,getSpanId as Fe,getTraceId as Ke,InvalidEventError as Le,isFunction as Qe,isString as We}from"@walkeros/core";import{isObject as Je}from"@walkeros/core";import{createIngest as Ve,emitStep as Ye,FatalError as Xe,getGrantedConsent as Ze,getSpanId as et,InvalidEventError as tt,processEventMapping as nt,tryCatchAsync as ot,useHooks as rt}from"@walkeros/core";import{FatalError as st,useHooks as at,tryCatchAsync as it}from"@walkeros/core";import{emitStep as ct,useHooks as ut}from"@walkeros/core";import{compileMatcher as dt,emitStep as lt,readCacheEnvelope as ft,wrapCacheEnvelope as pt}from"@walkeros/core";var gt={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 ht(e,t,n){return{traceId:e.source?.trace??t?._meta.trace??n.trace,sourceId:t?._meta.path[0],parentEventId:t?._meta.parentEventId}}function mt(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 vt(e){return"object"==typeof e&&null!==e}function yt(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(yt(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:yt(s,t,n+1);return r}function wt(e){const t=[],n=[],{simulation:o,...r}=e,s=yt(r,new WeakMap,0);for(const e of o){const o=ae(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(!vt(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 bt(e,t){try{return e[t]}catch{return"[unreadable]"}}function kt(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(bt(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 It(e){return e.map(e=>({fn:e.fn,args:kt(e.args),ts:e.ts}))}function St(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 Et=new WeakMap;function Ot(e,t,n,o){Et.get(e)||(Et.set(e,!0),t.warn(n,o))}function qt(e){Et.delete(e)}var xt=()=>Date.now();function Ct(e){if(void 0!==e)return"number"==typeof e?{threshold:e,cooldown:3e4}:{threshold:e.threshold??5,cooldown:e.cooldown??3e4}}function jt(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=xt()+r)):void(s.consecutiveFailures>=o&&(s.state="open",s.probing=!1,s.openUntil=xt()+r)))}function Tt(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 At(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 Dt(e){const t={error:e instanceof Error?e.message:String(e)};if(e instanceof Error&&e.name&&"Error"!==e.name&&(t.name=e.name),"object"==typeof e&&null!==e&&"code"in e){const n=e;"number"!=typeof n.code&&"string"!=typeof n.code||(t.code=n.code)}return t}function Pt(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=St(a,[o,r],i);if(c.dropped>0){const t=At(e.status,le("destination",n),"dlq",c.dropped);Ot(a,s,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:n,cap:i.max,droppedCount:t})}else a.length<i.max&&qt(a);const u=Tt(e,n);u.failed++,u.dlqSize=a.length,e.status.failed++;const d=Ct(t.config.breaker);if(d){const o=t.config.id||n;jt(e.status.breakers,le("destination",o),"transport-failure",d.threshold,d.cooldown)}}(e,r,n,a,t,o):e.status.failed++,void o.error("report error",{...Dt(t),event:a.name});e.status.connectionErrors[s]=(e.status.connectionErrors[s]??0)+1,o.error("connection error",Dt(t))}catch{}}}function Mt(e,t){return e.storeId&&t.stores[e.storeId]?t.stores[e.storeId]:t.stores.__cache}function $t(e,t){return e?t.stores[e]:t.stores.__cache}function _t(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 Rt(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 Bt(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 Ht(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:xe(n),config:t.config,env:Ut(t.config.env),reportError:Pt(e,"transformer",n,r)};r.debug("init");const a=await Pe(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 Nt(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:{...Ut(t.config.env),...s?{respond:s}:{}},reportError:Pt(e,"transformer",n,i)};i.debug("push",{event:o.name});const u="string"==typeof o.id?o.id:"",{traceId:d,sourceId:l,parentEventId:f}=ht(o,r,e),p=Date.now(),g=mt(e,{stepId:Ae("transformer",n),stepType:"transformer",phase:"in",eventId:u,now:p,traceId:d,sourceId:l,parentEventId:f});g.inEvent=o,Ce(e,g);try{const r=await Pe(t.push,"TransformerPush",e.hooks,e.logger)(o,c),s=Date.now(),a=mt(e,{stepId:Ae("transformer",n),stepType:"transformer",phase:"out",eventId:u,now:s,traceId:d,sourceId:l,parentEventId:f});return a.durationMs=s-p,a.outEvent=r,Ce(e,a),i.debug("push done"),r}catch(t){const o=Date.now(),r=mt(e,{stepId:Ae("transformer",n),stepType:"transformer",phase:"error",eventId:u,now:o,traceId:d,sourceId:l,parentEventId:f});throw r.durationMs=o-p,r.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},Ce(e,r),t}}function Gt(e,t){return e?{...e,_meta:{...e._meta,path:[...e._meta.path]}}:xe(t)}async function zt(e,t,n,o,r,s,a){r||(r=xe(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 De(Ht,t=>{if(t instanceof je)throw t;return e.status.failed++,e.logger.scope(`transformer:${s.type||"unknown"}`).error("transformer init failed",{transformer:o,...Dt(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,d=u?$e(u):void 0,l=d?Mt(d,e):void 0,f=s.config?.state?Ge(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?ze(g,t=>$t(t,e),t,e):t;let m;if(d&&l){const e=Be(r,i),t=await _e(d,l,e);if("HIT"===t?.status&&t.value){if(i=t.value,d.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=Me(v,Be(r,i));if(1===n.length){const o=Bt(n[0],_t(t));if(o.length>0){const n=await zt(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=>De(zt,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,Dt(t)),{event:null,respond:void 0}))(e,t,Bt(n,_t(t)),i,Gt(r,n),void 0,a)))}p&&p.length>0&&(i=await ze(p,t=>$t(t,e),i,e));const y=await De(Nt,t=>(e.logger.scope(`transformer:${s.type||"unknown"}`).error("Push failed",Dt(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=Gt(r,"unknown");if(n.next){const r=Me(n.next,Be(u,o));if(0===r.length)return{event:o,respond:c};if(1===r.length){const n=Bt(r[0],_t(t));return n.length>0?zt(e,t,n,o,u,c,a):{event:o,respond:c}}return(await Promise.all(r.map(n=>De(zt,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,Dt(t)),{event:null,respond:void 0}))(e,t,Bt(n,_t(t)),o,Gt(u,n),void 0,a)))).map(e=>({event:e.event,respond:void 0}))}return s.length>0?zt(e,t,s,o,u,c,a):{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(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=Me(s,Be(r,o));if(0===u.length){i=o;continue}if(1===u.length){const n=Bt(u[0],_t(t));return n.length>0?zt(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=>De(zt,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,Dt(t)),{event:null,respond:void 0}))(e,t,Bt(n,_t(t)),o,Gt(r,n),void 0,a))),{event:null,respond:void 0}}n&&(i=n)}g&&g.length>0&&(i=await ze(g,t=>$t(t,e),i,e)),m&&l&&Re(l,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=Me(s.config.next,Be(r,i));if(1===n.length){const o=Bt(n[0],_t(t));return o.length>0?zt(e,t,o,i,r,c,a):{event:i,respond:c}}return n.length>1?(await Promise.all(n.map(n=>De(zt,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,Dt(t)),{event:null,respond:void 0}))(e,t,Bt(n,_t(t)),i,Gt(r,n),void 0,a))),{event:null,respond:void 0}):{event:i,respond:c}}}return{event:i,respond:c}}function Ut(e){return e&&Te(e)?e:{}}function Ft(e){return"string"==typeof e||!(!Array.isArray(e)||!e.every(e=>"string"==typeof e))}async function Kt(e,t,n){if(!t.on||!t.queueOn?.length)return;const o=t.queueOn;t.queueOn=[];const r=n||t.config?.id||"unknown";for(const{type:n,data:s}of o)en(n)&&!sn(e,t,n)||(await ye(t.on,t=>{if(t instanceof pe)throw t;e.status.failed++,e.logger.scope("source").error("source on flush failed",{sourceId:r,type:n,...Dt(t)})})(n,s),en(n)&&rn(e,t,n))}function Lt(e){return Boolean(e.config.init)&&!e.config.require?.length}async function Qt(e,t,n){const{code:o,config:r={},env:s={},primary:a,next:i,before:c,cache:u,terminus:d}=n,l=r.state??n.state,f=l?Oe(l):void 0,p=u,g=p?be({...p,stop:p.stop??!0}):void 0,h=Ft(i)?Bt(i,_t(e.transformers)):void 0,m=Ft(c)?Bt(c,_t(e.transformers)):void 0,v=d??e.push,y=Boolean(d),w=async(n,o,s)=>{if(y)return v(n);let a;const u="string"==typeof n.id&&""!==n.id?n:{...n,id:he()},d=m??(void 0!==c?(()=>{const t=we(c,Ee(s.ingest));return 0===t.length?[]:Bt(1===t.length?t[0]:t,_t(e.transformers))})():[]);let l=[u];if(d.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const n=await zt(e,e.transformers,d,u,s.ingest,s.respond,`source.${t}.before`);if(null===n.event)return{ok:!0};if(n.stopped)return n.respond&&(s.respond=n.respond),{ok:!0};n.respond&&(s.respond=n.respond);const o="string"==typeof u.id?u.id:"";if(Array.isArray(n.event))l=n.event.map(e=>""!==o&&e.id===o?{...e,id:he()}:e);else{const e=n.event;l=""===o||"string"==typeof e.id&&""!==e.id?[e]:[{...e,id:o}]}}if(g){const t=Mt(g,e);if(t){const n=Ee(s.ingest),o=await ke(g,t,n);if(o){if("HIT"===o.status&&void 0!==o.value&&g.stop){let t=o.value;return o.rule.update&&(t=await Se(t,o.rule.update,{...n,cache:{status:"HIT"}},e)),s.respond?.(t),{ok:!0}}if("MISS"===o.status&&g.stop&&s.respond){const r=s.respond,i=o.rule.update,c={...n,cache:{status:"MISS"}},u=o.key,d=o.rule.ttl,l=n=>{Ie(t,u,n,d),i?a=(async()=>{const t=await Se(n,i,c,e);r(t)})():r(n)};s.respond=l}"MISS"!==o.status||g.stop||Ie(t,o.key,!0,o.rule.ttl)}}}const p=h?{kind:"single",preChain:h}:void 0!==i?(()=>{const t=we(i,Ee(s.ingest));return 0===t.length?{kind:"single",preChain:[]}:1===t.length?{kind:"single",preChain:Bt(t[0],_t(e.transformers))}:{kind:"many",branches:t.map(t=>Bt(t,_t(e.transformers)))}})():{kind:"single",preChain:[]};f&&f.length>0&&(l=await Promise.all(l.map(t=>qe(f,t=>$t(t,e),t,e))));let w={ok:!0};for(const n of l)"many"===p.kind?(await Promise.all(p.branches.map((a,i)=>ye(async()=>v(n,{...o,id:t,ingest:Gt(s.ingest,`${t}.${i}`),respond:void 0,mapping:r,preChain:a}),t=>(e.logger.scope("source:many").error(`many branch ${i} failed`,Dt(t)),{ok:!0}))())),w={ok:!0}):w=await v(n,{...o,id:t,ingest:s.ingest,respond:s.respond,mapping:r,preChain:p.preChain});return a&&await a,w},b=async n=>{const o=fe(t),s=me(ve(n)?n?.headers?.traceparent:void 0);if(s&&(o._meta.trace=s.trace,o._meta.parentEventId=s.parentSpan),!r.ingest||void 0===n)return o;const a=await ge(n,r.ingest,{collector:e});return{...o,...a,_meta:o._meta}},k=e.logger.scope("source").scope(t),I={...s,push:async(e,n={})=>{const o={ingest:fe(t),respond:void 0};return w(e,n,o)},command:e.command,sources:e.sources,elb:e.elb,logger:k},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:Pt(e,"source",t,k)},E=await ye(o,n=>{if(n instanceof pe)throw n;e.status.failed++,e.logger.scope("source").error("source factory failed",{sourceId:t,...Dt(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 Wt(e){for(const[t,n]of Object.entries(e.sources)){if(Lt(n))continue;const o=n.config.require;if(!o?.length)continue;const r=o.filter(t=>!nn(e,t));r.length!==o.length&&(n.config.require=r,Lt(n)&&await Kt(e,n,t))}for(const[t,n]of Object.entries(e.pending.destinations)){if(!e.pending.destinations[t]||e.destinations[t])continue;const o=n.config?.require;if(!o)continue;const r=o.filter(t=>!nn(e,t));if(n.config&&(n.config.require=r),r.length>0)continue;delete e.pending.destinations[t];const s=En(n);!1!==s.config.queue&&(s.queuePush=[...e.queue]),e.destinations[t]=s}}function Jt(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 Vt=!1;function Yt(){Vt||(Vt=!0,"undefined"!=typeof console&&"function"==typeof console.warn&&console.warn("walkerOS: ignored an on-dispatch call with a non-collector argument"))}function Xt(e,t,n,o){if(n instanceof ce)throw n;e.logger.scope("on").error("on callback failed",{kind:t,...o,...Dt(n)})}var Zt=[gt.Consent,gt.User,gt.Globals,gt.Custom];function en(e){return Zt.includes(e)}function tn(e,t){switch(t){case gt.Consent:return Object.keys(e.consent).length>0;case gt.User:return Object.keys(e.user).length>0;case gt.Globals:return Object.keys(e.globals).length>0;case gt.Custom:return Object.keys(e.custom).length>0;default:return!1}}function nn(e,t){switch(t){case gt.Consent:case gt.User:case gt.Globals:case gt.Custom:return tn(e,t);case gt.Run:case gt.Ready:return!0===e.allowed;default:return e.seenEvents.has(String(t))}}function on(e,t){return e.cellVersion[String(t)]??0}function rn(e,t,n){let o=e.delivery.get(t);o||(o={},e.delivery.set(t,o)),o[String(n)]=on(e,n)}function sn(e,t,n){return e.allowed&&on(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 an(e,t,n){const o=e.cascade;if(!o)return!0;let r=o.counts.get(t);r||(r={},o.counts.set(t,r));const s=String(n),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 cn(e,t){return{collector:e,logger:e.logger.scope("on").scope(String(t))}}function un(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:On(t.env,t.config.env),reportError:Pt(e,"destination",n,a,t)};ue(t.on,t=>Xt(e,"destination",t,{destId:n,type:o}))(o,i)}function dn(e,t,n,o){if(!Jt(e))return void Yt();const r=ln(e,t,o);if(n.length)switch(t){case gt.Consent:!function(e,t,n){const o=n||e.consent,r=cn(e,gt.Consent);t.forEach(t=>{sn(e,t,gt.Consent)&&an(e,t,gt.Consent)&&(Object.keys(o).filter(e=>e in t).forEach(n=>{ue(t[n],t=>Xt(e,"consent",t,{key:n}))(o,r)}),rn(e,t,gt.Consent))})}(e,n,o);break;case gt.Ready:!function(e,t){if(!e.allowed)return;const n=cn(e,gt.Ready);t.forEach(t=>{ue(t,t=>Xt(e,"ready",t))(void 0,n)})}(e,n);break;case gt.Run:!function(e,t){if(!e.allowed)return;const n=cn(e,gt.Run);t.forEach(t=>{ue(t,t=>Xt(e,"run",t))(void 0,n)})}(e,n);break;case gt.Session:!function(e,t){if(!e.session)return;const n=cn(e,gt.Session);t.forEach(t=>{ue(t,t=>Xt(e,"session",t))(e.session,n)})}(e,n);break;default:{const o=cn(e,t),s=en(t);n.forEach(n=>{"function"==typeof n&&(s&&!sn(e,n,t)||s&&!an(e,n,t)||(ue(n,n=>Xt(e,"generic",n,{type:t}))(r,o),s&&rn(e,n,t)))});break}}}function ln(e,t,n){switch(t){case gt.Consent:return n||e.consent;case gt.Session:return e.session;case gt.User:return n||e.user;case gt.Custom:return n||e.custom;case gt.Globals:return n||e.globals;case gt.Config:return n||e.config;default:return}}async function fn(e,t,n,o,r){if(!t.on)return!1;if(en(o)&&!sn(e,t,o))return!1;if(en(o)&&!an(e,t,o))return!1;const s=await de(t.on,t=>Xt(e,"source",t,{sourceId:n,type:o}))(o,r);return en(o)&&rn(e,t,o),!1===s}function pn(e){return"number"==typeof e&&e>0?e:1e4}var gn=class extends Error{constructor(e){super(e),this.name="DestinationTimeoutError"}};function hn(e,t,n){let o;const r=new Promise((e,r)=>{o=setTimeout(()=>r(new gn(n)),t)});return Promise.race([e,r]).finally(()=>{o&&clearTimeout(o)})}var mn=Object.freeze({batched:!0});function vn(e){return e===mn}function yn(e){return void 0===e?{}:"number"==typeof e?{wait:e}:{wait:e.wait,size:e.size,age:e.age}}function wn(e,t,n){if(!e)return[];if(Array.isArray(e)&&e.every(e=>"string"==typeof e))return Bt(e,t);if("string"==typeof e)return Bt(e,t);const o=W(e,B(n));return 0===o.length?[]:1===o.length?Bt(o[0],t):Bt(o,t)}async function bn(e,t,n={},o){const{allowed:r,consent:s,user:a}=e;if(!r)return Sn({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=St(e.queue,t,{max:n});if(o.dropped>0){const t=At(e.status,ee("collector"),"queue",o.dropped);Ot(e.queue,e.logger,"collector.queue overflow; oldest events dropped",{buffer:"queue",cap:n,droppedCount:t})}else e.queue.length<n&&qt(e.queue);e.status.in++}o||(o=e.destinations);const i=e.transformers?_t(e.transformers):{},c=await Promise.all(Object.entries(o||{}).map(async([o,r])=>{if(r.config.disabled)return{id:o,destination:r,skipped:!0};const c=r.config.id||o,u=ee("destination",c),d=Ct(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=xt();return void 0!==o.openUntil&&r<o.openUntil||(o.state="half-open",o.probing=!0,o.openUntil=r+n,!1)}(e.status.breakers,u,d.cooldown))return{id:o,destination:r,skipped:!0};const l=t=>{d&&jt(e.status.breakers,u,t,d.threshold,d.cooldown)},f=()=>{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,u)};let p=(r.queuePush||[]).map(e=>({...e,consent:s}));r.queuePush=[],t&&p.push(H(t));const g=n.ingest?{...n.ingest,_meta:{...n.ingest._meta,path:[...n.ingest._meta.path]}}:U("unknown");if(!p.length&&!r.queueOn?.length)return f(),{id:o,destination:r,skipped:!0};if(!p.length&&r.queueOn?.length){if(!Q(r.config.consent,s))return f(),{id:o,destination:r,skipped:!0};let t=!1;try{t=await kn(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)}),l("transport-failure")}return f(),{id:o,destination:r,skipped:!t}}const h=[],m=p.filter(t=>{const n=Q(r.config.consent,s,t.consent);if(n)return t.consent=n,h.push(t),!1;const a=mt(e,{stepId:ee("destination",o),stepType:"destination",phase:"skip",eventId:"string"==typeof t.id?t.id:"",now:Date.now(),...ht(t,g,e)});return a.skipReason="consent",s&&(a.consent={...s}),r.config.consent&&(a.meta={required:{...r.config.consent}}),K(e,a),!0});if(m.length>0){const t=r.queuePush,n=r.config.id||o,s={max:r.config.queueMax??1e3};let a=0;for(const e of m)a+=St(t,e,s).dropped;if(a>0){Tt(e,n);const o=At(e.status,ee("destination",n),"queue",a);Ot(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&&qt(t)}if(!h.length)return f(),{id:o,destination:r,queue:p};let v,y,w=!1;try{w=await kn(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)}),l("transport-failure")}if(!w)return f(),{id:o,destination:r,queue:p};r.dlq||(r.dlq=[]);const b=wn(r.config.before,i,g),k=r.config.next,I=r.config?.cache,S=I?N(I):void 0,E=S?Mt(S,e):void 0,O=r.config?.state?oe(r.config.state):void 0,q=O?.filter(e=>"get"===e.mode),x=O?.filter(e=>"set"===e.mode);let C=0,j=0,T=0;return await Promise.all(h.map(async t=>{let s,c;if(t.user=R(a,t.user),S?.stop&&E){const e=B(g,t),n=await G(S,E,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(b.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const r=await zt(e,e.transformers,b,t,g,n.respond,`destination.${o}.before`);if(null===r.event)return t;r.respond&&(d=r.respond),u=Array.isArray(r.event)?r.event:[r.event]}const l=async(t,n)=>{let s=n,a=!1;if(S&&!S.stop&&E){const e=B(g,t),n=await G(S,E,e);if("HIT"===n?.status)return!1;"MISS"===n?.status&&(s={key:n.key,ttl:n.rule.ttl},a=!0)}q&&q.length>0&&t&&(t=await re(q,t=>$t(t,e),t,e));const u=Date.now();let l=!1;const f=await te(In,n=>{const s=r.type||"unknown";e.logger.scope(s).error("Push failed",{...Dt(n),event:t.name}),v=n,l=!0;const a=r.dlq,i=r.config.id||o,c={max:r.config.dlqMax??100},u=St(a,[t,n],c);if(u.dropped>0){Tt(e,i);const t=At(e.status,ee("destination",i),"dlq",u.dropped);Ot(a,e.logger.scope(r.type||"unknown"),"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:i,cap:c.max,droppedCount:t})}else a.length<c.max&&qt(a)})(e,r,o,t,g,d);if(C+=Date.now()-u,s&&E&&void 0===r.config.mock&&(a?z(E,s.key,f??!0,s.ttl):void 0===c&&(c=f??!0)),!l&&!vn(f)&&x&&x.length>0&&t&&(t=await re(x,t=>$t(t,e),t,e)),void 0===f||vn(f)||(y=f),vn(f)&&j++,!l&&k){void 0!==f&&(g._response=f);const n=wn(k,i,g);if(n.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const r=await zt(e,e.transformers,n,t,g,d,`destination.${o}.next`);r.respond&&(d=r.respond)}}return!0};for(const e of u)await l(e,s)&&T++;return s&&E&&void 0!==c&&void 0===r.config.mock&&z(E,s.key,c,s.ttl),t})),{id:o,destination:r,error:v,response:y,totalDuration:C,batchedCount:j,allowedCount:h.length,pushedCount:T,canonicalId:c,breakerConfig:d}})),u={},d={},l={};for(const t of c){if(t.skipped)continue;const n=t.destination,o={type:n.type||"unknown",data:t.response};Tt(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?ee("destination",t.canonicalId):void 0,c=t=>{a&&i&&jt(e.status.breakers,i,t,a.threshold,a.cooldown)};if(t.error)o.error=t.error,l[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,i=t.pushedCount??a;(Math.max(0,i-n)>0||0===a)&&(u[t.id]=o,r.count++,r.lastAt=s,r.duration+=t.totalDuration||0,e.status.out++,c("success"))}}return Sn({event:t,...Object.keys(u).length&&{done:u},...Object.keys(d).length&&{queued:d},...Object.keys(l).length&&{failed:l}})}async function kn(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:On(t.env,t.config.env),reportError:Pt(e,"destination",n,s,t)};s.debug("init");const i=Date.now();let c;K(e,mt(e,{stepId:ee("destination",n),stepType:"destination",phase:"init",eventId:"",now:i}));try{c=await ne(t.init,"DestinationInit",e.hooks,e.logger)(a)}catch(t){const o=Date.now(),r=mt(e,{stepId:ee("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)un(e,t,n,r,s)}s.debug("init done")}return!0}async function In(e,t,n,o,r,s){const{config:a}=t,i=await Z(o,a,e);if(i.ignore)return!1;const c=t.type||"unknown",u=e.logger.scope(c),d={collector:e,logger:u,id:n,config:a,data:i.data,rule:i.mapping,ingest:r,env:{...On(t.env,a.env),...s?{respond:s}:{}},reportError:Pt(e,"destination",n,u,t)};if(void 0!==a.mock)return u.debug("mock",{event:i.event.name}),a.mock;const l=i.mapping,f=void 0!==l?.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=yn(l?.batch),s=yn(a.batch),i=r.wait??s.wait??3e4,c=r.size??s.size??1e3,d=r.age??s.age??3e4,g=On(t.env,a.env),h=F(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],c={collector:e,logger:u,id:n,config:a,data:void 0,rule:o.isDefault?void 0:i.rule,ingest:i.ingest,env:{...g,...i.respond?{respond:i.respond}:{}},reportError:Pt(e,"destination",n,u,t)};u.debug("push batch",{events:s.entries.length});const d=t.config.id||n,l=Tt(e,d),f=Ct(t.config.breaker),h=ee("destination",d),m=t=>{f&&jt(e.status.breakers,h,t,f.threshold,f.cooldown)},v=Date.now(),y=new Map;let w,b=!1;const k=n=>{const o=t.dlq=t.dlq||[],r={max:t.config.dlqMax??100};let s=0;for(const e of n)s+=St(o,e,r).dropped;if(s>0){const t=At(e.status,ee("destination",d),"dlq",s);Ot(o,u,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:d,cap:r.max,droppedCount:t})}else o.length<r.max&&qt(o);l.failed+=n.length,l.dlqSize=o.length,e.status.failed+=n.length};let I=s.entries.length;const S=pn(a.timeout),E=await te((o,r)=>hn(Promise.resolve(ne(t.pushBatch,"DestinationPushBatch",e.hooks,e.logger)(o,r)),S,`Destination "${n}" batch delivery timed out after ${S}ms`),e=>{I=0,b=!0,w=e,k(s.entries.map(t=>[t.event,e])),m("transport-failure"),u.error("Push batch failed",{error:e instanceof Error?e.message:String(e),entries:s.entries.length})})(s,c);if(Y(O=E)&&Array.isArray(O.failed)&&E.failed.length>0){const e=[];for(const t of E.failed){const n=s.entries[t.index];if(!n||y.has(t.index))continue;const o=t.error??new Error(`Push batch entry ${t.index} failed (no per-row error provided)`);y.set(t.index,o),e.push([n.event,o])}e.length>0&&(k(e),I=Math.max(0,s.entries.length-e.length),u.error("Push batch partial failure",{failed:e.length,delivered:I,entries:s.entries.length}))}var O;const q=Date.now();s.entries.forEach((t,o)=>{const r=b||y.has(o),a=ht(t.event,t.ingest,e),i=mt(e,{stepId:ee("destination",n),stepType:"destination",phase:r?"error":"flush",eventId:"string"==typeof t.event.id?t.event.id:"",now:q,traceId:a.traceId,sourceId:a.sourceId,parentEventId:a.parentEventId});if(i.batch={size:s.entries.length,index:o},i.durationMs=q-v,r){const e=b?w:y.get(o);i.error=e instanceof Error?{name:e.name,message:e.message}:{message:String(e)}}K(e,i)}),u.debug("push batch done"),l.inFlightBatch=Math.max(0,(l.inFlightBatch??0)-s.entries.length),I>0&&(l.count+=I,l.lastAt=Date.now(),e.status.out+=I,m("success"))},{wait:i,size:c,age:d});t.batches[p]={batched:o,isDefault:!f,batchFn:()=>{h()},flush:async()=>{await h.flush()}}}const c=t.batches[p];c.batched.entries.push({event:i.event,ingest:r,respond:s,rule:l,data:i.data}),c.batched.events.push(i.event),J(i.data)&&c.batched.data.push(i.data);const d="string"==typeof i.event.id?i.event.id:"",g=ht(o,r,e),h=Date.now(),m=mt(e,{stepId:ee("destination",n),stepType:"destination",phase:"in",eventId:d,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=mt(e,{stepId:ee("destination",n),stepType:"destination",phase:"out",eventId:d,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=Tt(e,y);return w.inFlightBatch=(w.inFlightBatch??0)+1,c.batchFn(),mn}{let s;if(u.debug("push",{event:i.event.name}),"trace"===e.observeLevel?.()&&Array.isArray(t.calls)&&t.calls.length>0){const e=wt({...d.env,simulation:t.calls});d.env=e.wrappedEnv,s=e.calls,e.unresolved.length>0&&(e.wrappedEnv[X]={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:l,sourceId:f,parentEventId:p}=ht(o,r,e),g=Date.now(),h=mt(e,{stepId:ee("destination",n),stepType:"destination",phase:"in",eventId:c,now:g,traceId:l,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=pn(a.timeout),r=await hn(Promise.resolve(ne(t.push,"DestinationPush",e.hooks,e.logger)(i.event,d)),o,`Destination "${n}" delivery timed out after ${o}ms`),h=Date.now(),m=mt(e,{stepId:ee("destination",n),stepType:"destination",phase:"out",eventId:c,now:h,traceId:l,sourceId:f,parentEventId:p});return m.durationMs=h-g,m.outEvent=i.event,s&&s.length>0&&(m.calls=It(s)),J(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=mt(e,{stepId:ee("destination",n),stepType:"destination",phase:"error",eventId:c,now:o,traceId:l,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=It(s)),i.mappingKey&&(r.mappingKey=i.mappingKey),K(e,r),t}}}function Sn(e){return{ok:!e?.failed,...e}}function En(e){const{code:t,config:n={},env:o={},cache:r,state:s}=e,{config:a}=Rt(e,"before"),{config:i}=Rt({...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=On(t.env,o);return{...t,config:c,env:u}}function On(e,t){return e||t?t?e&&Y(e)&&Y(t)?{...e,...t}:t:e:{}}async function qn(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 xn(e,t){e.stateVersion++,e.cellVersion[t]=e.stateVersion}async function Cn(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 gt.Config:Je(n)&&(Ue(e.config,n,{shallow:!1}),r=n,s=!0);break;case gt.Consent:if(Je(n)){const{update:t}=function(e,t){const n={};return Object.entries(t).forEach(([e,t])=>{n[e]=!!t}),e.consent=T(e.consent,n),{update:n}}(e,n);xn(e,gt.Consent),r=t,s=!0}break;case gt.Custom:Je(n)&&(e.custom=Ue(e.custom,n),xn(e,gt.Custom),r=n,s=!0);break;case gt.Destination:Je(n)&&"code"in n&&Je(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(!V(n.push))return Sn({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};a&&(d={...d,next:a}),i&&(d={...d,cache:i}),void 0!==c&&void 0===d.state&&(d={...d,state:c});let l=d.id;if(!l)do{l=L(5,"abcdefghijklmnopqrstuvwxyz")}while(e.destinations[l]||e.pending.destinations[l]);if(d.require?.length){e.pending.destinations[l]=t,await Wt(e);const n=e.destinations[l];return n?bn(e,void 0,{},{[l]:n}):Sn({ok:!0})}const f={...n,config:d,env:On(n.env,r)};return e.destinations[l]=f,!1!==f.config.queue&&(f.queuePush=[...e.queue]),bn(e,void 0,{},{[l]:f})}(e,n));break;case gt.Globals:Je(n)&&(e.globals=Ue(e.globals,n),xn(e,gt.Globals),r=n,s=!0);break;case gt.Hook:if(Je(n)&&We(n.name)&&Qe(n.fn)){const{name:t,fn:o}=n;e.hooks[t]=o,r=n,s=!0}break;case gt.On:if(Je(n)&&We(n.type)){const{type:t,rules:o}=n;await async function(e,t,n){if(!Jt(e))return void Yt();const o=e.on,r=o[t]||[],s=ie(n)?n:[n];s.forEach(e=>{r.push(e)}),o[t]=r,dn(e,t,s)}(e,t,o)}break;case gt.Ready:s=!0;break;case gt.Run:o=await async function(e,t){e.allowed=!0,e.timing=Date.now(),e.trace=Ke(),e.count=0,t&&(t.consent&&(e.consent=Ue(e.consent,t.consent),xn(e,gt.Consent)),t.user&&(e.user=Ue(e.user,t.user),xn(e,gt.User)),t.globals&&(e.globals=Ue(e.config.globalsStatic||{},t.globals),xn(e,gt.Globals)),t.custom&&(e.custom=Ue(e.custom,t.custom),xn(e,gt.Custom))),Object.values(e.destinations).forEach(e=>{e.queuePush=[]}),e.queue=[],e.round++,await Wt(e),await async function(e){if(Jt(e))for(const t of Zt){if(!tn(e,t))continue;const n=ln(e,t);dn(e,t,e.on[t]||[]);for(const[o,r]of Object.entries(e.sources))Lt(r)&&await fn(e,r,o,t,n)}else Yt()}(e);let n=!0;const o={};if(e.preRunQueue.length){const t=e.preRunQueue.splice(0);e.logger.debug("replaying pre-run events",{count:t.length});for(const{event:r,options:s}of t){const t=await e.push(r,s);!1===t.ok&&(n=!1),t.failed&&Object.assign(o,t.failed)}}const r=await bn(e);if(n)return r;const s={...r.failed??{},...o};return{...r,ok:!1,...Object.keys(s).length>0?{failed:s}:{}}}(e,n),s=!0;break;case gt.Session:s=!0;break;case gt.Shutdown:e.hasShutdown||(e.hasShutdown=!0,await async function(e){const t=e.logger;await qn(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 qn(e.destinations,"destination",t),await qn(e.transformers,"transformer",t),await qn(e.stores,"store",t)}(e));break;case gt.User:Je(n)&&(Ue(e.user,n,{shallow:!1}),xn(e,gt.User),r=n,s=!0);break;default:return e.logger.warn("unknown command",{command:t}),Sn({ok:!1})}if(s){await async function(e,t,n,o){if(!Jt(e))return Yt(),!0;e.seenEvents.add(String(t));let r=n||[];n||(r=e.on[t]||[]);const s=ln(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&&(Lt(o)?await fn(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});un(e,o,n,t,s)}});for(const[t,n]of Object.entries(e.sources))Lt(n)&&n.queueOn?.length&&await Kt(e,n,t);const i=Object.values(e.sources).some(e=>!Lt(e)&&e.config.require?.length);return(Object.keys(e.pending.destinations).length>0||i)&&await Wt(e),dn(e,t,r,o),!a}(e,t,void 0,r);const n=await bn(e);if(o&&!1===o.ok){const e={...n.failed??{},...o.failed??{}};o={...n,ok:!1,...Object.keys(e).length>0?{failed:e}:{}}}else o=n}return o||Sn({ok:!0})}()}finally{a()}}function jn(e,t){return{timing:Math.round((Date.now()-e.timing)/10)/100,source:{type:"collector",schema:"4"},...t}}function Tn(e,t,n){const o=t.name;if("string"!=typeof o)throw new Le(void 0===o?"Event name is required":"Event name is invalid");if(!o)throw new Le("Event name is required");const[r,s]=o.split(" ");if(!r||!s)throw new Le("Event name is invalid");const{timestamp:a=Date.now(),name:i=`${r} ${s}`,data:c={},context:u={},globals:d={},custom:l={},user:f=e.user,nested:p=[],consent:g=e.consent,id:h=Fe(),trigger:m="",entity:v=r,action:y=s,timing:w=0,source:b={type:"collector",schema:"4"}}=t,k=b??{type:"collector",schema:"4"},I=k.count??(e.count+=1),S=k.trace??n?._meta.trace??e.trace,E={...k,count:I};void 0!==S&&(E.trace=S);const O=e.name??k.platform??"default",q=e.release??"4.6.0-next-1788933594957";return E.release={...k.release,[O]:q},{name:i,data:c,context:u,globals:Ue(e.globals,d),custom:l,user:f,nested:p,consent:g,id:h,trigger:m,entity:v,action:y,timestamp:a,timing:w,source:E}}function An(e,t){const n=rt(async(n,o={})=>await ot(async()=>{if(!e.allowed){const t=e.config.queueMax;if(void 0===t)throw new Error("Collector.Config.queueMax is undefined; defaults must be seeded by collector()");const r=St(e.preRunQueue,{event:n,options:o},{max:t});if(r.dropped>0){const n=At(e.status,"collector.preRun","queue",r.dropped);Ot(e.preRunQueue,e.logger,"collector.preRunQueue overflow; oldest events dropped",{buffer:"queue",cap:t,droppedCount:n})}else e.preRunQueue.length<t&&qt(e.preRunQueue);return e.logger.debug("event held until run",{name:n.name,dropped:r.dropped}),Sn({ok:!0})}const r=Date.now(),{id:s,ingest:a,respond:i,mapping:c,preChain:u,include:d,exclude:l}=o;let f=i,p=n;const g=d||l?function(e,t,n){let o=e;return t&&(o=Object.fromEntries(Object.entries(o).filter(([e])=>t.includes(e)))),n&&(o=Object.fromEntries(Object.entries(o).filter(([e])=>!n.includes(e)))),o}(e.destinations,d,l):void 0,h=a??Ve(s||"unknown");if(c){const t=await nt(p,c,e);if(t.ignore)return Sn({ok:!0});if(c.consent&&!Ze(c.consent,e.consent,t.event.consent))return Sn({ok:!0});p=t.event}if(u?.length&&e.transformers&&Object.keys(e.transformers).length>0){const n=await zt(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})`:"")),Sn({ok:!0,dropped:!0});if(n.stopped)return n.respond&&(f=n.respond),Sn({ok:!0});n.respond&&(f=n.respond);const o="string"==typeof p.id?p.id:"";if(Array.isArray(n.event)){const a=await Promise.all(n.event.map(async n=>{const r=""!==o&&n.id===o?{...n,id:et()}:n,a=t(r),i=Tn(e,a,h);return bn(e,i,{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 a[0]??Sn({ok:!0})}p=""===o||"string"==typeof n.event.id&&""!==n.event.id?n.event:{...n.event,id:o}}const m=function(e,t,n){return Tn(e,jn(e,t),n)}(e,p,h),v=await bn(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 Xe)throw t;if(t instanceof tt){const n=o.id;if(n){e.status.sources[n]||(e.status.sources[n]={count:0,duration:0});const t=e.status.sources[n];t.rejected=(t.rejected??0)+1}return e.logger.warn("invalid event rejected",{error:t.message}),Sn({ok:!1,invalid:!0,error:t.message})}return e.status.failed++,e.logger.error("push failed",{...Dt(t),event:n.name}),Sn({ok:!1})})(),"Push",e.hooks,e.logger);return async(t,o)=>{const r="string"==typeof t.id&&""!==t.id?t:{...t,id:et()},s="string"==typeof r.id?r.id:"",{traceId:a,sourceId:i,parentEventId:c}=ht(r,o?.ingest,e),u=Date.now(),d=mt(e,{stepId:"collector.push",stepType:"collector",phase:"in",eventId:s,now:u,traceId:a,sourceId:i,parentEventId:c});d.inEvent=r,Ye(e,d);try{const t=await n(r,o),d=Date.now(),l=mt(e,{stepId:"collector.push",stepType:"collector",phase:"out",eventId:s,now:d,traceId:a,sourceId:i,parentEventId:c});return l.durationMs=d-u,l.outEvent=t,Ye(e,l),t}catch(t){const n=Date.now(),o=mt(e,{stepId:"collector.push",stepType:"collector",phase:"error",eventId:s,now:n,traceId:a,sourceId:i,parentEventId:c});throw o.durationMs=n-u,o.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},Ye(e,o),t}}}function Dn(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 Pn(e,t){const{cacheConfig:n,cacheStore:o,namespace:r,logger:s,storeId:a,collector:i}=t,c=(e,t)=>{if(!i)return;const n=mt(i,{stepId:`store.${a}`,stepType:"store",phase:"in",eventId:"",now:Date.now()});n.meta={op:"cache",cached:"hit"===t,status:t,key:e},lt(i,n)},u={hits:0,misses:0,populates:0,writes:0,deletes:0,inflight_dedups:0},d=n.rules.map(e=>({match:e.match?dt(e.match):()=>!0,ttl:e.ttl})),l=e=>`${r}:${e}`;function f(e,t){const n=void 0===t?{key:e}:{key:e,value:t};return d.find(e=>e.match(n))}const p=new Map;return{type:e.type,config:e.config,setup:e.setup,get counters(){return{...u}},async get(t){const n=l(t),r=await o.get(n),s=ft(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,pt(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(l(t),pt(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(${a}): cache ${e} failed for "${t}"; backing succeeded, continuing`;s?s.warn(o,Dt(n)):console.warn(o,n)}}function Mn(e,t,n){const o=`store.${n}`,r=ut(t.get,"StoreGet",e.hooks,e.logger),s=ut(t.set,"StoreSet",e.hooks,e.logger),a=ut(t.delete,"StoreDelete",e.hooks,e.logger);t.get=async t=>{const n=Date.now(),s=mt(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:n});s.meta={op:"get",key:t},ct(e,s);try{const s=await r(t),a=Date.now(),i=mt(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:a});return i.durationMs=a-n,i.meta={op:"get",key:t},ct(e,i),s}catch(r){const s=Date.now(),a=mt(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)},ct(e,a),r}},t.set=async(t,n,r)=>{const a=Date.now(),i=mt(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:a});i.meta={op:"set",key:t},ct(e,i);try{await s(t,n,r);const i=Date.now(),c=mt(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:i});c.durationMs=i-a,c.meta={op:"set",key:t},ct(e,c)}catch(n){const r=Date.now(),s=mt(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)},ct(e,s),n}},t.delete=async t=>{const n=Date.now(),r=mt(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:n});r.meta={op:"delete",key:t},ct(e,r);try{await a(t);const r=Date.now(),s=mt(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:r});s.durationMs=r-n,s.meta={op:"delete",key:t},ct(e,s)}catch(r){const s=Date.now(),a=mt(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)},ct(e,a),r}}}async function $n(e){const t=$({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:[],preRunQueue:[],round:0,count:0,stateVersion:0,cellVersion:{},delivery:new WeakMap,session:void 0,status:{startedAt:Date.now(),in:0,out:0,failed:0,sources:{},destinations:{},dropped:{},connectionErrors:{},breakers:{}},timing:Date.now(),user:e.user||{},sources:{},pending:{destinations:{}},hasShutdown:!1,seenEvents:new Set,push:void 0,command:void 0,elb:void 0};var a,i;void 0!==e.name&&(s.name=e.name),void 0!==e.release&&(s.release=e.release),s.push=An(s,e=>jn(s,e)),s.command=(i=Cn,at(async(e,t,n)=>await it(async()=>await i(a,e,t,n),t=>{if(t instanceof st)throw t;return a.status.failed++,a.logger.error("command failed",{...Dt(t),command:e}),Sn({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 Sn({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:Pt(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=Dn()),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]=Pn(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&&Mn(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=Dn()),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]=En(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=He(r,"Transformer");if(!a.ok){e.logger.warn(`Transformer ${o} invalid (${a.code}): ${a.reason}. Skipping.`);continue}const{config:i}=Rt(r,"before"),{config:c}=Rt({...r,config:i},"next"),u=Object.keys(s).length>0?{...c,env:s}:c,{cache:d}=r,l=d?{...u,cache:d}:u,f=r.config?.state??r.state,p=void 0!==f&&void 0===l.state?{...l,state:f}:l,g=e.logger.scope("transformer").scope(o),h={collector:e,logger:g,id:o,ingest:xe(o),config:p,env:s,reportError:Pt(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 Ne(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 _n=globalThis;function Rn(e){try{const t=_n.window;if(!t)return;t.localStorage.getItem(A)===e&&t.localStorage.removeItem(A)}catch{}}function Bn(e,t){return void 0===t?e:n=>e({...n,release:t})}async function Hn(e){e=e||{};const t=await $n(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=_n.window,t=_n.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 _n.window?.localStorage.getItem(A)??null}catch{return null}}();if(!r)return;const s=M(r);if(!s)return void(null===t?(e.logger.warn("observe: malformed stored credential cleared"),Rn(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{_n.window?.localStorage.setItem(A,e)}catch{}}(r),null!==t&&function(){const e=_n.window,t=_n.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=D({url:`${n.url}/ingest/${s.ses}`,token:s.secret,headers:{"X-Walkeros-Binding":n.binding},onStatus:t=>{401===t&&(Rn(r),a&&e.observers.delete(a))}});a=P(function(e,t){return void 0===t?e:n=>e({...n,flowId:t})}(Bn(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(P(Bn(D({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 Qt(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 ye(n.init.bind(n),n=>{if(n instanceof pe)throw n;o=!0,e.status.failed++,e.logger.scope("source").error("source init failed",{sourceId:t,...Dt(n)})})(),o||(n.config.init=!0,Lt(n)&&await Kt(e,n,t))}return await Wt(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 Nn=async e=>{let t;return{get flow(){return t},trigger:()=>async n=>{if(!t){const n=await Hn(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 Gn(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 zn={};t(zn,{createTrigger:()=>to,env:()=>Un,step:()=>Jn});var Un={};t(Un,{push:()=>Qn,simulation:()=>Wn});var Fn=()=>{},Kn={error:Fn,warn:Fn,info:Fn,debug:Fn,throw:e=>{throw"string"==typeof e?new Error(e):e},json:Fn,scope:()=>Kn},Ln=()=>()=>Promise.resolve({ok:!0}),Qn={get push(){return Ln()},get command(){return Ln()},get elb(){return Ln()},logger:Kn},Wn=["AWS.SQSClient"],Jn={};t(Jn,{decoderText:()=>Xn,malformedJson:()=>Zn,orderComplete:()=>Yn,pageView:()=>Vn});var Vn={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"]]},Yn={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"]]},Xn={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"]]},Zn={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 eo(e){if("object"!=typeof e||null===e)return!1;const t=e;return"sqs"===t.type&&"function"==typeof t.push}var to=async e=>{let t;return{get flow(){return t},trigger:()=>async n=>{if(!t){const n=await Hn(e);t={collector:n.collector,elb:n.elb}}const o=function(e){for(const t of Object.values(e.sources??{}))if(eo(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,zn 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:()=>d,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),maxBatchSize:r.number().int().min(1).describe("Maximum number of events accepted in a single batch request").default(100),healthPath:r.string().describe("Health check endpoint path (e.g., /health)").default("/health")}),d=o(u);import{zodToSchema as l}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=l(p),y=l(m),w={};t(w,{createTrigger:()=>Nn,env:()=>b,step:()=>O,trigger:()=>Gn});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,lambdaPostForwardsSource:()=>j});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({name:"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({name:"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"}'}]]},j={title:"Lambda POST with provenance",description:"A POST body carrying a source map is forwarded in full, so release and trace provenance survive the crossing.",trigger:{type:"POST"},in:{version:"2.0",requestContext:{http:{method:"POST",path:"/collect"},requestId:"req-321"},body:JSON.stringify({name:"page view",data:{title:"Home"},source:{release:{web:"r1"}}}),isBase64Encoded:!1},out:[["elb",{name:"page view",data:{title:"Home"},source:{release:{web:"r1"}}}]]};import{assign as T}from"@walkeros/core";import{OBSERVE_STORAGE_KEY as A,createBatchedPoster as D,createTelemetryObserver as P,parseObserveCredential as M}from"@walkeros/core";import{assign as $,createLogger as _}from"@walkeros/core";import{assign as R,buildCacheContext as B,clone as H,compileCache as N,checkCache as G,storeCache as z,createIngest as U,debounce as F,emitStep as K,getId as L,getGrantedConsent as Q,getNextSteps as W,isDefined as J,isFunction as V,isObject as Y,OBSERVE_ENV_KEY as X,processEventMapping as Z,stepId as ee,tryCatchAsync as te,useHooks as ne,compileState as oe,applyState as re}from"@walkeros/core";import{emitStep as se}from"@walkeros/core";import{parseCallPath as ae}from"@walkeros/core";import{isArray as ie,FatalError as ce}from"@walkeros/core";import{tryCatch as ue,tryCatchAsync as de}from"@walkeros/core";import{stepId as le}from"@walkeros/core";import{createIngest as fe,FatalError as pe,getMappingValue as ge,getSpanId as he,parseTraceparent as me,isScope as ve,tryCatchAsync as ye,getNextSteps as we,compileCache as be,checkCache as ke,storeCache as Ie,applyUpdate as Se,buildCacheContext as Ee,compileState as Oe,applyState as qe}from"@walkeros/core";import{createIngest as xe,emitStep as Ce,FatalError as je,isObject as Te,stepId as Ae,tryCatchAsync as De,useHooks as Pe,getNextSteps as Me,compileCache as $e,checkCache as _e,storeCache as Re,buildCacheContext as Be,validateStepEntry as He,processEventMapping as Ne,compileState as Ge,applyState as ze}from"@walkeros/core";import{assign as Ue,getSpanId as Fe,getTraceId as Ke,InvalidEventError as Le,isFunction as Qe,isString as We}from"@walkeros/core";import{isObject as Je}from"@walkeros/core";import{createIngest as Ve,emitStep as Ye,FatalError as Xe,getGrantedConsent as Ze,getSpanId as et,InvalidEventError as tt,processEventMapping as nt,tryCatchAsync as ot,useHooks as rt}from"@walkeros/core";import{FatalError as st,useHooks as at,tryCatchAsync as it}from"@walkeros/core";import{emitStep as ct,useHooks as ut}from"@walkeros/core";import{compileMatcher as dt,emitStep as lt,readCacheEnvelope as ft,wrapCacheEnvelope as pt}from"@walkeros/core";var gt={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 ht(e,t,n){return{traceId:e.source?.trace??t?._meta.trace??n.trace,sourceId:t?._meta.path[0],parentEventId:t?._meta.parentEventId}}function mt(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 vt(e){return"object"==typeof e&&null!==e}function yt(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(yt(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:yt(s,t,n+1);return r}function wt(e){const t=[],n=[],{simulation:o,...r}=e,s=yt(r,new WeakMap,0);for(const e of o){const o=ae(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(!vt(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 bt(e,t){try{return e[t]}catch{return"[unreadable]"}}function kt(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(bt(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 It(e){return e.map(e=>({fn:e.fn,args:kt(e.args),ts:e.ts}))}function St(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 Et=new WeakMap;function Ot(e,t,n,o){Et.get(e)||(Et.set(e,!0),t.warn(n,o))}function qt(e){Et.delete(e)}var xt=()=>Date.now();function Ct(e){if(void 0!==e)return"number"==typeof e?{threshold:e,cooldown:3e4}:{threshold:e.threshold??5,cooldown:e.cooldown??3e4}}function jt(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=xt()+r)):void(s.consecutiveFailures>=o&&(s.state="open",s.probing=!1,s.openUntil=xt()+r)))}function Tt(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 At(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 Dt(e){const t={error:e instanceof Error?e.message:String(e)};if(e instanceof Error&&e.name&&"Error"!==e.name&&(t.name=e.name),"object"==typeof e&&null!==e&&"code"in e){const n=e;"number"!=typeof n.code&&"string"!=typeof n.code||(t.code=n.code)}return t}function Pt(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=St(a,[o,r],i);if(c.dropped>0){const t=At(e.status,le("destination",n),"dlq",c.dropped);Ot(a,s,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:n,cap:i.max,droppedCount:t})}else a.length<i.max&&qt(a);const u=Tt(e,n);u.failed++,u.dlqSize=a.length,e.status.failed++;const d=Ct(t.config.breaker);if(d){const o=t.config.id||n;jt(e.status.breakers,le("destination",o),"transport-failure",d.threshold,d.cooldown)}}(e,r,n,a,t,o):e.status.failed++,void o.error("report error",{...Dt(t),event:a.name});e.status.connectionErrors[s]=(e.status.connectionErrors[s]??0)+1,o.error("connection error",Dt(t))}catch{}}}function Mt(e,t){return e.storeId&&t.stores[e.storeId]?t.stores[e.storeId]:t.stores.__cache}function $t(e,t){return e?t.stores[e]:t.stores.__cache}function _t(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 Rt(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 Bt(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 Ht(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:xe(n),config:t.config,env:Ut(t.config.env),reportError:Pt(e,"transformer",n,r)};r.debug("init");const a=await Pe(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 Nt(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:{...Ut(t.config.env),...s?{respond:s}:{}},reportError:Pt(e,"transformer",n,i)};i.debug("push",{event:o.name});const u="string"==typeof o.id?o.id:"",{traceId:d,sourceId:l,parentEventId:f}=ht(o,r,e),p=Date.now(),g=mt(e,{stepId:Ae("transformer",n),stepType:"transformer",phase:"in",eventId:u,now:p,traceId:d,sourceId:l,parentEventId:f});g.inEvent=o,Ce(e,g);try{const r=await Pe(t.push,"TransformerPush",e.hooks,e.logger)(o,c),s=Date.now(),a=mt(e,{stepId:Ae("transformer",n),stepType:"transformer",phase:"out",eventId:u,now:s,traceId:d,sourceId:l,parentEventId:f});return a.durationMs=s-p,a.outEvent=r,Ce(e,a),i.debug("push done"),r}catch(t){const o=Date.now(),r=mt(e,{stepId:Ae("transformer",n),stepType:"transformer",phase:"error",eventId:u,now:o,traceId:d,sourceId:l,parentEventId:f});throw r.durationMs=o-p,r.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},Ce(e,r),t}}function Gt(e,t){return e?{...e,_meta:{...e._meta,path:[...e._meta.path]}}:xe(t)}async function zt(e,t,n,o,r,s,a){r||(r=xe(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 De(Ht,t=>{if(t instanceof je)throw t;return e.status.failed++,e.logger.scope(`transformer:${s.type||"unknown"}`).error("transformer init failed",{transformer:o,...Dt(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,d=u?$e(u):void 0,l=d?Mt(d,e):void 0,f=s.config?.state?Ge(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?ze(g,t=>$t(t,e),t,e):t;let m;if(d&&l){const e=Be(r,i),t=await _e(d,l,e);if("HIT"===t?.status&&t.value){if(i=t.value,d.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=Me(v,Be(r,i));if(1===n.length){const o=Bt(n[0],_t(t));if(o.length>0){const n=await zt(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=>De(zt,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,Dt(t)),{event:null,respond:void 0}))(e,t,Bt(n,_t(t)),i,Gt(r,n),void 0,a)))}p&&p.length>0&&(i=await ze(p,t=>$t(t,e),i,e));const y=await De(Nt,t=>(e.logger.scope(`transformer:${s.type||"unknown"}`).error("Push failed",Dt(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=Gt(r,"unknown");if(n.next){const r=Me(n.next,Be(u,o));if(0===r.length)return{event:o,respond:c};if(1===r.length){const n=Bt(r[0],_t(t));return n.length>0?zt(e,t,n,o,u,c,a):{event:o,respond:c}}return(await Promise.all(r.map(n=>De(zt,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,Dt(t)),{event:null,respond:void 0}))(e,t,Bt(n,_t(t)),o,Gt(u,n),void 0,a)))).map(e=>({event:e.event,respond:void 0}))}return s.length>0?zt(e,t,s,o,u,c,a):{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(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=Me(s,Be(r,o));if(0===u.length){i=o;continue}if(1===u.length){const n=Bt(u[0],_t(t));return n.length>0?zt(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=>De(zt,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,Dt(t)),{event:null,respond:void 0}))(e,t,Bt(n,_t(t)),o,Gt(r,n),void 0,a))),{event:null,respond:void 0}}n&&(i=n)}g&&g.length>0&&(i=await ze(g,t=>$t(t,e),i,e)),m&&l&&Re(l,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=Me(s.config.next,Be(r,i));if(1===n.length){const o=Bt(n[0],_t(t));return o.length>0?zt(e,t,o,i,r,c,a):{event:i,respond:c}}return n.length>1?(await Promise.all(n.map(n=>De(zt,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,Dt(t)),{event:null,respond:void 0}))(e,t,Bt(n,_t(t)),i,Gt(r,n),void 0,a))),{event:null,respond:void 0}):{event:i,respond:c}}}return{event:i,respond:c}}function Ut(e){return e&&Te(e)?e:{}}function Ft(e){return"string"==typeof e||!(!Array.isArray(e)||!e.every(e=>"string"==typeof e))}async function Kt(e,t,n){if(!t.on||!t.queueOn?.length)return;const o=t.queueOn;t.queueOn=[];const r=n||t.config?.id||"unknown";for(const{type:n,data:s}of o)en(n)&&!sn(e,t,n)||(await ye(t.on,t=>{if(t instanceof pe)throw t;e.status.failed++,e.logger.scope("source").error("source on flush failed",{sourceId:r,type:n,...Dt(t)})})(n,s),en(n)&&rn(e,t,n))}function Lt(e){return Boolean(e.config.init)&&!e.config.require?.length}async function Qt(e,t,n){const{code:o,config:r={},env:s={},primary:a,next:i,before:c,cache:u,terminus:d}=n,l=r.state??n.state,f=l?Oe(l):void 0,p=u,g=p?be({...p,stop:p.stop??!0}):void 0,h=Ft(i)?Bt(i,_t(e.transformers)):void 0,m=Ft(c)?Bt(c,_t(e.transformers)):void 0,v=d??e.push,y=Boolean(d),w=async(n,o,s)=>{if(y)return v(n);let a;const u="string"==typeof n.id&&""!==n.id?n:{...n,id:he()},d=m??(void 0!==c?(()=>{const t=we(c,Ee(s.ingest));return 0===t.length?[]:Bt(1===t.length?t[0]:t,_t(e.transformers))})():[]);let l=[u];if(d.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const n=await zt(e,e.transformers,d,u,s.ingest,s.respond,`source.${t}.before`);if(null===n.event)return{ok:!0};if(n.stopped)return n.respond&&(s.respond=n.respond),{ok:!0};n.respond&&(s.respond=n.respond);const o="string"==typeof u.id?u.id:"";if(Array.isArray(n.event))l=n.event.map(e=>""!==o&&e.id===o?{...e,id:he()}:e);else{const e=n.event;l=""===o||"string"==typeof e.id&&""!==e.id?[e]:[{...e,id:o}]}}if(g){const t=Mt(g,e);if(t){const n=Ee(s.ingest),o=await ke(g,t,n);if(o){if("HIT"===o.status&&void 0!==o.value&&g.stop){let t=o.value;return o.rule.update&&(t=await Se(t,o.rule.update,{...n,cache:{status:"HIT"}},e)),s.respond?.(t),{ok:!0}}if("MISS"===o.status&&g.stop&&s.respond){const r=s.respond,i=o.rule.update,c={...n,cache:{status:"MISS"}},u=o.key,d=o.rule.ttl,l=n=>{Ie(t,u,n,d),i?a=(async()=>{const t=await Se(n,i,c,e);r(t)})():r(n)};s.respond=l}"MISS"!==o.status||g.stop||Ie(t,o.key,!0,o.rule.ttl)}}}const p=h?{kind:"single",preChain:h}:void 0!==i?(()=>{const t=we(i,Ee(s.ingest));return 0===t.length?{kind:"single",preChain:[]}:1===t.length?{kind:"single",preChain:Bt(t[0],_t(e.transformers))}:{kind:"many",branches:t.map(t=>Bt(t,_t(e.transformers)))}})():{kind:"single",preChain:[]};f&&f.length>0&&(l=await Promise.all(l.map(t=>qe(f,t=>$t(t,e),t,e))));let w={ok:!0};for(const n of l)"many"===p.kind?(await Promise.all(p.branches.map((a,i)=>ye(async()=>v(n,{...o,id:t,ingest:Gt(s.ingest,`${t}.${i}`),respond:void 0,mapping:r,preChain:a}),t=>(e.logger.scope("source:many").error(`many branch ${i} failed`,Dt(t)),{ok:!0}))())),w={ok:!0}):w=await v(n,{...o,id:t,ingest:s.ingest,respond:s.respond,mapping:r,preChain:p.preChain});return a&&await a,w},b=async n=>{const o=fe(t),s=me(ve(n)?n?.headers?.traceparent:void 0);if(s&&(o._meta.trace=s.trace,o._meta.parentEventId=s.parentSpan),!r.ingest||void 0===n)return o;const a=await ge(n,r.ingest,{collector:e});return{...o,...a,_meta:o._meta}},k=e.logger.scope("source").scope(t),I={...s,push:async(e,n={})=>{const o={ingest:fe(t),respond:void 0};return w(e,n,o)},command:e.command,sources:e.sources,elb:e.elb,logger:k},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:Pt(e,"source",t,k)},E=await ye(o,n=>{if(n instanceof pe)throw n;e.status.failed++,e.logger.scope("source").error("source factory failed",{sourceId:t,...Dt(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 Wt(e){for(const[t,n]of Object.entries(e.sources)){if(Lt(n))continue;const o=n.config.require;if(!o?.length)continue;const r=o.filter(t=>!nn(e,t));r.length!==o.length&&(n.config.require=r,Lt(n)&&await Kt(e,n,t))}for(const[t,n]of Object.entries(e.pending.destinations)){if(!e.pending.destinations[t]||e.destinations[t])continue;const o=n.config?.require;if(!o)continue;const r=o.filter(t=>!nn(e,t));if(n.config&&(n.config.require=r),r.length>0)continue;delete e.pending.destinations[t];const s=En(n);!1!==s.config.queue&&(s.queuePush=[...e.queue]),e.destinations[t]=s}}function Jt(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 Vt=!1;function Yt(){Vt||(Vt=!0,"undefined"!=typeof console&&"function"==typeof console.warn&&console.warn("walkerOS: ignored an on-dispatch call with a non-collector argument"))}function Xt(e,t,n,o){if(n instanceof ce)throw n;e.logger.scope("on").error("on callback failed",{kind:t,...o,...Dt(n)})}var Zt=[gt.Consent,gt.User,gt.Globals,gt.Custom];function en(e){return Zt.includes(e)}function tn(e,t){switch(t){case gt.Consent:return Object.keys(e.consent).length>0;case gt.User:return Object.keys(e.user).length>0;case gt.Globals:return Object.keys(e.globals).length>0;case gt.Custom:return Object.keys(e.custom).length>0;default:return!1}}function nn(e,t){switch(t){case gt.Consent:case gt.User:case gt.Globals:case gt.Custom:return tn(e,t);case gt.Run:case gt.Ready:return!0===e.allowed;default:return e.seenEvents.has(String(t))}}function on(e,t){return e.cellVersion[String(t)]??0}function rn(e,t,n){let o=e.delivery.get(t);o||(o={},e.delivery.set(t,o)),o[String(n)]=on(e,n)}function sn(e,t,n){return e.allowed&&on(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 an(e,t,n){const o=e.cascade;if(!o)return!0;let r=o.counts.get(t);r||(r={},o.counts.set(t,r));const s=String(n),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 cn(e,t){return{collector:e,logger:e.logger.scope("on").scope(String(t))}}function un(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:On(t.env,t.config.env),reportError:Pt(e,"destination",n,a,t)};ue(t.on,t=>Xt(e,"destination",t,{destId:n,type:o}))(o,i)}function dn(e,t,n,o){if(!Jt(e))return void Yt();const r=ln(e,t,o);if(n.length)switch(t){case gt.Consent:!function(e,t,n){const o=n||e.consent,r=cn(e,gt.Consent);t.forEach(t=>{sn(e,t,gt.Consent)&&an(e,t,gt.Consent)&&(Object.keys(o).filter(e=>e in t).forEach(n=>{ue(t[n],t=>Xt(e,"consent",t,{key:n}))(o,r)}),rn(e,t,gt.Consent))})}(e,n,o);break;case gt.Ready:!function(e,t){if(!e.allowed)return;const n=cn(e,gt.Ready);t.forEach(t=>{ue(t,t=>Xt(e,"ready",t))(void 0,n)})}(e,n);break;case gt.Run:!function(e,t){if(!e.allowed)return;const n=cn(e,gt.Run);t.forEach(t=>{ue(t,t=>Xt(e,"run",t))(void 0,n)})}(e,n);break;case gt.Session:!function(e,t){if(!e.session)return;const n=cn(e,gt.Session);t.forEach(t=>{ue(t,t=>Xt(e,"session",t))(e.session,n)})}(e,n);break;default:{const o=cn(e,t),s=en(t);n.forEach(n=>{"function"==typeof n&&(s&&!sn(e,n,t)||s&&!an(e,n,t)||(ue(n,n=>Xt(e,"generic",n,{type:t}))(r,o),s&&rn(e,n,t)))});break}}}function ln(e,t,n){switch(t){case gt.Consent:return n||e.consent;case gt.Session:return e.session;case gt.User:return n||e.user;case gt.Custom:return n||e.custom;case gt.Globals:return n||e.globals;case gt.Config:return n||e.config;default:return}}async function fn(e,t,n,o,r){if(!t.on)return!1;if(en(o)&&!sn(e,t,o))return!1;if(en(o)&&!an(e,t,o))return!1;const s=await de(t.on,t=>Xt(e,"source",t,{sourceId:n,type:o}))(o,r);return en(o)&&rn(e,t,o),!1===s}function pn(e){return"number"==typeof e&&e>0?e:1e4}var gn=class extends Error{constructor(e){super(e),this.name="DestinationTimeoutError"}};function hn(e,t,n){let o;const r=new Promise((e,r)=>{o=setTimeout(()=>r(new gn(n)),t)});return Promise.race([e,r]).finally(()=>{o&&clearTimeout(o)})}var mn=Object.freeze({batched:!0});function vn(e){return e===mn}function yn(e){return void 0===e?{}:"number"==typeof e?{wait:e}:{wait:e.wait,size:e.size,age:e.age}}function wn(e,t,n){if(!e)return[];if(Array.isArray(e)&&e.every(e=>"string"==typeof e))return Bt(e,t);if("string"==typeof e)return Bt(e,t);const o=W(e,B(n));return 0===o.length?[]:1===o.length?Bt(o[0],t):Bt(o,t)}async function bn(e,t,n={},o){const{allowed:r,consent:s,user:a}=e;if(!r)return Sn({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=St(e.queue,t,{max:n});if(o.dropped>0){const t=At(e.status,ee("collector"),"queue",o.dropped);Ot(e.queue,e.logger,"collector.queue overflow; oldest events dropped",{buffer:"queue",cap:n,droppedCount:t})}else e.queue.length<n&&qt(e.queue);e.status.in++}o||(o=e.destinations);const i=e.transformers?_t(e.transformers):{},c=await Promise.all(Object.entries(o||{}).map(async([o,r])=>{if(r.config.disabled)return{id:o,destination:r,skipped:!0};const c=r.config.id||o,u=ee("destination",c),d=Ct(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=xt();return void 0!==o.openUntil&&r<o.openUntil||(o.state="half-open",o.probing=!0,o.openUntil=r+n,!1)}(e.status.breakers,u,d.cooldown))return{id:o,destination:r,skipped:!0};const l=t=>{d&&jt(e.status.breakers,u,t,d.threshold,d.cooldown)},f=()=>{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,u)};let p=(r.queuePush||[]).map(e=>({...e,consent:s}));r.queuePush=[],t&&p.push(H(t));const g=n.ingest?{...n.ingest,_meta:{...n.ingest._meta,path:[...n.ingest._meta.path]}}:U("unknown");if(!p.length&&!r.queueOn?.length)return f(),{id:o,destination:r,skipped:!0};if(!p.length&&r.queueOn?.length){if(!Q(r.config.consent,s))return f(),{id:o,destination:r,skipped:!0};let t=!1;try{t=await kn(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)}),l("transport-failure")}return f(),{id:o,destination:r,skipped:!t}}const h=[],m=p.filter(t=>{const n=Q(r.config.consent,s,t.consent);if(n)return t.consent=n,h.push(t),!1;const a=mt(e,{stepId:ee("destination",o),stepType:"destination",phase:"skip",eventId:"string"==typeof t.id?t.id:"",now:Date.now(),...ht(t,g,e)});return a.skipReason="consent",s&&(a.consent={...s}),r.config.consent&&(a.meta={required:{...r.config.consent}}),K(e,a),!0});if(m.length>0){const t=r.queuePush,n=r.config.id||o,s={max:r.config.queueMax??1e3};let a=0;for(const e of m)a+=St(t,e,s).dropped;if(a>0){Tt(e,n);const o=At(e.status,ee("destination",n),"queue",a);Ot(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&&qt(t)}if(!h.length)return f(),{id:o,destination:r,queue:p};let v,y,w=!1;try{w=await kn(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)}),l("transport-failure")}if(!w)return f(),{id:o,destination:r,queue:p};r.dlq||(r.dlq=[]);const b=wn(r.config.before,i,g),k=r.config.next,I=r.config?.cache,S=I?N(I):void 0,E=S?Mt(S,e):void 0,O=r.config?.state?oe(r.config.state):void 0,q=O?.filter(e=>"get"===e.mode),x=O?.filter(e=>"set"===e.mode);let C=0,j=0,T=0;return await Promise.all(h.map(async t=>{let s,c;if(t.user=R(a,t.user),S?.stop&&E){const e=B(g,t),n=await G(S,E,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(b.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const r=await zt(e,e.transformers,b,t,g,n.respond,`destination.${o}.before`);if(null===r.event)return t;r.respond&&(d=r.respond),u=Array.isArray(r.event)?r.event:[r.event]}const l=async(t,n)=>{let s=n,a=!1;if(S&&!S.stop&&E){const e=B(g,t),n=await G(S,E,e);if("HIT"===n?.status)return!1;"MISS"===n?.status&&(s={key:n.key,ttl:n.rule.ttl},a=!0)}q&&q.length>0&&t&&(t=await re(q,t=>$t(t,e),t,e));const u=Date.now();let l=!1;const f=await te(In,n=>{const s=r.type||"unknown";e.logger.scope(s).error("Push failed",{...Dt(n),event:t.name}),v=n,l=!0;const a=r.dlq,i=r.config.id||o,c={max:r.config.dlqMax??100},u=St(a,[t,n],c);if(u.dropped>0){Tt(e,i);const t=At(e.status,ee("destination",i),"dlq",u.dropped);Ot(a,e.logger.scope(r.type||"unknown"),"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:i,cap:c.max,droppedCount:t})}else a.length<c.max&&qt(a)})(e,r,o,t,g,d);if(C+=Date.now()-u,s&&E&&void 0===r.config.mock&&(a?z(E,s.key,f??!0,s.ttl):void 0===c&&(c=f??!0)),!l&&!vn(f)&&x&&x.length>0&&t&&(t=await re(x,t=>$t(t,e),t,e)),void 0===f||vn(f)||(y=f),vn(f)&&j++,!l&&k){void 0!==f&&(g._response=f);const n=wn(k,i,g);if(n.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const r=await zt(e,e.transformers,n,t,g,d,`destination.${o}.next`);r.respond&&(d=r.respond)}}return!0};for(const e of u)await l(e,s)&&T++;return s&&E&&void 0!==c&&void 0===r.config.mock&&z(E,s.key,c,s.ttl),t})),{id:o,destination:r,error:v,response:y,totalDuration:C,batchedCount:j,allowedCount:h.length,pushedCount:T,canonicalId:c,breakerConfig:d}})),u={},d={},l={};for(const t of c){if(t.skipped)continue;const n=t.destination,o={type:n.type||"unknown",data:t.response};Tt(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?ee("destination",t.canonicalId):void 0,c=t=>{a&&i&&jt(e.status.breakers,i,t,a.threshold,a.cooldown)};if(t.error)o.error=t.error,l[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,i=t.pushedCount??a;(Math.max(0,i-n)>0||0===a)&&(u[t.id]=o,r.count++,r.lastAt=s,r.duration+=t.totalDuration||0,e.status.out++,c("success"))}}return Sn({event:t,...Object.keys(u).length&&{done:u},...Object.keys(d).length&&{queued:d},...Object.keys(l).length&&{failed:l}})}async function kn(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:On(t.env,t.config.env),reportError:Pt(e,"destination",n,s,t)};s.debug("init");const i=Date.now();let c;K(e,mt(e,{stepId:ee("destination",n),stepType:"destination",phase:"init",eventId:"",now:i}));try{c=await ne(t.init,"DestinationInit",e.hooks,e.logger)(a)}catch(t){const o=Date.now(),r=mt(e,{stepId:ee("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)un(e,t,n,r,s)}s.debug("init done")}return!0}async function In(e,t,n,o,r,s){const{config:a}=t,i=await Z(o,a,e);if(i.ignore)return!1;const c=t.type||"unknown",u=e.logger.scope(c),d={collector:e,logger:u,id:n,config:a,data:i.data,rule:i.mapping,ingest:r,env:{...On(t.env,a.env),...s?{respond:s}:{}},reportError:Pt(e,"destination",n,u,t)};if(void 0!==a.mock)return u.debug("mock",{event:i.event.name}),a.mock;const l=i.mapping,f=void 0!==l?.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=yn(l?.batch),s=yn(a.batch),i=r.wait??s.wait??3e4,c=r.size??s.size??1e3,d=r.age??s.age??3e4,g=On(t.env,a.env),h=F(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],c={collector:e,logger:u,id:n,config:a,data:void 0,rule:o.isDefault?void 0:i.rule,ingest:i.ingest,env:{...g,...i.respond?{respond:i.respond}:{}},reportError:Pt(e,"destination",n,u,t)};u.debug("push batch",{events:s.entries.length});const d=t.config.id||n,l=Tt(e,d),f=Ct(t.config.breaker),h=ee("destination",d),m=t=>{f&&jt(e.status.breakers,h,t,f.threshold,f.cooldown)},v=Date.now(),y=new Map;let w,b=!1;const k=n=>{const o=t.dlq=t.dlq||[],r={max:t.config.dlqMax??100};let s=0;for(const e of n)s+=St(o,e,r).dropped;if(s>0){const t=At(e.status,ee("destination",d),"dlq",s);Ot(o,u,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:d,cap:r.max,droppedCount:t})}else o.length<r.max&&qt(o);l.failed+=n.length,l.dlqSize=o.length,e.status.failed+=n.length};let I=s.entries.length;const S=pn(a.timeout),E=await te((o,r)=>hn(Promise.resolve(ne(t.pushBatch,"DestinationPushBatch",e.hooks,e.logger)(o,r)),S,`Destination "${n}" batch delivery timed out after ${S}ms`),e=>{I=0,b=!0,w=e,k(s.entries.map(t=>[t.event,e])),m("transport-failure"),u.error("Push batch failed",{error:e instanceof Error?e.message:String(e),entries:s.entries.length})})(s,c);if(Y(O=E)&&Array.isArray(O.failed)&&E.failed.length>0){const e=[];for(const t of E.failed){const n=s.entries[t.index];if(!n||y.has(t.index))continue;const o=t.error??new Error(`Push batch entry ${t.index} failed (no per-row error provided)`);y.set(t.index,o),e.push([n.event,o])}e.length>0&&(k(e),I=Math.max(0,s.entries.length-e.length),u.error("Push batch partial failure",{failed:e.length,delivered:I,entries:s.entries.length}))}var O;const q=Date.now();s.entries.forEach((t,o)=>{const r=b||y.has(o),a=ht(t.event,t.ingest,e),i=mt(e,{stepId:ee("destination",n),stepType:"destination",phase:r?"error":"flush",eventId:"string"==typeof t.event.id?t.event.id:"",now:q,traceId:a.traceId,sourceId:a.sourceId,parentEventId:a.parentEventId});if(i.batch={size:s.entries.length,index:o},i.durationMs=q-v,r){const e=b?w:y.get(o);i.error=e instanceof Error?{name:e.name,message:e.message}:{message:String(e)}}K(e,i)}),u.debug("push batch done"),l.inFlightBatch=Math.max(0,(l.inFlightBatch??0)-s.entries.length),I>0&&(l.count+=I,l.lastAt=Date.now(),e.status.out+=I,m("success"))},{wait:i,size:c,age:d});t.batches[p]={batched:o,isDefault:!f,batchFn:()=>{h()},flush:async()=>{await h.flush()}}}const c=t.batches[p];c.batched.entries.push({event:i.event,ingest:r,respond:s,rule:l,data:i.data}),c.batched.events.push(i.event),J(i.data)&&c.batched.data.push(i.data);const d="string"==typeof i.event.id?i.event.id:"",g=ht(o,r,e),h=Date.now(),m=mt(e,{stepId:ee("destination",n),stepType:"destination",phase:"in",eventId:d,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=mt(e,{stepId:ee("destination",n),stepType:"destination",phase:"out",eventId:d,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=Tt(e,y);return w.inFlightBatch=(w.inFlightBatch??0)+1,c.batchFn(),mn}{let s;if(u.debug("push",{event:i.event.name}),"trace"===e.observeLevel?.()&&Array.isArray(t.calls)&&t.calls.length>0){const e=wt({...d.env,simulation:t.calls});d.env=e.wrappedEnv,s=e.calls,e.unresolved.length>0&&(e.wrappedEnv[X]={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:l,sourceId:f,parentEventId:p}=ht(o,r,e),g=Date.now(),h=mt(e,{stepId:ee("destination",n),stepType:"destination",phase:"in",eventId:c,now:g,traceId:l,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=pn(a.timeout),r=await hn(Promise.resolve(ne(t.push,"DestinationPush",e.hooks,e.logger)(i.event,d)),o,`Destination "${n}" delivery timed out after ${o}ms`),h=Date.now(),m=mt(e,{stepId:ee("destination",n),stepType:"destination",phase:"out",eventId:c,now:h,traceId:l,sourceId:f,parentEventId:p});return m.durationMs=h-g,m.outEvent=i.event,s&&s.length>0&&(m.calls=It(s)),J(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=mt(e,{stepId:ee("destination",n),stepType:"destination",phase:"error",eventId:c,now:o,traceId:l,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=It(s)),i.mappingKey&&(r.mappingKey=i.mappingKey),K(e,r),t}}}function Sn(e){return{ok:!e?.failed,...e}}function En(e){const{code:t,config:n={},env:o={},cache:r,state:s}=e,{config:a}=Rt(e,"before"),{config:i}=Rt({...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=On(t.env,o);return{...t,config:c,env:u}}function On(e,t){return e||t?t?e&&Y(e)&&Y(t)?{...e,...t}:t:e:{}}async function qn(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 xn(e,t){e.stateVersion++,e.cellVersion[t]=e.stateVersion}async function Cn(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 gt.Config:Je(n)&&(Ue(e.config,n,{shallow:!1}),r=n,s=!0);break;case gt.Consent:if(Je(n)){const{update:t}=function(e,t){const n={};return Object.entries(t).forEach(([e,t])=>{n[e]=!!t}),e.consent=T(e.consent,n),{update:n}}(e,n);xn(e,gt.Consent),r=t,s=!0}break;case gt.Custom:Je(n)&&(e.custom=Ue(e.custom,n),xn(e,gt.Custom),r=n,s=!0);break;case gt.Destination:Je(n)&&"code"in n&&Je(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(!V(n.push))return Sn({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};a&&(d={...d,next:a}),i&&(d={...d,cache:i}),void 0!==c&&void 0===d.state&&(d={...d,state:c});let l=d.id;if(!l)do{l=L(5,"abcdefghijklmnopqrstuvwxyz")}while(e.destinations[l]||e.pending.destinations[l]);if(d.require?.length){e.pending.destinations[l]=t,await Wt(e);const n=e.destinations[l];return n?bn(e,void 0,{},{[l]:n}):Sn({ok:!0})}const f={...n,config:d,env:On(n.env,r)};return e.destinations[l]=f,!1!==f.config.queue&&(f.queuePush=[...e.queue]),bn(e,void 0,{},{[l]:f})}(e,n));break;case gt.Globals:Je(n)&&(e.globals=Ue(e.globals,n),xn(e,gt.Globals),r=n,s=!0);break;case gt.Hook:if(Je(n)&&We(n.name)&&Qe(n.fn)){const{name:t,fn:o}=n;e.hooks[t]=o,r=n,s=!0}break;case gt.On:if(Je(n)&&We(n.type)){const{type:t,rules:o}=n;await async function(e,t,n){if(!Jt(e))return void Yt();const o=e.on,r=o[t]||[],s=ie(n)?n:[n];s.forEach(e=>{r.push(e)}),o[t]=r,dn(e,t,s)}(e,t,o)}break;case gt.Ready:s=!0;break;case gt.Run:o=await async function(e,t){e.allowed=!0,e.timing=Date.now(),e.trace=Ke(),e.count=0,t&&(t.consent&&(e.consent=Ue(e.consent,t.consent),xn(e,gt.Consent)),t.user&&(e.user=Ue(e.user,t.user),xn(e,gt.User)),t.globals&&(e.globals=Ue(e.config.globalsStatic||{},t.globals),xn(e,gt.Globals)),t.custom&&(e.custom=Ue(e.custom,t.custom),xn(e,gt.Custom))),Object.values(e.destinations).forEach(e=>{e.queuePush=[]}),e.queue=[],e.round++,await Wt(e),await async function(e){if(Jt(e))for(const t of Zt){if(!tn(e,t))continue;const n=ln(e,t);dn(e,t,e.on[t]||[]);for(const[o,r]of Object.entries(e.sources))Lt(r)&&await fn(e,r,o,t,n)}else Yt()}(e);let n=!0;const o={};if(e.preRunQueue.length){const t=e.preRunQueue.splice(0);e.logger.debug("replaying pre-run events",{count:t.length});for(const{event:r,options:s}of t){const t=await e.push(r,s);!1===t.ok&&(n=!1),t.failed&&Object.assign(o,t.failed)}}const r=await bn(e);if(n)return r;const s={...r.failed??{},...o};return{...r,ok:!1,...Object.keys(s).length>0?{failed:s}:{}}}(e,n),s=!0;break;case gt.Session:s=!0;break;case gt.Shutdown:e.hasShutdown||(e.hasShutdown=!0,await async function(e){const t=e.logger;await qn(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 qn(e.destinations,"destination",t),await qn(e.transformers,"transformer",t),await qn(e.stores,"store",t)}(e));break;case gt.User:Je(n)&&(Ue(e.user,n,{shallow:!1}),xn(e,gt.User),r=n,s=!0);break;default:return e.logger.warn("unknown command",{command:t}),Sn({ok:!1})}if(s){await async function(e,t,n,o){if(!Jt(e))return Yt(),!0;e.seenEvents.add(String(t));let r=n||[];n||(r=e.on[t]||[]);const s=ln(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&&(Lt(o)?await fn(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});un(e,o,n,t,s)}});for(const[t,n]of Object.entries(e.sources))Lt(n)&&n.queueOn?.length&&await Kt(e,n,t);const i=Object.values(e.sources).some(e=>!Lt(e)&&e.config.require?.length);return(Object.keys(e.pending.destinations).length>0||i)&&await Wt(e),dn(e,t,r,o),!a}(e,t,void 0,r);const n=await bn(e);if(o&&!1===o.ok){const e={...n.failed??{},...o.failed??{}};o={...n,ok:!1,...Object.keys(e).length>0?{failed:e}:{}}}else o=n}return o||Sn({ok:!0})}()}finally{a()}}function jn(e,t){return{timing:Math.round((Date.now()-e.timing)/10)/100,source:{type:"collector",schema:"4"},...t}}function Tn(e,t,n){const o=t.name;if("string"!=typeof o)throw new Le(void 0===o?"Event name is required":"Event name is invalid");if(!o)throw new Le("Event name is required");const[r,s]=o.split(" ");if(!r||!s)throw new Le("Event name is invalid");const{timestamp:a=Date.now(),name:i=`${r} ${s}`,data:c={},context:u={},globals:d={},custom:l={},user:f=e.user,nested:p=[],consent:g=e.consent,id:h=Fe(),trigger:m="",entity:v=r,action:y=s,timing:w=0,source:b={type:"collector",schema:"4"}}=t,k=b??{type:"collector",schema:"4"},I=k.count??(e.count+=1),S=k.trace??n?._meta.trace??e.trace,E={...k,count:I};void 0!==S&&(E.trace=S);const O=e.name??k.platform??"default",q=e.release??"4.6.0";return E.release={...k.release,[O]:q},{name:i,data:c,context:u,globals:Ue(e.globals,d),custom:l,user:f,nested:p,consent:g,id:h,trigger:m,entity:v,action:y,timestamp:a,timing:w,source:E}}function An(e,t){const n=rt(async(n,o={})=>await ot(async()=>{if(!e.allowed){const t=e.config.queueMax;if(void 0===t)throw new Error("Collector.Config.queueMax is undefined; defaults must be seeded by collector()");const r=St(e.preRunQueue,{event:n,options:o},{max:t});if(r.dropped>0){const n=At(e.status,"collector.preRun","queue",r.dropped);Ot(e.preRunQueue,e.logger,"collector.preRunQueue overflow; oldest events dropped",{buffer:"queue",cap:t,droppedCount:n})}else e.preRunQueue.length<t&&qt(e.preRunQueue);return e.logger.debug("event held until run",{name:n.name,dropped:r.dropped}),Sn({ok:!0})}const r=Date.now(),{id:s,ingest:a,respond:i,mapping:c,preChain:u,include:d,exclude:l}=o;let f=i,p=n;const g=d||l?function(e,t,n){let o=e;return t&&(o=Object.fromEntries(Object.entries(o).filter(([e])=>t.includes(e)))),n&&(o=Object.fromEntries(Object.entries(o).filter(([e])=>!n.includes(e)))),o}(e.destinations,d,l):void 0,h=a??Ve(s||"unknown");if(c){const t=await nt(p,c,e);if(t.ignore)return Sn({ok:!0});if(c.consent&&!Ze(c.consent,e.consent,t.event.consent))return Sn({ok:!0});p=t.event}if(u?.length&&e.transformers&&Object.keys(e.transformers).length>0){const n=await zt(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})`:"")),Sn({ok:!0,dropped:!0});if(n.stopped)return n.respond&&(f=n.respond),Sn({ok:!0});n.respond&&(f=n.respond);const o="string"==typeof p.id?p.id:"";if(Array.isArray(n.event)){const a=await Promise.all(n.event.map(async n=>{const r=""!==o&&n.id===o?{...n,id:et()}:n,a=t(r),i=Tn(e,a,h);return bn(e,i,{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 a[0]??Sn({ok:!0})}p=""===o||"string"==typeof n.event.id&&""!==n.event.id?n.event:{...n.event,id:o}}const m=function(e,t,n){return Tn(e,jn(e,t),n)}(e,p,h),v=await bn(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 Xe)throw t;if(t instanceof tt){const n=o.id;if(n){e.status.sources[n]||(e.status.sources[n]={count:0,duration:0});const t=e.status.sources[n];t.rejected=(t.rejected??0)+1}return e.logger.warn("invalid event rejected",{error:t.message}),Sn({ok:!1,invalid:!0,error:t.message})}return e.status.failed++,e.logger.error("push failed",{...Dt(t),event:n.name}),Sn({ok:!1})})(),"Push",e.hooks,e.logger);return async(t,o)=>{const r="string"==typeof t.id&&""!==t.id?t:{...t,id:et()},s="string"==typeof r.id?r.id:"",{traceId:a,sourceId:i,parentEventId:c}=ht(r,o?.ingest,e),u=Date.now(),d=mt(e,{stepId:"collector.push",stepType:"collector",phase:"in",eventId:s,now:u,traceId:a,sourceId:i,parentEventId:c});d.inEvent=r,Ye(e,d);try{const t=await n(r,o),d=Date.now(),l=mt(e,{stepId:"collector.push",stepType:"collector",phase:"out",eventId:s,now:d,traceId:a,sourceId:i,parentEventId:c});return l.durationMs=d-u,l.outEvent=t,Ye(e,l),t}catch(t){const n=Date.now(),o=mt(e,{stepId:"collector.push",stepType:"collector",phase:"error",eventId:s,now:n,traceId:a,sourceId:i,parentEventId:c});throw o.durationMs=n-u,o.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},Ye(e,o),t}}}function Dn(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 Pn(e,t){const{cacheConfig:n,cacheStore:o,namespace:r,logger:s,storeId:a,collector:i}=t,c=(e,t)=>{if(!i)return;const n=mt(i,{stepId:`store.${a}`,stepType:"store",phase:"in",eventId:"",now:Date.now()});n.meta={op:"cache",cached:"hit"===t,status:t,key:e},lt(i,n)},u={hits:0,misses:0,populates:0,writes:0,deletes:0,inflight_dedups:0},d=n.rules.map(e=>({match:e.match?dt(e.match):()=>!0,ttl:e.ttl})),l=e=>`${r}:${e}`;function f(e,t){const n=void 0===t?{key:e}:{key:e,value:t};return d.find(e=>e.match(n))}const p=new Map;return{type:e.type,config:e.config,setup:e.setup,get counters(){return{...u}},async get(t){const n=l(t),r=await o.get(n),s=ft(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,pt(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(l(t),pt(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(${a}): cache ${e} failed for "${t}"; backing succeeded, continuing`;s?s.warn(o,Dt(n)):console.warn(o,n)}}function Mn(e,t,n){const o=`store.${n}`,r=ut(t.get,"StoreGet",e.hooks,e.logger),s=ut(t.set,"StoreSet",e.hooks,e.logger),a=ut(t.delete,"StoreDelete",e.hooks,e.logger);t.get=async t=>{const n=Date.now(),s=mt(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:n});s.meta={op:"get",key:t},ct(e,s);try{const s=await r(t),a=Date.now(),i=mt(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:a});return i.durationMs=a-n,i.meta={op:"get",key:t},ct(e,i),s}catch(r){const s=Date.now(),a=mt(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)},ct(e,a),r}},t.set=async(t,n,r)=>{const a=Date.now(),i=mt(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:a});i.meta={op:"set",key:t},ct(e,i);try{await s(t,n,r);const i=Date.now(),c=mt(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:i});c.durationMs=i-a,c.meta={op:"set",key:t},ct(e,c)}catch(n){const r=Date.now(),s=mt(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)},ct(e,s),n}},t.delete=async t=>{const n=Date.now(),r=mt(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:n});r.meta={op:"delete",key:t},ct(e,r);try{await a(t);const r=Date.now(),s=mt(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:r});s.durationMs=r-n,s.meta={op:"delete",key:t},ct(e,s)}catch(r){const s=Date.now(),a=mt(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)},ct(e,a),r}}}async function $n(e){const t=$({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:[],preRunQueue:[],round:0,count:0,stateVersion:0,cellVersion:{},delivery:new WeakMap,session:void 0,status:{startedAt:Date.now(),in:0,out:0,failed:0,sources:{},destinations:{},dropped:{},connectionErrors:{},breakers:{}},timing:Date.now(),user:e.user||{},sources:{},pending:{destinations:{}},hasShutdown:!1,seenEvents:new Set,push:void 0,command:void 0,elb:void 0};var a,i;void 0!==e.name&&(s.name=e.name),void 0!==e.release&&(s.release=e.release),s.push=An(s,e=>jn(s,e)),s.command=(i=Cn,at(async(e,t,n)=>await it(async()=>await i(a,e,t,n),t=>{if(t instanceof st)throw t;return a.status.failed++,a.logger.error("command failed",{...Dt(t),command:e}),Sn({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 Sn({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:Pt(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=Dn()),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]=Pn(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&&Mn(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=Dn()),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]=En(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=He(r,"Transformer");if(!a.ok){e.logger.warn(`Transformer ${o} invalid (${a.code}): ${a.reason}. Skipping.`);continue}const{config:i}=Rt(r,"before"),{config:c}=Rt({...r,config:i},"next"),u=Object.keys(s).length>0?{...c,env:s}:c,{cache:d}=r,l=d?{...u,cache:d}:u,f=r.config?.state??r.state,p=void 0!==f&&void 0===l.state?{...l,state:f}:l,g=e.logger.scope("transformer").scope(o),h={collector:e,logger:g,id:o,ingest:xe(o),config:p,env:s,reportError:Pt(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 Ne(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 _n=globalThis;function Rn(e){try{const t=_n.window;if(!t)return;t.localStorage.getItem(A)===e&&t.localStorage.removeItem(A)}catch{}}function Bn(e,t){return void 0===t?e:n=>e({...n,release:t})}async function Hn(e){e=e||{};const t=await $n(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=_n.window,t=_n.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 _n.window?.localStorage.getItem(A)??null}catch{return null}}();if(!r)return;const s=M(r);if(!s)return void(null===t?(e.logger.warn("observe: malformed stored credential cleared"),Rn(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{_n.window?.localStorage.setItem(A,e)}catch{}}(r),null!==t&&function(){const e=_n.window,t=_n.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=D({url:`${n.url}/ingest/${s.ses}`,token:s.secret,headers:{"X-Walkeros-Binding":n.binding},onStatus:t=>{401===t&&(Rn(r),a&&e.observers.delete(a))}});a=P(function(e,t){return void 0===t?e:n=>e({...n,flowId:t})}(Bn(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(P(Bn(D({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 Qt(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 ye(n.init.bind(n),n=>{if(n instanceof pe)throw n;o=!0,e.status.failed++,e.logger.scope("source").error("source init failed",{sourceId:t,...Dt(n)})})(),o||(n.config.init=!0,Lt(n)&&await Kt(e,n,t))}return await Wt(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 Nn=async e=>{let t;return{get flow(){return t},trigger:()=>async n=>{if(!t){const n=await Hn(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 Gn(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 zn={};t(zn,{createTrigger:()=>to,env:()=>Un,step:()=>Jn});var Un={};t(Un,{push:()=>Qn,simulation:()=>Wn});var Fn=()=>{},Kn={error:Fn,warn:Fn,info:Fn,debug:Fn,throw:e=>{throw"string"==typeof e?new Error(e):e},json:Fn,scope:()=>Kn},Ln=()=>()=>Promise.resolve({ok:!0}),Qn={get push(){return Ln()},get command(){return Ln()},get elb(){return Ln()},logger:Kn},Wn=["AWS.SQSClient"],Jn={};t(Jn,{decoderText:()=>Xn,malformedJson:()=>Zn,orderComplete:()=>Yn,pageView:()=>Vn});var Vn={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"]]},Yn={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"]]},Xn={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"]]},Zn={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 eo(e){if("object"!=typeof e||null===e)return!1;const t=e;return"sqs"===t.type&&"function"==typeof t.push}var to=async e=>{let t;return{get flow(){return t},trigger:()=>async n=>{if(!t){const n=await Hn(e);t={collector:n.collector,elb:n.elb}}const o=function(e){for(const t of Object.values(e.sources??{}))if(eo(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,zn as sqsExamples};//# sourceMappingURL=dev.mjs.map
|
package/dist/walkerOS.json
CHANGED
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.6.0
|
|
4
|
+
"version": "4.6.0",
|
|
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.6.0
|
|
26
|
+
"@walkeros/core": "4.6.0"
|
|
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.6.0
|
|
33
|
+
"@walkeros/collector": "4.6.0"
|
|
34
34
|
},
|
|
35
35
|
"repository": {
|
|
36
36
|
"url": "git+https://github.com/elbwalker/walkerOS.git",
|