/// <reference types="node" />
import { EventEmitter } from 'events';
import { FacebookBatchQueue } from 'facebook-batch';
import { JsonObject } from 'type-fest';
import { MessengerClient } from 'messaging-api-messenger';
import Context from '../context/Context';
import Session from '../session/Session';
import { RequestContext } from '../types';
import MessengerEvent from './MessengerEvent';
import * as MessengerTypes from './MessengerTypes';
export declare type MessengerContextOptions = {
    appId?: string;
    client: MessengerClient;
    event: MessengerEvent;
    session?: Session;
    initialState?: JsonObject;
    requestContext?: RequestContext;
    customAccessToken?: string;
    batchQueue?: FacebookBatchQueue | null;
    emitter?: EventEmitter;
};
declare class MessengerContext extends Context<MessengerClient, MessengerEvent> {
    _appId: string | null;
    _customAccessToken: string | null;
    _personaId: string | null;
    _batchQueue: FacebookBatchQueue | null;
    constructor({ appId, client, event, session, initialState, requestContext, customAccessToken, batchQueue, emitter, }: MessengerContextOptions);
    get platform(): 'messenger';
    get accessToken(): string | null;
    _getMethodOptions<O extends object>(options: O): {
        accessToken?: string;
    } & O;
    _getSenderActionMethodOptions<O extends object>(options: O): {
        accessToken?: string;
        personaId?: string;
    } & O;
    _getSendMethodOptions<O extends {
        tag?: MessengerTypes.MessageTag;
    }>(options: O): {
        accessToken?: string;
        personaId?: string;
        messagingType: MessengerTypes.MessagingType;
    } & O;
    usePersona(personaId: string): void;
    useAccessToken(accessToken: string): void;
    typing(milliseconds: number): Promise<void>;
    sendText(text: string, options?: MessengerTypes.SendOption): Promise<MessengerTypes.SendMessageSuccessResponse | undefined>;
    getUserProfile(options?: {
        fields?: MessengerTypes.UserProfileField[];
    }): Promise<MessengerTypes.User | null>;
    getUserPersistentMenu(): Promise<MessengerTypes.PersistentMenu | null>;
    setUserPersistentMenu(attrs: MessengerTypes.PersistentMenu, options?: {
        composerInputDisabled?: boolean;
    }): Promise<MessengerTypes.MutationSuccessResponse | undefined>;
    deleteUserPersistentMenu(): Promise<MessengerTypes.MutationSuccessResponse | undefined>;
    sendSenderAction(senderAction: MessengerTypes.SenderAction, options?: MessengerTypes.SendOption): Promise<MessengerTypes.SendSenderActionResponse | undefined>;
    typingOn(options?: MessengerTypes.SendOption): Promise<MessengerTypes.SendSenderActionResponse | undefined>;
    typingOff(options?: MessengerTypes.SendOption): Promise<MessengerTypes.SendSenderActionResponse | undefined>;
    markSeen(): Promise<MessengerTypes.SendSenderActionResponse | undefined>;
    passThreadControl(targetAppId: number, metadata?: string): Promise<{
        success: true;
    } | undefined>;
    passThreadControlToPageInbox(metadata?: string): Promise<{
        success: true;
    } | undefined>;
    takeThreadControl(metadata?: string): Promise<{
        success: true;
    } | undefined>;
    requestThreadControl(metadata?: string): Promise<{
        success: true;
    } | undefined>;
    getThreadOwner(): Promise<{
        appId: string;
    } | undefined>;
    isThreadOwner(): Promise<boolean>;
    associateLabel(labelId: number): Promise<{
        success: true;
    } | undefined>;
    dissociateLabel(labelId: number): Promise<{
        success: true;
    } | undefined>;
    getAssociatedLabels(): Promise<{
        data: {
            name: string;
            id: string;
        }[];
        paging: {
            cursors: {
                before: string;
                after: string;
            };
        };
    } | undefined>;
    sendMessage(message: MessengerTypes.Message, options?: MessengerTypes.SendOption): Promise<MessengerTypes.SendMessageSuccessResponse | undefined>;
    sendAttachment(attachment: MessengerTypes.Attachment, options?: MessengerTypes.SendOption): Promise<MessengerTypes.SendMessageSuccessResponse | undefined>;
    sendImage(image: string | MessengerTypes.FileData | MessengerTypes.MediaAttachmentPayload, options?: MessengerTypes.SendOption): Promise<MessengerTypes.SendMessageSuccessResponse | undefined>;
    sendAudio(audio: string | MessengerTypes.FileData | MessengerTypes.MediaAttachmentPayload, options?: MessengerTypes.SendOption): Promise<MessengerTypes.SendMessageSuccessResponse | undefined>;
    sendVideo(video: string | MessengerTypes.FileData | MessengerTypes.MediaAttachmentPayload, options?: MessengerTypes.SendOption): Promise<MessengerTypes.SendMessageSuccessResponse | undefined>;
    sendFile(file: string | MessengerTypes.FileData | MessengerTypes.MediaAttachmentPayload, options?: MessengerTypes.SendOption): Promise<MessengerTypes.SendMessageSuccessResponse | undefined>;
    sendTemplate(payload: MessengerTypes.TemplateAttachmentPayload, options?: MessengerTypes.SendOption): Promise<MessengerTypes.SendMessageSuccessResponse | undefined>;
    sendGenericTemplate(elements: MessengerTypes.TemplateElement[], options: {
        imageAspectRatio?: 'horizontal' | 'square';
    } & MessengerTypes.SendOption): Promise<MessengerTypes.SendMessageSuccessResponse | undefined>;
    sendButtonTemplate(text: string, buttons: MessengerTypes.TemplateButton[], options?: MessengerTypes.SendOption): Promise<MessengerTypes.SendMessageSuccessResponse | undefined>;
    sendMediaTemplate(elements: MessengerTypes.MediaElement[], options?: MessengerTypes.SendOption): Promise<MessengerTypes.SendMessageSuccessResponse | undefined>;
    sendReceiptTemplate(attrs: MessengerTypes.ReceiptAttributes, options?: MessengerTypes.SendOption): Promise<MessengerTypes.SendMessageSuccessResponse | undefined>;
    sendAirlineBoardingPassTemplate(attrs: MessengerTypes.AirlineBoardingPassAttributes, options?: MessengerTypes.SendOption): Promise<MessengerTypes.SendMessageSuccessResponse | undefined>;
    sendAirlineCheckinTemplate(attrs: MessengerTypes.AirlineCheckinAttributes, options?: MessengerTypes.SendOption): Promise<MessengerTypes.SendMessageSuccessResponse | undefined>;
    sendAirlineItineraryTemplate(attrs: MessengerTypes.AirlineItineraryAttributes, options?: MessengerTypes.SendOption): Promise<MessengerTypes.SendMessageSuccessResponse | undefined>;
    sendAirlineUpdateTemplate(attrs: MessengerTypes.AirlineUpdateAttributes, options?: MessengerTypes.SendOption): Promise<MessengerTypes.SendMessageSuccessResponse | undefined>;
    sendOneTimeNotifReqTemplate(attrs: MessengerTypes.OneTimeNotifReqAttributes, options?: MessengerTypes.SendOption): Promise<MessengerTypes.SendMessageSuccessResponse | undefined>;
}
export default MessengerContext;
//# sourceMappingURL=MessengerContext.d.ts.map