import { ZentinelObject } from ".";
import { Question } from "..";
import { ZentinelMessageTypes } from "../../core/message-types";
import { Consumer } from "../auth";
import { Category } from "../categories";
export interface ZentinelRequest<Type extends ZentinelMessageTypes> {
    messageId: string;
    type: ZentinelMessageTypes;
    payload: Type extends keyof ZentinelRequestBodyTypes ? {
        body: ZentinelRequestBodyType<Type>;
        options?: any;
    } : never;
}
export interface ZentinelRegistration {
    user: Partial<Consumer> & {
        email: string;
    };
    password: string;
}
export interface ZentinelLogin {
    login: string;
    password: string;
}
export declare type ZentinelSaveData = {
    category: Category;
    data: ZentinelObject;
};
export interface ZentinelSaveDataOptions {
    shareData: boolean;
    corporationName: string;
}
export declare type ZentinelLoadData = {
    zentinelId: string;
    category: Category;
};
export interface ZentinelEmptyBody {
}
export declare type ZentinelRequestMessage = ZentinelRequest<ZentinelMessageTypes>;
export declare type ZentinelRequestBodyTypes = {
    [ZentinelMessageTypes.login]: ZentinelLogin;
    [ZentinelMessageTypes.restoreSession]: {
        clientId: string;
    };
    [ZentinelMessageTypes.invalidateToken]: {
        publicKey: string;
    };
    [ZentinelMessageTypes.loadData]: ZentinelLoadData;
    [ZentinelMessageTypes.saveData]: ZentinelSaveData;
    [ZentinelMessageTypes.registration]: ZentinelRegistration;
    [ZentinelMessageTypes.getCategory]: {
        id: number;
    };
    [ZentinelMessageTypes.confirmEmail]: string;
    [ZentinelMessageTypes.changePassword]: {
        login: string;
        oldPassword?: string;
        newPassword: string;
    };
    [ZentinelMessageTypes.updateSharing]: ZentinelSaveData;
    [ZentinelMessageTypes.checkUser]: {
        email: string;
        providerId: string;
    };
    [ZentinelMessageTypes.sendConfirmMigrationEmail]: {
        email: string;
        providerId: string;
        zentinelUrl: string;
        redirectUrl: string;
    };
    [ZentinelMessageTypes.sendConfirmRegistrationEmail]: {
        email: string;
        providerId: string;
        zentinelUrl: string;
        redirectUrl: string;
    };
    [ZentinelMessageTypes.checkToken]: {
        token: string;
        email: string;
    };
    [ZentinelMessageTypes.getProviderLogoUrl]: {
        providerName: string;
    };
    [ZentinelMessageTypes.initSessionPopup]: any;
    [ZentinelMessageTypes.setQuestions]: Question[];
    [ZentinelMessageTypes.sendRestorationLink]: {
        email: string;
        zentinelUrl: string;
        redirectUrl: string;
    };
    [ZentinelMessageTypes.getMyQuestions]: {
        token: string;
    };
    [ZentinelMessageTypes.restoreAccount]: {
        questions: Question[];
        login: string;
    };
};
export declare type ZentinelRequestBodyType<Type extends ZentinelMessageTypes> = Type extends keyof ZentinelRequestBodyTypes ? ZentinelRequestBodyTypes[Type] : never;
