import type { HonoModule } from "@voyantjs/hono/module"; import type { Context, Hono as HonoApp } from "hono"; import { z } from "zod"; import type { IndexerAdapter, IndexerSlice, SearchFilter, SearchRequest, SearchResults, SearchSortOption } from "../indexer/contract.js"; declare const searchProjectionSchema: z.ZodEnum<{ raw: "raw"; "storefront-card": "storefront-card"; }>; declare const catalogSearchBodySchema: z.ZodObject<{ vertical: z.ZodOptional; query: z.ZodOptional; mode: z.ZodOptional>; sort: z.ZodOptional>; projection: z.ZodOptional>; filters: z.ZodOptional>>>; facets: z.ZodOptional; }, z.core.$strip>>>; pagination: z.ZodOptional; cursor: z.ZodOptional; }, z.core.$strip>>; alpha: z.ZodOptional; distance_threshold: z.ZodOptional; query_embedding: z.ZodOptional>; market: z.ZodOptional; locale: z.ZodOptional; }, z.core.$strip>; export type CatalogSearchBody = z.infer; export type CatalogSearchProjection = z.infer; export type CatalogSearchSort = SearchSortOption; export interface StorefrontCatalogCard { id: string; name: string | null; slug: string | null; primaryCategory: StorefrontCatalogCardTaxon | null; media: { thumbnailUrl: string | null; coverMediaUrl: string | null; }; priceFrom: { amountCents: number; currency: string | null; originalAmountCents: number | null; } | null; offerBadges: StorefrontCatalogCardOffer[]; departures: { upcomingCount: number | null; nextDepartureAt: string | null; nextDepartureDate: string | null; months: string[]; dates: string[]; }; destinations: { regions: string[]; countries: string[]; cities: string[]; ids: string[]; slugs: string[]; }; coordinates: { latitude: number; longitude: number; } | null; } export interface StorefrontCatalogCardTaxon { id: string | null; name: string | null; slug: string | null; } export interface StorefrontCatalogCardOffer { id: string | null; name: string | null; discountKind: string | null; discountPercent: number | null; discountAmountCents: number | null; minPax?: number | null; } export interface CatalogSearchRuntime { indexer?: IndexerAdapter; /** * Template-owned embedding provider. Kept intentionally unknown so * `@voyantjs/catalog` does not depend on `@voyantjs/catalog-rag`. */ embeddings?: unknown; defaultScope: { locale: string; audience: IndexerSlice["audience"]; market: string; }; } export interface CatalogSearchExecuteInput { c: Context; adapter: IndexerAdapter; embeddings?: unknown; slice: IndexerSlice; request: SearchRequest; } export interface CatalogSearchFallbackInput extends CatalogSearchExecuteInput { error: unknown; } export interface CatalogSearchRoutesOptions { resolveRuntime(c: Context): CatalogSearchRuntime; /** * Optional semantic/hybrid executor. Templates that use * `@voyantjs/catalog-rag` should pass `executeSemanticSearch` here. * Without this hook, the route delegates directly to `adapter.search`. */ executeSearch?(input: CatalogSearchExecuteInput): Promise; /** * Retry semantic/hybrid requests as keyword when embedding generation or * vector search fails. Defaults to true to preserve the operator template's * "best available search mode" behavior. */ fallbackToKeywordOnSearchError?: boolean | ((input: CatalogSearchFallbackInput) => boolean); /** Public route audience. Defaults to the customer projection. */ publicAudience?: IndexerSlice["audience"]; /** Admin route audience. Defaults to the runtime default scope audience. */ adminAudience?: IndexerSlice["audience"]; indexerUnavailableMessage?: string; } export type CatalogSearchSurface = "admin" | "public"; export interface CatalogSearchRoutesWithSurfaceOptions extends CatalogSearchRoutesOptions { surface: CatalogSearchSurface; } export declare function createCatalogSearchRoutes(options: CatalogSearchRoutesWithSurfaceOptions): HonoApp; export declare function createCatalogSearchHonoModule(options: CatalogSearchRoutesOptions): HonoModule; export declare function mountCatalogSearchRoutes(hono: HonoApp, options: CatalogSearchRoutesOptions): void; export {}; //# sourceMappingURL=routes.d.ts.map