@walkeros/server-source-aws 4.6.0 → 4.7.0-next-1790187973605
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 +23 -0
- package/dist/dev.js +1 -1
- package/dist/dev.js.map +1 -1
- package/dist/dev.mjs +1 -1
- package/dist/dev.mjs.map +1 -1
- package/dist/walkerOS.json +3 -3
- package/package.json +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,28 @@
|
|
|
1
1
|
# @walkeros/server-source-aws
|
|
2
2
|
|
|
3
|
+
## 4.7.0-next-1790187973605
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Updated dependencies [57788bc]
|
|
8
|
+
- Updated dependencies [f5a1cfd]
|
|
9
|
+
- Updated dependencies [ef02916]
|
|
10
|
+
- Updated dependencies [ef02916]
|
|
11
|
+
- Updated dependencies [2aebc53]
|
|
12
|
+
- Updated dependencies [f5a1cfd]
|
|
13
|
+
- Updated dependencies [f5a1cfd]
|
|
14
|
+
- Updated dependencies [2aebc53]
|
|
15
|
+
- Updated dependencies [8f8aea6]
|
|
16
|
+
- Updated dependencies [2aebc53]
|
|
17
|
+
- Updated dependencies [2aebc53]
|
|
18
|
+
- @walkeros/core@4.7.0-next-1790187973605
|
|
19
|
+
|
|
20
|
+
## 4.6.1
|
|
21
|
+
|
|
22
|
+
### Patch Changes
|
|
23
|
+
|
|
24
|
+
- @walkeros/core@4.6.1
|
|
25
|
+
|
|
3
26
|
## 4.6.0
|
|
4
27
|
|
|
5
28
|
### Patch Changes
|
package/dist/dev.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var e,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,o=Object.getOwnPropertyNames,r=Object.prototype.hasOwnProperty,s=(e,n)=>{for(var o in n)t(e,o,{get:n[o],enumerable:!0})},i={};s(i,{examples:()=>E,schemas:()=>a,sqsExamples:()=>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
|
|
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:()=>Pt}),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"),d=require("@walkeros/core/dev"),u=require("@walkeros/core/dev"),l=u.z.enum(["GET","POST","PUT","PATCH","DELETE","OPTIONS","HEAD"]),p=u.z.union([u.z.string(),u.z.array(u.z.string()),u.z.literal("*")]),f=u.z.object({origin:p.describe("Allowed origins (* for all, URL string, or array of URLs)").optional(),methods:u.z.array(l).describe("Allowed HTTP methods").optional(),headers:u.z.array(u.z.string()).describe("Allowed request headers").optional(),credentials:u.z.boolean().describe("Allow credentials (cookies, authorization headers)").optional(),maxAge:u.z.number().int().positive().describe("Preflight cache duration in seconds").optional()}),g=d.z.object({cors:d.z.union([d.z.boolean(),f]).describe("CORS configuration: false = disabled, true = allow all origins, object = custom configuration").default(!0),timeout:d.z.number().int().positive().max(9e5).describe("Request timeout in milliseconds (max: 900000 for Lambda)").default(3e4),enablePixelTracking:d.z.boolean().describe("Enable GET requests with 1x1 transparent GIF response for pixel tracking").default(!0),maxBatchSize:d.z.number().int().min(1).describe("Maximum number of events accepted in a single batch request").default(100),healthPath:d.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:()=>Mt,env:()=>q,step:()=>T,trigger:()=>At});var q={};s(q,{push:()=>j});var O=()=>()=>Promise.resolve({ok:!0}),x=()=>{},C={error:x,warn:x,info:x,debug:x,throw:e=>{throw"string"==typeof e?new Error(e):e},json:x,scope:()=>C},j={get push(){return O()},get command(){return O()},get elb(){return O()},logger:C},T={};s(T,{apiGatewayV1Post:()=>M,lambdaGet:()=>A,lambdaPost:()=>D,lambdaPostForwardsSource:()=>P});var D={title:"Lambda POST",description:"An API Gateway v2 HTTP POST with a JSON body is converted into a walker elb event.",trigger:{type:"POST"},in:{version:"2.0",requestContext:{http:{method:"POST",path:"/collect"},requestId:"req-123"},body:JSON.stringify({name:"page view",data:{title:"Home"}}),isBase64Encoded:!1},out:[["elb",{name:"page view",data:{title:"Home"}}]]},M={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"}}]]},A={title:"Lambda GET",description:"An API Gateway v2 HTTP GET with query parameters is parsed into an elb event payload.",trigger:{type:"GET"},in:{version:"2.0",requestContext:{http:{method:"GET",path:"/collect"},requestId:"req-456"},rawQueryString:"e=page+view&d=%7B%22title%22%3A%22Home%22%7D",isBase64Encoded:!1},out:[["elb",{e:"page view",d:'{"title":"Home"}'}]]},P={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"),H=require("@walkeros/core"),G=require("@walkeros/core"),N=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=require("@walkeros/core"),X=require("@walkeros/core"),Z={Action:"action",Actions:"actions",Config:"config",Consent:"consent",Context:"context",Custom:"custom",Destination:"destination",Elb:"elb",Globals:"globals",Hook:"hook",Init:"init",Link:"link",On:"on",Prefix:"data-elb",Ready:"ready",Run:"run",Scoped:"_",Session:"session",Shutdown:"shutdown",User:"user",Walker:"walker"};function ee(e,t,n){return{traceId:e.source?.trace??t?._meta.trace??n.trace,sourceId:t?._meta.path[0],parentEventId:t?._meta.parentEventId}}function te(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 ne(e,t,n,o,r){e.status.in++;const s=te(e,{stepId:"collector.push",stepType:"collector",phase:"skip",eventId:"string"==typeof t.id?t.id:"",now:Date.now(),...ee(t,n,e)});s.skipReason="dropped",s.meta={by:o??"route",at:r},(0,R.emitStep)(e,s)}function oe(e){return"object"==typeof e&&null!==e}function re(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(re(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:re(s,t,n+1);return r}function se(e){const t=[],n=[],{simulation:o,...r}=e,s=re(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(!oe(t)){a=!1;break}i=t}const c=o[o.length-1];if(!a||!(c in i)){n.push(r);continue}const d=i[c];"function"==typeof d?i[c]=function(...e){return t.push({fn:r,args:e,ts:Date.now()}),d.apply(this,e)}:n.push(r)}return{wrappedEnv:s,calls:t,unresolved:n}}function ie(e,t){try{return e[t]}catch{return"[unreadable]"}}function ae(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(ie(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 ce(e){return e.map(e=>({fn:e.fn,args:ae(e.args),ts:e.ts}))}function de(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 ue=new WeakMap;function le(e,t,n,o){ue.get(e)||(ue.set(e,!0),t.warn(n,o))}function pe(e){ue.delete(e)}var fe=()=>Date.now();function ge(e){if(void 0!==e)return"number"==typeof e?{threshold:e,cooldown:3e4}:{threshold:e.threshold??5,cooldown:e.cooldown??3e4}}function he(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=fe()+r)):void(s.consecutiveFailures>=o&&(s.state="open",s.probing=!1,s.openUntil=fe()+r)))}function me(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 ve(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 ye(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 we(e,t,n,o,r){const s=(0,N.stepId)(t,n);return(t,i)=>{try{if(i)return r?function(e,t,n,o,r,s){const i=t.dlq=t.dlq||[],a={max:t.config.dlqMax??100},c=de(i,[o,r],a);if(c.dropped>0){const t=ve(e.status,(0,N.stepId)("destination",n),"dlq",c.dropped);le(i,s,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:n,cap:a.max,droppedCount:t})}else i.length<a.max&&pe(i);const d=me(e,n);d.failed++,d.dlqSize=i.length,e.status.failed++;const u=ge(t.config.breaker);if(u){const o=t.config.id||n;he(e.status.breakers,(0,N.stepId)("destination",o),"transport-failure",u.threshold,u.cooldown)}}(e,r,n,i,t,o):e.status.failed++,void o.error("report error",{...ye(t),event:i.name});e.status.connectionErrors[s]=(e.status.connectionErrors[s]??0)+1,o.error("connection error",ye(t))}catch{}}}function be(e,t){return e.storeId&&t.stores[e.storeId]?t.stores[e.storeId]:t.stores.__cache}function ke(e,t){return e?t.stores[e]:t.stores.__cache}function Ie(e,t){const n=e.config||{},o=e[t];return void 0!==o?{config:{...n,[t]:o},chainValue:o}:{config:n,chainValue:void 0}}async function Se(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:Pe(t.config.env),reportError:we(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 Ee(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:{...Pe(t.config.env),...s?{respond:s}:{}},reportError:we(e,"transformer",n,a)};a.debug("push",{event:o.name});const d="string"==typeof o.id?o.id:"",{traceId:u,sourceId:l,parentEventId:p}=ee(o,r,e),f=Date.now(),g=te(e,{stepId:(0,F.stepId)("transformer",n),stepType:"transformer",phase:"in",eventId:d,now:f,traceId:u,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=te(e,{stepId:(0,F.stepId)("transformer",n),stepType:"transformer",phase:"out",eventId:d,now:s,traceId:u,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=te(e,{stepId:(0,F.stepId)("transformer",n),stepType:"transformer",phase:"error",eventId:d,now:o,traceId:u,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 qe(e){return"string"==typeof e.id?e.id:""}function Oe(e,t){const n=qe(e);return""!==n&&""===qe(t)?{...t,id:n}:t}function xe(e,t,n,o){const r=(a=n,{...a,_meta:{...a._meta,path:[...a._meta.path]}}),s=(0,F.clone)(t),i=qe(e);var a;if(""===i)return{event:s,ingest:r};r._meta.parentEventId=i;const c=qe(s);return""!==c&&c!==i||(s.id=(0,F.deriveSpanId)(i,o)),{event:s,ingest:r}}function Ce(e,t){return{copies:e,respond:t}}function je(e,t){if(void 0===t)return e.rest;const n=e.ownNext?e.rest.slice(1):e.rest;return[{route:t,ancestry:e.ancestry},...n]}async function Te(e,t,n){const o=await Promise.all(t.map((t,n)=>(0,F.tryCatchAsync)(De,t=>(e.collector.logger.scope("transformer:fork").error(`fork ${n} failed`,ye(t)),{copies:[]}))(e,t))),r=[];let s,i=n,a=o.length>0;return o.forEach((e,n)=>{void 0!==t[n].respond&&e.respond&&(i=e.respond),e.stopped||(a=!1),e.stopped||0===e.copies.length?void 0===s&&(s=e.droppedBy):r.push(...e.copies)}),0===r.length?{copies:r,respond:i,...a?{stopped:!0}:{},...void 0!==s?{droppedBy:s}:{}}:Ce(r,i)}async function De(e,t){const{ingest:n}=t;let{stack:o,event:r,respond:s}=t,i=t.resume;for(;;){let t,a;if(i)t=i.member,a=i,i=void 0;else{const i=(0,F.advanceChain)(o,(0,F.createMappingRoot)(n,r),e.transformers);if("done"===i.kind)return Ce([{event:r,ingest:n}],s);if("stop"===i.kind)return{copies:[],respond:s,stopped:!0,...void 0!==i.owner?{droppedBy:i.owner}:{}};if("fork"===i.kind){const t=r;return Te(e,i.branches.map((e,o)=>({stack:e,...xe(t,t,n,o),respond:void 0})),s)}const a=e.transformers[i.id];t={id:i.id,ancestry:i.ancestry,rest:i.rest,ownNext:!!a&&void 0!==a.config.next}}const c=await Me(e,t,r,n,s,a);if("halt"===c.kind)return c.result;if("fork"===c.kind)return Te(e,c.copies,s);r=c.event,s=c.respond,o=c.stack}}async function Me(e,t,n,o,r,s){const{collector:i,transformers:a,chainContext:c}=e,d=t.id,u=a[d];let l=n,p=r;const f=(e=t.rest)=>({kind:"continue",event:Oe(n,l),respond:p,stack:e}),g=e=>({kind:"halt",result:e});if(!u)return i.logger.warn(`Transformer not found: ${d}`),f();const h=u.config?.cache,m=h?(0,F.compileCache)(h):void 0,v=m?be(m,i):void 0;let y=s?.cacheMiss;if(!s){if(o._meta.path.length>256)return i.logger.error(`Max path length exceeded at ${d}`),g({copies:[],respond:p});if(o._meta.hops++,o._meta.path.push(d),!await(0,F.tryCatchAsync)(Se,e=>{if(e instanceof F.FatalError)throw e;return i.status.failed++,i.logger.scope(`transformer:${u.type||"unknown"}`).error("transformer init failed",{transformer:d,...ye(e)}),!1})(i,u,d))return g({copies:[],respond:p});if(c&&void 0!==u.config?.chainMocks?.[c]){const e=u.config.chainMocks[c];return i.logger.scope(`transformer:${u.type||"unknown"}`).debug("chainMock",{chain:c}),l=e,f()}if(void 0!==u.config?.mock)return i.logger.scope(`transformer:${u.type||"unknown"}`).debug("mock"),l=u.config.mock,f();if(u.config?.disabled)return f();if(m&&v){const e=await(0,F.checkCache)(m,v,(0,F.createMappingRoot)(o,l));if("HIT"===e?.status&&e.value)return l=e.value,m.stop?g({copies:[{event:Oe(n,l),ingest:o}],respond:p,stopped:!0}):f();"MISS"===e?.status&&(y={key:e.key,ttl:e.rule.ttl})}if(void 0!==u.config.before){const e=await async function(e,t,n,o,r,s,i){const a=t[n],c=a?a.config.before:void 0,d=await Ae(e,t,c,o,r,s,i);return d.stopped&&0===d.copies.length&&!d.droppedBy?{...d,droppedBy:n}:d}(i,a,d,l,o,p,c),n=e.respond??p;if(0===e.copies.length||e.stopped)return g({...e,respond:n});p=n;const[r]=e.copies;if(e.copies.length>1||r.ingest!==o){const n={member:t,cacheMiss:y};return{kind:"fork",copies:e.copies.map(e=>({stack:t.rest,event:e.event,ingest:e.ingest,respond:void 0,resume:n}))}}l=r.event}}const w=u.config?.state?(0,F.compileState)(u.config.state):void 0,b=w?.filter(e=>"get"===e.mode),k=w?.filter(e=>"set"===e.mode),I=async e=>k&&0!==k.length?(0,F.applyState)(k,e=>ke(e,i),e,i,o):e;b&&b.length>0&&(l=await(0,F.applyState)(b,e=>ke(e,i),l,i,o));const S=await(0,F.tryCatchAsync)(Ee,e=>(i.status.failed++,i.logger.scope(`transformer:${u.type||"unknown"}`).error("Push failed",ye(e)),!1))(i,u,d,l,o,p);if(!1===S)return g({copies:[],respond:p,droppedBy:d});if(Array.isArray(S)&&1!==S.length){if(0===S.length)return g({copies:[],respond:p});const e=l,n=[];for(let r=0;r<S.length;r++){const s=S[r],i=await I(s.event||e);n.push({stack:je(t,s.next),...xe(e,i,o,r),respond:p})}return{kind:"fork",copies:n}}const E=Array.isArray(S)?S[0]:S;let q;return E&&"object"==typeof E&&(E.respond&&(p=E.respond),E.event&&(l=E.event),q=E.next),l=await I(l),y&&v&&(0,F.storeCache)(v,y.key,l,y.ttl),f(je(t,q))}async function Ae(e,t,n,o,r,s,i){const a=r??(0,F.createIngest)("string"==typeof n?n:"chain");return void 0===n?Ce([{event:o,ingest:a}],s):(i&&(a._meta.chainPath=i),De({collector:e,transformers:t,chainContext:i},{stack:(0,F.isChainContinuation)(n)?n:(0,F.startChain)(n),event:o,ingest:a,respond:s}))}function Pe(e){return e&&(0,F.isObject)(e)?e:{}}async function ze(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)Fe(n)&&!We(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,...ye(t)})})(n,s),Fe(n)&&Ve(e,t,n))}function $e(e){return Boolean(e.config.init)&&!e.config.require?.length}async function _e(e,t,n){const{code:o,config:r={},env:s={},primary:i,next:a,before:c,cache:d,terminus:u}=n,l=r.state??n.state,p=l?(0,K.compileState)(l):void 0,f=d,g=f?(0,K.compileCache)({...f,stop:f.stop??!0}):void 0,h=u??e.push,m=Boolean(u),v=async(n,o,s)=>{if(m)return h(n);let i;const d="string"==typeof n.id&&""!==n.id?n:{...n,id:(0,K.getSpanId)()};let u=[{event:d,ingest:s.ingest}];if(void 0!==c){const n=`source.${t}.before`,o=await Ae(e,e.transformers||{},c,d,s.ingest,s.respond,n);if(0===o.copies.length)return ne(e,d,s.ingest,o.droppedBy,n),pt({ok:!0,dropped:!0});if(o.stopped)return o.respond&&(s.respond=o.respond),{ok:!0};o.respond&&(s.respond=o.respond),u=o.copies}if(g){const t=be(g,e);if(t){const n=(0,K.createMappingRoot)(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"}},d=o.key,u=o.rule.ttl,l=n=>{(0,K.storeCache)(t,d,n,u),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)}}}p&&p.length>0&&(u=await Promise.all(u.map(async t=>({event:await(0,K.applyState)(p,t=>ke(t,e),t.event,e,t.ingest),ingest:t.ingest}))));let l={ok:!0};for(const e of u)l=await h(e.event,{...o,id:t,ingest:e.ingest,respond:s.respond,mapping:r,preChain:a});return i&&await i,l},y=async n=>{const o=(0,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}},w=e.logger.scope("source").scope(t),b={...s,push:async(e,n={})=>{const o={ingest:(0,K.createIngest)(t),respond:void 0};return v(e,n,o)},command:e.command,sources:e.sources,elb:e.elb,logger:w},k={collector:e,logger:w,id:t,config:r,env:b,withScope:async(e,t,n)=>{const o={ingest:await y(e),respond:t};return n({...b,push:(e,t={})=>v(e,t,o),ingest:o.ingest,respond:o.respond})},reportError:we(e,"source",t,w)},I=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,...ye(n)})})(k);if(!I)return;const S=I.type||"unknown",E=e.logger.scope(S).scope(t);return b.logger=E,i&&(I.config={...I.config,primary:i}),I}async function Re(e){for(const[t,n]of Object.entries(e.sources)){if($e(n))continue;const o=n.config.require;if(!o?.length)continue;const r=o.filter(t=>!Le(e,t));r.length!==o.length&&(n.config.require=r,$e(n)&&await ze(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=>!Le(e,t));if(n.config&&(n.config.require=r),r.length>0)continue;delete e.pending.destinations[t];const s=ft(n);!1!==s.config.queue&&(s.queuePush=[...e.queue]),e.destinations[t]=s}}function Be(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 He=!1;function Ge(){He||(He=!0,"undefined"!=typeof console&&"function"==typeof console.warn&&console.warn("walkerOS: ignored an on-dispatch call with a non-collector argument"))}function Ne(e,t,n,o){if(n instanceof H.FatalError)throw n;e.logger.scope("on").error("on callback failed",{kind:t,...o,...ye(n)})}var Ke=[Z.Consent,Z.User,Z.Globals,Z.Custom];function Fe(e){return Ke.includes(e)}function Ue(e,t){switch(t){case Z.Consent:return Object.keys(e.consent).length>0;case Z.User:return Object.keys(e.user).length>0;case Z.Globals:return Object.keys(e.globals).length>0;case Z.Custom:return Object.keys(e.custom).length>0;default:return!1}}function Le(e,t){switch(t){case Z.Consent:case Z.User:case Z.Globals:case Z.Custom:return Ue(e,t);case Z.Run:case Z.Ready:return!0===e.allowed;default:return e.seenEvents.has(String(t))}}function Qe(e,t){return e.cellVersion[String(t)]??0}function Ve(e,t,n){let o=e.delivery.get(t);o||(o={},e.delivery.set(t,o)),o[String(n)]=Qe(e,n)}function We(e,t,n){return e.allowed&&Qe(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 Je(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 Ye(e,t){return{collector:e,logger:e.logger.scope("on").scope(String(t))}}function Xe(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:gt(t.env,t.config.env),reportError:we(e,"destination",n,i,t)};(0,G.tryCatch)(t.on,t=>Ne(e,"destination",t,{destId:n,type:o}))(o,a)}function Ze(e,t,n,o){if(!Be(e))return void Ge();const r=et(e,t,o);if(n.length)switch(t){case Z.Consent:!function(e,t,n){const o=n||e.consent,r=Ye(e,Z.Consent);t.forEach(t=>{We(e,t,Z.Consent)&&Je(e,t,Z.Consent)&&(Object.keys(o).filter(e=>e in t).forEach(n=>{(0,G.tryCatch)(t[n],t=>Ne(e,"consent",t,{key:n}))(o,r)}),Ve(e,t,Z.Consent))})}(e,n,o);break;case Z.Ready:!function(e,t){if(!e.allowed)return;const n=Ye(e,Z.Ready);t.forEach(t=>{(0,G.tryCatch)(t,t=>Ne(e,"ready",t))(void 0,n)})}(e,n);break;case Z.Run:!function(e,t){if(!e.allowed)return;const n=Ye(e,Z.Run);t.forEach(t=>{(0,G.tryCatch)(t,t=>Ne(e,"run",t))(void 0,n)})}(e,n);break;case Z.Session:!function(e,t){if(!e.session)return;const n=Ye(e,Z.Session);t.forEach(t=>{(0,G.tryCatch)(t,t=>Ne(e,"session",t))(e.session,n)})}(e,n);break;default:{const o=Ye(e,t),s=Fe(t);n.forEach(n=>{"function"==typeof n&&(s&&!We(e,n,t)||s&&!Je(e,n,t)||((0,G.tryCatch)(n,n=>Ne(e,"generic",n,{type:t}))(r,o),s&&Ve(e,n,t)))});break}}}function et(e,t,n){switch(t){case Z.Consent:return n||e.consent;case Z.Session:return e.session;case Z.User:return n||e.user;case Z.Custom:return n||e.custom;case Z.Globals:return n||e.globals;case Z.Config:return n||e.config;default:return}}async function tt(e,t,n,o,r){if(!t.on)return!1;if(Fe(o)&&!We(e,t,o))return!1;if(Fe(o)&&!Je(e,t,o))return!1;const s=await(0,G.tryCatchAsync)(t.on,t=>Ne(e,"source",t,{sourceId:n,type:o}))(o,r);return Fe(o)&&Ve(e,t,o),!1===s}function nt(e){return"number"==typeof e&&e>0?e:1e4}var ot=class extends Error{constructor(e){super(e),this.name="DestinationTimeoutError"}};function rt(e,t,n){let o;const r=new Promise((e,r)=>{o=setTimeout(()=>r(new ot(n)),t)});return Promise.race([e,r]).finally(()=>{o&&clearTimeout(o)})}var st=Object.freeze({batched:!0});function it(e){return e===st}function at(e){return void 0===e?{}:"number"==typeof e?{wait:e}:{wait:e.wait,size:e.size,age:e.age}}async function ct(e,t,n={},o){if(!e.allowed)return pt({ok:!1});if(!t)return dt(e,void 0,n,o);const r=await async function(e,t,n={}){const o=n.ingest??(0,$.createIngest)(n.id||"unknown"),r=e.config.next;if(void 0===r)return{copies:[{event:t,ingest:o}],respond:n.respond};const s=await Ae(e,e.transformers||{},r,t,o,n.respond,It),i=s.respond??n.respond;return 0===s.copies.length?(e.logger.debug("Event dropped by collector.next"+(s.droppedBy?` (${s.droppedBy})`:"")),ne(e,t,o,s.droppedBy,It),{copies:[],respond:i,dropped:!0}):s.stopped?{copies:[],respond:i}:{copies:s.copies.map(t=>({event:bt(e,t.event,t.ingest),ingest:t.ingest})),respond:i}}(e,t,n);if(0===r.copies.length)return pt({ok:!0,...r.dropped?{dropped:!0}:{}});const s=[];for(const t of r.copies)s.push(await dt(e,t.event,{id:n.id,ingest:t.ingest,respond:r.respond},o));return s[0]}async function dt(e,t,n,o){const{consent:r,user:s}=e;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=de(e.queue,t,{max:n});if(o.dropped>0){const t=ve(e.status,(0,_.stepId)("collector"),"queue",o.dropped);le(e.queue,e.logger,"collector.queue overflow; oldest events dropped",{buffer:"queue",cap:n,droppedCount:t})}else e.queue.length<n&&pe(e.queue);e.status.in++}o||(o=e.destinations);const i=e.transformers||{},a=await Promise.all(Object.entries(o||{}).map(async([o,a])=>{if(a.config.disabled)return{id:o,destination:a,skipped:!0};const c=a.config.id||o,d=(0,_.stepId)("destination",c),u=ge(a.config.breaker);if(u&&function(e,t,n){const o=e[t];if(!o||"closed"===o.state)return!1;if("half-open"===o.state)return!0===o.probing;const r=fe();return void 0!==o.openUntil&&r<o.openUntil||(o.state="half-open",o.probing=!0,o.openUntil=r+n,!1)}(e.status.breakers,d,u.cooldown))return{id:o,destination:a,skipped:!0};const l=t=>{u&&he(e.status.breakers,d,t,u.threshold,u.cooldown)},p=()=>{u&&function(e,t){const n=e[t];n&&"half-open"===n.state&&!0===n.probing&&(n.state="open",n.probing=!1)}(e.status.breakers,d)};let f=(a.queuePush||[]).map(e=>({...e,consent:r}));a.queuePush=[],t&&f.push((0,_.clone)(t));const g=n.ingest?{...n.ingest,_meta:{...n.ingest._meta,path:[...n.ingest._meta.path]}}:(0,_.createIngest)("unknown");if(!f.length&&!a.queueOn?.length)return p(),{id:o,destination:a,skipped:!0};if(!f.length&&a.queueOn?.length){if(!(0,_.getGrantedConsent)(a.config.consent,r))return p(),{id:o,destination:a,skipped:!0};let t=!1;try{t=await ut(e,a,o,!0)}catch(t){e.status.failed++;const n=a.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:a,skipped:!t}}const h=[],m=f.filter(t=>{const n=(0,_.getGrantedConsent)(a.config.consent,r,t.consent);if(n)return t.consent=n,h.push(t),!1;const s=te(e,{stepId:(0,_.stepId)("destination",o),stepType:"destination",phase:"skip",eventId:"string"==typeof t.id?t.id:"",now:Date.now(),...ee(t,g,e)});return s.skipReason="consent",r&&(s.consent={...r}),a.config.consent&&(s.meta={required:{...a.config.consent}}),(0,_.emitStep)(e,s),!0});if(m.length>0){const t=a.queuePush,n=a.config.id||o,r={max:a.config.queueMax??1e3};let s=0;for(const e of m)s+=de(t,e,r).dropped;if(s>0){me(e,n);const o=ve(e.status,(0,_.stepId)("destination",n),"queue",s);le(t,e.logger.scope(a.type||"unknown"),"destination.queuePush overflow; oldest events dropped",{buffer:"queuePush",destination:n,cap:r.max,droppedCount:o})}else t.length<r.max&&pe(t)}if(!h.length)return p(),{id:o,destination:a,queue:f};let v,y,w=!1;try{w=await ut(e,a,o,!0)}catch(t){e.status.failed++;const n=a.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:a,queue:f};a.dlq||(a.dlq=[]);const b=a.config.before,k=a.config.next,I=a.config?.cache,S=I?(0,_.compileCache)(I):void 0,E=S?be(S,e):void 0,q=a.config?.state?(0,_.compileState)(a.config.state):void 0,O=q?.filter(e=>"get"===e.mode),x=q?.filter(e=>"set"===e.mode);let C=0,j=0,T=0;return await Promise.all(h.map(async t=>{let r,c;if(t.user=(0,_.assign)(s,t.user),S?.stop&&E){const e=(0,_.createMappingRoot)(g,t),n=await(0,_.checkCache)(S,E,e);if("HIT"===n?.status)return t;"MISS"===n?.status&&(r={key:n.key,ttl:n.rule.ttl})}let d=[{event:t,ingest:g}],u=n.respond;if(void 0!==b){const r=`destination.${o}.before`,s=await Ae(e,i,b,t,g,n.respond,r);if(0===s.copies.length){const n=te(e,{stepId:(0,_.stepId)("destination",o),stepType:"destination",phase:"skip",eventId:"string"==typeof t.id?t.id:"",now:Date.now(),...ee(t,g,e)});return n.skipReason="dropped",n.meta={by:s.droppedBy??"route",at:r},(0,_.emitStep)(e,n),t}s.respond&&(u=s.respond),d=s.copies.map(e=>({event:e.event,ingest:e.ingest}))}const l=async(t,n,r)=>{let s=r,d=!1;if(S&&!S.stop&&E){const e=(0,_.createMappingRoot)(n,t??void 0),o=await(0,_.checkCache)(S,E,e);if("HIT"===o?.status)return!1;"MISS"===o?.status&&(s={key:o.key,ttl:o.rule.ttl},d=!0)}O&&O.length>0&&t&&(t=await(0,_.applyState)(O,t=>ke(t,e),t,e,n));const l=Date.now();let p=!1;const f=await(0,_.tryCatchAsync)(lt,n=>{const r=a.type||"unknown";e.logger.scope(r).error("Push failed",{...ye(n),event:t.name}),v=n,p=!0;const s=a.dlq,i=a.config.id||o,c={max:a.config.dlqMax??100},d=de(s,[t,n],c);if(d.dropped>0){me(e,i);const t=ve(e.status,(0,_.stepId)("destination",i),"dlq",d.dropped);le(s,e.logger.scope(a.type||"unknown"),"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:i,cap:c.max,droppedCount:t})}else s.length<c.max&&pe(s)})(e,a,o,t,n,u);if(C+=Date.now()-l,s&&E&&void 0===a.config.mock&&(d?(0,_.storeCache)(E,s.key,f??!0,s.ttl):void 0===c&&(c=f??!0)),!p&&!it(f)&&x&&x.length>0&&t&&(t=await(0,_.applyState)(x,t=>ke(t,e),t,e,n)),void 0===f||it(f)||(y=f),it(f)&&j++,!p&&k){void 0!==f&&(n._response=f);const r=await Ae(e,i,k,t,n,u,`destination.${o}.next`);r.respond&&(u=r.respond)}return!0};for(const e of d)await l(e.event,e.ingest,r)&&T++;return r&&E&&void 0!==c&&void 0===a.config.mock&&(0,_.storeCache)(E,r.key,c,r.ttl),t})),{id:o,destination:a,error:v,response:y,totalDuration:C,batchedCount:j,allowedCount:h.length,pushedCount:T,canonicalId:c,breakerConfig:u}})),c={},d={},u={};for(const t of a){if(t.skipped)continue;const n=t.destination,o={type:n.type||"unknown",data:t.response};me(e,t.id);const r=e.status.destinations[t.id],s=Date.now();r.queuePushSize=n.queuePush?.length??0,r.dlqSize=n.dlq?.length??0;const i=t.breakerConfig,a=t.canonicalId?(0,_.stepId)("destination",t.canonicalId):void 0,l=t=>{i&&a&&he(e.status.breakers,a,t,i.threshold,i.cooldown)};if(t.error)o.error=t.error,u[t.id]=o,r.failed++,r.lastAt=s,r.duration+=t.totalDuration||0,e.status.failed++,l("transport-failure");else if(t.queue&&t.queue.length)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)&&(c[t.id]=o,r.count++,r.lastAt=s,r.duration+=t.totalDuration||0,e.status.out++,l("success"))}}return pt({event:t,...Object.keys(c).length&&{done:c},...Object.keys(d).length&&{queued:d},...Object.keys(u).length&&{failed:u}})}async function ut(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:gt(t.env,t.config.env),reportError:we(e,"destination",n,s,t)};s.debug("init");const a=Date.now();let c;(0,_.emitStep)(e,te(e,{stepId:(0,_.stepId)("destination",n),stepType:"destination",phase:"init",eventId:"",now:a}));try{c=await(0,_.useHooks)(t.init,"DestinationInit",e.hooks,e.logger)(i)}catch(t){const o=Date.now(),r=te(e,{stepId:(0,_.stepId)("destination",n),stepType:"destination",phase:"error",eventId:"",now:o});throw r.durationMs=o-a,r.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},(0,_.emitStep)(e,r),t}if(!1===c)return c;if(t.config={...c||t.config,init:!0},t.queueOn?.length){const o=t.queueOn;t.queueOn=[];for(const{type:r,data:s}of o)Xe(e,t,n,r,s)}s.debug("init done")}return!0}async function lt(e,t,n,o,r,s){const{config:i}=t,a=await(0,_.processEventMapping)(o,i,e);if(a.ignore)return!1;const c=t.type||"unknown",d=e.logger.scope(c),u={collector:e,logger:d,id:n,config:i,data:a.data,rule:a.mapping,ingest:r,env:{...gt(t.env,i.env),...s?{respond:s}:{}},reportError:we(e,"destination",n,d,t)};if(void 0!==i.mock)return d.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=at(l?.batch),s=at(i.batch),a=r.wait??s.wait??3e4,c=r.size??s.size??1e3,u=r.age??s.age??3e4,g=gt(t.env,i.env),h=(0,_.debounce)(async()=>{const o=t.batches[f],r=o.batched;if(0===r.entries.length)return;const s={key:r.key,entries:r.entries,events:r.events,data:r.data};r.entries=[],r.events=[],r.data=[];const a=s.entries[0],c={collector:e,logger:d,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:we(e,"destination",n,d,t)};d.debug("push batch",{events:s.entries.length});const u=t.config.id||n,l=me(e,u),p=ge(t.config.breaker),h=(0,_.stepId)("destination",u),m=t=>{p&&he(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+=de(o,e,r).dropped;if(s>0){const t=ve(e.status,(0,_.stepId)("destination",u),"dlq",s);le(o,d,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:u,cap:r.max,droppedCount:t})}else o.length<r.max&&pe(o);l.failed+=n.length,l.dlqSize=o.length,e.status.failed+=n.length};let I=s.entries.length;const S=nt(i.timeout),E=await(0,_.tryCatchAsync)((o,r)=>rt(Promise.resolve((0,_.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"),d.error("Push batch failed",{error:e instanceof Error?e.message:String(e),entries:s.entries.length})})(s,c);if((0,_.isObject)(q=E)&&Array.isArray(q.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),d.error("Push batch partial failure",{failed:e.length,delivered:I,entries:s.entries.length}))}var q;const O=Date.now();s.entries.forEach((t,o)=>{const r=b||y.has(o),i=ee(t.event,t.ingest,e),a=te(e,{stepId:(0,_.stepId)("destination",n),stepType:"destination",phase:r?"error":"flush",eventId:"string"==typeof t.event.id?t.event.id:"",now:O,traceId:i.traceId,sourceId:i.sourceId,parentEventId:i.parentEventId});if(a.batch={size:s.entries.length,index:o},a.durationMs=O-v,r){const e=b?w:y.get(o);a.error=e instanceof Error?{name:e.name,message:e.message}:{message:String(e)}}(0,_.emitStep)(e,a)}),d.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:u});t.batches[f]={batched:o,isDefault:!p,batchFn:()=>{h()},flush:async()=>{await h.flush()}}}const c=t.batches[f];c.batched.entries.push({event:a.event,ingest:r,respond:s,rule:l,data:a.data}),c.batched.events.push(a.event),(0,_.isDefined)(a.data)&&c.batched.data.push(a.data);const u="string"==typeof a.event.id?a.event.id:"",g=ee(o,r,e),h=Date.now(),m=te(e,{stepId:(0,_.stepId)("destination",n),stepType:"destination",phase:"in",eventId:u,now:h,traceId:g.traceId,sourceId:g.sourceId,parentEventId:g.parentEventId});a.mappingKey&&(m.mappingKey=a.mappingKey),a.event.consent&&(m.consent={...a.event.consent}),m.inEvent=a.event,(0,_.emitStep)(e,m);const v=te(e,{stepId:(0,_.stepId)("destination",n),stepType:"destination",phase:"out",eventId:u,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,_.emitStep)(e,v);const y=t.config.id||n,w=me(e,y);return w.inFlightBatch=(w.inFlightBatch??0)+1,c.batchFn(),st}{let s;if(d.debug("push",{event:a.event.name}),"trace"===e.observeLevel?.()&&Array.isArray(t.calls)&&t.calls.length>0){const e=se({...u.env,simulation:t.calls});u.env=e.wrappedEnv,s=e.calls,e.unresolved.length>0&&(e.wrappedEnv[_.OBSERVE_ENV_KEY]={paths:e.unresolved,record:(t,n)=>e.calls.push({fn:t,args:n,ts:Date.now()})})}const c="string"==typeof a.event.id?a.event.id:"",{traceId:l,sourceId:p,parentEventId:f}=ee(o,r,e),g=Date.now(),h=te(e,{stepId:(0,_.stepId)("destination",n),stepType:"destination",phase:"in",eventId:c,now:g,traceId:l,sourceId:p,parentEventId:f});a.mappingKey&&(h.mappingKey=a.mappingKey),a.event.consent&&(h.consent={...a.event.consent}),h.inEvent=a.event,(0,_.emitStep)(e,h);try{const o=nt(i.timeout),r=await rt(Promise.resolve((0,_.useHooks)(t.push,"DestinationPush",e.hooks,e.logger)(a.event,u)),o,`Destination "${n}" delivery timed out after ${o}ms`),h=Date.now(),m=te(e,{stepId:(0,_.stepId)("destination",n),stepType:"destination",phase:"out",eventId:c,now:h,traceId:l,sourceId:p,parentEventId:f});return m.durationMs=h-g,m.outEvent=a.event,s&&s.length>0&&(m.calls=ce(s)),(0,_.isDefined)(r)&&(m.meta={...m.meta,response:r}),a.mappingKey&&(m.mappingKey=a.mappingKey),(0,_.emitStep)(e,m),d.debug("push done"),r}catch(t){const o=Date.now(),r=te(e,{stepId:(0,_.stepId)("destination",n),stepType:"destination",phase:"error",eventId:c,now:o,traceId:l,sourceId:p,parentEventId:f});throw r.durationMs=o-g,r.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},s&&s.length>0&&(r.calls=ce(s)),a.mappingKey&&(r.mappingKey=a.mappingKey),(0,_.emitStep)(e,r),t}}}function pt(e){return{ok:!e?.failed,...e}}function ft(e){const{code:t,config:n={},env:o={},cache:r,state:s}=e,{config:i}=Ie(e,"before"),{config:a}=Ie({...e,config:i},"next"),c={...t.config,...n,...a};r&&(c.cache=r),void 0!==s&&void 0===c.state&&(c.state=s);const d=gt(t.env,o);return{...t,config:c,env:d}}function gt(e,t){return e||t?t?e&&(0,_.isObject)(e)&&(0,_.isObject)(t)?{...e,...t}:t:e:{}}async function ht(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 mt(e,t){e.stateVersion++,e.cellVersion[t]=e.stateVersion}async function vt(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 Z.Config:(0,L.isObject)(n)&&((0,U.assign)(e.config,n,{shallow:!1,merge:!1}),r=n,s=!0);break;case Z.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);mt(e,Z.Consent),r=t,s=!0}break;case Z.Custom:(0,L.isObject)(n)&&(e.custom=(0,U.assign)(e.custom,n),mt(e,Z.Custom),r=n,s=!0);break;case Z.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,_.isFunction)(n.push))return pt({ok:!1,failed:{invalid:{type:"invalid",error:"Destination code must have a push method"}}});const d=o||{init:!1};let u=s?{...d,before:s}:{...d};i&&(u={...u,next:i}),a&&(u={...u,cache:a}),void 0!==c&&void 0===u.state&&(u={...u,state:c});let l=u.id;if(!l)do{l=(0,_.getId)(5,"abcdefghijklmnopqrstuvwxyz")}while(e.destinations[l]||e.pending.destinations[l]);if(u.require?.length){e.pending.destinations[l]=t,await Re(e);const n=e.destinations[l];return n?ct(e,void 0,{},{[l]:n}):pt({ok:!0})}const p={...n,config:u,env:gt(n.env,r)};return e.destinations[l]=p,!1!==p.config.queue&&(p.queuePush=[...e.queue]),ct(e,void 0,{},{[l]:p})}(e,n));break;case Z.Globals:(0,L.isObject)(n)&&(e.globals=(0,U.assign)(e.globals,n),mt(e,Z.Globals),r=n,s=!0);break;case Z.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 Z.On:if((0,L.isObject)(n)&&(0,U.isString)(n.type)){const{type:t,rules:o}=n;await async function(e,t,n){if(!Be(e))return void Ge();const o=e.on,r=o[t]||[],s=(0,H.isArray)(n)?n:[n];s.forEach(e=>{r.push(e)}),o[t]=r,Ze(e,t,s)}(e,t,o)}break;case Z.Ready:s=!0;break;case Z.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),mt(e,Z.Consent)),t.user&&(e.user=(0,U.assign)(e.user,t.user),mt(e,Z.User)),t.globals&&(e.globals=(0,U.assign)(e.config.globalsStatic||{},t.globals),mt(e,Z.Globals)),t.custom&&(e.custom=(0,U.assign)(e.custom,t.custom),mt(e,Z.Custom))),Object.values(e.destinations).forEach(e=>{e.queuePush=[]}),e.queue=[],e.round++,await Re(e),await async function(e){if(Be(e))for(const t of Ke){if(!Ue(e,t))continue;const n=et(e,t);Ze(e,t,e.on[t]||[]);for(const[o,r]of Object.entries(e.sources))$e(r)&&await tt(e,r,o,t,n)}else Ge()}(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 ct(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 Z.Session:s=!0;break;case Z.Shutdown:e.hasShutdown||(e.hasShutdown=!0,await async function(e){const t=e.logger;await ht(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 ht(e.destinations,"destination",t),await ht(e.transformers,"transformer",t),await ht(e.stores,"store",t)}(e));break;case Z.User:(0,L.isObject)(n)&&((0,U.assign)(e.user,n,{shallow:!1}),mt(e,Z.User),r=n,s=!0);break;default:return e.logger.warn("unknown command",{command:t}),pt({ok:!1})}if(s){await async function(e,t,n,o){if(!Be(e))return Ge(),!0;e.seenEvents.add(String(t));let r=n||[];n||(r=e.on[t]||[]);const s=et(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&&($e(o)?await tt(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});Xe(e,o,n,t,s)}});for(const[t,n]of Object.entries(e.sources))$e(n)&&n.queueOn?.length&&await ze(e,n,t);const a=Object.values(e.sources).some(e=>!$e(e)&&e.config.require?.length);return(Object.keys(e.pending.destinations).length>0||a)&&await Re(e),Ze(e,t,r,o),!i}(e,t,void 0,r);const n=await ct(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||pt({ok:!0})}()}finally{i()}}function yt(e,t){return{timing:Math.round((Date.now()-e.timing)/10)/100,source:{type:"collector",schema:"4"},...t}}function wt(e,t,n){return kt(e,t,n,{globals:e.globals,user:e.user,consent:e.consent})}function bt(e,t,n){return kt(e,yt(e,t),n,{globals:{},user:{},consent:{}})}function kt(e,t,n,o){const r=t.name;if("string"!=typeof r)throw new U.InvalidEventError(void 0===r?"Event name is required":"Event name is invalid");if(!r)throw new U.InvalidEventError("Event name is required");const[s,i]=r.split(" ");if(!s||!i)throw new U.InvalidEventError("Event name is invalid");const{timestamp:a=Date.now(),name:c=`${s} ${i}`,data:d={},context:u={},globals:l={},custom:p={},user:f=o.user,nested:g=[],consent:h=o.consent,id:m=(0,U.getSpanId)(),trigger:v="",entity:y=s,action:w=i,timing:b=0,source:k={type:"collector",schema:"4"}}=t,I=k??{type:"collector",schema:"4"},S=I.count??(e.count+=1),E=I.trace??n?._meta.trace??e.trace,q={...I,count:S};void 0!==E&&(q.trace=E);const O=e.name??I.platform??"default",x=e.release??"4.7.0-next-1790187973605";return q.release={...I.release,[O]:x},{name:c,data:d,context:u,globals:(0,U.assign)(o.globals,l),custom:p,user:f,nested:g,consent:h,id:m,trigger:v,entity:y,action:w,timestamp:a,timing:b,source:q}}var It="collector.next";function St(e,t){const n=(0,W.useHooks)(async(n,o={})=>await(0,W.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=de(e.preRunQueue,{event:n,options:o},{max:t});if(r.dropped>0){const n=ve(e.status,"collector.preRun","queue",r.dropped);le(e.preRunQueue,e.logger,"collector.preRunQueue overflow; oldest events dropped",{buffer:"queue",cap:t,droppedCount:n})}else e.preRunQueue.length<t&&pe(e.preRunQueue);return e.logger.debug("event held until run",{name:n.name,dropped:r.dropped}),pt({ok:!0})}const r=Date.now(),{id:s,ingest:i,respond:a,mapping:c,preChain:d,include:u,exclude:l}=o;let p=a,f=n;const g=u||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,u,l):void 0;let h=i??(0,W.createIngest)(s||"unknown");if(c){const t=await(0,W.processEventMapping)(f,c,e);if(t.ignore)return pt({ok:!0});if(c.consent&&!(0,W.getGrantedConsent)(c.consent,e.consent,t.event.consent))return pt({ok:!0});f=t.event}if(void 0!==d){const n=s?`source.${s}.next`:void 0,o=await Ae(e,e.transformers||{},d,f,h,p,n);if(0===o.copies.length)return e.logger.debug("Event dropped by transformer chain"+(o.droppedBy?` (${o.droppedBy})`:"")),ne(e,f,h,o.droppedBy,n??"collector.push.preChain"),pt({ok:!0,dropped:!0});if(o.stopped)return o.respond&&(p=o.respond),pt({ok:!0});if(o.respond&&(p=o.respond),o.copies.length>1){const n=await Promise.all(o.copies.map(async n=>{const o=wt(e,t(n.event),n.ingest);return ct(e,o,{id:s,ingest:n.ingest,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+=o.copies.length,t.lastAt=Date.now(),t.duration+=Date.now()-r}return n[0]??pt({ok:!0})}f=o.copies[0].event,h=o.copies[0].ingest}const m=function(e,t,n){return wt(e,yt(e,t),n)}(e,f,h),v=await ct(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 W.FatalError)throw t;if(t instanceof W.InvalidEventError){const n=o.id;if(n){e.status.sources[n]||(e.status.sources[n]={count:0,duration:0});const t=e.status.sources[n];t.rejected=(t.rejected??0)+1}return e.logger.warn("invalid event rejected",{error:t.message}),pt({ok:!1,invalid:!0,error:t.message})}return e.status.failed++,e.logger.error("push failed",{...ye(t),event:n.name}),pt({ok:!1})})(),"Push",e.hooks,e.logger);return async(t,o)=>{const r="string"==typeof t.id&&""!==t.id?t:{...t,id:(0,W.getSpanId)()},s="string"==typeof r.id?r.id:"",{traceId:i,sourceId:a,parentEventId:c}=ee(r,o?.ingest,e),d=Date.now(),u=te(e,{stepId:"collector.push",stepType:"collector",phase:"in",eventId:s,now:d,traceId:i,sourceId:a,parentEventId:c});u.inEvent=r,(0,W.emitStep)(e,u);try{const t=await n(r,o),u=Date.now(),l=te(e,{stepId:"collector.push",stepType:"collector",phase:"out",eventId:s,now:u,traceId:i,sourceId:a,parentEventId:c});return l.durationMs=u-d,l.outEvent=t,(0,W.emitStep)(e,l),t}catch(t){const n=Date.now(),o=te(e,{stepId:"collector.push",stepType:"collector",phase:"error",eventId:s,now:n,traceId:i,sourceId:a,parentEventId:c});throw o.durationMs=n-d,o.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},(0,W.emitStep)(e,o),t}}}function Et(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 qt(e,t){const{cacheConfig:n,cacheStore:o,namespace:r,logger:s,storeId:i,collector:a}=t,c=(e,t)=>{if(!a)return;const n=te(a,{stepId:`store.${i}`,stepType:"store",phase:"in",eventId:"",now:Date.now()});n.meta={op:"cache",cached:"hit"===t,status:t,key:e},(0,X.emitStep)(a,n)},d={hits:0,misses:0,populates:0,writes:0,deletes:0,inflight_dedups:0},u=n.rules.map(e=>({match:e.match?(0,X.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 u.find(e=>e.match(n))}const f=new Map;return{type:e.type,config:e.config,setup:e.setup,get counters(){return{...d}},async get(t){const n=l(t),r=await o.get(n),s=(0,X.readCacheEnvelope)(r);if(void 0!==s){if(!("expired"in s))return d.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 d.inflight_dedups++,c(t,"hit"),i;d.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,X.wrapCacheEnvelope)(r,e),e),d.populates++}catch(e){g("set",t,e)}return r}finally{f.delete(n)}})();return f.set(n,a),a},async set(t,n,r){d.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,X.wrapCacheEnvelope)(n,e),e)}catch(e){g("set",t,e)}},async delete(t){d.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,ye(n)):console.warn(o,n)}}function Ot(e,t,n){const o=`store.${n}`,r=(0,Y.useHooks)(t.get,"StoreGet",e.hooks,e.logger),s=(0,Y.useHooks)(t.set,"StoreSet",e.hooks,e.logger),i=(0,Y.useHooks)(t.delete,"StoreDelete",e.hooks,e.logger);t.get=async t=>{const n=Date.now(),s=te(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:n});s.meta={op:"get",key:t},(0,Y.emitStep)(e,s);try{const s=await r(t),i=Date.now(),a=te(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:i});return a.durationMs=i-n,a.meta={op:"get",key:t},(0,Y.emitStep)(e,a),s}catch(r){const s=Date.now(),i=te(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,Y.emitStep)(e,i),r}},t.set=async(t,n,r)=>{const i=Date.now(),a=te(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:i});a.meta={op:"set",key:t},(0,Y.emitStep)(e,a);try{await s(t,n,r);const a=Date.now(),c=te(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:a});c.durationMs=a-i,c.meta={op:"set",key:t},(0,Y.emitStep)(e,c)}catch(n){const r=Date.now(),s=te(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,Y.emitStep)(e,s),n}},t.delete=async t=>{const n=Date.now(),r=te(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:n});r.meta={op:"delete",key:t},(0,Y.emitStep)(e,r);try{await i(t);const r=Date.now(),s=te(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:r});s.durationMs=r-n,s.meta={op:"delete",key:t},(0,Y.emitStep)(e,s)}catch(r){const s=Date.now(),i=te(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,Y.emitStep)(e,i),r}}}async function xt(e){const t=(0,V.assign)({globalsStatic:{},sessionStatic:{},run:!0,queueMax:1e3},e,{merge:!1,extend:!1}),n={level:e.logger?.level,handler:e.logger?.handler},o=(0,V.createLogger)(n),r={...t.globalsStatic,...e.globals},s={allowed:!1,config:t,consent:e.consent||{},custom:e.custom||{},destinations:{},transformers:{},stores:{},globals:r,hooks:e.hooks||{},observers:new Set,logger:o,on:{},queue:[],preRunQueue:[],round:0,count:0,stateVersion:0,cellVersion:{},delivery:new WeakMap,session:void 0,status:{startedAt:Date.now(),in:0,out:0,failed:0,sources:{},destinations:{},dropped:{},connectionErrors:{},breakers:{}},timing:Date.now(),user:e.user||{},sources:{},pending:{destinations:{}},hasShutdown:!1,seenEvents:new Set,push:void 0,command:void 0,elb:void 0};var i,a;void 0!==e.name&&(s.name=e.name),void 0!==e.release&&(s.release=e.release),void 0!==e.next&&(t.next=e.next),s.push=St(s,e=>yt(s,e)),s.command=(i=s,a=vt,(0,J.useHooks)(async(e,t,n)=>await(0,J.tryCatchAsync)(async()=>await a(i,e,t,n),t=>{if(t instanceof J.FatalError)throw t;return i.status.failed++,i.logger.error("command failed",{...ye(t),command:e}),pt({ok:!1})})(),"Command",i.hooks,i.logger)),s.elb=function(e){return async(t,n,o,r,s)=>{if("string"==typeof t&&t.startsWith("walker ")){const o=t.replace("walker ","");return e.command(o,n)}let i;if("string"==typeof t)i={name:t},n&&"object"==typeof n&&!Array.isArray(n)&&(i.data=n);else{if(!t||"object"!=typeof t||Array.isArray(t))return pt({ok:!1});i={...t},n&&"object"==typeof n&&!Array.isArray(n)&&(i.data={...i.data||{},...n})}return o&&"object"==typeof o&&(i.context=o),r&&Array.isArray(r)&&(i.nested=r),s&&"object"==typeof s&&(i.custom=s),e.push(i)}}(s);const c=e.stores||{};return 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:we(e,"store",o,a)},d=await t(c);n[o]=d}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=Et()),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]=qt(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&&Ot(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=Et()),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]=ft(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}=Ie(r,"before"),{config:c}=Ie({...r,config:a},"next"),d=Object.keys(s).length>0?{...c,env:s}:c,{cache:u}=r,l=u?{...d,cache:u}:d,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:we(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 Ct=globalThis;function jt(e){try{const t=Ct.window;if(!t)return;t.localStorage.getItem(Q.OBSERVE_STORAGE_KEY)===e&&t.localStorage.removeItem(Q.OBSERVE_STORAGE_KEY)}catch{}}function Tt(e,t){return void 0===t?e:n=>e({...n,release:t})}async function Dt(e){e=e||{};const t=await xt(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=Ct.window,t=Ct.URLSearchParams;if(!e||!t)return null;try{const n=new t(e.location.search.replace(/^\?/,"")).getAll(Q.OBSERVE_STORAGE_KEY);return n.length>0?n[n.length-1]??null:null}catch{return null}}(),r=t??function(){try{return Ct.window?.localStorage.getItem(Q.OBSERVE_STORAGE_KEY)??null}catch{return null}}();if(!r)return;const s=(0,Q.parseObserveCredential)(r);if(!s)return void(null===t?(e.logger.warn("observe: malformed stored credential cleared"),jt(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{Ct.window?.localStorage.setItem(Q.OBSERVE_STORAGE_KEY,e)}catch{}}(r),null!==t&&function(){const e=Ct.window,t=Ct.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(Q.OBSERVE_STORAGE_KEY);const d=c.toString();e.history.replaceState({},"",`${a}${d?`?${d}`:""}${r}`)}catch{}}();const a=(0,Q.createBatchedPoster)({url:`${n.url}/ingest/${s.ses}`,token:s.secret,headers:{"X-Walkeros-Binding":n.binding},onStatus:t=>{401===t&&(jt(r),i&&e.observers.delete(i))}});i=(0,Q.createTelemetryObserver)(function(e,t){return void 0===t?e:n=>e({...n,flowId:t})}(Tt(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,Q.createTelemetryObserver)(Tt((0,Q.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 _e(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,...ye(n)})})(),o||(n.config.init=!0,$e(n)&&await ze(e,n,t))}return await Re(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 Mt=async e=>{let t;return{get flow(){return t},trigger:()=>async n=>{if(!t){const n=await Dt(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 At(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 Pt={};s(Pt,{createTrigger:()=>Qt,env:()=>zt,step:()=>Gt});var zt={};s(zt,{push:()=>Bt,simulation:()=>Ht});var $t=()=>{},_t={error:$t,warn:$t,info:$t,debug:$t,throw:e=>{throw"string"==typeof e?new Error(e):e},json:$t,scope:()=>_t},Rt=()=>()=>Promise.resolve({ok:!0}),Bt={get push(){return Rt()},get command(){return Rt()},get elb(){return Rt()},logger:_t},Ht=["AWS.SQSClient"],Gt={};s(Gt,{decoderText:()=>Ft,malformedJson:()=>Ut,orderComplete:()=>Kt,pageView:()=>Nt});var Nt={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"]]},Kt={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"]]},Ft={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"]]},Ut={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 Lt(e){if("object"!=typeof e||null===e)return!1;const t=e;return"sqs"===t.type&&"function"==typeof t.push}var Qt=async e=>{let t;return{get flow(){return t},trigger:()=>async n=>{if(!t){const n=await Dt(e);t={collector:n.collector,elb:n.elb}}const o=function(e){for(const t of Object.values(e.sources??{}))if(Lt(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.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/dev.ts","../src/schemas.ts","../src/lambda/schemas/index.ts","../src/lambda/schemas/settings.ts","../src/lambda/schemas/primitives.ts","../src/sqs/schemas/index.ts","../src/sqs/schemas/settings.ts","../src/sqs/schemas/setup.ts","../src/lambda/examples/index.ts","../src/lambda/examples/env.ts","../src/lambda/examples/step.ts","../src/lambda/examples/trigger.ts","../src/sqs/examples/index.ts","../src/sqs/examples/env.ts","../src/sqs/examples/step.ts","../src/sqs/examples/trigger.ts"],"sourcesContent":["export * as schemas from './schemas';\nexport * as examples from './lambda/examples';\nexport * as sqsExamples from './sqs/examples';\n","// Lambda (default sub-source).\nexport { settings, SettingsSchema, type Settings } from './lambda/schemas';\nexport * from './lambda/schemas/primitives';\n\n// SQS sub-source. Prefixed so the website's <Configuration> snippet can\n// remap data.schemas.sqsSettings / sqsSetup onto data.schemas.settings.\nexport { settings as sqsSettings } from './sqs/schemas';\nexport { setup as sqsSetup } from './sqs/schemas';\n","import { zodToSchema } from '@walkeros/core/dev';\nimport { SettingsSchema } from './settings';\n\n// Export primitives\nexport * from './primitives';\n\n// Export Zod schemas and types\nexport { SettingsSchema, type Settings } from './settings';\n\n// JSON Schema exports (for website PropertyTable and documentation tools)\nexport const settings = zodToSchema(SettingsSchema);\n","import { z } from '@walkeros/core/dev';\nimport { CorsOptionsSchema } from './primitives';\n\n/**\n * AWS Lambda source settings schema\n */\nexport const SettingsSchema = z.object({\n cors: z\n .union([z.boolean(), CorsOptionsSchema])\n .describe(\n 'CORS configuration: false = disabled, true = allow all origins, object = custom configuration',\n )\n .default(true),\n\n timeout: z\n .number()\n .int()\n .positive()\n .max(900000) // AWS Lambda max timeout: 15 minutes\n .describe('Request timeout in milliseconds (max: 900000 for Lambda)')\n .default(30000),\n\n enablePixelTracking: z\n .boolean()\n .describe(\n 'Enable GET requests with 1x1 transparent GIF response for pixel tracking',\n )\n .default(true),\n\n maxBatchSize: z\n .number()\n .int()\n .min(1)\n .describe('Maximum number of events accepted in a single batch request')\n .default(100),\n\n healthPath: z\n .string()\n .describe('Health check endpoint path (e.g., /health)')\n .default('/health'),\n});\n\nexport type Settings = z.infer<typeof SettingsSchema>;\n","import { z } from '@walkeros/core/dev';\n\n/**\n * HTTP methods enum\n */\nexport const HttpMethod = z.enum([\n 'GET',\n 'POST',\n 'PUT',\n 'PATCH',\n 'DELETE',\n 'OPTIONS',\n 'HEAD',\n]);\n\n/**\n * CORS origin configuration\n * Accepts:\n * - '*' for all origins\n * - Single URL string\n * - Array of URL strings\n */\nexport const CorsOrigin = z.union([\n z.string(),\n z.array(z.string()),\n z.literal('*'),\n]);\n\n/**\n * CORS options schema\n * Configuration for Cross-Origin Resource Sharing\n */\nexport const CorsOptionsSchema = z.object({\n origin: CorsOrigin.describe(\n 'Allowed origins (* for all, URL string, or array of URLs)',\n ).optional(),\n\n methods: z.array(HttpMethod).describe('Allowed HTTP methods').optional(),\n\n headers: z.array(z.string()).describe('Allowed request headers').optional(),\n\n credentials: z\n .boolean()\n .describe('Allow credentials (cookies, authorization headers)')\n .optional(),\n\n maxAge: z\n .number()\n .int()\n .positive()\n .describe('Preflight cache duration in seconds')\n .optional(),\n});\n\nexport type CorsOptions = z.infer<typeof CorsOptionsSchema>;\n","import { zodToSchema } from '@walkeros/core/dev';\nimport { SettingsSchema } from './settings';\nimport { SetupSchema } from './setup';\n\nexport { SettingsSchema, type Settings } from './settings';\nexport { SetupSchema, type Setup } from './setup';\n\n// JSON Schema exports (for website PropertyTable + MCP package_get).\nexport const settings = zodToSchema(SettingsSchema);\nexport const setup = zodToSchema(SetupSchema);\n","import { z } from '@walkeros/core/dev';\n\n/**\n * AWS SQS source settings schema.\n *\n * Required: queueName. All other fields optional with sensible defaults\n * applied at runtime by `getConfig`.\n */\nexport const SettingsSchema = z.object({\n queueName: z\n .string()\n .min(1)\n .describe(\n 'SQS queue short name (like walkeros-events). Required for both setup and runtime poll.',\n ),\n region: z\n .string()\n .describe('AWS region (like eu-central-1). Default: eu-central-1.')\n .optional(),\n queueUrl: z\n .string()\n .url()\n .describe(\n 'Optional pre-resolved queue URL. When set, init skips the GetQueueUrl lookup.',\n )\n .optional(),\n client: z\n .any()\n .describe(\n 'Pre-configured AWS SQSClient instance. Bypasses construction when supplied.',\n )\n .optional(),\n config: z\n .any()\n .describe(\n 'AWS SDK SQSClientConfig (credentials, endpoint overrides, retries).',\n )\n .optional(),\n decoder: z\n .enum(['json', 'text', 'raw'])\n .describe(\n 'Decoder for the message body. json (default) parses JSON, text forwards UTF-8, raw forwards a Buffer.',\n )\n .optional(),\n maxMessages: z\n .number()\n .int()\n .min(1)\n .max(10)\n .describe('SQS receive batch size. Cap 10. Default: 10.')\n .optional(),\n waitTimeSeconds: z\n .number()\n .int()\n .min(0)\n .max(20)\n .describe('Long-poll duration in seconds. Cap 20. Default: 20.')\n .optional(),\n visibilityTimeout: z\n .number()\n .int()\n .nonnegative()\n .describe(\n 'Per-receive visibility timeout override. Default: queue-configured value.',\n )\n .optional(),\n shutdownTimeoutMs: z\n .number()\n .int()\n .positive()\n .describe(\n 'Graceful shutdown timeout in milliseconds. Default: 30000. After this window, destroy() force-closes.',\n )\n .optional(),\n onPushError: z\n .enum(['nack', 'ack'])\n .describe(\n 'Behavior when forwarding to the collector throws. nack (default) skips DeleteMessage so the message redelivers; ack drops it.',\n )\n .optional(),\n});\n\nexport type Settings = z.infer<typeof SettingsSchema>;\n","import { z } from '@walkeros/core/dev';\n\n/**\n * AWS SQS source setup schema.\n *\n * Provisioning options for `walkeros setup source.<id>`. Authoritative-apply:\n * declared state is written via a single CreateQueueCommand; non-declared\n * tags or attributes are left untouched.\n */\nconst TagsSchema = z.record(z.string(), z.string());\n\nexport const SetupSchema = z.object({\n region: z.string().min(1).describe('AWS region.').optional(),\n fifoQueue: z\n .boolean()\n .describe(\n 'FIFO queue with content-based deduplication. Auto-appends .fifo suffix to the queue name.',\n )\n .optional(),\n visibilityTimeoutSeconds: z\n .number()\n .int()\n .nonnegative()\n .describe('Visibility timeout in seconds. Default: 30.')\n .optional(),\n messageRetentionSeconds: z\n .number()\n .int()\n .positive()\n .describe('Message retention period in seconds. Default: 345600 (4 days).')\n .optional(),\n maximumMessageSize: z\n .number()\n .int()\n .min(1024)\n .max(262144)\n .describe('Max message size in bytes. Default: 262144 (256 KB).')\n .optional(),\n kmsMasterKeyId: z\n .string()\n .describe('KMS key alias or ID for at-rest encryption.')\n .optional(),\n deadLetterQueue: z\n .object({\n arn: z\n .string()\n .describe(\n 'ARN of an existing DLQ. Mutually exclusive with create: true.',\n )\n .optional(),\n create: z\n .boolean()\n .describe('Create a sibling DLQ named <queueName>-dlq. Default: false.')\n .optional(),\n maxReceiveCount: z\n .number()\n .int()\n .min(1)\n .max(1000)\n .describe('Max receive count before message goes to DLQ. Default: 5.')\n .optional(),\n })\n .describe('Optional dead-letter queue.')\n .optional(),\n tags: TagsSchema.describe(\n 'Tags applied to the queue (and inherited by an auto-created DLQ).',\n ).optional(),\n subscribeToSnsTopic: z\n .object({\n topicArn: z.string().min(1).describe('Topic ARN to subscribe to.'),\n rawMessageDelivery: z\n .boolean()\n .describe('Deliver SNS messages without the SNS envelope.')\n .optional(),\n filterPolicy: z\n .record(z.string(), z.unknown())\n .describe('SNS filter policy applied at subscription level.')\n .optional(),\n })\n .describe(\n 'Optional SNS topic subscription. Creates the subscription and the matching queue policy.',\n )\n .optional(),\n});\n\nexport type Setup = z.infer<typeof SetupSchema>;\n","export * as env from './env';\nexport * as step from './step';\nexport { createTrigger, trigger } from './trigger';\n","import type { Env } from '../types';\nimport type { Elb, Logger } from '@walkeros/core';\n\n/**\n * Example environment configurations for AWS Lambda source\n *\n * These environments provide standardized mock structures for testing\n * Lambda event handling without requiring actual Lambda deployment.\n */\n\n// Create a properly typed elb/push/command function that returns a promise with PushResult\nconst createMockElbFn = (): Elb.Fn => {\n const fn = (() =>\n Promise.resolve({\n ok: true,\n })) as Elb.Fn;\n return fn;\n};\n\n// Simple no-op logger for demo purposes\nconst noopFn = () => {};\nconst noopLogger: Logger.Instance = {\n error: noopFn,\n warn: noopFn,\n info: noopFn,\n debug: noopFn,\n throw: (message: string | Error) => {\n throw typeof message === 'string' ? new Error(message) : message;\n },\n json: noopFn,\n scope: () => noopLogger,\n};\n\n/**\n * Standard mock environment for testing Lambda source\n *\n * Use this for testing Lambda event ingestion and request/response handling\n * without requiring a real AWS Lambda environment.\n */\nexport const push: Env = {\n get push() {\n return createMockElbFn();\n },\n get command() {\n return createMockElbFn();\n },\n get elb() {\n return createMockElbFn();\n },\n logger: noopLogger,\n};\n","import type { Flow } from '@walkeros/core';\n\nexport const lambdaPost: Flow.StepExample = {\n title: 'Lambda POST',\n description:\n 'An API Gateway v2 HTTP POST with a JSON body is converted into a walker elb event.',\n trigger: { type: 'POST' },\n in: {\n version: '2.0',\n requestContext: {\n http: { method: 'POST', path: '/collect' },\n requestId: 'req-123',\n },\n body: JSON.stringify({\n name: 'page view',\n data: { title: 'Home' },\n }),\n isBase64Encoded: false,\n },\n out: [\n [\n 'elb',\n {\n name: 'page view',\n data: { title: 'Home' },\n },\n ],\n ],\n};\n\nexport const apiGatewayV1Post: Flow.StepExample = {\n title: 'API Gateway v1 POST',\n description:\n 'A REST API Gateway v1 POST request with a JSON body is converted into a walker elb event.',\n trigger: { type: 'POST' },\n in: {\n httpMethod: 'POST',\n path: '/collect',\n requestContext: {\n requestId: 'req-789',\n identity: { sourceIp: '203.0.113.42' },\n },\n queryStringParameters: null,\n body: JSON.stringify({\n name: 'page view',\n data: { title: 'Home' },\n }),\n isBase64Encoded: false,\n },\n out: [\n [\n 'elb',\n {\n name: 'page view',\n data: { title: 'Home' },\n },\n ],\n ],\n};\n\nexport const lambdaGet: Flow.StepExample = {\n title: 'Lambda GET',\n description:\n 'An API Gateway v2 HTTP GET with query parameters is parsed into an elb event payload.',\n trigger: { type: 'GET' },\n in: {\n version: '2.0',\n requestContext: {\n http: { method: 'GET', path: '/collect' },\n requestId: 'req-456',\n },\n rawQueryString: 'e=page+view&d=%7B%22title%22%3A%22Home%22%7D',\n isBase64Encoded: false,\n },\n out: [\n [\n 'elb',\n {\n e: 'page view',\n d: '{\"title\":\"Home\"}',\n },\n ],\n ],\n};\n\nexport const lambdaPostForwardsSource: Flow.StepExample = {\n title: 'Lambda POST with provenance',\n description:\n 'A POST body carrying a source map is forwarded in full, so release and trace provenance survive the crossing.',\n trigger: { type: 'POST' },\n in: {\n version: '2.0',\n requestContext: {\n http: { method: 'POST', path: '/collect' },\n requestId: 'req-321',\n },\n body: JSON.stringify({\n name: 'page view',\n data: { title: 'Home' },\n source: { release: { web: 'r1' } },\n }),\n isBase64Encoded: false,\n },\n out: [\n [\n 'elb',\n {\n name: 'page view',\n data: { title: 'Home' },\n source: { release: { web: 'r1' } },\n },\n ],\n ],\n};\n","import type { Trigger, Collector } from '@walkeros/core';\nimport type { LambdaEvent, LambdaContext, LambdaResult } from '../types';\nimport { startFlow } from '@walkeros/collector';\n\nexport interface Content {\n [key: string]: unknown;\n}\n\nexport interface Result {\n statusCode: number;\n body: unknown;\n headers: Record<string, string>;\n}\n\n/**\n * Find the lambda source instance from the collector's registered sources.\n */\nfunction findLambdaSource(collector: Collector.Instance) {\n for (const source of Object.values(collector.sources || {})) {\n if ((source as { type?: string }).type === 'lambda') return source;\n }\n}\n\n/**\n * Lambda source createTrigger.\n *\n * Boots the collector via startFlow, then invokes the Lambda source's push()\n * with a real API Gateway event and a minimal Lambda context.\n *\n * Content is the raw Lambda event object (API Gateway v1 or v2 format).\n * Result contains statusCode, parsed body, and headers.\n *\n * @example\n * const { trigger, flow } = await createTrigger(config);\n * const result = await trigger('POST')({ version: '2.0', ... });\n * console.log(result.statusCode, result.body);\n */\nconst createTrigger: Trigger.CreateFn<Content, Result> = async (\n config: Collector.InitConfig,\n) => {\n let flow: Trigger.FlowHandle | undefined;\n\n const trigger: Trigger.Fn<Content, Result> =\n () =>\n async (content: Content): Promise<Result> => {\n // Lazy startFlow\n if (!flow) {\n const result = await startFlow(config);\n flow = { collector: result.collector, elb: result.elb };\n }\n\n const source = findLambdaSource(flow.collector);\n if (!source) throw new Error('Lambda source not found in collector');\n\n // Create minimal Lambda context\n const lambdaContext = {\n awsRequestId: `test-${Date.now()}`,\n } as unknown as LambdaContext;\n\n // Call source.push with the raw Lambda event + context\n const pushFn = (\n source as unknown as {\n push: (...args: unknown[]) => Promise<LambdaResult>;\n }\n ).push;\n const lambdaResult = await pushFn(\n content as unknown as LambdaEvent,\n lambdaContext,\n );\n\n // Parse response\n let body: unknown;\n try {\n body = JSON.parse(lambdaResult.body || '{}');\n } catch {\n body = lambdaResult.body;\n }\n\n const headers: Record<string, string> = {};\n if (lambdaResult.headers) {\n for (const [k, v] of Object.entries(lambdaResult.headers)) {\n if (v !== undefined) headers[k] = String(v);\n }\n }\n\n return {\n statusCode: lambdaResult.statusCode,\n body,\n headers,\n };\n };\n\n return {\n get flow() {\n return flow;\n },\n trigger,\n };\n};\n\n/**\n * Legacy trigger — takes a source instance directly.\n * Preserved for CLI simulate path.\n */\nfunction trigger(source: {\n push: (event: LambdaEvent, context: LambdaContext) => Promise<LambdaResult>;\n}): (content: Content) => Promise<LambdaResult> {\n return async (content: Content) => {\n const lambdaEvent = { ...(content as Record<string, unknown>) };\n\n // Adapt body format: step examples may use `name`, source expects `event`\n if (lambdaEvent.body && typeof lambdaEvent.body === 'string') {\n const body = JSON.parse(lambdaEvent.body);\n if (body.name && !body.event) {\n lambdaEvent.body = JSON.stringify({\n ...body,\n event: body.name,\n name: undefined,\n });\n }\n }\n\n const context: LambdaContext = {\n awsRequestId: 'test-req',\n } as unknown as LambdaContext;\n\n return source.push(lambdaEvent as unknown as LambdaEvent, context);\n };\n}\n\nexport { createTrigger, trigger };\n","export * as env from './env';\nexport * as step from './step';\nexport { createTrigger } from './trigger';\nexport type { Content, Result } from './trigger';\n","import type { Env } from '../types';\nimport type { Elb, Logger } from '@walkeros/core';\n\n/**\n * Example environment for the AWS SQS source.\n *\n * Tests substitute the real SDK via `jest.mock('@aws-sdk/client-sqs')` and\n * `jest.mock('@aws-sdk/client-sns')`, which is the canonical pattern: imports\n * of those modules get replaced module-wide, no env-injection plumbing\n * required at the call site.\n *\n * The `simulation` list documents which SDK identifiers the source touches\n * during a simulated run, used by the simulator to know what to stub.\n */\n\nconst noopFn = (): void => undefined;\nconst noopLogger: Logger.Instance = {\n error: noopFn,\n warn: noopFn,\n info: noopFn,\n debug: noopFn,\n throw: (message: string | Error) => {\n throw typeof message === 'string' ? new Error(message) : message;\n },\n json: noopFn,\n scope: () => noopLogger,\n};\n\nconst createMockElbFn = (): Elb.Fn => {\n const fn: Elb.Fn = () => Promise.resolve({ ok: true });\n return fn;\n};\n\n/**\n * Standard mock environment for the SQS source.\n *\n * AWS SDK constructors are intentionally absent: the canonical pattern is\n * module-level `jest.mock('@aws-sdk/client-sqs')` and -sns, not env-injection.\n */\nexport const push: Env = {\n get push() {\n return createMockElbFn();\n },\n get command() {\n return createMockElbFn();\n },\n get elb() {\n return createMockElbFn();\n },\n logger: noopLogger,\n};\n\nexport const simulation = ['AWS.SQSClient'];\n","import type { Flow } from '@walkeros/core';\n\n/**\n * SQS source step examples.\n *\n * Each `in` is a partial SQS Message-like (MessageId, Body, optional\n * ReceiptHandle). The trigger synthesizes the missing fields and dispatches\n * through the source's `push()` (the same pipeline the long-poll loop uses).\n * `out` records the terminal state recorded by the trigger as\n * `[method, ...args]` entries.\n */\n\nconst eventPayload = {\n event: 'page view',\n data: { title: 'Documentation', url: 'https://example.com/docs' },\n};\n\nconst orderPayload = {\n event: 'order complete',\n data: { id: 'ORD-500', total: 199.99, currency: 'EUR' },\n};\n\nexport const pageView: Flow.StepExample = {\n title: 'Page view from SQS',\n description:\n 'A standard SQS message body containing a walker elb event payload as JSON.',\n in: {\n MessageId: 'm-1',\n Body: JSON.stringify(eventPayload),\n },\n out: [['message.ack', 'm-1']],\n};\n\nexport const orderComplete: Flow.StepExample = {\n title: 'Order complete from SQS',\n description: 'Order complete event flowing through the long-poll loop.',\n in: {\n MessageId: 'm-2',\n Body: JSON.stringify(orderPayload),\n },\n out: [['message.ack', 'm-2']],\n};\n\nexport const decoderText: Flow.StepExample = {\n title: 'Text decoder',\n description:\n 'When decoder is \"text\", the body string flows under data.payload.',\n in: { MessageId: 'm-3', Body: 'raw text payload' },\n out: [['message.ack', 'm-3']],\n};\n\nexport const malformedJson: Flow.StepExample = {\n title: 'Malformed JSON nacks',\n description:\n 'Default decoder is JSON. A malformed body throws DecoderError; the source nacks (skips DeleteMessage) so the message redelivers.',\n in: { MessageId: 'm-4', Body: '{not json' },\n out: [['message.nack', 'm-4']],\n};\n","import type { Collector, Trigger } from '@walkeros/core';\nimport { startFlow } from '@walkeros/collector';\nimport type { SyntheticMessage, SyntheticPushResult } from '../types';\n\n/**\n * Content shape for the SQS source trigger.\n *\n * The trigger synthesizes a SyntheticMessage from this partial input and\n * dispatches it through the source's `push()` (the same pipeline the\n * long-poll loop uses).\n */\nexport interface Content {\n MessageId: string;\n Body: string;\n ReceiptHandle?: string;\n Attributes?: Record<string, string>;\n MessageAttributes?: Record<\n string,\n { DataType: string; StringValue?: string }\n >;\n}\n\n/**\n * Trigger result: the recorded ack/nack as `[method, MessageId]` entries.\n * Mirrors the destination's `[method, ...args]` recording shape.\n */\nexport type Result = Array<[string, ...unknown[]]>;\n\ninterface SqsSourceLike {\n type: string;\n push: (content?: SyntheticMessage) => Promise<SyntheticPushResult | void>;\n}\n\nfunction isSqsSource(value: unknown): value is SqsSourceLike {\n if (typeof value !== 'object' || value === null) return false;\n const candidate: { type?: unknown; push?: unknown } = value;\n return candidate.type === 'sqs' && typeof candidate.push === 'function';\n}\n\nfunction findSource(collector: Collector.Instance): SqsSourceLike | undefined {\n for (const source of Object.values(collector.sources ?? {})) {\n if (isSqsSource(source)) return source;\n }\n return undefined;\n}\n\n/**\n * SQS source createTrigger.\n *\n * Boots the collector via startFlow, finds the registered SQS source, and\n * invokes its `push()` with a synthesized message. The source dispatches the\n * synthetic message through the same handler the long-poll loop uses,\n * exercising the full decode / forward / ack-nack pipeline without touching\n * real SQS infrastructure.\n */\nexport const createTrigger: Trigger.CreateFn<Content, Result> = async (\n config: Collector.InitConfig,\n) => {\n let flow: Trigger.FlowHandle | undefined;\n\n const trigger: Trigger.Fn<Content, Result> =\n () =>\n async (content: Content): Promise<Result> => {\n if (!flow) {\n const result = await startFlow(config);\n flow = { collector: result.collector, elb: result.elb };\n }\n\n const source = findSource(flow.collector);\n if (!source) {\n throw new Error(\n 'sqs source not registered in collector, ensure it is configured in sources',\n );\n }\n\n const synthetic: SyntheticMessage = {\n MessageId: content.MessageId,\n Body: content.Body,\n ReceiptHandle: content.ReceiptHandle,\n Attributes: content.Attributes,\n MessageAttributes: content.MessageAttributes,\n };\n\n const result = await source.push(synthetic);\n const recorded: Result = [];\n if (result && typeof result === 'object') {\n if (result.acked) recorded.push(['message.ack', content.MessageId]);\n if (result.nacked) recorded.push(['message.nack', content.MessageId]);\n }\n return recorded;\n };\n\n return {\n get flow() {\n return flow;\n },\n trigger,\n };\n};\n"],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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","names":["examples_exports","settings","import_dev","import_dev","import_dev","import_dev","SettingsSchema","import_dev","settings","SettingsSchema","fn","trigger","k","v","examples_exports","createTrigger","env_exports","step_exports","env_exports","push","noopFn","noopLogger","createMockElbFn","fn","step_exports","createTrigger","trigger","result"]}
|
|
1
|
+
{"version":3,"sources":["../src/dev.ts","../src/schemas.ts","../src/lambda/schemas/index.ts","../src/lambda/schemas/settings.ts","../src/lambda/schemas/primitives.ts","../src/sqs/schemas/index.ts","../src/sqs/schemas/settings.ts","../src/sqs/schemas/setup.ts","../src/lambda/examples/index.ts","../src/lambda/examples/env.ts","../src/lambda/examples/step.ts","../src/lambda/examples/trigger.ts","../src/sqs/examples/index.ts","../src/sqs/examples/env.ts","../src/sqs/examples/step.ts","../src/sqs/examples/trigger.ts"],"sourcesContent":["export * as schemas from './schemas';\nexport * as examples from './lambda/examples';\nexport * as sqsExamples from './sqs/examples';\n","// Lambda (default sub-source).\nexport { settings, SettingsSchema, type Settings } from './lambda/schemas';\nexport * from './lambda/schemas/primitives';\n\n// SQS sub-source. Prefixed so the website's <Configuration> snippet can\n// remap data.schemas.sqsSettings / sqsSetup onto data.schemas.settings.\nexport { settings as sqsSettings } from './sqs/schemas';\nexport { setup as sqsSetup } from './sqs/schemas';\n","import { zodToSchema } from '@walkeros/core/dev';\nimport { SettingsSchema } from './settings';\n\n// Export primitives\nexport * from './primitives';\n\n// Export Zod schemas and types\nexport { SettingsSchema, type Settings } from './settings';\n\n// JSON Schema exports (for website PropertyTable and documentation tools)\nexport const settings = zodToSchema(SettingsSchema);\n","import { z } from '@walkeros/core/dev';\nimport { CorsOptionsSchema } from './primitives';\n\n/**\n * AWS Lambda source settings schema\n */\nexport const SettingsSchema = z.object({\n cors: z\n .union([z.boolean(), CorsOptionsSchema])\n .describe(\n 'CORS configuration: false = disabled, true = allow all origins, object = custom configuration',\n )\n .default(true),\n\n timeout: z\n .number()\n .int()\n .positive()\n .max(900000) // AWS Lambda max timeout: 15 minutes\n .describe('Request timeout in milliseconds (max: 900000 for Lambda)')\n .default(30000),\n\n enablePixelTracking: z\n .boolean()\n .describe(\n 'Enable GET requests with 1x1 transparent GIF response for pixel tracking',\n )\n .default(true),\n\n maxBatchSize: z\n .number()\n .int()\n .min(1)\n .describe('Maximum number of events accepted in a single batch request')\n .default(100),\n\n healthPath: z\n .string()\n .describe('Health check endpoint path (e.g., /health)')\n .default('/health'),\n});\n\nexport type Settings = z.infer<typeof SettingsSchema>;\n","import { z } from '@walkeros/core/dev';\n\n/**\n * HTTP methods enum\n */\nexport const HttpMethod = z.enum([\n 'GET',\n 'POST',\n 'PUT',\n 'PATCH',\n 'DELETE',\n 'OPTIONS',\n 'HEAD',\n]);\n\n/**\n * CORS origin configuration\n * Accepts:\n * - '*' for all origins\n * - Single URL string\n * - Array of URL strings\n */\nexport const CorsOrigin = z.union([\n z.string(),\n z.array(z.string()),\n z.literal('*'),\n]);\n\n/**\n * CORS options schema\n * Configuration for Cross-Origin Resource Sharing\n */\nexport const CorsOptionsSchema = z.object({\n origin: CorsOrigin.describe(\n 'Allowed origins (* for all, URL string, or array of URLs)',\n ).optional(),\n\n methods: z.array(HttpMethod).describe('Allowed HTTP methods').optional(),\n\n headers: z.array(z.string()).describe('Allowed request headers').optional(),\n\n credentials: z\n .boolean()\n .describe('Allow credentials (cookies, authorization headers)')\n .optional(),\n\n maxAge: z\n .number()\n .int()\n .positive()\n .describe('Preflight cache duration in seconds')\n .optional(),\n});\n\nexport type CorsOptions = z.infer<typeof CorsOptionsSchema>;\n","import { zodToSchema } from '@walkeros/core/dev';\nimport { SettingsSchema } from './settings';\nimport { SetupSchema } from './setup';\n\nexport { SettingsSchema, type Settings } from './settings';\nexport { SetupSchema, type Setup } from './setup';\n\n// JSON Schema exports (for website PropertyTable + MCP package_get).\nexport const settings = zodToSchema(SettingsSchema);\nexport const setup = zodToSchema(SetupSchema);\n","import { z } from '@walkeros/core/dev';\n\n/**\n * AWS SQS source settings schema.\n *\n * Required: queueName. All other fields optional with sensible defaults\n * applied at runtime by `getConfig`.\n */\nexport const SettingsSchema = z.object({\n queueName: z\n .string()\n .min(1)\n .describe(\n 'SQS queue short name (like walkeros-events). Required for both setup and runtime poll.',\n ),\n region: z\n .string()\n .describe('AWS region (like eu-central-1). Default: eu-central-1.')\n .optional(),\n queueUrl: z\n .string()\n .url()\n .describe(\n 'Optional pre-resolved queue URL. When set, init skips the GetQueueUrl lookup.',\n )\n .optional(),\n client: z\n .any()\n .describe(\n 'Pre-configured AWS SQSClient instance. Bypasses construction when supplied.',\n )\n .optional(),\n config: z\n .any()\n .describe(\n 'AWS SDK SQSClientConfig (credentials, endpoint overrides, retries).',\n )\n .optional(),\n decoder: z\n .enum(['json', 'text', 'raw'])\n .describe(\n 'Decoder for the message body. json (default) parses JSON, text forwards UTF-8, raw forwards a Buffer.',\n )\n .optional(),\n maxMessages: z\n .number()\n .int()\n .min(1)\n .max(10)\n .describe('SQS receive batch size. Cap 10. Default: 10.')\n .optional(),\n waitTimeSeconds: z\n .number()\n .int()\n .min(0)\n .max(20)\n .describe('Long-poll duration in seconds. Cap 20. Default: 20.')\n .optional(),\n visibilityTimeout: z\n .number()\n .int()\n .nonnegative()\n .describe(\n 'Per-receive visibility timeout override. Default: queue-configured value.',\n )\n .optional(),\n shutdownTimeoutMs: z\n .number()\n .int()\n .positive()\n .describe(\n 'Graceful shutdown timeout in milliseconds. Default: 30000. After this window, destroy() force-closes.',\n )\n .optional(),\n onPushError: z\n .enum(['nack', 'ack'])\n .describe(\n 'Behavior when forwarding to the collector throws. nack (default) skips DeleteMessage so the message redelivers; ack drops it.',\n )\n .optional(),\n});\n\nexport type Settings = z.infer<typeof SettingsSchema>;\n","import { z } from '@walkeros/core/dev';\n\n/**\n * AWS SQS source setup schema.\n *\n * Provisioning options for `walkeros setup source.<id>`. Authoritative-apply:\n * declared state is written via a single CreateQueueCommand; non-declared\n * tags or attributes are left untouched.\n */\nconst TagsSchema = z.record(z.string(), z.string());\n\nexport const SetupSchema = z.object({\n region: z.string().min(1).describe('AWS region.').optional(),\n fifoQueue: z\n .boolean()\n .describe(\n 'FIFO queue with content-based deduplication. Auto-appends .fifo suffix to the queue name.',\n )\n .optional(),\n visibilityTimeoutSeconds: z\n .number()\n .int()\n .nonnegative()\n .describe('Visibility timeout in seconds. Default: 30.')\n .optional(),\n messageRetentionSeconds: z\n .number()\n .int()\n .positive()\n .describe('Message retention period in seconds. Default: 345600 (4 days).')\n .optional(),\n maximumMessageSize: z\n .number()\n .int()\n .min(1024)\n .max(262144)\n .describe('Max message size in bytes. Default: 262144 (256 KB).')\n .optional(),\n kmsMasterKeyId: z\n .string()\n .describe('KMS key alias or ID for at-rest encryption.')\n .optional(),\n deadLetterQueue: z\n .object({\n arn: z\n .string()\n .describe(\n 'ARN of an existing DLQ. Mutually exclusive with create: true.',\n )\n .optional(),\n create: z\n .boolean()\n .describe('Create a sibling DLQ named <queueName>-dlq. Default: false.')\n .optional(),\n maxReceiveCount: z\n .number()\n .int()\n .min(1)\n .max(1000)\n .describe('Max receive count before message goes to DLQ. Default: 5.')\n .optional(),\n })\n .describe('Optional dead-letter queue.')\n .optional(),\n tags: TagsSchema.describe(\n 'Tags applied to the queue (and inherited by an auto-created DLQ).',\n ).optional(),\n subscribeToSnsTopic: z\n .object({\n topicArn: z.string().min(1).describe('Topic ARN to subscribe to.'),\n rawMessageDelivery: z\n .boolean()\n .describe('Deliver SNS messages without the SNS envelope.')\n .optional(),\n filterPolicy: z\n .record(z.string(), z.unknown())\n .describe('SNS filter policy applied at subscription level.')\n .optional(),\n })\n .describe(\n 'Optional SNS topic subscription. Creates the subscription and the matching queue policy.',\n )\n .optional(),\n});\n\nexport type Setup = z.infer<typeof SetupSchema>;\n","export * as env from './env';\nexport * as step from './step';\nexport { createTrigger, trigger } from './trigger';\n","import type { Env } from '../types';\nimport type { Elb, Logger } from '@walkeros/core';\n\n/**\n * Example environment configurations for AWS Lambda source\n *\n * These environments provide standardized mock structures for testing\n * Lambda event handling without requiring actual Lambda deployment.\n */\n\n// Create a properly typed elb/push/command function that returns a promise with PushResult\nconst createMockElbFn = (): Elb.Fn => {\n const fn = (() =>\n Promise.resolve({\n ok: true,\n })) as Elb.Fn;\n return fn;\n};\n\n// Simple no-op logger for demo purposes\nconst noopFn = () => {};\nconst noopLogger: Logger.Instance = {\n error: noopFn,\n warn: noopFn,\n info: noopFn,\n debug: noopFn,\n throw: (message: string | Error) => {\n throw typeof message === 'string' ? new Error(message) : message;\n },\n json: noopFn,\n scope: () => noopLogger,\n};\n\n/**\n * Standard mock environment for testing Lambda source\n *\n * Use this for testing Lambda event ingestion and request/response handling\n * without requiring a real AWS Lambda environment.\n */\nexport const push: Env = {\n get push() {\n return createMockElbFn();\n },\n get command() {\n return createMockElbFn();\n },\n get elb() {\n return createMockElbFn();\n },\n logger: noopLogger,\n};\n","import type { Flow } from '@walkeros/core';\n\nexport const lambdaPost: Flow.StepExample = {\n title: 'Lambda POST',\n description:\n 'An API Gateway v2 HTTP POST with a JSON body is converted into a walker elb event.',\n trigger: { type: 'POST' },\n in: {\n version: '2.0',\n requestContext: {\n http: { method: 'POST', path: '/collect' },\n requestId: 'req-123',\n },\n body: JSON.stringify({\n name: 'page view',\n data: { title: 'Home' },\n }),\n isBase64Encoded: false,\n },\n out: [\n [\n 'elb',\n {\n name: 'page view',\n data: { title: 'Home' },\n },\n ],\n ],\n};\n\nexport const apiGatewayV1Post: Flow.StepExample = {\n title: 'API Gateway v1 POST',\n description:\n 'A REST API Gateway v1 POST request with a JSON body is converted into a walker elb event.',\n trigger: { type: 'POST' },\n in: {\n httpMethod: 'POST',\n path: '/collect',\n requestContext: {\n requestId: 'req-789',\n identity: { sourceIp: '203.0.113.42' },\n },\n queryStringParameters: null,\n body: JSON.stringify({\n name: 'page view',\n data: { title: 'Home' },\n }),\n isBase64Encoded: false,\n },\n out: [\n [\n 'elb',\n {\n name: 'page view',\n data: { title: 'Home' },\n },\n ],\n ],\n};\n\nexport const lambdaGet: Flow.StepExample = {\n title: 'Lambda GET',\n description:\n 'An API Gateway v2 HTTP GET with query parameters is parsed into an elb event payload.',\n trigger: { type: 'GET' },\n in: {\n version: '2.0',\n requestContext: {\n http: { method: 'GET', path: '/collect' },\n requestId: 'req-456',\n },\n rawQueryString: 'e=page+view&d=%7B%22title%22%3A%22Home%22%7D',\n isBase64Encoded: false,\n },\n out: [\n [\n 'elb',\n {\n e: 'page view',\n d: '{\"title\":\"Home\"}',\n },\n ],\n ],\n};\n\nexport const lambdaPostForwardsSource: Flow.StepExample = {\n title: 'Lambda POST with provenance',\n description:\n 'A POST body carrying a source map is forwarded in full, so release and trace provenance survive the crossing.',\n trigger: { type: 'POST' },\n in: {\n version: '2.0',\n requestContext: {\n http: { method: 'POST', path: '/collect' },\n requestId: 'req-321',\n },\n body: JSON.stringify({\n name: 'page view',\n data: { title: 'Home' },\n source: { release: { web: 'r1' } },\n }),\n isBase64Encoded: false,\n },\n out: [\n [\n 'elb',\n {\n name: 'page view',\n data: { title: 'Home' },\n source: { release: { web: 'r1' } },\n },\n ],\n ],\n};\n","import type { Trigger, Collector } from '@walkeros/core';\nimport type { LambdaEvent, LambdaContext, LambdaResult } from '../types';\nimport { startFlow } from '@walkeros/collector';\n\nexport interface Content {\n [key: string]: unknown;\n}\n\nexport interface Result {\n statusCode: number;\n body: unknown;\n headers: Record<string, string>;\n}\n\n/**\n * Find the lambda source instance from the collector's registered sources.\n */\nfunction findLambdaSource(collector: Collector.Instance) {\n for (const source of Object.values(collector.sources || {})) {\n if ((source as { type?: string }).type === 'lambda') return source;\n }\n}\n\n/**\n * Lambda source createTrigger.\n *\n * Boots the collector via startFlow, then invokes the Lambda source's push()\n * with a real API Gateway event and a minimal Lambda context.\n *\n * Content is the raw Lambda event object (API Gateway v1 or v2 format).\n * Result contains statusCode, parsed body, and headers.\n *\n * @example\n * const { trigger, flow } = await createTrigger(config);\n * const result = await trigger('POST')({ version: '2.0', ... });\n * console.log(result.statusCode, result.body);\n */\nconst createTrigger: Trigger.CreateFn<Content, Result> = async (\n config: Collector.InitConfig,\n) => {\n let flow: Trigger.FlowHandle | undefined;\n\n const trigger: Trigger.Fn<Content, Result> =\n () =>\n async (content: Content): Promise<Result> => {\n // Lazy startFlow\n if (!flow) {\n const result = await startFlow(config);\n flow = { collector: result.collector, elb: result.elb };\n }\n\n const source = findLambdaSource(flow.collector);\n if (!source) throw new Error('Lambda source not found in collector');\n\n // Create minimal Lambda context\n const lambdaContext = {\n awsRequestId: `test-${Date.now()}`,\n } as unknown as LambdaContext;\n\n // Call source.push with the raw Lambda event + context\n const pushFn = (\n source as unknown as {\n push: (...args: unknown[]) => Promise<LambdaResult>;\n }\n ).push;\n const lambdaResult = await pushFn(\n content as unknown as LambdaEvent,\n lambdaContext,\n );\n\n // Parse response\n let body: unknown;\n try {\n body = JSON.parse(lambdaResult.body || '{}');\n } catch {\n body = lambdaResult.body;\n }\n\n const headers: Record<string, string> = {};\n if (lambdaResult.headers) {\n for (const [k, v] of Object.entries(lambdaResult.headers)) {\n if (v !== undefined) headers[k] = String(v);\n }\n }\n\n return {\n statusCode: lambdaResult.statusCode,\n body,\n headers,\n };\n };\n\n return {\n get flow() {\n return flow;\n },\n trigger,\n };\n};\n\n/**\n * Legacy trigger — takes a source instance directly.\n * Preserved for CLI simulate path.\n */\nfunction trigger(source: {\n push: (event: LambdaEvent, context: LambdaContext) => Promise<LambdaResult>;\n}): (content: Content) => Promise<LambdaResult> {\n return async (content: Content) => {\n const lambdaEvent = { ...(content as Record<string, unknown>) };\n\n // Adapt body format: step examples may use `name`, source expects `event`\n if (lambdaEvent.body && typeof lambdaEvent.body === 'string') {\n const body = JSON.parse(lambdaEvent.body);\n if (body.name && !body.event) {\n lambdaEvent.body = JSON.stringify({\n ...body,\n event: body.name,\n name: undefined,\n });\n }\n }\n\n const context: LambdaContext = {\n awsRequestId: 'test-req',\n } as unknown as LambdaContext;\n\n return source.push(lambdaEvent as unknown as LambdaEvent, context);\n };\n}\n\nexport { createTrigger, trigger };\n","export * as env from './env';\nexport * as step from './step';\nexport { createTrigger } from './trigger';\nexport type { Content, Result } from './trigger';\n","import type { Env } from '../types';\nimport type { Elb, Logger } from '@walkeros/core';\n\n/**\n * Example environment for the AWS SQS source.\n *\n * Tests substitute the real SDK via `jest.mock('@aws-sdk/client-sqs')` and\n * `jest.mock('@aws-sdk/client-sns')`, which is the canonical pattern: imports\n * of those modules get replaced module-wide, no env-injection plumbing\n * required at the call site.\n *\n * The `simulation` list documents which SDK identifiers the source touches\n * during a simulated run, used by the simulator to know what to stub.\n */\n\nconst noopFn = (): void => undefined;\nconst noopLogger: Logger.Instance = {\n error: noopFn,\n warn: noopFn,\n info: noopFn,\n debug: noopFn,\n throw: (message: string | Error) => {\n throw typeof message === 'string' ? new Error(message) : message;\n },\n json: noopFn,\n scope: () => noopLogger,\n};\n\nconst createMockElbFn = (): Elb.Fn => {\n const fn: Elb.Fn = () => Promise.resolve({ ok: true });\n return fn;\n};\n\n/**\n * Standard mock environment for the SQS source.\n *\n * AWS SDK constructors are intentionally absent: the canonical pattern is\n * module-level `jest.mock('@aws-sdk/client-sqs')` and -sns, not env-injection.\n */\nexport const push: Env = {\n get push() {\n return createMockElbFn();\n },\n get command() {\n return createMockElbFn();\n },\n get elb() {\n return createMockElbFn();\n },\n logger: noopLogger,\n};\n\nexport const simulation = ['AWS.SQSClient'];\n","import type { Flow } from '@walkeros/core';\n\n/**\n * SQS source step examples.\n *\n * Each `in` is a partial SQS Message-like (MessageId, Body, optional\n * ReceiptHandle). The trigger synthesizes the missing fields and dispatches\n * through the source's `push()` (the same pipeline the long-poll loop uses).\n * `out` records the terminal state recorded by the trigger as\n * `[method, ...args]` entries.\n */\n\nconst eventPayload = {\n event: 'page view',\n data: { title: 'Documentation', url: 'https://example.com/docs' },\n};\n\nconst orderPayload = {\n event: 'order complete',\n data: { id: 'ORD-500', total: 199.99, currency: 'EUR' },\n};\n\nexport const pageView: Flow.StepExample = {\n title: 'Page view from SQS',\n description:\n 'A standard SQS message body containing a walker elb event payload as JSON.',\n in: {\n MessageId: 'm-1',\n Body: JSON.stringify(eventPayload),\n },\n out: [['message.ack', 'm-1']],\n};\n\nexport const orderComplete: Flow.StepExample = {\n title: 'Order complete from SQS',\n description: 'Order complete event flowing through the long-poll loop.',\n in: {\n MessageId: 'm-2',\n Body: JSON.stringify(orderPayload),\n },\n out: [['message.ack', 'm-2']],\n};\n\nexport const decoderText: Flow.StepExample = {\n title: 'Text decoder',\n description:\n 'When decoder is \"text\", the body string flows under data.payload.',\n in: { MessageId: 'm-3', Body: 'raw text payload' },\n out: [['message.ack', 'm-3']],\n};\n\nexport const malformedJson: Flow.StepExample = {\n title: 'Malformed JSON nacks',\n description:\n 'Default decoder is JSON. A malformed body throws DecoderError; the source nacks (skips DeleteMessage) so the message redelivers.',\n in: { MessageId: 'm-4', Body: '{not json' },\n out: [['message.nack', 'm-4']],\n};\n","import type { Collector, Trigger } from '@walkeros/core';\nimport { startFlow } from '@walkeros/collector';\nimport type { SyntheticMessage, SyntheticPushResult } from '../types';\n\n/**\n * Content shape for the SQS source trigger.\n *\n * The trigger synthesizes a SyntheticMessage from this partial input and\n * dispatches it through the source's `push()` (the same pipeline the\n * long-poll loop uses).\n */\nexport interface Content {\n MessageId: string;\n Body: string;\n ReceiptHandle?: string;\n Attributes?: Record<string, string>;\n MessageAttributes?: Record<\n string,\n { DataType: string; StringValue?: string }\n >;\n}\n\n/**\n * Trigger result: the recorded ack/nack as `[method, MessageId]` entries.\n * Mirrors the destination's `[method, ...args]` recording shape.\n */\nexport type Result = Array<[string, ...unknown[]]>;\n\ninterface SqsSourceLike {\n type: string;\n push: (content?: SyntheticMessage) => Promise<SyntheticPushResult | void>;\n}\n\nfunction isSqsSource(value: unknown): value is SqsSourceLike {\n if (typeof value !== 'object' || value === null) return false;\n const candidate: { type?: unknown; push?: unknown } = value;\n return candidate.type === 'sqs' && typeof candidate.push === 'function';\n}\n\nfunction findSource(collector: Collector.Instance): SqsSourceLike | undefined {\n for (const source of Object.values(collector.sources ?? {})) {\n if (isSqsSource(source)) return source;\n }\n return undefined;\n}\n\n/**\n * SQS source createTrigger.\n *\n * Boots the collector via startFlow, finds the registered SQS source, and\n * invokes its `push()` with a synthesized message. The source dispatches the\n * synthetic message through the same handler the long-poll loop uses,\n * exercising the full decode / forward / ack-nack pipeline without touching\n * real SQS infrastructure.\n */\nexport const createTrigger: Trigger.CreateFn<Content, Result> = async (\n config: Collector.InitConfig,\n) => {\n let flow: Trigger.FlowHandle | undefined;\n\n const trigger: Trigger.Fn<Content, Result> =\n () =>\n async (content: Content): Promise<Result> => {\n if (!flow) {\n const result = await startFlow(config);\n flow = { collector: result.collector, elb: result.elb };\n }\n\n const source = findSource(flow.collector);\n if (!source) {\n throw new Error(\n 'sqs source not registered in collector, ensure it is configured in sources',\n );\n }\n\n const synthetic: SyntheticMessage = {\n MessageId: content.MessageId,\n Body: content.Body,\n ReceiptHandle: content.ReceiptHandle,\n Attributes: content.Attributes,\n MessageAttributes: content.MessageAttributes,\n };\n\n const result = await source.push(synthetic);\n const recorded: Result = [];\n if (result && typeof result === 'object') {\n if (result.acked) recorded.push(['message.ack', content.MessageId]);\n if (result.nacked) recorded.push(['message.nack', content.MessageId]);\n }\n return recorded;\n };\n\n return {\n get flow() {\n return flow;\n },\n trigger,\n };\n};\n"],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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","names":["examples_exports","settings","import_dev","import_dev","import_dev","import_dev","SettingsSchema","import_dev","settings","SettingsSchema","fn","trigger","k","v","examples_exports","createTrigger","env_exports","step_exports","env_exports","push","noopFn","noopLogger","createMockElbFn","fn","step_exports","createTrigger","trigger","result"]}
|
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";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:()=>a,HttpMethod:()=>i,SettingsSchema:()=>d,settings:()=>u,sqsSettings:()=>v,sqsSetup:()=>w});import{zodToSchema as o}from"@walkeros/core/dev";import{z as s}from"@walkeros/core/dev";import{z as r}from"@walkeros/core/dev";var i=r.enum(["GET","POST","PUT","PATCH","DELETE","OPTIONS","HEAD"]),a=r.union([r.string(),r.array(r.string()),r.literal("*")]),c=r.object({origin:a.describe("Allowed origins (* for all, URL string, or array of URLs)").optional(),methods:r.array(i).describe("Allowed HTTP methods").optional(),headers:r.array(r.string()).describe("Allowed request headers").optional(),credentials:r.boolean().describe("Allow credentials (cookies, authorization headers)").optional(),maxAge:r.number().int().positive().describe("Preflight cache duration in seconds").optional()}),d=s.object({cors:s.union([s.boolean(),c]).describe("CORS configuration: false = disabled, true = allow all origins, object = custom configuration").default(!0),timeout:s.number().int().positive().max(9e5).describe("Request timeout in milliseconds (max: 900000 for Lambda)").default(3e4),enablePixelTracking:s.boolean().describe("Enable GET requests with 1x1 transparent GIF response for pixel tracking").default(!0),maxBatchSize:s.number().int().min(1).describe("Maximum number of events accepted in a single batch request").default(100),healthPath:s.string().describe("Health check endpoint path (e.g., /health)").default("/health")}),u=o(d);import{zodToSchema as l}from"@walkeros/core/dev";import{z as p}from"@walkeros/core/dev";var f=p.object({queueName:p.string().min(1).describe("SQS queue short name (like walkeros-events). Required for both setup and runtime poll."),region:p.string().describe("AWS region (like eu-central-1). Default: eu-central-1.").optional(),queueUrl:p.string().url().describe("Optional pre-resolved queue URL. When set, init skips the GetQueueUrl lookup.").optional(),client:p.any().describe("Pre-configured AWS SQSClient instance. Bypasses construction when supplied.").optional(),config:p.any().describe("AWS SDK SQSClientConfig (credentials, endpoint overrides, retries).").optional(),decoder:p.enum(["json","text","raw"]).describe("Decoder for the message body. json (default) parses JSON, text forwards UTF-8, raw forwards a Buffer.").optional(),maxMessages:p.number().int().min(1).max(10).describe("SQS receive batch size. Cap 10. Default: 10.").optional(),waitTimeSeconds:p.number().int().min(0).max(20).describe("Long-poll duration in seconds. Cap 20. Default: 20.").optional(),visibilityTimeout:p.number().int().nonnegative().describe("Per-receive visibility timeout override. Default: queue-configured value.").optional(),shutdownTimeoutMs:p.number().int().positive().describe("Graceful shutdown timeout in milliseconds. Default: 30000. After this window, destroy() force-closes.").optional(),onPushError:p.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(f),w=l(m),y={};t(y,{createTrigger:()=>Yn,env:()=>b,step:()=>q,trigger:()=>Xn});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},q={};t(q,{apiGatewayV1Post:()=>x,lambdaGet:()=>C,lambdaPost:()=>O,lambdaPostForwardsSource:()=>T});var O={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"}'}]]},T={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 j}from"@walkeros/core";import{createIngest as D}from"@walkeros/core";import{assign as M,createMappingRoot as P,clone as A,compileCache as $,checkCache as _,storeCache as R,createIngest as B,debounce as H,emitStep as G,getId as N,getGrantedConsent as z,isDefined as U,isFunction as F,isObject as K,OBSERVE_ENV_KEY as L,processEventMapping as Q,stepId as W,tryCatchAsync as J,useHooks as V,compileState as Y,applyState as X}from"@walkeros/core";import{emitStep as Z}from"@walkeros/core";import{parseCallPath as ee}from"@walkeros/core";import{isArray as te,FatalError as ne}from"@walkeros/core";import{tryCatch as oe,tryCatchAsync as se}from"@walkeros/core";import{stepId as re}from"@walkeros/core";import{createIngest as ie,FatalError as ae,getMappingValue as ce,getSpanId as de,parseTraceparent as ue,isScope as le,tryCatchAsync as pe,compileCache as fe,checkCache as ge,storeCache as he,applyUpdate as me,createMappingRoot as ve,compileState as we,applyState as ye}from"@walkeros/core";import{advanceChain as be,clone as ke,createIngest as Ie,deriveSpanId as Se,emitStep as Ee,FatalError as qe,isChainContinuation as Oe,isObject as xe,startChain as Ce,stepId as Te,tryCatchAsync as je,useHooks as De,compileCache as Me,checkCache as Pe,storeCache as Ae,createMappingRoot as $e,validateStepEntry as _e,processEventMapping as Re,compileState as Be,applyState as He}from"@walkeros/core";import{assign as Ge,getSpanId as Ne,getTraceId as ze,InvalidEventError as Ue,isFunction as Fe,isString as Ke}from"@walkeros/core";import{isObject as Le}from"@walkeros/core";import{OBSERVE_STORAGE_KEY as Qe,createBatchedPoster as We,createTelemetryObserver as Je,parseObserveCredential as Ve}from"@walkeros/core";import{assign as Ye,createLogger as Xe}from"@walkeros/core";import{createIngest as Ze,emitStep as et,FatalError as tt,getGrantedConsent as nt,getSpanId as ot,InvalidEventError as st,processEventMapping as rt,tryCatchAsync as it,useHooks as at}from"@walkeros/core";import{FatalError as ct,useHooks as dt,tryCatchAsync as ut}from"@walkeros/core";import{emitStep as lt,useHooks as pt}from"@walkeros/core";import{compileMatcher as ft,emitStep as gt,readCacheEnvelope as ht,wrapCacheEnvelope as mt}from"@walkeros/core";var vt={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 wt(e,t,n){return{traceId:e.source?.trace??t?._meta.trace??n.trace,sourceId:t?._meta.path[0],parentEventId:t?._meta.parentEventId}}function yt(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 bt(e,t,n,o,s){e.status.in++;const r=yt(e,{stepId:"collector.push",stepType:"collector",phase:"skip",eventId:"string"==typeof t.id?t.id:"",now:Date.now(),...wt(t,n,e)});r.skipReason="dropped",r.meta={by:o??"route",at:s},Z(e,r)}function kt(e){return"object"==typeof e&&null!==e}function It(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 s of e)o.push(It(s,t,n+1));return o}const s={};t.set(e,s);for(const[o,r]of Object.entries(e))s[o]="function"==typeof r?r:It(r,t,n+1);return s}function St(e){const t=[],n=[],{simulation:o,...s}=e,r=It(s,new WeakMap,0);for(const e of o){const o=ee(e);if(0===o.length)continue;const s=o.join(".");if(o.length-1>=8){n.push(s);continue}let i=r,a=!0;for(let e=0;e<o.length-1;e++){const t=i[o[e]];if(!kt(t)){a=!1;break}i=t}const c=o[o.length-1];if(!a||!(c in i)){n.push(s);continue}const d=i[c];"function"==typeof d?i[c]=function(...e){return t.push({fn:s,args:e,ts:Date.now()}),d.apply(this,e)}:n.push(s)}return{wrappedEnv:r,calls:t,unresolved:n}}function Et(e,t){try{return e[t]}catch{return"[unreadable]"}}function qt(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 s=e;if(t.has(s))return"[circular]";if(o>=6)return"[truncated]";let r;t.add(s);try{if(Array.isArray(s))r=s.map(e=>n(e,o+1));else if(function(e){const t=Object.getPrototypeOf(e);return t===Object.prototype||null===t}(s)){const e={};for(const t of Object.keys(s))e[t]=n(Et(s,t),o+1);r=e}else r=function(e){try{return String(e)}catch{return"[object]"}}(s)}catch{r="[unreadable]"}return t.delete(s),r};return e.map(e=>n(e,0))}function Ot(e){return e.map(e=>({fn:e.fn,args:qt(e.args),ts:e.ts}))}function xt(e,t,n,o){if(!Number.isFinite(n.max)||n.max<=0)throw new Error(`pushBounded: max must be > 0 (got ${n.max})`);if("dropNewest"===(n.onOverflow??"dropOldest"))return e.length>=n.max?(o&&o([t]),{appended:!1,dropped:1}):(e.push(t),{appended:!0,dropped:0});const s=[];for(;e.length>=n.max;)s.push(e.shift());return e.push(t),s.length>0&&o&&o(s),{appended:!0,dropped:s.length}}var Ct=new WeakMap;function Tt(e,t,n,o){Ct.get(e)||(Ct.set(e,!0),t.warn(n,o))}function jt(e){Ct.delete(e)}var Dt=()=>Date.now();function Mt(e){if(void 0!==e)return"number"==typeof e?{threshold:e,cooldown:3e4}:{threshold:e.threshold??5,cooldown:e.cooldown??3e4}}function Pt(e,t,n,o,s){if("partial"===n)return;const r=((i=e)[a=t]||(i[a]={state:"closed",consecutiveFailures:0}),i[a]);var i,a;return"success"===n?(r.consecutiveFailures=0,r.state="closed",r.probing=!1,void(r.openUntil=void 0)):(r.consecutiveFailures+=1,"half-open"===r.state?(r.state="open",r.probing=!1,void(r.openUntil=Dt()+s)):void(r.consecutiveFailures>=o&&(r.state="open",r.probing=!1,r.openUntil=Dt()+s)))}function At(e,t){return e.status.destinations[t]||(e.status.destinations[t]={count:0,failed:0,duration:0,queuePushSize:0,dlqSize:0}),e.status.destinations[t]}function $t(e,t,n,o){e.dropped[t]||(e.dropped[t]={});const s=e.dropped[t];return s[n]=(s[n]??0)+o,s[n]}function _t(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 Rt(e,t,n,o,s){const r=re(t,n);return(t,i)=>{try{if(i)return s?function(e,t,n,o,s,r){const i=t.dlq=t.dlq||[],a={max:t.config.dlqMax??100},c=xt(i,[o,s],a);if(c.dropped>0){const t=$t(e.status,re("destination",n),"dlq",c.dropped);Tt(i,r,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:n,cap:a.max,droppedCount:t})}else i.length<a.max&&jt(i);const d=At(e,n);d.failed++,d.dlqSize=i.length,e.status.failed++;const u=Mt(t.config.breaker);if(u){const o=t.config.id||n;Pt(e.status.breakers,re("destination",o),"transport-failure",u.threshold,u.cooldown)}}(e,s,n,i,t,o):e.status.failed++,void o.error("report error",{..._t(t),event:i.name});e.status.connectionErrors[r]=(e.status.connectionErrors[r]??0)+1,o.error("connection error",_t(t))}catch{}}}function Bt(e,t){return e.storeId&&t.stores[e.storeId]?t.stores[e.storeId]:t.stores.__cache}function Ht(e,t){return e?t.stores[e]:t.stores.__cache}function Gt(e,t){const n=e.config||{},o=e[t];return void 0!==o?{config:{...n,[t]:o},chainValue:o}:{config:n,chainValue:void 0}}async function Nt(e,t,n){if(t.init&&!t.config.init){const o=t.type||"unknown",s=e.logger.scope(`transformer:${o}`),r={collector:e,logger:s,id:n,ingest:Ie(n),config:t.config,env:Xt(t.config.env),reportError:Rt(e,"transformer",n,s)};s.debug("init");const i=await De(t.init,"TransformerInit",e.hooks,e.logger)(r);if(!1===i)return!1;t.config={...i||t.config,env:i?.env||t.config.env,init:!0},s.debug("init done")}return!0}async function zt(e,t,n,o,s,r){const i=t.type||"unknown",a=e.logger.scope(`transformer:${i}`),c={collector:e,logger:a,id:n,ingest:s,config:t.config,env:{...Xt(t.config.env),...r?{respond:r}:{}},reportError:Rt(e,"transformer",n,a)};a.debug("push",{event:o.name});const d="string"==typeof o.id?o.id:"",{traceId:u,sourceId:l,parentEventId:p}=wt(o,s,e),f=Date.now(),g=yt(e,{stepId:Te("transformer",n),stepType:"transformer",phase:"in",eventId:d,now:f,traceId:u,sourceId:l,parentEventId:p});g.inEvent=o,Ee(e,g);try{const s=await De(t.push,"TransformerPush",e.hooks,e.logger)(o,c),r=Date.now(),i=yt(e,{stepId:Te("transformer",n),stepType:"transformer",phase:"out",eventId:d,now:r,traceId:u,sourceId:l,parentEventId:p});return i.durationMs=r-f,i.outEvent=s,Ee(e,i),a.debug("push done"),s}catch(t){const o=Date.now(),s=yt(e,{stepId:Te("transformer",n),stepType:"transformer",phase:"error",eventId:d,now:o,traceId:u,sourceId:l,parentEventId:p});throw s.durationMs=o-f,s.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},Ee(e,s),t}}function Ut(e){return"string"==typeof e.id?e.id:""}function Ft(e,t){const n=Ut(e);return""!==n&&""===Ut(t)?{...t,id:n}:t}function Kt(e,t,n,o){const s=(a=n,{...a,_meta:{...a._meta,path:[...a._meta.path]}}),r=ke(t),i=Ut(e);var a;if(""===i)return{event:r,ingest:s};s._meta.parentEventId=i;const c=Ut(r);return""!==c&&c!==i||(r.id=Se(i,o)),{event:r,ingest:s}}function Lt(e,t){return{copies:e,respond:t}}function Qt(e,t){if(void 0===t)return e.rest;const n=e.ownNext?e.rest.slice(1):e.rest;return[{route:t,ancestry:e.ancestry},...n]}async function Wt(e,t,n){const o=await Promise.all(t.map((t,n)=>je(Jt,t=>(e.collector.logger.scope("transformer:fork").error(`fork ${n} failed`,_t(t)),{copies:[]}))(e,t))),s=[];let r,i=n,a=o.length>0;return o.forEach((e,n)=>{void 0!==t[n].respond&&e.respond&&(i=e.respond),e.stopped||(a=!1),e.stopped||0===e.copies.length?void 0===r&&(r=e.droppedBy):s.push(...e.copies)}),0===s.length?{copies:s,respond:i,...a?{stopped:!0}:{},...void 0!==r?{droppedBy:r}:{}}:Lt(s,i)}async function Jt(e,t){const{ingest:n}=t;let{stack:o,event:s,respond:r}=t,i=t.resume;for(;;){let t,a;if(i)t=i.member,a=i,i=void 0;else{const i=be(o,$e(n,s),e.transformers);if("done"===i.kind)return Lt([{event:s,ingest:n}],r);if("stop"===i.kind)return{copies:[],respond:r,stopped:!0,...void 0!==i.owner?{droppedBy:i.owner}:{}};if("fork"===i.kind){const t=s;return Wt(e,i.branches.map((e,o)=>({stack:e,...Kt(t,t,n,o),respond:void 0})),r)}const a=e.transformers[i.id];t={id:i.id,ancestry:i.ancestry,rest:i.rest,ownNext:!!a&&void 0!==a.config.next}}const c=await Vt(e,t,s,n,r,a);if("halt"===c.kind)return c.result;if("fork"===c.kind)return Wt(e,c.copies,r);s=c.event,r=c.respond,o=c.stack}}async function Vt(e,t,n,o,s,r){const{collector:i,transformers:a,chainContext:c}=e,d=t.id,u=a[d];let l=n,p=s;const f=(e=t.rest)=>({kind:"continue",event:Ft(n,l),respond:p,stack:e}),g=e=>({kind:"halt",result:e});if(!u)return i.logger.warn(`Transformer not found: ${d}`),f();const h=u.config?.cache,m=h?Me(h):void 0,v=m?Bt(m,i):void 0;let w=r?.cacheMiss;if(!r){if(o._meta.path.length>256)return i.logger.error(`Max path length exceeded at ${d}`),g({copies:[],respond:p});if(o._meta.hops++,o._meta.path.push(d),!await je(Nt,e=>{if(e instanceof qe)throw e;return i.status.failed++,i.logger.scope(`transformer:${u.type||"unknown"}`).error("transformer init failed",{transformer:d,..._t(e)}),!1})(i,u,d))return g({copies:[],respond:p});if(c&&void 0!==u.config?.chainMocks?.[c]){const e=u.config.chainMocks[c];return i.logger.scope(`transformer:${u.type||"unknown"}`).debug("chainMock",{chain:c}),l=e,f()}if(void 0!==u.config?.mock)return i.logger.scope(`transformer:${u.type||"unknown"}`).debug("mock"),l=u.config.mock,f();if(u.config?.disabled)return f();if(m&&v){const e=await Pe(m,v,$e(o,l));if("HIT"===e?.status&&e.value)return l=e.value,m.stop?g({copies:[{event:Ft(n,l),ingest:o}],respond:p,stopped:!0}):f();"MISS"===e?.status&&(w={key:e.key,ttl:e.rule.ttl})}if(void 0!==u.config.before){const e=await async function(e,t,n,o,s,r,i){const a=t[n],c=a?a.config.before:void 0,d=await Yt(e,t,c,o,s,r,i);return d.stopped&&0===d.copies.length&&!d.droppedBy?{...d,droppedBy:n}:d}(i,a,d,l,o,p,c),n=e.respond??p;if(0===e.copies.length||e.stopped)return g({...e,respond:n});p=n;const[s]=e.copies;if(e.copies.length>1||s.ingest!==o){const n={member:t,cacheMiss:w};return{kind:"fork",copies:e.copies.map(e=>({stack:t.rest,event:e.event,ingest:e.ingest,respond:void 0,resume:n}))}}l=s.event}}const y=u.config?.state?Be(u.config.state):void 0,b=y?.filter(e=>"get"===e.mode),k=y?.filter(e=>"set"===e.mode),I=async e=>k&&0!==k.length?He(k,e=>Ht(e,i),e,i,o):e;b&&b.length>0&&(l=await He(b,e=>Ht(e,i),l,i,o));const S=await je(zt,e=>(i.status.failed++,i.logger.scope(`transformer:${u.type||"unknown"}`).error("Push failed",_t(e)),!1))(i,u,d,l,o,p);if(!1===S)return g({copies:[],respond:p,droppedBy:d});if(Array.isArray(S)&&1!==S.length){if(0===S.length)return g({copies:[],respond:p});const e=l,n=[];for(let s=0;s<S.length;s++){const r=S[s],i=await I(r.event||e);n.push({stack:Qt(t,r.next),...Kt(e,i,o,s),respond:p})}return{kind:"fork",copies:n}}const E=Array.isArray(S)?S[0]:S;let q;return E&&"object"==typeof E&&(E.respond&&(p=E.respond),E.event&&(l=E.event),q=E.next),l=await I(l),w&&v&&Ae(v,w.key,l,w.ttl),f(Qt(t,q))}async function Yt(e,t,n,o,s,r,i){const a=s??Ie("string"==typeof n?n:"chain");return void 0===n?Lt([{event:o,ingest:a}],r):(i&&(a._meta.chainPath=i),Jt({collector:e,transformers:t,chainContext:i},{stack:Oe(n)?n:Ce(n),event:o,ingest:a,respond:r}))}function Xt(e){return e&&xe(e)?e:{}}async function Zt(e,t,n){if(!t.on||!t.queueOn?.length)return;const o=t.queueOn;t.queueOn=[];const s=n||t.config?.id||"unknown";for(const{type:n,data:r}of o)dn(n)&&!gn(e,t,n)||(await pe(t.on,t=>{if(t instanceof ae)throw t;e.status.failed++,e.logger.scope("source").error("source on flush failed",{sourceId:s,type:n,..._t(t)})})(n,r),dn(n)&&fn(e,t,n))}function en(e){return Boolean(e.config.init)&&!e.config.require?.length}async function tn(e,t,n){const{code:o,config:s={},env:r={},primary:i,next:a,before:c,cache:d,terminus:u}=n,l=s.state??n.state,p=l?we(l):void 0,f=d,g=f?fe({...f,stop:f.stop??!0}):void 0,h=u??e.push,m=Boolean(u),v=async(n,o,r)=>{if(m)return h(n);let i;const d="string"==typeof n.id&&""!==n.id?n:{...n,id:de()};let u=[{event:d,ingest:r.ingest}];if(void 0!==c){const n=`source.${t}.before`,o=await Yt(e,e.transformers||{},c,d,r.ingest,r.respond,n);if(0===o.copies.length)return bt(e,d,r.ingest,o.droppedBy,n),Dn({ok:!0,dropped:!0});if(o.stopped)return o.respond&&(r.respond=o.respond),{ok:!0};o.respond&&(r.respond=o.respond),u=o.copies}if(g){const t=Bt(g,e);if(t){const n=ve(r.ingest),o=await ge(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 me(t,o.rule.update,{...n,cache:{status:"HIT"}},e)),r.respond?.(t),{ok:!0}}if("MISS"===o.status&&g.stop&&r.respond){const s=r.respond,a=o.rule.update,c={...n,cache:{status:"MISS"}},d=o.key,u=o.rule.ttl,l=n=>{he(t,d,n,u),a?i=(async()=>{const t=await me(n,a,c,e);s(t)})():s(n)};r.respond=l}"MISS"!==o.status||g.stop||he(t,o.key,!0,o.rule.ttl)}}}p&&p.length>0&&(u=await Promise.all(u.map(async t=>({event:await ye(p,t=>Ht(t,e),t.event,e,t.ingest),ingest:t.ingest}))));let l={ok:!0};for(const e of u)l=await h(e.event,{...o,id:t,ingest:e.ingest,respond:r.respond,mapping:s,preChain:a});return i&&await i,l},w=async n=>{const o=ie(t),r=ue(le(n)?n?.headers?.traceparent:void 0);if(r&&(o._meta.trace=r.trace,o._meta.parentEventId=r.parentSpan),!s.ingest||void 0===n)return o;const i=await ce(n,s.ingest,{collector:e});return{...o,...i,_meta:o._meta}},y=e.logger.scope("source").scope(t),b={...r,push:async(e,n={})=>{const o={ingest:ie(t),respond:void 0};return v(e,n,o)},command:e.command,sources:e.sources,elb:e.elb,logger:y},k={collector:e,logger:y,id:t,config:s,env:b,withScope:async(e,t,n)=>{const o={ingest:await w(e),respond:t};return n({...b,push:(e,t={})=>v(e,t,o),ingest:o.ingest,respond:o.respond})},reportError:Rt(e,"source",t,y)},I=await pe(o,n=>{if(n instanceof ae)throw n;e.status.failed++,e.logger.scope("source").error("source factory failed",{sourceId:t,..._t(n)})})(k);if(!I)return;const S=I.type||"unknown",E=e.logger.scope(S).scope(t);return b.logger=E,i&&(I.config={...I.config,primary:i}),I}async function nn(e){for(const[t,n]of Object.entries(e.sources)){if(en(n))continue;const o=n.config.require;if(!o?.length)continue;const s=o.filter(t=>!ln(e,t));s.length!==o.length&&(n.config.require=s,en(n)&&await Zt(e,n,t))}for(const[t,n]of Object.entries(e.pending.destinations)){if(!e.pending.destinations[t]||e.destinations[t])continue;const o=n.config?.require;if(!o)continue;const s=o.filter(t=>!ln(e,t));if(n.config&&(n.config.require=s),s.length>0)continue;delete e.pending.destinations[t];const r=Mn(n);!1!==r.config.queue&&(r.queuePush=[...e.queue]),e.destinations[t]=r}}function on(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 sn=!1;function rn(){sn||(sn=!0,"undefined"!=typeof console&&"function"==typeof console.warn&&console.warn("walkerOS: ignored an on-dispatch call with a non-collector argument"))}function an(e,t,n,o){if(n instanceof ne)throw n;e.logger.scope("on").error("on callback failed",{kind:t,...o,..._t(n)})}var cn=[vt.Consent,vt.User,vt.Globals,vt.Custom];function dn(e){return cn.includes(e)}function un(e,t){switch(t){case vt.Consent:return Object.keys(e.consent).length>0;case vt.User:return Object.keys(e.user).length>0;case vt.Globals:return Object.keys(e.globals).length>0;case vt.Custom:return Object.keys(e.custom).length>0;default:return!1}}function ln(e,t){switch(t){case vt.Consent:case vt.User:case vt.Globals:case vt.Custom:return un(e,t);case vt.Run:case vt.Ready:return!0===e.allowed;default:return e.seenEvents.has(String(t))}}function pn(e,t){return e.cellVersion[String(t)]??0}function fn(e,t,n){let o=e.delivery.get(t);o||(o={},e.delivery.set(t,o)),o[String(n)]=pn(e,n)}function gn(e,t,n){return e.allowed&&pn(e,n)>function(e,t,n){const o=e.delivery.get(t),s=o?.[String(n)];return void 0===s?-1:s}(e,t,n)}function hn(e,t,n){const o=e.cascade;if(!o)return!0;let s=o.counts.get(t);s||(s={},o.counts.set(t,s));const r=String(n),i=(s[r]||0)+1;return s[r]=i,i<=8||(9===i&&e.logger.error("state delivery did not converge",{type:r}),!1)}function mn(e,t){return{collector:e,logger:e.logger.scope("on").scope(String(t))}}function vn(e,t,n,o,s){if(!t.on)return;const r=t.type||"unknown",i=e.logger.scope(r).scope("on").scope(o),a={collector:e,logger:i,id:n,config:t.config,data:s,env:Pn(t.env,t.config.env),reportError:Rt(e,"destination",n,i,t)};oe(t.on,t=>an(e,"destination",t,{destId:n,type:o}))(o,a)}function wn(e,t,n,o){if(!on(e))return void rn();const s=yn(e,t,o);if(n.length)switch(t){case vt.Consent:!function(e,t,n){const o=n||e.consent,s=mn(e,vt.Consent);t.forEach(t=>{gn(e,t,vt.Consent)&&hn(e,t,vt.Consent)&&(Object.keys(o).filter(e=>e in t).forEach(n=>{oe(t[n],t=>an(e,"consent",t,{key:n}))(o,s)}),fn(e,t,vt.Consent))})}(e,n,o);break;case vt.Ready:!function(e,t){if(!e.allowed)return;const n=mn(e,vt.Ready);t.forEach(t=>{oe(t,t=>an(e,"ready",t))(void 0,n)})}(e,n);break;case vt.Run:!function(e,t){if(!e.allowed)return;const n=mn(e,vt.Run);t.forEach(t=>{oe(t,t=>an(e,"run",t))(void 0,n)})}(e,n);break;case vt.Session:!function(e,t){if(!e.session)return;const n=mn(e,vt.Session);t.forEach(t=>{oe(t,t=>an(e,"session",t))(e.session,n)})}(e,n);break;default:{const o=mn(e,t),r=dn(t);n.forEach(n=>{"function"==typeof n&&(r&&!gn(e,n,t)||r&&!hn(e,n,t)||(oe(n,n=>an(e,"generic",n,{type:t}))(s,o),r&&fn(e,n,t)))});break}}}function yn(e,t,n){switch(t){case vt.Consent:return n||e.consent;case vt.Session:return e.session;case vt.User:return n||e.user;case vt.Custom:return n||e.custom;case vt.Globals:return n||e.globals;case vt.Config:return n||e.config;default:return}}async function bn(e,t,n,o,s){if(!t.on)return!1;if(dn(o)&&!gn(e,t,o))return!1;if(dn(o)&&!hn(e,t,o))return!1;const r=await se(t.on,t=>an(e,"source",t,{sourceId:n,type:o}))(o,s);return dn(o)&&fn(e,t,o),!1===r}function kn(e){return"number"==typeof e&&e>0?e:1e4}var In=class extends Error{constructor(e){super(e),this.name="DestinationTimeoutError"}};function Sn(e,t,n){let o;const s=new Promise((e,s)=>{o=setTimeout(()=>s(new In(n)),t)});return Promise.race([e,s]).finally(()=>{o&&clearTimeout(o)})}var En=Object.freeze({batched:!0});function qn(e){return e===En}function On(e){return void 0===e?{}:"number"==typeof e?{wait:e}:{wait:e.wait,size:e.size,age:e.age}}async function xn(e,t,n={},o){if(!e.allowed)return Dn({ok:!1});if(!t)return Cn(e,void 0,n,o);const s=await async function(e,t,n={}){const o=n.ingest??D(n.id||"unknown"),s=e.config.next;if(void 0===s)return{copies:[{event:t,ingest:o}],respond:n.respond};const r=await Yt(e,e.transformers||{},s,t,o,n.respond,Nn),i=r.respond??n.respond;return 0===r.copies.length?(e.logger.debug("Event dropped by collector.next"+(r.droppedBy?` (${r.droppedBy})`:"")),bt(e,t,o,r.droppedBy,Nn),{copies:[],respond:i,dropped:!0}):r.stopped?{copies:[],respond:i}:{copies:r.copies.map(t=>({event:Hn(e,t.event,t.ingest),ingest:t.ingest})),respond:i}}(e,t,n);if(0===s.copies.length)return Dn({ok:!0,...s.dropped?{dropped:!0}:{}});const r=[];for(const t of s.copies)r.push(await Cn(e,t.event,{id:n.id,ingest:t.ingest,respond:s.respond},o));return r[0]}async function Cn(e,t,n,o){const{consent:s,user:r}=e;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=xt(e.queue,t,{max:n});if(o.dropped>0){const t=$t(e.status,W("collector"),"queue",o.dropped);Tt(e.queue,e.logger,"collector.queue overflow; oldest events dropped",{buffer:"queue",cap:n,droppedCount:t})}else e.queue.length<n&&jt(e.queue);e.status.in++}o||(o=e.destinations);const i=e.transformers||{},a=await Promise.all(Object.entries(o||{}).map(async([o,a])=>{if(a.config.disabled)return{id:o,destination:a,skipped:!0};const c=a.config.id||o,d=W("destination",c),u=Mt(a.config.breaker);if(u&&function(e,t,n){const o=e[t];if(!o||"closed"===o.state)return!1;if("half-open"===o.state)return!0===o.probing;const s=Dt();return void 0!==o.openUntil&&s<o.openUntil||(o.state="half-open",o.probing=!0,o.openUntil=s+n,!1)}(e.status.breakers,d,u.cooldown))return{id:o,destination:a,skipped:!0};const l=t=>{u&&Pt(e.status.breakers,d,t,u.threshold,u.cooldown)},p=()=>{u&&function(e,t){const n=e[t];n&&"half-open"===n.state&&!0===n.probing&&(n.state="open",n.probing=!1)}(e.status.breakers,d)};let f=(a.queuePush||[]).map(e=>({...e,consent:s}));a.queuePush=[],t&&f.push(A(t));const g=n.ingest?{...n.ingest,_meta:{...n.ingest._meta,path:[...n.ingest._meta.path]}}:B("unknown");if(!f.length&&!a.queueOn?.length)return p(),{id:o,destination:a,skipped:!0};if(!f.length&&a.queueOn?.length){if(!z(a.config.consent,s))return p(),{id:o,destination:a,skipped:!0};let t=!1;try{t=await Tn(e,a,o,!0)}catch(t){e.status.failed++;const n=a.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:a,skipped:!t}}const h=[],m=f.filter(t=>{const n=z(a.config.consent,s,t.consent);if(n)return t.consent=n,h.push(t),!1;const r=yt(e,{stepId:W("destination",o),stepType:"destination",phase:"skip",eventId:"string"==typeof t.id?t.id:"",now:Date.now(),...wt(t,g,e)});return r.skipReason="consent",s&&(r.consent={...s}),a.config.consent&&(r.meta={required:{...a.config.consent}}),G(e,r),!0});if(m.length>0){const t=a.queuePush,n=a.config.id||o,s={max:a.config.queueMax??1e3};let r=0;for(const e of m)r+=xt(t,e,s).dropped;if(r>0){At(e,n);const o=$t(e.status,W("destination",n),"queue",r);Tt(t,e.logger.scope(a.type||"unknown"),"destination.queuePush overflow; oldest events dropped",{buffer:"queuePush",destination:n,cap:s.max,droppedCount:o})}else t.length<s.max&&jt(t)}if(!h.length)return p(),{id:o,destination:a,queue:f};let v,w,y=!1;try{y=await Tn(e,a,o,!0)}catch(t){e.status.failed++;const n=a.type||"unknown";e.logger.scope(n).error("destination init failed",{error:t instanceof Error?t.message:String(t)}),l("transport-failure")}if(!y)return p(),{id:o,destination:a,queue:f};a.dlq||(a.dlq=[]);const b=a.config.before,k=a.config.next,I=a.config?.cache,S=I?$(I):void 0,E=S?Bt(S,e):void 0,q=a.config?.state?Y(a.config.state):void 0,O=q?.filter(e=>"get"===e.mode),x=q?.filter(e=>"set"===e.mode);let C=0,T=0,j=0;return await Promise.all(h.map(async t=>{let s,c;if(t.user=M(r,t.user),S?.stop&&E){const e=P(g,t),n=await _(S,E,e);if("HIT"===n?.status)return t;"MISS"===n?.status&&(s={key:n.key,ttl:n.rule.ttl})}let d=[{event:t,ingest:g}],u=n.respond;if(void 0!==b){const s=`destination.${o}.before`,r=await Yt(e,i,b,t,g,n.respond,s);if(0===r.copies.length){const n=yt(e,{stepId:W("destination",o),stepType:"destination",phase:"skip",eventId:"string"==typeof t.id?t.id:"",now:Date.now(),...wt(t,g,e)});return n.skipReason="dropped",n.meta={by:r.droppedBy??"route",at:s},G(e,n),t}r.respond&&(u=r.respond),d=r.copies.map(e=>({event:e.event,ingest:e.ingest}))}const l=async(t,n,s)=>{let r=s,d=!1;if(S&&!S.stop&&E){const e=P(n,t??void 0),o=await _(S,E,e);if("HIT"===o?.status)return!1;"MISS"===o?.status&&(r={key:o.key,ttl:o.rule.ttl},d=!0)}O&&O.length>0&&t&&(t=await X(O,t=>Ht(t,e),t,e,n));const l=Date.now();let p=!1;const f=await J(jn,n=>{const s=a.type||"unknown";e.logger.scope(s).error("Push failed",{..._t(n),event:t.name}),v=n,p=!0;const r=a.dlq,i=a.config.id||o,c={max:a.config.dlqMax??100},d=xt(r,[t,n],c);if(d.dropped>0){At(e,i);const t=$t(e.status,W("destination",i),"dlq",d.dropped);Tt(r,e.logger.scope(a.type||"unknown"),"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:i,cap:c.max,droppedCount:t})}else r.length<c.max&&jt(r)})(e,a,o,t,n,u);if(C+=Date.now()-l,r&&E&&void 0===a.config.mock&&(d?R(E,r.key,f??!0,r.ttl):void 0===c&&(c=f??!0)),!p&&!qn(f)&&x&&x.length>0&&t&&(t=await X(x,t=>Ht(t,e),t,e,n)),void 0===f||qn(f)||(w=f),qn(f)&&T++,!p&&k){void 0!==f&&(n._response=f);const s=await Yt(e,i,k,t,n,u,`destination.${o}.next`);s.respond&&(u=s.respond)}return!0};for(const e of d)await l(e.event,e.ingest,s)&&j++;return s&&E&&void 0!==c&&void 0===a.config.mock&&R(E,s.key,c,s.ttl),t})),{id:o,destination:a,error:v,response:w,totalDuration:C,batchedCount:T,allowedCount:h.length,pushedCount:j,canonicalId:c,breakerConfig:u}})),c={},d={},u={};for(const t of a){if(t.skipped)continue;const n=t.destination,o={type:n.type||"unknown",data:t.response};At(e,t.id);const s=e.status.destinations[t.id],r=Date.now();s.queuePushSize=n.queuePush?.length??0,s.dlqSize=n.dlq?.length??0;const i=t.breakerConfig,a=t.canonicalId?W("destination",t.canonicalId):void 0,l=t=>{i&&a&&Pt(e.status.breakers,a,t,i.threshold,i.cooldown)};if(t.error)o.error=t.error,u[t.id]=o,s.failed++,s.lastAt=r,s.duration+=t.totalDuration||0,e.status.failed++,l("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)&&(c[t.id]=o,s.count++,s.lastAt=r,s.duration+=t.totalDuration||0,e.status.out++,l("success"))}}return Dn({event:t,...Object.keys(c).length&&{done:c},...Object.keys(d).length&&{queued:d},...Object.keys(u).length&&{failed:u}})}async function Tn(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 s=t.type||"unknown",r=e.logger.scope(s),i={collector:e,logger:r,id:n,config:t.config,env:Pn(t.env,t.config.env),reportError:Rt(e,"destination",n,r,t)};r.debug("init");const a=Date.now();let c;G(e,yt(e,{stepId:W("destination",n),stepType:"destination",phase:"init",eventId:"",now:a}));try{c=await V(t.init,"DestinationInit",e.hooks,e.logger)(i)}catch(t){const o=Date.now(),s=yt(e,{stepId:W("destination",n),stepType:"destination",phase:"error",eventId:"",now:o});throw s.durationMs=o-a,s.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},G(e,s),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:s,data:r}of o)vn(e,t,n,s,r)}r.debug("init done")}return!0}async function jn(e,t,n,o,s,r){const{config:i}=t,a=await Q(o,i,e);if(a.ignore)return!1;const c=t.type||"unknown",d=e.logger.scope(c),u={collector:e,logger:d,id:n,config:i,data:a.data,rule:a.mapping,ingest:s,env:{...Pn(t.env,i.env),...r?{respond:r}:{}},reportError:Rt(e,"destination",n,d,t)};if(void 0!==i.mock)return d.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:[]},s=On(l?.batch),r=On(i.batch),a=s.wait??r.wait??3e4,c=s.size??r.size??1e3,u=s.age??r.age??3e4,g=Pn(t.env,i.env),h=H(async()=>{const o=t.batches[f],s=o.batched;if(0===s.entries.length)return;const r={key:s.key,entries:s.entries,events:s.events,data:s.data};s.entries=[],s.events=[],s.data=[];const a=r.entries[0],c={collector:e,logger:d,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:Rt(e,"destination",n,d,t)};d.debug("push batch",{events:r.entries.length});const u=t.config.id||n,l=At(e,u),p=Mt(t.config.breaker),h=W("destination",u),m=t=>{p&&Pt(e.status.breakers,h,t,p.threshold,p.cooldown)},v=Date.now(),w=new Map;let y,b=!1;const k=n=>{const o=t.dlq=t.dlq||[],s={max:t.config.dlqMax??100};let r=0;for(const e of n)r+=xt(o,e,s).dropped;if(r>0){const t=$t(e.status,W("destination",u),"dlq",r);Tt(o,d,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:u,cap:s.max,droppedCount:t})}else o.length<s.max&&jt(o);l.failed+=n.length,l.dlqSize=o.length,e.status.failed+=n.length};let I=r.entries.length;const S=kn(i.timeout),E=await J((o,s)=>Sn(Promise.resolve(V(t.pushBatch,"DestinationPushBatch",e.hooks,e.logger)(o,s)),S,`Destination "${n}" batch delivery timed out after ${S}ms`),e=>{I=0,b=!0,y=e,k(r.entries.map(t=>[t.event,e])),m("transport-failure"),d.error("Push batch failed",{error:e instanceof Error?e.message:String(e),entries:r.entries.length})})(r,c);if(K(q=E)&&Array.isArray(q.failed)&&E.failed.length>0){const e=[];for(const t of E.failed){const n=r.entries[t.index];if(!n||w.has(t.index))continue;const o=t.error??new Error(`Push batch entry ${t.index} failed (no per-row error provided)`);w.set(t.index,o),e.push([n.event,o])}e.length>0&&(k(e),I=Math.max(0,r.entries.length-e.length),d.error("Push batch partial failure",{failed:e.length,delivered:I,entries:r.entries.length}))}var q;const O=Date.now();r.entries.forEach((t,o)=>{const s=b||w.has(o),i=wt(t.event,t.ingest,e),a=yt(e,{stepId:W("destination",n),stepType:"destination",phase:s?"error":"flush",eventId:"string"==typeof t.event.id?t.event.id:"",now:O,traceId:i.traceId,sourceId:i.sourceId,parentEventId:i.parentEventId});if(a.batch={size:r.entries.length,index:o},a.durationMs=O-v,s){const e=b?y:w.get(o);a.error=e instanceof Error?{name:e.name,message:e.message}:{message:String(e)}}G(e,a)}),d.debug("push batch done"),l.inFlightBatch=Math.max(0,(l.inFlightBatch??0)-r.entries.length),I>0&&(l.count+=I,l.lastAt=Date.now(),e.status.out+=I,m("success"))},{wait:a,size:c,age:u});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:s,respond:r,rule:l,data:a.data}),c.batched.events.push(a.event),U(a.data)&&c.batched.data.push(a.data);const u="string"==typeof a.event.id?a.event.id:"",g=wt(o,s,e),h=Date.now(),m=yt(e,{stepId:W("destination",n),stepType:"destination",phase:"in",eventId:u,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,G(e,m);const v=yt(e,{stepId:W("destination",n),stepType:"destination",phase:"out",eventId:u,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},G(e,v);const w=t.config.id||n,y=At(e,w);return y.inFlightBatch=(y.inFlightBatch??0)+1,c.batchFn(),En}{let r;if(d.debug("push",{event:a.event.name}),"trace"===e.observeLevel?.()&&Array.isArray(t.calls)&&t.calls.length>0){const e=St({...u.env,simulation:t.calls});u.env=e.wrappedEnv,r=e.calls,e.unresolved.length>0&&(e.wrappedEnv[L]={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}=wt(o,s,e),g=Date.now(),h=yt(e,{stepId:W("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,G(e,h);try{const o=kn(i.timeout),s=await Sn(Promise.resolve(V(t.push,"DestinationPush",e.hooks,e.logger)(a.event,u)),o,`Destination "${n}" delivery timed out after ${o}ms`),h=Date.now(),m=yt(e,{stepId:W("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,r&&r.length>0&&(m.calls=Ot(r)),U(s)&&(m.meta={...m.meta,response:s}),a.mappingKey&&(m.mappingKey=a.mappingKey),G(e,m),d.debug("push done"),s}catch(t){const o=Date.now(),s=yt(e,{stepId:W("destination",n),stepType:"destination",phase:"error",eventId:c,now:o,traceId:l,sourceId:p,parentEventId:f});throw s.durationMs=o-g,s.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},r&&r.length>0&&(s.calls=Ot(r)),a.mappingKey&&(s.mappingKey=a.mappingKey),G(e,s),t}}}function Dn(e){return{ok:!e?.failed,...e}}function Mn(e){const{code:t,config:n={},env:o={},cache:s,state:r}=e,{config:i}=Gt(e,"before"),{config:a}=Gt({...e,config:i},"next"),c={...t.config,...n,...a};s&&(c.cache=s),void 0!==r&&void 0===c.state&&(c.state=r);const d=Pn(t.env,o);return{...t,config:c,env:d}}function Pn(e,t){return e||t?t?e&&K(e)&&K(t)?{...e,...t}:t:e:{}}async function An(e,t,n){const o=Object.entries(e).map(async([e,o])=>{const s=o.destroy;if(!s)return;const r=o.type||"unknown",i=n.scope(r),a={id:e,config:o.config,env:o.env??{},logger:i};let c;try{await Promise.race([s(a),new Promise((n,o)=>{c=setTimeout(()=>o(new Error(`${t} '${e}' destroy timed out`)),5e3)})])}catch(n){i.error(`${t} '${e}' destroy failed: ${n}`)}finally{c&&clearTimeout(c)}});await Promise.allSettled(o)}function $n(e,t){e.stateVersion++,e.cellVersion[t]=e.stateVersion}async function _n(e,t,n){let o,s,r=!1;const i=function(e){return e.cascade?()=>{}:(e.cascade={counts:new WeakMap},()=>{e.cascade=void 0})}(e);try{return await async function(){switch(t){case vt.Config:Le(n)&&(Ge(e.config,n,{shallow:!1,merge:!1}),s=n,r=!0);break;case vt.Consent:if(Le(n)){const{update:t}=function(e,t){const n={};return Object.entries(t).forEach(([e,t])=>{n[e]=!!t}),e.consent=j(e.consent,n),{update:n}}(e,n);$n(e,vt.Consent),s=t,r=!0}break;case vt.Custom:Le(n)&&(e.custom=Ge(e.custom,n),$n(e,vt.Custom),s=n,r=!0);break;case vt.Destination:Le(n)&&"code"in n&&Le(n.code)&&(o=await async function(e,t){const{code:n,config:o={},env:s={},before:r,next:i,cache:a,state:c}=t;if(!F(n.push))return Dn({ok:!1,failed:{invalid:{type:"invalid",error:"Destination code must have a push method"}}});const d=o||{init:!1};let u=r?{...d,before:r}:{...d};i&&(u={...u,next:i}),a&&(u={...u,cache:a}),void 0!==c&&void 0===u.state&&(u={...u,state:c});let l=u.id;if(!l)do{l=N(5,"abcdefghijklmnopqrstuvwxyz")}while(e.destinations[l]||e.pending.destinations[l]);if(u.require?.length){e.pending.destinations[l]=t,await nn(e);const n=e.destinations[l];return n?xn(e,void 0,{},{[l]:n}):Dn({ok:!0})}const p={...n,config:u,env:Pn(n.env,s)};return e.destinations[l]=p,!1!==p.config.queue&&(p.queuePush=[...e.queue]),xn(e,void 0,{},{[l]:p})}(e,n));break;case vt.Globals:Le(n)&&(e.globals=Ge(e.globals,n),$n(e,vt.Globals),s=n,r=!0);break;case vt.Hook:if(Le(n)&&Ke(n.name)&&Fe(n.fn)){const{name:t,fn:o}=n;e.hooks[t]=o,s=n,r=!0}break;case vt.On:if(Le(n)&&Ke(n.type)){const{type:t,rules:o}=n;await async function(e,t,n){if(!on(e))return void rn();const o=e.on,s=o[t]||[],r=te(n)?n:[n];r.forEach(e=>{s.push(e)}),o[t]=s,wn(e,t,r)}(e,t,o)}break;case vt.Ready:r=!0;break;case vt.Run:o=await async function(e,t){e.allowed=!0,e.timing=Date.now(),e.trace=ze(),e.count=0,t&&(t.consent&&(e.consent=Ge(e.consent,t.consent),$n(e,vt.Consent)),t.user&&(e.user=Ge(e.user,t.user),$n(e,vt.User)),t.globals&&(e.globals=Ge(e.config.globalsStatic||{},t.globals),$n(e,vt.Globals)),t.custom&&(e.custom=Ge(e.custom,t.custom),$n(e,vt.Custom))),Object.values(e.destinations).forEach(e=>{e.queuePush=[]}),e.queue=[],e.round++,await nn(e),await async function(e){if(on(e))for(const t of cn){if(!un(e,t))continue;const n=yn(e,t);wn(e,t,e.on[t]||[]);for(const[o,s]of Object.entries(e.sources))en(s)&&await bn(e,s,o,t,n)}else rn()}(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:s,options:r}of t){const t=await e.push(s,r);!1===t.ok&&(n=!1),t.failed&&Object.assign(o,t.failed)}}const s=await xn(e);if(n)return s;const r={...s.failed??{},...o};return{...s,ok:!1,...Object.keys(r).length>0?{failed:r}:{}}}(e,n),r=!0;break;case vt.Session:r=!0;break;case vt.Shutdown:e.hasShutdown||(e.hasShutdown=!0,await async function(e){const t=e.logger;await An(e.sources,"source",t),await async function(e,t){const n=Object.entries(e).flatMap(([e,n])=>{const o=n.batches;if(!o)return[];const s=t.scope(n.type||"destination");return Object.values(o).map(async t=>{let n;try{await Promise.race([t.flush(),new Promise((t,o)=>{n=setTimeout(()=>o(new Error(`destination '${e}' batch flush timed out`)),5e3)})])}catch(t){s.error(`destination '${e}' batch flush failed: ${t}`)}finally{n&&clearTimeout(n)}})});await Promise.allSettled(n)}(e.destinations,t),await An(e.destinations,"destination",t),await An(e.transformers,"transformer",t),await An(e.stores,"store",t)}(e));break;case vt.User:Le(n)&&(Ge(e.user,n,{shallow:!1}),$n(e,vt.User),s=n,r=!0);break;default:return e.logger.warn("unknown command",{command:t}),Dn({ok:!1})}if(r){await async function(e,t,n,o){if(!on(e))return rn(),!0;e.seenEvents.add(String(t));let s=n||[];n||(s=e.on[t]||[]);const r=yn(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&&(en(o)?await bn(e,o,n,t,r)&&(i=!0):(o.queueOn=o.queueOn||[],o.queueOn.push({type:t,data:r})))}Object.entries(e.destinations).forEach(([n,o])=>{if(o.on){if(!o.config.init)return o.queueOn=o.queueOn||[],void o.queueOn.push({type:t,data:r});vn(e,o,n,t,r)}});for(const[t,n]of Object.entries(e.sources))en(n)&&n.queueOn?.length&&await Zt(e,n,t);const a=Object.values(e.sources).some(e=>!en(e)&&e.config.require?.length);return(Object.keys(e.pending.destinations).length>0||a)&&await nn(e),wn(e,t,s,o),!i}(e,t,void 0,s);const n=await xn(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||Dn({ok:!0})}()}finally{i()}}function Rn(e,t){return{timing:Math.round((Date.now()-e.timing)/10)/100,source:{type:"collector",schema:"4"},...t}}function Bn(e,t,n){return Gn(e,t,n,{globals:e.globals,user:e.user,consent:e.consent})}function Hn(e,t,n){return Gn(e,Rn(e,t),n,{globals:{},user:{},consent:{}})}function Gn(e,t,n,o){const s=t.name;if("string"!=typeof s)throw new Ue(void 0===s?"Event name is required":"Event name is invalid");if(!s)throw new Ue("Event name is required");const[r,i]=s.split(" ");if(!r||!i)throw new Ue("Event name is invalid");const{timestamp:a=Date.now(),name:c=`${r} ${i}`,data:d={},context:u={},globals:l={},custom:p={},user:f=o.user,nested:g=[],consent:h=o.consent,id:m=Ne(),trigger:v="",entity:w=r,action:y=i,timing:b=0,source:k={type:"collector",schema:"4"}}=t,I=k??{type:"collector",schema:"4"},S=I.count??(e.count+=1),E=I.trace??n?._meta.trace??e.trace,q={...I,count:S};void 0!==E&&(q.trace=E);const O=e.name??I.platform??"default",x=e.release??"4.7.0-next-1790187973605";return q.release={...I.release,[O]:x},{name:c,data:d,context:u,globals:Ge(o.globals,l),custom:p,user:f,nested:g,consent:h,id:m,trigger:v,entity:w,action:y,timestamp:a,timing:b,source:q}}var Nn="collector.next";function zn(e,t){const n=at(async(n,o={})=>await it(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 s=xt(e.preRunQueue,{event:n,options:o},{max:t});if(s.dropped>0){const n=$t(e.status,"collector.preRun","queue",s.dropped);Tt(e.preRunQueue,e.logger,"collector.preRunQueue overflow; oldest events dropped",{buffer:"queue",cap:t,droppedCount:n})}else e.preRunQueue.length<t&&jt(e.preRunQueue);return e.logger.debug("event held until run",{name:n.name,dropped:s.dropped}),Dn({ok:!0})}const s=Date.now(),{id:r,ingest:i,respond:a,mapping:c,preChain:d,include:u,exclude:l}=o;let p=a,f=n;const g=u||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,u,l):void 0;let h=i??Ze(r||"unknown");if(c){const t=await rt(f,c,e);if(t.ignore)return Dn({ok:!0});if(c.consent&&!nt(c.consent,e.consent,t.event.consent))return Dn({ok:!0});f=t.event}if(void 0!==d){const n=r?`source.${r}.next`:void 0,o=await Yt(e,e.transformers||{},d,f,h,p,n);if(0===o.copies.length)return e.logger.debug("Event dropped by transformer chain"+(o.droppedBy?` (${o.droppedBy})`:"")),bt(e,f,h,o.droppedBy,n??"collector.push.preChain"),Dn({ok:!0,dropped:!0});if(o.stopped)return o.respond&&(p=o.respond),Dn({ok:!0});if(o.respond&&(p=o.respond),o.copies.length>1){const n=await Promise.all(o.copies.map(async n=>{const o=Bn(e,t(n.event),n.ingest);return xn(e,o,{id:r,ingest:n.ingest,respond:p},g)}));if(r){e.status.sources[r]||(e.status.sources[r]={count:0,duration:0});const t=e.status.sources[r];t.count+=o.copies.length,t.lastAt=Date.now(),t.duration+=Date.now()-s}return n[0]??Dn({ok:!0})}f=o.copies[0].event,h=o.copies[0].ingest}const m=function(e,t,n){return Bn(e,Rn(e,t),n)}(e,f,h),v=await xn(e,m,{id:r,ingest:h,respond:p},g);if(r){e.status.sources[r]||(e.status.sources[r]={count:0,duration:0});const t=e.status.sources[r];t.count++,t.lastAt=Date.now(),t.duration+=Date.now()-s}return v},t=>{if(t instanceof tt)throw t;if(t instanceof st){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}),Dn({ok:!1,invalid:!0,error:t.message})}return e.status.failed++,e.logger.error("push failed",{..._t(t),event:n.name}),Dn({ok:!1})})(),"Push",e.hooks,e.logger);return async(t,o)=>{const s="string"==typeof t.id&&""!==t.id?t:{...t,id:ot()},r="string"==typeof s.id?s.id:"",{traceId:i,sourceId:a,parentEventId:c}=wt(s,o?.ingest,e),d=Date.now(),u=yt(e,{stepId:"collector.push",stepType:"collector",phase:"in",eventId:r,now:d,traceId:i,sourceId:a,parentEventId:c});u.inEvent=s,et(e,u);try{const t=await n(s,o),u=Date.now(),l=yt(e,{stepId:"collector.push",stepType:"collector",phase:"out",eventId:r,now:u,traceId:i,sourceId:a,parentEventId:c});return l.durationMs=u-d,l.outEvent=t,et(e,l),t}catch(t){const n=Date.now(),o=yt(e,{stepId:"collector.push",stepType:"collector",phase:"error",eventId:r,now:n,traceId:i,sourceId:a,parentEventId:c});throw o.durationMs=n-d,o.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},et(e,o),t}}}function Un(e={}){const t=e.maxEntries??1e4,n=e.lowWaterMark??.8,o=e.sweepIntervalMs??6e4,s=Math.floor(t*n),r=new Map,i={hits:0,misses:0,populates:0,writes:0,deletes:0,evictions_entries:0,evictions_ttl:0};let a;return o>0&&(a=setInterval(function(){const e=Date.now();let t=0;for(const[n,o]of r)void 0!==o.expires&&o.expires<=e&&(r.delete(n),t++);i.evictions_ttl+=t},o),a&&"function"==typeof a.unref&&a.unref()),{type:"memory",config:{},get(e){const t=r.get(e);if(t)return void 0!==t.expires&&t.expires<=Date.now()?(r.delete(e),i.evictions_ttl++,void i.misses++):(r.delete(e),r.set(e,t),i.hits++,t.value);i.misses++},set(e,n,o){const a=!r.has(e);a||r.delete(e),r.set(e,{value:n,expires:void 0!==o?Date.now()+o:void 0}),i.writes++,a&&i.populates++,r.size>t&&function(){if(r.size<=t)return;const e=r.size-s;let n=0;for(const t of r.keys()){if(n>=e)break;r.delete(t),n++}i.evictions_entries+=n}()},delete(e){r.delete(e)&&i.deletes++},get counters(){return{...i}},destroy(){void 0!==a&&(clearInterval(a),a=void 0),r.clear()}}}function Fn(e,t){const{cacheConfig:n,cacheStore:o,namespace:s,logger:r,storeId:i,collector:a}=t,c=(e,t)=>{if(!a)return;const n=yt(a,{stepId:`store.${i}`,stepType:"store",phase:"in",eventId:"",now:Date.now()});n.meta={op:"cache",cached:"hit"===t,status:t,key:e},gt(a,n)},d={hits:0,misses:0,populates:0,writes:0,deletes:0,inflight_dedups:0},u=n.rules.map(e=>({match:e.match?ft(e.match):()=>!0,ttl:e.ttl})),l=e=>`${s}:${e}`;function p(e,t){const n=void 0===t?{key:e}:{key:e,value:t};return u.find(e=>e.match(n))}const f=new Map;return{type:e.type,config:e.config,setup:e.setup,get counters(){return{...d}},async get(t){const n=l(t),s=await o.get(n),r=ht(s);if(void 0!==r){if(!("expired"in r))return d.hits++,c(t,"hit"),r.value;try{await o.delete(n)}catch(e){g("delete",t,e)}}const i=f.get(n);if(i)return d.inflight_dedups++,c(t,"hit"),i;d.misses++,c(t,"miss");const a=(async()=>{try{const s=await e.get(t);if(void 0===s)return;const r=p(t,s);if(r)try{const e=1e3*r.ttl;await o.set(n,mt(s,e),e),d.populates++}catch(e){g("set",t,e)}return s}finally{f.delete(n)}})();return f.set(n,a),a},async set(t,n,s){d.writes++,await e.set(t,n,s);const r=p(t,n);if(r)try{const e=1e3*r.ttl;await o.set(l(t),mt(n,e),e)}catch(e){g("set",t,e)}},async delete(t){d.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`;r?r.warn(o,_t(n)):console.warn(o,n)}}function Kn(e,t,n){const o=`store.${n}`,s=pt(t.get,"StoreGet",e.hooks,e.logger),r=pt(t.set,"StoreSet",e.hooks,e.logger),i=pt(t.delete,"StoreDelete",e.hooks,e.logger);t.get=async t=>{const n=Date.now(),r=yt(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:n});r.meta={op:"get",key:t},lt(e,r);try{const r=await s(t),i=Date.now(),a=yt(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:i});return a.durationMs=i-n,a.meta={op:"get",key:t},lt(e,a),r}catch(s){const r=Date.now(),i=yt(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:r});throw i.durationMs=r-n,i.meta={op:"get",key:t},i.error=s instanceof Error?{name:s.name,message:s.message}:{message:String(s)},lt(e,i),s}},t.set=async(t,n,s)=>{const i=Date.now(),a=yt(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:i});a.meta={op:"set",key:t},lt(e,a);try{await r(t,n,s);const a=Date.now(),c=yt(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:a});c.durationMs=a-i,c.meta={op:"set",key:t},lt(e,c)}catch(n){const s=Date.now(),r=yt(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:s});throw r.durationMs=s-i,r.meta={op:"set",key:t},r.error=n instanceof Error?{name:n.name,message:n.message}:{message:String(n)},lt(e,r),n}},t.delete=async t=>{const n=Date.now(),s=yt(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:n});s.meta={op:"delete",key:t},lt(e,s);try{await i(t);const s=Date.now(),r=yt(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:s});r.durationMs=s-n,r.meta={op:"delete",key:t},lt(e,r)}catch(s){const r=Date.now(),i=yt(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:r});throw i.durationMs=r-n,i.meta={op:"delete",key:t},i.error=s instanceof Error?{name:s.name,message:s.message}:{message:String(s)},lt(e,i),s}}}async function Ln(e){const t=Ye({globalsStatic:{},sessionStatic:{},run:!0,queueMax:1e3},e,{merge:!1,extend:!1}),n={level:e.logger?.level,handler:e.logger?.handler},o=Xe(n),s={...t.globalsStatic,...e.globals},r={allowed:!1,config:t,consent:e.consent||{},custom:e.custom||{},destinations:{},transformers:{},stores:{},globals:s,hooks:e.hooks||{},observers:new Set,logger:o,on:{},queue:[],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&&(r.name=e.name),void 0!==e.release&&(r.release=e.release),void 0!==e.next&&(t.next=e.next),r.push=zn(r,e=>Rn(r,e)),r.command=(a=_n,dt(async(e,t,n)=>await ut(async()=>await a(i,e,t,n),t=>{if(t instanceof ct)throw t;return i.status.failed++,i.logger.error("command failed",{..._t(t),command:e}),Dn({ok:!1})})(),"Command",(i=r).hooks,i.logger)),r.elb=function(e){return async(t,n,o,s,r)=>{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 Dn({ok:!1});i={...t},n&&"object"==typeof n&&!Array.isArray(n)&&(i.data={...i.data||{},...n})}return o&&"object"==typeof o&&(i.context=o),s&&Array.isArray(s)&&(i.nested=s),r&&"object"==typeof r&&(i.custom=r),e.push(i)}}(r);const c=e.stores||{};return r.stores=await async function(e,t={}){const n={};for(const[o,s]of Object.entries(t)){const{code:t,config:r={},env:i={}}=s,a=e.logger.scope("store").scope(o),c={collector:e,logger:a,id:o,config:r,env:i,reportError:Rt(e,"store",o,a)},d=await t(c);n[o]=d}const o=t,s=function(e){const t={};for(const n of Object.keys(e))t[n]="WHITE";const n=[],o=[];function s(r){const i=t[r];if("BLACK"===i)return;if("GRAY"===i){const e=o.indexOf(r),t=o.slice(-1===e?0:e).concat(r).join(" -> ");throw new Error(`Cycle in cache.store chain: ${t}`)}t[r]="GRAY",o.push(r);const a=e[r].cache?.store;if(void 0!==a){if(!(a in e))throw new Error(`Store "${r}" cache.store references "${a}", which is not declared in flow.stores`);s(a)}o.pop(),t[r]="BLACK",n.push(r)}for(const n of Object.keys(e))"WHITE"===t[n]&&s(n);return n}(o);for(const t of s){const s=o[t].cache;if(!s)continue;let r,i;void 0!==s.store?(r=n[s.store],i=s.store):(n.__cache||(n.__cache=Un()),r=n.__cache,i="__cache");const a=s.namespace??t;e.logger.scope("store-cache").scope(t).info(`store "${t}" caches with namespace "${a}:" via ${i}`),n[t]=Fn(n[t],{storeId:t,cacheConfig:s,cacheStore:r,namespace:a,logger:e.logger.scope("store-cache").scope(t),collector:e})}for(const[t,o]of Object.entries(n))"__cache"!==t&&Kn(e,o,t);return n}(r,c),function(e,t,n){const o=new Map;for(const[n,s]of Object.entries(e))t[n]&&o.set(s,t[n]);if(0!==o.size)for(const e of[n.transformers,n.destinations,n.sources])if(e)for(const t of Object.values(e))s(t.env);function s(e){if(e)for(const[t,n]of Object.entries(e))if("object"==typeof n&&null!==n){const s=o.get(n);s&&(e[t]=s)}}}(c,r.stores,e),r.stores.__cache||(r.stores.__cache=Un()),r.destinations=await async function(e,t={}){const n={};for(const[o,s]of Object.entries(t))s.config?.require?.length?e.pending.destinations[o]=s:n[o]=Mn(s);return n}(r,e.destinations||{}),r.transformers=await async function(e,t={}){const n={};for(const[o,s]of Object.entries(t)){const{code:t,env:r={}}=s,i=_e(s,"Transformer");if(!i.ok){e.logger.warn(`Transformer ${o} invalid (${i.code}): ${i.reason}. Skipping.`);continue}const{config:a}=Gt(s,"before"),{config:c}=Gt({...s,config:a},"next"),d=Object.keys(r).length>0?{...c,env:r}:c,{cache:u}=s,l=u?{...d,cache:u}:d,p=s.config?.state??s.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:Ie(o),config:f,env:r,reportError:Rt(e,"transformer",o,g)},m=t??(e=>{const t=s.mapping;if(t){const n=[];if(void 0!==t.data&&n.push("data"),t.mapping)for(const[e,o]of Object.entries(t.mapping))if("object"==typeof o&&null!==o)for(const[t,s]of Object.entries(o)){if("object"!=typeof s||null===s)continue;const o=s;void 0!==o.data&&n.push(`mapping[${e}][${t}].data`),void 0!==o.silent&&n.push(`mapping[${e}][${t}].silent`)}return n.length>0&&e.collector.logger.warn(`Transformer ${o}: \`${n.join(", ")}\` ignored at transformer position (only event-mutating fields apply).`),{type:"pass",config:e.config,push:async n=>{const o=await Re(n,t,e.collector);return!o.ignore&&{event:o.event}}}}return{type:"pass",config:e.config,push:e=>({event:e})}}),v=await m(h);void 0!==s.before&&void 0===v.config?.before&&(v.config={...v.config??{},before:s.before}),void 0!==s.next&&void 0===v.config?.next&&(v.config={...v.config??{},next:s.next}),void 0!==p&&void 0===v.config?.state&&(v.config={...v.config??{},state:p}),n[o]=v}return n}(r,e.transformers||{}),r}var Qn=globalThis;function Wn(e){try{const t=Qn.window;if(!t)return;t.localStorage.getItem(Qe)===e&&t.localStorage.removeItem(Qe)}catch{}}function Jn(e,t){return void 0===t?e:n=>e({...n,release:t})}async function Vn(e){e=e||{};const t=await Ln(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=Qn.window,t=Qn.URLSearchParams;if(!e||!t)return null;try{const n=new t(e.location.search.replace(/^\?/,"")).getAll(Qe);return n.length>0?n[n.length-1]??null:null}catch{return null}}(),s=t??function(){try{return Qn.window?.localStorage.getItem(Qe)??null}catch{return null}}();if(!s)return;const r=Ve(s);if(!r)return void(null===t?(e.logger.warn("observe: malformed stored credential cleared"),Wn(s)):e.logger.warn("observe: malformed credential ignored"));if(r.pb!==n.binding)return void e.logger.warn("observe: credential binding mismatch, credential ignored");let i;!function(e){try{Qn.window?.localStorage.setItem(Qe,e)}catch{}}(s),null!==t&&function(){const e=Qn.window,t=Qn.URLSearchParams;if(e&&t)try{const n=e.location.href,o=n.indexOf("#"),s=o>=0?n.slice(o):"",r=o>=0?n.slice(0,o):n,i=r.indexOf("?"),a=i>=0?r.slice(0,i):r,c=new t(i>=0?r.slice(i+1):"");c.delete(Qe);const d=c.toString();e.history.replaceState({},"",`${a}${d?`?${d}`:""}${s}`)}catch{}}();const a=We({url:`${n.url}/ingest/${r.ses}`,token:r.secret,headers:{"X-Walkeros-Binding":n.binding},onStatus:t=>{401===t&&(Wn(s),i&&e.observers.delete(i))}});i=Je(function(e,t){return void 0===t?e:n=>e({...n,flowId:t})}(Jn(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 s=n.level;void 0!==s&&(e.observeLevel=()=>s),e.observers.add(Je(Jn(We({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,s]of Object.entries(t)){const t=await tn(e,o,s);if(!t)continue;const r=s.config?.require;t.config={...t.config,init:!1,...r?{require:[...r]}:{}},n[o]=t}Object.assign(e.sources,n);for(const t of Object.keys(n)){const n=e.sources[t];let o=!1;n.init&&await pe(n.init.bind(n),n=>{if(n instanceof ae)throw n;o=!0,e.status.failed++,e.logger.scope("source").error("source init failed",{sourceId:t,..._t(n)})})(),o||(n.config.init=!0,en(n)&&await Zt(e,n,t))}return await nn(e),n}(t,e.sources||{});const{consent:n,user:o,globals:s,custom:r}=e;n&&await t.command("consent",n),o&&await t.command("user",o),s&&await t.command("globals",s),r&&await t.command("custom",r),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 Yn=async e=>{let t;return{get flow(){return t},trigger:()=>async n=>{if(!t){const n=await Vn(e);t={collector:n.collector,elb:n.elb}}const o=function(e){for(const t of Object.values(e.sources||{}))if("lambda"===t.type)return t}(t.collector);if(!o)throw new Error("Lambda source not found in collector");const s={awsRequestId:`test-${Date.now()}`},r=o.push,i=await r(n,s);let a;try{a=JSON.parse(i.body||"{}")}catch{a=i.body}const c={};if(i.headers)for(const[e,t]of Object.entries(i.headers))void 0!==t&&(c[e]=String(t));return{statusCode:i.statusCode,body:a,headers:c}}}};function Xn(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:()=>fo,env:()=>eo,step:()=>io});var eo={};t(eo,{push:()=>so,simulation:()=>ro});var to=()=>{},no={error:to,warn:to,info:to,debug:to,throw:e=>{throw"string"==typeof e?new Error(e):e},json:to,scope:()=>no},oo=()=>()=>Promise.resolve({ok:!0}),so={get push(){return oo()},get command(){return oo()},get elb(){return oo()},logger:no},ro=["AWS.SQSClient"],io={};t(io,{decoderText:()=>uo,malformedJson:()=>lo,orderComplete:()=>co,pageView:()=>ao});var ao={title:"Page view from SQS",description:"A standard SQS message body containing a walker elb event payload as JSON.",in:{MessageId:"m-1",Body:JSON.stringify({event:"page view",data:{title:"Documentation",url:"https://example.com/docs"}})},out:[["message.ack","m-1"]]},co={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"]]},uo={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"]]},lo={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 po(e){if("object"!=typeof e||null===e)return!1;const t=e;return"sqs"===t.type&&"function"==typeof t.push}var fo=async e=>{let t;return{get flow(){return t},trigger:()=>async n=>{if(!t){const n=await Vn(e);t={collector:n.collector,elb:n.elb}}const o=function(e){for(const t of Object.values(e.sources??{}))if(po(t))return t}(t.collector);if(!o)throw new Error("sqs source not registered in collector, ensure it is configured in sources");const s={MessageId:n.MessageId,Body:n.Body,ReceiptHandle:n.ReceiptHandle,Attributes:n.Attributes,MessageAttributes:n.MessageAttributes},r=await o.push(s),i=[];return r&&"object"==typeof r&&(r.acked&&i.push(["message.ack",n.MessageId]),r.nacked&&i.push(["message.nack",n.MessageId])),i}}};export{y as examples,n as schemas,Zn as sqsExamples};//# sourceMappingURL=dev.mjs.map
|
package/dist/dev.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/schemas.ts","../src/lambda/schemas/index.ts","../src/lambda/schemas/settings.ts","../src/lambda/schemas/primitives.ts","../src/sqs/schemas/index.ts","../src/sqs/schemas/settings.ts","../src/sqs/schemas/setup.ts","../src/lambda/examples/index.ts","../src/lambda/examples/env.ts","../src/lambda/examples/step.ts","../src/lambda/examples/trigger.ts","../src/sqs/examples/index.ts","../src/sqs/examples/env.ts","../src/sqs/examples/step.ts","../src/sqs/examples/trigger.ts"],"sourcesContent":["// Lambda (default sub-source).\nexport { settings, SettingsSchema, type Settings } from './lambda/schemas';\nexport * from './lambda/schemas/primitives';\n\n// SQS sub-source. Prefixed so the website's <Configuration> snippet can\n// remap data.schemas.sqsSettings / sqsSetup onto data.schemas.settings.\nexport { settings as sqsSettings } from './sqs/schemas';\nexport { setup as sqsSetup } from './sqs/schemas';\n","import { zodToSchema } from '@walkeros/core/dev';\nimport { SettingsSchema } from './settings';\n\n// Export primitives\nexport * from './primitives';\n\n// Export Zod schemas and types\nexport { SettingsSchema, type Settings } from './settings';\n\n// JSON Schema exports (for website PropertyTable and documentation tools)\nexport const settings = zodToSchema(SettingsSchema);\n","import { z } from '@walkeros/core/dev';\nimport { CorsOptionsSchema } from './primitives';\n\n/**\n * AWS Lambda source settings schema\n */\nexport const SettingsSchema = z.object({\n cors: z\n .union([z.boolean(), CorsOptionsSchema])\n .describe(\n 'CORS configuration: false = disabled, true = allow all origins, object = custom configuration',\n )\n .default(true),\n\n timeout: z\n .number()\n .int()\n .positive()\n .max(900000) // AWS Lambda max timeout: 15 minutes\n .describe('Request timeout in milliseconds (max: 900000 for Lambda)')\n .default(30000),\n\n enablePixelTracking: z\n .boolean()\n .describe(\n 'Enable GET requests with 1x1 transparent GIF response for pixel tracking',\n )\n .default(true),\n\n maxBatchSize: z\n .number()\n .int()\n .min(1)\n .describe('Maximum number of events accepted in a single batch request')\n .default(100),\n\n healthPath: z\n .string()\n .describe('Health check endpoint path (e.g., /health)')\n .default('/health'),\n});\n\nexport type Settings = z.infer<typeof SettingsSchema>;\n","import { z } from '@walkeros/core/dev';\n\n/**\n * HTTP methods enum\n */\nexport const HttpMethod = z.enum([\n 'GET',\n 'POST',\n 'PUT',\n 'PATCH',\n 'DELETE',\n 'OPTIONS',\n 'HEAD',\n]);\n\n/**\n * CORS origin configuration\n * Accepts:\n * - '*' for all origins\n * - Single URL string\n * - Array of URL strings\n */\nexport const CorsOrigin = z.union([\n z.string(),\n z.array(z.string()),\n z.literal('*'),\n]);\n\n/**\n * CORS options schema\n * Configuration for Cross-Origin Resource Sharing\n */\nexport const CorsOptionsSchema = z.object({\n origin: CorsOrigin.describe(\n 'Allowed origins (* for all, URL string, or array of URLs)',\n ).optional(),\n\n methods: z.array(HttpMethod).describe('Allowed HTTP methods').optional(),\n\n headers: z.array(z.string()).describe('Allowed request headers').optional(),\n\n credentials: z\n .boolean()\n .describe('Allow credentials (cookies, authorization headers)')\n .optional(),\n\n maxAge: z\n .number()\n .int()\n .positive()\n .describe('Preflight cache duration in seconds')\n .optional(),\n});\n\nexport type CorsOptions = z.infer<typeof CorsOptionsSchema>;\n","import { zodToSchema } from '@walkeros/core/dev';\nimport { SettingsSchema } from './settings';\nimport { SetupSchema } from './setup';\n\nexport { SettingsSchema, type Settings } from './settings';\nexport { SetupSchema, type Setup } from './setup';\n\n// JSON Schema exports (for website PropertyTable + MCP package_get).\nexport const settings = zodToSchema(SettingsSchema);\nexport const setup = zodToSchema(SetupSchema);\n","import { z } from '@walkeros/core/dev';\n\n/**\n * AWS SQS source settings schema.\n *\n * Required: queueName. All other fields optional with sensible defaults\n * applied at runtime by `getConfig`.\n */\nexport const SettingsSchema = z.object({\n queueName: z\n .string()\n .min(1)\n .describe(\n 'SQS queue short name (like walkeros-events). Required for both setup and runtime poll.',\n ),\n region: z\n .string()\n .describe('AWS region (like eu-central-1). Default: eu-central-1.')\n .optional(),\n queueUrl: z\n .string()\n .url()\n .describe(\n 'Optional pre-resolved queue URL. When set, init skips the GetQueueUrl lookup.',\n )\n .optional(),\n client: z\n .any()\n .describe(\n 'Pre-configured AWS SQSClient instance. Bypasses construction when supplied.',\n )\n .optional(),\n config: z\n .any()\n .describe(\n 'AWS SDK SQSClientConfig (credentials, endpoint overrides, retries).',\n )\n .optional(),\n decoder: z\n .enum(['json', 'text', 'raw'])\n .describe(\n 'Decoder for the message body. json (default) parses JSON, text forwards UTF-8, raw forwards a Buffer.',\n )\n .optional(),\n maxMessages: z\n .number()\n .int()\n .min(1)\n .max(10)\n .describe('SQS receive batch size. Cap 10. Default: 10.')\n .optional(),\n waitTimeSeconds: z\n .number()\n .int()\n .min(0)\n .max(20)\n .describe('Long-poll duration in seconds. Cap 20. Default: 20.')\n .optional(),\n visibilityTimeout: z\n .number()\n .int()\n .nonnegative()\n .describe(\n 'Per-receive visibility timeout override. Default: queue-configured value.',\n )\n .optional(),\n shutdownTimeoutMs: z\n .number()\n .int()\n .positive()\n .describe(\n 'Graceful shutdown timeout in milliseconds. Default: 30000. After this window, destroy() force-closes.',\n )\n .optional(),\n onPushError: z\n .enum(['nack', 'ack'])\n .describe(\n 'Behavior when forwarding to the collector throws. nack (default) skips DeleteMessage so the message redelivers; ack drops it.',\n )\n .optional(),\n});\n\nexport type Settings = z.infer<typeof SettingsSchema>;\n","import { z } from '@walkeros/core/dev';\n\n/**\n * AWS SQS source setup schema.\n *\n * Provisioning options for `walkeros setup source.<id>`. Authoritative-apply:\n * declared state is written via a single CreateQueueCommand; non-declared\n * tags or attributes are left untouched.\n */\nconst TagsSchema = z.record(z.string(), z.string());\n\nexport const SetupSchema = z.object({\n region: z.string().min(1).describe('AWS region.').optional(),\n fifoQueue: z\n .boolean()\n .describe(\n 'FIFO queue with content-based deduplication. Auto-appends .fifo suffix to the queue name.',\n )\n .optional(),\n visibilityTimeoutSeconds: z\n .number()\n .int()\n .nonnegative()\n .describe('Visibility timeout in seconds. Default: 30.')\n .optional(),\n messageRetentionSeconds: z\n .number()\n .int()\n .positive()\n .describe('Message retention period in seconds. Default: 345600 (4 days).')\n .optional(),\n maximumMessageSize: z\n .number()\n .int()\n .min(1024)\n .max(262144)\n .describe('Max message size in bytes. Default: 262144 (256 KB).')\n .optional(),\n kmsMasterKeyId: z\n .string()\n .describe('KMS key alias or ID for at-rest encryption.')\n .optional(),\n deadLetterQueue: z\n .object({\n arn: z\n .string()\n .describe(\n 'ARN of an existing DLQ. Mutually exclusive with create: true.',\n )\n .optional(),\n create: z\n .boolean()\n .describe('Create a sibling DLQ named <queueName>-dlq. Default: false.')\n .optional(),\n maxReceiveCount: z\n .number()\n .int()\n .min(1)\n .max(1000)\n .describe('Max receive count before message goes to DLQ. Default: 5.')\n .optional(),\n })\n .describe('Optional dead-letter queue.')\n .optional(),\n tags: TagsSchema.describe(\n 'Tags applied to the queue (and inherited by an auto-created DLQ).',\n ).optional(),\n subscribeToSnsTopic: z\n .object({\n topicArn: z.string().min(1).describe('Topic ARN to subscribe to.'),\n rawMessageDelivery: z\n .boolean()\n .describe('Deliver SNS messages without the SNS envelope.')\n .optional(),\n filterPolicy: z\n .record(z.string(), z.unknown())\n .describe('SNS filter policy applied at subscription level.')\n .optional(),\n })\n .describe(\n 'Optional SNS topic subscription. Creates the subscription and the matching queue policy.',\n )\n .optional(),\n});\n\nexport type Setup = z.infer<typeof SetupSchema>;\n","export * as env from './env';\nexport * as step from './step';\nexport { createTrigger, trigger } from './trigger';\n","import type { Env } from '../types';\nimport type { Elb, Logger } from '@walkeros/core';\n\n/**\n * Example environment configurations for AWS Lambda source\n *\n * These environments provide standardized mock structures for testing\n * Lambda event handling without requiring actual Lambda deployment.\n */\n\n// Create a properly typed elb/push/command function that returns a promise with PushResult\nconst createMockElbFn = (): Elb.Fn => {\n const fn = (() =>\n Promise.resolve({\n ok: true,\n })) as Elb.Fn;\n return fn;\n};\n\n// Simple no-op logger for demo purposes\nconst noopFn = () => {};\nconst noopLogger: Logger.Instance = {\n error: noopFn,\n warn: noopFn,\n info: noopFn,\n debug: noopFn,\n throw: (message: string | Error) => {\n throw typeof message === 'string' ? new Error(message) : message;\n },\n json: noopFn,\n scope: () => noopLogger,\n};\n\n/**\n * Standard mock environment for testing Lambda source\n *\n * Use this for testing Lambda event ingestion and request/response handling\n * without requiring a real AWS Lambda environment.\n */\nexport const push: Env = {\n get push() {\n return createMockElbFn();\n },\n get command() {\n return createMockElbFn();\n },\n get elb() {\n return createMockElbFn();\n },\n logger: noopLogger,\n};\n","import type { Flow } from '@walkeros/core';\n\nexport const lambdaPost: Flow.StepExample = {\n title: 'Lambda POST',\n description:\n 'An API Gateway v2 HTTP POST with a JSON body is converted into a walker elb event.',\n trigger: { type: 'POST' },\n in: {\n version: '2.0',\n requestContext: {\n http: { method: 'POST', path: '/collect' },\n requestId: 'req-123',\n },\n body: JSON.stringify({\n name: 'page view',\n data: { title: 'Home' },\n }),\n isBase64Encoded: false,\n },\n out: [\n [\n 'elb',\n {\n name: 'page view',\n data: { title: 'Home' },\n },\n ],\n ],\n};\n\nexport const apiGatewayV1Post: Flow.StepExample = {\n title: 'API Gateway v1 POST',\n description:\n 'A REST API Gateway v1 POST request with a JSON body is converted into a walker elb event.',\n trigger: { type: 'POST' },\n in: {\n httpMethod: 'POST',\n path: '/collect',\n requestContext: {\n requestId: 'req-789',\n identity: { sourceIp: '203.0.113.42' },\n },\n queryStringParameters: null,\n body: JSON.stringify({\n name: 'page view',\n data: { title: 'Home' },\n }),\n isBase64Encoded: false,\n },\n out: [\n [\n 'elb',\n {\n name: 'page view',\n data: { title: 'Home' },\n },\n ],\n ],\n};\n\nexport const lambdaGet: Flow.StepExample = {\n title: 'Lambda GET',\n description:\n 'An API Gateway v2 HTTP GET with query parameters is parsed into an elb event payload.',\n trigger: { type: 'GET' },\n in: {\n version: '2.0',\n requestContext: {\n http: { method: 'GET', path: '/collect' },\n requestId: 'req-456',\n },\n rawQueryString: 'e=page+view&d=%7B%22title%22%3A%22Home%22%7D',\n isBase64Encoded: false,\n },\n out: [\n [\n 'elb',\n {\n e: 'page view',\n d: '{\"title\":\"Home\"}',\n },\n ],\n ],\n};\n\nexport const lambdaPostForwardsSource: Flow.StepExample = {\n title: 'Lambda POST with provenance',\n description:\n 'A POST body carrying a source map is forwarded in full, so release and trace provenance survive the crossing.',\n trigger: { type: 'POST' },\n in: {\n version: '2.0',\n requestContext: {\n http: { method: 'POST', path: '/collect' },\n requestId: 'req-321',\n },\n body: JSON.stringify({\n name: 'page view',\n data: { title: 'Home' },\n source: { release: { web: 'r1' } },\n }),\n isBase64Encoded: false,\n },\n out: [\n [\n 'elb',\n {\n name: 'page view',\n data: { title: 'Home' },\n source: { release: { web: 'r1' } },\n },\n ],\n ],\n};\n","import type { Trigger, Collector } from '@walkeros/core';\nimport type { LambdaEvent, LambdaContext, LambdaResult } from '../types';\nimport { startFlow } from '@walkeros/collector';\n\nexport interface Content {\n [key: string]: unknown;\n}\n\nexport interface Result {\n statusCode: number;\n body: unknown;\n headers: Record<string, string>;\n}\n\n/**\n * Find the lambda source instance from the collector's registered sources.\n */\nfunction findLambdaSource(collector: Collector.Instance) {\n for (const source of Object.values(collector.sources || {})) {\n if ((source as { type?: string }).type === 'lambda') return source;\n }\n}\n\n/**\n * Lambda source createTrigger.\n *\n * Boots the collector via startFlow, then invokes the Lambda source's push()\n * with a real API Gateway event and a minimal Lambda context.\n *\n * Content is the raw Lambda event object (API Gateway v1 or v2 format).\n * Result contains statusCode, parsed body, and headers.\n *\n * @example\n * const { trigger, flow } = await createTrigger(config);\n * const result = await trigger('POST')({ version: '2.0', ... });\n * console.log(result.statusCode, result.body);\n */\nconst createTrigger: Trigger.CreateFn<Content, Result> = async (\n config: Collector.InitConfig,\n) => {\n let flow: Trigger.FlowHandle | undefined;\n\n const trigger: Trigger.Fn<Content, Result> =\n () =>\n async (content: Content): Promise<Result> => {\n // Lazy startFlow\n if (!flow) {\n const result = await startFlow(config);\n flow = { collector: result.collector, elb: result.elb };\n }\n\n const source = findLambdaSource(flow.collector);\n if (!source) throw new Error('Lambda source not found in collector');\n\n // Create minimal Lambda context\n const lambdaContext = {\n awsRequestId: `test-${Date.now()}`,\n } as unknown as LambdaContext;\n\n // Call source.push with the raw Lambda event + context\n const pushFn = (\n source as unknown as {\n push: (...args: unknown[]) => Promise<LambdaResult>;\n }\n ).push;\n const lambdaResult = await pushFn(\n content as unknown as LambdaEvent,\n lambdaContext,\n );\n\n // Parse response\n let body: unknown;\n try {\n body = JSON.parse(lambdaResult.body || '{}');\n } catch {\n body = lambdaResult.body;\n }\n\n const headers: Record<string, string> = {};\n if (lambdaResult.headers) {\n for (const [k, v] of Object.entries(lambdaResult.headers)) {\n if (v !== undefined) headers[k] = String(v);\n }\n }\n\n return {\n statusCode: lambdaResult.statusCode,\n body,\n headers,\n };\n };\n\n return {\n get flow() {\n return flow;\n },\n trigger,\n };\n};\n\n/**\n * Legacy trigger — takes a source instance directly.\n * Preserved for CLI simulate path.\n */\nfunction trigger(source: {\n push: (event: LambdaEvent, context: LambdaContext) => Promise<LambdaResult>;\n}): (content: Content) => Promise<LambdaResult> {\n return async (content: Content) => {\n const lambdaEvent = { ...(content as Record<string, unknown>) };\n\n // Adapt body format: step examples may use `name`, source expects `event`\n if (lambdaEvent.body && typeof lambdaEvent.body === 'string') {\n const body = JSON.parse(lambdaEvent.body);\n if (body.name && !body.event) {\n lambdaEvent.body = JSON.stringify({\n ...body,\n event: body.name,\n name: undefined,\n });\n }\n }\n\n const context: LambdaContext = {\n awsRequestId: 'test-req',\n } as unknown as LambdaContext;\n\n return source.push(lambdaEvent as unknown as LambdaEvent, context);\n };\n}\n\nexport { createTrigger, trigger };\n","export * as env from './env';\nexport * as step from './step';\nexport { createTrigger } from './trigger';\nexport type { Content, Result } from './trigger';\n","import type { Env } from '../types';\nimport type { Elb, Logger } from '@walkeros/core';\n\n/**\n * Example environment for the AWS SQS source.\n *\n * Tests substitute the real SDK via `jest.mock('@aws-sdk/client-sqs')` and\n * `jest.mock('@aws-sdk/client-sns')`, which is the canonical pattern: imports\n * of those modules get replaced module-wide, no env-injection plumbing\n * required at the call site.\n *\n * The `simulation` list documents which SDK identifiers the source touches\n * during a simulated run, used by the simulator to know what to stub.\n */\n\nconst noopFn = (): void => undefined;\nconst noopLogger: Logger.Instance = {\n error: noopFn,\n warn: noopFn,\n info: noopFn,\n debug: noopFn,\n throw: (message: string | Error) => {\n throw typeof message === 'string' ? new Error(message) : message;\n },\n json: noopFn,\n scope: () => noopLogger,\n};\n\nconst createMockElbFn = (): Elb.Fn => {\n const fn: Elb.Fn = () => Promise.resolve({ ok: true });\n return fn;\n};\n\n/**\n * Standard mock environment for the SQS source.\n *\n * AWS SDK constructors are intentionally absent: the canonical pattern is\n * module-level `jest.mock('@aws-sdk/client-sqs')` and -sns, not env-injection.\n */\nexport const push: Env = {\n get push() {\n return createMockElbFn();\n },\n get command() {\n return createMockElbFn();\n },\n get elb() {\n return createMockElbFn();\n },\n logger: noopLogger,\n};\n\nexport const simulation = ['AWS.SQSClient'];\n","import type { Flow } from '@walkeros/core';\n\n/**\n * SQS source step examples.\n *\n * Each `in` is a partial SQS Message-like (MessageId, Body, optional\n * ReceiptHandle). The trigger synthesizes the missing fields and dispatches\n * through the source's `push()` (the same pipeline the long-poll loop uses).\n * `out` records the terminal state recorded by the trigger as\n * `[method, ...args]` entries.\n */\n\nconst eventPayload = {\n event: 'page view',\n data: { title: 'Documentation', url: 'https://example.com/docs' },\n};\n\nconst orderPayload = {\n event: 'order complete',\n data: { id: 'ORD-500', total: 199.99, currency: 'EUR' },\n};\n\nexport const pageView: Flow.StepExample = {\n title: 'Page view from SQS',\n description:\n 'A standard SQS message body containing a walker elb event payload as JSON.',\n in: {\n MessageId: 'm-1',\n Body: JSON.stringify(eventPayload),\n },\n out: [['message.ack', 'm-1']],\n};\n\nexport const orderComplete: Flow.StepExample = {\n title: 'Order complete from SQS',\n description: 'Order complete event flowing through the long-poll loop.',\n in: {\n MessageId: 'm-2',\n Body: JSON.stringify(orderPayload),\n },\n out: [['message.ack', 'm-2']],\n};\n\nexport const decoderText: Flow.StepExample = {\n title: 'Text decoder',\n description:\n 'When decoder is \"text\", the body string flows under data.payload.',\n in: { MessageId: 'm-3', Body: 'raw text payload' },\n out: [['message.ack', 'm-3']],\n};\n\nexport const malformedJson: Flow.StepExample = {\n title: 'Malformed JSON nacks',\n description:\n 'Default decoder is JSON. A malformed body throws DecoderError; the source nacks (skips DeleteMessage) so the message redelivers.',\n in: { MessageId: 'm-4', Body: '{not json' },\n out: [['message.nack', 'm-4']],\n};\n","import type { Collector, Trigger } from '@walkeros/core';\nimport { startFlow } from '@walkeros/collector';\nimport type { SyntheticMessage, SyntheticPushResult } from '../types';\n\n/**\n * Content shape for the SQS source trigger.\n *\n * The trigger synthesizes a SyntheticMessage from this partial input and\n * dispatches it through the source's `push()` (the same pipeline the\n * long-poll loop uses).\n */\nexport interface Content {\n MessageId: string;\n Body: string;\n ReceiptHandle?: string;\n Attributes?: Record<string, string>;\n MessageAttributes?: Record<\n string,\n { DataType: string; StringValue?: string }\n >;\n}\n\n/**\n * Trigger result: the recorded ack/nack as `[method, MessageId]` entries.\n * Mirrors the destination's `[method, ...args]` recording shape.\n */\nexport type Result = Array<[string, ...unknown[]]>;\n\ninterface SqsSourceLike {\n type: string;\n push: (content?: SyntheticMessage) => Promise<SyntheticPushResult | void>;\n}\n\nfunction isSqsSource(value: unknown): value is SqsSourceLike {\n if (typeof value !== 'object' || value === null) return false;\n const candidate: { type?: unknown; push?: unknown } = value;\n return candidate.type === 'sqs' && typeof candidate.push === 'function';\n}\n\nfunction findSource(collector: Collector.Instance): SqsSourceLike | undefined {\n for (const source of Object.values(collector.sources ?? {})) {\n if (isSqsSource(source)) return source;\n }\n return undefined;\n}\n\n/**\n * SQS source createTrigger.\n *\n * Boots the collector via startFlow, finds the registered SQS source, and\n * invokes its `push()` with a synthesized message. The source dispatches the\n * synthetic message through the same handler the long-poll loop uses,\n * exercising the full decode / forward / ack-nack pipeline without touching\n * real SQS infrastructure.\n */\nexport const createTrigger: Trigger.CreateFn<Content, Result> = async (\n config: Collector.InitConfig,\n) => {\n let flow: Trigger.FlowHandle | undefined;\n\n const trigger: Trigger.Fn<Content, Result> =\n () =>\n async (content: Content): Promise<Result> => {\n if (!flow) {\n const result = await startFlow(config);\n flow = { collector: result.collector, elb: result.elb };\n }\n\n const source = findSource(flow.collector);\n if (!source) {\n throw new Error(\n 'sqs source not registered in collector, ensure it is configured in sources',\n );\n }\n\n const synthetic: SyntheticMessage = {\n MessageId: content.MessageId,\n Body: content.Body,\n ReceiptHandle: content.ReceiptHandle,\n Attributes: content.Attributes,\n MessageAttributes: content.MessageAttributes,\n };\n\n const result = await source.push(synthetic);\n const recorded: Result = [];\n if (result && typeof result === 'object') {\n if (result.acked) recorded.push(['message.ack', content.MessageId]);\n if (result.nacked) recorded.push(['message.nack', content.MessageId]);\n }\n return recorded;\n };\n\n return {\n get flow() {\n return flow;\n },\n trigger,\n };\n};\n"],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AChGA,SAAS,iBAAiB,WAA+B;AACvD,aAAW,UAAU,OAAO,OAAO,UAAU,WAAW,CAAC,CAAC,GAAG;AAC3D,QAAK,OAA6B,SAAS,SAAU,QAAO;AAAA,EAC9D;AACF;AAgBA,IAAM,gBAAmD,OACvD,WACG;AACH,MAAI;AAEJ,QAAMC,WACJ,MACA,OAAO,YAAsC;AAE3C,QAAI,CAAC,MAAM;AACT,YAAM,SAAS,MAAM,GAAU,MAAM;AACrC,aAAO,EAAE,WAAW,OAAO,WAAW,KAAK,OAAO,IAAI;AAAA,IACxD;AAEA,UAAM,SAAS,iBAAiB,KAAK,SAAS;AAC9C,QAAI,CAAC,OAAQ,OAAM,IAAI,MAAM,sCAAsC;AAGnE,UAAM,gBAAgB;AAAA,MACpB,cAAc,QAAQ,KAAK,IAAI,CAAC;AAAA,IAClC;AAGA,UAAM,SACJ,OAGA;AACF,UAAM,eAAe,MAAM;AAAA,MACzB;AAAA,MACA;AAAA,IACF;AAGA,QAAI;AACJ,QAAI;AACF,aAAO,KAAK,MAAM,aAAa,QAAQ,IAAI;AAAA,IAC7C,QAAQ;AACN,aAAO,aAAa;AAAA,IACtB;AAEA,UAAM,UAAkC,CAAC;AACzC,QAAI,aAAa,SAAS;AACxB,iBAAW,CAACC,IAAGC,EAAC,KAAK,OAAO,QAAQ,aAAa,OAAO,GAAG;AACzD,YAAIA,OAAM,OAAW,SAAQD,EAAC,IAAI,OAAOC,EAAC;AAAA,MAC5C;AAAA,IACF;AAEA,WAAO;AAAA,MACL,YAAY,aAAa;AAAA,MACzB;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAEF,SAAO;AAAA,IACL,IAAI,OAAO;AACT,aAAO;AAAA,IACT;AAAA,IACA,SAAAF;AAAA,EACF;AACF;AAMA,SAAS,QAAQ,QAE+B;AAC9C,SAAO,OAAO,YAAqB;AACjC,UAAM,cAAc,EAAE,GAAI,QAAoC;AAG9D,QAAI,YAAY,QAAQ,OAAO,YAAY,SAAS,UAAU;AAC5D,YAAM,OAAO,KAAK,MAAM,YAAY,IAAI;AACxC,UAAI,KAAK,QAAQ,CAAC,KAAK,OAAO;AAC5B,oBAAY,OAAO,KAAK,UAAU;AAAA,UAChC,GAAG;AAAA,UACH,OAAO,KAAK;AAAA,UACZ,MAAM;AAAA,QACR,CAAC;AAAA,MACH;AAAA,IACF;AAEA,UAAM,UAAyB;AAAA,MAC7B,cAAc;AAAA,IAChB;AAEA,WAAO,OAAO,KAAK,aAAuC,OAAO;AAAA,EACnE;AACF;;;AChIA,IAAAG,oBAAA;AAAA,SAAAA,mBAAA;AAAA,uBAAAC;AAAA,EAAA,WAAAC;AAAA,EAAA,YAAAC;AAAA;;;ACAA,IAAAC,eAAA;AAAA,SAAAA,cAAA;AAAA,cAAAC;AAAA,EAAA;AAAA;AAeA,IAAMC,UAAS,MAAY;AAC3B,IAAMC,cAA8B;AAAA,EAClC,OAAOD;AAAA,EACP,MAAMA;AAAA,EACN,MAAMA;AAAA,EACN,OAAOA;AAAA,EACP,OAAO,CAAC,YAA4B;AAClC,UAAM,OAAO,YAAY,WAAW,IAAI,MAAM,OAAO,IAAI;AAAA,EAC3D;AAAA,EACA,MAAMA;AAAA,EACN,OAAO,MAAMC;AACf;AAEA,IAAMC,mBAAkB,MAAc;AACpC,QAAMC,MAAa,MAAM,QAAQ,QAAQ,EAAE,IAAI,KAAK,CAAC;AACrD,SAAOA;AACT;AAQO,IAAMJ,QAAY;AAAA,EACvB,IAAI,OAAO;AACT,WAAOG,iBAAgB;AAAA,EACzB;AAAA,EACA,IAAI,UAAU;AACZ,WAAOA,iBAAgB;AAAA,EACzB;AAAA,EACA,IAAI,MAAM;AACR,WAAOA,iBAAgB;AAAA,EACzB;AAAA,EACA,QAAQD;AACV;AAEO,IAAM,aAAa,CAAC,eAAe;;;ACpD1C,IAAAG,gBAAA;AAAA,SAAAA,eAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAYA,IAAM,eAAe;AAAA,EACnB,OAAO;AAAA,EACP,MAAM,EAAE,OAAO,iBAAiB,KAAK,2BAA2B;AAClE;AAEA,IAAM,eAAe;AAAA,EACnB,OAAO;AAAA,EACP,MAAM,EAAE,IAAI,WAAW,OAAO,QAAQ,UAAU,MAAM;AACxD;AAEO,IAAM,WAA6B;AAAA,EACxC,OAAO;AAAA,EACP,aACE;AAAA,EACF,IAAI;AAAA,IACF,WAAW;AAAA,IACX,MAAM,KAAK,UAAU,YAAY;AAAA,EACnC;AAAA,EACA,KAAK,CAAC,CAAC,eAAe,KAAK,CAAC;AAC9B;AAEO,IAAM,gBAAkC;AAAA,EAC7C,OAAO;AAAA,EACP,aAAa;AAAA,EACb,IAAI;AAAA,IACF,WAAW;AAAA,IACX,MAAM,KAAK,UAAU,YAAY;AAAA,EACnC;AAAA,EACA,KAAK,CAAC,CAAC,eAAe,KAAK,CAAC;AAC9B;AAEO,IAAM,cAAgC;AAAA,EAC3C,OAAO;AAAA,EACP,aACE;AAAA,EACF,IAAI,EAAE,WAAW,OAAO,MAAM,mBAAmB;AAAA,EACjD,KAAK,CAAC,CAAC,eAAe,KAAK,CAAC;AAC9B;AAEO,IAAM,gBAAkC;AAAA,EAC7C,OAAO;AAAA,EACP,aACE;AAAA,EACF,IAAI,EAAE,WAAW,OAAO,MAAM,YAAY;AAAA,EAC1C,KAAK,CAAC,CAAC,gBAAgB,KAAK,CAAC;AAC/B;;;ACxBA,SAAS,YAAY,OAAwC;AAC3D,MAAI,OAAO,UAAU,YAAY,UAAU,KAAM,QAAO;AACxD,QAAM,YAAgD;AACtD,SAAO,UAAU,SAAS,SAAS,OAAO,UAAU,SAAS;AAC/D;AAEA,SAAS,WAAW,WAA0D;AAC5E,aAAW,UAAU,OAAO,OAAO,UAAU,WAAW,CAAC,CAAC,GAAG;AAC3D,QAAI,YAAY,MAAM,EAAG,QAAO;AAAA,EAClC;AACA,SAAO;AACT;AAWO,IAAMC,iBAAmD,OAC9D,WACG;AACH,MAAI;AAEJ,QAAMC,WACJ,MACA,OAAO,YAAsC;AAC3C,QAAI,CAAC,MAAM;AACT,YAAMC,UAAS,MAAM,GAAU,MAAM;AACrC,aAAO,EAAE,WAAWA,QAAO,WAAW,KAAKA,QAAO,IAAI;AAAA,IACxD;AAEA,UAAM,SAAS,WAAW,KAAK,SAAS;AACxC,QAAI,CAAC,QAAQ;AACX,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAEA,UAAM,YAA8B;AAAA,MAClC,WAAW,QAAQ;AAAA,MACnB,MAAM,QAAQ;AAAA,MACd,eAAe,QAAQ;AAAA,MACvB,YAAY,QAAQ;AAAA,MACpB,mBAAmB,QAAQ;AAAA,IAC7B;AAEA,UAAM,SAAS,MAAM,OAAO,KAAK,SAAS;AAC1C,UAAM,WAAmB,CAAC;AAC1B,QAAI,UAAU,OAAO,WAAW,UAAU;AACxC,UAAI,OAAO,MAAO,UAAS,KAAK,CAAC,eAAe,QAAQ,SAAS,CAAC;AAClE,UAAI,OAAO,OAAQ,UAAS,KAAK,CAAC,gBAAgB,QAAQ,SAAS,CAAC;AAAA,IACtE;AACA,WAAO;AAAA,EACT;AAEF,SAAO;AAAA,IACL,IAAI,OAAO;AACT,aAAO;AAAA,IACT;AAAA,IACA,SAAAD;AAAA,EACF;AACF;","names":["settings","z","z","zodToSchema","z","SettingsSchema","z","settings","zodToSchema","SettingsSchema","fn","trigger","k","v","examples_exports","createTrigger","env_exports","step_exports","env_exports","push","noopFn","noopLogger","createMockElbFn","fn","step_exports","createTrigger","trigger","result"]}
|
|
1
|
+
{"version":3,"sources":["../src/schemas.ts","../src/lambda/schemas/index.ts","../src/lambda/schemas/settings.ts","../src/lambda/schemas/primitives.ts","../src/sqs/schemas/index.ts","../src/sqs/schemas/settings.ts","../src/sqs/schemas/setup.ts","../src/lambda/examples/index.ts","../src/lambda/examples/env.ts","../src/lambda/examples/step.ts","../src/lambda/examples/trigger.ts","../src/sqs/examples/index.ts","../src/sqs/examples/env.ts","../src/sqs/examples/step.ts","../src/sqs/examples/trigger.ts"],"sourcesContent":["// Lambda (default sub-source).\nexport { settings, SettingsSchema, type Settings } from './lambda/schemas';\nexport * from './lambda/schemas/primitives';\n\n// SQS sub-source. Prefixed so the website's <Configuration> snippet can\n// remap data.schemas.sqsSettings / sqsSetup onto data.schemas.settings.\nexport { settings as sqsSettings } from './sqs/schemas';\nexport { setup as sqsSetup } from './sqs/schemas';\n","import { zodToSchema } from '@walkeros/core/dev';\nimport { SettingsSchema } from './settings';\n\n// Export primitives\nexport * from './primitives';\n\n// Export Zod schemas and types\nexport { SettingsSchema, type Settings } from './settings';\n\n// JSON Schema exports (for website PropertyTable and documentation tools)\nexport const settings = zodToSchema(SettingsSchema);\n","import { z } from '@walkeros/core/dev';\nimport { CorsOptionsSchema } from './primitives';\n\n/**\n * AWS Lambda source settings schema\n */\nexport const SettingsSchema = z.object({\n cors: z\n .union([z.boolean(), CorsOptionsSchema])\n .describe(\n 'CORS configuration: false = disabled, true = allow all origins, object = custom configuration',\n )\n .default(true),\n\n timeout: z\n .number()\n .int()\n .positive()\n .max(900000) // AWS Lambda max timeout: 15 minutes\n .describe('Request timeout in milliseconds (max: 900000 for Lambda)')\n .default(30000),\n\n enablePixelTracking: z\n .boolean()\n .describe(\n 'Enable GET requests with 1x1 transparent GIF response for pixel tracking',\n )\n .default(true),\n\n maxBatchSize: z\n .number()\n .int()\n .min(1)\n .describe('Maximum number of events accepted in a single batch request')\n .default(100),\n\n healthPath: z\n .string()\n .describe('Health check endpoint path (e.g., /health)')\n .default('/health'),\n});\n\nexport type Settings = z.infer<typeof SettingsSchema>;\n","import { z } from '@walkeros/core/dev';\n\n/**\n * HTTP methods enum\n */\nexport const HttpMethod = z.enum([\n 'GET',\n 'POST',\n 'PUT',\n 'PATCH',\n 'DELETE',\n 'OPTIONS',\n 'HEAD',\n]);\n\n/**\n * CORS origin configuration\n * Accepts:\n * - '*' for all origins\n * - Single URL string\n * - Array of URL strings\n */\nexport const CorsOrigin = z.union([\n z.string(),\n z.array(z.string()),\n z.literal('*'),\n]);\n\n/**\n * CORS options schema\n * Configuration for Cross-Origin Resource Sharing\n */\nexport const CorsOptionsSchema = z.object({\n origin: CorsOrigin.describe(\n 'Allowed origins (* for all, URL string, or array of URLs)',\n ).optional(),\n\n methods: z.array(HttpMethod).describe('Allowed HTTP methods').optional(),\n\n headers: z.array(z.string()).describe('Allowed request headers').optional(),\n\n credentials: z\n .boolean()\n .describe('Allow credentials (cookies, authorization headers)')\n .optional(),\n\n maxAge: z\n .number()\n .int()\n .positive()\n .describe('Preflight cache duration in seconds')\n .optional(),\n});\n\nexport type CorsOptions = z.infer<typeof CorsOptionsSchema>;\n","import { zodToSchema } from '@walkeros/core/dev';\nimport { SettingsSchema } from './settings';\nimport { SetupSchema } from './setup';\n\nexport { SettingsSchema, type Settings } from './settings';\nexport { SetupSchema, type Setup } from './setup';\n\n// JSON Schema exports (for website PropertyTable + MCP package_get).\nexport const settings = zodToSchema(SettingsSchema);\nexport const setup = zodToSchema(SetupSchema);\n","import { z } from '@walkeros/core/dev';\n\n/**\n * AWS SQS source settings schema.\n *\n * Required: queueName. All other fields optional with sensible defaults\n * applied at runtime by `getConfig`.\n */\nexport const SettingsSchema = z.object({\n queueName: z\n .string()\n .min(1)\n .describe(\n 'SQS queue short name (like walkeros-events). Required for both setup and runtime poll.',\n ),\n region: z\n .string()\n .describe('AWS region (like eu-central-1). Default: eu-central-1.')\n .optional(),\n queueUrl: z\n .string()\n .url()\n .describe(\n 'Optional pre-resolved queue URL. When set, init skips the GetQueueUrl lookup.',\n )\n .optional(),\n client: z\n .any()\n .describe(\n 'Pre-configured AWS SQSClient instance. Bypasses construction when supplied.',\n )\n .optional(),\n config: z\n .any()\n .describe(\n 'AWS SDK SQSClientConfig (credentials, endpoint overrides, retries).',\n )\n .optional(),\n decoder: z\n .enum(['json', 'text', 'raw'])\n .describe(\n 'Decoder for the message body. json (default) parses JSON, text forwards UTF-8, raw forwards a Buffer.',\n )\n .optional(),\n maxMessages: z\n .number()\n .int()\n .min(1)\n .max(10)\n .describe('SQS receive batch size. Cap 10. Default: 10.')\n .optional(),\n waitTimeSeconds: z\n .number()\n .int()\n .min(0)\n .max(20)\n .describe('Long-poll duration in seconds. Cap 20. Default: 20.')\n .optional(),\n visibilityTimeout: z\n .number()\n .int()\n .nonnegative()\n .describe(\n 'Per-receive visibility timeout override. Default: queue-configured value.',\n )\n .optional(),\n shutdownTimeoutMs: z\n .number()\n .int()\n .positive()\n .describe(\n 'Graceful shutdown timeout in milliseconds. Default: 30000. After this window, destroy() force-closes.',\n )\n .optional(),\n onPushError: z\n .enum(['nack', 'ack'])\n .describe(\n 'Behavior when forwarding to the collector throws. nack (default) skips DeleteMessage so the message redelivers; ack drops it.',\n )\n .optional(),\n});\n\nexport type Settings = z.infer<typeof SettingsSchema>;\n","import { z } from '@walkeros/core/dev';\n\n/**\n * AWS SQS source setup schema.\n *\n * Provisioning options for `walkeros setup source.<id>`. Authoritative-apply:\n * declared state is written via a single CreateQueueCommand; non-declared\n * tags or attributes are left untouched.\n */\nconst TagsSchema = z.record(z.string(), z.string());\n\nexport const SetupSchema = z.object({\n region: z.string().min(1).describe('AWS region.').optional(),\n fifoQueue: z\n .boolean()\n .describe(\n 'FIFO queue with content-based deduplication. Auto-appends .fifo suffix to the queue name.',\n )\n .optional(),\n visibilityTimeoutSeconds: z\n .number()\n .int()\n .nonnegative()\n .describe('Visibility timeout in seconds. Default: 30.')\n .optional(),\n messageRetentionSeconds: z\n .number()\n .int()\n .positive()\n .describe('Message retention period in seconds. Default: 345600 (4 days).')\n .optional(),\n maximumMessageSize: z\n .number()\n .int()\n .min(1024)\n .max(262144)\n .describe('Max message size in bytes. Default: 262144 (256 KB).')\n .optional(),\n kmsMasterKeyId: z\n .string()\n .describe('KMS key alias or ID for at-rest encryption.')\n .optional(),\n deadLetterQueue: z\n .object({\n arn: z\n .string()\n .describe(\n 'ARN of an existing DLQ. Mutually exclusive with create: true.',\n )\n .optional(),\n create: z\n .boolean()\n .describe('Create a sibling DLQ named <queueName>-dlq. Default: false.')\n .optional(),\n maxReceiveCount: z\n .number()\n .int()\n .min(1)\n .max(1000)\n .describe('Max receive count before message goes to DLQ. Default: 5.')\n .optional(),\n })\n .describe('Optional dead-letter queue.')\n .optional(),\n tags: TagsSchema.describe(\n 'Tags applied to the queue (and inherited by an auto-created DLQ).',\n ).optional(),\n subscribeToSnsTopic: z\n .object({\n topicArn: z.string().min(1).describe('Topic ARN to subscribe to.'),\n rawMessageDelivery: z\n .boolean()\n .describe('Deliver SNS messages without the SNS envelope.')\n .optional(),\n filterPolicy: z\n .record(z.string(), z.unknown())\n .describe('SNS filter policy applied at subscription level.')\n .optional(),\n })\n .describe(\n 'Optional SNS topic subscription. Creates the subscription and the matching queue policy.',\n )\n .optional(),\n});\n\nexport type Setup = z.infer<typeof SetupSchema>;\n","export * as env from './env';\nexport * as step from './step';\nexport { createTrigger, trigger } from './trigger';\n","import type { Env } from '../types';\nimport type { Elb, Logger } from '@walkeros/core';\n\n/**\n * Example environment configurations for AWS Lambda source\n *\n * These environments provide standardized mock structures for testing\n * Lambda event handling without requiring actual Lambda deployment.\n */\n\n// Create a properly typed elb/push/command function that returns a promise with PushResult\nconst createMockElbFn = (): Elb.Fn => {\n const fn = (() =>\n Promise.resolve({\n ok: true,\n })) as Elb.Fn;\n return fn;\n};\n\n// Simple no-op logger for demo purposes\nconst noopFn = () => {};\nconst noopLogger: Logger.Instance = {\n error: noopFn,\n warn: noopFn,\n info: noopFn,\n debug: noopFn,\n throw: (message: string | Error) => {\n throw typeof message === 'string' ? new Error(message) : message;\n },\n json: noopFn,\n scope: () => noopLogger,\n};\n\n/**\n * Standard mock environment for testing Lambda source\n *\n * Use this for testing Lambda event ingestion and request/response handling\n * without requiring a real AWS Lambda environment.\n */\nexport const push: Env = {\n get push() {\n return createMockElbFn();\n },\n get command() {\n return createMockElbFn();\n },\n get elb() {\n return createMockElbFn();\n },\n logger: noopLogger,\n};\n","import type { Flow } from '@walkeros/core';\n\nexport const lambdaPost: Flow.StepExample = {\n title: 'Lambda POST',\n description:\n 'An API Gateway v2 HTTP POST with a JSON body is converted into a walker elb event.',\n trigger: { type: 'POST' },\n in: {\n version: '2.0',\n requestContext: {\n http: { method: 'POST', path: '/collect' },\n requestId: 'req-123',\n },\n body: JSON.stringify({\n name: 'page view',\n data: { title: 'Home' },\n }),\n isBase64Encoded: false,\n },\n out: [\n [\n 'elb',\n {\n name: 'page view',\n data: { title: 'Home' },\n },\n ],\n ],\n};\n\nexport const apiGatewayV1Post: Flow.StepExample = {\n title: 'API Gateway v1 POST',\n description:\n 'A REST API Gateway v1 POST request with a JSON body is converted into a walker elb event.',\n trigger: { type: 'POST' },\n in: {\n httpMethod: 'POST',\n path: '/collect',\n requestContext: {\n requestId: 'req-789',\n identity: { sourceIp: '203.0.113.42' },\n },\n queryStringParameters: null,\n body: JSON.stringify({\n name: 'page view',\n data: { title: 'Home' },\n }),\n isBase64Encoded: false,\n },\n out: [\n [\n 'elb',\n {\n name: 'page view',\n data: { title: 'Home' },\n },\n ],\n ],\n};\n\nexport const lambdaGet: Flow.StepExample = {\n title: 'Lambda GET',\n description:\n 'An API Gateway v2 HTTP GET with query parameters is parsed into an elb event payload.',\n trigger: { type: 'GET' },\n in: {\n version: '2.0',\n requestContext: {\n http: { method: 'GET', path: '/collect' },\n requestId: 'req-456',\n },\n rawQueryString: 'e=page+view&d=%7B%22title%22%3A%22Home%22%7D',\n isBase64Encoded: false,\n },\n out: [\n [\n 'elb',\n {\n e: 'page view',\n d: '{\"title\":\"Home\"}',\n },\n ],\n ],\n};\n\nexport const lambdaPostForwardsSource: Flow.StepExample = {\n title: 'Lambda POST with provenance',\n description:\n 'A POST body carrying a source map is forwarded in full, so release and trace provenance survive the crossing.',\n trigger: { type: 'POST' },\n in: {\n version: '2.0',\n requestContext: {\n http: { method: 'POST', path: '/collect' },\n requestId: 'req-321',\n },\n body: JSON.stringify({\n name: 'page view',\n data: { title: 'Home' },\n source: { release: { web: 'r1' } },\n }),\n isBase64Encoded: false,\n },\n out: [\n [\n 'elb',\n {\n name: 'page view',\n data: { title: 'Home' },\n source: { release: { web: 'r1' } },\n },\n ],\n ],\n};\n","import type { Trigger, Collector } from '@walkeros/core';\nimport type { LambdaEvent, LambdaContext, LambdaResult } from '../types';\nimport { startFlow } from '@walkeros/collector';\n\nexport interface Content {\n [key: string]: unknown;\n}\n\nexport interface Result {\n statusCode: number;\n body: unknown;\n headers: Record<string, string>;\n}\n\n/**\n * Find the lambda source instance from the collector's registered sources.\n */\nfunction findLambdaSource(collector: Collector.Instance) {\n for (const source of Object.values(collector.sources || {})) {\n if ((source as { type?: string }).type === 'lambda') return source;\n }\n}\n\n/**\n * Lambda source createTrigger.\n *\n * Boots the collector via startFlow, then invokes the Lambda source's push()\n * with a real API Gateway event and a minimal Lambda context.\n *\n * Content is the raw Lambda event object (API Gateway v1 or v2 format).\n * Result contains statusCode, parsed body, and headers.\n *\n * @example\n * const { trigger, flow } = await createTrigger(config);\n * const result = await trigger('POST')({ version: '2.0', ... });\n * console.log(result.statusCode, result.body);\n */\nconst createTrigger: Trigger.CreateFn<Content, Result> = async (\n config: Collector.InitConfig,\n) => {\n let flow: Trigger.FlowHandle | undefined;\n\n const trigger: Trigger.Fn<Content, Result> =\n () =>\n async (content: Content): Promise<Result> => {\n // Lazy startFlow\n if (!flow) {\n const result = await startFlow(config);\n flow = { collector: result.collector, elb: result.elb };\n }\n\n const source = findLambdaSource(flow.collector);\n if (!source) throw new Error('Lambda source not found in collector');\n\n // Create minimal Lambda context\n const lambdaContext = {\n awsRequestId: `test-${Date.now()}`,\n } as unknown as LambdaContext;\n\n // Call source.push with the raw Lambda event + context\n const pushFn = (\n source as unknown as {\n push: (...args: unknown[]) => Promise<LambdaResult>;\n }\n ).push;\n const lambdaResult = await pushFn(\n content as unknown as LambdaEvent,\n lambdaContext,\n );\n\n // Parse response\n let body: unknown;\n try {\n body = JSON.parse(lambdaResult.body || '{}');\n } catch {\n body = lambdaResult.body;\n }\n\n const headers: Record<string, string> = {};\n if (lambdaResult.headers) {\n for (const [k, v] of Object.entries(lambdaResult.headers)) {\n if (v !== undefined) headers[k] = String(v);\n }\n }\n\n return {\n statusCode: lambdaResult.statusCode,\n body,\n headers,\n };\n };\n\n return {\n get flow() {\n return flow;\n },\n trigger,\n };\n};\n\n/**\n * Legacy trigger — takes a source instance directly.\n * Preserved for CLI simulate path.\n */\nfunction trigger(source: {\n push: (event: LambdaEvent, context: LambdaContext) => Promise<LambdaResult>;\n}): (content: Content) => Promise<LambdaResult> {\n return async (content: Content) => {\n const lambdaEvent = { ...(content as Record<string, unknown>) };\n\n // Adapt body format: step examples may use `name`, source expects `event`\n if (lambdaEvent.body && typeof lambdaEvent.body === 'string') {\n const body = JSON.parse(lambdaEvent.body);\n if (body.name && !body.event) {\n lambdaEvent.body = JSON.stringify({\n ...body,\n event: body.name,\n name: undefined,\n });\n }\n }\n\n const context: LambdaContext = {\n awsRequestId: 'test-req',\n } as unknown as LambdaContext;\n\n return source.push(lambdaEvent as unknown as LambdaEvent, context);\n };\n}\n\nexport { createTrigger, trigger };\n","export * as env from './env';\nexport * as step from './step';\nexport { createTrigger } from './trigger';\nexport type { Content, Result } from './trigger';\n","import type { Env } from '../types';\nimport type { Elb, Logger } from '@walkeros/core';\n\n/**\n * Example environment for the AWS SQS source.\n *\n * Tests substitute the real SDK via `jest.mock('@aws-sdk/client-sqs')` and\n * `jest.mock('@aws-sdk/client-sns')`, which is the canonical pattern: imports\n * of those modules get replaced module-wide, no env-injection plumbing\n * required at the call site.\n *\n * The `simulation` list documents which SDK identifiers the source touches\n * during a simulated run, used by the simulator to know what to stub.\n */\n\nconst noopFn = (): void => undefined;\nconst noopLogger: Logger.Instance = {\n error: noopFn,\n warn: noopFn,\n info: noopFn,\n debug: noopFn,\n throw: (message: string | Error) => {\n throw typeof message === 'string' ? new Error(message) : message;\n },\n json: noopFn,\n scope: () => noopLogger,\n};\n\nconst createMockElbFn = (): Elb.Fn => {\n const fn: Elb.Fn = () => Promise.resolve({ ok: true });\n return fn;\n};\n\n/**\n * Standard mock environment for the SQS source.\n *\n * AWS SDK constructors are intentionally absent: the canonical pattern is\n * module-level `jest.mock('@aws-sdk/client-sqs')` and -sns, not env-injection.\n */\nexport const push: Env = {\n get push() {\n return createMockElbFn();\n },\n get command() {\n return createMockElbFn();\n },\n get elb() {\n return createMockElbFn();\n },\n logger: noopLogger,\n};\n\nexport const simulation = ['AWS.SQSClient'];\n","import type { Flow } from '@walkeros/core';\n\n/**\n * SQS source step examples.\n *\n * Each `in` is a partial SQS Message-like (MessageId, Body, optional\n * ReceiptHandle). The trigger synthesizes the missing fields and dispatches\n * through the source's `push()` (the same pipeline the long-poll loop uses).\n * `out` records the terminal state recorded by the trigger as\n * `[method, ...args]` entries.\n */\n\nconst eventPayload = {\n event: 'page view',\n data: { title: 'Documentation', url: 'https://example.com/docs' },\n};\n\nconst orderPayload = {\n event: 'order complete',\n data: { id: 'ORD-500', total: 199.99, currency: 'EUR' },\n};\n\nexport const pageView: Flow.StepExample = {\n title: 'Page view from SQS',\n description:\n 'A standard SQS message body containing a walker elb event payload as JSON.',\n in: {\n MessageId: 'm-1',\n Body: JSON.stringify(eventPayload),\n },\n out: [['message.ack', 'm-1']],\n};\n\nexport const orderComplete: Flow.StepExample = {\n title: 'Order complete from SQS',\n description: 'Order complete event flowing through the long-poll loop.',\n in: {\n MessageId: 'm-2',\n Body: JSON.stringify(orderPayload),\n },\n out: [['message.ack', 'm-2']],\n};\n\nexport const decoderText: Flow.StepExample = {\n title: 'Text decoder',\n description:\n 'When decoder is \"text\", the body string flows under data.payload.',\n in: { MessageId: 'm-3', Body: 'raw text payload' },\n out: [['message.ack', 'm-3']],\n};\n\nexport const malformedJson: Flow.StepExample = {\n title: 'Malformed JSON nacks',\n description:\n 'Default decoder is JSON. A malformed body throws DecoderError; the source nacks (skips DeleteMessage) so the message redelivers.',\n in: { MessageId: 'm-4', Body: '{not json' },\n out: [['message.nack', 'm-4']],\n};\n","import type { Collector, Trigger } from '@walkeros/core';\nimport { startFlow } from '@walkeros/collector';\nimport type { SyntheticMessage, SyntheticPushResult } from '../types';\n\n/**\n * Content shape for the SQS source trigger.\n *\n * The trigger synthesizes a SyntheticMessage from this partial input and\n * dispatches it through the source's `push()` (the same pipeline the\n * long-poll loop uses).\n */\nexport interface Content {\n MessageId: string;\n Body: string;\n ReceiptHandle?: string;\n Attributes?: Record<string, string>;\n MessageAttributes?: Record<\n string,\n { DataType: string; StringValue?: string }\n >;\n}\n\n/**\n * Trigger result: the recorded ack/nack as `[method, MessageId]` entries.\n * Mirrors the destination's `[method, ...args]` recording shape.\n */\nexport type Result = Array<[string, ...unknown[]]>;\n\ninterface SqsSourceLike {\n type: string;\n push: (content?: SyntheticMessage) => Promise<SyntheticPushResult | void>;\n}\n\nfunction isSqsSource(value: unknown): value is SqsSourceLike {\n if (typeof value !== 'object' || value === null) return false;\n const candidate: { type?: unknown; push?: unknown } = value;\n return candidate.type === 'sqs' && typeof candidate.push === 'function';\n}\n\nfunction findSource(collector: Collector.Instance): SqsSourceLike | undefined {\n for (const source of Object.values(collector.sources ?? {})) {\n if (isSqsSource(source)) return source;\n }\n return undefined;\n}\n\n/**\n * SQS source createTrigger.\n *\n * Boots the collector via startFlow, finds the registered SQS source, and\n * invokes its `push()` with a synthesized message. The source dispatches the\n * synthetic message through the same handler the long-poll loop uses,\n * exercising the full decode / forward / ack-nack pipeline without touching\n * real SQS infrastructure.\n */\nexport const createTrigger: Trigger.CreateFn<Content, Result> = async (\n config: Collector.InitConfig,\n) => {\n let flow: Trigger.FlowHandle | undefined;\n\n const trigger: Trigger.Fn<Content, Result> =\n () =>\n async (content: Content): Promise<Result> => {\n if (!flow) {\n const result = await startFlow(config);\n flow = { collector: result.collector, elb: result.elb };\n }\n\n const source = findSource(flow.collector);\n if (!source) {\n throw new Error(\n 'sqs source not registered in collector, ensure it is configured in sources',\n );\n }\n\n const synthetic: SyntheticMessage = {\n MessageId: content.MessageId,\n Body: content.Body,\n ReceiptHandle: content.ReceiptHandle,\n Attributes: content.Attributes,\n MessageAttributes: content.MessageAttributes,\n };\n\n const result = await source.push(synthetic);\n const recorded: Result = [];\n if (result && typeof result === 'object') {\n if (result.acked) recorded.push(['message.ack', content.MessageId]);\n if (result.nacked) recorded.push(['message.nack', content.MessageId]);\n }\n return recorded;\n };\n\n return {\n get flow() {\n return flow;\n },\n trigger,\n };\n};\n"],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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","names":["settings","z","z","zodToSchema","z","SettingsSchema","z","settings","zodToSchema","SettingsSchema","fn","trigger","k","v","examples_exports","createTrigger","env_exports","step_exports","env_exports","push","noopFn","noopLogger","createMockElbFn","fn","step_exports","createTrigger","trigger","result"]}
|
package/dist/walkerOS.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$meta": {
|
|
3
3
|
"package": "@walkeros/server-source-aws",
|
|
4
|
-
"version": "4.
|
|
4
|
+
"version": "4.7.0-next-1790187973605",
|
|
5
5
|
"type": "source",
|
|
6
6
|
"platform": [
|
|
7
7
|
"server"
|
|
@@ -284,7 +284,7 @@
|
|
|
284
284
|
},
|
|
285
285
|
"examples": {
|
|
286
286
|
"createTrigger": {
|
|
287
|
-
"$code": "async e=>{let t;return{get flow(){return t},trigger:()=>async n=>{if(!t){const n=await
|
|
287
|
+
"$code": "async e=>{let t;return{get flow(){return t},trigger:()=>async n=>{if(!t){const n=await Vn(e);t={collector:n.collector,elb:n.elb}}const o=function(e){for(const t of Object.values(e.sources||{}))if(\"lambda\"===t.type)return t}(t.collector);if(!o)throw new Error(\"Lambda source not found in collector\");const s={awsRequestId:`test-${Date.now()}`},r=o.push,i=await r(n,s);let a;try{a=JSON.parse(i.body||\"{}\")}catch{a=i.body}const c={};if(i.headers)for(const[e,t]of Object.entries(i.headers))void 0!==t&&(c[e]=String(t));return{statusCode:i.statusCode,body:a,headers:c}}}}"
|
|
288
288
|
},
|
|
289
289
|
"env": {
|
|
290
290
|
"push": {
|
|
@@ -449,7 +449,7 @@
|
|
|
449
449
|
}
|
|
450
450
|
},
|
|
451
451
|
"trigger": {
|
|
452
|
-
"$code": "function
|
|
452
|
+
"$code": "function Xn(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\"})}}"
|
|
453
453
|
}
|
|
454
454
|
}
|
|
455
455
|
}
|
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.
|
|
4
|
+
"version": "4.7.0-next-1790187973605",
|
|
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.
|
|
26
|
+
"@walkeros/core": "4.7.0-next-1790187973605"
|
|
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.
|
|
33
|
+
"@walkeros/collector": "4.7.0-next-1790187973605"
|
|
34
34
|
},
|
|
35
35
|
"repository": {
|
|
36
36
|
"url": "git+https://github.com/elbwalker/walkerOS.git",
|