export type JournalObservedRecord = { readonly status: 'absent'; } | { readonly status: 'present'; readonly content: string; readonly sha256: string; }; export type JournalMutation = { readonly operation: 'create'; readonly content: string; } | { readonly operation: 'replace'; readonly content: string; readonly expectedContentSha256: string; } | { readonly operation: 'unlink'; readonly expectedContentSha256: string; }; type MutationCheckpoint = 'after-create-mutation' | 'after-replace-mutation' | 'after-unlink-mutation' | 'before-ambiguity-reconciliation' | 'after-reconciliation-mutation'; interface JournalMutationCoordinatorDependencies { readonly read: () => Promise; readonly mutate: (mutation: JournalMutation) => Promise; readonly checkpoint?: (checkpoint: MutationCheckpoint) => void; readonly recoveryRequired: (message: string, cause?: unknown) => Error; } export interface JournalMutationCoordinator { readonly mutateContent: (mutation: Extract, previousContent: string | undefined, desiredContent: string, verifyDesired: (desiredContent: string) => Promise) => Promise; readonly unlinkClosed: (mutation: Extract, expectedContent: string) => Promise; } export declare function sha256(content: string): string; export declare function isExactJournalContent(observed: JournalObservedRecord, expected: string): observed is Extract; export declare function createJournalMutationCoordinator(dependencies: JournalMutationCoordinatorDependencies): JournalMutationCoordinator; export {}; //# sourceMappingURL=runtime-promotion-journal-mutation.d.ts.map