@walkeros/server-destination-customerio 3.4.0 → 3.4.1-next-1776790594143
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/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.js +21 -0
- package/dist/examples/index.mjs +21 -0
- package/dist/walkerOS.json +33 -12
- package/package.json +4 -4
package/dist/dev.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var e,s=Object.defineProperty,t=Object.getOwnPropertyDescriptor,i=Object.getOwnPropertyNames,r=Object.prototype.hasOwnProperty,a=(e,t)=>{for(var i in t)s(e,i,{get:t[i],enumerable:!0})},n={};a(n,{examples:()=>v,schemas:()=>o}),module.exports=(e=n,((e,a,n,o)=>{if(a&&"object"==typeof a||"function"==typeof a)for(let p of i(a))r.call(e,p)||p===n||s(e,p,{get:()=>a[p],enumerable:!(o=t(a,p))||o.enumerable});return e})(s({},"__esModule",{value:!0}),e));var o={};a(o,{MappingSchema:()=>
|
|
1
|
+
"use strict";var e,s=Object.defineProperty,t=Object.getOwnPropertyDescriptor,i=Object.getOwnPropertyNames,r=Object.prototype.hasOwnProperty,a=(e,t)=>{for(var i in t)s(e,i,{get:t[i],enumerable:!0})},n={};a(n,{examples:()=>v,schemas:()=>o}),module.exports=(e=n,((e,a,n,o)=>{if(a&&"object"==typeof a||"function"==typeof a)for(let p of i(a))r.call(e,p)||p===n||s(e,p,{get:()=>a[p],enumerable:!(o=t(a,p))||o.enumerable});return e})(s({},"__esModule",{value:!0}),e));var o={};a(o,{MappingSchema:()=>m,SettingsSchema:()=>u,mapping:()=>g,settings:()=>c});var p=require("@walkeros/core/dev"),l=require("@walkeros/core/dev"),u=l.z.object({siteId:l.z.string().min(1).describe("Customer.io Site ID. Find it in Settings > Workspace Settings > API Credentials."),apiKey:l.z.string().min(1).describe("Customer.io API Key. Find it in Settings > Workspace Settings > API Credentials."),appApiKey:l.z.string().describe("App API Key for transactional messaging (sendEmail/sendPush). Find it in Settings > Workspace Settings > API Credentials > App API Keys.").optional(),region:l.z.enum(["us","eu"]).describe("Data center region. Must match where your Customer.io workspace was created. Default: us.").optional(),timeout:l.z.number().int().positive().describe("HTTP request timeout in milliseconds. Default: 10000.").optional(),customerId:l.z.string().describe("walkerOS mapping value path to resolve customerId from each event (like user.id).").optional(),anonymousId:l.z.string().describe("walkerOS mapping value path to resolve anonymousId from each event (like user.session).").optional(),identify:l.z.unknown().describe("Destination-level identity mapping. Resolves to { email?, first_name?, ... } attributes. Fires identify() on first push and re-fires when values change.").optional()}),d=require("@walkeros/core/dev"),m=d.z.object({identify:d.z.unknown().describe("Per-event identify attributes. Resolves to { email?, first_name?, ... }. Use with skip: true on login/identify events.").optional(),page:d.z.unknown().describe("Per-event page view. Resolves to { url, ... }. Calls trackPageView(). Use with skip: true.").optional(),destroy:d.z.boolean().describe("Permanently delete person from Customer.io. Set true on delete events with skip: true.").optional(),suppress:d.z.boolean().describe("Suppress person (stop messaging without deleting data). Set true with skip: true.").optional(),unsuppress:d.z.boolean().describe("Unsuppress person (resume messaging). Set true with skip: true.").optional(),addDevice:d.z.unknown().describe("Register push device. Resolves to { deviceId, platform, data? }. Use with skip: true.").optional(),deleteDevice:d.z.unknown().describe("Remove push device. Resolves to { deviceId, platform }. Use with skip: true.").optional(),merge:d.z.unknown().describe("Merge duplicate profiles. Resolves to { primaryType, primaryId, secondaryType, secondaryId }. Use with skip: true.").optional(),sendEmail:d.z.unknown().describe("Send transactional email. Resolves to { to, transactional_message_id, message_data?, identifiers? }. Requires appApiKey. Use with skip: true.").optional(),sendPush:d.z.unknown().describe("Send transactional push. Resolves to { transactional_message_id, message_data?, identifiers? }. Requires appApiKey. Use with skip: true.").optional()}),c=(0,p.zodToSchema)(u),g=(0,p.zodToSchema)(m),v={};a(v,{env:()=>k,step:()=>C});var k={};a(k,{push:()=>h,simulation:()=>w});var y=()=>Promise.resolve(),f=()=>Promise.resolve();var h={trackClient:{identify:()=>Promise.resolve(),track:()=>Promise.resolve(),trackAnonymous:()=>Promise.resolve(),trackPageView:()=>Promise.resolve(),destroy:y,suppress:y,unsuppress:y,addDevice:()=>Promise.resolve(),deleteDevice:()=>Promise.resolve(),mergeCustomers:()=>Promise.resolve()},apiClient:{sendEmail:f,sendPush:f}},w=["call:trackClient.identify","call:trackClient.track","call:trackClient.trackAnonymous","call:trackClient.trackPageView","call:trackClient.destroy","call:trackClient.suppress","call:trackClient.unsuppress","call:trackClient.addDevice","call:trackClient.deleteDevice","call:trackClient.mergeCustomers","call:apiClient.sendEmail","call:apiClient.sendPush"],C={};a(C,{anonymousTrack:()=>S,defaultTrack:()=>P,destinationIdentify:()=>I,destroyPerson:()=>R,mappedData:()=>z,mappedEventName:()=>A,pageView:()=>D,suppressPerson:()=>_,unsuppressPerson:()=>U,userLoginIdentify:()=>E,wildcardIgnored:()=>O});var b=require("@walkeros/core"),P={title:"Default track",description:"A walkerOS event is forwarded to Customer.io as a track call keyed by the user id.",in:(0,b.getEvent)("product view",{timestamp:1700000100,user:{id:"us3r",session:"s3ss10n"}}),out:[["trackClient.track","us3r",{name:"product view",data:{},timestamp:17e5}]]},A={title:"Rename event",description:"A mapping rule renames the walker event to a Customer.io-specific event name such as purchase.",in:(0,b.getEvent)("order complete",{timestamp:1700000101,user:{id:"us3r",session:"s3ss10n"}}),mapping:{name:"purchase"},out:[["trackClient.track","us3r",{name:"purchase",data:{},timestamp:17e5}]]},z={title:"Mapped properties",description:"A data mapping transforms the event payload into Customer.io track properties for an order.",in:(0,b.getEvent)("order complete",{timestamp:1700000102,user:{id:"us3r",session:"s3ss10n"},data:{id:"0rd3r1d",total:555,currency:"EUR"}}),mapping:{name:"purchase",data:{map:{order_id:"data.id",value:"data.total",currency:"data.currency"}}},out:[["trackClient.track","us3r",{name:"purchase",data:{order_id:"0rd3r1d",value:555,currency:"EUR"},timestamp:17e5}]]},S={title:"Anonymous track",description:"When no customer id is resolved the event is sent via trackAnonymous keyed by the session id.",in:(0,b.getEvent)("product view",{timestamp:1700000103,user:{session:"s3ss10n"}}),settings:{customerId:void 0},out:[["trackClient.trackAnonymous","s3ss10n",{name:"product view",data:{},timestamp:17e5}]]},I={title:"Destination identify",description:"Destination-level identify fires a Customer.io identify call once on the first push, before the track, attaching user attributes.",in:(0,b.getEvent)("page view",{timestamp:1700000104,user:{id:"us3r",session:"s3ss10n",email:"user@example.com"}}),settings:{identify:{map:{email:"user.email"}}},out:[["trackClient.identify","us3r",{email:"user@example.com"}],["trackClient.track","us3r",{name:"page view",data:{},timestamp:17e5}]]},E={title:"User login identify",description:"A user login triggers only a Customer.io identify call with profile attributes, skipping the track.",in:(0,b.getEvent)("user login",{timestamp:1700000105,user:{id:"us3r",session:"s3ss10n"},data:{email:"user@acme.com",first_name:"Jane",plan:"premium"}}),mapping:{skip:!0,settings:{identify:{map:{email:"data.email",first_name:"data.first_name",plan:"data.plan"}}}},out:[["trackClient.identify","us3r",{email:"user@acme.com",first_name:"Jane",plan:"premium"}]]},D={title:"Page view",description:"A page view fires trackPageView with the URL and referrer instead of a generic track call.",in:(0,b.getEvent)("page view",{timestamp:1700000106,user:{id:"us3r",session:"s3ss10n"},data:{url:"https://example.com/pricing",referrer:"https://google.com"}}),mapping:{skip:!0,settings:{page:{map:{url:"data.url",referrer:"data.referrer"}}}},out:[["trackClient.trackPageView","us3r","https://example.com/pricing",{referrer:"https://google.com"}]]},R={title:"Destroy person",description:"A user delete event permanently removes the person from Customer.io via trackClient.destroy.",in:(0,b.getEvent)("user delete",{timestamp:1700000107,user:{id:"us3r",session:"s3ss10n"}}),mapping:{skip:!0,settings:{destroy:!0}},out:[["trackClient.destroy","us3r"]]},_={title:"Suppress person",description:"A user suppress event stops messaging for the person without deleting their profile data.",in:(0,b.getEvent)("user suppress",{timestamp:1700000108,user:{id:"us3r",session:"s3ss10n"}}),mapping:{skip:!0,settings:{suppress:!0}},out:[["trackClient.suppress","us3r"]]},U={title:"Unsuppress person",description:"A user unsuppress event resumes messaging for a previously suppressed Customer.io profile.",in:(0,b.getEvent)("user unsuppress",{timestamp:1700000109,user:{id:"us3r",session:"s3ss10n"}}),mapping:{skip:!0,settings:{unsuppress:!0}},out:[["trackClient.unsuppress","us3r"]]},O={public:!1,in:(0,b.getEvent)("debug noise",{timestamp:1700000110,user:{id:"us3r",session:"s3ss10n"}}),mapping:{ignore:!0},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 siteId: z\n .string()\n .min(1)\n .describe(\n 'Customer.io Site ID. Find it in Settings > Workspace Settings > API Credentials.',\n ),\n apiKey: z\n .string()\n .min(1)\n .describe(\n 'Customer.io API Key. Find it in Settings > Workspace Settings > API Credentials.',\n ),\n appApiKey: z\n .string()\n .describe(\n 'App API Key for transactional messaging (sendEmail/sendPush). Find it in Settings > Workspace Settings > API Credentials > App API Keys.',\n )\n .optional(),\n region: z\n .enum(['us', 'eu'])\n .describe(\n 'Data center region. Must match where your Customer.io workspace was created. Default: us.',\n )\n .optional(),\n timeout: z\n .number()\n .int()\n .positive()\n .describe('HTTP request timeout in milliseconds. Default: 10000.')\n .optional(),\n customerId: z\n .string()\n .describe(\n 'walkerOS mapping value path to resolve customerId from each event (like user.id).',\n )\n .optional(),\n anonymousId: z\n .string()\n .describe(\n 'walkerOS mapping value path to resolve anonymousId from each event (like user.session).',\n )\n .optional(),\n identify: z\n .unknown()\n .describe(\n 'Destination-level identity mapping. Resolves to { email?, first_name?, ... } attributes. Fires identify() on first push and re-fires when values change.',\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 identify attributes. Resolves to { email?, first_name?, ... }. Use with skip: true on login/identify events.',\n )\n .optional(),\n page: z\n .unknown()\n .describe(\n 'Per-event page view. Resolves to { url, ... }. Calls trackPageView(). Use with skip: true.',\n )\n .optional(),\n destroy: z\n .boolean()\n .describe(\n 'Permanently delete person from Customer.io. Set true on delete events with skip: true.',\n )\n .optional(),\n suppress: z\n .boolean()\n .describe(\n 'Suppress person (stop messaging without deleting data). Set true with skip: true.',\n )\n .optional(),\n unsuppress: z\n .boolean()\n .describe('Unsuppress person (resume messaging). Set true with skip: true.')\n .optional(),\n addDevice: z\n .unknown()\n .describe(\n 'Register push device. Resolves to { deviceId, platform, data? }. Use with skip: true.',\n )\n .optional(),\n deleteDevice: z\n .unknown()\n .describe(\n 'Remove push device. Resolves to { deviceId, platform }. Use with skip: true.',\n )\n .optional(),\n merge: z\n .unknown()\n .describe(\n 'Merge duplicate profiles. Resolves to { primaryType, primaryId, secondaryType, secondaryId }. Use with skip: true.',\n )\n .optional(),\n sendEmail: z\n .unknown()\n .describe(\n 'Send transactional email. Resolves to { to, transactional_message_id, message_data?, identifiers? }. Requires appApiKey. Use with skip: true.',\n )\n .optional(),\n sendPush: z\n .unknown()\n .describe(\n 'Send transactional push. Resolves to { transactional_message_id, message_data?, identifiers? }. Requires appApiKey. Use with skip: true.',\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 CustomerIoTrackClientMock,\n CustomerIoApiClientMock,\n} from '../types';\n\ntype TrackNoArg = () => Promise<void>;\ntype TrackOne = (_id: string | number) => Promise<void>;\ntype TrackIdentify = (\n _id: string | number,\n _attrs: Record<string, unknown>,\n) => Promise<void>;\ntype TrackEvent = (\n _id: string | number,\n _event: {\n name: string;\n data?: Record<string, unknown>;\n timestamp?: number;\n },\n) => Promise<void>;\ntype TrackAnonymous = (\n _id: string,\n _event: {\n name: string;\n data?: Record<string, unknown>;\n timestamp?: number;\n },\n) => Promise<void>;\ntype TrackPage = (\n _id: string | number,\n _url: string,\n _data?: Record<string, unknown>,\n) => Promise<void>;\ntype TrackAddDevice = (\n _id: string | number,\n _deviceId: string,\n _platform: string,\n _data?: Record<string, unknown>,\n) => Promise<void>;\ntype TrackDeleteDevice = (\n _id: string | number,\n _deviceId: string,\n _platform: string,\n) => Promise<void>;\ntype TrackMerge = (\n _pt: string,\n _pi: string,\n _st: string,\n _si: string,\n) => Promise<void>;\ntype ApiSend = (_request: unknown) => Promise<void>;\n\nconst asyncIdentify: TrackIdentify = () => Promise.resolve();\nconst asyncEvent: TrackEvent = () => Promise.resolve();\nconst asyncAnonymous: TrackAnonymous = () => Promise.resolve();\nconst asyncPage: TrackPage = () => Promise.resolve();\nconst asyncOne: TrackOne = () => Promise.resolve();\nconst asyncAddDevice: TrackAddDevice = () => Promise.resolve();\nconst asyncDeleteDevice: TrackDeleteDevice = () => Promise.resolve();\nconst asyncMerge: TrackMerge = () => Promise.resolve();\nconst asyncSend: ApiSend = () => Promise.resolve();\n\n// Suppress unused warning for narrow helper aliases used below.\nvoid (null as unknown as TrackNoArg);\n\nfunction createMockTrackClient(): CustomerIoTrackClientMock {\n return {\n identify: asyncIdentify,\n track: asyncEvent,\n trackAnonymous: asyncAnonymous,\n trackPageView: asyncPage,\n destroy: asyncOne,\n suppress: asyncOne,\n unsuppress: asyncOne,\n addDevice: asyncAddDevice,\n deleteDevice: asyncDeleteDevice,\n mergeCustomers: asyncMerge,\n };\n}\n\nfunction createMockApiClient(): CustomerIoApiClientMock {\n return {\n sendEmail: asyncSend,\n sendPush: asyncSend,\n };\n}\n\nexport const push: Env = {\n trackClient: createMockTrackClient(),\n apiClient: createMockApiClient(),\n};\n\nexport const simulation = [\n 'call:trackClient.identify',\n 'call:trackClient.track',\n 'call:trackClient.trackAnonymous',\n 'call:trackClient.trackPageView',\n 'call:trackClient.destroy',\n 'call:trackClient.suppress',\n 'call:trackClient.unsuppress',\n 'call:trackClient.addDevice',\n 'call:trackClient.deleteDevice',\n 'call:trackClient.mergeCustomers',\n 'call:apiClient.sendEmail',\n 'call:apiClient.sendPush',\n];\n","import type { Flow } 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 CustomerIoStepExample = Flow.StepExample & {\n settings?: Partial<Settings>;\n};\n\n/**\n * Default event forwarding -- trackClient.track() with event name and data.\n * customerId resolved from default settings.customerId = 'user.id'.\n */\nexport const defaultTrack: CustomerIoStepExample = {\n in: getEvent('product view', {\n timestamp: 1700000100,\n user: { id: 'us3r', session: 's3ss10n' },\n }),\n out: [\n [\n 'trackClient.track',\n 'us3r',\n {\n name: 'product view',\n data: {},\n timestamp: 1700000,\n },\n ],\n ],\n};\n\n/**\n * Mapped event name -- mapping.name renames the event for Customer.io.\n */\nexport const mappedEventName: CustomerIoStepExample = {\n in: getEvent('order complete', {\n timestamp: 1700000101,\n user: { id: 'us3r', session: 's3ss10n' },\n }),\n mapping: {\n name: 'purchase',\n },\n out: [\n [\n 'trackClient.track',\n 'us3r',\n {\n name: 'purchase',\n data: {},\n timestamp: 1700000,\n },\n ],\n ],\n};\n\n/**\n * Track with mapped data properties.\n */\nexport const mappedData: CustomerIoStepExample = {\n in: getEvent('order complete', {\n timestamp: 1700000102,\n user: { id: 'us3r', session: 's3ss10n' },\n data: { id: '0rd3r1d', total: 555, currency: 'EUR' },\n }),\n mapping: {\n name: 'purchase',\n data: {\n map: {\n order_id: 'data.id',\n value: 'data.total',\n currency: 'data.currency',\n },\n },\n },\n out: [\n [\n 'trackClient.track',\n 'us3r',\n {\n name: 'purchase',\n data: { order_id: '0rd3r1d', value: 555, currency: 'EUR' },\n timestamp: 1700000,\n },\n ],\n ],\n};\n\n/**\n * Anonymous event -- no customerId resolved, falls back to trackAnonymous().\n */\nexport const anonymousTrack: CustomerIoStepExample = {\n in: getEvent('product view', {\n timestamp: 1700000103,\n user: { session: 's3ss10n' },\n }),\n settings: {\n customerId: undefined,\n },\n out: [\n [\n 'trackClient.trackAnonymous',\n 's3ss10n',\n {\n name: 'product view',\n data: {},\n timestamp: 1700000,\n },\n ],\n ],\n};\n\n/**\n * Destination-level identify -- fires trackClient.identify() on first push\n * when settings.identify mapping resolves. Then fires trackClient.track().\n */\nexport const destinationIdentify: CustomerIoStepExample = {\n in: getEvent('page view', {\n timestamp: 1700000104,\n user: { id: 'us3r', session: 's3ss10n', email: 'user@example.com' },\n }),\n settings: {\n identify: {\n map: {\n email: 'user.email',\n },\n },\n },\n out: [\n ['trackClient.identify', 'us3r', { email: 'user@example.com' }],\n [\n 'trackClient.track',\n 'us3r',\n {\n name: 'page view',\n data: {},\n timestamp: 1700000,\n },\n ],\n ],\n};\n\n/**\n * Per-event identify with skip -- user login fires identify() only.\n */\nexport const userLoginIdentify: CustomerIoStepExample = {\n in: getEvent('user login', {\n timestamp: 1700000105,\n user: { id: 'us3r', session: 's3ss10n' },\n data: {\n email: 'user@acme.com',\n first_name: 'Jane',\n plan: 'premium',\n },\n }),\n mapping: {\n skip: true,\n settings: {\n identify: {\n map: {\n email: 'data.email',\n first_name: 'data.first_name',\n plan: 'data.plan',\n },\n },\n },\n },\n out: [\n [\n 'trackClient.identify',\n 'us3r',\n { email: 'user@acme.com', first_name: 'Jane', plan: 'premium' },\n ],\n ],\n};\n\n/**\n * Page view -- fires trackClient.trackPageView() with url.\n * skip: true suppresses track(); settings.page fires trackPageView().\n */\nexport const pageView: CustomerIoStepExample = {\n in: getEvent('page view', {\n timestamp: 1700000106,\n user: { id: 'us3r', session: 's3ss10n' },\n data: {\n url: 'https://example.com/pricing',\n referrer: 'https://google.com',\n },\n }),\n mapping: {\n skip: true,\n settings: {\n page: {\n map: {\n url: 'data.url',\n referrer: 'data.referrer',\n },\n },\n },\n },\n out: [\n [\n 'trackClient.trackPageView',\n 'us3r',\n 'https://example.com/pricing',\n { referrer: 'https://google.com' },\n ],\n ],\n};\n\n/**\n * Destroy -- permanently deletes a person from Customer.io.\n */\nexport const destroyPerson: CustomerIoStepExample = {\n in: getEvent('user delete', {\n timestamp: 1700000107,\n user: { id: 'us3r', session: 's3ss10n' },\n }),\n mapping: {\n skip: true,\n settings: {\n destroy: true,\n },\n },\n out: [['trackClient.destroy', 'us3r']],\n};\n\n/**\n * Suppress -- stops messaging without deleting data.\n */\nexport const suppressPerson: CustomerIoStepExample = {\n in: getEvent('user suppress', {\n timestamp: 1700000108,\n user: { id: 'us3r', session: 's3ss10n' },\n }),\n mapping: {\n skip: true,\n settings: {\n suppress: true,\n },\n },\n out: [['trackClient.suppress', 'us3r']],\n};\n\n/**\n * Unsuppress -- resumes messaging for a suppressed person.\n */\nexport const unsuppressPerson: CustomerIoStepExample = {\n in: getEvent('user unsuppress', {\n timestamp: 1700000109,\n user: { id: 'us3r', session: 's3ss10n' },\n }),\n mapping: {\n skip: true,\n settings: {\n unsuppress: true,\n },\n },\n out: [['trackClient.unsuppress', 'us3r']],\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: CustomerIoStepExample = {\n in: getEvent('debug noise', {\n timestamp: 1700000110,\n user: { id: 'us3r', session: 's3ss10n' },\n }),\n mapping: { ignore: true },\n out: [],\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,QAAQ,aACL,OAAO,EACP,IAAI,CAAC,EACL;AAAA,IACC;AAAA,EACF;AAAA,EACF,QAAQ,aACL,OAAO,EACP,IAAI,CAAC,EACL;AAAA,IACC;AAAA,EACF;AAAA,EACF,WAAW,aACR,OAAO,EACP;AAAA,IACC;AAAA,EACF,EACC,SAAS;AAAA,EACZ,QAAQ,aACL,KAAK,CAAC,MAAM,IAAI,CAAC,EACjB;AAAA,IACC;AAAA,EACF,EACC,SAAS;AAAA,EACZ,SAAS,aACN,OAAO,EACP,IAAI,EACJ,SAAS,EACT,SAAS,uDAAuD,EAChE,SAAS;AAAA,EACZ,YAAY,aACT,OAAO,EACP;AAAA,IACC;AAAA,EACF,EACC,SAAS;AAAA,EACZ,aAAa,aACV,OAAO,EACP;AAAA,IACC;AAAA,EACF,EACC,SAAS;AAAA,EACZ,UAAU,aACP,QAAQ,EACR;AAAA,IACC;AAAA,EACF,EACC,SAAS;AACd,CAAC;;;ACnDD,IAAAC,cAAkB;AAEX,IAAM,gBAAgB,cAAE,OAAO;AAAA,EACpC,UAAU,cACP,QAAQ,EACR;AAAA,IACC;AAAA,EACF,EACC,SAAS;AAAA,EACZ,MAAM,cACH,QAAQ,EACR;AAAA,IACC;AAAA,EACF,EACC,SAAS;AAAA,EACZ,SAAS,cACN,QAAQ,EACR;AAAA,IACC;AAAA,EACF,EACC,SAAS;AAAA,EACZ,UAAU,cACP,QAAQ,EACR;AAAA,IACC;AAAA,EACF,EACC,SAAS;AAAA,EACZ,YAAY,cACT,QAAQ,EACR,SAAS,iEAAiE,EAC1E,SAAS;AAAA,EACZ,WAAW,cACR,QAAQ,EACR;AAAA,IACC;AAAA,EACF,EACC,SAAS;AAAA,EACZ,cAAc,cACX,QAAQ,EACR;AAAA,IACC;AAAA,EACF,EACC,SAAS;AAAA,EACZ,OAAO,cACJ,QAAQ,EACR;AAAA,IACC;AAAA,EACF,EACC,SAAS;AAAA,EACZ,WAAW,cACR,QAAQ,EACR;AAAA,IACC;AAAA,EACF,EACC,SAAS;AAAA,EACZ,UAAU,cACP,QAAQ,EACR;AAAA,IACC;AAAA,EACF,EACC,SAAS;AACd,CAAC;;;AFrDM,IAAM,eAAW,yBAAY,cAAc;AAC3C,IAAM,cAAU,yBAAY,aAAa;;;AGThD;AAAA;AAAA;AAAA;AAAA;;;ACAA;AAAA;AAAA;AAAA;AAAA;AAoDA,IAAM,gBAA+B,MAAM,QAAQ,QAAQ;AAC3D,IAAM,aAAyB,MAAM,QAAQ,QAAQ;AACrD,IAAM,iBAAiC,MAAM,QAAQ,QAAQ;AAC7D,IAAM,YAAuB,MAAM,QAAQ,QAAQ;AACnD,IAAM,WAAqB,MAAM,QAAQ,QAAQ;AACjD,IAAM,iBAAiC,MAAM,QAAQ,QAAQ;AAC7D,IAAM,oBAAuC,MAAM,QAAQ,QAAQ;AACnE,IAAM,aAAyB,MAAM,QAAQ,QAAQ;AACrD,IAAM,YAAqB,MAAM,QAAQ,QAAQ;AAKjD,SAAS,wBAAmD;AAC1D,SAAO;AAAA,IACL,UAAU;AAAA,IACV,OAAO;AAAA,IACP,gBAAgB;AAAA,IAChB,eAAe;AAAA,IACf,SAAS;AAAA,IACT,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,WAAW;AAAA,IACX,cAAc;AAAA,IACd,gBAAgB;AAAA,EAClB;AACF;AAEA,SAAS,sBAA+C;AACtD,SAAO;AAAA,IACL,WAAW;AAAA,IACX,UAAU;AAAA,EACZ;AACF;AAEO,IAAM,OAAY;AAAA,EACvB,aAAa,sBAAsB;AAAA,EACnC,WAAW,oBAAoB;AACjC;AAEO,IAAM,aAAa;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;;;ACzGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,kBAAyB;AAclB,IAAM,eAAsC;AAAA,EACjD,QAAI,sBAAS,gBAAgB;AAAA,IAC3B,WAAW;AAAA,IACX,MAAM,EAAE,IAAI,QAAQ,SAAS,UAAU;AAAA,EACzC,CAAC;AAAA,EACD,KAAK;AAAA,IACH;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,MAAM,CAAC;AAAA,QACP,WAAW;AAAA,MACb;AAAA,IACF;AAAA,EACF;AACF;AAKO,IAAM,kBAAyC;AAAA,EACpD,QAAI,sBAAS,kBAAkB;AAAA,IAC7B,WAAW;AAAA,IACX,MAAM,EAAE,IAAI,QAAQ,SAAS,UAAU;AAAA,EACzC,CAAC;AAAA,EACD,SAAS;AAAA,IACP,MAAM;AAAA,EACR;AAAA,EACA,KAAK;AAAA,IACH;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,MAAM,CAAC;AAAA,QACP,WAAW;AAAA,MACb;AAAA,IACF;AAAA,EACF;AACF;AAKO,IAAM,aAAoC;AAAA,EAC/C,QAAI,sBAAS,kBAAkB;AAAA,IAC7B,WAAW;AAAA,IACX,MAAM,EAAE,IAAI,QAAQ,SAAS,UAAU;AAAA,IACvC,MAAM,EAAE,IAAI,WAAW,OAAO,KAAK,UAAU,MAAM;AAAA,EACrD,CAAC;AAAA,EACD,SAAS;AAAA,IACP,MAAM;AAAA,IACN,MAAM;AAAA,MACJ,KAAK;AAAA,QACH,UAAU;AAAA,QACV,OAAO;AAAA,QACP,UAAU;AAAA,MACZ;AAAA,IACF;AAAA,EACF;AAAA,EACA,KAAK;AAAA,IACH;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,MAAM,EAAE,UAAU,WAAW,OAAO,KAAK,UAAU,MAAM;AAAA,QACzD,WAAW;AAAA,MACb;AAAA,IACF;AAAA,EACF;AACF;AAKO,IAAM,iBAAwC;AAAA,EACnD,QAAI,sBAAS,gBAAgB;AAAA,IAC3B,WAAW;AAAA,IACX,MAAM,EAAE,SAAS,UAAU;AAAA,EAC7B,CAAC;AAAA,EACD,UAAU;AAAA,IACR,YAAY;AAAA,EACd;AAAA,EACA,KAAK;AAAA,IACH;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,MAAM,CAAC;AAAA,QACP,WAAW;AAAA,MACb;AAAA,IACF;AAAA,EACF;AACF;AAMO,IAAM,sBAA6C;AAAA,EACxD,QAAI,sBAAS,aAAa;AAAA,IACxB,WAAW;AAAA,IACX,MAAM,EAAE,IAAI,QAAQ,SAAS,WAAW,OAAO,mBAAmB;AAAA,EACpE,CAAC;AAAA,EACD,UAAU;AAAA,IACR,UAAU;AAAA,MACR,KAAK;AAAA,QACH,OAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AAAA,EACA,KAAK;AAAA,IACH,CAAC,wBAAwB,QAAQ,EAAE,OAAO,mBAAmB,CAAC;AAAA,IAC9D;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,MAAM,CAAC;AAAA,QACP,WAAW;AAAA,MACb;AAAA,IACF;AAAA,EACF;AACF;AAKO,IAAM,oBAA2C;AAAA,EACtD,QAAI,sBAAS,cAAc;AAAA,IACzB,WAAW;AAAA,IACX,MAAM,EAAE,IAAI,QAAQ,SAAS,UAAU;AAAA,IACvC,MAAM;AAAA,MACJ,OAAO;AAAA,MACP,YAAY;AAAA,MACZ,MAAM;AAAA,IACR;AAAA,EACF,CAAC;AAAA,EACD,SAAS;AAAA,IACP,MAAM;AAAA,IACN,UAAU;AAAA,MACR,UAAU;AAAA,QACR,KAAK;AAAA,UACH,OAAO;AAAA,UACP,YAAY;AAAA,UACZ,MAAM;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA,KAAK;AAAA,IACH;AAAA,MACE;AAAA,MACA;AAAA,MACA,EAAE,OAAO,iBAAiB,YAAY,QAAQ,MAAM,UAAU;AAAA,IAChE;AAAA,EACF;AACF;AAMO,IAAM,WAAkC;AAAA,EAC7C,QAAI,sBAAS,aAAa;AAAA,IACxB,WAAW;AAAA,IACX,MAAM,EAAE,IAAI,QAAQ,SAAS,UAAU;AAAA,IACvC,MAAM;AAAA,MACJ,KAAK;AAAA,MACL,UAAU;AAAA,IACZ;AAAA,EACF,CAAC;AAAA,EACD,SAAS;AAAA,IACP,MAAM;AAAA,IACN,UAAU;AAAA,MACR,MAAM;AAAA,QACJ,KAAK;AAAA,UACH,KAAK;AAAA,UACL,UAAU;AAAA,QACZ;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA,KAAK;AAAA,IACH;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA,EAAE,UAAU,qBAAqB;AAAA,IACnC;AAAA,EACF;AACF;AAKO,IAAM,gBAAuC;AAAA,EAClD,QAAI,sBAAS,eAAe;AAAA,IAC1B,WAAW;AAAA,IACX,MAAM,EAAE,IAAI,QAAQ,SAAS,UAAU;AAAA,EACzC,CAAC;AAAA,EACD,SAAS;AAAA,IACP,MAAM;AAAA,IACN,UAAU;AAAA,MACR,SAAS;AAAA,IACX;AAAA,EACF;AAAA,EACA,KAAK,CAAC,CAAC,uBAAuB,MAAM,CAAC;AACvC;AAKO,IAAM,iBAAwC;AAAA,EACnD,QAAI,sBAAS,iBAAiB;AAAA,IAC5B,WAAW;AAAA,IACX,MAAM,EAAE,IAAI,QAAQ,SAAS,UAAU;AAAA,EACzC,CAAC;AAAA,EACD,SAAS;AAAA,IACP,MAAM;AAAA,IACN,UAAU;AAAA,MACR,UAAU;AAAA,IACZ;AAAA,EACF;AAAA,EACA,KAAK,CAAC,CAAC,wBAAwB,MAAM,CAAC;AACxC;AAKO,IAAM,mBAA0C;AAAA,EACrD,QAAI,sBAAS,mBAAmB;AAAA,IAC9B,WAAW;AAAA,IACX,MAAM,EAAE,IAAI,QAAQ,SAAS,UAAU;AAAA,EACzC,CAAC;AAAA,EACD,SAAS;AAAA,IACP,MAAM;AAAA,IACN,UAAU;AAAA,MACR,YAAY;AAAA,IACd;AAAA,EACF;AAAA,EACA,KAAK,CAAC,CAAC,0BAA0B,MAAM,CAAC;AAC1C;AAMO,IAAM,kBAAyC;AAAA,EACpD,QAAI,sBAAS,eAAe;AAAA,IAC1B,WAAW;AAAA,IACX,MAAM,EAAE,IAAI,QAAQ,SAAS,UAAU;AAAA,EACzC,CAAC;AAAA,EACD,SAAS,EAAE,QAAQ,KAAK;AAAA,EACxB,KAAK,CAAC;AACR;","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 siteId: z\n .string()\n .min(1)\n .describe(\n 'Customer.io Site ID. Find it in Settings > Workspace Settings > API Credentials.',\n ),\n apiKey: z\n .string()\n .min(1)\n .describe(\n 'Customer.io API Key. Find it in Settings > Workspace Settings > API Credentials.',\n ),\n appApiKey: z\n .string()\n .describe(\n 'App API Key for transactional messaging (sendEmail/sendPush). Find it in Settings > Workspace Settings > API Credentials > App API Keys.',\n )\n .optional(),\n region: z\n .enum(['us', 'eu'])\n .describe(\n 'Data center region. Must match where your Customer.io workspace was created. Default: us.',\n )\n .optional(),\n timeout: z\n .number()\n .int()\n .positive()\n .describe('HTTP request timeout in milliseconds. Default: 10000.')\n .optional(),\n customerId: z\n .string()\n .describe(\n 'walkerOS mapping value path to resolve customerId from each event (like user.id).',\n )\n .optional(),\n anonymousId: z\n .string()\n .describe(\n 'walkerOS mapping value path to resolve anonymousId from each event (like user.session).',\n )\n .optional(),\n identify: z\n .unknown()\n .describe(\n 'Destination-level identity mapping. Resolves to { email?, first_name?, ... } attributes. Fires identify() on first push and re-fires when values change.',\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 identify attributes. Resolves to { email?, first_name?, ... }. Use with skip: true on login/identify events.',\n )\n .optional(),\n page: z\n .unknown()\n .describe(\n 'Per-event page view. Resolves to { url, ... }. Calls trackPageView(). Use with skip: true.',\n )\n .optional(),\n destroy: z\n .boolean()\n .describe(\n 'Permanently delete person from Customer.io. Set true on delete events with skip: true.',\n )\n .optional(),\n suppress: z\n .boolean()\n .describe(\n 'Suppress person (stop messaging without deleting data). Set true with skip: true.',\n )\n .optional(),\n unsuppress: z\n .boolean()\n .describe('Unsuppress person (resume messaging). Set true with skip: true.')\n .optional(),\n addDevice: z\n .unknown()\n .describe(\n 'Register push device. Resolves to { deviceId, platform, data? }. Use with skip: true.',\n )\n .optional(),\n deleteDevice: z\n .unknown()\n .describe(\n 'Remove push device. Resolves to { deviceId, platform }. Use with skip: true.',\n )\n .optional(),\n merge: z\n .unknown()\n .describe(\n 'Merge duplicate profiles. Resolves to { primaryType, primaryId, secondaryType, secondaryId }. Use with skip: true.',\n )\n .optional(),\n sendEmail: z\n .unknown()\n .describe(\n 'Send transactional email. Resolves to { to, transactional_message_id, message_data?, identifiers? }. Requires appApiKey. Use with skip: true.',\n )\n .optional(),\n sendPush: z\n .unknown()\n .describe(\n 'Send transactional push. Resolves to { transactional_message_id, message_data?, identifiers? }. Requires appApiKey. Use with skip: true.',\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 CustomerIoTrackClientMock,\n CustomerIoApiClientMock,\n} from '../types';\n\ntype TrackNoArg = () => Promise<void>;\ntype TrackOne = (_id: string | number) => Promise<void>;\ntype TrackIdentify = (\n _id: string | number,\n _attrs: Record<string, unknown>,\n) => Promise<void>;\ntype TrackEvent = (\n _id: string | number,\n _event: {\n name: string;\n data?: Record<string, unknown>;\n timestamp?: number;\n },\n) => Promise<void>;\ntype TrackAnonymous = (\n _id: string,\n _event: {\n name: string;\n data?: Record<string, unknown>;\n timestamp?: number;\n },\n) => Promise<void>;\ntype TrackPage = (\n _id: string | number,\n _url: string,\n _data?: Record<string, unknown>,\n) => Promise<void>;\ntype TrackAddDevice = (\n _id: string | number,\n _deviceId: string,\n _platform: string,\n _data?: Record<string, unknown>,\n) => Promise<void>;\ntype TrackDeleteDevice = (\n _id: string | number,\n _deviceId: string,\n _platform: string,\n) => Promise<void>;\ntype TrackMerge = (\n _pt: string,\n _pi: string,\n _st: string,\n _si: string,\n) => Promise<void>;\ntype ApiSend = (_request: unknown) => Promise<void>;\n\nconst asyncIdentify: TrackIdentify = () => Promise.resolve();\nconst asyncEvent: TrackEvent = () => Promise.resolve();\nconst asyncAnonymous: TrackAnonymous = () => Promise.resolve();\nconst asyncPage: TrackPage = () => Promise.resolve();\nconst asyncOne: TrackOne = () => Promise.resolve();\nconst asyncAddDevice: TrackAddDevice = () => Promise.resolve();\nconst asyncDeleteDevice: TrackDeleteDevice = () => Promise.resolve();\nconst asyncMerge: TrackMerge = () => Promise.resolve();\nconst asyncSend: ApiSend = () => Promise.resolve();\n\n// Suppress unused warning for narrow helper aliases used below.\nvoid (null as unknown as TrackNoArg);\n\nfunction createMockTrackClient(): CustomerIoTrackClientMock {\n return {\n identify: asyncIdentify,\n track: asyncEvent,\n trackAnonymous: asyncAnonymous,\n trackPageView: asyncPage,\n destroy: asyncOne,\n suppress: asyncOne,\n unsuppress: asyncOne,\n addDevice: asyncAddDevice,\n deleteDevice: asyncDeleteDevice,\n mergeCustomers: asyncMerge,\n };\n}\n\nfunction createMockApiClient(): CustomerIoApiClientMock {\n return {\n sendEmail: asyncSend,\n sendPush: asyncSend,\n };\n}\n\nexport const push: Env = {\n trackClient: createMockTrackClient(),\n apiClient: createMockApiClient(),\n};\n\nexport const simulation = [\n 'call:trackClient.identify',\n 'call:trackClient.track',\n 'call:trackClient.trackAnonymous',\n 'call:trackClient.trackPageView',\n 'call:trackClient.destroy',\n 'call:trackClient.suppress',\n 'call:trackClient.unsuppress',\n 'call:trackClient.addDevice',\n 'call:trackClient.deleteDevice',\n 'call:trackClient.mergeCustomers',\n 'call:apiClient.sendEmail',\n 'call:apiClient.sendPush',\n];\n","import type { Flow } 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 CustomerIoStepExample = Flow.StepExample & {\n settings?: Partial<Settings>;\n};\n\n/**\n * Default event forwarding -- trackClient.track() with event name and data.\n * customerId resolved from default settings.customerId = 'user.id'.\n */\nexport const defaultTrack: CustomerIoStepExample = {\n title: 'Default track',\n description:\n 'A walkerOS event is forwarded to Customer.io as a track call keyed by the user id.',\n in: getEvent('product view', {\n timestamp: 1700000100,\n user: { id: 'us3r', session: 's3ss10n' },\n }),\n out: [\n [\n 'trackClient.track',\n 'us3r',\n {\n name: 'product view',\n data: {},\n timestamp: 1700000,\n },\n ],\n ],\n};\n\n/**\n * Mapped event name -- mapping.name renames the event for Customer.io.\n */\nexport const mappedEventName: CustomerIoStepExample = {\n title: 'Rename event',\n description:\n 'A mapping rule renames the walker event to a Customer.io-specific event name such as purchase.',\n in: getEvent('order complete', {\n timestamp: 1700000101,\n user: { id: 'us3r', session: 's3ss10n' },\n }),\n mapping: {\n name: 'purchase',\n },\n out: [\n [\n 'trackClient.track',\n 'us3r',\n {\n name: 'purchase',\n data: {},\n timestamp: 1700000,\n },\n ],\n ],\n};\n\n/**\n * Track with mapped data properties.\n */\nexport const mappedData: CustomerIoStepExample = {\n title: 'Mapped properties',\n description:\n 'A data mapping transforms the event payload into Customer.io track properties for an order.',\n in: getEvent('order complete', {\n timestamp: 1700000102,\n user: { id: 'us3r', session: 's3ss10n' },\n data: { id: '0rd3r1d', total: 555, currency: 'EUR' },\n }),\n mapping: {\n name: 'purchase',\n data: {\n map: {\n order_id: 'data.id',\n value: 'data.total',\n currency: 'data.currency',\n },\n },\n },\n out: [\n [\n 'trackClient.track',\n 'us3r',\n {\n name: 'purchase',\n data: { order_id: '0rd3r1d', value: 555, currency: 'EUR' },\n timestamp: 1700000,\n },\n ],\n ],\n};\n\n/**\n * Anonymous event -- no customerId resolved, falls back to trackAnonymous().\n */\nexport const anonymousTrack: CustomerIoStepExample = {\n title: 'Anonymous track',\n description:\n 'When no customer id is resolved the event is sent via trackAnonymous keyed by the session id.',\n in: getEvent('product view', {\n timestamp: 1700000103,\n user: { session: 's3ss10n' },\n }),\n settings: {\n customerId: undefined,\n },\n out: [\n [\n 'trackClient.trackAnonymous',\n 's3ss10n',\n {\n name: 'product view',\n data: {},\n timestamp: 1700000,\n },\n ],\n ],\n};\n\n/**\n * Destination-level identify -- fires trackClient.identify() on first push\n * when settings.identify mapping resolves. Then fires trackClient.track().\n */\nexport const destinationIdentify: CustomerIoStepExample = {\n title: 'Destination identify',\n description:\n 'Destination-level identify fires a Customer.io identify call once on the first push, before the track, attaching user attributes.',\n in: getEvent('page view', {\n timestamp: 1700000104,\n user: { id: 'us3r', session: 's3ss10n', email: 'user@example.com' },\n }),\n settings: {\n identify: {\n map: {\n email: 'user.email',\n },\n },\n },\n out: [\n ['trackClient.identify', 'us3r', { email: 'user@example.com' }],\n [\n 'trackClient.track',\n 'us3r',\n {\n name: 'page view',\n data: {},\n timestamp: 1700000,\n },\n ],\n ],\n};\n\n/**\n * Per-event identify with skip -- user login fires identify() only.\n */\nexport const userLoginIdentify: CustomerIoStepExample = {\n title: 'User login identify',\n description:\n 'A user login triggers only a Customer.io identify call with profile attributes, skipping the track.',\n in: getEvent('user login', {\n timestamp: 1700000105,\n user: { id: 'us3r', session: 's3ss10n' },\n data: {\n email: 'user@acme.com',\n first_name: 'Jane',\n plan: 'premium',\n },\n }),\n mapping: {\n skip: true,\n settings: {\n identify: {\n map: {\n email: 'data.email',\n first_name: 'data.first_name',\n plan: 'data.plan',\n },\n },\n },\n },\n out: [\n [\n 'trackClient.identify',\n 'us3r',\n { email: 'user@acme.com', first_name: 'Jane', plan: 'premium' },\n ],\n ],\n};\n\n/**\n * Page view -- fires trackClient.trackPageView() with url.\n * skip: true suppresses track(); settings.page fires trackPageView().\n */\nexport const pageView: CustomerIoStepExample = {\n title: 'Page view',\n description:\n 'A page view fires trackPageView with the URL and referrer instead of a generic track call.',\n in: getEvent('page view', {\n timestamp: 1700000106,\n user: { id: 'us3r', session: 's3ss10n' },\n data: {\n url: 'https://example.com/pricing',\n referrer: 'https://google.com',\n },\n }),\n mapping: {\n skip: true,\n settings: {\n page: {\n map: {\n url: 'data.url',\n referrer: 'data.referrer',\n },\n },\n },\n },\n out: [\n [\n 'trackClient.trackPageView',\n 'us3r',\n 'https://example.com/pricing',\n { referrer: 'https://google.com' },\n ],\n ],\n};\n\n/**\n * Destroy -- permanently deletes a person from Customer.io.\n */\nexport const destroyPerson: CustomerIoStepExample = {\n title: 'Destroy person',\n description:\n 'A user delete event permanently removes the person from Customer.io via trackClient.destroy.',\n in: getEvent('user delete', {\n timestamp: 1700000107,\n user: { id: 'us3r', session: 's3ss10n' },\n }),\n mapping: {\n skip: true,\n settings: {\n destroy: true,\n },\n },\n out: [['trackClient.destroy', 'us3r']],\n};\n\n/**\n * Suppress -- stops messaging without deleting data.\n */\nexport const suppressPerson: CustomerIoStepExample = {\n title: 'Suppress person',\n description:\n 'A user suppress event stops messaging for the person without deleting their profile data.',\n in: getEvent('user suppress', {\n timestamp: 1700000108,\n user: { id: 'us3r', session: 's3ss10n' },\n }),\n mapping: {\n skip: true,\n settings: {\n suppress: true,\n },\n },\n out: [['trackClient.suppress', 'us3r']],\n};\n\n/**\n * Unsuppress -- resumes messaging for a suppressed person.\n */\nexport const unsuppressPerson: CustomerIoStepExample = {\n title: 'Unsuppress person',\n description:\n 'A user unsuppress event resumes messaging for a previously suppressed Customer.io profile.',\n in: getEvent('user unsuppress', {\n timestamp: 1700000109,\n user: { id: 'us3r', session: 's3ss10n' },\n }),\n mapping: {\n skip: true,\n settings: {\n unsuppress: true,\n },\n },\n out: [['trackClient.unsuppress', 'us3r']],\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: CustomerIoStepExample = {\n public: false,\n in: getEvent('debug noise', {\n timestamp: 1700000110,\n user: { id: 'us3r', session: 's3ss10n' },\n }),\n mapping: { ignore: true },\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,s=(s,t)=>{for(var i in t)e(s,i,{get:t[i],enumerable:!0})},t={};s(t,{MappingSchema:()=>o,SettingsSchema:()=>a,mapping:()=>l,settings:()=>p});import{zodToSchema as i}from"@walkeros/core/dev";import{z as r}from"@walkeros/core/dev";var a=r.object({siteId:r.string().min(1).describe("Customer.io Site ID. Find it in Settings > Workspace Settings > API Credentials."),apiKey:r.string().min(1).describe("Customer.io API Key. Find it in Settings > Workspace Settings > API Credentials."),appApiKey:r.string().describe("App API Key for transactional messaging (sendEmail/sendPush). Find it in Settings > Workspace Settings > API Credentials > App API Keys.").optional(),region:r.enum(["us","eu"]).describe("Data center region. Must match where your Customer.io workspace was created. Default: us.").optional(),timeout:r.number().int().positive().describe("HTTP request timeout in milliseconds. Default: 10000.").optional(),customerId:r.string().describe("walkerOS mapping value path to resolve customerId from each event (like user.id).").optional(),anonymousId:r.string().describe("walkerOS mapping value path to resolve anonymousId from each event (like user.session).").optional(),identify:r.unknown().describe("Destination-level identity mapping. Resolves to { email?, first_name?, ... } attributes. Fires identify() on first push and re-fires when values change.").optional()});import{z as n}from"@walkeros/core/dev";var o=n.object({identify:n.unknown().describe("Per-event identify attributes. Resolves to { email?, first_name?, ... }. Use with skip: true on login/identify events.").optional(),page:n.unknown().describe("Per-event page view. Resolves to { url, ... }. Calls trackPageView(). Use with skip: true.").optional(),destroy:n.boolean().describe("Permanently delete person from Customer.io. Set true on delete events with skip: true.").optional(),suppress:n.boolean().describe("Suppress person (stop messaging without deleting data). Set true with skip: true.").optional(),unsuppress:n.boolean().describe("Unsuppress person (resume messaging). Set true with skip: true.").optional(),addDevice:n.unknown().describe("Register push device. Resolves to { deviceId, platform, data? }. Use with skip: true.").optional(),deleteDevice:n.unknown().describe("Remove push device. Resolves to { deviceId, platform }. Use with skip: true.").optional(),merge:n.unknown().describe("Merge duplicate profiles. Resolves to { primaryType, primaryId, secondaryType, secondaryId }. Use with skip: true.").optional(),sendEmail:n.unknown().describe("Send transactional email. Resolves to { to, transactional_message_id, message_data?, identifiers? }. Requires appApiKey. Use with skip: true.").optional(),sendPush:n.unknown().describe("Send transactional push. Resolves to { transactional_message_id, message_data?, identifiers? }. Requires appApiKey. Use with skip: true.").optional()}),p=i(a),l=i(o),u={};s(u,{env:()=>m,step:()=>v});var m={};s(m,{push:()=>g,simulation:()=>k});var d=()=>Promise.resolve(),c=()=>Promise.resolve();var g={trackClient:{identify:()=>Promise.resolve(),track:()=>Promise.resolve(),trackAnonymous:()=>Promise.resolve(),trackPageView:()=>Promise.resolve(),destroy:d,suppress:d,unsuppress:d,addDevice:()=>Promise.resolve(),deleteDevice:()=>Promise.resolve(),mergeCustomers:()=>Promise.resolve()},apiClient:{sendEmail:c,sendPush:c}},k=["call:trackClient.identify","call:trackClient.track","call:trackClient.trackAnonymous","call:trackClient.trackPageView","call:trackClient.destroy","call:trackClient.suppress","call:trackClient.unsuppress","call:trackClient.addDevice","call:trackClient.deleteDevice","call:trackClient.mergeCustomers","call:apiClient.sendEmail","call:apiClient.sendPush"],v={};s(v,{anonymousTrack:()=>C,defaultTrack:()=>
|
|
1
|
+
var e=Object.defineProperty,s=(s,t)=>{for(var i in t)e(s,i,{get:t[i],enumerable:!0})},t={};s(t,{MappingSchema:()=>o,SettingsSchema:()=>a,mapping:()=>l,settings:()=>p});import{zodToSchema as i}from"@walkeros/core/dev";import{z as r}from"@walkeros/core/dev";var a=r.object({siteId:r.string().min(1).describe("Customer.io Site ID. Find it in Settings > Workspace Settings > API Credentials."),apiKey:r.string().min(1).describe("Customer.io API Key. Find it in Settings > Workspace Settings > API Credentials."),appApiKey:r.string().describe("App API Key for transactional messaging (sendEmail/sendPush). Find it in Settings > Workspace Settings > API Credentials > App API Keys.").optional(),region:r.enum(["us","eu"]).describe("Data center region. Must match where your Customer.io workspace was created. Default: us.").optional(),timeout:r.number().int().positive().describe("HTTP request timeout in milliseconds. Default: 10000.").optional(),customerId:r.string().describe("walkerOS mapping value path to resolve customerId from each event (like user.id).").optional(),anonymousId:r.string().describe("walkerOS mapping value path to resolve anonymousId from each event (like user.session).").optional(),identify:r.unknown().describe("Destination-level identity mapping. Resolves to { email?, first_name?, ... } attributes. Fires identify() on first push and re-fires when values change.").optional()});import{z as n}from"@walkeros/core/dev";var o=n.object({identify:n.unknown().describe("Per-event identify attributes. Resolves to { email?, first_name?, ... }. Use with skip: true on login/identify events.").optional(),page:n.unknown().describe("Per-event page view. Resolves to { url, ... }. Calls trackPageView(). Use with skip: true.").optional(),destroy:n.boolean().describe("Permanently delete person from Customer.io. Set true on delete events with skip: true.").optional(),suppress:n.boolean().describe("Suppress person (stop messaging without deleting data). Set true with skip: true.").optional(),unsuppress:n.boolean().describe("Unsuppress person (resume messaging). Set true with skip: true.").optional(),addDevice:n.unknown().describe("Register push device. Resolves to { deviceId, platform, data? }. Use with skip: true.").optional(),deleteDevice:n.unknown().describe("Remove push device. Resolves to { deviceId, platform }. Use with skip: true.").optional(),merge:n.unknown().describe("Merge duplicate profiles. Resolves to { primaryType, primaryId, secondaryType, secondaryId }. Use with skip: true.").optional(),sendEmail:n.unknown().describe("Send transactional email. Resolves to { to, transactional_message_id, message_data?, identifiers? }. Requires appApiKey. Use with skip: true.").optional(),sendPush:n.unknown().describe("Send transactional push. Resolves to { transactional_message_id, message_data?, identifiers? }. Requires appApiKey. Use with skip: true.").optional()}),p=i(a),l=i(o),u={};s(u,{env:()=>m,step:()=>v});var m={};s(m,{push:()=>g,simulation:()=>k});var d=()=>Promise.resolve(),c=()=>Promise.resolve();var g={trackClient:{identify:()=>Promise.resolve(),track:()=>Promise.resolve(),trackAnonymous:()=>Promise.resolve(),trackPageView:()=>Promise.resolve(),destroy:d,suppress:d,unsuppress:d,addDevice:()=>Promise.resolve(),deleteDevice:()=>Promise.resolve(),mergeCustomers:()=>Promise.resolve()},apiClient:{sendEmail:c,sendPush:c}},k=["call:trackClient.identify","call:trackClient.track","call:trackClient.trackAnonymous","call:trackClient.trackPageView","call:trackClient.destroy","call:trackClient.suppress","call:trackClient.unsuppress","call:trackClient.addDevice","call:trackClient.deleteDevice","call:trackClient.mergeCustomers","call:apiClient.sendEmail","call:apiClient.sendPush"],v={};s(v,{anonymousTrack:()=>C,defaultTrack:()=>y,destinationIdentify:()=>b,destroyPerson:()=>I,mappedData:()=>w,mappedEventName:()=>h,pageView:()=>A,suppressPerson:()=>S,unsuppressPerson:()=>D,userLoginIdentify:()=>P,wildcardIgnored:()=>R});import{getEvent as f}from"@walkeros/core";var y={title:"Default track",description:"A walkerOS event is forwarded to Customer.io as a track call keyed by the user id.",in:f("product view",{timestamp:1700000100,user:{id:"us3r",session:"s3ss10n"}}),out:[["trackClient.track","us3r",{name:"product view",data:{},timestamp:17e5}]]},h={title:"Rename event",description:"A mapping rule renames the walker event to a Customer.io-specific event name such as purchase.",in:f("order complete",{timestamp:1700000101,user:{id:"us3r",session:"s3ss10n"}}),mapping:{name:"purchase"},out:[["trackClient.track","us3r",{name:"purchase",data:{},timestamp:17e5}]]},w={title:"Mapped properties",description:"A data mapping transforms the event payload into Customer.io track properties for an order.",in:f("order complete",{timestamp:1700000102,user:{id:"us3r",session:"s3ss10n"},data:{id:"0rd3r1d",total:555,currency:"EUR"}}),mapping:{name:"purchase",data:{map:{order_id:"data.id",value:"data.total",currency:"data.currency"}}},out:[["trackClient.track","us3r",{name:"purchase",data:{order_id:"0rd3r1d",value:555,currency:"EUR"},timestamp:17e5}]]},C={title:"Anonymous track",description:"When no customer id is resolved the event is sent via trackAnonymous keyed by the session id.",in:f("product view",{timestamp:1700000103,user:{session:"s3ss10n"}}),settings:{customerId:void 0},out:[["trackClient.trackAnonymous","s3ss10n",{name:"product view",data:{},timestamp:17e5}]]},b={title:"Destination identify",description:"Destination-level identify fires a Customer.io identify call once on the first push, before the track, attaching user attributes.",in:f("page view",{timestamp:1700000104,user:{id:"us3r",session:"s3ss10n",email:"user@example.com"}}),settings:{identify:{map:{email:"user.email"}}},out:[["trackClient.identify","us3r",{email:"user@example.com"}],["trackClient.track","us3r",{name:"page view",data:{},timestamp:17e5}]]},P={title:"User login identify",description:"A user login triggers only a Customer.io identify call with profile attributes, skipping the track.",in:f("user login",{timestamp:1700000105,user:{id:"us3r",session:"s3ss10n"},data:{email:"user@acme.com",first_name:"Jane",plan:"premium"}}),mapping:{skip:!0,settings:{identify:{map:{email:"data.email",first_name:"data.first_name",plan:"data.plan"}}}},out:[["trackClient.identify","us3r",{email:"user@acme.com",first_name:"Jane",plan:"premium"}]]},A={title:"Page view",description:"A page view fires trackPageView with the URL and referrer instead of a generic track call.",in:f("page view",{timestamp:1700000106,user:{id:"us3r",session:"s3ss10n"},data:{url:"https://example.com/pricing",referrer:"https://google.com"}}),mapping:{skip:!0,settings:{page:{map:{url:"data.url",referrer:"data.referrer"}}}},out:[["trackClient.trackPageView","us3r","https://example.com/pricing",{referrer:"https://google.com"}]]},I={title:"Destroy person",description:"A user delete event permanently removes the person from Customer.io via trackClient.destroy.",in:f("user delete",{timestamp:1700000107,user:{id:"us3r",session:"s3ss10n"}}),mapping:{skip:!0,settings:{destroy:!0}},out:[["trackClient.destroy","us3r"]]},S={title:"Suppress person",description:"A user suppress event stops messaging for the person without deleting their profile data.",in:f("user suppress",{timestamp:1700000108,user:{id:"us3r",session:"s3ss10n"}}),mapping:{skip:!0,settings:{suppress:!0}},out:[["trackClient.suppress","us3r"]]},D={title:"Unsuppress person",description:"A user unsuppress event resumes messaging for a previously suppressed Customer.io profile.",in:f("user unsuppress",{timestamp:1700000109,user:{id:"us3r",session:"s3ss10n"}}),mapping:{skip:!0,settings:{unsuppress:!0}},out:[["trackClient.unsuppress","us3r"]]},R={public:!1,in:f("debug noise",{timestamp:1700000110,user:{id:"us3r",session:"s3ss10n"}}),mapping:{ignore:!0},out:[]};export{u as examples,t 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 siteId: z\n .string()\n .min(1)\n .describe(\n 'Customer.io Site ID. Find it in Settings > Workspace Settings > API Credentials.',\n ),\n apiKey: z\n .string()\n .min(1)\n .describe(\n 'Customer.io API Key. Find it in Settings > Workspace Settings > API Credentials.',\n ),\n appApiKey: z\n .string()\n .describe(\n 'App API Key for transactional messaging (sendEmail/sendPush). Find it in Settings > Workspace Settings > API Credentials > App API Keys.',\n )\n .optional(),\n region: z\n .enum(['us', 'eu'])\n .describe(\n 'Data center region. Must match where your Customer.io workspace was created. Default: us.',\n )\n .optional(),\n timeout: z\n .number()\n .int()\n .positive()\n .describe('HTTP request timeout in milliseconds. Default: 10000.')\n .optional(),\n customerId: z\n .string()\n .describe(\n 'walkerOS mapping value path to resolve customerId from each event (like user.id).',\n )\n .optional(),\n anonymousId: z\n .string()\n .describe(\n 'walkerOS mapping value path to resolve anonymousId from each event (like user.session).',\n )\n .optional(),\n identify: z\n .unknown()\n .describe(\n 'Destination-level identity mapping. Resolves to { email?, first_name?, ... } attributes. Fires identify() on first push and re-fires when values change.',\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 identify attributes. Resolves to { email?, first_name?, ... }. Use with skip: true on login/identify events.',\n )\n .optional(),\n page: z\n .unknown()\n .describe(\n 'Per-event page view. Resolves to { url, ... }. Calls trackPageView(). Use with skip: true.',\n )\n .optional(),\n destroy: z\n .boolean()\n .describe(\n 'Permanently delete person from Customer.io. Set true on delete events with skip: true.',\n )\n .optional(),\n suppress: z\n .boolean()\n .describe(\n 'Suppress person (stop messaging without deleting data). Set true with skip: true.',\n )\n .optional(),\n unsuppress: z\n .boolean()\n .describe('Unsuppress person (resume messaging). Set true with skip: true.')\n .optional(),\n addDevice: z\n .unknown()\n .describe(\n 'Register push device. Resolves to { deviceId, platform, data? }. Use with skip: true.',\n )\n .optional(),\n deleteDevice: z\n .unknown()\n .describe(\n 'Remove push device. Resolves to { deviceId, platform }. Use with skip: true.',\n )\n .optional(),\n merge: z\n .unknown()\n .describe(\n 'Merge duplicate profiles. Resolves to { primaryType, primaryId, secondaryType, secondaryId }. Use with skip: true.',\n )\n .optional(),\n sendEmail: z\n .unknown()\n .describe(\n 'Send transactional email. Resolves to { to, transactional_message_id, message_data?, identifiers? }. Requires appApiKey. Use with skip: true.',\n )\n .optional(),\n sendPush: z\n .unknown()\n .describe(\n 'Send transactional push. Resolves to { transactional_message_id, message_data?, identifiers? }. Requires appApiKey. Use with skip: true.',\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 CustomerIoTrackClientMock,\n CustomerIoApiClientMock,\n} from '../types';\n\ntype TrackNoArg = () => Promise<void>;\ntype TrackOne = (_id: string | number) => Promise<void>;\ntype TrackIdentify = (\n _id: string | number,\n _attrs: Record<string, unknown>,\n) => Promise<void>;\ntype TrackEvent = (\n _id: string | number,\n _event: {\n name: string;\n data?: Record<string, unknown>;\n timestamp?: number;\n },\n) => Promise<void>;\ntype TrackAnonymous = (\n _id: string,\n _event: {\n name: string;\n data?: Record<string, unknown>;\n timestamp?: number;\n },\n) => Promise<void>;\ntype TrackPage = (\n _id: string | number,\n _url: string,\n _data?: Record<string, unknown>,\n) => Promise<void>;\ntype TrackAddDevice = (\n _id: string | number,\n _deviceId: string,\n _platform: string,\n _data?: Record<string, unknown>,\n) => Promise<void>;\ntype TrackDeleteDevice = (\n _id: string | number,\n _deviceId: string,\n _platform: string,\n) => Promise<void>;\ntype TrackMerge = (\n _pt: string,\n _pi: string,\n _st: string,\n _si: string,\n) => Promise<void>;\ntype ApiSend = (_request: unknown) => Promise<void>;\n\nconst asyncIdentify: TrackIdentify = () => Promise.resolve();\nconst asyncEvent: TrackEvent = () => Promise.resolve();\nconst asyncAnonymous: TrackAnonymous = () => Promise.resolve();\nconst asyncPage: TrackPage = () => Promise.resolve();\nconst asyncOne: TrackOne = () => Promise.resolve();\nconst asyncAddDevice: TrackAddDevice = () => Promise.resolve();\nconst asyncDeleteDevice: TrackDeleteDevice = () => Promise.resolve();\nconst asyncMerge: TrackMerge = () => Promise.resolve();\nconst asyncSend: ApiSend = () => Promise.resolve();\n\n// Suppress unused warning for narrow helper aliases used below.\nvoid (null as unknown as TrackNoArg);\n\nfunction createMockTrackClient(): CustomerIoTrackClientMock {\n return {\n identify: asyncIdentify,\n track: asyncEvent,\n trackAnonymous: asyncAnonymous,\n trackPageView: asyncPage,\n destroy: asyncOne,\n suppress: asyncOne,\n unsuppress: asyncOne,\n addDevice: asyncAddDevice,\n deleteDevice: asyncDeleteDevice,\n mergeCustomers: asyncMerge,\n };\n}\n\nfunction createMockApiClient(): CustomerIoApiClientMock {\n return {\n sendEmail: asyncSend,\n sendPush: asyncSend,\n };\n}\n\nexport const push: Env = {\n trackClient: createMockTrackClient(),\n apiClient: createMockApiClient(),\n};\n\nexport const simulation = [\n 'call:trackClient.identify',\n 'call:trackClient.track',\n 'call:trackClient.trackAnonymous',\n 'call:trackClient.trackPageView',\n 'call:trackClient.destroy',\n 'call:trackClient.suppress',\n 'call:trackClient.unsuppress',\n 'call:trackClient.addDevice',\n 'call:trackClient.deleteDevice',\n 'call:trackClient.mergeCustomers',\n 'call:apiClient.sendEmail',\n 'call:apiClient.sendPush',\n];\n","import type { Flow } 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 CustomerIoStepExample = Flow.StepExample & {\n settings?: Partial<Settings>;\n};\n\n/**\n * Default event forwarding -- trackClient.track() with event name and data.\n * customerId resolved from default settings.customerId = 'user.id'.\n */\nexport const defaultTrack: CustomerIoStepExample = {\n in: getEvent('product view', {\n timestamp: 1700000100,\n user: { id: 'us3r', session: 's3ss10n' },\n }),\n out: [\n [\n 'trackClient.track',\n 'us3r',\n {\n name: 'product view',\n data: {},\n timestamp: 1700000,\n },\n ],\n ],\n};\n\n/**\n * Mapped event name -- mapping.name renames the event for Customer.io.\n */\nexport const mappedEventName: CustomerIoStepExample = {\n in: getEvent('order complete', {\n timestamp: 1700000101,\n user: { id: 'us3r', session: 's3ss10n' },\n }),\n mapping: {\n name: 'purchase',\n },\n out: [\n [\n 'trackClient.track',\n 'us3r',\n {\n name: 'purchase',\n data: {},\n timestamp: 1700000,\n },\n ],\n ],\n};\n\n/**\n * Track with mapped data properties.\n */\nexport const mappedData: CustomerIoStepExample = {\n in: getEvent('order complete', {\n timestamp: 1700000102,\n user: { id: 'us3r', session: 's3ss10n' },\n data: { id: '0rd3r1d', total: 555, currency: 'EUR' },\n }),\n mapping: {\n name: 'purchase',\n data: {\n map: {\n order_id: 'data.id',\n value: 'data.total',\n currency: 'data.currency',\n },\n },\n },\n out: [\n [\n 'trackClient.track',\n 'us3r',\n {\n name: 'purchase',\n data: { order_id: '0rd3r1d', value: 555, currency: 'EUR' },\n timestamp: 1700000,\n },\n ],\n ],\n};\n\n/**\n * Anonymous event -- no customerId resolved, falls back to trackAnonymous().\n */\nexport const anonymousTrack: CustomerIoStepExample = {\n in: getEvent('product view', {\n timestamp: 1700000103,\n user: { session: 's3ss10n' },\n }),\n settings: {\n customerId: undefined,\n },\n out: [\n [\n 'trackClient.trackAnonymous',\n 's3ss10n',\n {\n name: 'product view',\n data: {},\n timestamp: 1700000,\n },\n ],\n ],\n};\n\n/**\n * Destination-level identify -- fires trackClient.identify() on first push\n * when settings.identify mapping resolves. Then fires trackClient.track().\n */\nexport const destinationIdentify: CustomerIoStepExample = {\n in: getEvent('page view', {\n timestamp: 1700000104,\n user: { id: 'us3r', session: 's3ss10n', email: 'user@example.com' },\n }),\n settings: {\n identify: {\n map: {\n email: 'user.email',\n },\n },\n },\n out: [\n ['trackClient.identify', 'us3r', { email: 'user@example.com' }],\n [\n 'trackClient.track',\n 'us3r',\n {\n name: 'page view',\n data: {},\n timestamp: 1700000,\n },\n ],\n ],\n};\n\n/**\n * Per-event identify with skip -- user login fires identify() only.\n */\nexport const userLoginIdentify: CustomerIoStepExample = {\n in: getEvent('user login', {\n timestamp: 1700000105,\n user: { id: 'us3r', session: 's3ss10n' },\n data: {\n email: 'user@acme.com',\n first_name: 'Jane',\n plan: 'premium',\n },\n }),\n mapping: {\n skip: true,\n settings: {\n identify: {\n map: {\n email: 'data.email',\n first_name: 'data.first_name',\n plan: 'data.plan',\n },\n },\n },\n },\n out: [\n [\n 'trackClient.identify',\n 'us3r',\n { email: 'user@acme.com', first_name: 'Jane', plan: 'premium' },\n ],\n ],\n};\n\n/**\n * Page view -- fires trackClient.trackPageView() with url.\n * skip: true suppresses track(); settings.page fires trackPageView().\n */\nexport const pageView: CustomerIoStepExample = {\n in: getEvent('page view', {\n timestamp: 1700000106,\n user: { id: 'us3r', session: 's3ss10n' },\n data: {\n url: 'https://example.com/pricing',\n referrer: 'https://google.com',\n },\n }),\n mapping: {\n skip: true,\n settings: {\n page: {\n map: {\n url: 'data.url',\n referrer: 'data.referrer',\n },\n },\n },\n },\n out: [\n [\n 'trackClient.trackPageView',\n 'us3r',\n 'https://example.com/pricing',\n { referrer: 'https://google.com' },\n ],\n ],\n};\n\n/**\n * Destroy -- permanently deletes a person from Customer.io.\n */\nexport const destroyPerson: CustomerIoStepExample = {\n in: getEvent('user delete', {\n timestamp: 1700000107,\n user: { id: 'us3r', session: 's3ss10n' },\n }),\n mapping: {\n skip: true,\n settings: {\n destroy: true,\n },\n },\n out: [['trackClient.destroy', 'us3r']],\n};\n\n/**\n * Suppress -- stops messaging without deleting data.\n */\nexport const suppressPerson: CustomerIoStepExample = {\n in: getEvent('user suppress', {\n timestamp: 1700000108,\n user: { id: 'us3r', session: 's3ss10n' },\n }),\n mapping: {\n skip: true,\n settings: {\n suppress: true,\n },\n },\n out: [['trackClient.suppress', 'us3r']],\n};\n\n/**\n * Unsuppress -- resumes messaging for a suppressed person.\n */\nexport const unsuppressPerson: CustomerIoStepExample = {\n in: getEvent('user unsuppress', {\n timestamp: 1700000109,\n user: { id: 'us3r', session: 's3ss10n' },\n }),\n mapping: {\n skip: true,\n settings: {\n unsuppress: true,\n },\n },\n out: [['trackClient.unsuppress', 'us3r']],\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: CustomerIoStepExample = {\n in: getEvent('debug noise', {\n timestamp: 1700000110,\n user: { id: 'us3r', session: 's3ss10n' },\n }),\n mapping: { ignore: true },\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 siteId: z\n .string()\n .min(1)\n .describe(\n 'Customer.io Site ID. Find it in Settings > Workspace Settings > API Credentials.',\n ),\n apiKey: z\n .string()\n .min(1)\n .describe(\n 'Customer.io API Key. Find it in Settings > Workspace Settings > API Credentials.',\n ),\n appApiKey: z\n .string()\n .describe(\n 'App API Key for transactional messaging (sendEmail/sendPush). Find it in Settings > Workspace Settings > API Credentials > App API Keys.',\n )\n .optional(),\n region: z\n .enum(['us', 'eu'])\n .describe(\n 'Data center region. Must match where your Customer.io workspace was created. Default: us.',\n )\n .optional(),\n timeout: z\n .number()\n .int()\n .positive()\n .describe('HTTP request timeout in milliseconds. Default: 10000.')\n .optional(),\n customerId: z\n .string()\n .describe(\n 'walkerOS mapping value path to resolve customerId from each event (like user.id).',\n )\n .optional(),\n anonymousId: z\n .string()\n .describe(\n 'walkerOS mapping value path to resolve anonymousId from each event (like user.session).',\n )\n .optional(),\n identify: z\n .unknown()\n .describe(\n 'Destination-level identity mapping. Resolves to { email?, first_name?, ... } attributes. Fires identify() on first push and re-fires when values change.',\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 identify attributes. Resolves to { email?, first_name?, ... }. Use with skip: true on login/identify events.',\n )\n .optional(),\n page: z\n .unknown()\n .describe(\n 'Per-event page view. Resolves to { url, ... }. Calls trackPageView(). Use with skip: true.',\n )\n .optional(),\n destroy: z\n .boolean()\n .describe(\n 'Permanently delete person from Customer.io. Set true on delete events with skip: true.',\n )\n .optional(),\n suppress: z\n .boolean()\n .describe(\n 'Suppress person (stop messaging without deleting data). Set true with skip: true.',\n )\n .optional(),\n unsuppress: z\n .boolean()\n .describe('Unsuppress person (resume messaging). Set true with skip: true.')\n .optional(),\n addDevice: z\n .unknown()\n .describe(\n 'Register push device. Resolves to { deviceId, platform, data? }. Use with skip: true.',\n )\n .optional(),\n deleteDevice: z\n .unknown()\n .describe(\n 'Remove push device. Resolves to { deviceId, platform }. Use with skip: true.',\n )\n .optional(),\n merge: z\n .unknown()\n .describe(\n 'Merge duplicate profiles. Resolves to { primaryType, primaryId, secondaryType, secondaryId }. Use with skip: true.',\n )\n .optional(),\n sendEmail: z\n .unknown()\n .describe(\n 'Send transactional email. Resolves to { to, transactional_message_id, message_data?, identifiers? }. Requires appApiKey. Use with skip: true.',\n )\n .optional(),\n sendPush: z\n .unknown()\n .describe(\n 'Send transactional push. Resolves to { transactional_message_id, message_data?, identifiers? }. Requires appApiKey. Use with skip: true.',\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 CustomerIoTrackClientMock,\n CustomerIoApiClientMock,\n} from '../types';\n\ntype TrackNoArg = () => Promise<void>;\ntype TrackOne = (_id: string | number) => Promise<void>;\ntype TrackIdentify = (\n _id: string | number,\n _attrs: Record<string, unknown>,\n) => Promise<void>;\ntype TrackEvent = (\n _id: string | number,\n _event: {\n name: string;\n data?: Record<string, unknown>;\n timestamp?: number;\n },\n) => Promise<void>;\ntype TrackAnonymous = (\n _id: string,\n _event: {\n name: string;\n data?: Record<string, unknown>;\n timestamp?: number;\n },\n) => Promise<void>;\ntype TrackPage = (\n _id: string | number,\n _url: string,\n _data?: Record<string, unknown>,\n) => Promise<void>;\ntype TrackAddDevice = (\n _id: string | number,\n _deviceId: string,\n _platform: string,\n _data?: Record<string, unknown>,\n) => Promise<void>;\ntype TrackDeleteDevice = (\n _id: string | number,\n _deviceId: string,\n _platform: string,\n) => Promise<void>;\ntype TrackMerge = (\n _pt: string,\n _pi: string,\n _st: string,\n _si: string,\n) => Promise<void>;\ntype ApiSend = (_request: unknown) => Promise<void>;\n\nconst asyncIdentify: TrackIdentify = () => Promise.resolve();\nconst asyncEvent: TrackEvent = () => Promise.resolve();\nconst asyncAnonymous: TrackAnonymous = () => Promise.resolve();\nconst asyncPage: TrackPage = () => Promise.resolve();\nconst asyncOne: TrackOne = () => Promise.resolve();\nconst asyncAddDevice: TrackAddDevice = () => Promise.resolve();\nconst asyncDeleteDevice: TrackDeleteDevice = () => Promise.resolve();\nconst asyncMerge: TrackMerge = () => Promise.resolve();\nconst asyncSend: ApiSend = () => Promise.resolve();\n\n// Suppress unused warning for narrow helper aliases used below.\nvoid (null as unknown as TrackNoArg);\n\nfunction createMockTrackClient(): CustomerIoTrackClientMock {\n return {\n identify: asyncIdentify,\n track: asyncEvent,\n trackAnonymous: asyncAnonymous,\n trackPageView: asyncPage,\n destroy: asyncOne,\n suppress: asyncOne,\n unsuppress: asyncOne,\n addDevice: asyncAddDevice,\n deleteDevice: asyncDeleteDevice,\n mergeCustomers: asyncMerge,\n };\n}\n\nfunction createMockApiClient(): CustomerIoApiClientMock {\n return {\n sendEmail: asyncSend,\n sendPush: asyncSend,\n };\n}\n\nexport const push: Env = {\n trackClient: createMockTrackClient(),\n apiClient: createMockApiClient(),\n};\n\nexport const simulation = [\n 'call:trackClient.identify',\n 'call:trackClient.track',\n 'call:trackClient.trackAnonymous',\n 'call:trackClient.trackPageView',\n 'call:trackClient.destroy',\n 'call:trackClient.suppress',\n 'call:trackClient.unsuppress',\n 'call:trackClient.addDevice',\n 'call:trackClient.deleteDevice',\n 'call:trackClient.mergeCustomers',\n 'call:apiClient.sendEmail',\n 'call:apiClient.sendPush',\n];\n","import type { Flow } 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 CustomerIoStepExample = Flow.StepExample & {\n settings?: Partial<Settings>;\n};\n\n/**\n * Default event forwarding -- trackClient.track() with event name and data.\n * customerId resolved from default settings.customerId = 'user.id'.\n */\nexport const defaultTrack: CustomerIoStepExample = {\n title: 'Default track',\n description:\n 'A walkerOS event is forwarded to Customer.io as a track call keyed by the user id.',\n in: getEvent('product view', {\n timestamp: 1700000100,\n user: { id: 'us3r', session: 's3ss10n' },\n }),\n out: [\n [\n 'trackClient.track',\n 'us3r',\n {\n name: 'product view',\n data: {},\n timestamp: 1700000,\n },\n ],\n ],\n};\n\n/**\n * Mapped event name -- mapping.name renames the event for Customer.io.\n */\nexport const mappedEventName: CustomerIoStepExample = {\n title: 'Rename event',\n description:\n 'A mapping rule renames the walker event to a Customer.io-specific event name such as purchase.',\n in: getEvent('order complete', {\n timestamp: 1700000101,\n user: { id: 'us3r', session: 's3ss10n' },\n }),\n mapping: {\n name: 'purchase',\n },\n out: [\n [\n 'trackClient.track',\n 'us3r',\n {\n name: 'purchase',\n data: {},\n timestamp: 1700000,\n },\n ],\n ],\n};\n\n/**\n * Track with mapped data properties.\n */\nexport const mappedData: CustomerIoStepExample = {\n title: 'Mapped properties',\n description:\n 'A data mapping transforms the event payload into Customer.io track properties for an order.',\n in: getEvent('order complete', {\n timestamp: 1700000102,\n user: { id: 'us3r', session: 's3ss10n' },\n data: { id: '0rd3r1d', total: 555, currency: 'EUR' },\n }),\n mapping: {\n name: 'purchase',\n data: {\n map: {\n order_id: 'data.id',\n value: 'data.total',\n currency: 'data.currency',\n },\n },\n },\n out: [\n [\n 'trackClient.track',\n 'us3r',\n {\n name: 'purchase',\n data: { order_id: '0rd3r1d', value: 555, currency: 'EUR' },\n timestamp: 1700000,\n },\n ],\n ],\n};\n\n/**\n * Anonymous event -- no customerId resolved, falls back to trackAnonymous().\n */\nexport const anonymousTrack: CustomerIoStepExample = {\n title: 'Anonymous track',\n description:\n 'When no customer id is resolved the event is sent via trackAnonymous keyed by the session id.',\n in: getEvent('product view', {\n timestamp: 1700000103,\n user: { session: 's3ss10n' },\n }),\n settings: {\n customerId: undefined,\n },\n out: [\n [\n 'trackClient.trackAnonymous',\n 's3ss10n',\n {\n name: 'product view',\n data: {},\n timestamp: 1700000,\n },\n ],\n ],\n};\n\n/**\n * Destination-level identify -- fires trackClient.identify() on first push\n * when settings.identify mapping resolves. Then fires trackClient.track().\n */\nexport const destinationIdentify: CustomerIoStepExample = {\n title: 'Destination identify',\n description:\n 'Destination-level identify fires a Customer.io identify call once on the first push, before the track, attaching user attributes.',\n in: getEvent('page view', {\n timestamp: 1700000104,\n user: { id: 'us3r', session: 's3ss10n', email: 'user@example.com' },\n }),\n settings: {\n identify: {\n map: {\n email: 'user.email',\n },\n },\n },\n out: [\n ['trackClient.identify', 'us3r', { email: 'user@example.com' }],\n [\n 'trackClient.track',\n 'us3r',\n {\n name: 'page view',\n data: {},\n timestamp: 1700000,\n },\n ],\n ],\n};\n\n/**\n * Per-event identify with skip -- user login fires identify() only.\n */\nexport const userLoginIdentify: CustomerIoStepExample = {\n title: 'User login identify',\n description:\n 'A user login triggers only a Customer.io identify call with profile attributes, skipping the track.',\n in: getEvent('user login', {\n timestamp: 1700000105,\n user: { id: 'us3r', session: 's3ss10n' },\n data: {\n email: 'user@acme.com',\n first_name: 'Jane',\n plan: 'premium',\n },\n }),\n mapping: {\n skip: true,\n settings: {\n identify: {\n map: {\n email: 'data.email',\n first_name: 'data.first_name',\n plan: 'data.plan',\n },\n },\n },\n },\n out: [\n [\n 'trackClient.identify',\n 'us3r',\n { email: 'user@acme.com', first_name: 'Jane', plan: 'premium' },\n ],\n ],\n};\n\n/**\n * Page view -- fires trackClient.trackPageView() with url.\n * skip: true suppresses track(); settings.page fires trackPageView().\n */\nexport const pageView: CustomerIoStepExample = {\n title: 'Page view',\n description:\n 'A page view fires trackPageView with the URL and referrer instead of a generic track call.',\n in: getEvent('page view', {\n timestamp: 1700000106,\n user: { id: 'us3r', session: 's3ss10n' },\n data: {\n url: 'https://example.com/pricing',\n referrer: 'https://google.com',\n },\n }),\n mapping: {\n skip: true,\n settings: {\n page: {\n map: {\n url: 'data.url',\n referrer: 'data.referrer',\n },\n },\n },\n },\n out: [\n [\n 'trackClient.trackPageView',\n 'us3r',\n 'https://example.com/pricing',\n { referrer: 'https://google.com' },\n ],\n ],\n};\n\n/**\n * Destroy -- permanently deletes a person from Customer.io.\n */\nexport const destroyPerson: CustomerIoStepExample = {\n title: 'Destroy person',\n description:\n 'A user delete event permanently removes the person from Customer.io via trackClient.destroy.',\n in: getEvent('user delete', {\n timestamp: 1700000107,\n user: { id: 'us3r', session: 's3ss10n' },\n }),\n mapping: {\n skip: true,\n settings: {\n destroy: true,\n },\n },\n out: [['trackClient.destroy', 'us3r']],\n};\n\n/**\n * Suppress -- stops messaging without deleting data.\n */\nexport const suppressPerson: CustomerIoStepExample = {\n title: 'Suppress person',\n description:\n 'A user suppress event stops messaging for the person without deleting their profile data.',\n in: getEvent('user suppress', {\n timestamp: 1700000108,\n user: { id: 'us3r', session: 's3ss10n' },\n }),\n mapping: {\n skip: true,\n settings: {\n suppress: true,\n },\n },\n out: [['trackClient.suppress', 'us3r']],\n};\n\n/**\n * Unsuppress -- resumes messaging for a suppressed person.\n */\nexport const unsuppressPerson: CustomerIoStepExample = {\n title: 'Unsuppress person',\n description:\n 'A user unsuppress event resumes messaging for a previously suppressed Customer.io profile.',\n in: getEvent('user unsuppress', {\n timestamp: 1700000109,\n user: { id: 'us3r', session: 's3ss10n' },\n }),\n mapping: {\n skip: true,\n settings: {\n unsuppress: true,\n },\n },\n out: [['trackClient.unsuppress', 'us3r']],\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: CustomerIoStepExample = {\n public: false,\n in: getEvent('debug noise', {\n timestamp: 1700000110,\n user: { id: 'us3r', session: 's3ss10n' },\n }),\n mapping: { ignore: true },\n out: [],\n};\n"],"mappings":"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","names":["z"]}
|
package/dist/examples/index.js
CHANGED
|
@@ -96,6 +96,8 @@ __export(step_exports, {
|
|
|
96
96
|
});
|
|
97
97
|
var import_core = require("@walkeros/core");
|
|
98
98
|
var defaultTrack = {
|
|
99
|
+
title: "Default track",
|
|
100
|
+
description: "A walkerOS event is forwarded to Customer.io as a track call keyed by the user id.",
|
|
99
101
|
in: (0, import_core.getEvent)("product view", {
|
|
100
102
|
timestamp: 1700000100,
|
|
101
103
|
user: { id: "us3r", session: "s3ss10n" }
|
|
@@ -113,6 +115,8 @@ var defaultTrack = {
|
|
|
113
115
|
]
|
|
114
116
|
};
|
|
115
117
|
var mappedEventName = {
|
|
118
|
+
title: "Rename event",
|
|
119
|
+
description: "A mapping rule renames the walker event to a Customer.io-specific event name such as purchase.",
|
|
116
120
|
in: (0, import_core.getEvent)("order complete", {
|
|
117
121
|
timestamp: 1700000101,
|
|
118
122
|
user: { id: "us3r", session: "s3ss10n" }
|
|
@@ -133,6 +137,8 @@ var mappedEventName = {
|
|
|
133
137
|
]
|
|
134
138
|
};
|
|
135
139
|
var mappedData = {
|
|
140
|
+
title: "Mapped properties",
|
|
141
|
+
description: "A data mapping transforms the event payload into Customer.io track properties for an order.",
|
|
136
142
|
in: (0, import_core.getEvent)("order complete", {
|
|
137
143
|
timestamp: 1700000102,
|
|
138
144
|
user: { id: "us3r", session: "s3ss10n" },
|
|
@@ -161,6 +167,8 @@ var mappedData = {
|
|
|
161
167
|
]
|
|
162
168
|
};
|
|
163
169
|
var anonymousTrack = {
|
|
170
|
+
title: "Anonymous track",
|
|
171
|
+
description: "When no customer id is resolved the event is sent via trackAnonymous keyed by the session id.",
|
|
164
172
|
in: (0, import_core.getEvent)("product view", {
|
|
165
173
|
timestamp: 1700000103,
|
|
166
174
|
user: { session: "s3ss10n" }
|
|
@@ -181,6 +189,8 @@ var anonymousTrack = {
|
|
|
181
189
|
]
|
|
182
190
|
};
|
|
183
191
|
var destinationIdentify = {
|
|
192
|
+
title: "Destination identify",
|
|
193
|
+
description: "Destination-level identify fires a Customer.io identify call once on the first push, before the track, attaching user attributes.",
|
|
184
194
|
in: (0, import_core.getEvent)("page view", {
|
|
185
195
|
timestamp: 1700000104,
|
|
186
196
|
user: { id: "us3r", session: "s3ss10n", email: "user@example.com" }
|
|
@@ -206,6 +216,8 @@ var destinationIdentify = {
|
|
|
206
216
|
]
|
|
207
217
|
};
|
|
208
218
|
var userLoginIdentify = {
|
|
219
|
+
title: "User login identify",
|
|
220
|
+
description: "A user login triggers only a Customer.io identify call with profile attributes, skipping the track.",
|
|
209
221
|
in: (0, import_core.getEvent)("user login", {
|
|
210
222
|
timestamp: 1700000105,
|
|
211
223
|
user: { id: "us3r", session: "s3ss10n" },
|
|
@@ -236,6 +248,8 @@ var userLoginIdentify = {
|
|
|
236
248
|
]
|
|
237
249
|
};
|
|
238
250
|
var pageView = {
|
|
251
|
+
title: "Page view",
|
|
252
|
+
description: "A page view fires trackPageView with the URL and referrer instead of a generic track call.",
|
|
239
253
|
in: (0, import_core.getEvent)("page view", {
|
|
240
254
|
timestamp: 1700000106,
|
|
241
255
|
user: { id: "us3r", session: "s3ss10n" },
|
|
@@ -265,6 +279,8 @@ var pageView = {
|
|
|
265
279
|
]
|
|
266
280
|
};
|
|
267
281
|
var destroyPerson = {
|
|
282
|
+
title: "Destroy person",
|
|
283
|
+
description: "A user delete event permanently removes the person from Customer.io via trackClient.destroy.",
|
|
268
284
|
in: (0, import_core.getEvent)("user delete", {
|
|
269
285
|
timestamp: 1700000107,
|
|
270
286
|
user: { id: "us3r", session: "s3ss10n" }
|
|
@@ -278,6 +294,8 @@ var destroyPerson = {
|
|
|
278
294
|
out: [["trackClient.destroy", "us3r"]]
|
|
279
295
|
};
|
|
280
296
|
var suppressPerson = {
|
|
297
|
+
title: "Suppress person",
|
|
298
|
+
description: "A user suppress event stops messaging for the person without deleting their profile data.",
|
|
281
299
|
in: (0, import_core.getEvent)("user suppress", {
|
|
282
300
|
timestamp: 1700000108,
|
|
283
301
|
user: { id: "us3r", session: "s3ss10n" }
|
|
@@ -291,6 +309,8 @@ var suppressPerson = {
|
|
|
291
309
|
out: [["trackClient.suppress", "us3r"]]
|
|
292
310
|
};
|
|
293
311
|
var unsuppressPerson = {
|
|
312
|
+
title: "Unsuppress person",
|
|
313
|
+
description: "A user unsuppress event resumes messaging for a previously suppressed Customer.io profile.",
|
|
294
314
|
in: (0, import_core.getEvent)("user unsuppress", {
|
|
295
315
|
timestamp: 1700000109,
|
|
296
316
|
user: { id: "us3r", session: "s3ss10n" }
|
|
@@ -304,6 +324,7 @@ var unsuppressPerson = {
|
|
|
304
324
|
out: [["trackClient.unsuppress", "us3r"]]
|
|
305
325
|
};
|
|
306
326
|
var wildcardIgnored = {
|
|
327
|
+
public: false,
|
|
307
328
|
in: (0, import_core.getEvent)("debug noise", {
|
|
308
329
|
timestamp: 1700000110,
|
|
309
330
|
user: { id: "us3r", session: "s3ss10n" }
|
package/dist/examples/index.mjs
CHANGED
|
@@ -75,6 +75,8 @@ __export(step_exports, {
|
|
|
75
75
|
});
|
|
76
76
|
import { getEvent } from "@walkeros/core";
|
|
77
77
|
var defaultTrack = {
|
|
78
|
+
title: "Default track",
|
|
79
|
+
description: "A walkerOS event is forwarded to Customer.io as a track call keyed by the user id.",
|
|
78
80
|
in: getEvent("product view", {
|
|
79
81
|
timestamp: 1700000100,
|
|
80
82
|
user: { id: "us3r", session: "s3ss10n" }
|
|
@@ -92,6 +94,8 @@ var defaultTrack = {
|
|
|
92
94
|
]
|
|
93
95
|
};
|
|
94
96
|
var mappedEventName = {
|
|
97
|
+
title: "Rename event",
|
|
98
|
+
description: "A mapping rule renames the walker event to a Customer.io-specific event name such as purchase.",
|
|
95
99
|
in: getEvent("order complete", {
|
|
96
100
|
timestamp: 1700000101,
|
|
97
101
|
user: { id: "us3r", session: "s3ss10n" }
|
|
@@ -112,6 +116,8 @@ var mappedEventName = {
|
|
|
112
116
|
]
|
|
113
117
|
};
|
|
114
118
|
var mappedData = {
|
|
119
|
+
title: "Mapped properties",
|
|
120
|
+
description: "A data mapping transforms the event payload into Customer.io track properties for an order.",
|
|
115
121
|
in: getEvent("order complete", {
|
|
116
122
|
timestamp: 1700000102,
|
|
117
123
|
user: { id: "us3r", session: "s3ss10n" },
|
|
@@ -140,6 +146,8 @@ var mappedData = {
|
|
|
140
146
|
]
|
|
141
147
|
};
|
|
142
148
|
var anonymousTrack = {
|
|
149
|
+
title: "Anonymous track",
|
|
150
|
+
description: "When no customer id is resolved the event is sent via trackAnonymous keyed by the session id.",
|
|
143
151
|
in: getEvent("product view", {
|
|
144
152
|
timestamp: 1700000103,
|
|
145
153
|
user: { session: "s3ss10n" }
|
|
@@ -160,6 +168,8 @@ var anonymousTrack = {
|
|
|
160
168
|
]
|
|
161
169
|
};
|
|
162
170
|
var destinationIdentify = {
|
|
171
|
+
title: "Destination identify",
|
|
172
|
+
description: "Destination-level identify fires a Customer.io identify call once on the first push, before the track, attaching user attributes.",
|
|
163
173
|
in: getEvent("page view", {
|
|
164
174
|
timestamp: 1700000104,
|
|
165
175
|
user: { id: "us3r", session: "s3ss10n", email: "user@example.com" }
|
|
@@ -185,6 +195,8 @@ var destinationIdentify = {
|
|
|
185
195
|
]
|
|
186
196
|
};
|
|
187
197
|
var userLoginIdentify = {
|
|
198
|
+
title: "User login identify",
|
|
199
|
+
description: "A user login triggers only a Customer.io identify call with profile attributes, skipping the track.",
|
|
188
200
|
in: getEvent("user login", {
|
|
189
201
|
timestamp: 1700000105,
|
|
190
202
|
user: { id: "us3r", session: "s3ss10n" },
|
|
@@ -215,6 +227,8 @@ var userLoginIdentify = {
|
|
|
215
227
|
]
|
|
216
228
|
};
|
|
217
229
|
var pageView = {
|
|
230
|
+
title: "Page view",
|
|
231
|
+
description: "A page view fires trackPageView with the URL and referrer instead of a generic track call.",
|
|
218
232
|
in: getEvent("page view", {
|
|
219
233
|
timestamp: 1700000106,
|
|
220
234
|
user: { id: "us3r", session: "s3ss10n" },
|
|
@@ -244,6 +258,8 @@ var pageView = {
|
|
|
244
258
|
]
|
|
245
259
|
};
|
|
246
260
|
var destroyPerson = {
|
|
261
|
+
title: "Destroy person",
|
|
262
|
+
description: "A user delete event permanently removes the person from Customer.io via trackClient.destroy.",
|
|
247
263
|
in: getEvent("user delete", {
|
|
248
264
|
timestamp: 1700000107,
|
|
249
265
|
user: { id: "us3r", session: "s3ss10n" }
|
|
@@ -257,6 +273,8 @@ var destroyPerson = {
|
|
|
257
273
|
out: [["trackClient.destroy", "us3r"]]
|
|
258
274
|
};
|
|
259
275
|
var suppressPerson = {
|
|
276
|
+
title: "Suppress person",
|
|
277
|
+
description: "A user suppress event stops messaging for the person without deleting their profile data.",
|
|
260
278
|
in: getEvent("user suppress", {
|
|
261
279
|
timestamp: 1700000108,
|
|
262
280
|
user: { id: "us3r", session: "s3ss10n" }
|
|
@@ -270,6 +288,8 @@ var suppressPerson = {
|
|
|
270
288
|
out: [["trackClient.suppress", "us3r"]]
|
|
271
289
|
};
|
|
272
290
|
var unsuppressPerson = {
|
|
291
|
+
title: "Unsuppress person",
|
|
292
|
+
description: "A user unsuppress event resumes messaging for a previously suppressed Customer.io profile.",
|
|
273
293
|
in: getEvent("user unsuppress", {
|
|
274
294
|
timestamp: 1700000109,
|
|
275
295
|
user: { id: "us3r", session: "s3ss10n" }
|
|
@@ -283,6 +303,7 @@ var unsuppressPerson = {
|
|
|
283
303
|
out: [["trackClient.unsuppress", "us3r"]]
|
|
284
304
|
};
|
|
285
305
|
var wildcardIgnored = {
|
|
306
|
+
public: false,
|
|
286
307
|
in: getEvent("debug noise", {
|
|
287
308
|
timestamp: 1700000110,
|
|
288
309
|
user: { id: "us3r", session: "s3ss10n" }
|
package/dist/walkerOS.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$meta": {
|
|
3
3
|
"package": "@walkeros/server-destination-customerio",
|
|
4
|
-
"version": "3.4.
|
|
4
|
+
"version": "3.4.1-next-1776790594143",
|
|
5
5
|
"type": "destination",
|
|
6
6
|
"platform": [
|
|
7
7
|
"server"
|
|
@@ -162,6 +162,8 @@
|
|
|
162
162
|
},
|
|
163
163
|
"step": {
|
|
164
164
|
"anonymousTrack": {
|
|
165
|
+
"title": "Anonymous track",
|
|
166
|
+
"description": "When no customer id is resolved the event is sent via trackAnonymous keyed by the session id.",
|
|
165
167
|
"in": {
|
|
166
168
|
"name": "product view",
|
|
167
169
|
"data": {
|
|
@@ -199,7 +201,7 @@
|
|
|
199
201
|
"group": "gr0up",
|
|
200
202
|
"count": 1,
|
|
201
203
|
"version": {
|
|
202
|
-
"source": "3.4.
|
|
204
|
+
"source": "3.4.1-next-1776790594143",
|
|
203
205
|
"tagging": 1
|
|
204
206
|
},
|
|
205
207
|
"source": {
|
|
@@ -222,6 +224,8 @@
|
|
|
222
224
|
]
|
|
223
225
|
},
|
|
224
226
|
"defaultTrack": {
|
|
227
|
+
"title": "Default track",
|
|
228
|
+
"description": "A walkerOS event is forwarded to Customer.io as a track call keyed by the user id.",
|
|
225
229
|
"in": {
|
|
226
230
|
"name": "product view",
|
|
227
231
|
"data": {
|
|
@@ -260,7 +264,7 @@
|
|
|
260
264
|
"group": "gr0up",
|
|
261
265
|
"count": 1,
|
|
262
266
|
"version": {
|
|
263
|
-
"source": "3.4.
|
|
267
|
+
"source": "3.4.1-next-1776790594143",
|
|
264
268
|
"tagging": 1
|
|
265
269
|
},
|
|
266
270
|
"source": {
|
|
@@ -282,6 +286,8 @@
|
|
|
282
286
|
]
|
|
283
287
|
},
|
|
284
288
|
"destinationIdentify": {
|
|
289
|
+
"title": "Destination identify",
|
|
290
|
+
"description": "Destination-level identify fires a Customer.io identify call once on the first push, before the track, attaching user attributes.",
|
|
285
291
|
"in": {
|
|
286
292
|
"name": "page view",
|
|
287
293
|
"data": {
|
|
@@ -336,7 +342,7 @@
|
|
|
336
342
|
"group": "gr0up",
|
|
337
343
|
"count": 1,
|
|
338
344
|
"version": {
|
|
339
|
-
"source": "3.4.
|
|
345
|
+
"source": "3.4.1-next-1776790594143",
|
|
340
346
|
"tagging": 1
|
|
341
347
|
},
|
|
342
348
|
"source": {
|
|
@@ -372,6 +378,8 @@
|
|
|
372
378
|
]
|
|
373
379
|
},
|
|
374
380
|
"destroyPerson": {
|
|
381
|
+
"title": "Destroy person",
|
|
382
|
+
"description": "A user delete event permanently removes the person from Customer.io via trackClient.destroy.",
|
|
375
383
|
"in": {
|
|
376
384
|
"name": "user delete",
|
|
377
385
|
"data": {
|
|
@@ -427,7 +435,7 @@
|
|
|
427
435
|
"group": "gr0up",
|
|
428
436
|
"count": 1,
|
|
429
437
|
"version": {
|
|
430
|
-
"source": "3.4.
|
|
438
|
+
"source": "3.4.1-next-1776790594143",
|
|
431
439
|
"tagging": 1
|
|
432
440
|
},
|
|
433
441
|
"source": {
|
|
@@ -450,6 +458,8 @@
|
|
|
450
458
|
]
|
|
451
459
|
},
|
|
452
460
|
"mappedData": {
|
|
461
|
+
"title": "Mapped properties",
|
|
462
|
+
"description": "A data mapping transforms the event payload into Customer.io track properties for an order.",
|
|
453
463
|
"in": {
|
|
454
464
|
"name": "order complete",
|
|
455
465
|
"data": {
|
|
@@ -533,7 +543,7 @@
|
|
|
533
543
|
"group": "gr0up",
|
|
534
544
|
"count": 1,
|
|
535
545
|
"version": {
|
|
536
|
-
"source": "3.4.
|
|
546
|
+
"source": "3.4.1-next-1776790594143",
|
|
537
547
|
"tagging": 1
|
|
538
548
|
},
|
|
539
549
|
"source": {
|
|
@@ -569,6 +579,8 @@
|
|
|
569
579
|
]
|
|
570
580
|
},
|
|
571
581
|
"mappedEventName": {
|
|
582
|
+
"title": "Rename event",
|
|
583
|
+
"description": "A mapping rule renames the walker event to a Customer.io-specific event name such as purchase.",
|
|
572
584
|
"in": {
|
|
573
585
|
"name": "order complete",
|
|
574
586
|
"data": {
|
|
@@ -654,7 +666,7 @@
|
|
|
654
666
|
"group": "gr0up",
|
|
655
667
|
"count": 1,
|
|
656
668
|
"version": {
|
|
657
|
-
"source": "3.4.
|
|
669
|
+
"source": "3.4.1-next-1776790594143",
|
|
658
670
|
"tagging": 1
|
|
659
671
|
},
|
|
660
672
|
"source": {
|
|
@@ -679,6 +691,8 @@
|
|
|
679
691
|
]
|
|
680
692
|
},
|
|
681
693
|
"pageView": {
|
|
694
|
+
"title": "Page view",
|
|
695
|
+
"description": "A page view fires trackPageView with the URL and referrer instead of a generic track call.",
|
|
682
696
|
"in": {
|
|
683
697
|
"name": "page view",
|
|
684
698
|
"data": {
|
|
@@ -728,7 +742,7 @@
|
|
|
728
742
|
"group": "gr0up",
|
|
729
743
|
"count": 1,
|
|
730
744
|
"version": {
|
|
731
|
-
"source": "3.4.
|
|
745
|
+
"source": "3.4.1-next-1776790594143",
|
|
732
746
|
"tagging": 1
|
|
733
747
|
},
|
|
734
748
|
"source": {
|
|
@@ -760,6 +774,8 @@
|
|
|
760
774
|
]
|
|
761
775
|
},
|
|
762
776
|
"suppressPerson": {
|
|
777
|
+
"title": "Suppress person",
|
|
778
|
+
"description": "A user suppress event stops messaging for the person without deleting their profile data.",
|
|
763
779
|
"in": {
|
|
764
780
|
"name": "user suppress",
|
|
765
781
|
"data": {
|
|
@@ -815,7 +831,7 @@
|
|
|
815
831
|
"group": "gr0up",
|
|
816
832
|
"count": 1,
|
|
817
833
|
"version": {
|
|
818
|
-
"source": "3.4.
|
|
834
|
+
"source": "3.4.1-next-1776790594143",
|
|
819
835
|
"tagging": 1
|
|
820
836
|
},
|
|
821
837
|
"source": {
|
|
@@ -838,6 +854,8 @@
|
|
|
838
854
|
]
|
|
839
855
|
},
|
|
840
856
|
"unsuppressPerson": {
|
|
857
|
+
"title": "Unsuppress person",
|
|
858
|
+
"description": "A user unsuppress event resumes messaging for a previously suppressed Customer.io profile.",
|
|
841
859
|
"in": {
|
|
842
860
|
"name": "user unsuppress",
|
|
843
861
|
"data": {
|
|
@@ -893,7 +911,7 @@
|
|
|
893
911
|
"group": "gr0up",
|
|
894
912
|
"count": 1,
|
|
895
913
|
"version": {
|
|
896
|
-
"source": "3.4.
|
|
914
|
+
"source": "3.4.1-next-1776790594143",
|
|
897
915
|
"tagging": 1
|
|
898
916
|
},
|
|
899
917
|
"source": {
|
|
@@ -916,6 +934,8 @@
|
|
|
916
934
|
]
|
|
917
935
|
},
|
|
918
936
|
"userLoginIdentify": {
|
|
937
|
+
"title": "User login identify",
|
|
938
|
+
"description": "A user login triggers only a Customer.io identify call with profile attributes, skipping the track.",
|
|
919
939
|
"in": {
|
|
920
940
|
"name": "user login",
|
|
921
941
|
"data": {
|
|
@@ -966,7 +986,7 @@
|
|
|
966
986
|
"group": "gr0up",
|
|
967
987
|
"count": 1,
|
|
968
988
|
"version": {
|
|
969
|
-
"source": "3.4.
|
|
989
|
+
"source": "3.4.1-next-1776790594143",
|
|
970
990
|
"tagging": 1
|
|
971
991
|
},
|
|
972
992
|
"source": {
|
|
@@ -1000,6 +1020,7 @@
|
|
|
1000
1020
|
]
|
|
1001
1021
|
},
|
|
1002
1022
|
"wildcardIgnored": {
|
|
1023
|
+
"public": false,
|
|
1003
1024
|
"in": {
|
|
1004
1025
|
"name": "debug noise",
|
|
1005
1026
|
"data": {
|
|
@@ -1055,7 +1076,7 @@
|
|
|
1055
1076
|
"group": "gr0up",
|
|
1056
1077
|
"count": 1,
|
|
1057
1078
|
"version": {
|
|
1058
|
-
"source": "3.4.
|
|
1079
|
+
"source": "3.4.1-next-1776790594143",
|
|
1059
1080
|
"tagging": 1
|
|
1060
1081
|
},
|
|
1061
1082
|
"source": {
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@walkeros/server-destination-customerio",
|
|
3
3
|
"description": "Customer.io messaging automation server destination for walkerOS (customerio-node, Track + Transactional API)",
|
|
4
|
-
"version": "3.4.
|
|
4
|
+
"version": "3.4.1-next-1776790594143",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"exports": {
|
|
7
7
|
".": {
|
|
@@ -35,11 +35,11 @@
|
|
|
35
35
|
},
|
|
36
36
|
"dependencies": {
|
|
37
37
|
"customerio-node": "^4.2.0",
|
|
38
|
-
"@walkeros/core": "3.4.
|
|
39
|
-
"@walkeros/server-core": "3.4.
|
|
38
|
+
"@walkeros/core": "3.4.1-next-1776790594143",
|
|
39
|
+
"@walkeros/server-core": "3.4.1-next-1776790594143"
|
|
40
40
|
},
|
|
41
41
|
"devDependencies": {
|
|
42
|
-
"@walkeros/collector": "3.4.
|
|
42
|
+
"@walkeros/collector": "3.4.1-next-1776790594143"
|
|
43
43
|
},
|
|
44
44
|
"repository": {
|
|
45
45
|
"url": "git+https://github.com/elbwalker/walkerOS.git",
|