/** Guarded MCP tools for the provider-neutral catalog booking engine. */ import { quoteResponseV1 } from "@voyant-travel/catalog-contracts/booking-engine/contracts"; import { type ToolAudiencePolicy, type ToolContext } from "@voyant-travel/tools"; import { z } from "zod"; import type { CatalogBookingQuoteBody } from "./booking-engine/index.js"; import { quoteBodySchema } from "./booking-engine/routes-contracts.js"; declare const orderListInputSchema: z.ZodObject<{ bookingId: z.ZodOptional; entityModule: z.ZodOptional; sourceKinds: z.ZodOptional>; limit: z.ZodDefault; offset: z.ZodDefault; }, z.core.$strip>; declare const orderIdInputSchema: z.ZodObject<{ id: z.ZodString; }, z.core.$strip>; type QuoteInput = z.infer; type OrderListInput = z.infer; export interface CatalogBookingToolServices { quote(input: CatalogBookingQuoteBody): Promise>; listOrders(input: OrderListInput): Promise<{ rows: unknown[]; }>; getOrder(id: string): Promise; } export type CatalogBookingToolContext = ToolContext & { catalogBooking?: CatalogBookingToolServices; }; export declare const quoteCatalogEntityDefinition: { readonly capabilityId: "@voyant-travel/catalog#booking-engine#tool.quote-catalog-entity"; readonly name: "quote_catalog_entity"; readonly description: "Resolve live sellability and pricing for a catalog entity, persist a short-lived quote, and return the quote identifier needed for booking."; readonly inputSchema: z.ZodObject<{ entityModule: z.ZodString; entityId: z.ZodString; sourceKind: z.ZodOptional; sourceProvider: z.ZodOptional; sourceConnectionId: z.ZodOptional; sourceRef: z.ZodOptional; scope: z.ZodOptional; audience: z.ZodOptional>; market: z.ZodOptional; currency: z.ZodOptional; }, z.core.$strip>>; parameters: z.ZodOptional>; draft: z.ZodOptional>; ttlMs: z.ZodOptional; }, z.core.$strip>; readonly outputSchema: z.ZodObject<{ quoteId: z.ZodString; quotedAt: z.ZodString; expiresAt: z.ZodString; available: z.ZodBoolean; invalidReason: z.ZodOptional; shape: z.ZodOptional; configureSubSteps: z.ZodOptional; required: z.ZodLiteral; }, z.core.$strip>, z.ZodObject<{ kind: z.ZodLiteral<"product-option">; options: z.ZodArray>; name: z.ZodString; description: z.ZodOptional>; isDefault: z.ZodOptional; units: z.ZodOptional>; unitType: z.ZodOptional>; minQuantity: z.ZodOptional>; maxQuantity: z.ZodOptional>; }, z.core.$strip>>>; }, z.core.$strip>>; }, z.core.$strip>, z.ZodObject<{ kind: z.ZodLiteral<"option-units">; }, z.core.$strip>, z.ZodObject<{ kind: z.ZodLiteral<"cabin-category">; categories: z.ZodArray; name: z.ZodString; type: z.ZodOptional; capacityMin: z.ZodOptional; capacityMax: z.ZodOptional; description: z.ZodOptional; }, z.core.$strip>>; }, z.core.$strip>, z.ZodObject<{ kind: z.ZodLiteral<"cabin-number">; perCategory: z.ZodRecord; label: z.ZodString; capacity: z.ZodOptional; hasAccessibilityFeatures: z.ZodOptional; }, z.core.$strip>>>; }, z.core.$strip>, z.ZodObject<{ kind: z.ZodLiteral<"date-range">; minNights: z.ZodNumber; maxNights: z.ZodNumber; }, z.core.$strip>, z.ZodObject<{ kind: z.ZodLiteral<"occupancy">; bands: z.ZodArray; maxAge: z.ZodOptional; minCount: z.ZodNumber; maxCount: z.ZodNumber; }, z.core.$strip>>; }, z.core.$strip>, z.ZodObject<{ kind: z.ZodLiteral<"air-arrangement">; required: z.ZodOptional; }, z.core.$strip>], "kind">>>; paxBands: z.ZodArray; maxAge: z.ZodOptional; minCount: z.ZodNumber; maxCount: z.ZodNumber; }, z.core.$strip>>; paxBandsAllowedTotal: z.ZodObject<{ min: z.ZodNumber; max: z.ZodNumber; }, z.core.$strip>; paxBandDependencies: z.ZodOptional; maxPerMaster: z.ZodOptional; maxDependentSum: z.ZodOptional; }, z.core.$strip>>>; travelerFields: z.ZodArray>>; appliesToBands: z.ZodOptional>; }, z.core.$strip>>; bookingFields: z.ZodArray; }, z.core.$strip>>; accommodation: z.ZodOptional>; capacity: z.ZodOptional>; baseRateHint: z.ZodOptional>; ratePlans: z.ZodOptional>; chargeFrequency: z.ZodOptional>; cancellationPolicy: z.ZodOptional>; inclusions: z.ZodOptional>; currency: z.ZodOptional; }, z.core.$strip>>>; }, z.core.$strip>>>; sharedRoomAllowed: z.ZodBoolean; subSteps: z.ZodOptional; options: z.ZodArray>; capacity: z.ZodOptional>; baseRateHint: z.ZodOptional>; ratePlans: z.ZodOptional>; chargeFrequency: z.ZodOptional>; cancellationPolicy: z.ZodOptional>; inclusions: z.ZodOptional>; currency: z.ZodOptional; }, z.core.$strip>>>; }, z.core.$strip>>; sharedRoomAllowed: z.ZodBoolean; }, z.core.$strip>, z.ZodObject<{ kind: z.ZodLiteral<"extensions">; options: z.ZodArray>; side: z.ZodEnum<{ pre: "pre"; post: "post"; }>; nights: z.ZodOptional>; pricePerPersonHint: z.ZodOptional>; }, z.core.$strip>>; allowsPre: z.ZodBoolean; allowsPost: z.ZodBoolean; }, z.core.$strip>], "kind">>>; }, z.core.$strip>>; addons: z.ZodOptional>; kind: z.ZodEnum<{ extras: "extras"; excursions: "excursions"; insurance: "insurance"; }>; groupKey: z.ZodOptional>; pricingMode: z.ZodOptional>; unitAmountCents: z.ZodOptional>; currency: z.ZodOptional>; pricedPerPerson: z.ZodOptional>; selectionType: z.ZodOptional>>; minQuantity: z.ZodOptional>; maxQuantity: z.ZodOptional>; defaultQuantity: z.ZodOptional>; }, z.core.$strip>>>; groups: z.ZodOptional; label: z.ZodString; groupBy: z.ZodOptional>; perGuestSelection: z.ZodBoolean; items: z.ZodArray>; kind: z.ZodEnum<{ extras: "extras"; excursions: "excursions"; insurance: "insurance"; }>; groupKey: z.ZodOptional>; pricingMode: z.ZodOptional>; unitAmountCents: z.ZodOptional>; currency: z.ZodOptional>; pricedPerPerson: z.ZodOptional>; selectionType: z.ZodOptional>>; minQuantity: z.ZodOptional>; maxQuantity: z.ZodOptional>; defaultQuantity: z.ZodOptional>; }, z.core.$strip>>; }, z.core.$strip>>>; }, z.core.$strip>>; paymentIntents: z.ZodArray>; }, z.core.$strip>>; pricing: z.ZodOptional; label: z.ZodString; quantity: z.ZodOptional; unitAmount: z.ZodNumber; totalAmount: z.ZodNumber; taxIncluded: z.ZodOptional; pricingBasis: z.ZodOptional>; componentId: z.ZodOptional; authority: z.ZodOptional>; }, z.core.$strip>>; taxes: z.ZodArray; scope: z.ZodOptional>; componentId: z.ZodOptional; }, z.core.$strip>>; subtotal: z.ZodNumber; taxTotal: z.ZodNumber; total: z.ZodNumber; policyEvidence: z.ZodOptional; bookingTerms: z.ZodOptional; }, z.core.$strip>>; componentPolicies: z.ZodOptional; bookingTerms: z.ZodOptional; componentId: z.ZodString; }, z.core.$strip>>>; }, z.core.$strip>>; upstreamPayload: z.ZodOptional>; }, z.core.$strip>; readonly tier: "write"; readonly riskPolicy: { readonly destructive: false; readonly reversible: true; readonly dryRunSupported: false; readonly sideEffects: readonly ["data-write"]; }; readonly handler: (input: QuoteInput, ctx: CatalogBookingToolContext) => Promise<{ quoteId: string; quotedAt: string; expiresAt: string; available: boolean; invalidReason?: string | undefined; shape?: { showsConfigure: boolean; showsBilling: boolean; showsTravelers: boolean; showsAccommodation: boolean; showsAddons: boolean; showsPayment: boolean; showsReview: true; paxBands: { code: string; label: string; minCount: number; maxCount: number; minAge?: number | undefined; maxAge?: number | undefined; }[]; paxBandsAllowedTotal: { min: number; max: number; }; travelerFields: { key: string; label: string; type: string; required: boolean; options?: { value: string; label: string; }[] | undefined; appliesToBands?: string[] | undefined; }[]; bookingFields: { key: string; label: string; type: string; required: boolean; group: "billing" | "company" | "preferences"; }[]; paymentIntents: ("hold" | "card" | "bank_transfer" | "ticket_on_credit" | "inquiry")[]; configureSubSteps?: ({ kind: "departure"; required: true; } | { kind: "product-option"; options: { id: string; name: string; code?: string | null | undefined; description?: string | null | undefined; isDefault?: boolean | undefined; units?: { id: string; name: string; description?: string | null | undefined; unitType?: string | null | undefined; minQuantity?: number | null | undefined; maxQuantity?: number | null | undefined; }[] | undefined; }[]; } | { kind: "option-units"; } | { kind: "cabin-category"; categories: { id: string; name: string; code?: string | undefined; type?: string | undefined; capacityMin?: number | undefined; capacityMax?: number | undefined; description?: string | undefined; }[]; } | { kind: "cabin-number"; perCategory: Record; } | { kind: "date-range"; minNights: number; maxNights: number; } | { kind: "occupancy"; bands: { code: string; label: string; minCount: number; maxCount: number; minAge?: number | undefined; maxAge?: number | undefined; }[]; } | { kind: "air-arrangement"; required?: boolean | undefined; })[] | undefined; paxBandDependencies?: { dependentCode: string; masterCode: string; type: "requires" | "limits_per_master" | "limits_sum" | "excludes"; maxPerMaster?: number | undefined; maxDependentSum?: number | undefined; }[] | undefined; accommodation?: { sharedRoomAllowed: boolean; roomOptions?: { id: string; name: string; description?: string | null | undefined; capacity?: number | null | undefined; baseRateHint?: number | null | undefined; ratePlans?: { id: string; name: string; description?: string | null | undefined; chargeFrequency?: "per_night" | "per_stay" | undefined; cancellationPolicy?: string | null | undefined; inclusions?: string[] | undefined; currency?: string | undefined; }[] | undefined; }[] | undefined; subSteps?: ({ kind: "rooms"; options: { id: string; name: string; description?: string | null | undefined; capacity?: number | null | undefined; baseRateHint?: number | null | undefined; ratePlans?: { id: string; name: string; description?: string | null | undefined; chargeFrequency?: "per_night" | "per_stay" | undefined; cancellationPolicy?: string | null | undefined; inclusions?: string[] | undefined; currency?: string | undefined; }[] | undefined; }[]; sharedRoomAllowed: boolean; } | { kind: "extensions"; options: { id: string; name: string; side: "post" | "pre"; city?: string | null | undefined; nights?: number | null | undefined; pricePerPersonHint?: number | null | undefined; }[]; allowsPre: boolean; allowsPost: boolean; })[] | undefined; } | undefined; addons?: { catalog?: { id: string; name: string; kind: "extras" | "excursions" | "insurance"; description?: string | null | undefined; groupKey?: string | null | undefined; pricingMode?: string | null | undefined; unitAmountCents?: number | null | undefined; currency?: string | null | undefined; pricedPerPerson?: boolean | null | undefined; selectionType?: "optional" | "required" | "unavailable" | "default_selected" | null | undefined; minQuantity?: number | null | undefined; maxQuantity?: number | null | undefined; defaultQuantity?: number | null | undefined; }[] | undefined; groups?: { kind: "extras" | "excursions" | "insurance"; label: string; perGuestSelection: boolean; items: { id: string; name: string; kind: "extras" | "excursions" | "insurance"; description?: string | null | undefined; groupKey?: string | null | undefined; pricingMode?: string | null | undefined; unitAmountCents?: number | null | undefined; currency?: string | null | undefined; pricedPerPerson?: boolean | null | undefined; selectionType?: "optional" | "required" | "unavailable" | "default_selected" | null | undefined; minQuantity?: number | null | undefined; maxQuantity?: number | null | undefined; defaultQuantity?: number | null | undefined; }[]; groupBy?: "port" | "day" | undefined; }[] | undefined; } | undefined; } | undefined; pricing?: { currency: string; lines: { kind: "accommodation" | "base" | "addon" | "supplement" | "discount" | "fee"; label: string; unitAmount: number; totalAmount: number; quantity?: number | undefined; taxIncluded?: boolean | undefined; pricingBasis?: "per_person" | "per_unit" | "per_booking" | undefined; componentId?: string | undefined; authority?: "booking_quote" | "accepted_proposal_manual" | undefined; }[]; taxes: { code: string; label: string; rate: number; amount: number; base: number; includedInPrice?: boolean | undefined; scope?: "included" | "excluded" | "withheld" | undefined; componentId?: string | undefined; }[]; subtotal: number; taxTotal: number; total: number; policyEvidence?: { cancellation?: unknown; bookingTerms?: unknown; } | undefined; componentPolicies?: { componentId: string; cancellation?: unknown; bookingTerms?: unknown; }[] | undefined; } | undefined; upstreamPayload?: Record | undefined; }>; readonly owner: string; readonly capabilityVersion: string; readonly requiredScopes: readonly string[]; readonly audience: ToolAudiencePolicy; }; export declare const listCatalogOrdersDefinition: { readonly capabilityId: "@voyant-travel/catalog#booking-engine#tool.list-catalog-orders"; readonly name: "list_catalog_orders"; readonly description: "List immutable catalog booking snapshots across verticals. Staff-only and read-only."; readonly inputSchema: z.ZodObject<{ bookingId: z.ZodOptional; entityModule: z.ZodOptional; sourceKinds: z.ZodOptional>; limit: z.ZodDefault; offset: z.ZodDefault; }, z.core.$strip>; readonly outputSchema: z.ZodObject<{ rows: z.ZodArray; source_connection_id: z.ZodNullable; source_ref: z.ZodNullable; frozen_payload: z.ZodRecord; overlay_state_at_capture: z.ZodNullable>; pricing_base_amount: z.ZodNullable; pricing_taxes: z.ZodNullable; pricing_fees: z.ZodNullable; pricing_surcharges: z.ZodNullable; pricing_currency: z.ZodNullable; pricing_breakdown: z.ZodNullable>; pricing_applied_offers: z.ZodNullable>>; idempotency_key: z.ZodNullable; captured_at: z.ZodString; }, z.core.$strip>>; }, z.core.$strip>; readonly tier: "sensitive"; readonly riskPolicy: import("@voyant-travel/tools").RiskPolicy; readonly annotations: { readonly readOnlyHint: true; readonly idempotentHint: true; }; readonly handler: (input: OrderListInput, ctx: CatalogBookingToolContext) => Promise<{ rows: { id: string; booking_id: string; entity_module: string; entity_id: string; source_kind: string; source_provider: string | null; source_connection_id: string | null; source_ref: string | null; frozen_payload: Record; overlay_state_at_capture: Record | null; pricing_base_amount: string | null; pricing_taxes: string | null; pricing_fees: string | null; pricing_surcharges: string | null; pricing_currency: string | null; pricing_breakdown: Record | null; pricing_applied_offers: Record[] | null; idempotency_key: string | null; captured_at: string; }[]; }>; readonly owner: string; readonly capabilityVersion: string; readonly requiredScopes: readonly string[]; readonly audience: ToolAudiencePolicy; }; export declare const getCatalogOrderDefinition: { readonly capabilityId: "@voyant-travel/catalog#booking-engine#tool.get-catalog-order"; readonly name: "get_catalog_order"; readonly description: "Read one immutable catalog booking snapshot by id. Staff-only and read-only."; readonly inputSchema: z.ZodObject<{ id: z.ZodString; }, z.core.$strip>; readonly outputSchema: z.ZodNullable; source_connection_id: z.ZodNullable; source_ref: z.ZodNullable; frozen_payload: z.ZodRecord; overlay_state_at_capture: z.ZodNullable>; pricing_base_amount: z.ZodNullable; pricing_taxes: z.ZodNullable; pricing_fees: z.ZodNullable; pricing_surcharges: z.ZodNullable; pricing_currency: z.ZodNullable; pricing_breakdown: z.ZodNullable>; pricing_applied_offers: z.ZodNullable>>; idempotency_key: z.ZodNullable; captured_at: z.ZodString; }, z.core.$strip>>; readonly tier: "sensitive"; readonly riskPolicy: import("@voyant-travel/tools").RiskPolicy; readonly annotations: { readonly readOnlyHint: true; readonly idempotentHint: true; }; readonly handler: ({ id }: z.infer, ctx: CatalogBookingToolContext) => Promise<{ id: string; booking_id: string; entity_module: string; entity_id: string; source_kind: string; source_provider: string | null; source_connection_id: string | null; source_ref: string | null; frozen_payload: Record; overlay_state_at_capture: Record | null; pricing_base_amount: string | null; pricing_taxes: string | null; pricing_fees: string | null; pricing_surcharges: string | null; pricing_currency: string | null; pricing_breakdown: Record | null; pricing_applied_offers: Record[] | null; idempotency_key: string | null; captured_at: string; } | null>; readonly owner: string; readonly capabilityVersion: string; readonly requiredScopes: readonly string[]; readonly audience: ToolAudiencePolicy; }; export {};