import { ZentinelObject, ZentinelRequest } from ".";
import { ZentinelMessageTypes } from "../../core";
import { CheckUser, Consumer, ProviderLogoUrl, Question } from "../auth";
import { Category } from "../categories";
export declare type ZentinelResponse<Type extends ZentinelMessageTypes> = {
    messageId: string;
    type: ZentinelMessageTypes;
    body?: ZentinelResponseBodyType<Type>;
    error?: ZentinelError;
};
export interface ZentinelError {
    message: string;
    errorInstance: Error;
    request: ZentinelRequest<ZentinelMessageTypes>;
}
export interface ZentinelResponseBodyTypes {
    [ZentinelMessageTypes.login]: Consumer & {
        publicKey: string;
    };
    [ZentinelMessageTypes.restoreSession]: Consumer;
    [ZentinelMessageTypes.token]: string;
    [ZentinelMessageTypes.initSessionPopup]: Consumer;
    [ZentinelMessageTypes.getCategory]: Category;
    [ZentinelMessageTypes.loadData]: ZentinelObject;
    [ZentinelMessageTypes.saveData]: string;
    [ZentinelMessageTypes.registration]: Consumer;
    [ZentinelMessageTypes.confirmEmail]: string;
    [ZentinelMessageTypes.updateSharing]: boolean;
    [ZentinelMessageTypes.checkUser]: CheckUser;
    [ZentinelMessageTypes.sendConfirmMigrationEmail]: boolean;
    [ZentinelMessageTypes.sendConfirmRegistrationEmail]: boolean;
    [ZentinelMessageTypes.checkToken]: boolean;
    [ZentinelMessageTypes.getAllQuestions]: Question[];
    [ZentinelMessageTypes.getMyQuestions]: Question[];
    [ZentinelMessageTypes.getProviderLogoUrl]: ProviderLogoUrl;
}
export declare type ZentinelResponseBodyType<Type extends ZentinelMessageTypes> = Type extends keyof ZentinelResponseBodyTypes ? ZentinelResponseBodyTypes[Type] : never;
export declare type ZentinelResponseMessage = ZentinelResponse<ZentinelMessageTypes>;
