export type WhatsappFlow = { id: string name: string status: 'DRAFT' | 'PUBLISHED' | 'DEPRECATED' categories: Array validation_errors: Array<{ error: string error_type: string message: string }> preview: { preview_url: string expires_at: string } endpoint_uri?: string } // Ref.: https://developers.facebook.com/documentation/business-messaging/whatsapp/templates/supported-languages/ export const WHATSAPP_TEMPLATE_LANGUAGES = [ 'af', 'sq', 'ar', 'ar_EG', 'ar_AE', 'ar_LB', 'ar_MA', 'ar_QA', 'az', 'be_BY', 'bn', 'bn_IN', 'bg', 'ca', 'zh_CN', 'zh_HK', 'zh_TW', 'hr', 'cs', 'da', 'prs_AF', 'nl', 'nl_BE', 'en', 'en_GB', 'en_US', 'en_AE', 'en_AU', 'en_CA', 'en_GH', 'en_IE', 'en_IN', 'en_JM', 'en_MY', 'en_NZ', 'en_QA', 'en_SG', 'en_UG', 'en_ZA', 'et', 'fil', 'fi', 'fr', 'fr_BE', 'fr_CA', 'fr_CH', 'fr_CI', 'fr_MA', 'ka', 'de', 'de_AT', 'de_CH', 'el', 'gu', 'ha', 'he', 'hi', 'hu', 'id', 'ga', 'it', 'ja', 'kn', 'kk', 'rw_RW', 'ko', 'ky_KG', 'lo', 'lv', 'lt', 'mk', 'ms', 'ml', 'mr', 'nb', 'ps_AF', 'fa', 'pl', 'pt_BR', 'pt_PT', 'pa', 'ro', 'ru', 'sr', 'si_LK', 'sk', 'sl', 'es', 'es_AR', 'es_CL', 'es_CO', 'es_CR', 'es_DO', 'es_EC', 'es_HN', 'es_MX', 'es_PA', 'es_PE', 'es_ES', 'es_UY', 'sw', 'sv', 'ta', 'te', 'th', 'tr', 'uk', 'ur', 'uz', 'vi', 'zu', ] as const export type WhatsAppTemplateLanguage = (typeof WHATSAPP_TEMPLATE_LANGUAGES)[number] // Components ref.: https://developers.facebook.com/docs/whatsapp/business-management-api/message-templates/components export type HandleFormats = 'IMAGE' | 'VIDEO' | 'DOCUMENT' type ExampleType = T extends 'TEXT' ? { header_text?: Array } : T extends HandleFormats ? { header_handle?: Array } : never export type HeaderComponent = { type: 'HEADER' format: T text?: T extends 'TEXT' ? string : never example?: ExampleType } export type BodyComponent = { type: 'BODY' text: string example?: { body_text: [Array] } } export type FooterComponent = { type: 'FOOTER' text: string } export type ButtonComponent = { type: 'BUTTONS' buttons: Array<{ type: string // biome-ignore lint/suspicious/noExplicitAny: Too hard to type this properly [key: string]: any }> } export type CarouselComponent = { type: 'CAROUSEL' cards: Array<{ components: Array }> } export type UnknownComponent = | HeaderComponent<'TEXT' | 'LOCATION' | HandleFormats> | BodyComponent | FooterComponent | ButtonComponent | CarouselComponent export type MessageTemplate = { id: string name: string category: 'AUTHENTICATION' | 'MARKETING' | 'UTILITY' status: 'APPROVED' | 'REJECTED' | 'PENDING' rejected_reason: string language: WhatsAppTemplateLanguage last_update_time?: string components: Array } export type MessageTemplateVariable = { type: 'BODY' | 'MEDIA' | 'BUTTON' example?: string } export type MessageTemplatePreview = { headerFormat?: 'TEXT' | 'LOCATION' | 'IMAGE' | 'VIDEO' | 'DOCUMENT' headerText?: string bodyText?: string footerText?: string buttons: Array }