UNPKG

neroxbailx

Version:

baileys whatsapp-api

391 lines 10.9 kB
import { AxiosRequestConfig } from 'axios' import { ILogger } from '../Utils/logger' import type { Readable } from 'stream' import type { URL } from 'url' import { proto } from '../../WAProto' import { MEDIA_HKDF_KEY_MAPPING } from '../Defaults' import { BinaryNode } from '../WABinary' import type { GroupMetadata } from './GroupMetadata' import { CacheStore } from './Socket' export { proto as WAProto } export type WAMessage = proto.IWebMessageInfo export type WAMessageContent = proto.IMessage export type WAContactMessage = proto.Message.IContactMessage export type WAContactsArrayMessage = proto.Message.IContactsArrayMessage export type WAMessageKey = proto.IMessageKey & { newsletter_server_id?: string } export type WATextMessage = proto.Message.IExtendedTextMessage export type WAContextInfo = proto.IContextInfo export type WAEventMessage = proto.Message.IEventMessage export type WALocationMessage = proto.Message.ILocationMessage export type WAOrderMessage = proto.Message.IOrderMessage export type WAGenericMediaMessage = proto.Message.IVideoMessage | proto.Message.IImageMessage | proto.Message.IAudioMessage | proto.Message.IDocumentMessage | proto.Message.IStickerMessage export declare const WAMessageStubType = proto.WebMessageInfo.StubType export declare const WAMessageStatus = proto.WebMessageInfo.Status export type WAMediaUpload = Buffer | { url: URL | string } | { stream: Readable } /** Set of message types that are supported by the library */ export type MessageType = keyof proto.Message export type DownloadableMessage = { mediaKey?: Uint8Array | null directPath?: string | null url?: string | null } export type MessageReceiptType = 'read' | 'read-self' | 'hist_sync' | 'peer_msg' | 'sender' | 'inactive' | 'played' | undefined export type MediaConnInfo = { auth: string ttl: number hosts: { hostname: string maxContentLengthBytes: number }[] fetchDate: Date } export interface Carousel { image?: WAMediaUpload video?: WAMediaUpload product?: WASendableProduct title?: string body?: string footer?: string buttons?: proto.Message.InteractiveMessage.NativeFlowMessage.NativeFlowButton[] } export interface WAUrlInfo { 'canonical-url': string 'matched-text': string title: string description?: string jpegThumbnail?: Buffer highQualityThumbnail?: proto.Message.IImageMessage originalThumbnailUrl?: string } type Mentionable = { /** list of jids that are mentioned in the accompanying text */ mentions?: string[] } type Contextable = { /** add contextInfo to the message */ contextInfo?: proto.IContextInfo } type Ephemeral = { ephemeral?: boolean } type ViewOnce = { viewOnce?: boolean } type ViewOnceV2 = { viewOnceV2?: boolean } type ViewOnceV2Ext = { viewOnceV2Ext?: boolean } type Buttonable = { /** add buttons to the message */ buttons?: proto.Message.ButtonsMessage.IButton[] } type Templatable = { /** add buttons to the message (conflicts with normal buttons)*/ templateButtons?: proto.IHydratedTemplateButton[] footer?: string } type Interactiveable = { /** add buttons to the message (conflicts with normal buttons)*/ interactiveButtons?: proto.Message.InteractiveMessage.NativeFlowMessage.INativeFlowButton[] title?: string subtitle?: string footer?: string hasMediaAttachment?: boolean } type Shopable = { shop?: proto.Message.InteractiveMessage.ShopMessage title?: string subtitle?: string footer?: string hasMediaAttachment?: boolean } type Collectionable = { collection?: proto.Message.InteractiveMessage.CollectionMessage title?: string subtitle?: string footer?: string hasMediaAttachment?: boolean } type Listable = { /** Sections of the List */ sections?: proto.Message.ListMessage.ISection[] /** Title of a List Message only */ title?: string /** Text of the button on the list (required) */ buttonText?: string /** ListType of a List Message only */ listType?: proto.Message.ListMessage.ListType } type Cardsable = { cards?: Carousel[] title?: string subtitle?: string footer?: string } type Editable = { edit?: WAMessageKey } type WithDimensions = { width?: number height?: number } export type PollMessageOptions = { name: string selectableCount?: number values: string[] /** 32 byte message secret to encrypt poll selections */ messageSecret?: Uint8Array toAnnouncementGroup?: boolean } export type PollResultOptions = { name: string values: string[] } type SharePhoneNumber = { sharePhoneNumber: boolean } type RequestPhoneNumber = { requestPhoneNumber: boolean } export type MediaType = keyof typeof MEDIA_HKDF_KEY_MAPPING export type AnyMediaMessageContent = (({ image: WAMediaUpload caption?: string jpegThumbnail?: string } & Mentionable & Contextable & Buttonable & Templatable & Interactiveable & WithDimensions) | ({ video: WAMediaUpload caption?: string gifPlayback?: boolean jpegThumbnail?: string } & Mentionable & Contextable & Buttonable & Templatable & Interactiveable & WithDimensions) | { audio: WAMediaUpload /** if set to true, will send as a `voice note` */ ptt?: boolean /** optionally tell the duration of the audio */ seconds?: number } | ({ sticker: WAMediaUpload isAnimated?: boolean } & WithDimensions) | ({ document: WAMediaUpload mimetype: string fileName?: string caption?: string } & Contextable & Buttonable & Templatable & Interactiveable )) & { mimetype?: string } & Editable export type ButtonReplyInfo = { displayText: string id: string index: number } export type GroupInviteInfo = { code: string expiration: number caption: string jid: string name: string jpegThumbnail?: string } export type CallCreationInfo = { time?: number type?: number name: string } export type AdminInviteInfo = { jid: string name: string caption: string expiration: number jpegThumbnail: string } export type PinInfo = { key: WAMessageKey type?: number time?: number } export type KeepInfo = { key: WAMessageKey type: number } export type PaymentInfo = { note: string currency?: string offset?: number amount?: number expiry?: number from?: string image?: { placeholderArgb: fixed32 textArgb: fixed32 subtextArgb: fixed32 } } export type WASendableProduct = Omit<proto.Message.ProductMessage.IProductSnapshot, 'productImage'> & { productImage: WAMediaUpload } export type AnyRegularMessageContent = (({ text: string linkPreview?: WAUrlInfo | null } & Mentionable & Contextable & Buttonable & Templatable & Interactiveable & Shopable & Collectionable & Cardsable & Listable & Editable & WithDimensions) | AnyMediaMessageContent | ({ poll: PollMessageOptions } & Mentionable & Contextable & Buttonable & Templatable & Interactiveable & Shopable & Collectionable & Cardsable & Listable & Editable & WithDimensions) | { contacts: { displayName?: string contacts: proto.Message.IContactMessage[] } } | { location: WALocationMessage } | { react: proto.Message.IReactionMessage } | { buttonReply: ButtonReplyInfo type: 'template' | 'plain' | 'list' | 'interactive' } | { groupInvite: GroupInviteInfo } | { pin: PinInfo } | { keep: KeepInfo } | { call: CallCreationInfo } | { event: WAEventMessage } | { adminInvite: AdminInviteInfo } | { payment: PaymentInfo } | { paymentInvite: { type: number expiry: number } } | { pollResult: PollResultOptions } | { order: WAOrderMessage } | { product: WASendableProduct businessOwnerJid?: string body?: string footer?: string } | SharePhoneNumber | RequestPhoneNumber) & ViewOnce & ViewOnceV2 & ViewOnceV2Ext export type AnyMessageContent = AnyRegularMessageContent | { forward: WAMessage force?: boolean } | { /** Delete your message or anyone's message in a group (admin required) */ delete: WAMessageKey } | { disappearingMessagesInChat: boolean | number } export type GroupMetadataParticipants = Pick<GroupMetadata, 'participants'> type MinimalRelayOptions = { /** override the message ID with a custom provided string */ messageId?: string /** should we use group metadata cache, or fetch afresh from the server default assumed to be "true" */ useCachedGroupMetadata?: boolean } export type MessageRelayOptions = MinimalRelayOptions & { /** only send to a specific participant used when a message decryption fails for a single user */ participant?: { jid: string count: number } /** additional attributes to add to the WA binary node */ additionalAttributes?: { [_: string]: string } additionalNodes?: BinaryNode[] /** should we use the devices cache, or fetch afresh from the server default assumed to be "true" */ useUserDevicesCache?: boolean /** jid list of participants for status@broadcast */ statusJidList?: string[] newsletter?: boolean } export type MiscMessageGenerationOptions = MinimalRelayOptions & { /** optional, if you want to manually set the timestamp of the message */ timestamp?: Date /** the message you want to quote */ quoted?: WAMessage /** disappearing messages settings */ ephemeralExpiration?: number | string /** timeout for media upload to WA server */ mediaUploadTimeoutMs?: number /** jid list of participants for status@broadcast */ statusJidList?: string[] /** backgroundcolor for status */ backgroundColor?: string /** font type for status */ font?: number /** if it is broadcast */ broadcast?: boolean newsletter?: boolean additionalNodes?: BinaryNode[] } export type MessageGenerationOptionsFromContent = MiscMessageGenerationOptions & { userJid: string } export type WAMediaUploadFunctionOpts = { fileEncSha256B64: string mediaType: MediaType newsletter?: boolean timeoutMs?: number } export type WAMediaUploadFunction = (encFilePath: string | Buffer, opts: WAMediaUploadFunctionOpts) => Promise<{ mediaUrl: string directPath: string handle?: string }> export type MediaGenerationOptions = { logger?: ILogger mediaTypeOverride?: MediaType upload: WAMediaUploadFunction /** cache media so it does not have to be uploaded again */ mediaCache?: CacheStore mediaUploadTimeoutMs?: number options?: AxiosRequestConfig backgroundColor?: string font?: number /** The message is for newsletter? */ newsletter?: boolean } export type MessageContentGenerationOptions = MediaGenerationOptions & { getUrlInfo?: (text: string) => Promise<WAUrlInfo | undefined> getProfilePicUrl?: (jid: string) => Promise<string | undefined> } export type MessageGenerationOptions = MessageContentGenerationOptions & MessageGenerationOptionsFromContent /** * Type of message upsert * 1. notify => notify the user, this message was just received * 2. append => append the message to the chat history, no notification required */ export type MessageUpsertType = 'append' | 'notify' export type MessageUserReceipt = proto.IUserReceipt export type WAMessageUpdate = { update: Partial<WAMessage> key: proto.IMessageKey } export type WAMessageCursor = { before: WAMessageKey | undefined } | { after: WAMessageKey | undefined } export type MessageUserReceiptUpdate = { key: proto.IMessageKey receipt: MessageUserReceipt } export type MediaDecryptionKeyInfo = { iv: Buffer cipherKey: Buffer macKey?: Buffer } export type MinimalMessage = Pick<proto.IWebMessageInfo, 'key' | 'messageTimestamp'>