@walkeros/server-source-aws 4.0.0-next-1777882869103 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +2 -2
- package/dist/dev.js +1 -1
- package/dist/dev.mjs +1 -1
- package/dist/index.js +1 -1
- package/dist/index.mjs +1 -1
- package/dist/walkerOS.json +1 -1
- package/package.json +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# @walkeros/server-source-aws
|
|
2
2
|
|
|
3
|
-
## 4.0.0
|
|
3
|
+
## 4.0.0
|
|
4
4
|
|
|
5
5
|
### Major Changes
|
|
6
6
|
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
- Updated dependencies [8e06b1f]
|
|
36
36
|
- Updated dependencies [3d50dd6]
|
|
37
37
|
- Updated dependencies [1ef33d9]
|
|
38
|
-
- @walkeros/core@4.0.0
|
|
38
|
+
- @walkeros/core@4.0.0
|
|
39
39
|
|
|
40
40
|
## 3.4.2
|
|
41
41
|
|
package/dist/dev.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var e,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,o=Object.getOwnPropertyNames,s=Object.prototype.hasOwnProperty,r=(e,n)=>{for(var o in n)t(e,o,{get:n[o],enumerable:!0})},i={};r(i,{examples:()=>b,schemas:()=>a}),module.exports=(e=i,((e,r,i,a)=>{if(r&&"object"==typeof r||"function"==typeof r)for(let c of o(r))s.call(e,c)||c===i||t(e,c,{get:()=>r[c],enumerable:!(a=n(r,c))||a.enumerable});return e})(t({},"__esModule",{value:!0}),e));var a={};r(a,{CorsOptionsSchema:()=>g,CorsOrigin:()=>f,HttpMethod:()=>d,SettingsSchema:()=>p,settings:()=>h});var c=require("@walkeros/core/dev"),u=require("@walkeros/core/dev"),l=require("@walkeros/core/dev"),d=l.z.enum(["GET","POST","PUT","PATCH","DELETE","OPTIONS","HEAD"]),f=l.z.union([l.z.string(),l.z.array(l.z.string()),l.z.literal("*")]),g=l.z.object({origin:f.describe("Allowed origins (* for all, URL string, or array of URLs)").optional(),methods:l.z.array(d).describe("Allowed HTTP methods").optional(),headers:l.z.array(l.z.string()).describe("Allowed request headers").optional(),credentials:l.z.boolean().describe("Allow credentials (cookies, authorization headers)").optional(),maxAge:l.z.number().int().positive().describe("Preflight cache duration in seconds").optional()}),p=u.z.object({cors:u.z.union([u.z.boolean(),g]).describe("CORS configuration: false = disabled, true = allow all origins, object = custom configuration").default(!0),timeout:u.z.number().int().positive().max(9e5).describe("Request timeout in milliseconds (max: 900000 for Lambda)").default(3e4),enablePixelTracking:u.z.boolean().describe("Enable GET requests with 1x1 transparent GIF response for pixel tracking").default(!0),healthPath:u.z.string().describe("Health check endpoint path (e.g., /health)").default("/health")}),h=(0,c.zodToSchema)(p),b={};r(b,{createTrigger:()=>le,env:()=>y,step:()=>O,trigger:()=>de});var y={};r(y,{push:()=>k});var m=()=>()=>Promise.resolve({ok:!0}),v=()=>{},w={error:v,warn:v,info:v,debug:v,throw:e=>{throw"string"==typeof e?new Error(e):e},json:v,scope:()=>w},k={get push(){return m()},get command(){return m()},get elb(){return m()},logger:w},O={};r(O,{apiGatewayV1Post:()=>C,lambdaGet:()=>q,lambdaPost:()=>x});var x={title:"Lambda POST",description:"An API Gateway v2 HTTP POST with a JSON body is converted into a walker elb event.",trigger:{type:"POST"},in:{version:"2.0",requestContext:{http:{method:"POST",path:"/collect"},requestId:"req-123"},body:JSON.stringify({event:"page view",data:{title:"Home"}}),isBase64Encoded:!1},out:[["elb",{name:"page view",data:{title:"Home"}}]]},C={title:"API Gateway v1 POST",description:"A REST API Gateway v1 POST request with a JSON body is converted into a walker elb event.",trigger:{type:"POST"},in:{httpMethod:"POST",path:"/collect",requestContext:{requestId:"req-789",identity:{sourceIp:"203.0.113.42"}},queryStringParameters:null,body:JSON.stringify({event:"page view",data:{title:"Home"}}),isBase64Encoded:!1},out:[["elb",{name:"page view",data:{title:"Home"}}]]},q={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"}'}]]},A=require("@walkeros/core"),j=require("@walkeros/core"),S=require("@walkeros/core"),P=require("@walkeros/core"),I=require("@walkeros/core"),T=require("@walkeros/core"),E=require("@walkeros/core"),D=require("@walkeros/core"),H=require("@walkeros/core"),R=require("@walkeros/core"),N=require("@walkeros/core"),$=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",Session:"session",Shutdown:"shutdown",User:"user",Walker:"walker"};function z(e,t){return e.storeId&&t.stores[e.storeId]?t.stores[e.storeId]:t.stores.__cache}function G(e){const t={};for(const[n,o]of Object.entries(e)){const e=o.config?.next;e&&!(0,E.isRouteArray)(e)?t[n]={next:e}:t[n]={}}return t}function M(e,t){const n=e.config||{},o=e[t];return void 0!==o?{config:{...n,[t]:o},chainValue:o}:{config:n,chainValue:void 0}}function L(e,t={}){if(!e)return[];if(Array.isArray(e))return e;const n=[],o=new Set;let s=e;for(;s&&t[s]&&!o.has(s);){o.add(s),n.push(s);const e=t[s].next;if(Array.isArray(e)){n.push(...e);break}s=e}return n}async function U(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,E.createIngest)(n),config:t.config,env:F(t.config.env)};s.debug("init");const i=await(0,E.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 B(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:{...F(t.config.env),...r?{respond:r}:{}}};a.debug("push",{event:o.name});const u=await(0,E.useHooks)(t.push,"TransformerPush",e.hooks,e.logger)(o,c);return a.debug("push done"),u}async function J(e,t,n,o,s,r,i){i&&s?._meta&&(s._meta.chainPath=i);let a=o,c=r;for(const o of n){const r=t[o];if(!r){e.logger.warn(`Transformer not found: ${o}`);continue}if(s&&s._meta&&s._meta.path.length>256)return e.logger.error(`Max path length exceeded at ${o}`),{event:null,respond:c};if(s&&s._meta&&(s._meta.hops++,s._meta.path.push(o)),!await(0,E.tryCatchAsync)(U)(e,r,o))return e.logger.error(`Transformer init failed: ${o}`),{event:null,respond:c};if(i&&void 0!==r.config?.chainMocks?.[i]){const t=r.config.chainMocks[i];e.logger.scope(`transformer:${r.type||"unknown"}`).debug("chainMock",{chain:i}),a=t;continue}if(void 0!==r.config?.mock){e.logger.scope(`transformer:${r.type||"unknown"}`).debug("mock"),a=r.config.mock;continue}if(r.config?.disabled)continue;const u=r.config?.cache,l=u?(0,E.compileCache)(u):void 0,d=l?z(l,e):void 0;let f;if(l&&d){const e=(0,E.buildCacheContext)(s,a),t=(0,E.checkCache)(l,d,e,`t:${o}`);if("HIT"===t?.status&&t.value){if(a=t.value,l.full)return{event:a,respond:c};continue}"MISS"===t?.status&&(f={key:t.key,ttl:t.rule.ttl})}const g=r.config.before;if(g){const n=L("string"==typeof g||Array.isArray(g)&&!(0,E.isRouteArray)(g)?g:(0,E.resolveNext)((0,E.compileNext)(g),(0,E.buildCacheContext)(s,a))||void 0,G(t));if(n.length>0){const o=await J(e,t,n,a,s,c,i);if(null===o.event)return{event:null,respond:o.respond??c};o.respond&&(c=o.respond),a=Array.isArray(o.event)?o.event[0]:o.event}}const p=await(0,E.tryCatchAsync)(B,t=>(e.logger.scope(`transformer:${r.type||"unknown"}`).error("Push failed",{error:t}),!1))(e,r,o,a,s,c);if(!1===p)return{event:null,respond:c};if(Array.isArray(p)){const r=n.slice(n.indexOf(o)+1),u=await Promise.all(p.map(async n=>{const o=n.event||a,u=s?{...s,_meta:{...s._meta,path:[...s._meta.path]}}:(0,E.createIngest)("unknown");if(n.next){let s=n.next;if((0,E.isRouteArray)(n.next)){const e=(0,E.compileNext)(n.next);s=(0,E.resolveNext)(e,(0,E.buildCacheContext)(u,o))}if(s){const n=L(s,G(t));if(n.length>0)return J(e,t,n,o,u,c,i)}return{event:o,respond:c}}return r.length>0?J(e,t,r,o,u,c,i):{event:o,respond:c}}));let l=c;const d=[];for(const e of u.flat())if(null!==e)if(e&&"object"==typeof e&&"event"in e){const t=e;if(t.respond&&(l=t.respond),null===t.event)continue;Array.isArray(t.event)?d.push(...t.event):d.push(t.event)}else d.push(e);return 0===d.length?{event:null,respond:l}:1===d.length?{event:d[0],respond:l}:{event:d,respond:l}}if(p&&"object"==typeof p){const{event:n,respond:o,next:r}=p;if(o&&(c=o),r){let o=r;if((0,E.isRouteArray)(r)){const e=(0,E.compileNext)(r);if(o=(0,E.resolveNext)(e,(0,E.buildCacheContext)(s,a)),!o){n&&(a=n);continue}}const u=L(o,G(t));return u.length>0?J(e,t,u,n||a,s,c,i):(e.logger.warn(`Branch target not found: ${JSON.stringify(r)}`),{event:null,respond:c})}n&&(a=n)}if(f&&d&&(0,E.storeCache)(d,f.key,a,f.ttl),(!p||"object"==typeof p&&!p.next)&&r.config.next&&(0,E.isRouteArray)(r.config.next)){const n=r.config.next,o=(0,E.compileNext)(n),u=(0,E.resolveNext)(o,(0,E.buildCacheContext)(s,a));if(u){const n=L(u,G(t));if(n.length>0)return J(e,t,n,a,s,c,i)}return{event:a,respond:c}}}return{event:a,respond:c}}function F(e){return e&&(0,E.isObject)(e)?e:{}}async function V(e,t,n){const{code:o,config:s={},env:r={},primary:i,next:a,before:c,cache:u}=n;let l,d=(0,T.createIngest)(t);const f=u?(0,T.compileCache)({...u,full:u.full??!0}):void 0,g=(0,T.compileNext)(a),p=Array.isArray(a)&&(0,T.isRouteArray)(a)||!g?void 0:L((0,T.resolveNext)(g),G(e.transformers)),h=(0,T.compileNext)(c),b=Array.isArray(c)&&(0,T.isRouteArray)(c)||!h?void 0:L((0,T.resolveNext)(h),G(e.transformers)),y=e.logger.scope("source").scope(t),m={push:async(n,o={})=>{let r,i=n;const a=b??(h?L((0,T.resolveNext)(h,(0,T.buildCacheContext)(d)),G(e.transformers)):[]);if(a.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const n=await J(e,e.transformers,a,i,d,l,`source.${t}.before`);if(null===n.event)return{ok:!0};n.respond&&(l=n.respond),i=Array.isArray(n.event)?n.event[0]:n.event}if(f){const n=z(f,e);if(n){const o=(0,T.buildCacheContext)(d),s=(0,T.checkCache)(f,n,o,`s:${t}`);if(s){if("HIT"===s.status&&void 0!==s.value&&f.full){let t=s.value;return s.rule.update&&(t=await(0,T.applyUpdate)(t,s.rule.update,{...o,cache:{status:"HIT"}},e)),l?.(t),{ok:!0}}if("MISS"===s.status&&f.full&&l){const t=l,i=s.rule.update,a={...o,cache:{status:"MISS"}},c=s.key,u=s.rule.ttl;l=o=>{(0,T.storeCache)(n,c,o,u),i?r=(async()=>{const n=await(0,T.applyUpdate)(o,i,a,e);t(n)})():t(o)}}"MISS"!==s.status||f.full||(0,T.storeCache)(n,s.key,!0,s.rule.ttl)}}}const c=p??(g?L((0,T.resolveNext)(g,(0,T.buildCacheContext)(d)),G(e.transformers)):[]),u=await e.push(i,{...o,id:t,ingest:d,respond:l,mapping:s,preChain:c});return r&&await r,u},command:e.command,sources:e.sources,elb:e.sources.elb.push,logger:y,...r},v={collector:e,logger:y,id:t,config:s,env:m,setIngest:async n=>{if(!s.ingest)return void(d=(0,T.createIngest)(t));const o=await(0,T.getMappingValue)(n,s.ingest,{collector:e}),r=(0,T.createIngest)(t);d={...r,...o,_meta:r._meta}},setRespond:e=>{l=e}},w=await(0,T.tryCatchAsync)(o)(v);if(!w)return;const k=w.type||"unknown",O=e.logger.scope(k).scope(t);return m.logger=O,i&&(w.config={...w.config,primary:i}),w}function W(e,t){return{collector:e,logger:e.logger.scope("on").scope(String(t))}}function K(e,t,n,o,s){if(!t.on)return;const r=t.type||"unknown",i=e.logger.scope(r).scope("on").scope(o),a={collector:e,logger:i,id:n,config:t.config,data:s,env:se(t.env,t.config.env)};(0,I.tryCatch)(t.on)(o,a)}function Q(e,t,n,o){let s;switch(t){case _.Consent:s=o||e.consent;break;case _.Session:s=e.session;break;case _.User:s=o||e.user;break;case _.Custom:s=o||e.custom;break;case _.Globals:s=o||e.globals;break;case _.Config:s=o||e.config;break;case _.Ready:case _.Run:default:s=void 0}if(n.length)switch(t){case _.Consent:!function(e,t,n){const o=n||e.consent,s=W(e,_.Consent);t.forEach(e=>{Object.keys(o).filter(t=>t in e).forEach(t=>{(0,I.tryCatch)(e[t])(o,s)})})}(e,n,o);break;case _.Ready:!function(e,t){if(!e.allowed)return;const n=W(e,_.Ready);t.forEach(e=>{(0,I.tryCatch)(e)(void 0,n)})}(e,n);break;case _.Run:!function(e,t){if(!e.allowed)return;const n=W(e,_.Run);t.forEach(e=>{(0,I.tryCatch)(e)(void 0,n)})}(e,n);break;case _.Session:!function(e,t){if(!e.session)return;const n=W(e,_.Session);t.forEach(t=>{(0,I.tryCatch)(t)(e.session,n)})}(e,n);break;default:{const o=W(e,t);n.forEach(e=>{"function"==typeof e&&(0,I.tryCatch)(e)(s,o)});break}}}function X(e,t,n,o){if(!e)return[];if(t){const e=(0,S.resolveNext)(t,(0,S.buildCacheContext)(o));return e?L(e,G(n)):[]}return L(e,G(n))}async function Y(e,t,n){const{code:o,config:s={},env:r={},before:i,next:a,cache:c}=t;if(!(0,S.isFunction)(o.push))return ne({ok:!1,failed:{invalid:{type:"invalid",error:"Destination code must have a push method"}}});const u=n||s||{init:!1};let l=i?{...u,before:i}:{...u};a&&(l={...l,next:a}),c&&(l={...l,cache:c});const d={...o,config:l,env:se(o.env,r)};let f=d.config.id;if(!f)do{f=(0,S.getId)(5,"abcdefghijklmnopqrstuvwxyz")}while(e.destinations[f]);return e.destinations[f]=d,!1!==d.config.queue&&(d.queuePush=[...e.queue]),Z(e,void 0,{},{[f]:d})}async function Z(e,t,n={},o){const{allowed:s,consent:r,globals:i,user:a}=e;if(!s)return ne({ok:!1});t&&(e.queue.push(t),e.status.in++),o||(o=e.destinations);const c=await Promise.all(Object.entries(o||{}).map(async([o,s])=>{if(s.config.disabled)return{id:o,destination:s,skipped:!0};let c=(s.queuePush||[]).map(e=>({...e,consent:r}));s.queuePush=[],t&&c.push((0,S.clone)(t));const u=n.ingest?{...n.ingest,_meta:{...n.ingest._meta,path:[...n.ingest._meta.path]}}:(0,S.createIngest)("unknown");if(!c.length&&!s.queueOn?.length)return{id:o,destination:s,skipped:!0};if(!c.length&&s.queueOn?.length){const t=await(0,S.tryCatchAsync)(ee)(e,s,o);return{id:o,destination:s,skipped:!t}}const l=[],d=c.filter(e=>{const t=(0,S.getGrantedConsent)(s.config.consent,r,e.consent);return!t||(e.consent=t,l.push(e),!1)});if(s.queuePush.push(...d),!l.length)return{id:o,destination:s,queue:c};if(!await(0,S.tryCatchAsync)(ee)(e,s,o))return{id:o,destination:s,queue:c};let f,g;s.dlq||(s.dlq=[]);const p=s.config.before,h=X(p,p&&(0,S.isRouteArray)(p)?(0,S.compileNext)(p):void 0,e.transformers,u),b=s.config.next,y=b&&(0,S.isRouteArray)(b)?(0,S.compileNext)(b):void 0,m=s.config?.cache,v=m?(0,S.compileCache)(m):void 0,w=v?z(v,e):void 0;let k=0;return await Promise.all(l.map(async t=>{let r;if(t.globals=(0,S.assign)(i,t.globals),t.user=(0,S.assign)(a,t.user),v?.full&&w){const e=(0,S.buildCacheContext)(u,t),n=(0,S.checkCache)(v,w,e,`d:${o}`);if("HIT"===n?.status)return t;"MISS"===n?.status&&(r={key:n.key,ttl:n.rule.ttl})}let c=t,l=n.respond;if(h.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const s=await J(e,e.transformers,h,t,u,n.respond,`destination.${o}.before`);if(null===s.event)return t;s.respond&&(l=s.respond),c=Array.isArray(s.event)?s.event[0]:s.event}if(v&&!v.full&&w){const e=(0,S.buildCacheContext)(u,c),n=(0,S.checkCache)(v,w,e,`d:${o}`);if("HIT"===n?.status)return t;"MISS"===n?.status&&(r={key:n.key,ttl:n.rule.ttl})}const d=Date.now();let p=!1;const m=await(0,S.tryCatchAsync)(te,t=>{const n=s.type||"unknown";e.logger.scope(n).error("Push failed",{error:t,event:c.name}),f=t,p=!0,s.dlq.push([c,t])})(e,s,o,c,u,l);if(k+=Date.now()-d,r&&w&&void 0===s.config.mock&&(0,S.storeCache)(w,r.key,m??!0,r.ttl),void 0!==m&&(g=m),!p&&b){void 0!==m&&(u._response=m);const t=X(b,y,e.transformers,u);if(t.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const n=await J(e,e.transformers,t,c,u,l,`destination.${o}.next`);n.respond&&(l=n.respond)}}return t})),{id:o,destination:s,error:f,response:g,totalDuration:k}})),u={},l={},d={};for(const t of c){if(t.skipped)continue;const n={type:t.destination.type||"unknown",data:t.response};e.status.destinations[t.id]||(e.status.destinations[t.id]={count:0,failed:0,duration:0});const o=e.status.destinations[t.id],s=Date.now();t.error?(n.error=t.error,d[t.id]=n,o.failed++,o.lastAt=s,o.duration+=t.totalDuration||0,e.status.failed++):t.queue&&t.queue.length?l[t.id]=n:(u[t.id]=n,o.count++,o.lastAt=s,o.duration+=t.totalDuration||0,e.status.out++)}return ne({event:t,...Object.keys(u).length&&{done:u},...Object.keys(l).length&&{queued:l},...Object.keys(d).length&&{failed:d}})}async function ee(e,t,n){if(t.init&&!t.config.init){const o=t.type||"unknown",s=e.logger.scope(o),r={collector:e,logger:s,id:n,config:t.config,env:se(t.env,t.config.env)};s.debug("init");const i=await(0,S.useHooks)(t.init,"DestinationInit",e.hooks,e.logger)(r);if(!1===i)return i;if(t.config={...i||t.config,init:!0},t.queueOn?.length){const o=t.queueOn;t.queueOn=[];for(const{type:s,data:r}of o)K(e,t,n,s,r)}s.debug("init done")}return!0}async function te(e,t,n,o,s,r){const{config:i}=t,a=await(0,S.processEventMapping)(o,i,e);if(a.ignore)return!1;const c=t.type||"unknown",u=e.logger.scope(c),l={collector:e,logger:u,id:n,config:i,data:a.data,rule:a.mapping,ingest:s,env:{...se(t.env,i.env),...r?{respond:r}:{}}};if(void 0!==i.mock)return u.debug("mock",{event:a.event.name}),i.mock;const d=a.mapping,f=a.mappingKey||"* *";if(!d?.batch||!t.pushBatch||void 0!==i.mock){u.debug("push",{event:a.event.name});const n=await(0,S.useHooks)(t.push,"DestinationPush",e.hooks,e.logger)(a.event,l);return u.debug("push done"),n}{if(t.batches=t.batches||{},!t.batches[f]){const o={key:f,events:[],data:[]};t.batches[f]={batched:o,batchFn:(0,S.debounce)(()=>{const o=t.batches[f].batched,a={collector:e,logger:u,id:n,config:i,data:void 0,rule:d,ingest:s,env:{...se(t.env,i.env),...r?{respond:r}:{}}};u.debug("push batch",{events:o.events.length}),(0,S.useHooks)(t.pushBatch,"DestinationPushBatch",e.hooks,e.logger)(o,a),u.debug("push batch done"),o.events=[],o.data=[]},d.batch)}}const o=t.batches[f];o.batched.events.push(a.event),(0,S.isDefined)(a.data)&&o.batched.data.push(a.data),o.batchFn()}return!0}function ne(e){return{ok:!e?.failed,...e}}function oe(e){const{code:t,config:n={},env:o={},cache:s}=e,{config:r}=M(e,"before"),{config:i}=M({...e,config:r},"next"),a={...t.config,...n,...i};s&&(a.cache=s);const c=se(t.env,o);return{...t,config:a,env:c}}function se(e,t){return e||t?t?e&&(0,S.isObject)(e)&&(0,S.isObject)(t)?{...e,...t}:t:e:{}}async function re(e,t,n){const o=Object.entries(e).map(async([e,o])=>{const s=o.destroy;if(!s)return;const r=o.type||"unknown",i=n.scope(r),a={id:e,config:o.config,env:o.env??{},logger:i};try{await Promise.race([s(a),new Promise((n,o)=>setTimeout(()=>o(new Error(`${t} '${e}' destroy timed out`)),5e3))])}catch(n){i.error(`${t} '${e}' destroy failed: ${n}`)}});await Promise.allSettled(o)}async function ie(e,t,n,o){let s,r,i=!1;switch(t){case _.Config:(0,H.isObject)(n)&&((0,D.assign)(e.config,n,{shallow:!1}),r=n,i=!0);break;case _.Consent:if((0,H.isObject)(n)){const{update:t}=function(e,t){const n={};return Object.entries(t).forEach(([e,t])=>{n[e]=!!t}),e.consent=(0,A.assign)(e.consent,n),{update:n}}(e,n);r=t,i=!0}break;case _.Custom:(0,H.isObject)(n)&&(e.custom=(0,D.assign)(e.custom,n),r=n,i=!0);break;case _.Destination:(0,H.isObject)(n)&&("code"in n&&(0,H.isObject)(n.code)?s=await Y(e,n,o):(0,D.isFunction)(n.push)&&(s=await Y(e,{code:n},o)));break;case _.Globals:(0,H.isObject)(n)&&(e.globals=(0,D.assign)(e.globals,n),r=n,i=!0);break;case _.On:(0,D.isString)(n)&&await async function(e,t,n){const o=e.on,s=o[t]||[],r=(0,P.isArray)(n)?n:[n];r.forEach(e=>{s.push(e)}),o[t]=s,Q(e,t,r)}(e,n,o);break;case _.Ready:i=!0;break;case _.Run:s=await async function(e,t){return e.allowed=!0,e.timing=Date.now(),t&&(t.consent&&(e.consent=(0,D.assign)(e.consent,t.consent)),t.user&&(e.user=(0,D.assign)(e.user,t.user)),t.globals&&(e.globals=(0,D.assign)(e.config.globalsStatic||{},t.globals)),t.custom&&(e.custom=(0,D.assign)(e.custom,t.custom))),Object.values(e.destinations).forEach(e=>{e.queuePush=[]}),e.queue=[],e.round++,await Z(e)}(e,n),i=!0;break;case _.Session:i=!0;break;case _.Shutdown:await async function(e){const t=e.logger;await re(e.sources,"source",t),await re(e.destinations,"destination",t),await re(e.transformers,"transformer",t),await re(e.stores,"store",t)}(e);break;case _.User:(0,H.isObject)(n)&&((0,D.assign)(e.user,n,{shallow:!1}),r=n,i=!0)}return i&&(await async function(e,t,n,o){let s,r=n||[];switch(n||(r=e.on[t]||[]),t){case _.Consent:s=o||e.consent;break;case _.Session:s=e.session;break;case _.User:s=o||e.user;break;case _.Custom:s=o||e.custom;break;case _.Globals:s=o||e.globals;break;case _.Config:s=o||e.config;break;case _.Ready:case _.Run:default:s=void 0}let i=!1;for(const n of Object.values(e.sources))n.on&&!1===await(0,I.tryCatchAsync)(n.on)(t,s)&&(i=!0);return 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});K(e,o,n,t,s)}}),(Object.keys(e.pending.sources).length>0||Object.keys(e.pending.destinations).length>0)&&await async function(e,t){for(const[n,o]of Object.entries(e.pending.sources)){if(!e.pending.sources[n]||e.sources[n])continue;const s=o.config?.require;if(!s)continue;const r=s.indexOf(t);if(-1===r)continue;if(s.splice(r,1),s.length>0)continue;delete e.pending.sources[n];const i=await V(e,n,o);i&&(e.sources[n]=i)}for(const[n,o]of Object.entries(e.pending.destinations)){if(!e.pending.destinations[n]||e.destinations[n])continue;const s=o.config?.require;if(!s)continue;const r=s.indexOf(t);if(-1===r)continue;if(s.splice(r,1),s.length>0)continue;delete e.pending.destinations[n];const i=oe(o);!1!==i.config.queue&&(i.queuePush=[...e.queue]),e.destinations[n]=i}}(e,t),Q(e,t,r,o),!i}(e,t,void 0,r),s=await Z(e)),s||ne({ok:!0})}function ae(e,t){if(!t.name)throw new Error("Event name is required");const[n,o]=t.name.split(" ");if(!n||!o)throw new Error("Event name is invalid");const{timestamp:s=Date.now(),name:r=`${n} ${o}`,data:i={},context:a={},globals:c=e.globals,custom:u={},user:l=e.user,nested:d=[],consent:f=e.consent,id:g=(0,D.getSpanId)(),trigger:p="",entity:h=n,action:b=o,timing:y=0,source:m={type:"collector",schema:"4"}}=t;return{name:r,data:i,context:a,globals:c,custom:u,user:l,nested:d,consent:f,id:g,trigger:p,entity:h,action:b,timestamp:s,timing:y,source:m}}async function ce(e){const t=(0,j.assign)({globalsStatic:{},sessionStatic:{},run:!0},e,{merge:!1,extend:!1}),n={level:e.logger?.level,handler:e.logger?.handler},o=(0,j.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||{},logger:o,on:{},queue:[],round:0,session:void 0,status:{startedAt:Date.now(),in:0,out:0,failed:0,sources:{},destinations:{}},timing:Date.now(),user:e.user||{},sources:{},pending:{sources:{},destinations:{}},push:void 0,command:void 0};var i,a;r.push=function(e,t){return(0,R.useHooks)(async(n,o={})=>await(0,R.tryCatchAsync)(async()=>{const s=Date.now(),{id:r,ingest:i,respond:a,mapping:c,preChain:u,include:l,exclude:d}=o;let f=a,g=n;const p=l||d?function(e,t,n){let o=e;return t&&(o=Object.fromEntries(Object.entries(o).filter(([e])=>t.includes(e)))),n&&(o=Object.fromEntries(Object.entries(o).filter(([e])=>!n.includes(e)))),o}(e.destinations,l,d):void 0,h=i??(0,R.createIngest)(r||"unknown");if(c){const t=await(0,R.processEventMapping)(g,c,e);if(t.ignore)return ne({ok:!0});if(c.consent&&!(0,R.getGrantedConsent)(c.consent,e.consent,t.event.consent))return ne({ok:!0});g=t.event}if(u?.length&&e.transformers&&Object.keys(e.transformers).length>0){const n=await J(e,e.transformers,u,g,h,f,r?`source.${r}.next`:void 0);if(null===n.event)return ne({ok:!0});if(n.respond&&(f=n.respond),Array.isArray(n.event)){const o=await Promise.all(n.event.map(async n=>{const o=t(n),s=ae(e,o);return Z(e,s,{id:r,ingest:h,respond:f},p)}));if(r){e.status.sources[r]||(e.status.sources[r]={count:0,duration:0});const t=e.status.sources[r];t.count+=n.event.length,t.lastAt=Date.now(),t.duration+=Date.now()-s}return o[0]??ne({ok:!0})}g=n.event}const b=t(g),y=ae(e,b),m=await Z(e,y,{id:r,ingest:h,respond:f},p);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 m},()=>ne({ok:!1}))(),"Push",e.hooks,e.logger)}(r,e=>({timing:Math.round((Date.now()-r.timing)/10)/100,source:{type:"collector",schema:"4",version:"4.0.0-next-1777882869103"},...e})),r.command=(i=r,a=ie,(0,N.useHooks)(async(e,t,n)=>await(0,N.tryCatchAsync)(async()=>await a(i,e,t,n),()=>ne({ok:!1}))(),"Command",i.hooks,i.logger));const c=e.stores||{};if(r.stores=await async function(e,t={}){const n={};for(const[o,s]of Object.entries(t)){const{code:t,config:r={},env:i={}}=s,a=e.logger.scope("store").scope(o),c={collector:e,logger:a,id:o,config:r,env:i},u=await t(c),l=u.get,d=u.set,f=u.delete;u.get=(0,$.useHooks)(l,"StoreGet",e.hooks,e.logger),u.set=(0,$.useHooks)(d,"StoreSet",e.hooks,e.logger),u.delete=(0,$.useHooks)(f,"StoreDelete",e.hooks,e.logger),n[o]=u}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){const e=new Map;r.stores.__cache={type:"memory",config:{},get:t=>{const n=e.get(t);if(n){if(!(n.expires&&Date.now()>n.expires))return n.value;e.delete(t)}},set:(t,n,o)=>{e.set(t,{value:n,expires:o?Date.now()+o:void 0})},delete:t=>{e.delete(t)}}}return 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]=oe(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,{config:i}=M(s,"before"),{config:a}=M({...s,config:i},"next"),c=Object.keys(r).length>0?{...a,env:r}:a,{cache:u}=s,l=u?{...c,cache:u}:c,d=e.logger.scope("transformer").scope(o),f={collector:e,logger:d,id:o,ingest:(0,E.createIngest)(o),config:l,env:r},g=await t(f);n[o]=g}return n}(r,e.transformers||{}),r}async function ue(e){e=e||{};const t=await ce(e),n=(o=t,{type:"elb",config:{},push:async(e,t,n,s,r,i)=>{if("string"==typeof e&&e.startsWith("walker ")){const s=e.replace("walker ","");return o.command(s,t,n)}let a;if("string"==typeof e)a={name:e},t&&"object"==typeof t&&!Array.isArray(t)&&(a.data=t);else{if(!e||"object"!=typeof e)return ne({ok:!1});a=e,t&&"object"==typeof t&&!Array.isArray(t)&&(a.data={...a.data||{},...t})}return s&&"object"==typeof s&&(a.context=s),r&&Array.isArray(r)&&(a.nested=r),i&&"object"==typeof i&&(a.custom=i),o.push(a)}});var o;t.sources.elb=n;const s=await async function(e,t={}){const n={};for(const[o,s]of Object.entries(t)){const{config:t={}}=s;if(t.require&&t.require.length>0){e.pending.sources[o]=s;continue}const r=await V(e,o,s);r&&(n[o]=r)}return n}(t,e.sources||{});Object.assign(t.sources,s);const{consent:r,user:i,globals:a,custom:c}=e;r&&await t.command("consent",r),i&&await t.command("user",i),a&&Object.assign(t.globals,a),c&&Object.assign(t.custom,c),t.config.run&&await t.command("run");let u=n.push;const l=Object.values(t.sources).filter(e=>"elb"!==e.type),d=l.find(e=>e.config.primary);return d?u=d.push:l.length>0&&(u=l[0].push),{collector:t,elb:u}}var le=async e=>{let t;return{get flow(){return t},trigger:()=>async n=>{if(!t){const n=await ue(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 de(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"})}}//# 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:()=>b,schemas:()=>a}),module.exports=(e=i,((e,r,i,a)=>{if(r&&"object"==typeof r||"function"==typeof r)for(let c of o(r))s.call(e,c)||c===i||t(e,c,{get:()=>r[c],enumerable:!(a=n(r,c))||a.enumerable});return e})(t({},"__esModule",{value:!0}),e));var a={};r(a,{CorsOptionsSchema:()=>g,CorsOrigin:()=>f,HttpMethod:()=>d,SettingsSchema:()=>p,settings:()=>h});var c=require("@walkeros/core/dev"),u=require("@walkeros/core/dev"),l=require("@walkeros/core/dev"),d=l.z.enum(["GET","POST","PUT","PATCH","DELETE","OPTIONS","HEAD"]),f=l.z.union([l.z.string(),l.z.array(l.z.string()),l.z.literal("*")]),g=l.z.object({origin:f.describe("Allowed origins (* for all, URL string, or array of URLs)").optional(),methods:l.z.array(d).describe("Allowed HTTP methods").optional(),headers:l.z.array(l.z.string()).describe("Allowed request headers").optional(),credentials:l.z.boolean().describe("Allow credentials (cookies, authorization headers)").optional(),maxAge:l.z.number().int().positive().describe("Preflight cache duration in seconds").optional()}),p=u.z.object({cors:u.z.union([u.z.boolean(),g]).describe("CORS configuration: false = disabled, true = allow all origins, object = custom configuration").default(!0),timeout:u.z.number().int().positive().max(9e5).describe("Request timeout in milliseconds (max: 900000 for Lambda)").default(3e4),enablePixelTracking:u.z.boolean().describe("Enable GET requests with 1x1 transparent GIF response for pixel tracking").default(!0),healthPath:u.z.string().describe("Health check endpoint path (e.g., /health)").default("/health")}),h=(0,c.zodToSchema)(p),b={};r(b,{createTrigger:()=>le,env:()=>y,step:()=>O,trigger:()=>de});var y={};r(y,{push:()=>k});var m=()=>()=>Promise.resolve({ok:!0}),v=()=>{},w={error:v,warn:v,info:v,debug:v,throw:e=>{throw"string"==typeof e?new Error(e):e},json:v,scope:()=>w},k={get push(){return m()},get command(){return m()},get elb(){return m()},logger:w},O={};r(O,{apiGatewayV1Post:()=>x,lambdaGet:()=>q,lambdaPost:()=>C});var C={title:"Lambda POST",description:"An API Gateway v2 HTTP POST with a JSON body is converted into a walker elb event.",trigger:{type:"POST"},in:{version:"2.0",requestContext:{http:{method:"POST",path:"/collect"},requestId:"req-123"},body:JSON.stringify({event:"page view",data:{title:"Home"}}),isBase64Encoded:!1},out:[["elb",{name:"page view",data:{title:"Home"}}]]},x={title:"API Gateway v1 POST",description:"A REST API Gateway v1 POST request with a JSON body is converted into a walker elb event.",trigger:{type:"POST"},in:{httpMethod:"POST",path:"/collect",requestContext:{requestId:"req-789",identity:{sourceIp:"203.0.113.42"}},queryStringParameters:null,body:JSON.stringify({event:"page view",data:{title:"Home"}}),isBase64Encoded:!1},out:[["elb",{name:"page view",data:{title:"Home"}}]]},q={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"}'}]]},A=require("@walkeros/core"),j=require("@walkeros/core"),S=require("@walkeros/core"),P=require("@walkeros/core"),I=require("@walkeros/core"),T=require("@walkeros/core"),E=require("@walkeros/core"),D=require("@walkeros/core"),H=require("@walkeros/core"),R=require("@walkeros/core"),N=require("@walkeros/core"),$=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",Session:"session",Shutdown:"shutdown",User:"user",Walker:"walker"};function z(e,t){return e.storeId&&t.stores[e.storeId]?t.stores[e.storeId]:t.stores.__cache}function G(e){const t={};for(const[n,o]of Object.entries(e)){const e=o.config?.next;e&&!(0,E.isRouteArray)(e)?t[n]={next:e}:t[n]={}}return t}function M(e,t){const n=e.config||{},o=e[t];return void 0!==o?{config:{...n,[t]:o},chainValue:o}:{config:n,chainValue:void 0}}function L(e,t={}){if(!e)return[];if(Array.isArray(e))return e;const n=[],o=new Set;let s=e;for(;s&&t[s]&&!o.has(s);){o.add(s),n.push(s);const e=t[s].next;if(Array.isArray(e)){n.push(...e);break}s=e}return n}async function U(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,E.createIngest)(n),config:t.config,env:F(t.config.env)};s.debug("init");const i=await(0,E.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 B(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:{...F(t.config.env),...r?{respond:r}:{}}};a.debug("push",{event:o.name});const u=await(0,E.useHooks)(t.push,"TransformerPush",e.hooks,e.logger)(o,c);return a.debug("push done"),u}async function J(e,t,n,o,s,r,i){i&&s?._meta&&(s._meta.chainPath=i);let a=o,c=r;for(const o of n){const r=t[o];if(!r){e.logger.warn(`Transformer not found: ${o}`);continue}if(s&&s._meta&&s._meta.path.length>256)return e.logger.error(`Max path length exceeded at ${o}`),{event:null,respond:c};if(s&&s._meta&&(s._meta.hops++,s._meta.path.push(o)),!await(0,E.tryCatchAsync)(U)(e,r,o))return e.logger.error(`Transformer init failed: ${o}`),{event:null,respond:c};if(i&&void 0!==r.config?.chainMocks?.[i]){const t=r.config.chainMocks[i];e.logger.scope(`transformer:${r.type||"unknown"}`).debug("chainMock",{chain:i}),a=t;continue}if(void 0!==r.config?.mock){e.logger.scope(`transformer:${r.type||"unknown"}`).debug("mock"),a=r.config.mock;continue}if(r.config?.disabled)continue;const u=r.config?.cache,l=u?(0,E.compileCache)(u):void 0,d=l?z(l,e):void 0;let f;if(l&&d){const e=(0,E.buildCacheContext)(s,a),t=(0,E.checkCache)(l,d,e,`t:${o}`);if("HIT"===t?.status&&t.value){if(a=t.value,l.full)return{event:a,respond:c};continue}"MISS"===t?.status&&(f={key:t.key,ttl:t.rule.ttl})}const g=r.config.before;if(g){const n=L("string"==typeof g||Array.isArray(g)&&!(0,E.isRouteArray)(g)?g:(0,E.resolveNext)((0,E.compileNext)(g),(0,E.buildCacheContext)(s,a))||void 0,G(t));if(n.length>0){const o=await J(e,t,n,a,s,c,i);if(null===o.event)return{event:null,respond:o.respond??c};o.respond&&(c=o.respond),a=Array.isArray(o.event)?o.event[0]:o.event}}const p=await(0,E.tryCatchAsync)(B,t=>(e.logger.scope(`transformer:${r.type||"unknown"}`).error("Push failed",{error:t}),!1))(e,r,o,a,s,c);if(!1===p)return{event:null,respond:c};if(Array.isArray(p)){const r=n.slice(n.indexOf(o)+1),u=await Promise.all(p.map(async n=>{const o=n.event||a,u=s?{...s,_meta:{...s._meta,path:[...s._meta.path]}}:(0,E.createIngest)("unknown");if(n.next){let s=n.next;if((0,E.isRouteArray)(n.next)){const e=(0,E.compileNext)(n.next);s=(0,E.resolveNext)(e,(0,E.buildCacheContext)(u,o))}if(s){const n=L(s,G(t));if(n.length>0)return J(e,t,n,o,u,c,i)}return{event:o,respond:c}}return r.length>0?J(e,t,r,o,u,c,i):{event:o,respond:c}}));let l=c;const d=[];for(const e of u.flat())if(null!==e)if(e&&"object"==typeof e&&"event"in e){const t=e;if(t.respond&&(l=t.respond),null===t.event)continue;Array.isArray(t.event)?d.push(...t.event):d.push(t.event)}else d.push(e);return 0===d.length?{event:null,respond:l}:1===d.length?{event:d[0],respond:l}:{event:d,respond:l}}if(p&&"object"==typeof p){const{event:n,respond:o,next:r}=p;if(o&&(c=o),r){let o=r;if((0,E.isRouteArray)(r)){const e=(0,E.compileNext)(r);if(o=(0,E.resolveNext)(e,(0,E.buildCacheContext)(s,a)),!o){n&&(a=n);continue}}const u=L(o,G(t));return u.length>0?J(e,t,u,n||a,s,c,i):(e.logger.warn(`Branch target not found: ${JSON.stringify(r)}`),{event:null,respond:c})}n&&(a=n)}if(f&&d&&(0,E.storeCache)(d,f.key,a,f.ttl),(!p||"object"==typeof p&&!p.next)&&r.config.next&&(0,E.isRouteArray)(r.config.next)){const n=r.config.next,o=(0,E.compileNext)(n),u=(0,E.resolveNext)(o,(0,E.buildCacheContext)(s,a));if(u){const n=L(u,G(t));if(n.length>0)return J(e,t,n,a,s,c,i)}return{event:a,respond:c}}}return{event:a,respond:c}}function F(e){return e&&(0,E.isObject)(e)?e:{}}async function V(e,t,n){const{code:o,config:s={},env:r={},primary:i,next:a,before:c,cache:u}=n;let l,d=(0,T.createIngest)(t);const f=u?(0,T.compileCache)({...u,full:u.full??!0}):void 0,g=(0,T.compileNext)(a),p=Array.isArray(a)&&(0,T.isRouteArray)(a)||!g?void 0:L((0,T.resolveNext)(g),G(e.transformers)),h=(0,T.compileNext)(c),b=Array.isArray(c)&&(0,T.isRouteArray)(c)||!h?void 0:L((0,T.resolveNext)(h),G(e.transformers)),y=e.logger.scope("source").scope(t),m={push:async(n,o={})=>{let r,i=n;const a=b??(h?L((0,T.resolveNext)(h,(0,T.buildCacheContext)(d)),G(e.transformers)):[]);if(a.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const n=await J(e,e.transformers,a,i,d,l,`source.${t}.before`);if(null===n.event)return{ok:!0};n.respond&&(l=n.respond),i=Array.isArray(n.event)?n.event[0]:n.event}if(f){const n=z(f,e);if(n){const o=(0,T.buildCacheContext)(d),s=(0,T.checkCache)(f,n,o,`s:${t}`);if(s){if("HIT"===s.status&&void 0!==s.value&&f.full){let t=s.value;return s.rule.update&&(t=await(0,T.applyUpdate)(t,s.rule.update,{...o,cache:{status:"HIT"}},e)),l?.(t),{ok:!0}}if("MISS"===s.status&&f.full&&l){const t=l,i=s.rule.update,a={...o,cache:{status:"MISS"}},c=s.key,u=s.rule.ttl;l=o=>{(0,T.storeCache)(n,c,o,u),i?r=(async()=>{const n=await(0,T.applyUpdate)(o,i,a,e);t(n)})():t(o)}}"MISS"!==s.status||f.full||(0,T.storeCache)(n,s.key,!0,s.rule.ttl)}}}const c=p??(g?L((0,T.resolveNext)(g,(0,T.buildCacheContext)(d)),G(e.transformers)):[]),u=await e.push(i,{...o,id:t,ingest:d,respond:l,mapping:s,preChain:c});return r&&await r,u},command:e.command,sources:e.sources,elb:e.sources.elb.push,logger:y,...r},v={collector:e,logger:y,id:t,config:s,env:m,setIngest:async n=>{if(!s.ingest)return void(d=(0,T.createIngest)(t));const o=await(0,T.getMappingValue)(n,s.ingest,{collector:e}),r=(0,T.createIngest)(t);d={...r,...o,_meta:r._meta}},setRespond:e=>{l=e}},w=await(0,T.tryCatchAsync)(o)(v);if(!w)return;const k=w.type||"unknown",O=e.logger.scope(k).scope(t);return m.logger=O,i&&(w.config={...w.config,primary:i}),w}function W(e,t){return{collector:e,logger:e.logger.scope("on").scope(String(t))}}function K(e,t,n,o,s){if(!t.on)return;const r=t.type||"unknown",i=e.logger.scope(r).scope("on").scope(o),a={collector:e,logger:i,id:n,config:t.config,data:s,env:se(t.env,t.config.env)};(0,I.tryCatch)(t.on)(o,a)}function Q(e,t,n,o){let s;switch(t){case _.Consent:s=o||e.consent;break;case _.Session:s=e.session;break;case _.User:s=o||e.user;break;case _.Custom:s=o||e.custom;break;case _.Globals:s=o||e.globals;break;case _.Config:s=o||e.config;break;case _.Ready:case _.Run:default:s=void 0}if(n.length)switch(t){case _.Consent:!function(e,t,n){const o=n||e.consent,s=W(e,_.Consent);t.forEach(e=>{Object.keys(o).filter(t=>t in e).forEach(t=>{(0,I.tryCatch)(e[t])(o,s)})})}(e,n,o);break;case _.Ready:!function(e,t){if(!e.allowed)return;const n=W(e,_.Ready);t.forEach(e=>{(0,I.tryCatch)(e)(void 0,n)})}(e,n);break;case _.Run:!function(e,t){if(!e.allowed)return;const n=W(e,_.Run);t.forEach(e=>{(0,I.tryCatch)(e)(void 0,n)})}(e,n);break;case _.Session:!function(e,t){if(!e.session)return;const n=W(e,_.Session);t.forEach(t=>{(0,I.tryCatch)(t)(e.session,n)})}(e,n);break;default:{const o=W(e,t);n.forEach(e=>{"function"==typeof e&&(0,I.tryCatch)(e)(s,o)});break}}}function X(e,t,n,o){if(!e)return[];if(t){const e=(0,S.resolveNext)(t,(0,S.buildCacheContext)(o));return e?L(e,G(n)):[]}return L(e,G(n))}async function Y(e,t,n){const{code:o,config:s={},env:r={},before:i,next:a,cache:c}=t;if(!(0,S.isFunction)(o.push))return ne({ok:!1,failed:{invalid:{type:"invalid",error:"Destination code must have a push method"}}});const u=n||s||{init:!1};let l=i?{...u,before:i}:{...u};a&&(l={...l,next:a}),c&&(l={...l,cache:c});const d={...o,config:l,env:se(o.env,r)};let f=d.config.id;if(!f)do{f=(0,S.getId)(5,"abcdefghijklmnopqrstuvwxyz")}while(e.destinations[f]);return e.destinations[f]=d,!1!==d.config.queue&&(d.queuePush=[...e.queue]),Z(e,void 0,{},{[f]:d})}async function Z(e,t,n={},o){const{allowed:s,consent:r,globals:i,user:a}=e;if(!s)return ne({ok:!1});t&&(e.queue.push(t),e.status.in++),o||(o=e.destinations);const c=await Promise.all(Object.entries(o||{}).map(async([o,s])=>{if(s.config.disabled)return{id:o,destination:s,skipped:!0};let c=(s.queuePush||[]).map(e=>({...e,consent:r}));s.queuePush=[],t&&c.push((0,S.clone)(t));const u=n.ingest?{...n.ingest,_meta:{...n.ingest._meta,path:[...n.ingest._meta.path]}}:(0,S.createIngest)("unknown");if(!c.length&&!s.queueOn?.length)return{id:o,destination:s,skipped:!0};if(!c.length&&s.queueOn?.length){const t=await(0,S.tryCatchAsync)(ee)(e,s,o);return{id:o,destination:s,skipped:!t}}const l=[],d=c.filter(e=>{const t=(0,S.getGrantedConsent)(s.config.consent,r,e.consent);return!t||(e.consent=t,l.push(e),!1)});if(s.queuePush.push(...d),!l.length)return{id:o,destination:s,queue:c};if(!await(0,S.tryCatchAsync)(ee)(e,s,o))return{id:o,destination:s,queue:c};let f,g;s.dlq||(s.dlq=[]);const p=s.config.before,h=X(p,p&&(0,S.isRouteArray)(p)?(0,S.compileNext)(p):void 0,e.transformers,u),b=s.config.next,y=b&&(0,S.isRouteArray)(b)?(0,S.compileNext)(b):void 0,m=s.config?.cache,v=m?(0,S.compileCache)(m):void 0,w=v?z(v,e):void 0;let k=0;return await Promise.all(l.map(async t=>{let r;if(t.globals=(0,S.assign)(i,t.globals),t.user=(0,S.assign)(a,t.user),v?.full&&w){const e=(0,S.buildCacheContext)(u,t),n=(0,S.checkCache)(v,w,e,`d:${o}`);if("HIT"===n?.status)return t;"MISS"===n?.status&&(r={key:n.key,ttl:n.rule.ttl})}let c=t,l=n.respond;if(h.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const s=await J(e,e.transformers,h,t,u,n.respond,`destination.${o}.before`);if(null===s.event)return t;s.respond&&(l=s.respond),c=Array.isArray(s.event)?s.event[0]:s.event}if(v&&!v.full&&w){const e=(0,S.buildCacheContext)(u,c),n=(0,S.checkCache)(v,w,e,`d:${o}`);if("HIT"===n?.status)return t;"MISS"===n?.status&&(r={key:n.key,ttl:n.rule.ttl})}const d=Date.now();let p=!1;const m=await(0,S.tryCatchAsync)(te,t=>{const n=s.type||"unknown";e.logger.scope(n).error("Push failed",{error:t,event:c.name}),f=t,p=!0,s.dlq.push([c,t])})(e,s,o,c,u,l);if(k+=Date.now()-d,r&&w&&void 0===s.config.mock&&(0,S.storeCache)(w,r.key,m??!0,r.ttl),void 0!==m&&(g=m),!p&&b){void 0!==m&&(u._response=m);const t=X(b,y,e.transformers,u);if(t.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const n=await J(e,e.transformers,t,c,u,l,`destination.${o}.next`);n.respond&&(l=n.respond)}}return t})),{id:o,destination:s,error:f,response:g,totalDuration:k}})),u={},l={},d={};for(const t of c){if(t.skipped)continue;const n={type:t.destination.type||"unknown",data:t.response};e.status.destinations[t.id]||(e.status.destinations[t.id]={count:0,failed:0,duration:0});const o=e.status.destinations[t.id],s=Date.now();t.error?(n.error=t.error,d[t.id]=n,o.failed++,o.lastAt=s,o.duration+=t.totalDuration||0,e.status.failed++):t.queue&&t.queue.length?l[t.id]=n:(u[t.id]=n,o.count++,o.lastAt=s,o.duration+=t.totalDuration||0,e.status.out++)}return ne({event:t,...Object.keys(u).length&&{done:u},...Object.keys(l).length&&{queued:l},...Object.keys(d).length&&{failed:d}})}async function ee(e,t,n){if(t.init&&!t.config.init){const o=t.type||"unknown",s=e.logger.scope(o),r={collector:e,logger:s,id:n,config:t.config,env:se(t.env,t.config.env)};s.debug("init");const i=await(0,S.useHooks)(t.init,"DestinationInit",e.hooks,e.logger)(r);if(!1===i)return i;if(t.config={...i||t.config,init:!0},t.queueOn?.length){const o=t.queueOn;t.queueOn=[];for(const{type:s,data:r}of o)K(e,t,n,s,r)}s.debug("init done")}return!0}async function te(e,t,n,o,s,r){const{config:i}=t,a=await(0,S.processEventMapping)(o,i,e);if(a.ignore)return!1;const c=t.type||"unknown",u=e.logger.scope(c),l={collector:e,logger:u,id:n,config:i,data:a.data,rule:a.mapping,ingest:s,env:{...se(t.env,i.env),...r?{respond:r}:{}}};if(void 0!==i.mock)return u.debug("mock",{event:a.event.name}),i.mock;const d=a.mapping,f=a.mappingKey||"* *";if(!d?.batch||!t.pushBatch||void 0!==i.mock){u.debug("push",{event:a.event.name});const n=await(0,S.useHooks)(t.push,"DestinationPush",e.hooks,e.logger)(a.event,l);return u.debug("push done"),n}{if(t.batches=t.batches||{},!t.batches[f]){const o={key:f,events:[],data:[]};t.batches[f]={batched:o,batchFn:(0,S.debounce)(()=>{const o=t.batches[f].batched,a={collector:e,logger:u,id:n,config:i,data:void 0,rule:d,ingest:s,env:{...se(t.env,i.env),...r?{respond:r}:{}}};u.debug("push batch",{events:o.events.length}),(0,S.useHooks)(t.pushBatch,"DestinationPushBatch",e.hooks,e.logger)(o,a),u.debug("push batch done"),o.events=[],o.data=[]},d.batch)}}const o=t.batches[f];o.batched.events.push(a.event),(0,S.isDefined)(a.data)&&o.batched.data.push(a.data),o.batchFn()}return!0}function ne(e){return{ok:!e?.failed,...e}}function oe(e){const{code:t,config:n={},env:o={},cache:s}=e,{config:r}=M(e,"before"),{config:i}=M({...e,config:r},"next"),a={...t.config,...n,...i};s&&(a.cache=s);const c=se(t.env,o);return{...t,config:a,env:c}}function se(e,t){return e||t?t?e&&(0,S.isObject)(e)&&(0,S.isObject)(t)?{...e,...t}:t:e:{}}async function re(e,t,n){const o=Object.entries(e).map(async([e,o])=>{const s=o.destroy;if(!s)return;const r=o.type||"unknown",i=n.scope(r),a={id:e,config:o.config,env:o.env??{},logger:i};try{await Promise.race([s(a),new Promise((n,o)=>setTimeout(()=>o(new Error(`${t} '${e}' destroy timed out`)),5e3))])}catch(n){i.error(`${t} '${e}' destroy failed: ${n}`)}});await Promise.allSettled(o)}async function ie(e,t,n,o){let s,r,i=!1;switch(t){case _.Config:(0,H.isObject)(n)&&((0,D.assign)(e.config,n,{shallow:!1}),r=n,i=!0);break;case _.Consent:if((0,H.isObject)(n)){const{update:t}=function(e,t){const n={};return Object.entries(t).forEach(([e,t])=>{n[e]=!!t}),e.consent=(0,A.assign)(e.consent,n),{update:n}}(e,n);r=t,i=!0}break;case _.Custom:(0,H.isObject)(n)&&(e.custom=(0,D.assign)(e.custom,n),r=n,i=!0);break;case _.Destination:(0,H.isObject)(n)&&("code"in n&&(0,H.isObject)(n.code)?s=await Y(e,n,o):(0,D.isFunction)(n.push)&&(s=await Y(e,{code:n},o)));break;case _.Globals:(0,H.isObject)(n)&&(e.globals=(0,D.assign)(e.globals,n),r=n,i=!0);break;case _.On:(0,D.isString)(n)&&await async function(e,t,n){const o=e.on,s=o[t]||[],r=(0,P.isArray)(n)?n:[n];r.forEach(e=>{s.push(e)}),o[t]=s,Q(e,t,r)}(e,n,o);break;case _.Ready:i=!0;break;case _.Run:s=await async function(e,t){return e.allowed=!0,e.timing=Date.now(),t&&(t.consent&&(e.consent=(0,D.assign)(e.consent,t.consent)),t.user&&(e.user=(0,D.assign)(e.user,t.user)),t.globals&&(e.globals=(0,D.assign)(e.config.globalsStatic||{},t.globals)),t.custom&&(e.custom=(0,D.assign)(e.custom,t.custom))),Object.values(e.destinations).forEach(e=>{e.queuePush=[]}),e.queue=[],e.round++,await Z(e)}(e,n),i=!0;break;case _.Session:i=!0;break;case _.Shutdown:await async function(e){const t=e.logger;await re(e.sources,"source",t),await re(e.destinations,"destination",t),await re(e.transformers,"transformer",t),await re(e.stores,"store",t)}(e);break;case _.User:(0,H.isObject)(n)&&((0,D.assign)(e.user,n,{shallow:!1}),r=n,i=!0)}return i&&(await async function(e,t,n,o){let s,r=n||[];switch(n||(r=e.on[t]||[]),t){case _.Consent:s=o||e.consent;break;case _.Session:s=e.session;break;case _.User:s=o||e.user;break;case _.Custom:s=o||e.custom;break;case _.Globals:s=o||e.globals;break;case _.Config:s=o||e.config;break;case _.Ready:case _.Run:default:s=void 0}let i=!1;for(const n of Object.values(e.sources))n.on&&!1===await(0,I.tryCatchAsync)(n.on)(t,s)&&(i=!0);return 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});K(e,o,n,t,s)}}),(Object.keys(e.pending.sources).length>0||Object.keys(e.pending.destinations).length>0)&&await async function(e,t){for(const[n,o]of Object.entries(e.pending.sources)){if(!e.pending.sources[n]||e.sources[n])continue;const s=o.config?.require;if(!s)continue;const r=s.indexOf(t);if(-1===r)continue;if(s.splice(r,1),s.length>0)continue;delete e.pending.sources[n];const i=await V(e,n,o);i&&(e.sources[n]=i)}for(const[n,o]of Object.entries(e.pending.destinations)){if(!e.pending.destinations[n]||e.destinations[n])continue;const s=o.config?.require;if(!s)continue;const r=s.indexOf(t);if(-1===r)continue;if(s.splice(r,1),s.length>0)continue;delete e.pending.destinations[n];const i=oe(o);!1!==i.config.queue&&(i.queuePush=[...e.queue]),e.destinations[n]=i}}(e,t),Q(e,t,r,o),!i}(e,t,void 0,r),s=await Z(e)),s||ne({ok:!0})}function ae(e,t){if(!t.name)throw new Error("Event name is required");const[n,o]=t.name.split(" ");if(!n||!o)throw new Error("Event name is invalid");const{timestamp:s=Date.now(),name:r=`${n} ${o}`,data:i={},context:a={},globals:c=e.globals,custom:u={},user:l=e.user,nested:d=[],consent:f=e.consent,id:g=(0,D.getSpanId)(),trigger:p="",entity:h=n,action:b=o,timing:y=0,source:m={type:"collector",schema:"4"}}=t;return{name:r,data:i,context:a,globals:c,custom:u,user:l,nested:d,consent:f,id:g,trigger:p,entity:h,action:b,timestamp:s,timing:y,source:m}}async function ce(e){const t=(0,j.assign)({globalsStatic:{},sessionStatic:{},run:!0},e,{merge:!1,extend:!1}),n={level:e.logger?.level,handler:e.logger?.handler},o=(0,j.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||{},logger:o,on:{},queue:[],round:0,session:void 0,status:{startedAt:Date.now(),in:0,out:0,failed:0,sources:{},destinations:{}},timing:Date.now(),user:e.user||{},sources:{},pending:{sources:{},destinations:{}},push:void 0,command:void 0};var i,a;r.push=function(e,t){return(0,R.useHooks)(async(n,o={})=>await(0,R.tryCatchAsync)(async()=>{const s=Date.now(),{id:r,ingest:i,respond:a,mapping:c,preChain:u,include:l,exclude:d}=o;let f=a,g=n;const p=l||d?function(e,t,n){let o=e;return t&&(o=Object.fromEntries(Object.entries(o).filter(([e])=>t.includes(e)))),n&&(o=Object.fromEntries(Object.entries(o).filter(([e])=>!n.includes(e)))),o}(e.destinations,l,d):void 0,h=i??(0,R.createIngest)(r||"unknown");if(c){const t=await(0,R.processEventMapping)(g,c,e);if(t.ignore)return ne({ok:!0});if(c.consent&&!(0,R.getGrantedConsent)(c.consent,e.consent,t.event.consent))return ne({ok:!0});g=t.event}if(u?.length&&e.transformers&&Object.keys(e.transformers).length>0){const n=await J(e,e.transformers,u,g,h,f,r?`source.${r}.next`:void 0);if(null===n.event)return ne({ok:!0});if(n.respond&&(f=n.respond),Array.isArray(n.event)){const o=await Promise.all(n.event.map(async n=>{const o=t(n),s=ae(e,o);return Z(e,s,{id:r,ingest:h,respond:f},p)}));if(r){e.status.sources[r]||(e.status.sources[r]={count:0,duration:0});const t=e.status.sources[r];t.count+=n.event.length,t.lastAt=Date.now(),t.duration+=Date.now()-s}return o[0]??ne({ok:!0})}g=n.event}const b=t(g),y=ae(e,b),m=await Z(e,y,{id:r,ingest:h,respond:f},p);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 m},()=>ne({ok:!1}))(),"Push",e.hooks,e.logger)}(r,e=>({timing:Math.round((Date.now()-r.timing)/10)/100,source:{type:"collector",schema:"4",version:"4.0.0"},...e})),r.command=(i=r,a=ie,(0,N.useHooks)(async(e,t,n)=>await(0,N.tryCatchAsync)(async()=>await a(i,e,t,n),()=>ne({ok:!1}))(),"Command",i.hooks,i.logger));const c=e.stores||{};if(r.stores=await async function(e,t={}){const n={};for(const[o,s]of Object.entries(t)){const{code:t,config:r={},env:i={}}=s,a=e.logger.scope("store").scope(o),c={collector:e,logger:a,id:o,config:r,env:i},u=await t(c),l=u.get,d=u.set,f=u.delete;u.get=(0,$.useHooks)(l,"StoreGet",e.hooks,e.logger),u.set=(0,$.useHooks)(d,"StoreSet",e.hooks,e.logger),u.delete=(0,$.useHooks)(f,"StoreDelete",e.hooks,e.logger),n[o]=u}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){const e=new Map;r.stores.__cache={type:"memory",config:{},get:t=>{const n=e.get(t);if(n){if(!(n.expires&&Date.now()>n.expires))return n.value;e.delete(t)}},set:(t,n,o)=>{e.set(t,{value:n,expires:o?Date.now()+o:void 0})},delete:t=>{e.delete(t)}}}return 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]=oe(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,{config:i}=M(s,"before"),{config:a}=M({...s,config:i},"next"),c=Object.keys(r).length>0?{...a,env:r}:a,{cache:u}=s,l=u?{...c,cache:u}:c,d=e.logger.scope("transformer").scope(o),f={collector:e,logger:d,id:o,ingest:(0,E.createIngest)(o),config:l,env:r},g=await t(f);n[o]=g}return n}(r,e.transformers||{}),r}async function ue(e){e=e||{};const t=await ce(e),n=(o=t,{type:"elb",config:{},push:async(e,t,n,s,r,i)=>{if("string"==typeof e&&e.startsWith("walker ")){const s=e.replace("walker ","");return o.command(s,t,n)}let a;if("string"==typeof e)a={name:e},t&&"object"==typeof t&&!Array.isArray(t)&&(a.data=t);else{if(!e||"object"!=typeof e)return ne({ok:!1});a=e,t&&"object"==typeof t&&!Array.isArray(t)&&(a.data={...a.data||{},...t})}return s&&"object"==typeof s&&(a.context=s),r&&Array.isArray(r)&&(a.nested=r),i&&"object"==typeof i&&(a.custom=i),o.push(a)}});var o;t.sources.elb=n;const s=await async function(e,t={}){const n={};for(const[o,s]of Object.entries(t)){const{config:t={}}=s;if(t.require&&t.require.length>0){e.pending.sources[o]=s;continue}const r=await V(e,o,s);r&&(n[o]=r)}return n}(t,e.sources||{});Object.assign(t.sources,s);const{consent:r,user:i,globals:a,custom:c}=e;r&&await t.command("consent",r),i&&await t.command("user",i),a&&Object.assign(t.globals,a),c&&Object.assign(t.custom,c),t.config.run&&await t.command("run");let u=n.push;const l=Object.values(t.sources).filter(e=>"elb"!==e.type),d=l.find(e=>e.config.primary);return d?u=d.push:l.length>0&&(u=l[0].push),{collector:t,elb:u}}var le=async e=>{let t;return{get flow(){return t},trigger:()=>async n=>{if(!t){const n=await ue(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 de(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"})}}//# sourceMappingURL=dev.js.map
|
package/dist/dev.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var e=Object.defineProperty,t=(t,n)=>{for(var o in n)e(t,o,{get:n[o],enumerable:!0})},n={};t(n,{CorsOptionsSchema:()=>c,CorsOrigin:()=>i,HttpMethod:()=>a,SettingsSchema:()=>u,settings:()=>l});import{zodToSchema as o}from"@walkeros/core/dev";import{z as s}from"@walkeros/core/dev";import{z as r}from"@walkeros/core/dev";var a=r.enum(["GET","POST","PUT","PATCH","DELETE","OPTIONS","HEAD"]),i=r.union([r.string(),r.array(r.string()),r.literal("*")]),c=r.object({origin:i.describe("Allowed origins (* for all, URL string, or array of URLs)").optional(),methods:r.array(a).describe("Allowed HTTP methods").optional(),headers:r.array(r.string()).describe("Allowed request headers").optional(),credentials:r.boolean().describe("Allow credentials (cookies, authorization headers)").optional(),maxAge:r.number().int().positive().describe("Preflight cache duration in seconds").optional()}),u=s.object({cors:s.union([s.boolean(),c]).describe("CORS configuration: false = disabled, true = allow all origins, object = custom configuration").default(!0),timeout:s.number().int().positive().max(9e5).describe("Request timeout in milliseconds (max: 900000 for Lambda)").default(3e4),enablePixelTracking:s.boolean().describe("Enable GET requests with 1x1 transparent GIF response for pixel tracking").default(!0),healthPath:s.string().describe("Health check endpoint path (e.g., /health)").default("/health")}),l=o(u),f={};t(f,{createTrigger:()=>Ze,env:()=>d,step:()=>b,trigger:()=>et});var d={};t(d,{push:()=>m});var g=()=>()=>Promise.resolve({ok:!0}),p=()=>{},h={error:p,warn:p,info:p,debug:p,throw:e=>{throw"string"==typeof e?new Error(e):e},json:p,scope:()=>h},m={get push(){return g()},get command(){return g()},get elb(){return g()},logger:h},b={};t(b,{apiGatewayV1Post:()=>v,lambdaGet:()=>w,lambdaPost:()=>y});var y={title:"Lambda POST",description:"An API Gateway v2 HTTP POST with a JSON body is converted into a walker elb event.",trigger:{type:"POST"},in:{version:"2.0",requestContext:{http:{method:"POST",path:"/collect"},requestId:"req-123"},body:JSON.stringify({event:"page view",data:{title:"Home"}}),isBase64Encoded:!1},out:[["elb",{name:"page view",data:{title:"Home"}}]]},v={title:"API Gateway v1 POST",description:"A REST API Gateway v1 POST request with a JSON body is converted into a walker elb event.",trigger:{type:"POST"},in:{httpMethod:"POST",path:"/collect",requestContext:{requestId:"req-789",identity:{sourceIp:"203.0.113.42"}},queryStringParameters:null,body:JSON.stringify({event:"page view",data:{title:"Home"}}),isBase64Encoded:!1},out:[["elb",{name:"page view",data:{title:"Home"}}]]},w={title:"Lambda GET",description:"An API Gateway v2 HTTP GET with query parameters is parsed into an elb event payload.",trigger:{type:"GET"},in:{version:"2.0",requestContext:{http:{method:"GET",path:"/collect"},requestId:"req-456"},rawQueryString:"e=page+view&d=%7B%22title%22%3A%22Home%22%7D",isBase64Encoded:!1},out:[["elb",{e:"page view",d:'{"title":"Home"}'}]]};import{assign as k}from"@walkeros/core";import{assign as O,createLogger as A}from"@walkeros/core";import{assign as S,buildCacheContext as x,clone as j,compileCache as q,checkCache as C,storeCache as P,compileNext as T,createIngest as E,debounce as I,getId as D,getGrantedConsent as $,isDefined as H,isFunction as R,isObject as _,isRouteArray as G,processEventMapping as M,resolveNext as N,tryCatchAsync as L,useHooks as B}from"@walkeros/core";import{isArray as J}from"@walkeros/core";import{tryCatch as U,tryCatchAsync as F}from"@walkeros/core";import{createIngest as z,getMappingValue as V,tryCatchAsync as W,compileNext as K,resolveNext as Q,isRouteArray as X,compileCache as Y,checkCache as Z,storeCache as ee,applyUpdate as te,buildCacheContext as ne}from"@walkeros/core";import{createIngest as oe,isObject as se,tryCatchAsync as re,useHooks as ae,compileNext as ie,resolveNext as ce,isRouteArray as ue,compileCache as le,checkCache as fe,storeCache as de,buildCacheContext as ge}from"@walkeros/core";import{assign as pe,getSpanId as he,isFunction as me,isString as be}from"@walkeros/core";import{isObject as ye}from"@walkeros/core";import{createIngest as ve,getGrantedConsent as we,processEventMapping as ke,tryCatchAsync as Oe,useHooks as Ae}from"@walkeros/core";import{useHooks as Se,tryCatchAsync as xe}from"@walkeros/core";import{useHooks as je}from"@walkeros/core";var qe={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",Session:"session",Shutdown:"shutdown",User:"user",Walker:"walker"};function Ce(e,t){return e.storeId&&t.stores[e.storeId]?t.stores[e.storeId]:t.stores.__cache}function Pe(e){const t={};for(const[n,o]of Object.entries(e)){const e=o.config?.next;e&&!ue(e)?t[n]={next:e}:t[n]={}}return t}function Te(e,t){const n=e.config||{},o=e[t];return void 0!==o?{config:{...n,[t]:o},chainValue:o}:{config:n,chainValue:void 0}}function Ee(e,t={}){if(!e)return[];if(Array.isArray(e))return e;const n=[],o=new Set;let s=e;for(;s&&t[s]&&!o.has(s);){o.add(s),n.push(s);const e=t[s].next;if(Array.isArray(e)){n.push(...e);break}s=e}return n}async function Ie(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:oe(n),config:t.config,env:He(t.config.env)};s.debug("init");const a=await ae(t.init,"TransformerInit",e.hooks,e.logger)(r);if(!1===a)return!1;t.config={...a||t.config,env:a?.env||t.config.env,init:!0},s.debug("init done")}return!0}async function De(e,t,n,o,s,r){const a=t.type||"unknown",i=e.logger.scope(`transformer:${a}`),c={collector:e,logger:i,id:n,ingest:s,config:t.config,env:{...He(t.config.env),...r?{respond:r}:{}}};i.debug("push",{event:o.name});const u=await ae(t.push,"TransformerPush",e.hooks,e.logger)(o,c);return i.debug("push done"),u}async function $e(e,t,n,o,s,r,a){a&&s?._meta&&(s._meta.chainPath=a);let i=o,c=r;for(const o of n){const r=t[o];if(!r){e.logger.warn(`Transformer not found: ${o}`);continue}if(s&&s._meta&&s._meta.path.length>256)return e.logger.error(`Max path length exceeded at ${o}`),{event:null,respond:c};if(s&&s._meta&&(s._meta.hops++,s._meta.path.push(o)),!await re(Ie)(e,r,o))return e.logger.error(`Transformer init failed: ${o}`),{event:null,respond:c};if(a&&void 0!==r.config?.chainMocks?.[a]){const t=r.config.chainMocks[a];e.logger.scope(`transformer:${r.type||"unknown"}`).debug("chainMock",{chain:a}),i=t;continue}if(void 0!==r.config?.mock){e.logger.scope(`transformer:${r.type||"unknown"}`).debug("mock"),i=r.config.mock;continue}if(r.config?.disabled)continue;const u=r.config?.cache,l=u?le(u):void 0,f=l?Ce(l,e):void 0;let d;if(l&&f){const e=ge(s,i),t=fe(l,f,e,`t:${o}`);if("HIT"===t?.status&&t.value){if(i=t.value,l.full)return{event:i,respond:c};continue}"MISS"===t?.status&&(d={key:t.key,ttl:t.rule.ttl})}const g=r.config.before;if(g){const n=Ee("string"==typeof g||Array.isArray(g)&&!ue(g)?g:ce(ie(g),ge(s,i))||void 0,Pe(t));if(n.length>0){const o=await $e(e,t,n,i,s,c,a);if(null===o.event)return{event:null,respond:o.respond??c};o.respond&&(c=o.respond),i=Array.isArray(o.event)?o.event[0]:o.event}}const p=await re(De,t=>(e.logger.scope(`transformer:${r.type||"unknown"}`).error("Push failed",{error:t}),!1))(e,r,o,i,s,c);if(!1===p)return{event:null,respond:c};if(Array.isArray(p)){const r=n.slice(n.indexOf(o)+1),u=await Promise.all(p.map(async n=>{const o=n.event||i,u=s?{...s,_meta:{...s._meta,path:[...s._meta.path]}}:oe("unknown");if(n.next){let s=n.next;if(ue(n.next)){const e=ie(n.next);s=ce(e,ge(u,o))}if(s){const n=Ee(s,Pe(t));if(n.length>0)return $e(e,t,n,o,u,c,a)}return{event:o,respond:c}}return r.length>0?$e(e,t,r,o,u,c,a):{event:o,respond:c}}));let l=c;const f=[];for(const e of u.flat())if(null!==e)if(e&&"object"==typeof e&&"event"in e){const t=e;if(t.respond&&(l=t.respond),null===t.event)continue;Array.isArray(t.event)?f.push(...t.event):f.push(t.event)}else f.push(e);return 0===f.length?{event:null,respond:l}:1===f.length?{event:f[0],respond:l}:{event:f,respond:l}}if(p&&"object"==typeof p){const{event:n,respond:o,next:r}=p;if(o&&(c=o),r){let o=r;if(ue(r)){const e=ie(r);if(o=ce(e,ge(s,i)),!o){n&&(i=n);continue}}const u=Ee(o,Pe(t));return u.length>0?$e(e,t,u,n||i,s,c,a):(e.logger.warn(`Branch target not found: ${JSON.stringify(r)}`),{event:null,respond:c})}n&&(i=n)}if(d&&f&&de(f,d.key,i,d.ttl),(!p||"object"==typeof p&&!p.next)&&r.config.next&&ue(r.config.next)){const n=r.config.next,o=ie(n),u=ce(o,ge(s,i));if(u){const n=Ee(u,Pe(t));if(n.length>0)return $e(e,t,n,i,s,c,a)}return{event:i,respond:c}}}return{event:i,respond:c}}function He(e){return e&&se(e)?e:{}}async function Re(e,t,n){const{code:o,config:s={},env:r={},primary:a,next:i,before:c,cache:u}=n;let l,f=z(t);const d=u?Y({...u,full:u.full??!0}):void 0,g=K(i),p=Array.isArray(i)&&X(i)||!g?void 0:Ee(Q(g),Pe(e.transformers)),h=K(c),m=Array.isArray(c)&&X(c)||!h?void 0:Ee(Q(h),Pe(e.transformers)),b=e.logger.scope("source").scope(t),y={push:async(n,o={})=>{let r,a=n;const i=m??(h?Ee(Q(h,ne(f)),Pe(e.transformers)):[]);if(i.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const n=await $e(e,e.transformers,i,a,f,l,`source.${t}.before`);if(null===n.event)return{ok:!0};n.respond&&(l=n.respond),a=Array.isArray(n.event)?n.event[0]:n.event}if(d){const n=Ce(d,e);if(n){const o=ne(f),s=Z(d,n,o,`s:${t}`);if(s){if("HIT"===s.status&&void 0!==s.value&&d.full){let t=s.value;return s.rule.update&&(t=await te(t,s.rule.update,{...o,cache:{status:"HIT"}},e)),l?.(t),{ok:!0}}if("MISS"===s.status&&d.full&&l){const t=l,a=s.rule.update,i={...o,cache:{status:"MISS"}},c=s.key,u=s.rule.ttl;l=o=>{ee(n,c,o,u),a?r=(async()=>{const n=await te(o,a,i,e);t(n)})():t(o)}}"MISS"!==s.status||d.full||ee(n,s.key,!0,s.rule.ttl)}}}const c=p??(g?Ee(Q(g,ne(f)),Pe(e.transformers)):[]),u=await e.push(a,{...o,id:t,ingest:f,respond:l,mapping:s,preChain:c});return r&&await r,u},command:e.command,sources:e.sources,elb:e.sources.elb.push,logger:b,...r},v={collector:e,logger:b,id:t,config:s,env:y,setIngest:async n=>{if(!s.ingest)return void(f=z(t));const o=await V(n,s.ingest,{collector:e}),r=z(t);f={...r,...o,_meta:r._meta}},setRespond:e=>{l=e}},w=await W(o)(v);if(!w)return;const k=w.type||"unknown",O=e.logger.scope(k).scope(t);return y.logger=O,a&&(w.config={...w.config,primary:a}),w}function _e(e,t){return{collector:e,logger:e.logger.scope("on").scope(String(t))}}function Ge(e,t,n,o,s){if(!t.on)return;const r=t.type||"unknown",a=e.logger.scope(r).scope("on").scope(o),i={collector:e,logger:a,id:n,config:t.config,data:s,env:Ve(t.env,t.config.env)};U(t.on)(o,i)}function Me(e,t,n,o){let s;switch(t){case qe.Consent:s=o||e.consent;break;case qe.Session:s=e.session;break;case qe.User:s=o||e.user;break;case qe.Custom:s=o||e.custom;break;case qe.Globals:s=o||e.globals;break;case qe.Config:s=o||e.config;break;case qe.Ready:case qe.Run:default:s=void 0}if(n.length)switch(t){case qe.Consent:!function(e,t,n){const o=n||e.consent,s=_e(e,qe.Consent);t.forEach(e=>{Object.keys(o).filter(t=>t in e).forEach(t=>{U(e[t])(o,s)})})}(e,n,o);break;case qe.Ready:!function(e,t){if(!e.allowed)return;const n=_e(e,qe.Ready);t.forEach(e=>{U(e)(void 0,n)})}(e,n);break;case qe.Run:!function(e,t){if(!e.allowed)return;const n=_e(e,qe.Run);t.forEach(e=>{U(e)(void 0,n)})}(e,n);break;case qe.Session:!function(e,t){if(!e.session)return;const n=_e(e,qe.Session);t.forEach(t=>{U(t)(e.session,n)})}(e,n);break;default:{const o=_e(e,t);n.forEach(e=>{"function"==typeof e&&U(e)(s,o)});break}}}function Ne(e,t,n,o){if(!e)return[];if(t){const e=N(t,x(o));return e?Ee(e,Pe(n)):[]}return Ee(e,Pe(n))}async function Le(e,t,n){const{code:o,config:s={},env:r={},before:a,next:i,cache:c}=t;if(!R(o.push))return Fe({ok:!1,failed:{invalid:{type:"invalid",error:"Destination code must have a push method"}}});const u=n||s||{init:!1};let l=a?{...u,before:a}:{...u};i&&(l={...l,next:i}),c&&(l={...l,cache:c});const f={...o,config:l,env:Ve(o.env,r)};let d=f.config.id;if(!d)do{d=D(5,"abcdefghijklmnopqrstuvwxyz")}while(e.destinations[d]);return e.destinations[d]=f,!1!==f.config.queue&&(f.queuePush=[...e.queue]),Be(e,void 0,{},{[d]:f})}async function Be(e,t,n={},o){const{allowed:s,consent:r,globals:a,user:i}=e;if(!s)return Fe({ok:!1});t&&(e.queue.push(t),e.status.in++),o||(o=e.destinations);const c=await Promise.all(Object.entries(o||{}).map(async([o,s])=>{if(s.config.disabled)return{id:o,destination:s,skipped:!0};let c=(s.queuePush||[]).map(e=>({...e,consent:r}));s.queuePush=[],t&&c.push(j(t));const u=n.ingest?{...n.ingest,_meta:{...n.ingest._meta,path:[...n.ingest._meta.path]}}:E("unknown");if(!c.length&&!s.queueOn?.length)return{id:o,destination:s,skipped:!0};if(!c.length&&s.queueOn?.length){const t=await L(Je)(e,s,o);return{id:o,destination:s,skipped:!t}}const l=[],f=c.filter(e=>{const t=$(s.config.consent,r,e.consent);return!t||(e.consent=t,l.push(e),!1)});if(s.queuePush.push(...f),!l.length)return{id:o,destination:s,queue:c};if(!await L(Je)(e,s,o))return{id:o,destination:s,queue:c};let d,g;s.dlq||(s.dlq=[]);const p=s.config.before,h=Ne(p,p&&G(p)?T(p):void 0,e.transformers,u),m=s.config.next,b=m&&G(m)?T(m):void 0,y=s.config?.cache,v=y?q(y):void 0,w=v?Ce(v,e):void 0;let k=0;return await Promise.all(l.map(async t=>{let r;if(t.globals=S(a,t.globals),t.user=S(i,t.user),v?.full&&w){const e=x(u,t),n=C(v,w,e,`d:${o}`);if("HIT"===n?.status)return t;"MISS"===n?.status&&(r={key:n.key,ttl:n.rule.ttl})}let c=t,l=n.respond;if(h.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const s=await $e(e,e.transformers,h,t,u,n.respond,`destination.${o}.before`);if(null===s.event)return t;s.respond&&(l=s.respond),c=Array.isArray(s.event)?s.event[0]:s.event}if(v&&!v.full&&w){const e=x(u,c),n=C(v,w,e,`d:${o}`);if("HIT"===n?.status)return t;"MISS"===n?.status&&(r={key:n.key,ttl:n.rule.ttl})}const f=Date.now();let p=!1;const y=await L(Ue,t=>{const n=s.type||"unknown";e.logger.scope(n).error("Push failed",{error:t,event:c.name}),d=t,p=!0,s.dlq.push([c,t])})(e,s,o,c,u,l);if(k+=Date.now()-f,r&&w&&void 0===s.config.mock&&P(w,r.key,y??!0,r.ttl),void 0!==y&&(g=y),!p&&m){void 0!==y&&(u._response=y);const t=Ne(m,b,e.transformers,u);if(t.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const n=await $e(e,e.transformers,t,c,u,l,`destination.${o}.next`);n.respond&&(l=n.respond)}}return t})),{id:o,destination:s,error:d,response:g,totalDuration:k}})),u={},l={},f={};for(const t of c){if(t.skipped)continue;const n={type:t.destination.type||"unknown",data:t.response};e.status.destinations[t.id]||(e.status.destinations[t.id]={count:0,failed:0,duration:0});const o=e.status.destinations[t.id],s=Date.now();t.error?(n.error=t.error,f[t.id]=n,o.failed++,o.lastAt=s,o.duration+=t.totalDuration||0,e.status.failed++):t.queue&&t.queue.length?l[t.id]=n:(u[t.id]=n,o.count++,o.lastAt=s,o.duration+=t.totalDuration||0,e.status.out++)}return Fe({event:t,...Object.keys(u).length&&{done:u},...Object.keys(l).length&&{queued:l},...Object.keys(f).length&&{failed:f}})}async function Je(e,t,n){if(t.init&&!t.config.init){const o=t.type||"unknown",s=e.logger.scope(o),r={collector:e,logger:s,id:n,config:t.config,env:Ve(t.env,t.config.env)};s.debug("init");const a=await B(t.init,"DestinationInit",e.hooks,e.logger)(r);if(!1===a)return a;if(t.config={...a||t.config,init:!0},t.queueOn?.length){const o=t.queueOn;t.queueOn=[];for(const{type:s,data:r}of o)Ge(e,t,n,s,r)}s.debug("init done")}return!0}async function Ue(e,t,n,o,s,r){const{config:a}=t,i=await M(o,a,e);if(i.ignore)return!1;const c=t.type||"unknown",u=e.logger.scope(c),l={collector:e,logger:u,id:n,config:a,data:i.data,rule:i.mapping,ingest:s,env:{...Ve(t.env,a.env),...r?{respond:r}:{}}};if(void 0!==a.mock)return u.debug("mock",{event:i.event.name}),a.mock;const f=i.mapping,d=i.mappingKey||"* *";if(!f?.batch||!t.pushBatch||void 0!==a.mock){u.debug("push",{event:i.event.name});const n=await B(t.push,"DestinationPush",e.hooks,e.logger)(i.event,l);return u.debug("push done"),n}{if(t.batches=t.batches||{},!t.batches[d]){const o={key:d,events:[],data:[]};t.batches[d]={batched:o,batchFn:I(()=>{const o=t.batches[d].batched,i={collector:e,logger:u,id:n,config:a,data:void 0,rule:f,ingest:s,env:{...Ve(t.env,a.env),...r?{respond:r}:{}}};u.debug("push batch",{events:o.events.length}),B(t.pushBatch,"DestinationPushBatch",e.hooks,e.logger)(o,i),u.debug("push batch done"),o.events=[],o.data=[]},f.batch)}}const o=t.batches[d];o.batched.events.push(i.event),H(i.data)&&o.batched.data.push(i.data),o.batchFn()}return!0}function Fe(e){return{ok:!e?.failed,...e}}function ze(e){const{code:t,config:n={},env:o={},cache:s}=e,{config:r}=Te(e,"before"),{config:a}=Te({...e,config:r},"next"),i={...t.config,...n,...a};s&&(i.cache=s);const c=Ve(t.env,o);return{...t,config:i,env:c}}function Ve(e,t){return e||t?t?e&&_(e)&&_(t)?{...e,...t}:t:e:{}}async function We(e,t,n){const o=Object.entries(e).map(async([e,o])=>{const s=o.destroy;if(!s)return;const r=o.type||"unknown",a=n.scope(r),i={id:e,config:o.config,env:o.env??{},logger:a};try{await Promise.race([s(i),new Promise((n,o)=>setTimeout(()=>o(new Error(`${t} '${e}' destroy timed out`)),5e3))])}catch(n){a.error(`${t} '${e}' destroy failed: ${n}`)}});await Promise.allSettled(o)}async function Ke(e,t,n,o){let s,r,a=!1;switch(t){case qe.Config:ye(n)&&(pe(e.config,n,{shallow:!1}),r=n,a=!0);break;case qe.Consent:if(ye(n)){const{update:t}=function(e,t){const n={};return Object.entries(t).forEach(([e,t])=>{n[e]=!!t}),e.consent=k(e.consent,n),{update:n}}(e,n);r=t,a=!0}break;case qe.Custom:ye(n)&&(e.custom=pe(e.custom,n),r=n,a=!0);break;case qe.Destination:ye(n)&&("code"in n&&ye(n.code)?s=await Le(e,n,o):me(n.push)&&(s=await Le(e,{code:n},o)));break;case qe.Globals:ye(n)&&(e.globals=pe(e.globals,n),r=n,a=!0);break;case qe.On:be(n)&&await async function(e,t,n){const o=e.on,s=o[t]||[],r=J(n)?n:[n];r.forEach(e=>{s.push(e)}),o[t]=s,Me(e,t,r)}(e,n,o);break;case qe.Ready:a=!0;break;case qe.Run:s=await async function(e,t){return e.allowed=!0,e.timing=Date.now(),t&&(t.consent&&(e.consent=pe(e.consent,t.consent)),t.user&&(e.user=pe(e.user,t.user)),t.globals&&(e.globals=pe(e.config.globalsStatic||{},t.globals)),t.custom&&(e.custom=pe(e.custom,t.custom))),Object.values(e.destinations).forEach(e=>{e.queuePush=[]}),e.queue=[],e.round++,await Be(e)}(e,n),a=!0;break;case qe.Session:a=!0;break;case qe.Shutdown:await async function(e){const t=e.logger;await We(e.sources,"source",t),await We(e.destinations,"destination",t),await We(e.transformers,"transformer",t),await We(e.stores,"store",t)}(e);break;case qe.User:ye(n)&&(pe(e.user,n,{shallow:!1}),r=n,a=!0)}return a&&(await async function(e,t,n,o){let s,r=n||[];switch(n||(r=e.on[t]||[]),t){case qe.Consent:s=o||e.consent;break;case qe.Session:s=e.session;break;case qe.User:s=o||e.user;break;case qe.Custom:s=o||e.custom;break;case qe.Globals:s=o||e.globals;break;case qe.Config:s=o||e.config;break;case qe.Ready:case qe.Run:default:s=void 0}let a=!1;for(const n of Object.values(e.sources))n.on&&!1===await F(n.on)(t,s)&&(a=!0);return 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});Ge(e,o,n,t,s)}}),(Object.keys(e.pending.sources).length>0||Object.keys(e.pending.destinations).length>0)&&await async function(e,t){for(const[n,o]of Object.entries(e.pending.sources)){if(!e.pending.sources[n]||e.sources[n])continue;const s=o.config?.require;if(!s)continue;const r=s.indexOf(t);if(-1===r)continue;if(s.splice(r,1),s.length>0)continue;delete e.pending.sources[n];const a=await Re(e,n,o);a&&(e.sources[n]=a)}for(const[n,o]of Object.entries(e.pending.destinations)){if(!e.pending.destinations[n]||e.destinations[n])continue;const s=o.config?.require;if(!s)continue;const r=s.indexOf(t);if(-1===r)continue;if(s.splice(r,1),s.length>0)continue;delete e.pending.destinations[n];const a=ze(o);!1!==a.config.queue&&(a.queuePush=[...e.queue]),e.destinations[n]=a}}(e,t),Me(e,t,r,o),!a}(e,t,void 0,r),s=await Be(e)),s||Fe({ok:!0})}function Qe(e,t){if(!t.name)throw new Error("Event name is required");const[n,o]=t.name.split(" ");if(!n||!o)throw new Error("Event name is invalid");const{timestamp:s=Date.now(),name:r=`${n} ${o}`,data:a={},context:i={},globals:c=e.globals,custom:u={},user:l=e.user,nested:f=[],consent:d=e.consent,id:g=he(),trigger:p="",entity:h=n,action:m=o,timing:b=0,source:y={type:"collector",schema:"4"}}=t;return{name:r,data:a,context:i,globals:c,custom:u,user:l,nested:f,consent:d,id:g,trigger:p,entity:h,action:m,timestamp:s,timing:b,source:y}}async function Xe(e){const t=O({globalsStatic:{},sessionStatic:{},run:!0},e,{merge:!1,extend:!1}),n={level:e.logger?.level,handler:e.logger?.handler},o=A(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||{},logger:o,on:{},queue:[],round:0,session:void 0,status:{startedAt:Date.now(),in:0,out:0,failed:0,sources:{},destinations:{}},timing:Date.now(),user:e.user||{},sources:{},pending:{sources:{},destinations:{}},push:void 0,command:void 0};var a,i;r.push=function(e,t){return Ae(async(n,o={})=>await Oe(async()=>{const s=Date.now(),{id:r,ingest:a,respond:i,mapping:c,preChain:u,include:l,exclude:f}=o;let d=i,g=n;const p=l||f?function(e,t,n){let o=e;return t&&(o=Object.fromEntries(Object.entries(o).filter(([e])=>t.includes(e)))),n&&(o=Object.fromEntries(Object.entries(o).filter(([e])=>!n.includes(e)))),o}(e.destinations,l,f):void 0,h=a??ve(r||"unknown");if(c){const t=await ke(g,c,e);if(t.ignore)return Fe({ok:!0});if(c.consent&&!we(c.consent,e.consent,t.event.consent))return Fe({ok:!0});g=t.event}if(u?.length&&e.transformers&&Object.keys(e.transformers).length>0){const n=await $e(e,e.transformers,u,g,h,d,r?`source.${r}.next`:void 0);if(null===n.event)return Fe({ok:!0});if(n.respond&&(d=n.respond),Array.isArray(n.event)){const o=await Promise.all(n.event.map(async n=>{const o=t(n),s=Qe(e,o);return Be(e,s,{id:r,ingest:h,respond:d},p)}));if(r){e.status.sources[r]||(e.status.sources[r]={count:0,duration:0});const t=e.status.sources[r];t.count+=n.event.length,t.lastAt=Date.now(),t.duration+=Date.now()-s}return o[0]??Fe({ok:!0})}g=n.event}const m=t(g),b=Qe(e,m),y=await Be(e,b,{id:r,ingest:h,respond:d},p);if(r){e.status.sources[r]||(e.status.sources[r]={count:0,duration:0});const t=e.status.sources[r];t.count++,t.lastAt=Date.now(),t.duration+=Date.now()-s}return y},()=>Fe({ok:!1}))(),"Push",e.hooks,e.logger)}(r,e=>({timing:Math.round((Date.now()-r.timing)/10)/100,source:{type:"collector",schema:"4",version:"4.0.0-next-1777882869103"},...e})),r.command=(i=Ke,Se(async(e,t,n)=>await xe(async()=>await i(a,e,t,n),()=>Fe({ok:!1}))(),"Command",(a=r).hooks,a.logger));const c=e.stores||{};if(r.stores=await async function(e,t={}){const n={};for(const[o,s]of Object.entries(t)){const{code:t,config:r={},env:a={}}=s,i=e.logger.scope("store").scope(o),c={collector:e,logger:i,id:o,config:r,env:a},u=await t(c),l=u.get,f=u.set,d=u.delete;u.get=je(l,"StoreGet",e.hooks,e.logger),u.set=je(f,"StoreSet",e.hooks,e.logger),u.delete=je(d,"StoreDelete",e.hooks,e.logger),n[o]=u}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){const e=new Map;r.stores.__cache={type:"memory",config:{},get:t=>{const n=e.get(t);if(n){if(!(n.expires&&Date.now()>n.expires))return n.value;e.delete(t)}},set:(t,n,o)=>{e.set(t,{value:n,expires:o?Date.now()+o:void 0})},delete:t=>{e.delete(t)}}}return 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]=ze(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,{config:a}=Te(s,"before"),{config:i}=Te({...s,config:a},"next"),c=Object.keys(r).length>0?{...i,env:r}:i,{cache:u}=s,l=u?{...c,cache:u}:c,f=e.logger.scope("transformer").scope(o),d={collector:e,logger:f,id:o,ingest:oe(o),config:l,env:r},g=await t(d);n[o]=g}return n}(r,e.transformers||{}),r}async function Ye(e){e=e||{};const t=await Xe(e),n=(o=t,{type:"elb",config:{},push:async(e,t,n,s,r,a)=>{if("string"==typeof e&&e.startsWith("walker ")){const s=e.replace("walker ","");return o.command(s,t,n)}let i;if("string"==typeof e)i={name:e},t&&"object"==typeof t&&!Array.isArray(t)&&(i.data=t);else{if(!e||"object"!=typeof e)return Fe({ok:!1});i=e,t&&"object"==typeof t&&!Array.isArray(t)&&(i.data={...i.data||{},...t})}return s&&"object"==typeof s&&(i.context=s),r&&Array.isArray(r)&&(i.nested=r),a&&"object"==typeof a&&(i.custom=a),o.push(i)}});var o;t.sources.elb=n;const s=await async function(e,t={}){const n={};for(const[o,s]of Object.entries(t)){const{config:t={}}=s;if(t.require&&t.require.length>0){e.pending.sources[o]=s;continue}const r=await Re(e,o,s);r&&(n[o]=r)}return n}(t,e.sources||{});Object.assign(t.sources,s);const{consent:r,user:a,globals:i,custom:c}=e;r&&await t.command("consent",r),a&&await t.command("user",a),i&&Object.assign(t.globals,i),c&&Object.assign(t.custom,c),t.config.run&&await t.command("run");let u=n.push;const l=Object.values(t.sources).filter(e=>"elb"!==e.type),f=l.find(e=>e.config.primary);return f?u=f.push:l.length>0&&(u=l[0].push),{collector:t,elb:u}}var Ze=async e=>{let t;return{get flow(){return t},trigger:()=>async n=>{if(!t){const n=await Ye(e);t={collector:n.collector,elb:n.elb}}const o=function(e){for(const t of Object.values(e.sources||{}))if("lambda"===t.type)return t}(t.collector);if(!o)throw new Error("Lambda source not found in collector");const s={awsRequestId:`test-${Date.now()}`},r=o.push,a=await r(n,s);let i;try{i=JSON.parse(a.body||"{}")}catch{i=a.body}const c={};if(a.headers)for(const[e,t]of Object.entries(a.headers))void 0!==t&&(c[e]=String(t));return{statusCode:a.statusCode,body:i,headers:c}}}};function et(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"})}}export{f as examples,n as schemas};//# sourceMappingURL=dev.mjs.map
|
|
1
|
+
var e=Object.defineProperty,t=(t,n)=>{for(var o in n)e(t,o,{get:n[o],enumerable:!0})},n={};t(n,{CorsOptionsSchema:()=>c,CorsOrigin:()=>i,HttpMethod:()=>a,SettingsSchema:()=>u,settings:()=>l});import{zodToSchema as o}from"@walkeros/core/dev";import{z as s}from"@walkeros/core/dev";import{z as r}from"@walkeros/core/dev";var a=r.enum(["GET","POST","PUT","PATCH","DELETE","OPTIONS","HEAD"]),i=r.union([r.string(),r.array(r.string()),r.literal("*")]),c=r.object({origin:i.describe("Allowed origins (* for all, URL string, or array of URLs)").optional(),methods:r.array(a).describe("Allowed HTTP methods").optional(),headers:r.array(r.string()).describe("Allowed request headers").optional(),credentials:r.boolean().describe("Allow credentials (cookies, authorization headers)").optional(),maxAge:r.number().int().positive().describe("Preflight cache duration in seconds").optional()}),u=s.object({cors:s.union([s.boolean(),c]).describe("CORS configuration: false = disabled, true = allow all origins, object = custom configuration").default(!0),timeout:s.number().int().positive().max(9e5).describe("Request timeout in milliseconds (max: 900000 for Lambda)").default(3e4),enablePixelTracking:s.boolean().describe("Enable GET requests with 1x1 transparent GIF response for pixel tracking").default(!0),healthPath:s.string().describe("Health check endpoint path (e.g., /health)").default("/health")}),l=o(u),f={};t(f,{createTrigger:()=>Ze,env:()=>d,step:()=>b,trigger:()=>et});var d={};t(d,{push:()=>m});var g=()=>()=>Promise.resolve({ok:!0}),p=()=>{},h={error:p,warn:p,info:p,debug:p,throw:e=>{throw"string"==typeof e?new Error(e):e},json:p,scope:()=>h},m={get push(){return g()},get command(){return g()},get elb(){return g()},logger:h},b={};t(b,{apiGatewayV1Post:()=>v,lambdaGet:()=>w,lambdaPost:()=>y});var y={title:"Lambda POST",description:"An API Gateway v2 HTTP POST with a JSON body is converted into a walker elb event.",trigger:{type:"POST"},in:{version:"2.0",requestContext:{http:{method:"POST",path:"/collect"},requestId:"req-123"},body:JSON.stringify({event:"page view",data:{title:"Home"}}),isBase64Encoded:!1},out:[["elb",{name:"page view",data:{title:"Home"}}]]},v={title:"API Gateway v1 POST",description:"A REST API Gateway v1 POST request with a JSON body is converted into a walker elb event.",trigger:{type:"POST"},in:{httpMethod:"POST",path:"/collect",requestContext:{requestId:"req-789",identity:{sourceIp:"203.0.113.42"}},queryStringParameters:null,body:JSON.stringify({event:"page view",data:{title:"Home"}}),isBase64Encoded:!1},out:[["elb",{name:"page view",data:{title:"Home"}}]]},w={title:"Lambda GET",description:"An API Gateway v2 HTTP GET with query parameters is parsed into an elb event payload.",trigger:{type:"GET"},in:{version:"2.0",requestContext:{http:{method:"GET",path:"/collect"},requestId:"req-456"},rawQueryString:"e=page+view&d=%7B%22title%22%3A%22Home%22%7D",isBase64Encoded:!1},out:[["elb",{e:"page view",d:'{"title":"Home"}'}]]};import{assign as k}from"@walkeros/core";import{assign as O,createLogger as A}from"@walkeros/core";import{assign as S,buildCacheContext as x,clone as j,compileCache as q,checkCache as C,storeCache as P,compileNext as T,createIngest as E,debounce as I,getId as D,getGrantedConsent as $,isDefined as H,isFunction as R,isObject as _,isRouteArray as G,processEventMapping as M,resolveNext as N,tryCatchAsync as L,useHooks as B}from"@walkeros/core";import{isArray as J}from"@walkeros/core";import{tryCatch as U,tryCatchAsync as F}from"@walkeros/core";import{createIngest as z,getMappingValue as V,tryCatchAsync as W,compileNext as K,resolveNext as Q,isRouteArray as X,compileCache as Y,checkCache as Z,storeCache as ee,applyUpdate as te,buildCacheContext as ne}from"@walkeros/core";import{createIngest as oe,isObject as se,tryCatchAsync as re,useHooks as ae,compileNext as ie,resolveNext as ce,isRouteArray as ue,compileCache as le,checkCache as fe,storeCache as de,buildCacheContext as ge}from"@walkeros/core";import{assign as pe,getSpanId as he,isFunction as me,isString as be}from"@walkeros/core";import{isObject as ye}from"@walkeros/core";import{createIngest as ve,getGrantedConsent as we,processEventMapping as ke,tryCatchAsync as Oe,useHooks as Ae}from"@walkeros/core";import{useHooks as Se,tryCatchAsync as xe}from"@walkeros/core";import{useHooks as je}from"@walkeros/core";var qe={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",Session:"session",Shutdown:"shutdown",User:"user",Walker:"walker"};function Ce(e,t){return e.storeId&&t.stores[e.storeId]?t.stores[e.storeId]:t.stores.__cache}function Pe(e){const t={};for(const[n,o]of Object.entries(e)){const e=o.config?.next;e&&!ue(e)?t[n]={next:e}:t[n]={}}return t}function Te(e,t){const n=e.config||{},o=e[t];return void 0!==o?{config:{...n,[t]:o},chainValue:o}:{config:n,chainValue:void 0}}function Ee(e,t={}){if(!e)return[];if(Array.isArray(e))return e;const n=[],o=new Set;let s=e;for(;s&&t[s]&&!o.has(s);){o.add(s),n.push(s);const e=t[s].next;if(Array.isArray(e)){n.push(...e);break}s=e}return n}async function Ie(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:oe(n),config:t.config,env:He(t.config.env)};s.debug("init");const a=await ae(t.init,"TransformerInit",e.hooks,e.logger)(r);if(!1===a)return!1;t.config={...a||t.config,env:a?.env||t.config.env,init:!0},s.debug("init done")}return!0}async function De(e,t,n,o,s,r){const a=t.type||"unknown",i=e.logger.scope(`transformer:${a}`),c={collector:e,logger:i,id:n,ingest:s,config:t.config,env:{...He(t.config.env),...r?{respond:r}:{}}};i.debug("push",{event:o.name});const u=await ae(t.push,"TransformerPush",e.hooks,e.logger)(o,c);return i.debug("push done"),u}async function $e(e,t,n,o,s,r,a){a&&s?._meta&&(s._meta.chainPath=a);let i=o,c=r;for(const o of n){const r=t[o];if(!r){e.logger.warn(`Transformer not found: ${o}`);continue}if(s&&s._meta&&s._meta.path.length>256)return e.logger.error(`Max path length exceeded at ${o}`),{event:null,respond:c};if(s&&s._meta&&(s._meta.hops++,s._meta.path.push(o)),!await re(Ie)(e,r,o))return e.logger.error(`Transformer init failed: ${o}`),{event:null,respond:c};if(a&&void 0!==r.config?.chainMocks?.[a]){const t=r.config.chainMocks[a];e.logger.scope(`transformer:${r.type||"unknown"}`).debug("chainMock",{chain:a}),i=t;continue}if(void 0!==r.config?.mock){e.logger.scope(`transformer:${r.type||"unknown"}`).debug("mock"),i=r.config.mock;continue}if(r.config?.disabled)continue;const u=r.config?.cache,l=u?le(u):void 0,f=l?Ce(l,e):void 0;let d;if(l&&f){const e=ge(s,i),t=fe(l,f,e,`t:${o}`);if("HIT"===t?.status&&t.value){if(i=t.value,l.full)return{event:i,respond:c};continue}"MISS"===t?.status&&(d={key:t.key,ttl:t.rule.ttl})}const g=r.config.before;if(g){const n=Ee("string"==typeof g||Array.isArray(g)&&!ue(g)?g:ce(ie(g),ge(s,i))||void 0,Pe(t));if(n.length>0){const o=await $e(e,t,n,i,s,c,a);if(null===o.event)return{event:null,respond:o.respond??c};o.respond&&(c=o.respond),i=Array.isArray(o.event)?o.event[0]:o.event}}const p=await re(De,t=>(e.logger.scope(`transformer:${r.type||"unknown"}`).error("Push failed",{error:t}),!1))(e,r,o,i,s,c);if(!1===p)return{event:null,respond:c};if(Array.isArray(p)){const r=n.slice(n.indexOf(o)+1),u=await Promise.all(p.map(async n=>{const o=n.event||i,u=s?{...s,_meta:{...s._meta,path:[...s._meta.path]}}:oe("unknown");if(n.next){let s=n.next;if(ue(n.next)){const e=ie(n.next);s=ce(e,ge(u,o))}if(s){const n=Ee(s,Pe(t));if(n.length>0)return $e(e,t,n,o,u,c,a)}return{event:o,respond:c}}return r.length>0?$e(e,t,r,o,u,c,a):{event:o,respond:c}}));let l=c;const f=[];for(const e of u.flat())if(null!==e)if(e&&"object"==typeof e&&"event"in e){const t=e;if(t.respond&&(l=t.respond),null===t.event)continue;Array.isArray(t.event)?f.push(...t.event):f.push(t.event)}else f.push(e);return 0===f.length?{event:null,respond:l}:1===f.length?{event:f[0],respond:l}:{event:f,respond:l}}if(p&&"object"==typeof p){const{event:n,respond:o,next:r}=p;if(o&&(c=o),r){let o=r;if(ue(r)){const e=ie(r);if(o=ce(e,ge(s,i)),!o){n&&(i=n);continue}}const u=Ee(o,Pe(t));return u.length>0?$e(e,t,u,n||i,s,c,a):(e.logger.warn(`Branch target not found: ${JSON.stringify(r)}`),{event:null,respond:c})}n&&(i=n)}if(d&&f&&de(f,d.key,i,d.ttl),(!p||"object"==typeof p&&!p.next)&&r.config.next&&ue(r.config.next)){const n=r.config.next,o=ie(n),u=ce(o,ge(s,i));if(u){const n=Ee(u,Pe(t));if(n.length>0)return $e(e,t,n,i,s,c,a)}return{event:i,respond:c}}}return{event:i,respond:c}}function He(e){return e&&se(e)?e:{}}async function Re(e,t,n){const{code:o,config:s={},env:r={},primary:a,next:i,before:c,cache:u}=n;let l,f=z(t);const d=u?Y({...u,full:u.full??!0}):void 0,g=K(i),p=Array.isArray(i)&&X(i)||!g?void 0:Ee(Q(g),Pe(e.transformers)),h=K(c),m=Array.isArray(c)&&X(c)||!h?void 0:Ee(Q(h),Pe(e.transformers)),b=e.logger.scope("source").scope(t),y={push:async(n,o={})=>{let r,a=n;const i=m??(h?Ee(Q(h,ne(f)),Pe(e.transformers)):[]);if(i.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const n=await $e(e,e.transformers,i,a,f,l,`source.${t}.before`);if(null===n.event)return{ok:!0};n.respond&&(l=n.respond),a=Array.isArray(n.event)?n.event[0]:n.event}if(d){const n=Ce(d,e);if(n){const o=ne(f),s=Z(d,n,o,`s:${t}`);if(s){if("HIT"===s.status&&void 0!==s.value&&d.full){let t=s.value;return s.rule.update&&(t=await te(t,s.rule.update,{...o,cache:{status:"HIT"}},e)),l?.(t),{ok:!0}}if("MISS"===s.status&&d.full&&l){const t=l,a=s.rule.update,i={...o,cache:{status:"MISS"}},c=s.key,u=s.rule.ttl;l=o=>{ee(n,c,o,u),a?r=(async()=>{const n=await te(o,a,i,e);t(n)})():t(o)}}"MISS"!==s.status||d.full||ee(n,s.key,!0,s.rule.ttl)}}}const c=p??(g?Ee(Q(g,ne(f)),Pe(e.transformers)):[]),u=await e.push(a,{...o,id:t,ingest:f,respond:l,mapping:s,preChain:c});return r&&await r,u},command:e.command,sources:e.sources,elb:e.sources.elb.push,logger:b,...r},v={collector:e,logger:b,id:t,config:s,env:y,setIngest:async n=>{if(!s.ingest)return void(f=z(t));const o=await V(n,s.ingest,{collector:e}),r=z(t);f={...r,...o,_meta:r._meta}},setRespond:e=>{l=e}},w=await W(o)(v);if(!w)return;const k=w.type||"unknown",O=e.logger.scope(k).scope(t);return y.logger=O,a&&(w.config={...w.config,primary:a}),w}function _e(e,t){return{collector:e,logger:e.logger.scope("on").scope(String(t))}}function Ge(e,t,n,o,s){if(!t.on)return;const r=t.type||"unknown",a=e.logger.scope(r).scope("on").scope(o),i={collector:e,logger:a,id:n,config:t.config,data:s,env:Ve(t.env,t.config.env)};U(t.on)(o,i)}function Me(e,t,n,o){let s;switch(t){case qe.Consent:s=o||e.consent;break;case qe.Session:s=e.session;break;case qe.User:s=o||e.user;break;case qe.Custom:s=o||e.custom;break;case qe.Globals:s=o||e.globals;break;case qe.Config:s=o||e.config;break;case qe.Ready:case qe.Run:default:s=void 0}if(n.length)switch(t){case qe.Consent:!function(e,t,n){const o=n||e.consent,s=_e(e,qe.Consent);t.forEach(e=>{Object.keys(o).filter(t=>t in e).forEach(t=>{U(e[t])(o,s)})})}(e,n,o);break;case qe.Ready:!function(e,t){if(!e.allowed)return;const n=_e(e,qe.Ready);t.forEach(e=>{U(e)(void 0,n)})}(e,n);break;case qe.Run:!function(e,t){if(!e.allowed)return;const n=_e(e,qe.Run);t.forEach(e=>{U(e)(void 0,n)})}(e,n);break;case qe.Session:!function(e,t){if(!e.session)return;const n=_e(e,qe.Session);t.forEach(t=>{U(t)(e.session,n)})}(e,n);break;default:{const o=_e(e,t);n.forEach(e=>{"function"==typeof e&&U(e)(s,o)});break}}}function Ne(e,t,n,o){if(!e)return[];if(t){const e=N(t,x(o));return e?Ee(e,Pe(n)):[]}return Ee(e,Pe(n))}async function Le(e,t,n){const{code:o,config:s={},env:r={},before:a,next:i,cache:c}=t;if(!R(o.push))return Fe({ok:!1,failed:{invalid:{type:"invalid",error:"Destination code must have a push method"}}});const u=n||s||{init:!1};let l=a?{...u,before:a}:{...u};i&&(l={...l,next:i}),c&&(l={...l,cache:c});const f={...o,config:l,env:Ve(o.env,r)};let d=f.config.id;if(!d)do{d=D(5,"abcdefghijklmnopqrstuvwxyz")}while(e.destinations[d]);return e.destinations[d]=f,!1!==f.config.queue&&(f.queuePush=[...e.queue]),Be(e,void 0,{},{[d]:f})}async function Be(e,t,n={},o){const{allowed:s,consent:r,globals:a,user:i}=e;if(!s)return Fe({ok:!1});t&&(e.queue.push(t),e.status.in++),o||(o=e.destinations);const c=await Promise.all(Object.entries(o||{}).map(async([o,s])=>{if(s.config.disabled)return{id:o,destination:s,skipped:!0};let c=(s.queuePush||[]).map(e=>({...e,consent:r}));s.queuePush=[],t&&c.push(j(t));const u=n.ingest?{...n.ingest,_meta:{...n.ingest._meta,path:[...n.ingest._meta.path]}}:E("unknown");if(!c.length&&!s.queueOn?.length)return{id:o,destination:s,skipped:!0};if(!c.length&&s.queueOn?.length){const t=await L(Je)(e,s,o);return{id:o,destination:s,skipped:!t}}const l=[],f=c.filter(e=>{const t=$(s.config.consent,r,e.consent);return!t||(e.consent=t,l.push(e),!1)});if(s.queuePush.push(...f),!l.length)return{id:o,destination:s,queue:c};if(!await L(Je)(e,s,o))return{id:o,destination:s,queue:c};let d,g;s.dlq||(s.dlq=[]);const p=s.config.before,h=Ne(p,p&&G(p)?T(p):void 0,e.transformers,u),m=s.config.next,b=m&&G(m)?T(m):void 0,y=s.config?.cache,v=y?q(y):void 0,w=v?Ce(v,e):void 0;let k=0;return await Promise.all(l.map(async t=>{let r;if(t.globals=S(a,t.globals),t.user=S(i,t.user),v?.full&&w){const e=x(u,t),n=C(v,w,e,`d:${o}`);if("HIT"===n?.status)return t;"MISS"===n?.status&&(r={key:n.key,ttl:n.rule.ttl})}let c=t,l=n.respond;if(h.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const s=await $e(e,e.transformers,h,t,u,n.respond,`destination.${o}.before`);if(null===s.event)return t;s.respond&&(l=s.respond),c=Array.isArray(s.event)?s.event[0]:s.event}if(v&&!v.full&&w){const e=x(u,c),n=C(v,w,e,`d:${o}`);if("HIT"===n?.status)return t;"MISS"===n?.status&&(r={key:n.key,ttl:n.rule.ttl})}const f=Date.now();let p=!1;const y=await L(Ue,t=>{const n=s.type||"unknown";e.logger.scope(n).error("Push failed",{error:t,event:c.name}),d=t,p=!0,s.dlq.push([c,t])})(e,s,o,c,u,l);if(k+=Date.now()-f,r&&w&&void 0===s.config.mock&&P(w,r.key,y??!0,r.ttl),void 0!==y&&(g=y),!p&&m){void 0!==y&&(u._response=y);const t=Ne(m,b,e.transformers,u);if(t.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const n=await $e(e,e.transformers,t,c,u,l,`destination.${o}.next`);n.respond&&(l=n.respond)}}return t})),{id:o,destination:s,error:d,response:g,totalDuration:k}})),u={},l={},f={};for(const t of c){if(t.skipped)continue;const n={type:t.destination.type||"unknown",data:t.response};e.status.destinations[t.id]||(e.status.destinations[t.id]={count:0,failed:0,duration:0});const o=e.status.destinations[t.id],s=Date.now();t.error?(n.error=t.error,f[t.id]=n,o.failed++,o.lastAt=s,o.duration+=t.totalDuration||0,e.status.failed++):t.queue&&t.queue.length?l[t.id]=n:(u[t.id]=n,o.count++,o.lastAt=s,o.duration+=t.totalDuration||0,e.status.out++)}return Fe({event:t,...Object.keys(u).length&&{done:u},...Object.keys(l).length&&{queued:l},...Object.keys(f).length&&{failed:f}})}async function Je(e,t,n){if(t.init&&!t.config.init){const o=t.type||"unknown",s=e.logger.scope(o),r={collector:e,logger:s,id:n,config:t.config,env:Ve(t.env,t.config.env)};s.debug("init");const a=await B(t.init,"DestinationInit",e.hooks,e.logger)(r);if(!1===a)return a;if(t.config={...a||t.config,init:!0},t.queueOn?.length){const o=t.queueOn;t.queueOn=[];for(const{type:s,data:r}of o)Ge(e,t,n,s,r)}s.debug("init done")}return!0}async function Ue(e,t,n,o,s,r){const{config:a}=t,i=await M(o,a,e);if(i.ignore)return!1;const c=t.type||"unknown",u=e.logger.scope(c),l={collector:e,logger:u,id:n,config:a,data:i.data,rule:i.mapping,ingest:s,env:{...Ve(t.env,a.env),...r?{respond:r}:{}}};if(void 0!==a.mock)return u.debug("mock",{event:i.event.name}),a.mock;const f=i.mapping,d=i.mappingKey||"* *";if(!f?.batch||!t.pushBatch||void 0!==a.mock){u.debug("push",{event:i.event.name});const n=await B(t.push,"DestinationPush",e.hooks,e.logger)(i.event,l);return u.debug("push done"),n}{if(t.batches=t.batches||{},!t.batches[d]){const o={key:d,events:[],data:[]};t.batches[d]={batched:o,batchFn:I(()=>{const o=t.batches[d].batched,i={collector:e,logger:u,id:n,config:a,data:void 0,rule:f,ingest:s,env:{...Ve(t.env,a.env),...r?{respond:r}:{}}};u.debug("push batch",{events:o.events.length}),B(t.pushBatch,"DestinationPushBatch",e.hooks,e.logger)(o,i),u.debug("push batch done"),o.events=[],o.data=[]},f.batch)}}const o=t.batches[d];o.batched.events.push(i.event),H(i.data)&&o.batched.data.push(i.data),o.batchFn()}return!0}function Fe(e){return{ok:!e?.failed,...e}}function ze(e){const{code:t,config:n={},env:o={},cache:s}=e,{config:r}=Te(e,"before"),{config:a}=Te({...e,config:r},"next"),i={...t.config,...n,...a};s&&(i.cache=s);const c=Ve(t.env,o);return{...t,config:i,env:c}}function Ve(e,t){return e||t?t?e&&_(e)&&_(t)?{...e,...t}:t:e:{}}async function We(e,t,n){const o=Object.entries(e).map(async([e,o])=>{const s=o.destroy;if(!s)return;const r=o.type||"unknown",a=n.scope(r),i={id:e,config:o.config,env:o.env??{},logger:a};try{await Promise.race([s(i),new Promise((n,o)=>setTimeout(()=>o(new Error(`${t} '${e}' destroy timed out`)),5e3))])}catch(n){a.error(`${t} '${e}' destroy failed: ${n}`)}});await Promise.allSettled(o)}async function Ke(e,t,n,o){let s,r,a=!1;switch(t){case qe.Config:ye(n)&&(pe(e.config,n,{shallow:!1}),r=n,a=!0);break;case qe.Consent:if(ye(n)){const{update:t}=function(e,t){const n={};return Object.entries(t).forEach(([e,t])=>{n[e]=!!t}),e.consent=k(e.consent,n),{update:n}}(e,n);r=t,a=!0}break;case qe.Custom:ye(n)&&(e.custom=pe(e.custom,n),r=n,a=!0);break;case qe.Destination:ye(n)&&("code"in n&&ye(n.code)?s=await Le(e,n,o):me(n.push)&&(s=await Le(e,{code:n},o)));break;case qe.Globals:ye(n)&&(e.globals=pe(e.globals,n),r=n,a=!0);break;case qe.On:be(n)&&await async function(e,t,n){const o=e.on,s=o[t]||[],r=J(n)?n:[n];r.forEach(e=>{s.push(e)}),o[t]=s,Me(e,t,r)}(e,n,o);break;case qe.Ready:a=!0;break;case qe.Run:s=await async function(e,t){return e.allowed=!0,e.timing=Date.now(),t&&(t.consent&&(e.consent=pe(e.consent,t.consent)),t.user&&(e.user=pe(e.user,t.user)),t.globals&&(e.globals=pe(e.config.globalsStatic||{},t.globals)),t.custom&&(e.custom=pe(e.custom,t.custom))),Object.values(e.destinations).forEach(e=>{e.queuePush=[]}),e.queue=[],e.round++,await Be(e)}(e,n),a=!0;break;case qe.Session:a=!0;break;case qe.Shutdown:await async function(e){const t=e.logger;await We(e.sources,"source",t),await We(e.destinations,"destination",t),await We(e.transformers,"transformer",t),await We(e.stores,"store",t)}(e);break;case qe.User:ye(n)&&(pe(e.user,n,{shallow:!1}),r=n,a=!0)}return a&&(await async function(e,t,n,o){let s,r=n||[];switch(n||(r=e.on[t]||[]),t){case qe.Consent:s=o||e.consent;break;case qe.Session:s=e.session;break;case qe.User:s=o||e.user;break;case qe.Custom:s=o||e.custom;break;case qe.Globals:s=o||e.globals;break;case qe.Config:s=o||e.config;break;case qe.Ready:case qe.Run:default:s=void 0}let a=!1;for(const n of Object.values(e.sources))n.on&&!1===await F(n.on)(t,s)&&(a=!0);return 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});Ge(e,o,n,t,s)}}),(Object.keys(e.pending.sources).length>0||Object.keys(e.pending.destinations).length>0)&&await async function(e,t){for(const[n,o]of Object.entries(e.pending.sources)){if(!e.pending.sources[n]||e.sources[n])continue;const s=o.config?.require;if(!s)continue;const r=s.indexOf(t);if(-1===r)continue;if(s.splice(r,1),s.length>0)continue;delete e.pending.sources[n];const a=await Re(e,n,o);a&&(e.sources[n]=a)}for(const[n,o]of Object.entries(e.pending.destinations)){if(!e.pending.destinations[n]||e.destinations[n])continue;const s=o.config?.require;if(!s)continue;const r=s.indexOf(t);if(-1===r)continue;if(s.splice(r,1),s.length>0)continue;delete e.pending.destinations[n];const a=ze(o);!1!==a.config.queue&&(a.queuePush=[...e.queue]),e.destinations[n]=a}}(e,t),Me(e,t,r,o),!a}(e,t,void 0,r),s=await Be(e)),s||Fe({ok:!0})}function Qe(e,t){if(!t.name)throw new Error("Event name is required");const[n,o]=t.name.split(" ");if(!n||!o)throw new Error("Event name is invalid");const{timestamp:s=Date.now(),name:r=`${n} ${o}`,data:a={},context:i={},globals:c=e.globals,custom:u={},user:l=e.user,nested:f=[],consent:d=e.consent,id:g=he(),trigger:p="",entity:h=n,action:m=o,timing:b=0,source:y={type:"collector",schema:"4"}}=t;return{name:r,data:a,context:i,globals:c,custom:u,user:l,nested:f,consent:d,id:g,trigger:p,entity:h,action:m,timestamp:s,timing:b,source:y}}async function Xe(e){const t=O({globalsStatic:{},sessionStatic:{},run:!0},e,{merge:!1,extend:!1}),n={level:e.logger?.level,handler:e.logger?.handler},o=A(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||{},logger:o,on:{},queue:[],round:0,session:void 0,status:{startedAt:Date.now(),in:0,out:0,failed:0,sources:{},destinations:{}},timing:Date.now(),user:e.user||{},sources:{},pending:{sources:{},destinations:{}},push:void 0,command:void 0};var a,i;r.push=function(e,t){return Ae(async(n,o={})=>await Oe(async()=>{const s=Date.now(),{id:r,ingest:a,respond:i,mapping:c,preChain:u,include:l,exclude:f}=o;let d=i,g=n;const p=l||f?function(e,t,n){let o=e;return t&&(o=Object.fromEntries(Object.entries(o).filter(([e])=>t.includes(e)))),n&&(o=Object.fromEntries(Object.entries(o).filter(([e])=>!n.includes(e)))),o}(e.destinations,l,f):void 0,h=a??ve(r||"unknown");if(c){const t=await ke(g,c,e);if(t.ignore)return Fe({ok:!0});if(c.consent&&!we(c.consent,e.consent,t.event.consent))return Fe({ok:!0});g=t.event}if(u?.length&&e.transformers&&Object.keys(e.transformers).length>0){const n=await $e(e,e.transformers,u,g,h,d,r?`source.${r}.next`:void 0);if(null===n.event)return Fe({ok:!0});if(n.respond&&(d=n.respond),Array.isArray(n.event)){const o=await Promise.all(n.event.map(async n=>{const o=t(n),s=Qe(e,o);return Be(e,s,{id:r,ingest:h,respond:d},p)}));if(r){e.status.sources[r]||(e.status.sources[r]={count:0,duration:0});const t=e.status.sources[r];t.count+=n.event.length,t.lastAt=Date.now(),t.duration+=Date.now()-s}return o[0]??Fe({ok:!0})}g=n.event}const m=t(g),b=Qe(e,m),y=await Be(e,b,{id:r,ingest:h,respond:d},p);if(r){e.status.sources[r]||(e.status.sources[r]={count:0,duration:0});const t=e.status.sources[r];t.count++,t.lastAt=Date.now(),t.duration+=Date.now()-s}return y},()=>Fe({ok:!1}))(),"Push",e.hooks,e.logger)}(r,e=>({timing:Math.round((Date.now()-r.timing)/10)/100,source:{type:"collector",schema:"4",version:"4.0.0"},...e})),r.command=(i=Ke,Se(async(e,t,n)=>await xe(async()=>await i(a,e,t,n),()=>Fe({ok:!1}))(),"Command",(a=r).hooks,a.logger));const c=e.stores||{};if(r.stores=await async function(e,t={}){const n={};for(const[o,s]of Object.entries(t)){const{code:t,config:r={},env:a={}}=s,i=e.logger.scope("store").scope(o),c={collector:e,logger:i,id:o,config:r,env:a},u=await t(c),l=u.get,f=u.set,d=u.delete;u.get=je(l,"StoreGet",e.hooks,e.logger),u.set=je(f,"StoreSet",e.hooks,e.logger),u.delete=je(d,"StoreDelete",e.hooks,e.logger),n[o]=u}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){const e=new Map;r.stores.__cache={type:"memory",config:{},get:t=>{const n=e.get(t);if(n){if(!(n.expires&&Date.now()>n.expires))return n.value;e.delete(t)}},set:(t,n,o)=>{e.set(t,{value:n,expires:o?Date.now()+o:void 0})},delete:t=>{e.delete(t)}}}return 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]=ze(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,{config:a}=Te(s,"before"),{config:i}=Te({...s,config:a},"next"),c=Object.keys(r).length>0?{...i,env:r}:i,{cache:u}=s,l=u?{...c,cache:u}:c,f=e.logger.scope("transformer").scope(o),d={collector:e,logger:f,id:o,ingest:oe(o),config:l,env:r},g=await t(d);n[o]=g}return n}(r,e.transformers||{}),r}async function Ye(e){e=e||{};const t=await Xe(e),n=(o=t,{type:"elb",config:{},push:async(e,t,n,s,r,a)=>{if("string"==typeof e&&e.startsWith("walker ")){const s=e.replace("walker ","");return o.command(s,t,n)}let i;if("string"==typeof e)i={name:e},t&&"object"==typeof t&&!Array.isArray(t)&&(i.data=t);else{if(!e||"object"!=typeof e)return Fe({ok:!1});i=e,t&&"object"==typeof t&&!Array.isArray(t)&&(i.data={...i.data||{},...t})}return s&&"object"==typeof s&&(i.context=s),r&&Array.isArray(r)&&(i.nested=r),a&&"object"==typeof a&&(i.custom=a),o.push(i)}});var o;t.sources.elb=n;const s=await async function(e,t={}){const n={};for(const[o,s]of Object.entries(t)){const{config:t={}}=s;if(t.require&&t.require.length>0){e.pending.sources[o]=s;continue}const r=await Re(e,o,s);r&&(n[o]=r)}return n}(t,e.sources||{});Object.assign(t.sources,s);const{consent:r,user:a,globals:i,custom:c}=e;r&&await t.command("consent",r),a&&await t.command("user",a),i&&Object.assign(t.globals,i),c&&Object.assign(t.custom,c),t.config.run&&await t.command("run");let u=n.push;const l=Object.values(t.sources).filter(e=>"elb"!==e.type),f=l.find(e=>e.config.primary);return f?u=f.push:l.length>0&&(u=l[0].push),{collector:t,elb:u}}var Ze=async e=>{let t;return{get flow(){return t},trigger:()=>async n=>{if(!t){const n=await Ye(e);t={collector:n.collector,elb:n.elb}}const o=function(e){for(const t of Object.values(e.sources||{}))if("lambda"===t.type)return t}(t.collector);if(!o)throw new Error("Lambda source not found in collector");const s={awsRequestId:`test-${Date.now()}`},r=o.push,a=await r(n,s);let i;try{i=JSON.parse(a.body||"{}")}catch{i=a.body}const c={};if(a.headers)for(const[e,t]of Object.entries(a.headers))void 0!==t&&(c[e]=String(t));return{statusCode:a.statusCode,body:i,headers:c}}}};function et(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"})}}export{f as examples,n as schemas};//# sourceMappingURL=dev.mjs.map
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var mod,__defProp=Object.defineProperty,__getOwnPropDesc=Object.getOwnPropertyDescriptor,__getOwnPropNames=Object.getOwnPropertyNames,__hasOwnProp=Object.prototype.hasOwnProperty,__export=(target,all)=>{for(var name in all)__defProp(target,name,{get:all[name],enumerable:!0})},index_exports={};__export(index_exports,{SourceLambda:()=>types_exports,examples:()=>examples_exports,sourceLambda:()=>lambda_default}),module.exports=(mod=index_exports,((to,from,except,desc)=>{if(from&&"object"==typeof from||"function"==typeof from)for(let key of __getOwnPropNames(from))__hasOwnProp.call(to,key)||key===except||__defProp(to,key,{get:()=>from[key],enumerable:!(desc=__getOwnPropDesc(from,key))||desc.enumerable});return to})(__defProp({},"__esModule",{value:!0}),mod));var import_core13=require("@walkeros/core");function isAPIGatewayV2(event){return"version"in event&&"2.0"===event.version}function createResponse(statusCode,body,headers={},requestId){const responseHeaders={"Content-Type":"object"==typeof body?"application/json":"text/plain",...headers};return requestId&&(responseHeaders["X-Request-ID"]=requestId),{statusCode:statusCode,headers:responseHeaders,body:"object"==typeof body?JSON.stringify(body):String(body),isBase64Encoded:!1}}var types_exports={},examples_exports={};__export(examples_exports,{createTrigger:()=>createTrigger,env:()=>env_exports,step:()=>step_exports,trigger:()=>trigger});var env_exports={};__export(env_exports,{push:()=>push});var createMockElbFn=()=>()=>Promise.resolve({ok:!0}),noopFn=()=>{},noopLogger={error:noopFn,warn:noopFn,info:noopFn,debug:noopFn,throw:message=>{throw"string"==typeof message?new Error(message):message},json:noopFn,scope:()=>noopLogger},push={get push(){return createMockElbFn()},get command(){return createMockElbFn()},get elb(){return createMockElbFn()},logger:noopLogger},step_exports={};__export(step_exports,{apiGatewayV1Post:()=>apiGatewayV1Post,lambdaGet:()=>lambdaGet,lambdaPost:()=>lambdaPost});var lambdaPost={title:"Lambda POST",description:"An API Gateway v2 HTTP POST with a JSON body is converted into a walker elb event.",trigger:{type:"POST"},in:{version:"2.0",requestContext:{http:{method:"POST",path:"/collect"},requestId:"req-123"},body:JSON.stringify({event:"page view",data:{title:"Home"}}),isBase64Encoded:!1},out:[["elb",{name:"page view",data:{title:"Home"}}]]},apiGatewayV1Post={title:"API Gateway v1 POST",description:"A REST API Gateway v1 POST request with a JSON body is converted into a walker elb event.",trigger:{type:"POST"},in:{httpMethod:"POST",path:"/collect",requestContext:{requestId:"req-789",identity:{sourceIp:"203.0.113.42"}},queryStringParameters:null,body:JSON.stringify({event:"page view",data:{title:"Home"}}),isBase64Encoded:!1},out:[["elb",{name:"page view",data:{title:"Home"}}]]},lambdaGet={title:"Lambda GET",description:"An API Gateway v2 HTTP GET with query parameters is parsed into an elb event payload.",trigger:{type:"GET"},in:{version:"2.0",requestContext:{http:{method:"GET",path:"/collect"},requestId:"req-456"},rawQueryString:"e=page+view&d=%7B%22title%22%3A%22Home%22%7D",isBase64Encoded:!1},out:[["elb",{e:"page view",d:'{"title":"Home"}'}]]},import_core=require("@walkeros/core"),import_core2=require("@walkeros/core"),import_core3=require("@walkeros/core"),import_core4=require("@walkeros/core"),import_core5=require("@walkeros/core"),import_core6=require("@walkeros/core"),import_core7=require("@walkeros/core"),import_core8=require("@walkeros/core"),import_core9=require("@walkeros/core"),import_core10=require("@walkeros/core"),import_core11=require("@walkeros/core"),import_core12=require("@walkeros/core"),t_Commands={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",Session:"session",Shutdown:"shutdown",User:"user",Walker:"walker"};function X(e,n2){return e.storeId&&n2.stores[e.storeId]?n2.stores[e.storeId]:n2.stores.__cache}function Y(e){const n2={};for(const[t2,o2]of Object.entries(e)){const e2=o2.config?.next;e2&&!(0,import_core7.isRouteArray)(e2)?n2[t2]={next:e2}:n2[t2]={}}return n2}function Z(e,n2){const t2=e.config||{},o2=e[n2];return void 0!==o2?{config:{...t2,[n2]:o2},chainValue:o2}:{config:t2,chainValue:void 0}}function ee(e,n2={}){if(!e)return[];if(Array.isArray(e))return e;const t2=[],o2=new Set;let s2=e;for(;s2&&n2[s2]&&!o2.has(s2);){o2.add(s2),t2.push(s2);const e2=n2[s2].next;if(Array.isArray(e2)){t2.push(...e2);break}s2=e2}return t2}async function ne(e,n2,t2){if(n2.init&&!n2.config.init){const o2=n2.type||"unknown",s2=e.logger.scope(`transformer:${o2}`),r2={collector:e,logger:s2,id:t2,ingest:(0,import_core7.createIngest)(t2),config:n2.config,env:se(n2.config.env)};s2.debug("init");const a2=await(0,import_core7.useHooks)(n2.init,"TransformerInit",e.hooks,e.logger)(r2);if(!1===a2)return!1;n2.config={...a2||n2.config,env:a2?.env||n2.config.env,init:!0},s2.debug("init done")}return!0}async function te(e,n2,t2,o2,s2,r2){const a2=n2.type||"unknown",i2=e.logger.scope(`transformer:${a2}`),c2={collector:e,logger:i2,id:t2,ingest:s2,config:n2.config,env:{...se(n2.config.env),...r2?{respond:r2}:{}}};i2.debug("push",{event:o2.name});const u2=await(0,import_core7.useHooks)(n2.push,"TransformerPush",e.hooks,e.logger)(o2,c2);return i2.debug("push done"),u2}async function oe(e,n2,t2,o2,s2,r2,a2){a2&&s2?._meta&&(s2._meta.chainPath=a2);let i2=o2,c2=r2;for(const o3 of t2){const r3=n2[o3];if(!r3){e.logger.warn(`Transformer not found: ${o3}`);continue}if(s2&&s2._meta&&s2._meta.path.length>256)return e.logger.error(`Max path length exceeded at ${o3}`),{event:null,respond:c2};if(s2&&s2._meta&&(s2._meta.hops++,s2._meta.path.push(o3)),!await(0,import_core7.tryCatchAsync)(ne)(e,r3,o3))return e.logger.error(`Transformer init failed: ${o3}`),{event:null,respond:c2};if(a2&&void 0!==r3.config?.chainMocks?.[a2]){const n3=r3.config.chainMocks[a2];e.logger.scope(`transformer:${r3.type||"unknown"}`).debug("chainMock",{chain:a2}),i2=n3;continue}if(void 0!==r3.config?.mock){e.logger.scope(`transformer:${r3.type||"unknown"}`).debug("mock"),i2=r3.config.mock;continue}if(r3.config?.disabled)continue;const u2=r3.config?.cache,f2=u2?(0,import_core7.compileCache)(u2):void 0,l2=f2?X(f2,e):void 0;let d2;if(f2&&l2){const e2=(0,import_core7.buildCacheContext)(s2,i2),n3=(0,import_core7.checkCache)(f2,l2,e2,`t:${o3}`);if("HIT"===n3?.status&&n3.value){if(i2=n3.value,f2.full)return{event:i2,respond:c2};continue}"MISS"===n3?.status&&(d2={key:n3.key,ttl:n3.rule.ttl})}const g2=r3.config.before;if(g2){const t3=ee("string"==typeof g2||Array.isArray(g2)&&!(0,import_core7.isRouteArray)(g2)?g2:(0,import_core7.resolveNext)((0,import_core7.compileNext)(g2),(0,import_core7.buildCacheContext)(s2,i2))||void 0,Y(n2));if(t3.length>0){const o4=await oe(e,n2,t3,i2,s2,c2,a2);if(null===o4.event)return{event:null,respond:o4.respond??c2};o4.respond&&(c2=o4.respond),i2=Array.isArray(o4.event)?o4.event[0]:o4.event}}const m2=await(0,import_core7.tryCatchAsync)(te,n3=>(e.logger.scope(`transformer:${r3.type||"unknown"}`).error("Push failed",{error:n3}),!1))(e,r3,o3,i2,s2,c2);if(!1===m2)return{event:null,respond:c2};if(Array.isArray(m2)){const r4=t2.slice(t2.indexOf(o3)+1),u3=await Promise.all(m2.map(async t3=>{const o4=t3.event||i2,u4=s2?{...s2,_meta:{...s2._meta,path:[...s2._meta.path]}}:(0,import_core7.createIngest)("unknown");if(t3.next){let s3=t3.next;if((0,import_core7.isRouteArray)(t3.next)){const e2=(0,import_core7.compileNext)(t3.next);s3=(0,import_core7.resolveNext)(e2,(0,import_core7.buildCacheContext)(u4,o4))}if(s3){const t4=ee(s3,Y(n2));if(t4.length>0)return oe(e,n2,t4,o4,u4,c2,a2)}return{event:o4,respond:c2}}return r4.length>0?oe(e,n2,r4,o4,u4,c2,a2):{event:o4,respond:c2}}));let f3=c2;const l3=[];for(const e2 of u3.flat())if(null!==e2)if(e2&&"object"==typeof e2&&"event"in e2){const n3=e2;if(n3.respond&&(f3=n3.respond),null===n3.event)continue;Array.isArray(n3.event)?l3.push(...n3.event):l3.push(n3.event)}else l3.push(e2);return 0===l3.length?{event:null,respond:f3}:1===l3.length?{event:l3[0],respond:f3}:{event:l3,respond:f3}}if(m2&&"object"==typeof m2){const{event:t3,respond:o4,next:r4}=m2;if(o4&&(c2=o4),r4){let o5=r4;if((0,import_core7.isRouteArray)(r4)){const e2=(0,import_core7.compileNext)(r4);if(o5=(0,import_core7.resolveNext)(e2,(0,import_core7.buildCacheContext)(s2,i2)),!o5){t3&&(i2=t3);continue}}const u3=ee(o5,Y(n2));return u3.length>0?oe(e,n2,u3,t3||i2,s2,c2,a2):(e.logger.warn(`Branch target not found: ${JSON.stringify(r4)}`),{event:null,respond:c2})}t3&&(i2=t3)}if(d2&&l2&&(0,import_core7.storeCache)(l2,d2.key,i2,d2.ttl),(!m2||"object"==typeof m2&&!m2.next)&&r3.config.next&&(0,import_core7.isRouteArray)(r3.config.next)){const t3=r3.config.next,o4=(0,import_core7.compileNext)(t3),u3=(0,import_core7.resolveNext)(o4,(0,import_core7.buildCacheContext)(s2,i2));if(u3){const t4=ee(u3,Y(n2));if(t4.length>0)return oe(e,n2,t4,i2,s2,c2,a2)}return{event:i2,respond:c2}}}return{event:i2,respond:c2}}function se(e){return e&&(0,import_core7.isObject)(e)?e:{}}async function re(e,n2,t2){const{code:o2,config:s2={},env:r2={},primary:a2,next:i2,before:c2,cache:u2}=t2;let f2,l2=(0,import_core6.createIngest)(n2);const d2=u2?(0,import_core6.compileCache)({...u2,full:u2.full??!0}):void 0,g2=(0,import_core6.compileNext)(i2),m2=Array.isArray(i2)&&(0,import_core6.isRouteArray)(i2)||!g2?void 0:ee((0,import_core6.resolveNext)(g2),Y(e.transformers)),p2=(0,import_core6.compileNext)(c2),h2=Array.isArray(c2)&&(0,import_core6.isRouteArray)(c2)||!p2?void 0:ee((0,import_core6.resolveNext)(p2),Y(e.transformers)),y2=e.logger.scope("source").scope(n2),b2={push:async(t3,o3={})=>{let r3,a3=t3;const i3=h2??(p2?ee((0,import_core6.resolveNext)(p2,(0,import_core6.buildCacheContext)(l2)),Y(e.transformers)):[]);if(i3.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const t4=await oe(e,e.transformers,i3,a3,l2,f2,`source.${n2}.before`);if(null===t4.event)return{ok:!0};t4.respond&&(f2=t4.respond),a3=Array.isArray(t4.event)?t4.event[0]:t4.event}if(d2){const t4=X(d2,e);if(t4){const o4=(0,import_core6.buildCacheContext)(l2),s3=(0,import_core6.checkCache)(d2,t4,o4,`s:${n2}`);if(s3){if("HIT"===s3.status&&void 0!==s3.value&&d2.full){let n3=s3.value;return s3.rule.update&&(n3=await(0,import_core6.applyUpdate)(n3,s3.rule.update,{...o4,cache:{status:"HIT"}},e)),f2?.(n3),{ok:!0}}if("MISS"===s3.status&&d2.full&&f2){const n3=f2,a4=s3.rule.update,i4={...o4,cache:{status:"MISS"}},c4=s3.key,u4=s3.rule.ttl;f2=o5=>{(0,import_core6.storeCache)(t4,c4,o5,u4),a4?r3=(async()=>{const t5=await(0,import_core6.applyUpdate)(o5,a4,i4,e);n3(t5)})():n3(o5)}}"MISS"!==s3.status||d2.full||(0,import_core6.storeCache)(t4,s3.key,!0,s3.rule.ttl)}}}const c3=m2??(g2?ee((0,import_core6.resolveNext)(g2,(0,import_core6.buildCacheContext)(l2)),Y(e.transformers)):[]),u3=await e.push(a3,{...o3,id:n2,ingest:l2,respond:f2,mapping:s2,preChain:c3});return r3&&await r3,u3},command:e.command,sources:e.sources,elb:e.sources.elb.push,logger:y2,...r2},v2={collector:e,logger:y2,id:n2,config:s2,env:b2,setIngest:async t3=>{if(!s2.ingest)return void(l2=(0,import_core6.createIngest)(n2));const o3=await(0,import_core6.getMappingValue)(t3,s2.ingest,{collector:e}),r3=(0,import_core6.createIngest)(n2);l2={...r3,...o3,_meta:r3._meta}},setRespond:e2=>{f2=e2}},k2=await(0,import_core6.tryCatchAsync)(o2)(v2);if(!k2)return;const w2=k2.type||"unknown",C2=e.logger.scope(w2).scope(n2);return b2.logger=C2,a2&&(k2.config={...k2.config,primary:a2}),k2}function ie(e,n2){return{collector:e,logger:e.logger.scope("on").scope(String(n2))}}function ue(e,n2,t2,o2,s2){if(!n2.on)return;const r2=n2.type||"unknown",a2=e.logger.scope(r2).scope("on").scope(o2),i2={collector:e,logger:a2,id:t2,config:n2.config,data:s2,env:ke(n2.env,n2.config.env)};(0,import_core5.tryCatch)(n2.on)(o2,i2)}function fe(e,n2,o2,s2){let r2;switch(n2){case t_Commands.Consent:r2=s2||e.consent;break;case t_Commands.Session:r2=e.session;break;case t_Commands.User:r2=s2||e.user;break;case t_Commands.Custom:r2=s2||e.custom;break;case t_Commands.Globals:r2=s2||e.globals;break;case t_Commands.Config:r2=s2||e.config;break;case t_Commands.Ready:case t_Commands.Run:default:r2=void 0}if(o2.length)switch(n2){case t_Commands.Consent:!function(e2,n3,o3){const s3=o3||e2.consent,r3=ie(e2,t_Commands.Consent);n3.forEach(e3=>{Object.keys(s3).filter(n4=>n4 in e3).forEach(n4=>{(0,import_core5.tryCatch)(e3[n4])(s3,r3)})})}(e,o2,s2);break;case t_Commands.Ready:!function(e2,n3){if(!e2.allowed)return;const o3=ie(e2,t_Commands.Ready);n3.forEach(e3=>{(0,import_core5.tryCatch)(e3)(void 0,o3)})}(e,o2);break;case t_Commands.Run:!function(e2,n3){if(!e2.allowed)return;const o3=ie(e2,t_Commands.Run);n3.forEach(e3=>{(0,import_core5.tryCatch)(e3)(void 0,o3)})}(e,o2);break;case t_Commands.Session:!function(e2,n3){if(!e2.session)return;const o3=ie(e2,t_Commands.Session);n3.forEach(n4=>{(0,import_core5.tryCatch)(n4)(e2.session,o3)})}(e,o2);break;default:{const t2=ie(e,n2);o2.forEach(e2=>{"function"==typeof e2&&(0,import_core5.tryCatch)(e2)(r2,t2)});break}}}function de(e,n2,t2,o2){if(!e)return[];if(n2){const e2=(0,import_core3.resolveNext)(n2,(0,import_core3.buildCacheContext)(o2));return e2?ee(e2,Y(t2)):[]}return ee(e,Y(t2))}async function ge(e,n2,t2){const{code:o2,config:s2={},env:r2={},before:a2,next:i2,cache:c2}=n2;if(!(0,import_core3.isFunction)(o2.push))return ye({ok:!1,failed:{invalid:{type:"invalid",error:"Destination code must have a push method"}}});const u2=t2||s2||{init:!1};let f2=a2?{...u2,before:a2}:{...u2};i2&&(f2={...f2,next:i2}),c2&&(f2={...f2,cache:c2});const l2={...o2,config:f2,env:ke(o2.env,r2)};let d2=l2.config.id;if(!d2)do{d2=(0,import_core3.getId)(5,"abcdefghijklmnopqrstuvwxyz")}while(e.destinations[d2]);return e.destinations[d2]=l2,!1!==l2.config.queue&&(l2.queuePush=[...e.queue]),me(e,void 0,{},{[d2]:l2})}async function me(e,n2,t2={},o2){const{allowed:s2,consent:r2,globals:a2,user:p2}=e;if(!s2)return ye({ok:!1});n2&&(e.queue.push(n2),e.status.in++),o2||(o2=e.destinations);const h2=await Promise.all(Object.entries(o2||{}).map(async([o3,s3])=>{if(s3.config.disabled)return{id:o3,destination:s3,skipped:!0};let h3=(s3.queuePush||[]).map(e2=>({...e2,consent:r2}));s3.queuePush=[],n2&&h3.push((0,import_core3.clone)(n2));const b3=t2.ingest?{...t2.ingest,_meta:{...t2.ingest._meta,path:[...t2.ingest._meta.path]}}:(0,import_core3.createIngest)("unknown");if(!h3.length&&!s3.queueOn?.length)return{id:o3,destination:s3,skipped:!0};if(!h3.length&&s3.queueOn?.length){const n3=await(0,import_core3.tryCatchAsync)(pe)(e,s3,o3);return{id:o3,destination:s3,skipped:!n3}}const v3=[],k3=h3.filter(e2=>{const n3=(0,import_core3.getGrantedConsent)(s3.config.consent,r2,e2.consent);return!n3||(e2.consent=n3,v3.push(e2),!1)});if(s3.queuePush.push(...k3),!v3.length)return{id:o3,destination:s3,queue:h3};if(!await(0,import_core3.tryCatchAsync)(pe)(e,s3,o3))return{id:o3,destination:s3,queue:h3};let C2,O2;s3.dlq||(s3.dlq=[]);const x2=s3.config.before,A2=de(x2,x2&&(0,import_core3.isRouteArray)(x2)?(0,import_core3.compileNext)(x2):void 0,e.transformers,b3),q2=s3.config.next,S2=q2&&(0,import_core3.isRouteArray)(q2)?(0,import_core3.compileNext)(q2):void 0,D2=s3.config?.cache,$2=D2?(0,import_core3.compileCache)(D2):void 0,_2=$2?X($2,e):void 0;let I2=0;return await Promise.all(v3.map(async n3=>{let r3;if(n3.globals=(0,import_core3.assign)(a2,n3.globals),n3.user=(0,import_core3.assign)(p2,n3.user),$2?.full&&_2){const e2=(0,import_core3.buildCacheContext)(b3,n3),t3=(0,import_core3.checkCache)($2,_2,e2,`d:${o3}`);if("HIT"===t3?.status)return n3;"MISS"===t3?.status&&(r3={key:t3.key,ttl:t3.rule.ttl})}let u2=n3,f2=t2.respond;if(A2.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const s4=await oe(e,e.transformers,A2,n3,b3,t2.respond,`destination.${o3}.before`);if(null===s4.event)return n3;s4.respond&&(f2=s4.respond),u2=Array.isArray(s4.event)?s4.event[0]:s4.event}if($2&&!$2.full&&_2){const e2=(0,import_core3.buildCacheContext)(b3,u2),t3=(0,import_core3.checkCache)($2,_2,e2,`d:${o3}`);if("HIT"===t3?.status)return n3;"MISS"===t3?.status&&(r3={key:t3.key,ttl:t3.rule.ttl})}const g2=Date.now();let m2=!1;const h4=await(0,import_core3.tryCatchAsync)(he,n4=>{const t3=s3.type||"unknown";e.logger.scope(t3).error("Push failed",{error:n4,event:u2.name}),C2=n4,m2=!0,s3.dlq.push([u2,n4])})(e,s3,o3,u2,b3,f2);if(I2+=Date.now()-g2,r3&&_2&&void 0===s3.config.mock&&(0,import_core3.storeCache)(_2,r3.key,h4??!0,r3.ttl),void 0!==h4&&(O2=h4),!m2&&q2){void 0!==h4&&(b3._response=h4);const n4=de(q2,S2,e.transformers,b3);if(n4.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const t3=await oe(e,e.transformers,n4,u2,b3,f2,`destination.${o3}.next`);t3.respond&&(f2=t3.respond)}}return n3})),{id:o3,destination:s3,error:C2,response:O2,totalDuration:I2}})),b2={},v2={},k2={};for(const n3 of h2){if(n3.skipped)continue;const t3={type:n3.destination.type||"unknown",data:n3.response};e.status.destinations[n3.id]||(e.status.destinations[n3.id]={count:0,failed:0,duration:0});const o3=e.status.destinations[n3.id],s3=Date.now();n3.error?(t3.error=n3.error,k2[n3.id]=t3,o3.failed++,o3.lastAt=s3,o3.duration+=n3.totalDuration||0,e.status.failed++):n3.queue&&n3.queue.length?v2[n3.id]=t3:(b2[n3.id]=t3,o3.count++,o3.lastAt=s3,o3.duration+=n3.totalDuration||0,e.status.out++)}return ye({event:n2,...Object.keys(b2).length&&{done:b2},...Object.keys(v2).length&&{queued:v2},...Object.keys(k2).length&&{failed:k2}})}async function pe(e,n2,t2){if(n2.init&&!n2.config.init){const o2=n2.type||"unknown",s2=e.logger.scope(o2),r2={collector:e,logger:s2,id:t2,config:n2.config,env:ke(n2.env,n2.config.env)};s2.debug("init");const a2=await(0,import_core3.useHooks)(n2.init,"DestinationInit",e.hooks,e.logger)(r2);if(!1===a2)return a2;if(n2.config={...a2||n2.config,init:!0},n2.queueOn?.length){const o3=n2.queueOn;n2.queueOn=[];for(const{type:s3,data:r3}of o3)ue(e,n2,t2,s3,r3)}s2.debug("init done")}return!0}async function he(e,n2,t2,o2,s2,r2){const{config:a2}=n2,i2=await(0,import_core3.processEventMapping)(o2,a2,e);if(i2.ignore)return!1;const c2=n2.type||"unknown",u2=e.logger.scope(c2),f2={collector:e,logger:u2,id:t2,config:a2,data:i2.data,rule:i2.mapping,ingest:s2,env:{...ke(n2.env,a2.env),...r2?{respond:r2}:{}}};if(void 0!==a2.mock)return u2.debug("mock",{event:i2.event.name}),a2.mock;const l2=i2.mapping,d2=i2.mappingKey||"* *";if(!l2?.batch||!n2.pushBatch||void 0!==a2.mock){u2.debug("push",{event:i2.event.name});const t3=await(0,import_core3.useHooks)(n2.push,"DestinationPush",e.hooks,e.logger)(i2.event,f2);return u2.debug("push done"),t3}{if(n2.batches=n2.batches||{},!n2.batches[d2]){const o4={key:d2,events:[],data:[]};n2.batches[d2]={batched:o4,batchFn:(0,import_core3.debounce)(()=>{const o5=n2.batches[d2].batched,i3={collector:e,logger:u2,id:t2,config:a2,data:void 0,rule:l2,ingest:s2,env:{...ke(n2.env,a2.env),...r2?{respond:r2}:{}}};u2.debug("push batch",{events:o5.events.length}),(0,import_core3.useHooks)(n2.pushBatch,"DestinationPushBatch",e.hooks,e.logger)(o5,i3),u2.debug("push batch done"),o5.events=[],o5.data=[]},l2.batch)}}const o3=n2.batches[d2];o3.batched.events.push(i2.event),(0,import_core3.isDefined)(i2.data)&&o3.batched.data.push(i2.data),o3.batchFn()}return!0}function ye(e){return{ok:!e?.failed,...e}}function be(e){const{code:n2,config:t2={},env:o2={},cache:s2}=e,{config:r2}=Z(e,"before"),{config:a2}=Z({...e,config:r2},"next"),i2={...n2.config,...t2,...a2};s2&&(i2.cache=s2);const c2=ke(n2.env,o2);return{...n2,config:i2,env:c2}}function ke(e,n2){return e||n2?n2?e&&(0,import_core3.isObject)(e)&&(0,import_core3.isObject)(n2)?{...e,...n2}:n2:e:{}}async function Ae(e,n2,t2){const o2=Object.entries(e).map(async([e2,o3])=>{const s2=o3.destroy;if(!s2)return;const r2=o3.type||"unknown",a2=t2.scope(r2),i2={id:e2,config:o3.config,env:o3.env??{},logger:a2};try{await Promise.race([s2(i2),new Promise((t3,o4)=>setTimeout(()=>o4(new Error(`${n2} '${e2}' destroy timed out`)),5e3))])}catch(t3){a2.error(`${n2} '${e2}' destroy failed: ${t3}`)}});await Promise.allSettled(o2)}async function qe(e,n2,o2,r2){let a2,i2,c2=!1;switch(n2){case t_Commands.Config:(0,import_core9.isObject)(o2)&&((0,import_core8.assign)(e.config,o2,{shallow:!1}),i2=o2,c2=!0);break;case t_Commands.Consent:if((0,import_core9.isObject)(o2)){const{update:n3}=function(e,n2){const t2={};return Object.entries(n2).forEach(([e2,n3])=>{t2[e2]=!!n3}),e.consent=(0,import_core.assign)(e.consent,t2),{update:t2}}(e,o2);i2=n3,c2=!0}break;case t_Commands.Custom:(0,import_core9.isObject)(o2)&&(e.custom=(0,import_core8.assign)(e.custom,o2),i2=o2,c2=!0);break;case t_Commands.Destination:(0,import_core9.isObject)(o2)&&("code"in o2&&(0,import_core9.isObject)(o2.code)?a2=await ge(e,o2,r2):(0,import_core8.isFunction)(o2.push)&&(a2=await ge(e,{code:o2},r2)));break;case t_Commands.Globals:(0,import_core9.isObject)(o2)&&(e.globals=(0,import_core8.assign)(e.globals,o2),i2=o2,c2=!0);break;case t_Commands.On:(0,import_core8.isString)(o2)&&await async function(e,n2,t2){const o2=e.on,s2=o2[n2]||[],r2=(0,import_core4.isArray)(t2)?t2:[t2];r2.forEach(e2=>{s2.push(e2)}),o2[n2]=s2,fe(e,n2,r2)}(e,o2,r2);break;case t_Commands.Ready:c2=!0;break;case t_Commands.Run:a2=await async function(e,n2){return e.allowed=!0,e.timing=Date.now(),n2&&(n2.consent&&(e.consent=(0,import_core8.assign)(e.consent,n2.consent)),n2.user&&(e.user=(0,import_core8.assign)(e.user,n2.user)),n2.globals&&(e.globals=(0,import_core8.assign)(e.config.globalsStatic||{},n2.globals)),n2.custom&&(e.custom=(0,import_core8.assign)(e.custom,n2.custom))),Object.values(e.destinations).forEach(e2=>{e2.queuePush=[]}),e.queue=[],e.round++,await me(e)}(e,o2),c2=!0;break;case t_Commands.Session:c2=!0;break;case t_Commands.Shutdown:await async function(e2){const n3=e2.logger;await Ae(e2.sources,"source",n3),await Ae(e2.destinations,"destination",n3),await Ae(e2.transformers,"transformer",n3),await Ae(e2.stores,"store",n3)}(e);break;case t_Commands.User:(0,import_core9.isObject)(o2)&&((0,import_core8.assign)(e.user,o2,{shallow:!1}),i2=o2,c2=!0)}return c2&&(await async function(e,n2,o2,s2){let r2,a2=o2||[];switch(o2||(a2=e.on[n2]||[]),n2){case t_Commands.Consent:r2=s2||e.consent;break;case t_Commands.Session:r2=e.session;break;case t_Commands.User:r2=s2||e.user;break;case t_Commands.Custom:r2=s2||e.custom;break;case t_Commands.Globals:r2=s2||e.globals;break;case t_Commands.Config:r2=s2||e.config;break;case t_Commands.Ready:case t_Commands.Run:default:r2=void 0}let i2=!1;for(const t2 of Object.values(e.sources))t2.on&&!1===await(0,import_core5.tryCatchAsync)(t2.on)(n2,r2)&&(i2=!0);return Object.entries(e.destinations).forEach(([t2,o3])=>{if(o3.on){if(!o3.config.init)return o3.queueOn=o3.queueOn||[],void o3.queueOn.push({type:n2,data:r2});ue(e,o3,t2,n2,r2)}}),(Object.keys(e.pending.sources).length>0||Object.keys(e.pending.destinations).length>0)&&await async function(e2,n3){for(const[t2,o3]of Object.entries(e2.pending.sources)){if(!e2.pending.sources[t2]||e2.sources[t2])continue;const s3=o3.config?.require;if(!s3)continue;const r3=s3.indexOf(n3);if(-1===r3)continue;if(s3.splice(r3,1),s3.length>0)continue;delete e2.pending.sources[t2];const a3=await re(e2,t2,o3);a3&&(e2.sources[t2]=a3)}for(const[t2,o3]of Object.entries(e2.pending.destinations)){if(!e2.pending.destinations[t2]||e2.destinations[t2])continue;const s3=o3.config?.require;if(!s3)continue;const r3=s3.indexOf(n3);if(-1===r3)continue;if(s3.splice(r3,1),s3.length>0)continue;delete e2.pending.destinations[t2];const a3=be(o3);!1!==a3.config.queue&&(a3.queuePush=[...e2.queue]),e2.destinations[t2]=a3}}(e,n2),fe(e,n2,a2,s2),!i2}(e,n2,void 0,i2),a2=await me(e)),a2||ye({ok:!0})}function Se(e,n2){if(!n2.name)throw new Error("Event name is required");const[t2,o2]=n2.name.split(" ");if(!t2||!o2)throw new Error("Event name is invalid");const{timestamp:s2=Date.now(),name:r2=`${t2} ${o2}`,data:a2={},context:i2={},globals:c2=e.globals,custom:u2={},user:f2=e.user,nested:l2=[],consent:d2=e.consent,id:g2=(0,import_core8.getSpanId)(),trigger:m2="",entity:p2=t2,action:h2=o2,timing:y2=0,source:b2={type:"collector",schema:"4"}}=n2;return{name:r2,data:a2,context:i2,globals:c2,custom:u2,user:f2,nested:l2,consent:d2,id:g2,trigger:m2,entity:p2,action:h2,timestamp:s2,timing:y2,source:b2}}async function Ge(e){const n2=(0,import_core2.assign)({globalsStatic:{},sessionStatic:{},run:!0},e,{merge:!1,extend:!1}),t2={level:e.logger?.level,handler:e.logger?.handler},o2=(0,import_core2.createLogger)(t2),s2={...n2.globalsStatic,...e.globals},i2={allowed:!1,config:n2,consent:e.consent||{},custom:e.custom||{},destinations:{},transformers:{},stores:{},globals:s2,hooks:e.hooks||{},logger:o2,on:{},queue:[],round:0,session:void 0,status:{startedAt:Date.now(),in:0,out:0,failed:0,sources:{},destinations:{}},timing:Date.now(),user:e.user||{},sources:{},pending:{sources:{},destinations:{}},push:void 0,command:void 0};var e2,n3;i2.push=function(e,n2){return(0,import_core10.useHooks)(async(t2,o2={})=>await(0,import_core10.tryCatchAsync)(async()=>{const s2=Date.now(),{id:r2,ingest:a2,respond:i2,mapping:c2,preChain:u2,include:f2,exclude:l2}=o2;let d2=i2,g2=t2;const m2=f2||l2?function(e2,n3,t3){let o3=e2;return n3&&(o3=Object.fromEntries(Object.entries(o3).filter(([e3])=>n3.includes(e3)))),t3&&(o3=Object.fromEntries(Object.entries(o3).filter(([e3])=>!t3.includes(e3)))),o3}(e.destinations,f2,l2):void 0,p2=a2??(0,import_core10.createIngest)(r2||"unknown");if(c2){const n3=await(0,import_core10.processEventMapping)(g2,c2,e);if(n3.ignore)return ye({ok:!0});if(c2.consent&&!(0,import_core10.getGrantedConsent)(c2.consent,e.consent,n3.event.consent))return ye({ok:!0});g2=n3.event}if(u2?.length&&e.transformers&&Object.keys(e.transformers).length>0){const t3=await oe(e,e.transformers,u2,g2,p2,d2,r2?`source.${r2}.next`:void 0);if(null===t3.event)return ye({ok:!0});if(t3.respond&&(d2=t3.respond),Array.isArray(t3.event)){const o3=await Promise.all(t3.event.map(async t4=>{const o4=n2(t4),s3=Se(e,o4);return me(e,s3,{id:r2,ingest:p2,respond:d2},m2)}));if(r2){e.status.sources[r2]||(e.status.sources[r2]={count:0,duration:0});const n3=e.status.sources[r2];n3.count+=t3.event.length,n3.lastAt=Date.now(),n3.duration+=Date.now()-s2}return o3[0]??ye({ok:!0})}g2=t3.event}const h2=n2(g2),y2=Se(e,h2),b2=await me(e,y2,{id:r2,ingest:p2,respond:d2},m2);if(r2){e.status.sources[r2]||(e.status.sources[r2]={count:0,duration:0});const n3=e.status.sources[r2];n3.count++,n3.lastAt=Date.now(),n3.duration+=Date.now()-s2}return b2},()=>ye({ok:!1}))(),"Push",e.hooks,e.logger)}(i2,e2=>({timing:Math.round((Date.now()-i2.timing)/10)/100,source:{type:"collector",schema:"4",version:"4.0.0-next-1777882869103"},...e2})),i2.command=(e2=i2,n3=qe,(0,import_core11.useHooks)(async(t3,o3,s3)=>await(0,import_core11.tryCatchAsync)(async()=>await n3(e2,t3,o3,s3),()=>ye({ok:!1}))(),"Command",e2.hooks,e2.logger));const c2=e.stores||{};if(i2.stores=await async function(e2,n3={}){const t3={};for(const[o3,s3]of Object.entries(n3)){const{code:n4,config:r2={},env:a2={}}=s3,i3=e2.logger.scope("store").scope(o3),c3={collector:e2,logger:i3,id:o3,config:r2,env:a2},u2=await n4(c3),f2=u2.get,l2=u2.set,d2=u2.delete;u2.get=(0,import_core12.useHooks)(f2,"StoreGet",e2.hooks,e2.logger),u2.set=(0,import_core12.useHooks)(l2,"StoreSet",e2.hooks,e2.logger),u2.delete=(0,import_core12.useHooks)(d2,"StoreDelete",e2.hooks,e2.logger),t3[o3]=u2}return t3}(i2,c2),function(e2,n3,t3){const o3=new Map;for(const[t4,s4]of Object.entries(e2))n3[t4]&&o3.set(s4,n3[t4]);if(0!==o3.size)for(const e3 of[t3.transformers,t3.destinations,t3.sources])if(e3)for(const n4 of Object.values(e3))s3(n4.env);function s3(e3){if(e3)for(const[n4,t4]of Object.entries(e3))if("object"==typeof t4&&null!==t4){const s4=o3.get(t4);s4&&(e3[n4]=s4)}}}(c2,i2.stores,e),!i2.stores.__cache){const e2=new Map;i2.stores.__cache={type:"memory",config:{},get:n3=>{const t3=e2.get(n3);if(t3){if(!(t3.expires&&Date.now()>t3.expires))return t3.value;e2.delete(n3)}},set:(n3,t3,o3)=>{e2.set(n3,{value:t3,expires:o3?Date.now()+o3:void 0})},delete:n3=>{e2.delete(n3)}}}return i2.destinations=await async function(e,n2={}){const t2={};for(const[o2,s2]of Object.entries(n2))s2.config?.require?.length?e.pending.destinations[o2]=s2:t2[o2]=be(s2);return t2}(i2,e.destinations||{}),i2.transformers=await async function(e2,n3={}){const t3={};for(const[o3,s3]of Object.entries(n3)){const{code:n4,env:r2={}}=s3,{config:a2}=Z(s3,"before"),{config:i3}=Z({...s3,config:a2},"next"),c3=Object.keys(r2).length>0?{...i3,env:r2}:i3,{cache:u2}=s3,f2=u2?{...c3,cache:u2}:c3,l2=e2.logger.scope("transformer").scope(o3),d2={collector:e2,logger:l2,id:o3,ingest:(0,import_core7.createIngest)(o3),config:f2,env:r2},g2=await n4(d2);t3[o3]=g2}return t3}(i2,e.transformers||{}),i2}async function Ne(e){e=e||{};const n2=await Ge(e),t2=(o2=n2,{type:"elb",config:{},push:async(e2,n3,t3,s3,r3,a3)=>{if("string"==typeof e2&&e2.startsWith("walker ")){const s4=e2.replace("walker ","");return o2.command(s4,n3,t3)}let i3;if("string"==typeof e2)i3={name:e2},n3&&"object"==typeof n3&&!Array.isArray(n3)&&(i3.data=n3);else{if(!e2||"object"!=typeof e2)return ye({ok:!1});i3=e2,n3&&"object"==typeof n3&&!Array.isArray(n3)&&(i3.data={...i3.data||{},...n3})}return s3&&"object"==typeof s3&&(i3.context=s3),r3&&Array.isArray(r3)&&(i3.nested=r3),a3&&"object"==typeof a3&&(i3.custom=a3),o2.push(i3)}});var o2;n2.sources.elb=t2;const s2=await async function(e,n2={}){const t2={};for(const[o2,s2]of Object.entries(n2)){const{config:n3={}}=s2;if(n3.require&&n3.require.length>0){e.pending.sources[o2]=s2;continue}const r2=await re(e,o2,s2);r2&&(t2[o2]=r2)}return t2}(n2,e.sources||{});Object.assign(n2.sources,s2);const{consent:r2,user:a2,globals:i2,custom:c2}=e;r2&&await n2.command("consent",r2),a2&&await n2.command("user",a2),i2&&Object.assign(n2.globals,i2),c2&&Object.assign(n2.custom,c2),n2.config.run&&await n2.command("run");let u2=t2.push;const f2=Object.values(n2.sources).filter(e2=>"elb"!==e2.type),l2=f2.find(e2=>e2.config.primary);return l2?u2=l2.push:f2.length>0&&(u2=f2[0].push),{collector:n2,elb:u2}}var createTrigger=async config=>{let flow;return{get flow(){return flow},trigger:()=>async content=>{if(!flow){const result=await Ne(config);flow={collector:result.collector,elb:result.elb}}const source=function(collector){for(const source of Object.values(collector.sources||{}))if("lambda"===source.type)return source}(flow.collector);if(!source)throw new Error("Lambda source not found in collector");const lambdaContext={awsRequestId:`test-${Date.now()}`},pushFn=source.push,lambdaResult=await pushFn(content,lambdaContext);let body;try{body=JSON.parse(lambdaResult.body||"{}")}catch{body=lambdaResult.body}const headers={};if(lambdaResult.headers)for(const[k2,v2]of Object.entries(lambdaResult.headers))void 0!==v2&&(headers[k2]=String(v2));return{statusCode:lambdaResult.statusCode,body:body,headers:headers}}}};function trigger(source){return async content=>{const lambdaEvent={...content};if(lambdaEvent.body&&"string"==typeof lambdaEvent.body){const body=JSON.parse(lambdaEvent.body);body.name&&!body.event&&(lambdaEvent.body=JSON.stringify({...body,event:body.name,name:void 0}))}return source.push(lambdaEvent,{awsRequestId:"test-req"})}}var sourceLambda=async context=>{const{config:config={},env:env,setIngest:setIngest}=context,{push:envPush}=env,userSettings=config.settings||{},settings={...userSettings,cors:userSettings.cors??!0,timeout:userSettings.timeout??3e4,enablePixelTracking:userSettings.enablePixelTracking??!0,healthPath:userSettings.healthPath??"/health"};return{type:"lambda",config:{...config,settings:settings},push:async(event,context2)=>{const requestId=context2.awsRequestId;let parsed;try{const corsHeaders=function(corsOptions){if(!corsOptions)return{};if(!0===corsOptions)return{"Access-Control-Allow-Origin":"*","Access-Control-Allow-Methods":"GET, POST, OPTIONS","Access-Control-Allow-Headers":"Content-Type, Authorization","Access-Control-Max-Age":"3600"};const headers={};if(corsOptions.origin){const origin=Array.isArray(corsOptions.origin)?corsOptions.origin.join(", "):corsOptions.origin;headers["Access-Control-Allow-Origin"]=origin}return corsOptions.methods&&(headers["Access-Control-Allow-Methods"]=corsOptions.methods.join(", ")),corsOptions.headers&&(headers["Access-Control-Allow-Headers"]=corsOptions.headers.join(", ")),corsOptions.credentials&&(headers["Access-Control-Allow-Credentials"]="true"),void 0!==corsOptions.maxAge&&(headers["Access-Control-Max-Age"]=corsOptions.maxAge.toString()),headers}(settings.cors||!1);parsed=function(event){if(isAPIGatewayV2(event)){const headers={};return event.headers&&Object.entries(event.headers).forEach(([key,value])=>{value&&(headers[key.toLowerCase()]=value)}),{method:event.requestContext.http.method,body:event.body,queryString:event.rawQueryString||null,headers:headers,isBase64Encoded:event.isBase64Encoded||!1}}{const headers={};event.headers&&Object.entries(event.headers).forEach(([key,value])=>{value&&(headers[key.toLowerCase()]=value)});let queryString=null;if(event.queryStringParameters){const params=new URLSearchParams;Object.entries(event.queryStringParameters).forEach(([key,value])=>{value&¶ms.append(key,value)}),queryString=params.toString()||null}return{method:event.httpMethod,body:event.body,queryString:queryString,headers:headers,isBase64Encoded:event.isBase64Encoded||!1}}}(event);const path=function(event){return isAPIGatewayV2(event)?event.rawPath:event.path}(event);if(settings.healthPath&&path===settings.healthPath)return createResponse(200,{status:"ok",timestamp:Date.now(),source:"lambda",requestId:requestId},corsHeaders,requestId);if("OPTIONS"===parsed.method)return createResponse(204,"",corsHeaders,requestId);if(await setIngest(event),"GET"===parsed.method){if(!settings.enablePixelTracking)return createResponse(405,{success:!1,error:"GET not allowed",requestId:requestId},corsHeaders,requestId);if(parsed.queryString){const parsedData=(0,import_core13.requestToData)(parsed.queryString);parsedData&&"object"==typeof parsedData&&await envPush(parsedData)}return function(headers={},requestId){const responseHeaders={"Content-Type":"image/gif","Cache-Control":"no-cache, no-store, must-revalidate",...headers};return requestId&&(responseHeaders["X-Request-ID"]=requestId),{statusCode:200,headers:responseHeaders,body:"R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7",isBase64Encoded:!0}}(corsHeaders,requestId)}if("POST"===parsed.method){if(!parsed.body)return createResponse(400,{success:!1,error:"Request body is required",requestId:requestId},corsHeaders,requestId);const body=function(body,isBase64Encoded){if(!body||"string"!=typeof body)return body;try{const decoded=isBase64Encoded?Buffer.from(body,"base64").toString("utf8"):body;return JSON.parse(decoded)}catch{return body}}(parsed.body,parsed.isBase64Encoded);if(!body||"object"!=typeof body)return await envPush({}),createResponse(200,{success:!0,requestId:requestId},corsHeaders,requestId);if(function(body){return"object"==typeof body&&null!==body&&"event"in body&&"string"==typeof body.event}(body)){const result=await async function(eventReq,push2,logger,requestId){try{const result=await push2({name:eventReq.event,data:eventReq.data||{},context:eventReq.context,user:eventReq.user,globals:eventReq.globals,consent:eventReq.consent});return{id:result?.event?.id}}catch(error){return logger?.error("Event processing failed",{error:error,eventName:eventReq.event,requestId:requestId}),{error:error instanceof Error?error.message:"Unknown error"}}}(body,envPush,env.logger,requestId);return result.error?createResponse(400,{success:!1,error:result.error,requestId:requestId},corsHeaders,requestId):createResponse(200,{success:!0,id:result.id,requestId:requestId},corsHeaders,requestId)}return createResponse(400,{success:!1,error:"Invalid request format",requestId:requestId},corsHeaders,requestId)}return createResponse(405,{success:!1,error:"Method not allowed",requestId:requestId},corsHeaders,requestId)}catch(error){return env.logger?.error("Lambda handler error",{error:error,requestId:requestId,method:parsed?.method}),createResponse(500,{success:!1,error:error instanceof Error?error.message:"Internal server error",requestId:requestId},{},requestId)}}}},lambda_default=sourceLambda;//# sourceMappingURL=index.js.map
|
|
1
|
+
"use strict";var mod,__defProp=Object.defineProperty,__getOwnPropDesc=Object.getOwnPropertyDescriptor,__getOwnPropNames=Object.getOwnPropertyNames,__hasOwnProp=Object.prototype.hasOwnProperty,__export=(target,all)=>{for(var name in all)__defProp(target,name,{get:all[name],enumerable:!0})},index_exports={};__export(index_exports,{SourceLambda:()=>types_exports,examples:()=>examples_exports,sourceLambda:()=>lambda_default}),module.exports=(mod=index_exports,((to,from,except,desc)=>{if(from&&"object"==typeof from||"function"==typeof from)for(let key of __getOwnPropNames(from))__hasOwnProp.call(to,key)||key===except||__defProp(to,key,{get:()=>from[key],enumerable:!(desc=__getOwnPropDesc(from,key))||desc.enumerable});return to})(__defProp({},"__esModule",{value:!0}),mod));var import_core13=require("@walkeros/core");function isAPIGatewayV2(event){return"version"in event&&"2.0"===event.version}function createResponse(statusCode,body,headers={},requestId){const responseHeaders={"Content-Type":"object"==typeof body?"application/json":"text/plain",...headers};return requestId&&(responseHeaders["X-Request-ID"]=requestId),{statusCode:statusCode,headers:responseHeaders,body:"object"==typeof body?JSON.stringify(body):String(body),isBase64Encoded:!1}}var types_exports={},examples_exports={};__export(examples_exports,{createTrigger:()=>createTrigger,env:()=>env_exports,step:()=>step_exports,trigger:()=>trigger});var env_exports={};__export(env_exports,{push:()=>push});var createMockElbFn=()=>()=>Promise.resolve({ok:!0}),noopFn=()=>{},noopLogger={error:noopFn,warn:noopFn,info:noopFn,debug:noopFn,throw:message=>{throw"string"==typeof message?new Error(message):message},json:noopFn,scope:()=>noopLogger},push={get push(){return createMockElbFn()},get command(){return createMockElbFn()},get elb(){return createMockElbFn()},logger:noopLogger},step_exports={};__export(step_exports,{apiGatewayV1Post:()=>apiGatewayV1Post,lambdaGet:()=>lambdaGet,lambdaPost:()=>lambdaPost});var lambdaPost={title:"Lambda POST",description:"An API Gateway v2 HTTP POST with a JSON body is converted into a walker elb event.",trigger:{type:"POST"},in:{version:"2.0",requestContext:{http:{method:"POST",path:"/collect"},requestId:"req-123"},body:JSON.stringify({event:"page view",data:{title:"Home"}}),isBase64Encoded:!1},out:[["elb",{name:"page view",data:{title:"Home"}}]]},apiGatewayV1Post={title:"API Gateway v1 POST",description:"A REST API Gateway v1 POST request with a JSON body is converted into a walker elb event.",trigger:{type:"POST"},in:{httpMethod:"POST",path:"/collect",requestContext:{requestId:"req-789",identity:{sourceIp:"203.0.113.42"}},queryStringParameters:null,body:JSON.stringify({event:"page view",data:{title:"Home"}}),isBase64Encoded:!1},out:[["elb",{name:"page view",data:{title:"Home"}}]]},lambdaGet={title:"Lambda GET",description:"An API Gateway v2 HTTP GET with query parameters is parsed into an elb event payload.",trigger:{type:"GET"},in:{version:"2.0",requestContext:{http:{method:"GET",path:"/collect"},requestId:"req-456"},rawQueryString:"e=page+view&d=%7B%22title%22%3A%22Home%22%7D",isBase64Encoded:!1},out:[["elb",{e:"page view",d:'{"title":"Home"}'}]]},import_core=require("@walkeros/core"),import_core2=require("@walkeros/core"),import_core3=require("@walkeros/core"),import_core4=require("@walkeros/core"),import_core5=require("@walkeros/core"),import_core6=require("@walkeros/core"),import_core7=require("@walkeros/core"),import_core8=require("@walkeros/core"),import_core9=require("@walkeros/core"),import_core10=require("@walkeros/core"),import_core11=require("@walkeros/core"),import_core12=require("@walkeros/core"),t_Commands={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",Session:"session",Shutdown:"shutdown",User:"user",Walker:"walker"};function X(e,n2){return e.storeId&&n2.stores[e.storeId]?n2.stores[e.storeId]:n2.stores.__cache}function Y(e){const n2={};for(const[t2,o2]of Object.entries(e)){const e2=o2.config?.next;e2&&!(0,import_core7.isRouteArray)(e2)?n2[t2]={next:e2}:n2[t2]={}}return n2}function Z(e,n2){const t2=e.config||{},o2=e[n2];return void 0!==o2?{config:{...t2,[n2]:o2},chainValue:o2}:{config:t2,chainValue:void 0}}function ee(e,n2={}){if(!e)return[];if(Array.isArray(e))return e;const t2=[],o2=new Set;let s2=e;for(;s2&&n2[s2]&&!o2.has(s2);){o2.add(s2),t2.push(s2);const e2=n2[s2].next;if(Array.isArray(e2)){t2.push(...e2);break}s2=e2}return t2}async function ne(e,n2,t2){if(n2.init&&!n2.config.init){const o2=n2.type||"unknown",s2=e.logger.scope(`transformer:${o2}`),r2={collector:e,logger:s2,id:t2,ingest:(0,import_core7.createIngest)(t2),config:n2.config,env:se(n2.config.env)};s2.debug("init");const a2=await(0,import_core7.useHooks)(n2.init,"TransformerInit",e.hooks,e.logger)(r2);if(!1===a2)return!1;n2.config={...a2||n2.config,env:a2?.env||n2.config.env,init:!0},s2.debug("init done")}return!0}async function te(e,n2,t2,o2,s2,r2){const a2=n2.type||"unknown",i2=e.logger.scope(`transformer:${a2}`),c2={collector:e,logger:i2,id:t2,ingest:s2,config:n2.config,env:{...se(n2.config.env),...r2?{respond:r2}:{}}};i2.debug("push",{event:o2.name});const u2=await(0,import_core7.useHooks)(n2.push,"TransformerPush",e.hooks,e.logger)(o2,c2);return i2.debug("push done"),u2}async function oe(e,n2,t2,o2,s2,r2,a2){a2&&s2?._meta&&(s2._meta.chainPath=a2);let i2=o2,c2=r2;for(const o3 of t2){const r3=n2[o3];if(!r3){e.logger.warn(`Transformer not found: ${o3}`);continue}if(s2&&s2._meta&&s2._meta.path.length>256)return e.logger.error(`Max path length exceeded at ${o3}`),{event:null,respond:c2};if(s2&&s2._meta&&(s2._meta.hops++,s2._meta.path.push(o3)),!await(0,import_core7.tryCatchAsync)(ne)(e,r3,o3))return e.logger.error(`Transformer init failed: ${o3}`),{event:null,respond:c2};if(a2&&void 0!==r3.config?.chainMocks?.[a2]){const n3=r3.config.chainMocks[a2];e.logger.scope(`transformer:${r3.type||"unknown"}`).debug("chainMock",{chain:a2}),i2=n3;continue}if(void 0!==r3.config?.mock){e.logger.scope(`transformer:${r3.type||"unknown"}`).debug("mock"),i2=r3.config.mock;continue}if(r3.config?.disabled)continue;const u2=r3.config?.cache,f2=u2?(0,import_core7.compileCache)(u2):void 0,l2=f2?X(f2,e):void 0;let d2;if(f2&&l2){const e2=(0,import_core7.buildCacheContext)(s2,i2),n3=(0,import_core7.checkCache)(f2,l2,e2,`t:${o3}`);if("HIT"===n3?.status&&n3.value){if(i2=n3.value,f2.full)return{event:i2,respond:c2};continue}"MISS"===n3?.status&&(d2={key:n3.key,ttl:n3.rule.ttl})}const g2=r3.config.before;if(g2){const t3=ee("string"==typeof g2||Array.isArray(g2)&&!(0,import_core7.isRouteArray)(g2)?g2:(0,import_core7.resolveNext)((0,import_core7.compileNext)(g2),(0,import_core7.buildCacheContext)(s2,i2))||void 0,Y(n2));if(t3.length>0){const o4=await oe(e,n2,t3,i2,s2,c2,a2);if(null===o4.event)return{event:null,respond:o4.respond??c2};o4.respond&&(c2=o4.respond),i2=Array.isArray(o4.event)?o4.event[0]:o4.event}}const m2=await(0,import_core7.tryCatchAsync)(te,n3=>(e.logger.scope(`transformer:${r3.type||"unknown"}`).error("Push failed",{error:n3}),!1))(e,r3,o3,i2,s2,c2);if(!1===m2)return{event:null,respond:c2};if(Array.isArray(m2)){const r4=t2.slice(t2.indexOf(o3)+1),u3=await Promise.all(m2.map(async t3=>{const o4=t3.event||i2,u4=s2?{...s2,_meta:{...s2._meta,path:[...s2._meta.path]}}:(0,import_core7.createIngest)("unknown");if(t3.next){let s3=t3.next;if((0,import_core7.isRouteArray)(t3.next)){const e2=(0,import_core7.compileNext)(t3.next);s3=(0,import_core7.resolveNext)(e2,(0,import_core7.buildCacheContext)(u4,o4))}if(s3){const t4=ee(s3,Y(n2));if(t4.length>0)return oe(e,n2,t4,o4,u4,c2,a2)}return{event:o4,respond:c2}}return r4.length>0?oe(e,n2,r4,o4,u4,c2,a2):{event:o4,respond:c2}}));let f3=c2;const l3=[];for(const e2 of u3.flat())if(null!==e2)if(e2&&"object"==typeof e2&&"event"in e2){const n3=e2;if(n3.respond&&(f3=n3.respond),null===n3.event)continue;Array.isArray(n3.event)?l3.push(...n3.event):l3.push(n3.event)}else l3.push(e2);return 0===l3.length?{event:null,respond:f3}:1===l3.length?{event:l3[0],respond:f3}:{event:l3,respond:f3}}if(m2&&"object"==typeof m2){const{event:t3,respond:o4,next:r4}=m2;if(o4&&(c2=o4),r4){let o5=r4;if((0,import_core7.isRouteArray)(r4)){const e2=(0,import_core7.compileNext)(r4);if(o5=(0,import_core7.resolveNext)(e2,(0,import_core7.buildCacheContext)(s2,i2)),!o5){t3&&(i2=t3);continue}}const u3=ee(o5,Y(n2));return u3.length>0?oe(e,n2,u3,t3||i2,s2,c2,a2):(e.logger.warn(`Branch target not found: ${JSON.stringify(r4)}`),{event:null,respond:c2})}t3&&(i2=t3)}if(d2&&l2&&(0,import_core7.storeCache)(l2,d2.key,i2,d2.ttl),(!m2||"object"==typeof m2&&!m2.next)&&r3.config.next&&(0,import_core7.isRouteArray)(r3.config.next)){const t3=r3.config.next,o4=(0,import_core7.compileNext)(t3),u3=(0,import_core7.resolveNext)(o4,(0,import_core7.buildCacheContext)(s2,i2));if(u3){const t4=ee(u3,Y(n2));if(t4.length>0)return oe(e,n2,t4,i2,s2,c2,a2)}return{event:i2,respond:c2}}}return{event:i2,respond:c2}}function se(e){return e&&(0,import_core7.isObject)(e)?e:{}}async function re(e,n2,t2){const{code:o2,config:s2={},env:r2={},primary:a2,next:i2,before:c2,cache:u2}=t2;let f2,l2=(0,import_core6.createIngest)(n2);const d2=u2?(0,import_core6.compileCache)({...u2,full:u2.full??!0}):void 0,g2=(0,import_core6.compileNext)(i2),m2=Array.isArray(i2)&&(0,import_core6.isRouteArray)(i2)||!g2?void 0:ee((0,import_core6.resolveNext)(g2),Y(e.transformers)),p2=(0,import_core6.compileNext)(c2),h2=Array.isArray(c2)&&(0,import_core6.isRouteArray)(c2)||!p2?void 0:ee((0,import_core6.resolveNext)(p2),Y(e.transformers)),y2=e.logger.scope("source").scope(n2),b2={push:async(t3,o3={})=>{let r3,a3=t3;const i3=h2??(p2?ee((0,import_core6.resolveNext)(p2,(0,import_core6.buildCacheContext)(l2)),Y(e.transformers)):[]);if(i3.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const t4=await oe(e,e.transformers,i3,a3,l2,f2,`source.${n2}.before`);if(null===t4.event)return{ok:!0};t4.respond&&(f2=t4.respond),a3=Array.isArray(t4.event)?t4.event[0]:t4.event}if(d2){const t4=X(d2,e);if(t4){const o4=(0,import_core6.buildCacheContext)(l2),s3=(0,import_core6.checkCache)(d2,t4,o4,`s:${n2}`);if(s3){if("HIT"===s3.status&&void 0!==s3.value&&d2.full){let n3=s3.value;return s3.rule.update&&(n3=await(0,import_core6.applyUpdate)(n3,s3.rule.update,{...o4,cache:{status:"HIT"}},e)),f2?.(n3),{ok:!0}}if("MISS"===s3.status&&d2.full&&f2){const n3=f2,a4=s3.rule.update,i4={...o4,cache:{status:"MISS"}},c4=s3.key,u4=s3.rule.ttl;f2=o5=>{(0,import_core6.storeCache)(t4,c4,o5,u4),a4?r3=(async()=>{const t5=await(0,import_core6.applyUpdate)(o5,a4,i4,e);n3(t5)})():n3(o5)}}"MISS"!==s3.status||d2.full||(0,import_core6.storeCache)(t4,s3.key,!0,s3.rule.ttl)}}}const c3=m2??(g2?ee((0,import_core6.resolveNext)(g2,(0,import_core6.buildCacheContext)(l2)),Y(e.transformers)):[]),u3=await e.push(a3,{...o3,id:n2,ingest:l2,respond:f2,mapping:s2,preChain:c3});return r3&&await r3,u3},command:e.command,sources:e.sources,elb:e.sources.elb.push,logger:y2,...r2},v2={collector:e,logger:y2,id:n2,config:s2,env:b2,setIngest:async t3=>{if(!s2.ingest)return void(l2=(0,import_core6.createIngest)(n2));const o3=await(0,import_core6.getMappingValue)(t3,s2.ingest,{collector:e}),r3=(0,import_core6.createIngest)(n2);l2={...r3,...o3,_meta:r3._meta}},setRespond:e2=>{f2=e2}},k2=await(0,import_core6.tryCatchAsync)(o2)(v2);if(!k2)return;const w2=k2.type||"unknown",C2=e.logger.scope(w2).scope(n2);return b2.logger=C2,a2&&(k2.config={...k2.config,primary:a2}),k2}function ie(e,n2){return{collector:e,logger:e.logger.scope("on").scope(String(n2))}}function ue(e,n2,t2,o2,s2){if(!n2.on)return;const r2=n2.type||"unknown",a2=e.logger.scope(r2).scope("on").scope(o2),i2={collector:e,logger:a2,id:t2,config:n2.config,data:s2,env:ke(n2.env,n2.config.env)};(0,import_core5.tryCatch)(n2.on)(o2,i2)}function fe(e,n2,o2,s2){let r2;switch(n2){case t_Commands.Consent:r2=s2||e.consent;break;case t_Commands.Session:r2=e.session;break;case t_Commands.User:r2=s2||e.user;break;case t_Commands.Custom:r2=s2||e.custom;break;case t_Commands.Globals:r2=s2||e.globals;break;case t_Commands.Config:r2=s2||e.config;break;case t_Commands.Ready:case t_Commands.Run:default:r2=void 0}if(o2.length)switch(n2){case t_Commands.Consent:!function(e2,n3,o3){const s3=o3||e2.consent,r3=ie(e2,t_Commands.Consent);n3.forEach(e3=>{Object.keys(s3).filter(n4=>n4 in e3).forEach(n4=>{(0,import_core5.tryCatch)(e3[n4])(s3,r3)})})}(e,o2,s2);break;case t_Commands.Ready:!function(e2,n3){if(!e2.allowed)return;const o3=ie(e2,t_Commands.Ready);n3.forEach(e3=>{(0,import_core5.tryCatch)(e3)(void 0,o3)})}(e,o2);break;case t_Commands.Run:!function(e2,n3){if(!e2.allowed)return;const o3=ie(e2,t_Commands.Run);n3.forEach(e3=>{(0,import_core5.tryCatch)(e3)(void 0,o3)})}(e,o2);break;case t_Commands.Session:!function(e2,n3){if(!e2.session)return;const o3=ie(e2,t_Commands.Session);n3.forEach(n4=>{(0,import_core5.tryCatch)(n4)(e2.session,o3)})}(e,o2);break;default:{const t2=ie(e,n2);o2.forEach(e2=>{"function"==typeof e2&&(0,import_core5.tryCatch)(e2)(r2,t2)});break}}}function de(e,n2,t2,o2){if(!e)return[];if(n2){const e2=(0,import_core3.resolveNext)(n2,(0,import_core3.buildCacheContext)(o2));return e2?ee(e2,Y(t2)):[]}return ee(e,Y(t2))}async function ge(e,n2,t2){const{code:o2,config:s2={},env:r2={},before:a2,next:i2,cache:c2}=n2;if(!(0,import_core3.isFunction)(o2.push))return ye({ok:!1,failed:{invalid:{type:"invalid",error:"Destination code must have a push method"}}});const u2=t2||s2||{init:!1};let f2=a2?{...u2,before:a2}:{...u2};i2&&(f2={...f2,next:i2}),c2&&(f2={...f2,cache:c2});const l2={...o2,config:f2,env:ke(o2.env,r2)};let d2=l2.config.id;if(!d2)do{d2=(0,import_core3.getId)(5,"abcdefghijklmnopqrstuvwxyz")}while(e.destinations[d2]);return e.destinations[d2]=l2,!1!==l2.config.queue&&(l2.queuePush=[...e.queue]),me(e,void 0,{},{[d2]:l2})}async function me(e,n2,t2={},o2){const{allowed:s2,consent:r2,globals:a2,user:p2}=e;if(!s2)return ye({ok:!1});n2&&(e.queue.push(n2),e.status.in++),o2||(o2=e.destinations);const h2=await Promise.all(Object.entries(o2||{}).map(async([o3,s3])=>{if(s3.config.disabled)return{id:o3,destination:s3,skipped:!0};let h3=(s3.queuePush||[]).map(e2=>({...e2,consent:r2}));s3.queuePush=[],n2&&h3.push((0,import_core3.clone)(n2));const b3=t2.ingest?{...t2.ingest,_meta:{...t2.ingest._meta,path:[...t2.ingest._meta.path]}}:(0,import_core3.createIngest)("unknown");if(!h3.length&&!s3.queueOn?.length)return{id:o3,destination:s3,skipped:!0};if(!h3.length&&s3.queueOn?.length){const n3=await(0,import_core3.tryCatchAsync)(pe)(e,s3,o3);return{id:o3,destination:s3,skipped:!n3}}const v3=[],k3=h3.filter(e2=>{const n3=(0,import_core3.getGrantedConsent)(s3.config.consent,r2,e2.consent);return!n3||(e2.consent=n3,v3.push(e2),!1)});if(s3.queuePush.push(...k3),!v3.length)return{id:o3,destination:s3,queue:h3};if(!await(0,import_core3.tryCatchAsync)(pe)(e,s3,o3))return{id:o3,destination:s3,queue:h3};let C2,O2;s3.dlq||(s3.dlq=[]);const x2=s3.config.before,A2=de(x2,x2&&(0,import_core3.isRouteArray)(x2)?(0,import_core3.compileNext)(x2):void 0,e.transformers,b3),q2=s3.config.next,S2=q2&&(0,import_core3.isRouteArray)(q2)?(0,import_core3.compileNext)(q2):void 0,D2=s3.config?.cache,$2=D2?(0,import_core3.compileCache)(D2):void 0,_2=$2?X($2,e):void 0;let I2=0;return await Promise.all(v3.map(async n3=>{let r3;if(n3.globals=(0,import_core3.assign)(a2,n3.globals),n3.user=(0,import_core3.assign)(p2,n3.user),$2?.full&&_2){const e2=(0,import_core3.buildCacheContext)(b3,n3),t3=(0,import_core3.checkCache)($2,_2,e2,`d:${o3}`);if("HIT"===t3?.status)return n3;"MISS"===t3?.status&&(r3={key:t3.key,ttl:t3.rule.ttl})}let u2=n3,f2=t2.respond;if(A2.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const s4=await oe(e,e.transformers,A2,n3,b3,t2.respond,`destination.${o3}.before`);if(null===s4.event)return n3;s4.respond&&(f2=s4.respond),u2=Array.isArray(s4.event)?s4.event[0]:s4.event}if($2&&!$2.full&&_2){const e2=(0,import_core3.buildCacheContext)(b3,u2),t3=(0,import_core3.checkCache)($2,_2,e2,`d:${o3}`);if("HIT"===t3?.status)return n3;"MISS"===t3?.status&&(r3={key:t3.key,ttl:t3.rule.ttl})}const g2=Date.now();let m2=!1;const h4=await(0,import_core3.tryCatchAsync)(he,n4=>{const t3=s3.type||"unknown";e.logger.scope(t3).error("Push failed",{error:n4,event:u2.name}),C2=n4,m2=!0,s3.dlq.push([u2,n4])})(e,s3,o3,u2,b3,f2);if(I2+=Date.now()-g2,r3&&_2&&void 0===s3.config.mock&&(0,import_core3.storeCache)(_2,r3.key,h4??!0,r3.ttl),void 0!==h4&&(O2=h4),!m2&&q2){void 0!==h4&&(b3._response=h4);const n4=de(q2,S2,e.transformers,b3);if(n4.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const t3=await oe(e,e.transformers,n4,u2,b3,f2,`destination.${o3}.next`);t3.respond&&(f2=t3.respond)}}return n3})),{id:o3,destination:s3,error:C2,response:O2,totalDuration:I2}})),b2={},v2={},k2={};for(const n3 of h2){if(n3.skipped)continue;const t3={type:n3.destination.type||"unknown",data:n3.response};e.status.destinations[n3.id]||(e.status.destinations[n3.id]={count:0,failed:0,duration:0});const o3=e.status.destinations[n3.id],s3=Date.now();n3.error?(t3.error=n3.error,k2[n3.id]=t3,o3.failed++,o3.lastAt=s3,o3.duration+=n3.totalDuration||0,e.status.failed++):n3.queue&&n3.queue.length?v2[n3.id]=t3:(b2[n3.id]=t3,o3.count++,o3.lastAt=s3,o3.duration+=n3.totalDuration||0,e.status.out++)}return ye({event:n2,...Object.keys(b2).length&&{done:b2},...Object.keys(v2).length&&{queued:v2},...Object.keys(k2).length&&{failed:k2}})}async function pe(e,n2,t2){if(n2.init&&!n2.config.init){const o2=n2.type||"unknown",s2=e.logger.scope(o2),r2={collector:e,logger:s2,id:t2,config:n2.config,env:ke(n2.env,n2.config.env)};s2.debug("init");const a2=await(0,import_core3.useHooks)(n2.init,"DestinationInit",e.hooks,e.logger)(r2);if(!1===a2)return a2;if(n2.config={...a2||n2.config,init:!0},n2.queueOn?.length){const o3=n2.queueOn;n2.queueOn=[];for(const{type:s3,data:r3}of o3)ue(e,n2,t2,s3,r3)}s2.debug("init done")}return!0}async function he(e,n2,t2,o2,s2,r2){const{config:a2}=n2,i2=await(0,import_core3.processEventMapping)(o2,a2,e);if(i2.ignore)return!1;const c2=n2.type||"unknown",u2=e.logger.scope(c2),f2={collector:e,logger:u2,id:t2,config:a2,data:i2.data,rule:i2.mapping,ingest:s2,env:{...ke(n2.env,a2.env),...r2?{respond:r2}:{}}};if(void 0!==a2.mock)return u2.debug("mock",{event:i2.event.name}),a2.mock;const l2=i2.mapping,d2=i2.mappingKey||"* *";if(!l2?.batch||!n2.pushBatch||void 0!==a2.mock){u2.debug("push",{event:i2.event.name});const t3=await(0,import_core3.useHooks)(n2.push,"DestinationPush",e.hooks,e.logger)(i2.event,f2);return u2.debug("push done"),t3}{if(n2.batches=n2.batches||{},!n2.batches[d2]){const o4={key:d2,events:[],data:[]};n2.batches[d2]={batched:o4,batchFn:(0,import_core3.debounce)(()=>{const o5=n2.batches[d2].batched,i3={collector:e,logger:u2,id:t2,config:a2,data:void 0,rule:l2,ingest:s2,env:{...ke(n2.env,a2.env),...r2?{respond:r2}:{}}};u2.debug("push batch",{events:o5.events.length}),(0,import_core3.useHooks)(n2.pushBatch,"DestinationPushBatch",e.hooks,e.logger)(o5,i3),u2.debug("push batch done"),o5.events=[],o5.data=[]},l2.batch)}}const o3=n2.batches[d2];o3.batched.events.push(i2.event),(0,import_core3.isDefined)(i2.data)&&o3.batched.data.push(i2.data),o3.batchFn()}return!0}function ye(e){return{ok:!e?.failed,...e}}function be(e){const{code:n2,config:t2={},env:o2={},cache:s2}=e,{config:r2}=Z(e,"before"),{config:a2}=Z({...e,config:r2},"next"),i2={...n2.config,...t2,...a2};s2&&(i2.cache=s2);const c2=ke(n2.env,o2);return{...n2,config:i2,env:c2}}function ke(e,n2){return e||n2?n2?e&&(0,import_core3.isObject)(e)&&(0,import_core3.isObject)(n2)?{...e,...n2}:n2:e:{}}async function Ae(e,n2,t2){const o2=Object.entries(e).map(async([e2,o3])=>{const s2=o3.destroy;if(!s2)return;const r2=o3.type||"unknown",a2=t2.scope(r2),i2={id:e2,config:o3.config,env:o3.env??{},logger:a2};try{await Promise.race([s2(i2),new Promise((t3,o4)=>setTimeout(()=>o4(new Error(`${n2} '${e2}' destroy timed out`)),5e3))])}catch(t3){a2.error(`${n2} '${e2}' destroy failed: ${t3}`)}});await Promise.allSettled(o2)}async function qe(e,n2,o2,r2){let a2,i2,c2=!1;switch(n2){case t_Commands.Config:(0,import_core9.isObject)(o2)&&((0,import_core8.assign)(e.config,o2,{shallow:!1}),i2=o2,c2=!0);break;case t_Commands.Consent:if((0,import_core9.isObject)(o2)){const{update:n3}=function(e,n2){const t2={};return Object.entries(n2).forEach(([e2,n3])=>{t2[e2]=!!n3}),e.consent=(0,import_core.assign)(e.consent,t2),{update:t2}}(e,o2);i2=n3,c2=!0}break;case t_Commands.Custom:(0,import_core9.isObject)(o2)&&(e.custom=(0,import_core8.assign)(e.custom,o2),i2=o2,c2=!0);break;case t_Commands.Destination:(0,import_core9.isObject)(o2)&&("code"in o2&&(0,import_core9.isObject)(o2.code)?a2=await ge(e,o2,r2):(0,import_core8.isFunction)(o2.push)&&(a2=await ge(e,{code:o2},r2)));break;case t_Commands.Globals:(0,import_core9.isObject)(o2)&&(e.globals=(0,import_core8.assign)(e.globals,o2),i2=o2,c2=!0);break;case t_Commands.On:(0,import_core8.isString)(o2)&&await async function(e,n2,t2){const o2=e.on,s2=o2[n2]||[],r2=(0,import_core4.isArray)(t2)?t2:[t2];r2.forEach(e2=>{s2.push(e2)}),o2[n2]=s2,fe(e,n2,r2)}(e,o2,r2);break;case t_Commands.Ready:c2=!0;break;case t_Commands.Run:a2=await async function(e,n2){return e.allowed=!0,e.timing=Date.now(),n2&&(n2.consent&&(e.consent=(0,import_core8.assign)(e.consent,n2.consent)),n2.user&&(e.user=(0,import_core8.assign)(e.user,n2.user)),n2.globals&&(e.globals=(0,import_core8.assign)(e.config.globalsStatic||{},n2.globals)),n2.custom&&(e.custom=(0,import_core8.assign)(e.custom,n2.custom))),Object.values(e.destinations).forEach(e2=>{e2.queuePush=[]}),e.queue=[],e.round++,await me(e)}(e,o2),c2=!0;break;case t_Commands.Session:c2=!0;break;case t_Commands.Shutdown:await async function(e2){const n3=e2.logger;await Ae(e2.sources,"source",n3),await Ae(e2.destinations,"destination",n3),await Ae(e2.transformers,"transformer",n3),await Ae(e2.stores,"store",n3)}(e);break;case t_Commands.User:(0,import_core9.isObject)(o2)&&((0,import_core8.assign)(e.user,o2,{shallow:!1}),i2=o2,c2=!0)}return c2&&(await async function(e,n2,o2,s2){let r2,a2=o2||[];switch(o2||(a2=e.on[n2]||[]),n2){case t_Commands.Consent:r2=s2||e.consent;break;case t_Commands.Session:r2=e.session;break;case t_Commands.User:r2=s2||e.user;break;case t_Commands.Custom:r2=s2||e.custom;break;case t_Commands.Globals:r2=s2||e.globals;break;case t_Commands.Config:r2=s2||e.config;break;case t_Commands.Ready:case t_Commands.Run:default:r2=void 0}let i2=!1;for(const t2 of Object.values(e.sources))t2.on&&!1===await(0,import_core5.tryCatchAsync)(t2.on)(n2,r2)&&(i2=!0);return Object.entries(e.destinations).forEach(([t2,o3])=>{if(o3.on){if(!o3.config.init)return o3.queueOn=o3.queueOn||[],void o3.queueOn.push({type:n2,data:r2});ue(e,o3,t2,n2,r2)}}),(Object.keys(e.pending.sources).length>0||Object.keys(e.pending.destinations).length>0)&&await async function(e2,n3){for(const[t2,o3]of Object.entries(e2.pending.sources)){if(!e2.pending.sources[t2]||e2.sources[t2])continue;const s3=o3.config?.require;if(!s3)continue;const r3=s3.indexOf(n3);if(-1===r3)continue;if(s3.splice(r3,1),s3.length>0)continue;delete e2.pending.sources[t2];const a3=await re(e2,t2,o3);a3&&(e2.sources[t2]=a3)}for(const[t2,o3]of Object.entries(e2.pending.destinations)){if(!e2.pending.destinations[t2]||e2.destinations[t2])continue;const s3=o3.config?.require;if(!s3)continue;const r3=s3.indexOf(n3);if(-1===r3)continue;if(s3.splice(r3,1),s3.length>0)continue;delete e2.pending.destinations[t2];const a3=be(o3);!1!==a3.config.queue&&(a3.queuePush=[...e2.queue]),e2.destinations[t2]=a3}}(e,n2),fe(e,n2,a2,s2),!i2}(e,n2,void 0,i2),a2=await me(e)),a2||ye({ok:!0})}function Se(e,n2){if(!n2.name)throw new Error("Event name is required");const[t2,o2]=n2.name.split(" ");if(!t2||!o2)throw new Error("Event name is invalid");const{timestamp:s2=Date.now(),name:r2=`${t2} ${o2}`,data:a2={},context:i2={},globals:c2=e.globals,custom:u2={},user:f2=e.user,nested:l2=[],consent:d2=e.consent,id:g2=(0,import_core8.getSpanId)(),trigger:m2="",entity:p2=t2,action:h2=o2,timing:y2=0,source:b2={type:"collector",schema:"4"}}=n2;return{name:r2,data:a2,context:i2,globals:c2,custom:u2,user:f2,nested:l2,consent:d2,id:g2,trigger:m2,entity:p2,action:h2,timestamp:s2,timing:y2,source:b2}}async function Ge(e){const n2=(0,import_core2.assign)({globalsStatic:{},sessionStatic:{},run:!0},e,{merge:!1,extend:!1}),t2={level:e.logger?.level,handler:e.logger?.handler},o2=(0,import_core2.createLogger)(t2),s2={...n2.globalsStatic,...e.globals},i2={allowed:!1,config:n2,consent:e.consent||{},custom:e.custom||{},destinations:{},transformers:{},stores:{},globals:s2,hooks:e.hooks||{},logger:o2,on:{},queue:[],round:0,session:void 0,status:{startedAt:Date.now(),in:0,out:0,failed:0,sources:{},destinations:{}},timing:Date.now(),user:e.user||{},sources:{},pending:{sources:{},destinations:{}},push:void 0,command:void 0};var e2,n3;i2.push=function(e,n2){return(0,import_core10.useHooks)(async(t2,o2={})=>await(0,import_core10.tryCatchAsync)(async()=>{const s2=Date.now(),{id:r2,ingest:a2,respond:i2,mapping:c2,preChain:u2,include:f2,exclude:l2}=o2;let d2=i2,g2=t2;const m2=f2||l2?function(e2,n3,t3){let o3=e2;return n3&&(o3=Object.fromEntries(Object.entries(o3).filter(([e3])=>n3.includes(e3)))),t3&&(o3=Object.fromEntries(Object.entries(o3).filter(([e3])=>!t3.includes(e3)))),o3}(e.destinations,f2,l2):void 0,p2=a2??(0,import_core10.createIngest)(r2||"unknown");if(c2){const n3=await(0,import_core10.processEventMapping)(g2,c2,e);if(n3.ignore)return ye({ok:!0});if(c2.consent&&!(0,import_core10.getGrantedConsent)(c2.consent,e.consent,n3.event.consent))return ye({ok:!0});g2=n3.event}if(u2?.length&&e.transformers&&Object.keys(e.transformers).length>0){const t3=await oe(e,e.transformers,u2,g2,p2,d2,r2?`source.${r2}.next`:void 0);if(null===t3.event)return ye({ok:!0});if(t3.respond&&(d2=t3.respond),Array.isArray(t3.event)){const o3=await Promise.all(t3.event.map(async t4=>{const o4=n2(t4),s3=Se(e,o4);return me(e,s3,{id:r2,ingest:p2,respond:d2},m2)}));if(r2){e.status.sources[r2]||(e.status.sources[r2]={count:0,duration:0});const n3=e.status.sources[r2];n3.count+=t3.event.length,n3.lastAt=Date.now(),n3.duration+=Date.now()-s2}return o3[0]??ye({ok:!0})}g2=t3.event}const h2=n2(g2),y2=Se(e,h2),b2=await me(e,y2,{id:r2,ingest:p2,respond:d2},m2);if(r2){e.status.sources[r2]||(e.status.sources[r2]={count:0,duration:0});const n3=e.status.sources[r2];n3.count++,n3.lastAt=Date.now(),n3.duration+=Date.now()-s2}return b2},()=>ye({ok:!1}))(),"Push",e.hooks,e.logger)}(i2,e2=>({timing:Math.round((Date.now()-i2.timing)/10)/100,source:{type:"collector",schema:"4",version:"4.0.0"},...e2})),i2.command=(e2=i2,n3=qe,(0,import_core11.useHooks)(async(t3,o3,s3)=>await(0,import_core11.tryCatchAsync)(async()=>await n3(e2,t3,o3,s3),()=>ye({ok:!1}))(),"Command",e2.hooks,e2.logger));const c2=e.stores||{};if(i2.stores=await async function(e2,n3={}){const t3={};for(const[o3,s3]of Object.entries(n3)){const{code:n4,config:r2={},env:a2={}}=s3,i3=e2.logger.scope("store").scope(o3),c3={collector:e2,logger:i3,id:o3,config:r2,env:a2},u2=await n4(c3),f2=u2.get,l2=u2.set,d2=u2.delete;u2.get=(0,import_core12.useHooks)(f2,"StoreGet",e2.hooks,e2.logger),u2.set=(0,import_core12.useHooks)(l2,"StoreSet",e2.hooks,e2.logger),u2.delete=(0,import_core12.useHooks)(d2,"StoreDelete",e2.hooks,e2.logger),t3[o3]=u2}return t3}(i2,c2),function(e2,n3,t3){const o3=new Map;for(const[t4,s4]of Object.entries(e2))n3[t4]&&o3.set(s4,n3[t4]);if(0!==o3.size)for(const e3 of[t3.transformers,t3.destinations,t3.sources])if(e3)for(const n4 of Object.values(e3))s3(n4.env);function s3(e3){if(e3)for(const[n4,t4]of Object.entries(e3))if("object"==typeof t4&&null!==t4){const s4=o3.get(t4);s4&&(e3[n4]=s4)}}}(c2,i2.stores,e),!i2.stores.__cache){const e2=new Map;i2.stores.__cache={type:"memory",config:{},get:n3=>{const t3=e2.get(n3);if(t3){if(!(t3.expires&&Date.now()>t3.expires))return t3.value;e2.delete(n3)}},set:(n3,t3,o3)=>{e2.set(n3,{value:t3,expires:o3?Date.now()+o3:void 0})},delete:n3=>{e2.delete(n3)}}}return i2.destinations=await async function(e,n2={}){const t2={};for(const[o2,s2]of Object.entries(n2))s2.config?.require?.length?e.pending.destinations[o2]=s2:t2[o2]=be(s2);return t2}(i2,e.destinations||{}),i2.transformers=await async function(e2,n3={}){const t3={};for(const[o3,s3]of Object.entries(n3)){const{code:n4,env:r2={}}=s3,{config:a2}=Z(s3,"before"),{config:i3}=Z({...s3,config:a2},"next"),c3=Object.keys(r2).length>0?{...i3,env:r2}:i3,{cache:u2}=s3,f2=u2?{...c3,cache:u2}:c3,l2=e2.logger.scope("transformer").scope(o3),d2={collector:e2,logger:l2,id:o3,ingest:(0,import_core7.createIngest)(o3),config:f2,env:r2},g2=await n4(d2);t3[o3]=g2}return t3}(i2,e.transformers||{}),i2}async function Ne(e){e=e||{};const n2=await Ge(e),t2=(o2=n2,{type:"elb",config:{},push:async(e2,n3,t3,s3,r3,a3)=>{if("string"==typeof e2&&e2.startsWith("walker ")){const s4=e2.replace("walker ","");return o2.command(s4,n3,t3)}let i3;if("string"==typeof e2)i3={name:e2},n3&&"object"==typeof n3&&!Array.isArray(n3)&&(i3.data=n3);else{if(!e2||"object"!=typeof e2)return ye({ok:!1});i3=e2,n3&&"object"==typeof n3&&!Array.isArray(n3)&&(i3.data={...i3.data||{},...n3})}return s3&&"object"==typeof s3&&(i3.context=s3),r3&&Array.isArray(r3)&&(i3.nested=r3),a3&&"object"==typeof a3&&(i3.custom=a3),o2.push(i3)}});var o2;n2.sources.elb=t2;const s2=await async function(e,n2={}){const t2={};for(const[o2,s2]of Object.entries(n2)){const{config:n3={}}=s2;if(n3.require&&n3.require.length>0){e.pending.sources[o2]=s2;continue}const r2=await re(e,o2,s2);r2&&(t2[o2]=r2)}return t2}(n2,e.sources||{});Object.assign(n2.sources,s2);const{consent:r2,user:a2,globals:i2,custom:c2}=e;r2&&await n2.command("consent",r2),a2&&await n2.command("user",a2),i2&&Object.assign(n2.globals,i2),c2&&Object.assign(n2.custom,c2),n2.config.run&&await n2.command("run");let u2=t2.push;const f2=Object.values(n2.sources).filter(e2=>"elb"!==e2.type),l2=f2.find(e2=>e2.config.primary);return l2?u2=l2.push:f2.length>0&&(u2=f2[0].push),{collector:n2,elb:u2}}var createTrigger=async config=>{let flow;return{get flow(){return flow},trigger:()=>async content=>{if(!flow){const result=await Ne(config);flow={collector:result.collector,elb:result.elb}}const source=function(collector){for(const source of Object.values(collector.sources||{}))if("lambda"===source.type)return source}(flow.collector);if(!source)throw new Error("Lambda source not found in collector");const lambdaContext={awsRequestId:`test-${Date.now()}`},pushFn=source.push,lambdaResult=await pushFn(content,lambdaContext);let body;try{body=JSON.parse(lambdaResult.body||"{}")}catch{body=lambdaResult.body}const headers={};if(lambdaResult.headers)for(const[k2,v2]of Object.entries(lambdaResult.headers))void 0!==v2&&(headers[k2]=String(v2));return{statusCode:lambdaResult.statusCode,body:body,headers:headers}}}};function trigger(source){return async content=>{const lambdaEvent={...content};if(lambdaEvent.body&&"string"==typeof lambdaEvent.body){const body=JSON.parse(lambdaEvent.body);body.name&&!body.event&&(lambdaEvent.body=JSON.stringify({...body,event:body.name,name:void 0}))}return source.push(lambdaEvent,{awsRequestId:"test-req"})}}var sourceLambda=async context=>{const{config:config={},env:env,setIngest:setIngest}=context,{push:envPush}=env,userSettings=config.settings||{},settings={...userSettings,cors:userSettings.cors??!0,timeout:userSettings.timeout??3e4,enablePixelTracking:userSettings.enablePixelTracking??!0,healthPath:userSettings.healthPath??"/health"};return{type:"lambda",config:{...config,settings:settings},push:async(event,context2)=>{const requestId=context2.awsRequestId;let parsed;try{const corsHeaders=function(corsOptions){if(!corsOptions)return{};if(!0===corsOptions)return{"Access-Control-Allow-Origin":"*","Access-Control-Allow-Methods":"GET, POST, OPTIONS","Access-Control-Allow-Headers":"Content-Type, Authorization","Access-Control-Max-Age":"3600"};const headers={};if(corsOptions.origin){const origin=Array.isArray(corsOptions.origin)?corsOptions.origin.join(", "):corsOptions.origin;headers["Access-Control-Allow-Origin"]=origin}return corsOptions.methods&&(headers["Access-Control-Allow-Methods"]=corsOptions.methods.join(", ")),corsOptions.headers&&(headers["Access-Control-Allow-Headers"]=corsOptions.headers.join(", ")),corsOptions.credentials&&(headers["Access-Control-Allow-Credentials"]="true"),void 0!==corsOptions.maxAge&&(headers["Access-Control-Max-Age"]=corsOptions.maxAge.toString()),headers}(settings.cors||!1);parsed=function(event){if(isAPIGatewayV2(event)){const headers={};return event.headers&&Object.entries(event.headers).forEach(([key,value])=>{value&&(headers[key.toLowerCase()]=value)}),{method:event.requestContext.http.method,body:event.body,queryString:event.rawQueryString||null,headers:headers,isBase64Encoded:event.isBase64Encoded||!1}}{const headers={};event.headers&&Object.entries(event.headers).forEach(([key,value])=>{value&&(headers[key.toLowerCase()]=value)});let queryString=null;if(event.queryStringParameters){const params=new URLSearchParams;Object.entries(event.queryStringParameters).forEach(([key,value])=>{value&¶ms.append(key,value)}),queryString=params.toString()||null}return{method:event.httpMethod,body:event.body,queryString:queryString,headers:headers,isBase64Encoded:event.isBase64Encoded||!1}}}(event);const path=function(event){return isAPIGatewayV2(event)?event.rawPath:event.path}(event);if(settings.healthPath&&path===settings.healthPath)return createResponse(200,{status:"ok",timestamp:Date.now(),source:"lambda",requestId:requestId},corsHeaders,requestId);if("OPTIONS"===parsed.method)return createResponse(204,"",corsHeaders,requestId);if(await setIngest(event),"GET"===parsed.method){if(!settings.enablePixelTracking)return createResponse(405,{success:!1,error:"GET not allowed",requestId:requestId},corsHeaders,requestId);if(parsed.queryString){const parsedData=(0,import_core13.requestToData)(parsed.queryString);parsedData&&"object"==typeof parsedData&&await envPush(parsedData)}return function(headers={},requestId){const responseHeaders={"Content-Type":"image/gif","Cache-Control":"no-cache, no-store, must-revalidate",...headers};return requestId&&(responseHeaders["X-Request-ID"]=requestId),{statusCode:200,headers:responseHeaders,body:"R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7",isBase64Encoded:!0}}(corsHeaders,requestId)}if("POST"===parsed.method){if(!parsed.body)return createResponse(400,{success:!1,error:"Request body is required",requestId:requestId},corsHeaders,requestId);const body=function(body,isBase64Encoded){if(!body||"string"!=typeof body)return body;try{const decoded=isBase64Encoded?Buffer.from(body,"base64").toString("utf8"):body;return JSON.parse(decoded)}catch{return body}}(parsed.body,parsed.isBase64Encoded);if(!body||"object"!=typeof body)return await envPush({}),createResponse(200,{success:!0,requestId:requestId},corsHeaders,requestId);if(function(body){return"object"==typeof body&&null!==body&&"event"in body&&"string"==typeof body.event}(body)){const result=await async function(eventReq,push2,logger,requestId){try{const result=await push2({name:eventReq.event,data:eventReq.data||{},context:eventReq.context,user:eventReq.user,globals:eventReq.globals,consent:eventReq.consent});return{id:result?.event?.id}}catch(error){return logger?.error("Event processing failed",{error:error,eventName:eventReq.event,requestId:requestId}),{error:error instanceof Error?error.message:"Unknown error"}}}(body,envPush,env.logger,requestId);return result.error?createResponse(400,{success:!1,error:result.error,requestId:requestId},corsHeaders,requestId):createResponse(200,{success:!0,id:result.id,requestId:requestId},corsHeaders,requestId)}return createResponse(400,{success:!1,error:"Invalid request format",requestId:requestId},corsHeaders,requestId)}return createResponse(405,{success:!1,error:"Method not allowed",requestId:requestId},corsHeaders,requestId)}catch(error){return env.logger?.error("Lambda handler error",{error:error,requestId:requestId,method:parsed?.method}),createResponse(500,{success:!1,error:error instanceof Error?error.message:"Internal server error",requestId:requestId},{},requestId)}}}},lambda_default=sourceLambda;//# sourceMappingURL=index.js.map
|
package/dist/index.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var __defProp=Object.defineProperty,__export=(target,all)=>{for(var name in all)__defProp(target,name,{get:all[name],enumerable:!0})};import{requestToData}from"@walkeros/core";function isAPIGatewayV2(event){return"version"in event&&"2.0"===event.version}function createResponse(statusCode,body,headers={},requestId){const responseHeaders={"Content-Type":"object"==typeof body?"application/json":"text/plain",...headers};return requestId&&(responseHeaders["X-Request-ID"]=requestId),{statusCode:statusCode,headers:responseHeaders,body:"object"==typeof body?JSON.stringify(body):String(body),isBase64Encoded:!1}}var types_exports={},examples_exports={};__export(examples_exports,{createTrigger:()=>createTrigger,env:()=>env_exports,step:()=>step_exports,trigger:()=>trigger});var env_exports={};__export(env_exports,{push:()=>push});var createMockElbFn=()=>()=>Promise.resolve({ok:!0}),noopFn=()=>{},noopLogger={error:noopFn,warn:noopFn,info:noopFn,debug:noopFn,throw:message=>{throw"string"==typeof message?new Error(message):message},json:noopFn,scope:()=>noopLogger},push={get push(){return createMockElbFn()},get command(){return createMockElbFn()},get elb(){return createMockElbFn()},logger:noopLogger},step_exports={};__export(step_exports,{apiGatewayV1Post:()=>apiGatewayV1Post,lambdaGet:()=>lambdaGet,lambdaPost:()=>lambdaPost});var lambdaPost={title:"Lambda POST",description:"An API Gateway v2 HTTP POST with a JSON body is converted into a walker elb event.",trigger:{type:"POST"},in:{version:"2.0",requestContext:{http:{method:"POST",path:"/collect"},requestId:"req-123"},body:JSON.stringify({event:"page view",data:{title:"Home"}}),isBase64Encoded:!1},out:[["elb",{name:"page view",data:{title:"Home"}}]]},apiGatewayV1Post={title:"API Gateway v1 POST",description:"A REST API Gateway v1 POST request with a JSON body is converted into a walker elb event.",trigger:{type:"POST"},in:{httpMethod:"POST",path:"/collect",requestContext:{requestId:"req-789",identity:{sourceIp:"203.0.113.42"}},queryStringParameters:null,body:JSON.stringify({event:"page view",data:{title:"Home"}}),isBase64Encoded:!1},out:[["elb",{name:"page view",data:{title:"Home"}}]]},lambdaGet={title:"Lambda GET",description:"An API Gateway v2 HTTP GET with query parameters is parsed into an elb event payload.",trigger:{type:"GET"},in:{version:"2.0",requestContext:{http:{method:"GET",path:"/collect"},requestId:"req-456"},rawQueryString:"e=page+view&d=%7B%22title%22%3A%22Home%22%7D",isBase64Encoded:!1},out:[["elb",{e:"page view",d:'{"title":"Home"}'}]]};import{assign as o}from"@walkeros/core";import{assign as r,createLogger as a}from"@walkeros/core";import{assign as i,buildCacheContext as c,clone as u,compileCache as f,checkCache as l,storeCache as d,compileNext as g,createIngest as m,debounce as p,getId as h,getGrantedConsent as y,isDefined as b,isFunction as v,isObject as k,isRouteArray as w,processEventMapping as C,resolveNext as O,tryCatchAsync as j,useHooks as x}from"@walkeros/core";import{isArray as A}from"@walkeros/core";import{tryCatch as q,tryCatchAsync as S}from"@walkeros/core";import{createIngest as D,getMappingValue as $,tryCatchAsync as _,compileNext as I,resolveNext as P,isRouteArray as E,compileCache as R,checkCache as M,storeCache as H,applyUpdate as T,buildCacheContext as G}from"@walkeros/core";import{createIngest as N,isObject as U,tryCatchAsync as B,useHooks as F,compileNext as W,resolveNext as z,isRouteArray as L,compileCache as V,checkCache as J,storeCache as K,buildCacheContext as Q}from"@walkeros/core";import{assign as we,getSpanId as Ce,isFunction as Oe,isString as je}from"@walkeros/core";import{isObject as xe}from"@walkeros/core";import{createIngest as $e,getGrantedConsent as _e,processEventMapping as Ie,tryCatchAsync as Pe,useHooks as Ee}from"@walkeros/core";import{useHooks as Me,tryCatchAsync as He}from"@walkeros/core";import{useHooks as Te}from"@walkeros/core";var t_Commands={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",Session:"session",Shutdown:"shutdown",User:"user",Walker:"walker"};function X(e,n2){return e.storeId&&n2.stores[e.storeId]?n2.stores[e.storeId]:n2.stores.__cache}function Y(e){const n2={};for(const[t2,o2]of Object.entries(e)){const e2=o2.config?.next;e2&&!L(e2)?n2[t2]={next:e2}:n2[t2]={}}return n2}function Z(e,n2){const t2=e.config||{},o2=e[n2];return void 0!==o2?{config:{...t2,[n2]:o2},chainValue:o2}:{config:t2,chainValue:void 0}}function ee(e,n2={}){if(!e)return[];if(Array.isArray(e))return e;const t2=[],o2=new Set;let s2=e;for(;s2&&n2[s2]&&!o2.has(s2);){o2.add(s2),t2.push(s2);const e2=n2[s2].next;if(Array.isArray(e2)){t2.push(...e2);break}s2=e2}return t2}async function ne(e,n2,t2){if(n2.init&&!n2.config.init){const o2=n2.type||"unknown",s2=e.logger.scope(`transformer:${o2}`),r2={collector:e,logger:s2,id:t2,ingest:N(t2),config:n2.config,env:se(n2.config.env)};s2.debug("init");const a2=await F(n2.init,"TransformerInit",e.hooks,e.logger)(r2);if(!1===a2)return!1;n2.config={...a2||n2.config,env:a2?.env||n2.config.env,init:!0},s2.debug("init done")}return!0}async function te(e,n2,t2,o2,s2,r2){const a2=n2.type||"unknown",i2=e.logger.scope(`transformer:${a2}`),c2={collector:e,logger:i2,id:t2,ingest:s2,config:n2.config,env:{...se(n2.config.env),...r2?{respond:r2}:{}}};i2.debug("push",{event:o2.name});const u2=await F(n2.push,"TransformerPush",e.hooks,e.logger)(o2,c2);return i2.debug("push done"),u2}async function oe(e,n2,t2,o2,s2,r2,a2){a2&&s2?._meta&&(s2._meta.chainPath=a2);let i2=o2,c2=r2;for(const o3 of t2){const r3=n2[o3];if(!r3){e.logger.warn(`Transformer not found: ${o3}`);continue}if(s2&&s2._meta&&s2._meta.path.length>256)return e.logger.error(`Max path length exceeded at ${o3}`),{event:null,respond:c2};if(s2&&s2._meta&&(s2._meta.hops++,s2._meta.path.push(o3)),!await B(ne)(e,r3,o3))return e.logger.error(`Transformer init failed: ${o3}`),{event:null,respond:c2};if(a2&&void 0!==r3.config?.chainMocks?.[a2]){const n3=r3.config.chainMocks[a2];e.logger.scope(`transformer:${r3.type||"unknown"}`).debug("chainMock",{chain:a2}),i2=n3;continue}if(void 0!==r3.config?.mock){e.logger.scope(`transformer:${r3.type||"unknown"}`).debug("mock"),i2=r3.config.mock;continue}if(r3.config?.disabled)continue;const u2=r3.config?.cache,f2=u2?V(u2):void 0,l2=f2?X(f2,e):void 0;let d2;if(f2&&l2){const e2=Q(s2,i2),n3=J(f2,l2,e2,`t:${o3}`);if("HIT"===n3?.status&&n3.value){if(i2=n3.value,f2.full)return{event:i2,respond:c2};continue}"MISS"===n3?.status&&(d2={key:n3.key,ttl:n3.rule.ttl})}const g2=r3.config.before;if(g2){const t3=ee("string"==typeof g2||Array.isArray(g2)&&!L(g2)?g2:z(W(g2),Q(s2,i2))||void 0,Y(n2));if(t3.length>0){const o4=await oe(e,n2,t3,i2,s2,c2,a2);if(null===o4.event)return{event:null,respond:o4.respond??c2};o4.respond&&(c2=o4.respond),i2=Array.isArray(o4.event)?o4.event[0]:o4.event}}const m2=await B(te,n3=>(e.logger.scope(`transformer:${r3.type||"unknown"}`).error("Push failed",{error:n3}),!1))(e,r3,o3,i2,s2,c2);if(!1===m2)return{event:null,respond:c2};if(Array.isArray(m2)){const r4=t2.slice(t2.indexOf(o3)+1),u3=await Promise.all(m2.map(async t3=>{const o4=t3.event||i2,u4=s2?{...s2,_meta:{...s2._meta,path:[...s2._meta.path]}}:N("unknown");if(t3.next){let s3=t3.next;if(L(t3.next)){const e2=W(t3.next);s3=z(e2,Q(u4,o4))}if(s3){const t4=ee(s3,Y(n2));if(t4.length>0)return oe(e,n2,t4,o4,u4,c2,a2)}return{event:o4,respond:c2}}return r4.length>0?oe(e,n2,r4,o4,u4,c2,a2):{event:o4,respond:c2}}));let f3=c2;const l3=[];for(const e2 of u3.flat())if(null!==e2)if(e2&&"object"==typeof e2&&"event"in e2){const n3=e2;if(n3.respond&&(f3=n3.respond),null===n3.event)continue;Array.isArray(n3.event)?l3.push(...n3.event):l3.push(n3.event)}else l3.push(e2);return 0===l3.length?{event:null,respond:f3}:1===l3.length?{event:l3[0],respond:f3}:{event:l3,respond:f3}}if(m2&&"object"==typeof m2){const{event:t3,respond:o4,next:r4}=m2;if(o4&&(c2=o4),r4){let o5=r4;if(L(r4)){const e2=W(r4);if(o5=z(e2,Q(s2,i2)),!o5){t3&&(i2=t3);continue}}const u3=ee(o5,Y(n2));return u3.length>0?oe(e,n2,u3,t3||i2,s2,c2,a2):(e.logger.warn(`Branch target not found: ${JSON.stringify(r4)}`),{event:null,respond:c2})}t3&&(i2=t3)}if(d2&&l2&&K(l2,d2.key,i2,d2.ttl),(!m2||"object"==typeof m2&&!m2.next)&&r3.config.next&&L(r3.config.next)){const t3=r3.config.next,o4=W(t3),u3=z(o4,Q(s2,i2));if(u3){const t4=ee(u3,Y(n2));if(t4.length>0)return oe(e,n2,t4,i2,s2,c2,a2)}return{event:i2,respond:c2}}}return{event:i2,respond:c2}}function se(e){return e&&U(e)?e:{}}async function re(e,n2,t2){const{code:o2,config:s2={},env:r2={},primary:a2,next:i2,before:c2,cache:u2}=t2;let f2,l2=D(n2);const d2=u2?R({...u2,full:u2.full??!0}):void 0,g2=I(i2),m2=Array.isArray(i2)&&E(i2)||!g2?void 0:ee(P(g2),Y(e.transformers)),p2=I(c2),h2=Array.isArray(c2)&&E(c2)||!p2?void 0:ee(P(p2),Y(e.transformers)),y2=e.logger.scope("source").scope(n2),b2={push:async(t3,o3={})=>{let r3,a3=t3;const i3=h2??(p2?ee(P(p2,G(l2)),Y(e.transformers)):[]);if(i3.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const t4=await oe(e,e.transformers,i3,a3,l2,f2,`source.${n2}.before`);if(null===t4.event)return{ok:!0};t4.respond&&(f2=t4.respond),a3=Array.isArray(t4.event)?t4.event[0]:t4.event}if(d2){const t4=X(d2,e);if(t4){const o4=G(l2),s3=M(d2,t4,o4,`s:${n2}`);if(s3){if("HIT"===s3.status&&void 0!==s3.value&&d2.full){let n3=s3.value;return s3.rule.update&&(n3=await T(n3,s3.rule.update,{...o4,cache:{status:"HIT"}},e)),f2?.(n3),{ok:!0}}if("MISS"===s3.status&&d2.full&&f2){const n3=f2,a4=s3.rule.update,i4={...o4,cache:{status:"MISS"}},c4=s3.key,u4=s3.rule.ttl;f2=o5=>{H(t4,c4,o5,u4),a4?r3=(async()=>{const t5=await T(o5,a4,i4,e);n3(t5)})():n3(o5)}}"MISS"!==s3.status||d2.full||H(t4,s3.key,!0,s3.rule.ttl)}}}const c3=m2??(g2?ee(P(g2,G(l2)),Y(e.transformers)):[]),u3=await e.push(a3,{...o3,id:n2,ingest:l2,respond:f2,mapping:s2,preChain:c3});return r3&&await r3,u3},command:e.command,sources:e.sources,elb:e.sources.elb.push,logger:y2,...r2},v2={collector:e,logger:y2,id:n2,config:s2,env:b2,setIngest:async t3=>{if(!s2.ingest)return void(l2=D(n2));const o3=await $(t3,s2.ingest,{collector:e}),r3=D(n2);l2={...r3,...o3,_meta:r3._meta}},setRespond:e2=>{f2=e2}},k2=await _(o2)(v2);if(!k2)return;const w2=k2.type||"unknown",C2=e.logger.scope(w2).scope(n2);return b2.logger=C2,a2&&(k2.config={...k2.config,primary:a2}),k2}function ie(e,n2){return{collector:e,logger:e.logger.scope("on").scope(String(n2))}}function ue(e,n2,t2,o2,s2){if(!n2.on)return;const r2=n2.type||"unknown",a2=e.logger.scope(r2).scope("on").scope(o2),i2={collector:e,logger:a2,id:t2,config:n2.config,data:s2,env:ke(n2.env,n2.config.env)};q(n2.on)(o2,i2)}function fe(e,n2,o2,s2){let r2;switch(n2){case t_Commands.Consent:r2=s2||e.consent;break;case t_Commands.Session:r2=e.session;break;case t_Commands.User:r2=s2||e.user;break;case t_Commands.Custom:r2=s2||e.custom;break;case t_Commands.Globals:r2=s2||e.globals;break;case t_Commands.Config:r2=s2||e.config;break;case t_Commands.Ready:case t_Commands.Run:default:r2=void 0}if(o2.length)switch(n2){case t_Commands.Consent:!function(e2,n3,o3){const s3=o3||e2.consent,r3=ie(e2,t_Commands.Consent);n3.forEach(e3=>{Object.keys(s3).filter(n4=>n4 in e3).forEach(n4=>{q(e3[n4])(s3,r3)})})}(e,o2,s2);break;case t_Commands.Ready:!function(e2,n3){if(!e2.allowed)return;const o3=ie(e2,t_Commands.Ready);n3.forEach(e3=>{q(e3)(void 0,o3)})}(e,o2);break;case t_Commands.Run:!function(e2,n3){if(!e2.allowed)return;const o3=ie(e2,t_Commands.Run);n3.forEach(e3=>{q(e3)(void 0,o3)})}(e,o2);break;case t_Commands.Session:!function(e2,n3){if(!e2.session)return;const o3=ie(e2,t_Commands.Session);n3.forEach(n4=>{q(n4)(e2.session,o3)})}(e,o2);break;default:{const t2=ie(e,n2);o2.forEach(e2=>{"function"==typeof e2&&q(e2)(r2,t2)});break}}}function de(e,n2,t2,o2){if(!e)return[];if(n2){const e2=O(n2,c(o2));return e2?ee(e2,Y(t2)):[]}return ee(e,Y(t2))}async function ge(e,n2,t2){const{code:o2,config:s2={},env:r2={},before:a2,next:i2,cache:c2}=n2;if(!v(o2.push))return ye({ok:!1,failed:{invalid:{type:"invalid",error:"Destination code must have a push method"}}});const u2=t2||s2||{init:!1};let f2=a2?{...u2,before:a2}:{...u2};i2&&(f2={...f2,next:i2}),c2&&(f2={...f2,cache:c2});const l2={...o2,config:f2,env:ke(o2.env,r2)};let d2=l2.config.id;if(!d2)do{d2=h(5,"abcdefghijklmnopqrstuvwxyz")}while(e.destinations[d2]);return e.destinations[d2]=l2,!1!==l2.config.queue&&(l2.queuePush=[...e.queue]),me(e,void 0,{},{[d2]:l2})}async function me(e,n2,t2={},o2){const{allowed:s2,consent:r2,globals:a2,user:p2}=e;if(!s2)return ye({ok:!1});n2&&(e.queue.push(n2),e.status.in++),o2||(o2=e.destinations);const h2=await Promise.all(Object.entries(o2||{}).map(async([o3,s3])=>{if(s3.config.disabled)return{id:o3,destination:s3,skipped:!0};let h3=(s3.queuePush||[]).map(e2=>({...e2,consent:r2}));s3.queuePush=[],n2&&h3.push(u(n2));const b3=t2.ingest?{...t2.ingest,_meta:{...t2.ingest._meta,path:[...t2.ingest._meta.path]}}:m("unknown");if(!h3.length&&!s3.queueOn?.length)return{id:o3,destination:s3,skipped:!0};if(!h3.length&&s3.queueOn?.length){const n3=await j(pe)(e,s3,o3);return{id:o3,destination:s3,skipped:!n3}}const v3=[],k3=h3.filter(e2=>{const n3=y(s3.config.consent,r2,e2.consent);return!n3||(e2.consent=n3,v3.push(e2),!1)});if(s3.queuePush.push(...k3),!v3.length)return{id:o3,destination:s3,queue:h3};if(!await j(pe)(e,s3,o3))return{id:o3,destination:s3,queue:h3};let C2,O2;s3.dlq||(s3.dlq=[]);const x2=s3.config.before,A2=de(x2,x2&&w(x2)?g(x2):void 0,e.transformers,b3),q2=s3.config.next,S2=q2&&w(q2)?g(q2):void 0,D2=s3.config?.cache,$2=D2?f(D2):void 0,_2=$2?X($2,e):void 0;let I2=0;return await Promise.all(v3.map(async n3=>{let r3;if(n3.globals=i(a2,n3.globals),n3.user=i(p2,n3.user),$2?.full&&_2){const e2=c(b3,n3),t3=l($2,_2,e2,`d:${o3}`);if("HIT"===t3?.status)return n3;"MISS"===t3?.status&&(r3={key:t3.key,ttl:t3.rule.ttl})}let u2=n3,f2=t2.respond;if(A2.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const s4=await oe(e,e.transformers,A2,n3,b3,t2.respond,`destination.${o3}.before`);if(null===s4.event)return n3;s4.respond&&(f2=s4.respond),u2=Array.isArray(s4.event)?s4.event[0]:s4.event}if($2&&!$2.full&&_2){const e2=c(b3,u2),t3=l($2,_2,e2,`d:${o3}`);if("HIT"===t3?.status)return n3;"MISS"===t3?.status&&(r3={key:t3.key,ttl:t3.rule.ttl})}const g2=Date.now();let m2=!1;const h4=await j(he,n4=>{const t3=s3.type||"unknown";e.logger.scope(t3).error("Push failed",{error:n4,event:u2.name}),C2=n4,m2=!0,s3.dlq.push([u2,n4])})(e,s3,o3,u2,b3,f2);if(I2+=Date.now()-g2,r3&&_2&&void 0===s3.config.mock&&d(_2,r3.key,h4??!0,r3.ttl),void 0!==h4&&(O2=h4),!m2&&q2){void 0!==h4&&(b3._response=h4);const n4=de(q2,S2,e.transformers,b3);if(n4.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const t3=await oe(e,e.transformers,n4,u2,b3,f2,`destination.${o3}.next`);t3.respond&&(f2=t3.respond)}}return n3})),{id:o3,destination:s3,error:C2,response:O2,totalDuration:I2}})),b2={},v2={},k2={};for(const n3 of h2){if(n3.skipped)continue;const t3={type:n3.destination.type||"unknown",data:n3.response};e.status.destinations[n3.id]||(e.status.destinations[n3.id]={count:0,failed:0,duration:0});const o3=e.status.destinations[n3.id],s3=Date.now();n3.error?(t3.error=n3.error,k2[n3.id]=t3,o3.failed++,o3.lastAt=s3,o3.duration+=n3.totalDuration||0,e.status.failed++):n3.queue&&n3.queue.length?v2[n3.id]=t3:(b2[n3.id]=t3,o3.count++,o3.lastAt=s3,o3.duration+=n3.totalDuration||0,e.status.out++)}return ye({event:n2,...Object.keys(b2).length&&{done:b2},...Object.keys(v2).length&&{queued:v2},...Object.keys(k2).length&&{failed:k2}})}async function pe(e,n2,t2){if(n2.init&&!n2.config.init){const o2=n2.type||"unknown",s2=e.logger.scope(o2),r2={collector:e,logger:s2,id:t2,config:n2.config,env:ke(n2.env,n2.config.env)};s2.debug("init");const a2=await x(n2.init,"DestinationInit",e.hooks,e.logger)(r2);if(!1===a2)return a2;if(n2.config={...a2||n2.config,init:!0},n2.queueOn?.length){const o3=n2.queueOn;n2.queueOn=[];for(const{type:s3,data:r3}of o3)ue(e,n2,t2,s3,r3)}s2.debug("init done")}return!0}async function he(e,n2,t2,o2,s2,r2){const{config:a2}=n2,i2=await C(o2,a2,e);if(i2.ignore)return!1;const c2=n2.type||"unknown",u2=e.logger.scope(c2),f2={collector:e,logger:u2,id:t2,config:a2,data:i2.data,rule:i2.mapping,ingest:s2,env:{...ke(n2.env,a2.env),...r2?{respond:r2}:{}}};if(void 0!==a2.mock)return u2.debug("mock",{event:i2.event.name}),a2.mock;const l2=i2.mapping,d2=i2.mappingKey||"* *";if(!l2?.batch||!n2.pushBatch||void 0!==a2.mock){u2.debug("push",{event:i2.event.name});const t3=await x(n2.push,"DestinationPush",e.hooks,e.logger)(i2.event,f2);return u2.debug("push done"),t3}{if(n2.batches=n2.batches||{},!n2.batches[d2]){const o4={key:d2,events:[],data:[]};n2.batches[d2]={batched:o4,batchFn:p(()=>{const o5=n2.batches[d2].batched,i3={collector:e,logger:u2,id:t2,config:a2,data:void 0,rule:l2,ingest:s2,env:{...ke(n2.env,a2.env),...r2?{respond:r2}:{}}};u2.debug("push batch",{events:o5.events.length}),x(n2.pushBatch,"DestinationPushBatch",e.hooks,e.logger)(o5,i3),u2.debug("push batch done"),o5.events=[],o5.data=[]},l2.batch)}}const o3=n2.batches[d2];o3.batched.events.push(i2.event),b(i2.data)&&o3.batched.data.push(i2.data),o3.batchFn()}return!0}function ye(e){return{ok:!e?.failed,...e}}function be(e){const{code:n2,config:t2={},env:o2={},cache:s2}=e,{config:r2}=Z(e,"before"),{config:a2}=Z({...e,config:r2},"next"),i2={...n2.config,...t2,...a2};s2&&(i2.cache=s2);const c2=ke(n2.env,o2);return{...n2,config:i2,env:c2}}function ke(e,n2){return e||n2?n2?e&&k(e)&&k(n2)?{...e,...n2}:n2:e:{}}async function Ae(e,n2,t2){const o2=Object.entries(e).map(async([e2,o3])=>{const s2=o3.destroy;if(!s2)return;const r2=o3.type||"unknown",a2=t2.scope(r2),i2={id:e2,config:o3.config,env:o3.env??{},logger:a2};try{await Promise.race([s2(i2),new Promise((t3,o4)=>setTimeout(()=>o4(new Error(`${n2} '${e2}' destroy timed out`)),5e3))])}catch(t3){a2.error(`${n2} '${e2}' destroy failed: ${t3}`)}});await Promise.allSettled(o2)}async function qe(e,n2,o2,r2){let a2,i2,c2=!1;switch(n2){case t_Commands.Config:xe(o2)&&(we(e.config,o2,{shallow:!1}),i2=o2,c2=!0);break;case t_Commands.Consent:if(xe(o2)){const{update:n3}=function(e,n2){const t2={};return Object.entries(n2).forEach(([e2,n3])=>{t2[e2]=!!n3}),e.consent=o(e.consent,t2),{update:t2}}(e,o2);i2=n3,c2=!0}break;case t_Commands.Custom:xe(o2)&&(e.custom=we(e.custom,o2),i2=o2,c2=!0);break;case t_Commands.Destination:xe(o2)&&("code"in o2&&xe(o2.code)?a2=await ge(e,o2,r2):Oe(o2.push)&&(a2=await ge(e,{code:o2},r2)));break;case t_Commands.Globals:xe(o2)&&(e.globals=we(e.globals,o2),i2=o2,c2=!0);break;case t_Commands.On:je(o2)&&await async function(e,n2,t2){const o2=e.on,s2=o2[n2]||[],r2=A(t2)?t2:[t2];r2.forEach(e2=>{s2.push(e2)}),o2[n2]=s2,fe(e,n2,r2)}(e,o2,r2);break;case t_Commands.Ready:c2=!0;break;case t_Commands.Run:a2=await async function(e,n2){return e.allowed=!0,e.timing=Date.now(),n2&&(n2.consent&&(e.consent=we(e.consent,n2.consent)),n2.user&&(e.user=we(e.user,n2.user)),n2.globals&&(e.globals=we(e.config.globalsStatic||{},n2.globals)),n2.custom&&(e.custom=we(e.custom,n2.custom))),Object.values(e.destinations).forEach(e2=>{e2.queuePush=[]}),e.queue=[],e.round++,await me(e)}(e,o2),c2=!0;break;case t_Commands.Session:c2=!0;break;case t_Commands.Shutdown:await async function(e2){const n3=e2.logger;await Ae(e2.sources,"source",n3),await Ae(e2.destinations,"destination",n3),await Ae(e2.transformers,"transformer",n3),await Ae(e2.stores,"store",n3)}(e);break;case t_Commands.User:xe(o2)&&(we(e.user,o2,{shallow:!1}),i2=o2,c2=!0)}return c2&&(await async function(e,n2,o2,s2){let r2,a2=o2||[];switch(o2||(a2=e.on[n2]||[]),n2){case t_Commands.Consent:r2=s2||e.consent;break;case t_Commands.Session:r2=e.session;break;case t_Commands.User:r2=s2||e.user;break;case t_Commands.Custom:r2=s2||e.custom;break;case t_Commands.Globals:r2=s2||e.globals;break;case t_Commands.Config:r2=s2||e.config;break;case t_Commands.Ready:case t_Commands.Run:default:r2=void 0}let i2=!1;for(const t2 of Object.values(e.sources))t2.on&&!1===await S(t2.on)(n2,r2)&&(i2=!0);return Object.entries(e.destinations).forEach(([t2,o3])=>{if(o3.on){if(!o3.config.init)return o3.queueOn=o3.queueOn||[],void o3.queueOn.push({type:n2,data:r2});ue(e,o3,t2,n2,r2)}}),(Object.keys(e.pending.sources).length>0||Object.keys(e.pending.destinations).length>0)&&await async function(e2,n3){for(const[t2,o3]of Object.entries(e2.pending.sources)){if(!e2.pending.sources[t2]||e2.sources[t2])continue;const s3=o3.config?.require;if(!s3)continue;const r3=s3.indexOf(n3);if(-1===r3)continue;if(s3.splice(r3,1),s3.length>0)continue;delete e2.pending.sources[t2];const a3=await re(e2,t2,o3);a3&&(e2.sources[t2]=a3)}for(const[t2,o3]of Object.entries(e2.pending.destinations)){if(!e2.pending.destinations[t2]||e2.destinations[t2])continue;const s3=o3.config?.require;if(!s3)continue;const r3=s3.indexOf(n3);if(-1===r3)continue;if(s3.splice(r3,1),s3.length>0)continue;delete e2.pending.destinations[t2];const a3=be(o3);!1!==a3.config.queue&&(a3.queuePush=[...e2.queue]),e2.destinations[t2]=a3}}(e,n2),fe(e,n2,a2,s2),!i2}(e,n2,void 0,i2),a2=await me(e)),a2||ye({ok:!0})}function Se(e,n2){if(!n2.name)throw new Error("Event name is required");const[t2,o2]=n2.name.split(" ");if(!t2||!o2)throw new Error("Event name is invalid");const{timestamp:s2=Date.now(),name:r2=`${t2} ${o2}`,data:a2={},context:i2={},globals:c2=e.globals,custom:u2={},user:f2=e.user,nested:l2=[],consent:d2=e.consent,id:g2=Ce(),trigger:m2="",entity:p2=t2,action:h2=o2,timing:y2=0,source:b2={type:"collector",schema:"4"}}=n2;return{name:r2,data:a2,context:i2,globals:c2,custom:u2,user:f2,nested:l2,consent:d2,id:g2,trigger:m2,entity:p2,action:h2,timestamp:s2,timing:y2,source:b2}}async function Ge(e){const n2=r({globalsStatic:{},sessionStatic:{},run:!0},e,{merge:!1,extend:!1}),t2={level:e.logger?.level,handler:e.logger?.handler},o2=a(t2),s2={...n2.globalsStatic,...e.globals},i2={allowed:!1,config:n2,consent:e.consent||{},custom:e.custom||{},destinations:{},transformers:{},stores:{},globals:s2,hooks:e.hooks||{},logger:o2,on:{},queue:[],round:0,session:void 0,status:{startedAt:Date.now(),in:0,out:0,failed:0,sources:{},destinations:{}},timing:Date.now(),user:e.user||{},sources:{},pending:{sources:{},destinations:{}},push:void 0,command:void 0};var e2,n3;i2.push=function(e,n2){return Ee(async(t2,o2={})=>await Pe(async()=>{const s2=Date.now(),{id:r2,ingest:a2,respond:i2,mapping:c2,preChain:u2,include:f2,exclude:l2}=o2;let d2=i2,g2=t2;const m2=f2||l2?function(e2,n3,t3){let o3=e2;return n3&&(o3=Object.fromEntries(Object.entries(o3).filter(([e3])=>n3.includes(e3)))),t3&&(o3=Object.fromEntries(Object.entries(o3).filter(([e3])=>!t3.includes(e3)))),o3}(e.destinations,f2,l2):void 0,p2=a2??$e(r2||"unknown");if(c2){const n3=await Ie(g2,c2,e);if(n3.ignore)return ye({ok:!0});if(c2.consent&&!_e(c2.consent,e.consent,n3.event.consent))return ye({ok:!0});g2=n3.event}if(u2?.length&&e.transformers&&Object.keys(e.transformers).length>0){const t3=await oe(e,e.transformers,u2,g2,p2,d2,r2?`source.${r2}.next`:void 0);if(null===t3.event)return ye({ok:!0});if(t3.respond&&(d2=t3.respond),Array.isArray(t3.event)){const o3=await Promise.all(t3.event.map(async t4=>{const o4=n2(t4),s3=Se(e,o4);return me(e,s3,{id:r2,ingest:p2,respond:d2},m2)}));if(r2){e.status.sources[r2]||(e.status.sources[r2]={count:0,duration:0});const n3=e.status.sources[r2];n3.count+=t3.event.length,n3.lastAt=Date.now(),n3.duration+=Date.now()-s2}return o3[0]??ye({ok:!0})}g2=t3.event}const h2=n2(g2),y2=Se(e,h2),b2=await me(e,y2,{id:r2,ingest:p2,respond:d2},m2);if(r2){e.status.sources[r2]||(e.status.sources[r2]={count:0,duration:0});const n3=e.status.sources[r2];n3.count++,n3.lastAt=Date.now(),n3.duration+=Date.now()-s2}return b2},()=>ye({ok:!1}))(),"Push",e.hooks,e.logger)}(i2,e2=>({timing:Math.round((Date.now()-i2.timing)/10)/100,source:{type:"collector",schema:"4",version:"4.0.0-next-1777882869103"},...e2})),i2.command=(n3=qe,Me(async(t3,o3,s3)=>await He(async()=>await n3(e2,t3,o3,s3),()=>ye({ok:!1}))(),"Command",(e2=i2).hooks,e2.logger));const c2=e.stores||{};if(i2.stores=await async function(e2,n3={}){const t3={};for(const[o3,s3]of Object.entries(n3)){const{code:n4,config:r2={},env:a2={}}=s3,i3=e2.logger.scope("store").scope(o3),c3={collector:e2,logger:i3,id:o3,config:r2,env:a2},u2=await n4(c3),f2=u2.get,l2=u2.set,d2=u2.delete;u2.get=Te(f2,"StoreGet",e2.hooks,e2.logger),u2.set=Te(l2,"StoreSet",e2.hooks,e2.logger),u2.delete=Te(d2,"StoreDelete",e2.hooks,e2.logger),t3[o3]=u2}return t3}(i2,c2),function(e2,n3,t3){const o3=new Map;for(const[t4,s4]of Object.entries(e2))n3[t4]&&o3.set(s4,n3[t4]);if(0!==o3.size)for(const e3 of[t3.transformers,t3.destinations,t3.sources])if(e3)for(const n4 of Object.values(e3))s3(n4.env);function s3(e3){if(e3)for(const[n4,t4]of Object.entries(e3))if("object"==typeof t4&&null!==t4){const s4=o3.get(t4);s4&&(e3[n4]=s4)}}}(c2,i2.stores,e),!i2.stores.__cache){const e2=new Map;i2.stores.__cache={type:"memory",config:{},get:n3=>{const t3=e2.get(n3);if(t3){if(!(t3.expires&&Date.now()>t3.expires))return t3.value;e2.delete(n3)}},set:(n3,t3,o3)=>{e2.set(n3,{value:t3,expires:o3?Date.now()+o3:void 0})},delete:n3=>{e2.delete(n3)}}}return i2.destinations=await async function(e,n2={}){const t2={};for(const[o2,s2]of Object.entries(n2))s2.config?.require?.length?e.pending.destinations[o2]=s2:t2[o2]=be(s2);return t2}(i2,e.destinations||{}),i2.transformers=await async function(e2,n3={}){const t3={};for(const[o3,s3]of Object.entries(n3)){const{code:n4,env:r2={}}=s3,{config:a2}=Z(s3,"before"),{config:i3}=Z({...s3,config:a2},"next"),c3=Object.keys(r2).length>0?{...i3,env:r2}:i3,{cache:u2}=s3,f2=u2?{...c3,cache:u2}:c3,l2=e2.logger.scope("transformer").scope(o3),d2={collector:e2,logger:l2,id:o3,ingest:N(o3),config:f2,env:r2},g2=await n4(d2);t3[o3]=g2}return t3}(i2,e.transformers||{}),i2}async function Ne(e){e=e||{};const n2=await Ge(e),t2=(o2=n2,{type:"elb",config:{},push:async(e2,n3,t3,s3,r3,a3)=>{if("string"==typeof e2&&e2.startsWith("walker ")){const s4=e2.replace("walker ","");return o2.command(s4,n3,t3)}let i3;if("string"==typeof e2)i3={name:e2},n3&&"object"==typeof n3&&!Array.isArray(n3)&&(i3.data=n3);else{if(!e2||"object"!=typeof e2)return ye({ok:!1});i3=e2,n3&&"object"==typeof n3&&!Array.isArray(n3)&&(i3.data={...i3.data||{},...n3})}return s3&&"object"==typeof s3&&(i3.context=s3),r3&&Array.isArray(r3)&&(i3.nested=r3),a3&&"object"==typeof a3&&(i3.custom=a3),o2.push(i3)}});var o2;n2.sources.elb=t2;const s2=await async function(e,n2={}){const t2={};for(const[o2,s2]of Object.entries(n2)){const{config:n3={}}=s2;if(n3.require&&n3.require.length>0){e.pending.sources[o2]=s2;continue}const r2=await re(e,o2,s2);r2&&(t2[o2]=r2)}return t2}(n2,e.sources||{});Object.assign(n2.sources,s2);const{consent:r2,user:a2,globals:i2,custom:c2}=e;r2&&await n2.command("consent",r2),a2&&await n2.command("user",a2),i2&&Object.assign(n2.globals,i2),c2&&Object.assign(n2.custom,c2),n2.config.run&&await n2.command("run");let u2=t2.push;const f2=Object.values(n2.sources).filter(e2=>"elb"!==e2.type),l2=f2.find(e2=>e2.config.primary);return l2?u2=l2.push:f2.length>0&&(u2=f2[0].push),{collector:n2,elb:u2}}var createTrigger=async config=>{let flow;return{get flow(){return flow},trigger:()=>async content=>{if(!flow){const result=await Ne(config);flow={collector:result.collector,elb:result.elb}}const source=function(collector){for(const source of Object.values(collector.sources||{}))if("lambda"===source.type)return source}(flow.collector);if(!source)throw new Error("Lambda source not found in collector");const lambdaContext={awsRequestId:`test-${Date.now()}`},pushFn=source.push,lambdaResult=await pushFn(content,lambdaContext);let body;try{body=JSON.parse(lambdaResult.body||"{}")}catch{body=lambdaResult.body}const headers={};if(lambdaResult.headers)for(const[k2,v2]of Object.entries(lambdaResult.headers))void 0!==v2&&(headers[k2]=String(v2));return{statusCode:lambdaResult.statusCode,body:body,headers:headers}}}};function trigger(source){return async content=>{const lambdaEvent={...content};if(lambdaEvent.body&&"string"==typeof lambdaEvent.body){const body=JSON.parse(lambdaEvent.body);body.name&&!body.event&&(lambdaEvent.body=JSON.stringify({...body,event:body.name,name:void 0}))}return source.push(lambdaEvent,{awsRequestId:"test-req"})}}var lambda_default=async context=>{const{config:config={},env:env,setIngest:setIngest}=context,{push:envPush}=env,userSettings=config.settings||{},settings={...userSettings,cors:userSettings.cors??!0,timeout:userSettings.timeout??3e4,enablePixelTracking:userSettings.enablePixelTracking??!0,healthPath:userSettings.healthPath??"/health"};return{type:"lambda",config:{...config,settings:settings},push:async(event,context2)=>{const requestId=context2.awsRequestId;let parsed;try{const corsHeaders=function(corsOptions){if(!corsOptions)return{};if(!0===corsOptions)return{"Access-Control-Allow-Origin":"*","Access-Control-Allow-Methods":"GET, POST, OPTIONS","Access-Control-Allow-Headers":"Content-Type, Authorization","Access-Control-Max-Age":"3600"};const headers={};if(corsOptions.origin){const origin=Array.isArray(corsOptions.origin)?corsOptions.origin.join(", "):corsOptions.origin;headers["Access-Control-Allow-Origin"]=origin}return corsOptions.methods&&(headers["Access-Control-Allow-Methods"]=corsOptions.methods.join(", ")),corsOptions.headers&&(headers["Access-Control-Allow-Headers"]=corsOptions.headers.join(", ")),corsOptions.credentials&&(headers["Access-Control-Allow-Credentials"]="true"),void 0!==corsOptions.maxAge&&(headers["Access-Control-Max-Age"]=corsOptions.maxAge.toString()),headers}(settings.cors||!1);parsed=function(event){if(isAPIGatewayV2(event)){const headers={};return event.headers&&Object.entries(event.headers).forEach(([key,value])=>{value&&(headers[key.toLowerCase()]=value)}),{method:event.requestContext.http.method,body:event.body,queryString:event.rawQueryString||null,headers:headers,isBase64Encoded:event.isBase64Encoded||!1}}{const headers={};event.headers&&Object.entries(event.headers).forEach(([key,value])=>{value&&(headers[key.toLowerCase()]=value)});let queryString=null;if(event.queryStringParameters){const params=new URLSearchParams;Object.entries(event.queryStringParameters).forEach(([key,value])=>{value&¶ms.append(key,value)}),queryString=params.toString()||null}return{method:event.httpMethod,body:event.body,queryString:queryString,headers:headers,isBase64Encoded:event.isBase64Encoded||!1}}}(event);const path=function(event){return isAPIGatewayV2(event)?event.rawPath:event.path}(event);if(settings.healthPath&&path===settings.healthPath)return createResponse(200,{status:"ok",timestamp:Date.now(),source:"lambda",requestId:requestId},corsHeaders,requestId);if("OPTIONS"===parsed.method)return createResponse(204,"",corsHeaders,requestId);if(await setIngest(event),"GET"===parsed.method){if(!settings.enablePixelTracking)return createResponse(405,{success:!1,error:"GET not allowed",requestId:requestId},corsHeaders,requestId);if(parsed.queryString){const parsedData=requestToData(parsed.queryString);parsedData&&"object"==typeof parsedData&&await envPush(parsedData)}return function(headers={},requestId){const responseHeaders={"Content-Type":"image/gif","Cache-Control":"no-cache, no-store, must-revalidate",...headers};return requestId&&(responseHeaders["X-Request-ID"]=requestId),{statusCode:200,headers:responseHeaders,body:"R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7",isBase64Encoded:!0}}(corsHeaders,requestId)}if("POST"===parsed.method){if(!parsed.body)return createResponse(400,{success:!1,error:"Request body is required",requestId:requestId},corsHeaders,requestId);const body=function(body,isBase64Encoded){if(!body||"string"!=typeof body)return body;try{const decoded=isBase64Encoded?Buffer.from(body,"base64").toString("utf8"):body;return JSON.parse(decoded)}catch{return body}}(parsed.body,parsed.isBase64Encoded);if(!body||"object"!=typeof body)return await envPush({}),createResponse(200,{success:!0,requestId:requestId},corsHeaders,requestId);if(function(body){return"object"==typeof body&&null!==body&&"event"in body&&"string"==typeof body.event}(body)){const result=await async function(eventReq,push2,logger,requestId){try{const result=await push2({name:eventReq.event,data:eventReq.data||{},context:eventReq.context,user:eventReq.user,globals:eventReq.globals,consent:eventReq.consent});return{id:result?.event?.id}}catch(error){return logger?.error("Event processing failed",{error:error,eventName:eventReq.event,requestId:requestId}),{error:error instanceof Error?error.message:"Unknown error"}}}(body,envPush,env.logger,requestId);return result.error?createResponse(400,{success:!1,error:result.error,requestId:requestId},corsHeaders,requestId):createResponse(200,{success:!0,id:result.id,requestId:requestId},corsHeaders,requestId)}return createResponse(400,{success:!1,error:"Invalid request format",requestId:requestId},corsHeaders,requestId)}return createResponse(405,{success:!1,error:"Method not allowed",requestId:requestId},corsHeaders,requestId)}catch(error){return env.logger?.error("Lambda handler error",{error:error,requestId:requestId,method:parsed?.method}),createResponse(500,{success:!1,error:error instanceof Error?error.message:"Internal server error",requestId:requestId},{},requestId)}}}};export{types_exports as SourceLambda,examples_exports as examples,lambda_default as sourceLambda};//# sourceMappingURL=index.mjs.map
|
|
1
|
+
var __defProp=Object.defineProperty,__export=(target,all)=>{for(var name in all)__defProp(target,name,{get:all[name],enumerable:!0})};import{requestToData}from"@walkeros/core";function isAPIGatewayV2(event){return"version"in event&&"2.0"===event.version}function createResponse(statusCode,body,headers={},requestId){const responseHeaders={"Content-Type":"object"==typeof body?"application/json":"text/plain",...headers};return requestId&&(responseHeaders["X-Request-ID"]=requestId),{statusCode:statusCode,headers:responseHeaders,body:"object"==typeof body?JSON.stringify(body):String(body),isBase64Encoded:!1}}var types_exports={},examples_exports={};__export(examples_exports,{createTrigger:()=>createTrigger,env:()=>env_exports,step:()=>step_exports,trigger:()=>trigger});var env_exports={};__export(env_exports,{push:()=>push});var createMockElbFn=()=>()=>Promise.resolve({ok:!0}),noopFn=()=>{},noopLogger={error:noopFn,warn:noopFn,info:noopFn,debug:noopFn,throw:message=>{throw"string"==typeof message?new Error(message):message},json:noopFn,scope:()=>noopLogger},push={get push(){return createMockElbFn()},get command(){return createMockElbFn()},get elb(){return createMockElbFn()},logger:noopLogger},step_exports={};__export(step_exports,{apiGatewayV1Post:()=>apiGatewayV1Post,lambdaGet:()=>lambdaGet,lambdaPost:()=>lambdaPost});var lambdaPost={title:"Lambda POST",description:"An API Gateway v2 HTTP POST with a JSON body is converted into a walker elb event.",trigger:{type:"POST"},in:{version:"2.0",requestContext:{http:{method:"POST",path:"/collect"},requestId:"req-123"},body:JSON.stringify({event:"page view",data:{title:"Home"}}),isBase64Encoded:!1},out:[["elb",{name:"page view",data:{title:"Home"}}]]},apiGatewayV1Post={title:"API Gateway v1 POST",description:"A REST API Gateway v1 POST request with a JSON body is converted into a walker elb event.",trigger:{type:"POST"},in:{httpMethod:"POST",path:"/collect",requestContext:{requestId:"req-789",identity:{sourceIp:"203.0.113.42"}},queryStringParameters:null,body:JSON.stringify({event:"page view",data:{title:"Home"}}),isBase64Encoded:!1},out:[["elb",{name:"page view",data:{title:"Home"}}]]},lambdaGet={title:"Lambda GET",description:"An API Gateway v2 HTTP GET with query parameters is parsed into an elb event payload.",trigger:{type:"GET"},in:{version:"2.0",requestContext:{http:{method:"GET",path:"/collect"},requestId:"req-456"},rawQueryString:"e=page+view&d=%7B%22title%22%3A%22Home%22%7D",isBase64Encoded:!1},out:[["elb",{e:"page view",d:'{"title":"Home"}'}]]};import{assign as o}from"@walkeros/core";import{assign as r,createLogger as a}from"@walkeros/core";import{assign as i,buildCacheContext as c,clone as u,compileCache as f,checkCache as l,storeCache as d,compileNext as g,createIngest as m,debounce as p,getId as h,getGrantedConsent as y,isDefined as b,isFunction as v,isObject as k,isRouteArray as w,processEventMapping as C,resolveNext as O,tryCatchAsync as j,useHooks as x}from"@walkeros/core";import{isArray as A}from"@walkeros/core";import{tryCatch as q,tryCatchAsync as S}from"@walkeros/core";import{createIngest as D,getMappingValue as $,tryCatchAsync as _,compileNext as I,resolveNext as P,isRouteArray as E,compileCache as R,checkCache as M,storeCache as H,applyUpdate as T,buildCacheContext as G}from"@walkeros/core";import{createIngest as N,isObject as U,tryCatchAsync as B,useHooks as F,compileNext as W,resolveNext as z,isRouteArray as L,compileCache as V,checkCache as J,storeCache as K,buildCacheContext as Q}from"@walkeros/core";import{assign as we,getSpanId as Ce,isFunction as Oe,isString as je}from"@walkeros/core";import{isObject as xe}from"@walkeros/core";import{createIngest as $e,getGrantedConsent as _e,processEventMapping as Ie,tryCatchAsync as Pe,useHooks as Ee}from"@walkeros/core";import{useHooks as Me,tryCatchAsync as He}from"@walkeros/core";import{useHooks as Te}from"@walkeros/core";var t_Commands={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",Session:"session",Shutdown:"shutdown",User:"user",Walker:"walker"};function X(e,n2){return e.storeId&&n2.stores[e.storeId]?n2.stores[e.storeId]:n2.stores.__cache}function Y(e){const n2={};for(const[t2,o2]of Object.entries(e)){const e2=o2.config?.next;e2&&!L(e2)?n2[t2]={next:e2}:n2[t2]={}}return n2}function Z(e,n2){const t2=e.config||{},o2=e[n2];return void 0!==o2?{config:{...t2,[n2]:o2},chainValue:o2}:{config:t2,chainValue:void 0}}function ee(e,n2={}){if(!e)return[];if(Array.isArray(e))return e;const t2=[],o2=new Set;let s2=e;for(;s2&&n2[s2]&&!o2.has(s2);){o2.add(s2),t2.push(s2);const e2=n2[s2].next;if(Array.isArray(e2)){t2.push(...e2);break}s2=e2}return t2}async function ne(e,n2,t2){if(n2.init&&!n2.config.init){const o2=n2.type||"unknown",s2=e.logger.scope(`transformer:${o2}`),r2={collector:e,logger:s2,id:t2,ingest:N(t2),config:n2.config,env:se(n2.config.env)};s2.debug("init");const a2=await F(n2.init,"TransformerInit",e.hooks,e.logger)(r2);if(!1===a2)return!1;n2.config={...a2||n2.config,env:a2?.env||n2.config.env,init:!0},s2.debug("init done")}return!0}async function te(e,n2,t2,o2,s2,r2){const a2=n2.type||"unknown",i2=e.logger.scope(`transformer:${a2}`),c2={collector:e,logger:i2,id:t2,ingest:s2,config:n2.config,env:{...se(n2.config.env),...r2?{respond:r2}:{}}};i2.debug("push",{event:o2.name});const u2=await F(n2.push,"TransformerPush",e.hooks,e.logger)(o2,c2);return i2.debug("push done"),u2}async function oe(e,n2,t2,o2,s2,r2,a2){a2&&s2?._meta&&(s2._meta.chainPath=a2);let i2=o2,c2=r2;for(const o3 of t2){const r3=n2[o3];if(!r3){e.logger.warn(`Transformer not found: ${o3}`);continue}if(s2&&s2._meta&&s2._meta.path.length>256)return e.logger.error(`Max path length exceeded at ${o3}`),{event:null,respond:c2};if(s2&&s2._meta&&(s2._meta.hops++,s2._meta.path.push(o3)),!await B(ne)(e,r3,o3))return e.logger.error(`Transformer init failed: ${o3}`),{event:null,respond:c2};if(a2&&void 0!==r3.config?.chainMocks?.[a2]){const n3=r3.config.chainMocks[a2];e.logger.scope(`transformer:${r3.type||"unknown"}`).debug("chainMock",{chain:a2}),i2=n3;continue}if(void 0!==r3.config?.mock){e.logger.scope(`transformer:${r3.type||"unknown"}`).debug("mock"),i2=r3.config.mock;continue}if(r3.config?.disabled)continue;const u2=r3.config?.cache,f2=u2?V(u2):void 0,l2=f2?X(f2,e):void 0;let d2;if(f2&&l2){const e2=Q(s2,i2),n3=J(f2,l2,e2,`t:${o3}`);if("HIT"===n3?.status&&n3.value){if(i2=n3.value,f2.full)return{event:i2,respond:c2};continue}"MISS"===n3?.status&&(d2={key:n3.key,ttl:n3.rule.ttl})}const g2=r3.config.before;if(g2){const t3=ee("string"==typeof g2||Array.isArray(g2)&&!L(g2)?g2:z(W(g2),Q(s2,i2))||void 0,Y(n2));if(t3.length>0){const o4=await oe(e,n2,t3,i2,s2,c2,a2);if(null===o4.event)return{event:null,respond:o4.respond??c2};o4.respond&&(c2=o4.respond),i2=Array.isArray(o4.event)?o4.event[0]:o4.event}}const m2=await B(te,n3=>(e.logger.scope(`transformer:${r3.type||"unknown"}`).error("Push failed",{error:n3}),!1))(e,r3,o3,i2,s2,c2);if(!1===m2)return{event:null,respond:c2};if(Array.isArray(m2)){const r4=t2.slice(t2.indexOf(o3)+1),u3=await Promise.all(m2.map(async t3=>{const o4=t3.event||i2,u4=s2?{...s2,_meta:{...s2._meta,path:[...s2._meta.path]}}:N("unknown");if(t3.next){let s3=t3.next;if(L(t3.next)){const e2=W(t3.next);s3=z(e2,Q(u4,o4))}if(s3){const t4=ee(s3,Y(n2));if(t4.length>0)return oe(e,n2,t4,o4,u4,c2,a2)}return{event:o4,respond:c2}}return r4.length>0?oe(e,n2,r4,o4,u4,c2,a2):{event:o4,respond:c2}}));let f3=c2;const l3=[];for(const e2 of u3.flat())if(null!==e2)if(e2&&"object"==typeof e2&&"event"in e2){const n3=e2;if(n3.respond&&(f3=n3.respond),null===n3.event)continue;Array.isArray(n3.event)?l3.push(...n3.event):l3.push(n3.event)}else l3.push(e2);return 0===l3.length?{event:null,respond:f3}:1===l3.length?{event:l3[0],respond:f3}:{event:l3,respond:f3}}if(m2&&"object"==typeof m2){const{event:t3,respond:o4,next:r4}=m2;if(o4&&(c2=o4),r4){let o5=r4;if(L(r4)){const e2=W(r4);if(o5=z(e2,Q(s2,i2)),!o5){t3&&(i2=t3);continue}}const u3=ee(o5,Y(n2));return u3.length>0?oe(e,n2,u3,t3||i2,s2,c2,a2):(e.logger.warn(`Branch target not found: ${JSON.stringify(r4)}`),{event:null,respond:c2})}t3&&(i2=t3)}if(d2&&l2&&K(l2,d2.key,i2,d2.ttl),(!m2||"object"==typeof m2&&!m2.next)&&r3.config.next&&L(r3.config.next)){const t3=r3.config.next,o4=W(t3),u3=z(o4,Q(s2,i2));if(u3){const t4=ee(u3,Y(n2));if(t4.length>0)return oe(e,n2,t4,i2,s2,c2,a2)}return{event:i2,respond:c2}}}return{event:i2,respond:c2}}function se(e){return e&&U(e)?e:{}}async function re(e,n2,t2){const{code:o2,config:s2={},env:r2={},primary:a2,next:i2,before:c2,cache:u2}=t2;let f2,l2=D(n2);const d2=u2?R({...u2,full:u2.full??!0}):void 0,g2=I(i2),m2=Array.isArray(i2)&&E(i2)||!g2?void 0:ee(P(g2),Y(e.transformers)),p2=I(c2),h2=Array.isArray(c2)&&E(c2)||!p2?void 0:ee(P(p2),Y(e.transformers)),y2=e.logger.scope("source").scope(n2),b2={push:async(t3,o3={})=>{let r3,a3=t3;const i3=h2??(p2?ee(P(p2,G(l2)),Y(e.transformers)):[]);if(i3.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const t4=await oe(e,e.transformers,i3,a3,l2,f2,`source.${n2}.before`);if(null===t4.event)return{ok:!0};t4.respond&&(f2=t4.respond),a3=Array.isArray(t4.event)?t4.event[0]:t4.event}if(d2){const t4=X(d2,e);if(t4){const o4=G(l2),s3=M(d2,t4,o4,`s:${n2}`);if(s3){if("HIT"===s3.status&&void 0!==s3.value&&d2.full){let n3=s3.value;return s3.rule.update&&(n3=await T(n3,s3.rule.update,{...o4,cache:{status:"HIT"}},e)),f2?.(n3),{ok:!0}}if("MISS"===s3.status&&d2.full&&f2){const n3=f2,a4=s3.rule.update,i4={...o4,cache:{status:"MISS"}},c4=s3.key,u4=s3.rule.ttl;f2=o5=>{H(t4,c4,o5,u4),a4?r3=(async()=>{const t5=await T(o5,a4,i4,e);n3(t5)})():n3(o5)}}"MISS"!==s3.status||d2.full||H(t4,s3.key,!0,s3.rule.ttl)}}}const c3=m2??(g2?ee(P(g2,G(l2)),Y(e.transformers)):[]),u3=await e.push(a3,{...o3,id:n2,ingest:l2,respond:f2,mapping:s2,preChain:c3});return r3&&await r3,u3},command:e.command,sources:e.sources,elb:e.sources.elb.push,logger:y2,...r2},v2={collector:e,logger:y2,id:n2,config:s2,env:b2,setIngest:async t3=>{if(!s2.ingest)return void(l2=D(n2));const o3=await $(t3,s2.ingest,{collector:e}),r3=D(n2);l2={...r3,...o3,_meta:r3._meta}},setRespond:e2=>{f2=e2}},k2=await _(o2)(v2);if(!k2)return;const w2=k2.type||"unknown",C2=e.logger.scope(w2).scope(n2);return b2.logger=C2,a2&&(k2.config={...k2.config,primary:a2}),k2}function ie(e,n2){return{collector:e,logger:e.logger.scope("on").scope(String(n2))}}function ue(e,n2,t2,o2,s2){if(!n2.on)return;const r2=n2.type||"unknown",a2=e.logger.scope(r2).scope("on").scope(o2),i2={collector:e,logger:a2,id:t2,config:n2.config,data:s2,env:ke(n2.env,n2.config.env)};q(n2.on)(o2,i2)}function fe(e,n2,o2,s2){let r2;switch(n2){case t_Commands.Consent:r2=s2||e.consent;break;case t_Commands.Session:r2=e.session;break;case t_Commands.User:r2=s2||e.user;break;case t_Commands.Custom:r2=s2||e.custom;break;case t_Commands.Globals:r2=s2||e.globals;break;case t_Commands.Config:r2=s2||e.config;break;case t_Commands.Ready:case t_Commands.Run:default:r2=void 0}if(o2.length)switch(n2){case t_Commands.Consent:!function(e2,n3,o3){const s3=o3||e2.consent,r3=ie(e2,t_Commands.Consent);n3.forEach(e3=>{Object.keys(s3).filter(n4=>n4 in e3).forEach(n4=>{q(e3[n4])(s3,r3)})})}(e,o2,s2);break;case t_Commands.Ready:!function(e2,n3){if(!e2.allowed)return;const o3=ie(e2,t_Commands.Ready);n3.forEach(e3=>{q(e3)(void 0,o3)})}(e,o2);break;case t_Commands.Run:!function(e2,n3){if(!e2.allowed)return;const o3=ie(e2,t_Commands.Run);n3.forEach(e3=>{q(e3)(void 0,o3)})}(e,o2);break;case t_Commands.Session:!function(e2,n3){if(!e2.session)return;const o3=ie(e2,t_Commands.Session);n3.forEach(n4=>{q(n4)(e2.session,o3)})}(e,o2);break;default:{const t2=ie(e,n2);o2.forEach(e2=>{"function"==typeof e2&&q(e2)(r2,t2)});break}}}function de(e,n2,t2,o2){if(!e)return[];if(n2){const e2=O(n2,c(o2));return e2?ee(e2,Y(t2)):[]}return ee(e,Y(t2))}async function ge(e,n2,t2){const{code:o2,config:s2={},env:r2={},before:a2,next:i2,cache:c2}=n2;if(!v(o2.push))return ye({ok:!1,failed:{invalid:{type:"invalid",error:"Destination code must have a push method"}}});const u2=t2||s2||{init:!1};let f2=a2?{...u2,before:a2}:{...u2};i2&&(f2={...f2,next:i2}),c2&&(f2={...f2,cache:c2});const l2={...o2,config:f2,env:ke(o2.env,r2)};let d2=l2.config.id;if(!d2)do{d2=h(5,"abcdefghijklmnopqrstuvwxyz")}while(e.destinations[d2]);return e.destinations[d2]=l2,!1!==l2.config.queue&&(l2.queuePush=[...e.queue]),me(e,void 0,{},{[d2]:l2})}async function me(e,n2,t2={},o2){const{allowed:s2,consent:r2,globals:a2,user:p2}=e;if(!s2)return ye({ok:!1});n2&&(e.queue.push(n2),e.status.in++),o2||(o2=e.destinations);const h2=await Promise.all(Object.entries(o2||{}).map(async([o3,s3])=>{if(s3.config.disabled)return{id:o3,destination:s3,skipped:!0};let h3=(s3.queuePush||[]).map(e2=>({...e2,consent:r2}));s3.queuePush=[],n2&&h3.push(u(n2));const b3=t2.ingest?{...t2.ingest,_meta:{...t2.ingest._meta,path:[...t2.ingest._meta.path]}}:m("unknown");if(!h3.length&&!s3.queueOn?.length)return{id:o3,destination:s3,skipped:!0};if(!h3.length&&s3.queueOn?.length){const n3=await j(pe)(e,s3,o3);return{id:o3,destination:s3,skipped:!n3}}const v3=[],k3=h3.filter(e2=>{const n3=y(s3.config.consent,r2,e2.consent);return!n3||(e2.consent=n3,v3.push(e2),!1)});if(s3.queuePush.push(...k3),!v3.length)return{id:o3,destination:s3,queue:h3};if(!await j(pe)(e,s3,o3))return{id:o3,destination:s3,queue:h3};let C2,O2;s3.dlq||(s3.dlq=[]);const x2=s3.config.before,A2=de(x2,x2&&w(x2)?g(x2):void 0,e.transformers,b3),q2=s3.config.next,S2=q2&&w(q2)?g(q2):void 0,D2=s3.config?.cache,$2=D2?f(D2):void 0,_2=$2?X($2,e):void 0;let I2=0;return await Promise.all(v3.map(async n3=>{let r3;if(n3.globals=i(a2,n3.globals),n3.user=i(p2,n3.user),$2?.full&&_2){const e2=c(b3,n3),t3=l($2,_2,e2,`d:${o3}`);if("HIT"===t3?.status)return n3;"MISS"===t3?.status&&(r3={key:t3.key,ttl:t3.rule.ttl})}let u2=n3,f2=t2.respond;if(A2.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const s4=await oe(e,e.transformers,A2,n3,b3,t2.respond,`destination.${o3}.before`);if(null===s4.event)return n3;s4.respond&&(f2=s4.respond),u2=Array.isArray(s4.event)?s4.event[0]:s4.event}if($2&&!$2.full&&_2){const e2=c(b3,u2),t3=l($2,_2,e2,`d:${o3}`);if("HIT"===t3?.status)return n3;"MISS"===t3?.status&&(r3={key:t3.key,ttl:t3.rule.ttl})}const g2=Date.now();let m2=!1;const h4=await j(he,n4=>{const t3=s3.type||"unknown";e.logger.scope(t3).error("Push failed",{error:n4,event:u2.name}),C2=n4,m2=!0,s3.dlq.push([u2,n4])})(e,s3,o3,u2,b3,f2);if(I2+=Date.now()-g2,r3&&_2&&void 0===s3.config.mock&&d(_2,r3.key,h4??!0,r3.ttl),void 0!==h4&&(O2=h4),!m2&&q2){void 0!==h4&&(b3._response=h4);const n4=de(q2,S2,e.transformers,b3);if(n4.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const t3=await oe(e,e.transformers,n4,u2,b3,f2,`destination.${o3}.next`);t3.respond&&(f2=t3.respond)}}return n3})),{id:o3,destination:s3,error:C2,response:O2,totalDuration:I2}})),b2={},v2={},k2={};for(const n3 of h2){if(n3.skipped)continue;const t3={type:n3.destination.type||"unknown",data:n3.response};e.status.destinations[n3.id]||(e.status.destinations[n3.id]={count:0,failed:0,duration:0});const o3=e.status.destinations[n3.id],s3=Date.now();n3.error?(t3.error=n3.error,k2[n3.id]=t3,o3.failed++,o3.lastAt=s3,o3.duration+=n3.totalDuration||0,e.status.failed++):n3.queue&&n3.queue.length?v2[n3.id]=t3:(b2[n3.id]=t3,o3.count++,o3.lastAt=s3,o3.duration+=n3.totalDuration||0,e.status.out++)}return ye({event:n2,...Object.keys(b2).length&&{done:b2},...Object.keys(v2).length&&{queued:v2},...Object.keys(k2).length&&{failed:k2}})}async function pe(e,n2,t2){if(n2.init&&!n2.config.init){const o2=n2.type||"unknown",s2=e.logger.scope(o2),r2={collector:e,logger:s2,id:t2,config:n2.config,env:ke(n2.env,n2.config.env)};s2.debug("init");const a2=await x(n2.init,"DestinationInit",e.hooks,e.logger)(r2);if(!1===a2)return a2;if(n2.config={...a2||n2.config,init:!0},n2.queueOn?.length){const o3=n2.queueOn;n2.queueOn=[];for(const{type:s3,data:r3}of o3)ue(e,n2,t2,s3,r3)}s2.debug("init done")}return!0}async function he(e,n2,t2,o2,s2,r2){const{config:a2}=n2,i2=await C(o2,a2,e);if(i2.ignore)return!1;const c2=n2.type||"unknown",u2=e.logger.scope(c2),f2={collector:e,logger:u2,id:t2,config:a2,data:i2.data,rule:i2.mapping,ingest:s2,env:{...ke(n2.env,a2.env),...r2?{respond:r2}:{}}};if(void 0!==a2.mock)return u2.debug("mock",{event:i2.event.name}),a2.mock;const l2=i2.mapping,d2=i2.mappingKey||"* *";if(!l2?.batch||!n2.pushBatch||void 0!==a2.mock){u2.debug("push",{event:i2.event.name});const t3=await x(n2.push,"DestinationPush",e.hooks,e.logger)(i2.event,f2);return u2.debug("push done"),t3}{if(n2.batches=n2.batches||{},!n2.batches[d2]){const o4={key:d2,events:[],data:[]};n2.batches[d2]={batched:o4,batchFn:p(()=>{const o5=n2.batches[d2].batched,i3={collector:e,logger:u2,id:t2,config:a2,data:void 0,rule:l2,ingest:s2,env:{...ke(n2.env,a2.env),...r2?{respond:r2}:{}}};u2.debug("push batch",{events:o5.events.length}),x(n2.pushBatch,"DestinationPushBatch",e.hooks,e.logger)(o5,i3),u2.debug("push batch done"),o5.events=[],o5.data=[]},l2.batch)}}const o3=n2.batches[d2];o3.batched.events.push(i2.event),b(i2.data)&&o3.batched.data.push(i2.data),o3.batchFn()}return!0}function ye(e){return{ok:!e?.failed,...e}}function be(e){const{code:n2,config:t2={},env:o2={},cache:s2}=e,{config:r2}=Z(e,"before"),{config:a2}=Z({...e,config:r2},"next"),i2={...n2.config,...t2,...a2};s2&&(i2.cache=s2);const c2=ke(n2.env,o2);return{...n2,config:i2,env:c2}}function ke(e,n2){return e||n2?n2?e&&k(e)&&k(n2)?{...e,...n2}:n2:e:{}}async function Ae(e,n2,t2){const o2=Object.entries(e).map(async([e2,o3])=>{const s2=o3.destroy;if(!s2)return;const r2=o3.type||"unknown",a2=t2.scope(r2),i2={id:e2,config:o3.config,env:o3.env??{},logger:a2};try{await Promise.race([s2(i2),new Promise((t3,o4)=>setTimeout(()=>o4(new Error(`${n2} '${e2}' destroy timed out`)),5e3))])}catch(t3){a2.error(`${n2} '${e2}' destroy failed: ${t3}`)}});await Promise.allSettled(o2)}async function qe(e,n2,o2,r2){let a2,i2,c2=!1;switch(n2){case t_Commands.Config:xe(o2)&&(we(e.config,o2,{shallow:!1}),i2=o2,c2=!0);break;case t_Commands.Consent:if(xe(o2)){const{update:n3}=function(e,n2){const t2={};return Object.entries(n2).forEach(([e2,n3])=>{t2[e2]=!!n3}),e.consent=o(e.consent,t2),{update:t2}}(e,o2);i2=n3,c2=!0}break;case t_Commands.Custom:xe(o2)&&(e.custom=we(e.custom,o2),i2=o2,c2=!0);break;case t_Commands.Destination:xe(o2)&&("code"in o2&&xe(o2.code)?a2=await ge(e,o2,r2):Oe(o2.push)&&(a2=await ge(e,{code:o2},r2)));break;case t_Commands.Globals:xe(o2)&&(e.globals=we(e.globals,o2),i2=o2,c2=!0);break;case t_Commands.On:je(o2)&&await async function(e,n2,t2){const o2=e.on,s2=o2[n2]||[],r2=A(t2)?t2:[t2];r2.forEach(e2=>{s2.push(e2)}),o2[n2]=s2,fe(e,n2,r2)}(e,o2,r2);break;case t_Commands.Ready:c2=!0;break;case t_Commands.Run:a2=await async function(e,n2){return e.allowed=!0,e.timing=Date.now(),n2&&(n2.consent&&(e.consent=we(e.consent,n2.consent)),n2.user&&(e.user=we(e.user,n2.user)),n2.globals&&(e.globals=we(e.config.globalsStatic||{},n2.globals)),n2.custom&&(e.custom=we(e.custom,n2.custom))),Object.values(e.destinations).forEach(e2=>{e2.queuePush=[]}),e.queue=[],e.round++,await me(e)}(e,o2),c2=!0;break;case t_Commands.Session:c2=!0;break;case t_Commands.Shutdown:await async function(e2){const n3=e2.logger;await Ae(e2.sources,"source",n3),await Ae(e2.destinations,"destination",n3),await Ae(e2.transformers,"transformer",n3),await Ae(e2.stores,"store",n3)}(e);break;case t_Commands.User:xe(o2)&&(we(e.user,o2,{shallow:!1}),i2=o2,c2=!0)}return c2&&(await async function(e,n2,o2,s2){let r2,a2=o2||[];switch(o2||(a2=e.on[n2]||[]),n2){case t_Commands.Consent:r2=s2||e.consent;break;case t_Commands.Session:r2=e.session;break;case t_Commands.User:r2=s2||e.user;break;case t_Commands.Custom:r2=s2||e.custom;break;case t_Commands.Globals:r2=s2||e.globals;break;case t_Commands.Config:r2=s2||e.config;break;case t_Commands.Ready:case t_Commands.Run:default:r2=void 0}let i2=!1;for(const t2 of Object.values(e.sources))t2.on&&!1===await S(t2.on)(n2,r2)&&(i2=!0);return Object.entries(e.destinations).forEach(([t2,o3])=>{if(o3.on){if(!o3.config.init)return o3.queueOn=o3.queueOn||[],void o3.queueOn.push({type:n2,data:r2});ue(e,o3,t2,n2,r2)}}),(Object.keys(e.pending.sources).length>0||Object.keys(e.pending.destinations).length>0)&&await async function(e2,n3){for(const[t2,o3]of Object.entries(e2.pending.sources)){if(!e2.pending.sources[t2]||e2.sources[t2])continue;const s3=o3.config?.require;if(!s3)continue;const r3=s3.indexOf(n3);if(-1===r3)continue;if(s3.splice(r3,1),s3.length>0)continue;delete e2.pending.sources[t2];const a3=await re(e2,t2,o3);a3&&(e2.sources[t2]=a3)}for(const[t2,o3]of Object.entries(e2.pending.destinations)){if(!e2.pending.destinations[t2]||e2.destinations[t2])continue;const s3=o3.config?.require;if(!s3)continue;const r3=s3.indexOf(n3);if(-1===r3)continue;if(s3.splice(r3,1),s3.length>0)continue;delete e2.pending.destinations[t2];const a3=be(o3);!1!==a3.config.queue&&(a3.queuePush=[...e2.queue]),e2.destinations[t2]=a3}}(e,n2),fe(e,n2,a2,s2),!i2}(e,n2,void 0,i2),a2=await me(e)),a2||ye({ok:!0})}function Se(e,n2){if(!n2.name)throw new Error("Event name is required");const[t2,o2]=n2.name.split(" ");if(!t2||!o2)throw new Error("Event name is invalid");const{timestamp:s2=Date.now(),name:r2=`${t2} ${o2}`,data:a2={},context:i2={},globals:c2=e.globals,custom:u2={},user:f2=e.user,nested:l2=[],consent:d2=e.consent,id:g2=Ce(),trigger:m2="",entity:p2=t2,action:h2=o2,timing:y2=0,source:b2={type:"collector",schema:"4"}}=n2;return{name:r2,data:a2,context:i2,globals:c2,custom:u2,user:f2,nested:l2,consent:d2,id:g2,trigger:m2,entity:p2,action:h2,timestamp:s2,timing:y2,source:b2}}async function Ge(e){const n2=r({globalsStatic:{},sessionStatic:{},run:!0},e,{merge:!1,extend:!1}),t2={level:e.logger?.level,handler:e.logger?.handler},o2=a(t2),s2={...n2.globalsStatic,...e.globals},i2={allowed:!1,config:n2,consent:e.consent||{},custom:e.custom||{},destinations:{},transformers:{},stores:{},globals:s2,hooks:e.hooks||{},logger:o2,on:{},queue:[],round:0,session:void 0,status:{startedAt:Date.now(),in:0,out:0,failed:0,sources:{},destinations:{}},timing:Date.now(),user:e.user||{},sources:{},pending:{sources:{},destinations:{}},push:void 0,command:void 0};var e2,n3;i2.push=function(e,n2){return Ee(async(t2,o2={})=>await Pe(async()=>{const s2=Date.now(),{id:r2,ingest:a2,respond:i2,mapping:c2,preChain:u2,include:f2,exclude:l2}=o2;let d2=i2,g2=t2;const m2=f2||l2?function(e2,n3,t3){let o3=e2;return n3&&(o3=Object.fromEntries(Object.entries(o3).filter(([e3])=>n3.includes(e3)))),t3&&(o3=Object.fromEntries(Object.entries(o3).filter(([e3])=>!t3.includes(e3)))),o3}(e.destinations,f2,l2):void 0,p2=a2??$e(r2||"unknown");if(c2){const n3=await Ie(g2,c2,e);if(n3.ignore)return ye({ok:!0});if(c2.consent&&!_e(c2.consent,e.consent,n3.event.consent))return ye({ok:!0});g2=n3.event}if(u2?.length&&e.transformers&&Object.keys(e.transformers).length>0){const t3=await oe(e,e.transformers,u2,g2,p2,d2,r2?`source.${r2}.next`:void 0);if(null===t3.event)return ye({ok:!0});if(t3.respond&&(d2=t3.respond),Array.isArray(t3.event)){const o3=await Promise.all(t3.event.map(async t4=>{const o4=n2(t4),s3=Se(e,o4);return me(e,s3,{id:r2,ingest:p2,respond:d2},m2)}));if(r2){e.status.sources[r2]||(e.status.sources[r2]={count:0,duration:0});const n3=e.status.sources[r2];n3.count+=t3.event.length,n3.lastAt=Date.now(),n3.duration+=Date.now()-s2}return o3[0]??ye({ok:!0})}g2=t3.event}const h2=n2(g2),y2=Se(e,h2),b2=await me(e,y2,{id:r2,ingest:p2,respond:d2},m2);if(r2){e.status.sources[r2]||(e.status.sources[r2]={count:0,duration:0});const n3=e.status.sources[r2];n3.count++,n3.lastAt=Date.now(),n3.duration+=Date.now()-s2}return b2},()=>ye({ok:!1}))(),"Push",e.hooks,e.logger)}(i2,e2=>({timing:Math.round((Date.now()-i2.timing)/10)/100,source:{type:"collector",schema:"4",version:"4.0.0"},...e2})),i2.command=(n3=qe,Me(async(t3,o3,s3)=>await He(async()=>await n3(e2,t3,o3,s3),()=>ye({ok:!1}))(),"Command",(e2=i2).hooks,e2.logger));const c2=e.stores||{};if(i2.stores=await async function(e2,n3={}){const t3={};for(const[o3,s3]of Object.entries(n3)){const{code:n4,config:r2={},env:a2={}}=s3,i3=e2.logger.scope("store").scope(o3),c3={collector:e2,logger:i3,id:o3,config:r2,env:a2},u2=await n4(c3),f2=u2.get,l2=u2.set,d2=u2.delete;u2.get=Te(f2,"StoreGet",e2.hooks,e2.logger),u2.set=Te(l2,"StoreSet",e2.hooks,e2.logger),u2.delete=Te(d2,"StoreDelete",e2.hooks,e2.logger),t3[o3]=u2}return t3}(i2,c2),function(e2,n3,t3){const o3=new Map;for(const[t4,s4]of Object.entries(e2))n3[t4]&&o3.set(s4,n3[t4]);if(0!==o3.size)for(const e3 of[t3.transformers,t3.destinations,t3.sources])if(e3)for(const n4 of Object.values(e3))s3(n4.env);function s3(e3){if(e3)for(const[n4,t4]of Object.entries(e3))if("object"==typeof t4&&null!==t4){const s4=o3.get(t4);s4&&(e3[n4]=s4)}}}(c2,i2.stores,e),!i2.stores.__cache){const e2=new Map;i2.stores.__cache={type:"memory",config:{},get:n3=>{const t3=e2.get(n3);if(t3){if(!(t3.expires&&Date.now()>t3.expires))return t3.value;e2.delete(n3)}},set:(n3,t3,o3)=>{e2.set(n3,{value:t3,expires:o3?Date.now()+o3:void 0})},delete:n3=>{e2.delete(n3)}}}return i2.destinations=await async function(e,n2={}){const t2={};for(const[o2,s2]of Object.entries(n2))s2.config?.require?.length?e.pending.destinations[o2]=s2:t2[o2]=be(s2);return t2}(i2,e.destinations||{}),i2.transformers=await async function(e2,n3={}){const t3={};for(const[o3,s3]of Object.entries(n3)){const{code:n4,env:r2={}}=s3,{config:a2}=Z(s3,"before"),{config:i3}=Z({...s3,config:a2},"next"),c3=Object.keys(r2).length>0?{...i3,env:r2}:i3,{cache:u2}=s3,f2=u2?{...c3,cache:u2}:c3,l2=e2.logger.scope("transformer").scope(o3),d2={collector:e2,logger:l2,id:o3,ingest:N(o3),config:f2,env:r2},g2=await n4(d2);t3[o3]=g2}return t3}(i2,e.transformers||{}),i2}async function Ne(e){e=e||{};const n2=await Ge(e),t2=(o2=n2,{type:"elb",config:{},push:async(e2,n3,t3,s3,r3,a3)=>{if("string"==typeof e2&&e2.startsWith("walker ")){const s4=e2.replace("walker ","");return o2.command(s4,n3,t3)}let i3;if("string"==typeof e2)i3={name:e2},n3&&"object"==typeof n3&&!Array.isArray(n3)&&(i3.data=n3);else{if(!e2||"object"!=typeof e2)return ye({ok:!1});i3=e2,n3&&"object"==typeof n3&&!Array.isArray(n3)&&(i3.data={...i3.data||{},...n3})}return s3&&"object"==typeof s3&&(i3.context=s3),r3&&Array.isArray(r3)&&(i3.nested=r3),a3&&"object"==typeof a3&&(i3.custom=a3),o2.push(i3)}});var o2;n2.sources.elb=t2;const s2=await async function(e,n2={}){const t2={};for(const[o2,s2]of Object.entries(n2)){const{config:n3={}}=s2;if(n3.require&&n3.require.length>0){e.pending.sources[o2]=s2;continue}const r2=await re(e,o2,s2);r2&&(t2[o2]=r2)}return t2}(n2,e.sources||{});Object.assign(n2.sources,s2);const{consent:r2,user:a2,globals:i2,custom:c2}=e;r2&&await n2.command("consent",r2),a2&&await n2.command("user",a2),i2&&Object.assign(n2.globals,i2),c2&&Object.assign(n2.custom,c2),n2.config.run&&await n2.command("run");let u2=t2.push;const f2=Object.values(n2.sources).filter(e2=>"elb"!==e2.type),l2=f2.find(e2=>e2.config.primary);return l2?u2=l2.push:f2.length>0&&(u2=f2[0].push),{collector:n2,elb:u2}}var createTrigger=async config=>{let flow;return{get flow(){return flow},trigger:()=>async content=>{if(!flow){const result=await Ne(config);flow={collector:result.collector,elb:result.elb}}const source=function(collector){for(const source of Object.values(collector.sources||{}))if("lambda"===source.type)return source}(flow.collector);if(!source)throw new Error("Lambda source not found in collector");const lambdaContext={awsRequestId:`test-${Date.now()}`},pushFn=source.push,lambdaResult=await pushFn(content,lambdaContext);let body;try{body=JSON.parse(lambdaResult.body||"{}")}catch{body=lambdaResult.body}const headers={};if(lambdaResult.headers)for(const[k2,v2]of Object.entries(lambdaResult.headers))void 0!==v2&&(headers[k2]=String(v2));return{statusCode:lambdaResult.statusCode,body:body,headers:headers}}}};function trigger(source){return async content=>{const lambdaEvent={...content};if(lambdaEvent.body&&"string"==typeof lambdaEvent.body){const body=JSON.parse(lambdaEvent.body);body.name&&!body.event&&(lambdaEvent.body=JSON.stringify({...body,event:body.name,name:void 0}))}return source.push(lambdaEvent,{awsRequestId:"test-req"})}}var lambda_default=async context=>{const{config:config={},env:env,setIngest:setIngest}=context,{push:envPush}=env,userSettings=config.settings||{},settings={...userSettings,cors:userSettings.cors??!0,timeout:userSettings.timeout??3e4,enablePixelTracking:userSettings.enablePixelTracking??!0,healthPath:userSettings.healthPath??"/health"};return{type:"lambda",config:{...config,settings:settings},push:async(event,context2)=>{const requestId=context2.awsRequestId;let parsed;try{const corsHeaders=function(corsOptions){if(!corsOptions)return{};if(!0===corsOptions)return{"Access-Control-Allow-Origin":"*","Access-Control-Allow-Methods":"GET, POST, OPTIONS","Access-Control-Allow-Headers":"Content-Type, Authorization","Access-Control-Max-Age":"3600"};const headers={};if(corsOptions.origin){const origin=Array.isArray(corsOptions.origin)?corsOptions.origin.join(", "):corsOptions.origin;headers["Access-Control-Allow-Origin"]=origin}return corsOptions.methods&&(headers["Access-Control-Allow-Methods"]=corsOptions.methods.join(", ")),corsOptions.headers&&(headers["Access-Control-Allow-Headers"]=corsOptions.headers.join(", ")),corsOptions.credentials&&(headers["Access-Control-Allow-Credentials"]="true"),void 0!==corsOptions.maxAge&&(headers["Access-Control-Max-Age"]=corsOptions.maxAge.toString()),headers}(settings.cors||!1);parsed=function(event){if(isAPIGatewayV2(event)){const headers={};return event.headers&&Object.entries(event.headers).forEach(([key,value])=>{value&&(headers[key.toLowerCase()]=value)}),{method:event.requestContext.http.method,body:event.body,queryString:event.rawQueryString||null,headers:headers,isBase64Encoded:event.isBase64Encoded||!1}}{const headers={};event.headers&&Object.entries(event.headers).forEach(([key,value])=>{value&&(headers[key.toLowerCase()]=value)});let queryString=null;if(event.queryStringParameters){const params=new URLSearchParams;Object.entries(event.queryStringParameters).forEach(([key,value])=>{value&¶ms.append(key,value)}),queryString=params.toString()||null}return{method:event.httpMethod,body:event.body,queryString:queryString,headers:headers,isBase64Encoded:event.isBase64Encoded||!1}}}(event);const path=function(event){return isAPIGatewayV2(event)?event.rawPath:event.path}(event);if(settings.healthPath&&path===settings.healthPath)return createResponse(200,{status:"ok",timestamp:Date.now(),source:"lambda",requestId:requestId},corsHeaders,requestId);if("OPTIONS"===parsed.method)return createResponse(204,"",corsHeaders,requestId);if(await setIngest(event),"GET"===parsed.method){if(!settings.enablePixelTracking)return createResponse(405,{success:!1,error:"GET not allowed",requestId:requestId},corsHeaders,requestId);if(parsed.queryString){const parsedData=requestToData(parsed.queryString);parsedData&&"object"==typeof parsedData&&await envPush(parsedData)}return function(headers={},requestId){const responseHeaders={"Content-Type":"image/gif","Cache-Control":"no-cache, no-store, must-revalidate",...headers};return requestId&&(responseHeaders["X-Request-ID"]=requestId),{statusCode:200,headers:responseHeaders,body:"R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7",isBase64Encoded:!0}}(corsHeaders,requestId)}if("POST"===parsed.method){if(!parsed.body)return createResponse(400,{success:!1,error:"Request body is required",requestId:requestId},corsHeaders,requestId);const body=function(body,isBase64Encoded){if(!body||"string"!=typeof body)return body;try{const decoded=isBase64Encoded?Buffer.from(body,"base64").toString("utf8"):body;return JSON.parse(decoded)}catch{return body}}(parsed.body,parsed.isBase64Encoded);if(!body||"object"!=typeof body)return await envPush({}),createResponse(200,{success:!0,requestId:requestId},corsHeaders,requestId);if(function(body){return"object"==typeof body&&null!==body&&"event"in body&&"string"==typeof body.event}(body)){const result=await async function(eventReq,push2,logger,requestId){try{const result=await push2({name:eventReq.event,data:eventReq.data||{},context:eventReq.context,user:eventReq.user,globals:eventReq.globals,consent:eventReq.consent});return{id:result?.event?.id}}catch(error){return logger?.error("Event processing failed",{error:error,eventName:eventReq.event,requestId:requestId}),{error:error instanceof Error?error.message:"Unknown error"}}}(body,envPush,env.logger,requestId);return result.error?createResponse(400,{success:!1,error:result.error,requestId:requestId},corsHeaders,requestId):createResponse(200,{success:!0,id:result.id,requestId:requestId},corsHeaders,requestId)}return createResponse(400,{success:!1,error:"Invalid request format",requestId:requestId},corsHeaders,requestId)}return createResponse(405,{success:!1,error:"Method not allowed",requestId:requestId},corsHeaders,requestId)}catch(error){return env.logger?.error("Lambda handler error",{error:error,requestId:requestId,method:parsed?.method}),createResponse(500,{success:!1,error:error instanceof Error?error.message:"Internal server error",requestId:requestId},{},requestId)}}}};export{types_exports as SourceLambda,examples_exports as examples,lambda_default as sourceLambda};//# sourceMappingURL=index.mjs.map
|
package/dist/walkerOS.json
CHANGED
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@walkeros/server-source-aws",
|
|
3
3
|
"description": "AWS server sources for walkerOS (Lambda, API Gateway, Function URLs)",
|
|
4
|
-
"version": "4.0.0
|
|
4
|
+
"version": "4.0.0",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"main": "./dist/index.js",
|
|
7
7
|
"module": "./dist/index.mjs",
|
|
@@ -21,14 +21,14 @@
|
|
|
21
21
|
"update": "npx npm-check-updates -u && npm update"
|
|
22
22
|
},
|
|
23
23
|
"dependencies": {
|
|
24
|
-
"@walkeros/core": "4.0.0
|
|
24
|
+
"@walkeros/core": "4.0.0"
|
|
25
25
|
},
|
|
26
26
|
"peerDependencies": {
|
|
27
27
|
"@types/aws-lambda": "^8.10.0"
|
|
28
28
|
},
|
|
29
29
|
"devDependencies": {
|
|
30
30
|
"@types/aws-lambda": "^8.10.159",
|
|
31
|
-
"@walkeros/collector": "4.0.0
|
|
31
|
+
"@walkeros/collector": "4.0.0"
|
|
32
32
|
},
|
|
33
33
|
"repository": {
|
|
34
34
|
"url": "git+https://github.com/elbwalker/walkerOS.git",
|