import { AuthMethodType, SharedPlanAuthenticationMethod, SharedPlanAuthenticationMethodPrimitiveProps } from './shared-plan-authentication-method';
import { SharedPlanModerator, SharedPlanModeratorPrimitiveProps } from './shared-plan-moderator';
export type SharedPlanMergeStep = 'PENDING' | 'PENDING_AUTHENTICATION' | 'WAITING_FOR_PERMISSION' | 'COLLECTING_SHARES' | 'REVEALING_DATA' | 'REVEALED' | 'COMPLETED' | 'FAILED';
export interface CollectedShare {
    id: string;
    data: string;
    key: string;
}
export interface SharedPlanMergeProcessProps {
    id: string;
    planId: string;
    step: SharedPlanMergeStep;
    collectedShares: CollectedShare[];
    requiredShares: number;
    /** Auth methods required by the plan — populated on initialize(). */
    authenticationMethods: SharedPlanAuthenticationMethod[];
    /** Moderators who need to approve — populated on initialize() for moderated plans. */
    moderators: SharedPlanModerator[];
    /** Auth methods confirmed so far — grows on each shared_plan_authenticated event. */
    authenticatedMethods: AuthMethodType[];
    /** Moderator IDs that have approved so far — grows on each shared_plan_permission_granted event. */
    approvedModeratorIds: string[];
    /** Storage layer IDs the plan is distributed across — populated on initialize(). */
    storageLayers: string[];
    /** Storage layer IDs whose shares have been successfully collected so far. */
    collectedStorageLayerIds: string[];
    createdAt: Date;
}
export declare class SharedPlanMergeProcess {
    private readonly props;
    constructor(props: SharedPlanMergeProcessProps);
    get id(): string;
    get planId(): string;
    get step(): SharedPlanMergeStep;
    get collectedShares(): CollectedShare[];
    get requiredShares(): number;
    get authenticationMethods(): SharedPlanAuthenticationMethod[];
    get moderators(): SharedPlanModerator[];
    get authenticatedMethods(): AuthMethodType[];
    get approvedModeratorIds(): string[];
    get storageLayers(): string[];
    get collectedStorageLayerIds(): string[];
    get collectedCount(): number;
    get hasEnoughShares(): boolean;
    get pendingStorageLayers(): string[];
    static create(props: Omit<SharedPlanMergeProcessProps, 'step' | 'collectedShares' | 'authenticatedMethods' | 'approvedModeratorIds' | 'collectedStorageLayerIds'>): SharedPlanMergeProcess;
    withStep(step: SharedPlanMergeStep): SharedPlanMergeProcess;
    withShare(share: CollectedShare): SharedPlanMergeProcess;
    withAuthenticatedMethods(methods: AuthMethodType[]): SharedPlanMergeProcess;
    withApprovedModerators(ids: string[]): SharedPlanMergeProcess;
    withCollectedStorageLayer(layerId: string, share: CollectedShare): SharedPlanMergeProcess;
    toPrimitives(): {
        id: string;
        planId: string;
        step: SharedPlanMergeStep;
        collectedShares: CollectedShare[];
        requiredShares: number;
        authenticationMethods: SharedPlanAuthenticationMethodPrimitiveProps[];
        moderators: SharedPlanModeratorPrimitiveProps[];
        authenticatedMethods: AuthMethodType[];
        approvedModeratorIds: string[];
        storageLayers: string[];
        collectedStorageLayerIds: string[];
        createdAt: Date;
    };
    static fromPrimitives(raw: any): SharedPlanMergeProcess;
}
