@walkeros/web-destination-optimizely 4.7.0-next-1790245733116 → 4.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,24 +1,35 @@
1
1
  # @walkeros/web-destination-optimizely
2
2
 
3
- ## 4.7.0-next-1790245733116
3
+ ## 4.7.0
4
4
 
5
5
  ### Patch Changes
6
6
 
7
- - Updated dependencies [57788bc]
7
+ - 74821ed: Simulate records every vendor call through one recorder, `observeEnv`
8
+ from `@walkeros/core`, and runs offline: BigQuery, Data Manager and the
9
+ Sheets, GCS and S3 stores reach the network through `env`. Client and `Env`
10
+ types of BigQuery, Firehose, PostHog, SQS and Pub/Sub are structural.
11
+ `@walkeros/cli` exports `resolveExportName` and `selectDevExamples` and drops
12
+ `findExample` and `compareOutput`.
13
+ - Updated dependencies [74821ed]
8
14
  - Updated dependencies [06b498a]
9
- - Updated dependencies [f5a1cfd]
10
- - Updated dependencies [ef02916]
15
+ - Updated dependencies [74821ed]
16
+ - Updated dependencies [64b06de]
17
+ - Updated dependencies [4b4937f]
18
+ - Updated dependencies [74821ed]
19
+ - Updated dependencies [74821ed]
20
+ - Updated dependencies [74821ed]
11
21
  - Updated dependencies [06b498a]
12
- - Updated dependencies [ef02916]
13
- - Updated dependencies [2aebc53]
14
- - Updated dependencies [f5a1cfd]
15
- - Updated dependencies [f5a1cfd]
16
- - Updated dependencies [2aebc53]
17
- - Updated dependencies [8f8aea6]
18
- - Updated dependencies [2aebc53]
19
- - Updated dependencies [2aebc53]
20
- - @walkeros/core@4.7.0-next-1790245733116
21
- - @walkeros/web-core@4.7.0-next-1790245733116
22
+ - Updated dependencies [74821ed]
23
+ - Updated dependencies [74821ed]
24
+ - Updated dependencies [74821ed]
25
+ - Updated dependencies [74821ed]
26
+ - Updated dependencies [74821ed]
27
+ - Updated dependencies [e860006]
28
+ - Updated dependencies [74821ed]
29
+ - Updated dependencies [74821ed]
30
+ - Updated dependencies [4f89234]
31
+ - @walkeros/core@4.7.0
32
+ - @walkeros/web-core@4.7.0
22
33
 
23
34
  ## 4.6.1
24
35
 
package/dist/dev.js CHANGED
@@ -1 +1 @@
1
- "use strict";var e,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,i=Object.getOwnPropertyNames,r=Object.prototype.hasOwnProperty,a=(e,n)=>{for(var i in n)t(e,i,{get:n[i],enumerable:!0})},o={};a(o,{examples:()=>g,schemas:()=>s}),module.exports=(e=o,((e,a,o,s)=>{if(a&&"object"==typeof a||"function"==typeof a)for(let l of i(a))r.call(e,l)||l===o||t(e,l,{get:()=>a[l],enumerable:!(s=n(a,l))||s.enumerable});return e})(t({},"__esModule",{value:!0}),e));var s={};a(s,{MappingSchema:()=>m,SettingsSchema:()=>c,mapping:()=>v,settings:()=>d});var l=require("@walkeros/core/dev"),u=require("@walkeros/core/dev"),c=u.z.object({sdkKey:u.z.string().min(1).describe("Your Optimizely Feature Experimentation SDK key. Find it in your Optimizely project under Settings > Environments."),userId:u.z.unknown().describe('walkerOS mapping value to resolve userId for experiment bucketing. Example: "user.id" or { key: "user.id", value: "user.device" } for fallback.').optional(),attributes:u.z.unknown().describe("User attributes for audience targeting. Resolves to Record<string, unknown>. Applied to every event via createUserContext().").optional(),updateInterval:u.z.number().int().positive().describe("Polling interval for datafile updates in milliseconds. Default: 60000.").optional(),autoUpdate:u.z.boolean().describe("Auto-update datafile via polling. Default: true.").optional(),batchSize:u.z.number().int().positive().describe("Batch event processor: number of events per batch. Default: 10.").optional(),flushInterval:u.z.number().int().positive().describe("Batch event processor: flush interval in milliseconds. Default: 1000.").optional(),skipOdp:u.z.boolean().describe("Skip Optimizely Data Platform (ODP) manager initialization. Default: true. Set to false only if you use ODP.").optional()}),p=require("@walkeros/core/dev"),m=p.z.object({eventKey:p.z.string().describe("Override event key sent to Optimizely. If omitted, the walkerOS event name is used. Must match an event created in your Optimizely project.").optional(),revenue:p.z.unknown().describe("Revenue mapping. Resolves to an integer in cents (e.g. 7281 = $72.81). Passed as eventTags.revenue to trackEvent().").optional(),value:p.z.unknown().describe("Numeric value mapping. Resolves to a float. Passed as eventTags.value to trackEvent().").optional(),eventTags:p.z.unknown().describe("Additional event tags. Resolves to Record<string, unknown>. Spread into the eventTags object passed to trackEvent().").optional(),attributes:p.z.unknown().describe("Per-event user attributes override. Resolves to Record<string, unknown>. Applied via setAttribute() before this event's trackEvent() call.").optional()}),d=(0,l.zodToSchema)(c),v=(0,l.zodToSchema)(m),g={};a(g,{env:()=>y,step:()=>E});var y={};a(y,{init:()=>k,push:()=>h,simulation:()=>w});var b=()=>{};function f(){return{onReady:()=>Promise.resolve({success:!0}),createUserContext:()=>({trackEvent:b,setAttribute:b}),close:b}}function z(){return{createInstance:()=>f(),createPollingProjectConfigManager:()=>({}),createBatchEventProcessor:()=>({})}}var k={optimizely:z()},h={optimizely:z()},w=["call:optimizely.createInstance","call:optimizely.client.onReady","call:optimizely.client.createUserContext","call:optimizely.userContext.trackEvent","call:optimizely.userContext.setAttribute","call:optimizely.client.close"],E={};a(E,{attributesOnlySilent:()=>D,consentGranted:()=>x,consentRevoked:()=>j,defaultEventForwarding:()=>A,mappedEventName:()=>P,orderCompleteRevenue:()=>R,signupWithAttributes:()=>S,wildcardIgnored:()=>_});var O=require("@walkeros/core"),A={title:"Default event",description:"A walker event becomes an Optimizely trackEvent call with the event name and empty eventTags.",in:(0,O.getEvent)("page view",{timestamp:1700000100}),out:[["optimizely.trackEvent","page view",{}]]},P={title:"Mapped event key",description:"A mapping renames the walker event to an Optimizely event key defined in the project.",in:(0,O.getEvent)("product view",{timestamp:1700000101}),mapping:{name:"product_viewed"},out:[["optimizely.trackEvent","product_viewed",{}]]},R={title:"Purchase revenue",description:"An order fires an Optimizely purchase event with revenue in cents, value, and additional event tags.",in:(0,O.getEvent)("order complete",{timestamp:1700000102,data:{revenue_cents:55500,total:555,currency:"EUR",item_count:3}}),mapping:{name:"purchase",settings:{revenue:"data.revenue_cents",value:"data.total",eventTags:{map:{currency:"data.currency",item_count:"data.item_count"}}}},out:[["optimizely.trackEvent","purchase",{revenue:55500,value:555,currency:"EUR",item_count:3}]]},S={title:"Signup with attributes",description:"A user signup sets per-event Optimizely attributes via setAttribute before firing the trackEvent.",in:(0,O.getEvent)("user signup",{timestamp:1700000103,data:{method:"google",source:"referral"}}),mapping:{name:"signup",settings:{attributes:{map:{signup_method:"data.method",referral_source:"data.source"}}}},out:[["optimizely.setAttribute","signup_method","google"],["optimizely.setAttribute","referral_source","referral"],["optimizely.trackEvent","signup",{}]]},_={public:!1,in:(0,O.getEvent)("debug noise",{timestamp:1700000104}),mapping:{ignore:!0},out:[]},D={title:"Attributes only",description:"A profile update sets Optimizely user attributes without firing a trackEvent for user enrichment.",in:(0,O.getEvent)("profile update",{timestamp:1700000105,data:{plan:"premium",country:"DE"}}),mapping:{silent:!0,settings:{attributes:{map:{plan:"data.plan",country:"data.country"}}}},out:[["optimizely.setAttribute","plan","premium"],["optimizely.setAttribute","country","DE"]]},j={title:"Consent revoked",description:"A walker consent command with analytics denied closes the Optimizely client and flushes queued events.",command:"consent",before:{analytics:!0},in:{analytics:!1},settings:{},out:[["optimizely.close"]]},x={public:!1,command:"consent",in:{analytics:!0},settings:{},out:[]};//# sourceMappingURL=dev.js.map
1
+ "use strict";var e,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,i=Object.getOwnPropertyNames,a=Object.prototype.hasOwnProperty,r=(e,n)=>{for(var i in n)t(e,i,{get:n[i],enumerable:!0})},o={};r(o,{examples:()=>g,schemas:()=>s}),module.exports=(e=o,((e,r,o,s)=>{if(r&&"object"==typeof r||"function"==typeof r)for(let l of i(r))a.call(e,l)||l===o||t(e,l,{get:()=>r[l],enumerable:!(s=n(r,l))||s.enumerable});return e})(t({},"__esModule",{value:!0}),e));var s={};r(s,{MappingSchema:()=>m,SettingsSchema:()=>u,mapping:()=>v,settings:()=>d});var l=require("@walkeros/core/dev"),c=require("@walkeros/core/dev"),u=c.z.object({sdkKey:c.z.string().min(1).describe("Your Optimizely Feature Experimentation SDK key. Find it in your Optimizely project under Settings > Environments."),userId:c.z.unknown().describe('walkerOS mapping value to resolve userId for experiment bucketing. Example: "user.id" or { key: "user.id", value: "user.device" } for fallback.').optional(),attributes:c.z.unknown().describe("User attributes for audience targeting. Resolves to Record<string, unknown>. Applied to every event via createUserContext().").optional(),updateInterval:c.z.number().int().positive().describe("Polling interval for datafile updates in milliseconds. Default: 60000.").optional(),autoUpdate:c.z.boolean().describe("Auto-update datafile via polling. Default: true.").optional(),batchSize:c.z.number().int().positive().describe("Batch event processor: number of events per batch. Default: 10.").optional(),flushInterval:c.z.number().int().positive().describe("Batch event processor: flush interval in milliseconds. Default: 1000.").optional(),skipOdp:c.z.boolean().describe("Skip Optimizely Data Platform (ODP) manager initialization. Default: true. Set to false only if you use ODP.").optional()}),p=require("@walkeros/core/dev"),m=p.z.object({eventKey:p.z.string().describe("Override event key sent to Optimizely. If omitted, the walkerOS event name is used. Must match an event created in your Optimizely project.").optional(),revenue:p.z.unknown().describe("Revenue mapping. Resolves to an integer in cents (e.g. 7281 = $72.81). Passed as eventTags.revenue to trackEvent().").optional(),value:p.z.unknown().describe("Numeric value mapping. Resolves to a float. Passed as eventTags.value to trackEvent().").optional(),eventTags:p.z.unknown().describe("Additional event tags. Resolves to Record<string, unknown>. Spread into the eventTags object passed to trackEvent().").optional(),attributes:p.z.unknown().describe("Per-event user attributes override. Resolves to Record<string, unknown>. Applied via setAttribute() before this event's trackEvent() call.").optional()}),d=(0,l.zodToSchema)(u),v=(0,l.zodToSchema)(m),g={};r(g,{env:()=>y,step:()=>E});var y={};r(y,{init:()=>k,push:()=>h,simulation:()=>w});var b=()=>{};function f(){return{onReady:()=>Promise.resolve({success:!0}),createUserContext:()=>({trackEvent:b,setAttribute:b}),close:b}}function z(){return{createInstance:()=>f(),createPollingProjectConfigManager:()=>({}),createBatchEventProcessor:()=>({})}}var k={optimizely:z()},h={optimizely:z()},w=["call:optimizely.createInstance","call:optimizely.createInstance.onReady","call:optimizely.createInstance.createUserContext","call:optimizely.createInstance.createUserContext.trackEvent","call:optimizely.createInstance.createUserContext.setAttribute","call:optimizely.createInstance.close"],E={};r(E,{attributesOnlySilent:()=>D,consentGranted:()=>j,consentRevoked:()=>I,defaultEventForwarding:()=>A,mappedEventName:()=>P,orderCompleteRevenue:()=>R,signupWithAttributes:()=>S,wildcardIgnored:()=>_});var O=require("@walkeros/core"),A={title:"Default event",description:"A walker event becomes an Optimizely trackEvent call with the event name and empty eventTags.",in:(0,O.getEvent)("page view",{timestamp:1700000100}),out:[["optimizely.trackEvent","page view",{}]]},P={title:"Mapped event key",description:"A mapping renames the walker event to an Optimizely event key defined in the project.",in:(0,O.getEvent)("product view",{timestamp:1700000101}),mapping:{name:"product_viewed"},out:[["optimizely.trackEvent","product_viewed",{}]]},R={title:"Purchase revenue",description:"An order fires an Optimizely purchase event with revenue in cents, value, and additional event tags.",in:(0,O.getEvent)("order complete",{timestamp:1700000102,data:{revenue_cents:55500,total:555,currency:"EUR",item_count:3}}),mapping:{name:"purchase",settings:{revenue:"data.revenue_cents",value:"data.total",eventTags:{map:{currency:"data.currency",item_count:"data.item_count"}}}},out:[["optimizely.trackEvent","purchase",{revenue:55500,value:555,currency:"EUR",item_count:3}]]},S={title:"Signup with attributes",description:"A user signup sets per-event Optimizely attributes via setAttribute before firing the trackEvent.",in:(0,O.getEvent)("user signup",{timestamp:1700000103,data:{method:"google",source:"referral"}}),mapping:{name:"signup",settings:{attributes:{map:{signup_method:"data.method",referral_source:"data.source"}}}},out:[["optimizely.setAttribute","signup_method","google"],["optimizely.setAttribute","referral_source","referral"],["optimizely.trackEvent","signup",{}]]},_={public:!1,in:(0,O.getEvent)("debug noise",{timestamp:1700000104}),mapping:{ignore:!0},out:[]},D={title:"Attributes only",description:"A profile update sets Optimizely user attributes without firing a trackEvent for user enrichment.",in:(0,O.getEvent)("profile update",{timestamp:1700000105,data:{plan:"premium",country:"DE"}}),mapping:{silent:!0,settings:{attributes:{map:{plan:"data.plan",country:"data.country"}}}},out:[["optimizely.setAttribute","plan","premium"],["optimizely.setAttribute","country","DE"]]},I={title:"Consent revoked",description:"A walker consent command with analytics denied closes the Optimizely client and flushes queued events.",command:"consent",before:{analytics:!0},in:{analytics:!1},settings:{},out:[["optimizely.close"]]},j={public:!1,command:"consent",in:{analytics:!0},settings:{},out:[]};//# 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 sdkKey: z\n .string()\n .min(1)\n .describe(\n 'Your Optimizely Feature Experimentation SDK key. Find it in your Optimizely project under Settings > Environments.',\n ),\n userId: z\n .unknown()\n .describe(\n 'walkerOS mapping value to resolve userId for experiment bucketing. Example: \"user.id\" or { key: \"user.id\", value: \"user.device\" } for fallback.',\n )\n .optional(),\n attributes: z\n .unknown()\n .describe(\n 'User attributes for audience targeting. Resolves to Record<string, unknown>. Applied to every event via createUserContext().',\n )\n .optional(),\n updateInterval: z\n .number()\n .int()\n .positive()\n .describe(\n 'Polling interval for datafile updates in milliseconds. Default: 60000.',\n )\n .optional(),\n autoUpdate: z\n .boolean()\n .describe('Auto-update datafile via polling. Default: true.')\n .optional(),\n batchSize: z\n .number()\n .int()\n .positive()\n .describe('Batch event processor: number of events per batch. Default: 10.')\n .optional(),\n flushInterval: z\n .number()\n .int()\n .positive()\n .describe(\n 'Batch event processor: flush interval in milliseconds. Default: 1000.',\n )\n .optional(),\n skipOdp: z\n .boolean()\n .describe(\n 'Skip Optimizely Data Platform (ODP) manager initialization. Default: true. Set to false only if you use ODP.',\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 eventKey: z\n .string()\n .describe(\n 'Override event key sent to Optimizely. If omitted, the walkerOS event name is used. Must match an event created in your Optimizely project.',\n )\n .optional(),\n revenue: z\n .unknown()\n .describe(\n 'Revenue mapping. Resolves to an integer in cents (e.g. 7281 = $72.81). Passed as eventTags.revenue to trackEvent().',\n )\n .optional(),\n value: z\n .unknown()\n .describe(\n 'Numeric value mapping. Resolves to a float. Passed as eventTags.value to trackEvent().',\n )\n .optional(),\n eventTags: z\n .unknown()\n .describe(\n 'Additional event tags. Resolves to Record<string, unknown>. Spread into the eventTags object passed to trackEvent().',\n )\n .optional(),\n attributes: z\n .unknown()\n .describe(\n \"Per-event user attributes override. Resolves to Record<string, unknown>. Applied via setAttribute() before this event's trackEvent() call.\",\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 {\n Env,\n OptimizelyClient,\n OptimizelyUserContext,\n OptimizelySDK,\n} from '../types';\n\n/**\n * Example environment configurations for Optimizely destination.\n *\n * Tests clone `push` and replace individual methods with jest spies.\n * Production leaves `env.optimizely` undefined -- the destination falls back\n * to the real `@optimizely/optimizely-sdk` import.\n */\n\nconst noop = () => {};\n\n// Narrow helper types for mock SDK factory functions without loose casts.\ntype OptCreateInstance = OptimizelySDK['createInstance'];\ntype OptCreatePollingConfigMgr =\n OptimizelySDK['createPollingProjectConfigManager'];\ntype OptCreateBatchEventProcessor = OptimizelySDK['createBatchEventProcessor'];\ntype OptCreateUserContext = OptimizelyClient['createUserContext'];\ntype OptOnReady = OptimizelyClient['onReady'];\ntype OptTrackEvent = OptimizelyUserContext['trackEvent'];\ntype OptSetAttribute = OptimizelyUserContext['setAttribute'];\n\nfunction createMockUserContext(): OptimizelyUserContext {\n return {\n trackEvent: noop as OptTrackEvent,\n setAttribute: noop as OptSetAttribute,\n };\n}\n\nfunction createMockClient(): OptimizelyClient {\n return {\n onReady: (() => Promise.resolve({ success: true })) as OptOnReady,\n createUserContext: (() => createMockUserContext()) as OptCreateUserContext,\n close: noop,\n };\n}\n\nfunction createMockSDK(): OptimizelySDK {\n return {\n createInstance: (() => createMockClient()) as OptCreateInstance,\n createPollingProjectConfigManager:\n (() => ({})) as OptCreatePollingConfigMgr,\n createBatchEventProcessor: (() => ({})) as OptCreateBatchEventProcessor,\n };\n}\n\n/**\n * Pre-init env -- all methods are no-ops until the test runner wires spies.\n */\nexport const init: Env | undefined = {\n optimizely: createMockSDK(),\n};\n\n/**\n * Post-init env -- same shape. The test runner clones this and replaces\n * individual methods with jest.fn() so it can assert on calls.\n */\nexport const push: Env = {\n optimizely: createMockSDK(),\n};\n\n/** Simulation tracking paths for CLI --simulate. */\nexport const simulation = [\n 'call:optimizely.createInstance',\n 'call:optimizely.client.onReady',\n 'call:optimizely.client.createUserContext',\n 'call:optimizely.userContext.trackEvent',\n 'call:optimizely.userContext.setAttribute',\n 'call:optimizely.client.close',\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 OptimizelyStepExample = 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 * userContext.trackEvent(event.name). No mapping, no eventTags.\n */\nexport const defaultEventForwarding: OptimizelyStepExample = {\n title: 'Default event',\n description:\n 'A walker event becomes an Optimizely trackEvent call with the event name and empty eventTags.',\n in: getEvent('page view', { timestamp: 1700000100 }),\n out: [['optimizely.trackEvent', 'page view', {}]],\n};\n\n/**\n * Mapped event name -- mapping.name renames the event key for Optimizely.\n * The eventKey must match an event created in the Optimizely project.\n */\nexport const mappedEventName: OptimizelyStepExample = {\n title: 'Mapped event key',\n description:\n 'A mapping renames the walker event to an Optimizely event key defined in the project.',\n in: getEvent('product view', { timestamp: 1700000101 }),\n mapping: {\n name: 'product_viewed',\n },\n out: [['optimizely.trackEvent', 'product_viewed', {}]],\n};\n\n/**\n * Revenue tracking -- mapping.settings.revenue resolves to an integer\n * (cents). Passed as eventTags.revenue. The value is a pass-through;\n * the user must provide cents (e.g. 55500 = $555.00).\n */\nexport const orderCompleteRevenue: OptimizelyStepExample = {\n title: 'Purchase revenue',\n description:\n 'An order fires an Optimizely purchase event with revenue in cents, value, and additional event tags.',\n in: getEvent('order complete', {\n timestamp: 1700000102,\n data: {\n revenue_cents: 55500,\n total: 555,\n currency: 'EUR',\n item_count: 3,\n },\n }),\n mapping: {\n name: 'purchase',\n settings: {\n revenue: 'data.revenue_cents',\n value: 'data.total',\n eventTags: {\n map: {\n currency: 'data.currency',\n item_count: 'data.item_count',\n },\n },\n },\n },\n out: [\n [\n 'optimizely.trackEvent',\n 'purchase',\n { revenue: 55500, value: 555, currency: 'EUR', item_count: 3 },\n ],\n ],\n};\n\n/**\n * Per-event attributes -- mapping.settings.attributes resolves to\n * key-value pairs that are applied via setAttribute() before trackEvent().\n */\nexport const signupWithAttributes: OptimizelyStepExample = {\n title: 'Signup with attributes',\n description:\n 'A user signup sets per-event Optimizely attributes via setAttribute before firing the trackEvent.',\n in: getEvent('user signup', {\n timestamp: 1700000103,\n data: {\n method: 'google',\n source: 'referral',\n },\n }),\n mapping: {\n name: 'signup',\n settings: {\n attributes: {\n map: {\n signup_method: 'data.method',\n referral_source: 'data.source',\n },\n },\n },\n },\n out: [\n ['optimizely.setAttribute', 'signup_method', 'google'],\n ['optimizely.setAttribute', 'referral_source', 'referral'],\n ['optimizely.trackEvent', 'signup', {}],\n ],\n};\n\n/**\n * Wildcard ignore -- walkerOS's standard way to drop events. The rule\n * matches but does nothing. The destination fires zero SDK calls.\n */\nexport const wildcardIgnored: OptimizelyStepExample = {\n public: false,\n in: getEvent('debug noise', { timestamp: 1700000104 }),\n mapping: { ignore: true },\n out: [],\n};\n\n/**\n * Skip track with attributes only -- fires setAttribute calls but no\n * trackEvent. Useful for enriching user context without a conversion.\n */\nexport const attributesOnlySilent: OptimizelyStepExample = {\n title: 'Attributes only',\n description:\n 'A profile update sets Optimizely user attributes without firing a trackEvent for user enrichment.',\n in: getEvent('profile update', {\n timestamp: 1700000105,\n data: {\n plan: 'premium',\n country: 'DE',\n },\n }),\n mapping: {\n silent: true,\n settings: {\n attributes: {\n map: {\n plan: 'data.plan',\n country: 'data.country',\n },\n },\n },\n },\n out: [\n ['optimizely.setAttribute', 'plan', 'premium'],\n ['optimizely.setAttribute', 'country', 'DE'],\n ],\n};\n\n/**\n * Consent revoked -- the destination closes the Optimizely client,\n * flushing queued events and stopping datafile polling.\n */\nexport const consentRevoked: OptimizelyStepExample = {\n title: 'Consent revoked',\n description:\n 'A walker consent command with analytics denied closes the Optimizely client and flushes queued events.',\n command: 'consent',\n before: { analytics: true },\n in: { analytics: false } as WalkerOS.Consent,\n settings: {} as Partial<Settings>,\n out: [['optimizely.close']],\n};\n\n/**\n * Consent granted -- no immediate SDK action needed. The destination\n * re-initializes on the next push (walkerOS queues events until consent\n * is granted, then re-inits). No calls expected.\n */\nexport const consentGranted: OptimizelyStepExample = {\n public: false,\n command: 'consent',\n in: { analytics: true } as WalkerOS.Consent,\n settings: {} as Partial<Settings>,\n out: [],\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 sdkKey: z\n .string()\n .min(1)\n .describe(\n 'Your Optimizely Feature Experimentation SDK key. Find it in your Optimizely project under Settings > Environments.',\n ),\n userId: z\n .unknown()\n .describe(\n 'walkerOS mapping value to resolve userId for experiment bucketing. Example: \"user.id\" or { key: \"user.id\", value: \"user.device\" } for fallback.',\n )\n .optional(),\n attributes: z\n .unknown()\n .describe(\n 'User attributes for audience targeting. Resolves to Record<string, unknown>. Applied to every event via createUserContext().',\n )\n .optional(),\n updateInterval: z\n .number()\n .int()\n .positive()\n .describe(\n 'Polling interval for datafile updates in milliseconds. Default: 60000.',\n )\n .optional(),\n autoUpdate: z\n .boolean()\n .describe('Auto-update datafile via polling. Default: true.')\n .optional(),\n batchSize: z\n .number()\n .int()\n .positive()\n .describe('Batch event processor: number of events per batch. Default: 10.')\n .optional(),\n flushInterval: z\n .number()\n .int()\n .positive()\n .describe(\n 'Batch event processor: flush interval in milliseconds. Default: 1000.',\n )\n .optional(),\n skipOdp: z\n .boolean()\n .describe(\n 'Skip Optimizely Data Platform (ODP) manager initialization. Default: true. Set to false only if you use ODP.',\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 eventKey: z\n .string()\n .describe(\n 'Override event key sent to Optimizely. If omitted, the walkerOS event name is used. Must match an event created in your Optimizely project.',\n )\n .optional(),\n revenue: z\n .unknown()\n .describe(\n 'Revenue mapping. Resolves to an integer in cents (e.g. 7281 = $72.81). Passed as eventTags.revenue to trackEvent().',\n )\n .optional(),\n value: z\n .unknown()\n .describe(\n 'Numeric value mapping. Resolves to a float. Passed as eventTags.value to trackEvent().',\n )\n .optional(),\n eventTags: z\n .unknown()\n .describe(\n 'Additional event tags. Resolves to Record<string, unknown>. Spread into the eventTags object passed to trackEvent().',\n )\n .optional(),\n attributes: z\n .unknown()\n .describe(\n \"Per-event user attributes override. Resolves to Record<string, unknown>. Applied via setAttribute() before this event's trackEvent() call.\",\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 {\n Env,\n OptimizelyClient,\n OptimizelyUserContext,\n OptimizelySDK,\n} from '../types';\n\n/**\n * Example environment configurations for Optimizely destination.\n *\n * Tests clone `push` and replace individual methods with jest spies.\n * Production leaves `env.optimizely` undefined -- the destination falls back\n * to the real `@optimizely/optimizely-sdk` import.\n */\n\nconst noop = () => {};\n\n// Narrow helper types for mock SDK factory functions without loose casts.\ntype OptCreateInstance = OptimizelySDK['createInstance'];\ntype OptCreatePollingConfigMgr =\n OptimizelySDK['createPollingProjectConfigManager'];\ntype OptCreateBatchEventProcessor = OptimizelySDK['createBatchEventProcessor'];\ntype OptCreateUserContext = OptimizelyClient['createUserContext'];\ntype OptOnReady = OptimizelyClient['onReady'];\ntype OptTrackEvent = OptimizelyUserContext['trackEvent'];\ntype OptSetAttribute = OptimizelyUserContext['setAttribute'];\n\nfunction createMockUserContext(): OptimizelyUserContext {\n return {\n trackEvent: noop as OptTrackEvent,\n setAttribute: noop as OptSetAttribute,\n };\n}\n\nfunction createMockClient(): OptimizelyClient {\n return {\n onReady: (() => Promise.resolve({ success: true })) as OptOnReady,\n createUserContext: (() => createMockUserContext()) as OptCreateUserContext,\n close: noop,\n };\n}\n\nfunction createMockSDK(): OptimizelySDK {\n return {\n createInstance: (() => createMockClient()) as OptCreateInstance,\n createPollingProjectConfigManager:\n (() => ({})) as OptCreatePollingConfigMgr,\n createBatchEventProcessor: (() => ({})) as OptCreateBatchEventProcessor,\n };\n}\n\n/**\n * Pre-init env -- all methods are no-ops until the test runner wires spies.\n */\nexport const init: Env | undefined = {\n optimizely: createMockSDK(),\n};\n\n/**\n * Post-init env -- same shape. The test runner clones this and replaces\n * individual methods with jest.fn() so it can assert on calls.\n */\nexport const push: Env = {\n optimizely: createMockSDK(),\n};\n\n/** Simulation tracking paths for CLI --simulate. */\nexport const simulation = [\n 'call:optimizely.createInstance',\n 'call:optimizely.createInstance.onReady',\n 'call:optimizely.createInstance.createUserContext',\n 'call:optimizely.createInstance.createUserContext.trackEvent',\n 'call:optimizely.createInstance.createUserContext.setAttribute',\n 'call:optimizely.createInstance.close',\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 OptimizelyStepExample = 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 * userContext.trackEvent(event.name). No mapping, no eventTags.\n */\nexport const defaultEventForwarding: OptimizelyStepExample = {\n title: 'Default event',\n description:\n 'A walker event becomes an Optimizely trackEvent call with the event name and empty eventTags.',\n in: getEvent('page view', { timestamp: 1700000100 }),\n out: [['optimizely.trackEvent', 'page view', {}]],\n};\n\n/**\n * Mapped event name -- mapping.name renames the event key for Optimizely.\n * The eventKey must match an event created in the Optimizely project.\n */\nexport const mappedEventName: OptimizelyStepExample = {\n title: 'Mapped event key',\n description:\n 'A mapping renames the walker event to an Optimizely event key defined in the project.',\n in: getEvent('product view', { timestamp: 1700000101 }),\n mapping: {\n name: 'product_viewed',\n },\n out: [['optimizely.trackEvent', 'product_viewed', {}]],\n};\n\n/**\n * Revenue tracking -- mapping.settings.revenue resolves to an integer\n * (cents). Passed as eventTags.revenue. The value is a pass-through;\n * the user must provide cents (e.g. 55500 = $555.00).\n */\nexport const orderCompleteRevenue: OptimizelyStepExample = {\n title: 'Purchase revenue',\n description:\n 'An order fires an Optimizely purchase event with revenue in cents, value, and additional event tags.',\n in: getEvent('order complete', {\n timestamp: 1700000102,\n data: {\n revenue_cents: 55500,\n total: 555,\n currency: 'EUR',\n item_count: 3,\n },\n }),\n mapping: {\n name: 'purchase',\n settings: {\n revenue: 'data.revenue_cents',\n value: 'data.total',\n eventTags: {\n map: {\n currency: 'data.currency',\n item_count: 'data.item_count',\n },\n },\n },\n },\n out: [\n [\n 'optimizely.trackEvent',\n 'purchase',\n { revenue: 55500, value: 555, currency: 'EUR', item_count: 3 },\n ],\n ],\n};\n\n/**\n * Per-event attributes -- mapping.settings.attributes resolves to\n * key-value pairs that are applied via setAttribute() before trackEvent().\n */\nexport const signupWithAttributes: OptimizelyStepExample = {\n title: 'Signup with attributes',\n description:\n 'A user signup sets per-event Optimizely attributes via setAttribute before firing the trackEvent.',\n in: getEvent('user signup', {\n timestamp: 1700000103,\n data: {\n method: 'google',\n source: 'referral',\n },\n }),\n mapping: {\n name: 'signup',\n settings: {\n attributes: {\n map: {\n signup_method: 'data.method',\n referral_source: 'data.source',\n },\n },\n },\n },\n out: [\n ['optimizely.setAttribute', 'signup_method', 'google'],\n ['optimizely.setAttribute', 'referral_source', 'referral'],\n ['optimizely.trackEvent', 'signup', {}],\n ],\n};\n\n/**\n * Wildcard ignore -- walkerOS's standard way to drop events. The rule\n * matches but does nothing. The destination fires zero SDK calls.\n */\nexport const wildcardIgnored: OptimizelyStepExample = {\n public: false,\n in: getEvent('debug noise', { timestamp: 1700000104 }),\n mapping: { ignore: true },\n out: [],\n};\n\n/**\n * Skip track with attributes only -- fires setAttribute calls but no\n * trackEvent. Useful for enriching user context without a conversion.\n */\nexport const attributesOnlySilent: OptimizelyStepExample = {\n title: 'Attributes only',\n description:\n 'A profile update sets Optimizely user attributes without firing a trackEvent for user enrichment.',\n in: getEvent('profile update', {\n timestamp: 1700000105,\n data: {\n plan: 'premium',\n country: 'DE',\n },\n }),\n mapping: {\n silent: true,\n settings: {\n attributes: {\n map: {\n plan: 'data.plan',\n country: 'data.country',\n },\n },\n },\n },\n out: [\n ['optimizely.setAttribute', 'plan', 'premium'],\n ['optimizely.setAttribute', 'country', 'DE'],\n ],\n};\n\n/**\n * Consent revoked -- the destination closes the Optimizely client,\n * flushing queued events and stopping datafile polling.\n */\nexport const consentRevoked: OptimizelyStepExample = {\n title: 'Consent revoked',\n description:\n 'A walker consent command with analytics denied closes the Optimizely client and flushes queued events.',\n command: 'consent',\n before: { analytics: true },\n in: { analytics: false } as WalkerOS.Consent,\n settings: {} as Partial<Settings>,\n out: [['optimizely.close']],\n};\n\n/**\n * Consent granted -- no immediate SDK action needed. The destination\n * re-initializes on the next push (walkerOS queues events until consent\n * is granted, then re-inits). No calls expected.\n */\nexport const consentGranted: OptimizelyStepExample = {\n public: false,\n command: 'consent',\n in: { analytics: true } as WalkerOS.Consent,\n settings: {} as Partial<Settings>,\n out: [],\n};\n"],"mappings":"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","names":["import_dev","import_dev"]}
package/dist/dev.mjs CHANGED
@@ -1 +1 @@
1
- var e=Object.defineProperty,t=(t,i)=>{for(var n in i)e(t,n,{get:i[n],enumerable:!0})},i={};t(i,{MappingSchema:()=>s,SettingsSchema:()=>r,mapping:()=>u,settings:()=>l});import{zodToSchema as n}from"@walkeros/core/dev";import{z as a}from"@walkeros/core/dev";var r=a.object({sdkKey:a.string().min(1).describe("Your Optimizely Feature Experimentation SDK key. Find it in your Optimizely project under Settings > Environments."),userId:a.unknown().describe('walkerOS mapping value to resolve userId for experiment bucketing. Example: "user.id" or { key: "user.id", value: "user.device" } for fallback.').optional(),attributes:a.unknown().describe("User attributes for audience targeting. Resolves to Record<string, unknown>. Applied to every event via createUserContext().").optional(),updateInterval:a.number().int().positive().describe("Polling interval for datafile updates in milliseconds. Default: 60000.").optional(),autoUpdate:a.boolean().describe("Auto-update datafile via polling. Default: true.").optional(),batchSize:a.number().int().positive().describe("Batch event processor: number of events per batch. Default: 10.").optional(),flushInterval:a.number().int().positive().describe("Batch event processor: flush interval in milliseconds. Default: 1000.").optional(),skipOdp:a.boolean().describe("Skip Optimizely Data Platform (ODP) manager initialization. Default: true. Set to false only if you use ODP.").optional()});import{z as o}from"@walkeros/core/dev";var s=o.object({eventKey:o.string().describe("Override event key sent to Optimizely. If omitted, the walkerOS event name is used. Must match an event created in your Optimizely project.").optional(),revenue:o.unknown().describe("Revenue mapping. Resolves to an integer in cents (e.g. 7281 = $72.81). Passed as eventTags.revenue to trackEvent().").optional(),value:o.unknown().describe("Numeric value mapping. Resolves to a float. Passed as eventTags.value to trackEvent().").optional(),eventTags:o.unknown().describe("Additional event tags. Resolves to Record<string, unknown>. Spread into the eventTags object passed to trackEvent().").optional(),attributes:o.unknown().describe("Per-event user attributes override. Resolves to Record<string, unknown>. Applied via setAttribute() before this event's trackEvent() call.").optional()}),l=n(r),u=n(s),p={};t(p,{env:()=>c,step:()=>f});var c={};t(c,{init:()=>g,push:()=>y,simulation:()=>b});var m=()=>{};function d(){return{onReady:()=>Promise.resolve({success:!0}),createUserContext:()=>({trackEvent:m,setAttribute:m}),close:m}}function v(){return{createInstance:()=>d(),createPollingProjectConfigManager:()=>({}),createBatchEventProcessor:()=>({})}}var g={optimizely:v()},y={optimizely:v()},b=["call:optimizely.createInstance","call:optimizely.client.onReady","call:optimizely.client.createUserContext","call:optimizely.userContext.trackEvent","call:optimizely.userContext.setAttribute","call:optimizely.client.close"],f={};t(f,{attributesOnlySilent:()=>O,consentGranted:()=>P,consentRevoked:()=>R,defaultEventForwarding:()=>h,mappedEventName:()=>z,orderCompleteRevenue:()=>w,signupWithAttributes:()=>E,wildcardIgnored:()=>A});import{getEvent as k}from"@walkeros/core";var h={title:"Default event",description:"A walker event becomes an Optimizely trackEvent call with the event name and empty eventTags.",in:k("page view",{timestamp:1700000100}),out:[["optimizely.trackEvent","page view",{}]]},z={title:"Mapped event key",description:"A mapping renames the walker event to an Optimizely event key defined in the project.",in:k("product view",{timestamp:1700000101}),mapping:{name:"product_viewed"},out:[["optimizely.trackEvent","product_viewed",{}]]},w={title:"Purchase revenue",description:"An order fires an Optimizely purchase event with revenue in cents, value, and additional event tags.",in:k("order complete",{timestamp:1700000102,data:{revenue_cents:55500,total:555,currency:"EUR",item_count:3}}),mapping:{name:"purchase",settings:{revenue:"data.revenue_cents",value:"data.total",eventTags:{map:{currency:"data.currency",item_count:"data.item_count"}}}},out:[["optimizely.trackEvent","purchase",{revenue:55500,value:555,currency:"EUR",item_count:3}]]},E={title:"Signup with attributes",description:"A user signup sets per-event Optimizely attributes via setAttribute before firing the trackEvent.",in:k("user signup",{timestamp:1700000103,data:{method:"google",source:"referral"}}),mapping:{name:"signup",settings:{attributes:{map:{signup_method:"data.method",referral_source:"data.source"}}}},out:[["optimizely.setAttribute","signup_method","google"],["optimizely.setAttribute","referral_source","referral"],["optimizely.trackEvent","signup",{}]]},A={public:!1,in:k("debug noise",{timestamp:1700000104}),mapping:{ignore:!0},out:[]},O={title:"Attributes only",description:"A profile update sets Optimizely user attributes without firing a trackEvent for user enrichment.",in:k("profile update",{timestamp:1700000105,data:{plan:"premium",country:"DE"}}),mapping:{silent:!0,settings:{attributes:{map:{plan:"data.plan",country:"data.country"}}}},out:[["optimizely.setAttribute","plan","premium"],["optimizely.setAttribute","country","DE"]]},R={title:"Consent revoked",description:"A walker consent command with analytics denied closes the Optimizely client and flushes queued events.",command:"consent",before:{analytics:!0},in:{analytics:!1},settings:{},out:[["optimizely.close"]]},P={public:!1,command:"consent",in:{analytics:!0},settings:{},out:[]};export{p as examples,i as schemas};//# sourceMappingURL=dev.mjs.map
1
+ var e=Object.defineProperty,t=(t,n)=>{for(var i in n)e(t,i,{get:n[i],enumerable:!0})},n={};t(n,{MappingSchema:()=>s,SettingsSchema:()=>r,mapping:()=>c,settings:()=>l});import{zodToSchema as i}from"@walkeros/core/dev";import{z as a}from"@walkeros/core/dev";var r=a.object({sdkKey:a.string().min(1).describe("Your Optimizely Feature Experimentation SDK key. Find it in your Optimizely project under Settings > Environments."),userId:a.unknown().describe('walkerOS mapping value to resolve userId for experiment bucketing. Example: "user.id" or { key: "user.id", value: "user.device" } for fallback.').optional(),attributes:a.unknown().describe("User attributes for audience targeting. Resolves to Record<string, unknown>. Applied to every event via createUserContext().").optional(),updateInterval:a.number().int().positive().describe("Polling interval for datafile updates in milliseconds. Default: 60000.").optional(),autoUpdate:a.boolean().describe("Auto-update datafile via polling. Default: true.").optional(),batchSize:a.number().int().positive().describe("Batch event processor: number of events per batch. Default: 10.").optional(),flushInterval:a.number().int().positive().describe("Batch event processor: flush interval in milliseconds. Default: 1000.").optional(),skipOdp:a.boolean().describe("Skip Optimizely Data Platform (ODP) manager initialization. Default: true. Set to false only if you use ODP.").optional()});import{z as o}from"@walkeros/core/dev";var s=o.object({eventKey:o.string().describe("Override event key sent to Optimizely. If omitted, the walkerOS event name is used. Must match an event created in your Optimizely project.").optional(),revenue:o.unknown().describe("Revenue mapping. Resolves to an integer in cents (e.g. 7281 = $72.81). Passed as eventTags.revenue to trackEvent().").optional(),value:o.unknown().describe("Numeric value mapping. Resolves to a float. Passed as eventTags.value to trackEvent().").optional(),eventTags:o.unknown().describe("Additional event tags. Resolves to Record<string, unknown>. Spread into the eventTags object passed to trackEvent().").optional(),attributes:o.unknown().describe("Per-event user attributes override. Resolves to Record<string, unknown>. Applied via setAttribute() before this event's trackEvent() call.").optional()}),l=i(r),c=i(s),p={};t(p,{env:()=>u,step:()=>f});var u={};t(u,{init:()=>g,push:()=>y,simulation:()=>b});var m=()=>{};function d(){return{onReady:()=>Promise.resolve({success:!0}),createUserContext:()=>({trackEvent:m,setAttribute:m}),close:m}}function v(){return{createInstance:()=>d(),createPollingProjectConfigManager:()=>({}),createBatchEventProcessor:()=>({})}}var g={optimizely:v()},y={optimizely:v()},b=["call:optimizely.createInstance","call:optimizely.createInstance.onReady","call:optimizely.createInstance.createUserContext","call:optimizely.createInstance.createUserContext.trackEvent","call:optimizely.createInstance.createUserContext.setAttribute","call:optimizely.createInstance.close"],f={};t(f,{attributesOnlySilent:()=>O,consentGranted:()=>I,consentRevoked:()=>R,defaultEventForwarding:()=>h,mappedEventName:()=>z,orderCompleteRevenue:()=>w,signupWithAttributes:()=>E,wildcardIgnored:()=>A});import{getEvent as k}from"@walkeros/core";var h={title:"Default event",description:"A walker event becomes an Optimizely trackEvent call with the event name and empty eventTags.",in:k("page view",{timestamp:1700000100}),out:[["optimizely.trackEvent","page view",{}]]},z={title:"Mapped event key",description:"A mapping renames the walker event to an Optimizely event key defined in the project.",in:k("product view",{timestamp:1700000101}),mapping:{name:"product_viewed"},out:[["optimizely.trackEvent","product_viewed",{}]]},w={title:"Purchase revenue",description:"An order fires an Optimizely purchase event with revenue in cents, value, and additional event tags.",in:k("order complete",{timestamp:1700000102,data:{revenue_cents:55500,total:555,currency:"EUR",item_count:3}}),mapping:{name:"purchase",settings:{revenue:"data.revenue_cents",value:"data.total",eventTags:{map:{currency:"data.currency",item_count:"data.item_count"}}}},out:[["optimizely.trackEvent","purchase",{revenue:55500,value:555,currency:"EUR",item_count:3}]]},E={title:"Signup with attributes",description:"A user signup sets per-event Optimizely attributes via setAttribute before firing the trackEvent.",in:k("user signup",{timestamp:1700000103,data:{method:"google",source:"referral"}}),mapping:{name:"signup",settings:{attributes:{map:{signup_method:"data.method",referral_source:"data.source"}}}},out:[["optimizely.setAttribute","signup_method","google"],["optimizely.setAttribute","referral_source","referral"],["optimizely.trackEvent","signup",{}]]},A={public:!1,in:k("debug noise",{timestamp:1700000104}),mapping:{ignore:!0},out:[]},O={title:"Attributes only",description:"A profile update sets Optimizely user attributes without firing a trackEvent for user enrichment.",in:k("profile update",{timestamp:1700000105,data:{plan:"premium",country:"DE"}}),mapping:{silent:!0,settings:{attributes:{map:{plan:"data.plan",country:"data.country"}}}},out:[["optimizely.setAttribute","plan","premium"],["optimizely.setAttribute","country","DE"]]},R={title:"Consent revoked",description:"A walker consent command with analytics denied closes the Optimizely client and flushes queued events.",command:"consent",before:{analytics:!0},in:{analytics:!1},settings:{},out:[["optimizely.close"]]},I={public:!1,command:"consent",in:{analytics:!0},settings:{},out:[]};export{p as examples,n 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 sdkKey: z\n .string()\n .min(1)\n .describe(\n 'Your Optimizely Feature Experimentation SDK key. Find it in your Optimizely project under Settings > Environments.',\n ),\n userId: z\n .unknown()\n .describe(\n 'walkerOS mapping value to resolve userId for experiment bucketing. Example: \"user.id\" or { key: \"user.id\", value: \"user.device\" } for fallback.',\n )\n .optional(),\n attributes: z\n .unknown()\n .describe(\n 'User attributes for audience targeting. Resolves to Record<string, unknown>. Applied to every event via createUserContext().',\n )\n .optional(),\n updateInterval: z\n .number()\n .int()\n .positive()\n .describe(\n 'Polling interval for datafile updates in milliseconds. Default: 60000.',\n )\n .optional(),\n autoUpdate: z\n .boolean()\n .describe('Auto-update datafile via polling. Default: true.')\n .optional(),\n batchSize: z\n .number()\n .int()\n .positive()\n .describe('Batch event processor: number of events per batch. Default: 10.')\n .optional(),\n flushInterval: z\n .number()\n .int()\n .positive()\n .describe(\n 'Batch event processor: flush interval in milliseconds. Default: 1000.',\n )\n .optional(),\n skipOdp: z\n .boolean()\n .describe(\n 'Skip Optimizely Data Platform (ODP) manager initialization. Default: true. Set to false only if you use ODP.',\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 eventKey: z\n .string()\n .describe(\n 'Override event key sent to Optimizely. If omitted, the walkerOS event name is used. Must match an event created in your Optimizely project.',\n )\n .optional(),\n revenue: z\n .unknown()\n .describe(\n 'Revenue mapping. Resolves to an integer in cents (e.g. 7281 = $72.81). Passed as eventTags.revenue to trackEvent().',\n )\n .optional(),\n value: z\n .unknown()\n .describe(\n 'Numeric value mapping. Resolves to a float. Passed as eventTags.value to trackEvent().',\n )\n .optional(),\n eventTags: z\n .unknown()\n .describe(\n 'Additional event tags. Resolves to Record<string, unknown>. Spread into the eventTags object passed to trackEvent().',\n )\n .optional(),\n attributes: z\n .unknown()\n .describe(\n \"Per-event user attributes override. Resolves to Record<string, unknown>. Applied via setAttribute() before this event's trackEvent() call.\",\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 {\n Env,\n OptimizelyClient,\n OptimizelyUserContext,\n OptimizelySDK,\n} from '../types';\n\n/**\n * Example environment configurations for Optimizely destination.\n *\n * Tests clone `push` and replace individual methods with jest spies.\n * Production leaves `env.optimizely` undefined -- the destination falls back\n * to the real `@optimizely/optimizely-sdk` import.\n */\n\nconst noop = () => {};\n\n// Narrow helper types for mock SDK factory functions without loose casts.\ntype OptCreateInstance = OptimizelySDK['createInstance'];\ntype OptCreatePollingConfigMgr =\n OptimizelySDK['createPollingProjectConfigManager'];\ntype OptCreateBatchEventProcessor = OptimizelySDK['createBatchEventProcessor'];\ntype OptCreateUserContext = OptimizelyClient['createUserContext'];\ntype OptOnReady = OptimizelyClient['onReady'];\ntype OptTrackEvent = OptimizelyUserContext['trackEvent'];\ntype OptSetAttribute = OptimizelyUserContext['setAttribute'];\n\nfunction createMockUserContext(): OptimizelyUserContext {\n return {\n trackEvent: noop as OptTrackEvent,\n setAttribute: noop as OptSetAttribute,\n };\n}\n\nfunction createMockClient(): OptimizelyClient {\n return {\n onReady: (() => Promise.resolve({ success: true })) as OptOnReady,\n createUserContext: (() => createMockUserContext()) as OptCreateUserContext,\n close: noop,\n };\n}\n\nfunction createMockSDK(): OptimizelySDK {\n return {\n createInstance: (() => createMockClient()) as OptCreateInstance,\n createPollingProjectConfigManager:\n (() => ({})) as OptCreatePollingConfigMgr,\n createBatchEventProcessor: (() => ({})) as OptCreateBatchEventProcessor,\n };\n}\n\n/**\n * Pre-init env -- all methods are no-ops until the test runner wires spies.\n */\nexport const init: Env | undefined = {\n optimizely: createMockSDK(),\n};\n\n/**\n * Post-init env -- same shape. The test runner clones this and replaces\n * individual methods with jest.fn() so it can assert on calls.\n */\nexport const push: Env = {\n optimizely: createMockSDK(),\n};\n\n/** Simulation tracking paths for CLI --simulate. */\nexport const simulation = [\n 'call:optimizely.createInstance',\n 'call:optimizely.client.onReady',\n 'call:optimizely.client.createUserContext',\n 'call:optimizely.userContext.trackEvent',\n 'call:optimizely.userContext.setAttribute',\n 'call:optimizely.client.close',\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 OptimizelyStepExample = 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 * userContext.trackEvent(event.name). No mapping, no eventTags.\n */\nexport const defaultEventForwarding: OptimizelyStepExample = {\n title: 'Default event',\n description:\n 'A walker event becomes an Optimizely trackEvent call with the event name and empty eventTags.',\n in: getEvent('page view', { timestamp: 1700000100 }),\n out: [['optimizely.trackEvent', 'page view', {}]],\n};\n\n/**\n * Mapped event name -- mapping.name renames the event key for Optimizely.\n * The eventKey must match an event created in the Optimizely project.\n */\nexport const mappedEventName: OptimizelyStepExample = {\n title: 'Mapped event key',\n description:\n 'A mapping renames the walker event to an Optimizely event key defined in the project.',\n in: getEvent('product view', { timestamp: 1700000101 }),\n mapping: {\n name: 'product_viewed',\n },\n out: [['optimizely.trackEvent', 'product_viewed', {}]],\n};\n\n/**\n * Revenue tracking -- mapping.settings.revenue resolves to an integer\n * (cents). Passed as eventTags.revenue. The value is a pass-through;\n * the user must provide cents (e.g. 55500 = $555.00).\n */\nexport const orderCompleteRevenue: OptimizelyStepExample = {\n title: 'Purchase revenue',\n description:\n 'An order fires an Optimizely purchase event with revenue in cents, value, and additional event tags.',\n in: getEvent('order complete', {\n timestamp: 1700000102,\n data: {\n revenue_cents: 55500,\n total: 555,\n currency: 'EUR',\n item_count: 3,\n },\n }),\n mapping: {\n name: 'purchase',\n settings: {\n revenue: 'data.revenue_cents',\n value: 'data.total',\n eventTags: {\n map: {\n currency: 'data.currency',\n item_count: 'data.item_count',\n },\n },\n },\n },\n out: [\n [\n 'optimizely.trackEvent',\n 'purchase',\n { revenue: 55500, value: 555, currency: 'EUR', item_count: 3 },\n ],\n ],\n};\n\n/**\n * Per-event attributes -- mapping.settings.attributes resolves to\n * key-value pairs that are applied via setAttribute() before trackEvent().\n */\nexport const signupWithAttributes: OptimizelyStepExample = {\n title: 'Signup with attributes',\n description:\n 'A user signup sets per-event Optimizely attributes via setAttribute before firing the trackEvent.',\n in: getEvent('user signup', {\n timestamp: 1700000103,\n data: {\n method: 'google',\n source: 'referral',\n },\n }),\n mapping: {\n name: 'signup',\n settings: {\n attributes: {\n map: {\n signup_method: 'data.method',\n referral_source: 'data.source',\n },\n },\n },\n },\n out: [\n ['optimizely.setAttribute', 'signup_method', 'google'],\n ['optimizely.setAttribute', 'referral_source', 'referral'],\n ['optimizely.trackEvent', 'signup', {}],\n ],\n};\n\n/**\n * Wildcard ignore -- walkerOS's standard way to drop events. The rule\n * matches but does nothing. The destination fires zero SDK calls.\n */\nexport const wildcardIgnored: OptimizelyStepExample = {\n public: false,\n in: getEvent('debug noise', { timestamp: 1700000104 }),\n mapping: { ignore: true },\n out: [],\n};\n\n/**\n * Skip track with attributes only -- fires setAttribute calls but no\n * trackEvent. Useful for enriching user context without a conversion.\n */\nexport const attributesOnlySilent: OptimizelyStepExample = {\n title: 'Attributes only',\n description:\n 'A profile update sets Optimizely user attributes without firing a trackEvent for user enrichment.',\n in: getEvent('profile update', {\n timestamp: 1700000105,\n data: {\n plan: 'premium',\n country: 'DE',\n },\n }),\n mapping: {\n silent: true,\n settings: {\n attributes: {\n map: {\n plan: 'data.plan',\n country: 'data.country',\n },\n },\n },\n },\n out: [\n ['optimizely.setAttribute', 'plan', 'premium'],\n ['optimizely.setAttribute', 'country', 'DE'],\n ],\n};\n\n/**\n * Consent revoked -- the destination closes the Optimizely client,\n * flushing queued events and stopping datafile polling.\n */\nexport const consentRevoked: OptimizelyStepExample = {\n title: 'Consent revoked',\n description:\n 'A walker consent command with analytics denied closes the Optimizely client and flushes queued events.',\n command: 'consent',\n before: { analytics: true },\n in: { analytics: false } as WalkerOS.Consent,\n settings: {} as Partial<Settings>,\n out: [['optimizely.close']],\n};\n\n/**\n * Consent granted -- no immediate SDK action needed. The destination\n * re-initializes on the next push (walkerOS queues events until consent\n * is granted, then re-inits). No calls expected.\n */\nexport const consentGranted: OptimizelyStepExample = {\n public: false,\n command: 'consent',\n in: { analytics: true } as WalkerOS.Consent,\n settings: {} as Partial<Settings>,\n out: [],\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 sdkKey: z\n .string()\n .min(1)\n .describe(\n 'Your Optimizely Feature Experimentation SDK key. Find it in your Optimizely project under Settings > Environments.',\n ),\n userId: z\n .unknown()\n .describe(\n 'walkerOS mapping value to resolve userId for experiment bucketing. Example: \"user.id\" or { key: \"user.id\", value: \"user.device\" } for fallback.',\n )\n .optional(),\n attributes: z\n .unknown()\n .describe(\n 'User attributes for audience targeting. Resolves to Record<string, unknown>. Applied to every event via createUserContext().',\n )\n .optional(),\n updateInterval: z\n .number()\n .int()\n .positive()\n .describe(\n 'Polling interval for datafile updates in milliseconds. Default: 60000.',\n )\n .optional(),\n autoUpdate: z\n .boolean()\n .describe('Auto-update datafile via polling. Default: true.')\n .optional(),\n batchSize: z\n .number()\n .int()\n .positive()\n .describe('Batch event processor: number of events per batch. Default: 10.')\n .optional(),\n flushInterval: z\n .number()\n .int()\n .positive()\n .describe(\n 'Batch event processor: flush interval in milliseconds. Default: 1000.',\n )\n .optional(),\n skipOdp: z\n .boolean()\n .describe(\n 'Skip Optimizely Data Platform (ODP) manager initialization. Default: true. Set to false only if you use ODP.',\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 eventKey: z\n .string()\n .describe(\n 'Override event key sent to Optimizely. If omitted, the walkerOS event name is used. Must match an event created in your Optimizely project.',\n )\n .optional(),\n revenue: z\n .unknown()\n .describe(\n 'Revenue mapping. Resolves to an integer in cents (e.g. 7281 = $72.81). Passed as eventTags.revenue to trackEvent().',\n )\n .optional(),\n value: z\n .unknown()\n .describe(\n 'Numeric value mapping. Resolves to a float. Passed as eventTags.value to trackEvent().',\n )\n .optional(),\n eventTags: z\n .unknown()\n .describe(\n 'Additional event tags. Resolves to Record<string, unknown>. Spread into the eventTags object passed to trackEvent().',\n )\n .optional(),\n attributes: z\n .unknown()\n .describe(\n \"Per-event user attributes override. Resolves to Record<string, unknown>. Applied via setAttribute() before this event's trackEvent() call.\",\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 {\n Env,\n OptimizelyClient,\n OptimizelyUserContext,\n OptimizelySDK,\n} from '../types';\n\n/**\n * Example environment configurations for Optimizely destination.\n *\n * Tests clone `push` and replace individual methods with jest spies.\n * Production leaves `env.optimizely` undefined -- the destination falls back\n * to the real `@optimizely/optimizely-sdk` import.\n */\n\nconst noop = () => {};\n\n// Narrow helper types for mock SDK factory functions without loose casts.\ntype OptCreateInstance = OptimizelySDK['createInstance'];\ntype OptCreatePollingConfigMgr =\n OptimizelySDK['createPollingProjectConfigManager'];\ntype OptCreateBatchEventProcessor = OptimizelySDK['createBatchEventProcessor'];\ntype OptCreateUserContext = OptimizelyClient['createUserContext'];\ntype OptOnReady = OptimizelyClient['onReady'];\ntype OptTrackEvent = OptimizelyUserContext['trackEvent'];\ntype OptSetAttribute = OptimizelyUserContext['setAttribute'];\n\nfunction createMockUserContext(): OptimizelyUserContext {\n return {\n trackEvent: noop as OptTrackEvent,\n setAttribute: noop as OptSetAttribute,\n };\n}\n\nfunction createMockClient(): OptimizelyClient {\n return {\n onReady: (() => Promise.resolve({ success: true })) as OptOnReady,\n createUserContext: (() => createMockUserContext()) as OptCreateUserContext,\n close: noop,\n };\n}\n\nfunction createMockSDK(): OptimizelySDK {\n return {\n createInstance: (() => createMockClient()) as OptCreateInstance,\n createPollingProjectConfigManager:\n (() => ({})) as OptCreatePollingConfigMgr,\n createBatchEventProcessor: (() => ({})) as OptCreateBatchEventProcessor,\n };\n}\n\n/**\n * Pre-init env -- all methods are no-ops until the test runner wires spies.\n */\nexport const init: Env | undefined = {\n optimizely: createMockSDK(),\n};\n\n/**\n * Post-init env -- same shape. The test runner clones this and replaces\n * individual methods with jest.fn() so it can assert on calls.\n */\nexport const push: Env = {\n optimizely: createMockSDK(),\n};\n\n/** Simulation tracking paths for CLI --simulate. */\nexport const simulation = [\n 'call:optimizely.createInstance',\n 'call:optimizely.createInstance.onReady',\n 'call:optimizely.createInstance.createUserContext',\n 'call:optimizely.createInstance.createUserContext.trackEvent',\n 'call:optimizely.createInstance.createUserContext.setAttribute',\n 'call:optimizely.createInstance.close',\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 OptimizelyStepExample = 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 * userContext.trackEvent(event.name). No mapping, no eventTags.\n */\nexport const defaultEventForwarding: OptimizelyStepExample = {\n title: 'Default event',\n description:\n 'A walker event becomes an Optimizely trackEvent call with the event name and empty eventTags.',\n in: getEvent('page view', { timestamp: 1700000100 }),\n out: [['optimizely.trackEvent', 'page view', {}]],\n};\n\n/**\n * Mapped event name -- mapping.name renames the event key for Optimizely.\n * The eventKey must match an event created in the Optimizely project.\n */\nexport const mappedEventName: OptimizelyStepExample = {\n title: 'Mapped event key',\n description:\n 'A mapping renames the walker event to an Optimizely event key defined in the project.',\n in: getEvent('product view', { timestamp: 1700000101 }),\n mapping: {\n name: 'product_viewed',\n },\n out: [['optimizely.trackEvent', 'product_viewed', {}]],\n};\n\n/**\n * Revenue tracking -- mapping.settings.revenue resolves to an integer\n * (cents). Passed as eventTags.revenue. The value is a pass-through;\n * the user must provide cents (e.g. 55500 = $555.00).\n */\nexport const orderCompleteRevenue: OptimizelyStepExample = {\n title: 'Purchase revenue',\n description:\n 'An order fires an Optimizely purchase event with revenue in cents, value, and additional event tags.',\n in: getEvent('order complete', {\n timestamp: 1700000102,\n data: {\n revenue_cents: 55500,\n total: 555,\n currency: 'EUR',\n item_count: 3,\n },\n }),\n mapping: {\n name: 'purchase',\n settings: {\n revenue: 'data.revenue_cents',\n value: 'data.total',\n eventTags: {\n map: {\n currency: 'data.currency',\n item_count: 'data.item_count',\n },\n },\n },\n },\n out: [\n [\n 'optimizely.trackEvent',\n 'purchase',\n { revenue: 55500, value: 555, currency: 'EUR', item_count: 3 },\n ],\n ],\n};\n\n/**\n * Per-event attributes -- mapping.settings.attributes resolves to\n * key-value pairs that are applied via setAttribute() before trackEvent().\n */\nexport const signupWithAttributes: OptimizelyStepExample = {\n title: 'Signup with attributes',\n description:\n 'A user signup sets per-event Optimizely attributes via setAttribute before firing the trackEvent.',\n in: getEvent('user signup', {\n timestamp: 1700000103,\n data: {\n method: 'google',\n source: 'referral',\n },\n }),\n mapping: {\n name: 'signup',\n settings: {\n attributes: {\n map: {\n signup_method: 'data.method',\n referral_source: 'data.source',\n },\n },\n },\n },\n out: [\n ['optimizely.setAttribute', 'signup_method', 'google'],\n ['optimizely.setAttribute', 'referral_source', 'referral'],\n ['optimizely.trackEvent', 'signup', {}],\n ],\n};\n\n/**\n * Wildcard ignore -- walkerOS's standard way to drop events. The rule\n * matches but does nothing. The destination fires zero SDK calls.\n */\nexport const wildcardIgnored: OptimizelyStepExample = {\n public: false,\n in: getEvent('debug noise', { timestamp: 1700000104 }),\n mapping: { ignore: true },\n out: [],\n};\n\n/**\n * Skip track with attributes only -- fires setAttribute calls but no\n * trackEvent. Useful for enriching user context without a conversion.\n */\nexport const attributesOnlySilent: OptimizelyStepExample = {\n title: 'Attributes only',\n description:\n 'A profile update sets Optimizely user attributes without firing a trackEvent for user enrichment.',\n in: getEvent('profile update', {\n timestamp: 1700000105,\n data: {\n plan: 'premium',\n country: 'DE',\n },\n }),\n mapping: {\n silent: true,\n settings: {\n attributes: {\n map: {\n plan: 'data.plan',\n country: 'data.country',\n },\n },\n },\n },\n out: [\n ['optimizely.setAttribute', 'plan', 'premium'],\n ['optimizely.setAttribute', 'country', 'DE'],\n ],\n};\n\n/**\n * Consent revoked -- the destination closes the Optimizely client,\n * flushing queued events and stopping datafile polling.\n */\nexport const consentRevoked: OptimizelyStepExample = {\n title: 'Consent revoked',\n description:\n 'A walker consent command with analytics denied closes the Optimizely client and flushes queued events.',\n command: 'consent',\n before: { analytics: true },\n in: { analytics: false } as WalkerOS.Consent,\n settings: {} as Partial<Settings>,\n out: [['optimizely.close']],\n};\n\n/**\n * Consent granted -- no immediate SDK action needed. The destination\n * re-initializes on the next push (walkerOS queues events until consent\n * is granted, then re-inits). No calls expected.\n */\nexport const consentGranted: OptimizelyStepExample = {\n public: false,\n command: 'consent',\n in: { analytics: true } as WalkerOS.Consent,\n settings: {} as Partial<Settings>,\n out: [],\n};\n"],"mappings":"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","names":["z"]}
@@ -62,11 +62,11 @@ var push = {
62
62
  };
63
63
  var simulation = [
64
64
  "call:optimizely.createInstance",
65
- "call:optimizely.client.onReady",
66
- "call:optimizely.client.createUserContext",
67
- "call:optimizely.userContext.trackEvent",
68
- "call:optimizely.userContext.setAttribute",
69
- "call:optimizely.client.close"
65
+ "call:optimizely.createInstance.onReady",
66
+ "call:optimizely.createInstance.createUserContext",
67
+ "call:optimizely.createInstance.createUserContext.trackEvent",
68
+ "call:optimizely.createInstance.createUserContext.setAttribute",
69
+ "call:optimizely.createInstance.close"
70
70
  ];
71
71
 
72
72
  // src/examples/step.ts
@@ -41,11 +41,11 @@ var push = {
41
41
  };
42
42
  var simulation = [
43
43
  "call:optimizely.createInstance",
44
- "call:optimizely.client.onReady",
45
- "call:optimizely.client.createUserContext",
46
- "call:optimizely.userContext.trackEvent",
47
- "call:optimizely.userContext.setAttribute",
48
- "call:optimizely.client.close"
44
+ "call:optimizely.createInstance.onReady",
45
+ "call:optimizely.createInstance.createUserContext",
46
+ "call:optimizely.createInstance.createUserContext.trackEvent",
47
+ "call:optimizely.createInstance.createUserContext.setAttribute",
48
+ "call:optimizely.createInstance.close"
49
49
  ];
50
50
 
51
51
  // src/examples/step.ts