import { RequestContext } from '../types';
export * from 'messaging-api-line/dist/LineTypes';
export { LineConnectorOptions } from './LineConnector';
export { LineContextOptions } from './LineContext';
export declare type UserSource = {
    type: 'user';
    userId: string;
};
export declare type GroupSource = {
    type: 'group';
    groupId: string;
    userId?: string;
};
export declare type RoomSource = {
    type: 'room';
    roomId: string;
    userId?: string;
};
export declare type Source = UserSource | GroupSource | RoomSource;
export declare type EventTextMessage = {
    id: string;
    type: 'text';
    text: string;
    emojis?: MessageEmoji[];
};
export declare type MessageEmoji = {
    index: number;
    length: number;
    productId: string;
    emojiId: string;
};
export declare type ContentProviderLine = {
    type: 'line';
};
export declare type ContentProviderExternal = {
    type: 'external';
    originalContentUrl: string;
    previewImageUrl?: string;
};
export declare type EventImageMessage = {
    id: string;
    type: 'image';
    contentProvider: ContentProviderLine | ContentProviderExternal;
};
export declare type EventVideoMessage = {
    id: string;
    type: 'video';
    duration: number;
    contentProvider: ContentProviderLine | ContentProviderExternal;
};
export declare type EventAudioMessage = {
    id: string;
    type: 'audio';
    duration: number;
    contentProvider: ContentProviderLine | ContentProviderExternal;
};
export declare type EventFileMessage = {
    id: string;
    type: 'file';
    fileName: string;
    fileSize: number;
};
export declare type EventLocationMessage = {
    id: string;
    type: 'location';
    title: string;
    address: string;
    latitude: number;
    longitude: number;
};
export declare type EventStickerMessage = {
    id: string;
    type: 'sticker';
    packageId: string;
    stickerId: string;
};
export declare type EventMessage = EventTextMessage | EventImageMessage | EventVideoMessage | EventAudioMessage | EventFileMessage | EventLocationMessage | EventStickerMessage;
export declare type MessageEvent = {
    replyToken: string;
    type: 'message';
    mode: 'active' | 'standby';
    timestamp: number;
    source: Source;
    message: EventMessage;
};
export declare type FollowEvent = {
    replyToken: string;
    type: 'follow';
    mode: 'active' | 'standby';
    timestamp: number;
    source: Source;
};
export declare type UnfollowEvent = {
    type: 'unfollow';
    mode: 'active' | 'standby';
    timestamp: number;
    source: Source;
};
export declare type JoinEvent = {
    replyToken: string;
    type: 'join';
    mode: 'active' | 'standby';
    timestamp: number;
    source: GroupSource | RoomSource;
};
export declare type LeaveEvent = {
    type: 'leave';
    mode: 'active' | 'standby';
    timestamp: number;
    source: GroupSource | RoomSource;
};
export declare type MemberJoinedEvent = {
    replyToken: string;
    type: 'memberJoined';
    mode: 'active' | 'standby';
    timestamp: number;
    source: GroupSource | RoomSource;
    joined: {
        members: UserSource[];
    };
};
export declare type MemberLeftEvent = {
    type: 'memberLeft';
    mode: 'active' | 'standby';
    timestamp: number;
    source: GroupSource | RoomSource;
    left: {
        members: UserSource[];
    };
};
export declare type PostbackEvent = {
    replyToken: string;
    type: 'postback';
    mode: 'active' | 'standby';
    timestamp: number;
    source: Source;
    postback: Postback;
};
export declare type PostbackParams = {
    date: string;
} | {
    time: string;
} | {
    datetime: string;
};
export declare type Postback = {
    data: string;
    params?: PostbackParams;
};
export declare type BeaconEvent = {
    replyToken: string;
    type: 'beacon';
    mode: 'active' | 'standby';
    timestamp: number;
    source: Source;
    beacon: Beacon;
};
export declare type Beacon = {
    hwid: string;
    type: 'enter' | 'banner' | 'stay';
    dm?: string;
};
export declare type AccountLinkEvent = {
    replyToken: string;
    type: 'accountLink';
    mode: 'active' | 'standby';
    timestamp: number;
    source: Source;
    link: AccountLink;
};
export declare type AccountLink = {
    result: 'ok' | 'failed';
    nonce: string;
};
export declare type ThingsEvent = {
    replyToken: string;
    type: 'things';
    mode: 'active' | 'standby';
    timestamp: number;
    source: Source;
    things: Things;
};
export declare type Things = {
    deviceId: string;
    type: 'link' | 'unlink' | 'scenarioResult';
    result?: any;
};
export declare type LineEventOptions = {
    destination?: string;
};
export declare type LineRawEvent = MessageEvent | FollowEvent | UnfollowEvent | JoinEvent | LeaveEvent | MemberJoinedEvent | MemberLeftEvent | PostbackEvent | BeaconEvent | AccountLinkEvent | ThingsEvent;
export declare type LineRequestBody = {
    destination: string;
    events: LineRawEvent[];
};
export declare type LineRequestContext = RequestContext<LineRequestBody, {
    'x-line-signature'?: string;
}>;
//# sourceMappingURL=LineTypes.d.ts.map