import { CoreMakerequest, ENVELOPES, Message, MessageResponse, RoomConfig, Room_Details, SelfData, SpeedyFile, ToMessage } from "./types";
import { AttachedData, SpeedyError, Webhook } from "./types";
import { AbbreviatedSpeedyCard, HeaderConfig, SpeedyCard } from "./cards";
import { Middleware } from "./types";
export declare class SpeedyBot<S extends string = string> {
    private _token;
    private makeRequest;
    private middlewares;
    private topMiddleware;
    private fallbackText;
    private errorHandler;
    constructor(_token?: string, makeRequest?: CoreMakerequest);
    private secrets;
    addSecret(key: S, value: string | number): void;
    addSecrets(payload: {
        [key: string]: string | number;
    }): void;
    getSecret(key: S): string | number | undefined;
    API: {
        messages: string;
        attachments: string;
        user: {
            self: string;
            getPersonDetails: string;
        };
        rooms: string;
        roomDetails: string;
        webhooks: string;
    };
    setToken(token: string): this;
    getToken(): string;
    setFallbackText(t: string): void;
    insertStepToFront(middleware: Middleware): void;
    pickRandom<P>(list: P[]): P;
    pickRandom<P>(min: number, max: number): number;
    pickRandom<P>(listOrMin: P[] | number, max?: number): P | number;
    addStep<T = AttachedData>(middleware: Middleware<T>): void;
    addStepSequence<T = AttachedData>(middlewares: Middleware<T>[]): void;
    regex(reg: RegExp, cb: Middleware): void;
    onCamera(cb: Middleware, formats?: string[]): void;
    exact(keyword: string, cb: Middleware): void;
    contains(keyword: string | string[], cb: Middleware): void;
    private onReject;
    captureError(func: (e: SpeedyError) => void | unknown): void;
    runMiddleware(env: ENVELOPES, startingCtx?: {
        [key: string]: string | number;
    }): Promise<boolean>;
    private resolveDestination;
    sendTo(emailOrRoomId: string | {
        personId: string;
    }, message: Message): Promise<MessageResponse>;
    _send(payload: ToMessage): Promise<MessageResponse>;
    validateToken(token: string): Promise<boolean>;
    card(config?: Partial<AbbreviatedSpeedyCard & {
        label: string;
    }>): SpeedyCard;
    stashCard(secret: string | number, message?: string, unwrapLabel?: string, destroyLabel?: string): SpeedyCard;
    errorCard(title: string, message: string): SpeedyCard;
    successCard(title: string, message: string): SpeedyCard;
    editMessage(roomId: string, messageId: string, message: string): Promise<MessageResponse>;
    replyTo(roomIdParam: MessageResponse | string, param2: string | undefined, param3?: string): Promise<MessageResponse>;
    private detectType;
    deleteMessage(msgId: string): Promise<unknown>;
    deleteWebhook(webhookId: string): Promise<void>;
    getWebhooks(): Promise<{
        items: Webhook[];
    }>;
    fetchWebhooks(): Promise<{
        id: string;
        name: string;
        resource: string;
        targetUrl: string;
    }[]>;
    Setup(url: string, secret: string): Promise<[Webhook, Webhook]>;
    getRecentRooms(limit?: number): Promise<{
        type: string;
        title: string;
        id: string;
    }[]>;
    createAttachmentActionsWebhook(url: string, secret?: string): Promise<Webhook>;
    createFirehose(url: string, secret?: string): Promise<Webhook>;
    createWebhook(payload: {
        resource: string;
        event: string;
        targetUrl: string;
        name: string;
        secret?: string;
    }): Promise<Webhook>;
    private checkAuthor;
    getSelf(token?: string): Promise<SelfData>;
    whoAmI(): Promise<SelfData & {
        webhooks: Webhook[];
    }>;
    private buildDetails;
    getPerson(personId: string): Promise<SelfData>;
    getRoom(roomId: string): Promise<Room_Details>;
    private getData;
    private generateFileName;
    rando(): string;
    private handleExtension;
    sendFileTo(destination: string | {
        personId: string;
    }, data: any, extensionOrFileName: string, textLabel?: string, contentType?: string | null): Promise<MessageResponse>;
    getFile(url: string, opts?: {
        responseType?: "arraybuffer" | "json";
    }): Promise<SpeedyFile & {
        data: unknown;
    }>;
    private extractFiledata;
    peekFile(url: string): Promise<Omit<SpeedyFile, "data">>;
    private guessContentType;
    fuzzyMatch(candidate: string, options: string[]): boolean;
    convertToHash(arr: string[]): {
        [key: string]: string;
    };
    appCard(appName: string, logoUrl: string, config?: Omit<HeaderConfig, "iconURL">): SpeedyCard;
    private fetchData;
    private buildQueryURL;
    getAllRooms(options?: Partial<RoomConfig>): Promise<Room_Details[]>;
}
