export type BookingReservationPlanLineKind = "catalog_backed" | "non_catalog" | "manual_placeholder" | "external_order"; export type BookingReservationPlanStatus = "reserved" | "failed"; export interface BookingReservationPlanOrigin { source: "trips" | "accepted_proposal_version" | "direct_b2c" | string; tripEnvelopeId?: string | null; tripSnapshotId?: string | null; proposalId?: string | null; proposalVersionId?: string | null; commercialSnapshotIds?: string[]; metadata?: Record; } export interface BookingReservationPlanLine { planLineId: string; componentId: string; kind: BookingReservationPlanLineKind; line: TLine; } export interface SubmitBookingReservationPlanInput { reservationPlanId: string; idempotencyKey?: string | null; origin?: BookingReservationPlanOrigin; envelope: TEnvelope; lines: BookingReservationPlanLine[]; } export interface BookingReservationPlanLineContext { plan: SubmitBookingReservationPlanInput; line: BookingReservationPlanLine; } export interface BookingReservationPlanLineResult { status: "held" | "booked"; bookingId?: string; bookingGroupId?: string; orderId?: string; paymentSessionId?: string; providerRef?: string; supplierRef?: string; holdToken?: string; holdExpiresAt?: string; warnings?: string[]; } export interface BookingReservationPlanReleaseResult { released: boolean; reason?: string; } export interface SubmitBookingReservationPlanRuntime { reserveCatalogBackedLine: (input: BookingReservationPlanLineContext) => Promise; reserveNonCatalogLine?: (input: BookingReservationPlanLineContext) => Promise; releaseReservedLine?: (input: BookingReservationPlanLineContext & { result: TResult; }) => Promise; } export interface SubmittedBookingReservationPlanLine { planLineId: string; componentId: string; status: TResult["status"]; result: TResult; } export interface BookingReservationPlanFailure { componentId: string; reason: string; code?: string; details?: Record; } export interface BookingReservationPlanCompensation { componentId: string; status: "released" | "release_failed" | "release_not_configured"; reason?: string; } export interface SubmitBookingReservationPlanResult { reservationPlanId: string; status: BookingReservationPlanStatus; reserved: SubmittedBookingReservationPlanLine[]; failures: BookingReservationPlanFailure[]; compensations: BookingReservationPlanCompensation[]; warnings: string[]; } export declare function submitBookingReservationPlan(plan: SubmitBookingReservationPlanInput, runtime: SubmitBookingReservationPlanRuntime): Promise>;