@walkeros/core 4.0.0 → 4.0.1-next-1778068549946

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.ts CHANGED
@@ -347,34 +347,36 @@ declare namespace context {
347
347
  }
348
348
 
349
349
  /**
350
- * Context provided to the destroy() lifecycle method.
351
- *
352
- * A subset of the init context — config, env, logger, and id.
353
- * Does NOT include collector or event data. Destroy should only
354
- * clean up resources, not interact with the event pipeline.
350
+ * Shared context for one-shot lifecycle hooks (setup, destroy).
351
+ * No event pipeline machinery — just config, env, logger, and id.
355
352
  */
356
- interface DestroyContext<C = unknown, E = unknown> {
357
- /** Step instance ID. */
353
+ interface LifecycleContext<C = unknown, E = unknown> {
358
354
  id: string;
359
- /** Step configuration (contains settings with SDK clients, etc.). */
360
355
  config: C;
361
- /** Runtime environment/dependencies (DB clients, auth clients, etc.). */
362
356
  env: E;
363
- /** Scoped logger for this step instance. */
364
357
  logger: Instance$4;
365
358
  }
359
+ /**
360
+ * Setup function signature. Called once via `walker setup <kind>.<name>`.
361
+ * Packages own idempotency and error semantics. Return value (if any) is
362
+ * JSON-stringified to stdout by the CLI for scripting use.
363
+ */
364
+ type SetupFn<C = unknown, E = unknown> = (context: LifecycleContext<C, E>) => Promise<unknown>;
366
365
  /**
367
366
  * Destroy function signature for step lifecycle cleanup.
368
- *
369
- * Implementations should be idempotent — calling destroy() twice must not throw.
370
- * Used for closing connections, clearing timers, releasing SDK clients.
371
367
  */
372
- type DestroyFn<C = unknown, E = unknown> = (context: DestroyContext<C, E>) => PromiseOrValue<void>;
368
+ type DestroyFn<C = unknown, E = unknown> = (context: LifecycleContext<C, E>) => PromiseOrValue<void>;
369
+ /**
370
+ * @deprecated Use `LifecycleContext` instead. Kept as alias for one minor cycle.
371
+ */
372
+ type DestroyContext<C = unknown, E = unknown> = LifecycleContext<C, E>;
373
373
 
374
374
  type lifecycle_DestroyContext<C = unknown, E = unknown> = DestroyContext<C, E>;
375
375
  type lifecycle_DestroyFn<C = unknown, E = unknown> = DestroyFn<C, E>;
376
+ type lifecycle_LifecycleContext<C = unknown, E = unknown> = LifecycleContext<C, E>;
377
+ type lifecycle_SetupFn<C = unknown, E = unknown> = SetupFn<C, E>;
376
378
  declare namespace lifecycle {
377
- export type { lifecycle_DestroyContext as DestroyContext, lifecycle_DestroyFn as DestroyFn };
379
+ export type { lifecycle_DestroyContext as DestroyContext, lifecycle_DestroyFn as DestroyFn, lifecycle_LifecycleContext as LifecycleContext, lifecycle_SetupFn as SetupFn };
378
380
  }
379
381
 
380
382
  /**
@@ -393,13 +395,14 @@ interface BaseEnv$3 {
393
395
  }
394
396
  /**
395
397
  * Type bundle for destination generics.
396
- * Groups Settings, InitSettings, Mapping, and Env into a single type parameter.
398
+ * Groups Settings, InitSettings, Mapping, Env, and Setup into a single type parameter.
397
399
  */
398
- interface Types$4<S = unknown, M = unknown, E = BaseEnv$3, I = S> {
400
+ interface Types$4<S = unknown, M = unknown, E = BaseEnv$3, I = S, U = unknown> {
399
401
  settings: S;
400
402
  initSettings: I;
401
403
  mapping: M;
402
404
  env: E;
405
+ setup: U;
403
406
  }
404
407
  /**
405
408
  * Generic constraint for Types - ensures T has required properties for indexed access
@@ -409,6 +412,7 @@ type TypesGeneric$3 = {
409
412
  initSettings: any;
410
413
  mapping: any;
411
414
  env: any;
415
+ setup: any;
412
416
  };
413
417
  /**
414
418
  * Type extractors for consistent usage with Types bundle
@@ -417,6 +421,7 @@ type Settings$3<T extends TypesGeneric$3 = Types$4> = T['settings'];
417
421
  type InitSettings$3<T extends TypesGeneric$3 = Types$4> = T['initSettings'];
418
422
  type Mapping$1<T extends TypesGeneric$3 = Types$4> = T['mapping'];
419
423
  type Env$3<T extends TypesGeneric$3 = Types$4> = T['env'];
424
+ type SetupOptions$2<T extends TypesGeneric$3 = Types$4> = T['setup'];
420
425
  /**
421
426
  * Inference helper: Extract Types from Instance
422
427
  */
@@ -432,6 +437,7 @@ interface Instance$5<T extends TypesGeneric$3 = Types$4> {
432
437
  batches?: BatchRegistry<Mapping$1<T>>;
433
438
  type?: string;
434
439
  env?: Env$3<T>;
440
+ setup?: SetupFn<Config$5<T>, Env$3<T>>;
435
441
  init?: InitFn$2<T>;
436
442
  push: PushFn<T>;
437
443
  pushBatch?: PushBatchFn<T>;
@@ -465,6 +471,11 @@ interface Config$5<T extends TypesGeneric$3 = Types$4> {
465
471
  queue?: boolean;
466
472
  /** Defer destination initialization until these collector events fire (e.g., `['consent']`). */
467
473
  require?: string[];
474
+ /**
475
+ * Provisioning options for `walker setup`. `boolean | object`.
476
+ * Triggered only by explicit CLI invocation; never automatic.
477
+ */
478
+ setup?: boolean | SetupOptions$2<T>;
468
479
  /** Transformer chain to run after collector processing but before this destination. */
469
480
  before?: Next;
470
481
  /** Transformer chain to run after destination push completes. Push response available at ingest._response. */
@@ -476,7 +487,7 @@ interface Config$5<T extends TypesGeneric$3 = Types$4> {
476
487
  /** Return this value instead of calling push(). Uses !== undefined check to support falsy values. */
477
488
  mock?: unknown;
478
489
  }
479
- type PartialConfig$1<T extends TypesGeneric$3 = Types$4> = Config$5<Types$4<Partial<Settings$3<T>> | Settings$3<T>, Partial<Mapping$1<T>> | Mapping$1<T>, Env$3<T>>>;
490
+ type PartialConfig$2<T extends TypesGeneric$3 = Types$4> = Config$5<Types$4<Partial<Settings$3<T>> | Settings$3<T>, Partial<Mapping$1<T>> | Mapping$1<T>, Env$3<T>, InitSettings$3<T>, SetupOptions$2<T>>>;
480
491
  interface Policy {
481
492
  [key: string]: Value;
482
493
  }
@@ -558,7 +569,7 @@ type destination_PushEvents<Mapping = unknown> = PushEvents<Mapping>;
558
569
  type destination_PushFn<T extends TypesGeneric$3 = Types$4> = PushFn<T>;
559
570
  type destination_Ref = Ref;
560
571
  declare namespace destination {
561
- export type { BaseEnv$3 as BaseEnv, destination_Batch as Batch, destination_BatchRegistry as BatchRegistry, Code$1 as Code, Config$5 as Config, Context$5 as Context, destination_DLQ as DLQ, destination_Data as Data, destination_Destinations as Destinations, Env$3 as Env, Init$3 as Init, destination_InitDestinations as InitDestinations, InitFn$2 as InitFn, InitSettings$3 as InitSettings, Instance$5 as Instance, Mapping$1 as Mapping, PartialConfig$1 as PartialConfig, destination_Policy 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, Settings$3 as Settings, Types$4 as Types, TypesGeneric$3 as TypesGeneric, TypesOf$3 as TypesOf };
572
+ export type { BaseEnv$3 as BaseEnv, destination_Batch as Batch, destination_BatchRegistry as BatchRegistry, Code$1 as Code, Config$5 as Config, Context$5 as Context, destination_DLQ as DLQ, destination_Data as Data, destination_Destinations as Destinations, Env$3 as Env, Init$3 as Init, destination_InitDestinations as InitDestinations, InitFn$2 as InitFn, InitSettings$3 as InitSettings, Instance$5 as Instance, Mapping$1 as Mapping, PartialConfig$2 as PartialConfig, destination_Policy 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, Settings$3 as Settings, SetupOptions$2 as SetupOptions, Types$4 as Types, TypesGeneric$3 as TypesGeneric, TypesOf$3 as TypesOf };
562
573
  }
563
574
 
564
575
  interface EventFn<R = Promise<PushResult>> {
@@ -608,7 +619,7 @@ declare namespace elb {
608
619
  * Represents one deployment target (e.g., web_prod, server_stage).
609
620
  * Platform is determined by `config.platform` ('web' | 'server').
610
621
  *
611
- * Variables/definitions cascade: source/destination > flow > root config.
622
+ * Variables cascade: source/destination > flow > root config.
612
623
  */
613
624
  interface Flow {
614
625
  /** Per-flow configuration: platform, url, settings, bundle. */
@@ -672,11 +683,6 @@ interface Flow {
672
683
  * Override root variables; overridden by source/destination variables.
673
684
  */
674
685
  variables?: Flow.Variables;
675
- /**
676
- * Flow-level definitions.
677
- * Extend root definitions; overridden by source/destination definitions.
678
- */
679
- definitions?: Flow.Definitions;
680
686
  }
681
687
  declare namespace Flow {
682
688
  /**
@@ -721,11 +727,6 @@ declare namespace Flow {
721
727
  * Syntax: $var.name
722
728
  */
723
729
  variables?: Variables;
724
- /**
725
- * Reusable configuration definitions.
726
- * Syntax: $def.name
727
- */
728
- definitions?: Definitions;
729
730
  /**
730
731
  * Data contract definition.
731
732
  * Entity → action keyed JSON Schema with additive inheritance.
@@ -770,18 +771,11 @@ declare namespace Flow {
770
771
  */
771
772
  bundle?: Bundle;
772
773
  }
773
- /** Primitive value types for variables. */
774
- type Primitive = string | number | boolean;
775
774
  /**
776
- * Variables record type for interpolation.
777
- * Used at root, flow, source, destination, transformer, and store levels.
775
+ * Reusable values referenced via `$var.name` (with optional deep paths).
776
+ * Whole-string references preserve native type; inline interpolation requires scalars.
778
777
  */
779
- type Variables = Record<string, Primitive>;
780
- /**
781
- * Definitions record type for reusable configurations.
782
- * Used at root, flow, source, destination, transformer, and store levels.
783
- */
784
- type Definitions = Record<string, unknown>;
778
+ type Variables = Record<string, unknown>;
785
779
  /**
786
780
  * Free-form settings bag inside `Flow.Config.settings`.
787
781
  * Mirrors the package settings convention (arbitrary keys).
@@ -907,11 +901,6 @@ declare namespace Flow {
907
901
  * Overrides flow and root variables.
908
902
  */
909
903
  variables?: Variables;
910
- /**
911
- * Source-level definitions (highest priority in cascade).
912
- * Overrides flow and root definitions.
913
- */
914
- definitions?: Definitions;
915
904
  /**
916
905
  * Named examples for testing and documentation.
917
906
  * Stripped during flow resolution (not included in bundles).
@@ -959,8 +948,6 @@ declare namespace Flow {
959
948
  cache?: Cache;
960
949
  /** Destination-level variables (highest priority in cascade). */
961
950
  variables?: Variables;
962
- /** Destination-level definitions (highest priority in cascade). */
963
- definitions?: Definitions;
964
951
  /**
965
952
  * Named examples for testing and documentation.
966
953
  * Stripped during flow resolution.
@@ -1005,8 +992,6 @@ declare namespace Flow {
1005
992
  cache?: Cache;
1006
993
  /** Transformer-level variables (highest priority in cascade). */
1007
994
  variables?: Variables;
1008
- /** Transformer-level definitions (highest priority in cascade). */
1009
- definitions?: Definitions;
1010
995
  /**
1011
996
  * Named examples for testing and documentation.
1012
997
  * Stripped during flow resolution.
@@ -1031,8 +1016,6 @@ declare namespace Flow {
1031
1016
  env?: unknown;
1032
1017
  /** Store-level variables (highest priority in cascade). */
1033
1018
  variables?: Variables;
1034
- /** Store-level definitions (highest priority in cascade). */
1035
- definitions?: Definitions;
1036
1019
  /**
1037
1020
  * Named examples for testing and documentation.
1038
1021
  * Stripped during flow resolution.
@@ -1595,20 +1578,22 @@ interface BaseEnv$1 {
1595
1578
  }
1596
1579
  /**
1597
1580
  * Type bundle for source generics.
1598
- * Groups Settings, Mapping, Push, Env, and InitSettings into a single type parameter.
1581
+ * Groups Settings, Mapping, Push, Env, InitSettings, and Setup into a single type parameter.
1599
1582
  *
1600
1583
  * @template S - Settings configuration type
1601
1584
  * @template M - Mapping configuration type
1602
1585
  * @template P - Push function signature (flexible to support HTTP handlers, etc.)
1603
1586
  * @template E - Environment dependencies type
1604
1587
  * @template I - InitSettings configuration type (user input)
1588
+ * @template U - Setup options type (provisioning options for `walker setup`)
1605
1589
  */
1606
- interface Types$1<S = unknown, M = unknown, P = Fn$3, E = BaseEnv$1, I = S> {
1590
+ interface Types$1<S = unknown, M = unknown, P = Fn$3, E = BaseEnv$1, I = S, U = unknown> {
1607
1591
  settings: S;
1608
1592
  initSettings: I;
1609
1593
  mapping: M;
1610
1594
  push: P;
1611
1595
  env: E;
1596
+ setup: U;
1612
1597
  }
1613
1598
  /**
1614
1599
  * Generic constraint for Types - ensures T has required properties for indexed access
@@ -1619,6 +1604,7 @@ type TypesGeneric$1 = {
1619
1604
  mapping: any;
1620
1605
  push: any;
1621
1606
  env: any;
1607
+ setup: any;
1622
1608
  };
1623
1609
  /**
1624
1610
  * Type extractors for consistent usage with Types bundle
@@ -1628,6 +1614,7 @@ type InitSettings$1<T extends TypesGeneric$1 = Types$1> = T['initSettings'];
1628
1614
  type Mapping<T extends TypesGeneric$1 = Types$1> = T['mapping'];
1629
1615
  type Push<T extends TypesGeneric$1 = Types$1> = T['push'];
1630
1616
  type Env$1<T extends TypesGeneric$1 = Types$1> = T['env'];
1617
+ type SetupOptions$1<T extends TypesGeneric$1 = Types$1> = T['setup'];
1631
1618
  /**
1632
1619
  * Inference helper: Extract Types from Instance
1633
1620
  */
@@ -1645,6 +1632,11 @@ interface Config$1<T extends TypesGeneric$1 = Types$1> extends Config$7<Mapping<
1645
1632
  primary?: boolean;
1646
1633
  /** Defer source initialization until these collector events fire (e.g., `['consent']`). */
1647
1634
  require?: string[];
1635
+ /**
1636
+ * Provisioning options for `walker setup`. `boolean | object`.
1637
+ * Triggered only by explicit CLI invocation; never automatic.
1638
+ */
1639
+ setup?: boolean | SetupOptions$1<T>;
1648
1640
  /**
1649
1641
  * Ingest metadata extraction mapping.
1650
1642
  * Extracts values from raw request objects (Express req, Lambda event, etc.)
@@ -1661,10 +1653,11 @@ interface Config$1<T extends TypesGeneric$1 = Types$1> extends Config$7<Mapping<
1661
1653
  /** Completely skip this source — no init, no event capture. */
1662
1654
  disabled?: boolean;
1663
1655
  }
1664
- type PartialConfig<T extends TypesGeneric$1 = Types$1> = Config$1<Types$1<Partial<Settings$1<T>> | Settings$1<T>, Partial<Mapping<T>> | Mapping<T>, Push<T>, Env$1<T>>>;
1656
+ type PartialConfig$1<T extends TypesGeneric$1 = Types$1> = Config$1<Types$1<Partial<Settings$1<T>> | Settings$1<T>, Partial<Mapping<T>> | Mapping<T>, Push<T>, Env$1<T>, InitSettings$1<T>, SetupOptions$1<T>>>;
1665
1657
  interface Instance$2<T extends TypesGeneric$1 = Types$1> {
1666
1658
  type: string;
1667
1659
  config: Config$1<T>;
1660
+ setup?: SetupFn<Config$1<T>, Env$1<T>>;
1668
1661
  push: Push<T>;
1669
1662
  destroy?: DestroyFn<Config$1<T>, Env$1<T>>;
1670
1663
  on?(event: Types$3, context?: unknown): void | boolean | Promise<void | boolean>;
@@ -1713,36 +1706,44 @@ type Renderer = 'browser' | 'codebox';
1713
1706
  type source_InitSource<T extends TypesGeneric$1 = Types$1> = InitSource<T>;
1714
1707
  type source_InitSources = InitSources;
1715
1708
  type source_Mapping<T extends TypesGeneric$1 = Types$1> = Mapping<T>;
1716
- type source_PartialConfig<T extends TypesGeneric$1 = Types$1> = PartialConfig<T>;
1717
1709
  type source_Push<T extends TypesGeneric$1 = Types$1> = Push<T>;
1718
1710
  type source_Renderer = Renderer;
1719
1711
  declare namespace source {
1720
- export type { BaseEnv$1 as BaseEnv, Config$1 as Config, Context$1 as Context, Env$1 as Env, Init$1 as Init, InitSettings$1 as InitSettings, source_InitSource as InitSource, source_InitSources as InitSources, Instance$2 as Instance, source_Mapping as Mapping, source_PartialConfig as PartialConfig, source_Push as Push, source_Renderer as Renderer, Settings$1 as Settings, Types$1 as Types, TypesGeneric$1 as TypesGeneric, TypesOf$1 as TypesOf };
1712
+ export type { BaseEnv$1 as BaseEnv, Config$1 as Config, Context$1 as Context, Env$1 as Env, Init$1 as Init, InitSettings$1 as InitSettings, source_InitSource as InitSource, source_InitSources as InitSources, Instance$2 as Instance, source_Mapping as Mapping, PartialConfig$1 as PartialConfig, source_Push as Push, source_Renderer as Renderer, Settings$1 as Settings, SetupOptions$1 as SetupOptions, Types$1 as Types, TypesGeneric$1 as TypesGeneric, TypesOf$1 as TypesOf };
1721
1713
  }
1722
1714
 
1723
1715
  interface BaseEnv {
1724
1716
  [key: string]: unknown;
1725
1717
  }
1726
- interface Types<S = unknown, E = BaseEnv, I = S> {
1718
+ interface Types<S = unknown, E = BaseEnv, I = S, U = unknown> {
1727
1719
  settings: S;
1728
1720
  initSettings: I;
1729
1721
  env: E;
1722
+ setup: U;
1730
1723
  }
1731
1724
  type TypesGeneric = {
1732
1725
  settings: any;
1733
1726
  initSettings: any;
1734
1727
  env: any;
1728
+ setup: any;
1735
1729
  };
1736
1730
  type Settings<T extends TypesGeneric = Types> = T['settings'];
1737
1731
  type InitSettings<T extends TypesGeneric = Types> = T['initSettings'];
1738
1732
  type Env<T extends TypesGeneric = Types> = T['env'];
1733
+ type SetupOptions<T extends TypesGeneric = Types> = T['setup'];
1739
1734
  type TypesOf<I> = I extends Instance$1<infer T> ? T : never;
1740
1735
  interface Config<T extends TypesGeneric = Types> {
1741
1736
  settings?: InitSettings<T>;
1742
1737
  env?: Env<T>;
1743
1738
  id?: string;
1744
1739
  logger?: Config$4;
1740
+ /**
1741
+ * Provisioning options for `walker setup`. `boolean | object`.
1742
+ * Triggered only by explicit CLI invocation; never automatic.
1743
+ */
1744
+ setup?: boolean | SetupOptions<T>;
1745
1745
  }
1746
+ type PartialConfig<T extends TypesGeneric = Types> = Config<Types<Partial<Settings<T>> | Settings<T>, Env<T>, InitSettings<T>, SetupOptions<T>>>;
1746
1747
  interface Context<T extends TypesGeneric = Types> extends Base<Config<T>, Env<T>> {
1747
1748
  id: string;
1748
1749
  }
@@ -1755,6 +1756,7 @@ interface Instance$1<T extends TypesGeneric = Types> {
1755
1756
  get: GetFn;
1756
1757
  set: SetFn;
1757
1758
  delete: DeleteFn;
1759
+ setup?: SetupFn<Config<T>, Env<T>>;
1758
1760
  destroy?: DestroyFn<Config<T>, Env<T>>;
1759
1761
  }
1760
1762
  type Init<T extends TypesGeneric = Types> = (context: Context<Types<Partial<Settings<T>>, Env<T>, InitSettings<T>>>) => Instance$1<T> | Promise<Instance$1<T>>;
@@ -1782,14 +1784,16 @@ type store_InitFn<T extends TypesGeneric = Types> = InitFn<T>;
1782
1784
  type store_InitSettings<T extends TypesGeneric = Types> = InitSettings<T>;
1783
1785
  type store_InitStore<T extends TypesGeneric = Types> = InitStore<T>;
1784
1786
  type store_InitStores = InitStores;
1787
+ type store_PartialConfig<T extends TypesGeneric = Types> = PartialConfig<T>;
1785
1788
  type store_SetFn<T = unknown> = SetFn<T>;
1786
1789
  type store_Settings<T extends TypesGeneric = Types> = Settings<T>;
1790
+ type store_SetupOptions<T extends TypesGeneric = Types> = SetupOptions<T>;
1787
1791
  type store_Stores = Stores;
1788
- type store_Types<S = unknown, E = BaseEnv, I = S> = Types<S, E, I>;
1792
+ type store_Types<S = unknown, E = BaseEnv, I = S, U = unknown> = Types<S, E, I, U>;
1789
1793
  type store_TypesGeneric = TypesGeneric;
1790
1794
  type store_TypesOf<I> = TypesOf<I>;
1791
1795
  declare namespace store {
1792
- export type { store_BaseEnv as BaseEnv, store_Config as Config, store_Context as Context, store_DeleteFn as DeleteFn, store_Env as Env, store_GetFn as GetFn, store_Init as Init, store_InitFn as InitFn, store_InitSettings as InitSettings, store_InitStore as InitStore, store_InitStores as InitStores, Instance$1 as Instance, store_SetFn as SetFn, store_Settings as Settings, store_Stores as Stores, store_Types as Types, store_TypesGeneric as TypesGeneric, store_TypesOf as TypesOf };
1796
+ export type { store_BaseEnv as BaseEnv, store_Config as Config, store_Context as Context, store_DeleteFn as DeleteFn, store_Env as Env, store_GetFn as GetFn, store_Init as Init, store_InitFn as InitFn, store_InitSettings as InitSettings, store_InitStore as InitStore, store_InitStores as InitStores, Instance$1 as Instance, store_PartialConfig as PartialConfig, store_SetFn as SetFn, store_Settings as Settings, store_SetupOptions as SetupOptions, store_Stores as Stores, store_Types as Types, store_TypesGeneric as TypesGeneric, store_TypesOf as TypesOf };
1793
1797
  }
1794
1798
 
1795
1799
  /**
@@ -2133,9 +2137,9 @@ declare function walkPath(value: unknown, path: string, refPrefix: string): unkn
2133
2137
  * Resolver callback for `$flow.X.Y` references.
2134
2138
  *
2135
2139
  * Given a sibling flow name, returns its fully resolved `Flow.Config` block
2136
- * (with `$env`/`$var`/`$def`/`$contract` already resolved) as `unknown` so
2137
- * that {@link walkPath} can traverse it. Returns `undefined` if the flow
2138
- * does not exist. Implementations are responsible for cycle detection across
2140
+ * (with `$env`/`$var`/`$contract` already resolved) as `unknown` so that
2141
+ * {@link walkPath} can traverse it. Returns `undefined` if the flow does
2142
+ * not exist. Implementations are responsible for cycle detection across
2139
2143
  * recursive calls.
2140
2144
  */
2141
2145
  type FlowConfigResolver = (flowName: string) => unknown;
@@ -2152,20 +2156,22 @@ declare function packageNameToVariable(packageName: string): string;
2152
2156
  *
2153
2157
  * Resolution pass order:
2154
2158
  * 1. `$env` / `$var` resolve per-flow in isolation (no cross-flow context).
2159
+ * `$var` resolves recursively (variables may reference other variables,
2160
+ * `$env`, `$contract`, or `$flow`); cycles are detected via a visiting set.
2155
2161
  * 2. `$flow.X.Y` resolves against pass-1 outputs of sibling flows (so `$env`/`$var`
2156
2162
  * inside the referenced flow are already resolved when `$flow` reads it).
2157
- * 3. `$def` / `$contract` resolve last (with `$flow` results available).
2163
+ * 3. `$contract` resolves last (with `$flow` results available).
2158
2164
  *
2159
2165
  * In practice these passes are interleaved by the resolver: when `$flow.X.Y`
2160
2166
  * is encountered, the sibling flow X's `Flow.Config` block is recursively
2161
- * resolved on demand (with all its own `$env`/`$var`/`$def`/`$contract`
2162
- * references resolved first), then the deep path is walked. Cycles are
2163
- * detected via a visiting set.
2167
+ * resolved on demand (with all its own `$env`/`$var`/`$contract` references
2168
+ * resolved first), then the deep path is walked. Cycles are detected via a
2169
+ * visiting set.
2164
2170
  *
2165
2171
  * @param config - The complete Flow.Json (root multi-flow config)
2166
2172
  * @param flowName - Flow name (auto-selected if only one exists)
2167
2173
  * @param options - Resolution options
2168
- * @returns Resolved {@link Flow} with $var, $env, $def, $contract, and $flow patterns resolved
2174
+ * @returns Resolved {@link Flow} with $var, $env, $contract, and $flow patterns resolved
2169
2175
  * @throws Error if flow selection is required but not specified, or flow not found
2170
2176
  * @throws Error if a `$flow.X.Y` reference forms a cycle
2171
2177
  *
@@ -2736,6 +2742,15 @@ declare function transformData(data?: SendDataValue): string | undefined;
2736
2742
  */
2737
2743
  declare function getHeaders(headers?: SendHeaders): SendHeaders;
2738
2744
 
2745
+ /**
2746
+ * Normalize `config.setup` into a concrete options object, or null when disabled.
2747
+ *
2748
+ * - `false` / `undefined` → null (no setup)
2749
+ * - `true` → `defaults` as-is
2750
+ * - object → shallow merge of defaults and overrides (overrides win)
2751
+ */
2752
+ declare function resolveSetup<T extends object>(value: boolean | T | undefined, defaults: T): T | null;
2753
+
2739
2754
  /**
2740
2755
  * Throws an error.
2741
2756
  *
@@ -3046,8 +3061,8 @@ declare function formatOut(out: StepOut): string;
3046
3061
  * app secrets service, explorer IntelliSense) imports these — no
3047
3062
  * inline regexes elsewhere.
3048
3063
  */
3049
- declare const REF_VAR: RegExp;
3050
- declare const REF_DEF: RegExp;
3064
+ declare const REF_VAR_FULL: RegExp;
3065
+ declare const REF_VAR_INLINE: RegExp;
3051
3066
  declare const REF_ENV: RegExp;
3052
3067
  declare const REF_CONTRACT: RegExp;
3053
3068
  /** Whole-string `$flow.<name>(.<path>)?`: cross-flow value reference. */
@@ -3056,4 +3071,4 @@ declare const REF_STORE: RegExp;
3056
3071
  declare const REF_SECRET: RegExp;
3057
3072
  declare const REF_CODE_PREFIX = "$code:";
3058
3073
 
3059
- export { cache as Cache, type CacheResult, type ClickIdEntry, collector as Collector, type CompiledCache, type CompiledNext, type CompiledRoute, Const, context as Context, destination as Destination, ENV_MARKER_PREFIX, elb as Elb, type ExampleSummary, Flow, type FlowConfigResolver, hint as Hint, hooks as Hooks, type Ingest, type IngestMeta, Level, lifecycle as Lifecycle, logger as Logger, mapping as Mapping, type MarketingParameters, matcher as Matcher, type MockLogger, on as On, REF_CODE_PREFIX, REF_CONTRACT, REF_DEF, REF_ENV, REF_FLOW, REF_SECRET, REF_STORE, REF_VAR, request as Request, type ResolveOptions, type RespondFn, type RespondOptions, type SendDataValue, type SendHeaders, type SendResponse, simulation as Simulation, source as Source, type StorageType, store as Store, transformer as Transformer, trigger as Trigger, walkeros as WalkerOS, type WalkerOSPackage, type WalkerOSPackageInfo, type WalkerOSPackageMeta, anonymizeIP, applyUpdate, assign, branch, buildCacheContext, castToProperty, castValue, checkCache, clone, compileCache, compileMatcher, compileNext, createDestination, createEvent, createIngest, createLogger, createMockContext, createMockLogger, createRespond, debounce, deepMerge, defaultClickIds, fetchPackage, fetchPackageSchema, filterValues, flattenIncludeSections, formatOut, getBrowser, getBrowserVersion, getByPath, getDeviceType, getEvent, getFlowSettings, getGrantedConsent, getHeaders, getId, getMappingEvent, getMappingValue, getMarketingParameters, getOS, getOSVersion, getPlatform, getSpanId, isArguments, isArray, isBoolean, isCommand, isDefined, isElementOrDocument, isFunction, isNumber, isObject, isPropertyType, isRouteArray, isSameType, isString, mcpError, mcpResult, mergeContractSchemas, mockEnv, packageNameToVariable, parseUserAgent, processEventMapping, requestToData, requestToParameter, resolveContracts, resolveNext, setByPath, storeCache, throttle, throwError, transformData, traverseEnv, trim, tryCatch, tryCatchAsync, useHooks, walkPath, wrapCondition, wrapFn, wrapValidate };
3074
+ export { cache as Cache, type CacheResult, type ClickIdEntry, collector as Collector, type CompiledCache, type CompiledNext, type CompiledRoute, Const, context as Context, destination as Destination, type DestroyContext, type DestroyFn, ENV_MARKER_PREFIX, elb as Elb, type ExampleSummary, Flow, type FlowConfigResolver, hint as Hint, hooks as Hooks, type Ingest, type IngestMeta, Level, lifecycle as Lifecycle, type LifecycleContext, logger as Logger, mapping as Mapping, type MarketingParameters, matcher as Matcher, type MockLogger, on as On, REF_CODE_PREFIX, REF_CONTRACT, REF_ENV, REF_FLOW, REF_SECRET, REF_STORE, REF_VAR_FULL, REF_VAR_INLINE, request as Request, type ResolveOptions, type RespondFn, type RespondOptions, type SendDataValue, type SendHeaders, type SendResponse, type SetupFn, simulation as Simulation, source as Source, type StorageType, store as Store, transformer as Transformer, trigger as Trigger, walkeros as WalkerOS, type WalkerOSPackage, type WalkerOSPackageInfo, type WalkerOSPackageMeta, anonymizeIP, applyUpdate, assign, branch, buildCacheContext, castToProperty, castValue, checkCache, clone, compileCache, compileMatcher, compileNext, createDestination, createEvent, createIngest, createLogger, createMockContext, createMockLogger, createRespond, debounce, deepMerge, defaultClickIds, fetchPackage, fetchPackageSchema, filterValues, flattenIncludeSections, formatOut, getBrowser, getBrowserVersion, getByPath, getDeviceType, getEvent, getFlowSettings, getGrantedConsent, getHeaders, getId, getMappingEvent, getMappingValue, getMarketingParameters, getOS, getOSVersion, getPlatform, getSpanId, isArguments, isArray, isBoolean, isCommand, isDefined, isElementOrDocument, isFunction, isNumber, isObject, isPropertyType, isRouteArray, isSameType, isString, mcpError, mcpResult, mergeContractSchemas, mockEnv, packageNameToVariable, parseUserAgent, processEventMapping, requestToData, requestToParameter, resolveContracts, resolveNext, resolveSetup, setByPath, storeCache, throttle, throwError, transformData, traverseEnv, trim, tryCatch, tryCatchAsync, useHooks, walkPath, wrapCondition, wrapFn, wrapValidate };
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- "use strict";var e,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,o=Object.getOwnPropertyNames,r=Object.prototype.hasOwnProperty,i=(e,n)=>{for(var o in n)t(e,o,{get:n[o],enumerable:!0})},s={};i(s,{Cache:()=>a,Collector:()=>c,Const:()=>E,Context:()=>l,Destination:()=>f,ENV_MARKER_PREFIX:()=>K,Elb:()=>u,Hint:()=>S,Hooks:()=>p,Level:()=>m,Lifecycle:()=>k,Logger:()=>d,Mapping:()=>g,Matcher:()=>O,On:()=>y,REF_CODE_PREFIX:()=>L,REF_CONTRACT:()=>V,REF_DEF:()=>D,REF_ENV:()=>H,REF_FLOW:()=>W,REF_SECRET:()=>B,REF_STORE:()=>U,REF_VAR:()=>z,Request:()=>h,Simulation:()=>x,Source:()=>v,Store:()=>w,Transformer:()=>b,Trigger:()=>j,WalkerOS:()=>$,anonymizeIP:()=>C,applyUpdate:()=>_t,assign:()=>oe,branch:()=>_,buildCacheContext:()=>Ot,castToProperty:()=>De,castValue:()=>we,checkCache:()=>Et,clone:()=>ge,compileCache:()=>St,compileMatcher:()=>jt,compileNext:()=>$t,createDestination:()=>ke,createEvent:()=>Oe,createIngest:()=>A,createLogger:()=>Te,createMockContext:()=>Je,createMockLogger:()=>Ke,createRespond:()=>wt,debounce:()=>Ce,deepMerge:()=>$e,defaultClickIds:()=>Ae,fetchPackage:()=>gt,fetchPackageSchema:()=>bt,filterValues:()=>ze,flattenIncludeSections:()=>ve,formatOut:()=>Ct,getBrowser:()=>ot,getBrowserVersion:()=>rt,getByPath:()=>ye,getDeviceType:()=>at,getEvent:()=>Se,getFlowSettings:()=>ee,getGrantedConsent:()=>je,getHeaders:()=>Ye,getId:()=>Ee,getMappingEvent:()=>We,getMappingValue:()=>Ue,getMarketingParameters:()=>_e,getOS:()=>it,getOSVersion:()=>st,getPlatform:()=>te,getSpanId:()=>xe,isArguments:()=>re,isArray:()=>ie,isBoolean:()=>se,isCommand:()=>ae,isDefined:()=>ce,isElementOrDocument:()=>le,isFunction:()=>fe,isNumber:()=>ue,isObject:()=>pe,isPropertyType:()=>Ie,isRouteArray:()=>kt,isSameType:()=>de,isString:()=>me,mcpError:()=>vt,mcpResult:()=>ht,mergeContractSchemas:()=>T,mockEnv:()=>Ze,packageNameToVariable:()=>Q,parseUserAgent:()=>nt,processEventMapping:()=>Le,requestToData:()=>Xe,requestToParameter:()=>Ge,resolveContracts:()=>M,resolveNext:()=>xt,setByPath:()=>be,storeCache:()=>At,throttle:()=>Ne,throwError:()=>N,transformData:()=>Qe,traverseEnv:()=>qe,trim:()=>et,tryCatch:()=>He,tryCatchAsync:()=>Ve,useHooks:()=>tt,walkPath:()=>X,wrapCondition:()=>lt,wrapFn:()=>ft,wrapValidate:()=>ut}),module.exports=(e=s,((e,i,s,a)=>{if(i&&"object"==typeof i||"function"==typeof i)for(let c of o(i))r.call(e,c)||c===s||t(e,c,{get:()=>i[c],enumerable:!(a=n(i,c))||a.enumerable});return e})(t({},"__esModule",{value:!0}),e));var a={},c={},l={},f={},u={},p={},d={};i(d,{Level:()=>m});var m=(e=>(e[e.ERROR=0]="ERROR",e[e.WARN=1]="WARN",e[e.INFO=2]="INFO",e[e.DEBUG=3]="DEBUG",e))(m||{}),g={},y={},b={},h={},v={},w={},j={},k={},$={},x={},O={},S={},E={Utils:{Storage:{Local:"local",Session:"session",Cookie:"cookie"}}};function A(e){return{_meta:{hops:0,path:[e]}}}function _(e,t){return{event:e,next:t}}function C(e){return/^(?:\d{1,3}\.){3}\d{1,3}$/.test(e)?e.replace(/\.\d+$/,".0"):""}function N(e){throw new Error(String(e))}var R=["globals","context","custom","user","consent"],P=new Set(["description","examples","title","$comment"]);function M(e){const t={},n=new Set;function o(r){if(t[r])return t[r];n.has(r)&&N(`Circular extends chain detected: ${[...n,r].join(" → ")}`);const i=e[r];i||N(`Contract "${r}" not found`),n.add(r);let s={};if(i.extends){s=function(e,t){const n={};void 0===e.description&&void 0===t.description||(n.description=t.description??e.description);for(const o of R){const r=e[o],i=t[o];r&&i?n[o]=T(r,i):(r||i)&&(n[o]={...r||i})}if(e.events||t.events){const o={},r=new Set([...Object.keys(e.events||{}),...Object.keys(t.events||{})]);for(const n of r){const r=e.events?.[n]||{},i=t.events?.[n]||{},s=new Set([...Object.keys(r),...Object.keys(i)]);o[n]={};for(const e of s){const t=r[e],s=i[e];o[n][e]=t&&s?T(t,s):{...t||s}}}n.events=o}return n}(o(i.extends),i)}else s={...i};if(delete s.extends,s.events&&(s.events=function(e){const t={};for(const n of Object.keys(e))if("*"!==n){t[n]={};for(const o of Object.keys(e[n]||{})){let r={};const i=e["*"]?.["*"];i&&(r=T(r,i));const s=e["*"]?.[o];s&&"*"!==o&&(r=T(r,s));const a=e[n]?.["*"];a&&"*"!==o&&(r=T(r,a));const c=e[n]?.[o];c&&(r=T(r,c)),t[n][o]=r}}e["*"]&&(t["*"]={...e["*"]});return t}(s.events)),s.events){const e={};for(const[t,n]of Object.entries(s.events)){e[t]={};for(const[o,r]of Object.entries(n))e[t][o]=F(r)}s.events=e}return n.delete(r),t[r]=s,s}for(const t of Object.keys(e))o(t);return t}function T(e,t){const n={...e};for(const o of Object.keys(t)){const r=e[o],i=t[o];"required"===o&&Array.isArray(r)&&Array.isArray(i)?n[o]=[...new Set([...r,...i])]:I(r)&&I(i)?n[o]=T(r,i):n[o]=i}return n}function F(e){const t={};for(const[n,o]of Object.entries(e))P.has(n)||(null===o||"object"!=typeof o||Array.isArray(o)?t[n]=o:t[n]=F(o));return t}function I(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}var z=/\$var\.([a-zA-Z_][a-zA-Z0-9_]*)/g,D=/^\$def\.([a-zA-Z_][a-zA-Z0-9_]*)(?:\.(.+))?$/,H=/\$env\.([a-zA-Z_][a-zA-Z0-9_]*)(?::([^"}\s]*))?/g,V=/^\$contract\.([a-zA-Z_][a-zA-Z0-9_]*)(?:\.(.+))?$/,W=/^\$flow\.([a-zA-Z_][a-zA-Z0-9_]*)(?:\.([a-zA-Z0-9_.]+))?$/,U=/^\$store\.([a-zA-Z_][a-zA-Z0-9_]*)$/,B=/^\$secret\.([A-Z0-9_]+)$/,L="$code:";function Z(...e){const t={};for(const n of e)n&&Object.assign(t,n);return t}function q(...e){const t={};for(const n of e)n&&Object.assign(t,n);return t}var K="__WALKEROS_ENV:";function J(e,t,n){const o=`$flow.${e}${t?`.${t}`:""}`;if("unknown-flow"===n)return`${o} cannot resolve: flow "${e}" does not exist in this config.`;return`${o} is empty. Set ${t?`flows.${e}.config.${t}`:`flows.${e}.config`}, or run \`walkeros deploy ${e}\` first.`}function X(e,t,n){const o=t.split(".");let r=e;for(let e=0;e<o.length;e++){const i=o[e];if(null==r||"object"!=typeof r){const r=o.slice(0,e).join(".");N(`Path "${t}" not found in "${n}": "${i}" does not exist${r?` in "${r}"`:""}`)}const s=r;if(!(i in s)){const r=o.slice(0,e).join(".");N(`Path "${t}" not found in "${n}": "${i}" does not exist${r?` in "${r}"`:""}`)}r=s[i]}return r}function G(e,t,n,o,r,i){if("string"==typeof e){const s=e.match(D);if(s){const e=s[1],a=s[2];void 0===n[e]&&N(`Definition "${e}" not found`);let c=G(n[e],t,n,o,r,i);return a&&(c=X(c,a,`$def.${e}`)),c}const a=e.match(V);if(a&&r){const e=a[1],t=a[2];e in r||N(`Contract "${e}" not found`);let n=r[e];return t&&(n=X(n,t,`$contract.${e}`)),n}const c=e.match(W);if(c){const t=c[1],n=c[2],r=!1===o?.strictFlowRefs;i||N(`$flow.${t}${n?`.${n}`:""} cannot be resolved without a flow resolver`);const s=i(t);if(!s){if(r)return o?.onWarning?.(J(t,n,"unknown-flow")),e;N(`Flow "${t}" not found in $flow.${t}`)}let a=s;if(n)if(r){try{a=X(a,n,`$flow.${t}`)}catch{return o?.onWarning?.(J(t,n,"missing-key")),e}if(null==a||""===a)return o?.onWarning?.(J(t,n,"missing-key")),e}else a=X(a,n,`$flow.${t}`);return a}let l=e.replace(z,(e,n)=>{if(void 0!==t[n])return String(t[n]);N(`Variable "${n}" not found`)});return l=l.replace(H,(e,t,n)=>o?.deferred?void 0!==n?`${K}${t}:${n}`:`${K}${t}`:"undefined"!=typeof process&&void 0!==process.env?.[t]?process.env[t]:void 0!==n?n:void N(`Environment variable "${t}" not found and no default provided`)),l}if(Array.isArray(e))return e.map(e=>G(e,t,n,o,r,i));if(null!==e&&"object"==typeof e){const s={};for(const[a,c]of Object.entries(e))s[a]=G(c,t,n,o,r,i);return s}return e}function Q(e){const t=e.startsWith("@"),n=e.replace("@","").replace(/[/-]/g,"_").split("_").filter(e=>e.length>0).map((e,t)=>0===t?e:e.charAt(0).toUpperCase()+e.slice(1)).join("");return t?"_"+n:n}function Y(e,t,n){if(t)return t;if(!e||!n)return;return n[e]?Q(e):void 0}function ee(e,t,n){const o=new Map,r=new Set,i=[],s=t=>{if(o.has(t))return o.get(t);const a=e.flows[t];if(a){if(r.has(t)){N(`Cyclic $flow reference: ${[...i,t].join(" -> ")}`)}r.add(t),i.push(t);try{const r=Z(e.variables,a.variables),i=q(e.definitions,a.definitions),c=G(a.config??{},r,i,n,void 0,s);return o.set(t,c),c}finally{r.delete(t),i.pop()}}},a=Object.keys(e.flows);t||(1===a.length?t=a[0]:N(`Multiple flows found (${a.join(", ")}). Please specify a flow.`));const c=e.flows[t];c||N(`Flow "${t}" not found. Available: ${a.join(", ")}`),r.add(t),i.push(t);try{return function(e,t,n,o){const r=JSON.parse(JSON.stringify(t));let i;if(e.contract){const r=Z(e.variables,t.variables),s=q(e.definitions,t.definitions);i=M(G(e.contract,r,s,n,void 0,o))}if(r.config){const s=Z(e.variables,t.variables),a=q(e.definitions,t.definitions);r.config=G(r.config,s,a,n,i,o)}if(r.sources)for(const[s,a]of Object.entries(r.sources)){const c=Z(e.variables,t.variables,a.variables),l=q(e.definitions,t.definitions,a.definitions),f=G(a.config,c,l,n,i,o),u=G(a.env,c,l,n,i,o),p=Y(a.package,a.code,r.config?.bundle?.packages),d="string"==typeof a.code||"object"==typeof a.code?a.code:void 0,m=p||d;r.sources[s]={package:a.package,config:f,env:u,primary:a.primary,variables:a.variables,definitions:a.definitions,before:a.before,next:a.next,cache:a.cache,code:m}}if(r.destinations)for(const[s,a]of Object.entries(r.destinations)){const c=Z(e.variables,t.variables,a.variables),l=q(e.definitions,t.definitions,a.definitions),f=G(a.config,c,l,n,i,o),u=G(a.env,c,l,n,i,o),p=Y(a.package,a.code,r.config?.bundle?.packages),d="string"==typeof a.code||"object"==typeof a.code?a.code:void 0,m=p||d;r.destinations[s]={package:a.package,config:f,env:u,variables:a.variables,definitions:a.definitions,before:a.before,next:a.next,cache:a.cache,code:m}}if(r.stores)for(const[s,a]of Object.entries(r.stores)){const c=Z(e.variables,t.variables,a.variables),l=q(e.definitions,t.definitions,a.definitions),f=G(a.config,c,l,n,i,o),u=G(a.env,c,l,n,i,o),p=Y(a.package,a.code,r.config?.bundle?.packages),d="string"==typeof a.code||"object"==typeof a.code?a.code:void 0,m=p||d;r.stores[s]={package:a.package,config:f,env:u,variables:a.variables,definitions:a.definitions,code:m}}if(r.transformers)for(const[s,a]of Object.entries(r.transformers)){const c=Z(e.variables,t.variables,a.variables),l=q(e.definitions,t.definitions,a.definitions),f=G(a.config,c,l,n,i,o),u=G(a.env,c,l,n,i,o),p=Y(a.package,a.code,r.config?.bundle?.packages),d="string"==typeof a.code||"object"==typeof a.code?a.code:void 0,m=p||d;r.transformers[s]={package:a.package,config:f,env:u,variables:a.variables,definitions:a.definitions,before:a.before,next:a.next,cache:a.cache,code:m}}if(r.collector){const s=Z(e.variables,t.variables),a=q(e.definitions,t.definitions),c=G(r.collector,s,a,n,i,o);r.collector=c}return r}(e,c,n,s)}finally{r.delete(t),i.pop()}}function te(e){const t=e.config?.platform;if("web"===t||"server"===t)return t;N('Flow must have config.platform set to "web" or "server"')}var ne={merge:!0,shallow:!0,extend:!0};function oe(e,t={},n={}){n={...ne,...n};const o=Object.entries(t).reduce((t,[o,r])=>{const i=e[o];return n.merge&&Array.isArray(i)&&Array.isArray(r)?t[o]=r.reduce((e,t)=>e.includes(t)?e:[...e,t],[...i]):(n.extend||o in e)&&(t[o]=r),t},{});return n.shallow?{...e,...o}:(Object.assign(e,o),e)}function re(e){return"[object Arguments]"===Object.prototype.toString.call(e)}function ie(e){return Array.isArray(e)}function se(e){return"boolean"==typeof e}function ae(e){return"walker"===e}function ce(e){return void 0!==e}function le(e){return!(!e||"object"!=typeof e)&&("body"in e||"tagName"in e)}function fe(e){return"function"==typeof e}function ue(e){return"number"==typeof e&&!Number.isNaN(e)}function pe(e){return"object"==typeof e&&null!==e&&!ie(e)&&"[object Object]"===Object.prototype.toString.call(e)}function de(e,t){return typeof e==typeof t}function me(e){return"string"==typeof e}function ge(e,t=new WeakMap){if("object"!=typeof e||null===e)return e;if(t.has(e))return t.get(e);const n=Object.prototype.toString.call(e);if("[object Object]"===n){const n={};t.set(e,n);for(const o in e)Object.prototype.hasOwnProperty.call(e,o)&&(n[o]=ge(e[o],t));return n}if("[object Array]"===n){const n=[];return t.set(e,n),e.forEach(e=>{n.push(ge(e,t))}),n}if("[object Date]"===n)return new Date(e.getTime());if("[object RegExp]"===n){const t=e;return new RegExp(t.source,t.flags)}return e}function ye(e,t="",n){const o=t.split(".");let r=e;for(let e=0;e<o.length;e++){const t=o[e];if("*"===t&&ie(r)){const t=o.slice(e+1).join("."),i=[];for(const e of r){const o=ye(e,t,n);i.push(o)}return i}if(r=r instanceof Object?r[t]:void 0,void 0===r)break}return ce(r)?r:n}function be(e,t,n){if(!pe(e))return e;const o=ge(e),r=t.split(".");let i=o;for(let e=0;e<r.length;e++){const t=r[e];e===r.length-1?i[t]=n:(t in i&&"object"==typeof i[t]&&null!==i[t]||(i[t]={}),i=i[t])}return o}var he={data:e=>e.data,globals:e=>e.globals,context:e=>e.context,user:e=>e.user,source:e=>e.source,event:e=>({entity:e.entity,action:e.action,id:e.id,timestamp:e.timestamp,name:e.name,trigger:e.trigger,timing:e.timing})};function ve(e,t){const n={},o=t.includes("all")?Object.keys(he):t;for(const t of o){const o=he[t];if(!o)continue;const r=o(e);if(pe(r))for(const[e,o]of Object.entries(r)){if(void 0===o)continue;const r="context"===t&&Array.isArray(o)?o[0]:o;n[`${t}_${e}`]=r}}return n}function we(e){if("true"===e)return!0;if("false"===e)return!1;const t=Number(e);return e==t&&""!==e?t:String(e)}function je(e,t={},n={}){const o={...t,...n},r={};let i=!e||0===Object.keys(e).length;return Object.keys(o).forEach(t=>{o[t]&&(r[t]=!0,e&&e[t]&&(i=!0))}),!!i&&r}function ke(e,t){const n={...e};return n.config=oe(e.config,t,{shallow:!0,merge:!0,extend:!0}),e.config.settings&&t.settings&&(n.config.settings=oe(e.config.settings,t.settings,{shallow:!0,merge:!0,extend:!0})),e.config.mapping&&t.mapping&&(n.config.mapping=oe(e.config.mapping,t.mapping,{shallow:!0,merge:!0,extend:!0})),n}function $e(e,t){if(!pe(t))return e;for(const n of Object.keys(t)){const o=t[n];void 0!==o&&(pe(o)&&pe(e[n])?$e(e[n],o):e[n]=o)}return e}function xe(){let e="";for(let t=0;t<16;t++)e+=(16*Math.random()|0).toString(16);return e}function Oe(e={}){const t=e.timestamp||(new Date).setHours(0,13,37,0),n=oe({name:"entity action",data:{string:"foo",number:1,boolean:!0,array:[0,"text",!1],not:void 0},context:{dev:["test",1]},globals:{lang:"elb"},custom:{completely:"random"},user:{id:"us3r",device:"c00k13",session:"s3ss10n"},nested:[{entity:"child",data:{is:"subordinated"}}],consent:{functional:!0},id:e.id||xe(),trigger:"test",entity:"entity",action:"action",timestamp:t,timing:3.14,source:{type:"collector",schema:"4"}},e,{merge:!1});if(e.name){const[t,o]=e.name.split(" ")??[];t&&o&&(n.entity=t,n.action=o)}return n}function Se(e="entity action",t={}){const n=t.timestamp||(new Date).setHours(0,13,37,0),o={data:{id:"ers",name:"Everyday Ruck Snack",color:"black",size:"l",price:420}},r={data:{id:"cc",name:"Cool Cap",size:"one size",price:42}};return Oe({...{"cart view":{data:{currency:"EUR",value:2*o.data.price},context:{shopping:["cart",0]},globals:{pagegroup:"shop"},nested:[{entity:"product",data:{...o.data,quantity:2},context:{shopping:["cart",0]},nested:[]}],trigger:"load"},"checkout view":{data:{step:"payment",currency:"EUR",value:o.data.price+r.data.price},context:{shopping:["checkout",0]},globals:{pagegroup:"shop"},nested:[{entity:"product",...o,context:{shopping:["checkout",0]},nested:[]},{entity:"product",...r,context:{shopping:["checkout",0]},nested:[]}],trigger:"load"},"order complete":{data:{id:"0rd3r1d",currency:"EUR",shipping:5.22,taxes:73.76,total:555},context:{shopping:["complete",0]},globals:{pagegroup:"shop"},nested:[{entity:"product",...o,context:{shopping:["complete",0]},nested:[]},{entity:"product",...r,context:{shopping:["complete",0]},nested:[]},{entity:"gift",data:{name:"Surprise"},context:{shopping:["complete",0]},nested:[]}],trigger:"load"},"page view":{data:{domain:"www.example.com",title:"walkerOS documentation",referrer:"https://www.walkeros.io/",search:"?foo=bar",hash:"#hash",id:"/docs/"},globals:{pagegroup:"docs"},trigger:"load"},"product add":{...o,context:{shopping:["intent",0]},globals:{pagegroup:"shop"},nested:[],trigger:"click"},"product view":{...o,context:{shopping:["detail",0]},globals:{pagegroup:"shop"},nested:[],trigger:"load"},"product visible":{data:{...o.data,position:3,promo:!0},context:{shopping:["discover",0]},globals:{pagegroup:"shop"},nested:[],trigger:"load"},"promotion visible":{data:{name:"Setting up tracking easily",position:"hero"},context:{ab_test:["engagement",0]},globals:{pagegroup:"homepage"},trigger:"visible"},"session start":{data:{id:"s3ss10n",start:n,isNew:!0,count:1,runs:1,isStart:!0,storage:!0,referrer:"",device:"c00k13"},user:{id:"us3r",device:"c00k13",session:"s3ss10n",hash:"h4sh",address:"street number",email:"user@example.com",phone:"+49 123 456 789",userAgent:"Mozilla...",browser:"Chrome",browserVersion:"90",deviceType:"desktop",language:"de-DE",country:"DE",region:"HH",city:"Hamburg",zip:"20354",timezone:"Berlin",os:"walkerOS",osVersion:"1.0",screenSize:"1337x420",ip:"127.0.0.0",internal:!0,custom:"value"}}}[e],...t,name:e})}function Ee(e=6,t){if(t){const n=t.length;let o="";for(let r=0;r<e;r++)o+=t[Math.random()*n|0];return o}let n="";for(let t=36;n.length<e;)n+=(Math.random()*t|0).toString(t);return n}var Ae=[{param:"gclid",platform:"google"},{param:"wbraid",platform:"google"},{param:"gbraid",platform:"google"},{param:"dclid",platform:"google"},{param:"gclsrc",platform:"google"},{param:"fbclid",platform:"meta"},{param:"igshid",platform:"meta"},{param:"msclkid",platform:"microsoft"},{param:"ttclid",platform:"tiktok"},{param:"twclid",platform:"twitter"},{param:"li_fat_id",platform:"linkedin"},{param:"epik",platform:"pinterest"},{param:"sclid",platform:"snapchat"},{param:"sccid",platform:"snapchat"},{param:"rdt_cid",platform:"reddit"},{param:"qclid",platform:"quora"},{param:"yclid",platform:"yandex"},{param:"ymclid",platform:"yandex"},{param:"ysclid",platform:"yandex"},{param:"dicbo",platform:"outbrain"},{param:"obclid",platform:"outbrain"},{param:"tblci",platform:"taboola"},{param:"mc_cid",platform:"mailchimp"},{param:"mc_eid",platform:"mailchimp"},{param:"_kx",platform:"klaviyo"},{param:"_hsenc",platform:"hubspot"},{param:"_hsmi",platform:"hubspot"},{param:"s_kwcid",platform:"adobe"},{param:"ef_id",platform:"adobe"},{param:"mkt_tok",platform:"adobe"},{param:"irclickid",platform:"impact"},{param:"cjevent",platform:"cj"},{param:"_branch_match_id",platform:"branch"}];function _e(e,t={},n=[]){const o={};Object.entries(oe({utm_campaign:"campaign",utm_content:"content",utm_medium:"medium",utm_source:"source",utm_term:"term"},t)).forEach(([t,n])=>{const r=e.searchParams.get(t);r&&(o[n]=r)});const r=n.length?function(e){const t=new Map(e.map(e=>[e.param,e.platform])),n=new Set(Ae.map(e=>e.param));return[...Ae.map(e=>t.has(e.param)?{param:e.param,platform:t.get(e.param)}:e),...e.filter(e=>!n.has(e.param))]}(n):Ae,i=new Map;e.searchParams.forEach((e,t)=>{e&&i.set(t.toLowerCase(),e)});for(const e of r){const t=i.get(e.param);t&&(o[e.param]=t,o.clickId||(o.clickId=e.param,o.platform=e.platform))}return o}function Ce(e,t=1e3,n=!1){let o,r=null,i=!1;return(...s)=>new Promise(a=>{const c=n&&!i;r&&clearTimeout(r),r=setTimeout(()=>{r=null,n&&!i||(o=e(...s),a(o))},t),c&&(i=!0,o=e(...s),a(o))})}function Ne(e,t=1e3){let n=null;return function(...o){if(null===n)return n=setTimeout(()=>{n=null},t),e(...o)}}function Re(e){return{message:e.message,name:e.name,stack:e.stack,cause:e.cause}}function Pe(e,t){let n,o={};return e instanceof Error?(n=e.message,o.error=Re(e)):n=e,void 0!==t&&(t instanceof Error?o.error=Re(t):"object"==typeof t&&null!==t?(o={...o,...t},"error"in o&&o.error instanceof Error&&(o.error=Re(o.error))):o.value=t),{message:n,context:o}}var Me=(e,t,n,o)=>{const r=`${m[e]}${o.length>0?` [${o.join(":")}]`:""}`,i=Object.keys(n).length>0,s=0===e?console.error:1===e?console.warn:console.log;i?s(r,t,n):s(r,t)};function Te(e={}){return Fe({level:void 0!==e.level?function(e){return"string"==typeof e?m[e]:e}(e.level):0,handler:e.handler,jsonHandler:e.jsonHandler,scope:[]})}function Fe(e){const{level:t,handler:n,jsonHandler:o,scope:r}=e,i=(e,o,i)=>{if(e<=t){const t=Pe(o,i);n?n(e,t.message,t.context,r,Me):Me(e,t.message,t.context,r)}};return{error:(e,t)=>i(0,e,t),warn:(e,t)=>i(1,e,t),info:(e,t)=>i(2,e,t),debug:(e,t)=>i(3,e,t),throw:(e,t)=>{const o=Pe(e,t);throw n?n(0,o.message,o.context,r,Me):Me(0,o.message,o.context,r),new Error(o.message)},json:e=>{o?o(e):console.log(JSON.stringify(e,null,2))},scope:e=>Fe({level:t,handler:n,jsonHandler:o,scope:[...r,e]})}}function Ie(e){return se(e)||me(e)||ue(e)||!ce(e)||ie(e)&&e.every(Ie)||pe(e)&&Object.values(e).every(Ie)}function ze(e){return se(e)||me(e)||ue(e)?e:re(e)?ze(Array.from(e)):ie(e)?e.map(e=>ze(e)).filter(e=>void 0!==e):pe(e)?Object.entries(e).reduce((e,[t,n])=>{const o=ze(n);return void 0!==o&&(e[t]=o),e},{}):void 0}function De(e){return Ie(e)?e:void 0}function He(e,t,n){return function(...o){try{return e(...o)}catch(e){if(!t)return;return t(e)}finally{n?.()}}}function Ve(e,t,n){return async function(...o){try{return await e(...o)}catch(e){if(!t)return;return await t(e)}finally{await(n?.())}}}async function We(e,t,n){const[o,r]=(e.name||"").split(" ");if(!t||!o||!r)return{};let i,s="",a=o,c=r;const l=t=>{if(!t)return;return(ie(t)?t:[t]).find(t=>{if(!t.condition)return!0;if(!n)return Boolean(t.condition(e,void 0));const o={event:e,mapping:t,collector:n,logger:n.logger,consent:pe(e)&&e.consent||n.consent};return Boolean(t.condition(e,o))})};t[a]||(a="*");const f=t[a];return f&&(f[c]||(c="*"),i=l(f[c])),i||(a="*",c="*",i=l(t[a]?.[c])),i&&(s=`${a} ${c}`),{eventMapping:i,mappingKey:s}}async function Ue(e,t={},n={}){if(!ce(e))return;const o=pe(e)&&e.consent||n.consent||n.collector?.consent,r=n.event??(pe(e)?e:{});if(!n.collector)throw new Error("getMappingValue: context.collector is required");const i={event:r,mapping:t,collector:n.collector,logger:n.collector.logger,consent:o},s=ie(t)?t:[t];for(const t of s){const n=await Ve(Be)(e,t,{...i,mapping:t});if(ce(n))return n}}async function Be(e,t,n){return(ie(t)?t:[t]).reduce(async(t,o)=>{const r=await t;if(r)return r;const i=me(o)?{key:o}:o;if(!Object.keys(i).length)return;const{condition:s,consent:a,fn:c,key:l,loop:f,map:u,set:p,validate:d,value:m}=i,g={...n,mapping:o};if(s&&!await Ve(s)(e,g))return;if(a&&!je(a,g.consent))return m;let y=ce(m)?m:e;if(c&&(y=await Ve(c)(e,g)),l&&(y=ye(e,l,m)),f){const[t,n]=f,o="this"===t?[e]:await Ue(e,t,g);ie(o)&&(y=(await Promise.all(o.map(e=>Ue(e,n,g)))).filter(ce))}else u?y=await Object.entries(u).reduce(async(t,[n,o])=>{const r=await t,i=await Ue(e,o,g);return ce(i)&&(r[n]=i),r},Promise.resolve({})):p&&(y=await Promise.all(p.map(t=>Be(e,t,g))));d&&!await Ve(d)(y,g)&&(y=void 0);const b=De(y);return ce(b)?b:De(m)},Promise.resolve(void 0))}async function Le(e,t,n){t.policy&&await Promise.all(Object.entries(t.policy).map(async([t,o])=>{const r=await Ue(e,o,{collector:n,event:e});e=be(e,t,r)}));const{eventMapping:o,mappingKey:r}=await We(e,t.mapping,n);o?.policy&&await Promise.all(Object.entries(o.policy).map(async([t,o])=>{const r=await Ue(e,o,{collector:n,event:e});e=be(e,t,r)}));let i=t.data&&await Ue(e,t.data,{collector:n,event:e});const s=Boolean(o?.silent);if(o){if(o.ignore)return{event:e,data:i,mapping:o,mappingKey:r,ignore:!0,silent:s};if(o.name&&(e.name=o.name),o.data){const t=o.data&&await Ue(e,o.data,{collector:n,event:e});i=pe(i)&&pe(t)?oe(i,t):t}}const a=o?.include??t.include;if(a&&a.length>0){const t=ve(e,a);Object.keys(t).length>0&&(i=pe(i)?oe(t,i):i??t)}return{event:e,data:i,mapping:o,mappingKey:r,ignore:!1,silent:s}}function Ze(e,t){const n=(e,o=[])=>new Proxy(e,{get(e,r){const i=e[r],s=[...o,r];return"function"==typeof i?i.prototype&&i.prototype.constructor===i?i:(...e)=>{const o=t(s,e,i);if(o&&"object"==typeof o)return n(o,s);const r=i(...e);return r&&"object"==typeof r?n(r,s):o}:i&&"object"==typeof i?n(i,s):i}});return n(e)}function qe(e,t){const n=(e,o=[])=>{if(!e||"object"!=typeof e)return e;const r=Array.isArray(e)?[]:{};for(const[i,s]of Object.entries(e)){const e=[...o,i];Array.isArray(r)?r[Number(i)]=t(s,e):r[i]=t(s,e),s&&"object"==typeof s&&"function"!=typeof s&&(Array.isArray(r)?r[Number(i)]=n(s,e):r[i]=n(s,e))}return r};return n(e)}function Ke(){const e=[],t=jest.fn(e=>{const t=e instanceof Error?e.message:e;throw new Error(t)}),n=jest.fn(t=>{const n=Ke();return e.push(n),n});return{error:jest.fn(),warn:jest.fn(),info:jest.fn(),debug:jest.fn(),throw:t,json:jest.fn(),scope:n,scopedLoggers:e}}function Je(e={}){return{collector:{},config:{},env:{},logger:Ke(),id:"test",ingest:A("test"),...e}}function Xe(e){const t=String(e),n=t.split("?")[1]||t;return He(()=>{const e=new URLSearchParams(n),t={};return e.forEach((e,n)=>{const o=n.split(/[[\]]+/).filter(Boolean);let r=t;o.forEach((t,n)=>{const i=n===o.length-1;if(ie(r)){const s=parseInt(t,10);i?r[s]=we(e):(r[s]=r[s]||(isNaN(parseInt(o[n+1],10))?{}:[]),r=r[s])}else pe(r)&&(i?r[t]=we(e):(r[t]=r[t]||(isNaN(parseInt(o[n+1],10))?{}:[]),r=r[t]))})}),t})()}function Ge(e){if(!e)return"";const t=[],n=encodeURIComponent;function o(e,r){null!=r&&(ie(r)?r.forEach((t,n)=>o(`${e}[${n}]`,t)):pe(r)?Object.entries(r).forEach(([t,n])=>o(`${e}[${t}]`,n)):t.push(`${n(e)}=${n(String(r))}`))}return"object"!=typeof e?n(e):(Object.entries(e).forEach(([e,t])=>o(e,t)),t.join("&"))}function Qe(e){return void 0===e||de(e,"")?e:JSON.stringify(e)}function Ye(e={}){return oe({"Content-Type":"application/json; charset=utf-8"},e)}function et(e){return e?e.trim().replace(/^'|'$/g,"").trim():""}function tt(e,t,n,o){return function(...r){let i;const s="pre"+t,a="post"+t,c=n[s],l=n[a],f=(e,t)=>{o?o.warn(e,{error:t}):console.warn(e,t)};if(c)try{i=c({fn:e},...r)}catch(t){f(`Hook ${String(s)} failed, falling back to original function`,t),i=e(...r)}else i=e(...r);if(l)try{i=l({fn:e,result:i},...r)}catch(e){f(`Hook ${String(a)} failed, keeping original result`,e)}return i}}function nt(e){return e?{userAgent:e,browser:ot(e),browserVersion:rt(e),os:it(e),osVersion:st(e),deviceType:at(e)}:{}}function ot(e){const t=[{name:"Edge",substr:"Edg"},{name:"Chrome",substr:"Chrome"},{name:"Safari",substr:"Safari",exclude:"Chrome"},{name:"Firefox",substr:"Firefox"},{name:"IE",substr:"MSIE"},{name:"IE",substr:"Trident"}];for(const n of t)if(e.includes(n.substr)&&(!n.exclude||!e.includes(n.exclude)))return n.name}function rt(e){const t=[/Edg\/([0-9]+)/,/Chrome\/([0-9]+)/,/Version\/([0-9]+).*Safari/,/Firefox\/([0-9]+)/,/MSIE ([0-9]+)/,/rv:([0-9]+).*Trident/];for(const n of t){const t=e.match(n);if(t)return t[1]}}function it(e){const t=[{name:"Windows",substr:"Windows NT"},{name:"macOS",substr:"Mac OS X"},{name:"Android",substr:"Android"},{name:"iOS",substr:"iPhone OS"},{name:"Linux",substr:"Linux"}];for(const n of t)if(e.includes(n.substr))return n.name}function st(e){const t=e.match(/(?:Windows NT|Mac OS X|Android|iPhone OS) ([0-9._]+)/);return t?t[1].replace(/_/g,"."):void 0}function at(e){let t="Desktop";return/Tablet|iPad/i.test(e)?t="Tablet":/Mobi|Android|iPhone|iPod|BlackBerry|Opera Mini|IEMobile|WPDesktop/i.test(e)&&(t="Mobile"),t}function ct(e){return function(e){return/\breturn\b/.test(e)}(e)?e:`return ${e}`}function lt(e){const t=ct(e);return new Function("value","context",t)}function ft(e){const t=ct(e);return new Function("value","context",t)}function ut(e){const t=ct(e);return new Function("value","context",t)}var pt="https://cdn.jsdelivr.net/npm",dt="dist/walkerOS.json";function mt(e){return"string"==typeof e||Array.isArray(e)&&e.every(e=>"string"==typeof e)?e:void 0}async function gt(e,t){const n=t?.version||"latest",o=t?.timeout||1e4,r=new AbortController,i=setTimeout(()=>r.abort(),o),s=r.signal,a=t?.client?{"X-Walkeros-Client":t.client}:void 0;try{if(t?.baseUrl){const o=`${t.baseUrl}/api/packages/${encodeURIComponent(e)}?version=${encodeURIComponent(n)}&expand=all`,r=await fetch(o,{signal:s,...a&&{headers:a}});if(!r.ok)throw new Error(`Failed to fetch ${o} (HTTP ${r.status})`);return function(e,t,n){const o=n.schemas||{},r=n.examples||{},i=n.hints,s=n.hintKeys??(i?Object.keys(i):[]),a=n.exampleSummaries??[],c=n.platform;return{packageName:n.package||e,version:"string"==typeof n.version?n.version:t,...void 0!==n.description&&{description:n.description},...void 0!==n.type&&{type:n.type},...void 0!==c&&{platform:c},schemas:o,examples:r,...void 0!==n.docs&&{docs:n.docs},...void 0!==n.source&&{source:n.source},...i&&Object.keys(i).length>0?{hints:i}:{},hintKeys:s,exampleSummaries:a}}(e,n,await r.json())}const o=`${pt}/${e}@${n}`,r=await yt(`${o}/package.json`,s,a);return function(e,t,n,o){const r=o.$meta||{},i=o.schemas||{},s=o.examples||{},a=o.hints,c=a?Object.keys(a):[],l=[],f=s.step||{};for(const[e,t]of Object.entries(f)){const n=t,o={name:e};"string"==typeof n?.description&&(o.description=n.description),l.push(o)}const u="string"==typeof r.docs?r.docs:void 0,p="string"==typeof r.source?r.source:void 0;return{packageName:e,version:"string"==typeof n.version?n.version:t,description:"string"==typeof n.description?n.description:void 0,type:"string"==typeof r.type?r.type:void 0,platform:mt(r.platform),schemas:i,examples:s,...u?{docs:u}:{},...p?{source:p}:{},...a&&Object.keys(a).length>0?{hints:a}:{},hintKeys:c,exampleSummaries:l}}(e,n,r,await yt(`${o}/${dt}`,s,a))}finally{clearTimeout(i)}}async function yt(e,t,n){const o=await fetch(e,{signal:t,...n&&{headers:n}});if(!o.ok)throw new Error(`Failed to fetch ${e} (HTTP ${o.status})`);return await o.json()}async function bt(e,t){const n=await gt(e,t);return{packageName:n.packageName,version:n.version,type:n.type,platform:n.platform,schemas:n.schemas,examples:n.examples,...n.hints?{hints:n.hints}:{}}}function ht(e,t){const n=t?{...e,_hints:t}:e;return{content:[{type:"text",text:JSON.stringify(n,null,2)}],structuredContent:n}}function vt(e,t){let n,o,r,i;if(e instanceof Error){n=e.message;const t=e;t.code&&(r=t.code),Array.isArray(t.details)&&(i=t.details)}else if("string"==typeof e)n=e;else if(e&&"object"==typeof e&&"issues"in e&&Array.isArray(e.issues)){const t=e.issues;n=t.map(e=>e.message).join("; "),o=t[0]?.path?.join(".")||void 0}else n=e&&"object"==typeof e&&"message"in e?String(e.message):"Unknown error";const s={error:n};return t&&(s.hint=t),o&&(s.path=o),r&&(s.code=r),i&&(s.details=i),{content:[{type:"text",text:JSON.stringify(s)}],structuredContent:s,isError:!0}}function wt(e){let t=!1;return(n={})=>{t||(t=!0,e(n))}}function jt(e){if("*"===e)return()=>!0;if("and"in e){const t=e.and.map(jt);return e=>t.every(t=>t(e))}if("or"in e){const t=e.or.map(jt);return e=>t.some(t=>t(e))}return function(e){const{key:t,operator:n,value:o,not:r}=e,i=function(e,t){switch(e){case"eq":return e=>String(e??"")===t;case"contains":return e=>String(e??"").includes(t);case"prefix":return e=>String(e??"").startsWith(t);case"suffix":return e=>String(e??"").endsWith(t);case"regex":{const e=new RegExp(t);return t=>e.test(String(t??""))}case"gt":{const e=Number(t);return t=>Number(t)>e}case"lt":{const e=Number(t);return t=>Number(t)<e}case"exists":return e=>null!=e}}(n,o);return e=>{const n=ye(e,t),o=i(n);return r?!o:o}}(e)}function kt(e){return Array.isArray(e)&&e.length>0&&"object"==typeof e[0]&&null!==e[0]&&"match"in e[0]}function $t(e){if(null!=e){if("string"==typeof e)return{type:"static",value:e};if(Array.isArray(e)){if(0===e.length)return;if(kt(e)){return{type:"routes",routes:e.map(e=>({match:jt(e.match),next:$t(e.next)}))}}return{type:"chain",value:e}}}}function xt(e,t={}){if(e){if("static"===e.type)return e.value;if("chain"===e.type)return e.value;for(const n of e.routes)if(n.match(t))return xt(n.next,t)}}function Ot(e,t){const n={ingest:e??{}};return void 0!==t&&(n.event=t),n}function St(e){return{full:e.full??!1,storeId:e.store,rules:e.rules.map(e=>({match:jt(e.match),key:e.key,ttl:e.ttl,update:e.update}))}}function Et(e,t,n,o){const r=e.rules.find(e=>e.match(n));if(!r)return null;const i=r.key.map(e=>String(ye(n,e)??""));if(i.every(e=>""===e))return null;const s=`${o}:${i.join(":")}`,a=t.get(s);return void 0!==a?{status:"HIT",key:s,value:a,rule:r}:{status:"MISS",key:s,rule:r}}function At(e,t,n,o){e.set(t,n,1e3*o)}async function _t(e,t,n,o){if(!t)return e;let r=e;for(const[e,i]of Object.entries(t)){r=be(r,e,await Ue(n,i,{collector:o}))}return r}function Ct(e){return 0===e.length?"// no output":e.map(Nt).join(";\n\n")}function Nt(e){const[t,...n]=e,o=n.map(Rt).join(", ");return"return"===t?o?`return ${o}`:"return":`${t}(${o})`}function Rt(e){return void 0===e?"undefined":null===e?"null":"function"==typeof e?"[Function]":JSON.stringify(e,null,2)}//# sourceMappingURL=index.js.map
1
+ "use strict";var e,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,o=Object.prototype.hasOwnProperty,a=(e,n)=>{for(var r in n)t(e,r,{get:n[r],enumerable:!0})},i={};a(i,{Cache:()=>s,Collector:()=>c,Const:()=>A,Context:()=>l,Destination:()=>u,ENV_MARKER_PREFIX:()=>q,Elb:()=>f,Hint:()=>S,Hooks:()=>p,Level:()=>m,Lifecycle:()=>k,Logger:()=>d,Mapping:()=>g,Matcher:()=>O,On:()=>y,REF_CODE_PREFIX:()=>W,REF_CONTRACT:()=>H,REF_ENV:()=>D,REF_FLOW:()=>U,REF_SECRET:()=>L,REF_STORE:()=>Z,REF_VAR_FULL:()=>z,REF_VAR_INLINE:()=>V,Request:()=>h,Simulation:()=>x,Source:()=>v,Store:()=>w,Transformer:()=>b,Trigger:()=>j,WalkerOS:()=>$,anonymizeIP:()=>C,applyUpdate:()=>_t,assign:()=>ne,branch:()=>_,buildCacheContext:()=>Ot,castToProperty:()=>ze,castValue:()=>ve,checkCache:()=>At,clone:()=>me,compileCache:()=>St,compileMatcher:()=>jt,compileNext:()=>$t,createDestination:()=>je,createEvent:()=>xe,createIngest:()=>E,createLogger:()=>Me,createMockContext:()=>Ke,createMockLogger:()=>qe,createRespond:()=>wt,debounce:()=>_e,deepMerge:()=>ke,defaultClickIds:()=>Ae,fetchPackage:()=>gt,fetchPackageSchema:()=>bt,filterValues:()=>Ie,flattenIncludeSections:()=>he,formatOut:()=>Ct,getBrowser:()=>rt,getBrowserVersion:()=>ot,getByPath:()=>ge,getDeviceType:()=>st,getEvent:()=>Oe,getFlowSettings:()=>Y,getGrantedConsent:()=>we,getHeaders:()=>Qe,getId:()=>Se,getMappingEvent:()=>He,getMappingValue:()=>Ue,getMarketingParameters:()=>Ee,getOS:()=>at,getOSVersion:()=>it,getPlatform:()=>ee,getSpanId:()=>$e,isArguments:()=>re,isArray:()=>oe,isBoolean:()=>ae,isCommand:()=>ie,isDefined:()=>se,isElementOrDocument:()=>ce,isFunction:()=>le,isNumber:()=>ue,isObject:()=>fe,isPropertyType:()=>Fe,isRouteArray:()=>kt,isSameType:()=>pe,isString:()=>de,mcpError:()=>vt,mcpResult:()=>ht,mergeContractSchemas:()=>T,mockEnv:()=>We,packageNameToVariable:()=>G,parseUserAgent:()=>nt,processEventMapping:()=>Le,requestToData:()=>Je,requestToParameter:()=>Xe,resolveContracts:()=>M,resolveNext:()=>xt,resolveSetup:()=>Ye,setByPath:()=>ye,storeCache:()=>Et,throttle:()=>Ce,throwError:()=>N,transformData:()=>Ge,traverseEnv:()=>Be,trim:()=>et,tryCatch:()=>Ve,tryCatchAsync:()=>De,useHooks:()=>tt,walkPath:()=>J,wrapCondition:()=>lt,wrapFn:()=>ut,wrapValidate:()=>ft}),module.exports=(e=i,((e,a,i,s)=>{if(a&&"object"==typeof a||"function"==typeof a)for(let c of r(a))o.call(e,c)||c===i||t(e,c,{get:()=>a[c],enumerable:!(s=n(a,c))||s.enumerable});return e})(t({},"__esModule",{value:!0}),e));var s={},c={},l={},u={},f={},p={},d={};a(d,{Level:()=>m});var m=(e=>(e[e.ERROR=0]="ERROR",e[e.WARN=1]="WARN",e[e.INFO=2]="INFO",e[e.DEBUG=3]="DEBUG",e))(m||{}),g={},y={},b={},h={},v={},w={},j={},k={},$={},x={},O={},S={},A={Utils:{Storage:{Local:"local",Session:"session",Cookie:"cookie"}}};function E(e){return{_meta:{hops:0,path:[e]}}}function _(e,t){return{event:e,next:t}}function C(e){return/^(?:\d{1,3}\.){3}\d{1,3}$/.test(e)?e.replace(/\.\d+$/,".0"):""}function N(e){throw new Error(String(e))}var R=["globals","context","custom","user","consent"],P=new Set(["description","examples","title","$comment"]);function M(e){const t={},n=new Set;function r(o){if(t[o])return t[o];n.has(o)&&N(`Circular extends chain detected: ${[...n,o].join(" → ")}`);const a=e[o];a||N(`Contract "${o}" not found`),n.add(o);let i={};if(a.extends){i=function(e,t){const n={};void 0===e.description&&void 0===t.description||(n.description=t.description??e.description);for(const r of R){const o=e[r],a=t[r];o&&a?n[r]=T(o,a):(o||a)&&(n[r]={...o||a})}if(e.events||t.events){const r={},o=new Set([...Object.keys(e.events||{}),...Object.keys(t.events||{})]);for(const n of o){const o=e.events?.[n]||{},a=t.events?.[n]||{},i=new Set([...Object.keys(o),...Object.keys(a)]);r[n]={};for(const e of i){const t=o[e],i=a[e];r[n][e]=t&&i?T(t,i):{...t||i}}}n.events=r}return n}(r(a.extends),a)}else i={...a};if(delete i.extends,i.events&&(i.events=function(e){const t={};for(const n of Object.keys(e))if("*"!==n){t[n]={};for(const r of Object.keys(e[n]||{})){let o={};const a=e["*"]?.["*"];a&&(o=T(o,a));const i=e["*"]?.[r];i&&"*"!==r&&(o=T(o,i));const s=e[n]?.["*"];s&&"*"!==r&&(o=T(o,s));const c=e[n]?.[r];c&&(o=T(o,c)),t[n][r]=o}}e["*"]&&(t["*"]={...e["*"]});return t}(i.events)),i.events){const e={};for(const[t,n]of Object.entries(i.events)){e[t]={};for(const[r,o]of Object.entries(n))e[t][r]=F(o)}i.events=e}return n.delete(o),t[o]=i,i}for(const t of Object.keys(e))r(t);return t}function T(e,t){const n={...e};for(const r of Object.keys(t)){const o=e[r],a=t[r];"required"===r&&Array.isArray(o)&&Array.isArray(a)?n[r]=[...new Set([...o,...a])]:I(o)&&I(a)?n[r]=T(o,a):n[r]=a}return n}function F(e){const t={};for(const[n,r]of Object.entries(e))P.has(n)||(null===r||"object"!=typeof r||Array.isArray(r)?t[n]=r:t[n]=F(r));return t}function I(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}var z=/^\$var\.([a-zA-Z_][a-zA-Z0-9_]*(?:\.[a-zA-Z_][a-zA-Z0-9_]*)*)$/,V=/\$var\.([a-zA-Z_][a-zA-Z0-9_]*(?:\.[a-zA-Z_][a-zA-Z0-9_]*)*)/g,D=/\$env\.([a-zA-Z_][a-zA-Z0-9_]*)(?::([^"}\s]*))?/g,H=/^\$contract\.([a-zA-Z_][a-zA-Z0-9_]*)(?:\.(.+))?$/,U=/^\$flow\.([a-zA-Z_][a-zA-Z0-9_]*)(?:\.([a-zA-Z0-9_.]+))?$/,Z=/^\$store\.([a-zA-Z_][a-zA-Z0-9_]*)$/,L=/^\$secret\.([A-Z0-9_]+)$/,W="$code:";function B(...e){const t={};for(const n of e)n&&Object.assign(t,n);return t}var q="__WALKEROS_ENV:";function K(e,t,n){const r=`$flow.${e}${t?`.${t}`:""}`;if("unknown-flow"===n)return`${r} cannot resolve: flow "${e}" does not exist in this config.`;return`${r} is empty. Set ${t?`flows.${e}.config.${t}`:`flows.${e}.config`}, or run \`walkeros deploy ${e}\` first.`}function J(e,t,n){const r=t.split(".");let o=e;for(let e=0;e<r.length;e++){const a=r[e];if(null==o||"object"!=typeof o){const o=r.slice(0,e).join(".");N(`Path "${t}" not found in "${n}": "${a}" does not exist${o?` in "${o}"`:""}`)}const i=o;if(!(a in i)){const o=r.slice(0,e).join(".");N(`Path "${t}" not found in "${n}": "${a}" does not exist${o?` in "${o}"`:""}`)}o=i[a]}return o}function X(e,t,n,r,o,a){if("string"==typeof e){const i=e.match(z);if(i){const e=i[1].split("."),s=e[0],c=e.slice(1).join(".");void 0===t[s]&&N(`Variable "${s}" not found`);const l=a??new Set;if(l.has(s)){N(`Cyclic $var reference: ${[...l,s].join(" -> ")}`)}let u;l.add(s);try{u=X(t[s],t,n,r,o,l)}finally{l.delete(s)}return c&&(u=J(u,c,`$var.${s}`)),u}const s=e.match(H);if(s&&r){const e=s[1],t=s[2];e in r||N(`Contract "${e}" not found`);let n=r[e];return t&&(n=J(n,t,`$contract.${e}`)),n}const c=e.match(U);if(c){const t=c[1],r=c[2],a=!1===n?.strictFlowRefs;o||N(`$flow.${t}${r?`.${r}`:""} cannot be resolved without a flow resolver`);const i=o(t);if(!i){if(a)return n?.onWarning?.(K(t,r,"unknown-flow")),e;N(`Flow "${t}" not found in $flow.${t}`)}let s=i;if(r)if(a){try{s=J(s,r,`$flow.${t}`)}catch{return n?.onWarning?.(K(t,r,"missing-key")),e}if(null==s||""===s)return n?.onWarning?.(K(t,r,"missing-key")),e}else s=J(s,r,`$flow.${t}`);return s}let l=e.replace(V,(e,i)=>{const s=i.split("."),c=s[0],l=s.slice(1).join(".");void 0===t[c]&&N(`Variable "${c}" not found`);const u=a??new Set;if(u.has(c)){N(`Cyclic $var reference: ${[...u,c].join(" -> ")}`)}let f;u.add(c);try{f=X(t[c],t,n,r,o,u)}finally{u.delete(c)}if(l&&(f=J(f,l,`$var.${c}`)),null===f||"string"!=typeof f&&"number"!=typeof f&&"boolean"!=typeof f){N(`Variable "${i}" resolves to non-scalar (${Array.isArray(f)?"array":typeof f}) and cannot be inlined into a string. Use it as a whole-string reference: "$var.${i}"`)}return String(f)});return l=l.replace(D,(e,t,r)=>n?.deferred?void 0!==r?`${q}${t}:${r}`:`${q}${t}`:"undefined"!=typeof process&&void 0!==process.env?.[t]?process.env[t]:void 0!==r?r:void N(`Environment variable "${t}" not found and no default provided`)),l}if(Array.isArray(e))return e.map(e=>X(e,t,n,r,o,a));if(null!==e&&"object"==typeof e){const i={};for(const[s,c]of Object.entries(e))i[s]=X(c,t,n,r,o,a);return i}return e}function G(e){const t=e.startsWith("@"),n=e.replace("@","").replace(/[/-]/g,"_").split("_").filter(e=>e.length>0).map((e,t)=>0===t?e:e.charAt(0).toUpperCase()+e.slice(1)).join("");return t?"_"+n:n}function Q(e,t,n){if(t)return t;if(!e||!n)return;return n[e]?G(e):void 0}function Y(e,t,n){const r=new Map,o=new Set,a=[],i=t=>{if(r.has(t))return r.get(t);const s=e.flows[t];if(s){if(o.has(t)){N(`Cyclic $flow reference: ${[...a,t].join(" -> ")}`)}o.add(t),a.push(t);try{const o=B(e.variables,s.variables),a=X(s.config??{},o,n,void 0,i);return r.set(t,a),a}finally{o.delete(t),a.pop()}}},s=Object.keys(e.flows);t||(1===s.length?t=s[0]:N(`Multiple flows found (${s.join(", ")}). Please specify a flow.`));const c=e.flows[t];c||N(`Flow "${t}" not found. Available: ${s.join(", ")}`),o.add(t),a.push(t);try{return function(e,t,n,r){const o=JSON.parse(JSON.stringify(t));let a;if(e.contract){const o=B(e.variables,t.variables);a=M(X(e.contract,o,n,void 0,r))}if(o.config){const i=B(e.variables,t.variables);o.config=X(o.config,i,n,a,r)}if(o.sources)for(const[i,s]of Object.entries(o.sources)){const c=B(e.variables,t.variables,s.variables),l=X(s.config,c,n,a,r),u=X(s.env,c,n,a,r),f=Q(s.package,s.code,o.config?.bundle?.packages),p="string"==typeof s.code||"object"==typeof s.code?s.code:void 0,d=f||p;o.sources[i]={package:s.package,config:l,env:u,primary:s.primary,variables:s.variables,before:s.before,next:s.next,cache:s.cache,code:d}}if(o.destinations)for(const[i,s]of Object.entries(o.destinations)){const c=B(e.variables,t.variables,s.variables),l=X(s.config,c,n,a,r),u=X(s.env,c,n,a,r),f=Q(s.package,s.code,o.config?.bundle?.packages),p="string"==typeof s.code||"object"==typeof s.code?s.code:void 0,d=f||p;o.destinations[i]={package:s.package,config:l,env:u,variables:s.variables,before:s.before,next:s.next,cache:s.cache,code:d}}if(o.stores)for(const[i,s]of Object.entries(o.stores)){const c=B(e.variables,t.variables,s.variables),l=X(s.config,c,n,a,r),u=X(s.env,c,n,a,r),f=Q(s.package,s.code,o.config?.bundle?.packages),p="string"==typeof s.code||"object"==typeof s.code?s.code:void 0,d=f||p;o.stores[i]={package:s.package,config:l,env:u,variables:s.variables,code:d}}if(o.transformers)for(const[i,s]of Object.entries(o.transformers)){const c=B(e.variables,t.variables,s.variables),l=X(s.config,c,n,a,r),u=X(s.env,c,n,a,r),f=Q(s.package,s.code,o.config?.bundle?.packages),p="string"==typeof s.code||"object"==typeof s.code?s.code:void 0,d=f||p;o.transformers[i]={package:s.package,config:l,env:u,variables:s.variables,before:s.before,next:s.next,cache:s.cache,code:d}}if(o.collector){const i=B(e.variables,t.variables),s=X(o.collector,i,n,a,r);o.collector=s}return o}(e,c,n,i)}finally{o.delete(t),a.pop()}}function ee(e){const t=e.config?.platform;if("web"===t||"server"===t)return t;N('Flow must have config.platform set to "web" or "server"')}var te={merge:!0,shallow:!0,extend:!0};function ne(e,t={},n={}){n={...te,...n};const r=Object.entries(t).reduce((t,[r,o])=>{const a=e[r];return n.merge&&Array.isArray(a)&&Array.isArray(o)?t[r]=o.reduce((e,t)=>e.includes(t)?e:[...e,t],[...a]):(n.extend||r in e)&&(t[r]=o),t},{});return n.shallow?{...e,...r}:(Object.assign(e,r),e)}function re(e){return"[object Arguments]"===Object.prototype.toString.call(e)}function oe(e){return Array.isArray(e)}function ae(e){return"boolean"==typeof e}function ie(e){return"walker"===e}function se(e){return void 0!==e}function ce(e){return!(!e||"object"!=typeof e)&&("body"in e||"tagName"in e)}function le(e){return"function"==typeof e}function ue(e){return"number"==typeof e&&!Number.isNaN(e)}function fe(e){return"object"==typeof e&&null!==e&&!oe(e)&&"[object Object]"===Object.prototype.toString.call(e)}function pe(e,t){return typeof e==typeof t}function de(e){return"string"==typeof e}function me(e,t=new WeakMap){if("object"!=typeof e||null===e)return e;if(t.has(e))return t.get(e);const n=Object.prototype.toString.call(e);if("[object Object]"===n){const n={};t.set(e,n);for(const r in e)Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=me(e[r],t));return n}if("[object Array]"===n){const n=[];return t.set(e,n),e.forEach(e=>{n.push(me(e,t))}),n}if("[object Date]"===n)return new Date(e.getTime());if("[object RegExp]"===n){const t=e;return new RegExp(t.source,t.flags)}return e}function ge(e,t="",n){const r=t.split(".");let o=e;for(let e=0;e<r.length;e++){const t=r[e];if("*"===t&&oe(o)){const t=r.slice(e+1).join("."),a=[];for(const e of o){const r=ge(e,t,n);a.push(r)}return a}if(o=o instanceof Object?o[t]:void 0,void 0===o)break}return se(o)?o:n}function ye(e,t,n){if(!fe(e))return e;const r=me(e),o=t.split(".");let a=r;for(let e=0;e<o.length;e++){const t=o[e];e===o.length-1?a[t]=n:(t in a&&"object"==typeof a[t]&&null!==a[t]||(a[t]={}),a=a[t])}return r}var be={data:e=>e.data,globals:e=>e.globals,context:e=>e.context,user:e=>e.user,source:e=>e.source,event:e=>({entity:e.entity,action:e.action,id:e.id,timestamp:e.timestamp,name:e.name,trigger:e.trigger,timing:e.timing})};function he(e,t){const n={},r=t.includes("all")?Object.keys(be):t;for(const t of r){const r=be[t];if(!r)continue;const o=r(e);if(fe(o))for(const[e,r]of Object.entries(o)){if(void 0===r)continue;const o="context"===t&&Array.isArray(r)?r[0]:r;n[`${t}_${e}`]=o}}return n}function ve(e){if("true"===e)return!0;if("false"===e)return!1;const t=Number(e);return e==t&&""!==e?t:String(e)}function we(e,t={},n={}){const r={...t,...n},o={};let a=!e||0===Object.keys(e).length;return Object.keys(r).forEach(t=>{r[t]&&(o[t]=!0,e&&e[t]&&(a=!0))}),!!a&&o}function je(e,t){const n={...e};return n.config=ne(e.config,t,{shallow:!0,merge:!0,extend:!0}),e.config.settings&&t.settings&&(n.config.settings=ne(e.config.settings,t.settings,{shallow:!0,merge:!0,extend:!0})),e.config.mapping&&t.mapping&&(n.config.mapping=ne(e.config.mapping,t.mapping,{shallow:!0,merge:!0,extend:!0})),n}function ke(e,t){if(!fe(t))return e;for(const n of Object.keys(t)){const r=t[n];void 0!==r&&(fe(r)&&fe(e[n])?ke(e[n],r):e[n]=r)}return e}function $e(){let e="";for(let t=0;t<16;t++)e+=(16*Math.random()|0).toString(16);return e}function xe(e={}){const t=e.timestamp||(new Date).setHours(0,13,37,0),n=ne({name:"entity action",data:{string:"foo",number:1,boolean:!0,array:[0,"text",!1],not:void 0},context:{dev:["test",1]},globals:{lang:"elb"},custom:{completely:"random"},user:{id:"us3r",device:"c00k13",session:"s3ss10n"},nested:[{entity:"child",data:{is:"subordinated"}}],consent:{functional:!0},id:e.id||$e(),trigger:"test",entity:"entity",action:"action",timestamp:t,timing:3.14,source:{type:"collector",schema:"4"}},e,{merge:!1});if(e.name){const[t,r]=e.name.split(" ")??[];t&&r&&(n.entity=t,n.action=r)}return n}function Oe(e="entity action",t={}){const n=t.timestamp||(new Date).setHours(0,13,37,0),r={data:{id:"ers",name:"Everyday Ruck Snack",color:"black",size:"l",price:420}},o={data:{id:"cc",name:"Cool Cap",size:"one size",price:42}};return xe({...{"cart view":{data:{currency:"EUR",value:2*r.data.price},context:{shopping:["cart",0]},globals:{pagegroup:"shop"},nested:[{entity:"product",data:{...r.data,quantity:2},context:{shopping:["cart",0]},nested:[]}],trigger:"load"},"checkout view":{data:{step:"payment",currency:"EUR",value:r.data.price+o.data.price},context:{shopping:["checkout",0]},globals:{pagegroup:"shop"},nested:[{entity:"product",...r,context:{shopping:["checkout",0]},nested:[]},{entity:"product",...o,context:{shopping:["checkout",0]},nested:[]}],trigger:"load"},"order complete":{data:{id:"0rd3r1d",currency:"EUR",shipping:5.22,taxes:73.76,total:555},context:{shopping:["complete",0]},globals:{pagegroup:"shop"},nested:[{entity:"product",...r,context:{shopping:["complete",0]},nested:[]},{entity:"product",...o,context:{shopping:["complete",0]},nested:[]},{entity:"gift",data:{name:"Surprise"},context:{shopping:["complete",0]},nested:[]}],trigger:"load"},"page view":{data:{domain:"www.example.com",title:"walkerOS documentation",referrer:"https://www.walkeros.io/",search:"?foo=bar",hash:"#hash",id:"/docs/"},globals:{pagegroup:"docs"},trigger:"load"},"product add":{...r,context:{shopping:["intent",0]},globals:{pagegroup:"shop"},nested:[],trigger:"click"},"product view":{...r,context:{shopping:["detail",0]},globals:{pagegroup:"shop"},nested:[],trigger:"load"},"product visible":{data:{...r.data,position:3,promo:!0},context:{shopping:["discover",0]},globals:{pagegroup:"shop"},nested:[],trigger:"load"},"promotion visible":{data:{name:"Setting up tracking easily",position:"hero"},context:{ab_test:["engagement",0]},globals:{pagegroup:"homepage"},trigger:"visible"},"session start":{data:{id:"s3ss10n",start:n,isNew:!0,count:1,runs:1,isStart:!0,storage:!0,referrer:"",device:"c00k13"},user:{id:"us3r",device:"c00k13",session:"s3ss10n",hash:"h4sh",address:"street number",email:"user@example.com",phone:"+49 123 456 789",userAgent:"Mozilla...",browser:"Chrome",browserVersion:"90",deviceType:"desktop",language:"de-DE",country:"DE",region:"HH",city:"Hamburg",zip:"20354",timezone:"Berlin",os:"walkerOS",osVersion:"1.0",screenSize:"1337x420",ip:"127.0.0.0",internal:!0,custom:"value"}}}[e],...t,name:e})}function Se(e=6,t){if(t){const n=t.length;let r="";for(let o=0;o<e;o++)r+=t[Math.random()*n|0];return r}let n="";for(let t=36;n.length<e;)n+=(Math.random()*t|0).toString(t);return n}var Ae=[{param:"gclid",platform:"google"},{param:"wbraid",platform:"google"},{param:"gbraid",platform:"google"},{param:"dclid",platform:"google"},{param:"gclsrc",platform:"google"},{param:"fbclid",platform:"meta"},{param:"igshid",platform:"meta"},{param:"msclkid",platform:"microsoft"},{param:"ttclid",platform:"tiktok"},{param:"twclid",platform:"twitter"},{param:"li_fat_id",platform:"linkedin"},{param:"epik",platform:"pinterest"},{param:"sclid",platform:"snapchat"},{param:"sccid",platform:"snapchat"},{param:"rdt_cid",platform:"reddit"},{param:"qclid",platform:"quora"},{param:"yclid",platform:"yandex"},{param:"ymclid",platform:"yandex"},{param:"ysclid",platform:"yandex"},{param:"dicbo",platform:"outbrain"},{param:"obclid",platform:"outbrain"},{param:"tblci",platform:"taboola"},{param:"mc_cid",platform:"mailchimp"},{param:"mc_eid",platform:"mailchimp"},{param:"_kx",platform:"klaviyo"},{param:"_hsenc",platform:"hubspot"},{param:"_hsmi",platform:"hubspot"},{param:"s_kwcid",platform:"adobe"},{param:"ef_id",platform:"adobe"},{param:"mkt_tok",platform:"adobe"},{param:"irclickid",platform:"impact"},{param:"cjevent",platform:"cj"},{param:"_branch_match_id",platform:"branch"}];function Ee(e,t={},n=[]){const r={};Object.entries(ne({utm_campaign:"campaign",utm_content:"content",utm_medium:"medium",utm_source:"source",utm_term:"term"},t)).forEach(([t,n])=>{const o=e.searchParams.get(t);o&&(r[n]=o)});const o=n.length?function(e){const t=new Map(e.map(e=>[e.param,e.platform])),n=new Set(Ae.map(e=>e.param));return[...Ae.map(e=>t.has(e.param)?{param:e.param,platform:t.get(e.param)}:e),...e.filter(e=>!n.has(e.param))]}(n):Ae,a=new Map;e.searchParams.forEach((e,t)=>{e&&a.set(t.toLowerCase(),e)});for(const e of o){const t=a.get(e.param);t&&(r[e.param]=t,r.clickId||(r.clickId=e.param,r.platform=e.platform))}return r}function _e(e,t=1e3,n=!1){let r,o=null,a=!1;return(...i)=>new Promise(s=>{const c=n&&!a;o&&clearTimeout(o),o=setTimeout(()=>{o=null,n&&!a||(r=e(...i),s(r))},t),c&&(a=!0,r=e(...i),s(r))})}function Ce(e,t=1e3){let n=null;return function(...r){if(null===n)return n=setTimeout(()=>{n=null},t),e(...r)}}function Ne(e){return{message:e.message,name:e.name,stack:e.stack,cause:e.cause}}function Re(e,t){let n,r={};return e instanceof Error?(n=e.message,r.error=Ne(e)):n=e,void 0!==t&&(t instanceof Error?r.error=Ne(t):"object"==typeof t&&null!==t?(r={...r,...t},"error"in r&&r.error instanceof Error&&(r.error=Ne(r.error))):r.value=t),{message:n,context:r}}var Pe=(e,t,n,r)=>{const o=`${m[e]}${r.length>0?` [${r.join(":")}]`:""}`,a=Object.keys(n).length>0,i=0===e?console.error:1===e?console.warn:console.log;a?i(o,t,n):i(o,t)};function Me(e={}){return Te({level:void 0!==e.level?function(e){return"string"==typeof e?m[e]:e}(e.level):0,handler:e.handler,jsonHandler:e.jsonHandler,scope:[]})}function Te(e){const{level:t,handler:n,jsonHandler:r,scope:o}=e,a=(e,r,a)=>{if(e<=t){const t=Re(r,a);n?n(e,t.message,t.context,o,Pe):Pe(e,t.message,t.context,o)}};return{error:(e,t)=>a(0,e,t),warn:(e,t)=>a(1,e,t),info:(e,t)=>a(2,e,t),debug:(e,t)=>a(3,e,t),throw:(e,t)=>{const r=Re(e,t);throw n?n(0,r.message,r.context,o,Pe):Pe(0,r.message,r.context,o),new Error(r.message)},json:e=>{r?r(e):console.log(JSON.stringify(e,null,2))},scope:e=>Te({level:t,handler:n,jsonHandler:r,scope:[...o,e]})}}function Fe(e){return ae(e)||de(e)||ue(e)||!se(e)||oe(e)&&e.every(Fe)||fe(e)&&Object.values(e).every(Fe)}function Ie(e){return ae(e)||de(e)||ue(e)?e:re(e)?Ie(Array.from(e)):oe(e)?e.map(e=>Ie(e)).filter(e=>void 0!==e):fe(e)?Object.entries(e).reduce((e,[t,n])=>{const r=Ie(n);return void 0!==r&&(e[t]=r),e},{}):void 0}function ze(e){return Fe(e)?e:void 0}function Ve(e,t,n){return function(...r){try{return e(...r)}catch(e){if(!t)return;return t(e)}finally{n?.()}}}function De(e,t,n){return async function(...r){try{return await e(...r)}catch(e){if(!t)return;return await t(e)}finally{await(n?.())}}}async function He(e,t,n){const[r,o]=(e.name||"").split(" ");if(!t||!r||!o)return{};let a,i="",s=r,c=o;const l=t=>{if(!t)return;return(oe(t)?t:[t]).find(t=>{if(!t.condition)return!0;if(!n)return Boolean(t.condition(e,void 0));const r={event:e,mapping:t,collector:n,logger:n.logger,consent:fe(e)&&e.consent||n.consent};return Boolean(t.condition(e,r))})};t[s]||(s="*");const u=t[s];return u&&(u[c]||(c="*"),a=l(u[c])),a||(s="*",c="*",a=l(t[s]?.[c])),a&&(i=`${s} ${c}`),{eventMapping:a,mappingKey:i}}async function Ue(e,t={},n={}){if(!se(e))return;const r=fe(e)&&e.consent||n.consent||n.collector?.consent,o=n.event??(fe(e)?e:{});if(!n.collector)throw new Error("getMappingValue: context.collector is required");const a={event:o,mapping:t,collector:n.collector,logger:n.collector.logger,consent:r},i=oe(t)?t:[t];for(const t of i){const n=await De(Ze)(e,t,{...a,mapping:t});if(se(n))return n}}async function Ze(e,t,n){return(oe(t)?t:[t]).reduce(async(t,r)=>{const o=await t;if(o)return o;const a=de(r)?{key:r}:r;if(!Object.keys(a).length)return;const{condition:i,consent:s,fn:c,key:l,loop:u,map:f,set:p,validate:d,value:m}=a,g={...n,mapping:r};if(i&&!await De(i)(e,g))return;if(s&&!we(s,g.consent))return m;let y=se(m)?m:e;if(c&&(y=await De(c)(e,g)),l&&(y=ge(e,l,m)),u){const[t,n]=u,r="this"===t?[e]:await Ue(e,t,g);oe(r)&&(y=(await Promise.all(r.map(e=>Ue(e,n,g)))).filter(se))}else f?y=await Object.entries(f).reduce(async(t,[n,r])=>{const o=await t,a=await Ue(e,r,g);return se(a)&&(o[n]=a),o},Promise.resolve({})):p&&(y=await Promise.all(p.map(t=>Ze(e,t,g))));d&&!await De(d)(y,g)&&(y=void 0);const b=ze(y);return se(b)?b:ze(m)},Promise.resolve(void 0))}async function Le(e,t,n){t.policy&&await Promise.all(Object.entries(t.policy).map(async([t,r])=>{const o=await Ue(e,r,{collector:n,event:e});e=ye(e,t,o)}));const{eventMapping:r,mappingKey:o}=await He(e,t.mapping,n);r?.policy&&await Promise.all(Object.entries(r.policy).map(async([t,r])=>{const o=await Ue(e,r,{collector:n,event:e});e=ye(e,t,o)}));let a=t.data&&await Ue(e,t.data,{collector:n,event:e});const i=Boolean(r?.silent);if(r){if(r.ignore)return{event:e,data:a,mapping:r,mappingKey:o,ignore:!0,silent:i};if(r.name&&(e.name=r.name),r.data){const t=r.data&&await Ue(e,r.data,{collector:n,event:e});a=fe(a)&&fe(t)?ne(a,t):t}}const s=r?.include??t.include;if(s&&s.length>0){const t=he(e,s);Object.keys(t).length>0&&(a=fe(a)?ne(t,a):a??t)}return{event:e,data:a,mapping:r,mappingKey:o,ignore:!1,silent:i}}function We(e,t){const n=(e,r=[])=>new Proxy(e,{get(e,o){const a=e[o],i=[...r,o];return"function"==typeof a?a.prototype&&a.prototype.constructor===a?a:(...e)=>{const r=t(i,e,a);if(r&&"object"==typeof r)return n(r,i);const o=a(...e);return o&&"object"==typeof o?n(o,i):r}:a&&"object"==typeof a?n(a,i):a}});return n(e)}function Be(e,t){const n=(e,r=[])=>{if(!e||"object"!=typeof e)return e;const o=Array.isArray(e)?[]:{};for(const[a,i]of Object.entries(e)){const e=[...r,a];Array.isArray(o)?o[Number(a)]=t(i,e):o[a]=t(i,e),i&&"object"==typeof i&&"function"!=typeof i&&(Array.isArray(o)?o[Number(a)]=n(i,e):o[a]=n(i,e))}return o};return n(e)}function qe(){const e=[],t=jest.fn(e=>{const t=e instanceof Error?e.message:e;throw new Error(t)}),n=jest.fn(t=>{const n=qe();return e.push(n),n});return{error:jest.fn(),warn:jest.fn(),info:jest.fn(),debug:jest.fn(),throw:t,json:jest.fn(),scope:n,scopedLoggers:e}}function Ke(e={}){return{collector:{},config:{},env:{},logger:qe(),id:"test",ingest:E("test"),...e}}function Je(e){const t=String(e),n=t.split("?")[1]||t;return Ve(()=>{const e=new URLSearchParams(n),t={};return e.forEach((e,n)=>{const r=n.split(/[[\]]+/).filter(Boolean);let o=t;r.forEach((t,n)=>{const a=n===r.length-1;if(oe(o)){const i=parseInt(t,10);a?o[i]=ve(e):(o[i]=o[i]||(isNaN(parseInt(r[n+1],10))?{}:[]),o=o[i])}else fe(o)&&(a?o[t]=ve(e):(o[t]=o[t]||(isNaN(parseInt(r[n+1],10))?{}:[]),o=o[t]))})}),t})()}function Xe(e){if(!e)return"";const t=[],n=encodeURIComponent;function r(e,o){null!=o&&(oe(o)?o.forEach((t,n)=>r(`${e}[${n}]`,t)):fe(o)?Object.entries(o).forEach(([t,n])=>r(`${e}[${t}]`,n)):t.push(`${n(e)}=${n(String(o))}`))}return"object"!=typeof e?n(e):(Object.entries(e).forEach(([e,t])=>r(e,t)),t.join("&"))}function Ge(e){return void 0===e||pe(e,"")?e:JSON.stringify(e)}function Qe(e={}){return ne({"Content-Type":"application/json; charset=utf-8"},e)}function Ye(e,t){return!1===e||void 0===e?null:!0===e?t:{...t,...e}}function et(e){return e?e.trim().replace(/^'|'$/g,"").trim():""}function tt(e,t,n,r){return function(...o){let a;const i="pre"+t,s="post"+t,c=n[i],l=n[s],u=(e,t)=>{r?r.warn(e,{error:t}):console.warn(e,t)};if(c)try{a=c({fn:e},...o)}catch(t){u(`Hook ${String(i)} failed, falling back to original function`,t),a=e(...o)}else a=e(...o);if(l)try{a=l({fn:e,result:a},...o)}catch(e){u(`Hook ${String(s)} failed, keeping original result`,e)}return a}}function nt(e){return e?{userAgent:e,browser:rt(e),browserVersion:ot(e),os:at(e),osVersion:it(e),deviceType:st(e)}:{}}function rt(e){const t=[{name:"Edge",substr:"Edg"},{name:"Chrome",substr:"Chrome"},{name:"Safari",substr:"Safari",exclude:"Chrome"},{name:"Firefox",substr:"Firefox"},{name:"IE",substr:"MSIE"},{name:"IE",substr:"Trident"}];for(const n of t)if(e.includes(n.substr)&&(!n.exclude||!e.includes(n.exclude)))return n.name}function ot(e){const t=[/Edg\/([0-9]+)/,/Chrome\/([0-9]+)/,/Version\/([0-9]+).*Safari/,/Firefox\/([0-9]+)/,/MSIE ([0-9]+)/,/rv:([0-9]+).*Trident/];for(const n of t){const t=e.match(n);if(t)return t[1]}}function at(e){const t=[{name:"Windows",substr:"Windows NT"},{name:"macOS",substr:"Mac OS X"},{name:"Android",substr:"Android"},{name:"iOS",substr:"iPhone OS"},{name:"Linux",substr:"Linux"}];for(const n of t)if(e.includes(n.substr))return n.name}function it(e){const t=e.match(/(?:Windows NT|Mac OS X|Android|iPhone OS) ([0-9._]+)/);return t?t[1].replace(/_/g,"."):void 0}function st(e){let t="Desktop";return/Tablet|iPad/i.test(e)?t="Tablet":/Mobi|Android|iPhone|iPod|BlackBerry|Opera Mini|IEMobile|WPDesktop/i.test(e)&&(t="Mobile"),t}function ct(e){return function(e){return/\breturn\b/.test(e)}(e)?e:`return ${e}`}function lt(e){const t=ct(e);return new Function("value","context",t)}function ut(e){const t=ct(e);return new Function("value","context",t)}function ft(e){const t=ct(e);return new Function("value","context",t)}var pt="https://cdn.jsdelivr.net/npm",dt="dist/walkerOS.json";function mt(e){return"string"==typeof e||Array.isArray(e)&&e.every(e=>"string"==typeof e)?e:void 0}async function gt(e,t){const n=t?.version||"latest",r=t?.timeout||1e4,o=new AbortController,a=setTimeout(()=>o.abort(),r),i=o.signal,s=t?.client?{"X-Walkeros-Client":t.client}:void 0;try{if(t?.baseUrl){const r=`${t.baseUrl}/api/packages/${encodeURIComponent(e)}?version=${encodeURIComponent(n)}&expand=all`,o=await fetch(r,{signal:i,...s&&{headers:s}});if(!o.ok)throw new Error(`Failed to fetch ${r} (HTTP ${o.status})`);return function(e,t,n){const r=n.schemas||{},o=n.examples||{},a=n.hints,i=n.hintKeys??(a?Object.keys(a):[]),s=n.exampleSummaries??[],c=n.platform;return{packageName:n.package||e,version:"string"==typeof n.version?n.version:t,...void 0!==n.description&&{description:n.description},...void 0!==n.type&&{type:n.type},...void 0!==c&&{platform:c},schemas:r,examples:o,...void 0!==n.docs&&{docs:n.docs},...void 0!==n.source&&{source:n.source},...a&&Object.keys(a).length>0?{hints:a}:{},hintKeys:i,exampleSummaries:s}}(e,n,await o.json())}const r=`${pt}/${e}@${n}`,o=await yt(`${r}/package.json`,i,s);return function(e,t,n,r){const o=r.$meta||{},a=r.schemas||{},i=r.examples||{},s=r.hints,c=s?Object.keys(s):[],l=[],u=i.step||{};for(const[e,t]of Object.entries(u)){const n=t,r={name:e};"string"==typeof n?.description&&(r.description=n.description),l.push(r)}const f="string"==typeof o.docs?o.docs:void 0,p="string"==typeof o.source?o.source:void 0;return{packageName:e,version:"string"==typeof n.version?n.version:t,description:"string"==typeof n.description?n.description:void 0,type:"string"==typeof o.type?o.type:void 0,platform:mt(o.platform),schemas:a,examples:i,...f?{docs:f}:{},...p?{source:p}:{},...s&&Object.keys(s).length>0?{hints:s}:{},hintKeys:c,exampleSummaries:l}}(e,n,o,await yt(`${r}/${dt}`,i,s))}finally{clearTimeout(a)}}async function yt(e,t,n){const r=await fetch(e,{signal:t,...n&&{headers:n}});if(!r.ok)throw new Error(`Failed to fetch ${e} (HTTP ${r.status})`);return await r.json()}async function bt(e,t){const n=await gt(e,t);return{packageName:n.packageName,version:n.version,type:n.type,platform:n.platform,schemas:n.schemas,examples:n.examples,...n.hints?{hints:n.hints}:{}}}function ht(e,t){const n=t?{...e,_hints:t}:e;return{content:[{type:"text",text:JSON.stringify(n,null,2)}],structuredContent:n}}function vt(e,t){let n,r,o,a;if(e instanceof Error){n=e.message;const t=e;t.code&&(o=t.code),Array.isArray(t.details)&&(a=t.details)}else if("string"==typeof e)n=e;else if(e&&"object"==typeof e&&"issues"in e&&Array.isArray(e.issues)){const t=e.issues;n=t.map(e=>e.message).join("; "),r=t[0]?.path?.join(".")||void 0}else n=e&&"object"==typeof e&&"message"in e?String(e.message):"Unknown error";const i={error:n};return t&&(i.hint=t),r&&(i.path=r),o&&(i.code=o),a&&(i.details=a),{content:[{type:"text",text:JSON.stringify(i)}],structuredContent:i,isError:!0}}function wt(e){let t=!1;return(n={})=>{t||(t=!0,e(n))}}function jt(e){if("*"===e)return()=>!0;if("and"in e){const t=e.and.map(jt);return e=>t.every(t=>t(e))}if("or"in e){const t=e.or.map(jt);return e=>t.some(t=>t(e))}return function(e){const{key:t,operator:n,value:r,not:o}=e,a=function(e,t){switch(e){case"eq":return e=>String(e??"")===t;case"contains":return e=>String(e??"").includes(t);case"prefix":return e=>String(e??"").startsWith(t);case"suffix":return e=>String(e??"").endsWith(t);case"regex":{const e=new RegExp(t);return t=>e.test(String(t??""))}case"gt":{const e=Number(t);return t=>Number(t)>e}case"lt":{const e=Number(t);return t=>Number(t)<e}case"exists":return e=>null!=e}}(n,r);return e=>{const n=ge(e,t),r=a(n);return o?!r:r}}(e)}function kt(e){return Array.isArray(e)&&e.length>0&&"object"==typeof e[0]&&null!==e[0]&&"match"in e[0]}function $t(e){if(null!=e){if("string"==typeof e)return{type:"static",value:e};if(Array.isArray(e)){if(0===e.length)return;if(kt(e)){return{type:"routes",routes:e.map(e=>({match:jt(e.match),next:$t(e.next)}))}}return{type:"chain",value:e}}}}function xt(e,t={}){if(e){if("static"===e.type)return e.value;if("chain"===e.type)return e.value;for(const n of e.routes)if(n.match(t))return xt(n.next,t)}}function Ot(e,t){const n={ingest:e??{}};return void 0!==t&&(n.event=t),n}function St(e){return{full:e.full??!1,storeId:e.store,rules:e.rules.map(e=>({match:jt(e.match),key:e.key,ttl:e.ttl,update:e.update}))}}function At(e,t,n,r){const o=e.rules.find(e=>e.match(n));if(!o)return null;const a=o.key.map(e=>String(ge(n,e)??""));if(a.every(e=>""===e))return null;const i=`${r}:${a.join(":")}`,s=t.get(i);return void 0!==s?{status:"HIT",key:i,value:s,rule:o}:{status:"MISS",key:i,rule:o}}function Et(e,t,n,r){e.set(t,n,1e3*r)}async function _t(e,t,n,r){if(!t)return e;let o=e;for(const[e,a]of Object.entries(t)){o=ye(o,e,await Ue(n,a,{collector:r}))}return o}function Ct(e){return 0===e.length?"// no output":e.map(Nt).join(";\n\n")}function Nt(e){const[t,...n]=e,r=n.map(Rt).join(", ");return"return"===t?r?`return ${r}`:"return":`${t}(${r})`}function Rt(e){return void 0===e?"undefined":null===e?"null":"function"==typeof e?"[Function]":JSON.stringify(e,null,2)}//# sourceMappingURL=index.js.map