@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 +8 -0
- package/dist/dev.d.mts +11 -3
- package/dist/dev.d.ts +11 -3
- package/dist/dev.js +1 -1
- package/dist/dev.js.map +1 -1
- package/dist/dev.mjs +1 -1
- package/dist/dev.mjs.map +1 -1
- package/dist/examples/index.d.mts +11 -3
- package/dist/examples/index.d.ts +11 -3
- package/dist/examples/index.js +7 -2
- package/dist/examples/index.mjs +7 -2
- package/dist/walkerOS.json +25 -10
- package/package.json +4 -4
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 --
|
|
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 --
|
|
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 --
|
|
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 --
|
|
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":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAAAA,cAA4B;;;ACA5B,iBAAkB;AAEX,IAAM,iBAAiB,aAAE,OAAO;AAAA,EACrC,OAAO,aACJ,OAAO,EACP,IAAI,CAAC,EACL;AAAA,IACC;AAAA,EACF;AAAA,EACF,MAAM,aACH,OAAO,EACP,SAAS,0CAA0C,EACnD,SAAS;AAAA,EACZ,QAAQ,aAAE,OAAO,EAAE,SAAS,gCAAgC,EAAE,SAAS;AAAA,EACvE,cAAc,aACX,OAAO,EACP,SAAS,sDAAsD,EAC/D,SAAS;AAAA,EACZ,OAAO,aACJ,QAAQ,EACR,SAAS,uCAAuC,EAChD,SAAS;AAAA,EACZ,SAAS,aACN,QAAQ,EACR,SAAS,0DAA0D,EACnE,SAAS;AAAA,EACZ,sBAAsB,aACnB,QAAQ,EACR;AAAA,IACC;AAAA,EACF,EACC,SAAS;AAAA,EACZ,WAAW,aACR,OAAO,EACP,SAAS,gDAAgD,EACzD,SAAS;AAAA,EACZ,0BAA0B,aACvB,QAAQ,EACR,SAAS,uCAAuC,EAChD,SAAS;AAAA,EACZ,UAAU,aACP,QAAQ,EACR;AAAA,IACC;AAAA,EACF,EACC,SAAS;AAAA,EACZ,SAAS,aACN,OAAO,aAAE,OAAO,GAAG,aAAE,KAAK,CAAC,WAAW,SAAS,CAAC,CAAC,EACjD;AAAA,IACC;AAAA,EACF,EACC,SAAS;AACd,CAAC;;;ACpDD,IAAAC,cAAkB;AAEX,IAAM,gBAAgB,cAAE,OAAO;AAAA,EACpC,UAAU,cACP,QAAQ,EACR;AAAA,IACC;AAAA,EACF,EACC,SAAS;AAAA,EACZ,KAAK,cACF,QAAQ,EACR;AAAA,IACC;AAAA,EACF,EACC,SAAS;AAAA,EACZ,SAAS,cACN,KAAK,CAAC,QAAQ,MAAM,CAAC,EACrB;AAAA,IACC;AAAA,EACF,EACC,SAAS;AACd,CAAC;;;AFbM,IAAM,eAAW,yBAAY,cAAc;AAC3C,IAAM,cAAU,yBAAY,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,kBAAyB;AAgBlB,IAAM,yBAA+C;AAAA,EAC1D,OAAO;AAAA,EACP,aACE;AAAA,EACF,QAAI,sBAAS,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,QAAI,sBAAS,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,QAAI,sBAAS,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,QAAI,sBAAS,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,QAAI,sBAAS,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,QAAI,sBAAS,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,QAAI,sBAAS,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,QAAI,sBAAS,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,QAAI,sBAAS,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":["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:()=>
|
|
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":"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","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 --
|
|
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 --
|
|
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
|
|
package/dist/examples/index.d.ts
CHANGED
|
@@ -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 --
|
|
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 --
|
|
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
|
|
package/dist/examples/index.js
CHANGED
|
@@ -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: [
|
|
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 = {
|
package/dist/examples/index.mjs
CHANGED
|
@@ -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: [
|
|
277
|
+
out: [
|
|
278
|
+
["fullstory.setIdentity", { consent: true }],
|
|
279
|
+
["fullstory.setIdentity", { consent: false }]
|
|
280
|
+
]
|
|
276
281
|
};
|
|
277
282
|
export {
|
|
278
283
|
env_exports as env,
|
package/dist/walkerOS.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$meta": {
|
|
3
3
|
"package": "@walkeros/web-destination-fullstory",
|
|
4
|
-
"version": "4.2.
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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.
|
|
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.
|
|
43
|
-
"@walkeros/web-core": "4.2.
|
|
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.
|
|
46
|
+
"@walkeros/collector": "4.2.1-next-1781538735002"
|
|
47
47
|
},
|
|
48
48
|
"repository": {
|
|
49
49
|
"url": "git+https://github.com/elbwalker/walkerOS.git",
|