@walkeros/web-destination-segment 3.3.0-next-1776098542393

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.
@@ -0,0 +1,234 @@
1
+ import { Mapping, Flow } from '@walkeros/core';
2
+ import { DestinationWeb } from '@walkeros/web-core';
3
+ import { AnalyticsBrowserSettings, InitOptions } from '@segment/analytics-next';
4
+
5
+ /**
6
+ * Destination-level settings.
7
+ *
8
+ * Extends Segment's `InitOptions` (minus the `group` key which clashes with
9
+ * walkerOS's own `group` mapping) so every passthrough option (cookie,
10
+ * storage, integrations, plan, etc.) keeps IntelliSense intact. walkerOS
11
+ * adds:
12
+ * - `apiKey` (required) — maps to `writeKey` in `AnalyticsBrowser.load()`
13
+ * - `identify` — destination-level identity mapping (Segment `identify()`)
14
+ * - `group` — destination-level group mapping (Segment `group()`)
15
+ * - `include` — event sections flattened into track `properties`
16
+ * - `consent` — walkerOS consent key → Segment category name mapping
17
+ * - `_state` — runtime state (not user-facing, mutated by init/push)
18
+ */
19
+ interface Settings extends Omit<InitOptions, 'group'> {
20
+ /** Segment write key. Maps to `writeKey` in the load() settings arg. */
21
+ apiKey: string;
22
+ /** walkerOS mapping value resolving to an identity object (userId, traits, anonymousId). */
23
+ identify?: Mapping.Value;
24
+ /** walkerOS mapping value resolving to a group object (groupId, traits). */
25
+ group?: Mapping.Value;
26
+ /**
27
+ * Mapping from walkerOS consent keys → Segment `categoryPreferences` keys.
28
+ * Example: { marketing: "Advertising", analytics: "Analytics" }
29
+ * If omitted, walkerOS keys are forwarded 1:1.
30
+ */
31
+ consent?: Record<string, string>;
32
+ /** Runtime state — populated by init() and mutated by push(). Not user-facing. */
33
+ _state?: RuntimeState;
34
+ }
35
+ interface RuntimeState {
36
+ /** Last-set identity values, used to skip redundant identify() calls. */
37
+ lastIdentity?: {
38
+ userId?: string;
39
+ anonymousId?: string;
40
+ traitsHash?: string;
41
+ };
42
+ /** Last-set group assignment, used to skip redundant group() calls. */
43
+ lastGroup?: {
44
+ groupId?: string;
45
+ traitsHash?: string;
46
+ };
47
+ /** Holds the AnalyticsBrowser instance created in init(). */
48
+ analytics?: SegmentAnalytics;
49
+ /** True once load() has been called (may be deferred pending consent). */
50
+ loaded?: boolean;
51
+ }
52
+ /**
53
+ * Segment SDK surface — the subset of @segment/analytics-next the
54
+ * destination actually uses. Mirrors the AnalyticsBrowser instance shape
55
+ * so tests can mock each method individually via env.analytics.
56
+ */
57
+ interface SegmentAnalytics {
58
+ track: (event: string, properties?: Record<string, unknown>, options?: SegmentEventOptions) => Promise<unknown> | void;
59
+ identify: (userId?: string | Record<string, unknown>, traits?: Record<string, unknown>, options?: SegmentEventOptions) => Promise<unknown> | void;
60
+ group: (groupId: string, traits?: Record<string, unknown>, options?: SegmentEventOptions) => Promise<unknown> | void;
61
+ page: (category?: string | null, name?: string | null, properties?: Record<string, unknown>, options?: SegmentEventOptions) => Promise<unknown> | void;
62
+ alias: (to: string, from?: string, options?: SegmentEventOptions) => Promise<unknown> | void;
63
+ reset: () => Promise<unknown> | void;
64
+ setAnonymousId: (id: string) => Promise<unknown> | void;
65
+ }
66
+ /**
67
+ * Segment event options — the fourth argument to track/identify/group/page
68
+ * that carries context and integration overrides. The destination uses
69
+ * this to stamp consent context on every event.
70
+ */
71
+ interface SegmentEventOptions {
72
+ context?: {
73
+ consent?: {
74
+ categoryPreferences?: Record<string, boolean>;
75
+ };
76
+ [key: string]: unknown;
77
+ };
78
+ integrations?: Record<string, boolean | Record<string, unknown>>;
79
+ }
80
+ /**
81
+ * The module namespace used for `env?.analytics ?? realSegment`.
82
+ * AnalyticsBrowser is the class; tests mock with a factory that returns
83
+ * an object matching SegmentAnalytics.
84
+ *
85
+ * Task 1 verified: `AnalyticsBrowser.load(settings, options)` returns an
86
+ * `AnalyticsBrowser` instance **synchronously**. The instance buffers
87
+ * method calls until the internal load promise resolves.
88
+ */
89
+ interface SegmentSDK {
90
+ load: (settings: AnalyticsBrowserSettings, options?: InitOptions) => SegmentAnalytics;
91
+ }
92
+ /**
93
+ * Env — optional SDK override. Production leaves this undefined and the
94
+ * destination falls back to the real @segment/analytics-next module.
95
+ * Tests provide a mock via env.analytics = { ... }.
96
+ */
97
+ interface Env extends DestinationWeb.Env {
98
+ analytics?: SegmentSDK;
99
+ }
100
+
101
+ declare const init: Env | undefined;
102
+ declare const push: Env;
103
+ /** Simulation tracking paths for CLI --simulate. */
104
+ declare const simulation: string[];
105
+
106
+ declare const env_init: typeof init;
107
+ declare const env_push: typeof push;
108
+ declare const env_simulation: typeof simulation;
109
+ declare namespace env {
110
+ export { env_init as init, env_push as push, env_simulation as simulation };
111
+ }
112
+
113
+ /**
114
+ * Examples may optionally carry destination-level settings.
115
+ * The test runner merges this on top of a base { apiKey: 'test-project' }.
116
+ */
117
+ type SegmentStepExample = Flow.StepExample & {
118
+ settings?: Partial<Settings>;
119
+ configInclude?: string[];
120
+ };
121
+ /**
122
+ * Default event forwarding — every walkerOS event becomes
123
+ * analytics.track(event.name, properties). With no mapping and no
124
+ * destination-level include, properties is `{}`.
125
+ */
126
+ declare const defaultEventForwarding: SegmentStepExample;
127
+ /**
128
+ * Wildcard ignore — walkerOS's standard way to drop events. The rule
129
+ * matches but does nothing. The destination fires zero SDK calls.
130
+ */
131
+ declare const wildcardIgnored: SegmentStepExample;
132
+ /**
133
+ * Destination-level settings.include flattens the walkerOS `data` section
134
+ * into prefixed properties on every push.
135
+ */
136
+ declare const destinationLevelInclude: SegmentStepExample;
137
+ /**
138
+ * Per-rule settings.include REPLACES destination-level include for the
139
+ * matched rule. Here destination-level sends `data`, but the rule
140
+ * overrides it with `globals` only.
141
+ */
142
+ declare const ruleIncludeReplaces: SegmentStepExample;
143
+ /**
144
+ * Destination-level settings.identify fires on the first push. The
145
+ * destination resolves the mapping, calls analytics.identify(userId),
146
+ * and records the value in runtime state. Subsequent pushes with the
147
+ * same userId do NOT re-fire identify().
148
+ */
149
+ declare const destinationLevelIdentify: SegmentStepExample;
150
+ /**
151
+ * Per-event identify with traits — the canonical "user login" pattern.
152
+ * skip: true suppresses the default analytics.track() call because we're
153
+ * running identity side effects only. Matches Segment Spec reserved traits
154
+ * (email, name, plan, company) so downstream destinations recognize them.
155
+ */
156
+ declare const userLoginIdentify: SegmentStepExample;
157
+ /**
158
+ * Profile update — omit userId. Segment's SDK uses the currently stored
159
+ * userId and merges the traits into the existing trait set.
160
+ */
161
+ declare const profileUpdateTraitsOnly: SegmentStepExample;
162
+ /**
163
+ * User logout — reset: true fires analytics.reset(), which clears userId,
164
+ * anonymousId, traits, and generates a new anonymous ID.
165
+ * skip: true because we're only running the reset side effect.
166
+ */
167
+ declare const userLogoutReset: SegmentStepExample;
168
+ /**
169
+ * Per-event group assignment — company update event attaches the user
170
+ * to a company and sets the company's traits in one call.
171
+ */
172
+ declare const companyUpdateGroup: SegmentStepExample;
173
+ /**
174
+ * Explicit page() call — the canonical Segment pattern for page views.
175
+ * skip: true suppresses the default track() call; settings.page fires
176
+ * analytics.page(category, name, properties) instead.
177
+ */
178
+ declare const pageViewAsPage: SegmentStepExample;
179
+ /**
180
+ * Minimal page() call — settings.page: true produces an empty
181
+ * analytics.page() relying entirely on SDK auto-collection.
182
+ */
183
+ declare const pageViewMinimal: SegmentStepExample;
184
+ /**
185
+ * Segment ecommerce spec — Order Completed event. One track() call with
186
+ * a products array. Uses mapping.name to produce the Segment Spec name
187
+ * and mapping.data to build the properties object including the nested
188
+ * products loop. The loop filters via condition to products with prices.
189
+ */
190
+ declare const orderCompletedEcommerce: SegmentStepExample;
191
+ /**
192
+ * Consent context forwarding — when the event has consent state,
193
+ * the destination automatically stamps every track/identify/group/page
194
+ * call with context.consent.categoryPreferences. settings.consent
195
+ * remaps walkerOS keys to Segment category names.
196
+ */
197
+ declare const consentContextForwarded: SegmentStepExample;
198
+ /**
199
+ * Consent granted → deferred load fires for the first time. The
200
+ * destination was initialized with consent requirement; on the walker
201
+ * consent command it calls analytics.load(writeKey, initOptions).
202
+ *
203
+ * Uses the canonical StepExample.command='consent' pattern. The full
204
+ * call shape includes both the settings arg and the initOptions arg.
205
+ */
206
+ declare const consentGrantDeferredLoad: SegmentStepExample;
207
+ /**
208
+ * Consent revoked → no SDK call. The walkerOS consent gate handles
209
+ * blocking subsequent events. The destination's on('consent') handler
210
+ * is a no-op on revocation (Segment has no opt-out method).
211
+ */
212
+ declare const consentRevokeNoOp: SegmentStepExample;
213
+
214
+ type step_SegmentStepExample = SegmentStepExample;
215
+ declare const step_companyUpdateGroup: typeof companyUpdateGroup;
216
+ declare const step_consentContextForwarded: typeof consentContextForwarded;
217
+ declare const step_consentGrantDeferredLoad: typeof consentGrantDeferredLoad;
218
+ declare const step_consentRevokeNoOp: typeof consentRevokeNoOp;
219
+ declare const step_defaultEventForwarding: typeof defaultEventForwarding;
220
+ declare const step_destinationLevelIdentify: typeof destinationLevelIdentify;
221
+ declare const step_destinationLevelInclude: typeof destinationLevelInclude;
222
+ declare const step_orderCompletedEcommerce: typeof orderCompletedEcommerce;
223
+ declare const step_pageViewAsPage: typeof pageViewAsPage;
224
+ declare const step_pageViewMinimal: typeof pageViewMinimal;
225
+ declare const step_profileUpdateTraitsOnly: typeof profileUpdateTraitsOnly;
226
+ declare const step_ruleIncludeReplaces: typeof ruleIncludeReplaces;
227
+ declare const step_userLoginIdentify: typeof userLoginIdentify;
228
+ declare const step_userLogoutReset: typeof userLogoutReset;
229
+ declare const step_wildcardIgnored: typeof wildcardIgnored;
230
+ declare namespace step {
231
+ export { type step_SegmentStepExample as SegmentStepExample, step_companyUpdateGroup as companyUpdateGroup, step_consentContextForwarded as consentContextForwarded, step_consentGrantDeferredLoad as consentGrantDeferredLoad, step_consentRevokeNoOp as consentRevokeNoOp, step_defaultEventForwarding as defaultEventForwarding, step_destinationLevelIdentify as destinationLevelIdentify, step_destinationLevelInclude as destinationLevelInclude, step_orderCompletedEcommerce as orderCompletedEcommerce, step_pageViewAsPage as pageViewAsPage, step_pageViewMinimal as pageViewMinimal, step_profileUpdateTraitsOnly as profileUpdateTraitsOnly, step_ruleIncludeReplaces as ruleIncludeReplaces, step_userLoginIdentify as userLoginIdentify, step_userLogoutReset as userLogoutReset, step_wildcardIgnored as wildcardIgnored };
232
+ }
233
+
234
+ export { env, step };
@@ -0,0 +1,234 @@
1
+ import { Mapping, Flow } from '@walkeros/core';
2
+ import { DestinationWeb } from '@walkeros/web-core';
3
+ import { AnalyticsBrowserSettings, InitOptions } from '@segment/analytics-next';
4
+
5
+ /**
6
+ * Destination-level settings.
7
+ *
8
+ * Extends Segment's `InitOptions` (minus the `group` key which clashes with
9
+ * walkerOS's own `group` mapping) so every passthrough option (cookie,
10
+ * storage, integrations, plan, etc.) keeps IntelliSense intact. walkerOS
11
+ * adds:
12
+ * - `apiKey` (required) — maps to `writeKey` in `AnalyticsBrowser.load()`
13
+ * - `identify` — destination-level identity mapping (Segment `identify()`)
14
+ * - `group` — destination-level group mapping (Segment `group()`)
15
+ * - `include` — event sections flattened into track `properties`
16
+ * - `consent` — walkerOS consent key → Segment category name mapping
17
+ * - `_state` — runtime state (not user-facing, mutated by init/push)
18
+ */
19
+ interface Settings extends Omit<InitOptions, 'group'> {
20
+ /** Segment write key. Maps to `writeKey` in the load() settings arg. */
21
+ apiKey: string;
22
+ /** walkerOS mapping value resolving to an identity object (userId, traits, anonymousId). */
23
+ identify?: Mapping.Value;
24
+ /** walkerOS mapping value resolving to a group object (groupId, traits). */
25
+ group?: Mapping.Value;
26
+ /**
27
+ * Mapping from walkerOS consent keys → Segment `categoryPreferences` keys.
28
+ * Example: { marketing: "Advertising", analytics: "Analytics" }
29
+ * If omitted, walkerOS keys are forwarded 1:1.
30
+ */
31
+ consent?: Record<string, string>;
32
+ /** Runtime state — populated by init() and mutated by push(). Not user-facing. */
33
+ _state?: RuntimeState;
34
+ }
35
+ interface RuntimeState {
36
+ /** Last-set identity values, used to skip redundant identify() calls. */
37
+ lastIdentity?: {
38
+ userId?: string;
39
+ anonymousId?: string;
40
+ traitsHash?: string;
41
+ };
42
+ /** Last-set group assignment, used to skip redundant group() calls. */
43
+ lastGroup?: {
44
+ groupId?: string;
45
+ traitsHash?: string;
46
+ };
47
+ /** Holds the AnalyticsBrowser instance created in init(). */
48
+ analytics?: SegmentAnalytics;
49
+ /** True once load() has been called (may be deferred pending consent). */
50
+ loaded?: boolean;
51
+ }
52
+ /**
53
+ * Segment SDK surface — the subset of @segment/analytics-next the
54
+ * destination actually uses. Mirrors the AnalyticsBrowser instance shape
55
+ * so tests can mock each method individually via env.analytics.
56
+ */
57
+ interface SegmentAnalytics {
58
+ track: (event: string, properties?: Record<string, unknown>, options?: SegmentEventOptions) => Promise<unknown> | void;
59
+ identify: (userId?: string | Record<string, unknown>, traits?: Record<string, unknown>, options?: SegmentEventOptions) => Promise<unknown> | void;
60
+ group: (groupId: string, traits?: Record<string, unknown>, options?: SegmentEventOptions) => Promise<unknown> | void;
61
+ page: (category?: string | null, name?: string | null, properties?: Record<string, unknown>, options?: SegmentEventOptions) => Promise<unknown> | void;
62
+ alias: (to: string, from?: string, options?: SegmentEventOptions) => Promise<unknown> | void;
63
+ reset: () => Promise<unknown> | void;
64
+ setAnonymousId: (id: string) => Promise<unknown> | void;
65
+ }
66
+ /**
67
+ * Segment event options — the fourth argument to track/identify/group/page
68
+ * that carries context and integration overrides. The destination uses
69
+ * this to stamp consent context on every event.
70
+ */
71
+ interface SegmentEventOptions {
72
+ context?: {
73
+ consent?: {
74
+ categoryPreferences?: Record<string, boolean>;
75
+ };
76
+ [key: string]: unknown;
77
+ };
78
+ integrations?: Record<string, boolean | Record<string, unknown>>;
79
+ }
80
+ /**
81
+ * The module namespace used for `env?.analytics ?? realSegment`.
82
+ * AnalyticsBrowser is the class; tests mock with a factory that returns
83
+ * an object matching SegmentAnalytics.
84
+ *
85
+ * Task 1 verified: `AnalyticsBrowser.load(settings, options)` returns an
86
+ * `AnalyticsBrowser` instance **synchronously**. The instance buffers
87
+ * method calls until the internal load promise resolves.
88
+ */
89
+ interface SegmentSDK {
90
+ load: (settings: AnalyticsBrowserSettings, options?: InitOptions) => SegmentAnalytics;
91
+ }
92
+ /**
93
+ * Env — optional SDK override. Production leaves this undefined and the
94
+ * destination falls back to the real @segment/analytics-next module.
95
+ * Tests provide a mock via env.analytics = { ... }.
96
+ */
97
+ interface Env extends DestinationWeb.Env {
98
+ analytics?: SegmentSDK;
99
+ }
100
+
101
+ declare const init: Env | undefined;
102
+ declare const push: Env;
103
+ /** Simulation tracking paths for CLI --simulate. */
104
+ declare const simulation: string[];
105
+
106
+ declare const env_init: typeof init;
107
+ declare const env_push: typeof push;
108
+ declare const env_simulation: typeof simulation;
109
+ declare namespace env {
110
+ export { env_init as init, env_push as push, env_simulation as simulation };
111
+ }
112
+
113
+ /**
114
+ * Examples may optionally carry destination-level settings.
115
+ * The test runner merges this on top of a base { apiKey: 'test-project' }.
116
+ */
117
+ type SegmentStepExample = Flow.StepExample & {
118
+ settings?: Partial<Settings>;
119
+ configInclude?: string[];
120
+ };
121
+ /**
122
+ * Default event forwarding — every walkerOS event becomes
123
+ * analytics.track(event.name, properties). With no mapping and no
124
+ * destination-level include, properties is `{}`.
125
+ */
126
+ declare const defaultEventForwarding: SegmentStepExample;
127
+ /**
128
+ * Wildcard ignore — walkerOS's standard way to drop events. The rule
129
+ * matches but does nothing. The destination fires zero SDK calls.
130
+ */
131
+ declare const wildcardIgnored: SegmentStepExample;
132
+ /**
133
+ * Destination-level settings.include flattens the walkerOS `data` section
134
+ * into prefixed properties on every push.
135
+ */
136
+ declare const destinationLevelInclude: SegmentStepExample;
137
+ /**
138
+ * Per-rule settings.include REPLACES destination-level include for the
139
+ * matched rule. Here destination-level sends `data`, but the rule
140
+ * overrides it with `globals` only.
141
+ */
142
+ declare const ruleIncludeReplaces: SegmentStepExample;
143
+ /**
144
+ * Destination-level settings.identify fires on the first push. The
145
+ * destination resolves the mapping, calls analytics.identify(userId),
146
+ * and records the value in runtime state. Subsequent pushes with the
147
+ * same userId do NOT re-fire identify().
148
+ */
149
+ declare const destinationLevelIdentify: SegmentStepExample;
150
+ /**
151
+ * Per-event identify with traits — the canonical "user login" pattern.
152
+ * skip: true suppresses the default analytics.track() call because we're
153
+ * running identity side effects only. Matches Segment Spec reserved traits
154
+ * (email, name, plan, company) so downstream destinations recognize them.
155
+ */
156
+ declare const userLoginIdentify: SegmentStepExample;
157
+ /**
158
+ * Profile update — omit userId. Segment's SDK uses the currently stored
159
+ * userId and merges the traits into the existing trait set.
160
+ */
161
+ declare const profileUpdateTraitsOnly: SegmentStepExample;
162
+ /**
163
+ * User logout — reset: true fires analytics.reset(), which clears userId,
164
+ * anonymousId, traits, and generates a new anonymous ID.
165
+ * skip: true because we're only running the reset side effect.
166
+ */
167
+ declare const userLogoutReset: SegmentStepExample;
168
+ /**
169
+ * Per-event group assignment — company update event attaches the user
170
+ * to a company and sets the company's traits in one call.
171
+ */
172
+ declare const companyUpdateGroup: SegmentStepExample;
173
+ /**
174
+ * Explicit page() call — the canonical Segment pattern for page views.
175
+ * skip: true suppresses the default track() call; settings.page fires
176
+ * analytics.page(category, name, properties) instead.
177
+ */
178
+ declare const pageViewAsPage: SegmentStepExample;
179
+ /**
180
+ * Minimal page() call — settings.page: true produces an empty
181
+ * analytics.page() relying entirely on SDK auto-collection.
182
+ */
183
+ declare const pageViewMinimal: SegmentStepExample;
184
+ /**
185
+ * Segment ecommerce spec — Order Completed event. One track() call with
186
+ * a products array. Uses mapping.name to produce the Segment Spec name
187
+ * and mapping.data to build the properties object including the nested
188
+ * products loop. The loop filters via condition to products with prices.
189
+ */
190
+ declare const orderCompletedEcommerce: SegmentStepExample;
191
+ /**
192
+ * Consent context forwarding — when the event has consent state,
193
+ * the destination automatically stamps every track/identify/group/page
194
+ * call with context.consent.categoryPreferences. settings.consent
195
+ * remaps walkerOS keys to Segment category names.
196
+ */
197
+ declare const consentContextForwarded: SegmentStepExample;
198
+ /**
199
+ * Consent granted → deferred load fires for the first time. The
200
+ * destination was initialized with consent requirement; on the walker
201
+ * consent command it calls analytics.load(writeKey, initOptions).
202
+ *
203
+ * Uses the canonical StepExample.command='consent' pattern. The full
204
+ * call shape includes both the settings arg and the initOptions arg.
205
+ */
206
+ declare const consentGrantDeferredLoad: SegmentStepExample;
207
+ /**
208
+ * Consent revoked → no SDK call. The walkerOS consent gate handles
209
+ * blocking subsequent events. The destination's on('consent') handler
210
+ * is a no-op on revocation (Segment has no opt-out method).
211
+ */
212
+ declare const consentRevokeNoOp: SegmentStepExample;
213
+
214
+ type step_SegmentStepExample = SegmentStepExample;
215
+ declare const step_companyUpdateGroup: typeof companyUpdateGroup;
216
+ declare const step_consentContextForwarded: typeof consentContextForwarded;
217
+ declare const step_consentGrantDeferredLoad: typeof consentGrantDeferredLoad;
218
+ declare const step_consentRevokeNoOp: typeof consentRevokeNoOp;
219
+ declare const step_defaultEventForwarding: typeof defaultEventForwarding;
220
+ declare const step_destinationLevelIdentify: typeof destinationLevelIdentify;
221
+ declare const step_destinationLevelInclude: typeof destinationLevelInclude;
222
+ declare const step_orderCompletedEcommerce: typeof orderCompletedEcommerce;
223
+ declare const step_pageViewAsPage: typeof pageViewAsPage;
224
+ declare const step_pageViewMinimal: typeof pageViewMinimal;
225
+ declare const step_profileUpdateTraitsOnly: typeof profileUpdateTraitsOnly;
226
+ declare const step_ruleIncludeReplaces: typeof ruleIncludeReplaces;
227
+ declare const step_userLoginIdentify: typeof userLoginIdentify;
228
+ declare const step_userLogoutReset: typeof userLogoutReset;
229
+ declare const step_wildcardIgnored: typeof wildcardIgnored;
230
+ declare namespace step {
231
+ export { type step_SegmentStepExample as SegmentStepExample, step_companyUpdateGroup as companyUpdateGroup, step_consentContextForwarded as consentContextForwarded, step_consentGrantDeferredLoad as consentGrantDeferredLoad, step_consentRevokeNoOp as consentRevokeNoOp, step_defaultEventForwarding as defaultEventForwarding, step_destinationLevelIdentify as destinationLevelIdentify, step_destinationLevelInclude as destinationLevelInclude, step_orderCompletedEcommerce as orderCompletedEcommerce, step_pageViewAsPage as pageViewAsPage, step_pageViewMinimal as pageViewMinimal, step_profileUpdateTraitsOnly as profileUpdateTraitsOnly, step_ruleIncludeReplaces as ruleIncludeReplaces, step_userLoginIdentify as userLoginIdentify, step_userLogoutReset as userLogoutReset, step_wildcardIgnored as wildcardIgnored };
232
+ }
233
+
234
+ export { env, step };