@walkeros/server-destination-tiktok 3.4.0 → 3.4.1

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 CHANGED
@@ -1 +1 @@
1
- "use strict";var e,t=Object.defineProperty,a=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,n=Object.prototype.hasOwnProperty,o=(e,a)=>{for(var r in a)t(e,r,{get:a[r],enumerable:!0})},i={};o(i,{examples:()=>y,schemas:()=>c}),module.exports=(e=i,((e,o,i,c)=>{if(o&&"object"==typeof o||"function"==typeof o)for(let s of r(o))n.call(e,s)||s===i||t(e,s,{get:()=>o[s],enumerable:!(c=a(o,s))||c.enumerable});return e})(t({},"__esModule",{value:!0}),e));var c={};o(c,{MappingSchema:()=>m,SettingsSchema:()=>d,StandardEventNameSchema:()=>l,mapping:()=>g,settings:()=>v});var s=require("@walkeros/core/dev"),p=require("@walkeros/core/dev"),d=p.z.object({pixelCode:p.z.string().min(1).describe("TikTok Pixel Code from Events Manager (like C0ABCDEF12345)"),accessToken:p.z.string().min(1).describe("Events API access token from TikTok Events Manager"),url:p.z.string().url().describe("Custom Events API endpoint URL").optional(),test_event_code:p.z.string().describe("Test event code for debugging in TikTok Events Manager (like TEST12345)").optional(),doNotHash:p.z.array(p.z.string()).describe("User data fields to skip hashing (like ['email', 'phone_number'])").optional(),user_data:p.z.record(p.z.string(),p.z.string()).describe("Mapping for user data fields (like { email: 'user.email' })").optional(),partner_name:p.z.string().describe("Partner name for TikTok attribution").optional()}),m=require("@walkeros/core/dev").z.object({}),u=require("@walkeros/core/dev"),l=u.z.union([u.z.enum(["ViewContent","ClickButton","Search","AddToWishlist","AddToCart","InitiateCheckout","AddPaymentInfo","CompletePayment","PlaceAnOrder","Contact","Download","SubmitForm","CompleteRegistration","Subscribe"]),u.z.string()]),v=(0,s.zodToSchema)(d),g=(0,s.zodToSchema)(m),y={};o(y,{env:()=>_,step:()=>k});var _={};o(_,{push:()=>b,simulation:()=>h});var b={sendServer:async function(e,t,a){return{ok:!0,data:{code:0,message:"OK"}}}},h=["sendServer"],k={};o(k,{addToCart:()=>T,lead:()=>C,pageView:()=>x,purchase:()=>O});var S=require("@walkeros/core"),f="https://business-api.tiktok.com/open_api/v1.3/event/track/",E={headers:{"Access-Token":"s3cr3t","Content-Type":"application/json"}},O={in:(0,S.getEvent)("order complete",{timestamp:17000009e5,data:{id:"ORD-300",total:249.99,currency:"EUR"},nested:[{entity:"product",data:{id:"SKU-A1",name:"Widget Pro",price:124.99,quantity:2}}],user:{id:"user-123",device:"device-456"},source:{type:"server",id:"https://shop.example.com/checkout/complete",previous_id:""}}),mapping:{name:"CompletePayment",data:{map:{value:"data.total",currency:{key:"data.currency",value:"EUR"},order_id:"data.id",content_type:{value:"product"},contents:{loop:["nested",{condition:e=>(0,S.isObject)(e)&&"product"===e.entity,map:{content_id:"data.id",content_name:"data.name",quantity:{key:"data.quantity",value:1},price:"data.price"}}]},user_data:{map:{external_id:"user.id"}}}}},out:[["sendServer",f,JSON.stringify({pixel_code:"PIXEL_CODE",partner_name:"walkerOS",data:[{event:"CompletePayment",event_id:"1700000900000-gr0up-1",timestamp:"2023-11-14T22:28:20.000Z",context:{user:{external_id:"fcdec6df4d44dbc637c7c5b58efface52a7f8a88535423430255be0bb89bedd8"},page:{url:"https://shop.example.com/checkout/complete"}},properties:{value:249.99,currency:"EUR",order_id:"ORD-300",content_type:"product",contents:[{content_id:"SKU-A1",content_name:"Widget Pro",quantity:2,price:124.99}]}}]}),E]]},T={in:(0,S.getEvent)("product add",{timestamp:1700000901e3,data:{id:"SKU-B2",name:"Running Shoes",price:89.99,color:"blue"},nested:[{entity:"product",data:{id:"SKU-B2",name:"Running Shoes",price:89.99,quantity:1}}],source:{type:"server",id:"https://shop.example.com/products/running-shoes",previous_id:""}}),mapping:{name:"AddToCart",data:{map:{content_type:{value:"product"},value:"data.price",currency:{value:"EUR"},contents:{loop:["nested",{condition:e=>(0,S.isObject)(e)&&"product"===e.entity,map:{content_id:"data.id",content_name:"data.name",quantity:{key:"data.quantity",value:1},price:"data.price"}}]}}}},out:[["sendServer",f,JSON.stringify({pixel_code:"PIXEL_CODE",partner_name:"walkerOS",data:[{event:"AddToCart",event_id:"1700000901000-gr0up-1",timestamp:"2023-11-14T22:28:21.000Z",context:{page:{url:"https://shop.example.com/products/running-shoes"}},properties:{content_type:"product",value:89.99,currency:"EUR",contents:[{content_id:"SKU-B2",content_name:"Running Shoes",quantity:1,price:89.99}]}}]}),E]]},x={in:(0,S.getEvent)("page view",{timestamp:1700000902e3,source:{type:"server",id:"https://example.com/docs/",previous_id:""}}),mapping:void 0,out:[["sendServer",f,JSON.stringify({pixel_code:"PIXEL_CODE",partner_name:"walkerOS",data:[{event:"page view",event_id:"1700000902000-gr0up-1",timestamp:"2023-11-14T22:28:22.000Z",context:{page:{url:"https://example.com/docs/"}},properties:{}}]}),E]]},C={in:(0,S.getEvent)("form submit",{timestamp:1700000903e3,data:{type:"newsletter"},user:{email:"user@example.com"},source:{type:"server",id:"https://example.com/contact",previous_id:""}}),mapping:{name:"SubmitForm",data:{map:{user_data:{map:{email:"user.email"}}}}},out:[["sendServer",f,JSON.stringify({pixel_code:"PIXEL_CODE",partner_name:"walkerOS",data:[{event:"SubmitForm",event_id:"1700000903000-gr0up-1",timestamp:"2023-11-14T22:28:23.000Z",context:{user:{email:"b4c9a289323b21a01c3e940f150eb9b8c542587f1abfd8f0e1cc1ffc5e475514"},page:{url:"https://example.com/contact"}},properties:{}}]}),E]]};//# sourceMappingURL=dev.js.map
1
+ "use strict";var e,t=Object.defineProperty,a=Object.getOwnPropertyDescriptor,n=Object.getOwnPropertyNames,r=Object.prototype.hasOwnProperty,i=(e,a)=>{for(var n in a)t(e,n,{get:a[n],enumerable:!0})},o={};i(o,{examples:()=>y,schemas:()=>s}),module.exports=(e=o,((e,i,o,s)=>{if(i&&"object"==typeof i||"function"==typeof i)for(let c of n(i))r.call(e,c)||c===o||t(e,c,{get:()=>i[c],enumerable:!(s=a(i,c))||s.enumerable});return e})(t({},"__esModule",{value:!0}),e));var s={};i(s,{MappingSchema:()=>m,SettingsSchema:()=>p,StandardEventNameSchema:()=>l,mapping:()=>g,settings:()=>v});var c=require("@walkeros/core/dev"),d=require("@walkeros/core/dev"),p=d.z.object({pixelCode:d.z.string().min(1).describe("TikTok Pixel Code from Events Manager (like C0ABCDEF12345)"),accessToken:d.z.string().min(1).describe("Events API access token from TikTok Events Manager"),url:d.z.string().url().describe("Custom Events API endpoint URL").optional(),test_event_code:d.z.string().describe("Test event code for debugging in TikTok Events Manager (like TEST12345)").optional(),doNotHash:d.z.array(d.z.string()).describe("User data fields to skip hashing (like ['email', 'phone_number'])").optional(),user_data:d.z.record(d.z.string(),d.z.string()).describe("Mapping for user data fields (like { email: 'user.email' })").optional(),partner_name:d.z.string().describe("Partner name for TikTok attribution").optional()}),m=require("@walkeros/core/dev").z.object({}),u=require("@walkeros/core/dev"),l=u.z.union([u.z.enum(["ViewContent","ClickButton","Search","AddToWishlist","AddToCart","InitiateCheckout","AddPaymentInfo","CompletePayment","PlaceAnOrder","Contact","Download","SubmitForm","CompleteRegistration","Subscribe"]),u.z.string()]),v=(0,c.zodToSchema)(p),g=(0,c.zodToSchema)(m),y={};i(y,{env:()=>h,step:()=>k});var h={};i(h,{push:()=>_,simulation:()=>b});var _={sendServer:async function(e,t,a){return{ok:!0,data:{code:0,message:"OK"}}}},b=["sendServer"],k={};i(k,{addToCart:()=>E,lead:()=>C,pageView:()=>x,purchase:()=>w});var S=require("@walkeros/core"),f="https://business-api.tiktok.com/open_api/v1.3/event/track/",T={headers:{"Access-Token":"s3cr3t","Content-Type":"application/json"}},w={title:"Complete payment",description:"A completed order is sent to the TikTok Events API as a CompletePayment with value, currency, and contents.",in:(0,S.getEvent)("order complete",{timestamp:17000009e5,data:{id:"ORD-300",total:249.99,currency:"EUR"},nested:[{entity:"product",data:{id:"SKU-A1",name:"Widget Pro",price:124.99,quantity:2}}],user:{id:"user-123",device:"device-456"},source:{type:"server",id:"https://shop.example.com/checkout/complete",previous_id:""}}),mapping:{name:"CompletePayment",data:{map:{value:"data.total",currency:{key:"data.currency",value:"EUR"},order_id:"data.id",content_type:{value:"product"},contents:{loop:["nested",{condition:e=>(0,S.isObject)(e)&&"product"===e.entity,map:{content_id:"data.id",content_name:"data.name",quantity:{key:"data.quantity",value:1},price:"data.price"}}]},user_data:{map:{external_id:"user.id"}}}}},out:[["sendServer",f,JSON.stringify({pixel_code:"PIXEL_CODE",partner_name:"walkerOS",data:[{event:"CompletePayment",event_id:"1700000900000-gr0up-1",timestamp:"2023-11-14T22:28:20.000Z",context:{user:{external_id:"fcdec6df4d44dbc637c7c5b58efface52a7f8a88535423430255be0bb89bedd8"},page:{url:"https://shop.example.com/checkout/complete"}},properties:{value:249.99,currency:"EUR",order_id:"ORD-300",content_type:"product",contents:[{content_id:"SKU-A1",content_name:"Widget Pro",quantity:2,price:124.99}]}}]}),T]]},E={title:"Add to cart",description:"A product add is sent to TikTok as an AddToCart event with value, currency, and product contents.",in:(0,S.getEvent)("product add",{timestamp:1700000901e3,data:{id:"SKU-B2",name:"Running Shoes",price:89.99,color:"blue"},nested:[{entity:"product",data:{id:"SKU-B2",name:"Running Shoes",price:89.99,quantity:1}}],source:{type:"server",id:"https://shop.example.com/products/running-shoes",previous_id:""}}),mapping:{name:"AddToCart",data:{map:{content_type:{value:"product"},value:"data.price",currency:{value:"EUR"},contents:{loop:["nested",{condition:e=>(0,S.isObject)(e)&&"product"===e.entity,map:{content_id:"data.id",content_name:"data.name",quantity:{key:"data.quantity",value:1},price:"data.price"}}]}}}},out:[["sendServer",f,JSON.stringify({pixel_code:"PIXEL_CODE",partner_name:"walkerOS",data:[{event:"AddToCart",event_id:"1700000901000-gr0up-1",timestamp:"2023-11-14T22:28:21.000Z",context:{page:{url:"https://shop.example.com/products/running-shoes"}},properties:{content_type:"product",value:89.99,currency:"EUR",contents:[{content_id:"SKU-B2",content_name:"Running Shoes",quantity:1,price:89.99}]}}]}),T]]},x={title:"Page view",description:"A page view is forwarded to TikTok as a page view event with the source URL in the page context.",in:(0,S.getEvent)("page view",{timestamp:1700000902e3,source:{type:"server",id:"https://example.com/docs/",previous_id:""}}),mapping:void 0,out:[["sendServer",f,JSON.stringify({pixel_code:"PIXEL_CODE",partner_name:"walkerOS",data:[{event:"page view",event_id:"1700000902000-gr0up-1",timestamp:"2023-11-14T22:28:22.000Z",context:{page:{url:"https://example.com/docs/"}},properties:{}}]}),T]]},C={title:"Submit form",description:"A newsletter form submission is sent to TikTok as a SubmitForm event with the hashed email in user context.",in:(0,S.getEvent)("form submit",{timestamp:1700000903e3,data:{type:"newsletter"},user:{email:"user@example.com"},source:{type:"server",id:"https://example.com/contact",previous_id:""}}),mapping:{name:"SubmitForm",data:{map:{user_data:{map:{email:"user.email"}}}}},out:[["sendServer",f,JSON.stringify({pixel_code:"PIXEL_CODE",partner_name:"walkerOS",data:[{event:"SubmitForm",event_id:"1700000903000-gr0up-1",timestamp:"2023-11-14T22:28:23.000Z",context:{user:{email:"b4c9a289323b21a01c3e940f150eb9b8c542587f1abfd8f0e1cc1ffc5e475514"},page:{url:"https://example.com/contact"}},properties:{}}]}),T]]};//# 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/schemas/primitives.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 * from './primitives';\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 pixelCode: z\n .string()\n .min(1)\n .describe('TikTok Pixel Code from Events Manager (like C0ABCDEF12345)'),\n accessToken: z\n .string()\n .min(1)\n .describe('Events API access token from TikTok Events Manager'),\n url: z.string().url().describe('Custom Events API endpoint URL').optional(),\n test_event_code: z\n .string()\n .describe(\n 'Test event code for debugging in TikTok Events Manager (like TEST12345)',\n )\n .optional(),\n doNotHash: z\n .array(z.string())\n .describe(\n \"User data fields to skip hashing (like ['email', 'phone_number'])\",\n )\n .optional(),\n user_data: z\n .record(z.string(), z.string())\n .describe(\"Mapping for user data fields (like { email: 'user.email' })\")\n .optional(),\n partner_name: z\n .string()\n .describe('Partner name for TikTok attribution')\n .optional(),\n});\n\nexport type Settings = z.infer<typeof SettingsSchema>;\n","import { z } from '@walkeros/core/dev';\n\n/**\n * TikTok Events API Mapping Schema\n * TikTok Events API has no event-level mapping configuration\n */\nexport const MappingSchema = z.object({});\n\n/**\n * Type inference from MappingSchema\n */\nexport type Mapping = z.infer<typeof MappingSchema>;\n","import { z } from '@walkeros/core/dev';\n\n/**\n * Standard TikTok Event Names\n * https://business-api.tiktok.com/portal/docs?id=1771100865818625\n */\nexport const StandardEventNameSchema = z.union([\n z.enum([\n 'ViewContent',\n 'ClickButton',\n 'Search',\n 'AddToWishlist',\n 'AddToCart',\n 'InitiateCheckout',\n 'AddPaymentInfo',\n 'CompletePayment',\n 'PlaceAnOrder',\n 'Contact',\n 'Download',\n 'SubmitForm',\n 'CompleteRegistration',\n 'Subscribe',\n ]),\n z.string(), // Allow custom event names\n]);\n","export * as env from './env';\nexport * as step from './step';\n","import type { SendDataValue, SendResponse } from '@walkeros/core';\nimport type { SendServerOptions } from '@walkeros/server-core';\nimport type { Env } from '../types';\n\n/**\n * Example environment configurations for TikTok Events API destination\n *\n * These environments provide standardized mock structures for testing\n * and development without requiring actual HTTP requests.\n */\n\n/**\n * Mock sendServer function that simulates successful HTTP responses\n */\nasync function mockSendServer(\n url: string,\n data?: SendDataValue,\n options?: SendServerOptions,\n): Promise<SendResponse> {\n // Simulate successful TikTok API response\n return {\n ok: true,\n data: {\n code: 0,\n message: 'OK',\n },\n };\n}\n\n/**\n * Standard mock environment for push operations\n *\n * Use this for testing TikTok Events API events without making\n * actual HTTP requests to TikTok's servers.\n */\nexport const push: Env = {\n sendServer: mockSendServer,\n};\n\nexport const simulation = ['sendServer'];\n","import type { Flow } from '@walkeros/core';\nimport { getEvent, isObject } from '@walkeros/core';\n\n/**\n * TikTok Events API step examples.\n *\n * At push time, the destination calls\n * `env.sendServer(url, body, { headers })` where `url` is the fixed\n * TikTok Events API endpoint and `body` is the JSON-stringified payload\n * `{ pixel_code, partner_name, data: [tiktokEvent] }`.\n *\n * The test fixture pins `accessToken = 's3cr3t'` and `pixelCode = 'PIXEL_CODE'`.\n *\n * Body fields are emitted in the order the destination constructs them\n * (insertion order matters for `JSON.stringify` string equality):\n * pixel_code, partner_name, data[] with { event, event_id, timestamp,\n * context: { user?, page }, properties }.\n *\n * User identity fields (`email`, `phone_number`, `external_id`) are hashed\n * with SHA-256.\n */\nconst ENDPOINT = 'https://business-api.tiktok.com/open_api/v1.3/event/track/';\nconst HEADERS = {\n headers: {\n 'Access-Token': 's3cr3t',\n 'Content-Type': 'application/json',\n },\n};\n\nexport const purchase: Flow.StepExample = {\n in: getEvent('order complete', {\n timestamp: 1700000900000,\n data: { id: 'ORD-300', total: 249.99, currency: 'EUR' },\n nested: [\n {\n entity: 'product',\n data: { id: 'SKU-A1', name: 'Widget Pro', price: 124.99, quantity: 2 },\n },\n ],\n user: { id: 'user-123', device: 'device-456' },\n source: {\n type: 'server',\n id: 'https://shop.example.com/checkout/complete',\n previous_id: '',\n },\n }),\n mapping: {\n name: 'CompletePayment',\n data: {\n map: {\n value: 'data.total',\n currency: { key: 'data.currency', value: 'EUR' },\n order_id: 'data.id',\n content_type: { value: 'product' },\n contents: {\n loop: [\n 'nested',\n {\n condition: (entity: unknown) =>\n isObject(entity) && entity.entity === 'product',\n map: {\n content_id: 'data.id',\n content_name: 'data.name',\n quantity: { key: 'data.quantity', value: 1 },\n price: 'data.price',\n },\n },\n ],\n },\n user_data: {\n map: {\n external_id: 'user.id',\n },\n },\n },\n },\n },\n out: [\n [\n 'sendServer',\n ENDPOINT,\n JSON.stringify({\n pixel_code: 'PIXEL_CODE',\n partner_name: 'walkerOS',\n data: [\n {\n event: 'CompletePayment',\n event_id: '1700000900000-gr0up-1',\n timestamp: '2023-11-14T22:28:20.000Z',\n context: {\n user: {\n external_id:\n 'fcdec6df4d44dbc637c7c5b58efface52a7f8a88535423430255be0bb89bedd8',\n },\n page: {\n url: 'https://shop.example.com/checkout/complete',\n },\n },\n properties: {\n value: 249.99,\n currency: 'EUR',\n order_id: 'ORD-300',\n content_type: 'product',\n contents: [\n {\n content_id: 'SKU-A1',\n content_name: 'Widget Pro',\n quantity: 2,\n price: 124.99,\n },\n ],\n },\n },\n ],\n }),\n HEADERS,\n ],\n ],\n};\n\nexport const addToCart: Flow.StepExample = {\n in: getEvent('product add', {\n timestamp: 1700000901000,\n data: {\n id: 'SKU-B2',\n name: 'Running Shoes',\n price: 89.99,\n color: 'blue',\n },\n nested: [\n {\n entity: 'product',\n data: {\n id: 'SKU-B2',\n name: 'Running Shoes',\n price: 89.99,\n quantity: 1,\n },\n },\n ],\n source: {\n type: 'server',\n id: 'https://shop.example.com/products/running-shoes',\n previous_id: '',\n },\n }),\n mapping: {\n name: 'AddToCart',\n data: {\n map: {\n content_type: { value: 'product' },\n value: 'data.price',\n currency: { value: 'EUR' },\n contents: {\n loop: [\n 'nested',\n {\n condition: (entity: unknown) =>\n isObject(entity) && entity.entity === 'product',\n map: {\n content_id: 'data.id',\n content_name: 'data.name',\n quantity: { key: 'data.quantity', value: 1 },\n price: 'data.price',\n },\n },\n ],\n },\n },\n },\n },\n out: [\n [\n 'sendServer',\n ENDPOINT,\n JSON.stringify({\n pixel_code: 'PIXEL_CODE',\n partner_name: 'walkerOS',\n data: [\n {\n event: 'AddToCart',\n event_id: '1700000901000-gr0up-1',\n timestamp: '2023-11-14T22:28:21.000Z',\n context: {\n page: {\n url: 'https://shop.example.com/products/running-shoes',\n },\n },\n properties: {\n content_type: 'product',\n value: 89.99,\n currency: 'EUR',\n contents: [\n {\n content_id: 'SKU-B2',\n content_name: 'Running Shoes',\n quantity: 1,\n price: 89.99,\n },\n ],\n },\n },\n ],\n }),\n HEADERS,\n ],\n ],\n};\n\nexport const pageView: Flow.StepExample = {\n in: getEvent('page view', {\n timestamp: 1700000902000,\n source: {\n type: 'server',\n id: 'https://example.com/docs/',\n previous_id: '',\n },\n }),\n mapping: undefined,\n out: [\n [\n 'sendServer',\n ENDPOINT,\n JSON.stringify({\n pixel_code: 'PIXEL_CODE',\n partner_name: 'walkerOS',\n data: [\n {\n event: 'page view',\n event_id: '1700000902000-gr0up-1',\n timestamp: '2023-11-14T22:28:22.000Z',\n context: {\n page: {\n url: 'https://example.com/docs/',\n },\n },\n properties: {},\n },\n ],\n }),\n HEADERS,\n ],\n ],\n};\n\nexport const lead: Flow.StepExample = {\n in: getEvent('form submit', {\n timestamp: 1700000903000,\n data: { type: 'newsletter' },\n user: { email: 'user@example.com' },\n source: {\n type: 'server',\n id: 'https://example.com/contact',\n previous_id: '',\n },\n }),\n mapping: {\n name: 'SubmitForm',\n data: {\n map: {\n user_data: {\n map: {\n email: 'user.email',\n },\n },\n },\n },\n },\n out: [\n [\n 'sendServer',\n ENDPOINT,\n JSON.stringify({\n pixel_code: 'PIXEL_CODE',\n partner_name: 'walkerOS',\n data: [\n {\n event: 'SubmitForm',\n event_id: '1700000903000-gr0up-1',\n timestamp: '2023-11-14T22:28:23.000Z',\n context: {\n user: {\n // sha256('user@example.com')\n email:\n 'b4c9a289323b21a01c3e940f150eb9b8c542587f1abfd8f0e1cc1ffc5e475514',\n },\n page: {\n url: 'https://example.com/contact',\n },\n },\n properties: {},\n },\n ],\n }),\n HEADERS,\n ],\n ],\n};\n"],"mappings":"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","names":["import_dev","import_dev","import_dev"]}
1
+ {"version":3,"sources":["../src/dev.ts","../src/schemas/index.ts","../src/schemas/settings.ts","../src/schemas/mapping.ts","../src/schemas/primitives.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 * from './primitives';\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 pixelCode: z\n .string()\n .min(1)\n .describe('TikTok Pixel Code from Events Manager (like C0ABCDEF12345)'),\n accessToken: z\n .string()\n .min(1)\n .describe('Events API access token from TikTok Events Manager'),\n url: z.string().url().describe('Custom Events API endpoint URL').optional(),\n test_event_code: z\n .string()\n .describe(\n 'Test event code for debugging in TikTok Events Manager (like TEST12345)',\n )\n .optional(),\n doNotHash: z\n .array(z.string())\n .describe(\n \"User data fields to skip hashing (like ['email', 'phone_number'])\",\n )\n .optional(),\n user_data: z\n .record(z.string(), z.string())\n .describe(\"Mapping for user data fields (like { email: 'user.email' })\")\n .optional(),\n partner_name: z\n .string()\n .describe('Partner name for TikTok attribution')\n .optional(),\n});\n\nexport type Settings = z.infer<typeof SettingsSchema>;\n","import { z } from '@walkeros/core/dev';\n\n/**\n * TikTok Events API Mapping Schema\n * TikTok Events API has no event-level mapping configuration\n */\nexport const MappingSchema = z.object({});\n\n/**\n * Type inference from MappingSchema\n */\nexport type Mapping = z.infer<typeof MappingSchema>;\n","import { z } from '@walkeros/core/dev';\n\n/**\n * Standard TikTok Event Names\n * https://business-api.tiktok.com/portal/docs?id=1771100865818625\n */\nexport const StandardEventNameSchema = z.union([\n z.enum([\n 'ViewContent',\n 'ClickButton',\n 'Search',\n 'AddToWishlist',\n 'AddToCart',\n 'InitiateCheckout',\n 'AddPaymentInfo',\n 'CompletePayment',\n 'PlaceAnOrder',\n 'Contact',\n 'Download',\n 'SubmitForm',\n 'CompleteRegistration',\n 'Subscribe',\n ]),\n z.string(), // Allow custom event names\n]);\n","export * as env from './env';\nexport * as step from './step';\n","import type { SendDataValue, SendResponse } from '@walkeros/core';\nimport type { SendServerOptions } from '@walkeros/server-core';\nimport type { Env } from '../types';\n\n/**\n * Example environment configurations for TikTok Events API destination\n *\n * These environments provide standardized mock structures for testing\n * and development without requiring actual HTTP requests.\n */\n\n/**\n * Mock sendServer function that simulates successful HTTP responses\n */\nasync function mockSendServer(\n url: string,\n data?: SendDataValue,\n options?: SendServerOptions,\n): Promise<SendResponse> {\n // Simulate successful TikTok API response\n return {\n ok: true,\n data: {\n code: 0,\n message: 'OK',\n },\n };\n}\n\n/**\n * Standard mock environment for push operations\n *\n * Use this for testing TikTok Events API events without making\n * actual HTTP requests to TikTok's servers.\n */\nexport const push: Env = {\n sendServer: mockSendServer,\n};\n\nexport const simulation = ['sendServer'];\n","import type { Flow } from '@walkeros/core';\nimport { getEvent, isObject } from '@walkeros/core';\n\n/**\n * TikTok Events API step examples.\n *\n * At push time, the destination calls\n * `env.sendServer(url, body, { headers })` where `url` is the fixed\n * TikTok Events API endpoint and `body` is the JSON-stringified payload\n * `{ pixel_code, partner_name, data: [tiktokEvent] }`.\n *\n * The test fixture pins `accessToken = 's3cr3t'` and `pixelCode = 'PIXEL_CODE'`.\n *\n * Body fields are emitted in the order the destination constructs them\n * (insertion order matters for `JSON.stringify` string equality):\n * pixel_code, partner_name, data[] with { event, event_id, timestamp,\n * context: { user?, page }, properties }.\n *\n * User identity fields (`email`, `phone_number`, `external_id`) are hashed\n * with SHA-256.\n */\nconst ENDPOINT = 'https://business-api.tiktok.com/open_api/v1.3/event/track/';\nconst HEADERS = {\n headers: {\n 'Access-Token': 's3cr3t',\n 'Content-Type': 'application/json',\n },\n};\n\nexport const purchase: Flow.StepExample = {\n title: 'Complete payment',\n description:\n 'A completed order is sent to the TikTok Events API as a CompletePayment with value, currency, and contents.',\n in: getEvent('order complete', {\n timestamp: 1700000900000,\n data: { id: 'ORD-300', total: 249.99, currency: 'EUR' },\n nested: [\n {\n entity: 'product',\n data: { id: 'SKU-A1', name: 'Widget Pro', price: 124.99, quantity: 2 },\n },\n ],\n user: { id: 'user-123', device: 'device-456' },\n source: {\n type: 'server',\n id: 'https://shop.example.com/checkout/complete',\n previous_id: '',\n },\n }),\n mapping: {\n name: 'CompletePayment',\n data: {\n map: {\n value: 'data.total',\n currency: { key: 'data.currency', value: 'EUR' },\n order_id: 'data.id',\n content_type: { value: 'product' },\n contents: {\n loop: [\n 'nested',\n {\n condition: (entity: unknown) =>\n isObject(entity) && entity.entity === 'product',\n map: {\n content_id: 'data.id',\n content_name: 'data.name',\n quantity: { key: 'data.quantity', value: 1 },\n price: 'data.price',\n },\n },\n ],\n },\n user_data: {\n map: {\n external_id: 'user.id',\n },\n },\n },\n },\n },\n out: [\n [\n 'sendServer',\n ENDPOINT,\n JSON.stringify({\n pixel_code: 'PIXEL_CODE',\n partner_name: 'walkerOS',\n data: [\n {\n event: 'CompletePayment',\n event_id: '1700000900000-gr0up-1',\n timestamp: '2023-11-14T22:28:20.000Z',\n context: {\n user: {\n external_id:\n 'fcdec6df4d44dbc637c7c5b58efface52a7f8a88535423430255be0bb89bedd8',\n },\n page: {\n url: 'https://shop.example.com/checkout/complete',\n },\n },\n properties: {\n value: 249.99,\n currency: 'EUR',\n order_id: 'ORD-300',\n content_type: 'product',\n contents: [\n {\n content_id: 'SKU-A1',\n content_name: 'Widget Pro',\n quantity: 2,\n price: 124.99,\n },\n ],\n },\n },\n ],\n }),\n HEADERS,\n ],\n ],\n};\n\nexport const addToCart: Flow.StepExample = {\n title: 'Add to cart',\n description:\n 'A product add is sent to TikTok as an AddToCart event with value, currency, and product contents.',\n in: getEvent('product add', {\n timestamp: 1700000901000,\n data: {\n id: 'SKU-B2',\n name: 'Running Shoes',\n price: 89.99,\n color: 'blue',\n },\n nested: [\n {\n entity: 'product',\n data: {\n id: 'SKU-B2',\n name: 'Running Shoes',\n price: 89.99,\n quantity: 1,\n },\n },\n ],\n source: {\n type: 'server',\n id: 'https://shop.example.com/products/running-shoes',\n previous_id: '',\n },\n }),\n mapping: {\n name: 'AddToCart',\n data: {\n map: {\n content_type: { value: 'product' },\n value: 'data.price',\n currency: { value: 'EUR' },\n contents: {\n loop: [\n 'nested',\n {\n condition: (entity: unknown) =>\n isObject(entity) && entity.entity === 'product',\n map: {\n content_id: 'data.id',\n content_name: 'data.name',\n quantity: { key: 'data.quantity', value: 1 },\n price: 'data.price',\n },\n },\n ],\n },\n },\n },\n },\n out: [\n [\n 'sendServer',\n ENDPOINT,\n JSON.stringify({\n pixel_code: 'PIXEL_CODE',\n partner_name: 'walkerOS',\n data: [\n {\n event: 'AddToCart',\n event_id: '1700000901000-gr0up-1',\n timestamp: '2023-11-14T22:28:21.000Z',\n context: {\n page: {\n url: 'https://shop.example.com/products/running-shoes',\n },\n },\n properties: {\n content_type: 'product',\n value: 89.99,\n currency: 'EUR',\n contents: [\n {\n content_id: 'SKU-B2',\n content_name: 'Running Shoes',\n quantity: 1,\n price: 89.99,\n },\n ],\n },\n },\n ],\n }),\n HEADERS,\n ],\n ],\n};\n\nexport const pageView: Flow.StepExample = {\n title: 'Page view',\n description:\n 'A page view is forwarded to TikTok as a page view event with the source URL in the page context.',\n in: getEvent('page view', {\n timestamp: 1700000902000,\n source: {\n type: 'server',\n id: 'https://example.com/docs/',\n previous_id: '',\n },\n }),\n mapping: undefined,\n out: [\n [\n 'sendServer',\n ENDPOINT,\n JSON.stringify({\n pixel_code: 'PIXEL_CODE',\n partner_name: 'walkerOS',\n data: [\n {\n event: 'page view',\n event_id: '1700000902000-gr0up-1',\n timestamp: '2023-11-14T22:28:22.000Z',\n context: {\n page: {\n url: 'https://example.com/docs/',\n },\n },\n properties: {},\n },\n ],\n }),\n HEADERS,\n ],\n ],\n};\n\nexport const lead: Flow.StepExample = {\n title: 'Submit form',\n description:\n 'A newsletter form submission is sent to TikTok as a SubmitForm event with the hashed email in user context.',\n in: getEvent('form submit', {\n timestamp: 1700000903000,\n data: { type: 'newsletter' },\n user: { email: 'user@example.com' },\n source: {\n type: 'server',\n id: 'https://example.com/contact',\n previous_id: '',\n },\n }),\n mapping: {\n name: 'SubmitForm',\n data: {\n map: {\n user_data: {\n map: {\n email: 'user.email',\n },\n },\n },\n },\n },\n out: [\n [\n 'sendServer',\n ENDPOINT,\n JSON.stringify({\n pixel_code: 'PIXEL_CODE',\n partner_name: 'walkerOS',\n data: [\n {\n event: 'SubmitForm',\n event_id: '1700000903000-gr0up-1',\n timestamp: '2023-11-14T22:28:23.000Z',\n context: {\n user: {\n // sha256('user@example.com')\n email:\n 'b4c9a289323b21a01c3e940f150eb9b8c542587f1abfd8f0e1cc1ffc5e475514',\n },\n page: {\n url: 'https://example.com/contact',\n },\n },\n properties: {},\n },\n ],\n }),\n HEADERS,\n ],\n ],\n};\n"],"mappings":"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","names":["import_dev","import_dev","import_dev"]}
package/dist/dev.mjs CHANGED
@@ -1 +1 @@
1
- var e=Object.defineProperty,t=(t,a)=>{for(var r in a)e(t,r,{get:a[r],enumerable:!0})},a={};t(a,{MappingSchema:()=>s,SettingsSchema:()=>i,StandardEventNameSchema:()=>d,mapping:()=>m,settings:()=>c});import{zodToSchema as r}from"@walkeros/core/dev";import{z as n}from"@walkeros/core/dev";var i=n.object({pixelCode:n.string().min(1).describe("TikTok Pixel Code from Events Manager (like C0ABCDEF12345)"),accessToken:n.string().min(1).describe("Events API access token from TikTok Events Manager"),url:n.string().url().describe("Custom Events API endpoint URL").optional(),test_event_code:n.string().describe("Test event code for debugging in TikTok Events Manager (like TEST12345)").optional(),doNotHash:n.array(n.string()).describe("User data fields to skip hashing (like ['email', 'phone_number'])").optional(),user_data:n.record(n.string(),n.string()).describe("Mapping for user data fields (like { email: 'user.email' })").optional(),partner_name:n.string().describe("Partner name for TikTok attribution").optional()});import{z as o}from"@walkeros/core/dev";var s=o.object({});import{z as p}from"@walkeros/core/dev";var d=p.union([p.enum(["ViewContent","ClickButton","Search","AddToWishlist","AddToCart","InitiateCheckout","AddPaymentInfo","CompletePayment","PlaceAnOrder","Contact","Download","SubmitForm","CompleteRegistration","Subscribe"]),p.string()]),c=r(i),m=r(s),u={};t(u,{env:()=>l,step:()=>_});var l={};t(l,{push:()=>v,simulation:()=>g});var v={sendServer:async function(e,t,a){return{ok:!0,data:{code:0,message:"OK"}}}},g=["sendServer"],_={};t(_,{addToCart:()=>f,lead:()=>T,pageView:()=>x,purchase:()=>S});import{getEvent as y,isObject as k}from"@walkeros/core";var h="https://business-api.tiktok.com/open_api/v1.3/event/track/",b={headers:{"Access-Token":"s3cr3t","Content-Type":"application/json"}},S={in:y("order complete",{timestamp:17000009e5,data:{id:"ORD-300",total:249.99,currency:"EUR"},nested:[{entity:"product",data:{id:"SKU-A1",name:"Widget Pro",price:124.99,quantity:2}}],user:{id:"user-123",device:"device-456"},source:{type:"server",id:"https://shop.example.com/checkout/complete",previous_id:""}}),mapping:{name:"CompletePayment",data:{map:{value:"data.total",currency:{key:"data.currency",value:"EUR"},order_id:"data.id",content_type:{value:"product"},contents:{loop:["nested",{condition:e=>k(e)&&"product"===e.entity,map:{content_id:"data.id",content_name:"data.name",quantity:{key:"data.quantity",value:1},price:"data.price"}}]},user_data:{map:{external_id:"user.id"}}}}},out:[["sendServer",h,JSON.stringify({pixel_code:"PIXEL_CODE",partner_name:"walkerOS",data:[{event:"CompletePayment",event_id:"1700000900000-gr0up-1",timestamp:"2023-11-14T22:28:20.000Z",context:{user:{external_id:"fcdec6df4d44dbc637c7c5b58efface52a7f8a88535423430255be0bb89bedd8"},page:{url:"https://shop.example.com/checkout/complete"}},properties:{value:249.99,currency:"EUR",order_id:"ORD-300",content_type:"product",contents:[{content_id:"SKU-A1",content_name:"Widget Pro",quantity:2,price:124.99}]}}]}),b]]},f={in:y("product add",{timestamp:1700000901e3,data:{id:"SKU-B2",name:"Running Shoes",price:89.99,color:"blue"},nested:[{entity:"product",data:{id:"SKU-B2",name:"Running Shoes",price:89.99,quantity:1}}],source:{type:"server",id:"https://shop.example.com/products/running-shoes",previous_id:""}}),mapping:{name:"AddToCart",data:{map:{content_type:{value:"product"},value:"data.price",currency:{value:"EUR"},contents:{loop:["nested",{condition:e=>k(e)&&"product"===e.entity,map:{content_id:"data.id",content_name:"data.name",quantity:{key:"data.quantity",value:1},price:"data.price"}}]}}}},out:[["sendServer",h,JSON.stringify({pixel_code:"PIXEL_CODE",partner_name:"walkerOS",data:[{event:"AddToCart",event_id:"1700000901000-gr0up-1",timestamp:"2023-11-14T22:28:21.000Z",context:{page:{url:"https://shop.example.com/products/running-shoes"}},properties:{content_type:"product",value:89.99,currency:"EUR",contents:[{content_id:"SKU-B2",content_name:"Running Shoes",quantity:1,price:89.99}]}}]}),b]]},x={in:y("page view",{timestamp:1700000902e3,source:{type:"server",id:"https://example.com/docs/",previous_id:""}}),mapping:void 0,out:[["sendServer",h,JSON.stringify({pixel_code:"PIXEL_CODE",partner_name:"walkerOS",data:[{event:"page view",event_id:"1700000902000-gr0up-1",timestamp:"2023-11-14T22:28:22.000Z",context:{page:{url:"https://example.com/docs/"}},properties:{}}]}),b]]},T={in:y("form submit",{timestamp:1700000903e3,data:{type:"newsletter"},user:{email:"user@example.com"},source:{type:"server",id:"https://example.com/contact",previous_id:""}}),mapping:{name:"SubmitForm",data:{map:{user_data:{map:{email:"user.email"}}}}},out:[["sendServer",h,JSON.stringify({pixel_code:"PIXEL_CODE",partner_name:"walkerOS",data:[{event:"SubmitForm",event_id:"1700000903000-gr0up-1",timestamp:"2023-11-14T22:28:23.000Z",context:{user:{email:"b4c9a289323b21a01c3e940f150eb9b8c542587f1abfd8f0e1cc1ffc5e475514"},page:{url:"https://example.com/contact"}},properties:{}}]}),b]]};export{u as examples,a as schemas};//# sourceMappingURL=dev.mjs.map
1
+ var e=Object.defineProperty,t=(t,a)=>{for(var n in a)e(t,n,{get:a[n],enumerable:!0})},a={};t(a,{MappingSchema:()=>s,SettingsSchema:()=>i,StandardEventNameSchema:()=>p,mapping:()=>m,settings:()=>c});import{zodToSchema as n}from"@walkeros/core/dev";import{z as r}from"@walkeros/core/dev";var i=r.object({pixelCode:r.string().min(1).describe("TikTok Pixel Code from Events Manager (like C0ABCDEF12345)"),accessToken:r.string().min(1).describe("Events API access token from TikTok Events Manager"),url:r.string().url().describe("Custom Events API endpoint URL").optional(),test_event_code:r.string().describe("Test event code for debugging in TikTok Events Manager (like TEST12345)").optional(),doNotHash:r.array(r.string()).describe("User data fields to skip hashing (like ['email', 'phone_number'])").optional(),user_data:r.record(r.string(),r.string()).describe("Mapping for user data fields (like { email: 'user.email' })").optional(),partner_name:r.string().describe("Partner name for TikTok attribution").optional()});import{z as o}from"@walkeros/core/dev";var s=o.object({});import{z as d}from"@walkeros/core/dev";var p=d.union([d.enum(["ViewContent","ClickButton","Search","AddToWishlist","AddToCart","InitiateCheckout","AddPaymentInfo","CompletePayment","PlaceAnOrder","Contact","Download","SubmitForm","CompleteRegistration","Subscribe"]),d.string()]),c=n(i),m=n(s),u={};t(u,{env:()=>l,step:()=>y});var l={};t(l,{push:()=>v,simulation:()=>g});var v={sendServer:async function(e,t,a){return{ok:!0,data:{code:0,message:"OK"}}}},g=["sendServer"],y={};t(y,{addToCart:()=>S,lead:()=>x,pageView:()=>T,purchase:()=>f});import{getEvent as h,isObject as k}from"@walkeros/core";var _="https://business-api.tiktok.com/open_api/v1.3/event/track/",b={headers:{"Access-Token":"s3cr3t","Content-Type":"application/json"}},f={title:"Complete payment",description:"A completed order is sent to the TikTok Events API as a CompletePayment with value, currency, and contents.",in:h("order complete",{timestamp:17000009e5,data:{id:"ORD-300",total:249.99,currency:"EUR"},nested:[{entity:"product",data:{id:"SKU-A1",name:"Widget Pro",price:124.99,quantity:2}}],user:{id:"user-123",device:"device-456"},source:{type:"server",id:"https://shop.example.com/checkout/complete",previous_id:""}}),mapping:{name:"CompletePayment",data:{map:{value:"data.total",currency:{key:"data.currency",value:"EUR"},order_id:"data.id",content_type:{value:"product"},contents:{loop:["nested",{condition:e=>k(e)&&"product"===e.entity,map:{content_id:"data.id",content_name:"data.name",quantity:{key:"data.quantity",value:1},price:"data.price"}}]},user_data:{map:{external_id:"user.id"}}}}},out:[["sendServer",_,JSON.stringify({pixel_code:"PIXEL_CODE",partner_name:"walkerOS",data:[{event:"CompletePayment",event_id:"1700000900000-gr0up-1",timestamp:"2023-11-14T22:28:20.000Z",context:{user:{external_id:"fcdec6df4d44dbc637c7c5b58efface52a7f8a88535423430255be0bb89bedd8"},page:{url:"https://shop.example.com/checkout/complete"}},properties:{value:249.99,currency:"EUR",order_id:"ORD-300",content_type:"product",contents:[{content_id:"SKU-A1",content_name:"Widget Pro",quantity:2,price:124.99}]}}]}),b]]},S={title:"Add to cart",description:"A product add is sent to TikTok as an AddToCart event with value, currency, and product contents.",in:h("product add",{timestamp:1700000901e3,data:{id:"SKU-B2",name:"Running Shoes",price:89.99,color:"blue"},nested:[{entity:"product",data:{id:"SKU-B2",name:"Running Shoes",price:89.99,quantity:1}}],source:{type:"server",id:"https://shop.example.com/products/running-shoes",previous_id:""}}),mapping:{name:"AddToCart",data:{map:{content_type:{value:"product"},value:"data.price",currency:{value:"EUR"},contents:{loop:["nested",{condition:e=>k(e)&&"product"===e.entity,map:{content_id:"data.id",content_name:"data.name",quantity:{key:"data.quantity",value:1},price:"data.price"}}]}}}},out:[["sendServer",_,JSON.stringify({pixel_code:"PIXEL_CODE",partner_name:"walkerOS",data:[{event:"AddToCart",event_id:"1700000901000-gr0up-1",timestamp:"2023-11-14T22:28:21.000Z",context:{page:{url:"https://shop.example.com/products/running-shoes"}},properties:{content_type:"product",value:89.99,currency:"EUR",contents:[{content_id:"SKU-B2",content_name:"Running Shoes",quantity:1,price:89.99}]}}]}),b]]},T={title:"Page view",description:"A page view is forwarded to TikTok as a page view event with the source URL in the page context.",in:h("page view",{timestamp:1700000902e3,source:{type:"server",id:"https://example.com/docs/",previous_id:""}}),mapping:void 0,out:[["sendServer",_,JSON.stringify({pixel_code:"PIXEL_CODE",partner_name:"walkerOS",data:[{event:"page view",event_id:"1700000902000-gr0up-1",timestamp:"2023-11-14T22:28:22.000Z",context:{page:{url:"https://example.com/docs/"}},properties:{}}]}),b]]},x={title:"Submit form",description:"A newsletter form submission is sent to TikTok as a SubmitForm event with the hashed email in user context.",in:h("form submit",{timestamp:1700000903e3,data:{type:"newsletter"},user:{email:"user@example.com"},source:{type:"server",id:"https://example.com/contact",previous_id:""}}),mapping:{name:"SubmitForm",data:{map:{user_data:{map:{email:"user.email"}}}}},out:[["sendServer",_,JSON.stringify({pixel_code:"PIXEL_CODE",partner_name:"walkerOS",data:[{event:"SubmitForm",event_id:"1700000903000-gr0up-1",timestamp:"2023-11-14T22:28:23.000Z",context:{user:{email:"b4c9a289323b21a01c3e940f150eb9b8c542587f1abfd8f0e1cc1ffc5e475514"},page:{url:"https://example.com/contact"}},properties:{}}]}),b]]};export{u as examples,a 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/schemas/primitives.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 * from './primitives';\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 pixelCode: z\n .string()\n .min(1)\n .describe('TikTok Pixel Code from Events Manager (like C0ABCDEF12345)'),\n accessToken: z\n .string()\n .min(1)\n .describe('Events API access token from TikTok Events Manager'),\n url: z.string().url().describe('Custom Events API endpoint URL').optional(),\n test_event_code: z\n .string()\n .describe(\n 'Test event code for debugging in TikTok Events Manager (like TEST12345)',\n )\n .optional(),\n doNotHash: z\n .array(z.string())\n .describe(\n \"User data fields to skip hashing (like ['email', 'phone_number'])\",\n )\n .optional(),\n user_data: z\n .record(z.string(), z.string())\n .describe(\"Mapping for user data fields (like { email: 'user.email' })\")\n .optional(),\n partner_name: z\n .string()\n .describe('Partner name for TikTok attribution')\n .optional(),\n});\n\nexport type Settings = z.infer<typeof SettingsSchema>;\n","import { z } from '@walkeros/core/dev';\n\n/**\n * TikTok Events API Mapping Schema\n * TikTok Events API has no event-level mapping configuration\n */\nexport const MappingSchema = z.object({});\n\n/**\n * Type inference from MappingSchema\n */\nexport type Mapping = z.infer<typeof MappingSchema>;\n","import { z } from '@walkeros/core/dev';\n\n/**\n * Standard TikTok Event Names\n * https://business-api.tiktok.com/portal/docs?id=1771100865818625\n */\nexport const StandardEventNameSchema = z.union([\n z.enum([\n 'ViewContent',\n 'ClickButton',\n 'Search',\n 'AddToWishlist',\n 'AddToCart',\n 'InitiateCheckout',\n 'AddPaymentInfo',\n 'CompletePayment',\n 'PlaceAnOrder',\n 'Contact',\n 'Download',\n 'SubmitForm',\n 'CompleteRegistration',\n 'Subscribe',\n ]),\n z.string(), // Allow custom event names\n]);\n","export * as env from './env';\nexport * as step from './step';\n","import type { SendDataValue, SendResponse } from '@walkeros/core';\nimport type { SendServerOptions } from '@walkeros/server-core';\nimport type { Env } from '../types';\n\n/**\n * Example environment configurations for TikTok Events API destination\n *\n * These environments provide standardized mock structures for testing\n * and development without requiring actual HTTP requests.\n */\n\n/**\n * Mock sendServer function that simulates successful HTTP responses\n */\nasync function mockSendServer(\n url: string,\n data?: SendDataValue,\n options?: SendServerOptions,\n): Promise<SendResponse> {\n // Simulate successful TikTok API response\n return {\n ok: true,\n data: {\n code: 0,\n message: 'OK',\n },\n };\n}\n\n/**\n * Standard mock environment for push operations\n *\n * Use this for testing TikTok Events API events without making\n * actual HTTP requests to TikTok's servers.\n */\nexport const push: Env = {\n sendServer: mockSendServer,\n};\n\nexport const simulation = ['sendServer'];\n","import type { Flow } from '@walkeros/core';\nimport { getEvent, isObject } from '@walkeros/core';\n\n/**\n * TikTok Events API step examples.\n *\n * At push time, the destination calls\n * `env.sendServer(url, body, { headers })` where `url` is the fixed\n * TikTok Events API endpoint and `body` is the JSON-stringified payload\n * `{ pixel_code, partner_name, data: [tiktokEvent] }`.\n *\n * The test fixture pins `accessToken = 's3cr3t'` and `pixelCode = 'PIXEL_CODE'`.\n *\n * Body fields are emitted in the order the destination constructs them\n * (insertion order matters for `JSON.stringify` string equality):\n * pixel_code, partner_name, data[] with { event, event_id, timestamp,\n * context: { user?, page }, properties }.\n *\n * User identity fields (`email`, `phone_number`, `external_id`) are hashed\n * with SHA-256.\n */\nconst ENDPOINT = 'https://business-api.tiktok.com/open_api/v1.3/event/track/';\nconst HEADERS = {\n headers: {\n 'Access-Token': 's3cr3t',\n 'Content-Type': 'application/json',\n },\n};\n\nexport const purchase: Flow.StepExample = {\n in: getEvent('order complete', {\n timestamp: 1700000900000,\n data: { id: 'ORD-300', total: 249.99, currency: 'EUR' },\n nested: [\n {\n entity: 'product',\n data: { id: 'SKU-A1', name: 'Widget Pro', price: 124.99, quantity: 2 },\n },\n ],\n user: { id: 'user-123', device: 'device-456' },\n source: {\n type: 'server',\n id: 'https://shop.example.com/checkout/complete',\n previous_id: '',\n },\n }),\n mapping: {\n name: 'CompletePayment',\n data: {\n map: {\n value: 'data.total',\n currency: { key: 'data.currency', value: 'EUR' },\n order_id: 'data.id',\n content_type: { value: 'product' },\n contents: {\n loop: [\n 'nested',\n {\n condition: (entity: unknown) =>\n isObject(entity) && entity.entity === 'product',\n map: {\n content_id: 'data.id',\n content_name: 'data.name',\n quantity: { key: 'data.quantity', value: 1 },\n price: 'data.price',\n },\n },\n ],\n },\n user_data: {\n map: {\n external_id: 'user.id',\n },\n },\n },\n },\n },\n out: [\n [\n 'sendServer',\n ENDPOINT,\n JSON.stringify({\n pixel_code: 'PIXEL_CODE',\n partner_name: 'walkerOS',\n data: [\n {\n event: 'CompletePayment',\n event_id: '1700000900000-gr0up-1',\n timestamp: '2023-11-14T22:28:20.000Z',\n context: {\n user: {\n external_id:\n 'fcdec6df4d44dbc637c7c5b58efface52a7f8a88535423430255be0bb89bedd8',\n },\n page: {\n url: 'https://shop.example.com/checkout/complete',\n },\n },\n properties: {\n value: 249.99,\n currency: 'EUR',\n order_id: 'ORD-300',\n content_type: 'product',\n contents: [\n {\n content_id: 'SKU-A1',\n content_name: 'Widget Pro',\n quantity: 2,\n price: 124.99,\n },\n ],\n },\n },\n ],\n }),\n HEADERS,\n ],\n ],\n};\n\nexport const addToCart: Flow.StepExample = {\n in: getEvent('product add', {\n timestamp: 1700000901000,\n data: {\n id: 'SKU-B2',\n name: 'Running Shoes',\n price: 89.99,\n color: 'blue',\n },\n nested: [\n {\n entity: 'product',\n data: {\n id: 'SKU-B2',\n name: 'Running Shoes',\n price: 89.99,\n quantity: 1,\n },\n },\n ],\n source: {\n type: 'server',\n id: 'https://shop.example.com/products/running-shoes',\n previous_id: '',\n },\n }),\n mapping: {\n name: 'AddToCart',\n data: {\n map: {\n content_type: { value: 'product' },\n value: 'data.price',\n currency: { value: 'EUR' },\n contents: {\n loop: [\n 'nested',\n {\n condition: (entity: unknown) =>\n isObject(entity) && entity.entity === 'product',\n map: {\n content_id: 'data.id',\n content_name: 'data.name',\n quantity: { key: 'data.quantity', value: 1 },\n price: 'data.price',\n },\n },\n ],\n },\n },\n },\n },\n out: [\n [\n 'sendServer',\n ENDPOINT,\n JSON.stringify({\n pixel_code: 'PIXEL_CODE',\n partner_name: 'walkerOS',\n data: [\n {\n event: 'AddToCart',\n event_id: '1700000901000-gr0up-1',\n timestamp: '2023-11-14T22:28:21.000Z',\n context: {\n page: {\n url: 'https://shop.example.com/products/running-shoes',\n },\n },\n properties: {\n content_type: 'product',\n value: 89.99,\n currency: 'EUR',\n contents: [\n {\n content_id: 'SKU-B2',\n content_name: 'Running Shoes',\n quantity: 1,\n price: 89.99,\n },\n ],\n },\n },\n ],\n }),\n HEADERS,\n ],\n ],\n};\n\nexport const pageView: Flow.StepExample = {\n in: getEvent('page view', {\n timestamp: 1700000902000,\n source: {\n type: 'server',\n id: 'https://example.com/docs/',\n previous_id: '',\n },\n }),\n mapping: undefined,\n out: [\n [\n 'sendServer',\n ENDPOINT,\n JSON.stringify({\n pixel_code: 'PIXEL_CODE',\n partner_name: 'walkerOS',\n data: [\n {\n event: 'page view',\n event_id: '1700000902000-gr0up-1',\n timestamp: '2023-11-14T22:28:22.000Z',\n context: {\n page: {\n url: 'https://example.com/docs/',\n },\n },\n properties: {},\n },\n ],\n }),\n HEADERS,\n ],\n ],\n};\n\nexport const lead: Flow.StepExample = {\n in: getEvent('form submit', {\n timestamp: 1700000903000,\n data: { type: 'newsletter' },\n user: { email: 'user@example.com' },\n source: {\n type: 'server',\n id: 'https://example.com/contact',\n previous_id: '',\n },\n }),\n mapping: {\n name: 'SubmitForm',\n data: {\n map: {\n user_data: {\n map: {\n email: 'user.email',\n },\n },\n },\n },\n },\n out: [\n [\n 'sendServer',\n ENDPOINT,\n JSON.stringify({\n pixel_code: 'PIXEL_CODE',\n partner_name: 'walkerOS',\n data: [\n {\n event: 'SubmitForm',\n event_id: '1700000903000-gr0up-1',\n timestamp: '2023-11-14T22:28:23.000Z',\n context: {\n user: {\n // sha256('user@example.com')\n email:\n 'b4c9a289323b21a01c3e940f150eb9b8c542587f1abfd8f0e1cc1ffc5e475514',\n },\n page: {\n url: 'https://example.com/contact',\n },\n },\n properties: {},\n },\n ],\n }),\n HEADERS,\n ],\n ],\n};\n"],"mappings":"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","names":["z","z"]}
1
+ {"version":3,"sources":["../src/schemas/index.ts","../src/schemas/settings.ts","../src/schemas/mapping.ts","../src/schemas/primitives.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 * from './primitives';\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 pixelCode: z\n .string()\n .min(1)\n .describe('TikTok Pixel Code from Events Manager (like C0ABCDEF12345)'),\n accessToken: z\n .string()\n .min(1)\n .describe('Events API access token from TikTok Events Manager'),\n url: z.string().url().describe('Custom Events API endpoint URL').optional(),\n test_event_code: z\n .string()\n .describe(\n 'Test event code for debugging in TikTok Events Manager (like TEST12345)',\n )\n .optional(),\n doNotHash: z\n .array(z.string())\n .describe(\n \"User data fields to skip hashing (like ['email', 'phone_number'])\",\n )\n .optional(),\n user_data: z\n .record(z.string(), z.string())\n .describe(\"Mapping for user data fields (like { email: 'user.email' })\")\n .optional(),\n partner_name: z\n .string()\n .describe('Partner name for TikTok attribution')\n .optional(),\n});\n\nexport type Settings = z.infer<typeof SettingsSchema>;\n","import { z } from '@walkeros/core/dev';\n\n/**\n * TikTok Events API Mapping Schema\n * TikTok Events API has no event-level mapping configuration\n */\nexport const MappingSchema = z.object({});\n\n/**\n * Type inference from MappingSchema\n */\nexport type Mapping = z.infer<typeof MappingSchema>;\n","import { z } from '@walkeros/core/dev';\n\n/**\n * Standard TikTok Event Names\n * https://business-api.tiktok.com/portal/docs?id=1771100865818625\n */\nexport const StandardEventNameSchema = z.union([\n z.enum([\n 'ViewContent',\n 'ClickButton',\n 'Search',\n 'AddToWishlist',\n 'AddToCart',\n 'InitiateCheckout',\n 'AddPaymentInfo',\n 'CompletePayment',\n 'PlaceAnOrder',\n 'Contact',\n 'Download',\n 'SubmitForm',\n 'CompleteRegistration',\n 'Subscribe',\n ]),\n z.string(), // Allow custom event names\n]);\n","export * as env from './env';\nexport * as step from './step';\n","import type { SendDataValue, SendResponse } from '@walkeros/core';\nimport type { SendServerOptions } from '@walkeros/server-core';\nimport type { Env } from '../types';\n\n/**\n * Example environment configurations for TikTok Events API destination\n *\n * These environments provide standardized mock structures for testing\n * and development without requiring actual HTTP requests.\n */\n\n/**\n * Mock sendServer function that simulates successful HTTP responses\n */\nasync function mockSendServer(\n url: string,\n data?: SendDataValue,\n options?: SendServerOptions,\n): Promise<SendResponse> {\n // Simulate successful TikTok API response\n return {\n ok: true,\n data: {\n code: 0,\n message: 'OK',\n },\n };\n}\n\n/**\n * Standard mock environment for push operations\n *\n * Use this for testing TikTok Events API events without making\n * actual HTTP requests to TikTok's servers.\n */\nexport const push: Env = {\n sendServer: mockSendServer,\n};\n\nexport const simulation = ['sendServer'];\n","import type { Flow } from '@walkeros/core';\nimport { getEvent, isObject } from '@walkeros/core';\n\n/**\n * TikTok Events API step examples.\n *\n * At push time, the destination calls\n * `env.sendServer(url, body, { headers })` where `url` is the fixed\n * TikTok Events API endpoint and `body` is the JSON-stringified payload\n * `{ pixel_code, partner_name, data: [tiktokEvent] }`.\n *\n * The test fixture pins `accessToken = 's3cr3t'` and `pixelCode = 'PIXEL_CODE'`.\n *\n * Body fields are emitted in the order the destination constructs them\n * (insertion order matters for `JSON.stringify` string equality):\n * pixel_code, partner_name, data[] with { event, event_id, timestamp,\n * context: { user?, page }, properties }.\n *\n * User identity fields (`email`, `phone_number`, `external_id`) are hashed\n * with SHA-256.\n */\nconst ENDPOINT = 'https://business-api.tiktok.com/open_api/v1.3/event/track/';\nconst HEADERS = {\n headers: {\n 'Access-Token': 's3cr3t',\n 'Content-Type': 'application/json',\n },\n};\n\nexport const purchase: Flow.StepExample = {\n title: 'Complete payment',\n description:\n 'A completed order is sent to the TikTok Events API as a CompletePayment with value, currency, and contents.',\n in: getEvent('order complete', {\n timestamp: 1700000900000,\n data: { id: 'ORD-300', total: 249.99, currency: 'EUR' },\n nested: [\n {\n entity: 'product',\n data: { id: 'SKU-A1', name: 'Widget Pro', price: 124.99, quantity: 2 },\n },\n ],\n user: { id: 'user-123', device: 'device-456' },\n source: {\n type: 'server',\n id: 'https://shop.example.com/checkout/complete',\n previous_id: '',\n },\n }),\n mapping: {\n name: 'CompletePayment',\n data: {\n map: {\n value: 'data.total',\n currency: { key: 'data.currency', value: 'EUR' },\n order_id: 'data.id',\n content_type: { value: 'product' },\n contents: {\n loop: [\n 'nested',\n {\n condition: (entity: unknown) =>\n isObject(entity) && entity.entity === 'product',\n map: {\n content_id: 'data.id',\n content_name: 'data.name',\n quantity: { key: 'data.quantity', value: 1 },\n price: 'data.price',\n },\n },\n ],\n },\n user_data: {\n map: {\n external_id: 'user.id',\n },\n },\n },\n },\n },\n out: [\n [\n 'sendServer',\n ENDPOINT,\n JSON.stringify({\n pixel_code: 'PIXEL_CODE',\n partner_name: 'walkerOS',\n data: [\n {\n event: 'CompletePayment',\n event_id: '1700000900000-gr0up-1',\n timestamp: '2023-11-14T22:28:20.000Z',\n context: {\n user: {\n external_id:\n 'fcdec6df4d44dbc637c7c5b58efface52a7f8a88535423430255be0bb89bedd8',\n },\n page: {\n url: 'https://shop.example.com/checkout/complete',\n },\n },\n properties: {\n value: 249.99,\n currency: 'EUR',\n order_id: 'ORD-300',\n content_type: 'product',\n contents: [\n {\n content_id: 'SKU-A1',\n content_name: 'Widget Pro',\n quantity: 2,\n price: 124.99,\n },\n ],\n },\n },\n ],\n }),\n HEADERS,\n ],\n ],\n};\n\nexport const addToCart: Flow.StepExample = {\n title: 'Add to cart',\n description:\n 'A product add is sent to TikTok as an AddToCart event with value, currency, and product contents.',\n in: getEvent('product add', {\n timestamp: 1700000901000,\n data: {\n id: 'SKU-B2',\n name: 'Running Shoes',\n price: 89.99,\n color: 'blue',\n },\n nested: [\n {\n entity: 'product',\n data: {\n id: 'SKU-B2',\n name: 'Running Shoes',\n price: 89.99,\n quantity: 1,\n },\n },\n ],\n source: {\n type: 'server',\n id: 'https://shop.example.com/products/running-shoes',\n previous_id: '',\n },\n }),\n mapping: {\n name: 'AddToCart',\n data: {\n map: {\n content_type: { value: 'product' },\n value: 'data.price',\n currency: { value: 'EUR' },\n contents: {\n loop: [\n 'nested',\n {\n condition: (entity: unknown) =>\n isObject(entity) && entity.entity === 'product',\n map: {\n content_id: 'data.id',\n content_name: 'data.name',\n quantity: { key: 'data.quantity', value: 1 },\n price: 'data.price',\n },\n },\n ],\n },\n },\n },\n },\n out: [\n [\n 'sendServer',\n ENDPOINT,\n JSON.stringify({\n pixel_code: 'PIXEL_CODE',\n partner_name: 'walkerOS',\n data: [\n {\n event: 'AddToCart',\n event_id: '1700000901000-gr0up-1',\n timestamp: '2023-11-14T22:28:21.000Z',\n context: {\n page: {\n url: 'https://shop.example.com/products/running-shoes',\n },\n },\n properties: {\n content_type: 'product',\n value: 89.99,\n currency: 'EUR',\n contents: [\n {\n content_id: 'SKU-B2',\n content_name: 'Running Shoes',\n quantity: 1,\n price: 89.99,\n },\n ],\n },\n },\n ],\n }),\n HEADERS,\n ],\n ],\n};\n\nexport const pageView: Flow.StepExample = {\n title: 'Page view',\n description:\n 'A page view is forwarded to TikTok as a page view event with the source URL in the page context.',\n in: getEvent('page view', {\n timestamp: 1700000902000,\n source: {\n type: 'server',\n id: 'https://example.com/docs/',\n previous_id: '',\n },\n }),\n mapping: undefined,\n out: [\n [\n 'sendServer',\n ENDPOINT,\n JSON.stringify({\n pixel_code: 'PIXEL_CODE',\n partner_name: 'walkerOS',\n data: [\n {\n event: 'page view',\n event_id: '1700000902000-gr0up-1',\n timestamp: '2023-11-14T22:28:22.000Z',\n context: {\n page: {\n url: 'https://example.com/docs/',\n },\n },\n properties: {},\n },\n ],\n }),\n HEADERS,\n ],\n ],\n};\n\nexport const lead: Flow.StepExample = {\n title: 'Submit form',\n description:\n 'A newsletter form submission is sent to TikTok as a SubmitForm event with the hashed email in user context.',\n in: getEvent('form submit', {\n timestamp: 1700000903000,\n data: { type: 'newsletter' },\n user: { email: 'user@example.com' },\n source: {\n type: 'server',\n id: 'https://example.com/contact',\n previous_id: '',\n },\n }),\n mapping: {\n name: 'SubmitForm',\n data: {\n map: {\n user_data: {\n map: {\n email: 'user.email',\n },\n },\n },\n },\n },\n out: [\n [\n 'sendServer',\n ENDPOINT,\n JSON.stringify({\n pixel_code: 'PIXEL_CODE',\n partner_name: 'walkerOS',\n data: [\n {\n event: 'SubmitForm',\n event_id: '1700000903000-gr0up-1',\n timestamp: '2023-11-14T22:28:23.000Z',\n context: {\n user: {\n // sha256('user@example.com')\n email:\n 'b4c9a289323b21a01c3e940f150eb9b8c542587f1abfd8f0e1cc1ffc5e475514',\n },\n page: {\n url: 'https://example.com/contact',\n },\n },\n properties: {},\n },\n ],\n }),\n HEADERS,\n ],\n ],\n};\n"],"mappings":"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","names":["z","z"]}
@@ -62,6 +62,8 @@ var HEADERS = {
62
62
  }
63
63
  };
64
64
  var purchase = {
65
+ title: "Complete payment",
66
+ description: "A completed order is sent to the TikTok Events API as a CompletePayment with value, currency, and contents.",
65
67
  in: (0, import_core.getEvent)("order complete", {
66
68
  timestamp: 17000009e5,
67
69
  data: { id: "ORD-300", total: 249.99, currency: "EUR" },
@@ -150,6 +152,8 @@ var purchase = {
150
152
  ]
151
153
  };
152
154
  var addToCart = {
155
+ title: "Add to cart",
156
+ description: "A product add is sent to TikTok as an AddToCart event with value, currency, and product contents.",
153
157
  in: (0, import_core.getEvent)("product add", {
154
158
  timestamp: 1700000901e3,
155
159
  data: {
@@ -237,6 +241,8 @@ var addToCart = {
237
241
  ]
238
242
  };
239
243
  var pageView = {
244
+ title: "Page view",
245
+ description: "A page view is forwarded to TikTok as a page view event with the source URL in the page context.",
240
246
  in: (0, import_core.getEvent)("page view", {
241
247
  timestamp: 1700000902e3,
242
248
  source: {
@@ -272,6 +278,8 @@ var pageView = {
272
278
  ]
273
279
  };
274
280
  var lead = {
281
+ title: "Submit form",
282
+ description: "A newsletter form submission is sent to TikTok as a SubmitForm event with the hashed email in user context.",
275
283
  in: (0, import_core.getEvent)("form submit", {
276
284
  timestamp: 1700000903e3,
277
285
  data: { type: "newsletter" },
@@ -41,6 +41,8 @@ var HEADERS = {
41
41
  }
42
42
  };
43
43
  var purchase = {
44
+ title: "Complete payment",
45
+ description: "A completed order is sent to the TikTok Events API as a CompletePayment with value, currency, and contents.",
44
46
  in: getEvent("order complete", {
45
47
  timestamp: 17000009e5,
46
48
  data: { id: "ORD-300", total: 249.99, currency: "EUR" },
@@ -129,6 +131,8 @@ var purchase = {
129
131
  ]
130
132
  };
131
133
  var addToCart = {
134
+ title: "Add to cart",
135
+ description: "A product add is sent to TikTok as an AddToCart event with value, currency, and product contents.",
132
136
  in: getEvent("product add", {
133
137
  timestamp: 1700000901e3,
134
138
  data: {
@@ -216,6 +220,8 @@ var addToCart = {
216
220
  ]
217
221
  };
218
222
  var pageView = {
223
+ title: "Page view",
224
+ description: "A page view is forwarded to TikTok as a page view event with the source URL in the page context.",
219
225
  in: getEvent("page view", {
220
226
  timestamp: 1700000902e3,
221
227
  source: {
@@ -251,6 +257,8 @@ var pageView = {
251
257
  ]
252
258
  };
253
259
  var lead = {
260
+ title: "Submit form",
261
+ description: "A newsletter form submission is sent to TikTok as a SubmitForm event with the hashed email in user context.",
254
262
  in: getEvent("form submit", {
255
263
  timestamp: 1700000903e3,
256
264
  data: { type: "newsletter" },
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$meta": {
3
3
  "package": "@walkeros/server-destination-tiktok",
4
- "version": "3.4.0",
4
+ "version": "3.4.1",
5
5
  "type": "destination",
6
6
  "platform": [
7
7
  "server"
@@ -81,6 +81,8 @@
81
81
  },
82
82
  "step": {
83
83
  "addToCart": {
84
+ "title": "Add to cart",
85
+ "description": "A product add is sent to TikTok as an AddToCart event with value, currency, and product contents.",
84
86
  "in": {
85
87
  "name": "product add",
86
88
  "data": {
@@ -129,7 +131,7 @@
129
131
  "group": "gr0up",
130
132
  "count": 1,
131
133
  "version": {
132
- "source": "3.4.0",
134
+ "source": "3.4.1",
133
135
  "tagging": 1
134
136
  },
135
137
  "source": {
@@ -186,6 +188,8 @@
186
188
  ]
187
189
  },
188
190
  "lead": {
191
+ "title": "Submit form",
192
+ "description": "A newsletter form submission is sent to TikTok as a SubmitForm event with the hashed email in user context.",
189
193
  "in": {
190
194
  "name": "form submit",
191
195
  "data": {
@@ -233,7 +237,7 @@
233
237
  "group": "gr0up",
234
238
  "count": 1,
235
239
  "version": {
236
- "source": "3.4.0",
240
+ "source": "3.4.1",
237
241
  "tagging": 1
238
242
  },
239
243
  "source": {
@@ -269,6 +273,8 @@
269
273
  ]
270
274
  },
271
275
  "pageView": {
276
+ "title": "Page view",
277
+ "description": "A page view is forwarded to TikTok as a page view event with the source URL in the page context.",
272
278
  "in": {
273
279
  "name": "page view",
274
280
  "data": {
@@ -323,7 +329,7 @@
323
329
  "group": "gr0up",
324
330
  "count": 1,
325
331
  "version": {
326
- "source": "3.4.0",
332
+ "source": "3.4.1",
327
333
  "tagging": 1
328
334
  },
329
335
  "source": {
@@ -347,6 +353,8 @@
347
353
  ]
348
354
  },
349
355
  "purchase": {
356
+ "title": "Complete payment",
357
+ "description": "A completed order is sent to the TikTok Events API as a CompletePayment with value, currency, and contents.",
350
358
  "in": {
351
359
  "name": "order complete",
352
360
  "data": {
@@ -393,7 +401,7 @@
393
401
  "group": "gr0up",
394
402
  "count": 1,
395
403
  "version": {
396
- "source": "3.4.0",
404
+ "source": "3.4.1",
397
405
  "tagging": 1
398
406
  },
399
407
  "source": {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@walkeros/server-destination-tiktok",
3
3
  "description": "TikTok Events API server destination for walkerOS",
4
- "version": "3.4.0",
4
+ "version": "3.4.1",
5
5
  "license": "MIT",
6
6
  "exports": {
7
7
  ".": {
@@ -34,11 +34,11 @@
34
34
  "update": "npx npm-check-updates -u && npm update"
35
35
  },
36
36
  "dependencies": {
37
- "@walkeros/core": "3.4.0",
38
- "@walkeros/server-core": "3.4.0"
37
+ "@walkeros/core": "3.4.1",
38
+ "@walkeros/server-core": "3.4.1"
39
39
  },
40
40
  "devDependencies": {
41
- "@walkeros/collector": "3.4.0"
41
+ "@walkeros/collector": "3.4.1"
42
42
  },
43
43
  "repository": {
44
44
  "url": "git+https://github.com/elbwalker/walkerOS.git",