import { type BookingSessionOutcomeV1 } from "@voyant-travel/catalog-contracts/booking-engine/session-contracts"; import { type VoyantFetcher } from "./client.js"; export interface ManualBookingSessionClientOptions { baseUrl: string; fetcher: VoyantFetcher; } export interface ManualBookingSessionContinuation { sessionId: string; revision: number; quoteId: string; holdId: string; commitIdempotencyKey: string; } export interface ManualBookingSessionCommitInput { productId: string; selection: Record; quantity: number; idempotencyKey: string; payment?: { returnUrl?: string; cancelUrl?: string; }; continuation?: ManualBookingSessionContinuation; /** Persisted before Commit so a lost response can be retried idempotently. */ onContinuation?: (continuation: ManualBookingSessionContinuation) => void; } export type ManualBookingSessionCommitResult = { kind: "committed"; bookingId: string; } | { kind: "payment_required"; sessionId: string; revision: number; quoteId: string; holdId: string; commitIdempotencyKey: string; redirectUrl: string | null; }; export declare function commitManualBookingSessionV1(client: ManualBookingSessionClientOptions, input: ManualBookingSessionCommitInput): Promise; export declare class ManualBookingSessionError extends Error { readonly outcome: BookingSessionOutcomeV1; readonly recovery: ManualBookingSessionRecovery; constructor(outcome: BookingSessionOutcomeV1); } export type ManualBookingSessionRecovery = "revisionConflict" | "quoteChanged" | "availabilityChanged" | "quoteUnavailable" | "commitRejected" | "notAuthorized" | "unknown";