@walkeros/web-destination-fullstory 4.2.0 → 4.2.1-next-1781538735002

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/CHANGELOG.md CHANGED
@@ -1,5 +1,13 @@
1
1
  # @walkeros/web-destination-fullstory
2
2
 
3
+ ## 4.2.1-next-1781538735002
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies [5cbcd23]
8
+ - @walkeros/core@4.2.1-next-1781538735002
9
+ - @walkeros/web-core@4.2.1-next-1781538735002
10
+
3
11
  ## 4.2.0
4
12
 
5
13
  ### Patch Changes
package/dist/dev.d.mts CHANGED
@@ -1,6 +1,6 @@
1
1
  import * as _walkeros_core_dev from '@walkeros/core/dev';
2
2
  import { z } from '@walkeros/core/dev';
3
- import { Mapping as Mapping$1, Flow } from '@walkeros/core';
3
+ import { Mapping as Mapping$1, Flow, WalkerOS } from '@walkeros/core';
4
4
  import { DestinationWeb } from '@walkeros/web-core';
5
5
 
6
6
  declare const SettingsSchema: z.ZodObject<{
@@ -132,6 +132,8 @@ declare namespace env {
132
132
  */
133
133
  type FullStoryStepExample = Flow.StepExample & {
134
134
  settings?: Partial<Settings>;
135
+ /** Consent granted before `in` so a gated destination is loaded first. */
136
+ before?: WalkerOS.Consent;
135
137
  };
136
138
  /**
137
139
  * Default event forwarding -- every walkerOS event becomes
@@ -188,7 +190,10 @@ declare const silentWithIdentify: FullStoryStepExample;
188
190
  */
189
191
  declare const consentGrantCapture: FullStoryStepExample;
190
192
  /**
191
- * Consent revoke -- revoking consent calls FullStory('shutdown').
193
+ * Consent revoke -- after analytics consent is granted (FullStory starts
194
+ * capture), revoking it calls FullStory('shutdown'). The destination is never
195
+ * loaded under denied consent, so the shutdown is a real revocation of an
196
+ * already-granted destination.
192
197
  */
193
198
  declare const consentRevokeCapture: FullStoryStepExample;
194
199
  /**
@@ -197,7 +202,10 @@ declare const consentRevokeCapture: FullStoryStepExample;
197
202
  */
198
203
  declare const consentGrantFlag: FullStoryStepExample;
199
204
  /**
200
- * Consent flag revoke -- calls setIdentity({ consent: false }).
205
+ * Consent flag revoke -- after marketing consent is granted (the destination
206
+ * loads), revoking it calls setIdentity({ consent: false }). The destination is
207
+ * never loaded under denied consent, so the revoke acts on an already-granted
208
+ * destination.
201
209
  */
202
210
  declare const consentRevokeFlag: FullStoryStepExample;
203
211
 
package/dist/dev.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import * as _walkeros_core_dev from '@walkeros/core/dev';
2
2
  import { z } from '@walkeros/core/dev';
3
- import { Mapping as Mapping$1, Flow } from '@walkeros/core';
3
+ import { Mapping as Mapping$1, Flow, WalkerOS } from '@walkeros/core';
4
4
  import { DestinationWeb } from '@walkeros/web-core';
5
5
 
6
6
  declare const SettingsSchema: z.ZodObject<{
@@ -132,6 +132,8 @@ declare namespace env {
132
132
  */
133
133
  type FullStoryStepExample = Flow.StepExample & {
134
134
  settings?: Partial<Settings>;
135
+ /** Consent granted before `in` so a gated destination is loaded first. */
136
+ before?: WalkerOS.Consent;
135
137
  };
136
138
  /**
137
139
  * Default event forwarding -- every walkerOS event becomes
@@ -188,7 +190,10 @@ declare const silentWithIdentify: FullStoryStepExample;
188
190
  */
189
191
  declare const consentGrantCapture: FullStoryStepExample;
190
192
  /**
191
- * Consent revoke -- revoking consent calls FullStory('shutdown').
193
+ * Consent revoke -- after analytics consent is granted (FullStory starts
194
+ * capture), revoking it calls FullStory('shutdown'). The destination is never
195
+ * loaded under denied consent, so the shutdown is a real revocation of an
196
+ * already-granted destination.
192
197
  */
193
198
  declare const consentRevokeCapture: FullStoryStepExample;
194
199
  /**
@@ -197,7 +202,10 @@ declare const consentRevokeCapture: FullStoryStepExample;
197
202
  */
198
203
  declare const consentGrantFlag: FullStoryStepExample;
199
204
  /**
200
- * Consent flag revoke -- calls setIdentity({ consent: false }).
205
+ * Consent flag revoke -- after marketing consent is granted (the destination
206
+ * loads), revoking it calls setIdentity({ consent: false }). The destination is
207
+ * never loaded under denied consent, so the revoke acts on an already-granted
208
+ * destination.
201
209
  */
202
210
  declare const consentRevokeFlag: FullStoryStepExample;
203
211
 
package/dist/dev.js CHANGED
@@ -1 +1 @@
1
- "use strict";var e,t=Object.defineProperty,r=Object.getOwnPropertyDescriptor,n=Object.getOwnPropertyNames,i=Object.prototype.hasOwnProperty,o=(e,r)=>{for(var n in r)t(e,n,{get:r[n],enumerable:!0})},s={};o(s,{examples:()=>g,schemas:()=>a}),module.exports=(e=s,((e,o,s,a)=>{if(o&&"object"==typeof o||"function"==typeof o)for(let l of n(o))i.call(e,l)||l===s||t(e,l,{get:()=>o[l],enumerable:!(a=r(o,l))||a.enumerable});return e})(t({},"__esModule",{value:!0}),e));var a={};o(a,{MappingSchema:()=>u,SettingsSchema:()=>c,mapping:()=>y,settings:()=>m});var l=require("@walkeros/core/dev"),p=require("@walkeros/core/dev"),c=p.z.object({orgId:p.z.string().min(1).describe('Your FullStory organization ID (e.g. "o-XXXXXX-na1"). Find it in FullStory under Settings > General.'),host:p.z.string().describe("Recording server host for proxy support.").optional(),script:p.z.string().describe("Custom script CDN host domain.").optional(),cookieDomain:p.z.string().describe("Override cookie domain for cross-subdomain tracking.").optional(),debug:p.z.boolean().describe("Enable browser console debug logging.").optional(),devMode:p.z.boolean().describe("Disable recording entirely for development environments.").optional(),startCaptureManually:p.z.boolean().describe('Delay capture until FullStory("start") is called. Recommended for GDPR: init the SDK immediately but wait for consent before recording.').optional(),namespace:p.z.string().describe('Global FS identifier override (default: "FS").').optional(),recordCrossDomainIFrames:p.z.boolean().describe("Enable cross-domain iframe recording.").optional(),identify:p.z.unknown().describe("Destination-level identity mapping. Resolves to { uid, properties? } for FullStory setIdentity. Fires on every push.").optional(),consent:p.z.record(p.z.string(),p.z.enum(["capture","consent"])).describe('Translation table from walkerOS consent keys to FullStory consent actions. "capture" controls start/shutdown (recording on/off). "consent" controls setIdentity({ consent }) flag. Example: { "analytics": "capture" }.').optional()}),d=require("@walkeros/core/dev"),u=d.z.object({identify:d.z.unknown().describe("Per-event identity mapping. Resolves to { uid, properties? } for FullStory setIdentity. Overrides destination-level identify for this event.").optional(),set:d.z.unknown().describe("Property mapping. Resolved object keys become FullStory setProperties() properties. Use with setType to control scope.").optional(),setType:d.z.enum(["user","page"]).describe('Property scope for the set mapping. "user" persists across sessions; "page" resets on navigation. Default: "user".').optional()}),m=(0,l.zodToSchema)(c),y=(0,l.zodToSchema)(u),g={};o(g,{env:()=>f,step:()=>w});var f={};o(f,{init:()=>b,push:()=>h,simulation:()=>k});var v=()=>{},b={fullstory:{init:v,trackEvent:v,setIdentity:v,setProperties:v,shutdown:v,start:v}},h={fullstory:{init:v,trackEvent:v,setIdentity:v,setProperties:v,shutdown:v,start:v}},k=["call:fullstory.init","call:fullstory.trackEvent","call:fullstory.setIdentity","call:fullstory.setProperties","call:fullstory.shutdown","call:fullstory.start"],w={};o(w,{combinedFeatures:()=>A,consentGrantCapture:()=>R,consentGrantFlag:()=>N,consentRevokeCapture:()=>C,consentRevokeFlag:()=>x,defaultEventForwarding:()=>F,destinationLevelIdentify:()=>z,mappedEventName:()=>P,setPageProperties:()=>j,setUserProperties:()=>D,silentWithIdentify:()=>O,userLoginIdentify:()=>I,wildcardIgnored:()=>E});var S=require("@walkeros/core"),F={title:"Default event",description:"A walker event becomes a FullStory trackEvent call with the event name and empty properties.",in:(0,S.getEvent)("product view",{timestamp:1700000100}),out:[["fullstory.trackEvent",{name:"product view",properties:{}}]]},E={public:!1,in:(0,S.getEvent)("debug noise",{timestamp:1700000101}),mapping:{ignore:!0},out:[]},P={title:"Renamed event",description:"A mapping renames the event so the FullStory trackEvent uses Purchase instead of the walker name.",in:(0,S.getEvent)("order complete",{timestamp:1700000102}),mapping:{name:"Purchase"},out:[["fullstory.trackEvent",{name:"Purchase",properties:{}}]]},I={title:"User login identify",description:"A user login fires FullStory setIdentity with uid and profile properties before tracking the event.",in:(0,S.getEvent)("user login",{timestamp:1700000103,data:{id:"u-123",name:"Jane Doe",email:"jane@example.com"}}),mapping:{settings:{identify:{map:{uid:"data.id",properties:{map:{displayName:"data.name",email:"data.email"}}}}}},out:[["fullstory.setIdentity",{uid:"u-123",properties:{displayName:"Jane Doe",email:"jane@example.com"}}],["fullstory.trackEvent",{name:"user login",properties:{}}]]},z={title:"Destination identify",description:"Destination-level identify fires FullStory setIdentity with the user id before every track call.",in:(0,S.getEvent)("page view",{timestamp:1700000104}),settings:{identify:{map:{uid:"user.id"}}},out:[["fullstory.setIdentity",{uid:"us3r"}],["fullstory.trackEvent",{name:"page view",properties:{}}]]},D={title:"Set user properties",description:"A purchase sets user-level FullStory properties such as revenue and currency alongside the tracked event.",in:(0,S.getEvent)("order complete",{timestamp:1700000105}),mapping:{name:"Purchase",settings:{set:{map:{revenue:"data.total",currency:"data.currency"}}}},out:[["fullstory.setProperties",{type:"user",properties:{revenue:555,currency:"EUR"}}],["fullstory.trackEvent",{name:"Purchase",properties:{}}]]},j={title:"Set page properties",description:"A page view sets FullStory page-type properties without firing a track, since FullStory auto-captures navigation.",in:(0,S.getEvent)("page view",{timestamp:1700000106,data:{id:"/docs/",title:"Getting Started"}}),mapping:{silent:!0,settings:{set:{map:{pageName:"data.title"}},setType:"page"}},out:[["fullstory.setProperties",{type:"page",properties:{pageName:"Getting Started"}}]]},A={title:"Combined features",description:"A purchase fires FullStory setIdentity, setProperties, and trackEvent in the canonical execution order.",in:(0,S.getEvent)("order complete",{timestamp:1700000107}),mapping:{name:"Purchase",settings:{identify:{map:{uid:"user.id"}},set:{map:{order_id:"data.id"}}}},out:[["fullstory.setIdentity",{uid:"us3r"}],["fullstory.setProperties",{type:"user",properties:{order_id:"0rd3r1d"}}],["fullstory.trackEvent",{name:"Purchase",properties:{}}]]},O={public:!1,in:(0,S.getEvent)("user login",{timestamp:1700000108,data:{id:"u-123",name:"Jane Doe"}}),mapping:{silent:!0,settings:{identify:{map:{uid:"data.id",properties:{map:{displayName:"data.name"}}}}}},out:[["fullstory.setIdentity",{uid:"u-123",properties:{displayName:"Jane Doe"}}]]},R={title:"Start capture",description:"A walker consent grant for analytics calls FullStory start to resume session recording.",command:"consent",in:{analytics:!0},settings:{consent:{analytics:"capture"}},out:[["fullstory.start"]]},C={title:"Shutdown capture",description:"A walker consent revoke for analytics calls FullStory shutdown to stop session recording.",command:"consent",in:{analytics:!1},settings:{consent:{analytics:"capture"}},out:[["fullstory.shutdown"]]},N={title:"Consent flag granted",description:"A walker consent grant with action consent sets the FullStory identity consent flag to true.",command:"consent",in:{marketing:!0},settings:{consent:{marketing:"consent"}},out:[["fullstory.setIdentity",{consent:!0}]]},x={title:"Consent flag revoked",description:"A walker consent revoke with action consent sets the FullStory identity consent flag to false.",command:"consent",in:{marketing:!1},settings:{consent:{marketing:"consent"}},out:[["fullstory.setIdentity",{consent:!1}]]};//# sourceMappingURL=dev.js.map
1
+ "use strict";var e,t=Object.defineProperty,r=Object.getOwnPropertyDescriptor,n=Object.getOwnPropertyNames,i=Object.prototype.hasOwnProperty,o=(e,r)=>{for(var n in r)t(e,n,{get:r[n],enumerable:!0})},s={};o(s,{examples:()=>g,schemas:()=>a}),module.exports=(e=s,((e,o,s,a)=>{if(o&&"object"==typeof o||"function"==typeof o)for(let l of n(o))i.call(e,l)||l===s||t(e,l,{get:()=>o[l],enumerable:!(a=r(o,l))||a.enumerable});return e})(t({},"__esModule",{value:!0}),e));var a={};o(a,{MappingSchema:()=>u,SettingsSchema:()=>c,mapping:()=>y,settings:()=>m});var l=require("@walkeros/core/dev"),p=require("@walkeros/core/dev"),c=p.z.object({orgId:p.z.string().min(1).describe('Your FullStory organization ID (e.g. "o-XXXXXX-na1"). Find it in FullStory under Settings > General.'),host:p.z.string().describe("Recording server host for proxy support.").optional(),script:p.z.string().describe("Custom script CDN host domain.").optional(),cookieDomain:p.z.string().describe("Override cookie domain for cross-subdomain tracking.").optional(),debug:p.z.boolean().describe("Enable browser console debug logging.").optional(),devMode:p.z.boolean().describe("Disable recording entirely for development environments.").optional(),startCaptureManually:p.z.boolean().describe('Delay capture until FullStory("start") is called. Recommended for GDPR: init the SDK immediately but wait for consent before recording.').optional(),namespace:p.z.string().describe('Global FS identifier override (default: "FS").').optional(),recordCrossDomainIFrames:p.z.boolean().describe("Enable cross-domain iframe recording.").optional(),identify:p.z.unknown().describe("Destination-level identity mapping. Resolves to { uid, properties? } for FullStory setIdentity. Fires on every push.").optional(),consent:p.z.record(p.z.string(),p.z.enum(["capture","consent"])).describe('Translation table from walkerOS consent keys to FullStory consent actions. "capture" controls start/shutdown (recording on/off). "consent" controls setIdentity({ consent }) flag. Example: { "analytics": "capture" }.').optional()}),d=require("@walkeros/core/dev"),u=d.z.object({identify:d.z.unknown().describe("Per-event identity mapping. Resolves to { uid, properties? } for FullStory setIdentity. Overrides destination-level identify for this event.").optional(),set:d.z.unknown().describe("Property mapping. Resolved object keys become FullStory setProperties() properties. Use with setType to control scope.").optional(),setType:d.z.enum(["user","page"]).describe('Property scope for the set mapping. "user" persists across sessions; "page" resets on navigation. Default: "user".').optional()}),m=(0,l.zodToSchema)(c),y=(0,l.zodToSchema)(u),g={};o(g,{env:()=>f,step:()=>w});var f={};o(f,{init:()=>b,push:()=>h,simulation:()=>k});var v=()=>{},b={fullstory:{init:v,trackEvent:v,setIdentity:v,setProperties:v,shutdown:v,start:v}},h={fullstory:{init:v,trackEvent:v,setIdentity:v,setProperties:v,shutdown:v,start:v}},k=["call:fullstory.init","call:fullstory.trackEvent","call:fullstory.setIdentity","call:fullstory.setProperties","call:fullstory.shutdown","call:fullstory.start"],w={};o(w,{combinedFeatures:()=>A,consentGrantCapture:()=>R,consentGrantFlag:()=>N,consentRevokeCapture:()=>C,consentRevokeFlag:()=>x,defaultEventForwarding:()=>F,destinationLevelIdentify:()=>z,mappedEventName:()=>P,setPageProperties:()=>j,setUserProperties:()=>D,silentWithIdentify:()=>O,userLoginIdentify:()=>I,wildcardIgnored:()=>E});var S=require("@walkeros/core"),F={title:"Default event",description:"A walker event becomes a FullStory trackEvent call with the event name and empty properties.",in:(0,S.getEvent)("product view",{timestamp:1700000100}),out:[["fullstory.trackEvent",{name:"product view",properties:{}}]]},E={public:!1,in:(0,S.getEvent)("debug noise",{timestamp:1700000101}),mapping:{ignore:!0},out:[]},P={title:"Renamed event",description:"A mapping renames the event so the FullStory trackEvent uses Purchase instead of the walker name.",in:(0,S.getEvent)("order complete",{timestamp:1700000102}),mapping:{name:"Purchase"},out:[["fullstory.trackEvent",{name:"Purchase",properties:{}}]]},I={title:"User login identify",description:"A user login fires FullStory setIdentity with uid and profile properties before tracking the event.",in:(0,S.getEvent)("user login",{timestamp:1700000103,data:{id:"u-123",name:"Jane Doe",email:"jane@example.com"}}),mapping:{settings:{identify:{map:{uid:"data.id",properties:{map:{displayName:"data.name",email:"data.email"}}}}}},out:[["fullstory.setIdentity",{uid:"u-123",properties:{displayName:"Jane Doe",email:"jane@example.com"}}],["fullstory.trackEvent",{name:"user login",properties:{}}]]},z={title:"Destination identify",description:"Destination-level identify fires FullStory setIdentity with the user id before every track call.",in:(0,S.getEvent)("page view",{timestamp:1700000104}),settings:{identify:{map:{uid:"user.id"}}},out:[["fullstory.setIdentity",{uid:"us3r"}],["fullstory.trackEvent",{name:"page view",properties:{}}]]},D={title:"Set user properties",description:"A purchase sets user-level FullStory properties such as revenue and currency alongside the tracked event.",in:(0,S.getEvent)("order complete",{timestamp:1700000105}),mapping:{name:"Purchase",settings:{set:{map:{revenue:"data.total",currency:"data.currency"}}}},out:[["fullstory.setProperties",{type:"user",properties:{revenue:555,currency:"EUR"}}],["fullstory.trackEvent",{name:"Purchase",properties:{}}]]},j={title:"Set page properties",description:"A page view sets FullStory page-type properties without firing a track, since FullStory auto-captures navigation.",in:(0,S.getEvent)("page view",{timestamp:1700000106,data:{id:"/docs/",title:"Getting Started"}}),mapping:{silent:!0,settings:{set:{map:{pageName:"data.title"}},setType:"page"}},out:[["fullstory.setProperties",{type:"page",properties:{pageName:"Getting Started"}}]]},A={title:"Combined features",description:"A purchase fires FullStory setIdentity, setProperties, and trackEvent in the canonical execution order.",in:(0,S.getEvent)("order complete",{timestamp:1700000107}),mapping:{name:"Purchase",settings:{identify:{map:{uid:"user.id"}},set:{map:{order_id:"data.id"}}}},out:[["fullstory.setIdentity",{uid:"us3r"}],["fullstory.setProperties",{type:"user",properties:{order_id:"0rd3r1d"}}],["fullstory.trackEvent",{name:"Purchase",properties:{}}]]},O={public:!1,in:(0,S.getEvent)("user login",{timestamp:1700000108,data:{id:"u-123",name:"Jane Doe"}}),mapping:{silent:!0,settings:{identify:{map:{uid:"data.id",properties:{map:{displayName:"data.name"}}}}}},out:[["fullstory.setIdentity",{uid:"u-123",properties:{displayName:"Jane Doe"}}]]},R={title:"Start capture",description:"A walker consent grant for analytics calls FullStory start to resume session recording.",command:"consent",in:{analytics:!0},settings:{consent:{analytics:"capture"}},out:[["fullstory.start"]]},C={title:"Shutdown capture",description:"A walker consent revoke for analytics calls FullStory shutdown to stop session recording.",command:"consent",before:{analytics:!0},in:{analytics:!1},settings:{consent:{analytics:"capture"}},out:[["fullstory.start"],["fullstory.shutdown"]]},N={title:"Consent flag granted",description:"A walker consent grant with action consent sets the FullStory identity consent flag to true.",command:"consent",in:{marketing:!0},settings:{consent:{marketing:"consent"}},out:[["fullstory.setIdentity",{consent:!0}]]},x={title:"Consent flag revoked",description:"A walker consent revoke with action consent sets the FullStory identity consent flag to false.",command:"consent",before:{marketing:!0},in:{marketing:!1},settings:{consent:{marketing:"consent"}},out:[["fullstory.setIdentity",{consent:!0}],["fullstory.setIdentity",{consent:!1}]]};//# sourceMappingURL=dev.js.map
package/dist/dev.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/dev.ts","../src/schemas/index.ts","../src/schemas/settings.ts","../src/schemas/mapping.ts","../src/examples/index.ts","../src/examples/env.ts","../src/examples/step.ts"],"sourcesContent":["export * as schemas from './schemas';\nexport * as examples from './examples';\n","import { zodToSchema } from '@walkeros/core/dev';\nimport { SettingsSchema } from './settings';\nimport { MappingSchema } from './mapping';\n\nexport { SettingsSchema, type Settings } from './settings';\nexport { MappingSchema, type Mapping } from './mapping';\n\n// JSON Schema\nexport const settings = zodToSchema(SettingsSchema);\nexport const mapping = zodToSchema(MappingSchema);\n","import { z } from '@walkeros/core/dev';\n\nexport const SettingsSchema = z.object({\n orgId: z\n .string()\n .min(1)\n .describe(\n 'Your FullStory organization ID (e.g. \"o-XXXXXX-na1\"). Find it in FullStory under Settings > General.',\n ),\n host: z\n .string()\n .describe('Recording server host for proxy support.')\n .optional(),\n script: z.string().describe('Custom script CDN host domain.').optional(),\n cookieDomain: z\n .string()\n .describe('Override cookie domain for cross-subdomain tracking.')\n .optional(),\n debug: z\n .boolean()\n .describe('Enable browser console debug logging.')\n .optional(),\n devMode: z\n .boolean()\n .describe('Disable recording entirely for development environments.')\n .optional(),\n startCaptureManually: z\n .boolean()\n .describe(\n 'Delay capture until FullStory(\"start\") is called. Recommended for GDPR: init the SDK immediately but wait for consent before recording.',\n )\n .optional(),\n namespace: z\n .string()\n .describe('Global FS identifier override (default: \"FS\").')\n .optional(),\n recordCrossDomainIFrames: z\n .boolean()\n .describe('Enable cross-domain iframe recording.')\n .optional(),\n identify: z\n .unknown()\n .describe(\n 'Destination-level identity mapping. Resolves to { uid, properties? } for FullStory setIdentity. Fires on every push.',\n )\n .optional(),\n consent: z\n .record(z.string(), z.enum(['capture', 'consent']))\n .describe(\n 'Translation table from walkerOS consent keys to FullStory consent actions. \"capture\" controls start/shutdown (recording on/off). \"consent\" controls setIdentity({ consent }) flag. Example: { \"analytics\": \"capture\" }.',\n )\n .optional(),\n});\n\nexport type Settings = z.infer<typeof SettingsSchema>;\n","import { z } from '@walkeros/core/dev';\n\nexport const MappingSchema = z.object({\n identify: z\n .unknown()\n .describe(\n 'Per-event identity mapping. Resolves to { uid, properties? } for FullStory setIdentity. Overrides destination-level identify for this event.',\n )\n .optional(),\n set: z\n .unknown()\n .describe(\n 'Property mapping. Resolved object keys become FullStory setProperties() properties. Use with setType to control scope.',\n )\n .optional(),\n setType: z\n .enum(['user', 'page'])\n .describe(\n 'Property scope for the set mapping. \"user\" persists across sessions; \"page\" resets on navigation. Default: \"user\".',\n )\n .optional(),\n});\n\nexport type Mapping = z.infer<typeof MappingSchema>;\n","export * as env from './env';\nexport * as step from './step';\n","import type { Env } from '../types';\n\n/**\n * Example environment configurations for FullStory destination.\n *\n * Tests clone `push` and replace individual methods with jest spies.\n * Production leaves `env.fullstory` undefined -- the destination falls back\n * to the real `@fullstory/browser` SDK.\n */\n\nconst noop = () => {};\n\n// Narrow helper types for the shared `noop` -> specific SDK signatures without\n// loose casts.\ntype FSInit = NonNullable<Env['fullstory']>['init'];\ntype FSTrackEvent = NonNullable<Env['fullstory']>['trackEvent'];\ntype FSSetIdentity = NonNullable<Env['fullstory']>['setIdentity'];\ntype FSSetProperties = NonNullable<Env['fullstory']>['setProperties'];\n\n/**\n * Pre-init environment -- FullStory SDK methods are no-ops until init wires them.\n */\nexport const init: Env | undefined = {\n fullstory: {\n init: noop as FSInit,\n trackEvent: noop as FSTrackEvent,\n setIdentity: noop as FSSetIdentity,\n setProperties: noop as FSSetProperties,\n shutdown: noop,\n start: noop,\n },\n};\n\n/**\n * Post-init environment -- FullStory SDK methods are spy-able no-ops.\n * Tests clone this and replace individual methods with jest.fn() for assertions.\n */\nexport const push: Env = {\n fullstory: {\n init: noop as FSInit,\n trackEvent: noop as FSTrackEvent,\n setIdentity: noop as FSSetIdentity,\n setProperties: noop as FSSetProperties,\n shutdown: noop,\n start: noop,\n },\n};\n\n/**\n * Simulation tracking paths for CLI --simulate\n */\nexport const simulation = [\n 'call:fullstory.init',\n 'call:fullstory.trackEvent',\n 'call:fullstory.setIdentity',\n 'call:fullstory.setProperties',\n 'call:fullstory.shutdown',\n 'call:fullstory.start',\n];\n","import type { Flow, WalkerOS } from '@walkeros/core';\nimport { getEvent } from '@walkeros/core';\nimport type { Settings } from '../types';\n\n/**\n * Extended step example that may carry destination-level settings overrides.\n */\nexport type FullStoryStepExample = Flow.StepExample & {\n settings?: Partial<Settings>;\n};\n\n/**\n * Default event forwarding -- every walkerOS event becomes\n * FullStory('trackEvent', { name, properties }). No mapping rule needed.\n */\nexport const defaultEventForwarding: FullStoryStepExample = {\n title: 'Default event',\n description:\n 'A walker event becomes a FullStory trackEvent call with the event name and empty properties.',\n in: getEvent('product view', { timestamp: 1700000100 }),\n out: [['fullstory.trackEvent', { name: 'product view', properties: {} }]],\n};\n\n/**\n * Wildcard ignore -- the event matches a mapping rule with ignore: true.\n * The destination fires zero SDK calls.\n */\nexport const wildcardIgnored: FullStoryStepExample = {\n public: false,\n in: getEvent('debug noise', { timestamp: 1700000101 }),\n mapping: { ignore: true },\n out: [],\n};\n\n/**\n * Event name mapping -- mapping.name renames the walkerOS event for FullStory.\n */\nexport const mappedEventName: FullStoryStepExample = {\n title: 'Renamed event',\n description:\n 'A mapping renames the event so the FullStory trackEvent uses Purchase instead of the walker name.',\n in: getEvent('order complete', { timestamp: 1700000102 }),\n mapping: {\n name: 'Purchase',\n },\n out: [['fullstory.trackEvent', { name: 'Purchase', properties: {} }]],\n};\n\n/**\n * Per-event identify via mapping.settings.identify.\n * Resolves { uid, properties } and calls FullStory('setIdentity', ...).\n * Then fires the default trackEvent.\n */\nexport const userLoginIdentify: FullStoryStepExample = {\n title: 'User login identify',\n description:\n 'A user login fires FullStory setIdentity with uid and profile properties before tracking the event.',\n in: getEvent('user login', {\n timestamp: 1700000103,\n data: { id: 'u-123', name: 'Jane Doe', email: 'jane@example.com' },\n }),\n mapping: {\n settings: {\n identify: {\n map: {\n uid: 'data.id',\n properties: {\n map: {\n displayName: 'data.name',\n email: 'data.email',\n },\n },\n },\n },\n },\n },\n out: [\n [\n 'fullstory.setIdentity',\n {\n uid: 'u-123',\n properties: { displayName: 'Jane Doe', email: 'jane@example.com' },\n },\n ],\n ['fullstory.trackEvent', { name: 'user login', properties: {} }],\n ],\n};\n\n/**\n * Destination-level settings.identify -- fires setIdentity on every push.\n * Uses user.id from the standard getEvent fixture.\n */\nexport const destinationLevelIdentify: FullStoryStepExample = {\n title: 'Destination identify',\n description:\n 'Destination-level identify fires FullStory setIdentity with the user id before every track call.',\n in: getEvent('page view', { timestamp: 1700000104 }),\n settings: {\n identify: {\n map: {\n uid: 'user.id',\n },\n },\n },\n out: [\n ['fullstory.setIdentity', { uid: 'us3r' }],\n ['fullstory.trackEvent', { name: 'page view', properties: {} }],\n ],\n};\n\n/**\n * User properties via mapping.settings.set with default setType ('user').\n * Calls FullStory('setProperties', { type: 'user', properties }).\n */\nexport const setUserProperties: FullStoryStepExample = {\n title: 'Set user properties',\n description:\n 'A purchase sets user-level FullStory properties such as revenue and currency alongside the tracked event.',\n in: getEvent('order complete', { timestamp: 1700000105 }),\n mapping: {\n name: 'Purchase',\n settings: {\n set: {\n map: {\n revenue: 'data.total',\n currency: 'data.currency',\n },\n },\n },\n },\n out: [\n [\n 'fullstory.setProperties',\n { type: 'user', properties: { revenue: 555, currency: 'EUR' } },\n ],\n ['fullstory.trackEvent', { name: 'Purchase', properties: {} }],\n ],\n};\n\n/**\n * Page properties via mapping.settings.set with setType: 'page'.\n * silent: true suppresses trackEvent -- useful for page views where\n * FullStory already auto-captures navigation.\n */\nexport const setPageProperties: FullStoryStepExample = {\n title: 'Set page properties',\n description:\n 'A page view sets FullStory page-type properties without firing a track, since FullStory auto-captures navigation.',\n in: getEvent('page view', {\n timestamp: 1700000106,\n data: { id: '/docs/', title: 'Getting Started' },\n }),\n mapping: {\n silent: true,\n settings: {\n set: {\n map: {\n pageName: 'data.title',\n },\n },\n setType: 'page',\n },\n },\n out: [\n [\n 'fullstory.setProperties',\n { type: 'page', properties: { pageName: 'Getting Started' } },\n ],\n ],\n};\n\n/**\n * Combined features -- identify the user, set user properties, then fire\n * the event. Tests push execution order: identify -> setProperties -> trackEvent.\n */\nexport const combinedFeatures: FullStoryStepExample = {\n title: 'Combined features',\n description:\n 'A purchase fires FullStory setIdentity, setProperties, and trackEvent in the canonical execution order.',\n in: getEvent('order complete', { timestamp: 1700000107 }),\n mapping: {\n name: 'Purchase',\n settings: {\n identify: { map: { uid: 'user.id' } },\n set: { map: { order_id: 'data.id' } },\n },\n },\n out: [\n ['fullstory.setIdentity', { uid: 'us3r' }],\n [\n 'fullstory.setProperties',\n { type: 'user', properties: { order_id: '0rd3r1d' } },\n ],\n ['fullstory.trackEvent', { name: 'Purchase', properties: {} }],\n ],\n};\n\n/**\n * silent: true with identify -- mapping.silent suppresses trackEvent but\n * still executes identify and set from the mapping rule.\n */\nexport const silentWithIdentify: FullStoryStepExample = {\n public: false,\n in: getEvent('user login', {\n timestamp: 1700000108,\n data: { id: 'u-123', name: 'Jane Doe' },\n }),\n mapping: {\n silent: true,\n settings: {\n identify: {\n map: {\n uid: 'data.id',\n properties: {\n map: {\n displayName: 'data.name',\n },\n },\n },\n },\n },\n },\n out: [\n [\n 'fullstory.setIdentity',\n { uid: 'u-123', properties: { displayName: 'Jane Doe' } },\n ],\n ],\n};\n\n/**\n * Consent grant -- settings.consent maps walkerOS consent key \"analytics\"\n * to FullStory \"capture\" action. Granting consent calls FullStory('start').\n *\n * Uses command='consent' so the test runner dispatches via\n * elb('walker consent', in) instead of pushing an event.\n */\nexport const consentGrantCapture: FullStoryStepExample = {\n title: 'Start capture',\n description:\n 'A walker consent grant for analytics calls FullStory start to resume session recording.',\n command: 'consent',\n in: { analytics: true } as WalkerOS.Consent,\n settings: {\n consent: {\n analytics: 'capture',\n },\n },\n out: [['fullstory.start']],\n};\n\n/**\n * Consent revoke -- revoking consent calls FullStory('shutdown').\n */\nexport const consentRevokeCapture: FullStoryStepExample = {\n title: 'Shutdown capture',\n description:\n 'A walker consent revoke for analytics calls FullStory shutdown to stop session recording.',\n command: 'consent',\n in: { analytics: false } as WalkerOS.Consent,\n settings: {\n consent: {\n analytics: 'capture',\n },\n },\n out: [['fullstory.shutdown']],\n};\n\n/**\n * Consent flag -- settings.consent maps walkerOS consent key to FullStory\n * \"consent\" action. Granting calls setIdentity({ consent: true }).\n */\nexport const consentGrantFlag: FullStoryStepExample = {\n title: 'Consent flag granted',\n description:\n 'A walker consent grant with action consent sets the FullStory identity consent flag to true.',\n command: 'consent',\n in: { marketing: true } as WalkerOS.Consent,\n settings: {\n consent: {\n marketing: 'consent',\n },\n },\n out: [['fullstory.setIdentity', { consent: true }]],\n};\n\n/**\n * Consent flag revoke -- calls setIdentity({ consent: false }).\n */\nexport const consentRevokeFlag: FullStoryStepExample = {\n title: 'Consent flag revoked',\n description:\n 'A walker consent revoke with action consent sets the FullStory identity consent flag to false.',\n command: 'consent',\n in: { marketing: false } as WalkerOS.Consent,\n settings: {\n consent: {\n marketing: 'consent',\n },\n },\n out: [['fullstory.setIdentity', { consent: false }]],\n};\n"],"mappings":"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","names":["import_dev","import_dev"]}
1
+ {"version":3,"sources":["../src/dev.ts","../src/schemas/index.ts","../src/schemas/settings.ts","../src/schemas/mapping.ts","../src/examples/index.ts","../src/examples/env.ts","../src/examples/step.ts"],"sourcesContent":["export * as schemas from './schemas';\nexport * as examples from './examples';\n","import { zodToSchema } from '@walkeros/core/dev';\nimport { SettingsSchema } from './settings';\nimport { MappingSchema } from './mapping';\n\nexport { SettingsSchema, type Settings } from './settings';\nexport { MappingSchema, type Mapping } from './mapping';\n\n// JSON Schema\nexport const settings = zodToSchema(SettingsSchema);\nexport const mapping = zodToSchema(MappingSchema);\n","import { z } from '@walkeros/core/dev';\n\nexport const SettingsSchema = z.object({\n orgId: z\n .string()\n .min(1)\n .describe(\n 'Your FullStory organization ID (e.g. \"o-XXXXXX-na1\"). Find it in FullStory under Settings > General.',\n ),\n host: z\n .string()\n .describe('Recording server host for proxy support.')\n .optional(),\n script: z.string().describe('Custom script CDN host domain.').optional(),\n cookieDomain: z\n .string()\n .describe('Override cookie domain for cross-subdomain tracking.')\n .optional(),\n debug: z\n .boolean()\n .describe('Enable browser console debug logging.')\n .optional(),\n devMode: z\n .boolean()\n .describe('Disable recording entirely for development environments.')\n .optional(),\n startCaptureManually: z\n .boolean()\n .describe(\n 'Delay capture until FullStory(\"start\") is called. Recommended for GDPR: init the SDK immediately but wait for consent before recording.',\n )\n .optional(),\n namespace: z\n .string()\n .describe('Global FS identifier override (default: \"FS\").')\n .optional(),\n recordCrossDomainIFrames: z\n .boolean()\n .describe('Enable cross-domain iframe recording.')\n .optional(),\n identify: z\n .unknown()\n .describe(\n 'Destination-level identity mapping. Resolves to { uid, properties? } for FullStory setIdentity. Fires on every push.',\n )\n .optional(),\n consent: z\n .record(z.string(), z.enum(['capture', 'consent']))\n .describe(\n 'Translation table from walkerOS consent keys to FullStory consent actions. \"capture\" controls start/shutdown (recording on/off). \"consent\" controls setIdentity({ consent }) flag. Example: { \"analytics\": \"capture\" }.',\n )\n .optional(),\n});\n\nexport type Settings = z.infer<typeof SettingsSchema>;\n","import { z } from '@walkeros/core/dev';\n\nexport const MappingSchema = z.object({\n identify: z\n .unknown()\n .describe(\n 'Per-event identity mapping. Resolves to { uid, properties? } for FullStory setIdentity. Overrides destination-level identify for this event.',\n )\n .optional(),\n set: z\n .unknown()\n .describe(\n 'Property mapping. Resolved object keys become FullStory setProperties() properties. Use with setType to control scope.',\n )\n .optional(),\n setType: z\n .enum(['user', 'page'])\n .describe(\n 'Property scope for the set mapping. \"user\" persists across sessions; \"page\" resets on navigation. Default: \"user\".',\n )\n .optional(),\n});\n\nexport type Mapping = z.infer<typeof MappingSchema>;\n","export * as env from './env';\nexport * as step from './step';\n","import type { Env } from '../types';\n\n/**\n * Example environment configurations for FullStory destination.\n *\n * Tests clone `push` and replace individual methods with jest spies.\n * Production leaves `env.fullstory` undefined -- the destination falls back\n * to the real `@fullstory/browser` SDK.\n */\n\nconst noop = () => {};\n\n// Narrow helper types for the shared `noop` -> specific SDK signatures without\n// loose casts.\ntype FSInit = NonNullable<Env['fullstory']>['init'];\ntype FSTrackEvent = NonNullable<Env['fullstory']>['trackEvent'];\ntype FSSetIdentity = NonNullable<Env['fullstory']>['setIdentity'];\ntype FSSetProperties = NonNullable<Env['fullstory']>['setProperties'];\n\n/**\n * Pre-init environment -- FullStory SDK methods are no-ops until init wires them.\n */\nexport const init: Env | undefined = {\n fullstory: {\n init: noop as FSInit,\n trackEvent: noop as FSTrackEvent,\n setIdentity: noop as FSSetIdentity,\n setProperties: noop as FSSetProperties,\n shutdown: noop,\n start: noop,\n },\n};\n\n/**\n * Post-init environment -- FullStory SDK methods are spy-able no-ops.\n * Tests clone this and replace individual methods with jest.fn() for assertions.\n */\nexport const push: Env = {\n fullstory: {\n init: noop as FSInit,\n trackEvent: noop as FSTrackEvent,\n setIdentity: noop as FSSetIdentity,\n setProperties: noop as FSSetProperties,\n shutdown: noop,\n start: noop,\n },\n};\n\n/**\n * Simulation tracking paths for CLI --simulate\n */\nexport const simulation = [\n 'call:fullstory.init',\n 'call:fullstory.trackEvent',\n 'call:fullstory.setIdentity',\n 'call:fullstory.setProperties',\n 'call:fullstory.shutdown',\n 'call:fullstory.start',\n];\n","import type { Flow, WalkerOS } from '@walkeros/core';\nimport { getEvent } from '@walkeros/core';\nimport type { Settings } from '../types';\n\n/**\n * Extended step example that may carry destination-level settings overrides.\n */\nexport type FullStoryStepExample = Flow.StepExample & {\n settings?: Partial<Settings>;\n /** Consent granted before `in` so a gated destination is loaded first. */\n before?: WalkerOS.Consent;\n};\n\n/**\n * Default event forwarding -- every walkerOS event becomes\n * FullStory('trackEvent', { name, properties }). No mapping rule needed.\n */\nexport const defaultEventForwarding: FullStoryStepExample = {\n title: 'Default event',\n description:\n 'A walker event becomes a FullStory trackEvent call with the event name and empty properties.',\n in: getEvent('product view', { timestamp: 1700000100 }),\n out: [['fullstory.trackEvent', { name: 'product view', properties: {} }]],\n};\n\n/**\n * Wildcard ignore -- the event matches a mapping rule with ignore: true.\n * The destination fires zero SDK calls.\n */\nexport const wildcardIgnored: FullStoryStepExample = {\n public: false,\n in: getEvent('debug noise', { timestamp: 1700000101 }),\n mapping: { ignore: true },\n out: [],\n};\n\n/**\n * Event name mapping -- mapping.name renames the walkerOS event for FullStory.\n */\nexport const mappedEventName: FullStoryStepExample = {\n title: 'Renamed event',\n description:\n 'A mapping renames the event so the FullStory trackEvent uses Purchase instead of the walker name.',\n in: getEvent('order complete', { timestamp: 1700000102 }),\n mapping: {\n name: 'Purchase',\n },\n out: [['fullstory.trackEvent', { name: 'Purchase', properties: {} }]],\n};\n\n/**\n * Per-event identify via mapping.settings.identify.\n * Resolves { uid, properties } and calls FullStory('setIdentity', ...).\n * Then fires the default trackEvent.\n */\nexport const userLoginIdentify: FullStoryStepExample = {\n title: 'User login identify',\n description:\n 'A user login fires FullStory setIdentity with uid and profile properties before tracking the event.',\n in: getEvent('user login', {\n timestamp: 1700000103,\n data: { id: 'u-123', name: 'Jane Doe', email: 'jane@example.com' },\n }),\n mapping: {\n settings: {\n identify: {\n map: {\n uid: 'data.id',\n properties: {\n map: {\n displayName: 'data.name',\n email: 'data.email',\n },\n },\n },\n },\n },\n },\n out: [\n [\n 'fullstory.setIdentity',\n {\n uid: 'u-123',\n properties: { displayName: 'Jane Doe', email: 'jane@example.com' },\n },\n ],\n ['fullstory.trackEvent', { name: 'user login', properties: {} }],\n ],\n};\n\n/**\n * Destination-level settings.identify -- fires setIdentity on every push.\n * Uses user.id from the standard getEvent fixture.\n */\nexport const destinationLevelIdentify: FullStoryStepExample = {\n title: 'Destination identify',\n description:\n 'Destination-level identify fires FullStory setIdentity with the user id before every track call.',\n in: getEvent('page view', { timestamp: 1700000104 }),\n settings: {\n identify: {\n map: {\n uid: 'user.id',\n },\n },\n },\n out: [\n ['fullstory.setIdentity', { uid: 'us3r' }],\n ['fullstory.trackEvent', { name: 'page view', properties: {} }],\n ],\n};\n\n/**\n * User properties via mapping.settings.set with default setType ('user').\n * Calls FullStory('setProperties', { type: 'user', properties }).\n */\nexport const setUserProperties: FullStoryStepExample = {\n title: 'Set user properties',\n description:\n 'A purchase sets user-level FullStory properties such as revenue and currency alongside the tracked event.',\n in: getEvent('order complete', { timestamp: 1700000105 }),\n mapping: {\n name: 'Purchase',\n settings: {\n set: {\n map: {\n revenue: 'data.total',\n currency: 'data.currency',\n },\n },\n },\n },\n out: [\n [\n 'fullstory.setProperties',\n { type: 'user', properties: { revenue: 555, currency: 'EUR' } },\n ],\n ['fullstory.trackEvent', { name: 'Purchase', properties: {} }],\n ],\n};\n\n/**\n * Page properties via mapping.settings.set with setType: 'page'.\n * silent: true suppresses trackEvent -- useful for page views where\n * FullStory already auto-captures navigation.\n */\nexport const setPageProperties: FullStoryStepExample = {\n title: 'Set page properties',\n description:\n 'A page view sets FullStory page-type properties without firing a track, since FullStory auto-captures navigation.',\n in: getEvent('page view', {\n timestamp: 1700000106,\n data: { id: '/docs/', title: 'Getting Started' },\n }),\n mapping: {\n silent: true,\n settings: {\n set: {\n map: {\n pageName: 'data.title',\n },\n },\n setType: 'page',\n },\n },\n out: [\n [\n 'fullstory.setProperties',\n { type: 'page', properties: { pageName: 'Getting Started' } },\n ],\n ],\n};\n\n/**\n * Combined features -- identify the user, set user properties, then fire\n * the event. Tests push execution order: identify -> setProperties -> trackEvent.\n */\nexport const combinedFeatures: FullStoryStepExample = {\n title: 'Combined features',\n description:\n 'A purchase fires FullStory setIdentity, setProperties, and trackEvent in the canonical execution order.',\n in: getEvent('order complete', { timestamp: 1700000107 }),\n mapping: {\n name: 'Purchase',\n settings: {\n identify: { map: { uid: 'user.id' } },\n set: { map: { order_id: 'data.id' } },\n },\n },\n out: [\n ['fullstory.setIdentity', { uid: 'us3r' }],\n [\n 'fullstory.setProperties',\n { type: 'user', properties: { order_id: '0rd3r1d' } },\n ],\n ['fullstory.trackEvent', { name: 'Purchase', properties: {} }],\n ],\n};\n\n/**\n * silent: true with identify -- mapping.silent suppresses trackEvent but\n * still executes identify and set from the mapping rule.\n */\nexport const silentWithIdentify: FullStoryStepExample = {\n public: false,\n in: getEvent('user login', {\n timestamp: 1700000108,\n data: { id: 'u-123', name: 'Jane Doe' },\n }),\n mapping: {\n silent: true,\n settings: {\n identify: {\n map: {\n uid: 'data.id',\n properties: {\n map: {\n displayName: 'data.name',\n },\n },\n },\n },\n },\n },\n out: [\n [\n 'fullstory.setIdentity',\n { uid: 'u-123', properties: { displayName: 'Jane Doe' } },\n ],\n ],\n};\n\n/**\n * Consent grant -- settings.consent maps walkerOS consent key \"analytics\"\n * to FullStory \"capture\" action. Granting consent calls FullStory('start').\n *\n * Uses command='consent' so the test runner dispatches via\n * elb('walker consent', in) instead of pushing an event.\n */\nexport const consentGrantCapture: FullStoryStepExample = {\n title: 'Start capture',\n description:\n 'A walker consent grant for analytics calls FullStory start to resume session recording.',\n command: 'consent',\n in: { analytics: true } as WalkerOS.Consent,\n settings: {\n consent: {\n analytics: 'capture',\n },\n },\n out: [['fullstory.start']],\n};\n\n/**\n * Consent revoke -- after analytics consent is granted (FullStory starts\n * capture), revoking it calls FullStory('shutdown'). The destination is never\n * loaded under denied consent, so the shutdown is a real revocation of an\n * already-granted destination.\n */\nexport const consentRevokeCapture: FullStoryStepExample = {\n title: 'Shutdown capture',\n description:\n 'A walker consent revoke for analytics calls FullStory shutdown to stop session recording.',\n command: 'consent',\n before: { analytics: true },\n in: { analytics: false } as WalkerOS.Consent,\n settings: {\n consent: {\n analytics: 'capture',\n },\n },\n out: [['fullstory.start'], ['fullstory.shutdown']],\n};\n\n/**\n * Consent flag -- settings.consent maps walkerOS consent key to FullStory\n * \"consent\" action. Granting calls setIdentity({ consent: true }).\n */\nexport const consentGrantFlag: FullStoryStepExample = {\n title: 'Consent flag granted',\n description:\n 'A walker consent grant with action consent sets the FullStory identity consent flag to true.',\n command: 'consent',\n in: { marketing: true } as WalkerOS.Consent,\n settings: {\n consent: {\n marketing: 'consent',\n },\n },\n out: [['fullstory.setIdentity', { consent: true }]],\n};\n\n/**\n * Consent flag revoke -- after marketing consent is granted (the destination\n * loads), revoking it calls setIdentity({ consent: false }). The destination is\n * never loaded under denied consent, so the revoke acts on an already-granted\n * destination.\n */\nexport const consentRevokeFlag: FullStoryStepExample = {\n title: 'Consent flag revoked',\n description:\n 'A walker consent revoke with action consent sets the FullStory identity consent flag to false.',\n command: 'consent',\n before: { marketing: true },\n in: { marketing: false } as WalkerOS.Consent,\n settings: {\n consent: {\n marketing: 'consent',\n },\n },\n out: [\n ['fullstory.setIdentity', { consent: true }],\n ['fullstory.setIdentity', { consent: false }],\n ],\n};\n"],"mappings":"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","names":["import_dev","import_dev"]}
package/dist/dev.mjs CHANGED
@@ -1 +1 @@
1
- var e=Object.defineProperty,t=(t,r)=>{for(var n in r)e(t,n,{get:r[n],enumerable:!0})},r={};t(r,{MappingSchema:()=>a,SettingsSchema:()=>o,mapping:()=>p,settings:()=>l});import{zodToSchema as n}from"@walkeros/core/dev";import{z as i}from"@walkeros/core/dev";var o=i.object({orgId:i.string().min(1).describe('Your FullStory organization ID (e.g. "o-XXXXXX-na1"). Find it in FullStory under Settings > General.'),host:i.string().describe("Recording server host for proxy support.").optional(),script:i.string().describe("Custom script CDN host domain.").optional(),cookieDomain:i.string().describe("Override cookie domain for cross-subdomain tracking.").optional(),debug:i.boolean().describe("Enable browser console debug logging.").optional(),devMode:i.boolean().describe("Disable recording entirely for development environments.").optional(),startCaptureManually:i.boolean().describe('Delay capture until FullStory("start") is called. Recommended for GDPR: init the SDK immediately but wait for consent before recording.').optional(),namespace:i.string().describe('Global FS identifier override (default: "FS").').optional(),recordCrossDomainIFrames:i.boolean().describe("Enable cross-domain iframe recording.").optional(),identify:i.unknown().describe("Destination-level identity mapping. Resolves to { uid, properties? } for FullStory setIdentity. Fires on every push.").optional(),consent:i.record(i.string(),i.enum(["capture","consent"])).describe('Translation table from walkerOS consent keys to FullStory consent actions. "capture" controls start/shutdown (recording on/off). "consent" controls setIdentity({ consent }) flag. Example: { "analytics": "capture" }.').optional()});import{z as s}from"@walkeros/core/dev";var a=s.object({identify:s.unknown().describe("Per-event identity mapping. Resolves to { uid, properties? } for FullStory setIdentity. Overrides destination-level identify for this event.").optional(),set:s.unknown().describe("Property mapping. Resolved object keys become FullStory setProperties() properties. Use with setType to control scope.").optional(),setType:s.enum(["user","page"]).describe('Property scope for the set mapping. "user" persists across sessions; "page" resets on navigation. Default: "user".').optional()}),l=n(o),p=n(a),c={};t(c,{env:()=>d,step:()=>f});var d={};t(d,{init:()=>m,push:()=>y,simulation:()=>g});var u=()=>{},m={fullstory:{init:u,trackEvent:u,setIdentity:u,setProperties:u,shutdown:u,start:u}},y={fullstory:{init:u,trackEvent:u,setIdentity:u,setProperties:u,shutdown:u,start:u}},g=["call:fullstory.init","call:fullstory.trackEvent","call:fullstory.setIdentity","call:fullstory.setProperties","call:fullstory.shutdown","call:fullstory.start"],f={};t(f,{combinedFeatures:()=>I,consentGrantCapture:()=>D,consentGrantFlag:()=>R,consentRevokeCapture:()=>A,consentRevokeFlag:()=>C,defaultEventForwarding:()=>h,destinationLevelIdentify:()=>S,mappedEventName:()=>b,setPageProperties:()=>P,setUserProperties:()=>F,silentWithIdentify:()=>E,userLoginIdentify:()=>w,wildcardIgnored:()=>k});import{getEvent as v}from"@walkeros/core";var h={title:"Default event",description:"A walker event becomes a FullStory trackEvent call with the event name and empty properties.",in:v("product view",{timestamp:1700000100}),out:[["fullstory.trackEvent",{name:"product view",properties:{}}]]},k={public:!1,in:v("debug noise",{timestamp:1700000101}),mapping:{ignore:!0},out:[]},b={title:"Renamed event",description:"A mapping renames the event so the FullStory trackEvent uses Purchase instead of the walker name.",in:v("order complete",{timestamp:1700000102}),mapping:{name:"Purchase"},out:[["fullstory.trackEvent",{name:"Purchase",properties:{}}]]},w={title:"User login identify",description:"A user login fires FullStory setIdentity with uid and profile properties before tracking the event.",in:v("user login",{timestamp:1700000103,data:{id:"u-123",name:"Jane Doe",email:"jane@example.com"}}),mapping:{settings:{identify:{map:{uid:"data.id",properties:{map:{displayName:"data.name",email:"data.email"}}}}}},out:[["fullstory.setIdentity",{uid:"u-123",properties:{displayName:"Jane Doe",email:"jane@example.com"}}],["fullstory.trackEvent",{name:"user login",properties:{}}]]},S={title:"Destination identify",description:"Destination-level identify fires FullStory setIdentity with the user id before every track call.",in:v("page view",{timestamp:1700000104}),settings:{identify:{map:{uid:"user.id"}}},out:[["fullstory.setIdentity",{uid:"us3r"}],["fullstory.trackEvent",{name:"page view",properties:{}}]]},F={title:"Set user properties",description:"A purchase sets user-level FullStory properties such as revenue and currency alongside the tracked event.",in:v("order complete",{timestamp:1700000105}),mapping:{name:"Purchase",settings:{set:{map:{revenue:"data.total",currency:"data.currency"}}}},out:[["fullstory.setProperties",{type:"user",properties:{revenue:555,currency:"EUR"}}],["fullstory.trackEvent",{name:"Purchase",properties:{}}]]},P={title:"Set page properties",description:"A page view sets FullStory page-type properties without firing a track, since FullStory auto-captures navigation.",in:v("page view",{timestamp:1700000106,data:{id:"/docs/",title:"Getting Started"}}),mapping:{silent:!0,settings:{set:{map:{pageName:"data.title"}},setType:"page"}},out:[["fullstory.setProperties",{type:"page",properties:{pageName:"Getting Started"}}]]},I={title:"Combined features",description:"A purchase fires FullStory setIdentity, setProperties, and trackEvent in the canonical execution order.",in:v("order complete",{timestamp:1700000107}),mapping:{name:"Purchase",settings:{identify:{map:{uid:"user.id"}},set:{map:{order_id:"data.id"}}}},out:[["fullstory.setIdentity",{uid:"us3r"}],["fullstory.setProperties",{type:"user",properties:{order_id:"0rd3r1d"}}],["fullstory.trackEvent",{name:"Purchase",properties:{}}]]},E={public:!1,in:v("user login",{timestamp:1700000108,data:{id:"u-123",name:"Jane Doe"}}),mapping:{silent:!0,settings:{identify:{map:{uid:"data.id",properties:{map:{displayName:"data.name"}}}}}},out:[["fullstory.setIdentity",{uid:"u-123",properties:{displayName:"Jane Doe"}}]]},D={title:"Start capture",description:"A walker consent grant for analytics calls FullStory start to resume session recording.",command:"consent",in:{analytics:!0},settings:{consent:{analytics:"capture"}},out:[["fullstory.start"]]},A={title:"Shutdown capture",description:"A walker consent revoke for analytics calls FullStory shutdown to stop session recording.",command:"consent",in:{analytics:!1},settings:{consent:{analytics:"capture"}},out:[["fullstory.shutdown"]]},R={title:"Consent flag granted",description:"A walker consent grant with action consent sets the FullStory identity consent flag to true.",command:"consent",in:{marketing:!0},settings:{consent:{marketing:"consent"}},out:[["fullstory.setIdentity",{consent:!0}]]},C={title:"Consent flag revoked",description:"A walker consent revoke with action consent sets the FullStory identity consent flag to false.",command:"consent",in:{marketing:!1},settings:{consent:{marketing:"consent"}},out:[["fullstory.setIdentity",{consent:!1}]]};export{c as examples,r as schemas};//# sourceMappingURL=dev.mjs.map
1
+ var e=Object.defineProperty,t=(t,r)=>{for(var n in r)e(t,n,{get:r[n],enumerable:!0})},r={};t(r,{MappingSchema:()=>a,SettingsSchema:()=>s,mapping:()=>p,settings:()=>l});import{zodToSchema as n}from"@walkeros/core/dev";import{z as i}from"@walkeros/core/dev";var s=i.object({orgId:i.string().min(1).describe('Your FullStory organization ID (e.g. "o-XXXXXX-na1"). Find it in FullStory under Settings > General.'),host:i.string().describe("Recording server host for proxy support.").optional(),script:i.string().describe("Custom script CDN host domain.").optional(),cookieDomain:i.string().describe("Override cookie domain for cross-subdomain tracking.").optional(),debug:i.boolean().describe("Enable browser console debug logging.").optional(),devMode:i.boolean().describe("Disable recording entirely for development environments.").optional(),startCaptureManually:i.boolean().describe('Delay capture until FullStory("start") is called. Recommended for GDPR: init the SDK immediately but wait for consent before recording.').optional(),namespace:i.string().describe('Global FS identifier override (default: "FS").').optional(),recordCrossDomainIFrames:i.boolean().describe("Enable cross-domain iframe recording.").optional(),identify:i.unknown().describe("Destination-level identity mapping. Resolves to { uid, properties? } for FullStory setIdentity. Fires on every push.").optional(),consent:i.record(i.string(),i.enum(["capture","consent"])).describe('Translation table from walkerOS consent keys to FullStory consent actions. "capture" controls start/shutdown (recording on/off). "consent" controls setIdentity({ consent }) flag. Example: { "analytics": "capture" }.').optional()});import{z as o}from"@walkeros/core/dev";var a=o.object({identify:o.unknown().describe("Per-event identity mapping. Resolves to { uid, properties? } for FullStory setIdentity. Overrides destination-level identify for this event.").optional(),set:o.unknown().describe("Property mapping. Resolved object keys become FullStory setProperties() properties. Use with setType to control scope.").optional(),setType:o.enum(["user","page"]).describe('Property scope for the set mapping. "user" persists across sessions; "page" resets on navigation. Default: "user".').optional()}),l=n(s),p=n(a),c={};t(c,{env:()=>d,step:()=>f});var d={};t(d,{init:()=>m,push:()=>y,simulation:()=>g});var u=()=>{},m={fullstory:{init:u,trackEvent:u,setIdentity:u,setProperties:u,shutdown:u,start:u}},y={fullstory:{init:u,trackEvent:u,setIdentity:u,setProperties:u,shutdown:u,start:u}},g=["call:fullstory.init","call:fullstory.trackEvent","call:fullstory.setIdentity","call:fullstory.setProperties","call:fullstory.shutdown","call:fullstory.start"],f={};t(f,{combinedFeatures:()=>P,consentGrantCapture:()=>D,consentGrantFlag:()=>R,consentRevokeCapture:()=>A,consentRevokeFlag:()=>C,defaultEventForwarding:()=>h,destinationLevelIdentify:()=>S,mappedEventName:()=>k,setPageProperties:()=>I,setUserProperties:()=>F,silentWithIdentify:()=>E,userLoginIdentify:()=>w,wildcardIgnored:()=>b});import{getEvent as v}from"@walkeros/core";var h={title:"Default event",description:"A walker event becomes a FullStory trackEvent call with the event name and empty properties.",in:v("product view",{timestamp:1700000100}),out:[["fullstory.trackEvent",{name:"product view",properties:{}}]]},b={public:!1,in:v("debug noise",{timestamp:1700000101}),mapping:{ignore:!0},out:[]},k={title:"Renamed event",description:"A mapping renames the event so the FullStory trackEvent uses Purchase instead of the walker name.",in:v("order complete",{timestamp:1700000102}),mapping:{name:"Purchase"},out:[["fullstory.trackEvent",{name:"Purchase",properties:{}}]]},w={title:"User login identify",description:"A user login fires FullStory setIdentity with uid and profile properties before tracking the event.",in:v("user login",{timestamp:1700000103,data:{id:"u-123",name:"Jane Doe",email:"jane@example.com"}}),mapping:{settings:{identify:{map:{uid:"data.id",properties:{map:{displayName:"data.name",email:"data.email"}}}}}},out:[["fullstory.setIdentity",{uid:"u-123",properties:{displayName:"Jane Doe",email:"jane@example.com"}}],["fullstory.trackEvent",{name:"user login",properties:{}}]]},S={title:"Destination identify",description:"Destination-level identify fires FullStory setIdentity with the user id before every track call.",in:v("page view",{timestamp:1700000104}),settings:{identify:{map:{uid:"user.id"}}},out:[["fullstory.setIdentity",{uid:"us3r"}],["fullstory.trackEvent",{name:"page view",properties:{}}]]},F={title:"Set user properties",description:"A purchase sets user-level FullStory properties such as revenue and currency alongside the tracked event.",in:v("order complete",{timestamp:1700000105}),mapping:{name:"Purchase",settings:{set:{map:{revenue:"data.total",currency:"data.currency"}}}},out:[["fullstory.setProperties",{type:"user",properties:{revenue:555,currency:"EUR"}}],["fullstory.trackEvent",{name:"Purchase",properties:{}}]]},I={title:"Set page properties",description:"A page view sets FullStory page-type properties without firing a track, since FullStory auto-captures navigation.",in:v("page view",{timestamp:1700000106,data:{id:"/docs/",title:"Getting Started"}}),mapping:{silent:!0,settings:{set:{map:{pageName:"data.title"}},setType:"page"}},out:[["fullstory.setProperties",{type:"page",properties:{pageName:"Getting Started"}}]]},P={title:"Combined features",description:"A purchase fires FullStory setIdentity, setProperties, and trackEvent in the canonical execution order.",in:v("order complete",{timestamp:1700000107}),mapping:{name:"Purchase",settings:{identify:{map:{uid:"user.id"}},set:{map:{order_id:"data.id"}}}},out:[["fullstory.setIdentity",{uid:"us3r"}],["fullstory.setProperties",{type:"user",properties:{order_id:"0rd3r1d"}}],["fullstory.trackEvent",{name:"Purchase",properties:{}}]]},E={public:!1,in:v("user login",{timestamp:1700000108,data:{id:"u-123",name:"Jane Doe"}}),mapping:{silent:!0,settings:{identify:{map:{uid:"data.id",properties:{map:{displayName:"data.name"}}}}}},out:[["fullstory.setIdentity",{uid:"u-123",properties:{displayName:"Jane Doe"}}]]},D={title:"Start capture",description:"A walker consent grant for analytics calls FullStory start to resume session recording.",command:"consent",in:{analytics:!0},settings:{consent:{analytics:"capture"}},out:[["fullstory.start"]]},A={title:"Shutdown capture",description:"A walker consent revoke for analytics calls FullStory shutdown to stop session recording.",command:"consent",before:{analytics:!0},in:{analytics:!1},settings:{consent:{analytics:"capture"}},out:[["fullstory.start"],["fullstory.shutdown"]]},R={title:"Consent flag granted",description:"A walker consent grant with action consent sets the FullStory identity consent flag to true.",command:"consent",in:{marketing:!0},settings:{consent:{marketing:"consent"}},out:[["fullstory.setIdentity",{consent:!0}]]},C={title:"Consent flag revoked",description:"A walker consent revoke with action consent sets the FullStory identity consent flag to false.",command:"consent",before:{marketing:!0},in:{marketing:!1},settings:{consent:{marketing:"consent"}},out:[["fullstory.setIdentity",{consent:!0}],["fullstory.setIdentity",{consent:!1}]]};export{c as examples,r as schemas};//# sourceMappingURL=dev.mjs.map
package/dist/dev.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/schemas/index.ts","../src/schemas/settings.ts","../src/schemas/mapping.ts","../src/examples/index.ts","../src/examples/env.ts","../src/examples/step.ts"],"sourcesContent":["import { zodToSchema } from '@walkeros/core/dev';\nimport { SettingsSchema } from './settings';\nimport { MappingSchema } from './mapping';\n\nexport { SettingsSchema, type Settings } from './settings';\nexport { MappingSchema, type Mapping } from './mapping';\n\n// JSON Schema\nexport const settings = zodToSchema(SettingsSchema);\nexport const mapping = zodToSchema(MappingSchema);\n","import { z } from '@walkeros/core/dev';\n\nexport const SettingsSchema = z.object({\n orgId: z\n .string()\n .min(1)\n .describe(\n 'Your FullStory organization ID (e.g. \"o-XXXXXX-na1\"). Find it in FullStory under Settings > General.',\n ),\n host: z\n .string()\n .describe('Recording server host for proxy support.')\n .optional(),\n script: z.string().describe('Custom script CDN host domain.').optional(),\n cookieDomain: z\n .string()\n .describe('Override cookie domain for cross-subdomain tracking.')\n .optional(),\n debug: z\n .boolean()\n .describe('Enable browser console debug logging.')\n .optional(),\n devMode: z\n .boolean()\n .describe('Disable recording entirely for development environments.')\n .optional(),\n startCaptureManually: z\n .boolean()\n .describe(\n 'Delay capture until FullStory(\"start\") is called. Recommended for GDPR: init the SDK immediately but wait for consent before recording.',\n )\n .optional(),\n namespace: z\n .string()\n .describe('Global FS identifier override (default: \"FS\").')\n .optional(),\n recordCrossDomainIFrames: z\n .boolean()\n .describe('Enable cross-domain iframe recording.')\n .optional(),\n identify: z\n .unknown()\n .describe(\n 'Destination-level identity mapping. Resolves to { uid, properties? } for FullStory setIdentity. Fires on every push.',\n )\n .optional(),\n consent: z\n .record(z.string(), z.enum(['capture', 'consent']))\n .describe(\n 'Translation table from walkerOS consent keys to FullStory consent actions. \"capture\" controls start/shutdown (recording on/off). \"consent\" controls setIdentity({ consent }) flag. Example: { \"analytics\": \"capture\" }.',\n )\n .optional(),\n});\n\nexport type Settings = z.infer<typeof SettingsSchema>;\n","import { z } from '@walkeros/core/dev';\n\nexport const MappingSchema = z.object({\n identify: z\n .unknown()\n .describe(\n 'Per-event identity mapping. Resolves to { uid, properties? } for FullStory setIdentity. Overrides destination-level identify for this event.',\n )\n .optional(),\n set: z\n .unknown()\n .describe(\n 'Property mapping. Resolved object keys become FullStory setProperties() properties. Use with setType to control scope.',\n )\n .optional(),\n setType: z\n .enum(['user', 'page'])\n .describe(\n 'Property scope for the set mapping. \"user\" persists across sessions; \"page\" resets on navigation. Default: \"user\".',\n )\n .optional(),\n});\n\nexport type Mapping = z.infer<typeof MappingSchema>;\n","export * as env from './env';\nexport * as step from './step';\n","import type { Env } from '../types';\n\n/**\n * Example environment configurations for FullStory destination.\n *\n * Tests clone `push` and replace individual methods with jest spies.\n * Production leaves `env.fullstory` undefined -- the destination falls back\n * to the real `@fullstory/browser` SDK.\n */\n\nconst noop = () => {};\n\n// Narrow helper types for the shared `noop` -> specific SDK signatures without\n// loose casts.\ntype FSInit = NonNullable<Env['fullstory']>['init'];\ntype FSTrackEvent = NonNullable<Env['fullstory']>['trackEvent'];\ntype FSSetIdentity = NonNullable<Env['fullstory']>['setIdentity'];\ntype FSSetProperties = NonNullable<Env['fullstory']>['setProperties'];\n\n/**\n * Pre-init environment -- FullStory SDK methods are no-ops until init wires them.\n */\nexport const init: Env | undefined = {\n fullstory: {\n init: noop as FSInit,\n trackEvent: noop as FSTrackEvent,\n setIdentity: noop as FSSetIdentity,\n setProperties: noop as FSSetProperties,\n shutdown: noop,\n start: noop,\n },\n};\n\n/**\n * Post-init environment -- FullStory SDK methods are spy-able no-ops.\n * Tests clone this and replace individual methods with jest.fn() for assertions.\n */\nexport const push: Env = {\n fullstory: {\n init: noop as FSInit,\n trackEvent: noop as FSTrackEvent,\n setIdentity: noop as FSSetIdentity,\n setProperties: noop as FSSetProperties,\n shutdown: noop,\n start: noop,\n },\n};\n\n/**\n * Simulation tracking paths for CLI --simulate\n */\nexport const simulation = [\n 'call:fullstory.init',\n 'call:fullstory.trackEvent',\n 'call:fullstory.setIdentity',\n 'call:fullstory.setProperties',\n 'call:fullstory.shutdown',\n 'call:fullstory.start',\n];\n","import type { Flow, WalkerOS } from '@walkeros/core';\nimport { getEvent } from '@walkeros/core';\nimport type { Settings } from '../types';\n\n/**\n * Extended step example that may carry destination-level settings overrides.\n */\nexport type FullStoryStepExample = Flow.StepExample & {\n settings?: Partial<Settings>;\n};\n\n/**\n * Default event forwarding -- every walkerOS event becomes\n * FullStory('trackEvent', { name, properties }). No mapping rule needed.\n */\nexport const defaultEventForwarding: FullStoryStepExample = {\n title: 'Default event',\n description:\n 'A walker event becomes a FullStory trackEvent call with the event name and empty properties.',\n in: getEvent('product view', { timestamp: 1700000100 }),\n out: [['fullstory.trackEvent', { name: 'product view', properties: {} }]],\n};\n\n/**\n * Wildcard ignore -- the event matches a mapping rule with ignore: true.\n * The destination fires zero SDK calls.\n */\nexport const wildcardIgnored: FullStoryStepExample = {\n public: false,\n in: getEvent('debug noise', { timestamp: 1700000101 }),\n mapping: { ignore: true },\n out: [],\n};\n\n/**\n * Event name mapping -- mapping.name renames the walkerOS event for FullStory.\n */\nexport const mappedEventName: FullStoryStepExample = {\n title: 'Renamed event',\n description:\n 'A mapping renames the event so the FullStory trackEvent uses Purchase instead of the walker name.',\n in: getEvent('order complete', { timestamp: 1700000102 }),\n mapping: {\n name: 'Purchase',\n },\n out: [['fullstory.trackEvent', { name: 'Purchase', properties: {} }]],\n};\n\n/**\n * Per-event identify via mapping.settings.identify.\n * Resolves { uid, properties } and calls FullStory('setIdentity', ...).\n * Then fires the default trackEvent.\n */\nexport const userLoginIdentify: FullStoryStepExample = {\n title: 'User login identify',\n description:\n 'A user login fires FullStory setIdentity with uid and profile properties before tracking the event.',\n in: getEvent('user login', {\n timestamp: 1700000103,\n data: { id: 'u-123', name: 'Jane Doe', email: 'jane@example.com' },\n }),\n mapping: {\n settings: {\n identify: {\n map: {\n uid: 'data.id',\n properties: {\n map: {\n displayName: 'data.name',\n email: 'data.email',\n },\n },\n },\n },\n },\n },\n out: [\n [\n 'fullstory.setIdentity',\n {\n uid: 'u-123',\n properties: { displayName: 'Jane Doe', email: 'jane@example.com' },\n },\n ],\n ['fullstory.trackEvent', { name: 'user login', properties: {} }],\n ],\n};\n\n/**\n * Destination-level settings.identify -- fires setIdentity on every push.\n * Uses user.id from the standard getEvent fixture.\n */\nexport const destinationLevelIdentify: FullStoryStepExample = {\n title: 'Destination identify',\n description:\n 'Destination-level identify fires FullStory setIdentity with the user id before every track call.',\n in: getEvent('page view', { timestamp: 1700000104 }),\n settings: {\n identify: {\n map: {\n uid: 'user.id',\n },\n },\n },\n out: [\n ['fullstory.setIdentity', { uid: 'us3r' }],\n ['fullstory.trackEvent', { name: 'page view', properties: {} }],\n ],\n};\n\n/**\n * User properties via mapping.settings.set with default setType ('user').\n * Calls FullStory('setProperties', { type: 'user', properties }).\n */\nexport const setUserProperties: FullStoryStepExample = {\n title: 'Set user properties',\n description:\n 'A purchase sets user-level FullStory properties such as revenue and currency alongside the tracked event.',\n in: getEvent('order complete', { timestamp: 1700000105 }),\n mapping: {\n name: 'Purchase',\n settings: {\n set: {\n map: {\n revenue: 'data.total',\n currency: 'data.currency',\n },\n },\n },\n },\n out: [\n [\n 'fullstory.setProperties',\n { type: 'user', properties: { revenue: 555, currency: 'EUR' } },\n ],\n ['fullstory.trackEvent', { name: 'Purchase', properties: {} }],\n ],\n};\n\n/**\n * Page properties via mapping.settings.set with setType: 'page'.\n * silent: true suppresses trackEvent -- useful for page views where\n * FullStory already auto-captures navigation.\n */\nexport const setPageProperties: FullStoryStepExample = {\n title: 'Set page properties',\n description:\n 'A page view sets FullStory page-type properties without firing a track, since FullStory auto-captures navigation.',\n in: getEvent('page view', {\n timestamp: 1700000106,\n data: { id: '/docs/', title: 'Getting Started' },\n }),\n mapping: {\n silent: true,\n settings: {\n set: {\n map: {\n pageName: 'data.title',\n },\n },\n setType: 'page',\n },\n },\n out: [\n [\n 'fullstory.setProperties',\n { type: 'page', properties: { pageName: 'Getting Started' } },\n ],\n ],\n};\n\n/**\n * Combined features -- identify the user, set user properties, then fire\n * the event. Tests push execution order: identify -> setProperties -> trackEvent.\n */\nexport const combinedFeatures: FullStoryStepExample = {\n title: 'Combined features',\n description:\n 'A purchase fires FullStory setIdentity, setProperties, and trackEvent in the canonical execution order.',\n in: getEvent('order complete', { timestamp: 1700000107 }),\n mapping: {\n name: 'Purchase',\n settings: {\n identify: { map: { uid: 'user.id' } },\n set: { map: { order_id: 'data.id' } },\n },\n },\n out: [\n ['fullstory.setIdentity', { uid: 'us3r' }],\n [\n 'fullstory.setProperties',\n { type: 'user', properties: { order_id: '0rd3r1d' } },\n ],\n ['fullstory.trackEvent', { name: 'Purchase', properties: {} }],\n ],\n};\n\n/**\n * silent: true with identify -- mapping.silent suppresses trackEvent but\n * still executes identify and set from the mapping rule.\n */\nexport const silentWithIdentify: FullStoryStepExample = {\n public: false,\n in: getEvent('user login', {\n timestamp: 1700000108,\n data: { id: 'u-123', name: 'Jane Doe' },\n }),\n mapping: {\n silent: true,\n settings: {\n identify: {\n map: {\n uid: 'data.id',\n properties: {\n map: {\n displayName: 'data.name',\n },\n },\n },\n },\n },\n },\n out: [\n [\n 'fullstory.setIdentity',\n { uid: 'u-123', properties: { displayName: 'Jane Doe' } },\n ],\n ],\n};\n\n/**\n * Consent grant -- settings.consent maps walkerOS consent key \"analytics\"\n * to FullStory \"capture\" action. Granting consent calls FullStory('start').\n *\n * Uses command='consent' so the test runner dispatches via\n * elb('walker consent', in) instead of pushing an event.\n */\nexport const consentGrantCapture: FullStoryStepExample = {\n title: 'Start capture',\n description:\n 'A walker consent grant for analytics calls FullStory start to resume session recording.',\n command: 'consent',\n in: { analytics: true } as WalkerOS.Consent,\n settings: {\n consent: {\n analytics: 'capture',\n },\n },\n out: [['fullstory.start']],\n};\n\n/**\n * Consent revoke -- revoking consent calls FullStory('shutdown').\n */\nexport const consentRevokeCapture: FullStoryStepExample = {\n title: 'Shutdown capture',\n description:\n 'A walker consent revoke for analytics calls FullStory shutdown to stop session recording.',\n command: 'consent',\n in: { analytics: false } as WalkerOS.Consent,\n settings: {\n consent: {\n analytics: 'capture',\n },\n },\n out: [['fullstory.shutdown']],\n};\n\n/**\n * Consent flag -- settings.consent maps walkerOS consent key to FullStory\n * \"consent\" action. Granting calls setIdentity({ consent: true }).\n */\nexport const consentGrantFlag: FullStoryStepExample = {\n title: 'Consent flag granted',\n description:\n 'A walker consent grant with action consent sets the FullStory identity consent flag to true.',\n command: 'consent',\n in: { marketing: true } as WalkerOS.Consent,\n settings: {\n consent: {\n marketing: 'consent',\n },\n },\n out: [['fullstory.setIdentity', { consent: true }]],\n};\n\n/**\n * Consent flag revoke -- calls setIdentity({ consent: false }).\n */\nexport const consentRevokeFlag: FullStoryStepExample = {\n title: 'Consent flag revoked',\n description:\n 'A walker consent revoke with action consent sets the FullStory identity consent flag to false.',\n command: 'consent',\n in: { marketing: false } as WalkerOS.Consent,\n settings: {\n consent: {\n marketing: 'consent',\n },\n },\n out: [['fullstory.setIdentity', { consent: false }]],\n};\n"],"mappings":"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","names":["z"]}
1
+ {"version":3,"sources":["../src/schemas/index.ts","../src/schemas/settings.ts","../src/schemas/mapping.ts","../src/examples/index.ts","../src/examples/env.ts","../src/examples/step.ts"],"sourcesContent":["import { zodToSchema } from '@walkeros/core/dev';\nimport { SettingsSchema } from './settings';\nimport { MappingSchema } from './mapping';\n\nexport { SettingsSchema, type Settings } from './settings';\nexport { MappingSchema, type Mapping } from './mapping';\n\n// JSON Schema\nexport const settings = zodToSchema(SettingsSchema);\nexport const mapping = zodToSchema(MappingSchema);\n","import { z } from '@walkeros/core/dev';\n\nexport const SettingsSchema = z.object({\n orgId: z\n .string()\n .min(1)\n .describe(\n 'Your FullStory organization ID (e.g. \"o-XXXXXX-na1\"). Find it in FullStory under Settings > General.',\n ),\n host: z\n .string()\n .describe('Recording server host for proxy support.')\n .optional(),\n script: z.string().describe('Custom script CDN host domain.').optional(),\n cookieDomain: z\n .string()\n .describe('Override cookie domain for cross-subdomain tracking.')\n .optional(),\n debug: z\n .boolean()\n .describe('Enable browser console debug logging.')\n .optional(),\n devMode: z\n .boolean()\n .describe('Disable recording entirely for development environments.')\n .optional(),\n startCaptureManually: z\n .boolean()\n .describe(\n 'Delay capture until FullStory(\"start\") is called. Recommended for GDPR: init the SDK immediately but wait for consent before recording.',\n )\n .optional(),\n namespace: z\n .string()\n .describe('Global FS identifier override (default: \"FS\").')\n .optional(),\n recordCrossDomainIFrames: z\n .boolean()\n .describe('Enable cross-domain iframe recording.')\n .optional(),\n identify: z\n .unknown()\n .describe(\n 'Destination-level identity mapping. Resolves to { uid, properties? } for FullStory setIdentity. Fires on every push.',\n )\n .optional(),\n consent: z\n .record(z.string(), z.enum(['capture', 'consent']))\n .describe(\n 'Translation table from walkerOS consent keys to FullStory consent actions. \"capture\" controls start/shutdown (recording on/off). \"consent\" controls setIdentity({ consent }) flag. Example: { \"analytics\": \"capture\" }.',\n )\n .optional(),\n});\n\nexport type Settings = z.infer<typeof SettingsSchema>;\n","import { z } from '@walkeros/core/dev';\n\nexport const MappingSchema = z.object({\n identify: z\n .unknown()\n .describe(\n 'Per-event identity mapping. Resolves to { uid, properties? } for FullStory setIdentity. Overrides destination-level identify for this event.',\n )\n .optional(),\n set: z\n .unknown()\n .describe(\n 'Property mapping. Resolved object keys become FullStory setProperties() properties. Use with setType to control scope.',\n )\n .optional(),\n setType: z\n .enum(['user', 'page'])\n .describe(\n 'Property scope for the set mapping. \"user\" persists across sessions; \"page\" resets on navigation. Default: \"user\".',\n )\n .optional(),\n});\n\nexport type Mapping = z.infer<typeof MappingSchema>;\n","export * as env from './env';\nexport * as step from './step';\n","import type { Env } from '../types';\n\n/**\n * Example environment configurations for FullStory destination.\n *\n * Tests clone `push` and replace individual methods with jest spies.\n * Production leaves `env.fullstory` undefined -- the destination falls back\n * to the real `@fullstory/browser` SDK.\n */\n\nconst noop = () => {};\n\n// Narrow helper types for the shared `noop` -> specific SDK signatures without\n// loose casts.\ntype FSInit = NonNullable<Env['fullstory']>['init'];\ntype FSTrackEvent = NonNullable<Env['fullstory']>['trackEvent'];\ntype FSSetIdentity = NonNullable<Env['fullstory']>['setIdentity'];\ntype FSSetProperties = NonNullable<Env['fullstory']>['setProperties'];\n\n/**\n * Pre-init environment -- FullStory SDK methods are no-ops until init wires them.\n */\nexport const init: Env | undefined = {\n fullstory: {\n init: noop as FSInit,\n trackEvent: noop as FSTrackEvent,\n setIdentity: noop as FSSetIdentity,\n setProperties: noop as FSSetProperties,\n shutdown: noop,\n start: noop,\n },\n};\n\n/**\n * Post-init environment -- FullStory SDK methods are spy-able no-ops.\n * Tests clone this and replace individual methods with jest.fn() for assertions.\n */\nexport const push: Env = {\n fullstory: {\n init: noop as FSInit,\n trackEvent: noop as FSTrackEvent,\n setIdentity: noop as FSSetIdentity,\n setProperties: noop as FSSetProperties,\n shutdown: noop,\n start: noop,\n },\n};\n\n/**\n * Simulation tracking paths for CLI --simulate\n */\nexport const simulation = [\n 'call:fullstory.init',\n 'call:fullstory.trackEvent',\n 'call:fullstory.setIdentity',\n 'call:fullstory.setProperties',\n 'call:fullstory.shutdown',\n 'call:fullstory.start',\n];\n","import type { Flow, WalkerOS } from '@walkeros/core';\nimport { getEvent } from '@walkeros/core';\nimport type { Settings } from '../types';\n\n/**\n * Extended step example that may carry destination-level settings overrides.\n */\nexport type FullStoryStepExample = Flow.StepExample & {\n settings?: Partial<Settings>;\n /** Consent granted before `in` so a gated destination is loaded first. */\n before?: WalkerOS.Consent;\n};\n\n/**\n * Default event forwarding -- every walkerOS event becomes\n * FullStory('trackEvent', { name, properties }). No mapping rule needed.\n */\nexport const defaultEventForwarding: FullStoryStepExample = {\n title: 'Default event',\n description:\n 'A walker event becomes a FullStory trackEvent call with the event name and empty properties.',\n in: getEvent('product view', { timestamp: 1700000100 }),\n out: [['fullstory.trackEvent', { name: 'product view', properties: {} }]],\n};\n\n/**\n * Wildcard ignore -- the event matches a mapping rule with ignore: true.\n * The destination fires zero SDK calls.\n */\nexport const wildcardIgnored: FullStoryStepExample = {\n public: false,\n in: getEvent('debug noise', { timestamp: 1700000101 }),\n mapping: { ignore: true },\n out: [],\n};\n\n/**\n * Event name mapping -- mapping.name renames the walkerOS event for FullStory.\n */\nexport const mappedEventName: FullStoryStepExample = {\n title: 'Renamed event',\n description:\n 'A mapping renames the event so the FullStory trackEvent uses Purchase instead of the walker name.',\n in: getEvent('order complete', { timestamp: 1700000102 }),\n mapping: {\n name: 'Purchase',\n },\n out: [['fullstory.trackEvent', { name: 'Purchase', properties: {} }]],\n};\n\n/**\n * Per-event identify via mapping.settings.identify.\n * Resolves { uid, properties } and calls FullStory('setIdentity', ...).\n * Then fires the default trackEvent.\n */\nexport const userLoginIdentify: FullStoryStepExample = {\n title: 'User login identify',\n description:\n 'A user login fires FullStory setIdentity with uid and profile properties before tracking the event.',\n in: getEvent('user login', {\n timestamp: 1700000103,\n data: { id: 'u-123', name: 'Jane Doe', email: 'jane@example.com' },\n }),\n mapping: {\n settings: {\n identify: {\n map: {\n uid: 'data.id',\n properties: {\n map: {\n displayName: 'data.name',\n email: 'data.email',\n },\n },\n },\n },\n },\n },\n out: [\n [\n 'fullstory.setIdentity',\n {\n uid: 'u-123',\n properties: { displayName: 'Jane Doe', email: 'jane@example.com' },\n },\n ],\n ['fullstory.trackEvent', { name: 'user login', properties: {} }],\n ],\n};\n\n/**\n * Destination-level settings.identify -- fires setIdentity on every push.\n * Uses user.id from the standard getEvent fixture.\n */\nexport const destinationLevelIdentify: FullStoryStepExample = {\n title: 'Destination identify',\n description:\n 'Destination-level identify fires FullStory setIdentity with the user id before every track call.',\n in: getEvent('page view', { timestamp: 1700000104 }),\n settings: {\n identify: {\n map: {\n uid: 'user.id',\n },\n },\n },\n out: [\n ['fullstory.setIdentity', { uid: 'us3r' }],\n ['fullstory.trackEvent', { name: 'page view', properties: {} }],\n ],\n};\n\n/**\n * User properties via mapping.settings.set with default setType ('user').\n * Calls FullStory('setProperties', { type: 'user', properties }).\n */\nexport const setUserProperties: FullStoryStepExample = {\n title: 'Set user properties',\n description:\n 'A purchase sets user-level FullStory properties such as revenue and currency alongside the tracked event.',\n in: getEvent('order complete', { timestamp: 1700000105 }),\n mapping: {\n name: 'Purchase',\n settings: {\n set: {\n map: {\n revenue: 'data.total',\n currency: 'data.currency',\n },\n },\n },\n },\n out: [\n [\n 'fullstory.setProperties',\n { type: 'user', properties: { revenue: 555, currency: 'EUR' } },\n ],\n ['fullstory.trackEvent', { name: 'Purchase', properties: {} }],\n ],\n};\n\n/**\n * Page properties via mapping.settings.set with setType: 'page'.\n * silent: true suppresses trackEvent -- useful for page views where\n * FullStory already auto-captures navigation.\n */\nexport const setPageProperties: FullStoryStepExample = {\n title: 'Set page properties',\n description:\n 'A page view sets FullStory page-type properties without firing a track, since FullStory auto-captures navigation.',\n in: getEvent('page view', {\n timestamp: 1700000106,\n data: { id: '/docs/', title: 'Getting Started' },\n }),\n mapping: {\n silent: true,\n settings: {\n set: {\n map: {\n pageName: 'data.title',\n },\n },\n setType: 'page',\n },\n },\n out: [\n [\n 'fullstory.setProperties',\n { type: 'page', properties: { pageName: 'Getting Started' } },\n ],\n ],\n};\n\n/**\n * Combined features -- identify the user, set user properties, then fire\n * the event. Tests push execution order: identify -> setProperties -> trackEvent.\n */\nexport const combinedFeatures: FullStoryStepExample = {\n title: 'Combined features',\n description:\n 'A purchase fires FullStory setIdentity, setProperties, and trackEvent in the canonical execution order.',\n in: getEvent('order complete', { timestamp: 1700000107 }),\n mapping: {\n name: 'Purchase',\n settings: {\n identify: { map: { uid: 'user.id' } },\n set: { map: { order_id: 'data.id' } },\n },\n },\n out: [\n ['fullstory.setIdentity', { uid: 'us3r' }],\n [\n 'fullstory.setProperties',\n { type: 'user', properties: { order_id: '0rd3r1d' } },\n ],\n ['fullstory.trackEvent', { name: 'Purchase', properties: {} }],\n ],\n};\n\n/**\n * silent: true with identify -- mapping.silent suppresses trackEvent but\n * still executes identify and set from the mapping rule.\n */\nexport const silentWithIdentify: FullStoryStepExample = {\n public: false,\n in: getEvent('user login', {\n timestamp: 1700000108,\n data: { id: 'u-123', name: 'Jane Doe' },\n }),\n mapping: {\n silent: true,\n settings: {\n identify: {\n map: {\n uid: 'data.id',\n properties: {\n map: {\n displayName: 'data.name',\n },\n },\n },\n },\n },\n },\n out: [\n [\n 'fullstory.setIdentity',\n { uid: 'u-123', properties: { displayName: 'Jane Doe' } },\n ],\n ],\n};\n\n/**\n * Consent grant -- settings.consent maps walkerOS consent key \"analytics\"\n * to FullStory \"capture\" action. Granting consent calls FullStory('start').\n *\n * Uses command='consent' so the test runner dispatches via\n * elb('walker consent', in) instead of pushing an event.\n */\nexport const consentGrantCapture: FullStoryStepExample = {\n title: 'Start capture',\n description:\n 'A walker consent grant for analytics calls FullStory start to resume session recording.',\n command: 'consent',\n in: { analytics: true } as WalkerOS.Consent,\n settings: {\n consent: {\n analytics: 'capture',\n },\n },\n out: [['fullstory.start']],\n};\n\n/**\n * Consent revoke -- after analytics consent is granted (FullStory starts\n * capture), revoking it calls FullStory('shutdown'). The destination is never\n * loaded under denied consent, so the shutdown is a real revocation of an\n * already-granted destination.\n */\nexport const consentRevokeCapture: FullStoryStepExample = {\n title: 'Shutdown capture',\n description:\n 'A walker consent revoke for analytics calls FullStory shutdown to stop session recording.',\n command: 'consent',\n before: { analytics: true },\n in: { analytics: false } as WalkerOS.Consent,\n settings: {\n consent: {\n analytics: 'capture',\n },\n },\n out: [['fullstory.start'], ['fullstory.shutdown']],\n};\n\n/**\n * Consent flag -- settings.consent maps walkerOS consent key to FullStory\n * \"consent\" action. Granting calls setIdentity({ consent: true }).\n */\nexport const consentGrantFlag: FullStoryStepExample = {\n title: 'Consent flag granted',\n description:\n 'A walker consent grant with action consent sets the FullStory identity consent flag to true.',\n command: 'consent',\n in: { marketing: true } as WalkerOS.Consent,\n settings: {\n consent: {\n marketing: 'consent',\n },\n },\n out: [['fullstory.setIdentity', { consent: true }]],\n};\n\n/**\n * Consent flag revoke -- after marketing consent is granted (the destination\n * loads), revoking it calls setIdentity({ consent: false }). The destination is\n * never loaded under denied consent, so the revoke acts on an already-granted\n * destination.\n */\nexport const consentRevokeFlag: FullStoryStepExample = {\n title: 'Consent flag revoked',\n description:\n 'A walker consent revoke with action consent sets the FullStory identity consent flag to false.',\n command: 'consent',\n before: { marketing: true },\n in: { marketing: false } as WalkerOS.Consent,\n settings: {\n consent: {\n marketing: 'consent',\n },\n },\n out: [\n ['fullstory.setIdentity', { consent: true }],\n ['fullstory.setIdentity', { consent: false }],\n ],\n};\n"],"mappings":";;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAAS,mBAAmB;;;ACA5B,SAAS,SAAS;AAEX,IAAM,iBAAiB,EAAE,OAAO;AAAA,EACrC,OAAO,EACJ,OAAO,EACP,IAAI,CAAC,EACL;AAAA,IACC;AAAA,EACF;AAAA,EACF,MAAM,EACH,OAAO,EACP,SAAS,0CAA0C,EACnD,SAAS;AAAA,EACZ,QAAQ,EAAE,OAAO,EAAE,SAAS,gCAAgC,EAAE,SAAS;AAAA,EACvE,cAAc,EACX,OAAO,EACP,SAAS,sDAAsD,EAC/D,SAAS;AAAA,EACZ,OAAO,EACJ,QAAQ,EACR,SAAS,uCAAuC,EAChD,SAAS;AAAA,EACZ,SAAS,EACN,QAAQ,EACR,SAAS,0DAA0D,EACnE,SAAS;AAAA,EACZ,sBAAsB,EACnB,QAAQ,EACR;AAAA,IACC;AAAA,EACF,EACC,SAAS;AAAA,EACZ,WAAW,EACR,OAAO,EACP,SAAS,gDAAgD,EACzD,SAAS;AAAA,EACZ,0BAA0B,EACvB,QAAQ,EACR,SAAS,uCAAuC,EAChD,SAAS;AAAA,EACZ,UAAU,EACP,QAAQ,EACR;AAAA,IACC;AAAA,EACF,EACC,SAAS;AAAA,EACZ,SAAS,EACN,OAAO,EAAE,OAAO,GAAG,EAAE,KAAK,CAAC,WAAW,SAAS,CAAC,CAAC,EACjD;AAAA,IACC;AAAA,EACF,EACC,SAAS;AACd,CAAC;;;ACpDD,SAAS,KAAAA,UAAS;AAEX,IAAM,gBAAgBA,GAAE,OAAO;AAAA,EACpC,UAAUA,GACP,QAAQ,EACR;AAAA,IACC;AAAA,EACF,EACC,SAAS;AAAA,EACZ,KAAKA,GACF,QAAQ,EACR;AAAA,IACC;AAAA,EACF,EACC,SAAS;AAAA,EACZ,SAASA,GACN,KAAK,CAAC,QAAQ,MAAM,CAAC,EACrB;AAAA,IACC;AAAA,EACF,EACC,SAAS;AACd,CAAC;;;AFbM,IAAM,WAAW,YAAY,cAAc;AAC3C,IAAM,UAAU,YAAY,aAAa;;;AGThD;AAAA;AAAA;AAAA;AAAA;;;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUA,IAAM,OAAO,MAAM;AAAC;AAYb,IAAM,OAAwB;AAAA,EACnC,WAAW;AAAA,IACT,MAAM;AAAA,IACN,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,eAAe;AAAA,IACf,UAAU;AAAA,IACV,OAAO;AAAA,EACT;AACF;AAMO,IAAM,OAAY;AAAA,EACvB,WAAW;AAAA,IACT,MAAM;AAAA,IACN,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,eAAe;AAAA,IACf,UAAU;AAAA,IACV,OAAO;AAAA,EACT;AACF;AAKO,IAAM,aAAa;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;;;AC1DA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,SAAS,gBAAgB;AAgBlB,IAAM,yBAA+C;AAAA,EAC1D,OAAO;AAAA,EACP,aACE;AAAA,EACF,IAAI,SAAS,gBAAgB,EAAE,WAAW,WAAW,CAAC;AAAA,EACtD,KAAK,CAAC,CAAC,wBAAwB,EAAE,MAAM,gBAAgB,YAAY,CAAC,EAAE,CAAC,CAAC;AAC1E;AAMO,IAAM,kBAAwC;AAAA,EACnD,QAAQ;AAAA,EACR,IAAI,SAAS,eAAe,EAAE,WAAW,WAAW,CAAC;AAAA,EACrD,SAAS,EAAE,QAAQ,KAAK;AAAA,EACxB,KAAK,CAAC;AACR;AAKO,IAAM,kBAAwC;AAAA,EACnD,OAAO;AAAA,EACP,aACE;AAAA,EACF,IAAI,SAAS,kBAAkB,EAAE,WAAW,WAAW,CAAC;AAAA,EACxD,SAAS;AAAA,IACP,MAAM;AAAA,EACR;AAAA,EACA,KAAK,CAAC,CAAC,wBAAwB,EAAE,MAAM,YAAY,YAAY,CAAC,EAAE,CAAC,CAAC;AACtE;AAOO,IAAM,oBAA0C;AAAA,EACrD,OAAO;AAAA,EACP,aACE;AAAA,EACF,IAAI,SAAS,cAAc;AAAA,IACzB,WAAW;AAAA,IACX,MAAM,EAAE,IAAI,SAAS,MAAM,YAAY,OAAO,mBAAmB;AAAA,EACnE,CAAC;AAAA,EACD,SAAS;AAAA,IACP,UAAU;AAAA,MACR,UAAU;AAAA,QACR,KAAK;AAAA,UACH,KAAK;AAAA,UACL,YAAY;AAAA,YACV,KAAK;AAAA,cACH,aAAa;AAAA,cACb,OAAO;AAAA,YACT;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA,KAAK;AAAA,IACH;AAAA,MACE;AAAA,MACA;AAAA,QACE,KAAK;AAAA,QACL,YAAY,EAAE,aAAa,YAAY,OAAO,mBAAmB;AAAA,MACnE;AAAA,IACF;AAAA,IACA,CAAC,wBAAwB,EAAE,MAAM,cAAc,YAAY,CAAC,EAAE,CAAC;AAAA,EACjE;AACF;AAMO,IAAM,2BAAiD;AAAA,EAC5D,OAAO;AAAA,EACP,aACE;AAAA,EACF,IAAI,SAAS,aAAa,EAAE,WAAW,WAAW,CAAC;AAAA,EACnD,UAAU;AAAA,IACR,UAAU;AAAA,MACR,KAAK;AAAA,QACH,KAAK;AAAA,MACP;AAAA,IACF;AAAA,EACF;AAAA,EACA,KAAK;AAAA,IACH,CAAC,yBAAyB,EAAE,KAAK,OAAO,CAAC;AAAA,IACzC,CAAC,wBAAwB,EAAE,MAAM,aAAa,YAAY,CAAC,EAAE,CAAC;AAAA,EAChE;AACF;AAMO,IAAM,oBAA0C;AAAA,EACrD,OAAO;AAAA,EACP,aACE;AAAA,EACF,IAAI,SAAS,kBAAkB,EAAE,WAAW,WAAW,CAAC;AAAA,EACxD,SAAS;AAAA,IACP,MAAM;AAAA,IACN,UAAU;AAAA,MACR,KAAK;AAAA,QACH,KAAK;AAAA,UACH,SAAS;AAAA,UACT,UAAU;AAAA,QACZ;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA,KAAK;AAAA,IACH;AAAA,MACE;AAAA,MACA,EAAE,MAAM,QAAQ,YAAY,EAAE,SAAS,KAAK,UAAU,MAAM,EAAE;AAAA,IAChE;AAAA,IACA,CAAC,wBAAwB,EAAE,MAAM,YAAY,YAAY,CAAC,EAAE,CAAC;AAAA,EAC/D;AACF;AAOO,IAAM,oBAA0C;AAAA,EACrD,OAAO;AAAA,EACP,aACE;AAAA,EACF,IAAI,SAAS,aAAa;AAAA,IACxB,WAAW;AAAA,IACX,MAAM,EAAE,IAAI,UAAU,OAAO,kBAAkB;AAAA,EACjD,CAAC;AAAA,EACD,SAAS;AAAA,IACP,QAAQ;AAAA,IACR,UAAU;AAAA,MACR,KAAK;AAAA,QACH,KAAK;AAAA,UACH,UAAU;AAAA,QACZ;AAAA,MACF;AAAA,MACA,SAAS;AAAA,IACX;AAAA,EACF;AAAA,EACA,KAAK;AAAA,IACH;AAAA,MACE;AAAA,MACA,EAAE,MAAM,QAAQ,YAAY,EAAE,UAAU,kBAAkB,EAAE;AAAA,IAC9D;AAAA,EACF;AACF;AAMO,IAAM,mBAAyC;AAAA,EACpD,OAAO;AAAA,EACP,aACE;AAAA,EACF,IAAI,SAAS,kBAAkB,EAAE,WAAW,WAAW,CAAC;AAAA,EACxD,SAAS;AAAA,IACP,MAAM;AAAA,IACN,UAAU;AAAA,MACR,UAAU,EAAE,KAAK,EAAE,KAAK,UAAU,EAAE;AAAA,MACpC,KAAK,EAAE,KAAK,EAAE,UAAU,UAAU,EAAE;AAAA,IACtC;AAAA,EACF;AAAA,EACA,KAAK;AAAA,IACH,CAAC,yBAAyB,EAAE,KAAK,OAAO,CAAC;AAAA,IACzC;AAAA,MACE;AAAA,MACA,EAAE,MAAM,QAAQ,YAAY,EAAE,UAAU,UAAU,EAAE;AAAA,IACtD;AAAA,IACA,CAAC,wBAAwB,EAAE,MAAM,YAAY,YAAY,CAAC,EAAE,CAAC;AAAA,EAC/D;AACF;AAMO,IAAM,qBAA2C;AAAA,EACtD,QAAQ;AAAA,EACR,IAAI,SAAS,cAAc;AAAA,IACzB,WAAW;AAAA,IACX,MAAM,EAAE,IAAI,SAAS,MAAM,WAAW;AAAA,EACxC,CAAC;AAAA,EACD,SAAS;AAAA,IACP,QAAQ;AAAA,IACR,UAAU;AAAA,MACR,UAAU;AAAA,QACR,KAAK;AAAA,UACH,KAAK;AAAA,UACL,YAAY;AAAA,YACV,KAAK;AAAA,cACH,aAAa;AAAA,YACf;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA,KAAK;AAAA,IACH;AAAA,MACE;AAAA,MACA,EAAE,KAAK,SAAS,YAAY,EAAE,aAAa,WAAW,EAAE;AAAA,IAC1D;AAAA,EACF;AACF;AASO,IAAM,sBAA4C;AAAA,EACvD,OAAO;AAAA,EACP,aACE;AAAA,EACF,SAAS;AAAA,EACT,IAAI,EAAE,WAAW,KAAK;AAAA,EACtB,UAAU;AAAA,IACR,SAAS;AAAA,MACP,WAAW;AAAA,IACb;AAAA,EACF;AAAA,EACA,KAAK,CAAC,CAAC,iBAAiB,CAAC;AAC3B;AAQO,IAAM,uBAA6C;AAAA,EACxD,OAAO;AAAA,EACP,aACE;AAAA,EACF,SAAS;AAAA,EACT,QAAQ,EAAE,WAAW,KAAK;AAAA,EAC1B,IAAI,EAAE,WAAW,MAAM;AAAA,EACvB,UAAU;AAAA,IACR,SAAS;AAAA,MACP,WAAW;AAAA,IACb;AAAA,EACF;AAAA,EACA,KAAK,CAAC,CAAC,iBAAiB,GAAG,CAAC,oBAAoB,CAAC;AACnD;AAMO,IAAM,mBAAyC;AAAA,EACpD,OAAO;AAAA,EACP,aACE;AAAA,EACF,SAAS;AAAA,EACT,IAAI,EAAE,WAAW,KAAK;AAAA,EACtB,UAAU;AAAA,IACR,SAAS;AAAA,MACP,WAAW;AAAA,IACb;AAAA,EACF;AAAA,EACA,KAAK,CAAC,CAAC,yBAAyB,EAAE,SAAS,KAAK,CAAC,CAAC;AACpD;AAQO,IAAM,oBAA0C;AAAA,EACrD,OAAO;AAAA,EACP,aACE;AAAA,EACF,SAAS;AAAA,EACT,QAAQ,EAAE,WAAW,KAAK;AAAA,EAC1B,IAAI,EAAE,WAAW,MAAM;AAAA,EACvB,UAAU;AAAA,IACR,SAAS;AAAA,MACP,WAAW;AAAA,IACb;AAAA,EACF;AAAA,EACA,KAAK;AAAA,IACH,CAAC,yBAAyB,EAAE,SAAS,KAAK,CAAC;AAAA,IAC3C,CAAC,yBAAyB,EAAE,SAAS,MAAM,CAAC;AAAA,EAC9C;AACF;","names":["z"]}
@@ -1,4 +1,4 @@
1
- import { Mapping, Flow } from '@walkeros/core';
1
+ import { Mapping, Flow, WalkerOS } from '@walkeros/core';
2
2
  import { DestinationWeb } from '@walkeros/web-core';
3
3
 
4
4
  /**
@@ -90,6 +90,8 @@ declare namespace env {
90
90
  */
91
91
  type FullStoryStepExample = Flow.StepExample & {
92
92
  settings?: Partial<Settings>;
93
+ /** Consent granted before `in` so a gated destination is loaded first. */
94
+ before?: WalkerOS.Consent;
93
95
  };
94
96
  /**
95
97
  * Default event forwarding -- every walkerOS event becomes
@@ -146,7 +148,10 @@ declare const silentWithIdentify: FullStoryStepExample;
146
148
  */
147
149
  declare const consentGrantCapture: FullStoryStepExample;
148
150
  /**
149
- * Consent revoke -- revoking consent calls FullStory('shutdown').
151
+ * Consent revoke -- after analytics consent is granted (FullStory starts
152
+ * capture), revoking it calls FullStory('shutdown'). The destination is never
153
+ * loaded under denied consent, so the shutdown is a real revocation of an
154
+ * already-granted destination.
150
155
  */
151
156
  declare const consentRevokeCapture: FullStoryStepExample;
152
157
  /**
@@ -155,7 +160,10 @@ declare const consentRevokeCapture: FullStoryStepExample;
155
160
  */
156
161
  declare const consentGrantFlag: FullStoryStepExample;
157
162
  /**
158
- * Consent flag revoke -- calls setIdentity({ consent: false }).
163
+ * Consent flag revoke -- after marketing consent is granted (the destination
164
+ * loads), revoking it calls setIdentity({ consent: false }). The destination is
165
+ * never loaded under denied consent, so the revoke acts on an already-granted
166
+ * destination.
159
167
  */
160
168
  declare const consentRevokeFlag: FullStoryStepExample;
161
169
 
@@ -1,4 +1,4 @@
1
- import { Mapping, Flow } from '@walkeros/core';
1
+ import { Mapping, Flow, WalkerOS } from '@walkeros/core';
2
2
  import { DestinationWeb } from '@walkeros/web-core';
3
3
 
4
4
  /**
@@ -90,6 +90,8 @@ declare namespace env {
90
90
  */
91
91
  type FullStoryStepExample = Flow.StepExample & {
92
92
  settings?: Partial<Settings>;
93
+ /** Consent granted before `in` so a gated destination is loaded first. */
94
+ before?: WalkerOS.Consent;
93
95
  };
94
96
  /**
95
97
  * Default event forwarding -- every walkerOS event becomes
@@ -146,7 +148,10 @@ declare const silentWithIdentify: FullStoryStepExample;
146
148
  */
147
149
  declare const consentGrantCapture: FullStoryStepExample;
148
150
  /**
149
- * Consent revoke -- revoking consent calls FullStory('shutdown').
151
+ * Consent revoke -- after analytics consent is granted (FullStory starts
152
+ * capture), revoking it calls FullStory('shutdown'). The destination is never
153
+ * loaded under denied consent, so the shutdown is a real revocation of an
154
+ * already-granted destination.
150
155
  */
151
156
  declare const consentRevokeCapture: FullStoryStepExample;
152
157
  /**
@@ -155,7 +160,10 @@ declare const consentRevokeCapture: FullStoryStepExample;
155
160
  */
156
161
  declare const consentGrantFlag: FullStoryStepExample;
157
162
  /**
158
- * Consent flag revoke -- calls setIdentity({ consent: false }).
163
+ * Consent flag revoke -- after marketing consent is granted (the destination
164
+ * loads), revoking it calls setIdentity({ consent: false }). The destination is
165
+ * never loaded under denied consent, so the revoke acts on an already-granted
166
+ * destination.
159
167
  */
160
168
  declare const consentRevokeFlag: FullStoryStepExample;
161
169
 
@@ -263,13 +263,14 @@ var consentRevokeCapture = {
263
263
  title: "Shutdown capture",
264
264
  description: "A walker consent revoke for analytics calls FullStory shutdown to stop session recording.",
265
265
  command: "consent",
266
+ before: { analytics: true },
266
267
  in: { analytics: false },
267
268
  settings: {
268
269
  consent: {
269
270
  analytics: "capture"
270
271
  }
271
272
  },
272
- out: [["fullstory.shutdown"]]
273
+ out: [["fullstory.start"], ["fullstory.shutdown"]]
273
274
  };
274
275
  var consentGrantFlag = {
275
276
  title: "Consent flag granted",
@@ -287,13 +288,17 @@ var consentRevokeFlag = {
287
288
  title: "Consent flag revoked",
288
289
  description: "A walker consent revoke with action consent sets the FullStory identity consent flag to false.",
289
290
  command: "consent",
291
+ before: { marketing: true },
290
292
  in: { marketing: false },
291
293
  settings: {
292
294
  consent: {
293
295
  marketing: "consent"
294
296
  }
295
297
  },
296
- out: [["fullstory.setIdentity", { consent: false }]]
298
+ out: [
299
+ ["fullstory.setIdentity", { consent: true }],
300
+ ["fullstory.setIdentity", { consent: false }]
301
+ ]
297
302
  };
298
303
  // Annotate the CommonJS export names for ESM import in node:
299
304
  0 && (module.exports = {
@@ -242,13 +242,14 @@ var consentRevokeCapture = {
242
242
  title: "Shutdown capture",
243
243
  description: "A walker consent revoke for analytics calls FullStory shutdown to stop session recording.",
244
244
  command: "consent",
245
+ before: { analytics: true },
245
246
  in: { analytics: false },
246
247
  settings: {
247
248
  consent: {
248
249
  analytics: "capture"
249
250
  }
250
251
  },
251
- out: [["fullstory.shutdown"]]
252
+ out: [["fullstory.start"], ["fullstory.shutdown"]]
252
253
  };
253
254
  var consentGrantFlag = {
254
255
  title: "Consent flag granted",
@@ -266,13 +267,17 @@ var consentRevokeFlag = {
266
267
  title: "Consent flag revoked",
267
268
  description: "A walker consent revoke with action consent sets the FullStory identity consent flag to false.",
268
269
  command: "consent",
270
+ before: { marketing: true },
269
271
  in: { marketing: false },
270
272
  settings: {
271
273
  consent: {
272
274
  marketing: "consent"
273
275
  }
274
276
  },
275
- out: [["fullstory.setIdentity", { consent: false }]]
277
+ out: [
278
+ ["fullstory.setIdentity", { consent: true }],
279
+ ["fullstory.setIdentity", { consent: false }]
280
+ ]
276
281
  };
277
282
  export {
278
283
  env_exports as env,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$meta": {
3
3
  "package": "@walkeros/web-destination-fullstory",
4
- "version": "4.2.0",
4
+ "version": "4.2.1-next-1781538735002",
5
5
  "type": "destination",
6
6
  "platform": [
7
7
  "web"
@@ -232,7 +232,7 @@
232
232
  "consent": {
233
233
  "functional": true
234
234
  },
235
- "id": "66e4a1f40a5787d3",
235
+ "id": "c5ad07a04fee3ef2",
236
236
  "trigger": "load",
237
237
  "entity": "order",
238
238
  "action": "complete",
@@ -326,6 +326,9 @@
326
326
  "title": "Shutdown capture",
327
327
  "description": "A walker consent revoke for analytics calls FullStory shutdown to stop session recording.",
328
328
  "command": "consent",
329
+ "before": {
330
+ "analytics": true
331
+ },
329
332
  "in": {
330
333
  "analytics": false
331
334
  },
@@ -335,6 +338,9 @@
335
338
  }
336
339
  },
337
340
  "out": [
341
+ [
342
+ "fullstory.start"
343
+ ],
338
344
  [
339
345
  "fullstory.shutdown"
340
346
  ]
@@ -344,6 +350,9 @@
344
350
  "title": "Consent flag revoked",
345
351
  "description": "A walker consent revoke with action consent sets the FullStory identity consent flag to false.",
346
352
  "command": "consent",
353
+ "before": {
354
+ "marketing": true
355
+ },
347
356
  "in": {
348
357
  "marketing": false
349
358
  },
@@ -353,6 +362,12 @@
353
362
  }
354
363
  },
355
364
  "out": [
365
+ [
366
+ "fullstory.setIdentity",
367
+ {
368
+ "consent": true
369
+ }
370
+ ],
356
371
  [
357
372
  "fullstory.setIdentity",
358
373
  {
@@ -394,7 +409,7 @@
394
409
  "consent": {
395
410
  "functional": true
396
411
  },
397
- "id": "7edf5ec8ae27e3e2",
412
+ "id": "4b63938a1ee47641",
398
413
  "trigger": "load",
399
414
  "entity": "product",
400
415
  "action": "view",
@@ -456,7 +471,7 @@
456
471
  "consent": {
457
472
  "functional": true
458
473
  },
459
- "id": "b0ef8d504cb0b947",
474
+ "id": "a36a35e8801123ed",
460
475
  "trigger": "load",
461
476
  "entity": "page",
462
477
  "action": "view",
@@ -570,7 +585,7 @@
570
585
  "consent": {
571
586
  "functional": true
572
587
  },
573
- "id": "ed4d8f4b6a290520",
588
+ "id": "1606f9f24c3f3125",
574
589
  "trigger": "load",
575
590
  "entity": "order",
576
591
  "action": "complete",
@@ -631,7 +646,7 @@
631
646
  "consent": {
632
647
  "functional": true
633
648
  },
634
- "id": "986e8454455294d3",
649
+ "id": "fb3ce151a49201fa",
635
650
  "trigger": "load",
636
651
  "entity": "page",
637
652
  "action": "view",
@@ -745,7 +760,7 @@
745
760
  "consent": {
746
761
  "functional": true
747
762
  },
748
- "id": "299309295286b4ca",
763
+ "id": "481d9e8e2f18ceb1",
749
764
  "trigger": "load",
750
765
  "entity": "order",
751
766
  "action": "complete",
@@ -823,7 +838,7 @@
823
838
  "consent": {
824
839
  "functional": true
825
840
  },
826
- "id": "c67de4bd333cd6d4",
841
+ "id": "b68a993e86acfe2c",
827
842
  "trigger": "test",
828
843
  "entity": "user",
829
844
  "action": "login",
@@ -899,7 +914,7 @@
899
914
  "consent": {
900
915
  "functional": true
901
916
  },
902
- "id": "74e36293ab778697",
917
+ "id": "a28a412ab275cd7e",
903
918
  "trigger": "test",
904
919
  "entity": "user",
905
920
  "action": "login",
@@ -987,7 +1002,7 @@
987
1002
  "consent": {
988
1003
  "functional": true
989
1004
  },
990
- "id": "2edf18a6ab57fe0c",
1005
+ "id": "3df29107a52c190e",
991
1006
  "trigger": "test",
992
1007
  "entity": "debug",
993
1008
  "action": "noise",
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@walkeros/web-destination-fullstory",
3
3
  "description": "FullStory web destination for walkerOS (session replay, custom events, user/page properties)",
4
- "version": "4.2.0",
4
+ "version": "4.2.1-next-1781538735002",
5
5
  "license": "MIT",
6
6
  "main": "./dist/index.js",
7
7
  "module": "./dist/index.mjs",
@@ -39,11 +39,11 @@
39
39
  },
40
40
  "dependencies": {
41
41
  "@fullstory/browser": "^2.0.8",
42
- "@walkeros/core": "4.2.0",
43
- "@walkeros/web-core": "4.2.0"
42
+ "@walkeros/core": "4.2.1-next-1781538735002",
43
+ "@walkeros/web-core": "4.2.1-next-1781538735002"
44
44
  },
45
45
  "devDependencies": {
46
- "@walkeros/collector": "4.2.0"
46
+ "@walkeros/collector": "4.2.1-next-1781538735002"
47
47
  },
48
48
  "repository": {
49
49
  "url": "git+https://github.com/elbwalker/walkerOS.git",