@walkeros/server-destination-customerio 3.4.2 → 4.0.0-next-1777882869103
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/README.md +12 -12
- package/dist/dev.d.mts +2 -2
- package/dist/dev.d.ts +2 -2
- package/dist/dev.js +1 -1
- package/dist/dev.js.map +1 -1
- package/dist/dev.mjs +1 -1
- package/dist/dev.mjs.map +1 -1
- package/dist/examples/index.d.mts +2 -2
- package/dist/examples/index.d.ts +2 -2
- package/dist/examples/index.js +5 -5
- package/dist/examples/index.mjs +5 -5
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/dist/walkerOS.json +49 -175
- package/package.json +4 -4
package/README.md
CHANGED
|
@@ -48,18 +48,18 @@ npm install @walkeros/server-destination-customerio
|
|
|
48
48
|
|
|
49
49
|
Per-event mapping settings control which Customer.io methods are called:
|
|
50
50
|
|
|
51
|
-
| Setting | Effect | Use with `
|
|
52
|
-
| -------------- | ---------------------------------------------- |
|
|
53
|
-
| `identify` | Calls `identify()` with attributes | Yes, for login events
|
|
54
|
-
| `page` | Calls `trackPageView()` with url | Yes, for page views
|
|
55
|
-
| `destroy` | Permanently deletes person | Yes
|
|
56
|
-
| `suppress` | Stops messaging (keeps data) | Yes
|
|
57
|
-
| `unsuppress` | Resumes messaging | Yes
|
|
58
|
-
| `addDevice` | Registers push device | Yes
|
|
59
|
-
| `deleteDevice` | Removes push device | Yes
|
|
60
|
-
| `merge` | Merges duplicate profiles | Yes
|
|
61
|
-
| `sendEmail` | Sends transactional email (requires appApiKey) | Yes
|
|
62
|
-
| `sendPush` | Sends transactional push (requires appApiKey) | Yes
|
|
51
|
+
| Setting | Effect | Use with `silent: true` |
|
|
52
|
+
| -------------- | ---------------------------------------------- | ----------------------- |
|
|
53
|
+
| `identify` | Calls `identify()` with attributes | Yes, for login events |
|
|
54
|
+
| `page` | Calls `trackPageView()` with url | Yes, for page views |
|
|
55
|
+
| `destroy` | Permanently deletes person | Yes |
|
|
56
|
+
| `suppress` | Stops messaging (keeps data) | Yes |
|
|
57
|
+
| `unsuppress` | Resumes messaging | Yes |
|
|
58
|
+
| `addDevice` | Registers push device | Yes |
|
|
59
|
+
| `deleteDevice` | Removes push device | Yes |
|
|
60
|
+
| `merge` | Merges duplicate profiles | Yes |
|
|
61
|
+
| `sendEmail` | Sends transactional email (requires appApiKey) | Yes |
|
|
62
|
+
| `sendPush` | Sends transactional push (requires appApiKey) | Yes |
|
|
63
63
|
|
|
64
64
|
## Identity
|
|
65
65
|
|
package/dist/dev.d.mts
CHANGED
|
@@ -154,12 +154,12 @@ declare const anonymousTrack: CustomerIoStepExample;
|
|
|
154
154
|
*/
|
|
155
155
|
declare const destinationIdentify: CustomerIoStepExample;
|
|
156
156
|
/**
|
|
157
|
-
* Per-event identify with
|
|
157
|
+
* Per-event identify with silent -- user login fires identify() only.
|
|
158
158
|
*/
|
|
159
159
|
declare const userLoginIdentify: CustomerIoStepExample;
|
|
160
160
|
/**
|
|
161
161
|
* Page view -- fires trackClient.trackPageView() with url.
|
|
162
|
-
*
|
|
162
|
+
* silent: true suppresses track(); settings.page fires trackPageView().
|
|
163
163
|
*/
|
|
164
164
|
declare const pageView: CustomerIoStepExample;
|
|
165
165
|
/**
|
package/dist/dev.d.ts
CHANGED
|
@@ -154,12 +154,12 @@ declare const anonymousTrack: CustomerIoStepExample;
|
|
|
154
154
|
*/
|
|
155
155
|
declare const destinationIdentify: CustomerIoStepExample;
|
|
156
156
|
/**
|
|
157
|
-
* Per-event identify with
|
|
157
|
+
* Per-event identify with silent -- user login fires identify() only.
|
|
158
158
|
*/
|
|
159
159
|
declare const userLoginIdentify: CustomerIoStepExample;
|
|
160
160
|
/**
|
|
161
161
|
* Page view -- fires trackClient.trackPageView() with url.
|
|
162
|
-
*
|
|
162
|
+
* silent: true suppresses track(); settings.page fires trackPageView().
|
|
163
163
|
*/
|
|
164
164
|
declare const pageView: CustomerIoStepExample;
|
|
165
165
|
/**
|
package/dist/dev.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var e,
|
|
1
|
+
"use strict";var e,t=Object.defineProperty,s=Object.getOwnPropertyDescriptor,i=Object.getOwnPropertyNames,r=Object.prototype.hasOwnProperty,n=(e,s)=>{for(var i in s)t(e,i,{get:s[i],enumerable:!0})},a={};n(a,{examples:()=>v,schemas:()=>o}),module.exports=(e=a,((e,n,a,o)=>{if(n&&"object"==typeof n||"function"==typeof n)for(let p of i(n))r.call(e,p)||p===a||t(e,p,{get:()=>n[p],enumerable:!(o=s(n,p))||o.enumerable});return e})(t({},"__esModule",{value:!0}),e));var o={};n(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 silent: true on login/identify events.").optional(),page:d.z.unknown().describe("Per-event page view. Resolves to { url, ... }. Calls trackPageView(). Use with silent: true.").optional(),destroy:d.z.boolean().describe("Permanently delete person from Customer.io. Set true on delete events with silent: true.").optional(),suppress:d.z.boolean().describe("Suppress person (stop messaging without deleting data). Set true with silent: true.").optional(),unsuppress:d.z.boolean().describe("Unsuppress person (resume messaging). Set true with silent: true.").optional(),addDevice:d.z.unknown().describe("Register push device. Resolves to { deviceId, platform, data? }. Use with silent: true.").optional(),deleteDevice:d.z.unknown().describe("Remove push device. Resolves to { deviceId, platform }. Use with silent: true.").optional(),merge:d.z.unknown().describe("Merge duplicate profiles. Resolves to { primaryType, primaryId, secondaryType, secondaryId }. Use with silent: true.").optional(),sendEmail:d.z.unknown().describe("Send transactional email. Resolves to { to, transactional_message_id, message_data?, identifiers? }. Requires appApiKey. Use with silent: true.").optional(),sendPush:d.z.unknown().describe("Send transactional push. Resolves to { transactional_message_id, message_data?, identifiers? }. Requires appApiKey. Use with silent: true.").optional()}),c=(0,p.zodToSchema)(u),g=(0,p.zodToSchema)(m),v={};n(v,{env:()=>k,step:()=>C});var k={};n(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={};n(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:{silent:!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:{silent:!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:{silent:!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:{silent:!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:{silent:!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 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"]}
|
|
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 silent: 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 silent: true.',\n )\n .optional(),\n destroy: z\n .boolean()\n .describe(\n 'Permanently delete person from Customer.io. Set true on delete events with silent: true.',\n )\n .optional(),\n suppress: z\n .boolean()\n .describe(\n 'Suppress person (stop messaging without deleting data). Set true with silent: true.',\n )\n .optional(),\n unsuppress: z\n .boolean()\n .describe(\n 'Unsuppress person (resume messaging). Set true with silent: true.',\n )\n .optional(),\n addDevice: z\n .unknown()\n .describe(\n 'Register push device. Resolves to { deviceId, platform, data? }. Use with silent: true.',\n )\n .optional(),\n deleteDevice: z\n .unknown()\n .describe(\n 'Remove push device. Resolves to { deviceId, platform }. Use with silent: true.',\n )\n .optional(),\n merge: z\n .unknown()\n .describe(\n 'Merge duplicate profiles. Resolves to { primaryType, primaryId, secondaryType, secondaryId }. Use with silent: 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 silent: 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 silent: 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 silent -- 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 silent: 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 * silent: 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 silent: 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 silent: 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 silent: 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 silent: 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
|
|
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 silent: true on login/identify events.").optional(),page:n.unknown().describe("Per-event page view. Resolves to { url, ... }. Calls trackPageView(). Use with silent: true.").optional(),destroy:n.boolean().describe("Permanently delete person from Customer.io. Set true on delete events with silent: true.").optional(),suppress:n.boolean().describe("Suppress person (stop messaging without deleting data). Set true with silent: true.").optional(),unsuppress:n.boolean().describe("Unsuppress person (resume messaging). Set true with silent: true.").optional(),addDevice:n.unknown().describe("Register push device. Resolves to { deviceId, platform, data? }. Use with silent: true.").optional(),deleteDevice:n.unknown().describe("Remove push device. Resolves to { deviceId, platform }. Use with silent: true.").optional(),merge:n.unknown().describe("Merge duplicate profiles. Resolves to { primaryType, primaryId, secondaryType, secondaryId }. Use with silent: true.").optional(),sendEmail:n.unknown().describe("Send transactional email. Resolves to { to, transactional_message_id, message_data?, identifiers? }. Requires appApiKey. Use with silent: true.").optional(),sendPush:n.unknown().describe("Send transactional push. Resolves to { transactional_message_id, message_data?, identifiers? }. Requires appApiKey. Use with silent: true.").optional()}),p=i(a),l=i(o),u={};s(u,{env:()=>m,step:()=>k});var m={};s(m,{push:()=>g,simulation:()=>v});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}},v=["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"],k={};s(k,{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:{silent:!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:{silent:!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:{silent:!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:{silent:!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:{silent:!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 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"]}
|
|
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 silent: 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 silent: true.',\n )\n .optional(),\n destroy: z\n .boolean()\n .describe(\n 'Permanently delete person from Customer.io. Set true on delete events with silent: true.',\n )\n .optional(),\n suppress: z\n .boolean()\n .describe(\n 'Suppress person (stop messaging without deleting data). Set true with silent: true.',\n )\n .optional(),\n unsuppress: z\n .boolean()\n .describe(\n 'Unsuppress person (resume messaging). Set true with silent: true.',\n )\n .optional(),\n addDevice: z\n .unknown()\n .describe(\n 'Register push device. Resolves to { deviceId, platform, data? }. Use with silent: true.',\n )\n .optional(),\n deleteDevice: z\n .unknown()\n .describe(\n 'Remove push device. Resolves to { deviceId, platform }. Use with silent: true.',\n )\n .optional(),\n merge: z\n .unknown()\n .describe(\n 'Merge duplicate profiles. Resolves to { primaryType, primaryId, secondaryType, secondaryId }. Use with silent: 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 silent: 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 silent: 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 silent -- 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 silent: 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 * silent: 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 silent: 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 silent: 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 silent: 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 silent: 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"]}
|
|
@@ -111,12 +111,12 @@ declare const anonymousTrack: CustomerIoStepExample;
|
|
|
111
111
|
*/
|
|
112
112
|
declare const destinationIdentify: CustomerIoStepExample;
|
|
113
113
|
/**
|
|
114
|
-
* Per-event identify with
|
|
114
|
+
* Per-event identify with silent -- user login fires identify() only.
|
|
115
115
|
*/
|
|
116
116
|
declare const userLoginIdentify: CustomerIoStepExample;
|
|
117
117
|
/**
|
|
118
118
|
* Page view -- fires trackClient.trackPageView() with url.
|
|
119
|
-
*
|
|
119
|
+
* silent: true suppresses track(); settings.page fires trackPageView().
|
|
120
120
|
*/
|
|
121
121
|
declare const pageView: CustomerIoStepExample;
|
|
122
122
|
/**
|
package/dist/examples/index.d.ts
CHANGED
|
@@ -111,12 +111,12 @@ declare const anonymousTrack: CustomerIoStepExample;
|
|
|
111
111
|
*/
|
|
112
112
|
declare const destinationIdentify: CustomerIoStepExample;
|
|
113
113
|
/**
|
|
114
|
-
* Per-event identify with
|
|
114
|
+
* Per-event identify with silent -- user login fires identify() only.
|
|
115
115
|
*/
|
|
116
116
|
declare const userLoginIdentify: CustomerIoStepExample;
|
|
117
117
|
/**
|
|
118
118
|
* Page view -- fires trackClient.trackPageView() with url.
|
|
119
|
-
*
|
|
119
|
+
* silent: true suppresses track(); settings.page fires trackPageView().
|
|
120
120
|
*/
|
|
121
121
|
declare const pageView: CustomerIoStepExample;
|
|
122
122
|
/**
|
package/dist/examples/index.js
CHANGED
|
@@ -228,7 +228,7 @@ var userLoginIdentify = {
|
|
|
228
228
|
}
|
|
229
229
|
}),
|
|
230
230
|
mapping: {
|
|
231
|
-
|
|
231
|
+
silent: true,
|
|
232
232
|
settings: {
|
|
233
233
|
identify: {
|
|
234
234
|
map: {
|
|
@@ -259,7 +259,7 @@ var pageView = {
|
|
|
259
259
|
}
|
|
260
260
|
}),
|
|
261
261
|
mapping: {
|
|
262
|
-
|
|
262
|
+
silent: true,
|
|
263
263
|
settings: {
|
|
264
264
|
page: {
|
|
265
265
|
map: {
|
|
@@ -286,7 +286,7 @@ var destroyPerson = {
|
|
|
286
286
|
user: { id: "us3r", session: "s3ss10n" }
|
|
287
287
|
}),
|
|
288
288
|
mapping: {
|
|
289
|
-
|
|
289
|
+
silent: true,
|
|
290
290
|
settings: {
|
|
291
291
|
destroy: true
|
|
292
292
|
}
|
|
@@ -301,7 +301,7 @@ var suppressPerson = {
|
|
|
301
301
|
user: { id: "us3r", session: "s3ss10n" }
|
|
302
302
|
}),
|
|
303
303
|
mapping: {
|
|
304
|
-
|
|
304
|
+
silent: true,
|
|
305
305
|
settings: {
|
|
306
306
|
suppress: true
|
|
307
307
|
}
|
|
@@ -316,7 +316,7 @@ var unsuppressPerson = {
|
|
|
316
316
|
user: { id: "us3r", session: "s3ss10n" }
|
|
317
317
|
}),
|
|
318
318
|
mapping: {
|
|
319
|
-
|
|
319
|
+
silent: true,
|
|
320
320
|
settings: {
|
|
321
321
|
unsuppress: true
|
|
322
322
|
}
|
package/dist/examples/index.mjs
CHANGED
|
@@ -207,7 +207,7 @@ var userLoginIdentify = {
|
|
|
207
207
|
}
|
|
208
208
|
}),
|
|
209
209
|
mapping: {
|
|
210
|
-
|
|
210
|
+
silent: true,
|
|
211
211
|
settings: {
|
|
212
212
|
identify: {
|
|
213
213
|
map: {
|
|
@@ -238,7 +238,7 @@ var pageView = {
|
|
|
238
238
|
}
|
|
239
239
|
}),
|
|
240
240
|
mapping: {
|
|
241
|
-
|
|
241
|
+
silent: true,
|
|
242
242
|
settings: {
|
|
243
243
|
page: {
|
|
244
244
|
map: {
|
|
@@ -265,7 +265,7 @@ var destroyPerson = {
|
|
|
265
265
|
user: { id: "us3r", session: "s3ss10n" }
|
|
266
266
|
}),
|
|
267
267
|
mapping: {
|
|
268
|
-
|
|
268
|
+
silent: true,
|
|
269
269
|
settings: {
|
|
270
270
|
destroy: true
|
|
271
271
|
}
|
|
@@ -280,7 +280,7 @@ var suppressPerson = {
|
|
|
280
280
|
user: { id: "us3r", session: "s3ss10n" }
|
|
281
281
|
}),
|
|
282
282
|
mapping: {
|
|
283
|
-
|
|
283
|
+
silent: true,
|
|
284
284
|
settings: {
|
|
285
285
|
suppress: true
|
|
286
286
|
}
|
|
@@ -295,7 +295,7 @@ var unsuppressPerson = {
|
|
|
295
295
|
user: { id: "us3r", session: "s3ss10n" }
|
|
296
296
|
}),
|
|
297
297
|
mapping: {
|
|
298
|
-
|
|
298
|
+
silent: true,
|
|
299
299
|
settings: {
|
|
300
300
|
unsuppress: true
|
|
301
301
|
}
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var e,t=Object.defineProperty,i=Object.getOwnPropertyDescriptor,n=Object.getOwnPropertyNames,o=Object.prototype.hasOwnProperty,a={};((e,i)=>{for(var n in i)t(e,n,{get:i[n],enumerable:!0})})(a,{DestinationCustomerIo:()=>
|
|
1
|
+
"use strict";var e,t=Object.defineProperty,i=Object.getOwnPropertyDescriptor,n=Object.getOwnPropertyNames,o=Object.prototype.hasOwnProperty,a={};((e,i)=>{for(var n in i)t(e,n,{get:i[n],enumerable:!0})})(a,{DestinationCustomerIo:()=>d,default:()=>l,destinationCustomerIo:()=>u}),module.exports=(e=a,((e,a,s,r)=>{if(a&&"object"==typeof a||"function"==typeof a)for(let c of n(a))o.call(e,c)||c===s||t(e,c,{get:()=>a[c],enumerable:!(r=i(a,c))||r.enumerable});return e})(t({},"__esModule",{value:!0}),e));var s=require("@walkeros/core"),r=async function(e,{config:t,rule:i,data:n,collector:o,env:a,logger:r}){const d=t.settings,u=a,l=u?.trackClient||d._trackClient,p=u?.apiClient||d._apiClient;if(!l)return void r.warn("Customer.io TrackClient not initialized");const g=d._state||{},m=i?.settings||{},f=e.timestamp?Math.floor(e.timestamp/1e3):void 0,y=d.customerId?c(await(0,s.getMappingValue)(e,d.customerId,{collector:o})):void 0,v=d.anonymousId?c(await(0,s.getMappingValue)(e,d.anonymousId,{collector:o})):void 0;if(!y&&!v)return void r.warn("Customer.io requires customerId or anonymousId; skipping event",{event:e.name});const w=m.identify??d.identify;if(void 0!==w&&y){const t=await(0,s.getMappingValue)(e,w,{collector:o});(0,s.isObject)(t)&&await async function(e,t,i,n){const o=n.lastIdentity||{},a=function(e){if(!e)return"";try{return JSON.stringify(e)}catch{return""}}(i),s=t!==o.customerId,r=a!==(o.attributesHash??"");if(!s&&!r)return;await e.identify(t,i),n.lastIdentity={customerId:t,attributesHash:a}}(l,y,t,g)}if(void 0!==m.page&&y){const t=await(0,s.getMappingValue)(e,m.page,{collector:o});if((0,s.isObject)(t)){const e=t,i=(0,s.isString)(e.url)?e.url:void 0;if(i){const{url:t,...n}=e,o=Object.keys(n).length>0?n:void 0;await l.trackPageView(y,i,o)}}}if(!0===m.destroy&&y&&await l.destroy(y),!0===m.suppress&&y&&await l.suppress(y),!0===m.unsuppress&&y&&await l.unsuppress(y),void 0!==m.addDevice&&y){const t=await(0,s.getMappingValue)(e,m.addDevice,{collector:o});if((0,s.isObject)(t)){const e=t;(0,s.isString)(e.deviceId)&&(0,s.isString)(e.platform)&&await l.addDevice(y,e.deviceId,e.platform,(0,s.isObject)(e.data)?e.data:void 0)}}if(void 0!==m.deleteDevice&&y){const t=await(0,s.getMappingValue)(e,m.deleteDevice,{collector:o});if((0,s.isObject)(t)){const e=t;(0,s.isString)(e.deviceId)&&(0,s.isString)(e.platform)&&await l.deleteDevice(y,e.deviceId,e.platform)}}if(void 0!==m.merge&&y){const t=await(0,s.getMappingValue)(e,m.merge,{collector:o});if((0,s.isObject)(t)){const e=t;(0,s.isString)(e.primaryType)&&(0,s.isString)(e.primaryId)&&(0,s.isString)(e.secondaryType)&&(0,s.isString)(e.secondaryId)&&await l.mergeCustomers(e.primaryType,e.primaryId,e.secondaryType,e.secondaryId)}}if(void 0!==m.sendEmail&&p){const t=await(0,s.getMappingValue)(e,m.sendEmail,{collector:o});(0,s.isObject)(t)&&await p.sendEmail(t)}if(void 0!==m.sendPush&&p){const t=await(0,s.getMappingValue)(e,m.sendPush,{collector:o});(0,s.isObject)(t)&&await p.sendPush(t)}if(!0!==i?.silent){const t=(0,s.isString)(i?.name)?i.name:e.name,o=(0,s.isObject)(n)?n:{},a={name:t};a.data=o,void 0!==f&&(a.timestamp=f),y?await l.track(y,a):v&&await l.trackAnonymous(v,a)}d._state=g};function c(e){if((0,s.isString)(e)&&e.length>0)return e}var d={},u={type:"customerio",config:{},init({config:e,logger:t,env:i}){const n=function(e={},t){const i=e.settings||{},{siteId:n,apiKey:o}=i;n||t.throw("Config settings siteId missing"),o||t.throw("Config settings apiKey missing");const a={...i,siteId:n,apiKey:o,customerId:i.customerId??"user.id",anonymousId:i.anonymousId??"user.session"};return{...e,settings:a}}(e,t),o=n.settings,a=i;if(!a?.trackClient)try{const e=require("customerio-node"),{TrackClient:t,RegionUS:i,RegionEU:n}=e,a="eu"===o.region?n:i,s=new t(o.siteId,o.apiKey,{region:a,...o.timeout?{timeout:o.timeout}:{}});o._trackClient=s}catch(e){t.throw(`Failed to initialize Customer.io TrackClient: ${e}`)}if(!a?.apiClient&&o.appApiKey)try{const e=require("customerio-node"),{APIClient:t,RegionUS:i,RegionEU:n}=e,a="eu"===o.region?n:i,s=new t(o.appApiKey,{region:a,...o.timeout?{timeout:o.timeout}:{}});o._apiClient=s}catch(e){t.throw(`Failed to initialize Customer.io APIClient: ${e}`)}return o._state={},n},push:async(e,t)=>await r(e,t),async destroy({config:e}){const t=e?.settings||{};t._trackClient=void 0,t._apiClient=void 0}},l=u;//# sourceMappingURL=index.js.map
|