@walkeros/server-source-aws 4.7.0-next-1790245733116 → 4.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +38 -14
- package/dist/dev.d.mts +68 -37
- package/dist/dev.d.ts +68 -37
- 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/{index-GaXbL334.d.mts → index-BhtEA6dD.d.mts} +24 -10
- package/dist/{index-GaXbL334.d.ts → index-BhtEA6dD.d.ts} +24 -10
- package/dist/index.d.mts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/dist/sqs/index.d.mts +1 -1
- package/dist/sqs/index.d.ts +1 -1
- package/dist/sqs/index.js +1 -1
- package/dist/sqs/index.js.map +1 -1
- package/dist/sqs/index.mjs +1 -1
- package/dist/sqs/index.mjs.map +1 -1
- package/dist/walkerOS.json +590 -4
- package/package.json +3 -3
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:()=>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-1790245733116";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
|
|
1
|
+
"use strict";var e,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,o=Object.getOwnPropertyNames,s=Object.prototype.hasOwnProperty,r=(e,n)=>{for(var o in n)t(e,o,{get:n[o],enumerable:!0})},i={};r(i,{examples:()=>a,exportExamples:()=>On,exportSchemas:()=>xn,schemas:()=>En,sqsExamples:()=>Ut}),module.exports=(e=i,((e,r,i,a)=>{if(r&&"object"==typeof r||"function"==typeof r)for(let c of o(r))s.call(e,c)||c===i||t(e,c,{get:()=>r[c],enumerable:!(a=n(r,c))||a.enumerable});return e})(t({},"__esModule",{value:!0}),e));var a={};r(a,{createTrigger:()=>Kt,env:()=>c,step:()=>f,trigger:()=>Qt});var c={};r(c,{push:()=>p});var d=()=>()=>Promise.resolve({ok:!0}),u=()=>{},l={error:u,warn:u,info:u,debug:u,throw:e=>{throw"string"==typeof e?new Error(e):e},json:u,scope:()=>l},p={get push(){return d()},get command(){return d()},get elb(){return d()},logger:l},f={};r(f,{apiGatewayV1Post:()=>h,lambdaGet:()=>m,lambdaPost:()=>g,lambdaPostForwardsSource:()=>v});var g={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"}}]]},h={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"}}]]},m={title:"Lambda GET",description:"An API Gateway v2 HTTP GET with query parameters is parsed into an elb event payload.",trigger:{type:"GET"},in:{version:"2.0",requestContext:{http:{method:"GET",path:"/collect"},requestId:"req-456"},rawQueryString:"e=page+view&d=%7B%22title%22%3A%22Home%22%7D",isBase64Encoded:!1},out:[["elb",{e:"page view",d:'{"title":"Home"}'}]]},v={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"}}}]]},y=require("@walkeros/core"),w=require("@walkeros/core"),b=require("@walkeros/core"),k=require("@walkeros/core"),S=require("@walkeros/core"),I=require("@walkeros/core"),q=require("@walkeros/core"),E=require("@walkeros/core"),O=require("@walkeros/core"),x=require("@walkeros/core"),j=require("@walkeros/core"),C=require("@walkeros/core"),T=require("@walkeros/core"),P=require("@walkeros/core"),M=require("@walkeros/core"),D=require("@walkeros/core"),A=require("@walkeros/core"),z=require("@walkeros/core"),$={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 _(e,t,n){return{traceId:e.source?.trace??t?._meta.trace??n.trace,sourceId:t?._meta.path[0],parentEventId:t?._meta.parentEventId}}function R(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 B(e,t,n,o,s){e.status.in++;const r=R(e,{stepId:"collector.push",stepType:"collector",phase:"skip",eventId:"string"==typeof t.id?t.id:"",now:Date.now(),..._(t,n,e)});r.skipReason="dropped",r.meta={by:o??"route",at:s},(0,k.emitStep)(e,r)}function H(e,t,n){if(null===e||"object"!=typeof e)return e;if(n>=8||!function(e){if(Array.isArray(e))return!0;const t=Object.getPrototypeOf(e);return t===Object.prototype||null===t}(e))return e;const o=t.get(e);if(void 0!==o)return o;if(Array.isArray(e)){const o=[];t.set(e,o);for(const s of e)o.push(H(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:H(r,t,n+1);return s}function G(e,t){try{return e[t]}catch{return"[unreadable]"}}function W(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(G(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 N(e){return e.map(e=>({fn:e.fn,args:W(e.args),ts:e.ts}))}function K(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 Q=new WeakMap;function U(e,t,n,o){Q.get(e)||(Q.set(e,!0),t.warn(n,o))}function F(e){Q.delete(e)}var L=()=>Date.now();function V(e){if(void 0!==e)return"number"==typeof e?{threshold:e,cooldown:3e4}:{threshold:e.threshold??5,cooldown:e.cooldown??3e4}}function J(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=L()+s)):void(r.consecutiveFailures>=o&&(r.state="open",r.probing=!1,r.openUntil=L()+s)))}function Y(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 X(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 Z(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 ee(e,t,n,o,s){const r=(0,E.stepId)(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=K(i,[o,s],a);if(c.dropped>0){const t=X(e.status,(0,E.stepId)("destination",n),"dlq",c.dropped);U(i,r,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:n,cap:a.max,droppedCount:t})}else i.length<a.max&&F(i);const d=Y(e,n);d.failed++,d.dlqSize=i.length,e.status.failed++;const u=V(t.config.breaker);if(u){const o=t.config.id||n;J(e.status.breakers,(0,E.stepId)("destination",o),"transport-failure",u.threshold,u.cooldown)}}(e,s,n,i,t,o):e.status.failed++,void o.error("report error",{...Z(t),event:i.name});e.status.connectionErrors[r]=(e.status.connectionErrors[r]??0)+1,o.error("connection error",Z(t))}catch{}}}function te(e,t){return e.storeId&&t.stores[e.storeId]?t.stores[e.storeId]:t.stores.__cache}function ne(e,t){return e?t.stores[e]:t.stores.__cache}function oe(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",s=e.logger.scope(`transformer:${o}`),r={collector:e,logger:s,id:n,ingest:(0,x.createIngest)(n),config:t.config,env:he(t.config.env),reportError:ee(e,"transformer",n,s)};s.debug("init");const i=await(0,x.useHooks)(t.init,"TransformerInit",e.hooks,e.logger)(r);if(!1===i)return!1;t.config={...i||t.config,env:i?.env||t.config.env,init:!0},s.debug("init done")}return!0}async function re(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:{...he(t.config.env),...r?{respond:r}:{}},reportError:ee(e,"transformer",n,a)};a.debug("push",{event:o.name});const d="string"==typeof o.id?o.id:"",{traceId:u,sourceId:l,parentEventId:p}=_(o,s,e),f=Date.now(),g=R(e,{stepId:(0,x.stepId)("transformer",n),stepType:"transformer",phase:"in",eventId:d,now:f,traceId:u,sourceId:l,parentEventId:p});g.inEvent=o,(0,x.emitStep)(e,g);try{const s=await(0,x.useHooks)(t.push,"TransformerPush",e.hooks,e.logger)(o,c),r=Date.now(),i=R(e,{stepId:(0,x.stepId)("transformer",n),stepType:"transformer",phase:"out",eventId:d,now:r,traceId:u,sourceId:l,parentEventId:p});return i.durationMs=r-f,i.outEvent=s,(0,x.emitStep)(e,i),a.debug("push done"),s}catch(t){const o=Date.now(),s=R(e,{stepId:(0,x.stepId)("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)},(0,x.emitStep)(e,s),t}}function ie(e){return"string"==typeof e.id?e.id:""}function ae(e,t){const n=ie(e);return""!==n&&""===ie(t)?{...t,id:n}:t}function ce(e,t,n,o){const s=(a=n,{...a,_meta:{...a._meta,path:[...a._meta.path]}}),r=(0,x.clone)(t),i=ie(e);var a;if(""===i)return{event:r,ingest:s};s._meta.parentEventId=i;const c=ie(r);return""!==c&&c!==i||(r.id=(0,x.deriveSpanId)(i,o)),{event:r,ingest:s}}function de(e,t){return{copies:e,respond:t}}function ue(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 le(e,t,n){const o=await Promise.all(t.map((t,n)=>(0,x.tryCatchAsync)(pe,t=>(e.collector.logger.scope("transformer:fork").error(`fork ${n} failed`,Z(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}:{}}:de(s,i)}async function pe(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=(0,x.advanceChain)(o,(0,x.createMappingRoot)(n,s),e.transformers);if("done"===i.kind)return de([{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 le(e,i.branches.map((e,o)=>({stack:e,...ce(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 fe(e,t,s,n,r,a);if("halt"===c.kind)return c.result;if("fork"===c.kind)return le(e,c.copies,r);s=c.event,r=c.respond,o=c.stack}}async function fe(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:ae(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,x.compileCache)(h):void 0,v=m?te(m,i):void 0;let y=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(0,x.tryCatchAsync)(se,e=>{if(e instanceof x.FatalError)throw e;return i.status.failed++,i.logger.scope(`transformer:${u.type||"unknown"}`).error("transformer init failed",{transformer:d,...Z(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,x.checkCache)(m,v,(0,x.createMappingRoot)(o,l));if("HIT"===e?.status&&e.value)return l=e.value,m.stop?g({copies:[{event:ae(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,s,r,i){const a=t[n],c=a?a.config.before:void 0,d=await ge(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:y};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 w=u.config?.state?(0,x.compileState)(u.config.state):void 0,b=w?.filter(e=>"get"===e.mode),k=w?.filter(e=>"set"===e.mode),S=async e=>k&&0!==k.length?(0,x.applyState)(k,e=>ne(e,i),e,i,o):e;b&&b.length>0&&(l=await(0,x.applyState)(b,e=>ne(e,i),l,i,o));const I=await(0,x.tryCatchAsync)(re,e=>(i.status.failed++,i.logger.scope(`transformer:${u.type||"unknown"}`).error("Push failed",Z(e)),!1))(i,u,d,l,o,p);if(!1===I)return g({copies:[],respond:p,droppedBy:d});if(Array.isArray(I)&&1!==I.length){if(0===I.length)return g({copies:[],respond:p});const e=l,n=[];for(let s=0;s<I.length;s++){const r=I[s],i=await S(r.event||e);n.push({stack:ue(t,r.next),...ce(e,i,o,s),respond:p})}return{kind:"fork",copies:n}}const q=Array.isArray(I)?I[0]:I;let E;return q&&"object"==typeof q&&(q.respond&&(p=q.respond),q.event&&(l=q.event),E=q.next),l=await S(l),y&&v&&(0,x.storeCache)(v,y.key,l,y.ttl),f(ue(t,E))}async function ge(e,t,n,o,s,r,i){const a=s??(0,x.createIngest)("string"==typeof n?n:"chain");return void 0===n?de([{event:o,ingest:a}],r):(i&&(a._meta.chainPath=i),pe({collector:e,transformers:t,chainContext:i},{stack:(0,x.isChainContinuation)(n)?n:(0,x.startChain)(n),event:o,ingest:a,respond:r}))}function he(e){return e&&(0,x.isObject)(e)?e:{}}var me=1e4;function ve(e){return"number"==typeof e&&e>0?e:me}var ye=class extends Error{constructor(e){super(e),this.name="DestinationTimeoutError"}};function we(e,t,n){let o;const s=new Promise((e,s)=>{o=setTimeout(()=>s(new ye(n)),t)});return Promise.race([e,s]).finally(()=>{o&&clearTimeout(o)})}async function be(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){if(Ce(n)&&!Ae(e,t,n))continue;const o=t.on;let i=!1;await(0,O.tryCatchAsync)(()=>we(Promise.resolve(o(n,r)),me,`Source "${s}" on(${n}) did not settle within 10000ms`),t=>{if(t instanceof O.FatalError)throw t;t instanceof ye?i=!0:e.status.failed++,e.logger.scope("source").error("source on flush failed",{sourceId:s,type:n,...Z(t)})})(),Ce(n)&&!i&&De(e,t,n)}}function ke(e){return Boolean(e.config.init)&&!e.config.require?.length}async function Se(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?(0,O.compileState)(l):void 0,f=d,g=f?(0,O.compileCache)({...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:(0,O.getSpanId)()};let u=[{event:d,ingest:r.ingest}];if(void 0!==c){const n=`source.${t}.before`,o=await ge(e,e.transformers||{},c,d,r.ingest,r.respond,n);if(0===o.copies.length)return B(e,d,r.ingest,o.droppedBy,n),qt({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=te(g,e);if(t){const n=(0,O.createMappingRoot)(r.ingest),o=await(0,O.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,O.applyUpdate)(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=>{(0,O.storeCache)(t,d,n,u),a?i=(async()=>{const t=await(0,O.applyUpdate)(n,a,c,e);s(t)})():s(n)};r.respond=l}"MISS"!==o.status||g.stop||(0,O.storeCache)(t,o.key,!0,o.rule.ttl)}}}p&&p.length>0&&(u=await Promise.all(u.map(async t=>({event:await(0,O.applyState)(p,t=>ne(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},y=async n=>{const o=(0,O.createIngest)(t),r=(0,O.parseTraceparent)((0,O.isScope)(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(0,O.getMappingValue)(n,s.ingest,{collector:e});return{...o,...i,_meta:o._meta}},w=e.logger.scope("source").scope(t),b={...r,push:async(e,n={})=>{const o={ingest:(0,O.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:s,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:ee(e,"source",t,w)},S=await(0,O.tryCatchAsync)(o,n=>{if(n instanceof O.FatalError)throw n;e.status.failed++,e.logger.scope("source").error("source factory failed",{sourceId:t,...Z(n)})})(k);if(!S)return;const I=S.type||"unknown",q=e.logger.scope(I).scope(t);return b.logger=q,i&&(S.config={...S.config,primary:i}),S}async function Ie(e){for(const[t,n]of Object.entries(e.sources)){if(ke(n))continue;const o=n.config.require;if(!o?.length)continue;const s=o.filter(t=>!Pe(e,t));s.length!==o.length&&(n.config.require=s,ke(n)&&await be(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=>!Pe(e,t));if(n.config&&(n.config.require=s),s.length>0)continue;delete e.pending.destinations[t];const r=Et(n);!1!==r.config.queue&&(r.queuePush=[...e.queue]),e.destinations[t]=r,await ct(e,r,t)}}function qe(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 Ee=!1;function Oe(){Ee||(Ee=!0,"undefined"!=typeof console&&"function"==typeof console.warn&&console.warn("walkerOS: ignored an on-dispatch call with a non-collector argument"))}function xe(e,t,n,o){if(n instanceof I.FatalError)throw n;e.logger.scope("on").error("on callback failed",{kind:t,...o,...Z(n)})}var je=[$.Consent,$.User,$.Globals,$.Custom];function Ce(e){return je.includes(e)}function Te(e,t){switch(t){case $.Consent:return Object.keys(e.consent).length>0;case $.User:return Object.keys(e.user).length>0;case $.Globals:return Object.keys(e.globals).length>0;case $.Custom:return Object.keys(e.custom).length>0;default:return!1}}function Pe(e,t){switch(t){case $.Consent:case $.User:case $.Globals:case $.Custom:return Te(e,t);case $.Run:case $.Ready:return!0===e.allowed;default:return e.seenEvents.has(String(t))}}function Me(e,t){return e.cellVersion?.[String(t)]??0}function De(e,t,n){let o=e.delivery.get(t);o||(o={},e.delivery.set(t,o)),o[String(n)]=Me(e,n)}function Ae(e,t,n){return e.allowed&&Me(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)}var ze=8;function $e(e){const t=e.cascade;if(t&&!_e.has(t))return()=>{};const n=t||{counts:new WeakMap};e.cascade=n,_e.set(n,(_e.get(n)||0)+1);let o=!1;return()=>{if(o)return;o=!0;const t=(_e.get(n)||1)-1;t>0?_e.set(n,t):(_e.delete(n),e.cascade===n&&(e.cascade=void 0))}}var _e=new WeakMap;function Re(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<=ze||(i===ze+1&&e.logger.error("state delivery did not converge",{type:r}),!1)}function Be(e,t){return{collector:e,logger:e.logger.scope("on").scope(String(t))}}async function He(e,t,n,o,s){const r=t.on;if(!r)return!0;const i=Ce(o);if(i&&(Ge.get(t)||We.has(t)))return Ye(e,t,o),Ge.get(t)||Ne.add(t),!1;const a=i?Me(e,o):0,c=i&&function(e,t,n,o){if(Ve.get(t)?.has(String(n)))return!0;const s=e.delivery?.get(t)?.[String(n)];return void 0===s||s<o-1}(e,t,o,a)?nt(e,o):s,d=t.type||"unknown",u=e.logger.scope(d).scope("on").scope(o),l={collector:e,logger:u,id:n,config:t.config,data:c,env:Ot(t.env,t.config.env),reportError:ee(e,"destination",n,u,t)};i&&(Xe(t,o),function(e,t,n){let o=Fe.get(e);o||(o={},Fe.set(e,o));const s=String(t),r=o[s];(void 0===r||r<n)&&(o[s]=n)}(t,o,a),We.add(t));const p=ve(t.config.timeout);let f=Promise.resolve(),g=!0,h=!1,m=!0;try{await(0,q.tryCatchAsync)(()=>(f=Promise.resolve(r(o,l)),we(f,p,`Destination "${n}" on(${o}) did not settle within ${p}ms`)),t=>{g=!1,t instanceof ye&&(h=!0),xe(e,"destination",t,{destId:n,type:o})})(),m=!1}finally{if(i){We.delete(t),m&&Ne.delete(t);const s=Ve.get(t);g?(et(e,t,o,a),s?.delete(String(o))):Ye(e,t,o),h?function(e,t,n,o,s,r,i){Ge.set(t,(Ge.get(t)||0)+1);const a=()=>{const r=(Ge.get(t)||0)-1;r>0?Ge.set(t,r):Ge.delete(t);const a=Ve.get(t);var c,d,u,l;a?a.add(String(o)):Ve.set(t,new Set([String(o)])),Le(t,o,s),Ze(e,t),i.debug("late settle after timeout"),Ne.delete(t),e.allowed&&e.destinations[n]===t&&(c=e,d=t,u=n,l=i,(0,q.tryCatchAsync)(async()=>{await ct(c,d,u),!Qe(d)&&d.queuePush?.length&&await wt(c,void 0,{},{[u]:d})},e=>{l.error("state recovery failed",Z(e))})())};r.then(a,a)}(e,t,n,o,a,f,u):(Le(t,o,a),Ze(e,t))}}return i&&!h&&Ne.delete(t)&&await ct(e,t,n),g}var Ge=new WeakMap,We=new WeakSet,Ne=new WeakSet,Ke=new WeakMap;function Qe(e){return Ke.get(e)}var Ue=new WeakMap,Fe=new WeakMap;function Le(e,t,n){const o=Fe.get(e);o&&o[String(t)]===n&&delete o[String(t)]}var Ve=new WeakMap,Je=new WeakMap;function Ye(e,t,n){!function(e,t,n){const o=e.delivery?.get(t);o&&delete o[String(n)]}(e,t,n);const o=Ve.get(t);o?o.add(String(n)):Ve.set(t,new Set([String(n)])),Ke.set(t,{type:n,since:Date.now()})}function Xe(e,t){Ue.set(e,(Ue.get(e)||0)+1),Ke.set(e,{type:t,since:Date.now()})}function Ze(e,t){const n=(Ue.get(t)||0)-1;n>0?Ue.set(t,n):Ue.delete(t),function(e,t){if(!Ke.has(t))return;if(Ue.get(t))return;if(Ve.get(t)?.size)return;je.some(n=>Te(e,n)&&Ae(e,t,n))||Ke.delete(t)}(e,t)}function et(e,t,n,o){let s=e.delivery.get(t);s||(s={},e.delivery.set(t,s));const r=String(n),i=s[r];(void 0===i||i<o)&&(s[r]=o)}function tt(e,t,n,o){if(!qe(e))return void Oe();const s=nt(e,t,o);if(n.length)switch(t){case $.Consent:!function(e,t,n){const o=n||e.consent,s=Be(e,$.Consent);t.forEach(t=>{Ae(e,t,$.Consent)&&Re(e,t,$.Consent)&&(Object.keys(o).filter(e=>e in t).forEach(n=>{(0,q.tryCatch)(t[n],t=>xe(e,"consent",t,{key:n}))(o,s)}),De(e,t,$.Consent))})}(e,n,o);break;case $.Ready:!function(e,t){if(!e.allowed)return;const n=Be(e,$.Ready);t.forEach(t=>{(0,q.tryCatch)(t,t=>xe(e,"ready",t))(void 0,n)})}(e,n);break;case $.Run:!function(e,t){if(!e.allowed)return;const n=Be(e,$.Run);t.forEach(t=>{(0,q.tryCatch)(t,t=>xe(e,"run",t))(void 0,n)})}(e,n);break;case $.Session:!function(e,t){if(!e.session)return;const n=Be(e,$.Session);t.forEach(t=>{(0,q.tryCatch)(t,t=>xe(e,"session",t))(e.session,n)})}(e,n);break;default:{const o=Be(e,t),r=Ce(t);n.forEach(n=>{"function"==typeof n&&(r&&!Ae(e,n,t)||r&&!Re(e,n,t)||((0,q.tryCatch)(n,n=>xe(e,"generic",n,{type:t}))(s,o),r&&De(e,n,t)))});break}}}function nt(e,t,n){switch(t){case $.Consent:return n||e.consent;case $.Session:return e.session;case $.User:return n||e.user;case $.Custom:return n||e.custom;case $.Globals:return n||e.globals;case $.Config:return n||e.config;default:return}}async function ot(e,t,n,o,s){if(!t.on)return!1;if(Ce(o)&&!Ae(e,t,o))return!1;if(Ce(o)&&!Re(e,t,o))return!1;const r=Ce(o);if(r&&st.has(t))return rt.add(t),!1;const i=r?Me(e,o):0;r&&st.add(t);const a=t.on;let c,d=Promise.resolve(),u=!1;try{c=await(0,q.tryCatchAsync)(()=>(d=Promise.resolve(a(o,s)),we(d,me,`Source "${n}" on(${o}) did not settle within 10000ms`)),t=>{t instanceof ye&&(u=!0),xe(e,"source",t,{sourceId:n,type:o})})()}finally{r&&!u&&st.delete(t)}if(r)if(u){const o=()=>{st.delete(t),rt.delete(t),e.allowed&&e.sources[n]===t&&(0,q.tryCatchAsync)(()=>it(e,t,n),t=>{e.logger.scope("on").error("state recovery failed",Z(t))})()};d.then(o,o)}else et(e,t,o,i),rt.delete(t)&&await it(e,t,n);return!1===c}var st=new WeakSet,rt=new WeakSet;async function it(e,t,n){const o=$e(e);try{for(const o of je)await ot(e,t,n,o,nt(e,o))}finally{o()}}async function at(e,t,n,o,s){if(!t.on)return;const r=Ce(o);if(r&&!Ae(e,t,o))return;const i=Fe.get(t)?.[String(o)];if(r&&void 0!==i&&i>=Me(e,o))return;if(r&&!Re(e,t,o)){if(t.config.init)return void Ye(e,t,o);const n=t.queueOn=t.queueOn||[],s={type:o,data:nt(e,o)},r=n[n.length-1];return r&&r.type===o?n[n.length-1]=s:n.push(s),De(e,t,o),void Ve.get(t)?.delete(String(o))}const a=Je.get(t);if(!t.config.init||a)return t.queueOn=t.queueOn||[],t.queueOn.push({type:o,data:s}),void(r&&(De(e,t,o),a&&!a.held&&(Xe(t,o),a.held=!0)));await He(e,t,n,o,s)}async function ct(e,t,n){if(!t.on)return;const o=$e(e);try{for(const o of je)(Te(e,o)||Ve.get(t)?.has(String(o)))&&await at(e,t,n,o,nt(e,o))}finally{o()}}function dt(e){return(Ue.get(e)||0)>0}function ut(e,t,n){return n.catch(()=>{}),{id:e,destination:t,done:n}}var lt=1e3,pt=1e3,ft=3e4,gt=Object.freeze({batched:!0});function ht(e){return e===gt}var mt=" batch-all";function vt(e){return void 0===e?{}:"number"==typeof e?{wait:e}:{wait:e.wait,size:e.size,age:e.age}}function yt(e){for(const t of e)Qe(t.destination)&&(t.drain=!0)}async function wt(e,t,n={},o){if(!e.allowed)return qt({ok:!1});if(!t)return bt(e,void 0,n,o);const s=await async function(e,t,n={}){const o=n.ingest??(0,w.createIngest)(n.id||"unknown"),s=e.config.next;if(void 0===s)return{copies:[{event:t,ingest:o}],respond:n.respond};const r=await ge(e,e.transformers||{},s,t,o,n.respond,At),i=r.respond??n.respond;return 0===r.copies.length?(e.logger.debug("Event dropped by collector.next"+(r.droppedBy?` (${r.droppedBy})`:"")),B(e,t,o,r.droppedBy,At),{copies:[],respond:i,dropped:!0}):r.stopped?{copies:[],respond:i}:{copies:r.copies.map(t=>({event:Mt(e,t.event,t.ingest),ingest:t.ingest})),respond:i}}(e,t,n);if(0===s.copies.length)return qt({ok:!0,...s.dropped?{dropped:!0}:{}});const r=[];for(const t of s.copies)r.push(await bt(e,t.event,{id:n.id,ingest:t.ingest,respond:s.respond},o));return r[0]}async function bt(e,t,n,o){const{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=K(e.queue,t,{max:n});if(o.dropped>0){const t=X(e.status,(0,b.stepId)("collector"),"queue",o.dropped);U(e.queue,e.logger,"collector.queue overflow; oldest events dropped",{buffer:"queue",cap:n,droppedCount:t})}else e.queue.length<n&&F(e.queue);e.status.in++}o||(o=e.destinations);const r=e.transformers||{},i=await Promise.all(Object.entries(o||{}).map(async([o,i])=>{if(i.config.disabled)return{id:o,destination:i,skipped:!0};const a=i.config.id||o,c=(0,b.stepId)("destination",a),d=V(i.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 s=L();return void 0!==o.openUntil&&s<o.openUntil||(o.state="half-open",o.probing=!0,o.openUntil=s+n,!1)}(e.status.breakers,c,d.cooldown))return{id:o,destination:i,skipped:!0};const u=t=>{d&&J(e.status.breakers,c,t,d.threshold,d.cooldown)},l=()=>{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,c)},p=t=>{if(!t.length)return;i.queuePush||(i.queuePush=[]);const n=i.queuePush,s=i.config.id||o,r={max:i.config.queueMax??lt};let a=0;for(const e of t)a+=K(n,e,r).dropped;if(a>0){Y(e,s);const t=X(e.status,(0,b.stepId)("destination",s),"queue",a);U(n,e.logger.scope(i.type||"unknown"),"destination.queuePush overflow; oldest events dropped",{buffer:"queuePush",destination:s,cap:r.max,droppedCount:t})}else n.length<r.max&&F(n)};var f,g;i.on&&i.config.init&&!Qe(i)&&!dt(i)&&(f=e,g=i,Ve.get(g)?.size||je.some(e=>Te(f,e)&&Ae(f,g,e)))&&await ct(e,i,o);const h=Qe(i);if(h&&!dt(i)&&Date.now()-h.since>=ve(i.config.timeout)&&await ct(e,i,o),Qe(i)){if(l(),!t)return{id:o,destination:i,skipped:!0};const e=[(0,b.clone)(t)];return p(e),{id:o,destination:i,queue:e}}let m=(i.queuePush||[]).map(t=>({...t,consent:e.consent}));i.queuePush=[],t&&m.push((0,b.clone)(t));const v=n.ingest?{...n.ingest,_meta:{...n.ingest._meta,path:[...n.ingest._meta.path]}}:(0,b.createIngest)("unknown");if(!m.length&&!i.queueOn?.length)return l(),{id:o,destination:i,skipped:!0};if(!m.length&&i.queueOn?.length){if(!(0,b.getGrantedConsent)(i.config.consent,e.consent))return l(),{id:o,destination:i,skipped:!0};let t=!1;try{t=await St(e,i,o,!0)}catch(t){e.status.failed++;const n=i.type||"unknown";e.logger.scope(n).error("destination init failed",{error:t instanceof Error?t.message:String(t)}),u("transport-failure")}if(Qe(i))return l(),{id:o,destination:i,skipped:!0};if(!t||!i.queuePush?.length)return l(),{id:o,destination:i,skipped:!t};m=i.queuePush.map(t=>({...t,consent:e.consent})),i.queuePush=[]}const y=t=>{const n=e.consent,s=[],r=t.filter(t=>{const r=(0,b.getGrantedConsent)(i.config.consent,n,t.consent);if(r)return t.consent=r,s.push(t),!1;const a=R(e,{stepId:(0,b.stepId)("destination",o),stepType:"destination",phase:"skip",eventId:"string"==typeof t.id?t.id:"",now:Date.now(),..._(t,v,e)});return a.skipReason="consent",n&&(a.consent={...n}),i.config.consent&&(a.meta={required:{...i.config.consent}}),(0,b.emitStep)(e,a),!0});return{allowed:s,skipped:r}},w=e.consent,{allowed:k,skipped:S}=y(m);if(p(S),!k.length)return l(),{id:o,destination:i,queue:m};const I=new Set(i.queuePush);let q=!1;try{q=await St(e,i,o,!0)}catch(g){e.status.failed++;const t=i.type||"unknown";e.logger.scope(t).error("destination init failed",{error:g instanceof Error?g.message:String(g)}),u("transport-failure")}if(!q)return l(),{id:o,destination:i,queue:m};if(Qe(i))return l(),p(k),{id:o,destination:i,queue:k};const E=[];if(e.consent!==w){const t=y(k.map(t=>({...t,consent:e.consent})));k.splice(0,k.length,...t.allowed),E.push(...t.skipped)}const O=i.queuePush||[],x=O.filter(e=>!I.has(e));if(x.length){i.queuePush=O.filter(e=>I.has(e));const t=y(x.map(t=>({...t,consent:e.consent})));k.push(...t.allowed),E.push(...t.skipped)}if(p(E),!k.length)return l(),E.length?{id:o,destination:i,queue:E}:{id:o,destination:i,skipped:!0};let j,C;i.dlq||(i.dlq=[]);const T=i.config.before,P=i.config.next,M=i.config?.cache,D=M?(0,b.compileCache)(M):void 0,A=D?te(D,e):void 0,z=i.config?.state?(0,b.compileState)(i.config.state):void 0,$=z?.filter(e=>"get"===e.mode),B=z?.filter(e=>"set"===e.mode);let H=0,G=0,W=0;return await Promise.all(k.map(async t=>{let a,c;if(t.user=(0,b.assign)(s,t.user),D?.stop&&A){const e=(0,b.createMappingRoot)(v,t),n=await(0,b.checkCache)(D,A,e);if("HIT"===n?.status)return t;"MISS"===n?.status&&(a={key:n.key,ttl:n.rule.ttl})}let d=[{event:t,ingest:v}],u=n.respond;if(void 0!==T){const s=`destination.${o}.before`,i=await ge(e,r,T,t,v,n.respond,s);if(0===i.copies.length){const n=R(e,{stepId:(0,b.stepId)("destination",o),stepType:"destination",phase:"skip",eventId:"string"==typeof t.id?t.id:"",now:Date.now(),..._(t,v,e)});return n.skipReason="dropped",n.meta={by:i.droppedBy??"route",at:s},(0,b.emitStep)(e,n),t}i.respond&&(u=i.respond),d=i.copies.map(e=>({event:e.event,ingest:e.ingest}))}const l=async(t,n,s)=>{let a=s,d=!1;if(D&&!D.stop&&A){const e=(0,b.createMappingRoot)(n,t??void 0),o=await(0,b.checkCache)(D,A,e);if("HIT"===o?.status)return!1;"MISS"===o?.status&&(a={key:o.key,ttl:o.rule.ttl},d=!0)}$&&$.length>0&&t&&(t=await(0,b.applyState)($,t=>ne(t,e),t,e,n));const l=Date.now();let p=!1;const f=await(0,b.tryCatchAsync)(It,n=>{const s=i.type||"unknown";e.logger.scope(s).error("Push failed",{...Z(n),event:t.name}),j=n,p=!0;const r=i.dlq,a=i.config.id||o,c={max:i.config.dlqMax??100},d=K(r,[t,n],c);if(d.dropped>0){Y(e,a);const t=X(e.status,(0,b.stepId)("destination",a),"dlq",d.dropped);U(r,e.logger.scope(i.type||"unknown"),"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:a,cap:c.max,droppedCount:t})}else r.length<c.max&&F(r)})(e,i,o,t,n,u);if(H+=Date.now()-l,a&&A&&void 0===i.config.mock&&(d?(0,b.storeCache)(A,a.key,f??!0,a.ttl):void 0===c&&(c=f??!0)),!p&&!ht(f)&&B&&B.length>0&&t&&(t=await(0,b.applyState)(B,t=>ne(t,e),t,e,n)),void 0===f||ht(f)||(C=f),ht(f)&&G++,!p&&P){void 0!==f&&(n._response=f);const s=await ge(e,r,P,t,n,u,`destination.${o}.next`);s.respond&&(u=s.respond)}return!0};for(const e of d)await l(e.event,e.ingest,a)&&W++;return a&&A&&void 0!==c&&void 0===i.config.mock&&(0,b.storeCache)(A,a.key,c,a.ttl),t})),{id:o,destination:i,error:j,response:C,totalDuration:H,batchedCount:G,allowedCount:k.length,pushedCount:W,canonicalId:a,breakerConfig:d}})),a={},c={},d={};for(const t of i){if(t.skipped)continue;const n=t.destination,o={type:n.type||"unknown",data:t.response};Y(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,u=t.canonicalId?(0,b.stepId)("destination",t.canonicalId):void 0,l=t=>{i&&u&&J(e.status.breakers,u,t,i.threshold,i.cooldown)};if(t.error)o.error=t.error,d[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)c[t.id]=o;else{const n=t.batchedCount??0,i=t.allowedCount??0,c=t.pushedCount??i;(Math.max(0,c-n)>0||0===i)&&(a[t.id]=o,s.count++,s.lastAt=r,s.duration+=t.totalDuration||0,e.status.out++,l("success"))}}return qt({event:t,...Object.keys(a).length&&{done:a},...Object.keys(c).length&&{queued:c},...Object.keys(d).length&&{failed:d}})}var kt=new WeakMap;async function St(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=kt.get(t);if(s)return s;const r=async function(e,t,n,o){const s=await async function(e,t,n,o){const s=t.type||"unknown",r=e.logger.scope(s),i={collector:e,logger:r,id:o,config:t.config,env:Ot(t.env,t.config.env),reportError:ee(e,"destination",o,r,t)};r.debug("init");const a=Date.now();let c;(0,b.emitStep)(e,R(e,{stepId:(0,b.stepId)("destination",o),stepType:"destination",phase:"init",eventId:"",now:a}));try{c=await(0,b.useHooks)(n,"DestinationInit",e.hooks,e.logger)(i)}catch(t){const n=Date.now(),s=R(e,{stepId:(0,b.stepId)("destination",o),stepType:"destination",phase:"error",eventId:"",now:n});throw s.durationMs=n-a,s.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},(0,b.emitStep)(e,s),t}return!1!==c&&{...c||t.config,init:!0}}(e,t,n,o);if(!1===s)return!1;if(t.config=s,t.queueOn?.length){const n=$e(e);!function(e){const t=e.queueOn?.find(({type:e})=>Ce(e));t&&Xe(e,t.type),Je.set(e,{held:!!t})}(t);try{for(let n=t.queueOn?.shift();n;n=t.queueOn?.shift())await He(e,t,o,n.type,n.data)}catch(n){for(const{type:n}of t.queueOn||[])Ce(n)&&Ye(e,t,n);throw t.queueOn=[],n}finally{!function(e,t){const n=Je.get(t);Je.delete(t),n?.held&&Ze(e,t)}(e,t),n()}}return e.logger.scope(t.type||"unknown").debug("init done"),!0}(e,t,t.init,n);kt.set(t,r);try{return await r}finally{kt.delete(t)}}return!0}async function It(e,t,n,o,s,r){const{config:i}=t,a=await(0,b.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:s,env:{...Ot(t.env,i.env),...r?{respond:r}:{}},reportError:ee(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||"* *":mt;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=vt(l?.batch),r=vt(i.batch),a=s.wait??r.wait??ft,c=s.size??r.size??pt,u=s.age??r.age??ft,g=Ot(t.env,i.env),h=(0,b.debounce)(async()=>{const o=t.batches[f],s=o.batched;if(0===s.entries.length)return;const r={key:s.key,entries:s.entries,events:s.events,data:s.data};s.entries=[],s.events=[],s.data=[];const a=r.entries[0],c={collector:e,logger: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:ee(e,"destination",n,d,t)};d.debug("push batch",{events:r.entries.length});const u=t.config.id||n,l=Y(e,u),p=V(t.config.breaker),h=(0,b.stepId)("destination",u),m=t=>{p&&J(e.status.breakers,h,t,p.threshold,p.cooldown)},v=Date.now(),y=new Map;let w,k=!1;const S=n=>{const o=t.dlq=t.dlq||[],s={max:t.config.dlqMax??100};let r=0;for(const e of n)r+=K(o,e,s).dropped;if(r>0){const t=X(e.status,(0,b.stepId)("destination",u),"dlq",r);U(o,d,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:u,cap:s.max,droppedCount:t})}else o.length<s.max&&F(o);l.failed+=n.length,l.dlqSize=o.length,e.status.failed+=n.length};let I=r.entries.length;const q=ve(i.timeout),E=await(0,b.tryCatchAsync)((o,s)=>we(Promise.resolve((0,b.useHooks)(t.pushBatch,"DestinationPushBatch",e.hooks,e.logger)(o,s)),q,`Destination "${n}" batch delivery timed out after ${q}ms`),e=>{I=0,k=!0,w=e,S(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((0,b.isObject)(O=E)&&Array.isArray(O.failed)&&E.failed.length>0){const e=[];for(const t of E.failed){const n=r.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])}if(e.length>0){S(e),I=Math.max(0,r.entries.length-e.length);const t=new Map;for(const[,n]of e){const e=n instanceof Error&&"code"in n&&"string"==typeof n.code?n.code:n instanceof Error?n.name:"Error",o=t.get(e);o?o.count++:t.set(e,{code:e,count:1,message:n instanceof Error?n.message:String(n)})}d.error("Push batch partial failure",{failed:e.length,delivered:I,entries:r.entries.length,causes:[...t.values()]})}}var O;const x=Date.now();r.entries.forEach((t,o)=>{const s=k||y.has(o),i=_(t.event,t.ingest,e),a=R(e,{stepId:(0,b.stepId)("destination",n),stepType:"destination",phase:s?"error":"flush",eventId:"string"==typeof t.event.id?t.event.id:"",now:x,traceId:i.traceId,sourceId:i.sourceId,parentEventId:i.parentEventId});if(a.batch={size:r.entries.length,index:o},a.durationMs=x-v,s){const e=k?w:y.get(o);a.error=e instanceof Error?{name:e.name,message:e.message}:{message:String(e)}}(0,b.emitStep)(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),(0,b.isDefined)(a.data)&&c.batched.data.push(a.data);const u="string"==typeof a.event.id?a.event.id:"",g=_(o,s,e),h=Date.now(),m=R(e,{stepId:(0,b.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,b.emitStep)(e,m);const v=R(e,{stepId:(0,b.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,b.emitStep)(e,v);const y=t.config.id||n,w=Y(e,y);return w.inFlightBatch=(w.inFlightBatch??0)+1,c.batchFn(),gt}{let r;if(d.debug("push",{event:a.event.name}),"trace"===e.observeLevel?.()&&Array.isArray(t.calls)&&t.calls.length>0){const e=function(e){const{simulation:t,...n}=e,o={},s=new WeakMap;for(const[e,t]of Object.entries(n))o[e]="function"==typeof t?t:H(t,s,1);const r=(0,S.observeEnv)(o,t);return{wrappedEnv:r.env,calls:r.calls,unresolved:r.unresolved}}({...u.env,simulation:t.calls});u.env=e.wrappedEnv,r=e.calls,e.unresolved.length>0&&(e.wrappedEnv[b.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}=_(o,s,e),g=Date.now(),h=R(e,{stepId:(0,b.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,b.emitStep)(e,h);try{const o=ve(i.timeout),s=await we(Promise.resolve((0,b.useHooks)(t.push,"DestinationPush",e.hooks,e.logger)(a.event,u)),o,`Destination "${n}" delivery timed out after ${o}ms`),h=Date.now(),m=R(e,{stepId:(0,b.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,r&&r.length>0&&(m.calls=N(r)),(0,b.isDefined)(s)&&(m.meta={...m.meta,response:s}),a.mappingKey&&(m.mappingKey=a.mappingKey),(0,b.emitStep)(e,m),d.debug("push done"),s}catch(t){const o=Date.now(),s=R(e,{stepId:(0,b.stepId)("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=N(r)),a.mappingKey&&(s.mappingKey=a.mappingKey),(0,b.emitStep)(e,s),t}}}function qt(e){return{ok:!e?.failed,...e}}function Et(e){const{code:t,config:n={},env:o={},cache:s,state:r}=e,{config:i}=oe(e,"before"),{config:a}=oe({...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=Ot(t.env,o);return{...t,config:c,env:d}}function Ot(e,t){return e||t?t?e&&(0,b.isObject)(e)&&(0,b.isObject)(t)?{...e,...t}:t:e:{}}async function xt(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 jt(e,t){e.stateVersion++,e.cellVersion[t]=e.stateVersion}async function Ct(e,t,n){let o,s,r=!1;const i=[],a=$e(e);try{return await async function(){switch(t){case $.Config:(0,C.isObject)(n)&&((0,j.assign)(e.config,n,{shallow:!1,merge:!1}),s=n,r=!0);break;case $.Consent:if((0,C.isObject)(n)){const{update:t}=function(e,t){const n={};return Object.entries(t).forEach(([e,t])=>{n[e]=!!t}),e.consent=(0,y.assign)(e.consent,n),{update:n}}(e,n);jt(e,$.Consent),s=t,r=!0}break;case $.Custom:(0,C.isObject)(n)&&(e.custom=(0,j.assign)(e.custom,n),jt(e,$.Custom),s=n,r=!0);break;case $.Destination:(0,C.isObject)(n)&&"code"in n&&(0,C.isObject)(n.code)&&(o=await async function(e,t){const{code:n,config:o={},env:s={},before:r,next:i,cache:a,state:c}=t;if(!(0,b.isFunction)(n.push))return qt({ok:!1,failed:{invalid:{type:"invalid",error:"Destination code must have a push method"}}});const d={...n.config,...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=(0,b.getId)(5,"abcdefghijklmnopqrstuvwxyz")}while(e.destinations[l]||e.pending.destinations[l]);if(u.require?.length){e.pending.destinations[l]=t,await Ie(e);const n=e.destinations[l];return n?wt(e,void 0,{},{[l]:n}):qt({ok:!0})}const p={...n,config:u,env:Ot(n.env,s)};return e.destinations[l]=p,!1!==p.config.queue&&(p.queuePush=[...e.queue]),await ct(e,p,l),wt(e,void 0,{},{[l]:p})}(e,n));break;case $.Globals:(0,C.isObject)(n)&&(e.globals=(0,j.assign)(e.globals,n),jt(e,$.Globals),s=n,r=!0);break;case $.Hook:if((0,C.isObject)(n)&&(0,j.isString)(n.name)&&(0,j.isFunction)(n.fn)){const{name:t,fn:o}=n;e.hooks[t]=o,s=n,r=!0}break;case $.On:if((0,C.isObject)(n)&&(0,j.isString)(n.type)){const{type:t,rules:o}=n;await async function(e,t,n){if(!qe(e))return void Oe();const o=e.on,s=o[t]||[],r=(0,I.isArray)(n)?n:[n];r.forEach(e=>{s.push(e)}),o[t]=s,tt(e,t,r)}(e,t,o)}break;case $.Ready:r=!0;break;case $.Run:o=await async function(e,t,n){e.allowed=!0,e.timing=Date.now(),e.trace=(0,j.getTraceId)(),e.count=0,t&&(t.consent&&(e.consent=(0,j.assign)(e.consent,t.consent),jt(e,$.Consent)),t.user&&(e.user=(0,j.assign)(e.user,t.user),jt(e,$.User)),t.globals&&(e.globals=(0,j.assign)(e.config.globalsStatic||{},t.globals),jt(e,$.Globals)),t.custom&&(e.custom=(0,j.assign)(e.custom,t.custom),jt(e,$.Custom))),Object.values(e.destinations).forEach(e=>{e.queuePush=[]}),e.queue=[],e.round++,await Ie(e);const o=await async function(e){if(!qe(e))return Oe(),[];const t=[];for(const[n,o]of Object.entries(e.destinations)){if(!o.on)continue;const s=async()=>{for(const t of je)Te(e,t)&&await at(e,o,n,t,nt(e,t))};t.push(ut(n,o,s()))}for(const t of je){if(!Te(e,t))continue;const n=nt(e,t);tt(e,t,e.on[t]||[]),await Promise.all(Object.entries(e.sources).filter(([,e])=>ke(e)).map(([o,s])=>ot(e,s,o,t,n)))}return t}(e);let s=!0;const r={};if(e.preRunQueue.length){const t=e.preRunQueue.splice(0);e.logger.debug("replaying pre-run events",{count:t.length});for(const{event:n,options:o}of t){const t=await e.push(n,o);!1===t.ok&&(s=!1),t.failed&&Object.assign(r,t.failed)}}yt(o);const i=await wt(e);if(n.push(...o),s)return i;const a={...i.failed??{},...r};return{...i,ok:!1,...Object.keys(a).length>0?{failed:a}:{}}}(e,n,i),r=!0;break;case $.Session:r=!0;break;case $.Shutdown:e.hasShutdown||(e.hasShutdown=!0,await async function(e){const t=e.logger;await xt(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 xt(e.destinations,"destination",t),await xt(e.transformers,"transformer",t),await xt(e.stores,"store",t)}(e));break;case $.User:(0,C.isObject)(n)&&((0,j.assign)(e.user,n,{shallow:!1}),jt(e,$.User),s=n,r=!0);break;default:return e.logger.warn("unknown command",{command:t}),qt({ok:!1})}if(r){const n=await async function(e,t,n,o){if(!qe(e))return Oe(),{ok:!0,deliveries:[]};e.seenEvents.add(String(t));let s=n||[];n||(s=e.on[t]||[]);const r=nt(e,t,o),i=[];for(const[n,o]of Object.entries(e.sources)){if(o.config.require?.length){const e=o.config.require.indexOf(t);-1!==e&&o.config.require.splice(e,1)}o.on&&(ke(o)?i.push(ot(e,o,n,t,r)):(o.queueOn=o.queueOn||[],o.queueOn.push({type:t,data:r})))}const a=[];for(const[n,o]of Object.entries(e.destinations))o.on&&a.push(ut(n,o,at(e,o,n,t,r)));let c=!1;i.length&&(c=(await Promise.all(i)).some(Boolean));for(const[t,n]of Object.entries(e.sources))ke(n)&&n.queueOn?.length&&await be(e,n,t);const d=Object.values(e.sources).some(e=>!ke(e)&&e.config.require?.length);return(Object.keys(e.pending.destinations).length>0||d)&&await Ie(e),tt(e,t,s,o),{ok:!c,deliveries:a}}(e,t,void 0,s);i.push(...n.deliveries),yt(n.deliveries);const r=function(e,t){if(!t.length)return e;const n={...e.done??{}},o={...e.queued??{}},s={...e.failed??{}};for(const e of t){for(const[t,s]of Object.entries(e.done??{}))n[t]=s,delete o[t];for(const[t,n]of Object.entries(e.failed??{}))s[t]=n,delete o[t];Object.assign(o,e.queued??{})}const r={...e,ok:e.ok&&t.every(e=>e.ok)};return delete r.done,delete r.queued,delete r.failed,Object.keys(n).length&&(r.done=n),Object.keys(o).length&&(r.queued=o),Object.keys(s).length&&(r.failed=s),r}(await wt(e),await async function(e,t){return(await Promise.all(t.map(async({id:t,destination:n,done:o,drain:s})=>{if(await o,s&&e.allowed&&!Qe(n)&&n.queuePush?.length&&e.destinations[t]===n)return wt(e,void 0,{},{[t]:n})}))).filter(b.isDefined)}(e,i));if(o&&!1===o.ok){const e={...r.failed??{},...o.failed??{}};o={...r,ok:!1,...Object.keys(e).length>0?{failed:e}:{}}}else o=r}return o||qt({ok:!0})}()}finally{a()}}function Tt(e,t){return{timing:Math.round((Date.now()-e.timing)/10)/100,source:{type:"collector",schema:"4"},...t}}function Pt(e,t,n){return Dt(e,t,n,{globals:e.globals,user:e.user,consent:e.consent})}function Mt(e,t,n){return Dt(e,Tt(e,t),n,{globals:{},user:{},consent:{}})}function Dt(e,t,n,o){const s=t.name;if("string"!=typeof s)throw new j.InvalidEventError(void 0===s?"Event name is required":"Event name is invalid");if(!s)throw new j.InvalidEventError("Event name is required");const[r,i]=s.split(" ");if(!r||!i)throw new j.InvalidEventError("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=(0,j.getSpanId)(),trigger:v="",entity:y=r,action:w=i,timing:b=0,source:k={type:"collector",schema:"4"}}=t,S=k??{type:"collector",schema:"4"},I=S.count??(e.count+=1),q=S.trace??n?._meta.trace??e.trace,E={...S,count:I};void 0!==q&&(E.trace=q);const O=e.name??S.platform??"default",x=e.release??"4.7.0";return E.release={...S.release,[O]:x},{name:c,data:d,context:u,globals:(0,j.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:E}}var At="collector.next";function zt(e,t){const n=(0,M.useHooks)(async(n,o={})=>await(0,M.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 s=K(e.preRunQueue,{event:n,options:o},{max:t});if(s.dropped>0){const n=X(e.status,"collector.preRun","queue",s.dropped);U(e.preRunQueue,e.logger,"collector.preRunQueue overflow; oldest events dropped",{buffer:"queue",cap:t,droppedCount:n})}else e.preRunQueue.length<t&&F(e.preRunQueue);return e.logger.debug("event held until run",{name:n.name,dropped:s.dropped}),qt({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??(0,M.createIngest)(r||"unknown");if(c){const t=await(0,M.processEventMapping)(f,c,e);if(t.ignore)return qt({ok:!0});if(c.consent&&!(0,M.getGrantedConsent)(c.consent,e.consent,t.event.consent))return qt({ok:!0});f=t.event}if(void 0!==d){const n=r?`source.${r}.next`:void 0,o=await ge(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})`:"")),B(e,f,h,o.droppedBy,n??"collector.push.preChain"),qt({ok:!0,dropped:!0});if(o.stopped)return o.respond&&(p=o.respond),qt({ok:!0});if(o.respond&&(p=o.respond),o.copies.length>1){const n=await Promise.all(o.copies.map(async n=>{const o=Pt(e,t(n.event),n.ingest);return wt(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]??qt({ok:!0})}f=o.copies[0].event,h=o.copies[0].ingest}const m=function(e,t,n){return Pt(e,Tt(e,t),n)}(e,f,h),v=await wt(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 M.FatalError)throw t;if(t instanceof M.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}),qt({ok:!1,invalid:!0,error:t.message})}return e.status.failed++,e.logger.error("push failed",{...Z(t),event:n.name}),qt({ok:!1})})(),"Push",e.hooks,e.logger);return async(t,o)=>{const s="string"==typeof t.id&&""!==t.id?t:{...t,id:(0,M.getSpanId)()},r="string"==typeof s.id?s.id:"",{traceId:i,sourceId:a,parentEventId:c}=_(s,o?.ingest,e),d=Date.now(),u=R(e,{stepId:"collector.push",stepType:"collector",phase:"in",eventId:r,now:d,traceId:i,sourceId:a,parentEventId:c});u.inEvent=s,(0,M.emitStep)(e,u);try{const t=await n(s,o),u=Date.now(),l=R(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,(0,M.emitStep)(e,l),t}catch(t){const n=Date.now(),o=R(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)},(0,M.emitStep)(e,o),t}}}function $t(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 _t(e,t){const{cacheConfig:n,cacheStore:o,namespace:s,logger:r,storeId:i,collector:a}=t,c=(e,t)=>{if(!a)return;const n=R(a,{stepId:`store.${i}`,stepType:"store",phase:"in",eventId:"",now:Date.now()});n.meta={op:"cache",cached:"hit"===t,status:t,key:e},(0,z.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,z.compileMatcher)(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=(0,z.readCacheEnvelope)(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,(0,z.wrapCacheEnvelope)(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),(0,z.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`;r?r.warn(o,Z(n)):console.warn(o,n)}}function Rt(e,t,n){const o=`store.${n}`,s=(0,A.useHooks)(t.get,"StoreGet",e.hooks,e.logger),r=(0,A.useHooks)(t.set,"StoreSet",e.hooks,e.logger),i=(0,A.useHooks)(t.delete,"StoreDelete",e.hooks,e.logger);t.get=async t=>{const n=Date.now(),r=R(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:n});r.meta={op:"get",key:t},(0,A.emitStep)(e,r);try{const r=await s(t),i=Date.now(),a=R(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:i});return a.durationMs=i-n,a.meta={op:"get",key:t},(0,A.emitStep)(e,a),r}catch(s){const r=Date.now(),i=R(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:r});throw i.durationMs=r-n,i.meta={op:"get",key:t},i.error=s instanceof Error?{name:s.name,message:s.message}:{message:String(s)},(0,A.emitStep)(e,i),s}},t.set=async(t,n,s)=>{const i=Date.now(),a=R(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:i});a.meta={op:"set",key:t},(0,A.emitStep)(e,a);try{await r(t,n,s);const a=Date.now(),c=R(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:a});c.durationMs=a-i,c.meta={op:"set",key:t},(0,A.emitStep)(e,c)}catch(n){const s=Date.now(),r=R(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:s});throw r.durationMs=s-i,r.meta={op:"set",key:t},r.error=n instanceof Error?{name:n.name,message:n.message}:{message:String(n)},(0,A.emitStep)(e,r),n}},t.delete=async t=>{const n=Date.now(),s=R(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:n});s.meta={op:"delete",key:t},(0,A.emitStep)(e,s);try{await i(t);const s=Date.now(),r=R(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:s});r.durationMs=s-n,r.meta={op:"delete",key:t},(0,A.emitStep)(e,r)}catch(s){const r=Date.now(),i=R(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:r});throw i.durationMs=r-n,i.meta={op:"delete",key:t},i.error=s instanceof Error?{name:s.name,message:s.message}:{message:String(s)},(0,A.emitStep)(e,i),s}}}async function Bt(e){const t=(0,P.assign)({globalsStatic:{},sessionStatic:{},run:!0,queueMax:1e3},e,{merge:!1,extend:!1}),n={level:e.logger?.level,handler:e.logger?.handler},o=(0,P.createLogger)(n),s={...t.globalsStatic,...e.globals},r={allowed:!1,config:t,consent:e.consent||{},custom:e.custom||{},destinations:{},transformers:{},stores:{},globals:s,hooks:e.hooks||{},observers:new Set,logger:o,on:{},queue:[],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=zt(r,e=>Tt(r,e)),r.command=(i=r,a=Ct,(0,D.useHooks)(async(e,t,n)=>await(0,D.tryCatchAsync)(async()=>await a(i,e,t,n),t=>{if(t instanceof D.FatalError)throw t;return i.status.failed++,i.logger.error("command failed",{...Z(t),command:e}),qt({ok:!1})})(),"Command",i.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 qt({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:ee(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=$t()),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]=_t(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&&Rt(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=$t()),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]=Et(s);return n}(r,e.destinations||{}),r.transformers=await async function(e,t={}){const n={};for(const[o,s]of Object.entries(t)){const{code:t,env:r={}}=s,i=(0,x.validateStepEntry)(s,"Transformer");if(!i.ok){e.logger.warn(`Transformer ${o} invalid (${i.code}): ${i.reason}. Skipping.`);continue}const{config:a}=oe(s,"before"),{config:c}=oe({...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:(0,x.createIngest)(o),config:f,env:r,reportError:ee(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(0,x.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!==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 Ht=globalThis;function Gt(e){try{const t=Ht.window;if(!t)return;t.localStorage.getItem(T.OBSERVE_STORAGE_KEY)===e&&t.localStorage.removeItem(T.OBSERVE_STORAGE_KEY)}catch{}}function Wt(e,t){return void 0===t?e:n=>e({...n,release:t})}async function Nt(e){e=e||{};const t=await Bt(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=Ht.window,t=Ht.URLSearchParams;if(!e||!t)return null;try{const n=new t(e.location.search.replace(/^\?/,"")).getAll(T.OBSERVE_STORAGE_KEY);return n.length>0?n[n.length-1]??null:null}catch{return null}}(),s=t??function(){try{return Ht.window?.localStorage.getItem(T.OBSERVE_STORAGE_KEY)??null}catch{return null}}();if(!s)return;const r=(0,T.parseObserveCredential)(s);if(!r)return void(null===t?(e.logger.warn("observe: malformed stored credential cleared"),Gt(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{Ht.window?.localStorage.setItem(T.OBSERVE_STORAGE_KEY,e)}catch{}}(s),null!==t&&function(){const e=Ht.window,t=Ht.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(T.OBSERVE_STORAGE_KEY);const d=c.toString();e.history.replaceState({},"",`${a}${d?`?${d}`:""}${s}`)}catch{}}();const a=(0,T.createBatchedPoster)({url:`${n.url}/ingest/${r.ses}`,token:r.secret,headers:{"X-Walkeros-Binding":n.binding},onStatus:t=>{401===t&&(Gt(s),i&&e.observers.delete(i))}});i=(0,T.createTelemetryObserver)(function(e,t){return void 0===t?e:n=>e({...n,flowId:t})}(Wt(a,e.release),n.flowId),{flowId:n.flowId??o,...void 0!==n.level?{level:n.level}:{},...void 0!==n.sample?{sample:n.sample}:{}}),e.observers.add(i);const c=n.level;return void(void 0!==c&&(e.observeLevel=()=>c))}if("off"===n.level)return;const s=n.level;void 0!==s&&(e.observeLevel=()=>s),e.observers.add((0,T.createTelemetryObserver)(Wt((0,T.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,s]of Object.entries(t)){const t=await Se(e,o,s);if(!t)continue;const r=s.config?.require;t.config={...t.config,init:!1,...r?{require:[...r]}:{}},n[o]=t}Object.assign(e.sources,n);for(const t of Object.keys(n)){const n=e.sources[t];let o=!1;n.init&&await(0,O.tryCatchAsync)(n.init.bind(n),n=>{if(n instanceof O.FatalError)throw n;o=!0,e.status.failed++,e.logger.scope("source").error("source init failed",{sourceId:t,...Z(n)})})(),o||(n.config.init=!0,ke(n)&&await be(e,n,t))}return await Ie(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 Kt=async e=>{let t;return{get flow(){return t},trigger:()=>async n=>{if(!t){const n=await Nt(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 Qt(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 Ut={};r(Ut,{createTrigger:()=>cn,env:()=>Ft,step:()=>tn});var Ft={};r(Ft,{moduleMockEnv:()=>Zt,push:()=>Xt,simulation:()=>en});var Lt=()=>{},Vt={error:Lt,warn:Lt,info:Lt,debug:Lt,throw:e=>{throw"string"==typeof e?new Error(e):e},json:Lt,scope:()=>Vt},Jt=()=>()=>Promise.resolve({ok:!0});function Yt(){return{get push(){return Jt()},get command(){return Jt()},get elb(){return Jt()},logger:Vt}}var Xt=Object.assign(Yt(),{AWS:{SQSClient:class{constructor(e){this.config=e}config;async send(e){return function(e){if(!("input"in e))return!1;const{input:t}=e;return"object"==typeof t&&null!==t&&"WaitTimeSeconds"in t}(e)&&await new Promise(e=>setTimeout(e,100)),{$metadata:{},QueueUrl:"https://sqs.eu-central-1.amazonaws.com/000000000000/walkeros-events",Attributes:{QueueArn:"arn:aws:sqs:eu-central-1:000000000000:walkeros-events"},Messages:[]}}destroy(){}}}}),Zt=Yt(),en=["call:AWS.SQSClient.send"],tn={};r(tn,{decoderText:()=>sn,malformedJson:()=>rn,orderComplete:()=>on,pageView:()=>nn});var nn={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"]]},on={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"]]},sn={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"]]},rn={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 an(e){if("object"!=typeof e||null===e)return!1;const t=e;return"sqs"===t.type&&"function"==typeof t.push}var cn=async e=>{let t;return{get flow(){return t},trigger:()=>async n=>{if(!t){const n=await Nt(e);t={collector:n.collector,elb:n.elb}}const o=function(e){for(const t of Object.values(e.sources??{}))if(an(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}}},dn=require("@walkeros/core/dev"),un=require("@walkeros/core/dev"),ln=require("@walkeros/core/dev"),pn=ln.z.enum(["GET","POST","PUT","PATCH","DELETE","OPTIONS","HEAD"]),fn=ln.z.union([ln.z.string(),ln.z.array(ln.z.string()),ln.z.literal("*")]),gn=ln.z.object({origin:fn.describe("Allowed origins (* for all, URL string, or array of URLs)").optional(),methods:ln.z.array(pn).describe("Allowed HTTP methods").optional(),headers:ln.z.array(ln.z.string()).describe("Allowed request headers").optional(),credentials:ln.z.boolean().describe("Allow credentials (cookies, authorization headers)").optional(),maxAge:ln.z.number().int().positive().describe("Preflight cache duration in seconds").optional()}),hn=un.z.object({cors:un.z.union([un.z.boolean(),gn]).describe("CORS configuration: false = disabled, true = allow all origins, object = custom configuration").default(!0),timeout:un.z.number().int().positive().max(9e5).describe("Request timeout in milliseconds (max: 900000 for Lambda)").default(3e4),enablePixelTracking:un.z.boolean().describe("Enable GET requests with 1x1 transparent GIF response for pixel tracking").default(!0),maxBatchSize:un.z.number().int().min(1).describe("Maximum number of events accepted in a single batch request").default(100),healthPath:un.z.string().describe("Health check endpoint path (e.g., /health)").default("/health")}),mn=(0,dn.zodToSchema)(hn),vn=require("@walkeros/core/dev"),yn=require("@walkeros/core/dev"),wn=yn.z.object({queueName:yn.z.string().min(1).describe("SQS queue short name (like walkeros-events). Required for both setup and runtime poll."),region:yn.z.string().describe("AWS region (like eu-central-1). Default: eu-central-1.").optional(),queueUrl:yn.z.string().url().describe("Optional pre-resolved queue URL. When set, init skips the GetQueueUrl lookup.").optional(),client:yn.z.any().describe("Pre-configured AWS SQSClient instance. Bypasses construction when supplied.").optional(),config:yn.z.any().describe("AWS SDK SQSClientConfig (credentials, endpoint overrides, retries).").optional(),decoder:yn.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:yn.z.number().int().min(1).max(10).describe("SQS receive batch size. Cap 10. Default: 10.").optional(),waitTimeSeconds:yn.z.number().int().min(0).max(20).describe("Long-poll duration in seconds. Cap 20. Default: 20.").optional(),visibilityTimeout:yn.z.number().int().nonnegative().describe("Per-receive visibility timeout override. Default: queue-configured value.").optional(),shutdownTimeoutMs:yn.z.number().int().positive().describe("Graceful shutdown timeout in milliseconds. Default: 30000. After this window, destroy() force-closes.").optional(),onPushError:yn.z.enum(["nack","ack"]).describe("Behavior when forwarding to the collector throws. nack (default) skips DeleteMessage so the message redelivers; ack drops it.").optional()}),bn=require("@walkeros/core/dev"),kn=bn.z.record(bn.z.string(),bn.z.string()),Sn=bn.z.object({region:bn.z.string().min(1).describe("AWS region.").optional(),fifoQueue:bn.z.boolean().describe("FIFO queue with content-based deduplication. Auto-appends .fifo suffix to the queue name.").optional(),visibilityTimeoutSeconds:bn.z.number().int().nonnegative().describe("Visibility timeout in seconds. Default: 30.").optional(),messageRetentionSeconds:bn.z.number().int().positive().describe("Message retention period in seconds. Default: 345600 (4 days).").optional(),maximumMessageSize:bn.z.number().int().min(1024).max(262144).describe("Max message size in bytes. Default: 262144 (256 KB).").optional(),kmsMasterKeyId:bn.z.string().describe("KMS key alias or ID for at-rest encryption.").optional(),deadLetterQueue:bn.z.object({arn:bn.z.string().describe("ARN of an existing DLQ. Mutually exclusive with create: true.").optional(),create:bn.z.boolean().describe("Create a sibling DLQ named <queueName>-dlq. Default: false.").optional(),maxReceiveCount:bn.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:kn.describe("Tags applied to the queue (and inherited by an auto-created DLQ).").optional(),subscribeToSnsTopic:bn.z.object({topicArn:bn.z.string().min(1).describe("Topic ARN to subscribe to."),rawMessageDelivery:bn.z.boolean().describe("Deliver SNS messages without the SNS envelope.").optional(),filterPolicy:bn.z.record(bn.z.string(),bn.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()}),In=(0,vn.zodToSchema)(wn),qn=(0,vn.zodToSchema)(Sn),En={};r(En,{CorsOptionsSchema:()=>gn,CorsOrigin:()=>fn,HttpMethod:()=>pn,SettingsSchema:()=>hn,settings:()=>mn,sqsSettings:()=>In,sqsSetup:()=>qn});var On={sourceLambda:a,sourceSqs:Ut},xn={sourceLambda:{settings:mn},sourceSqs:{settings:In,setup:qn}};//# 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/lambda/examples/index.ts","../src/lambda/examples/env.ts","../src/lambda/examples/step.ts","../src/lambda/examples/trigger.ts","../src/sqs/examples/index.ts","../src/sqs/examples/env.ts","../src/sqs/examples/step.ts","../src/sqs/examples/trigger.ts","../src/lambda/schemas/index.ts","../src/lambda/schemas/settings.ts","../src/lambda/schemas/primitives.ts","../src/sqs/schemas/index.ts","../src/sqs/schemas/settings.ts","../src/sqs/schemas/setup.ts","../src/schemas.ts"],"sourcesContent":["import * as lambdaExamplesNs from './lambda/examples';\nimport * as sqsExamplesNs from './sqs/examples';\nimport * as lambdaSchemasNs from './lambda/schemas';\nimport * as sqsSchemasNs from './sqs/schemas';\n\nexport * as schemas from './schemas';\nexport * as examples from './lambda/examples';\nexport * as sqsExamples from './sqs/examples';\n\n/** Dev examples per export, keyed by the export names in package.json. */\nexport const exportExamples = {\n sourceLambda: lambdaExamplesNs,\n sourceSqs: sqsExamplesNs,\n};\n\n/** Schemas per export, keyed by the export names in package.json. */\nexport const exportSchemas = {\n sourceLambda: { settings: lambdaSchemasNs.settings },\n sourceSqs: {\n settings: sqsSchemasNs.settings,\n setup: sqsSchemasNs.setup,\n },\n};\n","export * as env from './env';\nexport * as step from './step';\nexport { createTrigger, trigger } from './trigger';\n","import type { Env } from '../types';\nimport type { Elb, Logger } from '@walkeros/core';\n\n/**\n * Example environment configurations for AWS Lambda source\n *\n * These environments provide standardized mock structures for testing\n * Lambda event handling without requiring actual Lambda deployment.\n */\n\n// Create a properly typed elb/push/command function that returns a promise with PushResult\nconst createMockElbFn = (): Elb.Fn => {\n const fn = (() =>\n Promise.resolve({\n ok: true,\n })) as Elb.Fn;\n return fn;\n};\n\n// Simple no-op logger for demo purposes\nconst noopFn = () => {};\nconst noopLogger: Logger.Instance = {\n error: noopFn,\n warn: noopFn,\n info: noopFn,\n debug: noopFn,\n throw: (message: string | Error) => {\n throw typeof message === 'string' ? new Error(message) : message;\n },\n json: noopFn,\n scope: () => noopLogger,\n};\n\n/**\n * Standard mock environment for testing Lambda source\n *\n * Use this for testing Lambda event ingestion and request/response handling\n * without requiring a real AWS Lambda environment.\n */\nexport const push: Env = {\n get push() {\n return createMockElbFn();\n },\n get command() {\n return createMockElbFn();\n },\n get elb() {\n return createMockElbFn();\n },\n logger: noopLogger,\n};\n","import type { Flow } from '@walkeros/core';\n\nexport const lambdaPost: Flow.StepExample = {\n title: 'Lambda POST',\n description:\n 'An API Gateway v2 HTTP POST with a JSON body is converted into a walker elb event.',\n trigger: { type: 'POST' },\n in: {\n version: '2.0',\n requestContext: {\n http: { method: 'POST', path: '/collect' },\n requestId: 'req-123',\n },\n body: JSON.stringify({\n name: 'page view',\n data: { title: 'Home' },\n }),\n isBase64Encoded: false,\n },\n out: [\n [\n 'elb',\n {\n name: 'page view',\n data: { title: 'Home' },\n },\n ],\n ],\n};\n\nexport const apiGatewayV1Post: Flow.StepExample = {\n title: 'API Gateway v1 POST',\n description:\n 'A REST API Gateway v1 POST request with a JSON body is converted into a walker elb event.',\n trigger: { type: 'POST' },\n in: {\n httpMethod: 'POST',\n path: '/collect',\n requestContext: {\n requestId: 'req-789',\n identity: { sourceIp: '203.0.113.42' },\n },\n queryStringParameters: null,\n body: JSON.stringify({\n name: 'page view',\n data: { title: 'Home' },\n }),\n isBase64Encoded: false,\n },\n out: [\n [\n 'elb',\n {\n name: 'page view',\n data: { title: 'Home' },\n },\n ],\n ],\n};\n\nexport const lambdaGet: Flow.StepExample = {\n title: 'Lambda GET',\n description:\n 'An API Gateway v2 HTTP GET with query parameters is parsed into an elb event payload.',\n trigger: { type: 'GET' },\n in: {\n version: '2.0',\n requestContext: {\n http: { method: 'GET', path: '/collect' },\n requestId: 'req-456',\n },\n rawQueryString: 'e=page+view&d=%7B%22title%22%3A%22Home%22%7D',\n isBase64Encoded: false,\n },\n out: [\n [\n 'elb',\n {\n e: 'page view',\n d: '{\"title\":\"Home\"}',\n },\n ],\n ],\n};\n\nexport const lambdaPostForwardsSource: Flow.StepExample = {\n title: 'Lambda POST with provenance',\n description:\n 'A POST body carrying a source map is forwarded in full, so release and trace provenance survive the crossing.',\n trigger: { type: 'POST' },\n in: {\n version: '2.0',\n requestContext: {\n http: { method: 'POST', path: '/collect' },\n requestId: 'req-321',\n },\n body: JSON.stringify({\n name: 'page view',\n data: { title: 'Home' },\n source: { release: { web: 'r1' } },\n }),\n isBase64Encoded: false,\n },\n out: [\n [\n 'elb',\n {\n name: 'page view',\n data: { title: 'Home' },\n source: { release: { web: 'r1' } },\n },\n ],\n ],\n};\n","import type { Trigger, Collector } from '@walkeros/core';\nimport type { LambdaEvent, LambdaContext, LambdaResult } from '../types';\nimport { startFlow } from '@walkeros/collector';\n\nexport interface Content {\n [key: string]: unknown;\n}\n\nexport interface Result {\n statusCode: number;\n body: unknown;\n headers: Record<string, string>;\n}\n\n/**\n * Find the lambda source instance from the collector's registered sources.\n */\nfunction findLambdaSource(collector: Collector.Instance) {\n for (const source of Object.values(collector.sources || {})) {\n if ((source as { type?: string }).type === 'lambda') return source;\n }\n}\n\n/**\n * Lambda source createTrigger.\n *\n * Boots the collector via startFlow, then invokes the Lambda source's push()\n * with a real API Gateway event and a minimal Lambda context.\n *\n * Content is the raw Lambda event object (API Gateway v1 or v2 format).\n * Result contains statusCode, parsed body, and headers.\n *\n * @example\n * const { trigger, flow } = await createTrigger(config);\n * const result = await trigger('POST')({ version: '2.0', ... });\n * console.log(result.statusCode, result.body);\n */\nconst createTrigger: Trigger.CreateFn<Content, Result> = async (\n config: Collector.InitConfig,\n) => {\n let flow: Trigger.FlowHandle | undefined;\n\n const trigger: Trigger.Fn<Content, Result> =\n () =>\n async (content: Content): Promise<Result> => {\n // Lazy startFlow\n if (!flow) {\n const result = await startFlow(config);\n flow = { collector: result.collector, elb: result.elb };\n }\n\n const source = findLambdaSource(flow.collector);\n if (!source) throw new Error('Lambda source not found in collector');\n\n // Create minimal Lambda context\n const lambdaContext = {\n awsRequestId: `test-${Date.now()}`,\n } as unknown as LambdaContext;\n\n // Call source.push with the raw Lambda event + context\n const pushFn = (\n source as unknown as {\n push: (...args: unknown[]) => Promise<LambdaResult>;\n }\n ).push;\n const lambdaResult = await pushFn(\n content as unknown as LambdaEvent,\n lambdaContext,\n );\n\n // Parse response\n let body: unknown;\n try {\n body = JSON.parse(lambdaResult.body || '{}');\n } catch {\n body = lambdaResult.body;\n }\n\n const headers: Record<string, string> = {};\n if (lambdaResult.headers) {\n for (const [k, v] of Object.entries(lambdaResult.headers)) {\n if (v !== undefined) headers[k] = String(v);\n }\n }\n\n return {\n statusCode: lambdaResult.statusCode,\n body,\n headers,\n };\n };\n\n return {\n get flow() {\n return flow;\n },\n trigger,\n };\n};\n\n/**\n * Legacy trigger — takes a source instance directly.\n * Preserved for CLI simulate path.\n */\nfunction trigger(source: {\n push: (event: LambdaEvent, context: LambdaContext) => Promise<LambdaResult>;\n}): (content: Content) => Promise<LambdaResult> {\n return async (content: Content) => {\n const lambdaEvent = { ...(content as Record<string, unknown>) };\n\n // Adapt body format: step examples may use `name`, source expects `event`\n if (lambdaEvent.body && typeof lambdaEvent.body === 'string') {\n const body = JSON.parse(lambdaEvent.body);\n if (body.name && !body.event) {\n lambdaEvent.body = JSON.stringify({\n ...body,\n event: body.name,\n name: undefined,\n });\n }\n }\n\n const context: LambdaContext = {\n awsRequestId: 'test-req',\n } as unknown as LambdaContext;\n\n return source.push(lambdaEvent as unknown as LambdaEvent, context);\n };\n}\n\nexport { createTrigger, trigger };\n","export * as env from './env';\nexport * as step from './step';\nexport { createTrigger } from './trigger';\nexport type { Content, Result } from './trigger';\n","import type {\n CreateQueueCommandOutput,\n DeleteMessageCommandOutput,\n GetQueueAttributesCommandOutput,\n GetQueueUrlCommandOutput,\n ReceiveMessageCommandOutput,\n SQSClientConfig,\n} from '@aws-sdk/client-sqs';\nimport type { Env, SqsClient } from '../types';\nimport type { Elb, Logger } from '@walkeros/core';\n\n/**\n * Example environment for the AWS SQS source.\n *\n * `push` injects a structural SQS client (`env.AWS.SQSClient`), so a\n * simulated run never reaches AWS and its `send` calls can be recorded. The\n * unit tests keep substituting the SDK module-wide via\n * `jest.mock('@aws-sdk/client-sqs')`; they use `push` without the client.\n */\n\nconst noopFn = (): void => undefined;\nconst noopLogger: Logger.Instance = {\n error: noopFn,\n warn: noopFn,\n info: noopFn,\n debug: noopFn,\n throw: (message: string | Error) => {\n throw typeof message === 'string' ? new Error(message) : message;\n },\n json: noopFn,\n scope: () => noopLogger,\n};\n\nconst createMockElbFn = (): Elb.Fn => {\n const fn: Elb.Fn = () => Promise.resolve({ ok: true });\n return fn;\n};\n\nconst QUEUE_URL =\n 'https://sqs.eu-central-1.amazonaws.com/000000000000/walkeros-events';\nconst QUEUE_ARN = 'arn:aws:sqs:eu-central-1:000000000000:walkeros-events';\n\n/** A long poll that finds nothing, kept short so a simulated run ends fast. */\nconst RECEIVE_WAIT_MS = 100;\n\n/** One response that satisfies every command the source sends. */\ntype SqsResponse = GetQueueUrlCommandOutput &\n GetQueueAttributesCommandOutput &\n ReceiveMessageCommandOutput &\n DeleteMessageCommandOutput &\n CreateQueueCommandOutput;\n\nfunction isReceive(command: object): boolean {\n if (!('input' in command)) return false;\n const { input } = command;\n return (\n typeof input === 'object' && input !== null && 'WaitTimeSeconds' in input\n );\n}\n\n/**\n * Answers every command with the queue URL and ARN and an empty receive, so\n * init resolves the queue and the long-poll loop idles without messages.\n */\nclass MockSQSClient implements SqsClient {\n constructor(public config?: SQSClientConfig) {}\n\n async send(command: object): Promise<SqsResponse> {\n if (isReceive(command)) {\n await new Promise<void>((resolve) =>\n setTimeout(resolve, RECEIVE_WAIT_MS),\n );\n }\n return {\n $metadata: {},\n QueueUrl: QUEUE_URL,\n Attributes: { QueueArn: QUEUE_ARN },\n Messages: [],\n };\n }\n\n destroy(): void {}\n}\n\nfunction createEnv(): Env {\n return {\n get push() {\n return createMockElbFn();\n },\n get command() {\n return createMockElbFn();\n },\n get elb() {\n return createMockElbFn();\n },\n logger: noopLogger,\n };\n}\n\n/** Standard mock environment, with the structural client for simulate. */\nexport const push: Env = Object.assign(createEnv(), {\n AWS: { SQSClient: MockSQSClient },\n});\n\n/**\n * The same environment without the client, for unit tests that substitute the\n * SDK module-wide with `jest.mock`.\n */\nexport const moduleMockEnv: Env = createEnv();\n\n/** Every request (queue lookup, receive, delete) goes through `send`. */\nexport const simulation = ['call:AWS.SQSClient.send'];\n","import type { Flow } from '@walkeros/core';\n\n/**\n * SQS source step examples.\n *\n * Each `in` is a partial SQS Message-like (MessageId, Body, optional\n * ReceiptHandle). The trigger synthesizes the missing fields and dispatches\n * through the source's `push()` (the same pipeline the long-poll loop uses).\n * `out` records the terminal state recorded by the trigger as\n * `[method, ...args]` entries.\n */\n\nconst eventPayload = {\n event: 'page view',\n data: { title: 'Documentation', url: 'https://example.com/docs' },\n};\n\nconst orderPayload = {\n event: 'order complete',\n data: { id: 'ORD-500', total: 199.99, currency: 'EUR' },\n};\n\nexport const pageView: Flow.StepExample = {\n title: 'Page view from SQS',\n description:\n 'A standard SQS message body containing a walker elb event payload as JSON.',\n in: {\n MessageId: 'm-1',\n Body: JSON.stringify(eventPayload),\n },\n out: [['message.ack', 'm-1']],\n};\n\nexport const orderComplete: Flow.StepExample = {\n title: 'Order complete from SQS',\n description: 'Order complete event flowing through the long-poll loop.',\n in: {\n MessageId: 'm-2',\n Body: JSON.stringify(orderPayload),\n },\n out: [['message.ack', 'm-2']],\n};\n\nexport const decoderText: Flow.StepExample = {\n title: 'Text decoder',\n description:\n 'When decoder is \"text\", the body string flows under data.payload.',\n in: { MessageId: 'm-3', Body: 'raw text payload' },\n out: [['message.ack', 'm-3']],\n};\n\nexport const malformedJson: Flow.StepExample = {\n title: 'Malformed JSON nacks',\n description:\n 'Default decoder is JSON. A malformed body throws DecoderError; the source nacks (skips DeleteMessage) so the message redelivers.',\n in: { MessageId: 'm-4', Body: '{not json' },\n out: [['message.nack', 'm-4']],\n};\n","import type { Collector, Trigger } from '@walkeros/core';\nimport { startFlow } from '@walkeros/collector';\nimport type { SyntheticMessage, SyntheticPushResult } from '../types';\n\n/**\n * Content shape for the SQS source trigger.\n *\n * The trigger synthesizes a SyntheticMessage from this partial input and\n * dispatches it through the source's `push()` (the same pipeline the\n * long-poll loop uses).\n */\nexport interface Content {\n MessageId: string;\n Body: string;\n ReceiptHandle?: string;\n Attributes?: Record<string, string>;\n MessageAttributes?: Record<\n string,\n { DataType: string; StringValue?: string }\n >;\n}\n\n/**\n * Trigger result: the recorded ack/nack as `[method, MessageId]` entries.\n * Mirrors the destination's `[method, ...args]` recording shape.\n */\nexport type Result = Array<[string, ...unknown[]]>;\n\ninterface SqsSourceLike {\n type: string;\n push: (content?: SyntheticMessage) => Promise<SyntheticPushResult | void>;\n}\n\nfunction isSqsSource(value: unknown): value is SqsSourceLike {\n if (typeof value !== 'object' || value === null) return false;\n const candidate: { type?: unknown; push?: unknown } = value;\n return candidate.type === 'sqs' && typeof candidate.push === 'function';\n}\n\nfunction findSource(collector: Collector.Instance): SqsSourceLike | undefined {\n for (const source of Object.values(collector.sources ?? {})) {\n if (isSqsSource(source)) return source;\n }\n return undefined;\n}\n\n/**\n * SQS source createTrigger.\n *\n * Boots the collector via startFlow, finds the registered SQS source, and\n * invokes its `push()` with a synthesized message. The source dispatches the\n * synthetic message through the same handler the long-poll loop uses,\n * exercising the full decode / forward / ack-nack pipeline without touching\n * real SQS infrastructure.\n */\nexport const createTrigger: Trigger.CreateFn<Content, Result> = async (\n config: Collector.InitConfig,\n) => {\n let flow: Trigger.FlowHandle | undefined;\n\n const trigger: Trigger.Fn<Content, Result> =\n () =>\n async (content: Content): Promise<Result> => {\n if (!flow) {\n const result = await startFlow(config);\n flow = { collector: result.collector, elb: result.elb };\n }\n\n const source = findSource(flow.collector);\n if (!source) {\n throw new Error(\n 'sqs source not registered in collector, ensure it is configured in sources',\n );\n }\n\n const synthetic: SyntheticMessage = {\n MessageId: content.MessageId,\n Body: content.Body,\n ReceiptHandle: content.ReceiptHandle,\n Attributes: content.Attributes,\n MessageAttributes: content.MessageAttributes,\n };\n\n const result = await source.push(synthetic);\n const recorded: Result = [];\n if (result && typeof result === 'object') {\n if (result.acked) recorded.push(['message.ack', content.MessageId]);\n if (result.nacked) recorded.push(['message.nack', content.MessageId]);\n }\n return recorded;\n };\n\n return {\n get flow() {\n return flow;\n },\n trigger,\n };\n};\n","import { zodToSchema } from '@walkeros/core/dev';\nimport { SettingsSchema } from './settings';\n\n// Export primitives\nexport * from './primitives';\n\n// Export Zod schemas and types\nexport { SettingsSchema, type Settings } from './settings';\n\n// JSON Schema exports (for website PropertyTable and documentation tools)\nexport const settings = zodToSchema(SettingsSchema);\n","import { z } from '@walkeros/core/dev';\nimport { CorsOptionsSchema } from './primitives';\n\n/**\n * AWS Lambda source settings schema\n */\nexport const SettingsSchema = z.object({\n cors: z\n .union([z.boolean(), CorsOptionsSchema])\n .describe(\n 'CORS configuration: false = disabled, true = allow all origins, object = custom configuration',\n )\n .default(true),\n\n timeout: z\n .number()\n .int()\n .positive()\n .max(900000) // AWS Lambda max timeout: 15 minutes\n .describe('Request timeout in milliseconds (max: 900000 for Lambda)')\n .default(30000),\n\n enablePixelTracking: z\n .boolean()\n .describe(\n 'Enable GET requests with 1x1 transparent GIF response for pixel tracking',\n )\n .default(true),\n\n maxBatchSize: z\n .number()\n .int()\n .min(1)\n .describe('Maximum number of events accepted in a single batch request')\n .default(100),\n\n healthPath: z\n .string()\n .describe('Health check endpoint path (e.g., /health)')\n .default('/health'),\n});\n\nexport type Settings = z.infer<typeof SettingsSchema>;\n","import { z } from '@walkeros/core/dev';\n\n/**\n * HTTP methods enum\n */\nexport const HttpMethod = z.enum([\n 'GET',\n 'POST',\n 'PUT',\n 'PATCH',\n 'DELETE',\n 'OPTIONS',\n 'HEAD',\n]);\n\n/**\n * CORS origin configuration\n * Accepts:\n * - '*' for all origins\n * - Single URL string\n * - Array of URL strings\n */\nexport const CorsOrigin = z.union([\n z.string(),\n z.array(z.string()),\n z.literal('*'),\n]);\n\n/**\n * CORS options schema\n * Configuration for Cross-Origin Resource Sharing\n */\nexport const CorsOptionsSchema = z.object({\n origin: CorsOrigin.describe(\n 'Allowed origins (* for all, URL string, or array of URLs)',\n ).optional(),\n\n methods: z.array(HttpMethod).describe('Allowed HTTP methods').optional(),\n\n headers: z.array(z.string()).describe('Allowed request headers').optional(),\n\n credentials: z\n .boolean()\n .describe('Allow credentials (cookies, authorization headers)')\n .optional(),\n\n maxAge: z\n .number()\n .int()\n .positive()\n .describe('Preflight cache duration in seconds')\n .optional(),\n});\n\nexport type CorsOptions = z.infer<typeof CorsOptionsSchema>;\n","import { zodToSchema } from '@walkeros/core/dev';\nimport { SettingsSchema } from './settings';\nimport { SetupSchema } from './setup';\n\nexport { SettingsSchema, type Settings } from './settings';\nexport { SetupSchema, type Setup } from './setup';\n\n// JSON Schema exports (for website PropertyTable + MCP package_get).\nexport const settings = zodToSchema(SettingsSchema);\nexport const setup = zodToSchema(SetupSchema);\n","import { z } from '@walkeros/core/dev';\n\n/**\n * AWS SQS source settings schema.\n *\n * Required: queueName. All other fields optional with sensible defaults\n * applied at runtime by `getConfig`.\n */\nexport const SettingsSchema = z.object({\n queueName: z\n .string()\n .min(1)\n .describe(\n 'SQS queue short name (like walkeros-events). Required for both setup and runtime poll.',\n ),\n region: z\n .string()\n .describe('AWS region (like eu-central-1). Default: eu-central-1.')\n .optional(),\n queueUrl: z\n .string()\n .url()\n .describe(\n 'Optional pre-resolved queue URL. When set, init skips the GetQueueUrl lookup.',\n )\n .optional(),\n client: z\n .any()\n .describe(\n 'Pre-configured AWS SQSClient instance. Bypasses construction when supplied.',\n )\n .optional(),\n config: z\n .any()\n .describe(\n 'AWS SDK SQSClientConfig (credentials, endpoint overrides, retries).',\n )\n .optional(),\n decoder: z\n .enum(['json', 'text', 'raw'])\n .describe(\n 'Decoder for the message body. json (default) parses JSON, text forwards UTF-8, raw forwards a Buffer.',\n )\n .optional(),\n maxMessages: z\n .number()\n .int()\n .min(1)\n .max(10)\n .describe('SQS receive batch size. Cap 10. Default: 10.')\n .optional(),\n waitTimeSeconds: z\n .number()\n .int()\n .min(0)\n .max(20)\n .describe('Long-poll duration in seconds. Cap 20. Default: 20.')\n .optional(),\n visibilityTimeout: z\n .number()\n .int()\n .nonnegative()\n .describe(\n 'Per-receive visibility timeout override. Default: queue-configured value.',\n )\n .optional(),\n shutdownTimeoutMs: z\n .number()\n .int()\n .positive()\n .describe(\n 'Graceful shutdown timeout in milliseconds. Default: 30000. After this window, destroy() force-closes.',\n )\n .optional(),\n onPushError: z\n .enum(['nack', 'ack'])\n .describe(\n 'Behavior when forwarding to the collector throws. nack (default) skips DeleteMessage so the message redelivers; ack drops it.',\n )\n .optional(),\n});\n\nexport type Settings = z.infer<typeof SettingsSchema>;\n","import { z } from '@walkeros/core/dev';\n\n/**\n * AWS SQS source setup schema.\n *\n * Provisioning options for `walkeros setup source.<id>`. Authoritative-apply:\n * declared state is written via a single CreateQueueCommand; non-declared\n * tags or attributes are left untouched.\n */\nconst TagsSchema = z.record(z.string(), z.string());\n\nexport const SetupSchema = z.object({\n region: z.string().min(1).describe('AWS region.').optional(),\n fifoQueue: z\n .boolean()\n .describe(\n 'FIFO queue with content-based deduplication. Auto-appends .fifo suffix to the queue name.',\n )\n .optional(),\n visibilityTimeoutSeconds: z\n .number()\n .int()\n .nonnegative()\n .describe('Visibility timeout in seconds. Default: 30.')\n .optional(),\n messageRetentionSeconds: z\n .number()\n .int()\n .positive()\n .describe('Message retention period in seconds. Default: 345600 (4 days).')\n .optional(),\n maximumMessageSize: z\n .number()\n .int()\n .min(1024)\n .max(262144)\n .describe('Max message size in bytes. Default: 262144 (256 KB).')\n .optional(),\n kmsMasterKeyId: z\n .string()\n .describe('KMS key alias or ID for at-rest encryption.')\n .optional(),\n deadLetterQueue: z\n .object({\n arn: z\n .string()\n .describe(\n 'ARN of an existing DLQ. Mutually exclusive with create: true.',\n )\n .optional(),\n create: z\n .boolean()\n .describe('Create a sibling DLQ named <queueName>-dlq. Default: false.')\n .optional(),\n maxReceiveCount: z\n .number()\n .int()\n .min(1)\n .max(1000)\n .describe('Max receive count before message goes to DLQ. Default: 5.')\n .optional(),\n })\n .describe('Optional dead-letter queue.')\n .optional(),\n tags: TagsSchema.describe(\n 'Tags applied to the queue (and inherited by an auto-created DLQ).',\n ).optional(),\n subscribeToSnsTopic: z\n .object({\n topicArn: z.string().min(1).describe('Topic ARN to subscribe to.'),\n rawMessageDelivery: z\n .boolean()\n .describe('Deliver SNS messages without the SNS envelope.')\n .optional(),\n filterPolicy: z\n .record(z.string(), z.unknown())\n .describe('SNS filter policy applied at subscription level.')\n .optional(),\n })\n .describe(\n 'Optional SNS topic subscription. Creates the subscription and the matching queue policy.',\n )\n .optional(),\n});\n\nexport type Setup = z.infer<typeof SetupSchema>;\n","// Lambda (default sub-source).\nexport { settings, SettingsSchema, type Settings } from './lambda/schemas';\nexport * from './lambda/schemas/primitives';\n\n// SQS sub-source. Prefixed so the website's <Configuration> snippet can\n// remap data.schemas.sqsSettings / sqsSetup onto data.schemas.settings.\nexport { settings as sqsSettings } from './sqs/schemas';\nexport { setup as sqsSetup } from './sqs/schemas';\n"],"mappings":"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AAA,MACnC;AAAA,IACF;AAAA,EACF;AACF;A;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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","names":["examples_exports","fn","trigger","k","v","examples_exports","createTrigger","env_exports","step_exports","env_exports","push","noopFn","noopLogger","createMockElbFn","fn","step_exports","createTrigger","trigger","result","import_dev","import_dev","import_dev","import_dev","SettingsSchema","import_dev","settings","SettingsSchema","settings","examples_exports","settings"]}
|