///
import { Readable } from 'stream';
import { URL } from 'url';
import { Agent } from 'https';
import Decoder from '../Binary/Decoder';
import { MessageType, MessageOptions, WAChat, WAMessageContent, WAMessageProto, WAMessage, WAMessageKey, WAMediaUpload } from './Constants';
import KeyedDB from '@adiwajshing/keyed-db';
import { Options } from 'got';
export declare const Browsers: {
ubuntu: (browser: any) => [string, string, string];
macOS: (browser: any) => [string, string, string];
baileys: (browser: any) => [string, string, string];
/** The appropriate browser based on your OS & release */
appropriate: (browser: any) => [string, string, string];
};
export declare const toNumber: (t: Long | number) => number;
export declare const waChatKey: (pin: boolean) => {
key: (c: WAChat) => string;
compare: (k1: string, k2: string) => number;
};
export declare const waMessageKey: {
key: (m: WAMessage) => string;
compare: (k1: string, k2: string) => number;
};
export declare const WA_MESSAGE_ID: (m: WAMessage) => string;
export declare const GET_MESSAGE_ID: (key: WAMessageKey) => string;
export declare const whatsappID: (jid: string) => string;
export declare const isGroupID: (jid: string) => boolean;
export declare const newMessagesDB: (messages?: WAMessage[]) => KeyedDB;
export declare function shallowChanges(old: T, current: T, { lookForDeletedKeys }: {
lookForDeletedKeys: boolean;
}): Partial;
/** decrypt AES 256 CBC; where the IV is prefixed to the buffer */
export declare function aesDecrypt(buffer: Buffer, key: Buffer): Buffer;
/** decrypt AES 256 CBC */
export declare function aesDecryptWithIV(buffer: Buffer, key: Buffer, IV: Buffer): Buffer;
export declare function aesEncrypt(buffer: Buffer, key: Buffer): Buffer;
export declare function aesEncrypWithIV(buffer: Buffer, key: Buffer, IV: Buffer): Buffer;
export declare function hmacSign(buffer: Buffer, key: Buffer): Buffer;
export declare function sha256(buffer: Buffer): Buffer;
export declare function hkdf(buffer: Buffer, expandedLength: number, info?: any): Buffer;
export declare function randomBytes(length: any): Buffer;
/** unix timestamp of a date in seconds */
export declare const unixTimestampSeconds: (date?: Date) => number;
export declare type DebouncedTimeout = ReturnType;
export declare const debouncedTimeout: (intervalMs?: number, task?: () => void) => {
start: (newIntervalMs?: number, newTask?: () => void) => void;
cancel: () => void;
setTask: (newTask: () => void) => () => void;
setInterval: (newInterval: number) => number;
};
export declare const delay: (ms: number) => Promise;
export declare const delayCancellable: (ms: number) => {
delay: Promise;
cancel: () => void;
};
export declare function promiseTimeout(ms: number, promise: (resolve: (v?: T) => void, reject: (error: any) => void) => void): Promise;
export declare function generateMessageTag(epoch?: number): string;
export declare function generateClientID(): string;
export declare function generateMessageID(): string;
export declare function decryptWA(message: string | Buffer, macKey: Buffer, encKey: Buffer, decoder: Decoder, fromMe?: boolean): [string, Object, [number, number]?];
/** generates all the keys required to encrypt/decrypt & sign a media message */
export declare function getMediaKeys(buffer: any, mediaType: MessageType): {
iv: Buffer;
cipherKey: Buffer;
macKey: Buffer;
};
export declare const compressImage: (bufferOrFilePath: Buffer | string) => Promise;
export declare const generateProfilePicture: (buffer: Buffer) => Promise<{
img: Buffer;
preview: Buffer;
}>;
export declare const ProxyAgent: (host: string | URL) => Agent;
/** gets the SHA256 of the given media message */
export declare const mediaMessageSHA256B64: (message: WAMessageContent) => string;
export declare function getAudioDuration(buffer: Buffer | string): Promise;
export declare const toReadable: (buffer: Buffer) => Readable;
export declare const getStream: (item: WAMediaUpload) => Promise<{
stream: Readable;
type: string;
}>;
/** generates a thumbnail for a given media, if required */
export declare function generateThumbnail(file: string, mediaType: MessageType, info: MessageOptions): Promise;
export declare const getGotStream: (url: string | URL, options?: Options & {
isStream?: true;
}) => Promise;
export declare const encryptedStream: (media: WAMediaUpload, mediaType: MessageType, saveOriginalFileIfRequired?: boolean) => Promise<{
mediaKey: Buffer;
encBodyPath: string;
bodyPath: string;
mac: Buffer;
fileEncSha256: Buffer;
fileSha256: Buffer;
fileLength: number;
didSaveToTmpPath: boolean;
}>;
/**
* Decode a media message (video, image, document, audio) & return decrypted buffer
* @param message the media message you want to decode
*/
export declare function decryptMediaMessageBuffer(message: WAMessageContent): Promise;
export declare function extensionForMediaMessage(message: WAMessageContent): string;