@ -8,4 +8,5 @@ export enum IntegrationBlockType {
|
||||
MAKE_COM = 'Make.com',
|
||||
PABBLY_CONNECT = 'Pabbly',
|
||||
CHATWOOT = 'Chatwoot',
|
||||
PIXEL = 'Pixel',
|
||||
}
|
||||
|
@ -7,3 +7,5 @@ export * from './pabblyConnect'
|
||||
export * from './sendEmail'
|
||||
export * from './webhook'
|
||||
export * from './zapier'
|
||||
export * from './pixel/schemas'
|
||||
export * from './pixel/constants'
|
||||
|
134
packages/schemas/features/blocks/integrations/pixel/constants.ts
Normal file
134
packages/schemas/features/blocks/integrations/pixel/constants.ts
Normal file
@ -0,0 +1,134 @@
|
||||
// Reference: https://developers.facebook.com/docs/meta-pixel/reference#standard-events
|
||||
|
||||
export const pixelEventTypes = [
|
||||
'Lead',
|
||||
'Contact',
|
||||
'CompleteRegistration',
|
||||
'Schedule',
|
||||
'SubmitApplication',
|
||||
'ViewContent',
|
||||
'AddPaymentInfo',
|
||||
'AddToCart',
|
||||
'AddToWishlist',
|
||||
'CustomizeProduct',
|
||||
'Donate',
|
||||
'FindLocation',
|
||||
'InitiateCheckout',
|
||||
'Purchase',
|
||||
'Search',
|
||||
'StartTrial',
|
||||
'Subscribe',
|
||||
] as const
|
||||
|
||||
export const allEventTypes = ['Custom', ...pixelEventTypes] as const
|
||||
|
||||
export const pixelObjectProperties: {
|
||||
key: string
|
||||
type: 'text' | 'code'
|
||||
associatedEvents: (typeof pixelEventTypes)[number][]
|
||||
}[] = [
|
||||
{
|
||||
key: 'content_category',
|
||||
type: 'text',
|
||||
associatedEvents: [
|
||||
'AddPaymentInfo',
|
||||
'AddToWishlist',
|
||||
'InitiateCheckout',
|
||||
'Lead',
|
||||
'Search',
|
||||
'ViewContent',
|
||||
],
|
||||
},
|
||||
{
|
||||
key: 'content_ids',
|
||||
type: 'code',
|
||||
associatedEvents: [
|
||||
'AddPaymentInfo',
|
||||
'AddToCart',
|
||||
'AddToWishlist',
|
||||
'InitiateCheckout',
|
||||
'Purchase',
|
||||
'Search',
|
||||
'ViewContent',
|
||||
],
|
||||
},
|
||||
{
|
||||
key: 'content_name',
|
||||
type: 'text',
|
||||
associatedEvents: [
|
||||
'AddToCart',
|
||||
'AddToWishlist',
|
||||
'CompleteRegistration',
|
||||
'Lead',
|
||||
'Purchase',
|
||||
'ViewContent',
|
||||
],
|
||||
},
|
||||
{
|
||||
key: 'contents',
|
||||
type: 'code',
|
||||
associatedEvents: [
|
||||
'AddPaymentInfo',
|
||||
'AddToCart',
|
||||
'AddToWishlist',
|
||||
'InitiateCheckout',
|
||||
'Purchase',
|
||||
'Search',
|
||||
'ViewContent',
|
||||
],
|
||||
},
|
||||
{
|
||||
key: 'currency',
|
||||
type: 'text',
|
||||
associatedEvents: [
|
||||
'AddPaymentInfo',
|
||||
'AddToCart',
|
||||
'AddToWishlist',
|
||||
'CompleteRegistration',
|
||||
'InitiateCheckout',
|
||||
'Lead',
|
||||
'Purchase',
|
||||
'Search',
|
||||
'StartTrial',
|
||||
'Subscribe',
|
||||
'ViewContent',
|
||||
],
|
||||
},
|
||||
{
|
||||
key: 'num_items',
|
||||
type: 'text',
|
||||
associatedEvents: ['InitiateCheckout', 'Purchase'],
|
||||
},
|
||||
{
|
||||
key: 'predicted_ltv',
|
||||
type: 'text',
|
||||
associatedEvents: ['StartTrial', 'Subscribe'],
|
||||
},
|
||||
{
|
||||
key: 'search_string',
|
||||
type: 'text',
|
||||
associatedEvents: ['Search'],
|
||||
},
|
||||
{
|
||||
key: 'status',
|
||||
type: 'text',
|
||||
associatedEvents: ['CompleteRegistration'],
|
||||
},
|
||||
{
|
||||
key: 'value',
|
||||
type: 'text',
|
||||
associatedEvents: [
|
||||
'AddPaymentInfo',
|
||||
'AddToCart',
|
||||
'AddToWishlist',
|
||||
'CompleteRegistration',
|
||||
'InitiateCheckout',
|
||||
'Lead',
|
||||
'Purchase',
|
||||
'Search',
|
||||
'StartTrial',
|
||||
'Subscribe',
|
||||
'ViewContent',
|
||||
],
|
||||
},
|
||||
]
|
@ -0,0 +1,51 @@
|
||||
import { z } from 'zod'
|
||||
import { pixelEventTypes } from './constants'
|
||||
import { blockBaseSchema } from '../../baseSchemas'
|
||||
import { IntegrationBlockType } from '../enums'
|
||||
|
||||
const basePixelOptionSchema = z.object({
|
||||
pixelId: z.string().optional(),
|
||||
params: z
|
||||
.array(
|
||||
z.object({
|
||||
id: z.string(),
|
||||
key: z.string().optional(),
|
||||
value: z.any().optional(),
|
||||
})
|
||||
)
|
||||
.optional(),
|
||||
})
|
||||
|
||||
const initialPixelOptionSchema = basePixelOptionSchema.merge(
|
||||
z.object({
|
||||
eventType: z.undefined(),
|
||||
})
|
||||
)
|
||||
|
||||
const standardPixelEventOptionSchema = basePixelOptionSchema.merge(
|
||||
z.object({
|
||||
eventType: z.enum(pixelEventTypes),
|
||||
})
|
||||
)
|
||||
|
||||
const customPixelOptionSchema = basePixelOptionSchema.merge(
|
||||
z.object({
|
||||
eventType: z.enum(['Custom']),
|
||||
name: z.string().optional(),
|
||||
})
|
||||
)
|
||||
|
||||
export const pixelOptionsSchema = z.discriminatedUnion('eventType', [
|
||||
initialPixelOptionSchema,
|
||||
standardPixelEventOptionSchema,
|
||||
customPixelOptionSchema,
|
||||
])
|
||||
|
||||
export const pixelBlockSchema = blockBaseSchema.merge(
|
||||
z.object({
|
||||
type: z.enum([IntegrationBlockType.PIXEL]),
|
||||
options: pixelOptionsSchema,
|
||||
})
|
||||
)
|
||||
|
||||
export type PixelBlock = z.infer<typeof pixelBlockSchema>
|
@ -1,9 +1,9 @@
|
||||
import { ZodDiscriminatedUnionOption, z } from 'zod'
|
||||
import { z } from 'zod'
|
||||
import { BubbleBlockType } from './bubbles/enums'
|
||||
import { choiceInputSchema } from './inputs/choice'
|
||||
import { InputBlockType } from './inputs/enums'
|
||||
import { IntegrationBlockType } from './integrations/enums'
|
||||
import { ConditionBlock, conditionBlockSchema } from './logic/condition'
|
||||
import { conditionBlockSchema } from './logic/condition'
|
||||
import { LogicBlockType } from './logic/enums'
|
||||
import { blockBaseSchema } from './baseSchemas'
|
||||
import { startBlockSchema } from './start/schemas'
|
||||
@ -31,6 +31,7 @@ import {
|
||||
googleSheetsBlockSchema,
|
||||
makeComBlockSchema,
|
||||
pabblyConnectBlockSchema,
|
||||
pixelBlockSchema,
|
||||
sendEmailBlockSchema,
|
||||
webhookBlockSchema,
|
||||
zapierBlockSchema,
|
||||
@ -125,6 +126,7 @@ export const blockSchema = z.discriminatedUnion('type', [
|
||||
sendEmailBlockSchema,
|
||||
webhookBlockSchema,
|
||||
zapierBlockSchema,
|
||||
pixelBlockSchema,
|
||||
])
|
||||
|
||||
export type Block = z.infer<typeof blockSchema>
|
||||
|
Reference in New Issue
Block a user