import { CommonPublicKeyBundleSerialized } from "../device/key-bundles/DeviceAndVirtualDeviceCommonKeyBundle";
import { Epoch } from "../EpochStorage";
import { ThisDevice } from "../device/ThisDevice";
type DeviceInEpochSerialized = {
    id: string;
} & VirtualDeviceInEpochSerialized;
type VirtualDeviceInEpochSerialized = {
    mac: string;
    keyBundle: CommonPublicKeyBundleSerialized;
};
export type GetDevicesInEpochResponse = {
    devices: DeviceInEpochSerialized[];
    virtualDevice: VirtualDeviceInEpochSerialized;
};
type EncryptedNewEpochEntropyForEveryDeviceInEpochSerialized = {
    deviceIdToEncryptedNewEpochEntropyMap: {
        [deviceId: string]: string;
    };
    virtualDeviceEncryptedNewEpochEntropy: string;
};
export type OpenNewEpochBasedOnCurrentBody = {
    encryptedNewEpochEntropyForEveryDeviceInEpoch: EncryptedNewEpochEntropyForEveryDeviceInEpochSerialized;
    newEpochMembershipProof: {
        epochThisDeviceMac: string;
        epochVirtualDeviceMac: string;
    };
};
export type OpenNewEpochBasedOnCurrentResponse = {
    openedEpochId: string;
};
export type OpenNewEpochBasedOnCurrentServerClient = {
    getDevicesInEpoch: (epochId: string) => Promise<GetDevicesInEpochResponse>;
    openNewEpochBasedOnCurrent: (currentEpochId: string, thisDeviceId: string, requestBody: OpenNewEpochBasedOnCurrentBody) => Promise<OpenNewEpochBasedOnCurrentResponse>;
};
export declare function openNewEpochBasedOnCurrent(currentEpoch: Epoch, webClient: OpenNewEpochBasedOnCurrentServerClient, thisDevice: ThisDevice): Promise<Epoch>;
export declare class InvalidVirtualDeviceServerRepresentationError extends Error {
    constructor();
}
export {};
//# sourceMappingURL=open-new-epoch-based-on-current.d.ts.map