type SnapshotId = number | string;
export type PendingHostCallResumeIdentity = {
    argumentDigest: string;
    callId: string;
    moduleId: string;
    operation: string;
    sourceHash: string;
};
export type PendingHostCallDescriptor = {
    id: SnapshotId;
    moduleId?: string;
    operation?: string;
};
export type PendingHostCallSideEffectTag = {
    kind: "host-call-side-effect";
    callId: string;
    moduleId: string;
    operation: string;
};
export type PendingHostCallIssuePolicy = {
    kind: "re-issue";
} | {
    kind: "read-side-effect";
    sideEffectTag: PendingHostCallSideEffectTag;
};
export type PendingHostCallResumePolicy = PendingHostCallIssuePolicy;
export type PendingHostCallPolicyMode = PendingHostCallIssuePolicy["kind"];
export type PendingHostCallPolicyRegistration = {
    moduleId: string;
    operation: string;
    policy: PendingHostCallPolicyMode;
};
export declare class HostOperationResumePolicyError extends Error {
    readonly moduleId: string;
    readonly operation: string;
    constructor(moduleId: string, operation: string);
}
export declare function registerPendingHostCallPolicy(registration: PendingHostCallPolicyRegistration): void;
export declare function resolvePendingHostCallIssuePolicy(call: PendingHostCallDescriptor): PendingHostCallIssuePolicy;
export declare function tagPendingHostCallAtIssue<TCall extends PendingHostCallDescriptor>(call: TCall): TCall & {
    sideEffectTag?: PendingHostCallSideEffectTag;
};
export declare function resolvePendingHostCallResumePolicy(call: PendingHostCallDescriptor & {
    sideEffectTag?: PendingHostCallSideEffectTag;
}): PendingHostCallResumePolicy;
export declare function createPendingHostCallSideEffectTag(call: PendingHostCallDescriptor): PendingHostCallSideEffectTag;
export declare function pendingHostCallResumeIdentityMatches(expected: PendingHostCallResumeIdentity, actual: PendingHostCallResumeIdentity): boolean;
export {};
