@walkeros/core 0.1.2 → 0.2.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/dist/index.d.mts CHANGED
@@ -4,24 +4,12 @@
4
4
  interface Config$4 {
5
5
  /** Whether to run collector automatically */
6
6
  run?: boolean;
7
- /** Initial consent state */
8
- consent?: Consent;
9
- /** Initial user data */
10
- user?: User;
11
7
  /** Version for event tagging */
12
8
  tagging: number;
13
- /** Initial global properties */
14
- globals?: Properties;
15
9
  /** Static global properties even on a new run */
16
10
  globalsStatic: Properties;
17
11
  /** Static session data even on a new run */
18
12
  sessionStatic: Partial<SessionData>;
19
- /** Source configurations */
20
- sources?: InitSources;
21
- /** Destination configurations */
22
- destinations?: InitDestinations;
23
- /** Initial custom properties */
24
- custom?: Properties;
25
13
  /** Enable verbose logging */
26
14
  verbose: boolean;
27
15
  /** Error handler */
@@ -29,7 +17,23 @@ interface Config$4 {
29
17
  /** Log handler */
30
18
  onLog?: Log;
31
19
  }
32
- type InitConfig$1 = Partial<Config$4>;
20
+ /**
21
+ * Initialization configuration that extends Config with initial state
22
+ */
23
+ interface InitConfig extends Partial<Config$4> {
24
+ /** Initial consent state */
25
+ consent?: Consent;
26
+ /** Initial user data */
27
+ user?: User;
28
+ /** Initial global properties */
29
+ globals?: Properties;
30
+ /** Source configurations */
31
+ sources?: InitSources;
32
+ /** Destination configurations */
33
+ destinations?: InitDestinations;
34
+ /** Initial custom properties */
35
+ custom?: Properties;
36
+ }
33
37
  interface SessionData extends Properties {
34
38
  isStart: boolean;
35
39
  storage: boolean;
@@ -71,10 +75,11 @@ interface Instance$2 {
71
75
  }
72
76
 
73
77
  type collector_CommandType = CommandType;
78
+ type collector_InitConfig = InitConfig;
74
79
  type collector_SessionData = SessionData;
75
80
  type collector_Sources = Sources;
76
81
  declare namespace collector {
77
- export type { collector_CommandType as CommandType, Config$4 as Config, Destinations$1 as Destinations, InitConfig$1 as InitConfig, Instance$2 as Instance, collector_SessionData as SessionData, collector_Sources as Sources };
82
+ export type { collector_CommandType as CommandType, Config$4 as Config, Destinations$1 as Destinations, collector_InitConfig as InitConfig, Instance$2 as Instance, collector_SessionData as SessionData, collector_Sources as Sources };
78
83
  }
79
84
 
80
85
  interface Contract$1 {
@@ -87,7 +92,7 @@ interface Globals {
87
92
  [name: string]: Global;
88
93
  }
89
94
  interface Contexts {
90
- [name: string]: Context$2;
95
+ [name: string]: Context$3;
91
96
  }
92
97
  interface Entities$1 {
93
98
  [name: string]: Entity$1;
@@ -97,7 +102,7 @@ interface Properties$2 {
97
102
  }
98
103
  interface Global extends Property$2 {
99
104
  }
100
- interface Context$2 extends Property$2 {
105
+ interface Context$3 extends Property$2 {
101
106
  }
102
107
  interface Entity$1 {
103
108
  data: Properties$2;
@@ -126,65 +131,106 @@ type data_Globals = Globals;
126
131
  type data_PropertyValues = PropertyValues;
127
132
  type data_Trigger = Trigger;
128
133
  declare namespace data {
129
- export type { data_Action as Action, data_Actions as Actions, Context$2 as Context, data_Contexts as Contexts, Contract$1 as Contract, Entities$1 as Entities, Entity$1 as Entity, data_Global as Global, data_Globals as Globals, Properties$2 as Properties, Property$2 as Property, PropertyType$1 as PropertyType, data_PropertyValues as PropertyValues, data_Trigger as Trigger };
134
+ export type { data_Action as Action, data_Actions as Actions, Context$3 as Context, data_Contexts as Contexts, Contract$1 as Contract, Entities$1 as Entities, Entity$1 as Entity, data_Global as Global, data_Globals as Globals, Properties$2 as Properties, Property$2 as Property, PropertyType$1 as PropertyType, data_PropertyValues as PropertyValues, data_Trigger as Trigger };
130
135
  }
131
136
 
132
- interface Instance$1<Settings = unknown, Mapping = unknown> {
133
- config: Config$3<Settings, Mapping>;
137
+ /**
138
+ * Base environment requirements interface for walkerOS destinations
139
+ *
140
+ * This defines the core interface that destinations can use to declare
141
+ * their runtime environment requirements. Platform-specific extensions
142
+ * should extend this interface.
143
+ */
144
+ interface BaseEnv$1 {
145
+ /**
146
+ * Generic global properties that destinations may require
147
+ * Platform-specific implementations can extend this interface
148
+ */
149
+ [key: string]: unknown;
150
+ }
151
+ /**
152
+ * Type bundle for destination generics.
153
+ * Groups Settings, Mapping, and Env into a single type parameter.
154
+ */
155
+ interface Types$2<S = unknown, M = unknown, E = BaseEnv$1> {
156
+ settings: S;
157
+ mapping: M;
158
+ env: E;
159
+ }
160
+ /**
161
+ * Generic constraint for Types - ensures T has required properties for indexed access
162
+ */
163
+ type TypesGeneric$1 = {
164
+ settings: any;
165
+ mapping: any;
166
+ env: any;
167
+ };
168
+ /**
169
+ * Type extractors for consistent usage with Types bundle
170
+ */
171
+ type Settings$1<T extends TypesGeneric$1 = Types$2> = T['settings'];
172
+ type Mapping$1<T extends TypesGeneric$1 = Types$2> = T['mapping'];
173
+ type Env$1<T extends TypesGeneric$1 = Types$2> = T['env'];
174
+ /**
175
+ * Inference helper: Extract Types from Instance
176
+ */
177
+ type TypesOf$1<I> = I extends Instance$1<infer T> ? T : never;
178
+ interface Instance$1<T extends TypesGeneric$1 = Types$2> {
179
+ config: Config$3<T>;
134
180
  queue?: Events;
135
181
  dlq?: DLQ;
136
182
  type?: string;
137
- env?: Environment$1;
138
- init?: InitFn<Settings, Mapping>;
139
- push: PushFn<Settings, Mapping>;
140
- pushBatch?: PushBatchFn<Settings, Mapping>;
141
- on?(event: Types, context?: unknown): void | Promise<void>;
183
+ env?: Env$1<T>;
184
+ init?: InitFn<T>;
185
+ push: PushFn<T>;
186
+ pushBatch?: PushBatchFn<T>;
187
+ on?: OnFn;
142
188
  }
143
- interface Config$3<Settings = unknown, Mapping = unknown> {
189
+ interface Config$3<T extends TypesGeneric$1 = Types$2> {
144
190
  consent?: Consent;
145
- settings?: Settings;
191
+ settings?: Settings$1<T>;
146
192
  data?: Value | Values;
147
- env?: Environment$1;
193
+ env?: Env$1<T>;
148
194
  id?: string;
149
195
  init?: boolean;
150
196
  loadScript?: boolean;
151
- mapping?: Rules<Rule<Mapping>>;
152
- policy?: Policy;
197
+ mapping?: Rules<Rule<Mapping$1<T>>>;
198
+ policy?: Policy$1;
153
199
  queue?: boolean;
154
200
  verbose?: boolean;
155
201
  onError?: Error;
156
202
  onLog?: Log;
157
203
  }
158
- type PartialConfig<Settings = unknown, Mapping = unknown> = Config$3<Partial<Settings> | Settings, Partial<Mapping> | Mapping>;
159
- interface Policy {
204
+ type PartialConfig$1<T extends TypesGeneric$1 = Types$2> = Config$3<Types$2<Partial<Settings$1<T>> | Settings$1<T>, Partial<Mapping$1<T>> | Mapping$1<T>, Env$1<T>>>;
205
+ interface Policy$1 {
160
206
  [key: string]: Value;
161
207
  }
162
- type Init$1<Settings = unknown, Mapping = unknown> = {
163
- code: Instance$1<Settings, Mapping>;
164
- config?: Partial<Config$3<Settings, Mapping>>;
165
- env?: Partial<Environment$1>;
208
+ type Init$1<T extends TypesGeneric$1 = Types$2> = {
209
+ code: Instance$1<T>;
210
+ config?: Partial<Config$3<T>>;
211
+ env?: Partial<Env$1<T>>;
166
212
  };
167
213
  interface InitDestinations {
168
- [key: string]: Init$1<any, any>;
214
+ [key: string]: Init$1<any>;
169
215
  }
170
216
  interface Destinations {
171
217
  [key: string]: Instance$1;
172
218
  }
173
- interface Context$1<Settings = unknown, Mapping = unknown> {
219
+ interface Context$2<T extends TypesGeneric$1 = Types$2> {
174
220
  collector: Instance$2;
175
- config: Config$3<Settings, Mapping>;
221
+ config: Config$3<T>;
176
222
  data?: Data$1;
177
- env: Environment$1;
223
+ env: Env$1<T>;
178
224
  }
179
- interface PushContext<Settings = unknown, Mapping = unknown> extends Context$1<Settings, Mapping> {
180
- mapping?: Rule<Mapping>;
225
+ interface PushContext<T extends TypesGeneric$1 = Types$2> extends Context$2<T> {
226
+ mapping?: Rule<Mapping$1<T>>;
181
227
  }
182
- interface PushBatchContext<Settings = unknown, Mapping = unknown> extends Context$1<Settings, Mapping> {
183
- mapping?: Rule<Mapping>;
228
+ interface PushBatchContext<T extends TypesGeneric$1 = Types$2> extends Context$2<T> {
229
+ mapping?: Rule<Mapping$1<T>>;
184
230
  }
185
- type InitFn<Settings, Mapping> = (context: Context$1<Settings, Mapping>) => PromiseOrValue<void | false | Config$3<Settings, Mapping>>;
186
- type PushFn<Settings, Mapping> = (event: Event, context: PushContext<Settings, Mapping>) => PromiseOrValue<void>;
187
- type PushBatchFn<Settings, Mapping> = (batch: Batch<Mapping>, context: PushBatchContext<Settings, Mapping>) => void;
231
+ type InitFn<T extends TypesGeneric$1 = Types$2> = (context: Context$2<T>) => PromiseOrValue<void | false | Config$3<T>>;
232
+ type PushFn<T extends TypesGeneric$1 = Types$2> = (event: Event, context: PushContext<T>) => PromiseOrValue<void>;
233
+ type PushBatchFn<T extends TypesGeneric$1 = Types$2> = (batch: Batch<Mapping$1<T>>, context: PushBatchContext<T>) => void;
188
234
  type PushEvent<Mapping = unknown> = {
189
235
  event: Event;
190
236
  mapping?: Rule<Mapping>;
@@ -201,7 +247,7 @@ type Ref = {
201
247
  id: string;
202
248
  destination: Instance$1;
203
249
  };
204
- type Push = {
250
+ type Push$1 = {
205
251
  queue?: Events;
206
252
  error?: unknown;
207
253
  };
@@ -211,38 +257,21 @@ type Result$1 = {
211
257
  queued: Array<Ref>;
212
258
  failed: Array<Ref>;
213
259
  };
214
- /**
215
- * Base environment requirements interface for walkerOS destinations
216
- *
217
- * This defines the core interface that destinations can use to declare
218
- * their runtime environment requirements. Platform-specific extensions
219
- * should extend this interface.
220
- */
221
- interface Environment$1 {
222
- /**
223
- * Generic global properties that destinations may require
224
- * Platform-specific implementations can extend this interface
225
- */
226
- [key: string]: unknown;
227
- }
228
260
 
229
261
  type destination_Batch<Mapping> = Batch<Mapping>;
230
262
  type destination_DLQ = DLQ;
231
263
  type destination_Destinations = Destinations;
232
264
  type destination_InitDestinations = InitDestinations;
233
- type destination_InitFn<Settings, Mapping> = InitFn<Settings, Mapping>;
234
- type destination_PartialConfig<Settings = unknown, Mapping = unknown> = PartialConfig<Settings, Mapping>;
235
- type destination_Policy = Policy;
236
- type destination_Push = Push;
237
- type destination_PushBatchContext<Settings = unknown, Mapping = unknown> = PushBatchContext<Settings, Mapping>;
238
- type destination_PushBatchFn<Settings, Mapping> = PushBatchFn<Settings, Mapping>;
239
- type destination_PushContext<Settings = unknown, Mapping = unknown> = PushContext<Settings, Mapping>;
265
+ type destination_InitFn<T extends TypesGeneric$1 = Types$2> = InitFn<T>;
266
+ type destination_PushBatchContext<T extends TypesGeneric$1 = Types$2> = PushBatchContext<T>;
267
+ type destination_PushBatchFn<T extends TypesGeneric$1 = Types$2> = PushBatchFn<T>;
268
+ type destination_PushContext<T extends TypesGeneric$1 = Types$2> = PushContext<T>;
240
269
  type destination_PushEvent<Mapping = unknown> = PushEvent<Mapping>;
241
270
  type destination_PushEvents<Mapping = unknown> = PushEvents<Mapping>;
242
- type destination_PushFn<Settings, Mapping> = PushFn<Settings, Mapping>;
271
+ type destination_PushFn<T extends TypesGeneric$1 = Types$2> = PushFn<T>;
243
272
  type destination_Ref = Ref;
244
273
  declare namespace destination {
245
- export type { destination_Batch as Batch, Config$3 as Config, Context$1 as Context, destination_DLQ as DLQ, Data$1 as Data, destination_Destinations as Destinations, Environment$1 as Environment, Init$1 as Init, destination_InitDestinations as InitDestinations, destination_InitFn as InitFn, Instance$1 as Instance, destination_PartialConfig as PartialConfig, destination_Policy as Policy, destination_Push as Push, destination_PushBatchContext as PushBatchContext, destination_PushBatchFn as PushBatchFn, destination_PushContext as PushContext, destination_PushEvent as PushEvent, destination_PushEvents as PushEvents, destination_PushFn as PushFn, destination_Ref as Ref, Result$1 as Result };
274
+ export type { BaseEnv$1 as BaseEnv, destination_Batch as Batch, Config$3 as Config, Context$2 as Context, destination_DLQ as DLQ, Data$1 as Data, destination_Destinations as Destinations, Env$1 as Env, Init$1 as Init, destination_InitDestinations as InitDestinations, destination_InitFn as InitFn, Instance$1 as Instance, Mapping$1 as Mapping, PartialConfig$1 as PartialConfig, Policy$1 as Policy, Push$1 as Push, destination_PushBatchContext as PushBatchContext, destination_PushBatchFn as PushBatchFn, destination_PushContext as PushContext, destination_PushEvent as PushEvent, destination_PushEvents as PushEvents, destination_PushFn as PushFn, destination_Ref as Ref, Result$1 as Result, Settings$1 as Settings, Types$2 as Types, TypesGeneric$1 as TypesGeneric, TypesOf$1 as TypesOf };
246
275
  }
247
276
 
248
277
  interface EventFn<R = Promise<PushResult>> {
@@ -255,9 +284,9 @@ interface Fn$1<R = Promise<PushResult>, Config = unknown> extends EventFn<R>, Wa
255
284
  interface WalkerCommands<R = Promise<PushResult>, Config = unknown> {
256
285
  (event: 'walker config', config: Partial<Config>): R;
257
286
  (event: 'walker consent', consent: Consent): R;
258
- <S, M>(event: 'walker destination', destination: Init$1<S, M> | Instance$1<S, M>, config?: Config$3<S, M>): R;
287
+ <T extends Types$2>(event: 'walker destination', destination: Init$1<T> | Instance$1<T>, config?: Config$3<T>): R;
259
288
  <K extends keyof Functions>(event: 'walker hook', name: K, hookFn: Functions[K]): R;
260
- (event: 'walker on', type: Types, rules: SingleOrArray<Options>): R;
289
+ (event: 'walker on', type: Types$1, rules: SingleOrArray<Options>): R;
261
290
  (event: 'walker user', user: User): R;
262
291
  (event: 'walker run', runState: {
263
292
  consent?: Consent;
@@ -392,7 +421,19 @@ type Config$1 = {
392
421
  run?: Array<RunConfig>;
393
422
  session?: Array<SessionConfig>;
394
423
  };
395
- type Types = keyof Config$1;
424
+ type Types$1 = keyof Config$1;
425
+ interface EventContextMap {
426
+ consent: Consent;
427
+ session: SessionData;
428
+ ready: undefined;
429
+ run: undefined;
430
+ }
431
+ type EventContext<T extends Types$1> = EventContextMap[T];
432
+ type AnyEventContext = EventContextMap[keyof EventContextMap];
433
+ interface Context$1 {
434
+ consent?: Consent;
435
+ session?: unknown;
436
+ }
396
437
  type Options = ConsentConfig | ReadyConfig | RunConfig | SessionConfig;
397
438
  interface ConsentConfig {
398
439
  [key: string]: ConsentFn;
@@ -411,10 +452,17 @@ interface OnConfig {
411
452
  session?: SessionConfig[];
412
453
  [key: string]: ConsentConfig[] | ReadyConfig[] | RunConfig[] | SessionConfig[] | undefined;
413
454
  }
455
+ type OnFn = <T extends Types$1>(event: T, context: EventContextMap[T]) => PromiseOrValue<void>;
456
+ type OnFnRuntime = (event: Types$1, context: AnyEventContext) => PromiseOrValue<void>;
414
457
 
458
+ type on_AnyEventContext = AnyEventContext;
415
459
  type on_ConsentConfig = ConsentConfig;
416
460
  type on_ConsentFn = ConsentFn;
461
+ type on_EventContext<T extends Types$1> = EventContext<T>;
462
+ type on_EventContextMap = EventContextMap;
417
463
  type on_OnConfig = OnConfig;
464
+ type on_OnFn = OnFn;
465
+ type on_OnFnRuntime = OnFnRuntime;
418
466
  type on_Options = Options;
419
467
  type on_ReadyConfig = ReadyConfig;
420
468
  type on_ReadyFn = ReadyFn;
@@ -422,9 +470,8 @@ type on_RunConfig = RunConfig;
422
470
  type on_RunFn = RunFn;
423
471
  type on_SessionConfig = SessionConfig;
424
472
  type on_SessionFn = SessionFn;
425
- type on_Types = Types;
426
473
  declare namespace on {
427
- export type { Config$1 as Config, on_ConsentConfig as ConsentConfig, on_ConsentFn as ConsentFn, on_OnConfig as OnConfig, on_Options as Options, on_ReadyConfig as ReadyConfig, on_ReadyFn as ReadyFn, on_RunConfig as RunConfig, on_RunFn as RunFn, on_SessionConfig as SessionConfig, on_SessionFn as SessionFn, on_Types as Types };
474
+ export type { on_AnyEventContext as AnyEventContext, Config$1 as Config, on_ConsentConfig as ConsentConfig, on_ConsentFn as ConsentFn, Context$1 as Context, on_EventContext as EventContext, on_EventContextMap as EventContextMap, on_OnConfig as OnConfig, on_OnFn as OnFn, on_OnFnRuntime as OnFnRuntime, on_Options as Options, on_ReadyConfig as ReadyConfig, on_ReadyFn as ReadyFn, on_RunConfig as RunConfig, on_RunFn as RunFn, on_SessionConfig as SessionConfig, on_SessionFn as SessionFn, Types$1 as Types };
428
475
  }
429
476
 
430
477
  interface Context {
@@ -473,55 +520,76 @@ declare namespace schema {
473
520
  export type { schema_Contract as Contract, schema_Contracts as Contracts, Properties$1 as Properties, Property$1 as Property };
474
521
  }
475
522
 
476
- interface Config {
477
- id?: string;
478
- disabled?: boolean;
479
- settings: AnyObject;
480
- onError?: AnyFunction;
481
- }
482
- type InitConfig = Partial<Config>;
483
523
  /**
484
- * Environment interface for dependency injection into sources.
524
+ * Base Env interface for dependency injection into sources.
485
525
  *
486
526
  * Sources receive all their dependencies through this environment object,
487
527
  * making them platform-agnostic and easily testable.
488
528
  */
489
- interface Environment {
529
+ interface BaseEnv {
490
530
  elb: Fn$1;
491
531
  [key: string]: unknown;
492
532
  }
493
533
  /**
494
- * Source instance returned by Source.Init function.
534
+ * Type bundle for source generics.
535
+ * Groups Settings, Mapping, Push, and Env into a single type parameter.
495
536
  *
496
- * Sources are stateless and contain no collector references.
497
- * All communication with collector happens via env.elb function.
537
+ * @template S - Settings configuration type
538
+ * @template M - Mapping configuration type
539
+ * @template P - Push function signature (flexible to support HTTP handlers, etc.)
540
+ * @template E - Environment dependencies type
498
541
  */
499
- interface Instance<T extends Config = Config> {
500
- type: string;
501
- config: T;
502
- push: Fn$1;
503
- destroy?(): void | Promise<void>;
504
- on?(event: Types, context?: unknown): void | Promise<void>;
542
+ interface Types<S = unknown, M = unknown, P = Fn$1, E = BaseEnv> {
543
+ settings: S;
544
+ mapping: M;
545
+ push: P;
546
+ env: E;
505
547
  }
506
548
  /**
507
- * Source initialization function signature.
508
- *
509
- * Sources are functions that receive configuration and environment dependencies
510
- * and return a stateless instance.
511
- *
512
- * @param config - Source configuration (settings, type, etc.)
513
- * @param env - Environment with elb function and platform APIs (defaults to {})
514
- * @returns Source instance or promise of instance
549
+ * Generic constraint for Types - ensures T has required properties for indexed access
550
+ */
551
+ type TypesGeneric = {
552
+ settings: any;
553
+ mapping: any;
554
+ push: any;
555
+ env: any;
556
+ };
557
+ /**
558
+ * Type extractors for consistent usage with Types bundle
515
559
  */
516
- type Init<T extends Config = Config> = (config: Partial<T>, env?: Environment) => Instance<T> | Promise<Instance<T>>;
560
+ type Settings<T extends TypesGeneric = Types> = T['settings'];
561
+ type Mapping<T extends TypesGeneric = Types> = T['mapping'];
562
+ type Push<T extends TypesGeneric = Types> = T['push'];
563
+ type Env<T extends TypesGeneric = Types> = T['env'];
517
564
  /**
518
- * Source configuration interface for collector initialization.
519
- * Similar to destinations, this defines the structure for source definitions.
565
+ * Inference helper: Extract Types from Instance
520
566
  */
521
- type InitSource<T extends Config = Config> = {
567
+ type TypesOf<I> = I extends Instance<infer T> ? T : never;
568
+ interface Config<T extends TypesGeneric = Types> {
569
+ settings?: Settings<T>;
570
+ env?: Env<T>;
571
+ id?: string;
572
+ onError?: Error;
573
+ disabled?: boolean;
574
+ primary?: boolean;
575
+ }
576
+ type PartialConfig<T extends TypesGeneric = Types> = Config<Types<Partial<Settings<T>> | Settings<T>, Partial<Mapping<T>> | Mapping<T>, Push<T>, Env<T>>>;
577
+ interface Policy {
578
+ [key: string]: Value;
579
+ }
580
+ interface Instance<T extends TypesGeneric = Types> {
581
+ type: string;
582
+ config: Config<T>;
583
+ push: Push<T>;
584
+ destroy?(): void | Promise<void>;
585
+ on?(event: Types$1, context?: unknown): void | Promise<void>;
586
+ }
587
+ type Init<T extends TypesGeneric = Types> = (config: Partial<Config<T>>, env: Env<T>) => Instance<T> | Promise<Instance<T>>;
588
+ type InitSource<T extends TypesGeneric = Types> = {
522
589
  code: Init<T>;
523
- config?: T;
524
- env?: Partial<Environment>;
590
+ config?: Partial<Config<T>>;
591
+ env?: Partial<Env<T>>;
592
+ primary?: boolean;
525
593
  };
526
594
  /**
527
595
  * Sources configuration for collector.
@@ -531,15 +599,23 @@ interface InitSources {
531
599
  [sourceId: string]: InitSource<any>;
532
600
  }
533
601
 
534
- type source_Config = Config;
535
- type source_Environment = Environment;
536
- type source_Init<T extends Config = Config> = Init<T>;
537
- type source_InitConfig = InitConfig;
538
- type source_InitSource<T extends Config = Config> = InitSource<T>;
602
+ type source_BaseEnv = BaseEnv;
603
+ type source_Config<T extends TypesGeneric = Types> = Config<T>;
604
+ type source_Env<T extends TypesGeneric = Types> = Env<T>;
605
+ type source_Init<T extends TypesGeneric = Types> = Init<T>;
606
+ type source_InitSource<T extends TypesGeneric = Types> = InitSource<T>;
539
607
  type source_InitSources = InitSources;
540
- type source_Instance<T extends Config = Config> = Instance<T>;
608
+ type source_Instance<T extends TypesGeneric = Types> = Instance<T>;
609
+ type source_Mapping<T extends TypesGeneric = Types> = Mapping<T>;
610
+ type source_PartialConfig<T extends TypesGeneric = Types> = PartialConfig<T>;
611
+ type source_Policy = Policy;
612
+ type source_Push<T extends TypesGeneric = Types> = Push<T>;
613
+ type source_Settings<T extends TypesGeneric = Types> = Settings<T>;
614
+ type source_Types<S = unknown, M = unknown, P = Fn$1, E = BaseEnv> = Types<S, M, P, E>;
615
+ type source_TypesGeneric = TypesGeneric;
616
+ type source_TypesOf<I> = TypesOf<I>;
541
617
  declare namespace source {
542
- export type { source_Config as Config, source_Environment as Environment, source_Init as Init, source_InitConfig as InitConfig, source_InitSource as InitSource, source_InitSources as InitSources, source_Instance as Instance };
618
+ export type { source_BaseEnv as BaseEnv, source_Config as Config, source_Env as Env, source_Init as Init, source_InitSource as InitSource, source_InitSources as InitSources, source_Instance as Instance, source_Mapping as Mapping, source_PartialConfig as PartialConfig, source_Policy as Policy, source_Push as Push, source_Settings as Settings, source_Types as Types, source_TypesGeneric as TypesGeneric, source_TypesOf as TypesOf };
543
619
  }
544
620
 
545
621
  type AnyObject<T = unknown> = Record<string, T>;
@@ -758,26 +834,19 @@ declare function getGrantedConsent(required: Consent | undefined, state?: Consen
758
834
  * This utility enables elegant destination configuration while avoiding config side-effects
759
835
  * that could occur when reusing destination objects across multiple collector instances.
760
836
  *
761
- * @template Settings - The destination settings type
762
- * @template Mapping - The destination mapping type
763
837
  * @param baseDestination - The base destination to extend
764
838
  * @param config - Additional configuration to merge with the base destination's config
765
839
  * @returns A new destination instance with merged configuration
766
840
  *
767
841
  * @example
768
842
  * ```typescript
769
- * // Instead of:
770
- * elb('walker destination', destinationGtag, {
771
- * settings: { ga4: { measurementId: 'G-123' } }
772
- * });
773
- *
774
- * // You can use:
843
+ * // Types are inferred automatically from destinationGtag
775
844
  * elb('walker destination', createDestination(destinationGtag, {
776
845
  * settings: { ga4: { measurementId: 'G-123' } }
777
846
  * }));
778
847
  * ```
779
848
  */
780
- declare function createDestination<Settings = unknown, Mapping = unknown>(baseDestination: Instance$1<Settings, Mapping>, config: Partial<Config$3<Settings, Mapping>>): Instance$1<Settings, Mapping>;
849
+ declare function createDestination<I extends Instance$1>(baseDestination: I, config: Partial<Config$3<TypesOf$1<I>>>): I;
781
850
 
782
851
  /**
783
852
  * Creates a complete event with default values.
@@ -929,6 +998,72 @@ declare function getMappingEvent(event: PartialEvent, mapping?: Rules): Promise<
929
998
  */
930
999
  declare function getMappingValue(value: DeepPartialEvent | unknown | undefined, data?: Data, options?: Options$1): Promise<Property | undefined>;
931
1000
 
1001
+ /**
1002
+ * Environment mocking utilities for walkerOS destinations
1003
+ *
1004
+ * Provides standardized tools for intercepting function calls in environment objects,
1005
+ * enabling consistent testing patterns across all destinations.
1006
+ */
1007
+ type InterceptorFn = (path: string[], args: unknown[], original?: Function) => unknown;
1008
+ /**
1009
+ * Creates a proxied environment that intercepts function calls
1010
+ *
1011
+ * Uses Proxy to wrap environment objects and capture all function calls,
1012
+ * allowing for call recording, mocking, or simulation.
1013
+ *
1014
+ * @param env - The environment object to wrap
1015
+ * @param interceptor - Function called for each intercepted call
1016
+ * @returns Proxied environment with interceptor applied
1017
+ *
1018
+ * @example
1019
+ * ```typescript
1020
+ * const calls: Array<{ path: string[]; args: unknown[] }> = [];
1021
+ *
1022
+ * const testEnv = mockEnv(env.push, (path, args) => {
1023
+ * calls.push({ path, args });
1024
+ * });
1025
+ *
1026
+ * // Use testEnv with destination
1027
+ * await destination.push(event, { env: testEnv });
1028
+ *
1029
+ * // Analyze captured calls
1030
+ * expect(calls).toContainEqual({
1031
+ * path: ['window', 'gtag'],
1032
+ * args: ['event', 'purchase', { value: 99.99 }]
1033
+ * });
1034
+ * ```
1035
+ */
1036
+ declare function mockEnv<T extends object>(env: T, interceptor: InterceptorFn): T;
1037
+ /**
1038
+ * Traverses environment object and replaces values using a replacer function
1039
+ *
1040
+ * Alternative to mockEnv for environments where Proxy is not suitable.
1041
+ * Performs deep traversal and allows value transformation at each level.
1042
+ *
1043
+ * @param env - The environment object to traverse
1044
+ * @param replacer - Function to transform values during traversal
1045
+ * @returns New environment object with transformed values
1046
+ *
1047
+ * @example
1048
+ * ```typescript
1049
+ * const recordedCalls: APICall[] = [];
1050
+ *
1051
+ * const recordingEnv = traverseEnv(originalEnv, (value, path) => {
1052
+ * if (typeof value === 'function') {
1053
+ * return (...args: unknown[]) => {
1054
+ * recordedCalls.push({
1055
+ * path: path.join('.'),
1056
+ * args: structuredClone(args)
1057
+ * });
1058
+ * return value(...args);
1059
+ * };
1060
+ * }
1061
+ * return value;
1062
+ * });
1063
+ * ```
1064
+ */
1065
+ declare function traverseEnv<T extends object>(env: T, replacer: (value: unknown, path: string[]) => unknown): T;
1066
+
932
1067
  /**
933
1068
  * Logs a message to the console if verbose logging is enabled.
934
1069
  *
@@ -1109,4 +1244,4 @@ declare function validateEvent(obj: unknown, customContracts?: Contracts): Event
1109
1244
  */
1110
1245
  declare function validateProperty(obj: AnyObject, key: string, value: unknown, schema: Property$1): Property | never;
1111
1246
 
1112
- export { collector as Collector, Const, data as Data, destination as Destination, elb as Elb, flow as Flow, handler as Handler, hooks as Hooks, mapping as Mapping, type MarketingParameters, on as On, request as Request, schema as Schema, type SendDataValue, type SendHeaders, type SendResponse, source as Source, type StorageType, walkeros as WalkerOS, anonymizeIP, assign, castToProperty, castValue, clone, createDestination, createEvent, debounce, filterValues, getBrowser, getBrowserVersion, getByPath, getDeviceType, getEvent, getGrantedConsent, getHeaders, getId, getMappingEvent, getMappingValue, getMarketingParameters, getOS, getOSVersion, isArguments, isArray, isBoolean, isCommand, isDefined, isElementOrDocument, isFunction, isNumber, isObject, isPropertyType, isSameType, isString, onLog, parseUserAgent, requestToData, requestToParameter, setByPath, throttle, throwError, transformData, trim, tryCatch, tryCatchAsync, useHooks, validateEvent, validateProperty };
1247
+ export { collector as Collector, Const, data as Data, destination as Destination, elb as Elb, flow as Flow, handler as Handler, hooks as Hooks, mapping as Mapping, type MarketingParameters, on as On, request as Request, schema as Schema, type SendDataValue, type SendHeaders, type SendResponse, source as Source, type StorageType, walkeros as WalkerOS, anonymizeIP, assign, castToProperty, castValue, clone, createDestination, createEvent, debounce, filterValues, getBrowser, getBrowserVersion, getByPath, getDeviceType, getEvent, getGrantedConsent, getHeaders, getId, getMappingEvent, getMappingValue, getMarketingParameters, getOS, getOSVersion, isArguments, isArray, isBoolean, isCommand, isDefined, isElementOrDocument, isFunction, isNumber, isObject, isPropertyType, isSameType, isString, mockEnv, onLog, parseUserAgent, requestToData, requestToParameter, setByPath, throttle, throwError, transformData, traverseEnv, trim, tryCatch, tryCatchAsync, useHooks, validateEvent, validateProperty };