@voyantjs/storefront 0.3.1 → 0.4.0
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.
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/routes-public.d.ts +365 -6
- package/dist/routes-public.d.ts.map +1 -1
- package/dist/routes-public.js +50 -1
- package/dist/service-departures.d.ts +177 -0
- package/dist/service-departures.d.ts.map +1 -0
- package/dist/service-departures.js +779 -0
- package/dist/service.d.ts +196 -1
- package/dist/service.d.ts.map +1 -1
- package/dist/service.js +23 -0
- package/dist/validation.d.ts +452 -35
- package/dist/validation.d.ts.map +1 -1
- package/dist/validation.js +194 -0
- package/package.json +10 -3
package/dist/validation.js
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { availabilitySlotStatusSchema } from "@voyantjs/availability/validation";
|
|
2
|
+
import { extraPricingModeSchema } from "@voyantjs/extras/validation";
|
|
1
3
|
import { z } from "zod";
|
|
2
4
|
const languageTagSchema = z
|
|
3
5
|
.string()
|
|
@@ -125,3 +127,195 @@ export const storefrontSettingsSchema = z.object({
|
|
|
125
127
|
methods: z.array(storefrontPaymentMethodSchema),
|
|
126
128
|
}),
|
|
127
129
|
});
|
|
130
|
+
export const storefrontDepartureStatusSchema = z.enum([
|
|
131
|
+
"open",
|
|
132
|
+
"closed",
|
|
133
|
+
"sold_out",
|
|
134
|
+
"cancelled",
|
|
135
|
+
"on_request",
|
|
136
|
+
]);
|
|
137
|
+
export const storefrontDepartureRoomOccupancySchema = z.object({
|
|
138
|
+
adultsMin: z.number().int().min(0),
|
|
139
|
+
adultsMax: z.number().int().min(0),
|
|
140
|
+
childrenMax: z.number().int().min(0),
|
|
141
|
+
});
|
|
142
|
+
export const storefrontDepartureRoomPriceSchema = z.object({
|
|
143
|
+
amount: z.number(),
|
|
144
|
+
currencyCode: z.string(),
|
|
145
|
+
roomType: z.object({
|
|
146
|
+
id: z.string(),
|
|
147
|
+
name: z.string(),
|
|
148
|
+
occupancy: storefrontDepartureRoomOccupancySchema,
|
|
149
|
+
}),
|
|
150
|
+
});
|
|
151
|
+
export const storefrontDepartureRatePlanSchema = z.object({
|
|
152
|
+
id: z.string(),
|
|
153
|
+
active: z.boolean(),
|
|
154
|
+
name: z.string(),
|
|
155
|
+
pricingModel: z.string(),
|
|
156
|
+
basePrices: z.array(z.object({
|
|
157
|
+
amount: z.number(),
|
|
158
|
+
currencyCode: z.string(),
|
|
159
|
+
})),
|
|
160
|
+
roomPrices: z.array(storefrontDepartureRoomPriceSchema),
|
|
161
|
+
});
|
|
162
|
+
export const storefrontDepartureStartTimeSchema = z.object({
|
|
163
|
+
id: z.string(),
|
|
164
|
+
label: z.string().nullable(),
|
|
165
|
+
startTimeLocal: z.string(),
|
|
166
|
+
durationMinutes: z.number().int().nullable(),
|
|
167
|
+
});
|
|
168
|
+
export const storefrontDepartureSchema = z.object({
|
|
169
|
+
id: z.string(),
|
|
170
|
+
productId: z.string(),
|
|
171
|
+
itineraryId: z.string(),
|
|
172
|
+
optionId: z.string().nullable(),
|
|
173
|
+
dateLocal: z.string().nullable(),
|
|
174
|
+
startAt: z.string().nullable(),
|
|
175
|
+
endAt: z.string().nullable(),
|
|
176
|
+
timezone: z.string(),
|
|
177
|
+
startTime: storefrontDepartureStartTimeSchema.nullable(),
|
|
178
|
+
meetingPoint: z.string().nullable(),
|
|
179
|
+
capacity: z.number().int().nullable(),
|
|
180
|
+
remaining: z.number().int().nullable(),
|
|
181
|
+
departureStatus: storefrontDepartureStatusSchema,
|
|
182
|
+
nights: z.number().int().nullable(),
|
|
183
|
+
days: z.number().int().nullable(),
|
|
184
|
+
ratePlans: z.array(storefrontDepartureRatePlanSchema),
|
|
185
|
+
});
|
|
186
|
+
export const storefrontDepartureListQuerySchema = z.object({
|
|
187
|
+
optionId: z.string().optional(),
|
|
188
|
+
status: availabilitySlotStatusSchema.optional(),
|
|
189
|
+
dateFrom: z.string().date().optional(),
|
|
190
|
+
dateTo: z.string().date().optional(),
|
|
191
|
+
limit: z.coerce.number().int().min(1).max(250).default(100),
|
|
192
|
+
offset: z.coerce.number().int().min(0).default(0),
|
|
193
|
+
});
|
|
194
|
+
export const storefrontDepartureListResponseSchema = z.object({
|
|
195
|
+
data: z.array(storefrontDepartureSchema),
|
|
196
|
+
total: z.number().int(),
|
|
197
|
+
limit: z.number().int(),
|
|
198
|
+
offset: z.number().int(),
|
|
199
|
+
});
|
|
200
|
+
export const storefrontDeparturePricePreviewInputSchema = z.object({
|
|
201
|
+
pax: z
|
|
202
|
+
.object({
|
|
203
|
+
adults: z.coerce.number().int().min(0).default(1),
|
|
204
|
+
children: z.coerce.number().int().min(0).default(0),
|
|
205
|
+
infants: z.coerce.number().int().min(0).default(0),
|
|
206
|
+
})
|
|
207
|
+
.default({ adults: 1, children: 0, infants: 0 }),
|
|
208
|
+
currencyCode: z.string().trim().min(1).optional().nullable(),
|
|
209
|
+
rooms: z
|
|
210
|
+
.array(z.object({
|
|
211
|
+
unitId: z.string().trim().min(1),
|
|
212
|
+
occupancy: z.coerce.number().int().min(1).default(1),
|
|
213
|
+
quantity: z.coerce.number().int().min(1).default(1),
|
|
214
|
+
}))
|
|
215
|
+
.default([]),
|
|
216
|
+
extras: z
|
|
217
|
+
.array(z.object({
|
|
218
|
+
extraId: z.string().trim().min(1),
|
|
219
|
+
quantity: z.coerce.number().int().min(1).default(1),
|
|
220
|
+
}))
|
|
221
|
+
.default([]),
|
|
222
|
+
});
|
|
223
|
+
export const storefrontDeparturePriceLineItemSchema = z.object({
|
|
224
|
+
name: z.string(),
|
|
225
|
+
total: z.number(),
|
|
226
|
+
quantity: z.number().int().min(1),
|
|
227
|
+
unitPrice: z.number(),
|
|
228
|
+
});
|
|
229
|
+
export const storefrontDeparturePricePreviewSchema = z.object({
|
|
230
|
+
departureId: z.string(),
|
|
231
|
+
productId: z.string(),
|
|
232
|
+
optionId: z.string().nullable(),
|
|
233
|
+
currencyCode: z.string(),
|
|
234
|
+
basePrice: z.number(),
|
|
235
|
+
taxAmount: z.number(),
|
|
236
|
+
total: z.number(),
|
|
237
|
+
notes: z.string().nullable(),
|
|
238
|
+
lineItems: z.array(storefrontDeparturePriceLineItemSchema),
|
|
239
|
+
});
|
|
240
|
+
export const storefrontProductExtensionsQuerySchema = z.object({
|
|
241
|
+
optionId: z.string().optional(),
|
|
242
|
+
});
|
|
243
|
+
export const storefrontProductExtensionMediaSchema = z.object({
|
|
244
|
+
url: z.string().trim().min(1),
|
|
245
|
+
alt: z.string().trim().min(1).nullable(),
|
|
246
|
+
});
|
|
247
|
+
export const storefrontProductExtensionDetailSchema = z.object({
|
|
248
|
+
description: z.string().nullable(),
|
|
249
|
+
media: z.array(storefrontProductExtensionMediaSchema),
|
|
250
|
+
});
|
|
251
|
+
export const storefrontProductExtensionSchema = z.object({
|
|
252
|
+
id: z.string(),
|
|
253
|
+
name: z.string(),
|
|
254
|
+
label: z.string(),
|
|
255
|
+
required: z.boolean(),
|
|
256
|
+
selectable: z.boolean(),
|
|
257
|
+
hasOptions: z.boolean(),
|
|
258
|
+
refProductId: z.string().nullable(),
|
|
259
|
+
thumb: z.string().nullable(),
|
|
260
|
+
pricePerPerson: z.number().nullable(),
|
|
261
|
+
currencyCode: z.string(),
|
|
262
|
+
pricingMode: extraPricingModeSchema,
|
|
263
|
+
defaultQuantity: z.number().int().nullable(),
|
|
264
|
+
minQuantity: z.number().int().nullable(),
|
|
265
|
+
maxQuantity: z.number().int().nullable(),
|
|
266
|
+
});
|
|
267
|
+
export const storefrontProductExtensionsResponseSchema = z.object({
|
|
268
|
+
extensions: z.array(storefrontProductExtensionSchema),
|
|
269
|
+
items: z.array(storefrontProductExtensionSchema),
|
|
270
|
+
details: z.record(z.string(), storefrontProductExtensionDetailSchema),
|
|
271
|
+
currencyCode: z.string(),
|
|
272
|
+
});
|
|
273
|
+
export const storefrontDepartureItinerarySegmentSchema = z.object({
|
|
274
|
+
id: z.string(),
|
|
275
|
+
title: z.string(),
|
|
276
|
+
description: z.string().nullable(),
|
|
277
|
+
});
|
|
278
|
+
export const storefrontDepartureItineraryDaySchema = z.object({
|
|
279
|
+
id: z.string(),
|
|
280
|
+
title: z.string(),
|
|
281
|
+
description: z.string().nullable(),
|
|
282
|
+
thumbnail: z
|
|
283
|
+
.object({
|
|
284
|
+
url: z.string().trim().min(1),
|
|
285
|
+
})
|
|
286
|
+
.nullable(),
|
|
287
|
+
segments: z.array(storefrontDepartureItinerarySegmentSchema),
|
|
288
|
+
});
|
|
289
|
+
export const storefrontDepartureItinerarySchema = z.object({
|
|
290
|
+
id: z.string(),
|
|
291
|
+
days: z.array(storefrontDepartureItineraryDaySchema),
|
|
292
|
+
});
|
|
293
|
+
export const storefrontPromotionalOfferSchema = z.object({
|
|
294
|
+
id: z.string(),
|
|
295
|
+
name: z.string(),
|
|
296
|
+
slug: z.string().nullable(),
|
|
297
|
+
description: z.string().nullable(),
|
|
298
|
+
discountType: z.enum(["percentage", "fixed_amount"]),
|
|
299
|
+
discountValue: z.string(),
|
|
300
|
+
currency: z.string().nullable(),
|
|
301
|
+
applicableProductIds: z.array(z.string()),
|
|
302
|
+
applicableDepartureIds: z.array(z.string()),
|
|
303
|
+
validFrom: z.string().nullable(),
|
|
304
|
+
validTo: z.string().nullable(),
|
|
305
|
+
minPassengers: z.number().int().nullable(),
|
|
306
|
+
imageMobileUrl: z.string().nullable(),
|
|
307
|
+
imageDesktopUrl: z.string().nullable(),
|
|
308
|
+
stackable: z.boolean(),
|
|
309
|
+
createdAt: z.string(),
|
|
310
|
+
updatedAt: z.string(),
|
|
311
|
+
});
|
|
312
|
+
export const storefrontPromotionalOfferListQuerySchema = z.object({
|
|
313
|
+
departureId: z.string().optional(),
|
|
314
|
+
locale: z.string().trim().min(2).optional(),
|
|
315
|
+
});
|
|
316
|
+
export const storefrontPromotionalOfferListResponseSchema = z.object({
|
|
317
|
+
data: z.array(storefrontPromotionalOfferSchema),
|
|
318
|
+
});
|
|
319
|
+
export const storefrontPromotionalOfferResponseSchema = z.object({
|
|
320
|
+
data: storefrontPromotionalOfferSchema,
|
|
321
|
+
});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@voyantjs/storefront",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"license": "FSL-1.1-Apache-2.0",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
|
@@ -22,14 +22,21 @@
|
|
|
22
22
|
}
|
|
23
23
|
},
|
|
24
24
|
"dependencies": {
|
|
25
|
+
"drizzle-orm": "^0.45.2",
|
|
25
26
|
"hono": "^4.12.10",
|
|
26
27
|
"zod": "^4.3.6",
|
|
27
|
-
"@voyantjs/
|
|
28
|
-
"@voyantjs/
|
|
28
|
+
"@voyantjs/availability": "0.4.0",
|
|
29
|
+
"@voyantjs/core": "0.4.0",
|
|
30
|
+
"@voyantjs/pricing": "0.4.0",
|
|
31
|
+
"@voyantjs/hono": "0.4.0",
|
|
32
|
+
"@voyantjs/extras": "0.4.0",
|
|
33
|
+
"@voyantjs/products": "0.4.0",
|
|
34
|
+
"@voyantjs/sellability": "0.4.0"
|
|
29
35
|
},
|
|
30
36
|
"devDependencies": {
|
|
31
37
|
"typescript": "^6.0.2",
|
|
32
38
|
"vitest": "^4.1.2",
|
|
39
|
+
"@voyantjs/db": "0.4.0",
|
|
33
40
|
"@voyantjs/voyant-typescript-config": "0.1.0"
|
|
34
41
|
},
|
|
35
42
|
"files": [
|