import type { Bot, BotRelationships } from '../apis/bots' import type { Campaign, CampaignRelationships } from '../apis/campaigns' import type { Contact, ContactRelationships } from '../apis/contacts' import type { Department, DepartmentRelationships } from '../apis/departments' import type { Message, MessageRelationships } from '../apis/messages' import type { Organization, OrganizationRelationships } from '../apis/organizations' import type { Person, PersonRelationships } from '../apis/people' import type { Pipeline, PipelineRelationships } from '../apis/pipeline' import type { QuickReply, QuickReplyRelationships } from '../apis/quickReplies' import type { Role, RoleRelationships } from '../apis/roles' import type { Service, ServiceRelationships } from '../apis/services' import type { Tag, TagRelationships } from '../apis/tags' import type { Ticket, TicketRelationships } from '../apis/tickets' import type { TicketTopic } from '../apis/ticketTopics' import type { User, UserRelationships } from '../apis/users' // ─── Webhook Events ────────────────────────────────────────────────────────── export type WebhookEvent = | 'message.created' | 'message.updated' | 'ticket.created' | 'ticket.updated' | 'service.created' | 'service.updated' | 'service.destroyed' | 'contact.created' | 'contact.updated' | 'contact.destroyed' | 'people.created' | 'people.updated' | 'people.destroyed' | 'organization.created' | 'organization.updated' | 'organization.destroyed' | 'user.created' | 'user.updated' | 'user.destroyed' | 'department.created' | 'department.updated' | 'department.destroyed' | 'ticketTopics.created' | 'ticketTopics.updated' | 'ticketTopics.destroyed' | 'role.created' | 'role.updated' | 'role.destroyed' | 'bot.created' | 'bot.updated' | 'bot.destroyed' | 'bot.command' | 'bot.enter-context' | 'bot.leave-context' | 'bot.api-signal' | 'quickReplies.created' | 'quickReplies.updated' | 'quickReplies.destroyed' | 'tag.created' | 'tag.updated' | 'tag.destroyed' | 'campaign.created' | 'campaign.updated' | 'campaign.destroyed' | 'pipeline.created' | 'pipeline.updated' // ─── Event → Payload map ───────────────────────────────────────────────────── export type BotCommandData = { id: string contactId: string accountId: string command: string message: Message } export interface WebhookEventPayloadMap { 'message.created': Omit 'message.updated': Omit 'ticket.created': Omit 'ticket.updated': Omit 'service.created': Omit 'service.updated': Omit 'service.destroyed': Omit 'contact.created': Omit 'contact.updated': Omit 'contact.destroyed': Omit 'people.created': Omit 'people.updated': Omit 'people.destroyed': Omit 'organization.created': Omit 'organization.updated': Omit 'organization.destroyed': Omit 'user.created': Omit 'user.updated': Omit 'user.destroyed': Omit 'department.created': Omit 'department.updated': Omit 'department.destroyed': Omit 'ticketTopics.created': TicketTopic 'ticketTopics.updated': TicketTopic 'ticketTopics.destroyed': TicketTopic 'role.created': Omit 'role.updated': Omit 'role.destroyed': Omit 'bot.created': Omit 'bot.updated': Omit 'bot.destroyed': Omit 'bot.command': BotCommandData 'bot.enter-context': Omit 'bot.leave-context': Omit 'bot.api-signal': Omit 'quickReplies.created': Omit 'quickReplies.updated': Omit 'quickReplies.destroyed': Omit 'tag.created': Omit 'tag.updated': Omit 'tag.destroyed': Omit 'campaign.created': Omit 'campaign.updated': Omit 'campaign.destroyed': Omit 'pipeline.created': Omit 'pipeline.updated': Omit } // ─── Webhook Envelope ──────────────────────────────────────────────────────── export type WebhookPayload = { event: E data: WebhookEventPayloadMap[E] webhookId: string timestamp: string }