@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 +3 -0
- package/dist/index.d.mts +22 -15
- package/dist/index.d.ts +22 -15
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +4 -4
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
|
-
*
|
|
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
|
|
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(
|
|
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?:
|
|
209
|
+
declare function onApply(collector: Collector.Instance, type: On.Types, options?: Array<On.Options>, config?: unknown): Promise<boolean>;
|
|
204
210
|
|
|
205
211
|
/**
|
|
206
|
-
* Initialize
|
|
207
|
-
*
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
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,
|
|
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
|
-
*
|
|
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
|
|
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(
|
|
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?:
|
|
209
|
+
declare function onApply(collector: Collector.Instance, type: On.Types, options?: Array<On.Options>, config?: unknown): Promise<boolean>;
|
|
204
210
|
|
|
205
211
|
/**
|
|
206
|
-
* Initialize
|
|
207
|
-
*
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
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,
|
|
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
|