@walkeros/collector 1.1.3 → 1.3.0-next-1771252576264

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/README.md CHANGED
@@ -30,6 +30,9 @@ The Collector transforms raw events into enriched, compliant data streams by:
30
30
  - **Privacy-first** - Built-in consent management and data protection
31
31
  - **Event validation** - Ensures data quality and consistency
32
32
  - **Flexible routing** - Send events to multiple destinations simultaneously
33
+ - **Chain branching** - Transformers can dynamically redirect the chain at
34
+ runtime using `branch()`, enabling router-style pattern matching on ingest
35
+ metadata
33
36
 
34
37
  ### Role in architecture
35
38
 
package/dist/index.d.mts CHANGED
@@ -65,13 +65,13 @@ declare const Const: {
65
65
  };
66
66
 
67
67
  /**
68
- * Sets the consent state and processes the queue.
69
- *
70
- * @param collector - The walkerOS collector instance.
71
- * @param data - The consent data to set.
72
- * @returns The result of the push operation.
68
+ * Processes consent data: coerces to boolean, updates collector state.
69
+ * Does NOT notify or process queues — caller handles that.
73
70
  */
74
- declare function setConsent(collector: Collector.Instance, data: WalkerOS.Consent): Promise<Elb.PushResult>;
71
+ declare function processConsent(collector: Collector.Instance, data: WalkerOS.Consent): {
72
+ update: WalkerOS.Consent;
73
+ runQueue: boolean;
74
+ };
75
75
 
76
76
  declare function startFlow<ElbPush extends Elb.Fn = Elb.Fn>(initConfig?: Collector.InitConfig): Promise<StartFlow<ElbPush>>;
77
77
 
@@ -137,6 +137,12 @@ declare function destinationPush<Destination extends Destination.Instance>(colle
137
137
  * @returns The push result.
138
138
  */
139
139
  declare function createPushResult(partialResult?: Partial<Elb.PushResult>): Elb.PushResult;
140
+ /**
141
+ * Register a single destination from its init definition.
142
+ * Merges code config, user config, and chain config.
143
+ * Used by initDestinations and activatePending.
144
+ */
145
+ declare function registerDestination(def: Destination.Init): Destination.Instance;
140
146
  /**
141
147
  * Initializes a map of destinations using ONLY the unified code/config/env pattern.
142
148
  * Does NOT call destination.init() - that happens later during push with proper consent checks.
@@ -145,7 +151,7 @@ declare function createPushResult(partialResult?: Partial<Elb.PushResult>): Elb.
145
151
  * @param collector - The collector instance for destination init context.
146
152
  * @returns The initialized destinations.
147
153
  */
148
- declare function initDestinations(_collector: Collector.Instance, destinations?: Destination.InitDestinations): Promise<Collector.Destinations>;
154
+ declare function initDestinations(collector: Collector.Instance, destinations?: Destination.InitDestinations): Promise<Collector.Destinations>;
149
155
  /**
150
156
  * Merges destination environment with config environment
151
157
  * Config env takes precedence over destination env for overrides
@@ -186,7 +192,7 @@ declare function runCollector(collector: Collector.Instance, state?: RunState):
186
192
  * @param type The type of the event to listen for.
187
193
  * @param option The callback function or an array of callback functions.
188
194
  */
189
- declare function on(collector: Collector.Instance, type: On.Types, option: WalkerOS.SingleOrArray<On.Options>): void;
195
+ declare function on(collector: Collector.Instance, type: On.Types, option: WalkerOS.SingleOrArray<On.Options>): Promise<void>;
190
196
  /**
191
197
  * Calls a destination's on() handler with proper context.
192
198
  * Used by both onApply() for immediate calls and destinationInit() for flushing queued events.
@@ -200,14 +206,15 @@ declare function callDestinationOn(collector: Collector.Instance, destination: D
200
206
  * @param options The options for the callbacks.
201
207
  * @param config The consent configuration.
202
208
  */
203
- declare function onApply(collector: Collector.Instance, type: On.Types, options?: Array<On.Options>, config?: WalkerOS.Consent): void;
209
+ declare function onApply(collector: Collector.Instance, type: On.Types, options?: Array<On.Options>, config?: unknown): Promise<boolean>;
204
210
 
205
211
  /**
206
- * Initialize sources using the code/config/env pattern
207
- *
208
- * @param collector - The WalkerOS collector instance
209
- * @param sources - Map of source definitions with code/config/env
210
- * @returns Initialized sources
212
+ * Initialize a single source. Extracted from the initSources loop body
213
+ * so it can be reused by the pending-source activator.
214
+ */
215
+ declare function initSource(collector: Collector.Instance, sourceId: string, sourceDefinition: Source.InitSource): Promise<Source.Instance | undefined>;
216
+ /**
217
+ * Initialize sources. Sources with `require` are deferred to collector.pending.
211
218
  */
212
219
  declare function initSources(collector: Collector.Instance, sources?: Source.InitSources): Promise<Collector.Sources>;
213
220
 
@@ -286,4 +293,4 @@ declare function walkChain(startId: string | string[] | undefined, transformers?
286
293
  next?: string | string[];
287
294
  }>): string[];
288
295
 
289
- export { code as Code, type CommandTypes, Commands, Const, type CreateCollector, type HandleCommandFn, type RunState, type StartFlow, type StorageType, addDestination, callDestinationOn, commonHandleCommand, createEvent, createPush, createPushResult, destinationInit, destinationPush, extractTransformerNextMap, initDestinations, initSources, mergeEnvironments, on, onApply, pushToDestinations, runCollector, setConsent, startFlow, walkChain };
296
+ export { code as Code, type CommandTypes, Commands, Const, type CreateCollector, type HandleCommandFn, type RunState, type StartFlow, type StorageType, addDestination, callDestinationOn, commonHandleCommand, createEvent, createPush, createPushResult, destinationInit, destinationPush, extractTransformerNextMap, initDestinations, initSource, initSources, mergeEnvironments, on, onApply, processConsent, pushToDestinations, registerDestination, runCollector, startFlow, walkChain };
package/dist/index.d.ts CHANGED
@@ -65,13 +65,13 @@ declare const Const: {
65
65
  };
66
66
 
67
67
  /**
68
- * Sets the consent state and processes the queue.
69
- *
70
- * @param collector - The walkerOS collector instance.
71
- * @param data - The consent data to set.
72
- * @returns The result of the push operation.
68
+ * Processes consent data: coerces to boolean, updates collector state.
69
+ * Does NOT notify or process queues — caller handles that.
73
70
  */
74
- declare function setConsent(collector: Collector.Instance, data: WalkerOS.Consent): Promise<Elb.PushResult>;
71
+ declare function processConsent(collector: Collector.Instance, data: WalkerOS.Consent): {
72
+ update: WalkerOS.Consent;
73
+ runQueue: boolean;
74
+ };
75
75
 
76
76
  declare function startFlow<ElbPush extends Elb.Fn = Elb.Fn>(initConfig?: Collector.InitConfig): Promise<StartFlow<ElbPush>>;
77
77
 
@@ -137,6 +137,12 @@ declare function destinationPush<Destination extends Destination.Instance>(colle
137
137
  * @returns The push result.
138
138
  */
139
139
  declare function createPushResult(partialResult?: Partial<Elb.PushResult>): Elb.PushResult;
140
+ /**
141
+ * Register a single destination from its init definition.
142
+ * Merges code config, user config, and chain config.
143
+ * Used by initDestinations and activatePending.
144
+ */
145
+ declare function registerDestination(def: Destination.Init): Destination.Instance;
140
146
  /**
141
147
  * Initializes a map of destinations using ONLY the unified code/config/env pattern.
142
148
  * Does NOT call destination.init() - that happens later during push with proper consent checks.
@@ -145,7 +151,7 @@ declare function createPushResult(partialResult?: Partial<Elb.PushResult>): Elb.
145
151
  * @param collector - The collector instance for destination init context.
146
152
  * @returns The initialized destinations.
147
153
  */
148
- declare function initDestinations(_collector: Collector.Instance, destinations?: Destination.InitDestinations): Promise<Collector.Destinations>;
154
+ declare function initDestinations(collector: Collector.Instance, destinations?: Destination.InitDestinations): Promise<Collector.Destinations>;
149
155
  /**
150
156
  * Merges destination environment with config environment
151
157
  * Config env takes precedence over destination env for overrides
@@ -186,7 +192,7 @@ declare function runCollector(collector: Collector.Instance, state?: RunState):
186
192
  * @param type The type of the event to listen for.
187
193
  * @param option The callback function or an array of callback functions.
188
194
  */
189
- declare function on(collector: Collector.Instance, type: On.Types, option: WalkerOS.SingleOrArray<On.Options>): void;
195
+ declare function on(collector: Collector.Instance, type: On.Types, option: WalkerOS.SingleOrArray<On.Options>): Promise<void>;
190
196
  /**
191
197
  * Calls a destination's on() handler with proper context.
192
198
  * Used by both onApply() for immediate calls and destinationInit() for flushing queued events.
@@ -200,14 +206,15 @@ declare function callDestinationOn(collector: Collector.Instance, destination: D
200
206
  * @param options The options for the callbacks.
201
207
  * @param config The consent configuration.
202
208
  */
203
- declare function onApply(collector: Collector.Instance, type: On.Types, options?: Array<On.Options>, config?: WalkerOS.Consent): void;
209
+ declare function onApply(collector: Collector.Instance, type: On.Types, options?: Array<On.Options>, config?: unknown): Promise<boolean>;
204
210
 
205
211
  /**
206
- * Initialize sources using the code/config/env pattern
207
- *
208
- * @param collector - The WalkerOS collector instance
209
- * @param sources - Map of source definitions with code/config/env
210
- * @returns Initialized sources
212
+ * Initialize a single source. Extracted from the initSources loop body
213
+ * so it can be reused by the pending-source activator.
214
+ */
215
+ declare function initSource(collector: Collector.Instance, sourceId: string, sourceDefinition: Source.InitSource): Promise<Source.Instance | undefined>;
216
+ /**
217
+ * Initialize sources. Sources with `require` are deferred to collector.pending.
211
218
  */
212
219
  declare function initSources(collector: Collector.Instance, sources?: Source.InitSources): Promise<Collector.Sources>;
213
220
 
@@ -286,4 +293,4 @@ declare function walkChain(startId: string | string[] | undefined, transformers?
286
293
  next?: string | string[];
287
294
  }>): string[];
288
295
 
289
- export { code as Code, type CommandTypes, Commands, Const, type CreateCollector, type HandleCommandFn, type RunState, type StartFlow, type StorageType, addDestination, callDestinationOn, commonHandleCommand, createEvent, createPush, createPushResult, destinationInit, destinationPush, extractTransformerNextMap, initDestinations, initSources, mergeEnvironments, on, onApply, pushToDestinations, runCollector, setConsent, startFlow, walkChain };
296
+ export { code as Code, type CommandTypes, Commands, Const, type CreateCollector, type HandleCommandFn, type RunState, type StartFlow, type StorageType, addDestination, callDestinationOn, commonHandleCommand, createEvent, createPush, createPushResult, destinationInit, destinationPush, extractTransformerNextMap, initDestinations, initSource, initSources, mergeEnvironments, on, onApply, processConsent, pushToDestinations, registerDestination, runCollector, startFlow, walkChain };
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- "use strict";var e,n=Object.defineProperty,t=Object.getOwnPropertyDescriptor,o=Object.getOwnPropertyNames,s=Object.prototype.hasOwnProperty,r={};((e,t)=>{for(var o in t)n(e,o,{get:t[o],enumerable:!0})})(r,{Code:()=>i,Commands:()=>a,Const:()=>c,addDestination:()=>q,callDestinationOn:()=>m,commonHandleCommand:()=>I,createEvent:()=>M,createPush:()=>G,createPushResult:()=>E,destinationInit:()=>P,destinationPush:()=>A,extractTransformerNextMap:()=>b,initDestinations:()=>x,initSources:()=>U,mergeEnvironments:()=>D,on:()=>d,onApply:()=>h,pushToDestinations:()=>j,runCollector:()=>T,setConsent:()=>S,startFlow:()=>V,walkChain:()=>v}),module.exports=(e=r,((e,r,i,a)=>{if(r&&"object"==typeof r||"function"==typeof r)for(let c of o(r))s.call(e,c)||c===i||n(e,c,{get:()=>r[c],enumerable:!(a=t(r,c))||a.enumerable});return e})(n({},"__esModule",{value:!0}),e));var i={},a={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",User:"user",Walker:"walker"},c={Commands:a,Utils:{Storage:{Cookie:"cookie",Local:"local",Session:"session"}}},u=require("@walkeros/core"),l=require("@walkeros/core"),g=require("@walkeros/core"),f=require("@walkeros/core");function d(e,n,t){const o=e.on,s=o[n]||[],r=(0,g.isArray)(t)?t:[t];r.forEach(e=>{s.push(e)}),o[n]=s,h(e,n,r)}function m(e,n,t,o,s){if(!n.on)return;const r=n.type||"unknown",i=e.logger.scope(r).scope("on").scope(o),a={collector:e,logger:i,id:t,config:n.config,data:s,env:D(n.env,n.config.env)};(0,f.tryCatch)(n.on)(o,a)}function h(e,n,t,o){let s,r=t||[];switch(t||(r=e.on[n]||[]),n){case c.Commands.Consent:s=o||e.consent;break;case c.Commands.Session:s=e.session;break;case c.Commands.Ready:case c.Commands.Run:default:s=void 0}if(Object.values(e.sources).forEach(e=>{e.on&&(0,f.tryCatch)(e.on)(n,s)}),Object.entries(e.destinations).forEach(([t,o])=>{if(o.on){if(!o.config.init)return o.queueOn=o.queueOn||[],void o.queueOn.push({type:n,data:s});m(e,o,t,n,s)}}),r.length)switch(n){case c.Commands.Consent:!function(e,n,t){const o=t||e.consent;n.forEach(n=>{Object.keys(o).filter(e=>e in n).forEach(t=>{(0,f.tryCatch)(n[t])(e,o)})})}(e,r,o);break;case c.Commands.Ready:case c.Commands.Run:!function(e,n){e.allowed&&n.forEach(n=>{(0,f.tryCatch)(n)(e)})}(e,r);break;case c.Commands.Session:!function(e,n){if(!e.session)return;n.forEach(n=>{(0,f.tryCatch)(n)(e,e.session)})}(e,r)}}var p=require("@walkeros/core");function b(e){const n={};for(const[t,o]of Object.entries(e))o.config?.next?n[t]={next:o.config.next}:n[t]={};return n}function y(e,n){const t=e.config||{},o=e[n];return void 0!==o?{config:{...t,[n]:o},chainValue:o}:{config:t,chainValue:void 0}}function v(e,n={}){if(!e)return[];if(Array.isArray(e))return e;const t=[],o=new Set;let s=e;for(;s&&n[s]&&!o.has(s);){o.add(s),t.push(s);const e=n[s].next;if(Array.isArray(e)){t.push(...e);break}s=e}return t}async function k(e,n,t){if(n.init&&!n.config.init){const o=n.type||"unknown",s=e.logger.scope(`transformer:${o}`),r={collector:e,logger:s,id:t,config:n.config,env:O(n.config.env)};s.debug("init");const i=await(0,p.useHooks)(n.init,"TransformerInit",e.hooks)(r);if(!1===i)return!1;n.config={...i||n.config,init:!0},s.debug("init done")}return!0}async function w(e,n,t,o,s){const r=n.type||"unknown",i=e.logger.scope(`transformer:${r}`),a={collector:e,logger:i,id:t,ingest:s,config:n.config,env:O(n.config.env)};i.debug("push",{event:o.name});const c=await(0,p.useHooks)(n.push,"TransformerPush",e.hooks)(o,a);return i.debug("push done"),c}async function C(e,n,t,o,s){let r=o;for(const o of t){const t=n[o];if(!t){e.logger.info(`Transformer not found: ${o}`);continue}if(!await(0,p.tryCatchAsync)(k)(e,t,o))return e.logger.info(`Transformer init failed: ${o}`),null;const i=await(0,p.tryCatchAsync)(w,n=>(e.logger.scope(`transformer:${t.type||"unknown"}`).error("Push failed",{error:n}),!1))(e,t,o,r,s);if(!1===i)return null;void 0!==i&&(r=i)}return r}function O(e){return e&&(0,p.isObject)(e)?e:{}}async function q(e,n,t){const{code:o,config:s={},env:r={},before:i}=n;if(!(0,l.isFunction)(o.push))return E({ok:!1,failed:{invalid:{type:"invalid",error:"Destination code must have a push method"}}});const a=t||s||{init:!1},c=i?{...a,before:i}:a,u={...o,config:c,env:D(o.env,r)};let g=u.config.id;if(!g)do{g=(0,l.getId)(4)}while(e.destinations[g]);return e.destinations[g]=u,!1!==u.config.queue&&(u.queuePush=[...e.queue]),j(e,void 0,{},{[g]:u})}async function j(e,n,t={},o){const{allowed:s,consent:r,globals:i,user:a}=e;if(!s)return E({ok:!1});n&&e.queue.push(n),o||(o=e.destinations);const c=await Promise.all(Object.entries(o||{}).map(async([o,s])=>{let c=(s.queuePush||[]).map(e=>({...e,consent:r}));if(s.queuePush=[],n){const e=(0,l.clone)(n);c.push(e)}if(!c.length&&!s.queueOn?.length)return{id:o,destination:s,skipped:!0};if(!c.length&&s.queueOn?.length){const n=await(0,l.tryCatchAsync)(P)(e,s,o);return{id:o,destination:s,skipped:!n}}const u=[],g=c.filter(e=>{const n=(0,l.getGrantedConsent)(s.config.consent,r,e.consent);return!n||(e.consent=n,u.push(e),!1)});if(s.queuePush.concat(g),!u.length)return{id:o,destination:s,queue:c};if(!await(0,l.tryCatchAsync)(P)(e,s,o))return{id:o,destination:s,queue:c};let f,d;s.dlq||(s.dlq=[]);const m=function(e,n){const t=e.config.before;return t?v(t,b(n)):[]}(s,e.transformers);return await Promise.all(u.map(async n=>{n.globals=(0,l.assign)(i,n.globals),n.user=(0,l.assign)(a,n.user);let r=n;if(m.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const o=await C(e,e.transformers,m,n,t.ingest);if(null===o)return n;r=o}const c=await(0,l.tryCatchAsync)(A,n=>{const t=s.type||"unknown";e.logger.scope(t).error("Push failed",{error:n,event:r.name}),f=n,s.dlq.push([r,n])})(e,s,o,r,t.ingest);return void 0!==c&&(d=c),n})),{id:o,destination:s,error:f,response:d}})),u={},g={},f={};for(const e of c){if(e.skipped)continue;const n=e.destination,t={type:n.type||"unknown",data:e.response};e.error?(t.error=e.error,f[e.id]=t):e.queue&&e.queue.length?(n.queuePush=(n.queuePush||[]).concat(e.queue),g[e.id]=t):u[e.id]=t}return E({event:n,...Object.keys(u).length&&{done:u},...Object.keys(g).length&&{queued:g},...Object.keys(f).length&&{failed:f}})}async function P(e,n,t){if(n.init&&!n.config.init){const o=n.type||"unknown",s=e.logger.scope(o),r={collector:e,logger:s,id:t,config:n.config,env:D(n.env,n.config.env)};s.debug("init");const i=await(0,l.useHooks)(n.init,"DestinationInit",e.hooks)(r);if(!1===i)return i;if(n.config={...i||n.config,init:!0},n.queueOn?.length){const o=n.queueOn;n.queueOn=[];for(const{type:s,data:r}of o)m(e,n,t,s,r)}s.debug("init done")}return!0}async function A(e,n,t,o,s){const{config:r}=n,i=await(0,l.processEventMapping)(o,r,e);if(i.ignore)return!1;const a=n.type||"unknown",c=e.logger.scope(a),u={collector:e,logger:c,id:t,config:r,data:i.data,rule:i.mapping,ingest:s,env:D(n.env,r.env)},g=i.mapping,f=i.mappingKey||"* *";if(!g?.batch||!n.pushBatch){c.debug("push",{event:i.event.name});const t=await(0,l.useHooks)(n.push,"DestinationPush",e.hooks)(i.event,u);return c.debug("push done"),t}{if(n.batches=n.batches||{},!n.batches[f]){const o={key:f,events:[],data:[]};n.batches[f]={batched:o,batchFn:(0,l.debounce)(()=>{const o=n.batches[f].batched,i={collector:e,logger:c,id:t,config:r,data:void 0,rule:g,ingest:s,env:D(n.env,r.env)};c.debug("push batch",{events:o.events.length}),(0,l.useHooks)(n.pushBatch,"DestinationPushBatch",e.hooks)(o,i),c.debug("push batch done"),o.events=[],o.data=[]},g.batch)}}const o=n.batches[f];o.batched.events.push(i.event),(0,l.isDefined)(i.data)&&o.batched.data.push(i.data),o.batchFn()}return!0}function E(e){return{ok:!e?.failed,...e}}async function x(e,n={}){const t={};for(const[e,o]of Object.entries(n)){const{code:n,config:s={},env:r={}}=o,{config:i}=y(o,"before"),a={...n.config,...s,...i},c=D(n.env,r);t[e]={...n,config:a,env:c}}return t}function D(e,n){return e||n?n?e&&(0,l.isObject)(e)&&(0,l.isObject)(n)?{...e,...n}:n:e:{}}async function S(e,n){const{consent:t}=e;let o=!1;const s={};return Object.entries(n).forEach(([e,n])=>{const t=!!n;s[e]=t,o=o||t}),e.consent=(0,u.assign)(t,s),h(e,"consent",void 0,s),o?j(e):E({ok:!0})}var $=require("@walkeros/core"),H=require("@walkeros/core"),R=require("@walkeros/core");async function I(e,n,t,o){let s;switch(n){case c.Commands.Config:(0,R.isObject)(t)&&(0,H.assign)(e.config,t,{shallow:!1});break;case c.Commands.Consent:(0,R.isObject)(t)&&(s=await S(e,t));break;case c.Commands.Custom:(0,R.isObject)(t)&&(e.custom=(0,H.assign)(e.custom,t));break;case c.Commands.Destination:(0,R.isObject)(t)&&"code"in t&&(0,R.isObject)(t.code)&&(s=await q(e,t,o));break;case c.Commands.Globals:(0,R.isObject)(t)&&(e.globals=(0,H.assign)(e.globals,t));break;case c.Commands.On:(0,H.isString)(t)&&d(e,t,o);break;case c.Commands.Ready:h(e,"ready");break;case c.Commands.Run:s=await T(e,t);break;case c.Commands.Session:h(e,"session");break;case c.Commands.User:(0,R.isObject)(t)&&(0,H.assign)(e.user,t,{shallow:!1})}return s||E({ok:!0})}function M(e,n){if(!n.name)throw new Error("Event name is required");const[t,o]=n.name.split(" ");if(!t||!o)throw new Error("Event name is invalid");++e.count;const{timestamp:s=Date.now(),group:r=e.group,count:i=e.count}=n,{name:a=`${t} ${o}`,data:c={},context:u={},globals:l=e.globals,custom:g={},user:f=e.user,nested:d=[],consent:m=e.consent,id:h=`${s}-${r}-${i}`,trigger:p="",entity:b=t,action:y=o,timing:v=0,version:k={source:e.version,tagging:e.config.tagging||0},source:w={type:"collector",id:"",previous_id:""}}=n;return{name:a,data:c,context:u,globals:l,custom:g,user:f,nested:d,consent:m,id:h,trigger:p,entity:b,action:y,timestamp:s,timing:v,group:r,count:i,version:k,source:w}}async function T(e,n){e.allowed=!0,e.count=0,e.group=(0,H.getId)(),e.timing=Date.now(),n&&(n.consent&&(e.consent=(0,H.assign)(e.consent,n.consent)),n.user&&(e.user=(0,H.assign)(e.user,n.user)),n.globals&&(e.globals=(0,H.assign)(e.config.globalsStatic||{},n.globals)),n.custom&&(e.custom=(0,H.assign)(e.custom,n.custom))),Object.values(e.destinations).forEach(e=>{e.queuePush=[]}),e.queue=[],e.round++;const t=await j(e);return h(e,"run"),t}var F=require("@walkeros/core");function G(e,n){return(0,F.useHooks)(async(t,o={})=>await(0,F.tryCatchAsync)(async()=>{const{id:s,ingest:r,mapping:i,preChain:a}=o;let c=t;const u=r?Object.freeze(r):void 0;if(i){const n=await(0,F.processEventMapping)(c,i,e);if(n.ignore)return E({ok:!0});if(i.consent){if(!(0,F.getGrantedConsent)(i.consent,e.consent,n.event.consent))return E({ok:!0})}c=n.event}if(a?.length&&e.transformers&&Object.keys(e.transformers).length>0){const n=await C(e,e.transformers,a,c,u);if(null===n)return E({ok:!0});c=n}const l=n(c),g=M(e,l);return await j(e,g,{id:s,ingest:u})},()=>E({ok:!1}))(),"Push",e.hooks)}var _=require("@walkeros/core");async function B(e){const n=(0,$.assign)({globalsStatic:{},sessionStatic:{},tagging:0,run:!0},e,{merge:!1,extend:!1}),t={level:e.logger?.level,handler:e.logger?.handler},o=(0,$.createLogger)(t),s={...n.globalsStatic,...e.globals},r={allowed:!1,config:n,consent:e.consent||{},count:0,custom:e.custom||{},destinations:{},transformers:{},globals:s,group:"",hooks:{},logger:o,on:{},queue:[],round:0,session:void 0,timing:Date.now(),user:e.user||{},version:"1.1.2",sources:{},push:void 0,command:void 0};return r.push=G(r,e=>({timing:Math.round((Date.now()-r.timing)/10)/100,source:{type:"collector",id:"",previous_id:""},...e})),r.command=function(e,n){return(0,_.useHooks)(async(t,o,s)=>await(0,_.tryCatchAsync)(async()=>await n(e,t,o,s),()=>E({ok:!1}))(),"Command",e.hooks)}(r,I),r.destinations=await x(0,e.destinations||{}),r.transformers=await async function(e,n={}){const t={};for(const[o,s]of Object.entries(n)){const{code:n,env:r={}}=s,{config:i}=y(s,"next"),a=e.logger.scope("transformer").scope(o),c={collector:e,logger:a,id:o,config:i,env:r},u=await n(c);t[o]=u}return t}(r,e.transformers||{}),r}var L=require("@walkeros/core");async function U(e,n={}){const t={};for(const[o,s]of Object.entries(n)){const{code:n,config:r={},env:i={},primary:a,next:c}=s;let u;const l=v(c,b(e.transformers)),g=(n,t={})=>e.push(n,{...t,id:o,ingest:u,mapping:r,preChain:l}),f=e.logger.scope("source").scope(o),d={push:g,command:e.command,sources:e.sources,elb:e.sources.elb.push,logger:f,...i},m={collector:e,logger:f,id:o,config:r,env:d,setIngest:async n=>{u=r.ingest?await(0,L.getMappingValue)(n,r.ingest,{collector:e}):void 0}},h=await(0,L.tryCatchAsync)(n)(m);if(!h)continue;const p=h.type||"unknown",y=e.logger.scope(p).scope(o);d.logger=y,a&&(h.config={...h.config,primary:a}),t[o]=h}return t}async function V(e){e=e||{};const n=await B(e),t=(o=n,{type:"elb",config:{},push:async(e,n,t,s,r,i)=>{if("string"==typeof e&&e.startsWith("walker ")){const s=e.replace("walker ","");return o.command(s,n,t)}let a;if("string"==typeof e)a={name:e},n&&"object"==typeof n&&!Array.isArray(n)&&(a.data=n);else{if(!e||"object"!=typeof e)return E({ok:!1});a=e,n&&"object"==typeof n&&!Array.isArray(n)&&(a.data={...a.data||{},...n})}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;n.sources.elb=t;const s=await U(n,e.sources||{});Object.assign(n.sources,s);const{consent:r,user:i,globals:a,custom:c}=e;r&&await n.command("consent",r),i&&await n.command("user",i),a&&Object.assign(n.globals,a),c&&Object.assign(n.custom,c),n.config.run&&await n.command("run");let u=t.push;const l=Object.values(n.sources).filter(e=>"elb"!==e.type),g=l.find(e=>e.config.primary);return g?u=g.push:l.length>0&&(u=l[0].push),{collector:n,elb:u}}//# sourceMappingURL=index.js.map
1
+ "use strict";var e,n=Object.defineProperty,t=Object.getOwnPropertyDescriptor,o=Object.getOwnPropertyNames,s=Object.prototype.hasOwnProperty,i={};((e,t)=>{for(var o in t)n(e,o,{get:t[o],enumerable:!0})})(i,{Code:()=>r,Commands:()=>a,Const:()=>c,addDestination:()=>E,callDestinationOn:()=>P,commonHandleCommand:()=>G,createEvent:()=>B,createPush:()=>N,createPushResult:()=>R,destinationInit:()=>$,destinationPush:()=>H,extractTransformerNextMap:()=>y,initDestinations:()=>M,initSource:()=>j,initSources:()=>A,mergeEnvironments:()=>T,on:()=>D,onApply:()=>x,processConsent:()=>l,pushToDestinations:()=>S,registerDestination:()=>I,runCollector:()=>U,startFlow:()=>W,walkChain:()=>k}),module.exports=(e=i,((e,i,r,a)=>{if(i&&"object"==typeof i||"function"==typeof i)for(let c of o(i))s.call(e,c)||c===r||n(e,c,{get:()=>i[c],enumerable:!(a=t(i,c))||a.enumerable});return e})(n({},"__esModule",{value:!0}),e));var r={},a={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",User:"user",Walker:"walker"},c={Commands:a,Utils:{Storage:{Cookie:"cookie",Local:"local",Session:"session"}}},u=require("@walkeros/core");function l(e,n){let t=!1;const o={};return Object.entries(n).forEach(([e,n])=>{const s=!!n;o[e]=s,t=t||s}),e.consent=(0,u.assign)(e.consent,o),{update:o,runQueue:t}}var g=require("@walkeros/core"),f=require("@walkeros/core"),d=require("@walkeros/core"),m=require("@walkeros/core"),h=require("@walkeros/core"),p=require("@walkeros/core");function b(e){return null!=e&&!1!==e&&"object"==typeof e&&!0===e.__branch}function y(e){const n={};for(const[t,o]of Object.entries(e))o.config?.next?n[t]={next:o.config.next}:n[t]={};return n}function w(e,n){const t=e.config||{},o=e[n];return void 0!==o?{config:{...t,[n]:o},chainValue:o}:{config:t,chainValue:void 0}}function k(e,n={}){if(!e)return[];if(Array.isArray(e))return e;const t=[],o=new Set;let s=e;for(;s&&n[s]&&!o.has(s);){o.add(s),t.push(s);const e=n[s].next;if(Array.isArray(e)){t.push(...e);break}s=e}return t}async function v(e,n,t){if(n.init&&!n.config.init){const o=n.type||"unknown",s=e.logger.scope(`transformer:${o}`),i={collector:e,logger:s,id:t,config:n.config,env:q(n.config.env)};s.debug("init");const r=await(0,p.useHooks)(n.init,"TransformerInit",e.hooks)(i);if(!1===r)return!1;n.config={...r||n.config,init:!0},s.debug("init done")}return!0}async function C(e,n,t,o,s){const i=n.type||"unknown",r=e.logger.scope(`transformer:${i}`),a={collector:e,logger:r,id:t,ingest:s,config:n.config,env:q(n.config.env)};r.debug("push",{event:o.name});const c=await(0,p.useHooks)(n.push,"TransformerPush",e.hooks)(o,a);return r.debug("push done"),c}async function O(e,n,t,o,s){let i=o;for(const o of t){const t=n[o];if(!t){e.logger.info(`Transformer not found: ${o}`);continue}if(!await(0,p.tryCatchAsync)(v)(e,t,o))return e.logger.info(`Transformer init failed: ${o}`),null;const r=await(0,p.tryCatchAsync)(C,n=>(e.logger.scope(`transformer:${t.type||"unknown"}`).error("Push failed",{error:n}),!1))(e,t,o,i,s);if(!1===r)return null;if(b(r)){const t=k(r.next,y(n));return t.length>0?O(e,n,t,r.event,s):(e.logger.info(`Branch target not found: ${JSON.stringify(r.next)}`),null)}void 0!==r&&(i=r)}return i}function q(e){return e&&(0,p.isObject)(e)?e:{}}async function j(e,n,t){const{code:o,config:s={},env:i={},primary:r,next:a}=t;let c;const u=k(a,y(e.transformers)),l=e.logger.scope("source").scope(n),g={push:(t,o={})=>e.push(t,{...o,id:n,ingest:c,mapping:s,preChain:u}),command:e.command,sources:e.sources,elb:e.sources.elb.push,logger:l,...i},f={collector:e,logger:l,id:n,config:s,env:g,setIngest:async n=>{c=s.ingest?await(0,h.getMappingValue)(n,s.ingest,{collector:e}):void 0}},d=await(0,h.tryCatchAsync)(o)(f);if(!d)return;const m=d.type||"unknown",p=e.logger.scope(m).scope(n);return g.logger=p,r&&(d.config={...d.config,primary:r}),d}async function A(e,n={}){const t={};for(const[o,s]of Object.entries(n)){const{config:n={}}=s;if(n.require&&n.require.length>0){e.pending.sources[o]=s;continue}const i=await j(e,o,s);i&&(t[o]=i)}return t}async function D(e,n,t){const o=e.on,s=o[n]||[],i=(0,d.isArray)(t)?t:[t];i.forEach(e=>{s.push(e)}),o[n]=s,await x(e,n,i)}function P(e,n,t,o,s){if(!n.on)return;const i=n.type||"unknown",r=e.logger.scope(i).scope("on").scope(o),a={collector:e,logger:r,id:t,config:n.config,data:s,env:T(n.env,n.config.env)};(0,m.tryCatch)(n.on)(o,a)}async function x(e,n,t,o){let s,i=t||[];switch(t||(i=e.on[n]||[]),n){case c.Commands.Consent:s=o||e.consent;break;case c.Commands.Session:s=e.session;break;case c.Commands.User:s=o||e.user;break;case c.Commands.Custom:s=o||e.custom;break;case c.Commands.Globals:s=o||e.globals;break;case c.Commands.Config:s=o||e.config;break;case c.Commands.Ready:case c.Commands.Run:default:s=void 0}let r=!1;for(const t of Object.values(e.sources))if(t.on){!1===await(0,m.tryCatchAsync)(t.on)(n,s)&&(r=!0)}if(Object.entries(e.destinations).forEach(([t,o])=>{if(o.on){if(!o.config.init)return o.queueOn=o.queueOn||[],void o.queueOn.push({type:n,data:s});P(e,o,t,n,s)}}),(Object.keys(e.pending.sources).length>0||Object.keys(e.pending.destinations).length>0)&&await async function(e,n){for(const[t,o]of Object.entries(e.pending.sources)){if(!e.pending.sources[t]||e.sources[t])continue;const s=o.config?.require;if(!s)continue;const i=s.indexOf(n);if(-1===i)continue;if(s.splice(i,1),s.length>0)continue;delete e.pending.sources[t];const r=await j(e,t,o);r&&(e.sources[t]=r)}for(const[t,o]of Object.entries(e.pending.destinations)){if(!e.pending.destinations[t]||e.destinations[t])continue;const s=o.config?.require;if(!s)continue;const i=s.indexOf(n);if(-1===i)continue;if(s.splice(i,1),s.length>0)continue;delete e.pending.destinations[t];const r=I(o);!1!==r.config.queue&&(r.queuePush=[...e.queue]),e.destinations[t]=r}}(e,n),!i.length)return!r;switch(n){case c.Commands.Consent:!function(e,n,t){const o=t||e.consent;n.forEach(n=>{Object.keys(o).filter(e=>e in n).forEach(t=>{(0,m.tryCatch)(n[t])(e,o)})})}(e,i,o);break;case c.Commands.Ready:case c.Commands.Run:!function(e,n){e.allowed&&n.forEach(n=>{(0,m.tryCatch)(n)(e)})}(e,i);break;case c.Commands.Session:!function(e,n){if(!e.session)return;n.forEach(n=>{(0,m.tryCatch)(n)(e,e.session)})}(e,i);break;default:i.forEach(n=>{"function"==typeof n&&(0,m.tryCatch)(n)(e,s)})}return!r}async function E(e,n,t){const{code:o,config:s={},env:i={},before:r}=n;if(!(0,f.isFunction)(o.push))return R({ok:!1,failed:{invalid:{type:"invalid",error:"Destination code must have a push method"}}});const a=t||s||{init:!1},c=r?{...a,before:r}:a,u={...o,config:c,env:T(o.env,i)};let l=u.config.id;if(!l)do{l=(0,f.getId)(4)}while(e.destinations[l]);return e.destinations[l]=u,!1!==u.config.queue&&(u.queuePush=[...e.queue]),S(e,void 0,{},{[l]:u})}async function S(e,n,t={},o){const{allowed:s,consent:i,globals:r,user:a}=e;if(!s)return R({ok:!1});n&&(e.queue.push(n),e.status.in++),o||(o=e.destinations);const c=await Promise.all(Object.entries(o||{}).map(async([o,s])=>{let c=(s.queuePush||[]).map(e=>({...e,consent:i}));if(s.queuePush=[],n){const e=(0,f.clone)(n);c.push(e)}if(!c.length&&!s.queueOn?.length)return{id:o,destination:s,skipped:!0};if(!c.length&&s.queueOn?.length){const n=await(0,f.tryCatchAsync)($)(e,s,o);return{id:o,destination:s,skipped:!n}}const u=[],l=c.filter(e=>{const n=(0,f.getGrantedConsent)(s.config.consent,i,e.consent);return!n||(e.consent=n,u.push(e),!1)});if(s.queuePush.push(...l),!u.length)return{id:o,destination:s,queue:c};if(!await(0,f.tryCatchAsync)($)(e,s,o))return{id:o,destination:s,queue:c};let g,d;s.dlq||(s.dlq=[]);const m=function(e,n){const t=e.config.before;return t?k(t,y(n)):[]}(s,e.transformers);let h=0;return await Promise.all(u.map(async n=>{n.globals=(0,f.assign)(r,n.globals),n.user=(0,f.assign)(a,n.user);let i=n;if(m.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const o=await O(e,e.transformers,m,n,t.ingest);if(null===o)return n;i=o}const c=Date.now(),u=await(0,f.tryCatchAsync)(H,n=>{const t=s.type||"unknown";e.logger.scope(t).error("Push failed",{error:n,event:i.name}),g=n,s.dlq.push([i,n])})(e,s,o,i,t.ingest);return h+=Date.now()-c,void 0!==u&&(d=u),n})),{id:o,destination:s,error:g,response:d,totalDuration:h}})),u={},l={},g={};for(const n of c){if(n.skipped)continue;const t=n.destination,o={type:t.type||"unknown",data:n.response};e.status.destinations[n.id]||(e.status.destinations[n.id]={count:0,failed:0,duration:0});const s=e.status.destinations[n.id],i=Date.now();n.error?(o.error=n.error,g[n.id]=o,s.failed++,s.lastAt=i,s.duration+=n.totalDuration||0,e.status.failed++):n.queue&&n.queue.length?(t.queuePush=(t.queuePush||[]).concat(n.queue),l[n.id]=o):(u[n.id]=o,s.count++,s.lastAt=i,s.duration+=n.totalDuration||0,e.status.out++)}return R({event:n,...Object.keys(u).length&&{done:u},...Object.keys(l).length&&{queued:l},...Object.keys(g).length&&{failed:g}})}async function $(e,n,t){if(n.init&&!n.config.init){const o=n.type||"unknown",s=e.logger.scope(o),i={collector:e,logger:s,id:t,config:n.config,env:T(n.env,n.config.env)};s.debug("init");const r=await(0,f.useHooks)(n.init,"DestinationInit",e.hooks)(i);if(!1===r)return r;if(n.config={...r||n.config,init:!0},n.queueOn?.length){const o=n.queueOn;n.queueOn=[];for(const{type:s,data:i}of o)P(e,n,t,s,i)}s.debug("init done")}return!0}async function H(e,n,t,o,s){const{config:i}=n,r=await(0,f.processEventMapping)(o,i,e);if(r.ignore)return!1;const a=n.type||"unknown",c=e.logger.scope(a),u={collector:e,logger:c,id:t,config:i,data:r.data,rule:r.mapping,ingest:s,env:T(n.env,i.env)},l=r.mapping,g=r.mappingKey||"* *";if(!l?.batch||!n.pushBatch){c.debug("push",{event:r.event.name});const t=await(0,f.useHooks)(n.push,"DestinationPush",e.hooks)(r.event,u);return c.debug("push done"),t}{if(n.batches=n.batches||{},!n.batches[g]){const o={key:g,events:[],data:[]};n.batches[g]={batched:o,batchFn:(0,f.debounce)(()=>{const o=n.batches[g].batched,r={collector:e,logger:c,id:t,config:i,data:void 0,rule:l,ingest:s,env:T(n.env,i.env)};c.debug("push batch",{events:o.events.length}),(0,f.useHooks)(n.pushBatch,"DestinationPushBatch",e.hooks)(o,r),c.debug("push batch done"),o.events=[],o.data=[]},l.batch)}}const o=n.batches[g];o.batched.events.push(r.event),(0,f.isDefined)(r.data)&&o.batched.data.push(r.data),o.batchFn()}return!0}function R(e){return{ok:!e?.failed,...e}}function I(e){const{code:n,config:t={},env:o={}}=e,{config:s}=w(e,"before"),i={...n.config,...t,...s},r=T(n.env,o);return{...n,config:i,env:r}}async function M(e,n={}){const t={};for(const[o,s]of Object.entries(n))s.config?.require?.length?e.pending.destinations[o]=s:t[o]=I(s);return t}function T(e,n){return e||n?n?e&&(0,f.isObject)(e)&&(0,f.isObject)(n)?{...e,...n}:n:e:{}}var _=require("@walkeros/core"),F=require("@walkeros/core");async function G(e,n,t,o){let s,i,r=!1,a=!1;switch(n){case c.Commands.Config:(0,F.isObject)(t)&&((0,_.assign)(e.config,t,{shallow:!1}),i=t,r=!0);break;case c.Commands.Consent:if((0,F.isObject)(t)){const{update:n,runQueue:o}=l(e,t);i=n,r=!0,a=o}break;case c.Commands.Custom:(0,F.isObject)(t)&&(e.custom=(0,_.assign)(e.custom,t),i=t,r=!0);break;case c.Commands.Destination:(0,F.isObject)(t)&&("code"in t&&(0,F.isObject)(t.code)?s=await E(e,t,o):(0,_.isFunction)(t.push)&&(s=await E(e,{code:t},o)));break;case c.Commands.Globals:(0,F.isObject)(t)&&(e.globals=(0,_.assign)(e.globals,t),i=t,r=!0);break;case c.Commands.On:(0,_.isString)(t)&&await D(e,t,o);break;case c.Commands.Ready:r=!0;break;case c.Commands.Run:s=await U(e,t),r=!0;break;case c.Commands.Session:r=!0;break;case c.Commands.User:(0,F.isObject)(t)&&((0,_.assign)(e.user,t,{shallow:!1}),i=t,r=!0)}return r&&await x(e,n,void 0,i),a&&(s=await S(e)),s||R({ok:!0})}function B(e,n){if(!n.name)throw new Error("Event name is required");const[t,o]=n.name.split(" ");if(!t||!o)throw new Error("Event name is invalid");++e.count;const{timestamp:s=Date.now(),group:i=e.group,count:r=e.count}=n,{name:a=`${t} ${o}`,data:c={},context:u={},globals:l=e.globals,custom:g={},user:f=e.user,nested:d=[],consent:m=e.consent,id:h=`${s}-${i}-${r}`,trigger:p="",entity:b=t,action:y=o,timing:w=0,version:k={source:e.version,tagging:e.config.tagging||0},source:v={type:"collector",id:"",previous_id:""}}=n;return{name:a,data:c,context:u,globals:l,custom:g,user:f,nested:d,consent:m,id:h,trigger:p,entity:b,action:y,timestamp:s,timing:w,group:i,count:r,version:k,source:v}}async function U(e,n){e.allowed=!0,e.count=0,e.group=(0,_.getId)(),e.timing=Date.now(),n&&(n.consent&&(e.consent=(0,_.assign)(e.consent,n.consent)),n.user&&(e.user=(0,_.assign)(e.user,n.user)),n.globals&&(e.globals=(0,_.assign)(e.config.globalsStatic||{},n.globals)),n.custom&&(e.custom=(0,_.assign)(e.custom,n.custom))),Object.values(e.destinations).forEach(e=>{e.queuePush=[]}),e.queue=[],e.round++;return await S(e)}var L=require("@walkeros/core");function N(e,n){return(0,L.useHooks)(async(t,o={})=>await(0,L.tryCatchAsync)(async()=>{const s=Date.now(),{id:i,ingest:r,mapping:a,preChain:c}=o;let u=t;const l=r?Object.freeze(r):void 0;if(a){const n=await(0,L.processEventMapping)(u,a,e);if(n.ignore)return R({ok:!0});if(a.consent){if(!(0,L.getGrantedConsent)(a.consent,e.consent,n.event.consent))return R({ok:!0})}u=n.event}if(c?.length&&e.transformers&&Object.keys(e.transformers).length>0){const n=await O(e,e.transformers,c,u,l);if(null===n)return R({ok:!0});u=n}const g=n(u),f=B(e,g),d=await S(e,f,{id:i,ingest:l});if(i){e.status.sources[i]||(e.status.sources[i]={count:0,duration:0});const n=e.status.sources[i];n.count++,n.lastAt=Date.now(),n.duration+=Date.now()-s}return d},()=>R({ok:!1}))(),"Push",e.hooks)}var V=require("@walkeros/core");async function Q(e){const n=(0,g.assign)({globalsStatic:{},sessionStatic:{},tagging:0,run:!0},e,{merge:!1,extend:!1}),t={level:e.logger?.level,handler:e.logger?.handler},o=(0,g.createLogger)(t),s={...n.globalsStatic,...e.globals},i={allowed:!1,config:n,consent:e.consent||{},count:0,custom:e.custom||{},destinations:{},transformers:{},globals:s,group:"",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||{},version:"1.2.0",sources:{},pending:{sources:{},destinations:{}},push:void 0,command:void 0};return i.push=N(i,e=>({timing:Math.round((Date.now()-i.timing)/10)/100,source:{type:"collector",id:"",previous_id:""},...e})),i.command=function(e,n){return(0,V.useHooks)(async(t,o,s)=>await(0,V.tryCatchAsync)(async()=>await n(e,t,o,s),()=>R({ok:!1}))(),"Command",e.hooks)}(i,G),i.destinations=await M(i,e.destinations||{}),i.transformers=await async function(e,n={}){const t={};for(const[o,s]of Object.entries(n)){const{code:n,env:i={}}=s,{config:r}=w(s,"next"),a=e.logger.scope("transformer").scope(o),c={collector:e,logger:a,id:o,config:r,env:i},u=await n(c);t[o]=u}return t}(i,e.transformers||{}),i}async function W(e){e=e||{};const n=await Q(e),t=(o=n,{type:"elb",config:{},push:async(e,n,t,s,i,r)=>{if("string"==typeof e&&e.startsWith("walker ")){const s=e.replace("walker ","");return o.command(s,n,t)}let a;if("string"==typeof e)a={name:e},n&&"object"==typeof n&&!Array.isArray(n)&&(a.data=n);else{if(!e||"object"!=typeof e)return R({ok:!1});a=e,n&&"object"==typeof n&&!Array.isArray(n)&&(a.data={...a.data||{},...n})}return s&&"object"==typeof s&&(a.context=s),i&&Array.isArray(i)&&(a.nested=i),r&&"object"==typeof r&&(a.custom=r),o.push(a)}});var o;n.sources.elb=t;const s=await A(n,e.sources||{});Object.assign(n.sources,s);const{consent:i,user:r,globals:a,custom:c}=e;i&&await n.command("consent",i),r&&await n.command("user",r),a&&Object.assign(n.globals,a),c&&Object.assign(n.custom,c),n.config.run&&await n.command("run");let u=t.push;const l=Object.values(n.sources).filter(e=>"elb"!==e.type),g=l.find(e=>e.config.primary);return g?u=g.push:l.length>0&&(u=l[0].push),{collector:n,elb:u}}//# sourceMappingURL=index.js.map