UNPKG

meta-cloud-api

Version:
587 lines (576 loc) 19.8 kB
import { d as BaseClass, G as GeneralRequestBody, B as BaseAPI, a as RequesterClass } from './base-BhCbbsxB.js'; import { WabaConfigType } from './shared/types/config.js'; import { I as InteractiveTypesEnum, c as ComponentTypesEnum, L as LanguagesEnum, P as ParametersTypesEnum, C as CurrencyCodesEnum, S as SubTypeEnum, b as ButtonPositionEnum, M as MessageTypesEnum } from './enums-DvwSJq9w.js'; interface ReactionParams { messageId: string; emoji: string; to: string; } type DocumentMediaObject$2 = { id?: string; link?: string; caption?: string; filename?: string; }; type ImageMediaObject$2 = { id?: string; link?: string; caption?: string; }; type VideoMediaObject$2 = { id?: string; link?: string; caption?: string; }; type ProductObject = { product_retailer_id: string; }; type SimpleTextObject$1 = { text: string; }; type RowObject = { id: string; title: string; description?: string; }; type MultiProductSectionObject = { product_items: ProductObject[]; rows?: never; title?: string; }; type ListSectionObject = { product_items?: never; rows: RowObject[]; title?: string; }; type SectionObject = MultiProductSectionObject | ListSectionObject; type ButtonObject = { title: string; id: string; }; type ReplyButtonObject = { type: 'reply'; reply: ButtonObject; }; type ActionObject = { buttons?: ReplyButtonObject[]; catalog_id?: string; product_retailer_id?: string; sections?: SectionObject; }; type HeaderObject = { type: 'document' | 'image' | 'text' | 'video'; document?: DocumentMediaObject$2; image?: ImageMediaObject$2; text?: string; video?: VideoMediaObject$2; }; type ButtonInteractiveObject = { type: InteractiveTypesEnum.Button; body: SimpleTextObject$1; footer?: SimpleTextObject$1; header?: HeaderObject; action: ActionObject; }; type ListInteractiveObject = { type: InteractiveTypesEnum.List; body: SimpleTextObject$1; footer?: SimpleTextObject$1; header?: HeaderObject; action: ActionObject; }; type ProductInteractiveObject = { type: InteractiveTypesEnum.Product; body?: SimpleTextObject$1; footer?: SimpleTextObject$1; header?: HeaderObject; action: ActionObject; }; type ProductListInteractiveObject = { type: InteractiveTypesEnum.ProductList; body: SimpleTextObject$1; footer?: SimpleTextObject$1; header: HeaderObject; action: ActionObject; }; type CtaUrlParameters = { display_text: string; url: string; }; type CtaUrlActionObject = { name: 'cta_url'; parameters: CtaUrlParameters; }; type CtaUrlInteractiveObject = { type: InteractiveTypesEnum.CtaUrl; body?: SimpleTextObject$1; footer?: SimpleTextObject$1; header?: HeaderObject; action: CtaUrlActionObject; }; type LocationRequestActionObject = { name: 'send_location'; }; type LocationRequestInteractiveObject = { type: InteractiveTypesEnum.LocationRequest; body: SimpleTextObject$1; footer?: SimpleTextObject$1; header?: HeaderObject; action: LocationRequestActionObject; }; type AddressValues = { name?: string; phone_number?: string; in_pin_code?: string; house_number?: string; floor_number?: string; tower_number?: string; building_name?: string; address?: string; landmark_area?: string; city?: string; state?: string; }; type SavedAddress = { id: string; value: AddressValues; }; type ValidationErrors = { [key in keyof AddressValues]?: string; }; type AddressMessageParameters = { country: string; values?: AddressValues; saved_addresses?: SavedAddress[]; validation_errors?: ValidationErrors; }; type AddressMessageActionObject = { name: 'address_message'; parameters: AddressMessageParameters; }; type AddressMessageInteractiveObject = { type: InteractiveTypesEnum.AddressMessage; body: SimpleTextObject$1; footer?: SimpleTextObject$1; header?: HeaderObject; action: AddressMessageActionObject; }; type FlowParameters = { flow_message_version: string; flow_id?: string; flow_name?: string; flow_cta: string; mode?: 'draft' | 'published'; flow_token: string; flow_action: 'navigate' | 'data_exchange'; flow_action_payload?: { screen?: string; data?: Record<string, string>; }; }; type FlowActionObject = { name: 'flow'; parameters: FlowParameters; }; type FlowInteractiveObject = { type: InteractiveTypesEnum.Flow; body: SimpleTextObject$1; footer?: SimpleTextObject$1; header?: HeaderObject; action: FlowActionObject; }; type InteractiveObject = ButtonInteractiveObject | ListInteractiveObject | ProductInteractiveObject | ProductListInteractiveObject | CtaUrlInteractiveObject | LocationRequestInteractiveObject | AddressMessageInteractiveObject | FlowInteractiveObject; type LocationObject = { longitude: number; latitude: number; name?: string; address?: string; }; type AddressesObject = { street?: string; city?: string; state?: string; zip?: string; country?: string; country_code?: string; type?: 'HOME' | 'WORK' | string; }; type EmailObject = { email?: string; type?: 'HOME' | 'WORK' | string; }; type NameObject = { formatted_name: string; first_name?: string; last_name?: string; middle_name?: string; suffix?: string; prefix?: string; }; type OrgObject = { company?: string; department?: string; title?: string; }; type PhoneObject = { phone?: 'PHONE_NUMBER'; type?: 'CELL' | 'MAIN' | 'IPHONE' | 'HOME' | 'WORK' | string; wa_id?: string; }; type URLObject = { url?: string; type?: 'HOME' | 'WORK' | string; }; type ContactObject = { addresses?: AddressesObject[]; birthday?: `${number}${number}${number}${number}-${number}${number}-${number}${number}`; emails?: EmailObject[]; name: NameObject; org?: OrgObject; phones?: PhoneObject[]; urls?: URLObject[]; }; type MetaMediaObject = { id: string; link?: never; }; type HostedMediaObject = { id?: never; link: string; }; type AudioMediaObject = MetaMediaObject | HostedMediaObject; type MetaDocumentMediaObject = MetaMediaObject & { caption?: string; filename?: string; }; type HostedDocumentMediaObject = HostedMediaObject & { caption?: string; filename?: string; }; type DocumentMediaObject$1 = MetaDocumentMediaObject | HostedDocumentMediaObject; type MetaImageMediaObject = MetaMediaObject & { caption?: string; }; type HostedImageMediaObject = HostedMediaObject & { caption?: string; }; type ImageMediaObject$1 = MetaImageMediaObject | HostedImageMediaObject; type MetaVideoMediaObject = MetaMediaObject & { caption?: string; }; type HostedVideoMediaObject = HostedMediaObject & { caption?: string; }; type VideoMediaObject$1 = MetaVideoMediaObject | HostedVideoMediaObject; type StickerMediaObject = MetaMediaObject | HostedMediaObject; type LanguageObject = { policy: 'deterministic'; code: LanguagesEnum; }; type ParametersObject<T extends ParametersTypesEnum> = { type: T; }; type SimpleTextObject = { text: string; }; type TextParametersObject = ParametersObject<ParametersTypesEnum.Text> & SimpleTextObject; type CouponCodeParametersObject = ParametersObject<ParametersTypesEnum.CouponCode> & { coupon_code: string; }; type CurrencyObject = { fallback_value: string; code: CurrencyCodesEnum; amount_1000: number; }; type CurrencyParametersObject = ParametersObject<ParametersTypesEnum.Currency> & { currency: CurrencyObject; }; type DateTimeObject = { fallback_value: string; }; type DateTimeParametersObject = ParametersObject<ParametersTypesEnum.Currency> & { date_time: DateTimeObject; }; type DocumentMediaObject = { id?: string; link?: string; caption?: string; filename?: string; }; type ImageMediaObject = { id?: string; link?: string; caption?: string; }; type VideoMediaObject = { id?: string; link?: string; caption?: string; }; type DocumentParametersObject = ParametersObject<ParametersTypesEnum.Document> & DocumentMediaObject; type ImageParametersObject = ParametersObject<ParametersTypesEnum.Image> & ImageMediaObject; type VideoParametersObject = ParametersObject<ParametersTypesEnum.Video> & VideoMediaObject; type ComponentObject<T extends ComponentTypesEnum> = { type: T; parameters: (CurrencyParametersObject | DateTimeParametersObject | DocumentParametersObject | ImageParametersObject | TextParametersObject | VideoParametersObject | CouponCodeParametersObject)[]; }; type ButtonComponentObject = ComponentObject<ComponentTypesEnum.Button> & { parameters: Array<ParametersTypesEnum>; sub_type: SubTypeEnum; index: ButtonPositionEnum; }; type MessageTemplateObject<T extends ComponentTypesEnum> = { name: string; language: LanguageObject; components?: (ComponentObject<T> | ButtonComponentObject)[]; }; type TextObject = { body: string; preview_url?: boolean; }; interface TextMessageParams extends MessageRequestParams<TextObject | string> { previewUrl?: boolean; } type GeneralMessageBody = GeneralRequestBody & { /** * The Meta messaging product name. * @default 'whatsapp' */ messaging_product: 'whatsapp'; }; type ConTextObject = { message_id: string; }; type MessageRequestBody<T extends MessageTypesEnum> = GeneralMessageBody & { recipient_type?: string; to: string; context?: ConTextObject; type?: T; }; interface MessageRequestParams<T> { body: T; to: string; replyMessageId?: string; } interface StatusParams { status: string; messageId: string; typingIndicator?: { type: string; }; } type MessagesResponse = GeneralMessageBody & { contacts: [ { input: string; wa_id: string; } ]; messages: [ { id: string; } ]; }; declare class MessagesClass extends BaseClass { text(params: TextMessageParams): Promise<MessagesResponse>; template(params: MessageRequestParams<MessageTemplateObject<ComponentTypesEnum>>): Promise<MessagesResponse>; audio(params: MessageRequestParams<AudioMediaObject>): Promise<MessagesResponse>; document(params: MessageRequestParams<DocumentMediaObject$1>): Promise<MessagesResponse>; image(params: MessageRequestParams<ImageMediaObject$1>): Promise<MessagesResponse>; video(params: MessageRequestParams<VideoMediaObject$1>): Promise<MessagesResponse>; sticker(params: MessageRequestParams<StickerMediaObject>): Promise<MessagesResponse>; contacts(params: MessageRequestParams<[ContactObject]>): Promise<MessagesResponse>; location(params: MessageRequestParams<LocationObject>): Promise<MessagesResponse>; interactive(params: MessageRequestParams<InteractiveObject>): Promise<MessagesResponse>; interactiveList(params: MessageRequestParams<InteractiveObject & { type: InteractiveTypesEnum.List; }>): Promise<MessagesResponse>; interactiveCtaUrl(params: MessageRequestParams<InteractiveObject & { type: InteractiveTypesEnum.CtaUrl; }>): Promise<MessagesResponse>; interactiveLocationRequest(params: MessageRequestParams<InteractiveObject & { type: InteractiveTypesEnum.LocationRequest; }>): Promise<MessagesResponse>; interactiveAddressMessage(params: MessageRequestParams<InteractiveObject & { type: InteractiveTypesEnum.AddressMessage; }>): Promise<MessagesResponse>; interactiveReplyButtons(params: MessageRequestParams<InteractiveObject & { type: InteractiveTypesEnum.Button; }>): Promise<MessagesResponse>; interactiveFlow(params: MessageRequestParams<InteractiveObject & { type: InteractiveTypesEnum.Flow; }>): Promise<MessagesResponse>; reaction(params: ReactionParams): Promise<MessagesResponse>; markAsRead(params: { messageId: string; }): Promise<MessagesResponse>; showTypingIndicator(params: { messageId: string; }): Promise<MessagesResponse>; status(params: StatusParams): Promise<MessagesResponse>; } /** * Maps each message type to its appropriate payload type */ type MessagePayloadType<T extends MessageTypesEnum> = T extends MessageTypesEnum.Audio ? AudioMediaObject : T extends MessageTypesEnum.Contacts ? [ContactObject] : T extends MessageTypesEnum.Document ? DocumentMediaObject$1 : T extends MessageTypesEnum.Image ? ImageMediaObject$1 : T extends MessageTypesEnum.Interactive ? InteractiveObject : T extends MessageTypesEnum.Location ? LocationObject : T extends MessageTypesEnum.Template ? MessageTemplateObject<ComponentTypesEnum> : T extends MessageTypesEnum.Sticker ? StickerMediaObject : T extends MessageTypesEnum.Text ? TextObject : T extends MessageTypesEnum.Video ? VideoMediaObject$1 : T extends MessageTypesEnum.Reaction ? { message_id: string; emoji: string; } : never; declare class MessagesApi extends BaseAPI implements MessagesClass { private readonly commonMethod; private readonly commonEndpoint; constructor(config: WabaConfigType, client: RequesterClass); /** * Builds the request body for WhatsApp API messages * @param type The type of message to send * @param payload The message payload object * @param to The recipient's phone number * @param replyMessageId Optional message ID to reply to * @returns The formatted request body */ bodyBuilder<T extends MessageTypesEnum>(type: T, payload: MessagePayloadType<T>, to: string, replyMessageId?: string): MessageRequestBody<T>; /** * Sends a request to the WhatsApp API * @param body The request body to send * @returns Promise with the API response */ private send; /** * Sends an audio message via WhatsApp * @param params The audio message parameter object * @returns Promise with the message response */ audio(params: MessageRequestParams<AudioMediaObject>): Promise<MessagesResponse>; /** * Sends a contact card via WhatsApp * @param params The contact message parameter object * @returns Promise with the message response */ contacts(params: MessageRequestParams<[ContactObject]>): Promise<MessagesResponse>; /** * Sends a document via WhatsApp * @param params The document message parameter object * @returns Promise with the message response */ document(params: MessageRequestParams<DocumentMediaObject$1>): Promise<MessagesResponse>; /** * Sends an image via WhatsApp * @param params The image message parameter object * @returns Promise with the message response */ image(params: MessageRequestParams<ImageMediaObject$1>): Promise<MessagesResponse>; /** * Sends an interactive message via WhatsApp * @param params The interactive message parameter object * @returns Promise with the message response */ interactive(params: MessageRequestParams<InteractiveObject>): Promise<MessagesResponse>; /** * Sends a location via WhatsApp * @param params The location message parameter object * @returns Promise with the message response */ location(params: MessageRequestParams<LocationObject>): Promise<MessagesResponse>; /** * Sends a sticker via WhatsApp * @param params The sticker message parameter object * @returns Promise with the message response */ sticker(params: MessageRequestParams<StickerMediaObject>): Promise<MessagesResponse>; /** * Sends a template message via WhatsApp * @param params The template message parameter object * @returns Promise with the message response */ template(params: MessageRequestParams<MessageTemplateObject<ComponentTypesEnum>>): Promise<MessagesResponse>; /** * Sends a text message via WhatsApp * @param params The text message parameter object * @returns Promise with the message response */ text(params: TextMessageParams): Promise<MessagesResponse>; /** * Sends a video message via WhatsApp * @param params The video message parameter object * @returns Promise with the message response */ video(params: MessageRequestParams<VideoMediaObject$1>): Promise<MessagesResponse>; /** * Updates message status (mark as read, etc.) * @param params The status update parameters * @returns Promise with the API response */ status(params: StatusParams): Promise<MessagesResponse>; /** * Marks a message as read * @param params Object containing messageId * @returns Promise with the API response */ markAsRead(params: { messageId: string; }): Promise<MessagesResponse>; /** * Shows typing indicator * @param params Object containing messageId * @returns Promise with the API response */ showTypingIndicator(params: { messageId: string; }): Promise<MessagesResponse>; /** * Sends a list interactive message * @param params The list interactive message parameters * @returns Promise with the message response */ interactiveList(params: MessageRequestParams<InteractiveObject & { type: InteractiveTypesEnum.List; }>): Promise<MessagesResponse>; /** * Sends a CTA URL interactive message * @param params The CTA URL interactive message parameters * @returns Promise with the message response */ interactiveCtaUrl(params: MessageRequestParams<InteractiveObject & { type: InteractiveTypesEnum.CtaUrl; }>): Promise<MessagesResponse>; /** * Sends a location request interactive message * @param params The location request interactive message parameters * @returns Promise with the message response */ interactiveLocationRequest(params: MessageRequestParams<InteractiveObject & { type: InteractiveTypesEnum.LocationRequest; }>): Promise<MessagesResponse>; /** * Sends an address message interactive message * @param params The address message interactive message parameters * @returns Promise with the message response */ interactiveAddressMessage(params: MessageRequestParams<InteractiveObject & { type: InteractiveTypesEnum.AddressMessage; }>): Promise<MessagesResponse>; /** * Sends a reply buttons interactive message * @param params The reply buttons interactive message parameters * @returns Promise with the message response */ interactiveReplyButtons(params: MessageRequestParams<InteractiveObject & { type: InteractiveTypesEnum.Button; }>): Promise<MessagesResponse>; /** * Sends a flow interactive message * @param params The flow interactive message parameters * @returns Promise with the message response */ interactiveFlow(params: MessageRequestParams<InteractiveObject & { type: InteractiveTypesEnum.Flow; }>): Promise<MessagesResponse>; /** * Sends a reaction to a message * @param params The reaction parameters * @returns Promise with the message response */ reaction(params: ReactionParams): Promise<MessagesResponse>; } export { type AudioMediaObject as A, type ContactObject as C, type DocumentMediaObject$1 as D, type ImageMediaObject$1 as I, type LocationObject as L, MessagesApi as M, type ReactionParams as R, type StatusParams as S, type TextMessageParams as T, type VideoMediaObject$1 as V, type InteractiveObject as a, type MessageRequestParams as b, type MessagesResponse as c, type MessageTemplateObject as d, type StickerMediaObject as e, type TextObject as f };