UNPKG

@calculusky/meta-whatsapp-sdk

Version:
190 lines (189 loc) 6.67 kB
import { RequesterResponseData } from "./requester"; export declare const enum MessageTypesEnum { Template = "template", Text = "text", Image = "image", Document = "document", Video = "video", Audio = "audio", Sticker = "sticker", Reaction = "reaction" } export type ComponentTypes = "header" | "body" | "button"; export type GeneralMessageBody = { messaging_product: "whatsapp"; }; export type ParametersTypes = "currency" | "date_time" | "document" | "image" | "text" | "video" | "payload"; type ParametersObject<T extends ParametersTypes> = { type: T; }; type ConTextObject = { message_id: string; }; export type MessageRequestBody<T extends MessageTypesEnum> = GeneralMessageBody & { recipient_type?: "individual"; to: string; context?: ConTextObject; type: T; } & { [K in T]: T extends keyof MessageObjectMap<ComponentTypes> ? MessageObjectMap<ComponentTypes>[T] : never; }; export type MessagesResponse = GeneralMessageBody & { contacts: [ { input: string; wa_id: string; } ]; messages: [ { id: string; message_status: string; } ]; }; type SimpleTextObject = { text: string; }; type TextParametersObject = ParametersObject<"text"> & SimpleTextObject; type CurrencyObject = { fallback_value: string; code: CurrencyCodes; amount_1000: number; }; type CurrencyParametersObject = ParametersObject<"currency"> & { currency: CurrencyObject; }; type DateTimeObject = { fallback_value: string; }; type DateTimeParametersObject = ParametersObject<"date_time"> & { date_time: DateTimeObject; }; type MetaDocumentMediaObject = { id: string; link?: never; caption?: string; filename?: string; }; type HostedDocumentMediaObject = { id?: never; link: string; caption?: string; filename?: string; }; type DocumentParametersObject = ParametersObject<"document"> & DocumentMediaObject; type MetaImageMediaObject = { id: string; link?: never; caption?: string; }; type HostedImageMediaObject = { id?: never; link: string; caption?: string; }; type ImageParametersObject = ParametersObject<"image"> & ImageMediaObject; type MetaHostedVideoMediaObject = { id: string; link?: never; caption?: string; }; type SelfHostedVideoMediaObject = { id?: never; link: string; caption?: string; }; type MetaAudioMediaObject = { id: string; link?: never; }; type HostedAudioMediaObject = { id?: never; link: string; }; type VideoParametersObject = ParametersObject<"video"> & VideoMediaObject; type QuickReplyButtonParametersObject = { type: "payload"; payload: string; }; type URLButtonParametersObject = SimpleTextObject & { type: "text"; }; type ButtonParameterObject = QuickReplyButtonParametersObject | URLButtonParametersObject; type ComponentObject<T extends ComponentTypes> = { type: T; parameters: (CurrencyParametersObject | DateTimeParametersObject | DocumentParametersObject | ImageParametersObject | TextParametersObject | VideoParametersObject)[]; }; type ButtonComponentObject = ComponentObject<"button"> & { parameters: ButtonParameterObject; sub_type: ButtonTypes; index: ButtonPosition; }; export type MessageTemplateObject<T extends ComponentTypes> = { name: string; language: LanguageObject; components?: (ComponentObject<T> | ButtonComponentObject)[]; }; export type MessageTemplateRequestBody<T extends ComponentTypes> = MessageRequestBody<MessageTypesEnum.Template> & MessageTemplateObject<T>; export type ImageMediaObject = MetaImageMediaObject | HostedImageMediaObject; export type TextObject = { body: string; preview_url?: boolean; }; export type DocumentMediaObject = MetaDocumentMediaObject | HostedDocumentMediaObject; export type VideoMediaObject = MetaHostedVideoMediaObject | SelfHostedVideoMediaObject; export type AudioMediaObject = MetaAudioMediaObject | HostedAudioMediaObject; type MetaStickerMediaObject = { id: string; link?: never; }; type ReactionObject = { message_id: string; emoji: string; }; type HostedStickerMediaObject = { id?: never; link: string; }; export type StickerMediaObject = MetaStickerMediaObject | HostedStickerMediaObject; type LanguageObject = { policy?: "deterministic"; code: Language; }; type CurrencyCodes = "EUR" | "USD" | "NGN"; type Language = "en" | "en_GB" | "en_US"; export type ButtonTypes = "quick_reply" | "url"; export type ButtonPosition = 0 | 1 | 2; export interface BodyBuilderOptions<TMessageType extends MessageTypesEnum, TComponentType extends ComponentTypes> { type: TMessageType; toNumber: string; replyMessageId?: string; payload: TMessageType extends keyof MessageObjectMap<TComponentType> ? MessageObjectMap<TComponentType>[TMessageType] : never; } type MessageObjectMap<TComponentType extends ComponentTypes> = { [MessageTypesEnum.Audio]: AudioMediaObject; [MessageTypesEnum.Document]: DocumentMediaObject; [MessageTypesEnum.Image]: ImageMediaObject; [MessageTypesEnum.Template]: MessageTemplateObject<TComponentType>; [MessageTypesEnum.Text]: TextObject; [MessageTypesEnum.Video]: VideoMediaObject; [MessageTypesEnum.Sticker]: StickerMediaObject; [MessageTypesEnum.Reaction]: ReactionObject; }; export interface SendMessageOptions<TMessageType extends MessageTypesEnum, TComponentType extends ComponentTypes = ComponentTypes> { recipient: string; replyMessageId?: string; body: TMessageType extends keyof MessageObjectMap<TComponentType> ? MessageObjectMap<TComponentType>[TMessageType] : never; } export interface IMessageAPI { template(options: SendMessageOptions<MessageTypesEnum.Template>): Promise<RequesterResponseData<MessagesResponse>>; text(options: SendMessageOptions<MessageTypesEnum.Text>): Promise<RequesterResponseData<MessagesResponse>>; image(options: SendMessageOptions<MessageTypesEnum.Image>): Promise<RequesterResponseData<MessagesResponse>>; video(options: SendMessageOptions<MessageTypesEnum.Video>): Promise<RequesterResponseData<MessagesResponse>>; audio(options: SendMessageOptions<MessageTypesEnum.Audio>): Promise<RequesterResponseData<MessagesResponse>>; document(options: SendMessageOptions<MessageTypesEnum.Document>): Promise<RequesterResponseData<MessagesResponse>>; sticker(options: SendMessageOptions<MessageTypesEnum.Sticker>): Promise<RequesterResponseData<MessagesResponse>>; reaction(options: SendMessageOptions<MessageTypesEnum.Reaction>): Promise<RequesterResponseData<MessagesResponse>>; } export {};