import { RequestContext } from '../types';
export * from 'messaging-api-messenger/dist/MessengerTypes';
export { MessengerConnectorOptions } from './MessengerConnector';
export { FacebookBaseConnectorOptions } from './FacebookBaseConnector';
export { MessengerContextOptions } from './MessengerContext';
export declare type EventSender = {
    id: string;
};
export declare type EventRecipient = {
    id: string;
};
export declare type EventMessageQuickReply = {
    payload: string;
};
export declare type MediaAttachmentPayload = {
    url: string;
};
export declare type LocationAttachmentPayload = {
    coordinates: {
        lat: number;
        long: number;
    };
};
export declare type FallbackAttachment = {
    type: 'fallback';
    payload: null;
    title: string;
    URL: string;
};
export declare type EventMessageAttachment = {
    type: 'audio' | 'video' | 'image' | 'file';
    payload: MediaAttachmentPayload;
} | {
    type: 'location';
    payload: LocationAttachmentPayload;
} | FallbackAttachment;
declare type EventMessageTag = {
    source: string;
};
declare type EventMessageReplyTo = {
    mid: string;
};
export declare type EventMessage = {
    mid: string;
    isEcho?: boolean;
    text?: string;
    stickerId?: number;
    quickReply?: EventMessageQuickReply;
    attachments?: EventMessageAttachment[];
    tags?: EventMessageTag[];
    replyTo?: EventMessageReplyTo;
    appId?: number;
    metadata?: string;
};
export declare type EventDelivery = {
    mids: string[];
    watermark: number;
};
export declare type EventRead = {
    watermark: number;
};
export declare type EventReferral = {
    ref: string;
    source: string;
    type: string;
    originDomain?: string;
};
export declare type EventPostback = {
    title: string;
    payload?: string;
    referral?: EventReferral;
};
export declare type EventGamePlay = {
    gameId: string;
    playerId: string;
    contextType: 'SOLO' | 'THREAD' | 'GROUP';
    contextId: string;
    score: number;
    payload: string;
};
export declare type EventOptin = {
    ref: string;
    userRef?: string;
} | {
    type: 'one_time_notif_req';
    payload: string;
    oneTimeNotifToken: string;
};
export declare type EventPayment = {
    payload: string;
    requestedUserInfo: Record<string, any>;
    paymentCredential: Record<string, any>;
    amount: {
        currency: string;
        amount: string;
    };
    shippingOptionId: string;
};
export declare type EventCheckoutUpdate = {
    payload: string;
    shippingAddress: {
        id: number;
        street1: string;
        street2: string;
        city: string;
        state: string;
        country: string;
        postalCode: string;
    };
};
export declare type EventPreCheckout = {
    payload: string;
    requestedUserInfo: {
        shippingAddress: {
            name: string;
            street1: string;
            street2: string;
            city: string;
            state: string;
            country: string;
            postalCode: string;
        };
        contactName: string;
    };
    amount: {
        currency: string;
        amount: string;
    };
};
export declare type EventPolicyEnforcement = {
    action: string;
    reason: string;
};
export declare type EventAppRoles = Record<string, string[]>;
export declare type EventPassThreadControl = {
    newOwnerAppId: string;
    metadata: string;
};
export declare type EventTakeThreadControl = {
    previousOwnerAppId: string;
    metadata: string;
};
export declare type EventRequestThreadControl = {
    requestedOwnerAppId: number;
    metadata: string;
};
export declare type EventBrandedCamera = {
    contentIds: string[];
    event: string;
};
export declare type EventAccountLinking = {
    status: 'linked';
    authorizationCode: string;
} | {
    status: 'unlinked';
};
export declare type EventReaction = {
    reaction: 'smile' | 'angry' | 'sad' | 'wow' | 'love' | 'like' | 'dislike' | 'other';
    emoji: string;
    action: 'react' | 'unreact';
    mid: string;
};
export declare type MessengerRawEvent = {
    sender: EventSender;
    recipient: EventRecipient;
    timestamp: number;
    message: EventMessage;
} | {
    sender: EventSender;
    recipient: EventRecipient;
    timestamp: number;
    delivery: EventDelivery;
} | {
    sender: EventSender;
    recipient: EventRecipient;
    timestamp: number;
    read: EventRead;
} | {
    sender: EventSender;
    recipient: EventRecipient;
    timestamp: number;
    postback: EventPostback;
} | {
    sender: EventSender;
    recipient: EventRecipient;
    timestamp: number;
    accountLinking: EventAccountLinking;
} | {
    sender: EventSender;
    recipient: EventRecipient;
    timestamp: number;
    gamePlay: EventGamePlay;
} | {
    sender: EventSender;
    recipient: EventRecipient;
    timestamp: number;
    optin: EventOptin;
} | {
    sender: EventSender;
    recipient: EventRecipient;
    timestamp: number;
    referral: EventReferral;
} | {
    sender: EventSender;
    recipient: EventRecipient;
    timestamp: number;
    payment: EventPayment;
} | {
    sender: EventSender;
    recipient: EventRecipient;
    timestamp: number;
    checkoutUpdate: EventCheckoutUpdate;
} | {
    sender: EventSender;
    recipient: EventRecipient;
    timestamp: number;
    preCheckout: EventPreCheckout;
} | {
    sender: EventSender;
    recipient: EventRecipient;
    timestamp: number;
    passThreadControl: EventPassThreadControl;
} | {
    sender: EventSender;
    recipient: EventRecipient;
    timestamp: number;
    takeThreadControl: EventTakeThreadControl;
} | {
    sender: EventSender;
    recipient: EventRecipient;
    timestamp: number;
    requestThreadControl: EventRequestThreadControl;
} | {
    sender: EventSender;
    recipient: EventRecipient;
    timestamp: number;
    brandedCamera: EventBrandedCamera;
} | {
    sender: EventSender;
    recipient: EventRecipient;
    timestamp: number;
    reaction: EventReaction;
} | {
    recipient: EventRecipient;
    timestamp: number;
    appRoles: EventAppRoles;
} | {
    recipient: EventRecipient;
    timestamp: number;
    'policy-enforcement': EventPolicyEnforcement;
};
export declare type MessengerEventOptions = {
    isStandby?: boolean;
    pageId?: string | null;
};
export declare type MessengerRequestContext = RequestContext<MessengerRequestBody, {
    'x-hub-signature'?: string;
}>;
export declare type MessagingEntry = {
    id: string;
    time: number;
    messaging: MessengerRawEvent[];
} | {
    id: string;
    time: number;
    standby: ({
        sender: EventSender;
        recipient: EventRecipient;
        timestamp: number;
        message: EventMessage;
    } | {
        sender: EventSender;
        recipient: EventRecipient;
        timestamp: number;
        delivery: EventDelivery;
    } | {
        sender: EventSender;
        recipient: EventRecipient;
        timestamp: number;
        read: EventRead;
    } | {
        sender: EventSender;
        recipient: EventRecipient;
        timestamp: number;
        postback: EventPostback;
    })[];
};
export declare type MessengerRequestBody = {
    object: 'page';
    entry: MessagingEntry[];
};
//# sourceMappingURL=MessengerTypes.d.ts.map