64 lines
2.8 KiB
TypeScript
64 lines
2.8 KiB
TypeScript
import { z } from '@botpress/sdk'
|
|
import { EmailAddressSchema } from './common'
|
|
|
|
const _webhookEmailEventSchema = z.object({
|
|
eventId: z.string().describe('The ID for the webhook event').title('Webhook event ID'),
|
|
/** 'messageId' will be present in almost every case where the event is tied to a sent email
|
|
* (So account status changed webhook events won't have one). The only exception to a sent
|
|
* email webhook event not having a message id is for "[Asynchronous Bounces](https://www.twilio.com/docs/sendgrid/ui/sending-email/bounces#asynchronous-bounces)". */
|
|
messageId: z.string().optional().describe('The ID for the sent email message').title('Email message ID'),
|
|
timestamp: z
|
|
.string()
|
|
.datetime()
|
|
.describe('A UTC datetime representing when the event was triggered')
|
|
.title('Event timestamp'),
|
|
})
|
|
|
|
export const processedEmailEventSchema = _webhookEmailEventSchema.extend({
|
|
sendAt: z
|
|
.string()
|
|
.datetime()
|
|
.describe('A UTC datetime representing when the email is scheduled to be sent at')
|
|
.title('Scheduled send timestamp'),
|
|
})
|
|
|
|
export const deferredEmailEventSchema = _webhookEmailEventSchema.extend({
|
|
attempt: z
|
|
.string()
|
|
.describe('The delivery attempts that have been made for the sent email')
|
|
.title('Delivery attempts'),
|
|
})
|
|
|
|
export const deliveredEmailEventSchema = _webhookEmailEventSchema.extend({
|
|
email: z.string().describe('The designated recipient of the email').title('Email recipient'),
|
|
})
|
|
|
|
// So far this has only been seen in Bounce events, but I will check the other error events
|
|
// to see if they also contain this. Otherwise, I will merge into 'BouncedEmailEventPayload'
|
|
const _emailErrorEventSchema = _webhookEmailEventSchema.extend({
|
|
reason: z.string().optional().describe('The reason this event was triggered').title('Event reason'),
|
|
})
|
|
|
|
export const bouncedEmailEventSchema = _emailErrorEventSchema.extend({
|
|
classification: z.string().describe('The SendGrid classification for the bounce').title('Bounce classification'),
|
|
type: z
|
|
.string()
|
|
.describe('The SendGrid type for why the email bounced (e.g. "bounce", "blocked", etc.)')
|
|
.title('Bounce type'),
|
|
})
|
|
|
|
export const openedEmailEventSchema = _emailErrorEventSchema.extend({
|
|
email: EmailAddressSchema.describe('The designated recipient of the email').title('Email recipient'),
|
|
})
|
|
|
|
export const clickedEmailLinkEventSchema = _emailErrorEventSchema.extend({
|
|
email: EmailAddressSchema.describe('The designated recipient of the email').title('Email recipient'),
|
|
url: z.string().describe('The destination URL of the link that was clicked').title('Clicked URL'),
|
|
urlOffset: z
|
|
.number()
|
|
.describe(
|
|
'A zero-based index, ordered by first appearance, of which link was clicked in an email when it shares a "url" with another link'
|
|
)
|
|
.title('URL offset'),
|
|
})
|