import { type CancelRequest, type ModifyReservationRequest, type ReserveRequest, type ReserveResult, type SourceAdapterContext } from "../adapter/contract.js"; import type { SourceAdapterRegistry } from "./registry.js"; import { type SupplierOperationInternalRecord, type SupplierOperationRepository } from "./supplier-operations.js"; export type SupplierOperationWorkflowOutcome = { kind: "secured"; operation: SupplierOperationInternalRecord; result: ReserveResult; } | { kind: "pending"; operation: SupplierOperationInternalRecord; } | { kind: "in_doubt"; operation: SupplierOperationInternalRecord; } | { kind: "failed"; operation: SupplierOperationInternalRecord; } | { kind: "idempotency_conflict"; }; export interface DispatchSupplierReservationInput { sessionId: string; scopeKey?: string; quoteId: string; holdId?: string; commitIdempotencyKey: string; requestFingerprint: string; entityModule: string; entityId: string; sourceKind: string; sourceConnectionId: string; sourceRef: string; request: ReserveRequest; adapterContext: SourceAdapterContext; now: Date; } export interface DispatchSupplierAmendmentInput { amendmentId: string; bookingId: string; bookingItemId: string; scopeKey?: string; idempotencyKey: string; requestFingerprint: string; operationKind: "modify" | "cancel"; entityModule: string; entityId: string; sourceKind: string; sourceConnectionId: string; sourceRef: string; request: ModifyReservationRequest | CancelRequest; adapterContext: SourceAdapterContext; now: Date; } export interface SupplierOperationWorkflow { dispatch(input: DispatchSupplierReservationInput): Promise; dispatchAmendment(input: DispatchSupplierAmendmentInput): Promise; reconcile(operation: SupplierOperationInternalRecord, input: { adapterContext: SourceAdapterContext; now: Date; }): Promise; } export declare function createSupplierOperationWorkflow(deps: { repository: SupplierOperationRepository; registry: SourceAdapterRegistry; reconcileAfterMs?: number; }): SupplierOperationWorkflow; export declare function safeSupplierRequestPayload(request: ReserveRequest): Record;