@walkeros/collector 0.4.2 → 0.5.1-next.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/README.md +29 -18
- package/dist/dev.d.mts +4 -9
- package/dist/dev.d.ts +4 -9
- package/dist/dev.js +1 -1
- package/dist/dev.js.map +1 -1
- package/dist/dev.mjs +1 -1
- package/dist/dev.mjs.map +1 -1
- package/dist/index.d.mts +47 -2
- package/dist/index.d.ts +47 -2
- 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 +2 -2
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<p align="left">
|
|
2
|
-
<a href="https://
|
|
3
|
-
<img title="elbwalker" src="https://www.
|
|
2
|
+
<a href="https://www.walkeros.io">
|
|
3
|
+
<img title="elbwalker" src="https://www.walkeros.io/img/elbwalker_logo.png" width="256px"/>
|
|
4
4
|
</a>
|
|
5
5
|
</p>
|
|
6
6
|
|
|
@@ -75,7 +75,7 @@ action by space the collector won't process it.
|
|
|
75
75
|
npm install @walkeros/collector
|
|
76
76
|
```
|
|
77
77
|
|
|
78
|
-
##
|
|
78
|
+
## Quick Start
|
|
79
79
|
|
|
80
80
|
### Basic setup
|
|
81
81
|
|
|
@@ -108,27 +108,38 @@ const { collector, elb } = await startFlow({
|
|
|
108
108
|
destinations: [
|
|
109
109
|
// add your event destinations
|
|
110
110
|
],
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
console.log(`[${level}] ${message}`);
|
|
111
|
+
logger: {
|
|
112
|
+
level: 'debug', // 'debug' | 'info' | 'warn' | 'error'
|
|
113
|
+
handler: (message, level) => {
|
|
114
|
+
console.log(`[${level}] ${message}`);
|
|
115
|
+
},
|
|
117
116
|
},
|
|
118
117
|
});
|
|
119
118
|
```
|
|
120
119
|
|
|
121
120
|
## Configuration
|
|
122
121
|
|
|
123
|
-
| Name | Type
|
|
124
|
-
| -------------- |
|
|
125
|
-
| `run` | `boolean`
|
|
126
|
-
| `sources` | `array`
|
|
127
|
-
| `destinations` | `array`
|
|
128
|
-
| `consent` | `object`
|
|
129
|
-
| `
|
|
130
|
-
|
|
131
|
-
|
|
122
|
+
| Name | Type | Description | Required | Example |
|
|
123
|
+
| -------------- | --------- | ------------------------------------------------------------ | -------- | --------------------------------------- |
|
|
124
|
+
| `run` | `boolean` | Automatically start the collector pipeline on initialization | No | `true` |
|
|
125
|
+
| `sources` | `array` | Configurations for sources providing events to the collector | No | `[{ source, config }]` |
|
|
126
|
+
| `destinations` | `array` | Configurations for destinations receiving processed events | No | `[{ destination, config }]` |
|
|
127
|
+
| `consent` | `object` | Initial consent state to control routing of events | No | `{ analytics: true, marketing: false }` |
|
|
128
|
+
| `logger` | `object` | Logger configuration with level and custom handler | No | `{ level: 'info', handler: fn }` |
|
|
129
|
+
|
|
130
|
+
## Type Definitions
|
|
131
|
+
|
|
132
|
+
See [src/types/](./src/types/) for TypeScript interfaces:
|
|
133
|
+
|
|
134
|
+
- [flow.ts](./src/types/flow.ts) - Flow configuration
|
|
135
|
+
- [collector.ts](./src/types/collector.ts) - Collector interface
|
|
136
|
+
|
|
137
|
+
## Related
|
|
138
|
+
|
|
139
|
+
- [Website Documentation](https://www.walkeros.io/docs/getting-started/flow/)
|
|
140
|
+
- [Core Package](../core/) - Types and utilities
|
|
141
|
+
- [Web Sources](../web/sources/) - Browser event sources
|
|
142
|
+
- [Server Sources](../server/sources/) - Node.js event sources
|
|
132
143
|
|
|
133
144
|
## Contribute
|
|
134
145
|
|
package/dist/dev.d.mts
CHANGED
|
@@ -1,12 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { JSONSchema } from '@walkeros/core/dev';
|
|
2
2
|
|
|
3
|
-
declare const
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
declare const schemas_settings: typeof settings;
|
|
7
|
-
declare const schemas_settingsSchema: typeof settingsSchema;
|
|
8
|
-
declare namespace schemas {
|
|
9
|
-
export { schemas_settings as settings, schemas_settingsSchema as settingsSchema };
|
|
10
|
-
}
|
|
3
|
+
declare const schemas: {
|
|
4
|
+
settings: JSONSchema;
|
|
5
|
+
};
|
|
11
6
|
|
|
12
7
|
export { schemas };
|
package/dist/dev.d.ts
CHANGED
|
@@ -1,12 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { JSONSchema } from '@walkeros/core/dev';
|
|
2
2
|
|
|
3
|
-
declare const
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
declare const schemas_settings: typeof settings;
|
|
7
|
-
declare const schemas_settingsSchema: typeof settingsSchema;
|
|
8
|
-
declare namespace schemas {
|
|
9
|
-
export { schemas_settings as settings, schemas_settingsSchema as settingsSchema };
|
|
10
|
-
}
|
|
3
|
+
declare const schemas: {
|
|
4
|
+
settings: JSONSchema;
|
|
5
|
+
};
|
|
11
6
|
|
|
12
7
|
export { schemas };
|
package/dist/dev.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var e,
|
|
1
|
+
"use strict";var e,r=Object.defineProperty,t=Object.getOwnPropertyDescriptor,o=Object.getOwnPropertyNames,s=Object.prototype.hasOwnProperty,a={};((e,t)=>{for(var o in t)r(e,o,{get:t[o],enumerable:!0})})(a,{schemas:()=>c}),module.exports=(e=a,((e,a,c,n)=>{if(a&&"object"==typeof a||"function"==typeof a)for(let l of o(a))s.call(e,l)||l===c||r(e,l,{get:()=>a[l],enumerable:!(n=t(a,l))||n.enumerable});return e})(r({},"__esModule",{value:!0}),e));var c={settings:require("@walkeros/core/dev").schemas.CollectorSchemas.initConfigJsonSchema};//# sourceMappingURL=dev.js.map
|
package/dist/dev.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/dev.ts"
|
|
1
|
+
{"version":3,"sources":["../src/dev.ts"],"sourcesContent":["import { schemas as coreSchemas, type JSONSchema } from '@walkeros/core/dev';\n\nexport const schemas: { settings: JSONSchema } = {\n settings: coreSchemas.CollectorSchemas.initConfigJsonSchema,\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBAAwD;AAEjD,IAAM,UAAoC;AAAA,EAC/C,UAAU,WAAAA,QAAY,iBAAiB;AACzC;","names":["coreSchemas"]}
|
package/dist/dev.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
import{schemas as e}from"@walkeros/core/dev";var o={settings:e.CollectorSchemas.initConfigJsonSchema};export{o as schemas};//# sourceMappingURL=dev.mjs.map
|
package/dist/dev.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/
|
|
1
|
+
{"version":3,"sources":["../src/dev.ts"],"sourcesContent":["import { schemas as coreSchemas, type JSONSchema } from '@walkeros/core/dev';\n\nexport const schemas: { settings: JSONSchema } = {\n settings: coreSchemas.CollectorSchemas.initConfigJsonSchema,\n};\n"],"mappings":";AAAA,SAAS,WAAW,mBAAoC;AAEjD,IAAM,UAAoC;AAAA,EAC/C,UAAU,YAAY,iBAAiB;AACzC;","names":[]}
|
package/dist/index.d.mts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { WalkerOS, Collector, Elb, Destination, On, Source } from '@walkeros/core';
|
|
1
|
+
import { WalkerOS, Collector, Elb, Mapping, Destination, On, Source } from '@walkeros/core';
|
|
2
2
|
|
|
3
3
|
interface RunState {
|
|
4
4
|
consent?: WalkerOS.Consent;
|
|
@@ -18,6 +18,44 @@ interface StartFlow<ElbPush extends WalkerOS.Elb = WalkerOS.Elb> {
|
|
|
18
18
|
elb: ElbPush;
|
|
19
19
|
}
|
|
20
20
|
|
|
21
|
+
interface Settings {
|
|
22
|
+
scripts?: string[];
|
|
23
|
+
init?: string;
|
|
24
|
+
on?: string;
|
|
25
|
+
push?: string;
|
|
26
|
+
pushBatch?: string;
|
|
27
|
+
}
|
|
28
|
+
interface CodeMapping extends Mapping.Rule<CodeMapping> {
|
|
29
|
+
push?: string;
|
|
30
|
+
pushBatch?: string;
|
|
31
|
+
}
|
|
32
|
+
type Types = Destination.Types<Settings, CodeMapping>;
|
|
33
|
+
type Config = Destination.Config<Types>;
|
|
34
|
+
type Context = Destination.Context<Types>;
|
|
35
|
+
type InitContext = Destination.InitContext<Types>;
|
|
36
|
+
type PushContext = Destination.PushContext<Types>;
|
|
37
|
+
type PushBatchContext = Destination.PushBatchContext<Types>;
|
|
38
|
+
type InitFn = (context: InitContext) => void;
|
|
39
|
+
type OnFn = (type: On.Types, context: Context) => void;
|
|
40
|
+
type PushFn = (event: WalkerOS.Event, context: PushContext) => void;
|
|
41
|
+
type PushBatchFn = (batch: Destination.Batch<CodeMapping>, context: PushBatchContext) => void;
|
|
42
|
+
|
|
43
|
+
type code_CodeMapping = CodeMapping;
|
|
44
|
+
type code_Config = Config;
|
|
45
|
+
type code_Context = Context;
|
|
46
|
+
type code_InitContext = InitContext;
|
|
47
|
+
type code_InitFn = InitFn;
|
|
48
|
+
type code_OnFn = OnFn;
|
|
49
|
+
type code_PushBatchContext = PushBatchContext;
|
|
50
|
+
type code_PushBatchFn = PushBatchFn;
|
|
51
|
+
type code_PushContext = PushContext;
|
|
52
|
+
type code_PushFn = PushFn;
|
|
53
|
+
type code_Settings = Settings;
|
|
54
|
+
type code_Types = Types;
|
|
55
|
+
declare namespace code {
|
|
56
|
+
export type { code_CodeMapping as CodeMapping, code_Config as Config, code_Context as Context, code_InitContext as InitContext, code_InitFn as InitFn, code_OnFn as OnFn, code_PushBatchContext as PushBatchContext, code_PushBatchFn as PushBatchFn, code_PushContext as PushContext, code_PushFn as PushFn, code_Settings as Settings, code_Types as Types };
|
|
57
|
+
}
|
|
58
|
+
|
|
21
59
|
declare const Commands: Record<CommandTypes, Collector.CommandType>;
|
|
22
60
|
declare const Const: {
|
|
23
61
|
Commands: Record<CommandTypes, string>;
|
|
@@ -103,6 +141,13 @@ declare function createPushResult(partialResult?: Partial<Elb.PushResult>): Elb.
|
|
|
103
141
|
* @returns The initialized destinations.
|
|
104
142
|
*/
|
|
105
143
|
declare function initDestinations(_collector: Collector.Instance, destinations?: Destination.InitDestinations): Promise<Collector.Destinations>;
|
|
144
|
+
/**
|
|
145
|
+
* Merges destination environment with config environment
|
|
146
|
+
* Config env takes precedence over destination env for overrides
|
|
147
|
+
*/
|
|
148
|
+
declare function mergeEnvironments(destinationEnv?: Destination.Env, configEnv?: Destination.Env): Destination.Env;
|
|
149
|
+
|
|
150
|
+
declare const destinationCode: Destination.Instance;
|
|
106
151
|
|
|
107
152
|
/**
|
|
108
153
|
* Handles common commands.
|
|
@@ -158,4 +203,4 @@ declare function onApply(collector: Collector.Instance, type: On.Types, options?
|
|
|
158
203
|
*/
|
|
159
204
|
declare function initSources(collector: Collector.Instance, sources?: Source.InitSources): Promise<Collector.Sources>;
|
|
160
205
|
|
|
161
|
-
export { type CommandTypes, Commands, Const, type CreateCollector, type HandleCommandFn, type RunState, type StartFlow, type StorageType, addDestination, commonHandleCommand, createEvent, createPush, createPushResult, destinationInit, destinationPush, initDestinations, initSources, on, onApply, pushToDestinations, runCollector, setConsent, startFlow };
|
|
206
|
+
export { code as Code, type CommandTypes, Commands, Const, type CreateCollector, type HandleCommandFn, type RunState, type StartFlow, type StorageType, addDestination, commonHandleCommand, createEvent, createPush, createPushResult, destinationCode, destinationInit, destinationPush, initDestinations, initSources, mergeEnvironments, on, onApply, pushToDestinations, runCollector, setConsent, startFlow };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { WalkerOS, Collector, Elb, Destination, On, Source } from '@walkeros/core';
|
|
1
|
+
import { WalkerOS, Collector, Elb, Mapping, Destination, On, Source } from '@walkeros/core';
|
|
2
2
|
|
|
3
3
|
interface RunState {
|
|
4
4
|
consent?: WalkerOS.Consent;
|
|
@@ -18,6 +18,44 @@ interface StartFlow<ElbPush extends WalkerOS.Elb = WalkerOS.Elb> {
|
|
|
18
18
|
elb: ElbPush;
|
|
19
19
|
}
|
|
20
20
|
|
|
21
|
+
interface Settings {
|
|
22
|
+
scripts?: string[];
|
|
23
|
+
init?: string;
|
|
24
|
+
on?: string;
|
|
25
|
+
push?: string;
|
|
26
|
+
pushBatch?: string;
|
|
27
|
+
}
|
|
28
|
+
interface CodeMapping extends Mapping.Rule<CodeMapping> {
|
|
29
|
+
push?: string;
|
|
30
|
+
pushBatch?: string;
|
|
31
|
+
}
|
|
32
|
+
type Types = Destination.Types<Settings, CodeMapping>;
|
|
33
|
+
type Config = Destination.Config<Types>;
|
|
34
|
+
type Context = Destination.Context<Types>;
|
|
35
|
+
type InitContext = Destination.InitContext<Types>;
|
|
36
|
+
type PushContext = Destination.PushContext<Types>;
|
|
37
|
+
type PushBatchContext = Destination.PushBatchContext<Types>;
|
|
38
|
+
type InitFn = (context: InitContext) => void;
|
|
39
|
+
type OnFn = (type: On.Types, context: Context) => void;
|
|
40
|
+
type PushFn = (event: WalkerOS.Event, context: PushContext) => void;
|
|
41
|
+
type PushBatchFn = (batch: Destination.Batch<CodeMapping>, context: PushBatchContext) => void;
|
|
42
|
+
|
|
43
|
+
type code_CodeMapping = CodeMapping;
|
|
44
|
+
type code_Config = Config;
|
|
45
|
+
type code_Context = Context;
|
|
46
|
+
type code_InitContext = InitContext;
|
|
47
|
+
type code_InitFn = InitFn;
|
|
48
|
+
type code_OnFn = OnFn;
|
|
49
|
+
type code_PushBatchContext = PushBatchContext;
|
|
50
|
+
type code_PushBatchFn = PushBatchFn;
|
|
51
|
+
type code_PushContext = PushContext;
|
|
52
|
+
type code_PushFn = PushFn;
|
|
53
|
+
type code_Settings = Settings;
|
|
54
|
+
type code_Types = Types;
|
|
55
|
+
declare namespace code {
|
|
56
|
+
export type { code_CodeMapping as CodeMapping, code_Config as Config, code_Context as Context, code_InitContext as InitContext, code_InitFn as InitFn, code_OnFn as OnFn, code_PushBatchContext as PushBatchContext, code_PushBatchFn as PushBatchFn, code_PushContext as PushContext, code_PushFn as PushFn, code_Settings as Settings, code_Types as Types };
|
|
57
|
+
}
|
|
58
|
+
|
|
21
59
|
declare const Commands: Record<CommandTypes, Collector.CommandType>;
|
|
22
60
|
declare const Const: {
|
|
23
61
|
Commands: Record<CommandTypes, string>;
|
|
@@ -103,6 +141,13 @@ declare function createPushResult(partialResult?: Partial<Elb.PushResult>): Elb.
|
|
|
103
141
|
* @returns The initialized destinations.
|
|
104
142
|
*/
|
|
105
143
|
declare function initDestinations(_collector: Collector.Instance, destinations?: Destination.InitDestinations): Promise<Collector.Destinations>;
|
|
144
|
+
/**
|
|
145
|
+
* Merges destination environment with config environment
|
|
146
|
+
* Config env takes precedence over destination env for overrides
|
|
147
|
+
*/
|
|
148
|
+
declare function mergeEnvironments(destinationEnv?: Destination.Env, configEnv?: Destination.Env): Destination.Env;
|
|
149
|
+
|
|
150
|
+
declare const destinationCode: Destination.Instance;
|
|
106
151
|
|
|
107
152
|
/**
|
|
108
153
|
* Handles common commands.
|
|
@@ -158,4 +203,4 @@ declare function onApply(collector: Collector.Instance, type: On.Types, options?
|
|
|
158
203
|
*/
|
|
159
204
|
declare function initSources(collector: Collector.Instance, sources?: Source.InitSources): Promise<Collector.Sources>;
|
|
160
205
|
|
|
161
|
-
export { type CommandTypes, Commands, Const, type CreateCollector, type HandleCommandFn, type RunState, type StartFlow, type StorageType, addDestination, commonHandleCommand, createEvent, createPush, createPushResult, destinationInit, destinationPush, initDestinations, initSources, on, onApply, pushToDestinations, runCollector, setConsent, startFlow };
|
|
206
|
+
export { code as Code, type CommandTypes, Commands, Const, type CreateCollector, type HandleCommandFn, type RunState, type StartFlow, type StorageType, addDestination, commonHandleCommand, createEvent, createPush, createPushResult, destinationCode, destinationInit, destinationPush, initDestinations, initSources, mergeEnvironments, on, onApply, pushToDestinations, runCollector, setConsent, startFlow };
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var e,n=Object.defineProperty,o=Object.getOwnPropertyDescriptor,t=Object.getOwnPropertyNames,s=Object.prototype.hasOwnProperty,a={};((e,o)=>{for(var t in o)n(e,t,{get:o[t],enumerable:!0})})(a,{Commands:()=>i,Const:()=>c,addDestination:()=>l,commonHandleCommand:()=>O,createEvent:()=>E,createPush:()=>P,createPushResult:()=>m,destinationInit:()=>d,destinationPush:()=>f,initDestinations:()=>p,initSources:()=>H,on:()=>k,onApply:()=>w,pushToDestinations:()=>g,runCollector:()=>A,setConsent:()=>v,startFlow:()=>F}),module.exports=(e=a,((e,a,i,c)=>{if(a&&"object"==typeof a||"function"==typeof a)for(let r of t(a))s.call(e,r)||r===i||n(e,r,{get:()=>a[r],enumerable:!(c=o(a,r))||c.enumerable});return e})(n({},"__esModule",{value:!0}),e));var i={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:i,Utils:{Storage:{Cookie:"cookie",Local:"local",Session:"session"}}},r=require("@walkeros/core"),u=require("@walkeros/core");async function l(e,n,o){const{code:t,config:s={},env:a={}}=n,i=o||s||{init:!1},c={...t,config:i,env:h(t.env,a)};let r=c.config.id;if(!r)do{r=(0,u.getId)(4)}while(e.destinations[r]);return e.destinations[r]=c,!1!==c.config.queue&&(c.queue=[...e.queue]),g(e,void 0,{[r]:c})}async function g(e,n,o){const{allowed:t,consent:s,globals:a,user:i}=e;if(!t)return m({ok:!1});n&&e.queue.push(n),o||(o=e.destinations);const c=await Promise.all(Object.entries(o||{}).map(async([o,t])=>{let c=(t.queue||[]).map(e=>({...e,consent:s}));if(t.queue=[],n){const e=(0,u.clone)(n);c.push(e)}if(!c.length)return{id:o,destination:t,skipped:!0};const r=[],l=c.filter(e=>{const n=(0,u.getGrantedConsent)(t.config.consent,s,e.consent);return!n||(e.consent=n,r.push(e),!1)});if(t.queue.concat(l),!r.length)return{id:o,destination:t,queue:c};if(!await(0,u.tryCatchAsync)(d)(e,t))return{id:o,destination:t,queue:c};let g=!1;return t.dlq||(t.dlq=[]),await Promise.all(r.map(async n=>(n.globals=(0,u.assign)(a,n.globals),n.user=(0,u.assign)(i,n.user),await(0,u.tryCatchAsync)(f,o=>{const s=t.type||"unknown";return e.logger.scope(s).error("Push failed",{error:o,event:n.name}),g=!0,t.dlq.push([n,o]),!1})(e,t,n),n))),{id:o,destination:t,error:g}})),r=[],l=[],g=[];for(const e of c){if(e.skipped)continue;const n=e.destination,o={id:e.id,destination:n};e.error?g.push(o):e.queue&&e.queue.length?(n.queue=(n.queue||[]).concat(e.queue),l.push(o)):r.push(o)}return m({ok:!g.length,event:n,successful:r,queued:l,failed:g})}async function d(e,n){if(n.init&&!n.config.init){const o=n.type||"unknown",t=e.logger.scope(o),s={collector:e,config:n.config,env:h(n.env,n.config.env),logger:t},a=await(0,u.useHooks)(n.init,"DestinationInit",e.hooks)(s);if(!1===a)return a;n.config={...a||n.config,init:!0}}return!0}async function f(e,n,o){const{config:t}=n,s=await(0,u.processEventMapping)(o,t,e);if(s.ignore)return!1;const a=n.type||"unknown",i=e.logger.scope(a),c={collector:e,config:t,data:s.data,mapping:s.mapping,env:h(n.env,t.env),logger:i},r=s.mapping;if(r?.batch&&n.pushBatch){const o=r.batched||{key:s.mappingKey||"",events:[],data:[]};o.events.push(s.event),(0,u.isDefined)(s.data)&&o.data.push(s.data),r.batchFn=r.batchFn||(0,u.debounce)((e,n)=>{const a=e.type||"unknown",i=n.logger.scope(a),c={collector:n,config:t,data:s.data,mapping:r,env:h(e.env,t.env),logger:i};(0,u.useHooks)(e.pushBatch,"DestinationPushBatch",n.hooks)(o,c),o.events=[],o.data=[]},r.batch),r.batched=o,r.batchFn?.(n,e)}else await(0,u.useHooks)(n.push,"DestinationPush",e.hooks)(s.event,c);return!0}function m(e){return(0,u.assign)({ok:!e?.failed?.length,successful:[],queued:[],failed:[]},e)}async function p(e,n={}){const o={};for(const[e,t]of Object.entries(n)){const{code:n,config:s={},env:a={}}=t,i={...n.config,...s},c=h(n.env,a);o[e]={...n,config:i,env:c}}return o}function h(e,n){return e||n?n?e&&(0,u.isObject)(e)&&(0,u.isObject)(n)?{...e,...n}:n:e:{}}var b=require("@walkeros/core"),y=require("@walkeros/core");function k(e,n,o){const t=e.on,s=t[n]||[],a=(0,b.isArray)(o)?o:[o];a.forEach(e=>{s.push(e)}),t[n]=s,w(e,n,a)}function w(e,n,o,t){let s,a=o||[];switch(o||(a=e.on[n]||[]),n){case c.Commands.Consent:s=t||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,y.tryCatch)(e.on)(n,s)}),Object.values(e.destinations).forEach(e=>{if(e.on){const o=e.on;(0,y.tryCatch)(o)(n,s)}}),a.length)switch(n){case c.Commands.Consent:!function(e,n,o){const t=o||e.consent;n.forEach(n=>{Object.keys(t).filter(e=>e in n).forEach(o=>{(0,y.tryCatch)(n[o])(e,t)})})}(e,a,t);break;case c.Commands.Ready:case c.Commands.Run:!function(e,n){e.allowed&&n.forEach(n=>{(0,y.tryCatch)(n)(e)})}(e,a);break;case c.Commands.Session:!function(e,n){if(!e.session)return;n.forEach(n=>{(0,y.tryCatch)(n)(e,e.session)})}(e,a)}}async function v(e,n){const{consent:o}=e;let t=!1;const s={};return Object.entries(n).forEach(([e,n])=>{const o=!!n;s[e]=o,t=t||o}),e.consent=(0,r.assign)(o,s),w(e,"consent",void 0,s),t?g(e):m({ok:!0})}var C=require("@walkeros/core"),q=require("@walkeros/core"),j=require("@walkeros/core");async function O(e,n,o,t){let s;switch(n){case c.Commands.Config:(0,j.isObject)(o)&&(0,q.assign)(e.config,o,{shallow:!1});break;case c.Commands.Consent:(0,j.isObject)(o)&&(s=await v(e,o));break;case c.Commands.Custom:(0,j.isObject)(o)&&(e.custom=(0,q.assign)(e.custom,o));break;case c.Commands.Destination:(0,j.isObject)(o)&&(0,q.isFunction)(o.push)&&(s=await l(e,{code:o},t));break;case c.Commands.Globals:(0,j.isObject)(o)&&(e.globals=(0,q.assign)(e.globals,o));break;case c.Commands.On:(0,q.isString)(o)&&k(e,o,t);break;case c.Commands.Ready:w(e,"ready");break;case c.Commands.Run:s=await A(e,o);break;case c.Commands.Session:w(e,"session");break;case c.Commands.User:(0,j.isObject)(o)&&(0,q.assign)(e.user,o,{shallow:!1})}return s||{ok:!0,successful:[],queued:[],failed:[]}}function E(e,n){if(!n.name)throw new Error("Event name is required");const[o,t]=n.name.split(" ");if(!o||!t)throw new Error("Event name is invalid");++e.count;const{timestamp:s=Date.now(),group:a=e.group,count:i=e.count}=n,{name:c=`${o} ${t}`,data:r={},context:u={},globals:l=e.globals,custom:g={},user:d=e.user,nested:f=[],consent:m=e.consent,id:p=`${s}-${a}-${i}`,trigger:h="",entity:b=o,action:y=t,timing:k=0,version:w={source:e.version,tagging:e.config.tagging||0},source:v={type:"collector",id:"",previous_id:""}}=n;return{name:c,data:r,context:u,globals:l,custom:g,user:d,nested:f,consent:m,id:p,trigger:h,entity:b,action:y,timestamp:s,timing:k,group:a,count:i,version:w,source:v}}async function A(e,n){e.allowed=!0,e.count=0,e.group=(0,q.getId)(),e.timing=Date.now(),n&&(n.consent&&(e.consent=(0,q.assign)(e.consent,n.consent)),n.user&&(e.user=(0,q.assign)(e.user,n.user)),n.globals&&(e.globals=(0,q.assign)(e.config.globalsStatic||{},n.globals)),n.custom&&(e.custom=(0,q.assign)(e.custom,n.custom))),Object.values(e.destinations).forEach(e=>{e.queue=[]}),e.queue=[],e.round++;const o=await g(e);return w(e,"run"),o}var D=require("@walkeros/core");function P(e,n){return(0,D.useHooks)(async(o,t={})=>await(0,D.tryCatchAsync)(async()=>{let s=o;if(t.mapping){const n=await(0,D.processEventMapping)(s,t.mapping,e);if(n.ignore)return m({ok:!0});if(t.mapping.consent){if(!(0,D.getGrantedConsent)(t.mapping.consent,e.consent,n.event.consent))return m({ok:!0})}s=n.event}const a=n(s),i=E(e,a);return await g(e,i)},()=>m({ok:!1}))(),"Push",e.hooks)}var S=require("@walkeros/core");async function R(e){const n=(0,C.assign)({globalsStatic:{},sessionStatic:{},tagging:0,run:!0},e,{merge:!1,extend:!1}),o={level:e.logger?.level,handler:e.logger?.handler},t=(0,C.createLogger)(o),s={...n.globalsStatic,...e.globals},a={allowed:!1,config:n,consent:e.consent||{},count:0,custom:e.custom||{},destinations:{},globals:s,group:"",hooks:{},logger:t,on:{},queue:[],round:0,session:void 0,timing:Date.now(),user:e.user||{},version:"0.4.2",sources:{},push:void 0,command:void 0};return a.push=P(a,e=>({timing:Math.round((Date.now()-a.timing)/10)/100,source:{type:"collector",id:"",previous_id:""},...e})),a.command=function(e,n){return(0,S.useHooks)(async(o,t,s)=>await(0,S.tryCatchAsync)(async()=>await n(e,o,t,s),()=>m({ok:!1}))(),"Command",e.hooks)}(a,O),a.destinations=await p(0,e.destinations||{}),a}var x=require("@walkeros/core");async function H(e,n={}){const o={};for(const[t,s]of Object.entries(n)){const{code:n,config:a={},env:i={},primary:c}=s,r=(n,o={})=>e.push(n,{...o,mapping:a}),u=e.logger.scope("source").scope(t),l={push:r,command:e.command,sources:e.sources,elb:e.sources.elb.push,logger:u,...i},g=await(0,x.tryCatchAsync)(n)(a,l);if(!g)continue;const d=g.type||"unknown",f=e.logger.scope(d).scope(t);l.logger=f,c&&(g.config={...g.config,primary:c}),o[t]=g}return o}async function F(e){e=e||{};const n=await R(e),o=(t=n,{type:"elb",config:{},push:async(e,n,o,s,a,i)=>{if("string"==typeof e&&e.startsWith("walker ")){const s=e.replace("walker ","");return t.command(s,n,o)}let c;if("string"==typeof e)c={name:e},n&&"object"==typeof n&&!Array.isArray(n)&&(c.data=n);else{if(!e||"object"!=typeof e)return{ok:!1,successful:[],queued:[],failed:[]};c=e,n&&"object"==typeof n&&!Array.isArray(n)&&(c.data={...c.data||{},...n})}return s&&"object"==typeof s&&(c.context=s),a&&Array.isArray(a)&&(c.nested=a),i&&"object"==typeof i&&(c.custom=i),t.push(c)}});var t;n.sources.elb=o;const s=await H(n,e.sources||{});Object.assign(n.sources,s);const{consent:a,user:i,globals:c,custom:r}=e;a&&await n.command("consent",a),i&&await n.command("user",i),c&&Object.assign(n.globals,c),r&&Object.assign(n.custom,r),n.config.run&&await n.command("run");let u=o.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,a={};((e,t)=>{for(var o in t)n(e,o,{get:t[o],enumerable:!0})})(a,{Code:()=>c,Commands:()=>i,Const:()=>r,addDestination:()=>f,commonHandleCommand:()=>D,createEvent:()=>P,createPush:()=>R,createPushResult:()=>b,destinationCode:()=>g,destinationInit:()=>m,destinationPush:()=>h,initDestinations:()=>y,initSources:()=>I,mergeEnvironments:()=>v,on:()=>C,onApply:()=>q,pushToDestinations:()=>p,runCollector:()=>x,setConsent:()=>j,startFlow:()=>$}),module.exports=(e=a,((e,a,c,i)=>{if(a&&"object"==typeof a||"function"==typeof a)for(let r of o(a))s.call(e,r)||r===c||n(e,r,{get:()=>a[r],enumerable:!(i=t(a,r))||i.enumerable});return e})(n({},"__esModule",{value:!0}),e));var c={},i={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"},r={Commands:i,Utils:{Storage:{Cookie:"cookie",Local:"local",Session:"session"}}},u=require("@walkeros/core"),l=require("@walkeros/core"),g={type:"code",config:{},init(e){const{config:n,logger:t}=e,o=n.settings,s=o?.scripts;if(s&&"undefined"!=typeof document)for(const e of s){const n=document.createElement("script");n.src=e,n.async=!0,document.head.appendChild(n)}const a=o?.init;if(a)try{new Function("context",a)(e)}catch(e){t.error("Code destination init error:",e)}},push(e,n){const{mapping:t,config:o,logger:s}=n,a=t?.push??o.settings?.push;if(a)try{new Function("event","context",a)(e,n)}catch(e){s.error("Code destination push error:",e)}},pushBatch(e,n){const{mapping:t,config:o,logger:s}=n,a=t?.pushBatch??o.settings?.pushBatch;if(a)try{new Function("batch","context",a)(e,n)}catch(e){s.error("Code destination pushBatch error:",e)}},on(e,n){const{config:t,logger:o}=n,s=t.settings?.on;if(s)try{new Function("type","context",s)(e,n)}catch(e){o.error("Code destination on error:",e)}}};function d(e){return!0===e?g:e}async function f(e,n,t){const{code:o,config:s={},env:a={}}=n,c=t||s||{init:!1},i=d(o),r={...i,config:c,env:v(i.env,a)};let u=r.config.id;if(!u)do{u=(0,l.getId)(4)}while(e.destinations[u]);return e.destinations[u]=r,!1!==r.config.queue&&(r.queue=[...e.queue]),p(e,void 0,{[u]:r})}async function p(e,n,t){const{allowed:o,consent:s,globals:a,user:c}=e;if(!o)return b({ok:!1});n&&e.queue.push(n),t||(t=e.destinations);const i=await Promise.all(Object.entries(t||{}).map(async([t,o])=>{let i=(o.queue||[]).map(e=>({...e,consent:s}));if(o.queue=[],n){const e=(0,l.clone)(n);i.push(e)}if(!i.length)return{id:t,destination:o,skipped:!0};const r=[],u=i.filter(e=>{const n=(0,l.getGrantedConsent)(o.config.consent,s,e.consent);return!n||(e.consent=n,r.push(e),!1)});if(o.queue.concat(u),!r.length)return{id:t,destination:o,queue:i};if(!await(0,l.tryCatchAsync)(m)(e,o))return{id:t,destination:o,queue:i};let g=!1;return o.dlq||(o.dlq=[]),await Promise.all(r.map(async n=>(n.globals=(0,l.assign)(a,n.globals),n.user=(0,l.assign)(c,n.user),await(0,l.tryCatchAsync)(h,t=>{const s=o.type||"unknown";return e.logger.scope(s).error("Push failed",{error:t,event:n.name}),g=!0,o.dlq.push([n,t]),!1})(e,o,n),n))),{id:t,destination:o,error:g}})),r=[],u=[],g=[];for(const e of i){if(e.skipped)continue;const n=e.destination,t={id:e.id,destination:n};e.error?g.push(t):e.queue&&e.queue.length?(n.queue=(n.queue||[]).concat(e.queue),u.push(t)):r.push(t)}return b({ok:!g.length,event:n,successful:r,queued:u,failed:g})}async function m(e,n){if(n.init&&!n.config.init){const t=n.type||"unknown",o=e.logger.scope(t),s={collector:e,config:n.config,env:v(n.env,n.config.env),logger:o};o.debug("init");const a=await(0,l.useHooks)(n.init,"DestinationInit",e.hooks)(s);if(!1===a)return a;n.config={...a||n.config,init:!0},o.debug("init done")}return!0}async function h(e,n,t){const{config:o}=n,s=await(0,l.processEventMapping)(t,o,e);if(s.ignore)return!1;const a=n.type||"unknown",c=e.logger.scope(a),i={collector:e,config:o,data:s.data,mapping:s.mapping,env:v(n.env,o.env),logger:c},r=s.mapping,u=s.mappingKey||"* *";if(r?.batch&&n.pushBatch){if(n.batches=n.batches||{},!n.batches[u]){const t={key:u,events:[],data:[]};n.batches[u]={batched:t,batchFn:(0,l.debounce)(()=>{const t=n.batches[u].batched,s={collector:e,config:o,data:void 0,mapping:r,env:v(n.env,o.env),logger:c};c.debug("push batch",{events:t.events.length}),(0,l.useHooks)(n.pushBatch,"DestinationPushBatch",e.hooks)(t,s),c.debug("push batch done"),t.events=[],t.data=[]},r.batch)}}const t=n.batches[u];t.batched.events.push(s.event),(0,l.isDefined)(s.data)&&t.batched.data.push(s.data),t.batchFn()}else c.debug("push",{event:s.event.name}),await(0,l.useHooks)(n.push,"DestinationPush",e.hooks)(s.event,i),c.debug("push done");return!0}function b(e){return(0,l.assign)({ok:!e?.failed?.length,successful:[],queued:[],failed:[]},e)}async function y(e,n={}){const t={};for(const[e,o]of Object.entries(n)){const{code:n,config:s={},env:a={}}=o,c=d(n),i={...c.config,...s},r=v(c.env,a);t[e]={...c,config:i,env:r}}return t}function v(e,n){return e||n?n?e&&(0,l.isObject)(e)&&(0,l.isObject)(n)?{...e,...n}:n:e:{}}var w=require("@walkeros/core"),k=require("@walkeros/core");function C(e,n,t){const o=e.on,s=o[n]||[],a=(0,w.isArray)(t)?t:[t];a.forEach(e=>{s.push(e)}),o[n]=s,q(e,n,a)}function q(e,n,t,o){let s,a=t||[];switch(t||(a=e.on[n]||[]),n){case r.Commands.Consent:s=o||e.consent;break;case r.Commands.Session:s=e.session;break;case r.Commands.Ready:case r.Commands.Run:default:s=void 0}if(Object.values(e.sources).forEach(e=>{e.on&&(0,k.tryCatch)(e.on)(n,s)}),Object.values(e.destinations).forEach(t=>{if(t.on){const o=t.type||"unknown",a=e.logger.scope(o).scope("on").scope(n),c={collector:e,config:t.config,data:s,env:v(t.env,t.config.env),logger:a};(0,k.tryCatch)(t.on)(n,c)}}),a.length)switch(n){case r.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,k.tryCatch)(n[t])(e,o)})})}(e,a,o);break;case r.Commands.Ready:case r.Commands.Run:!function(e,n){e.allowed&&n.forEach(n=>{(0,k.tryCatch)(n)(e)})}(e,a);break;case r.Commands.Session:!function(e,n){if(!e.session)return;n.forEach(n=>{(0,k.tryCatch)(n)(e,e.session)})}(e,a)}}async function j(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),q(e,"consent",void 0,s),o?p(e):b({ok:!0})}var O=require("@walkeros/core"),E=require("@walkeros/core"),A=require("@walkeros/core");async function D(e,n,t,o){let s;switch(n){case r.Commands.Config:(0,A.isObject)(t)&&(0,E.assign)(e.config,t,{shallow:!1});break;case r.Commands.Consent:(0,A.isObject)(t)&&(s=await j(e,t));break;case r.Commands.Custom:(0,A.isObject)(t)&&(e.custom=(0,E.assign)(e.custom,t));break;case r.Commands.Destination:(0,A.isObject)(t)&&(0,E.isFunction)(t.push)&&(s=await f(e,{code:t},o));break;case r.Commands.Globals:(0,A.isObject)(t)&&(e.globals=(0,E.assign)(e.globals,t));break;case r.Commands.On:(0,E.isString)(t)&&C(e,t,o);break;case r.Commands.Ready:q(e,"ready");break;case r.Commands.Run:s=await x(e,t);break;case r.Commands.Session:q(e,"session");break;case r.Commands.User:(0,A.isObject)(t)&&(0,E.assign)(e.user,t,{shallow:!1})}return s||{ok:!0,successful:[],queued:[],failed:[]}}function P(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:a=e.group,count:c=e.count}=n,{name:i=`${t} ${o}`,data:r={},context:u={},globals:l=e.globals,custom:g={},user:d=e.user,nested:f=[],consent:p=e.consent,id:m=`${s}-${a}-${c}`,trigger:h="",entity:b=t,action:y=o,timing:v=0,version:w={source:e.version,tagging:e.config.tagging||0},source:k={type:"collector",id:"",previous_id:""}}=n;return{name:i,data:r,context:u,globals:l,custom:g,user:d,nested:f,consent:p,id:m,trigger:h,entity:b,action:y,timestamp:s,timing:v,group:a,count:c,version:w,source:k}}async function x(e,n){e.allowed=!0,e.count=0,e.group=(0,E.getId)(),e.timing=Date.now(),n&&(n.consent&&(e.consent=(0,E.assign)(e.consent,n.consent)),n.user&&(e.user=(0,E.assign)(e.user,n.user)),n.globals&&(e.globals=(0,E.assign)(e.config.globalsStatic||{},n.globals)),n.custom&&(e.custom=(0,E.assign)(e.custom,n.custom))),Object.values(e.destinations).forEach(e=>{e.queue=[]}),e.queue=[],e.round++;const t=await p(e);return q(e,"run"),t}var S=require("@walkeros/core");function R(e,n){return(0,S.useHooks)(async(t,o={})=>await(0,S.tryCatchAsync)(async()=>{let s=t;if(o.mapping){const n=await(0,S.processEventMapping)(s,o.mapping,e);if(n.ignore)return b({ok:!0});if(o.mapping.consent){if(!(0,S.getGrantedConsent)(o.mapping.consent,e.consent,n.event.consent))return b({ok:!0})}s=n.event}const a=n(s),c=P(e,a);return await p(e,c)},()=>b({ok:!1}))(),"Push",e.hooks)}var F=require("@walkeros/core");async function B(e){const n=(0,O.assign)({globalsStatic:{},sessionStatic:{},tagging:0,run:!0},e,{merge:!1,extend:!1}),t={level:e.logger?.level,handler:e.logger?.handler},o=(0,O.createLogger)(t),s={...n.globalsStatic,...e.globals},a={allowed:!1,config:n,consent:e.consent||{},count:0,custom:e.custom||{},destinations:{},globals:s,group:"",hooks:{},logger:o,on:{},queue:[],round:0,session:void 0,timing:Date.now(),user:e.user||{},version:"0.5.0",sources:{},push:void 0,command:void 0};return a.push=R(a,e=>({timing:Math.round((Date.now()-a.timing)/10)/100,source:{type:"collector",id:"",previous_id:""},...e})),a.command=function(e,n){return(0,F.useHooks)(async(t,o,s)=>await(0,F.tryCatchAsync)(async()=>await n(e,t,o,s),()=>b({ok:!1}))(),"Command",e.hooks)}(a,D),a.destinations=await y(0,e.destinations||{}),a}var H=require("@walkeros/core");async function I(e,n={}){const t={};for(const[o,s]of Object.entries(n)){const{code:n,config:a={},env:c={},primary:i}=s,r=(n,t={})=>e.push(n,{...t,mapping:a}),u=e.logger.scope("source").scope(o),l={push:r,command:e.command,sources:e.sources,elb:e.sources.elb.push,logger:u,...c},g=await(0,H.tryCatchAsync)(n)(a,l);if(!g)continue;const d=g.type||"unknown",f=e.logger.scope(d).scope(o);l.logger=f,i&&(g.config={...g.config,primary:i}),t[o]=g}return t}async function $(e){e=e||{};const n=await B(e),t=(o=n,{type:"elb",config:{},push:async(e,n,t,s,a,c)=>{if("string"==typeof e&&e.startsWith("walker ")){const s=e.replace("walker ","");return o.command(s,n,t)}let i;if("string"==typeof e)i={name:e},n&&"object"==typeof n&&!Array.isArray(n)&&(i.data=n);else{if(!e||"object"!=typeof e)return{ok:!1,successful:[],queued:[],failed:[]};i=e,n&&"object"==typeof n&&!Array.isArray(n)&&(i.data={...i.data||{},...n})}return s&&"object"==typeof s&&(i.context=s),a&&Array.isArray(a)&&(i.nested=a),c&&"object"==typeof c&&(i.custom=c),o.push(i)}});var o;n.sources.elb=t;const s=await I(n,e.sources||{});Object.assign(n.sources,s);const{consent:a,user:c,globals:i,custom:r}=e;a&&await n.command("consent",a),c&&await n.command("user",c),i&&Object.assign(n.globals,i),r&&Object.assign(n.custom,r),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
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/constants.ts","../src/consent.ts","../src/destination.ts","../src/on.ts","../src/collector.ts","../src/handle.ts","../src/push.ts","../src/command.ts","../src/elb.ts","../src/source.ts","../src/flow.ts"],"sourcesContent":["export * from './types';\n\nexport * from './constants';\n\nexport * from './consent';\nexport * from './flow';\nexport * from './push';\nexport * from './destination';\nexport * from './handle';\nexport * from './on';\nexport * from './source';\n","import type { Collector } from '@walkeros/core';\nimport type { CommandTypes, StorageType } from './types/collector';\n\nexport const Commands: Record<CommandTypes, Collector.CommandType> = {\n Action: 'action',\n Actions: 'actions',\n Config: 'config',\n Consent: 'consent',\n Context: 'context',\n Custom: 'custom',\n Destination: 'destination',\n Elb: 'elb',\n Globals: 'globals',\n Hook: 'hook',\n Init: 'init',\n Link: 'link',\n On: 'on',\n Prefix: 'data-elb',\n Ready: 'ready',\n Run: 'run',\n Session: 'session',\n User: 'user',\n Walker: 'walker',\n} as const;\n\nconst UtilsStorage: { [key: string]: StorageType } = {\n Cookie: 'cookie',\n Local: 'local',\n Session: 'session',\n} as const;\n\nconst Utils = {\n Storage: UtilsStorage,\n};\n\nexport const Const = {\n Commands,\n Utils,\n};\n\nexport default Const;\n","import type { Collector, WalkerOS, Elb } from '@walkeros/core';\nimport { assign } from '@walkeros/core';\nimport { pushToDestinations, createPushResult } from './destination';\nimport { onApply } from './on';\n\n/**\n * Sets the consent state and processes the queue.\n *\n * @param collector - The walkerOS collector instance.\n * @param data - The consent data to set.\n * @returns The result of the push operation.\n */\nexport async function setConsent(\n collector: Collector.Instance,\n data: WalkerOS.Consent,\n): Promise<Elb.PushResult> {\n const { consent } = collector;\n\n let runQueue = false;\n const update: WalkerOS.Consent = {};\n Object.entries(data).forEach(([name, granted]) => {\n const state = !!granted;\n\n update[name] = state;\n\n // Only run queue if state was set to true\n runQueue = runQueue || state;\n });\n\n // Update consent state\n collector.consent = assign(consent, update);\n\n // Run on consent events\n onApply(collector, 'consent', undefined, update);\n\n // Process previous events if not disabled\n return runQueue\n ? pushToDestinations(collector)\n : createPushResult({ ok: true });\n}\n","import type { Collector, WalkerOS, Elb, Destination } from '@walkeros/core';\nimport {\n assign,\n clone,\n debounce,\n getId,\n getGrantedConsent,\n isDefined,\n isObject,\n processEventMapping,\n tryCatchAsync,\n useHooks,\n} from '@walkeros/core';\n\n/**\n * Adds a new destination to the collector.\n *\n * @param collector - The walkerOS collector instance.\n * @param data - The destination's init data.\n * @param options - The destination's config.\n * @returns The result of the push operation.\n */\nexport async function addDestination(\n collector: Collector.Instance,\n data: Destination.Init,\n options?: Destination.Config,\n): Promise<Elb.PushResult> {\n const { code, config: dataConfig = {}, env = {} } = data;\n const config = options || dataConfig || { init: false };\n\n const destination: Destination.Instance = {\n ...code,\n config,\n env: mergeEnvironments(code.env, env),\n };\n\n let id = destination.config.id; // Use given id\n if (!id) {\n // Generate a new id if none was given\n do {\n id = getId(4);\n } while (collector.destinations[id]);\n }\n\n // Add the destination\n collector.destinations[id] = destination;\n\n // Process previous events if not disabled\n if (destination.config.queue !== false)\n destination.queue = [...collector.queue];\n\n return pushToDestinations(collector, undefined, { [id]: destination });\n}\n\n/**\n * Pushes an event to all or a subset of destinations.\n *\n * @param collector - The walkerOS collector instance.\n * @param event - The event to push.\n * @param destinations - The destinations to push to.\n * @returns The result of the push operation.\n */\nexport async function pushToDestinations(\n collector: Collector.Instance,\n event?: WalkerOS.Event,\n destinations?: Collector.Destinations,\n): Promise<Elb.PushResult> {\n const { allowed, consent, globals, user } = collector;\n\n // Check if collector is allowed to push\n if (!allowed) return createPushResult({ ok: false });\n\n // Add event to the collector queue\n if (event) collector.queue.push(event);\n\n // Use given destinations or use internal destinations\n if (!destinations) destinations = collector.destinations;\n\n const results = await Promise.all(\n // Process all destinations in parallel\n Object.entries(destinations || {}).map(async ([id, destination]) => {\n // Create a queue of events to be processed\n let currentQueue = (destination.queue || []).map((event) => ({\n ...event,\n consent,\n }));\n\n // Reset original queue while processing to enable async processing\n destination.queue = [];\n\n // Add event to queue stack\n if (event) {\n // Clone the event to avoid mutating the original event\n const currentEvent = clone(event);\n\n // Note: Policy is now applied in processEventMapping() within destinationPush()\n\n // Add event to queue stack\n currentQueue.push(currentEvent);\n }\n\n // Nothing to do here if the queue is empty\n if (!currentQueue.length) return { id, destination, skipped: true };\n\n const allowedEvents: WalkerOS.Events = [];\n const skippedEvents = currentQueue.filter((queuedEvent) => {\n const grantedConsent = getGrantedConsent(\n destination.config.consent, // Required\n consent, // Current collector state\n queuedEvent.consent, // Individual event state\n );\n\n if (grantedConsent) {\n queuedEvent.consent = grantedConsent; // Save granted consent states only\n\n allowedEvents.push(queuedEvent); // Add to allowed queue\n return false; // Remove from destination queue\n }\n\n return true; // Keep denied events in the queue\n });\n\n // Add skipped events back to the queue\n destination.queue.concat(skippedEvents);\n\n // Execution shall not pass if no events are allowed\n if (!allowedEvents.length) {\n return { id, destination, queue: currentQueue }; // Don't push if not allowed\n }\n\n // Initialize the destination if needed\n const isInitialized = await tryCatchAsync(destinationInit)(\n collector,\n destination,\n );\n\n if (!isInitialized) return { id, destination, queue: currentQueue };\n\n // Process the destinations event queue\n let error = false;\n if (!destination.dlq) destination.dlq = [];\n\n // Process allowed events and store failed ones in the dead letter queue (DLQ)\n await Promise.all(\n allowedEvents.map(async (event) => {\n // Merge event with collector state, prioritizing event properties\n event.globals = assign(globals, event.globals);\n event.user = assign(user, event.user);\n\n await tryCatchAsync(destinationPush, (err) => {\n // Log the error with destination scope\n const destType = destination.type || 'unknown';\n collector.logger.scope(destType).error('Push failed', {\n error: err,\n event: event.name,\n });\n error = true; // oh no\n\n // Add failed event to destinations DLQ\n destination.dlq!.push([event, err]);\n\n return false;\n })(collector, destination, event);\n\n return event;\n }),\n );\n\n return { id, destination, error };\n }),\n );\n\n const successful = [];\n const queued = [];\n const failed = [];\n\n for (const result of results) {\n if (result.skipped) continue;\n\n const destination = result.destination;\n\n const ref = { id: result.id, destination };\n\n if (result.error) {\n failed.push(ref);\n } else if (result.queue && result.queue.length) {\n // Merge queue with existing queue\n destination.queue = (destination.queue || []).concat(result.queue);\n queued.push(ref);\n } else {\n successful.push(ref);\n }\n }\n\n return createPushResult({\n ok: !failed.length,\n event,\n successful,\n queued,\n failed,\n });\n}\n\n/**\n * Initializes a destination.\n *\n * @template Destination\n * @param collector - The walkerOS collector instance.\n * @param destination - The destination to initialize.\n * @returns Whether the destination was initialized successfully.\n */\nexport async function destinationInit<Destination extends Destination.Instance>(\n collector: Collector.Instance,\n destination: Destination,\n): Promise<boolean> {\n // Check if the destination was initialized properly or try to do so\n if (destination.init && !destination.config.init) {\n // Create scoped logger for this destination: [type:id] or [unknown:id]\n const destType = destination.type || 'unknown';\n const destLogger = collector.logger.scope(destType);\n\n const context = {\n collector,\n config: destination.config,\n env: mergeEnvironments(destination.env, destination.config.env),\n logger: destLogger,\n } as Destination.InitContext;\n\n const configResult = await useHooks(\n destination.init,\n 'DestinationInit',\n collector.hooks,\n )(context);\n\n // Actively check for errors (when false)\n if (configResult === false) return configResult; // don't push if init is false\n\n // Update the destination config if it was returned\n destination.config = {\n ...(configResult || destination.config),\n init: true, // Remember that the destination was initialized\n };\n }\n\n return true; // Destination is ready to push\n}\n\n/**\n * Pushes an event to a single destination.\n * Handles mapping, batching, and consent checks.\n *\n * @template Destination\n * @param collector - The walkerOS collector instance.\n * @param destination - The destination to push to.\n * @param event - The event to push.\n * @returns Whether the event was pushed successfully.\n */\nexport async function destinationPush<Destination extends Destination.Instance>(\n collector: Collector.Instance,\n destination: Destination,\n event: WalkerOS.Event,\n): Promise<boolean> {\n const { config } = destination;\n\n const processed = await processEventMapping(event, config, collector);\n\n if (processed.ignore) return false;\n\n // Create scoped logger for this destination: [type] or [unknown]\n const destType = destination.type || 'unknown';\n const destLogger = collector.logger.scope(destType);\n\n const context: Destination.PushContext = {\n collector,\n config,\n data: processed.data,\n mapping: processed.mapping,\n env: mergeEnvironments(destination.env, config.env),\n logger: destLogger,\n };\n\n const eventMapping = processed.mapping;\n if (eventMapping?.batch && destination.pushBatch) {\n const batched = eventMapping.batched || {\n key: processed.mappingKey || '',\n events: [],\n data: [],\n };\n batched.events.push(processed.event);\n if (isDefined(processed.data)) batched.data.push(processed.data);\n\n eventMapping.batchFn =\n eventMapping.batchFn ||\n debounce((destination, collector) => {\n const batchDestType = destination.type || 'unknown';\n const batchLogger = collector.logger.scope(batchDestType);\n\n const batchContext: Destination.PushBatchContext = {\n collector,\n config,\n data: processed.data,\n mapping: eventMapping,\n env: mergeEnvironments(destination.env, config.env),\n logger: batchLogger,\n };\n\n useHooks(\n destination.pushBatch!,\n 'DestinationPushBatch',\n (collector as Collector.Instance).hooks,\n )(batched, batchContext);\n\n batched.events = [];\n batched.data = [];\n }, eventMapping.batch);\n\n eventMapping.batched = batched;\n eventMapping.batchFn?.(destination, collector);\n } else {\n // It's time to go to the destination's side now\n await useHooks(\n destination.push,\n 'DestinationPush',\n collector.hooks,\n )(processed.event, context);\n }\n\n return true;\n}\n\n/**\n * Creates a standardized result object for push operations.\n *\n * @param partialResult - A partial result to merge with the default result.\n * @returns The push result.\n */\nexport function createPushResult(\n partialResult?: Partial<Elb.PushResult>,\n): Elb.PushResult {\n return assign(\n {\n ok: !partialResult?.failed?.length,\n successful: [],\n queued: [],\n failed: [],\n },\n partialResult,\n );\n}\n\n/**\n * Initializes a map of destinations using ONLY the unified code/config/env pattern.\n * Does NOT call destination.init() - that happens later during push with proper consent checks.\n *\n * @param destinations - The destinations to initialize.\n * @param collector - The collector instance for destination init context.\n * @returns The initialized destinations.\n */\nexport async function initDestinations(\n _collector: Collector.Instance,\n destinations: Destination.InitDestinations = {},\n): Promise<Collector.Destinations> {\n const result: Collector.Destinations = {};\n\n for (const [name, destinationDef] of Object.entries(destinations)) {\n const { code, config = {}, env = {} } = destinationDef;\n\n // Merge config: destination default + provided config\n const mergedConfig = {\n ...code.config,\n ...config,\n };\n\n // Merge environment: destination default + provided env\n const mergedEnv = mergeEnvironments(code.env, env);\n\n // Create destination instance by spreading code and overriding config/env\n result[name] = {\n ...code,\n config: mergedConfig,\n env: mergedEnv,\n };\n }\n\n return result;\n}\n\n/**\n * Merges destination environment with config environment\n * Config env takes precedence over destination env for overrides\n */\nfunction mergeEnvironments(\n destinationEnv?: Destination.Env,\n configEnv?: Destination.Env,\n): Destination.Env {\n // If neither environment exists, return empty object\n if (!destinationEnv && !configEnv) return {};\n\n // If only one exists, return it\n if (!configEnv) return destinationEnv!;\n if (!destinationEnv) return configEnv;\n\n // Both exist - merge objects with configEnv taking precedence\n if (isObject(destinationEnv) && isObject(configEnv)) {\n return { ...destinationEnv, ...configEnv };\n }\n\n // If they're not both objects, config env overrides destination env\n return configEnv;\n}\n","import type { Collector, On, WalkerOS } from '@walkeros/core';\nimport { isArray } from '@walkeros/core';\nimport { Const } from './constants';\nimport { tryCatch } from '@walkeros/core';\n\n/**\n * Registers a callback for a specific event type.\n *\n * @param collector The walkerOS collector instance.\n * @param type The type of the event to listen for.\n * @param option The callback function or an array of callback functions.\n */\nexport function on(\n collector: Collector.Instance,\n type: On.Types,\n option: WalkerOS.SingleOrArray<On.Options>,\n) {\n const on = collector.on;\n const onType: Array<On.Options> = on[type] || [];\n const options = isArray(option) ? option : [option];\n\n options.forEach((option) => {\n onType.push(option);\n });\n\n // Update collector on state\n (on[type] as typeof onType) = onType;\n\n // Execute the on function directly\n onApply(collector, type, options);\n}\n\n/**\n * Applies all registered callbacks for a specific event type.\n *\n * @param collector The walkerOS collector instance.\n * @param type The type of the event to apply the callbacks for.\n * @param options The options for the callbacks.\n * @param config The consent configuration.\n */\nexport function onApply(\n collector: Collector.Instance,\n type: On.Types,\n options?: Array<On.Options>,\n config?: WalkerOS.Consent,\n) {\n // Use the optionally provided options\n let onConfig = options || [];\n\n if (!options) {\n // Get the collector on events\n onConfig = collector.on[type] || [];\n }\n\n // Calculate context data once for all sources and destinations\n let contextData: unknown;\n\n switch (type) {\n case Const.Commands.Consent:\n contextData = config || collector.consent;\n break;\n case Const.Commands.Session:\n contextData = collector.session;\n break;\n case Const.Commands.Ready:\n case Const.Commands.Run:\n default:\n contextData = undefined;\n break;\n }\n\n Object.values(collector.sources).forEach((source) => {\n if (source.on) {\n tryCatch(source.on)(type, contextData);\n }\n });\n\n Object.values(collector.destinations).forEach((destination) => {\n if (destination.on) {\n // Cast to runtime-compatible version for type safety\n const onFn = destination.on as On.OnFnRuntime;\n tryCatch(onFn)(type, contextData as On.AnyEventContext);\n }\n });\n\n if (!onConfig.length) return; // No on-events registered, nothing to do\n\n switch (type) {\n case Const.Commands.Consent:\n onConsent(collector, onConfig as Array<On.ConsentConfig>, config);\n break;\n case Const.Commands.Ready:\n onReady(collector, onConfig as Array<On.ReadyConfig>);\n break;\n case Const.Commands.Run:\n onRun(collector, onConfig as Array<On.RunConfig>);\n break;\n case Const.Commands.Session:\n onSession(collector, onConfig as Array<On.SessionConfig>);\n break;\n default:\n break;\n }\n}\n\nfunction onConsent(\n collector: Collector.Instance,\n onConfig: Array<On.ConsentConfig>,\n currentConsent?: WalkerOS.Consent,\n): void {\n const consentState = currentConsent || collector.consent;\n\n onConfig.forEach((consentConfig) => {\n // Collect functions whose consent keys match the rule keys directly\n // Directly execute functions whose consent keys match the rule keys\n Object.keys(consentState) // consent keys\n .filter((consent) => consent in consentConfig) // check for matching rule keys\n .forEach((consent) => {\n // Execute the function\n tryCatch(consentConfig[consent])(collector, consentState);\n });\n });\n}\n\nfunction onReady(\n collector: Collector.Instance,\n onConfig: Array<On.ReadyConfig>,\n): void {\n if (collector.allowed)\n onConfig.forEach((func) => {\n tryCatch(func)(collector);\n });\n}\n\nfunction onRun(\n collector: Collector.Instance,\n onConfig: Array<On.RunConfig>,\n): void {\n if (collector.allowed)\n onConfig.forEach((func) => {\n tryCatch(func)(collector);\n });\n}\n\nfunction onSession(\n collector: Collector.Instance,\n onConfig: Array<On.SessionConfig>,\n): void {\n if (!collector.session) return;\n\n onConfig.forEach((func) => {\n tryCatch(func)(collector, collector.session);\n });\n}\n","import type { Collector, Logger, WalkerOS } from '@walkeros/core';\nimport { assign, createLogger } from '@walkeros/core';\nimport { commonHandleCommand } from './handle';\nimport { initDestinations } from './destination';\nimport { createPush } from './push';\nimport { createCommand } from './command';\nimport { initSources } from './source';\n\ndeclare const __VERSION__: string;\n\nexport async function collector(\n initConfig: Collector.InitConfig,\n): Promise<Collector.Instance> {\n const version = __VERSION__;\n\n const defaultConfig: Collector.Config = {\n globalsStatic: {},\n sessionStatic: {},\n tagging: 0,\n run: true,\n };\n\n const config: Collector.Config = assign(defaultConfig, initConfig, {\n merge: false,\n extend: false,\n });\n\n // Create logger with config from initConfig\n const loggerConfig: Logger.Config = {\n level: initConfig.logger?.level,\n handler: initConfig.logger?.handler,\n };\n const logger = createLogger(loggerConfig);\n\n // Enhanced globals with static globals from config\n const finalGlobals = { ...config.globalsStatic, ...initConfig.globals };\n\n const collector: Collector.Instance = {\n allowed: false,\n config,\n consent: initConfig.consent || {},\n count: 0,\n custom: initConfig.custom || {},\n destinations: {},\n globals: finalGlobals,\n group: '',\n hooks: {},\n logger,\n on: {},\n queue: [],\n round: 0,\n session: undefined,\n timing: Date.now(),\n user: initConfig.user || {},\n version,\n sources: {},\n push: undefined as unknown as Collector.PushFn, // Placeholder, will be set below\n command: undefined as unknown as Collector.CommandFn, // Placeholder, will be set below\n };\n\n // Set the push and command functions with the collector reference\n collector.push = createPush(\n collector,\n (event: WalkerOS.DeepPartialEvent): WalkerOS.PartialEvent =>\n ({\n timing: Math.round((Date.now() - collector.timing) / 10) / 100,\n source: { type: 'collector', id: '', previous_id: '' },\n ...event,\n }) as WalkerOS.PartialEvent,\n );\n\n collector.command = createCommand(collector, commonHandleCommand);\n\n // Initialize destinations after collector is fully created\n // Sources are initialized in startFlow after ELB source is created\n collector.destinations = await initDestinations(\n collector,\n initConfig.destinations || {},\n );\n\n return collector;\n}\n","import type { Collector, WalkerOS, Destination, Elb, On } from '@walkeros/core';\nimport { Const } from './constants';\nimport { addDestination, pushToDestinations } from './destination';\nimport { assign, getId, isFunction, isString } from '@walkeros/core';\nimport { isObject } from '@walkeros/core';\nimport { setConsent } from './consent';\nimport { on, onApply } from './on';\nimport type { RunState } from './types/collector';\n\n/**\n * Handles common commands.\n *\n * @param collector The walkerOS collector instance.\n * @param action The action to handle.\n * @param data The data to handle.\n * @param options The options to handle.\n * @returns A promise that resolves with the push result or undefined.\n */\nexport async function commonHandleCommand(\n collector: Collector.Instance,\n action: string,\n data?: unknown,\n options?: unknown,\n): Promise<Elb.PushResult> {\n let result: Elb.PushResult | undefined;\n switch (action) {\n case Const.Commands.Config:\n if (isObject(data)) {\n assign(collector.config, data as Partial<Collector.Config>, {\n shallow: false,\n });\n }\n break;\n\n case Const.Commands.Consent:\n if (isObject(data)) {\n result = await setConsent(collector, data as WalkerOS.Consent);\n }\n break;\n\n case Const.Commands.Custom:\n if (isObject(data)) {\n collector.custom = assign(\n collector.custom,\n data as WalkerOS.Properties,\n );\n }\n break;\n\n case Const.Commands.Destination:\n if (isObject(data) && isFunction(data.push)) {\n result = await addDestination(\n collector,\n { code: data as unknown as Destination.Instance },\n options as Destination.Config,\n );\n }\n break;\n\n case Const.Commands.Globals:\n if (isObject(data)) {\n collector.globals = assign(\n collector.globals,\n data as WalkerOS.Properties,\n );\n }\n break;\n\n case Const.Commands.On:\n if (isString(data)) {\n on(\n collector,\n data as On.Types,\n options as WalkerOS.SingleOrArray<On.Options>,\n );\n }\n break;\n\n case Const.Commands.Ready:\n onApply(collector, 'ready');\n break;\n\n case Const.Commands.Run:\n result = await runCollector(collector, data as RunState);\n break;\n\n case Const.Commands.Session:\n onApply(collector, 'session');\n break;\n\n case Const.Commands.User:\n if (isObject(data)) {\n assign(collector.user, data as WalkerOS.User, { shallow: false });\n }\n break;\n }\n\n return (\n result || {\n ok: true,\n successful: [],\n queued: [],\n failed: [],\n }\n );\n}\n\n/**\n * Creates a full event from a partial event.\n *\n * @param collector The walkerOS collector instance.\n * @param partialEvent The partial event to transform.\n * @returns The full event.\n */\nexport function createEvent(\n collector: Collector.Instance,\n partialEvent: WalkerOS.PartialEvent,\n): WalkerOS.Event {\n if (!partialEvent.name) throw new Error('Event name is required');\n\n const [entityValue, actionValue] = partialEvent.name.split(' ');\n if (!entityValue || !actionValue) throw new Error('Event name is invalid');\n\n ++collector.count;\n\n const {\n timestamp = Date.now(),\n group = collector.group,\n count = collector.count,\n } = partialEvent;\n\n const {\n name = `${entityValue} ${actionValue}`,\n data = {},\n context = {},\n globals = collector.globals,\n custom = {},\n user = collector.user,\n nested = [],\n consent = collector.consent,\n id = `${timestamp}-${group}-${count}`,\n trigger = '',\n entity = entityValue,\n action = actionValue,\n timing = 0,\n version = {\n source: collector.version,\n tagging: collector.config.tagging || 0,\n },\n source = { type: 'collector', id: '', previous_id: '' },\n } = partialEvent;\n\n return {\n name,\n data,\n context,\n globals,\n custom,\n user,\n nested,\n consent,\n id,\n trigger,\n entity,\n action,\n timestamp,\n timing,\n group,\n count,\n version,\n source,\n };\n}\n\n/**\n * Runs the collector by setting it to allowed state and processing queued events.\n *\n * @param collector The walkerOS collector instance.\n * @param state Optional state to merge with the collector (user, globals, consent, custom).\n * @returns A promise that resolves with the push result.\n */\nexport async function runCollector(\n collector: Collector.Instance,\n state?: RunState,\n): Promise<Elb.PushResult> {\n // Set the collector to allowed state\n collector.allowed = true;\n\n // Reset count and generate new group ID\n collector.count = 0;\n collector.group = getId();\n\n // Update timing for this run\n collector.timing = Date.now();\n\n // Update collector state if provided\n if (state) {\n // Update consent if provided\n if (state.consent) {\n collector.consent = assign(collector.consent, state.consent);\n }\n\n // Update user if provided\n if (state.user) {\n collector.user = assign(collector.user, state.user);\n }\n\n // Update globals if provided\n if (state.globals) {\n collector.globals = assign(\n collector.config.globalsStatic || {},\n state.globals,\n );\n }\n\n // Update custom if provided\n if (state.custom) {\n collector.custom = assign(collector.custom, state.custom);\n }\n }\n\n // Reset destination queues\n Object.values(collector.destinations).forEach((destination) => {\n destination.queue = [];\n });\n\n // Reset collector queue for this run\n collector.queue = [];\n\n // Increase round counter\n collector.round++;\n\n // Process any queued events now that the collector is allowed\n const result = await pushToDestinations(collector);\n\n // Call the predefined run events\n onApply(collector, 'run');\n\n return result;\n}\n","import type { Collector, WalkerOS, Elb } from '@walkeros/core';\nimport {\n getGrantedConsent,\n processEventMapping,\n tryCatchAsync,\n useHooks,\n} from '@walkeros/core';\nimport { createEvent } from './handle';\nimport { pushToDestinations, createPushResult } from './destination';\n\n/**\n * Creates the push function for the collector.\n * Handles source mapping, event creation, and routing to destinations.\n *\n * @param collector - The walkerOS collector instance\n * @param prepareEvent - Function to enrich partial events\n * @returns The push function\n */\nexport function createPush<T extends Collector.Instance>(\n collector: T,\n prepareEvent: (event: WalkerOS.DeepPartialEvent) => WalkerOS.PartialEvent,\n): Collector.PushFn {\n return useHooks(\n async (\n event: WalkerOS.DeepPartialEvent,\n context: Collector.PushContext = {},\n ): Promise<Elb.PushResult> => {\n return await tryCatchAsync(\n async (): Promise<Elb.PushResult> => {\n let partialEvent = event;\n\n // Apply source mapping if provided in context\n if (context.mapping) {\n const processed = await processEventMapping(\n partialEvent,\n context.mapping,\n collector,\n );\n\n // Check ignore flag\n if (processed.ignore) {\n return createPushResult({ ok: true });\n }\n\n // Check consent requirements\n if (context.mapping.consent) {\n const grantedConsent = getGrantedConsent(\n context.mapping.consent,\n collector.consent,\n processed.event.consent as WalkerOS.Consent | undefined,\n );\n\n if (!grantedConsent) {\n return createPushResult({ ok: true });\n }\n }\n\n partialEvent = processed.event;\n }\n\n // Prepare event (add timing, source info)\n const enrichedEvent = prepareEvent(partialEvent);\n\n // Create full event\n const fullEvent = createEvent(collector, enrichedEvent);\n\n // Push to destinations\n return await pushToDestinations(collector, fullEvent);\n },\n () => {\n return createPushResult({ ok: false });\n },\n )();\n },\n 'Push',\n collector.hooks,\n ) as Collector.PushFn;\n}\n","import type { Collector, Elb } from '@walkeros/core';\nimport type { HandleCommandFn } from './types/collector';\nimport { useHooks, tryCatchAsync } from '@walkeros/core';\nimport { createPushResult } from './destination';\n\n/**\n * Creates the command function for the collector.\n * Handles walker commands (config, consent, destination, etc.)\n *\n * @param collector - The walkerOS collector instance\n * @param handleCommand - Command handler function\n * @returns The command function\n */\nexport function createCommand<T extends Collector.Instance>(\n collector: T,\n handleCommand: HandleCommandFn<T>,\n): Collector.CommandFn {\n return useHooks(\n async (\n command: string,\n data?: unknown,\n options?: unknown,\n ): Promise<Elb.PushResult> => {\n return await tryCatchAsync(\n async (): Promise<Elb.PushResult> => {\n return await handleCommand(collector, command, data, options);\n },\n () => {\n return createPushResult({ ok: false });\n },\n )();\n },\n 'Command',\n collector.hooks,\n ) as Collector.CommandFn;\n}\n","import type { Collector, Source, WalkerOS, Elb } from '@walkeros/core';\n\n/**\n * Creates the default ELB source.\n * Routes between collector.push and collector.command based on input.\n * Provides backward-compatible flexible argument interface.\n *\n * @param collector - The walkerOS collector instance\n * @returns ELB source instance\n */\nexport function createElbSource(\n collector: Collector.Instance,\n): Source.Instance {\n return {\n type: 'elb',\n config: {},\n\n // The push function is the elb() interface users interact with\n push: async (\n eventOrCommand?: unknown,\n data?: unknown,\n options?: unknown,\n context?: unknown,\n nested?: WalkerOS.Entities,\n custom?: WalkerOS.Properties,\n ): Promise<Elb.PushResult> => {\n // Detect walker commands\n if (\n typeof eventOrCommand === 'string' &&\n eventOrCommand.startsWith('walker ')\n ) {\n const command = eventOrCommand.replace('walker ', '');\n return collector.command(command, data, options);\n }\n\n // Build event object\n let event: WalkerOS.DeepPartialEvent;\n\n if (typeof eventOrCommand === 'string') {\n // Convert string to object: elb('page view', { title: 'Home' })\n event = { name: eventOrCommand };\n if (data && typeof data === 'object' && !Array.isArray(data)) {\n event.data = data as WalkerOS.Properties;\n }\n } else if (eventOrCommand && typeof eventOrCommand === 'object') {\n // Use object directly: elb({ name: 'page view', data: {...} })\n event = eventOrCommand as WalkerOS.DeepPartialEvent;\n // Merge additional data if provided\n if (data && typeof data === 'object' && !Array.isArray(data)) {\n event.data = {\n ...(event.data || {}),\n ...(data as WalkerOS.Properties),\n };\n }\n } else {\n // Invalid input\n return { ok: false, successful: [], queued: [], failed: [] };\n }\n\n // Add optional properties if provided\n if (context && typeof context === 'object') {\n event.context = context as WalkerOS.OrderedProperties;\n }\n if (nested && Array.isArray(nested)) {\n event.nested = nested;\n }\n if (custom && typeof custom === 'object') {\n event.custom = custom as WalkerOS.Properties;\n }\n\n // Call collector.push with event object\n return collector.push(event);\n },\n };\n}\n","import type { Collector, Source, WalkerOS } from '@walkeros/core';\nimport { tryCatchAsync } from '@walkeros/core';\n\n/**\n * Initialize sources using the code/config/env pattern\n *\n * @param collector - The WalkerOS collector instance\n * @param sources - Map of source definitions with code/config/env\n * @returns Initialized sources\n */\nexport async function initSources(\n collector: Collector.Instance,\n sources: Source.InitSources = {},\n): Promise<Collector.Sources> {\n const result: Collector.Sources = {};\n\n for (const [sourceId, sourceDefinition] of Object.entries(sources)) {\n const { code, config = {}, env = {}, primary } = sourceDefinition;\n\n // Create wrapped push that auto-applies source mapping config\n const wrappedPush: Collector.PushFn = (\n event: WalkerOS.DeepPartialEvent,\n context: Collector.PushContext = {},\n ) => {\n // Pass source config as mapping in context\n return collector.push(event, {\n ...context,\n mapping: config,\n });\n };\n\n // Create initial logger scoped to sourceId (type will be added after init)\n const initialLogger = collector.logger.scope('source').scope(sourceId);\n\n const cleanEnv: Source.Env = {\n push: wrappedPush,\n command: collector.command,\n sources: collector.sources, // Provide access to all sources for chaining\n elb: collector.sources.elb.push, // ELB source is always available\n logger: initialLogger,\n ...env,\n };\n\n // Call source function with config and environment separately\n const sourceInstance = await tryCatchAsync(code)(config, cleanEnv);\n\n if (!sourceInstance) continue; // Skip failed source initialization\n\n // Update logger with actual source type: [type:sourceId] or [unknown:sourceId]\n const sourceType = sourceInstance.type || 'unknown';\n const sourceLogger = collector.logger.scope(sourceType).scope(sourceId);\n cleanEnv.logger = sourceLogger;\n\n // Store the primary flag in the source config for later access\n if (primary) {\n sourceInstance.config = { ...sourceInstance.config, primary };\n }\n\n result[sourceId] = sourceInstance;\n }\n\n return result;\n}\n","import type { Collector, Elb } from '@walkeros/core';\nimport type { StartFlow } from './types';\nimport { collector } from './collector';\nimport { createElbSource } from './elb';\nimport { initSources } from './source';\n\nexport async function startFlow<ElbPush extends Elb.Fn = Elb.Fn>(\n initConfig?: Collector.InitConfig,\n): Promise<StartFlow<ElbPush>> {\n initConfig = initConfig || {};\n const instance = await collector(initConfig);\n\n // Create and register ELB source first\n const elbSource = createElbSource(instance);\n instance.sources.elb = elbSource;\n\n // Now initialize other sources with ELB source available\n const additionalSources = await initSources(\n instance,\n initConfig.sources || {},\n );\n Object.assign(instance.sources, additionalSources);\n\n const { consent, user, globals, custom } = initConfig;\n\n if (consent) await instance.command('consent', consent);\n if (user) await instance.command('user', user);\n if (globals) Object.assign(instance.globals, globals);\n if (custom) Object.assign(instance.custom, custom);\n\n if (instance.config.run) await instance.command('run');\n\n // Determine the primary elb:\n // 1. Use explicitly marked primary source\n // 2. Use first non-elb source if any exist\n // 3. Fallback to ELB source\n let primaryElb: Elb.Fn = elbSource.push as Elb.Fn;\n\n const sources = Object.values(instance.sources).filter(\n (source) => source.type !== 'elb',\n );\n\n // First, check for explicitly marked primary source\n const markedPrimary = sources.find(\n (source) => (source.config as { primary?: boolean }).primary,\n );\n\n if (markedPrimary) {\n primaryElb = markedPrimary.push as Elb.Fn;\n } else if (sources.length > 0) {\n // Use first source as default\n primaryElb = sources[0].push as Elb.Fn;\n }\n\n return {\n collector: instance,\n elb: primaryElb as ElbPush,\n };\n}\n"],"mappings":"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","names":["import_core","collector","event","destination","import_core","import_core","collector","on","option","collector","import_core","import_core","collector","import_core","collector","import_core","collector","collector","collector","import_core","collector"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/types/code.ts","../src/constants.ts","../src/consent.ts","../src/destination.ts","../src/destination-code.ts","../src/on.ts","../src/collector.ts","../src/handle.ts","../src/push.ts","../src/command.ts","../src/elb.ts","../src/source.ts","../src/flow.ts"],"sourcesContent":["export * from './types';\n\nexport * from './constants';\n\nexport * from './consent';\nexport * from './flow';\nexport * from './push';\nexport * from './destination';\nexport * from './destination-code';\nexport * from './handle';\nexport * from './on';\nexport * from './source';\n","import type { Destination, Mapping, On, WalkerOS } from '@walkeros/core';\n\nexport interface Settings {\n scripts?: string[];\n init?: string;\n on?: string;\n push?: string;\n pushBatch?: string;\n}\n\nexport interface CodeMapping extends Mapping.Rule<CodeMapping> {\n push?: string;\n pushBatch?: string;\n}\n\nexport type Types = Destination.Types<Settings, CodeMapping>;\nexport type Config = Destination.Config<Types>;\nexport type Context = Destination.Context<Types>;\nexport type InitContext = Destination.InitContext<Types>;\nexport type PushContext = Destination.PushContext<Types>;\nexport type PushBatchContext = Destination.PushBatchContext<Types>;\n\nexport type InitFn = (context: InitContext) => void;\nexport type OnFn = (type: On.Types, context: Context) => void;\nexport type PushFn = (event: WalkerOS.Event, context: PushContext) => void;\nexport type PushBatchFn = (\n batch: Destination.Batch<CodeMapping>,\n context: PushBatchContext,\n) => void;\n","import type { Collector } from '@walkeros/core';\nimport type { CommandTypes, StorageType } from './types/collector';\n\nexport const Commands: Record<CommandTypes, Collector.CommandType> = {\n Action: 'action',\n Actions: 'actions',\n Config: 'config',\n Consent: 'consent',\n Context: 'context',\n Custom: 'custom',\n Destination: 'destination',\n Elb: 'elb',\n Globals: 'globals',\n Hook: 'hook',\n Init: 'init',\n Link: 'link',\n On: 'on',\n Prefix: 'data-elb',\n Ready: 'ready',\n Run: 'run',\n Session: 'session',\n User: 'user',\n Walker: 'walker',\n} as const;\n\nconst UtilsStorage: { [key: string]: StorageType } = {\n Cookie: 'cookie',\n Local: 'local',\n Session: 'session',\n} as const;\n\nconst Utils = {\n Storage: UtilsStorage,\n};\n\nexport const Const = {\n Commands,\n Utils,\n};\n\nexport default Const;\n","import type { Collector, WalkerOS, Elb } from '@walkeros/core';\nimport { assign } from '@walkeros/core';\nimport { pushToDestinations, createPushResult } from './destination';\nimport { onApply } from './on';\n\n/**\n * Sets the consent state and processes the queue.\n *\n * @param collector - The walkerOS collector instance.\n * @param data - The consent data to set.\n * @returns The result of the push operation.\n */\nexport async function setConsent(\n collector: Collector.Instance,\n data: WalkerOS.Consent,\n): Promise<Elb.PushResult> {\n const { consent } = collector;\n\n let runQueue = false;\n const update: WalkerOS.Consent = {};\n Object.entries(data).forEach(([name, granted]) => {\n const state = !!granted;\n\n update[name] = state;\n\n // Only run queue if state was set to true\n runQueue = runQueue || state;\n });\n\n // Update consent state\n collector.consent = assign(consent, update);\n\n // Run on consent events\n onApply(collector, 'consent', undefined, update);\n\n // Process previous events if not disabled\n return runQueue\n ? pushToDestinations(collector)\n : createPushResult({ ok: true });\n}\n","import type { Collector, WalkerOS, Elb, Destination } from '@walkeros/core';\nimport {\n assign,\n clone,\n debounce,\n getId,\n getGrantedConsent,\n isDefined,\n isObject,\n processEventMapping,\n tryCatchAsync,\n useHooks,\n} from '@walkeros/core';\nimport { destinationCode } from './destination-code';\n\nfunction resolveCode(code: Destination.Instance | true): Destination.Instance {\n return code === true ? destinationCode : code;\n}\n\n/**\n * Adds a new destination to the collector.\n *\n * @param collector - The walkerOS collector instance.\n * @param data - The destination's init data.\n * @param options - The destination's config.\n * @returns The result of the push operation.\n */\nexport async function addDestination(\n collector: Collector.Instance,\n data: Destination.Init,\n options?: Destination.Config,\n): Promise<Elb.PushResult> {\n const { code, config: dataConfig = {}, env = {} } = data;\n const config = options || dataConfig || { init: false };\n\n const resolved = resolveCode(code);\n const destination: Destination.Instance = {\n ...resolved,\n config,\n env: mergeEnvironments(resolved.env, env),\n };\n\n let id = destination.config.id; // Use given id\n if (!id) {\n // Generate a new id if none was given\n do {\n id = getId(4);\n } while (collector.destinations[id]);\n }\n\n // Add the destination\n collector.destinations[id] = destination;\n\n // Process previous events if not disabled\n if (destination.config.queue !== false)\n destination.queue = [...collector.queue];\n\n return pushToDestinations(collector, undefined, { [id]: destination });\n}\n\n/**\n * Pushes an event to all or a subset of destinations.\n *\n * @param collector - The walkerOS collector instance.\n * @param event - The event to push.\n * @param destinations - The destinations to push to.\n * @returns The result of the push operation.\n */\nexport async function pushToDestinations(\n collector: Collector.Instance,\n event?: WalkerOS.Event,\n destinations?: Collector.Destinations,\n): Promise<Elb.PushResult> {\n const { allowed, consent, globals, user } = collector;\n\n // Check if collector is allowed to push\n if (!allowed) return createPushResult({ ok: false });\n\n // Add event to the collector queue\n if (event) collector.queue.push(event);\n\n // Use given destinations or use internal destinations\n if (!destinations) destinations = collector.destinations;\n\n const results = await Promise.all(\n // Process all destinations in parallel\n Object.entries(destinations || {}).map(async ([id, destination]) => {\n // Create a queue of events to be processed\n let currentQueue = (destination.queue || []).map((event) => ({\n ...event,\n consent,\n }));\n\n // Reset original queue while processing to enable async processing\n destination.queue = [];\n\n // Add event to queue stack\n if (event) {\n // Clone the event to avoid mutating the original event\n const currentEvent = clone(event);\n\n // Note: Policy is now applied in processEventMapping() within destinationPush()\n\n // Add event to queue stack\n currentQueue.push(currentEvent);\n }\n\n // Nothing to do here if the queue is empty\n if (!currentQueue.length) return { id, destination, skipped: true };\n\n const allowedEvents: WalkerOS.Events = [];\n const skippedEvents = currentQueue.filter((queuedEvent) => {\n const grantedConsent = getGrantedConsent(\n destination.config.consent, // Required\n consent, // Current collector state\n queuedEvent.consent, // Individual event state\n );\n\n if (grantedConsent) {\n queuedEvent.consent = grantedConsent; // Save granted consent states only\n\n allowedEvents.push(queuedEvent); // Add to allowed queue\n return false; // Remove from destination queue\n }\n\n return true; // Keep denied events in the queue\n });\n\n // Add skipped events back to the queue\n destination.queue.concat(skippedEvents);\n\n // Execution shall not pass if no events are allowed\n if (!allowedEvents.length) {\n return { id, destination, queue: currentQueue }; // Don't push if not allowed\n }\n\n // Initialize the destination if needed\n const isInitialized = await tryCatchAsync(destinationInit)(\n collector,\n destination,\n );\n\n if (!isInitialized) return { id, destination, queue: currentQueue };\n\n // Process the destinations event queue\n let error = false;\n if (!destination.dlq) destination.dlq = [];\n\n // Process allowed events and store failed ones in the dead letter queue (DLQ)\n await Promise.all(\n allowedEvents.map(async (event) => {\n // Merge event with collector state, prioritizing event properties\n event.globals = assign(globals, event.globals);\n event.user = assign(user, event.user);\n\n await tryCatchAsync(destinationPush, (err) => {\n // Log the error with destination scope\n const destType = destination.type || 'unknown';\n collector.logger.scope(destType).error('Push failed', {\n error: err,\n event: event.name,\n });\n error = true; // oh no\n\n // Add failed event to destinations DLQ\n destination.dlq!.push([event, err]);\n\n return false;\n })(collector, destination, event);\n\n return event;\n }),\n );\n\n return { id, destination, error };\n }),\n );\n\n const successful = [];\n const queued = [];\n const failed = [];\n\n for (const result of results) {\n if (result.skipped) continue;\n\n const destination = result.destination;\n\n const ref = { id: result.id, destination };\n\n if (result.error) {\n failed.push(ref);\n } else if (result.queue && result.queue.length) {\n // Merge queue with existing queue\n destination.queue = (destination.queue || []).concat(result.queue);\n queued.push(ref);\n } else {\n successful.push(ref);\n }\n }\n\n return createPushResult({\n ok: !failed.length,\n event,\n successful,\n queued,\n failed,\n });\n}\n\n/**\n * Initializes a destination.\n *\n * @template Destination\n * @param collector - The walkerOS collector instance.\n * @param destination - The destination to initialize.\n * @returns Whether the destination was initialized successfully.\n */\nexport async function destinationInit<Destination extends Destination.Instance>(\n collector: Collector.Instance,\n destination: Destination,\n): Promise<boolean> {\n // Check if the destination was initialized properly or try to do so\n if (destination.init && !destination.config.init) {\n // Create scoped logger for this destination: [type:id] or [unknown:id]\n const destType = destination.type || 'unknown';\n const destLogger = collector.logger.scope(destType);\n\n const context = {\n collector,\n config: destination.config,\n env: mergeEnvironments(destination.env, destination.config.env),\n logger: destLogger,\n } as Destination.InitContext;\n\n destLogger.debug('init');\n\n const configResult = await useHooks(\n destination.init,\n 'DestinationInit',\n collector.hooks,\n )(context);\n\n // Actively check for errors (when false)\n if (configResult === false) return configResult; // don't push if init is false\n\n // Update the destination config if it was returned\n destination.config = {\n ...(configResult || destination.config),\n init: true, // Remember that the destination was initialized\n };\n\n destLogger.debug('init done');\n }\n\n return true; // Destination is ready to push\n}\n\n/**\n * Pushes an event to a single destination.\n * Handles mapping, batching, and consent checks.\n *\n * @template Destination\n * @param collector - The walkerOS collector instance.\n * @param destination - The destination to push to.\n * @param event - The event to push.\n * @returns Whether the event was pushed successfully.\n */\nexport async function destinationPush<Destination extends Destination.Instance>(\n collector: Collector.Instance,\n destination: Destination,\n event: WalkerOS.Event,\n): Promise<boolean> {\n const { config } = destination;\n\n const processed = await processEventMapping(event, config, collector);\n\n if (processed.ignore) return false;\n\n // Create scoped logger for this destination: [type] or [unknown]\n const destType = destination.type || 'unknown';\n const destLogger = collector.logger.scope(destType);\n\n const context: Destination.PushContext = {\n collector,\n config,\n data: processed.data,\n mapping: processed.mapping,\n env: mergeEnvironments(destination.env, config.env),\n logger: destLogger,\n };\n\n const eventMapping = processed.mapping;\n const mappingKey = processed.mappingKey || '* *';\n\n if (eventMapping?.batch && destination.pushBatch) {\n // Initialize batch registry on destination (not on shared mapping config)\n destination.batches = destination.batches || {};\n\n // Get or create batch state for this mapping key\n if (!destination.batches[mappingKey]) {\n const batched: Destination.Batch<unknown> = {\n key: mappingKey,\n events: [],\n data: [],\n };\n\n destination.batches[mappingKey] = {\n batched,\n batchFn: debounce(() => {\n const batchState = destination.batches![mappingKey];\n const currentBatched = batchState.batched;\n\n const batchContext: Destination.PushBatchContext = {\n collector,\n config,\n // Note: batch.data contains all transformed data; context.data is for single events\n data: undefined,\n mapping: eventMapping,\n env: mergeEnvironments(destination.env, config.env),\n logger: destLogger,\n };\n\n destLogger.debug('push batch', {\n events: currentBatched.events.length,\n });\n\n useHooks(\n destination.pushBatch!,\n 'DestinationPushBatch',\n collector.hooks,\n )(currentBatched, batchContext);\n\n destLogger.debug('push batch done');\n\n // Reset batch\n currentBatched.events = [];\n currentBatched.data = [];\n }, eventMapping.batch),\n };\n }\n\n // Add event to batch\n const batchState = destination.batches[mappingKey];\n batchState.batched.events.push(processed.event);\n if (isDefined(processed.data)) batchState.batched.data.push(processed.data);\n\n // Trigger debounced batch\n batchState.batchFn();\n } else {\n destLogger.debug('push', { event: processed.event.name });\n\n // It's time to go to the destination's side now\n await useHooks(\n destination.push,\n 'DestinationPush',\n collector.hooks,\n )(processed.event, context);\n\n destLogger.debug('push done');\n }\n\n return true;\n}\n\n/**\n * Creates a standardized result object for push operations.\n *\n * @param partialResult - A partial result to merge with the default result.\n * @returns The push result.\n */\nexport function createPushResult(\n partialResult?: Partial<Elb.PushResult>,\n): Elb.PushResult {\n return assign(\n {\n ok: !partialResult?.failed?.length,\n successful: [],\n queued: [],\n failed: [],\n },\n partialResult,\n );\n}\n\n/**\n * Initializes a map of destinations using ONLY the unified code/config/env pattern.\n * Does NOT call destination.init() - that happens later during push with proper consent checks.\n *\n * @param destinations - The destinations to initialize.\n * @param collector - The collector instance for destination init context.\n * @returns The initialized destinations.\n */\nexport async function initDestinations(\n _collector: Collector.Instance,\n destinations: Destination.InitDestinations = {},\n): Promise<Collector.Destinations> {\n const result: Collector.Destinations = {};\n\n for (const [name, destinationDef] of Object.entries(destinations)) {\n const { code, config = {}, env = {} } = destinationDef;\n const resolved = resolveCode(code);\n\n const mergedConfig = {\n ...resolved.config,\n ...config,\n };\n\n const mergedEnv = mergeEnvironments(resolved.env, env);\n\n result[name] = {\n ...resolved,\n config: mergedConfig,\n env: mergedEnv,\n };\n }\n\n return result;\n}\n\n/**\n * Merges destination environment with config environment\n * Config env takes precedence over destination env for overrides\n */\nexport function mergeEnvironments(\n destinationEnv?: Destination.Env,\n configEnv?: Destination.Env,\n): Destination.Env {\n // If neither environment exists, return empty object\n if (!destinationEnv && !configEnv) return {};\n\n // If only one exists, return it\n if (!configEnv) return destinationEnv!;\n if (!destinationEnv) return configEnv;\n\n // Both exist - merge objects with configEnv taking precedence\n if (isObject(destinationEnv) && isObject(configEnv)) {\n return { ...destinationEnv, ...configEnv };\n }\n\n // If they're not both objects, config env overrides destination env\n return configEnv;\n}\n","import type { Destination } from '@walkeros/core';\nimport type { CodeMapping, Settings } from './types/code';\n\nexport const destinationCode: Destination.Instance = {\n type: 'code',\n config: {},\n\n init(context) {\n const { config, logger } = context;\n const settings = config.settings as Settings | undefined;\n\n // Inject scripts (fire and forget)\n const scripts = settings?.scripts;\n if (scripts && typeof document !== 'undefined') {\n for (const src of scripts) {\n const script = document.createElement('script');\n script.src = src;\n script.async = true;\n document.head.appendChild(script);\n }\n }\n\n // Execute init code\n const initCode = settings?.init;\n if (!initCode) return;\n try {\n const fn = new Function('context', initCode);\n fn(context);\n } catch (e) {\n logger.error('Code destination init error:', e);\n }\n },\n\n push(event, context) {\n const { mapping, config, logger } = context;\n const pushCode =\n (mapping as CodeMapping | undefined)?.push ??\n (config.settings as Settings | undefined)?.push;\n if (!pushCode) return;\n try {\n const fn = new Function('event', 'context', pushCode);\n fn(event, context);\n } catch (e) {\n logger.error('Code destination push error:', e);\n }\n },\n\n pushBatch(batch, context) {\n const { mapping, config, logger } = context;\n const pushBatchCode =\n (mapping as CodeMapping | undefined)?.pushBatch ??\n (config.settings as Settings | undefined)?.pushBatch;\n if (!pushBatchCode) return;\n try {\n const fn = new Function('batch', 'context', pushBatchCode);\n fn(batch, context);\n } catch (e) {\n logger.error('Code destination pushBatch error:', e);\n }\n },\n\n on(type, context) {\n const { config, logger } = context;\n const onCode = (config.settings as Settings | undefined)?.on;\n if (!onCode) return;\n try {\n const fn = new Function('type', 'context', onCode);\n fn(type, context);\n } catch (e) {\n logger.error('Code destination on error:', e);\n }\n },\n};\n\nexport default destinationCode;\n","import type { Collector, On, WalkerOS, Destination } from '@walkeros/core';\nimport { isArray } from '@walkeros/core';\nimport { Const } from './constants';\nimport { tryCatch } from '@walkeros/core';\nimport { mergeEnvironments } from './destination';\n\n/**\n * Registers a callback for a specific event type.\n *\n * @param collector The walkerOS collector instance.\n * @param type The type of the event to listen for.\n * @param option The callback function or an array of callback functions.\n */\nexport function on(\n collector: Collector.Instance,\n type: On.Types,\n option: WalkerOS.SingleOrArray<On.Options>,\n) {\n const on = collector.on;\n const onType: Array<On.Options> = on[type] || [];\n const options = isArray(option) ? option : [option];\n\n options.forEach((option) => {\n onType.push(option);\n });\n\n // Update collector on state\n (on[type] as typeof onType) = onType;\n\n // Execute the on function directly\n onApply(collector, type, options);\n}\n\n/**\n * Applies all registered callbacks for a specific event type.\n *\n * @param collector The walkerOS collector instance.\n * @param type The type of the event to apply the callbacks for.\n * @param options The options for the callbacks.\n * @param config The consent configuration.\n */\nexport function onApply(\n collector: Collector.Instance,\n type: On.Types,\n options?: Array<On.Options>,\n config?: WalkerOS.Consent,\n) {\n // Use the optionally provided options\n let onConfig = options || [];\n\n if (!options) {\n // Get the collector on events\n onConfig = collector.on[type] || [];\n }\n\n // Calculate context data once for all sources and destinations\n let contextData: unknown;\n\n switch (type) {\n case Const.Commands.Consent:\n contextData = config || collector.consent;\n break;\n case Const.Commands.Session:\n contextData = collector.session;\n break;\n case Const.Commands.Ready:\n case Const.Commands.Run:\n default:\n contextData = undefined;\n break;\n }\n\n Object.values(collector.sources).forEach((source) => {\n if (source.on) {\n tryCatch(source.on)(type, contextData);\n }\n });\n\n Object.values(collector.destinations).forEach((destination) => {\n if (destination.on) {\n const destType = destination.type || 'unknown';\n const destLogger = collector.logger\n .scope(destType)\n .scope('on')\n .scope(type);\n\n const context: Destination.Context = {\n collector,\n config: destination.config,\n data: contextData as Destination.Data,\n env: mergeEnvironments(destination.env, destination.config.env),\n logger: destLogger,\n };\n\n tryCatch(destination.on)(type, context);\n }\n });\n\n if (!onConfig.length) return; // No on-events registered, nothing to do\n\n switch (type) {\n case Const.Commands.Consent:\n onConsent(collector, onConfig as Array<On.ConsentConfig>, config);\n break;\n case Const.Commands.Ready:\n onReady(collector, onConfig as Array<On.ReadyConfig>);\n break;\n case Const.Commands.Run:\n onRun(collector, onConfig as Array<On.RunConfig>);\n break;\n case Const.Commands.Session:\n onSession(collector, onConfig as Array<On.SessionConfig>);\n break;\n default:\n break;\n }\n}\n\nfunction onConsent(\n collector: Collector.Instance,\n onConfig: Array<On.ConsentConfig>,\n currentConsent?: WalkerOS.Consent,\n): void {\n const consentState = currentConsent || collector.consent;\n\n onConfig.forEach((consentConfig) => {\n // Collect functions whose consent keys match the rule keys directly\n // Directly execute functions whose consent keys match the rule keys\n Object.keys(consentState) // consent keys\n .filter((consent) => consent in consentConfig) // check for matching rule keys\n .forEach((consent) => {\n // Execute the function\n tryCatch(consentConfig[consent])(collector, consentState);\n });\n });\n}\n\nfunction onReady(\n collector: Collector.Instance,\n onConfig: Array<On.ReadyConfig>,\n): void {\n if (collector.allowed)\n onConfig.forEach((func) => {\n tryCatch(func)(collector);\n });\n}\n\nfunction onRun(\n collector: Collector.Instance,\n onConfig: Array<On.RunConfig>,\n): void {\n if (collector.allowed)\n onConfig.forEach((func) => {\n tryCatch(func)(collector);\n });\n}\n\nfunction onSession(\n collector: Collector.Instance,\n onConfig: Array<On.SessionConfig>,\n): void {\n if (!collector.session) return;\n\n onConfig.forEach((func) => {\n tryCatch(func)(collector, collector.session);\n });\n}\n","import type { Collector, Logger, WalkerOS } from '@walkeros/core';\nimport { assign, createLogger } from '@walkeros/core';\nimport { commonHandleCommand } from './handle';\nimport { initDestinations } from './destination';\nimport { createPush } from './push';\nimport { createCommand } from './command';\nimport { initSources } from './source';\n\ndeclare const __VERSION__: string;\n\nexport async function collector(\n initConfig: Collector.InitConfig,\n): Promise<Collector.Instance> {\n const version = __VERSION__;\n\n const defaultConfig: Collector.Config = {\n globalsStatic: {},\n sessionStatic: {},\n tagging: 0,\n run: true,\n };\n\n const config: Collector.Config = assign(defaultConfig, initConfig, {\n merge: false,\n extend: false,\n });\n\n // Create logger with config from initConfig\n const loggerConfig: Logger.Config = {\n level: initConfig.logger?.level,\n handler: initConfig.logger?.handler,\n };\n const logger = createLogger(loggerConfig);\n\n // Enhanced globals with static globals from config\n const finalGlobals = { ...config.globalsStatic, ...initConfig.globals };\n\n const collector: Collector.Instance = {\n allowed: false,\n config,\n consent: initConfig.consent || {},\n count: 0,\n custom: initConfig.custom || {},\n destinations: {},\n globals: finalGlobals,\n group: '',\n hooks: {},\n logger,\n on: {},\n queue: [],\n round: 0,\n session: undefined,\n timing: Date.now(),\n user: initConfig.user || {},\n version,\n sources: {},\n push: undefined as unknown as Collector.PushFn, // Placeholder, will be set below\n command: undefined as unknown as Collector.CommandFn, // Placeholder, will be set below\n };\n\n // Set the push and command functions with the collector reference\n collector.push = createPush(\n collector,\n (event: WalkerOS.DeepPartialEvent): WalkerOS.PartialEvent =>\n ({\n timing: Math.round((Date.now() - collector.timing) / 10) / 100,\n source: { type: 'collector', id: '', previous_id: '' },\n ...event,\n }) as WalkerOS.PartialEvent,\n );\n\n collector.command = createCommand(collector, commonHandleCommand);\n\n // Initialize destinations after collector is fully created\n // Sources are initialized in startFlow after ELB source is created\n collector.destinations = await initDestinations(\n collector,\n initConfig.destinations || {},\n );\n\n return collector;\n}\n","import type { Collector, WalkerOS, Destination, Elb, On } from '@walkeros/core';\nimport { Const } from './constants';\nimport { addDestination, pushToDestinations } from './destination';\nimport { assign, getId, isFunction, isString } from '@walkeros/core';\nimport { isObject } from '@walkeros/core';\nimport { setConsent } from './consent';\nimport { on, onApply } from './on';\nimport type { RunState } from './types/collector';\n\n/**\n * Handles common commands.\n *\n * @param collector The walkerOS collector instance.\n * @param action The action to handle.\n * @param data The data to handle.\n * @param options The options to handle.\n * @returns A promise that resolves with the push result or undefined.\n */\nexport async function commonHandleCommand(\n collector: Collector.Instance,\n action: string,\n data?: unknown,\n options?: unknown,\n): Promise<Elb.PushResult> {\n let result: Elb.PushResult | undefined;\n switch (action) {\n case Const.Commands.Config:\n if (isObject(data)) {\n assign(collector.config, data as Partial<Collector.Config>, {\n shallow: false,\n });\n }\n break;\n\n case Const.Commands.Consent:\n if (isObject(data)) {\n result = await setConsent(collector, data as WalkerOS.Consent);\n }\n break;\n\n case Const.Commands.Custom:\n if (isObject(data)) {\n collector.custom = assign(\n collector.custom,\n data as WalkerOS.Properties,\n );\n }\n break;\n\n case Const.Commands.Destination:\n if (isObject(data) && isFunction(data.push)) {\n result = await addDestination(\n collector,\n { code: data as unknown as Destination.Instance },\n options as Destination.Config,\n );\n }\n break;\n\n case Const.Commands.Globals:\n if (isObject(data)) {\n collector.globals = assign(\n collector.globals,\n data as WalkerOS.Properties,\n );\n }\n break;\n\n case Const.Commands.On:\n if (isString(data)) {\n on(\n collector,\n data as On.Types,\n options as WalkerOS.SingleOrArray<On.Options>,\n );\n }\n break;\n\n case Const.Commands.Ready:\n onApply(collector, 'ready');\n break;\n\n case Const.Commands.Run:\n result = await runCollector(collector, data as RunState);\n break;\n\n case Const.Commands.Session:\n onApply(collector, 'session');\n break;\n\n case Const.Commands.User:\n if (isObject(data)) {\n assign(collector.user, data as WalkerOS.User, { shallow: false });\n }\n break;\n }\n\n return (\n result || {\n ok: true,\n successful: [],\n queued: [],\n failed: [],\n }\n );\n}\n\n/**\n * Creates a full event from a partial event.\n *\n * @param collector The walkerOS collector instance.\n * @param partialEvent The partial event to transform.\n * @returns The full event.\n */\nexport function createEvent(\n collector: Collector.Instance,\n partialEvent: WalkerOS.PartialEvent,\n): WalkerOS.Event {\n if (!partialEvent.name) throw new Error('Event name is required');\n\n const [entityValue, actionValue] = partialEvent.name.split(' ');\n if (!entityValue || !actionValue) throw new Error('Event name is invalid');\n\n ++collector.count;\n\n const {\n timestamp = Date.now(),\n group = collector.group,\n count = collector.count,\n } = partialEvent;\n\n const {\n name = `${entityValue} ${actionValue}`,\n data = {},\n context = {},\n globals = collector.globals,\n custom = {},\n user = collector.user,\n nested = [],\n consent = collector.consent,\n id = `${timestamp}-${group}-${count}`,\n trigger = '',\n entity = entityValue,\n action = actionValue,\n timing = 0,\n version = {\n source: collector.version,\n tagging: collector.config.tagging || 0,\n },\n source = { type: 'collector', id: '', previous_id: '' },\n } = partialEvent;\n\n return {\n name,\n data,\n context,\n globals,\n custom,\n user,\n nested,\n consent,\n id,\n trigger,\n entity,\n action,\n timestamp,\n timing,\n group,\n count,\n version,\n source,\n };\n}\n\n/**\n * Runs the collector by setting it to allowed state and processing queued events.\n *\n * @param collector The walkerOS collector instance.\n * @param state Optional state to merge with the collector (user, globals, consent, custom).\n * @returns A promise that resolves with the push result.\n */\nexport async function runCollector(\n collector: Collector.Instance,\n state?: RunState,\n): Promise<Elb.PushResult> {\n // Set the collector to allowed state\n collector.allowed = true;\n\n // Reset count and generate new group ID\n collector.count = 0;\n collector.group = getId();\n\n // Update timing for this run\n collector.timing = Date.now();\n\n // Update collector state if provided\n if (state) {\n // Update consent if provided\n if (state.consent) {\n collector.consent = assign(collector.consent, state.consent);\n }\n\n // Update user if provided\n if (state.user) {\n collector.user = assign(collector.user, state.user);\n }\n\n // Update globals if provided\n if (state.globals) {\n collector.globals = assign(\n collector.config.globalsStatic || {},\n state.globals,\n );\n }\n\n // Update custom if provided\n if (state.custom) {\n collector.custom = assign(collector.custom, state.custom);\n }\n }\n\n // Reset destination queues\n Object.values(collector.destinations).forEach((destination) => {\n destination.queue = [];\n });\n\n // Reset collector queue for this run\n collector.queue = [];\n\n // Increase round counter\n collector.round++;\n\n // Process any queued events now that the collector is allowed\n const result = await pushToDestinations(collector);\n\n // Call the predefined run events\n onApply(collector, 'run');\n\n return result;\n}\n","import type { Collector, WalkerOS, Elb } from '@walkeros/core';\nimport {\n getGrantedConsent,\n processEventMapping,\n tryCatchAsync,\n useHooks,\n} from '@walkeros/core';\nimport { createEvent } from './handle';\nimport { pushToDestinations, createPushResult } from './destination';\n\n/**\n * Creates the push function for the collector.\n * Handles source mapping, event creation, and routing to destinations.\n *\n * @param collector - The walkerOS collector instance\n * @param prepareEvent - Function to enrich partial events\n * @returns The push function\n */\nexport function createPush<T extends Collector.Instance>(\n collector: T,\n prepareEvent: (event: WalkerOS.DeepPartialEvent) => WalkerOS.PartialEvent,\n): Collector.PushFn {\n return useHooks(\n async (\n event: WalkerOS.DeepPartialEvent,\n context: Collector.PushContext = {},\n ): Promise<Elb.PushResult> => {\n return await tryCatchAsync(\n async (): Promise<Elb.PushResult> => {\n let partialEvent = event;\n\n // Apply source mapping if provided in context\n if (context.mapping) {\n const processed = await processEventMapping(\n partialEvent,\n context.mapping,\n collector,\n );\n\n // Check ignore flag\n if (processed.ignore) {\n return createPushResult({ ok: true });\n }\n\n // Check consent requirements\n if (context.mapping.consent) {\n const grantedConsent = getGrantedConsent(\n context.mapping.consent,\n collector.consent,\n processed.event.consent as WalkerOS.Consent | undefined,\n );\n\n if (!grantedConsent) {\n return createPushResult({ ok: true });\n }\n }\n\n partialEvent = processed.event;\n }\n\n // Prepare event (add timing, source info)\n const enrichedEvent = prepareEvent(partialEvent);\n\n // Create full event\n const fullEvent = createEvent(collector, enrichedEvent);\n\n // Push to destinations\n return await pushToDestinations(collector, fullEvent);\n },\n () => {\n return createPushResult({ ok: false });\n },\n )();\n },\n 'Push',\n collector.hooks,\n ) as Collector.PushFn;\n}\n","import type { Collector, Elb } from '@walkeros/core';\nimport type { HandleCommandFn } from './types/collector';\nimport { useHooks, tryCatchAsync } from '@walkeros/core';\nimport { createPushResult } from './destination';\n\n/**\n * Creates the command function for the collector.\n * Handles walker commands (config, consent, destination, etc.)\n *\n * @param collector - The walkerOS collector instance\n * @param handleCommand - Command handler function\n * @returns The command function\n */\nexport function createCommand<T extends Collector.Instance>(\n collector: T,\n handleCommand: HandleCommandFn<T>,\n): Collector.CommandFn {\n return useHooks(\n async (\n command: string,\n data?: unknown,\n options?: unknown,\n ): Promise<Elb.PushResult> => {\n return await tryCatchAsync(\n async (): Promise<Elb.PushResult> => {\n return await handleCommand(collector, command, data, options);\n },\n () => {\n return createPushResult({ ok: false });\n },\n )();\n },\n 'Command',\n collector.hooks,\n ) as Collector.CommandFn;\n}\n","import type { Collector, Source, WalkerOS, Elb } from '@walkeros/core';\n\n/**\n * Creates the default ELB source.\n * Routes between collector.push and collector.command based on input.\n * Provides backward-compatible flexible argument interface.\n *\n * @param collector - The walkerOS collector instance\n * @returns ELB source instance\n */\nexport function createElbSource(\n collector: Collector.Instance,\n): Source.Instance {\n return {\n type: 'elb',\n config: {},\n\n // The push function is the elb() interface users interact with\n push: async (\n eventOrCommand?: unknown,\n data?: unknown,\n options?: unknown,\n context?: unknown,\n nested?: WalkerOS.Entities,\n custom?: WalkerOS.Properties,\n ): Promise<Elb.PushResult> => {\n // Detect walker commands\n if (\n typeof eventOrCommand === 'string' &&\n eventOrCommand.startsWith('walker ')\n ) {\n const command = eventOrCommand.replace('walker ', '');\n return collector.command(command, data, options);\n }\n\n // Build event object\n let event: WalkerOS.DeepPartialEvent;\n\n if (typeof eventOrCommand === 'string') {\n // Convert string to object: elb('page view', { title: 'Home' })\n event = { name: eventOrCommand };\n if (data && typeof data === 'object' && !Array.isArray(data)) {\n event.data = data as WalkerOS.Properties;\n }\n } else if (eventOrCommand && typeof eventOrCommand === 'object') {\n // Use object directly: elb({ name: 'page view', data: {...} })\n event = eventOrCommand as WalkerOS.DeepPartialEvent;\n // Merge additional data if provided\n if (data && typeof data === 'object' && !Array.isArray(data)) {\n event.data = {\n ...(event.data || {}),\n ...(data as WalkerOS.Properties),\n };\n }\n } else {\n // Invalid input\n return { ok: false, successful: [], queued: [], failed: [] };\n }\n\n // Add optional properties if provided\n if (context && typeof context === 'object') {\n event.context = context as WalkerOS.OrderedProperties;\n }\n if (nested && Array.isArray(nested)) {\n event.nested = nested;\n }\n if (custom && typeof custom === 'object') {\n event.custom = custom as WalkerOS.Properties;\n }\n\n // Call collector.push with event object\n return collector.push(event);\n },\n };\n}\n","import type { Collector, Source, WalkerOS } from '@walkeros/core';\nimport { tryCatchAsync } from '@walkeros/core';\n\n/**\n * Initialize sources using the code/config/env pattern\n *\n * @param collector - The WalkerOS collector instance\n * @param sources - Map of source definitions with code/config/env\n * @returns Initialized sources\n */\nexport async function initSources(\n collector: Collector.Instance,\n sources: Source.InitSources = {},\n): Promise<Collector.Sources> {\n const result: Collector.Sources = {};\n\n for (const [sourceId, sourceDefinition] of Object.entries(sources)) {\n const { code, config = {}, env = {}, primary } = sourceDefinition;\n\n // Create wrapped push that auto-applies source mapping config\n const wrappedPush: Collector.PushFn = (\n event: WalkerOS.DeepPartialEvent,\n context: Collector.PushContext = {},\n ) => {\n // Pass source config as mapping in context\n return collector.push(event, {\n ...context,\n mapping: config,\n });\n };\n\n // Create initial logger scoped to sourceId (type will be added after init)\n const initialLogger = collector.logger.scope('source').scope(sourceId);\n\n const cleanEnv: Source.Env = {\n push: wrappedPush,\n command: collector.command,\n sources: collector.sources, // Provide access to all sources for chaining\n elb: collector.sources.elb.push, // ELB source is always available\n logger: initialLogger,\n ...env,\n };\n\n // Call source function with config and environment separately\n const sourceInstance = await tryCatchAsync(code)(config, cleanEnv);\n\n if (!sourceInstance) continue; // Skip failed source initialization\n\n // Update logger with actual source type: [type:sourceId] or [unknown:sourceId]\n const sourceType = sourceInstance.type || 'unknown';\n const sourceLogger = collector.logger.scope(sourceType).scope(sourceId);\n cleanEnv.logger = sourceLogger;\n\n // Store the primary flag in the source config for later access\n if (primary) {\n sourceInstance.config = { ...sourceInstance.config, primary };\n }\n\n result[sourceId] = sourceInstance;\n }\n\n return result;\n}\n","import type { Collector, Elb } from '@walkeros/core';\nimport type { StartFlow } from './types';\nimport { collector } from './collector';\nimport { createElbSource } from './elb';\nimport { initSources } from './source';\n\nexport async function startFlow<ElbPush extends Elb.Fn = Elb.Fn>(\n initConfig?: Collector.InitConfig,\n): Promise<StartFlow<ElbPush>> {\n initConfig = initConfig || {};\n const instance = await collector(initConfig);\n\n // Create and register ELB source first\n const elbSource = createElbSource(instance);\n instance.sources.elb = elbSource;\n\n // Now initialize other sources with ELB source available\n const additionalSources = await initSources(\n instance,\n initConfig.sources || {},\n );\n Object.assign(instance.sources, additionalSources);\n\n const { consent, user, globals, custom } = initConfig;\n\n if (consent) await instance.command('consent', consent);\n if (user) await instance.command('user', user);\n if (globals) Object.assign(instance.globals, globals);\n if (custom) Object.assign(instance.custom, custom);\n\n if (instance.config.run) await instance.command('run');\n\n // Determine the primary elb:\n // 1. Use explicitly marked primary source\n // 2. Use first non-elb source if any exist\n // 3. Fallback to ELB source\n let primaryElb: Elb.Fn = elbSource.push as Elb.Fn;\n\n const sources = Object.values(instance.sources).filter(\n (source) => source.type !== 'elb',\n );\n\n // First, check for explicitly marked primary source\n const markedPrimary = sources.find(\n (source) => (source.config as { primary?: boolean }).primary,\n );\n\n if (markedPrimary) {\n primaryElb = markedPrimary.push as Elb.Fn;\n } else if (sources.length > 0) {\n // Use first source as default\n primaryElb = sources[0].push as Elb.Fn;\n }\n\n return {\n collector: instance,\n elb: primaryElb as ElbPush,\n };\n}\n"],"mappings":"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","names":["import_core","collector","event","batchState","import_core","import_core","collector","on","option","collector","import_core","import_core","collector","import_core","collector","import_core","collector","collector","collector","import_core","collector"]}
|
package/dist/index.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var n={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"},e={Commands:n,Utils:{Storage:{Cookie:"cookie",Local:"local",Session:"session"}}};import{assign as o}from"@walkeros/core";import{assign as s,clone as t,debounce as a,getId as c,getGrantedConsent as i,isDefined as r,isObject as u,processEventMapping as l,tryCatchAsync as g,useHooks as m}from"@walkeros/core";async function d(n,e,o){const{code:s,config:t={},env:a={}}=e,i=o||t||{init:!1},r={...s,config:i,env:y(s.env,a)};let u=r.config.id;if(!u)do{u=c(4)}while(n.destinations[u]);return n.destinations[u]=r,!1!==r.config.queue&&(r.queue=[...n.queue]),f(n,void 0,{[u]:r})}async function f(n,e,o){const{allowed:a,consent:c,globals:r,user:u}=n;if(!a)return b({ok:!1});e&&n.queue.push(e),o||(o=n.destinations);const l=await Promise.all(Object.entries(o||{}).map(async([o,a])=>{let l=(a.queue||[]).map(n=>({...n,consent:c}));if(a.queue=[],e){const n=t(e);l.push(n)}if(!l.length)return{id:o,destination:a,skipped:!0};const m=[],d=l.filter(n=>{const e=i(a.config.consent,c,n.consent);return!e||(n.consent=e,m.push(n),!1)});if(a.queue.concat(d),!m.length)return{id:o,destination:a,queue:l};if(!await g(p)(n,a))return{id:o,destination:a,queue:l};let f=!1;return a.dlq||(a.dlq=[]),await Promise.all(m.map(async e=>(e.globals=s(r,e.globals),e.user=s(u,e.user),await g(h,o=>{const s=a.type||"unknown";return n.logger.scope(s).error("Push failed",{error:o,event:e.name}),f=!0,a.dlq.push([e,o]),!1})(n,a,e),e))),{id:o,destination:a,error:f}})),m=[],d=[],f=[];for(const n of l){if(n.skipped)continue;const e=n.destination,o={id:n.id,destination:e};n.error?f.push(o):n.queue&&n.queue.length?(e.queue=(e.queue||[]).concat(n.queue),d.push(o)):m.push(o)}return b({ok:!f.length,event:e,successful:m,queued:d,failed:f})}async function p(n,e){if(e.init&&!e.config.init){const o=e.type||"unknown",s=n.logger.scope(o),t={collector:n,config:e.config,env:y(e.env,e.config.env),logger:s},a=await m(e.init,"DestinationInit",n.hooks)(t);if(!1===a)return a;e.config={...a||e.config,init:!0}}return!0}async function h(n,e,o){const{config:s}=e,t=await l(o,s,n);if(t.ignore)return!1;const c=e.type||"unknown",i=n.logger.scope(c),u={collector:n,config:s,data:t.data,mapping:t.mapping,env:y(e.env,s.env),logger:i},g=t.mapping;if(g?.batch&&e.pushBatch){const o=g.batched||{key:t.mappingKey||"",events:[],data:[]};o.events.push(t.event),r(t.data)&&o.data.push(t.data),g.batchFn=g.batchFn||a((n,e)=>{const a=n.type||"unknown",c=e.logger.scope(a),i={collector:e,config:s,data:t.data,mapping:g,env:y(n.env,s.env),logger:c};m(n.pushBatch,"DestinationPushBatch",e.hooks)(o,i),o.events=[],o.data=[]},g.batch),g.batched=o,g.batchFn?.(e,n)}else await m(e.push,"DestinationPush",n.hooks)(t.event,u);return!0}function b(n){return s({ok:!n?.failed?.length,successful:[],queued:[],failed:[]},n)}async function k(n,e={}){const o={};for(const[n,s]of Object.entries(e)){const{code:e,config:t={},env:a={}}=s,c={...e.config,...t},i=y(e.env,a);o[n]={...e,config:c,env:i}}return o}function y(n,e){return n||e?e?n&&u(n)&&u(e)?{...n,...e}:e:n:{}}import{isArray as w}from"@walkeros/core";import{tryCatch as v}from"@walkeros/core";function C(n,e,o){const s=n.on,t=s[e]||[],a=w(o)?o:[o];a.forEach(n=>{t.push(n)}),s[e]=t,q(n,e,a)}function q(n,o,s,t){let a,c=s||[];switch(s||(c=n.on[o]||[]),o){case e.Commands.Consent:a=t||n.consent;break;case e.Commands.Session:a=n.session;break;case e.Commands.Ready:case e.Commands.Run:default:a=void 0}if(Object.values(n.sources).forEach(n=>{n.on&&v(n.on)(o,a)}),Object.values(n.destinations).forEach(n=>{if(n.on){const e=n.on;v(e)(o,a)}}),c.length)switch(o){case e.Commands.Consent:!function(n,e,o){const s=o||n.consent;e.forEach(e=>{Object.keys(s).filter(n=>n in e).forEach(o=>{v(e[o])(n,s)})})}(n,c,t);break;case e.Commands.Ready:case e.Commands.Run:!function(n,e){n.allowed&&e.forEach(e=>{v(e)(n)})}(n,c);break;case e.Commands.Session:!function(n,e){if(!n.session)return;e.forEach(e=>{v(e)(n,n.session)})}(n,c)}}async function j(n,e){const{consent:s}=n;let t=!1;const a={};return Object.entries(e).forEach(([n,e])=>{const o=!!e;a[n]=o,t=t||o}),n.consent=o(s,a),q(n,"consent",void 0,a),t?f(n):b({ok:!0})}import{assign as E,createLogger as O}from"@walkeros/core";import{assign as A,getId as S,isFunction as D,isString as x}from"@walkeros/core";import{isObject as R}from"@walkeros/core";async function P(n,o,s,t){let a;switch(o){case e.Commands.Config:R(s)&&A(n.config,s,{shallow:!1});break;case e.Commands.Consent:R(s)&&(a=await j(n,s));break;case e.Commands.Custom:R(s)&&(n.custom=A(n.custom,s));break;case e.Commands.Destination:R(s)&&D(s.push)&&(a=await d(n,{code:s},t));break;case e.Commands.Globals:R(s)&&(n.globals=A(n.globals,s));break;case e.Commands.On:x(s)&&C(n,s,t);break;case e.Commands.Ready:q(n,"ready");break;case e.Commands.Run:a=await B(n,s);break;case e.Commands.Session:q(n,"session");break;case e.Commands.User:R(s)&&A(n.user,s,{shallow:!1})}return a||{ok:!0,successful:[],queued:[],failed:[]}}function $(n,e){if(!e.name)throw new Error("Event name is required");const[o,s]=e.name.split(" ");if(!o||!s)throw new Error("Event name is invalid");++n.count;const{timestamp:t=Date.now(),group:a=n.group,count:c=n.count}=e,{name:i=`${o} ${s}`,data:r={},context:u={},globals:l=n.globals,custom:g={},user:m=n.user,nested:d=[],consent:f=n.consent,id:p=`${t}-${a}-${c}`,trigger:h="",entity:b=o,action:k=s,timing:y=0,version:w={source:n.version,tagging:n.config.tagging||0},source:v={type:"collector",id:"",previous_id:""}}=e;return{name:i,data:r,context:u,globals:l,custom:g,user:m,nested:d,consent:f,id:p,trigger:h,entity:b,action:k,timestamp:t,timing:y,group:a,count:c,version:w,source:v}}async function B(n,e){n.allowed=!0,n.count=0,n.group=S(),n.timing=Date.now(),e&&(e.consent&&(n.consent=A(n.consent,e.consent)),e.user&&(n.user=A(n.user,e.user)),e.globals&&(n.globals=A(n.config.globalsStatic||{},e.globals)),e.custom&&(n.custom=A(n.custom,e.custom))),Object.values(n.destinations).forEach(n=>{n.queue=[]}),n.queue=[],n.round++;const o=await f(n);return q(n,"run"),o}import{getGrantedConsent as F,processEventMapping as G,tryCatchAsync as H,useHooks as I}from"@walkeros/core";function U(n,e){return I(async(o,s={})=>await H(async()=>{let t=o;if(s.mapping){const e=await G(t,s.mapping,n);if(e.ignore)return b({ok:!0});if(s.mapping.consent){if(!F(s.mapping.consent,n.consent,e.event.consent))return b({ok:!0})}t=e.event}const a=e(t),c=$(n,a);return await f(n,c)},()=>b({ok:!1}))(),"Push",n.hooks)}import{useHooks as L,tryCatchAsync as M}from"@walkeros/core";async function W(n){const e=E({globalsStatic:{},sessionStatic:{},tagging:0,run:!0},n,{merge:!1,extend:!1}),o={level:n.logger?.level,handler:n.logger?.handler},s=O(o),t={...e.globalsStatic,...n.globals},a={allowed:!1,config:e,consent:n.consent||{},count:0,custom:n.custom||{},destinations:{},globals:t,group:"",hooks:{},logger:s,on:{},queue:[],round:0,session:void 0,timing:Date.now(),user:n.user||{},version:"0.4.2",sources:{},push:void 0,command:void 0};return a.push=U(a,n=>({timing:Math.round((Date.now()-a.timing)/10)/100,source:{type:"collector",id:"",previous_id:""},...n})),a.command=function(n,e){return L(async(o,s,t)=>await M(async()=>await e(n,o,s,t),()=>b({ok:!1}))(),"Command",n.hooks)}(a,P),a.destinations=await k(0,n.destinations||{}),a}import{tryCatchAsync as _}from"@walkeros/core";async function K(n,e={}){const o={};for(const[s,t]of Object.entries(e)){const{code:e,config:a={},env:c={},primary:i}=t,r=(e,o={})=>n.push(e,{...o,mapping:a}),u=n.logger.scope("source").scope(s),l={push:r,command:n.command,sources:n.sources,elb:n.sources.elb.push,logger:u,...c},g=await _(e)(a,l);if(!g)continue;const m=g.type||"unknown",d=n.logger.scope(m).scope(s);l.logger=d,i&&(g.config={...g.config,primary:i}),o[s]=g}return o}async function z(n){n=n||{};const e=await W(n),o=(s=e,{type:"elb",config:{},push:async(n,e,o,t,a,c)=>{if("string"==typeof n&&n.startsWith("walker ")){const t=n.replace("walker ","");return s.command(t,e,o)}let i;if("string"==typeof n)i={name:n},e&&"object"==typeof e&&!Array.isArray(e)&&(i.data=e);else{if(!n||"object"!=typeof n)return{ok:!1,successful:[],queued:[],failed:[]};i=n,e&&"object"==typeof e&&!Array.isArray(e)&&(i.data={...i.data||{},...e})}return t&&"object"==typeof t&&(i.context=t),a&&Array.isArray(a)&&(i.nested=a),c&&"object"==typeof c&&(i.custom=c),s.push(i)}});var s;e.sources.elb=o;const t=await K(e,n.sources||{});Object.assign(e.sources,t);const{consent:a,user:c,globals:i,custom:r}=n;a&&await e.command("consent",a),c&&await e.command("user",c),i&&Object.assign(e.globals,i),r&&Object.assign(e.custom,r),e.config.run&&await e.command("run");let u=o.push;const l=Object.values(e.sources).filter(n=>"elb"!==n.type),g=l.find(n=>n.config.primary);return g?u=g.push:l.length>0&&(u=l[0].push),{collector:e,elb:u}}export{n as Commands,e as Const,d as addDestination,P as commonHandleCommand,$ as createEvent,U as createPush,b as createPushResult,p as destinationInit,h as destinationPush,k as initDestinations,K as initSources,C as on,q as onApply,f as pushToDestinations,B as runCollector,j as setConsent,z as startFlow};//# sourceMappingURL=index.mjs.map
|
|
1
|
+
var e={},n={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"},o={Commands:n,Utils:{Storage:{Cookie:"cookie",Local:"local",Session:"session"}}};import{assign as t}from"@walkeros/core";import{assign as s,clone as a,debounce as c,getId as i,getGrantedConsent as r,isDefined as u,isObject as l,processEventMapping as g,tryCatchAsync as d,useHooks as f}from"@walkeros/core";var m={type:"code",config:{},init(e){const{config:n,logger:o}=e,t=n.settings,s=t?.scripts;if(s&&"undefined"!=typeof document)for(const e of s){const n=document.createElement("script");n.src=e,n.async=!0,document.head.appendChild(n)}const a=t?.init;if(a)try{new Function("context",a)(e)}catch(e){o.error("Code destination init error:",e)}},push(e,n){const{mapping:o,config:t,logger:s}=n,a=o?.push??t.settings?.push;if(a)try{new Function("event","context",a)(e,n)}catch(e){s.error("Code destination push error:",e)}},pushBatch(e,n){const{mapping:o,config:t,logger:s}=n,a=o?.pushBatch??t.settings?.pushBatch;if(a)try{new Function("batch","context",a)(e,n)}catch(e){s.error("Code destination pushBatch error:",e)}},on(e,n){const{config:o,logger:t}=n,s=o.settings?.on;if(s)try{new Function("type","context",s)(e,n)}catch(e){t.error("Code destination on error:",e)}}};function p(e){return!0===e?m:e}async function h(e,n,o){const{code:t,config:s={},env:a={}}=n,c=o||s||{init:!1},r=p(t),u={...r,config:c,env:C(r.env,a)};let l=u.config.id;if(!l)do{l=i(4)}while(e.destinations[l]);return e.destinations[l]=u,!1!==u.config.queue&&(u.queue=[...e.queue]),b(e,void 0,{[l]:u})}async function b(e,n,o){const{allowed:t,consent:c,globals:i,user:u}=e;if(!t)return k({ok:!1});n&&e.queue.push(n),o||(o=e.destinations);const l=await Promise.all(Object.entries(o||{}).map(async([o,t])=>{let l=(t.queue||[]).map(e=>({...e,consent:c}));if(t.queue=[],n){const e=a(n);l.push(e)}if(!l.length)return{id:o,destination:t,skipped:!0};const g=[],f=l.filter(e=>{const n=r(t.config.consent,c,e.consent);return!n||(e.consent=n,g.push(e),!1)});if(t.queue.concat(f),!g.length)return{id:o,destination:t,queue:l};if(!await d(y)(e,t))return{id:o,destination:t,queue:l};let m=!1;return t.dlq||(t.dlq=[]),await Promise.all(g.map(async n=>(n.globals=s(i,n.globals),n.user=s(u,n.user),await d(w,o=>{const s=t.type||"unknown";return e.logger.scope(s).error("Push failed",{error:o,event:n.name}),m=!0,t.dlq.push([n,o]),!1})(e,t,n),n))),{id:o,destination:t,error:m}})),g=[],f=[],m=[];for(const e of l){if(e.skipped)continue;const n=e.destination,o={id:e.id,destination:n};e.error?m.push(o):e.queue&&e.queue.length?(n.queue=(n.queue||[]).concat(e.queue),f.push(o)):g.push(o)}return k({ok:!m.length,event:n,successful:g,queued:f,failed:m})}async function y(e,n){if(n.init&&!n.config.init){const o=n.type||"unknown",t=e.logger.scope(o),s={collector:e,config:n.config,env:C(n.env,n.config.env),logger:t};t.debug("init");const a=await f(n.init,"DestinationInit",e.hooks)(s);if(!1===a)return a;n.config={...a||n.config,init:!0},t.debug("init done")}return!0}async function w(e,n,o){const{config:t}=n,s=await g(o,t,e);if(s.ignore)return!1;const a=n.type||"unknown",i=e.logger.scope(a),r={collector:e,config:t,data:s.data,mapping:s.mapping,env:C(n.env,t.env),logger:i},l=s.mapping,d=s.mappingKey||"* *";if(l?.batch&&n.pushBatch){if(n.batches=n.batches||{},!n.batches[d]){const o={key:d,events:[],data:[]};n.batches[d]={batched:o,batchFn:c(()=>{const o=n.batches[d].batched,s={collector:e,config:t,data:void 0,mapping:l,env:C(n.env,t.env),logger:i};i.debug("push batch",{events:o.events.length}),f(n.pushBatch,"DestinationPushBatch",e.hooks)(o,s),i.debug("push batch done"),o.events=[],o.data=[]},l.batch)}}const o=n.batches[d];o.batched.events.push(s.event),u(s.data)&&o.batched.data.push(s.data),o.batchFn()}else i.debug("push",{event:s.event.name}),await f(n.push,"DestinationPush",e.hooks)(s.event,r),i.debug("push done");return!0}function k(e){return s({ok:!e?.failed?.length,successful:[],queued:[],failed:[]},e)}async function v(e,n={}){const o={};for(const[e,t]of Object.entries(n)){const{code:n,config:s={},env:a={}}=t,c=p(n),i={...c.config,...s},r=C(c.env,a);o[e]={...c,config:i,env:r}}return o}function C(e,n){return e||n?n?e&&l(e)&&l(n)?{...e,...n}:n:e:{}}import{isArray as q}from"@walkeros/core";import{tryCatch as j}from"@walkeros/core";function E(e,n,o){const t=e.on,s=t[n]||[],a=q(o)?o:[o];a.forEach(e=>{s.push(e)}),t[n]=s,O(e,n,a)}function O(e,n,t,s){let a,c=t||[];switch(t||(c=e.on[n]||[]),n){case o.Commands.Consent:a=s||e.consent;break;case o.Commands.Session:a=e.session;break;case o.Commands.Ready:case o.Commands.Run:default:a=void 0}if(Object.values(e.sources).forEach(e=>{e.on&&j(e.on)(n,a)}),Object.values(e.destinations).forEach(o=>{if(o.on){const t=o.type||"unknown",s=e.logger.scope(t).scope("on").scope(n),c={collector:e,config:o.config,data:a,env:C(o.env,o.config.env),logger:s};j(o.on)(n,c)}}),c.length)switch(n){case o.Commands.Consent:!function(e,n,o){const t=o||e.consent;n.forEach(n=>{Object.keys(t).filter(e=>e in n).forEach(o=>{j(n[o])(e,t)})})}(e,c,s);break;case o.Commands.Ready:case o.Commands.Run:!function(e,n){e.allowed&&n.forEach(n=>{j(n)(e)})}(e,c);break;case o.Commands.Session:!function(e,n){if(!e.session)return;n.forEach(n=>{j(n)(e,e.session)})}(e,c)}}async function x(e,n){const{consent:o}=e;let s=!1;const a={};return Object.entries(n).forEach(([e,n])=>{const o=!!n;a[e]=o,s=s||o}),e.consent=t(o,a),O(e,"consent",void 0,a),s?b(e):k({ok:!0})}import{assign as A,createLogger as S}from"@walkeros/core";import{assign as D,getId as R,isFunction as B,isString as P}from"@walkeros/core";import{isObject as F}from"@walkeros/core";async function $(e,n,t,s){let a;switch(n){case o.Commands.Config:F(t)&&D(e.config,t,{shallow:!1});break;case o.Commands.Consent:F(t)&&(a=await x(e,t));break;case o.Commands.Custom:F(t)&&(e.custom=D(e.custom,t));break;case o.Commands.Destination:F(t)&&B(t.push)&&(a=await h(e,{code:t},s));break;case o.Commands.Globals:F(t)&&(e.globals=D(e.globals,t));break;case o.Commands.On:P(t)&&E(e,t,s);break;case o.Commands.Ready:O(e,"ready");break;case o.Commands.Run:a=await H(e,t);break;case o.Commands.Session:O(e,"session");break;case o.Commands.User:F(t)&&D(e.user,t,{shallow:!1})}return a||{ok:!0,successful:[],queued:[],failed:[]}}function G(e,n){if(!n.name)throw new Error("Event name is required");const[o,t]=n.name.split(" ");if(!o||!t)throw new Error("Event name is invalid");++e.count;const{timestamp:s=Date.now(),group:a=e.group,count:c=e.count}=n,{name:i=`${o} ${t}`,data:r={},context:u={},globals:l=e.globals,custom:g={},user:d=e.user,nested:f=[],consent:m=e.consent,id:p=`${s}-${a}-${c}`,trigger:h="",entity:b=o,action:y=t,timing:w=0,version:k={source:e.version,tagging:e.config.tagging||0},source:v={type:"collector",id:"",previous_id:""}}=n;return{name:i,data:r,context:u,globals:l,custom:g,user:d,nested:f,consent:m,id:p,trigger:h,entity:b,action:y,timestamp:s,timing:w,group:a,count:c,version:k,source:v}}async function H(e,n){e.allowed=!0,e.count=0,e.group=R(),e.timing=Date.now(),n&&(n.consent&&(e.consent=D(e.consent,n.consent)),n.user&&(e.user=D(e.user,n.user)),n.globals&&(e.globals=D(e.config.globalsStatic||{},n.globals)),n.custom&&(e.custom=D(e.custom,n.custom))),Object.values(e.destinations).forEach(e=>{e.queue=[]}),e.queue=[],e.round++;const o=await b(e);return O(e,"run"),o}import{getGrantedConsent as I,processEventMapping as U,tryCatchAsync as L,useHooks as M}from"@walkeros/core";function W(e,n){return M(async(o,t={})=>await L(async()=>{let s=o;if(t.mapping){const n=await U(s,t.mapping,e);if(n.ignore)return k({ok:!0});if(t.mapping.consent){if(!I(t.mapping.consent,e.consent,n.event.consent))return k({ok:!0})}s=n.event}const a=n(s),c=G(e,a);return await b(e,c)},()=>k({ok:!1}))(),"Push",e.hooks)}import{useHooks as _,tryCatchAsync as K}from"@walkeros/core";async function z(e){const n=A({globalsStatic:{},sessionStatic:{},tagging:0,run:!0},e,{merge:!1,extend:!1}),o={level:e.logger?.level,handler:e.logger?.handler},t=S(o),s={...n.globalsStatic,...e.globals},a={allowed:!1,config:n,consent:e.consent||{},count:0,custom:e.custom||{},destinations:{},globals:s,group:"",hooks:{},logger:t,on:{},queue:[],round:0,session:void 0,timing:Date.now(),user:e.user||{},version:"0.5.0",sources:{},push:void 0,command:void 0};return a.push=W(a,e=>({timing:Math.round((Date.now()-a.timing)/10)/100,source:{type:"collector",id:"",previous_id:""},...e})),a.command=function(e,n){return _(async(o,t,s)=>await K(async()=>await n(e,o,t,s),()=>k({ok:!1}))(),"Command",e.hooks)}(a,$),a.destinations=await v(0,e.destinations||{}),a}import{tryCatchAsync as J}from"@walkeros/core";async function N(e,n={}){const o={};for(const[t,s]of Object.entries(n)){const{code:n,config:a={},env:c={},primary:i}=s,r=(n,o={})=>e.push(n,{...o,mapping:a}),u=e.logger.scope("source").scope(t),l={push:r,command:e.command,sources:e.sources,elb:e.sources.elb.push,logger:u,...c},g=await J(n)(a,l);if(!g)continue;const d=g.type||"unknown",f=e.logger.scope(d).scope(t);l.logger=f,i&&(g.config={...g.config,primary:i}),o[t]=g}return o}async function Q(e){e=e||{};const n=await z(e),o=(t=n,{type:"elb",config:{},push:async(e,n,o,s,a,c)=>{if("string"==typeof e&&e.startsWith("walker ")){const s=e.replace("walker ","");return t.command(s,n,o)}let i;if("string"==typeof e)i={name:e},n&&"object"==typeof n&&!Array.isArray(n)&&(i.data=n);else{if(!e||"object"!=typeof e)return{ok:!1,successful:[],queued:[],failed:[]};i=e,n&&"object"==typeof n&&!Array.isArray(n)&&(i.data={...i.data||{},...n})}return s&&"object"==typeof s&&(i.context=s),a&&Array.isArray(a)&&(i.nested=a),c&&"object"==typeof c&&(i.custom=c),t.push(i)}});var t;n.sources.elb=o;const s=await N(n,e.sources||{});Object.assign(n.sources,s);const{consent:a,user:c,globals:i,custom:r}=e;a&&await n.command("consent",a),c&&await n.command("user",c),i&&Object.assign(n.globals,i),r&&Object.assign(n.custom,r),n.config.run&&await n.command("run");let u=o.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}}export{e as Code,n as Commands,o as Const,h as addDestination,$ as commonHandleCommand,G as createEvent,W as createPush,k as createPushResult,m as destinationCode,y as destinationInit,w as destinationPush,v as initDestinations,N as initSources,C as mergeEnvironments,E as on,O as onApply,b as pushToDestinations,H as runCollector,x as setConsent,Q as startFlow};//# sourceMappingURL=index.mjs.map
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/constants.ts","../src/consent.ts","../src/destination.ts","../src/on.ts","../src/collector.ts","../src/handle.ts","../src/push.ts","../src/command.ts","../src/elb.ts","../src/source.ts","../src/flow.ts"],"sourcesContent":["import type { Collector } from '@walkeros/core';\nimport type { CommandTypes, StorageType } from './types/collector';\n\nexport const Commands: Record<CommandTypes, Collector.CommandType> = {\n Action: 'action',\n Actions: 'actions',\n Config: 'config',\n Consent: 'consent',\n Context: 'context',\n Custom: 'custom',\n Destination: 'destination',\n Elb: 'elb',\n Globals: 'globals',\n Hook: 'hook',\n Init: 'init',\n Link: 'link',\n On: 'on',\n Prefix: 'data-elb',\n Ready: 'ready',\n Run: 'run',\n Session: 'session',\n User: 'user',\n Walker: 'walker',\n} as const;\n\nconst UtilsStorage: { [key: string]: StorageType } = {\n Cookie: 'cookie',\n Local: 'local',\n Session: 'session',\n} as const;\n\nconst Utils = {\n Storage: UtilsStorage,\n};\n\nexport const Const = {\n Commands,\n Utils,\n};\n\nexport default Const;\n","import type { Collector, WalkerOS, Elb } from '@walkeros/core';\nimport { assign } from '@walkeros/core';\nimport { pushToDestinations, createPushResult } from './destination';\nimport { onApply } from './on';\n\n/**\n * Sets the consent state and processes the queue.\n *\n * @param collector - The walkerOS collector instance.\n * @param data - The consent data to set.\n * @returns The result of the push operation.\n */\nexport async function setConsent(\n collector: Collector.Instance,\n data: WalkerOS.Consent,\n): Promise<Elb.PushResult> {\n const { consent } = collector;\n\n let runQueue = false;\n const update: WalkerOS.Consent = {};\n Object.entries(data).forEach(([name, granted]) => {\n const state = !!granted;\n\n update[name] = state;\n\n // Only run queue if state was set to true\n runQueue = runQueue || state;\n });\n\n // Update consent state\n collector.consent = assign(consent, update);\n\n // Run on consent events\n onApply(collector, 'consent', undefined, update);\n\n // Process previous events if not disabled\n return runQueue\n ? pushToDestinations(collector)\n : createPushResult({ ok: true });\n}\n","import type { Collector, WalkerOS, Elb, Destination } from '@walkeros/core';\nimport {\n assign,\n clone,\n debounce,\n getId,\n getGrantedConsent,\n isDefined,\n isObject,\n processEventMapping,\n tryCatchAsync,\n useHooks,\n} from '@walkeros/core';\n\n/**\n * Adds a new destination to the collector.\n *\n * @param collector - The walkerOS collector instance.\n * @param data - The destination's init data.\n * @param options - The destination's config.\n * @returns The result of the push operation.\n */\nexport async function addDestination(\n collector: Collector.Instance,\n data: Destination.Init,\n options?: Destination.Config,\n): Promise<Elb.PushResult> {\n const { code, config: dataConfig = {}, env = {} } = data;\n const config = options || dataConfig || { init: false };\n\n const destination: Destination.Instance = {\n ...code,\n config,\n env: mergeEnvironments(code.env, env),\n };\n\n let id = destination.config.id; // Use given id\n if (!id) {\n // Generate a new id if none was given\n do {\n id = getId(4);\n } while (collector.destinations[id]);\n }\n\n // Add the destination\n collector.destinations[id] = destination;\n\n // Process previous events if not disabled\n if (destination.config.queue !== false)\n destination.queue = [...collector.queue];\n\n return pushToDestinations(collector, undefined, { [id]: destination });\n}\n\n/**\n * Pushes an event to all or a subset of destinations.\n *\n * @param collector - The walkerOS collector instance.\n * @param event - The event to push.\n * @param destinations - The destinations to push to.\n * @returns The result of the push operation.\n */\nexport async function pushToDestinations(\n collector: Collector.Instance,\n event?: WalkerOS.Event,\n destinations?: Collector.Destinations,\n): Promise<Elb.PushResult> {\n const { allowed, consent, globals, user } = collector;\n\n // Check if collector is allowed to push\n if (!allowed) return createPushResult({ ok: false });\n\n // Add event to the collector queue\n if (event) collector.queue.push(event);\n\n // Use given destinations or use internal destinations\n if (!destinations) destinations = collector.destinations;\n\n const results = await Promise.all(\n // Process all destinations in parallel\n Object.entries(destinations || {}).map(async ([id, destination]) => {\n // Create a queue of events to be processed\n let currentQueue = (destination.queue || []).map((event) => ({\n ...event,\n consent,\n }));\n\n // Reset original queue while processing to enable async processing\n destination.queue = [];\n\n // Add event to queue stack\n if (event) {\n // Clone the event to avoid mutating the original event\n const currentEvent = clone(event);\n\n // Note: Policy is now applied in processEventMapping() within destinationPush()\n\n // Add event to queue stack\n currentQueue.push(currentEvent);\n }\n\n // Nothing to do here if the queue is empty\n if (!currentQueue.length) return { id, destination, skipped: true };\n\n const allowedEvents: WalkerOS.Events = [];\n const skippedEvents = currentQueue.filter((queuedEvent) => {\n const grantedConsent = getGrantedConsent(\n destination.config.consent, // Required\n consent, // Current collector state\n queuedEvent.consent, // Individual event state\n );\n\n if (grantedConsent) {\n queuedEvent.consent = grantedConsent; // Save granted consent states only\n\n allowedEvents.push(queuedEvent); // Add to allowed queue\n return false; // Remove from destination queue\n }\n\n return true; // Keep denied events in the queue\n });\n\n // Add skipped events back to the queue\n destination.queue.concat(skippedEvents);\n\n // Execution shall not pass if no events are allowed\n if (!allowedEvents.length) {\n return { id, destination, queue: currentQueue }; // Don't push if not allowed\n }\n\n // Initialize the destination if needed\n const isInitialized = await tryCatchAsync(destinationInit)(\n collector,\n destination,\n );\n\n if (!isInitialized) return { id, destination, queue: currentQueue };\n\n // Process the destinations event queue\n let error = false;\n if (!destination.dlq) destination.dlq = [];\n\n // Process allowed events and store failed ones in the dead letter queue (DLQ)\n await Promise.all(\n allowedEvents.map(async (event) => {\n // Merge event with collector state, prioritizing event properties\n event.globals = assign(globals, event.globals);\n event.user = assign(user, event.user);\n\n await tryCatchAsync(destinationPush, (err) => {\n // Log the error with destination scope\n const destType = destination.type || 'unknown';\n collector.logger.scope(destType).error('Push failed', {\n error: err,\n event: event.name,\n });\n error = true; // oh no\n\n // Add failed event to destinations DLQ\n destination.dlq!.push([event, err]);\n\n return false;\n })(collector, destination, event);\n\n return event;\n }),\n );\n\n return { id, destination, error };\n }),\n );\n\n const successful = [];\n const queued = [];\n const failed = [];\n\n for (const result of results) {\n if (result.skipped) continue;\n\n const destination = result.destination;\n\n const ref = { id: result.id, destination };\n\n if (result.error) {\n failed.push(ref);\n } else if (result.queue && result.queue.length) {\n // Merge queue with existing queue\n destination.queue = (destination.queue || []).concat(result.queue);\n queued.push(ref);\n } else {\n successful.push(ref);\n }\n }\n\n return createPushResult({\n ok: !failed.length,\n event,\n successful,\n queued,\n failed,\n });\n}\n\n/**\n * Initializes a destination.\n *\n * @template Destination\n * @param collector - The walkerOS collector instance.\n * @param destination - The destination to initialize.\n * @returns Whether the destination was initialized successfully.\n */\nexport async function destinationInit<Destination extends Destination.Instance>(\n collector: Collector.Instance,\n destination: Destination,\n): Promise<boolean> {\n // Check if the destination was initialized properly or try to do so\n if (destination.init && !destination.config.init) {\n // Create scoped logger for this destination: [type:id] or [unknown:id]\n const destType = destination.type || 'unknown';\n const destLogger = collector.logger.scope(destType);\n\n const context = {\n collector,\n config: destination.config,\n env: mergeEnvironments(destination.env, destination.config.env),\n logger: destLogger,\n } as Destination.InitContext;\n\n const configResult = await useHooks(\n destination.init,\n 'DestinationInit',\n collector.hooks,\n )(context);\n\n // Actively check for errors (when false)\n if (configResult === false) return configResult; // don't push if init is false\n\n // Update the destination config if it was returned\n destination.config = {\n ...(configResult || destination.config),\n init: true, // Remember that the destination was initialized\n };\n }\n\n return true; // Destination is ready to push\n}\n\n/**\n * Pushes an event to a single destination.\n * Handles mapping, batching, and consent checks.\n *\n * @template Destination\n * @param collector - The walkerOS collector instance.\n * @param destination - The destination to push to.\n * @param event - The event to push.\n * @returns Whether the event was pushed successfully.\n */\nexport async function destinationPush<Destination extends Destination.Instance>(\n collector: Collector.Instance,\n destination: Destination,\n event: WalkerOS.Event,\n): Promise<boolean> {\n const { config } = destination;\n\n const processed = await processEventMapping(event, config, collector);\n\n if (processed.ignore) return false;\n\n // Create scoped logger for this destination: [type] or [unknown]\n const destType = destination.type || 'unknown';\n const destLogger = collector.logger.scope(destType);\n\n const context: Destination.PushContext = {\n collector,\n config,\n data: processed.data,\n mapping: processed.mapping,\n env: mergeEnvironments(destination.env, config.env),\n logger: destLogger,\n };\n\n const eventMapping = processed.mapping;\n if (eventMapping?.batch && destination.pushBatch) {\n const batched = eventMapping.batched || {\n key: processed.mappingKey || '',\n events: [],\n data: [],\n };\n batched.events.push(processed.event);\n if (isDefined(processed.data)) batched.data.push(processed.data);\n\n eventMapping.batchFn =\n eventMapping.batchFn ||\n debounce((destination, collector) => {\n const batchDestType = destination.type || 'unknown';\n const batchLogger = collector.logger.scope(batchDestType);\n\n const batchContext: Destination.PushBatchContext = {\n collector,\n config,\n data: processed.data,\n mapping: eventMapping,\n env: mergeEnvironments(destination.env, config.env),\n logger: batchLogger,\n };\n\n useHooks(\n destination.pushBatch!,\n 'DestinationPushBatch',\n (collector as Collector.Instance).hooks,\n )(batched, batchContext);\n\n batched.events = [];\n batched.data = [];\n }, eventMapping.batch);\n\n eventMapping.batched = batched;\n eventMapping.batchFn?.(destination, collector);\n } else {\n // It's time to go to the destination's side now\n await useHooks(\n destination.push,\n 'DestinationPush',\n collector.hooks,\n )(processed.event, context);\n }\n\n return true;\n}\n\n/**\n * Creates a standardized result object for push operations.\n *\n * @param partialResult - A partial result to merge with the default result.\n * @returns The push result.\n */\nexport function createPushResult(\n partialResult?: Partial<Elb.PushResult>,\n): Elb.PushResult {\n return assign(\n {\n ok: !partialResult?.failed?.length,\n successful: [],\n queued: [],\n failed: [],\n },\n partialResult,\n );\n}\n\n/**\n * Initializes a map of destinations using ONLY the unified code/config/env pattern.\n * Does NOT call destination.init() - that happens later during push with proper consent checks.\n *\n * @param destinations - The destinations to initialize.\n * @param collector - The collector instance for destination init context.\n * @returns The initialized destinations.\n */\nexport async function initDestinations(\n _collector: Collector.Instance,\n destinations: Destination.InitDestinations = {},\n): Promise<Collector.Destinations> {\n const result: Collector.Destinations = {};\n\n for (const [name, destinationDef] of Object.entries(destinations)) {\n const { code, config = {}, env = {} } = destinationDef;\n\n // Merge config: destination default + provided config\n const mergedConfig = {\n ...code.config,\n ...config,\n };\n\n // Merge environment: destination default + provided env\n const mergedEnv = mergeEnvironments(code.env, env);\n\n // Create destination instance by spreading code and overriding config/env\n result[name] = {\n ...code,\n config: mergedConfig,\n env: mergedEnv,\n };\n }\n\n return result;\n}\n\n/**\n * Merges destination environment with config environment\n * Config env takes precedence over destination env for overrides\n */\nfunction mergeEnvironments(\n destinationEnv?: Destination.Env,\n configEnv?: Destination.Env,\n): Destination.Env {\n // If neither environment exists, return empty object\n if (!destinationEnv && !configEnv) return {};\n\n // If only one exists, return it\n if (!configEnv) return destinationEnv!;\n if (!destinationEnv) return configEnv;\n\n // Both exist - merge objects with configEnv taking precedence\n if (isObject(destinationEnv) && isObject(configEnv)) {\n return { ...destinationEnv, ...configEnv };\n }\n\n // If they're not both objects, config env overrides destination env\n return configEnv;\n}\n","import type { Collector, On, WalkerOS } from '@walkeros/core';\nimport { isArray } from '@walkeros/core';\nimport { Const } from './constants';\nimport { tryCatch } from '@walkeros/core';\n\n/**\n * Registers a callback for a specific event type.\n *\n * @param collector The walkerOS collector instance.\n * @param type The type of the event to listen for.\n * @param option The callback function or an array of callback functions.\n */\nexport function on(\n collector: Collector.Instance,\n type: On.Types,\n option: WalkerOS.SingleOrArray<On.Options>,\n) {\n const on = collector.on;\n const onType: Array<On.Options> = on[type] || [];\n const options = isArray(option) ? option : [option];\n\n options.forEach((option) => {\n onType.push(option);\n });\n\n // Update collector on state\n (on[type] as typeof onType) = onType;\n\n // Execute the on function directly\n onApply(collector, type, options);\n}\n\n/**\n * Applies all registered callbacks for a specific event type.\n *\n * @param collector The walkerOS collector instance.\n * @param type The type of the event to apply the callbacks for.\n * @param options The options for the callbacks.\n * @param config The consent configuration.\n */\nexport function onApply(\n collector: Collector.Instance,\n type: On.Types,\n options?: Array<On.Options>,\n config?: WalkerOS.Consent,\n) {\n // Use the optionally provided options\n let onConfig = options || [];\n\n if (!options) {\n // Get the collector on events\n onConfig = collector.on[type] || [];\n }\n\n // Calculate context data once for all sources and destinations\n let contextData: unknown;\n\n switch (type) {\n case Const.Commands.Consent:\n contextData = config || collector.consent;\n break;\n case Const.Commands.Session:\n contextData = collector.session;\n break;\n case Const.Commands.Ready:\n case Const.Commands.Run:\n default:\n contextData = undefined;\n break;\n }\n\n Object.values(collector.sources).forEach((source) => {\n if (source.on) {\n tryCatch(source.on)(type, contextData);\n }\n });\n\n Object.values(collector.destinations).forEach((destination) => {\n if (destination.on) {\n // Cast to runtime-compatible version for type safety\n const onFn = destination.on as On.OnFnRuntime;\n tryCatch(onFn)(type, contextData as On.AnyEventContext);\n }\n });\n\n if (!onConfig.length) return; // No on-events registered, nothing to do\n\n switch (type) {\n case Const.Commands.Consent:\n onConsent(collector, onConfig as Array<On.ConsentConfig>, config);\n break;\n case Const.Commands.Ready:\n onReady(collector, onConfig as Array<On.ReadyConfig>);\n break;\n case Const.Commands.Run:\n onRun(collector, onConfig as Array<On.RunConfig>);\n break;\n case Const.Commands.Session:\n onSession(collector, onConfig as Array<On.SessionConfig>);\n break;\n default:\n break;\n }\n}\n\nfunction onConsent(\n collector: Collector.Instance,\n onConfig: Array<On.ConsentConfig>,\n currentConsent?: WalkerOS.Consent,\n): void {\n const consentState = currentConsent || collector.consent;\n\n onConfig.forEach((consentConfig) => {\n // Collect functions whose consent keys match the rule keys directly\n // Directly execute functions whose consent keys match the rule keys\n Object.keys(consentState) // consent keys\n .filter((consent) => consent in consentConfig) // check for matching rule keys\n .forEach((consent) => {\n // Execute the function\n tryCatch(consentConfig[consent])(collector, consentState);\n });\n });\n}\n\nfunction onReady(\n collector: Collector.Instance,\n onConfig: Array<On.ReadyConfig>,\n): void {\n if (collector.allowed)\n onConfig.forEach((func) => {\n tryCatch(func)(collector);\n });\n}\n\nfunction onRun(\n collector: Collector.Instance,\n onConfig: Array<On.RunConfig>,\n): void {\n if (collector.allowed)\n onConfig.forEach((func) => {\n tryCatch(func)(collector);\n });\n}\n\nfunction onSession(\n collector: Collector.Instance,\n onConfig: Array<On.SessionConfig>,\n): void {\n if (!collector.session) return;\n\n onConfig.forEach((func) => {\n tryCatch(func)(collector, collector.session);\n });\n}\n","import type { Collector, Logger, WalkerOS } from '@walkeros/core';\nimport { assign, createLogger } from '@walkeros/core';\nimport { commonHandleCommand } from './handle';\nimport { initDestinations } from './destination';\nimport { createPush } from './push';\nimport { createCommand } from './command';\nimport { initSources } from './source';\n\ndeclare const __VERSION__: string;\n\nexport async function collector(\n initConfig: Collector.InitConfig,\n): Promise<Collector.Instance> {\n const version = __VERSION__;\n\n const defaultConfig: Collector.Config = {\n globalsStatic: {},\n sessionStatic: {},\n tagging: 0,\n run: true,\n };\n\n const config: Collector.Config = assign(defaultConfig, initConfig, {\n merge: false,\n extend: false,\n });\n\n // Create logger with config from initConfig\n const loggerConfig: Logger.Config = {\n level: initConfig.logger?.level,\n handler: initConfig.logger?.handler,\n };\n const logger = createLogger(loggerConfig);\n\n // Enhanced globals with static globals from config\n const finalGlobals = { ...config.globalsStatic, ...initConfig.globals };\n\n const collector: Collector.Instance = {\n allowed: false,\n config,\n consent: initConfig.consent || {},\n count: 0,\n custom: initConfig.custom || {},\n destinations: {},\n globals: finalGlobals,\n group: '',\n hooks: {},\n logger,\n on: {},\n queue: [],\n round: 0,\n session: undefined,\n timing: Date.now(),\n user: initConfig.user || {},\n version,\n sources: {},\n push: undefined as unknown as Collector.PushFn, // Placeholder, will be set below\n command: undefined as unknown as Collector.CommandFn, // Placeholder, will be set below\n };\n\n // Set the push and command functions with the collector reference\n collector.push = createPush(\n collector,\n (event: WalkerOS.DeepPartialEvent): WalkerOS.PartialEvent =>\n ({\n timing: Math.round((Date.now() - collector.timing) / 10) / 100,\n source: { type: 'collector', id: '', previous_id: '' },\n ...event,\n }) as WalkerOS.PartialEvent,\n );\n\n collector.command = createCommand(collector, commonHandleCommand);\n\n // Initialize destinations after collector is fully created\n // Sources are initialized in startFlow after ELB source is created\n collector.destinations = await initDestinations(\n collector,\n initConfig.destinations || {},\n );\n\n return collector;\n}\n","import type { Collector, WalkerOS, Destination, Elb, On } from '@walkeros/core';\nimport { Const } from './constants';\nimport { addDestination, pushToDestinations } from './destination';\nimport { assign, getId, isFunction, isString } from '@walkeros/core';\nimport { isObject } from '@walkeros/core';\nimport { setConsent } from './consent';\nimport { on, onApply } from './on';\nimport type { RunState } from './types/collector';\n\n/**\n * Handles common commands.\n *\n * @param collector The walkerOS collector instance.\n * @param action The action to handle.\n * @param data The data to handle.\n * @param options The options to handle.\n * @returns A promise that resolves with the push result or undefined.\n */\nexport async function commonHandleCommand(\n collector: Collector.Instance,\n action: string,\n data?: unknown,\n options?: unknown,\n): Promise<Elb.PushResult> {\n let result: Elb.PushResult | undefined;\n switch (action) {\n case Const.Commands.Config:\n if (isObject(data)) {\n assign(collector.config, data as Partial<Collector.Config>, {\n shallow: false,\n });\n }\n break;\n\n case Const.Commands.Consent:\n if (isObject(data)) {\n result = await setConsent(collector, data as WalkerOS.Consent);\n }\n break;\n\n case Const.Commands.Custom:\n if (isObject(data)) {\n collector.custom = assign(\n collector.custom,\n data as WalkerOS.Properties,\n );\n }\n break;\n\n case Const.Commands.Destination:\n if (isObject(data) && isFunction(data.push)) {\n result = await addDestination(\n collector,\n { code: data as unknown as Destination.Instance },\n options as Destination.Config,\n );\n }\n break;\n\n case Const.Commands.Globals:\n if (isObject(data)) {\n collector.globals = assign(\n collector.globals,\n data as WalkerOS.Properties,\n );\n }\n break;\n\n case Const.Commands.On:\n if (isString(data)) {\n on(\n collector,\n data as On.Types,\n options as WalkerOS.SingleOrArray<On.Options>,\n );\n }\n break;\n\n case Const.Commands.Ready:\n onApply(collector, 'ready');\n break;\n\n case Const.Commands.Run:\n result = await runCollector(collector, data as RunState);\n break;\n\n case Const.Commands.Session:\n onApply(collector, 'session');\n break;\n\n case Const.Commands.User:\n if (isObject(data)) {\n assign(collector.user, data as WalkerOS.User, { shallow: false });\n }\n break;\n }\n\n return (\n result || {\n ok: true,\n successful: [],\n queued: [],\n failed: [],\n }\n );\n}\n\n/**\n * Creates a full event from a partial event.\n *\n * @param collector The walkerOS collector instance.\n * @param partialEvent The partial event to transform.\n * @returns The full event.\n */\nexport function createEvent(\n collector: Collector.Instance,\n partialEvent: WalkerOS.PartialEvent,\n): WalkerOS.Event {\n if (!partialEvent.name) throw new Error('Event name is required');\n\n const [entityValue, actionValue] = partialEvent.name.split(' ');\n if (!entityValue || !actionValue) throw new Error('Event name is invalid');\n\n ++collector.count;\n\n const {\n timestamp = Date.now(),\n group = collector.group,\n count = collector.count,\n } = partialEvent;\n\n const {\n name = `${entityValue} ${actionValue}`,\n data = {},\n context = {},\n globals = collector.globals,\n custom = {},\n user = collector.user,\n nested = [],\n consent = collector.consent,\n id = `${timestamp}-${group}-${count}`,\n trigger = '',\n entity = entityValue,\n action = actionValue,\n timing = 0,\n version = {\n source: collector.version,\n tagging: collector.config.tagging || 0,\n },\n source = { type: 'collector', id: '', previous_id: '' },\n } = partialEvent;\n\n return {\n name,\n data,\n context,\n globals,\n custom,\n user,\n nested,\n consent,\n id,\n trigger,\n entity,\n action,\n timestamp,\n timing,\n group,\n count,\n version,\n source,\n };\n}\n\n/**\n * Runs the collector by setting it to allowed state and processing queued events.\n *\n * @param collector The walkerOS collector instance.\n * @param state Optional state to merge with the collector (user, globals, consent, custom).\n * @returns A promise that resolves with the push result.\n */\nexport async function runCollector(\n collector: Collector.Instance,\n state?: RunState,\n): Promise<Elb.PushResult> {\n // Set the collector to allowed state\n collector.allowed = true;\n\n // Reset count and generate new group ID\n collector.count = 0;\n collector.group = getId();\n\n // Update timing for this run\n collector.timing = Date.now();\n\n // Update collector state if provided\n if (state) {\n // Update consent if provided\n if (state.consent) {\n collector.consent = assign(collector.consent, state.consent);\n }\n\n // Update user if provided\n if (state.user) {\n collector.user = assign(collector.user, state.user);\n }\n\n // Update globals if provided\n if (state.globals) {\n collector.globals = assign(\n collector.config.globalsStatic || {},\n state.globals,\n );\n }\n\n // Update custom if provided\n if (state.custom) {\n collector.custom = assign(collector.custom, state.custom);\n }\n }\n\n // Reset destination queues\n Object.values(collector.destinations).forEach((destination) => {\n destination.queue = [];\n });\n\n // Reset collector queue for this run\n collector.queue = [];\n\n // Increase round counter\n collector.round++;\n\n // Process any queued events now that the collector is allowed\n const result = await pushToDestinations(collector);\n\n // Call the predefined run events\n onApply(collector, 'run');\n\n return result;\n}\n","import type { Collector, WalkerOS, Elb } from '@walkeros/core';\nimport {\n getGrantedConsent,\n processEventMapping,\n tryCatchAsync,\n useHooks,\n} from '@walkeros/core';\nimport { createEvent } from './handle';\nimport { pushToDestinations, createPushResult } from './destination';\n\n/**\n * Creates the push function for the collector.\n * Handles source mapping, event creation, and routing to destinations.\n *\n * @param collector - The walkerOS collector instance\n * @param prepareEvent - Function to enrich partial events\n * @returns The push function\n */\nexport function createPush<T extends Collector.Instance>(\n collector: T,\n prepareEvent: (event: WalkerOS.DeepPartialEvent) => WalkerOS.PartialEvent,\n): Collector.PushFn {\n return useHooks(\n async (\n event: WalkerOS.DeepPartialEvent,\n context: Collector.PushContext = {},\n ): Promise<Elb.PushResult> => {\n return await tryCatchAsync(\n async (): Promise<Elb.PushResult> => {\n let partialEvent = event;\n\n // Apply source mapping if provided in context\n if (context.mapping) {\n const processed = await processEventMapping(\n partialEvent,\n context.mapping,\n collector,\n );\n\n // Check ignore flag\n if (processed.ignore) {\n return createPushResult({ ok: true });\n }\n\n // Check consent requirements\n if (context.mapping.consent) {\n const grantedConsent = getGrantedConsent(\n context.mapping.consent,\n collector.consent,\n processed.event.consent as WalkerOS.Consent | undefined,\n );\n\n if (!grantedConsent) {\n return createPushResult({ ok: true });\n }\n }\n\n partialEvent = processed.event;\n }\n\n // Prepare event (add timing, source info)\n const enrichedEvent = prepareEvent(partialEvent);\n\n // Create full event\n const fullEvent = createEvent(collector, enrichedEvent);\n\n // Push to destinations\n return await pushToDestinations(collector, fullEvent);\n },\n () => {\n return createPushResult({ ok: false });\n },\n )();\n },\n 'Push',\n collector.hooks,\n ) as Collector.PushFn;\n}\n","import type { Collector, Elb } from '@walkeros/core';\nimport type { HandleCommandFn } from './types/collector';\nimport { useHooks, tryCatchAsync } from '@walkeros/core';\nimport { createPushResult } from './destination';\n\n/**\n * Creates the command function for the collector.\n * Handles walker commands (config, consent, destination, etc.)\n *\n * @param collector - The walkerOS collector instance\n * @param handleCommand - Command handler function\n * @returns The command function\n */\nexport function createCommand<T extends Collector.Instance>(\n collector: T,\n handleCommand: HandleCommandFn<T>,\n): Collector.CommandFn {\n return useHooks(\n async (\n command: string,\n data?: unknown,\n options?: unknown,\n ): Promise<Elb.PushResult> => {\n return await tryCatchAsync(\n async (): Promise<Elb.PushResult> => {\n return await handleCommand(collector, command, data, options);\n },\n () => {\n return createPushResult({ ok: false });\n },\n )();\n },\n 'Command',\n collector.hooks,\n ) as Collector.CommandFn;\n}\n","import type { Collector, Source, WalkerOS, Elb } from '@walkeros/core';\n\n/**\n * Creates the default ELB source.\n * Routes between collector.push and collector.command based on input.\n * Provides backward-compatible flexible argument interface.\n *\n * @param collector - The walkerOS collector instance\n * @returns ELB source instance\n */\nexport function createElbSource(\n collector: Collector.Instance,\n): Source.Instance {\n return {\n type: 'elb',\n config: {},\n\n // The push function is the elb() interface users interact with\n push: async (\n eventOrCommand?: unknown,\n data?: unknown,\n options?: unknown,\n context?: unknown,\n nested?: WalkerOS.Entities,\n custom?: WalkerOS.Properties,\n ): Promise<Elb.PushResult> => {\n // Detect walker commands\n if (\n typeof eventOrCommand === 'string' &&\n eventOrCommand.startsWith('walker ')\n ) {\n const command = eventOrCommand.replace('walker ', '');\n return collector.command(command, data, options);\n }\n\n // Build event object\n let event: WalkerOS.DeepPartialEvent;\n\n if (typeof eventOrCommand === 'string') {\n // Convert string to object: elb('page view', { title: 'Home' })\n event = { name: eventOrCommand };\n if (data && typeof data === 'object' && !Array.isArray(data)) {\n event.data = data as WalkerOS.Properties;\n }\n } else if (eventOrCommand && typeof eventOrCommand === 'object') {\n // Use object directly: elb({ name: 'page view', data: {...} })\n event = eventOrCommand as WalkerOS.DeepPartialEvent;\n // Merge additional data if provided\n if (data && typeof data === 'object' && !Array.isArray(data)) {\n event.data = {\n ...(event.data || {}),\n ...(data as WalkerOS.Properties),\n };\n }\n } else {\n // Invalid input\n return { ok: false, successful: [], queued: [], failed: [] };\n }\n\n // Add optional properties if provided\n if (context && typeof context === 'object') {\n event.context = context as WalkerOS.OrderedProperties;\n }\n if (nested && Array.isArray(nested)) {\n event.nested = nested;\n }\n if (custom && typeof custom === 'object') {\n event.custom = custom as WalkerOS.Properties;\n }\n\n // Call collector.push with event object\n return collector.push(event);\n },\n };\n}\n","import type { Collector, Source, WalkerOS } from '@walkeros/core';\nimport { tryCatchAsync } from '@walkeros/core';\n\n/**\n * Initialize sources using the code/config/env pattern\n *\n * @param collector - The WalkerOS collector instance\n * @param sources - Map of source definitions with code/config/env\n * @returns Initialized sources\n */\nexport async function initSources(\n collector: Collector.Instance,\n sources: Source.InitSources = {},\n): Promise<Collector.Sources> {\n const result: Collector.Sources = {};\n\n for (const [sourceId, sourceDefinition] of Object.entries(sources)) {\n const { code, config = {}, env = {}, primary } = sourceDefinition;\n\n // Create wrapped push that auto-applies source mapping config\n const wrappedPush: Collector.PushFn = (\n event: WalkerOS.DeepPartialEvent,\n context: Collector.PushContext = {},\n ) => {\n // Pass source config as mapping in context\n return collector.push(event, {\n ...context,\n mapping: config,\n });\n };\n\n // Create initial logger scoped to sourceId (type will be added after init)\n const initialLogger = collector.logger.scope('source').scope(sourceId);\n\n const cleanEnv: Source.Env = {\n push: wrappedPush,\n command: collector.command,\n sources: collector.sources, // Provide access to all sources for chaining\n elb: collector.sources.elb.push, // ELB source is always available\n logger: initialLogger,\n ...env,\n };\n\n // Call source function with config and environment separately\n const sourceInstance = await tryCatchAsync(code)(config, cleanEnv);\n\n if (!sourceInstance) continue; // Skip failed source initialization\n\n // Update logger with actual source type: [type:sourceId] or [unknown:sourceId]\n const sourceType = sourceInstance.type || 'unknown';\n const sourceLogger = collector.logger.scope(sourceType).scope(sourceId);\n cleanEnv.logger = sourceLogger;\n\n // Store the primary flag in the source config for later access\n if (primary) {\n sourceInstance.config = { ...sourceInstance.config, primary };\n }\n\n result[sourceId] = sourceInstance;\n }\n\n return result;\n}\n","import type { Collector, Elb } from '@walkeros/core';\nimport type { StartFlow } from './types';\nimport { collector } from './collector';\nimport { createElbSource } from './elb';\nimport { initSources } from './source';\n\nexport async function startFlow<ElbPush extends Elb.Fn = Elb.Fn>(\n initConfig?: Collector.InitConfig,\n): Promise<StartFlow<ElbPush>> {\n initConfig = initConfig || {};\n const instance = await collector(initConfig);\n\n // Create and register ELB source first\n const elbSource = createElbSource(instance);\n instance.sources.elb = elbSource;\n\n // Now initialize other sources with ELB source available\n const additionalSources = await initSources(\n instance,\n initConfig.sources || {},\n );\n Object.assign(instance.sources, additionalSources);\n\n const { consent, user, globals, custom } = initConfig;\n\n if (consent) await instance.command('consent', consent);\n if (user) await instance.command('user', user);\n if (globals) Object.assign(instance.globals, globals);\n if (custom) Object.assign(instance.custom, custom);\n\n if (instance.config.run) await instance.command('run');\n\n // Determine the primary elb:\n // 1. Use explicitly marked primary source\n // 2. Use first non-elb source if any exist\n // 3. Fallback to ELB source\n let primaryElb: Elb.Fn = elbSource.push as Elb.Fn;\n\n const sources = Object.values(instance.sources).filter(\n (source) => source.type !== 'elb',\n );\n\n // First, check for explicitly marked primary source\n const markedPrimary = sources.find(\n (source) => (source.config as { primary?: boolean }).primary,\n );\n\n if (markedPrimary) {\n primaryElb = markedPrimary.push as Elb.Fn;\n } else if (sources.length > 0) {\n // Use first source as default\n primaryElb = sources[0].push as Elb.Fn;\n }\n\n return {\n collector: instance,\n elb: primaryElb as ElbPush,\n };\n}\n"],"mappings":"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","names":["assign","collector","event","destination","collector","on","option","collector","assign","assign","assign","getId","isObject","collector","isObject","assign","getId","getGrantedConsent","processEventMapping","tryCatchAsync","useHooks","collector","useHooks","tryCatchAsync","processEventMapping","getGrantedConsent","useHooks","tryCatchAsync","collector","useHooks","tryCatchAsync","assign","collector","collector","tryCatchAsync","collector"]}
|
|
1
|
+
{"version":3,"sources":["../src/types/code.ts","../src/constants.ts","../src/consent.ts","../src/destination.ts","../src/destination-code.ts","../src/on.ts","../src/collector.ts","../src/handle.ts","../src/push.ts","../src/command.ts","../src/elb.ts","../src/source.ts","../src/flow.ts"],"sourcesContent":["import type { Destination, Mapping, On, WalkerOS } from '@walkeros/core';\n\nexport interface Settings {\n scripts?: string[];\n init?: string;\n on?: string;\n push?: string;\n pushBatch?: string;\n}\n\nexport interface CodeMapping extends Mapping.Rule<CodeMapping> {\n push?: string;\n pushBatch?: string;\n}\n\nexport type Types = Destination.Types<Settings, CodeMapping>;\nexport type Config = Destination.Config<Types>;\nexport type Context = Destination.Context<Types>;\nexport type InitContext = Destination.InitContext<Types>;\nexport type PushContext = Destination.PushContext<Types>;\nexport type PushBatchContext = Destination.PushBatchContext<Types>;\n\nexport type InitFn = (context: InitContext) => void;\nexport type OnFn = (type: On.Types, context: Context) => void;\nexport type PushFn = (event: WalkerOS.Event, context: PushContext) => void;\nexport type PushBatchFn = (\n batch: Destination.Batch<CodeMapping>,\n context: PushBatchContext,\n) => void;\n","import type { Collector } from '@walkeros/core';\nimport type { CommandTypes, StorageType } from './types/collector';\n\nexport const Commands: Record<CommandTypes, Collector.CommandType> = {\n Action: 'action',\n Actions: 'actions',\n Config: 'config',\n Consent: 'consent',\n Context: 'context',\n Custom: 'custom',\n Destination: 'destination',\n Elb: 'elb',\n Globals: 'globals',\n Hook: 'hook',\n Init: 'init',\n Link: 'link',\n On: 'on',\n Prefix: 'data-elb',\n Ready: 'ready',\n Run: 'run',\n Session: 'session',\n User: 'user',\n Walker: 'walker',\n} as const;\n\nconst UtilsStorage: { [key: string]: StorageType } = {\n Cookie: 'cookie',\n Local: 'local',\n Session: 'session',\n} as const;\n\nconst Utils = {\n Storage: UtilsStorage,\n};\n\nexport const Const = {\n Commands,\n Utils,\n};\n\nexport default Const;\n","import type { Collector, WalkerOS, Elb } from '@walkeros/core';\nimport { assign } from '@walkeros/core';\nimport { pushToDestinations, createPushResult } from './destination';\nimport { onApply } from './on';\n\n/**\n * Sets the consent state and processes the queue.\n *\n * @param collector - The walkerOS collector instance.\n * @param data - The consent data to set.\n * @returns The result of the push operation.\n */\nexport async function setConsent(\n collector: Collector.Instance,\n data: WalkerOS.Consent,\n): Promise<Elb.PushResult> {\n const { consent } = collector;\n\n let runQueue = false;\n const update: WalkerOS.Consent = {};\n Object.entries(data).forEach(([name, granted]) => {\n const state = !!granted;\n\n update[name] = state;\n\n // Only run queue if state was set to true\n runQueue = runQueue || state;\n });\n\n // Update consent state\n collector.consent = assign(consent, update);\n\n // Run on consent events\n onApply(collector, 'consent', undefined, update);\n\n // Process previous events if not disabled\n return runQueue\n ? pushToDestinations(collector)\n : createPushResult({ ok: true });\n}\n","import type { Collector, WalkerOS, Elb, Destination } from '@walkeros/core';\nimport {\n assign,\n clone,\n debounce,\n getId,\n getGrantedConsent,\n isDefined,\n isObject,\n processEventMapping,\n tryCatchAsync,\n useHooks,\n} from '@walkeros/core';\nimport { destinationCode } from './destination-code';\n\nfunction resolveCode(code: Destination.Instance | true): Destination.Instance {\n return code === true ? destinationCode : code;\n}\n\n/**\n * Adds a new destination to the collector.\n *\n * @param collector - The walkerOS collector instance.\n * @param data - The destination's init data.\n * @param options - The destination's config.\n * @returns The result of the push operation.\n */\nexport async function addDestination(\n collector: Collector.Instance,\n data: Destination.Init,\n options?: Destination.Config,\n): Promise<Elb.PushResult> {\n const { code, config: dataConfig = {}, env = {} } = data;\n const config = options || dataConfig || { init: false };\n\n const resolved = resolveCode(code);\n const destination: Destination.Instance = {\n ...resolved,\n config,\n env: mergeEnvironments(resolved.env, env),\n };\n\n let id = destination.config.id; // Use given id\n if (!id) {\n // Generate a new id if none was given\n do {\n id = getId(4);\n } while (collector.destinations[id]);\n }\n\n // Add the destination\n collector.destinations[id] = destination;\n\n // Process previous events if not disabled\n if (destination.config.queue !== false)\n destination.queue = [...collector.queue];\n\n return pushToDestinations(collector, undefined, { [id]: destination });\n}\n\n/**\n * Pushes an event to all or a subset of destinations.\n *\n * @param collector - The walkerOS collector instance.\n * @param event - The event to push.\n * @param destinations - The destinations to push to.\n * @returns The result of the push operation.\n */\nexport async function pushToDestinations(\n collector: Collector.Instance,\n event?: WalkerOS.Event,\n destinations?: Collector.Destinations,\n): Promise<Elb.PushResult> {\n const { allowed, consent, globals, user } = collector;\n\n // Check if collector is allowed to push\n if (!allowed) return createPushResult({ ok: false });\n\n // Add event to the collector queue\n if (event) collector.queue.push(event);\n\n // Use given destinations or use internal destinations\n if (!destinations) destinations = collector.destinations;\n\n const results = await Promise.all(\n // Process all destinations in parallel\n Object.entries(destinations || {}).map(async ([id, destination]) => {\n // Create a queue of events to be processed\n let currentQueue = (destination.queue || []).map((event) => ({\n ...event,\n consent,\n }));\n\n // Reset original queue while processing to enable async processing\n destination.queue = [];\n\n // Add event to queue stack\n if (event) {\n // Clone the event to avoid mutating the original event\n const currentEvent = clone(event);\n\n // Note: Policy is now applied in processEventMapping() within destinationPush()\n\n // Add event to queue stack\n currentQueue.push(currentEvent);\n }\n\n // Nothing to do here if the queue is empty\n if (!currentQueue.length) return { id, destination, skipped: true };\n\n const allowedEvents: WalkerOS.Events = [];\n const skippedEvents = currentQueue.filter((queuedEvent) => {\n const grantedConsent = getGrantedConsent(\n destination.config.consent, // Required\n consent, // Current collector state\n queuedEvent.consent, // Individual event state\n );\n\n if (grantedConsent) {\n queuedEvent.consent = grantedConsent; // Save granted consent states only\n\n allowedEvents.push(queuedEvent); // Add to allowed queue\n return false; // Remove from destination queue\n }\n\n return true; // Keep denied events in the queue\n });\n\n // Add skipped events back to the queue\n destination.queue.concat(skippedEvents);\n\n // Execution shall not pass if no events are allowed\n if (!allowedEvents.length) {\n return { id, destination, queue: currentQueue }; // Don't push if not allowed\n }\n\n // Initialize the destination if needed\n const isInitialized = await tryCatchAsync(destinationInit)(\n collector,\n destination,\n );\n\n if (!isInitialized) return { id, destination, queue: currentQueue };\n\n // Process the destinations event queue\n let error = false;\n if (!destination.dlq) destination.dlq = [];\n\n // Process allowed events and store failed ones in the dead letter queue (DLQ)\n await Promise.all(\n allowedEvents.map(async (event) => {\n // Merge event with collector state, prioritizing event properties\n event.globals = assign(globals, event.globals);\n event.user = assign(user, event.user);\n\n await tryCatchAsync(destinationPush, (err) => {\n // Log the error with destination scope\n const destType = destination.type || 'unknown';\n collector.logger.scope(destType).error('Push failed', {\n error: err,\n event: event.name,\n });\n error = true; // oh no\n\n // Add failed event to destinations DLQ\n destination.dlq!.push([event, err]);\n\n return false;\n })(collector, destination, event);\n\n return event;\n }),\n );\n\n return { id, destination, error };\n }),\n );\n\n const successful = [];\n const queued = [];\n const failed = [];\n\n for (const result of results) {\n if (result.skipped) continue;\n\n const destination = result.destination;\n\n const ref = { id: result.id, destination };\n\n if (result.error) {\n failed.push(ref);\n } else if (result.queue && result.queue.length) {\n // Merge queue with existing queue\n destination.queue = (destination.queue || []).concat(result.queue);\n queued.push(ref);\n } else {\n successful.push(ref);\n }\n }\n\n return createPushResult({\n ok: !failed.length,\n event,\n successful,\n queued,\n failed,\n });\n}\n\n/**\n * Initializes a destination.\n *\n * @template Destination\n * @param collector - The walkerOS collector instance.\n * @param destination - The destination to initialize.\n * @returns Whether the destination was initialized successfully.\n */\nexport async function destinationInit<Destination extends Destination.Instance>(\n collector: Collector.Instance,\n destination: Destination,\n): Promise<boolean> {\n // Check if the destination was initialized properly or try to do so\n if (destination.init && !destination.config.init) {\n // Create scoped logger for this destination: [type:id] or [unknown:id]\n const destType = destination.type || 'unknown';\n const destLogger = collector.logger.scope(destType);\n\n const context = {\n collector,\n config: destination.config,\n env: mergeEnvironments(destination.env, destination.config.env),\n logger: destLogger,\n } as Destination.InitContext;\n\n destLogger.debug('init');\n\n const configResult = await useHooks(\n destination.init,\n 'DestinationInit',\n collector.hooks,\n )(context);\n\n // Actively check for errors (when false)\n if (configResult === false) return configResult; // don't push if init is false\n\n // Update the destination config if it was returned\n destination.config = {\n ...(configResult || destination.config),\n init: true, // Remember that the destination was initialized\n };\n\n destLogger.debug('init done');\n }\n\n return true; // Destination is ready to push\n}\n\n/**\n * Pushes an event to a single destination.\n * Handles mapping, batching, and consent checks.\n *\n * @template Destination\n * @param collector - The walkerOS collector instance.\n * @param destination - The destination to push to.\n * @param event - The event to push.\n * @returns Whether the event was pushed successfully.\n */\nexport async function destinationPush<Destination extends Destination.Instance>(\n collector: Collector.Instance,\n destination: Destination,\n event: WalkerOS.Event,\n): Promise<boolean> {\n const { config } = destination;\n\n const processed = await processEventMapping(event, config, collector);\n\n if (processed.ignore) return false;\n\n // Create scoped logger for this destination: [type] or [unknown]\n const destType = destination.type || 'unknown';\n const destLogger = collector.logger.scope(destType);\n\n const context: Destination.PushContext = {\n collector,\n config,\n data: processed.data,\n mapping: processed.mapping,\n env: mergeEnvironments(destination.env, config.env),\n logger: destLogger,\n };\n\n const eventMapping = processed.mapping;\n const mappingKey = processed.mappingKey || '* *';\n\n if (eventMapping?.batch && destination.pushBatch) {\n // Initialize batch registry on destination (not on shared mapping config)\n destination.batches = destination.batches || {};\n\n // Get or create batch state for this mapping key\n if (!destination.batches[mappingKey]) {\n const batched: Destination.Batch<unknown> = {\n key: mappingKey,\n events: [],\n data: [],\n };\n\n destination.batches[mappingKey] = {\n batched,\n batchFn: debounce(() => {\n const batchState = destination.batches![mappingKey];\n const currentBatched = batchState.batched;\n\n const batchContext: Destination.PushBatchContext = {\n collector,\n config,\n // Note: batch.data contains all transformed data; context.data is for single events\n data: undefined,\n mapping: eventMapping,\n env: mergeEnvironments(destination.env, config.env),\n logger: destLogger,\n };\n\n destLogger.debug('push batch', {\n events: currentBatched.events.length,\n });\n\n useHooks(\n destination.pushBatch!,\n 'DestinationPushBatch',\n collector.hooks,\n )(currentBatched, batchContext);\n\n destLogger.debug('push batch done');\n\n // Reset batch\n currentBatched.events = [];\n currentBatched.data = [];\n }, eventMapping.batch),\n };\n }\n\n // Add event to batch\n const batchState = destination.batches[mappingKey];\n batchState.batched.events.push(processed.event);\n if (isDefined(processed.data)) batchState.batched.data.push(processed.data);\n\n // Trigger debounced batch\n batchState.batchFn();\n } else {\n destLogger.debug('push', { event: processed.event.name });\n\n // It's time to go to the destination's side now\n await useHooks(\n destination.push,\n 'DestinationPush',\n collector.hooks,\n )(processed.event, context);\n\n destLogger.debug('push done');\n }\n\n return true;\n}\n\n/**\n * Creates a standardized result object for push operations.\n *\n * @param partialResult - A partial result to merge with the default result.\n * @returns The push result.\n */\nexport function createPushResult(\n partialResult?: Partial<Elb.PushResult>,\n): Elb.PushResult {\n return assign(\n {\n ok: !partialResult?.failed?.length,\n successful: [],\n queued: [],\n failed: [],\n },\n partialResult,\n );\n}\n\n/**\n * Initializes a map of destinations using ONLY the unified code/config/env pattern.\n * Does NOT call destination.init() - that happens later during push with proper consent checks.\n *\n * @param destinations - The destinations to initialize.\n * @param collector - The collector instance for destination init context.\n * @returns The initialized destinations.\n */\nexport async function initDestinations(\n _collector: Collector.Instance,\n destinations: Destination.InitDestinations = {},\n): Promise<Collector.Destinations> {\n const result: Collector.Destinations = {};\n\n for (const [name, destinationDef] of Object.entries(destinations)) {\n const { code, config = {}, env = {} } = destinationDef;\n const resolved = resolveCode(code);\n\n const mergedConfig = {\n ...resolved.config,\n ...config,\n };\n\n const mergedEnv = mergeEnvironments(resolved.env, env);\n\n result[name] = {\n ...resolved,\n config: mergedConfig,\n env: mergedEnv,\n };\n }\n\n return result;\n}\n\n/**\n * Merges destination environment with config environment\n * Config env takes precedence over destination env for overrides\n */\nexport function mergeEnvironments(\n destinationEnv?: Destination.Env,\n configEnv?: Destination.Env,\n): Destination.Env {\n // If neither environment exists, return empty object\n if (!destinationEnv && !configEnv) return {};\n\n // If only one exists, return it\n if (!configEnv) return destinationEnv!;\n if (!destinationEnv) return configEnv;\n\n // Both exist - merge objects with configEnv taking precedence\n if (isObject(destinationEnv) && isObject(configEnv)) {\n return { ...destinationEnv, ...configEnv };\n }\n\n // If they're not both objects, config env overrides destination env\n return configEnv;\n}\n","import type { Destination } from '@walkeros/core';\nimport type { CodeMapping, Settings } from './types/code';\n\nexport const destinationCode: Destination.Instance = {\n type: 'code',\n config: {},\n\n init(context) {\n const { config, logger } = context;\n const settings = config.settings as Settings | undefined;\n\n // Inject scripts (fire and forget)\n const scripts = settings?.scripts;\n if (scripts && typeof document !== 'undefined') {\n for (const src of scripts) {\n const script = document.createElement('script');\n script.src = src;\n script.async = true;\n document.head.appendChild(script);\n }\n }\n\n // Execute init code\n const initCode = settings?.init;\n if (!initCode) return;\n try {\n const fn = new Function('context', initCode);\n fn(context);\n } catch (e) {\n logger.error('Code destination init error:', e);\n }\n },\n\n push(event, context) {\n const { mapping, config, logger } = context;\n const pushCode =\n (mapping as CodeMapping | undefined)?.push ??\n (config.settings as Settings | undefined)?.push;\n if (!pushCode) return;\n try {\n const fn = new Function('event', 'context', pushCode);\n fn(event, context);\n } catch (e) {\n logger.error('Code destination push error:', e);\n }\n },\n\n pushBatch(batch, context) {\n const { mapping, config, logger } = context;\n const pushBatchCode =\n (mapping as CodeMapping | undefined)?.pushBatch ??\n (config.settings as Settings | undefined)?.pushBatch;\n if (!pushBatchCode) return;\n try {\n const fn = new Function('batch', 'context', pushBatchCode);\n fn(batch, context);\n } catch (e) {\n logger.error('Code destination pushBatch error:', e);\n }\n },\n\n on(type, context) {\n const { config, logger } = context;\n const onCode = (config.settings as Settings | undefined)?.on;\n if (!onCode) return;\n try {\n const fn = new Function('type', 'context', onCode);\n fn(type, context);\n } catch (e) {\n logger.error('Code destination on error:', e);\n }\n },\n};\n\nexport default destinationCode;\n","import type { Collector, On, WalkerOS, Destination } from '@walkeros/core';\nimport { isArray } from '@walkeros/core';\nimport { Const } from './constants';\nimport { tryCatch } from '@walkeros/core';\nimport { mergeEnvironments } from './destination';\n\n/**\n * Registers a callback for a specific event type.\n *\n * @param collector The walkerOS collector instance.\n * @param type The type of the event to listen for.\n * @param option The callback function or an array of callback functions.\n */\nexport function on(\n collector: Collector.Instance,\n type: On.Types,\n option: WalkerOS.SingleOrArray<On.Options>,\n) {\n const on = collector.on;\n const onType: Array<On.Options> = on[type] || [];\n const options = isArray(option) ? option : [option];\n\n options.forEach((option) => {\n onType.push(option);\n });\n\n // Update collector on state\n (on[type] as typeof onType) = onType;\n\n // Execute the on function directly\n onApply(collector, type, options);\n}\n\n/**\n * Applies all registered callbacks for a specific event type.\n *\n * @param collector The walkerOS collector instance.\n * @param type The type of the event to apply the callbacks for.\n * @param options The options for the callbacks.\n * @param config The consent configuration.\n */\nexport function onApply(\n collector: Collector.Instance,\n type: On.Types,\n options?: Array<On.Options>,\n config?: WalkerOS.Consent,\n) {\n // Use the optionally provided options\n let onConfig = options || [];\n\n if (!options) {\n // Get the collector on events\n onConfig = collector.on[type] || [];\n }\n\n // Calculate context data once for all sources and destinations\n let contextData: unknown;\n\n switch (type) {\n case Const.Commands.Consent:\n contextData = config || collector.consent;\n break;\n case Const.Commands.Session:\n contextData = collector.session;\n break;\n case Const.Commands.Ready:\n case Const.Commands.Run:\n default:\n contextData = undefined;\n break;\n }\n\n Object.values(collector.sources).forEach((source) => {\n if (source.on) {\n tryCatch(source.on)(type, contextData);\n }\n });\n\n Object.values(collector.destinations).forEach((destination) => {\n if (destination.on) {\n const destType = destination.type || 'unknown';\n const destLogger = collector.logger\n .scope(destType)\n .scope('on')\n .scope(type);\n\n const context: Destination.Context = {\n collector,\n config: destination.config,\n data: contextData as Destination.Data,\n env: mergeEnvironments(destination.env, destination.config.env),\n logger: destLogger,\n };\n\n tryCatch(destination.on)(type, context);\n }\n });\n\n if (!onConfig.length) return; // No on-events registered, nothing to do\n\n switch (type) {\n case Const.Commands.Consent:\n onConsent(collector, onConfig as Array<On.ConsentConfig>, config);\n break;\n case Const.Commands.Ready:\n onReady(collector, onConfig as Array<On.ReadyConfig>);\n break;\n case Const.Commands.Run:\n onRun(collector, onConfig as Array<On.RunConfig>);\n break;\n case Const.Commands.Session:\n onSession(collector, onConfig as Array<On.SessionConfig>);\n break;\n default:\n break;\n }\n}\n\nfunction onConsent(\n collector: Collector.Instance,\n onConfig: Array<On.ConsentConfig>,\n currentConsent?: WalkerOS.Consent,\n): void {\n const consentState = currentConsent || collector.consent;\n\n onConfig.forEach((consentConfig) => {\n // Collect functions whose consent keys match the rule keys directly\n // Directly execute functions whose consent keys match the rule keys\n Object.keys(consentState) // consent keys\n .filter((consent) => consent in consentConfig) // check for matching rule keys\n .forEach((consent) => {\n // Execute the function\n tryCatch(consentConfig[consent])(collector, consentState);\n });\n });\n}\n\nfunction onReady(\n collector: Collector.Instance,\n onConfig: Array<On.ReadyConfig>,\n): void {\n if (collector.allowed)\n onConfig.forEach((func) => {\n tryCatch(func)(collector);\n });\n}\n\nfunction onRun(\n collector: Collector.Instance,\n onConfig: Array<On.RunConfig>,\n): void {\n if (collector.allowed)\n onConfig.forEach((func) => {\n tryCatch(func)(collector);\n });\n}\n\nfunction onSession(\n collector: Collector.Instance,\n onConfig: Array<On.SessionConfig>,\n): void {\n if (!collector.session) return;\n\n onConfig.forEach((func) => {\n tryCatch(func)(collector, collector.session);\n });\n}\n","import type { Collector, Logger, WalkerOS } from '@walkeros/core';\nimport { assign, createLogger } from '@walkeros/core';\nimport { commonHandleCommand } from './handle';\nimport { initDestinations } from './destination';\nimport { createPush } from './push';\nimport { createCommand } from './command';\nimport { initSources } from './source';\n\ndeclare const __VERSION__: string;\n\nexport async function collector(\n initConfig: Collector.InitConfig,\n): Promise<Collector.Instance> {\n const version = __VERSION__;\n\n const defaultConfig: Collector.Config = {\n globalsStatic: {},\n sessionStatic: {},\n tagging: 0,\n run: true,\n };\n\n const config: Collector.Config = assign(defaultConfig, initConfig, {\n merge: false,\n extend: false,\n });\n\n // Create logger with config from initConfig\n const loggerConfig: Logger.Config = {\n level: initConfig.logger?.level,\n handler: initConfig.logger?.handler,\n };\n const logger = createLogger(loggerConfig);\n\n // Enhanced globals with static globals from config\n const finalGlobals = { ...config.globalsStatic, ...initConfig.globals };\n\n const collector: Collector.Instance = {\n allowed: false,\n config,\n consent: initConfig.consent || {},\n count: 0,\n custom: initConfig.custom || {},\n destinations: {},\n globals: finalGlobals,\n group: '',\n hooks: {},\n logger,\n on: {},\n queue: [],\n round: 0,\n session: undefined,\n timing: Date.now(),\n user: initConfig.user || {},\n version,\n sources: {},\n push: undefined as unknown as Collector.PushFn, // Placeholder, will be set below\n command: undefined as unknown as Collector.CommandFn, // Placeholder, will be set below\n };\n\n // Set the push and command functions with the collector reference\n collector.push = createPush(\n collector,\n (event: WalkerOS.DeepPartialEvent): WalkerOS.PartialEvent =>\n ({\n timing: Math.round((Date.now() - collector.timing) / 10) / 100,\n source: { type: 'collector', id: '', previous_id: '' },\n ...event,\n }) as WalkerOS.PartialEvent,\n );\n\n collector.command = createCommand(collector, commonHandleCommand);\n\n // Initialize destinations after collector is fully created\n // Sources are initialized in startFlow after ELB source is created\n collector.destinations = await initDestinations(\n collector,\n initConfig.destinations || {},\n );\n\n return collector;\n}\n","import type { Collector, WalkerOS, Destination, Elb, On } from '@walkeros/core';\nimport { Const } from './constants';\nimport { addDestination, pushToDestinations } from './destination';\nimport { assign, getId, isFunction, isString } from '@walkeros/core';\nimport { isObject } from '@walkeros/core';\nimport { setConsent } from './consent';\nimport { on, onApply } from './on';\nimport type { RunState } from './types/collector';\n\n/**\n * Handles common commands.\n *\n * @param collector The walkerOS collector instance.\n * @param action The action to handle.\n * @param data The data to handle.\n * @param options The options to handle.\n * @returns A promise that resolves with the push result or undefined.\n */\nexport async function commonHandleCommand(\n collector: Collector.Instance,\n action: string,\n data?: unknown,\n options?: unknown,\n): Promise<Elb.PushResult> {\n let result: Elb.PushResult | undefined;\n switch (action) {\n case Const.Commands.Config:\n if (isObject(data)) {\n assign(collector.config, data as Partial<Collector.Config>, {\n shallow: false,\n });\n }\n break;\n\n case Const.Commands.Consent:\n if (isObject(data)) {\n result = await setConsent(collector, data as WalkerOS.Consent);\n }\n break;\n\n case Const.Commands.Custom:\n if (isObject(data)) {\n collector.custom = assign(\n collector.custom,\n data as WalkerOS.Properties,\n );\n }\n break;\n\n case Const.Commands.Destination:\n if (isObject(data) && isFunction(data.push)) {\n result = await addDestination(\n collector,\n { code: data as unknown as Destination.Instance },\n options as Destination.Config,\n );\n }\n break;\n\n case Const.Commands.Globals:\n if (isObject(data)) {\n collector.globals = assign(\n collector.globals,\n data as WalkerOS.Properties,\n );\n }\n break;\n\n case Const.Commands.On:\n if (isString(data)) {\n on(\n collector,\n data as On.Types,\n options as WalkerOS.SingleOrArray<On.Options>,\n );\n }\n break;\n\n case Const.Commands.Ready:\n onApply(collector, 'ready');\n break;\n\n case Const.Commands.Run:\n result = await runCollector(collector, data as RunState);\n break;\n\n case Const.Commands.Session:\n onApply(collector, 'session');\n break;\n\n case Const.Commands.User:\n if (isObject(data)) {\n assign(collector.user, data as WalkerOS.User, { shallow: false });\n }\n break;\n }\n\n return (\n result || {\n ok: true,\n successful: [],\n queued: [],\n failed: [],\n }\n );\n}\n\n/**\n * Creates a full event from a partial event.\n *\n * @param collector The walkerOS collector instance.\n * @param partialEvent The partial event to transform.\n * @returns The full event.\n */\nexport function createEvent(\n collector: Collector.Instance,\n partialEvent: WalkerOS.PartialEvent,\n): WalkerOS.Event {\n if (!partialEvent.name) throw new Error('Event name is required');\n\n const [entityValue, actionValue] = partialEvent.name.split(' ');\n if (!entityValue || !actionValue) throw new Error('Event name is invalid');\n\n ++collector.count;\n\n const {\n timestamp = Date.now(),\n group = collector.group,\n count = collector.count,\n } = partialEvent;\n\n const {\n name = `${entityValue} ${actionValue}`,\n data = {},\n context = {},\n globals = collector.globals,\n custom = {},\n user = collector.user,\n nested = [],\n consent = collector.consent,\n id = `${timestamp}-${group}-${count}`,\n trigger = '',\n entity = entityValue,\n action = actionValue,\n timing = 0,\n version = {\n source: collector.version,\n tagging: collector.config.tagging || 0,\n },\n source = { type: 'collector', id: '', previous_id: '' },\n } = partialEvent;\n\n return {\n name,\n data,\n context,\n globals,\n custom,\n user,\n nested,\n consent,\n id,\n trigger,\n entity,\n action,\n timestamp,\n timing,\n group,\n count,\n version,\n source,\n };\n}\n\n/**\n * Runs the collector by setting it to allowed state and processing queued events.\n *\n * @param collector The walkerOS collector instance.\n * @param state Optional state to merge with the collector (user, globals, consent, custom).\n * @returns A promise that resolves with the push result.\n */\nexport async function runCollector(\n collector: Collector.Instance,\n state?: RunState,\n): Promise<Elb.PushResult> {\n // Set the collector to allowed state\n collector.allowed = true;\n\n // Reset count and generate new group ID\n collector.count = 0;\n collector.group = getId();\n\n // Update timing for this run\n collector.timing = Date.now();\n\n // Update collector state if provided\n if (state) {\n // Update consent if provided\n if (state.consent) {\n collector.consent = assign(collector.consent, state.consent);\n }\n\n // Update user if provided\n if (state.user) {\n collector.user = assign(collector.user, state.user);\n }\n\n // Update globals if provided\n if (state.globals) {\n collector.globals = assign(\n collector.config.globalsStatic || {},\n state.globals,\n );\n }\n\n // Update custom if provided\n if (state.custom) {\n collector.custom = assign(collector.custom, state.custom);\n }\n }\n\n // Reset destination queues\n Object.values(collector.destinations).forEach((destination) => {\n destination.queue = [];\n });\n\n // Reset collector queue for this run\n collector.queue = [];\n\n // Increase round counter\n collector.round++;\n\n // Process any queued events now that the collector is allowed\n const result = await pushToDestinations(collector);\n\n // Call the predefined run events\n onApply(collector, 'run');\n\n return result;\n}\n","import type { Collector, WalkerOS, Elb } from '@walkeros/core';\nimport {\n getGrantedConsent,\n processEventMapping,\n tryCatchAsync,\n useHooks,\n} from '@walkeros/core';\nimport { createEvent } from './handle';\nimport { pushToDestinations, createPushResult } from './destination';\n\n/**\n * Creates the push function for the collector.\n * Handles source mapping, event creation, and routing to destinations.\n *\n * @param collector - The walkerOS collector instance\n * @param prepareEvent - Function to enrich partial events\n * @returns The push function\n */\nexport function createPush<T extends Collector.Instance>(\n collector: T,\n prepareEvent: (event: WalkerOS.DeepPartialEvent) => WalkerOS.PartialEvent,\n): Collector.PushFn {\n return useHooks(\n async (\n event: WalkerOS.DeepPartialEvent,\n context: Collector.PushContext = {},\n ): Promise<Elb.PushResult> => {\n return await tryCatchAsync(\n async (): Promise<Elb.PushResult> => {\n let partialEvent = event;\n\n // Apply source mapping if provided in context\n if (context.mapping) {\n const processed = await processEventMapping(\n partialEvent,\n context.mapping,\n collector,\n );\n\n // Check ignore flag\n if (processed.ignore) {\n return createPushResult({ ok: true });\n }\n\n // Check consent requirements\n if (context.mapping.consent) {\n const grantedConsent = getGrantedConsent(\n context.mapping.consent,\n collector.consent,\n processed.event.consent as WalkerOS.Consent | undefined,\n );\n\n if (!grantedConsent) {\n return createPushResult({ ok: true });\n }\n }\n\n partialEvent = processed.event;\n }\n\n // Prepare event (add timing, source info)\n const enrichedEvent = prepareEvent(partialEvent);\n\n // Create full event\n const fullEvent = createEvent(collector, enrichedEvent);\n\n // Push to destinations\n return await pushToDestinations(collector, fullEvent);\n },\n () => {\n return createPushResult({ ok: false });\n },\n )();\n },\n 'Push',\n collector.hooks,\n ) as Collector.PushFn;\n}\n","import type { Collector, Elb } from '@walkeros/core';\nimport type { HandleCommandFn } from './types/collector';\nimport { useHooks, tryCatchAsync } from '@walkeros/core';\nimport { createPushResult } from './destination';\n\n/**\n * Creates the command function for the collector.\n * Handles walker commands (config, consent, destination, etc.)\n *\n * @param collector - The walkerOS collector instance\n * @param handleCommand - Command handler function\n * @returns The command function\n */\nexport function createCommand<T extends Collector.Instance>(\n collector: T,\n handleCommand: HandleCommandFn<T>,\n): Collector.CommandFn {\n return useHooks(\n async (\n command: string,\n data?: unknown,\n options?: unknown,\n ): Promise<Elb.PushResult> => {\n return await tryCatchAsync(\n async (): Promise<Elb.PushResult> => {\n return await handleCommand(collector, command, data, options);\n },\n () => {\n return createPushResult({ ok: false });\n },\n )();\n },\n 'Command',\n collector.hooks,\n ) as Collector.CommandFn;\n}\n","import type { Collector, Source, WalkerOS, Elb } from '@walkeros/core';\n\n/**\n * Creates the default ELB source.\n * Routes between collector.push and collector.command based on input.\n * Provides backward-compatible flexible argument interface.\n *\n * @param collector - The walkerOS collector instance\n * @returns ELB source instance\n */\nexport function createElbSource(\n collector: Collector.Instance,\n): Source.Instance {\n return {\n type: 'elb',\n config: {},\n\n // The push function is the elb() interface users interact with\n push: async (\n eventOrCommand?: unknown,\n data?: unknown,\n options?: unknown,\n context?: unknown,\n nested?: WalkerOS.Entities,\n custom?: WalkerOS.Properties,\n ): Promise<Elb.PushResult> => {\n // Detect walker commands\n if (\n typeof eventOrCommand === 'string' &&\n eventOrCommand.startsWith('walker ')\n ) {\n const command = eventOrCommand.replace('walker ', '');\n return collector.command(command, data, options);\n }\n\n // Build event object\n let event: WalkerOS.DeepPartialEvent;\n\n if (typeof eventOrCommand === 'string') {\n // Convert string to object: elb('page view', { title: 'Home' })\n event = { name: eventOrCommand };\n if (data && typeof data === 'object' && !Array.isArray(data)) {\n event.data = data as WalkerOS.Properties;\n }\n } else if (eventOrCommand && typeof eventOrCommand === 'object') {\n // Use object directly: elb({ name: 'page view', data: {...} })\n event = eventOrCommand as WalkerOS.DeepPartialEvent;\n // Merge additional data if provided\n if (data && typeof data === 'object' && !Array.isArray(data)) {\n event.data = {\n ...(event.data || {}),\n ...(data as WalkerOS.Properties),\n };\n }\n } else {\n // Invalid input\n return { ok: false, successful: [], queued: [], failed: [] };\n }\n\n // Add optional properties if provided\n if (context && typeof context === 'object') {\n event.context = context as WalkerOS.OrderedProperties;\n }\n if (nested && Array.isArray(nested)) {\n event.nested = nested;\n }\n if (custom && typeof custom === 'object') {\n event.custom = custom as WalkerOS.Properties;\n }\n\n // Call collector.push with event object\n return collector.push(event);\n },\n };\n}\n","import type { Collector, Source, WalkerOS } from '@walkeros/core';\nimport { tryCatchAsync } from '@walkeros/core';\n\n/**\n * Initialize sources using the code/config/env pattern\n *\n * @param collector - The WalkerOS collector instance\n * @param sources - Map of source definitions with code/config/env\n * @returns Initialized sources\n */\nexport async function initSources(\n collector: Collector.Instance,\n sources: Source.InitSources = {},\n): Promise<Collector.Sources> {\n const result: Collector.Sources = {};\n\n for (const [sourceId, sourceDefinition] of Object.entries(sources)) {\n const { code, config = {}, env = {}, primary } = sourceDefinition;\n\n // Create wrapped push that auto-applies source mapping config\n const wrappedPush: Collector.PushFn = (\n event: WalkerOS.DeepPartialEvent,\n context: Collector.PushContext = {},\n ) => {\n // Pass source config as mapping in context\n return collector.push(event, {\n ...context,\n mapping: config,\n });\n };\n\n // Create initial logger scoped to sourceId (type will be added after init)\n const initialLogger = collector.logger.scope('source').scope(sourceId);\n\n const cleanEnv: Source.Env = {\n push: wrappedPush,\n command: collector.command,\n sources: collector.sources, // Provide access to all sources for chaining\n elb: collector.sources.elb.push, // ELB source is always available\n logger: initialLogger,\n ...env,\n };\n\n // Call source function with config and environment separately\n const sourceInstance = await tryCatchAsync(code)(config, cleanEnv);\n\n if (!sourceInstance) continue; // Skip failed source initialization\n\n // Update logger with actual source type: [type:sourceId] or [unknown:sourceId]\n const sourceType = sourceInstance.type || 'unknown';\n const sourceLogger = collector.logger.scope(sourceType).scope(sourceId);\n cleanEnv.logger = sourceLogger;\n\n // Store the primary flag in the source config for later access\n if (primary) {\n sourceInstance.config = { ...sourceInstance.config, primary };\n }\n\n result[sourceId] = sourceInstance;\n }\n\n return result;\n}\n","import type { Collector, Elb } from '@walkeros/core';\nimport type { StartFlow } from './types';\nimport { collector } from './collector';\nimport { createElbSource } from './elb';\nimport { initSources } from './source';\n\nexport async function startFlow<ElbPush extends Elb.Fn = Elb.Fn>(\n initConfig?: Collector.InitConfig,\n): Promise<StartFlow<ElbPush>> {\n initConfig = initConfig || {};\n const instance = await collector(initConfig);\n\n // Create and register ELB source first\n const elbSource = createElbSource(instance);\n instance.sources.elb = elbSource;\n\n // Now initialize other sources with ELB source available\n const additionalSources = await initSources(\n instance,\n initConfig.sources || {},\n );\n Object.assign(instance.sources, additionalSources);\n\n const { consent, user, globals, custom } = initConfig;\n\n if (consent) await instance.command('consent', consent);\n if (user) await instance.command('user', user);\n if (globals) Object.assign(instance.globals, globals);\n if (custom) Object.assign(instance.custom, custom);\n\n if (instance.config.run) await instance.command('run');\n\n // Determine the primary elb:\n // 1. Use explicitly marked primary source\n // 2. Use first non-elb source if any exist\n // 3. Fallback to ELB source\n let primaryElb: Elb.Fn = elbSource.push as Elb.Fn;\n\n const sources = Object.values(instance.sources).filter(\n (source) => source.type !== 'elb',\n );\n\n // First, check for explicitly marked primary source\n const markedPrimary = sources.find(\n (source) => (source.config as { primary?: boolean }).primary,\n );\n\n if (markedPrimary) {\n primaryElb = markedPrimary.push as Elb.Fn;\n } else if (sources.length > 0) {\n // Use first source as default\n primaryElb = sources[0].push as Elb.Fn;\n }\n\n return {\n collector: instance,\n elb: primaryElb as ElbPush,\n };\n}\n"],"mappings":"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","names":["assign","collector","event","batchState","collector","on","option","collector","assign","assign","assign","getId","isObject","collector","isObject","assign","getId","getGrantedConsent","processEventMapping","tryCatchAsync","useHooks","collector","useHooks","tryCatchAsync","processEventMapping","getGrantedConsent","useHooks","tryCatchAsync","collector","useHooks","tryCatchAsync","assign","collector","collector","tryCatchAsync","collector"]}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@walkeros/collector",
|
|
3
3
|
"description": "Unified platform-agnostic collector for walkerOS",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.5.1-next.0",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"module": "./dist/index.mjs",
|
|
7
7
|
"types": "./dist/index.d.ts",
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
"update": "npx npm-check-updates -u && npm update"
|
|
31
31
|
},
|
|
32
32
|
"dependencies": {
|
|
33
|
-
"@walkeros/core": "0.
|
|
33
|
+
"@walkeros/core": "0.5.1-next.0"
|
|
34
34
|
},
|
|
35
35
|
"devDependencies": {},
|
|
36
36
|
"repository": {
|