/** Transport-neutral authorization and approval orchestration for booking status mutations. */ import { type ActionLedgerCapabilityAccessResult, type ActionLedgerRequestContextValues, actionLedgerService, type BuildActionLedgerApprovedExecutionFieldsInput, requestActionLedgerApproval } from "@voyant-travel/action-ledger"; import type { PostgresJsDatabase } from "drizzle-orm/postgres-js"; import { BOOKING_STATUS_CAPABILITIES } from "./action-ledger-capabilities.js"; export declare const BOOKING_STATUS_APPROVAL_POLICY = "bookings-status-approval-v1"; export type BookingStatusCapabilityKey = keyof typeof BOOKING_STATUS_CAPABILITIES; export type BookingStatusApprovalTargetState = { exists: false; } | { exists: true; status: string; sellCurrency: string; sellAmountCents: number | null; costAmountCents: number | null; customerPaymentPolicy: unknown; holdExpiresAt: string | null; confirmedAt: string | null; awaitingPaymentAt: string | null; paidAt: string | null; cancelledAt: string | null; completedAt: string | null; expiredAt: string | null; }; export interface BookingStatusAuthorizationInput { db: PostgresJsDatabase; key: BookingStatusCapabilityKey; actionName: string; routeOrToolName: string; bookingId: string; commandInput?: unknown; actor?: string | null; callerType?: string | null; scopes?: readonly string[] | null; isInternalRequest?: boolean | null; requestContext: ActionLedgerRequestContextValues; conditionalApprovalRequired: boolean; approvalReasonCode: string | null; approvalId?: string | null; idempotencyKey?: string | null; } export type BookingStatusAuthorizationResult = { status: "authorized"; access: ActionLedgerCapabilityAccessResult; approvedAction?: BuildActionLedgerApprovedExecutionFieldsInput; } | { status: "approval_required"; access: ActionLedgerCapabilityAccessResult; requestedAction: Awaited>["requestedAction"]; approval: Awaited>["approval"]; replayed: boolean; } | { status: "already_executed"; access: ActionLedgerCapabilityAccessResult; bookingId: string; } | { status: "denied"; access: ActionLedgerCapabilityAccessResult; } | { status: "missing_idempotency_key"; access: ActionLedgerCapabilityAccessResult; } | { status: "idempotency_conflict"; access: ActionLedgerCapabilityAccessResult; message: string; existingActionId: string; } | { status: "invalid_approval"; access: ActionLedgerCapabilityAccessResult; validation: Exclude>, { ok: true; }>; }; export declare function authorizeBookingStatusMutation(input: BookingStatusAuthorizationInput): Promise;