@voyant-travel/catalog-react 0.117.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (220) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +36 -0
  3. package/dist/admin/catalog-vertical-host.d.ts +45 -0
  4. package/dist/admin/catalog-vertical-host.d.ts.map +1 -0
  5. package/dist/admin/catalog-vertical-host.js +230 -0
  6. package/dist/admin/cruise-detail-host.d.ts +11 -0
  7. package/dist/admin/cruise-detail-host.d.ts.map +1 -0
  8. package/dist/admin/cruise-detail-host.js +33 -0
  9. package/dist/admin/dynamic-catalog-host.d.ts +13 -0
  10. package/dist/admin/dynamic-catalog-host.d.ts.map +1 -0
  11. package/dist/admin/dynamic-catalog-host.js +17 -0
  12. package/dist/admin/index.d.ts +133 -0
  13. package/dist/admin/index.d.ts.map +1 -0
  14. package/dist/admin/index.js +144 -0
  15. package/dist/admin/open-in-new-tab.d.ts +7 -0
  16. package/dist/admin/open-in-new-tab.d.ts.map +1 -0
  17. package/dist/admin/open-in-new-tab.js +10 -0
  18. package/dist/admin/pages/catalog-accommodations-detail-page.d.ts +4 -0
  19. package/dist/admin/pages/catalog-accommodations-detail-page.d.ts.map +1 -0
  20. package/dist/admin/pages/catalog-accommodations-detail-page.js +7 -0
  21. package/dist/admin/pages/catalog-accommodations-index-page.d.ts +8 -0
  22. package/dist/admin/pages/catalog-accommodations-index-page.d.ts.map +1 -0
  23. package/dist/admin/pages/catalog-accommodations-index-page.js +17 -0
  24. package/dist/admin/pages/catalog-cruises-detail-page.d.ts +4 -0
  25. package/dist/admin/pages/catalog-cruises-detail-page.d.ts.map +1 -0
  26. package/dist/admin/pages/catalog-cruises-detail-page.js +7 -0
  27. package/dist/admin/pages/catalog-cruises-index-page.d.ts +8 -0
  28. package/dist/admin/pages/catalog-cruises-index-page.d.ts.map +1 -0
  29. package/dist/admin/pages/catalog-cruises-index-page.js +19 -0
  30. package/dist/admin/pages/catalog-excursions-detail-page.d.ts +4 -0
  31. package/dist/admin/pages/catalog-excursions-detail-page.d.ts.map +1 -0
  32. package/dist/admin/pages/catalog-excursions-detail-page.js +7 -0
  33. package/dist/admin/pages/catalog-excursions-index-page.d.ts +8 -0
  34. package/dist/admin/pages/catalog-excursions-index-page.d.ts.map +1 -0
  35. package/dist/admin/pages/catalog-excursions-index-page.js +12 -0
  36. package/dist/admin/pages/catalog-products-detail-page.d.ts +8 -0
  37. package/dist/admin/pages/catalog-products-detail-page.d.ts.map +1 -0
  38. package/dist/admin/pages/catalog-products-detail-page.js +12 -0
  39. package/dist/admin/pages/catalog-products-index-page.d.ts +8 -0
  40. package/dist/admin/pages/catalog-products-index-page.d.ts.map +1 -0
  41. package/dist/admin/pages/catalog-products-index-page.js +12 -0
  42. package/dist/admin/pages/catalog-tours-detail-page.d.ts +4 -0
  43. package/dist/admin/pages/catalog-tours-detail-page.d.ts.map +1 -0
  44. package/dist/admin/pages/catalog-tours-detail-page.js +7 -0
  45. package/dist/admin/pages/catalog-tours-index-page.d.ts +8 -0
  46. package/dist/admin/pages/catalog-tours-index-page.d.ts.map +1 -0
  47. package/dist/admin/pages/catalog-tours-index-page.js +12 -0
  48. package/dist/admin/product-detail-host.d.ts +18 -0
  49. package/dist/admin/product-detail-host.d.ts.map +1 -0
  50. package/dist/admin/product-detail-host.js +40 -0
  51. package/dist/admin/scheduled-catalog-host.d.ts +15 -0
  52. package/dist/admin/scheduled-catalog-host.d.ts.map +1 -0
  53. package/dist/admin/scheduled-catalog-host.js +19 -0
  54. package/dist/admin/vertical-detail-host.d.ts +13 -0
  55. package/dist/admin/vertical-detail-host.d.ts.map +1 -0
  56. package/dist/admin/vertical-detail-host.js +62 -0
  57. package/dist/booking-engine/index.d.ts +26 -0
  58. package/dist/booking-engine/index.d.ts.map +1 -0
  59. package/dist/booking-engine/index.js +25 -0
  60. package/dist/booking-engine/use-booking-commit.d.ts +61 -0
  61. package/dist/booking-engine/use-booking-commit.d.ts.map +1 -0
  62. package/dist/booking-engine/use-booking-commit.js +47 -0
  63. package/dist/booking-engine/use-booking-draft-shape.d.ts +20 -0
  64. package/dist/booking-engine/use-booking-draft-shape.d.ts.map +1 -0
  65. package/dist/booking-engine/use-booking-draft-shape.js +9 -0
  66. package/dist/booking-engine/use-booking-draft.d.ts +102 -0
  67. package/dist/booking-engine/use-booking-draft.d.ts.map +1 -0
  68. package/dist/booking-engine/use-booking-draft.js +93 -0
  69. package/dist/booking-engine/use-booking-hold.d.ts +30 -0
  70. package/dist/booking-engine/use-booking-hold.d.ts.map +1 -0
  71. package/dist/booking-engine/use-booking-hold.js +44 -0
  72. package/dist/booking-engine/use-booking-journey-api.d.ts +23 -0
  73. package/dist/booking-engine/use-booking-journey-api.d.ts.map +1 -0
  74. package/dist/booking-engine/use-booking-journey-api.js +24 -0
  75. package/dist/booking-engine/use-booking-quote.d.ts +711 -0
  76. package/dist/booking-engine/use-booking-quote.d.ts.map +1 -0
  77. package/dist/booking-engine/use-booking-quote.js +122 -0
  78. package/dist/catalog-enrichment-mappers.d.ts +162 -0
  79. package/dist/catalog-enrichment-mappers.d.ts.map +1 -0
  80. package/dist/catalog-enrichment-mappers.js +190 -0
  81. package/dist/catalog-enrichment.d.ts +203 -0
  82. package/dist/catalog-enrichment.d.ts.map +1 -0
  83. package/dist/catalog-enrichment.js +130 -0
  84. package/dist/catalog-offers-client.d.ts +58 -0
  85. package/dist/catalog-offers-client.d.ts.map +1 -0
  86. package/dist/catalog-offers-client.js +61 -0
  87. package/dist/catalog-search-params.d.ts +45 -0
  88. package/dist/catalog-search-params.d.ts.map +1 -0
  89. package/dist/catalog-search-params.js +30 -0
  90. package/dist/catalog-surfaces.d.ts +17 -0
  91. package/dist/catalog-surfaces.d.ts.map +1 -0
  92. package/dist/catalog-surfaces.js +26 -0
  93. package/dist/client.d.ts +20 -0
  94. package/dist/client.d.ts.map +1 -0
  95. package/dist/client.js +65 -0
  96. package/dist/components/availability-calendar.d.ts +33 -0
  97. package/dist/components/availability-calendar.d.ts.map +1 -0
  98. package/dist/components/availability-calendar.js +65 -0
  99. package/dist/components/catalog-browse-page.d.ts +41 -0
  100. package/dist/components/catalog-browse-page.d.ts.map +1 -0
  101. package/dist/components/catalog-browse-page.js +47 -0
  102. package/dist/components/catalog-card.d.ts +68 -0
  103. package/dist/components/catalog-card.d.ts.map +1 -0
  104. package/dist/components/catalog-card.js +52 -0
  105. package/dist/components/catalog-detail-cruise-cards.d.ts +16 -0
  106. package/dist/components/catalog-detail-cruise-cards.d.ts.map +1 -0
  107. package/dist/components/catalog-detail-cruise-cards.js +54 -0
  108. package/dist/components/catalog-detail-departures.d.ts +25 -0
  109. package/dist/components/catalog-detail-departures.d.ts.map +1 -0
  110. package/dist/components/catalog-detail-departures.js +240 -0
  111. package/dist/components/catalog-detail-parts.d.ts +70 -0
  112. package/dist/components/catalog-detail-parts.d.ts.map +1 -0
  113. package/dist/components/catalog-detail-parts.js +282 -0
  114. package/dist/components/catalog-detail-sheet.d.ts +93 -0
  115. package/dist/components/catalog-detail-sheet.d.ts.map +1 -0
  116. package/dist/components/catalog-detail-sheet.js +68 -0
  117. package/dist/components/catalog-detail-view.d.ts +39 -0
  118. package/dist/components/catalog-detail-view.d.ts.map +1 -0
  119. package/dist/components/catalog-detail-view.js +157 -0
  120. package/dist/components/catalog-enrichment-fetchers.d.ts +8 -0
  121. package/dist/components/catalog-enrichment-fetchers.d.ts.map +1 -0
  122. package/dist/components/catalog-enrichment-fetchers.js +7 -0
  123. package/dist/components/catalog-faceted-filter.d.ts +30 -0
  124. package/dist/components/catalog-faceted-filter.d.ts.map +1 -0
  125. package/dist/components/catalog-faceted-filter.js +24 -0
  126. package/dist/components/catalog-filter-rail.d.ts +25 -0
  127. package/dist/components/catalog-filter-rail.d.ts.map +1 -0
  128. package/dist/components/catalog-filter-rail.js +88 -0
  129. package/dist/components/catalog-gallery.d.ts +27 -0
  130. package/dist/components/catalog-gallery.d.ts.map +1 -0
  131. package/dist/components/catalog-gallery.js +66 -0
  132. package/dist/components/catalog-hit.d.ts +27 -0
  133. package/dist/components/catalog-hit.d.ts.map +1 -0
  134. package/dist/components/catalog-hit.js +57 -0
  135. package/dist/components/catalog-page-cards.d.ts +21 -0
  136. package/dist/components/catalog-page-cards.d.ts.map +1 -0
  137. package/dist/components/catalog-page-cards.js +174 -0
  138. package/dist/components/catalog-page-config.d.ts +17 -0
  139. package/dist/components/catalog-page-config.d.ts.map +1 -0
  140. package/dist/components/catalog-page-config.js +369 -0
  141. package/dist/components/catalog-page.d.ts +88 -0
  142. package/dist/components/catalog-page.d.ts.map +1 -0
  143. package/dist/components/catalog-page.js +148 -0
  144. package/dist/components/catalog-range-filter.d.ts +34 -0
  145. package/dist/components/catalog-range-filter.d.ts.map +1 -0
  146. package/dist/components/catalog-range-filter.js +72 -0
  147. package/dist/components/catalog-search-page.d.ts +239 -0
  148. package/dist/components/catalog-search-page.d.ts.map +1 -0
  149. package/dist/components/catalog-search-page.js +63 -0
  150. package/dist/components/catalog-search-tab-panel.d.ts +42 -0
  151. package/dist/components/catalog-search-tab-panel.d.ts.map +1 -0
  152. package/dist/components/catalog-search-tab-panel.js +199 -0
  153. package/dist/components/catalog-vertical-detail-page.d.ts +33 -0
  154. package/dist/components/catalog-vertical-detail-page.d.ts.map +1 -0
  155. package/dist/components/catalog-vertical-detail-page.js +100 -0
  156. package/dist/components/cruise-detail-page-parts.d.ts +72 -0
  157. package/dist/components/cruise-detail-page-parts.d.ts.map +1 -0
  158. package/dist/components/cruise-detail-page-parts.js +146 -0
  159. package/dist/components/cruise-detail-page.d.ts +21 -0
  160. package/dist/components/cruise-detail-page.d.ts.map +1 -0
  161. package/dist/components/cruise-detail-page.js +201 -0
  162. package/dist/components/dynamic-catalog-page-parts.d.ts +40 -0
  163. package/dist/components/dynamic-catalog-page-parts.d.ts.map +1 -0
  164. package/dist/components/dynamic-catalog-page-parts.js +43 -0
  165. package/dist/components/dynamic-catalog-page.d.ts +23 -0
  166. package/dist/components/dynamic-catalog-page.d.ts.map +1 -0
  167. package/dist/components/dynamic-catalog-page.js +270 -0
  168. package/dist/components/media-gallery.d.ts +13 -0
  169. package/dist/components/media-gallery.d.ts.map +1 -0
  170. package/dist/components/media-gallery.js +42 -0
  171. package/dist/components/product-detail-page-parts.d.ts +106 -0
  172. package/dist/components/product-detail-page-parts.d.ts.map +1 -0
  173. package/dist/components/product-detail-page-parts.js +130 -0
  174. package/dist/components/product-detail-page.d.ts +57 -0
  175. package/dist/components/product-detail-page.d.ts.map +1 -0
  176. package/dist/components/product-detail-page.js +175 -0
  177. package/dist/components/scheduled-catalog-page.d.ts +34 -0
  178. package/dist/components/scheduled-catalog-page.d.ts.map +1 -0
  179. package/dist/components/scheduled-catalog-page.js +6 -0
  180. package/dist/hooks/index.d.ts +3 -0
  181. package/dist/hooks/index.d.ts.map +1 -0
  182. package/dist/hooks/index.js +2 -0
  183. package/dist/hooks/use-catalog-offers.d.ts +186 -0
  184. package/dist/hooks/use-catalog-offers.d.ts.map +1 -0
  185. package/dist/hooks/use-catalog-offers.js +105 -0
  186. package/dist/hooks/use-catalog-search.d.ts +109 -0
  187. package/dist/hooks/use-catalog-search.d.ts.map +1 -0
  188. package/dist/hooks/use-catalog-search.js +52 -0
  189. package/dist/i18n/en.d.ts +397 -0
  190. package/dist/i18n/en.d.ts.map +1 -0
  191. package/dist/i18n/en.js +396 -0
  192. package/dist/i18n/index.d.ts +5 -0
  193. package/dist/i18n/index.d.ts.map +1 -0
  194. package/dist/i18n/index.js +3 -0
  195. package/dist/i18n/messages.d.ts +335 -0
  196. package/dist/i18n/messages.d.ts.map +1 -0
  197. package/dist/i18n/messages.js +1 -0
  198. package/dist/i18n/provider.d.ts +816 -0
  199. package/dist/i18n/provider.d.ts.map +1 -0
  200. package/dist/i18n/provider.js +44 -0
  201. package/dist/i18n/ro.d.ts +397 -0
  202. package/dist/i18n/ro.d.ts.map +1 -0
  203. package/dist/i18n/ro.js +396 -0
  204. package/dist/index.d.ts +9 -0
  205. package/dist/index.d.ts.map +1 -0
  206. package/dist/index.js +17 -0
  207. package/dist/provider.d.ts +2 -0
  208. package/dist/provider.d.ts.map +1 -0
  209. package/dist/provider.js +1 -0
  210. package/dist/schemas-catalog-offers.d.ts +290 -0
  211. package/dist/schemas-catalog-offers.d.ts.map +1 -0
  212. package/dist/schemas-catalog-offers.js +155 -0
  213. package/dist/schemas.d.ts +143 -0
  214. package/dist/schemas.d.ts.map +1 -0
  215. package/dist/schemas.js +76 -0
  216. package/dist/ui.d.ts +19 -0
  217. package/dist/ui.d.ts.map +1 -0
  218. package/dist/ui.js +18 -0
  219. package/package.json +150 -0
  220. package/src/styles.css +11 -0
@@ -0,0 +1,290 @@
1
+ import { z } from "zod";
2
+ /**
3
+ * Request/response contracts for the Booking.com-style catalog offer surfaces
4
+ * (dynamic package search, package/cruise detail, live pricing). These mirror
5
+ * the operator backend in `catalog-offers.ts`; the matching client functions
6
+ * live in `catalog-offers-client.ts` and the hooks in `hooks/`.
7
+ *
8
+ * Response schemas are intentionally lenient (nullable/optional fields, and
9
+ * zod's default key-stripping) so a backend that adds a field never trips
10
+ * `fetchWithValidation`.
11
+ */
12
+ declare const moneyMinorSchema: z.ZodObject<{
13
+ amountMinor: z.ZodNumber;
14
+ currency: z.ZodString;
15
+ }, z.core.$strip>;
16
+ export type CatalogMoneyMinor = z.infer<typeof moneyMinorSchema>;
17
+ export declare const catalogAirportOptionSchema: z.ZodObject<{
18
+ code: z.ZodString;
19
+ label: z.ZodString;
20
+ }, z.core.$strip>;
21
+ export type CatalogAirportOption = z.infer<typeof catalogAirportOptionSchema>;
22
+ export declare const departureAirportsResponseSchema: z.ZodObject<{
23
+ departureAirports: z.ZodOptional<z.ZodArray<z.ZodObject<{
24
+ code: z.ZodString;
25
+ label: z.ZodString;
26
+ }, z.core.$strip>>>;
27
+ }, z.core.$strip>;
28
+ export type DepartureAirportsResponse = z.infer<typeof departureAirportsResponseSchema>;
29
+ export declare const packageSearchCardSchema: z.ZodObject<{
30
+ productId: z.ZodString;
31
+ name: z.ZodNullable<z.ZodString>;
32
+ image: z.ZodNullable<z.ZodString>;
33
+ stars: z.ZodNullable<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>;
34
+ destination: z.ZodNullable<z.ZodString>;
35
+ country: z.ZodNullable<z.ZodString>;
36
+ board: z.ZodNullable<z.ZodString>;
37
+ checkIn: z.ZodNullable<z.ZodString>;
38
+ checkOut: z.ZodNullable<z.ZodString>;
39
+ nights: z.ZodNullable<z.ZodNumber>;
40
+ departureAirport: z.ZodNullable<z.ZodString>;
41
+ arrivalAirport: z.ZodNullable<z.ZodString>;
42
+ carrier: z.ZodNullable<z.ZodString>;
43
+ perPerson: z.ZodNullable<z.ZodObject<{
44
+ amountMinor: z.ZodNumber;
45
+ currency: z.ZodString;
46
+ }, z.core.$strip>>;
47
+ total: z.ZodNullable<z.ZodObject<{
48
+ amountMinor: z.ZodNumber;
49
+ currency: z.ZodString;
50
+ }, z.core.$strip>>;
51
+ }, z.core.$strip>;
52
+ export type PackageSearchCard = z.infer<typeof packageSearchCardSchema>;
53
+ export declare const packageSearchResponseSchema: z.ZodObject<{
54
+ offers: z.ZodOptional<z.ZodArray<z.ZodObject<{
55
+ productId: z.ZodString;
56
+ name: z.ZodNullable<z.ZodString>;
57
+ image: z.ZodNullable<z.ZodString>;
58
+ stars: z.ZodNullable<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>;
59
+ destination: z.ZodNullable<z.ZodString>;
60
+ country: z.ZodNullable<z.ZodString>;
61
+ board: z.ZodNullable<z.ZodString>;
62
+ checkIn: z.ZodNullable<z.ZodString>;
63
+ checkOut: z.ZodNullable<z.ZodString>;
64
+ nights: z.ZodNullable<z.ZodNumber>;
65
+ departureAirport: z.ZodNullable<z.ZodString>;
66
+ arrivalAirport: z.ZodNullable<z.ZodString>;
67
+ carrier: z.ZodNullable<z.ZodString>;
68
+ perPerson: z.ZodNullable<z.ZodObject<{
69
+ amountMinor: z.ZodNumber;
70
+ currency: z.ZodString;
71
+ }, z.core.$strip>>;
72
+ total: z.ZodNullable<z.ZodObject<{
73
+ amountMinor: z.ZodNumber;
74
+ currency: z.ZodString;
75
+ }, z.core.$strip>>;
76
+ }, z.core.$strip>>>;
77
+ departureAirports: z.ZodOptional<z.ZodArray<z.ZodObject<{
78
+ code: z.ZodString;
79
+ label: z.ZodString;
80
+ }, z.core.$strip>>>;
81
+ currency: z.ZodOptional<z.ZodString>;
82
+ retryable: z.ZodOptional<z.ZodBoolean>;
83
+ }, z.core.$strip>;
84
+ export type PackageSearchResponse = z.infer<typeof packageSearchResponseSchema>;
85
+ export declare const packageOfferFlightSchema: z.ZodObject<{
86
+ origin: z.ZodNullable<z.ZodString>;
87
+ destination: z.ZodNullable<z.ZodString>;
88
+ departureAt: z.ZodNullable<z.ZodString>;
89
+ carrier: z.ZodNullable<z.ZodString>;
90
+ flightNumber: z.ZodNullable<z.ZodString>;
91
+ }, z.core.$strip>;
92
+ export declare const packageOfferSchema: z.ZodObject<{
93
+ id: z.ZodString;
94
+ title: z.ZodNullable<z.ZodString>;
95
+ checkIn: z.ZodNullable<z.ZodString>;
96
+ checkOut: z.ZodNullable<z.ZodString>;
97
+ nights: z.ZodNullable<z.ZodNumber>;
98
+ board: z.ZodNullable<z.ZodString>;
99
+ roomTypeId: z.ZodNullable<z.ZodString>;
100
+ ratePlanId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
101
+ perPerson: z.ZodNullable<z.ZodObject<{
102
+ amountMinor: z.ZodNumber;
103
+ currency: z.ZodString;
104
+ }, z.core.$strip>>;
105
+ total: z.ZodNullable<z.ZodObject<{
106
+ amountMinor: z.ZodNumber;
107
+ currency: z.ZodString;
108
+ }, z.core.$strip>>;
109
+ flights: z.ZodArray<z.ZodObject<{
110
+ origin: z.ZodNullable<z.ZodString>;
111
+ destination: z.ZodNullable<z.ZodString>;
112
+ departureAt: z.ZodNullable<z.ZodString>;
113
+ carrier: z.ZodNullable<z.ZodString>;
114
+ flightNumber: z.ZodNullable<z.ZodString>;
115
+ }, z.core.$strip>>;
116
+ freeCancellationUntil: z.ZodNullable<z.ZodString>;
117
+ }, z.core.$strip>;
118
+ export type PackageOffer = z.infer<typeof packageOfferSchema>;
119
+ export declare const packageProductDetailSchema: z.ZodObject<{
120
+ name: z.ZodNullable<z.ZodString>;
121
+ stars: z.ZodNullable<z.ZodNumber>;
122
+ city: z.ZodNullable<z.ZodString>;
123
+ region: z.ZodNullable<z.ZodString>;
124
+ countryCode: z.ZodNullable<z.ZodString>;
125
+ category: z.ZodNullable<z.ZodString>;
126
+ media: z.ZodArray<z.ZodObject<{
127
+ src: z.ZodString;
128
+ rel: z.ZodNullable<z.ZodString>;
129
+ caption: z.ZodNullable<z.ZodString>;
130
+ }, z.core.$strip>>;
131
+ sections: z.ZodArray<z.ZodObject<{
132
+ title: z.ZodNullable<z.ZodString>;
133
+ kind: z.ZodNullable<z.ZodString>;
134
+ type: z.ZodNullable<z.ZodString>;
135
+ lines: z.ZodArray<z.ZodString>;
136
+ }, z.core.$strip>>;
137
+ features: z.ZodArray<z.ZodObject<{
138
+ code: z.ZodNullable<z.ZodString>;
139
+ label: z.ZodNullable<z.ZodString>;
140
+ type: z.ZodNullable<z.ZodString>;
141
+ }, z.core.$strip>>;
142
+ rooms: z.ZodArray<z.ZodObject<{
143
+ code: z.ZodNullable<z.ZodString>;
144
+ name: z.ZodNullable<z.ZodString>;
145
+ area: z.ZodNullable<z.ZodNumber>;
146
+ maxGuests: z.ZodNullable<z.ZodNumber>;
147
+ view: z.ZodNullable<z.ZodString>;
148
+ specifications: z.ZodArray<z.ZodString>;
149
+ image: z.ZodNullable<z.ZodString>;
150
+ }, z.core.$strip>>;
151
+ reviews: z.ZodNullable<z.ZodObject<{
152
+ source: z.ZodNullable<z.ZodString>;
153
+ rating: z.ZodNullable<z.ZodNumber>;
154
+ reviewsCount: z.ZodNullable<z.ZodNumber>;
155
+ subratings: z.ZodArray<z.ZodObject<{
156
+ name: z.ZodNullable<z.ZodString>;
157
+ value: z.ZodNullable<z.ZodNumber>;
158
+ }, z.core.$strip>>;
159
+ }, z.core.$strip>>;
160
+ }, z.core.$strip>;
161
+ export type PackageProductDetail = z.infer<typeof packageProductDetailSchema>;
162
+ export declare const packageDetailSourceSchema: z.ZodNullable<z.ZodObject<{
163
+ connectionId: z.ZodString;
164
+ ref: z.ZodNullable<z.ZodString>;
165
+ }, z.core.$strip>>;
166
+ export type PackageDetailSource = z.infer<typeof packageDetailSourceSchema>;
167
+ export declare const packageDetailResponseSchema: z.ZodObject<{
168
+ product: z.ZodOptional<z.ZodNullable<z.ZodObject<{
169
+ name: z.ZodNullable<z.ZodString>;
170
+ stars: z.ZodNullable<z.ZodNumber>;
171
+ city: z.ZodNullable<z.ZodString>;
172
+ region: z.ZodNullable<z.ZodString>;
173
+ countryCode: z.ZodNullable<z.ZodString>;
174
+ category: z.ZodNullable<z.ZodString>;
175
+ media: z.ZodArray<z.ZodObject<{
176
+ src: z.ZodString;
177
+ rel: z.ZodNullable<z.ZodString>;
178
+ caption: z.ZodNullable<z.ZodString>;
179
+ }, z.core.$strip>>;
180
+ sections: z.ZodArray<z.ZodObject<{
181
+ title: z.ZodNullable<z.ZodString>;
182
+ kind: z.ZodNullable<z.ZodString>;
183
+ type: z.ZodNullable<z.ZodString>;
184
+ lines: z.ZodArray<z.ZodString>;
185
+ }, z.core.$strip>>;
186
+ features: z.ZodArray<z.ZodObject<{
187
+ code: z.ZodNullable<z.ZodString>;
188
+ label: z.ZodNullable<z.ZodString>;
189
+ type: z.ZodNullable<z.ZodString>;
190
+ }, z.core.$strip>>;
191
+ rooms: z.ZodArray<z.ZodObject<{
192
+ code: z.ZodNullable<z.ZodString>;
193
+ name: z.ZodNullable<z.ZodString>;
194
+ area: z.ZodNullable<z.ZodNumber>;
195
+ maxGuests: z.ZodNullable<z.ZodNumber>;
196
+ view: z.ZodNullable<z.ZodString>;
197
+ specifications: z.ZodArray<z.ZodString>;
198
+ image: z.ZodNullable<z.ZodString>;
199
+ }, z.core.$strip>>;
200
+ reviews: z.ZodNullable<z.ZodObject<{
201
+ source: z.ZodNullable<z.ZodString>;
202
+ rating: z.ZodNullable<z.ZodNumber>;
203
+ reviewsCount: z.ZodNullable<z.ZodNumber>;
204
+ subratings: z.ZodArray<z.ZodObject<{
205
+ name: z.ZodNullable<z.ZodString>;
206
+ value: z.ZodNullable<z.ZodNumber>;
207
+ }, z.core.$strip>>;
208
+ }, z.core.$strip>>;
209
+ }, z.core.$strip>>>;
210
+ offers: z.ZodOptional<z.ZodArray<z.ZodObject<{
211
+ id: z.ZodString;
212
+ title: z.ZodNullable<z.ZodString>;
213
+ checkIn: z.ZodNullable<z.ZodString>;
214
+ checkOut: z.ZodNullable<z.ZodString>;
215
+ nights: z.ZodNullable<z.ZodNumber>;
216
+ board: z.ZodNullable<z.ZodString>;
217
+ roomTypeId: z.ZodNullable<z.ZodString>;
218
+ ratePlanId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
219
+ perPerson: z.ZodNullable<z.ZodObject<{
220
+ amountMinor: z.ZodNumber;
221
+ currency: z.ZodString;
222
+ }, z.core.$strip>>;
223
+ total: z.ZodNullable<z.ZodObject<{
224
+ amountMinor: z.ZodNumber;
225
+ currency: z.ZodString;
226
+ }, z.core.$strip>>;
227
+ flights: z.ZodArray<z.ZodObject<{
228
+ origin: z.ZodNullable<z.ZodString>;
229
+ destination: z.ZodNullable<z.ZodString>;
230
+ departureAt: z.ZodNullable<z.ZodString>;
231
+ carrier: z.ZodNullable<z.ZodString>;
232
+ flightNumber: z.ZodNullable<z.ZodString>;
233
+ }, z.core.$strip>>;
234
+ freeCancellationUntil: z.ZodNullable<z.ZodString>;
235
+ }, z.core.$strip>>>;
236
+ retryable: z.ZodOptional<z.ZodBoolean>;
237
+ source: z.ZodOptional<z.ZodNullable<z.ZodObject<{
238
+ connectionId: z.ZodString;
239
+ ref: z.ZodNullable<z.ZodString>;
240
+ }, z.core.$strip>>>;
241
+ }, z.core.$strip>;
242
+ export type PackageDetailResponse = z.infer<typeof packageDetailResponseSchema>;
243
+ export declare const cruisePriceResponseSchema: z.ZodObject<{
244
+ fromAmountMinor: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
245
+ currency: z.ZodOptional<z.ZodNullable<z.ZodString>>;
246
+ }, z.core.$strip>;
247
+ export type CruisePriceResponse = z.infer<typeof cruisePriceResponseSchema>;
248
+ export declare const cruiseCabinPriceSchema: z.ZodObject<{
249
+ code: z.ZodString;
250
+ fromAmountMinor: z.ZodNumber;
251
+ available: z.ZodBoolean;
252
+ }, z.core.$strip>;
253
+ export type CruiseCabinPrice = z.infer<typeof cruiseCabinPriceSchema>;
254
+ export declare const cruiseSailingPricingResponseSchema: z.ZodObject<{
255
+ cabins: z.ZodOptional<z.ZodArray<z.ZodObject<{
256
+ code: z.ZodString;
257
+ fromAmountMinor: z.ZodNumber;
258
+ available: z.ZodBoolean;
259
+ }, z.core.$strip>>>;
260
+ currency: z.ZodOptional<z.ZodNullable<z.ZodString>>;
261
+ }, z.core.$strip>;
262
+ export type CruiseSailingPricingResponse = z.infer<typeof cruiseSailingPricingResponseSchema>;
263
+ export declare const cruiseContentResponseSchema: z.ZodObject<{
264
+ data: z.ZodOptional<z.ZodObject<{
265
+ content: z.ZodOptional<z.ZodUnknown>;
266
+ }, z.core.$strip>>;
267
+ }, z.core.$strip>;
268
+ export type CruiseContentResponse = z.infer<typeof cruiseContentResponseSchema>;
269
+ export declare const catalogSlotSchema: z.ZodObject<{
270
+ id: z.ZodString;
271
+ startsAt: z.ZodOptional<z.ZodString>;
272
+ status: z.ZodOptional<z.ZodNullable<z.ZodString>>;
273
+ unlimited: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
274
+ remainingPax: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
275
+ initialPax: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
276
+ }, z.core.$strip>;
277
+ export type CatalogSlot = z.infer<typeof catalogSlotSchema>;
278
+ export declare const catalogSlotsResponseSchema: z.ZodObject<{
279
+ rows: z.ZodArray<z.ZodObject<{
280
+ id: z.ZodString;
281
+ startsAt: z.ZodOptional<z.ZodString>;
282
+ status: z.ZodOptional<z.ZodNullable<z.ZodString>>;
283
+ unlimited: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
284
+ remainingPax: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
285
+ initialPax: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
286
+ }, z.core.$strip>>;
287
+ }, z.core.$strip>;
288
+ export type CatalogSlotsResponse = z.infer<typeof catalogSlotsResponseSchema>;
289
+ export {};
290
+ //# sourceMappingURL=schemas-catalog-offers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemas-catalog-offers.d.ts","sourceRoot":"","sources":["../src/schemas-catalog-offers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB;;;;;;;;;GASG;AAEH,QAAA,MAAM,gBAAgB;;;iBAGpB,CAAA;AACF,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAA;AAEhE,eAAO,MAAM,0BAA0B;;;iBAGrC,CAAA;AACF,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAA;AAI7E,eAAO,MAAM,+BAA+B;;;;;iBAE1C,CAAA;AACF,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,+BAA+B,CAAC,CAAA;AAIvF,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;iBAgBlC,CAAA;AACF,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAA;AAEvE,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAKtC,CAAA;AACF,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAA;AAI/E,eAAO,MAAM,wBAAwB;;;;;;iBAMnC,CAAA;AAEF,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;iBAe7B,CAAA;AACF,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAA;AAQ7D,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA0CrC,CAAA;AACF,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAA;AAE7E,eAAO,MAAM,yBAAyB;;;kBAKzB,CAAA;AACb,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAA;AAE3E,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAKtC,CAAA;AACF,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAA;AAI/E,eAAO,MAAM,yBAAyB;;;iBAGpC,CAAA;AACF,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAA;AAE3E,eAAO,MAAM,sBAAsB;;;;iBAIjC,CAAA;AACF,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAA;AAErE,eAAO,MAAM,kCAAkC;;;;;;;iBAG7C,CAAA;AACF,MAAM,MAAM,4BAA4B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kCAAkC,CAAC,CAAA;AAI7F,eAAO,MAAM,2BAA2B;;;;iBAEtC,CAAA;AACF,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAA;AAI/E,eAAO,MAAM,iBAAiB;;;;;;;iBAO5B,CAAA;AACF,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAA;AAE3D,eAAO,MAAM,0BAA0B;;;;;;;;;iBAErC,CAAA;AACF,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAA"}
@@ -0,0 +1,155 @@
1
+ import { z } from "zod";
2
+ /**
3
+ * Request/response contracts for the Booking.com-style catalog offer surfaces
4
+ * (dynamic package search, package/cruise detail, live pricing). These mirror
5
+ * the operator backend in `catalog-offers.ts`; the matching client functions
6
+ * live in `catalog-offers-client.ts` and the hooks in `hooks/`.
7
+ *
8
+ * Response schemas are intentionally lenient (nullable/optional fields, and
9
+ * zod's default key-stripping) so a backend that adds a field never trips
10
+ * `fetchWithValidation`.
11
+ */
12
+ const moneyMinorSchema = z.object({
13
+ amountMinor: z.number(),
14
+ currency: z.string(),
15
+ });
16
+ export const catalogAirportOptionSchema = z.object({
17
+ code: z.string(),
18
+ label: z.string(),
19
+ });
20
+ /* ── departure airports ──────────────────────────────────────────────── */
21
+ export const departureAirportsResponseSchema = z.object({
22
+ departureAirports: z.array(catalogAirportOptionSchema).optional(),
23
+ });
24
+ /* ── dynamic package search ──────────────────────────────────────────── */
25
+ export const packageSearchCardSchema = z.object({
26
+ productId: z.string(),
27
+ name: z.string().nullable(),
28
+ image: z.string().nullable(),
29
+ stars: z.union([z.string(), z.number()]).nullable(),
30
+ destination: z.string().nullable(),
31
+ country: z.string().nullable(),
32
+ board: z.string().nullable(),
33
+ checkIn: z.string().nullable(),
34
+ checkOut: z.string().nullable(),
35
+ nights: z.number().nullable(),
36
+ departureAirport: z.string().nullable(),
37
+ arrivalAirport: z.string().nullable(),
38
+ carrier: z.string().nullable(),
39
+ perPerson: moneyMinorSchema.nullable(),
40
+ total: moneyMinorSchema.nullable(),
41
+ });
42
+ export const packageSearchResponseSchema = z.object({
43
+ offers: z.array(packageSearchCardSchema).optional(),
44
+ departureAirports: z.array(catalogAirportOptionSchema).optional(),
45
+ currency: z.string().optional(),
46
+ retryable: z.boolean().optional(),
47
+ });
48
+ /* ── package detail (single product) ─────────────────────────────────── */
49
+ export const packageOfferFlightSchema = z.object({
50
+ origin: z.string().nullable(),
51
+ destination: z.string().nullable(),
52
+ departureAt: z.string().nullable(),
53
+ carrier: z.string().nullable(),
54
+ flightNumber: z.string().nullable(),
55
+ });
56
+ export const packageOfferSchema = z.object({
57
+ id: z.string(),
58
+ title: z.string().nullable(),
59
+ checkIn: z.string().nullable(),
60
+ checkOut: z.string().nullable(),
61
+ nights: z.number().nullable(),
62
+ board: z.string().nullable(),
63
+ roomTypeId: z.string().nullable(),
64
+ /** Stable rate-plan key (e.g. `HOTEL:ROOM:AI`); `board` is its trailing
65
+ * segment. Used to pin the exact rate through the journey (voyant#1579). */
66
+ ratePlanId: z.string().nullable().optional(),
67
+ perPerson: moneyMinorSchema.nullable(),
68
+ total: moneyMinorSchema.nullable(),
69
+ flights: z.array(packageOfferFlightSchema),
70
+ freeCancellationUntil: z.string().nullable(),
71
+ });
72
+ const packageProductMediaSchema = z.object({
73
+ src: z.string(),
74
+ rel: z.string().nullable(),
75
+ caption: z.string().nullable(),
76
+ });
77
+ export const packageProductDetailSchema = z.object({
78
+ name: z.string().nullable(),
79
+ stars: z.number().nullable(),
80
+ city: z.string().nullable(),
81
+ region: z.string().nullable(),
82
+ countryCode: z.string().nullable(),
83
+ category: z.string().nullable(),
84
+ media: z.array(packageProductMediaSchema),
85
+ sections: z.array(z.object({
86
+ title: z.string().nullable(),
87
+ kind: z.string().nullable(),
88
+ type: z.string().nullable(),
89
+ lines: z.array(z.string()),
90
+ })),
91
+ features: z.array(z.object({
92
+ code: z.string().nullable(),
93
+ label: z.string().nullable(),
94
+ type: z.string().nullable(),
95
+ })),
96
+ rooms: z.array(z.object({
97
+ code: z.string().nullable(),
98
+ name: z.string().nullable(),
99
+ area: z.number().nullable(),
100
+ maxGuests: z.number().nullable(),
101
+ view: z.string().nullable(),
102
+ specifications: z.array(z.string()),
103
+ image: z.string().nullable(),
104
+ })),
105
+ reviews: z
106
+ .object({
107
+ source: z.string().nullable(),
108
+ rating: z.number().nullable(),
109
+ reviewsCount: z.number().nullable(),
110
+ subratings: z.array(z.object({ name: z.string().nullable(), value: z.number().nullable() })),
111
+ })
112
+ .nullable(),
113
+ });
114
+ export const packageDetailSourceSchema = z
115
+ .object({
116
+ connectionId: z.string(),
117
+ ref: z.string().nullable(),
118
+ })
119
+ .nullable();
120
+ export const packageDetailResponseSchema = z.object({
121
+ product: packageProductDetailSchema.nullable().optional(),
122
+ offers: z.array(packageOfferSchema).optional(),
123
+ retryable: z.boolean().optional(),
124
+ source: packageDetailSourceSchema.optional(),
125
+ });
126
+ /* ── cruise price + per-sailing pricing ──────────────────────────────── */
127
+ export const cruisePriceResponseSchema = z.object({
128
+ fromAmountMinor: z.number().nullable().optional(),
129
+ currency: z.string().nullable().optional(),
130
+ });
131
+ export const cruiseCabinPriceSchema = z.object({
132
+ code: z.string(),
133
+ fromAmountMinor: z.number(),
134
+ available: z.boolean(),
135
+ });
136
+ export const cruiseSailingPricingResponseSchema = z.object({
137
+ cabins: z.array(cruiseCabinPriceSchema).optional(),
138
+ currency: z.string().nullable().optional(),
139
+ });
140
+ /* ── cruise content (opaque payload, mapped by the consumer) ─────────── */
141
+ export const cruiseContentResponseSchema = z.object({
142
+ data: z.object({ content: z.unknown() }).partial().optional(),
143
+ });
144
+ /* ── availability slots ──────────────────────────────────────────────── */
145
+ export const catalogSlotSchema = z.object({
146
+ id: z.string(),
147
+ startsAt: z.string().optional(),
148
+ status: z.string().nullable().optional(),
149
+ unlimited: z.boolean().nullable().optional(),
150
+ remainingPax: z.number().nullable().optional(),
151
+ initialPax: z.number().nullable().optional(),
152
+ });
153
+ export const catalogSlotsResponseSchema = z.object({
154
+ rows: z.array(catalogSlotSchema),
155
+ });
@@ -0,0 +1,143 @@
1
+ import { z } from "zod";
2
+ declare const indexerDocumentSchema: z.ZodObject<{
3
+ id: z.ZodString;
4
+ fields: z.ZodRecord<z.ZodString, z.ZodUnknown>;
5
+ embeddings: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodArray<z.ZodNumber>>>;
6
+ embedding_model_id: z.ZodOptional<z.ZodString>;
7
+ }, z.core.$strip>;
8
+ declare const searchHitSchema: z.ZodObject<{
9
+ id: z.ZodString;
10
+ score: z.ZodNumber;
11
+ document: z.ZodObject<{
12
+ id: z.ZodString;
13
+ fields: z.ZodRecord<z.ZodString, z.ZodUnknown>;
14
+ embeddings: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodArray<z.ZodNumber>>>;
15
+ embedding_model_id: z.ZodOptional<z.ZodString>;
16
+ }, z.core.$strip>;
17
+ highlights: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
18
+ }, z.core.$strip>;
19
+ declare const facetBucketSchema: z.ZodObject<{
20
+ value: z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>;
21
+ count: z.ZodNumber;
22
+ }, z.core.$strip>;
23
+ declare const storefrontCatalogCardSchema: z.ZodObject<{
24
+ id: z.ZodString;
25
+ name: z.ZodNullable<z.ZodString>;
26
+ slug: z.ZodNullable<z.ZodString>;
27
+ primaryCategory: z.ZodNullable<z.ZodObject<{
28
+ id: z.ZodNullable<z.ZodString>;
29
+ name: z.ZodNullable<z.ZodString>;
30
+ slug: z.ZodNullable<z.ZodString>;
31
+ }, z.core.$strip>>;
32
+ media: z.ZodObject<{
33
+ thumbnailUrl: z.ZodNullable<z.ZodString>;
34
+ coverMediaUrl: z.ZodNullable<z.ZodString>;
35
+ }, z.core.$strip>;
36
+ priceFrom: z.ZodNullable<z.ZodObject<{
37
+ amountCents: z.ZodNumber;
38
+ currency: z.ZodNullable<z.ZodString>;
39
+ originalAmountCents: z.ZodNullable<z.ZodNumber>;
40
+ }, z.core.$strip>>;
41
+ offerBadges: z.ZodArray<z.ZodObject<{
42
+ id: z.ZodNullable<z.ZodString>;
43
+ name: z.ZodNullable<z.ZodString>;
44
+ discountKind: z.ZodNullable<z.ZodString>;
45
+ discountPercent: z.ZodNullable<z.ZodNumber>;
46
+ discountAmountCents: z.ZodNullable<z.ZodNumber>;
47
+ minPax: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
48
+ }, z.core.$strip>>;
49
+ departures: z.ZodObject<{
50
+ upcomingCount: z.ZodNullable<z.ZodNumber>;
51
+ nextDepartureAt: z.ZodNullable<z.ZodString>;
52
+ nextDepartureDate: z.ZodNullable<z.ZodString>;
53
+ months: z.ZodArray<z.ZodString>;
54
+ dates: z.ZodArray<z.ZodString>;
55
+ }, z.core.$strip>;
56
+ destinations: z.ZodObject<{
57
+ regions: z.ZodArray<z.ZodString>;
58
+ countries: z.ZodArray<z.ZodString>;
59
+ cities: z.ZodArray<z.ZodString>;
60
+ ids: z.ZodArray<z.ZodString>;
61
+ slugs: z.ZodArray<z.ZodString>;
62
+ }, z.core.$strip>;
63
+ coordinates: z.ZodNullable<z.ZodObject<{
64
+ latitude: z.ZodNumber;
65
+ longitude: z.ZodNumber;
66
+ }, z.core.$strip>>;
67
+ }, z.core.$strip>;
68
+ export declare const catalogSearchResponseSchema: z.ZodObject<{
69
+ vertical: z.ZodString;
70
+ mode: z.ZodEnum<{
71
+ keyword: "keyword";
72
+ hybrid: "hybrid";
73
+ semantic: "semantic";
74
+ }>;
75
+ total: z.ZodNumber;
76
+ hits: z.ZodArray<z.ZodObject<{
77
+ id: z.ZodString;
78
+ score: z.ZodNumber;
79
+ document: z.ZodObject<{
80
+ id: z.ZodString;
81
+ fields: z.ZodRecord<z.ZodString, z.ZodUnknown>;
82
+ embeddings: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodArray<z.ZodNumber>>>;
83
+ embedding_model_id: z.ZodOptional<z.ZodString>;
84
+ }, z.core.$strip>;
85
+ highlights: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
86
+ }, z.core.$strip>>;
87
+ cards: z.ZodOptional<z.ZodArray<z.ZodObject<{
88
+ id: z.ZodString;
89
+ name: z.ZodNullable<z.ZodString>;
90
+ slug: z.ZodNullable<z.ZodString>;
91
+ primaryCategory: z.ZodNullable<z.ZodObject<{
92
+ id: z.ZodNullable<z.ZodString>;
93
+ name: z.ZodNullable<z.ZodString>;
94
+ slug: z.ZodNullable<z.ZodString>;
95
+ }, z.core.$strip>>;
96
+ media: z.ZodObject<{
97
+ thumbnailUrl: z.ZodNullable<z.ZodString>;
98
+ coverMediaUrl: z.ZodNullable<z.ZodString>;
99
+ }, z.core.$strip>;
100
+ priceFrom: z.ZodNullable<z.ZodObject<{
101
+ amountCents: z.ZodNumber;
102
+ currency: z.ZodNullable<z.ZodString>;
103
+ originalAmountCents: z.ZodNullable<z.ZodNumber>;
104
+ }, z.core.$strip>>;
105
+ offerBadges: z.ZodArray<z.ZodObject<{
106
+ id: z.ZodNullable<z.ZodString>;
107
+ name: z.ZodNullable<z.ZodString>;
108
+ discountKind: z.ZodNullable<z.ZodString>;
109
+ discountPercent: z.ZodNullable<z.ZodNumber>;
110
+ discountAmountCents: z.ZodNullable<z.ZodNumber>;
111
+ minPax: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
112
+ }, z.core.$strip>>;
113
+ departures: z.ZodObject<{
114
+ upcomingCount: z.ZodNullable<z.ZodNumber>;
115
+ nextDepartureAt: z.ZodNullable<z.ZodString>;
116
+ nextDepartureDate: z.ZodNullable<z.ZodString>;
117
+ months: z.ZodArray<z.ZodString>;
118
+ dates: z.ZodArray<z.ZodString>;
119
+ }, z.core.$strip>;
120
+ destinations: z.ZodObject<{
121
+ regions: z.ZodArray<z.ZodString>;
122
+ countries: z.ZodArray<z.ZodString>;
123
+ cities: z.ZodArray<z.ZodString>;
124
+ ids: z.ZodArray<z.ZodString>;
125
+ slugs: z.ZodArray<z.ZodString>;
126
+ }, z.core.$strip>;
127
+ coordinates: z.ZodNullable<z.ZodObject<{
128
+ latitude: z.ZodNumber;
129
+ longitude: z.ZodNumber;
130
+ }, z.core.$strip>>;
131
+ }, z.core.$strip>>>;
132
+ facets: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodArray<z.ZodObject<{
133
+ value: z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>;
134
+ count: z.ZodNumber;
135
+ }, z.core.$strip>>>>;
136
+ }, z.core.$strip>;
137
+ export type CatalogSearchResponse = z.infer<typeof catalogSearchResponseSchema>;
138
+ export type CatalogSearchHit = z.infer<typeof searchHitSchema>;
139
+ export type CatalogSearchDocument = z.infer<typeof indexerDocumentSchema>;
140
+ export type StorefrontCatalogCard = z.infer<typeof storefrontCatalogCardSchema>;
141
+ export type CatalogFacetBucket = z.infer<typeof facetBucketSchema>;
142
+ export {};
143
+ //# sourceMappingURL=schemas.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../src/schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,QAAA,MAAM,qBAAqB;;;;;iBAKzB,CAAA;AAEF,QAAA,MAAM,eAAe;;;;;;;;;;iBAKnB,CAAA;AAEF,QAAA,MAAM,iBAAiB;;;iBAGrB,CAAA;AAiBF,QAAA,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAqC/B,CAAA;AAEF,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAOtC,CAAA;AAEF,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAA;AAC/E,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAA;AAC9D,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAA;AACzE,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAA;AAC/E,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAA"}
@@ -0,0 +1,76 @@
1
+ import { z } from "zod";
2
+ const indexerDocumentSchema = z.object({
3
+ id: z.string(),
4
+ fields: z.record(z.string(), z.unknown()),
5
+ embeddings: z.record(z.string(), z.array(z.number())).optional(),
6
+ embedding_model_id: z.string().optional(),
7
+ });
8
+ const searchHitSchema = z.object({
9
+ id: z.string(),
10
+ score: z.number(),
11
+ document: indexerDocumentSchema,
12
+ highlights: z.record(z.string(), z.unknown()).optional(),
13
+ });
14
+ const facetBucketSchema = z.object({
15
+ value: z.union([z.string(), z.number()]),
16
+ count: z.number(),
17
+ });
18
+ const storefrontCatalogCardTaxonSchema = z.object({
19
+ id: z.string().nullable(),
20
+ name: z.string().nullable(),
21
+ slug: z.string().nullable(),
22
+ });
23
+ const storefrontCatalogCardOfferSchema = z.object({
24
+ id: z.string().nullable(),
25
+ name: z.string().nullable(),
26
+ discountKind: z.string().nullable(),
27
+ discountPercent: z.number().nullable(),
28
+ discountAmountCents: z.number().nullable(),
29
+ minPax: z.number().nullable().optional(),
30
+ });
31
+ const storefrontCatalogCardSchema = z.object({
32
+ id: z.string(),
33
+ name: z.string().nullable(),
34
+ slug: z.string().nullable(),
35
+ primaryCategory: storefrontCatalogCardTaxonSchema.nullable(),
36
+ media: z.object({
37
+ thumbnailUrl: z.string().nullable(),
38
+ coverMediaUrl: z.string().nullable(),
39
+ }),
40
+ priceFrom: z
41
+ .object({
42
+ amountCents: z.number(),
43
+ currency: z.string().nullable(),
44
+ originalAmountCents: z.number().nullable(),
45
+ })
46
+ .nullable(),
47
+ offerBadges: z.array(storefrontCatalogCardOfferSchema),
48
+ departures: z.object({
49
+ upcomingCount: z.number().nullable(),
50
+ nextDepartureAt: z.string().nullable(),
51
+ nextDepartureDate: z.string().nullable(),
52
+ months: z.array(z.string()),
53
+ dates: z.array(z.string()),
54
+ }),
55
+ destinations: z.object({
56
+ regions: z.array(z.string()),
57
+ countries: z.array(z.string()),
58
+ cities: z.array(z.string()),
59
+ ids: z.array(z.string()),
60
+ slugs: z.array(z.string()),
61
+ }),
62
+ coordinates: z
63
+ .object({
64
+ latitude: z.number(),
65
+ longitude: z.number(),
66
+ })
67
+ .nullable(),
68
+ });
69
+ export const catalogSearchResponseSchema = z.object({
70
+ vertical: z.string(),
71
+ mode: z.enum(["keyword", "hybrid", "semantic"]),
72
+ total: z.number(),
73
+ hits: z.array(searchHitSchema),
74
+ cards: z.array(storefrontCatalogCardSchema).optional(),
75
+ facets: z.record(z.string(), z.array(facetBucketSchema)).optional(),
76
+ });