import { ILogger } from "./logger"; import { type Transform } from "stream"; import { proto } from "../../WAProto"; import { AnyMediaMessageContent, AnyMessageContent, MediaGenerationOptions, MessageContentGenerationOptions, MessageGenerationOptions, MessageGenerationOptionsFromContent, MessageUserReceipt, WAMessage, WAMessageContent, WAProto, } from "../Types"; import { MediaDownloadOptions } from "./messages-media"; /** * Uses a regex to test whether the string contains a URL, and returns the URL if it does. * @param text eg. hello https://google.com * @returns the URL, eg. https://google.com */ export declare const extractUrlFromText: (text: string) => string | undefined; export declare const generateLinkPreviewIfRequired: ( text: string, getUrlInfo: MessageGenerationOptions["getUrlInfo"], logger: MessageGenerationOptions["logger"], ) => Promise; export declare const prepareWAMessageMedia: ( message: AnyMediaMessageContent, options: MediaGenerationOptions, ) => Promise; export declare const prepareDisappearingMessageSettingContent: ( ephemeralExpiration?: number, ) => proto.Message; /** * Generate forwarded message content like WA does * @param message the message to forward * @param options.forceForward will show the message as forwarded even if it is from you */ export declare const generateForwardMessageContent: ( message: WAMessage, forceForward?: boolean, ) => proto.IMessage; export declare const generateWAMessageContent: ( message: AnyMessageContent, options: MessageContentGenerationOptions, ) => Promise; export declare const generateWAMessageFromContent: ( jid: string, message: WAMessageContent, options: MessageGenerationOptionsFromContent, ) => proto.WebMessageInfo; export declare const generateWAMessage: ( jid: string, content: AnyMessageContent, options: MessageGenerationOptions, ) => Promise; /** Get the key to access the true type of content */ export declare const getContentType: ( content: WAProto.IMessage | undefined, ) => keyof proto.IMessage | undefined; /** * Normalizes ephemeral, view once messages to regular message content * Eg. image messages in ephemeral messages, in view once messages etc. * @param content * @returns */ export declare const normalizeMessageContent: ( content: WAMessageContent | null | undefined, ) => WAMessageContent | undefined; /** * Extract the true message content from a message * Eg. extracts the inner message from a disappearing message/view once message */ export declare const extractMessageContent: ( content: WAMessageContent | undefined | null, ) => WAMessageContent | undefined; /** * Returns the device predicted by message ID */ export declare const getDevice: ( id: string, ) => "android" | "unknown" | "web" | "ios" | "desktop"; /** Upserts a receipt in the message */ export declare const updateMessageWithReceipt: ( msg: Pick, receipt: MessageUserReceipt, ) => void; /** Update the message with a new reaction */ export declare const updateMessageWithReaction: ( msg: Pick, reaction: proto.IReaction, ) => void; /** Update the message with a new poll update */ export declare const updateMessageWithPollUpdate: ( msg: Pick, update: proto.IPollUpdate, ) => void; type VoteAggregation = { name: string; voters: string[]; }; /** * Aggregates all poll updates in a poll. * @param msg the poll creation message * @param meId your jid * @returns A list of options & their voters */ export declare function getAggregateVotesInPollMessage( { message, pollUpdates }: Pick, meId?: string, ): VoteAggregation[]; /** Given a list of message keys, aggregates them by chat & sender. Useful for sending read receipts in bulk */ export declare const aggregateMessageKeysNotFromMe: ( keys: proto.IMessageKey[], ) => { jid: string; participant: string | undefined; messageIds: string[]; }[]; type DownloadMediaMessageContext = { reuploadRequest: (msg: WAMessage) => Promise; logger: ILogger; }; /** * Downloads the given message. Throws an error if it's not a media message */ export declare const downloadMediaMessage: ( message: WAMessage, type: Type, options: MediaDownloadOptions, ctx?: DownloadMediaMessageContext, ) => Promise; /** Checks whether the given message is a media message if it is returns the inner content */ export declare const assertMediaContent: ( content: proto.IMessage | null | undefined, ) => | proto.Message.IVideoMessage | proto.Message.IImageMessage | proto.Message.IAudioMessage | proto.Message.IDocumentMessage | proto.Message.IStickerMessage; /** * this is an experimental patch to make buttons work * Don't know how it works, but it does for now */ export declare const patchMessageForMdIfRequired: ( message: proto.IMessage, ) => proto.IMessage; export {};