@voyantjs/bookings 0.119.2 → 0.119.3

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 (37) hide show
  1. package/dist/pricing-assignment/age.d.ts +33 -0
  2. package/dist/pricing-assignment/age.d.ts.map +1 -0
  3. package/dist/pricing-assignment/age.js +109 -0
  4. package/dist/pricing-assignment/draft.d.ts +69 -0
  5. package/dist/pricing-assignment/draft.d.ts.map +1 -0
  6. package/dist/pricing-assignment/draft.js +284 -0
  7. package/dist/pricing-assignment/types.d.ts +113 -0
  8. package/dist/pricing-assignment/types.d.ts.map +1 -0
  9. package/dist/pricing-assignment/types.js +30 -0
  10. package/dist/pricing-assignment/unit-helpers.d.ts +11 -0
  11. package/dist/pricing-assignment/unit-helpers.d.ts.map +1 -0
  12. package/dist/pricing-assignment/unit-helpers.js +19 -0
  13. package/dist/pricing-assignment/verify.d.ts +67 -0
  14. package/dist/pricing-assignment/verify.d.ts.map +1 -0
  15. package/dist/pricing-assignment/verify.js +121 -0
  16. package/dist/pricing-assignment.d.ts +4 -275
  17. package/dist/pricing-assignment.d.ts.map +1 -1
  18. package/dist/pricing-assignment.js +4 -559
  19. package/dist/routes-admin.d.ts +2894 -0
  20. package/dist/routes-admin.d.ts.map +1 -0
  21. package/dist/routes-admin.js +2111 -0
  22. package/dist/routes.d.ts +1 -2893
  23. package/dist/routes.d.ts.map +1 -1
  24. package/dist/routes.js +1 -2111
  25. package/dist/service-core.d.ts +6240 -0
  26. package/dist/service-core.d.ts.map +1 -0
  27. package/dist/service-core.js +4350 -0
  28. package/dist/service-public-core.d.ts +907 -0
  29. package/dist/service-public-core.d.ts.map +1 -0
  30. package/dist/service-public-core.js +1176 -0
  31. package/dist/service-public.d.ts +1 -906
  32. package/dist/service-public.d.ts.map +1 -1
  33. package/dist/service-public.js +1 -1176
  34. package/dist/service.d.ts +1 -6239
  35. package/dist/service.d.ts.map +1 -1
  36. package/dist/service.js +1 -4350
  37. package/package.json +5 -5
@@ -0,0 +1,2894 @@
1
+ import { type ActionApprovalResponse, type ActionLedgerEntry, type ActionLedgerEntryResponse } from "@voyantjs/action-ledger";
2
+ import { z } from "zod";
3
+ import type { publicBookingRoutes } from "./routes-public.js";
4
+ import type { Env } from "./routes-shared.js";
5
+ interface BookingActionLedgerTravelerTarget {
6
+ id: string;
7
+ firstName: string | null;
8
+ lastName: string | null;
9
+ }
10
+ export interface BookingActionLedgerListResponse {
11
+ data: ActionLedgerEntryResponse[];
12
+ travelers: BookingActionLedgerTravelerTarget[];
13
+ pageInfo: {
14
+ nextCursor: {
15
+ occurredAt: string;
16
+ id: string;
17
+ } | null;
18
+ };
19
+ }
20
+ export interface BookingActionApprovalDecisionResponse {
21
+ data: {
22
+ approval: ActionApprovalResponse;
23
+ decisionAction: ActionLedgerEntryResponse;
24
+ };
25
+ }
26
+ type BookingMutationAction = "create" | "update" | "delete";
27
+ declare function changedBookingMutationFields(input: Record<string, unknown>, before: Record<string, unknown> | null, after: Record<string, unknown> | null): string[];
28
+ declare function changedBookingTravelerFields(input: Record<string, unknown>, before: Record<string, unknown> | null, after: Record<string, unknown> | null): string[];
29
+ declare function changedBookingTravelDetailFields(input: Record<string, unknown>): string[];
30
+ declare function changedBookingItemFields(input: Record<string, unknown>, before: Record<string, unknown> | null, after: Record<string, unknown> | null): string[];
31
+ declare function bookingMutationSummary(action: BookingMutationAction, fields: string[], subject: string): string;
32
+ declare function buildBookingActionLedgerPage({ bookingEntries, travelerEntries, itemEntries, limit, }: {
33
+ bookingEntries: ActionLedgerEntry[];
34
+ travelerEntries: ActionLedgerEntry[];
35
+ itemEntries?: ActionLedgerEntry[];
36
+ limit: number;
37
+ }): {
38
+ entries: {
39
+ id: string;
40
+ occurredAt: Date;
41
+ actionName: string;
42
+ actionVersion: string;
43
+ actionKind: "execute" | "reverse" | "update" | "delete" | "read" | "create" | "approve" | "reject" | "compensate" | "duplicate";
44
+ status: "requested" | "awaiting_approval" | "approved" | "denied" | "succeeded" | "failed" | "reversed" | "compensated" | "expired" | "cancelled" | "superseded";
45
+ evaluatedRisk: "low" | "medium" | "high" | "critical";
46
+ actorType: string | null;
47
+ principalType: "user" | "api_key" | "agent" | "workflow" | "system";
48
+ principalId: string;
49
+ principalSubtype: string | null;
50
+ sessionId: string | null;
51
+ apiTokenId: string | null;
52
+ internalRequest: boolean;
53
+ delegatedByPrincipalType: "user" | "api_key" | "agent" | "workflow" | "system" | null;
54
+ delegatedByPrincipalId: string | null;
55
+ delegationId: string | null;
56
+ callerType: string | null;
57
+ organizationId: string | null;
58
+ routeOrToolName: string | null;
59
+ workflowRunId: string | null;
60
+ workflowStepId: string | null;
61
+ correlationId: string | null;
62
+ causationActionId: string | null;
63
+ idempotencyScope: string | null;
64
+ idempotencyKey: string | null;
65
+ idempotencyFingerprint: string | null;
66
+ targetType: string;
67
+ targetId: string;
68
+ capabilityId: string | null;
69
+ capabilityVersion: string | null;
70
+ authorizationSource: string | null;
71
+ approvalId: string | null;
72
+ amendsActionId: string | null;
73
+ createdAt: Date;
74
+ }[];
75
+ nextCursor: {
76
+ occurredAt: string;
77
+ id: string;
78
+ } | null;
79
+ };
80
+ export declare const bookingRoutes: import("hono/hono-base").HonoBase<Env, ({
81
+ "/": {
82
+ $get: {
83
+ input: {};
84
+ output: {
85
+ data: {
86
+ startsAt: string | null;
87
+ endsAt: string | null;
88
+ items: {
89
+ id: string;
90
+ title: string;
91
+ itemType: string;
92
+ productId: string | null;
93
+ productName: string | null;
94
+ startsAt: string | null;
95
+ endsAt: string | null;
96
+ }[];
97
+ id: string;
98
+ bookingNumber: string;
99
+ status: "expired" | "cancelled" | "completed" | "draft" | "on_hold" | "awaiting_payment" | "confirmed" | "in_progress";
100
+ personId: string | null;
101
+ organizationId: string | null;
102
+ sourceType: "internal" | "direct" | "manual" | "affiliate" | "ota" | "reseller" | "api_partner";
103
+ externalBookingRef: string | null;
104
+ communicationLanguage: string | null;
105
+ contactFirstName: string | null;
106
+ contactLastName: string | null;
107
+ contactPartyType: string | null;
108
+ contactTaxId: string | null;
109
+ contactEmail: string | null;
110
+ contactPhone: string | null;
111
+ contactPreferredLanguage: string | null;
112
+ contactCountry: string | null;
113
+ contactRegion: string | null;
114
+ contactCity: string | null;
115
+ contactAddressLine1: string | null;
116
+ contactAddressLine2: string | null;
117
+ contactPostalCode: string | null;
118
+ sellCurrency: string;
119
+ baseCurrency: string | null;
120
+ fxRateSetId: string | null;
121
+ sellAmountCents: number | null;
122
+ baseSellAmountCents: number | null;
123
+ costAmountCents: number | null;
124
+ baseCostAmountCents: number | null;
125
+ marginPercent: number | null;
126
+ startDate: string | null;
127
+ endDate: string | null;
128
+ pax: number | null;
129
+ internalNotes: string | null;
130
+ customerPaymentPolicy: import("hono/utils/types").JSONValue;
131
+ priceOverride: {
132
+ isManual: true;
133
+ originalAmountCents: number | null;
134
+ overriddenAmountCents: number;
135
+ currency: string;
136
+ reason: string;
137
+ overriddenBy: string;
138
+ overriddenAt: string;
139
+ } | null;
140
+ holdExpiresAt: string | null;
141
+ confirmedAt: string | null;
142
+ expiredAt: string | null;
143
+ cancelledAt: string | null;
144
+ completedAt: string | null;
145
+ awaitingPaymentAt: string | null;
146
+ paidAt: string | null;
147
+ redeemedAt: string | null;
148
+ createdAt: string;
149
+ updatedAt: string;
150
+ }[];
151
+ total: number;
152
+ limit: number;
153
+ offset: number;
154
+ };
155
+ outputFormat: "json";
156
+ status: import("hono/utils/http-status").ContentfulStatusCode;
157
+ };
158
+ };
159
+ } & {
160
+ "/pricing-preview": {
161
+ $post: {
162
+ input: {};
163
+ output: {
164
+ error: string;
165
+ };
166
+ outputFormat: "json";
167
+ status: 404;
168
+ } | {
169
+ input: {};
170
+ output: {
171
+ data: {
172
+ catalog: {
173
+ id: string;
174
+ currencyCode: string | null;
175
+ };
176
+ options: {
177
+ id: string;
178
+ name: string;
179
+ isDefault: boolean;
180
+ }[];
181
+ rules: {
182
+ id: string;
183
+ optionId: string;
184
+ pricingMode: string;
185
+ baseSellAmountCents: number | null;
186
+ isDefault: boolean;
187
+ }[];
188
+ pricingCategories: never[] | {
189
+ id: string;
190
+ name: string;
191
+ code: string | null;
192
+ categoryType: string;
193
+ minAge: number | null;
194
+ maxAge: number | null;
195
+ metadata: {
196
+ [x: string]: import("hono/utils/types").JSONValue;
197
+ } | null;
198
+ sortOrder: number;
199
+ }[];
200
+ unitPrices: {
201
+ sellAmountCents: number | null;
202
+ tiers: {
203
+ id: string;
204
+ optionUnitPriceRuleId: string;
205
+ minQuantity: number;
206
+ maxQuantity: number | null;
207
+ sellAmountCents: number | null;
208
+ sortOrder: number;
209
+ }[];
210
+ id: string;
211
+ optionPriceRuleId: string;
212
+ optionId: string;
213
+ unitId: string;
214
+ unitName: string;
215
+ unitType: string | null;
216
+ occupancyMax: number | null;
217
+ pricingCategoryId: string | null;
218
+ pricingMode: string;
219
+ minQuantity: number | null;
220
+ maxQuantity: number | null;
221
+ }[];
222
+ };
223
+ };
224
+ outputFormat: "json";
225
+ status: import("hono/utils/http-status").ContentfulStatusCode;
226
+ };
227
+ };
228
+ } & {
229
+ "/aggregates": {
230
+ $get: {
231
+ input: {};
232
+ output: {
233
+ data: {
234
+ total: number;
235
+ totalPax: number;
236
+ countsByStatus: {
237
+ status: import("./state-machine.js").BookingStatus;
238
+ count: number;
239
+ }[];
240
+ monthlyCounts: {
241
+ yearMonth: string;
242
+ count: number;
243
+ }[];
244
+ monthlyRevenue: {
245
+ yearMonth: string;
246
+ currency: string;
247
+ sellAmountCents: number;
248
+ }[];
249
+ upcomingDepartures: {
250
+ count: number;
251
+ items: {
252
+ id: string;
253
+ bookingNumber: string | null;
254
+ status: import("./state-machine.js").BookingStatus;
255
+ startDate: string | null;
256
+ endDate: string | null;
257
+ pax: number | null;
258
+ sellCurrency: string | null;
259
+ sellAmountCents: number | null;
260
+ }[];
261
+ };
262
+ };
263
+ };
264
+ outputFormat: "json";
265
+ status: import("hono/utils/http-status").ContentfulStatusCode;
266
+ };
267
+ };
268
+ } & {
269
+ "/overview": {
270
+ $get: {
271
+ input: {};
272
+ output: {
273
+ error: string;
274
+ };
275
+ outputFormat: "json";
276
+ status: 404;
277
+ } | {
278
+ input: {};
279
+ output: {
280
+ data: {
281
+ bookingId: string;
282
+ bookingNumber: string;
283
+ status: "expired" | "cancelled" | "completed" | "draft" | "on_hold" | "awaiting_payment" | "confirmed" | "in_progress";
284
+ sellCurrency: string;
285
+ sellAmountCents: number | null;
286
+ startDate: string | null;
287
+ endDate: string | null;
288
+ pax: number | null;
289
+ confirmedAt: string | null;
290
+ cancelledAt: string | null;
291
+ completedAt: string | null;
292
+ travelers: {
293
+ id: string;
294
+ participantType: "other" | "traveler" | "occupant";
295
+ firstName: string;
296
+ lastName: string;
297
+ isPrimary: boolean;
298
+ }[];
299
+ items: {
300
+ id: string;
301
+ title: string;
302
+ description: string | null;
303
+ itemType: "service" | "other" | "unit" | "extra" | "fee" | "tax" | "discount" | "adjustment" | "accommodation" | "transport";
304
+ status: "expired" | "cancelled" | "draft" | "on_hold" | "confirmed" | "fulfilled";
305
+ serviceDate: string | null;
306
+ startsAt: string | null;
307
+ endsAt: string | null;
308
+ quantity: number;
309
+ sellCurrency: string;
310
+ unitSellAmountCents: number | null;
311
+ totalSellAmountCents: number | null;
312
+ costCurrency: string | null;
313
+ unitCostAmountCents: number | null;
314
+ totalCostAmountCents: number | null;
315
+ notes: string | null;
316
+ productId: string | null;
317
+ optionId: string | null;
318
+ optionUnitId: string | null;
319
+ pricingCategoryId: string | null;
320
+ travelerLinks: {
321
+ id: string;
322
+ travelerId: string;
323
+ role: string;
324
+ isPrimary: boolean;
325
+ }[];
326
+ }[];
327
+ documents: {
328
+ id: string;
329
+ travelerId: string | null;
330
+ type: "visa" | "other" | "insurance" | "health" | "passport_copy";
331
+ fileName: string;
332
+ fileUrl: string;
333
+ }[];
334
+ fulfillments: {
335
+ id: string;
336
+ bookingItemId: string | null;
337
+ travelerId: string | null;
338
+ fulfillmentType: "other" | "pdf" | "voucher" | "ticket" | "qr_code" | "barcode" | "mobile";
339
+ deliveryChannel: "api" | "email" | "other" | "download" | "wallet";
340
+ status: "failed" | "pending" | "revoked" | "issued" | "reissued";
341
+ artifactUrl: string | null;
342
+ }[];
343
+ };
344
+ };
345
+ outputFormat: "json";
346
+ status: import("hono/utils/http-status").ContentfulStatusCode;
347
+ };
348
+ };
349
+ } & {
350
+ "/sharing-groups": {
351
+ $get: {
352
+ input: {};
353
+ output: {
354
+ data: {
355
+ id: string;
356
+ label: string;
357
+ occupancy: number;
358
+ roomTypeId: string | null;
359
+ bookingIds: string[];
360
+ }[];
361
+ };
362
+ outputFormat: "json";
363
+ status: import("hono/utils/http-status").ContentfulStatusCode;
364
+ };
365
+ };
366
+ } & {
367
+ "/sharing-groups/:groupId/travelers": {
368
+ $get: {
369
+ input: {
370
+ param: {
371
+ groupId: string;
372
+ };
373
+ };
374
+ output: {
375
+ data: {
376
+ id: string;
377
+ bookingId: string;
378
+ bookingNumber: string;
379
+ participantType: string;
380
+ travelerCategory: string | null;
381
+ personId: string | null;
382
+ firstName: string;
383
+ lastName: string;
384
+ email: string | null;
385
+ phone: string | null;
386
+ preferredLanguage: string | null;
387
+ specialRequests: string | null;
388
+ isPrimary: boolean;
389
+ notes: string | null;
390
+ isLeadTraveler: boolean;
391
+ sharingGroupId: string;
392
+ roomTypeId: string | null;
393
+ bedPreference: string | null;
394
+ allocations: {
395
+ [x: string]: string;
396
+ };
397
+ createdAt: string;
398
+ updatedAt: string;
399
+ }[];
400
+ };
401
+ outputFormat: "json";
402
+ status: import("hono/utils/http-status").ContentfulStatusCode;
403
+ };
404
+ };
405
+ } & {
406
+ "/:id": {
407
+ $get: {
408
+ input: {
409
+ param: {
410
+ id: string;
411
+ };
412
+ };
413
+ output: {
414
+ error: string;
415
+ };
416
+ outputFormat: "json";
417
+ status: 404;
418
+ } | {
419
+ input: {
420
+ param: {
421
+ id: string;
422
+ };
423
+ };
424
+ output: {
425
+ data: {
426
+ id: string;
427
+ bookingNumber: string;
428
+ status: "expired" | "cancelled" | "completed" | "draft" | "on_hold" | "awaiting_payment" | "confirmed" | "in_progress";
429
+ personId: string | null;
430
+ organizationId: string | null;
431
+ sourceType: "internal" | "direct" | "manual" | "affiliate" | "ota" | "reseller" | "api_partner";
432
+ externalBookingRef: string | null;
433
+ communicationLanguage: string | null;
434
+ contactFirstName: string | null;
435
+ contactLastName: string | null;
436
+ contactPartyType: string | null;
437
+ contactTaxId: string | null;
438
+ contactEmail: string | null;
439
+ contactPhone: string | null;
440
+ contactPreferredLanguage: string | null;
441
+ contactCountry: string | null;
442
+ contactRegion: string | null;
443
+ contactCity: string | null;
444
+ contactAddressLine1: string | null;
445
+ contactAddressLine2: string | null;
446
+ contactPostalCode: string | null;
447
+ sellCurrency: string;
448
+ baseCurrency: string | null;
449
+ fxRateSetId: string | null;
450
+ sellAmountCents: number | null;
451
+ baseSellAmountCents: number | null;
452
+ costAmountCents: number | null;
453
+ baseCostAmountCents: number | null;
454
+ marginPercent: number | null;
455
+ startDate: string | null;
456
+ endDate: string | null;
457
+ pax: number | null;
458
+ internalNotes: string | null;
459
+ customerPaymentPolicy: import("hono/utils/types").JSONValue;
460
+ priceOverride: {
461
+ isManual: true;
462
+ originalAmountCents: number | null;
463
+ overriddenAmountCents: number;
464
+ currency: string;
465
+ reason: string;
466
+ overriddenBy: string;
467
+ overriddenAt: string;
468
+ } | null;
469
+ holdExpiresAt: string | null;
470
+ confirmedAt: string | null;
471
+ expiredAt: string | null;
472
+ cancelledAt: string | null;
473
+ completedAt: string | null;
474
+ awaitingPaymentAt: string | null;
475
+ paidAt: string | null;
476
+ redeemedAt: string | null;
477
+ createdAt: string;
478
+ updatedAt: string;
479
+ };
480
+ };
481
+ outputFormat: "json";
482
+ status: import("hono/utils/http-status").ContentfulStatusCode;
483
+ };
484
+ };
485
+ } & {
486
+ "/:id/action-ledger": {
487
+ $get: {
488
+ input: {
489
+ param: {
490
+ id: string;
491
+ };
492
+ };
493
+ output: {
494
+ error: string;
495
+ };
496
+ outputFormat: "json";
497
+ status: 404;
498
+ } | {
499
+ input: {
500
+ param: {
501
+ id: string;
502
+ };
503
+ };
504
+ output: {
505
+ data: {
506
+ id: string;
507
+ actionName: string;
508
+ actionVersion: string;
509
+ actionKind: "execute" | "reverse" | "update" | "delete" | "read" | "create" | "approve" | "reject" | "compensate" | "duplicate";
510
+ status: "requested" | "awaiting_approval" | "approved" | "denied" | "succeeded" | "failed" | "reversed" | "compensated" | "expired" | "cancelled" | "superseded";
511
+ evaluatedRisk: "low" | "medium" | "high" | "critical";
512
+ actorType: string | null;
513
+ principalType: "user" | "api_key" | "agent" | "workflow" | "system";
514
+ principalId: string;
515
+ principalSubtype: string | null;
516
+ sessionId: string | null;
517
+ apiTokenId: string | null;
518
+ internalRequest: boolean;
519
+ delegatedByPrincipalType: "user" | "api_key" | "agent" | "workflow" | "system" | null;
520
+ delegatedByPrincipalId: string | null;
521
+ delegationId: string | null;
522
+ callerType: string | null;
523
+ organizationId: string | null;
524
+ routeOrToolName: string | null;
525
+ workflowRunId: string | null;
526
+ workflowStepId: string | null;
527
+ correlationId: string | null;
528
+ causationActionId: string | null;
529
+ idempotencyScope: string | null;
530
+ idempotencyKey: string | null;
531
+ idempotencyFingerprint: string | null;
532
+ targetType: string;
533
+ targetId: string;
534
+ capabilityId: string | null;
535
+ capabilityVersion: string | null;
536
+ authorizationSource: string | null;
537
+ approvalId: string | null;
538
+ amendsActionId: string | null;
539
+ occurredAt: string;
540
+ createdAt: string;
541
+ }[];
542
+ travelers: {
543
+ id: string;
544
+ firstName: string;
545
+ lastName: string;
546
+ }[];
547
+ pageInfo: {
548
+ nextCursor: {
549
+ occurredAt: string;
550
+ id: string;
551
+ } | null;
552
+ };
553
+ };
554
+ outputFormat: "json";
555
+ status: import("hono/utils/http-status").ContentfulStatusCode;
556
+ };
557
+ };
558
+ } & {
559
+ "/:id/action-approvals/:approvalId/decide": {
560
+ $post: {
561
+ input: {
562
+ param: {
563
+ id: string;
564
+ } & {
565
+ approvalId: string;
566
+ };
567
+ };
568
+ output: {};
569
+ outputFormat: string;
570
+ status: import("hono/utils/http-status").StatusCode;
571
+ };
572
+ };
573
+ } & {
574
+ "/reserve": {
575
+ $post: {
576
+ input: {};
577
+ output: {
578
+ data: {
579
+ id: string;
580
+ status: "expired" | "cancelled" | "completed" | "draft" | "on_hold" | "awaiting_payment" | "confirmed" | "in_progress";
581
+ organizationId: string | null;
582
+ createdAt: string;
583
+ updatedAt: string;
584
+ redeemedAt: string | null;
585
+ startDate: string | null;
586
+ endDate: string | null;
587
+ completedAt: string | null;
588
+ bookingNumber: string;
589
+ personId: string | null;
590
+ sourceType: "internal" | "direct" | "manual" | "affiliate" | "ota" | "reseller" | "api_partner";
591
+ externalBookingRef: string | null;
592
+ communicationLanguage: string | null;
593
+ contactFirstName: string | null;
594
+ contactLastName: string | null;
595
+ contactPartyType: string | null;
596
+ contactTaxId: string | null;
597
+ contactEmail: string | null;
598
+ contactPhone: string | null;
599
+ contactPreferredLanguage: string | null;
600
+ contactCountry: string | null;
601
+ contactRegion: string | null;
602
+ contactCity: string | null;
603
+ contactAddressLine1: string | null;
604
+ contactAddressLine2: string | null;
605
+ contactPostalCode: string | null;
606
+ sellCurrency: string;
607
+ baseCurrency: string | null;
608
+ fxRateSetId: string | null;
609
+ sellAmountCents: number | null;
610
+ baseSellAmountCents: number | null;
611
+ costAmountCents: number | null;
612
+ baseCostAmountCents: number | null;
613
+ marginPercent: number | null;
614
+ pax: number | null;
615
+ internalNotes: string | null;
616
+ customerPaymentPolicy: import("hono/utils/types").JSONValue;
617
+ priceOverride: {
618
+ isManual: true;
619
+ originalAmountCents: number | null;
620
+ overriddenAmountCents: number;
621
+ currency: string;
622
+ reason: string;
623
+ overriddenBy: string;
624
+ overriddenAt: string;
625
+ } | null;
626
+ holdExpiresAt: string | null;
627
+ confirmedAt: string | null;
628
+ expiredAt: string | null;
629
+ cancelledAt: string | null;
630
+ awaitingPaymentAt: string | null;
631
+ paidAt: string | null;
632
+ };
633
+ };
634
+ outputFormat: "json";
635
+ status: 201;
636
+ } | {
637
+ input: {};
638
+ output: {
639
+ error: string;
640
+ };
641
+ outputFormat: "json";
642
+ status: 404;
643
+ } | {
644
+ input: {};
645
+ output: {
646
+ error: string;
647
+ };
648
+ outputFormat: "json";
649
+ status: 409;
650
+ } | {
651
+ input: {};
652
+ output: {
653
+ error: string;
654
+ };
655
+ outputFormat: "json";
656
+ status: 400;
657
+ };
658
+ };
659
+ } & {
660
+ "/from-product": {
661
+ $post: {
662
+ input: {};
663
+ output: {
664
+ error: string;
665
+ };
666
+ outputFormat: "json";
667
+ status: 404;
668
+ } | {
669
+ input: {};
670
+ output: {
671
+ data: {
672
+ id: string;
673
+ status: "expired" | "cancelled" | "completed" | "draft" | "on_hold" | "awaiting_payment" | "confirmed" | "in_progress";
674
+ organizationId: string | null;
675
+ createdAt: string;
676
+ updatedAt: string;
677
+ redeemedAt: string | null;
678
+ startDate: string | null;
679
+ endDate: string | null;
680
+ completedAt: string | null;
681
+ bookingNumber: string;
682
+ personId: string | null;
683
+ sourceType: "internal" | "direct" | "manual" | "affiliate" | "ota" | "reseller" | "api_partner";
684
+ externalBookingRef: string | null;
685
+ communicationLanguage: string | null;
686
+ contactFirstName: string | null;
687
+ contactLastName: string | null;
688
+ contactPartyType: string | null;
689
+ contactTaxId: string | null;
690
+ contactEmail: string | null;
691
+ contactPhone: string | null;
692
+ contactPreferredLanguage: string | null;
693
+ contactCountry: string | null;
694
+ contactRegion: string | null;
695
+ contactCity: string | null;
696
+ contactAddressLine1: string | null;
697
+ contactAddressLine2: string | null;
698
+ contactPostalCode: string | null;
699
+ sellCurrency: string;
700
+ baseCurrency: string | null;
701
+ fxRateSetId: string | null;
702
+ sellAmountCents: number | null;
703
+ baseSellAmountCents: number | null;
704
+ costAmountCents: number | null;
705
+ baseCostAmountCents: number | null;
706
+ marginPercent: number | null;
707
+ pax: number | null;
708
+ internalNotes: string | null;
709
+ customerPaymentPolicy: import("hono/utils/types").JSONValue;
710
+ priceOverride: {
711
+ isManual: true;
712
+ originalAmountCents: number | null;
713
+ overriddenAmountCents: number;
714
+ currency: string;
715
+ reason: string;
716
+ overriddenBy: string;
717
+ overriddenAt: string;
718
+ } | null;
719
+ holdExpiresAt: string | null;
720
+ confirmedAt: string | null;
721
+ expiredAt: string | null;
722
+ cancelledAt: string | null;
723
+ awaitingPaymentAt: string | null;
724
+ paidAt: string | null;
725
+ };
726
+ };
727
+ outputFormat: "json";
728
+ status: 201;
729
+ };
730
+ };
731
+ } & {
732
+ "/from-offer/:offerId/reserve": {
733
+ $post: {
734
+ input: {
735
+ param: {
736
+ offerId: string;
737
+ };
738
+ };
739
+ output: {
740
+ error: string;
741
+ };
742
+ outputFormat: "json";
743
+ status: 404;
744
+ } | {
745
+ input: {
746
+ param: {
747
+ offerId: string;
748
+ };
749
+ };
750
+ output: {
751
+ error: string;
752
+ };
753
+ outputFormat: "json";
754
+ status: 409;
755
+ } | {
756
+ input: {
757
+ param: {
758
+ offerId: string;
759
+ };
760
+ };
761
+ output: {
762
+ data: import("hono/utils/types").JSONValue;
763
+ };
764
+ outputFormat: "json";
765
+ status: 201;
766
+ } | {
767
+ input: {
768
+ param: {
769
+ offerId: string;
770
+ };
771
+ };
772
+ output: {
773
+ error: string;
774
+ };
775
+ outputFormat: "json";
776
+ status: 400;
777
+ };
778
+ };
779
+ } & {
780
+ "/from-order/:orderId/reserve": {
781
+ $post: {
782
+ input: {
783
+ param: {
784
+ orderId: string;
785
+ };
786
+ };
787
+ output: {
788
+ error: string;
789
+ };
790
+ outputFormat: "json";
791
+ status: 404;
792
+ } | {
793
+ input: {
794
+ param: {
795
+ orderId: string;
796
+ };
797
+ };
798
+ output: {
799
+ error: string;
800
+ };
801
+ outputFormat: "json";
802
+ status: 409;
803
+ } | {
804
+ input: {
805
+ param: {
806
+ orderId: string;
807
+ };
808
+ };
809
+ output: {
810
+ data: import("hono/utils/types").JSONValue;
811
+ };
812
+ outputFormat: "json";
813
+ status: 201;
814
+ } | {
815
+ input: {
816
+ param: {
817
+ orderId: string;
818
+ };
819
+ };
820
+ output: {
821
+ error: string;
822
+ };
823
+ outputFormat: "json";
824
+ status: 400;
825
+ };
826
+ };
827
+ } & {
828
+ "/": {
829
+ $post: {
830
+ input: {};
831
+ output: {
832
+ data: {
833
+ id: string;
834
+ status: "expired" | "cancelled" | "completed" | "draft" | "on_hold" | "awaiting_payment" | "confirmed" | "in_progress";
835
+ organizationId: string | null;
836
+ createdAt: string;
837
+ updatedAt: string;
838
+ redeemedAt: string | null;
839
+ startDate: string | null;
840
+ endDate: string | null;
841
+ completedAt: string | null;
842
+ bookingNumber: string;
843
+ personId: string | null;
844
+ sourceType: "internal" | "direct" | "manual" | "affiliate" | "ota" | "reseller" | "api_partner";
845
+ externalBookingRef: string | null;
846
+ communicationLanguage: string | null;
847
+ contactFirstName: string | null;
848
+ contactLastName: string | null;
849
+ contactPartyType: string | null;
850
+ contactTaxId: string | null;
851
+ contactEmail: string | null;
852
+ contactPhone: string | null;
853
+ contactPreferredLanguage: string | null;
854
+ contactCountry: string | null;
855
+ contactRegion: string | null;
856
+ contactCity: string | null;
857
+ contactAddressLine1: string | null;
858
+ contactAddressLine2: string | null;
859
+ contactPostalCode: string | null;
860
+ sellCurrency: string;
861
+ baseCurrency: string | null;
862
+ fxRateSetId: string | null;
863
+ sellAmountCents: number | null;
864
+ baseSellAmountCents: number | null;
865
+ costAmountCents: number | null;
866
+ baseCostAmountCents: number | null;
867
+ marginPercent: number | null;
868
+ pax: number | null;
869
+ internalNotes: string | null;
870
+ customerPaymentPolicy: import("hono/utils/types").JSONValue;
871
+ priceOverride: {
872
+ isManual: true;
873
+ originalAmountCents: number | null;
874
+ overriddenAmountCents: number;
875
+ currency: string;
876
+ reason: string;
877
+ overriddenBy: string;
878
+ overriddenAt: string;
879
+ } | null;
880
+ holdExpiresAt: string | null;
881
+ confirmedAt: string | null;
882
+ expiredAt: string | null;
883
+ cancelledAt: string | null;
884
+ awaitingPaymentAt: string | null;
885
+ paidAt: string | null;
886
+ } | null;
887
+ };
888
+ outputFormat: "json";
889
+ status: 201;
890
+ } | {
891
+ input: {};
892
+ output: {
893
+ error: string;
894
+ details: undefined;
895
+ };
896
+ outputFormat: "json";
897
+ status: 400;
898
+ };
899
+ };
900
+ } & {
901
+ "/:id": {
902
+ $patch: {
903
+ input: {
904
+ param: {
905
+ id: string;
906
+ };
907
+ };
908
+ output: {
909
+ error: string;
910
+ };
911
+ outputFormat: "json";
912
+ status: 404;
913
+ } | {
914
+ input: {
915
+ param: {
916
+ id: string;
917
+ };
918
+ };
919
+ output: {
920
+ data: {
921
+ id: string;
922
+ bookingNumber: string;
923
+ status: "expired" | "cancelled" | "completed" | "draft" | "on_hold" | "awaiting_payment" | "confirmed" | "in_progress";
924
+ personId: string | null;
925
+ organizationId: string | null;
926
+ sourceType: "internal" | "direct" | "manual" | "affiliate" | "ota" | "reseller" | "api_partner";
927
+ externalBookingRef: string | null;
928
+ communicationLanguage: string | null;
929
+ contactFirstName: string | null;
930
+ contactLastName: string | null;
931
+ contactPartyType: string | null;
932
+ contactTaxId: string | null;
933
+ contactEmail: string | null;
934
+ contactPhone: string | null;
935
+ contactPreferredLanguage: string | null;
936
+ contactCountry: string | null;
937
+ contactRegion: string | null;
938
+ contactCity: string | null;
939
+ contactAddressLine1: string | null;
940
+ contactAddressLine2: string | null;
941
+ contactPostalCode: string | null;
942
+ sellCurrency: string;
943
+ baseCurrency: string | null;
944
+ fxRateSetId: string | null;
945
+ sellAmountCents: number | null;
946
+ baseSellAmountCents: number | null;
947
+ costAmountCents: number | null;
948
+ baseCostAmountCents: number | null;
949
+ marginPercent: number | null;
950
+ startDate: string | null;
951
+ endDate: string | null;
952
+ pax: number | null;
953
+ internalNotes: string | null;
954
+ customerPaymentPolicy: import("hono/utils/types").JSONValue;
955
+ priceOverride: {
956
+ isManual: true;
957
+ originalAmountCents: number | null;
958
+ overriddenAmountCents: number;
959
+ currency: string;
960
+ reason: string;
961
+ overriddenBy: string;
962
+ overriddenAt: string;
963
+ } | null;
964
+ holdExpiresAt: string | null;
965
+ confirmedAt: string | null;
966
+ expiredAt: string | null;
967
+ cancelledAt: string | null;
968
+ completedAt: string | null;
969
+ awaitingPaymentAt: string | null;
970
+ paidAt: string | null;
971
+ redeemedAt: string | null;
972
+ createdAt: string;
973
+ updatedAt: string;
974
+ };
975
+ };
976
+ outputFormat: "json";
977
+ status: import("hono/utils/http-status").ContentfulStatusCode;
978
+ };
979
+ };
980
+ } & {
981
+ "/:id": {
982
+ $delete: {
983
+ input: {
984
+ param: {
985
+ id: string;
986
+ };
987
+ };
988
+ output: {
989
+ error: string;
990
+ };
991
+ outputFormat: "json";
992
+ status: 404;
993
+ } | {
994
+ input: {
995
+ param: {
996
+ id: string;
997
+ };
998
+ };
999
+ output: {
1000
+ success: true;
1001
+ };
1002
+ outputFormat: "json";
1003
+ status: 200;
1004
+ };
1005
+ };
1006
+ } & {
1007
+ "/:id/confirm": {
1008
+ $post: {
1009
+ input: {
1010
+ param: {
1011
+ id: string;
1012
+ };
1013
+ };
1014
+ output: {};
1015
+ outputFormat: string;
1016
+ status: import("hono/utils/http-status").StatusCode;
1017
+ };
1018
+ };
1019
+ } & {
1020
+ "/:id/extend-hold": {
1021
+ $post: {
1022
+ input: {
1023
+ param: {
1024
+ id: string;
1025
+ };
1026
+ };
1027
+ output: {
1028
+ error: string;
1029
+ };
1030
+ outputFormat: "json";
1031
+ status: 404;
1032
+ } | {
1033
+ input: {
1034
+ param: {
1035
+ id: string;
1036
+ };
1037
+ };
1038
+ output: {
1039
+ error: string;
1040
+ };
1041
+ outputFormat: "json";
1042
+ status: 409;
1043
+ } | {
1044
+ input: {
1045
+ param: {
1046
+ id: string;
1047
+ };
1048
+ };
1049
+ output: {
1050
+ data: {
1051
+ id: string;
1052
+ bookingNumber: string;
1053
+ status: "expired" | "cancelled" | "completed" | "draft" | "on_hold" | "awaiting_payment" | "confirmed" | "in_progress";
1054
+ personId: string | null;
1055
+ organizationId: string | null;
1056
+ sourceType: "internal" | "direct" | "manual" | "affiliate" | "ota" | "reseller" | "api_partner";
1057
+ externalBookingRef: string | null;
1058
+ communicationLanguage: string | null;
1059
+ contactFirstName: string | null;
1060
+ contactLastName: string | null;
1061
+ contactPartyType: string | null;
1062
+ contactTaxId: string | null;
1063
+ contactEmail: string | null;
1064
+ contactPhone: string | null;
1065
+ contactPreferredLanguage: string | null;
1066
+ contactCountry: string | null;
1067
+ contactRegion: string | null;
1068
+ contactCity: string | null;
1069
+ contactAddressLine1: string | null;
1070
+ contactAddressLine2: string | null;
1071
+ contactPostalCode: string | null;
1072
+ sellCurrency: string;
1073
+ baseCurrency: string | null;
1074
+ fxRateSetId: string | null;
1075
+ sellAmountCents: number | null;
1076
+ baseSellAmountCents: number | null;
1077
+ costAmountCents: number | null;
1078
+ baseCostAmountCents: number | null;
1079
+ marginPercent: number | null;
1080
+ startDate: string | null;
1081
+ endDate: string | null;
1082
+ pax: number | null;
1083
+ internalNotes: string | null;
1084
+ customerPaymentPolicy: import("hono/utils/types").JSONValue;
1085
+ priceOverride: {
1086
+ isManual: true;
1087
+ originalAmountCents: number | null;
1088
+ overriddenAmountCents: number;
1089
+ currency: string;
1090
+ reason: string;
1091
+ overriddenBy: string;
1092
+ overriddenAt: string;
1093
+ } | null;
1094
+ holdExpiresAt: string | null;
1095
+ confirmedAt: string | null;
1096
+ expiredAt: string | null;
1097
+ cancelledAt: string | null;
1098
+ completedAt: string | null;
1099
+ awaitingPaymentAt: string | null;
1100
+ paidAt: string | null;
1101
+ redeemedAt: string | null;
1102
+ createdAt: string;
1103
+ updatedAt: string;
1104
+ } | null;
1105
+ };
1106
+ outputFormat: "json";
1107
+ status: import("hono/utils/http-status").ContentfulStatusCode;
1108
+ } | {
1109
+ input: {
1110
+ param: {
1111
+ id: string;
1112
+ };
1113
+ };
1114
+ output: {
1115
+ error: string;
1116
+ };
1117
+ outputFormat: "json";
1118
+ status: 400;
1119
+ };
1120
+ };
1121
+ } & {
1122
+ "/:id/expire": {
1123
+ $post: {
1124
+ input: {
1125
+ param: {
1126
+ id: string;
1127
+ };
1128
+ };
1129
+ output: {};
1130
+ outputFormat: string;
1131
+ status: import("hono/utils/http-status").StatusCode;
1132
+ };
1133
+ };
1134
+ } & {
1135
+ "/expire-stale": {
1136
+ $post: {
1137
+ input: {};
1138
+ output: {
1139
+ expiredIds: string[];
1140
+ count: number;
1141
+ cutoff: string;
1142
+ };
1143
+ outputFormat: "json";
1144
+ status: import("hono/utils/http-status").ContentfulStatusCode;
1145
+ };
1146
+ };
1147
+ } & {
1148
+ "/:id/cancel": {
1149
+ $post: {
1150
+ input: {
1151
+ param: {
1152
+ id: string;
1153
+ };
1154
+ };
1155
+ output: {};
1156
+ outputFormat: string;
1157
+ status: import("hono/utils/http-status").StatusCode;
1158
+ };
1159
+ };
1160
+ } & {
1161
+ "/:id/start": {
1162
+ $post: {
1163
+ input: {
1164
+ param: {
1165
+ id: string;
1166
+ };
1167
+ };
1168
+ output: {};
1169
+ outputFormat: string;
1170
+ status: import("hono/utils/http-status").StatusCode;
1171
+ };
1172
+ };
1173
+ } & {
1174
+ "/:id/complete": {
1175
+ $post: {
1176
+ input: {
1177
+ param: {
1178
+ id: string;
1179
+ };
1180
+ };
1181
+ output: {};
1182
+ outputFormat: string;
1183
+ status: import("hono/utils/http-status").StatusCode;
1184
+ };
1185
+ };
1186
+ } & {
1187
+ "/:id/override-status": {
1188
+ $post: {
1189
+ input: {
1190
+ param: {
1191
+ id: string;
1192
+ };
1193
+ };
1194
+ output: {};
1195
+ outputFormat: string;
1196
+ status: import("hono/utils/http-status").StatusCode;
1197
+ };
1198
+ };
1199
+ } & {
1200
+ "/:id/allocations": {
1201
+ $get: {
1202
+ input: {
1203
+ param: {
1204
+ id: string;
1205
+ };
1206
+ };
1207
+ output: {
1208
+ data: {
1209
+ id: string;
1210
+ bookingId: string;
1211
+ bookingItemId: string;
1212
+ productId: string | null;
1213
+ optionId: string | null;
1214
+ optionUnitId: string | null;
1215
+ pricingCategoryId: string | null;
1216
+ availabilitySlotId: string | null;
1217
+ quantity: number;
1218
+ allocationType: "resource" | "unit" | "pickup";
1219
+ status: "expired" | "cancelled" | "confirmed" | "fulfilled" | "held" | "released";
1220
+ holdExpiresAt: string | null;
1221
+ confirmedAt: string | null;
1222
+ releasedAt: string | null;
1223
+ metadata: {
1224
+ [x: string]: import("hono/utils/types").JSONValue;
1225
+ } | null;
1226
+ createdAt: string;
1227
+ updatedAt: string;
1228
+ }[];
1229
+ };
1230
+ outputFormat: "json";
1231
+ status: import("hono/utils/http-status").ContentfulStatusCode;
1232
+ };
1233
+ };
1234
+ } & {
1235
+ "/:id/travelers": {
1236
+ $get: {
1237
+ input: {
1238
+ param: {
1239
+ id: string;
1240
+ };
1241
+ };
1242
+ output: {
1243
+ data: {
1244
+ id: string;
1245
+ bookingId: string;
1246
+ participantType: "other" | "traveler" | "occupant";
1247
+ travelerCategory: "child" | "other" | "adult" | "infant" | "senior" | null;
1248
+ firstName: string;
1249
+ lastName: string;
1250
+ email: string | null;
1251
+ phone: string | null;
1252
+ preferredLanguage: string | null;
1253
+ specialRequests: string | null;
1254
+ isPrimary: boolean;
1255
+ notes: string | null;
1256
+ createdAt: string;
1257
+ updatedAt: string;
1258
+ }[];
1259
+ };
1260
+ outputFormat: "json";
1261
+ status: import("hono/utils/http-status").ContentfulStatusCode;
1262
+ };
1263
+ };
1264
+ } & {
1265
+ "/:id/travelers/:travelerId/reveal": {
1266
+ $get: {
1267
+ input: {
1268
+ param: {
1269
+ id: string;
1270
+ } & {
1271
+ travelerId: string;
1272
+ };
1273
+ };
1274
+ output: {};
1275
+ outputFormat: string;
1276
+ status: import("hono/utils/http-status").StatusCode;
1277
+ };
1278
+ };
1279
+ } & {
1280
+ "/:id/travelers/:travelerId/travel-details": {
1281
+ $get: {
1282
+ input: {
1283
+ param: {
1284
+ id: string;
1285
+ } & {
1286
+ travelerId: string;
1287
+ };
1288
+ };
1289
+ output: {};
1290
+ outputFormat: string;
1291
+ status: import("hono/utils/http-status").StatusCode;
1292
+ };
1293
+ };
1294
+ } & {
1295
+ "/:id/travelers": {
1296
+ $post: {
1297
+ input: {
1298
+ param: {
1299
+ id: string;
1300
+ };
1301
+ };
1302
+ output: {
1303
+ error: string;
1304
+ };
1305
+ outputFormat: "json";
1306
+ status: 404;
1307
+ } | {
1308
+ input: {
1309
+ param: {
1310
+ id: string;
1311
+ };
1312
+ };
1313
+ output: {
1314
+ data: {
1315
+ id: string;
1316
+ bookingId: string;
1317
+ participantType: "other" | "traveler" | "occupant";
1318
+ travelerCategory: "child" | "other" | "adult" | "infant" | "senior" | null;
1319
+ firstName: string;
1320
+ lastName: string;
1321
+ email: string | null;
1322
+ phone: string | null;
1323
+ preferredLanguage: string | null;
1324
+ specialRequests: string | null;
1325
+ isPrimary: boolean;
1326
+ notes: string | null;
1327
+ createdAt: string;
1328
+ updatedAt: string;
1329
+ };
1330
+ };
1331
+ outputFormat: "json";
1332
+ status: 201;
1333
+ };
1334
+ };
1335
+ } & {
1336
+ "/:id/travelers/with-travel-details": {
1337
+ $post: {
1338
+ input: {
1339
+ param: {
1340
+ id: string;
1341
+ };
1342
+ };
1343
+ output: {
1344
+ error: string;
1345
+ };
1346
+ outputFormat: "json";
1347
+ status: 500;
1348
+ } | {
1349
+ input: {
1350
+ param: {
1351
+ id: string;
1352
+ };
1353
+ };
1354
+ output: {
1355
+ error: string;
1356
+ };
1357
+ outputFormat: "json";
1358
+ status: 404;
1359
+ } | {
1360
+ input: {
1361
+ param: {
1362
+ id: string;
1363
+ };
1364
+ };
1365
+ output: {
1366
+ data: {
1367
+ traveler: {
1368
+ id: string;
1369
+ createdAt: string;
1370
+ updatedAt: string;
1371
+ email: string | null;
1372
+ notes: string | null;
1373
+ firstName: string;
1374
+ lastName: string;
1375
+ bookingId: string;
1376
+ personId: string | null;
1377
+ participantType: "other" | "traveler" | "occupant";
1378
+ travelerCategory: "child" | "other" | "adult" | "infant" | "senior" | null;
1379
+ phone: string | null;
1380
+ preferredLanguage: string | null;
1381
+ specialRequests: string | null;
1382
+ isPrimary: boolean;
1383
+ };
1384
+ travelDetails: {
1385
+ travelerId: string;
1386
+ nationality: string | null;
1387
+ documentType: "passport" | "visa" | "other" | "id_card" | "driver_license" | null;
1388
+ documentNumber: string | null;
1389
+ documentExpiry: string | null;
1390
+ documentIssuingCountry: string | null;
1391
+ documentIssuingAuthority: string | null;
1392
+ documentPersonDocumentId: string | null;
1393
+ dateOfBirth: string | null;
1394
+ dietaryRequirements: string | null;
1395
+ accessibilityNeeds: string | null;
1396
+ isLeadTraveler: boolean;
1397
+ sharingGroupId: string | null;
1398
+ roomTypeId: string | null;
1399
+ bedPreference: "single" | "twin" | "double" | "no-preference" | null;
1400
+ allocations: {
1401
+ [x: string]: string;
1402
+ };
1403
+ createdAt: string;
1404
+ updatedAt: string;
1405
+ } | null;
1406
+ };
1407
+ };
1408
+ outputFormat: "json";
1409
+ status: 201;
1410
+ };
1411
+ };
1412
+ } & {
1413
+ "/:id/travelers/:travelerId/with-travel-details": {
1414
+ $patch: {
1415
+ input: {
1416
+ param: {
1417
+ id: string;
1418
+ } & {
1419
+ travelerId: string;
1420
+ };
1421
+ };
1422
+ output: {
1423
+ error: string;
1424
+ };
1425
+ outputFormat: "json";
1426
+ status: 500;
1427
+ } | {
1428
+ input: {
1429
+ param: {
1430
+ id: string;
1431
+ } & {
1432
+ travelerId: string;
1433
+ };
1434
+ };
1435
+ output: {
1436
+ error: string;
1437
+ };
1438
+ outputFormat: "json";
1439
+ status: 404;
1440
+ } | {
1441
+ input: {
1442
+ param: {
1443
+ id: string;
1444
+ } & {
1445
+ travelerId: string;
1446
+ };
1447
+ };
1448
+ output: {
1449
+ data: {
1450
+ traveler: {
1451
+ id: string;
1452
+ bookingId: string;
1453
+ personId: string | null;
1454
+ participantType: "other" | "traveler" | "occupant";
1455
+ travelerCategory: "child" | "other" | "adult" | "infant" | "senior" | null;
1456
+ firstName: string;
1457
+ lastName: string;
1458
+ email: string | null;
1459
+ phone: string | null;
1460
+ preferredLanguage: string | null;
1461
+ specialRequests: string | null;
1462
+ isPrimary: boolean;
1463
+ notes: string | null;
1464
+ createdAt: string;
1465
+ updatedAt: string;
1466
+ };
1467
+ travelDetails: {
1468
+ travelerId: string;
1469
+ nationality: string | null;
1470
+ documentType: "passport" | "visa" | "other" | "id_card" | "driver_license" | null;
1471
+ documentNumber: string | null;
1472
+ documentExpiry: string | null;
1473
+ documentIssuingCountry: string | null;
1474
+ documentIssuingAuthority: string | null;
1475
+ documentPersonDocumentId: string | null;
1476
+ dateOfBirth: string | null;
1477
+ dietaryRequirements: string | null;
1478
+ accessibilityNeeds: string | null;
1479
+ isLeadTraveler: boolean;
1480
+ sharingGroupId: string | null;
1481
+ roomTypeId: string | null;
1482
+ bedPreference: "single" | "twin" | "double" | "no-preference" | null;
1483
+ allocations: {
1484
+ [x: string]: string;
1485
+ };
1486
+ createdAt: string;
1487
+ updatedAt: string;
1488
+ } | null;
1489
+ };
1490
+ };
1491
+ outputFormat: "json";
1492
+ status: import("hono/utils/http-status").ContentfulStatusCode;
1493
+ };
1494
+ };
1495
+ } & {
1496
+ "/:id/travelers/:travelerId/travel-details": {
1497
+ $patch: {
1498
+ input: {
1499
+ param: {
1500
+ id: string;
1501
+ } & {
1502
+ travelerId: string;
1503
+ };
1504
+ };
1505
+ output: {};
1506
+ outputFormat: string;
1507
+ status: import("hono/utils/http-status").StatusCode;
1508
+ };
1509
+ };
1510
+ } & {
1511
+ "/:id/travelers/:travelerId": {
1512
+ $patch: {
1513
+ input: {
1514
+ param: {
1515
+ id: string;
1516
+ } & {
1517
+ travelerId: string;
1518
+ };
1519
+ };
1520
+ output: {
1521
+ error: string;
1522
+ };
1523
+ outputFormat: "json";
1524
+ status: 404;
1525
+ } | {
1526
+ input: {
1527
+ param: {
1528
+ id: string;
1529
+ } & {
1530
+ travelerId: string;
1531
+ };
1532
+ };
1533
+ output: {
1534
+ data: {
1535
+ id: string;
1536
+ bookingId: string;
1537
+ participantType: "other" | "traveler" | "occupant";
1538
+ travelerCategory: "child" | "other" | "adult" | "infant" | "senior" | null;
1539
+ firstName: string;
1540
+ lastName: string;
1541
+ email: string | null;
1542
+ phone: string | null;
1543
+ preferredLanguage: string | null;
1544
+ specialRequests: string | null;
1545
+ isPrimary: boolean;
1546
+ notes: string | null;
1547
+ createdAt: string;
1548
+ updatedAt: string;
1549
+ };
1550
+ };
1551
+ outputFormat: "json";
1552
+ status: import("hono/utils/http-status").ContentfulStatusCode;
1553
+ };
1554
+ };
1555
+ } & {
1556
+ "/:id/travelers/:travelerId/travel-details": {
1557
+ $delete: {
1558
+ input: {
1559
+ param: {
1560
+ id: string;
1561
+ } & {
1562
+ travelerId: string;
1563
+ };
1564
+ };
1565
+ output: {};
1566
+ outputFormat: string;
1567
+ status: import("hono/utils/http-status").StatusCode;
1568
+ };
1569
+ };
1570
+ } & {
1571
+ "/:id/travelers/:travelerId": {
1572
+ $delete: {
1573
+ input: {
1574
+ param: {
1575
+ id: string;
1576
+ } & {
1577
+ travelerId: string;
1578
+ };
1579
+ };
1580
+ output: {
1581
+ error: string;
1582
+ };
1583
+ outputFormat: "json";
1584
+ status: 404;
1585
+ } | {
1586
+ input: {
1587
+ param: {
1588
+ id: string;
1589
+ } & {
1590
+ travelerId: string;
1591
+ };
1592
+ };
1593
+ output: {
1594
+ success: true;
1595
+ };
1596
+ outputFormat: "json";
1597
+ status: 200;
1598
+ };
1599
+ };
1600
+ } & {
1601
+ "/:id/items": {
1602
+ $get: {
1603
+ input: {
1604
+ param: {
1605
+ id: string;
1606
+ };
1607
+ };
1608
+ output: {
1609
+ data: {
1610
+ id: string;
1611
+ bookingId: string;
1612
+ title: string;
1613
+ description: string | null;
1614
+ itemType: "service" | "other" | "unit" | "extra" | "fee" | "tax" | "discount" | "adjustment" | "accommodation" | "transport";
1615
+ status: "expired" | "cancelled" | "draft" | "on_hold" | "confirmed" | "fulfilled";
1616
+ serviceDate: string | null;
1617
+ startsAt: string | null;
1618
+ endsAt: string | null;
1619
+ quantity: number;
1620
+ sellCurrency: string;
1621
+ unitSellAmountCents: number | null;
1622
+ totalSellAmountCents: number | null;
1623
+ costCurrency: string | null;
1624
+ unitCostAmountCents: number | null;
1625
+ totalCostAmountCents: number | null;
1626
+ notes: string | null;
1627
+ productId: string | null;
1628
+ optionId: string | null;
1629
+ optionUnitId: string | null;
1630
+ pricingCategoryId: string | null;
1631
+ availabilitySlotId: string | null;
1632
+ productNameSnapshot: string | null;
1633
+ optionNameSnapshot: string | null;
1634
+ unitNameSnapshot: string | null;
1635
+ departureLabelSnapshot: string | null;
1636
+ sourceSnapshotId: string | null;
1637
+ sourceOfferId: string | null;
1638
+ metadata: {
1639
+ [x: string]: import("hono/utils/types").JSONValue;
1640
+ } | null;
1641
+ createdAt: string;
1642
+ updatedAt: string;
1643
+ }[];
1644
+ };
1645
+ outputFormat: "json";
1646
+ status: import("hono/utils/http-status").ContentfulStatusCode;
1647
+ };
1648
+ };
1649
+ } & {
1650
+ "/:id/items": {
1651
+ $post: {
1652
+ input: {
1653
+ param: {
1654
+ id: string;
1655
+ };
1656
+ };
1657
+ output: {
1658
+ error: string;
1659
+ };
1660
+ outputFormat: "json";
1661
+ status: 404;
1662
+ } | {
1663
+ input: {
1664
+ param: {
1665
+ id: string;
1666
+ };
1667
+ };
1668
+ output: {
1669
+ data: {
1670
+ id: string;
1671
+ description: string | null;
1672
+ status: "expired" | "cancelled" | "draft" | "on_hold" | "confirmed" | "fulfilled";
1673
+ createdAt: string;
1674
+ metadata: {
1675
+ [x: string]: import("hono/utils/types").JSONValue;
1676
+ } | null;
1677
+ updatedAt: string;
1678
+ notes: string | null;
1679
+ bookingId: string;
1680
+ title: string;
1681
+ sellCurrency: string;
1682
+ productId: string | null;
1683
+ optionUnitId: string | null;
1684
+ optionId: string | null;
1685
+ startsAt: string | null;
1686
+ endsAt: string | null;
1687
+ itemType: "service" | "other" | "unit" | "extra" | "fee" | "tax" | "discount" | "adjustment" | "accommodation" | "transport";
1688
+ serviceDate: string | null;
1689
+ quantity: number;
1690
+ unitSellAmountCents: number | null;
1691
+ totalSellAmountCents: number | null;
1692
+ costCurrency: string | null;
1693
+ unitCostAmountCents: number | null;
1694
+ totalCostAmountCents: number | null;
1695
+ pricingCategoryId: string | null;
1696
+ availabilitySlotId: string | null;
1697
+ productNameSnapshot: string | null;
1698
+ optionNameSnapshot: string | null;
1699
+ unitNameSnapshot: string | null;
1700
+ departureLabelSnapshot: string | null;
1701
+ sourceSnapshotId: string | null;
1702
+ sourceOfferId: string | null;
1703
+ };
1704
+ };
1705
+ outputFormat: "json";
1706
+ status: 201;
1707
+ };
1708
+ };
1709
+ } & {
1710
+ "/:id/items/:itemId": {
1711
+ $patch: {
1712
+ input: {
1713
+ param: {
1714
+ id: string;
1715
+ } & {
1716
+ itemId: string;
1717
+ };
1718
+ };
1719
+ output: {
1720
+ error: string;
1721
+ };
1722
+ outputFormat: "json";
1723
+ status: 404;
1724
+ } | {
1725
+ input: {
1726
+ param: {
1727
+ id: string;
1728
+ } & {
1729
+ itemId: string;
1730
+ };
1731
+ };
1732
+ output: {
1733
+ data: {
1734
+ id: string;
1735
+ bookingId: string;
1736
+ title: string;
1737
+ description: string | null;
1738
+ itemType: "service" | "other" | "unit" | "extra" | "fee" | "tax" | "discount" | "adjustment" | "accommodation" | "transport";
1739
+ status: "expired" | "cancelled" | "draft" | "on_hold" | "confirmed" | "fulfilled";
1740
+ serviceDate: string | null;
1741
+ startsAt: string | null;
1742
+ endsAt: string | null;
1743
+ quantity: number;
1744
+ sellCurrency: string;
1745
+ unitSellAmountCents: number | null;
1746
+ totalSellAmountCents: number | null;
1747
+ costCurrency: string | null;
1748
+ unitCostAmountCents: number | null;
1749
+ totalCostAmountCents: number | null;
1750
+ notes: string | null;
1751
+ productId: string | null;
1752
+ optionId: string | null;
1753
+ optionUnitId: string | null;
1754
+ pricingCategoryId: string | null;
1755
+ availabilitySlotId: string | null;
1756
+ productNameSnapshot: string | null;
1757
+ optionNameSnapshot: string | null;
1758
+ unitNameSnapshot: string | null;
1759
+ departureLabelSnapshot: string | null;
1760
+ sourceSnapshotId: string | null;
1761
+ sourceOfferId: string | null;
1762
+ metadata: {
1763
+ [x: string]: import("hono/utils/types").JSONValue;
1764
+ } | null;
1765
+ createdAt: string;
1766
+ updatedAt: string;
1767
+ };
1768
+ };
1769
+ outputFormat: "json";
1770
+ status: import("hono/utils/http-status").ContentfulStatusCode;
1771
+ };
1772
+ };
1773
+ } & {
1774
+ "/:id/items/:itemId": {
1775
+ $delete: {
1776
+ input: {
1777
+ param: {
1778
+ id: string;
1779
+ } & {
1780
+ itemId: string;
1781
+ };
1782
+ };
1783
+ output: {
1784
+ error: string;
1785
+ };
1786
+ outputFormat: "json";
1787
+ status: 404;
1788
+ } | {
1789
+ input: {
1790
+ param: {
1791
+ id: string;
1792
+ } & {
1793
+ itemId: string;
1794
+ };
1795
+ };
1796
+ output: {
1797
+ success: true;
1798
+ };
1799
+ outputFormat: "json";
1800
+ status: 200;
1801
+ };
1802
+ };
1803
+ } & {
1804
+ "/:id/items/:itemId/travelers": {
1805
+ $get: {
1806
+ input: {
1807
+ param: {
1808
+ id: string;
1809
+ } & {
1810
+ itemId: string;
1811
+ };
1812
+ };
1813
+ output: {
1814
+ data: {
1815
+ id: string;
1816
+ bookingItemId: string;
1817
+ travelerId: string;
1818
+ role: "other" | "traveler" | "occupant" | "beneficiary";
1819
+ isPrimary: boolean;
1820
+ createdAt: string;
1821
+ }[];
1822
+ };
1823
+ outputFormat: "json";
1824
+ status: import("hono/utils/http-status").ContentfulStatusCode;
1825
+ };
1826
+ };
1827
+ } & {
1828
+ "/:id/items/:itemId/travelers": {
1829
+ $post: {
1830
+ input: {
1831
+ param: {
1832
+ id: string;
1833
+ } & {
1834
+ itemId: string;
1835
+ };
1836
+ };
1837
+ output: {
1838
+ error: string;
1839
+ };
1840
+ outputFormat: "json";
1841
+ status: 404;
1842
+ } | {
1843
+ input: {
1844
+ param: {
1845
+ id: string;
1846
+ } & {
1847
+ itemId: string;
1848
+ };
1849
+ };
1850
+ output: {
1851
+ data: {
1852
+ id: string;
1853
+ createdAt: string;
1854
+ role: "other" | "traveler" | "occupant" | "beneficiary";
1855
+ isPrimary: boolean;
1856
+ travelerId: string;
1857
+ bookingItemId: string;
1858
+ };
1859
+ };
1860
+ outputFormat: "json";
1861
+ status: 201;
1862
+ };
1863
+ };
1864
+ } & {
1865
+ "/:id/items/:itemId/travelers/:linkId": {
1866
+ $delete: {
1867
+ input: {
1868
+ param: {
1869
+ id: string;
1870
+ } & {
1871
+ itemId: string;
1872
+ } & {
1873
+ linkId: string;
1874
+ };
1875
+ };
1876
+ output: {
1877
+ error: string;
1878
+ };
1879
+ outputFormat: "json";
1880
+ status: 404;
1881
+ } | {
1882
+ input: {
1883
+ param: {
1884
+ id: string;
1885
+ } & {
1886
+ itemId: string;
1887
+ } & {
1888
+ linkId: string;
1889
+ };
1890
+ };
1891
+ output: {
1892
+ success: true;
1893
+ };
1894
+ outputFormat: "json";
1895
+ status: 200;
1896
+ };
1897
+ };
1898
+ } & {
1899
+ "/:id/supplier-statuses": {
1900
+ $get: {
1901
+ input: {
1902
+ param: {
1903
+ id: string;
1904
+ };
1905
+ };
1906
+ output: {
1907
+ data: {
1908
+ id: string;
1909
+ bookingId: string;
1910
+ supplierServiceId: string | null;
1911
+ supplierId: string | null;
1912
+ serviceName: string;
1913
+ status: "cancelled" | "pending" | "confirmed" | "rejected";
1914
+ supplierReference: string | null;
1915
+ costCurrency: string;
1916
+ costAmountCents: number;
1917
+ supplierInvoiceLineId: string | null;
1918
+ notes: string | null;
1919
+ confirmedAt: string | null;
1920
+ createdAt: string;
1921
+ updatedAt: string;
1922
+ }[];
1923
+ };
1924
+ outputFormat: "json";
1925
+ status: import("hono/utils/http-status").ContentfulStatusCode;
1926
+ };
1927
+ };
1928
+ } & {
1929
+ "/:id/supplier-statuses": {
1930
+ $post: {
1931
+ input: {
1932
+ param: {
1933
+ id: string;
1934
+ };
1935
+ };
1936
+ output: {
1937
+ error: string;
1938
+ };
1939
+ outputFormat: "json";
1940
+ status: 404;
1941
+ } | {
1942
+ input: {
1943
+ param: {
1944
+ id: string;
1945
+ };
1946
+ };
1947
+ output: {
1948
+ data: {
1949
+ id: string;
1950
+ status: "cancelled" | "pending" | "confirmed" | "rejected";
1951
+ createdAt: string;
1952
+ updatedAt: string;
1953
+ notes: string | null;
1954
+ bookingId: string;
1955
+ costAmountCents: number;
1956
+ confirmedAt: string | null;
1957
+ costCurrency: string;
1958
+ supplierServiceId: string | null;
1959
+ supplierId: string | null;
1960
+ serviceName: string;
1961
+ supplierReference: string | null;
1962
+ supplierInvoiceLineId: string | null;
1963
+ };
1964
+ };
1965
+ outputFormat: "json";
1966
+ status: 201;
1967
+ };
1968
+ };
1969
+ } & {
1970
+ "/:id/supplier-statuses/:statusId": {
1971
+ $patch: {
1972
+ input: {
1973
+ param: {
1974
+ id: string;
1975
+ } & {
1976
+ statusId: string;
1977
+ };
1978
+ };
1979
+ output: {
1980
+ error: string;
1981
+ };
1982
+ outputFormat: "json";
1983
+ status: 404;
1984
+ } | {
1985
+ input: {
1986
+ param: {
1987
+ id: string;
1988
+ } & {
1989
+ statusId: string;
1990
+ };
1991
+ };
1992
+ output: {
1993
+ data: {
1994
+ id: string;
1995
+ bookingId: string;
1996
+ supplierServiceId: string | null;
1997
+ supplierId: string | null;
1998
+ serviceName: string;
1999
+ status: "cancelled" | "pending" | "confirmed" | "rejected";
2000
+ supplierReference: string | null;
2001
+ costCurrency: string;
2002
+ costAmountCents: number;
2003
+ supplierInvoiceLineId: string | null;
2004
+ notes: string | null;
2005
+ confirmedAt: string | null;
2006
+ createdAt: string;
2007
+ updatedAt: string;
2008
+ };
2009
+ };
2010
+ outputFormat: "json";
2011
+ status: import("hono/utils/http-status").ContentfulStatusCode;
2012
+ };
2013
+ };
2014
+ } & {
2015
+ "/:id/fulfillments": {
2016
+ $get: {
2017
+ input: {
2018
+ param: {
2019
+ id: string;
2020
+ };
2021
+ };
2022
+ output: {
2023
+ data: {
2024
+ id: string;
2025
+ bookingId: string;
2026
+ bookingItemId: string | null;
2027
+ travelerId: string | null;
2028
+ fulfillmentType: "other" | "pdf" | "voucher" | "ticket" | "qr_code" | "barcode" | "mobile";
2029
+ deliveryChannel: "api" | "email" | "other" | "download" | "wallet";
2030
+ status: "failed" | "pending" | "revoked" | "issued" | "reissued";
2031
+ artifactUrl: string | null;
2032
+ payload: {
2033
+ [x: string]: import("hono/utils/types").JSONValue;
2034
+ } | null;
2035
+ issuedAt: string | null;
2036
+ revokedAt: string | null;
2037
+ createdAt: string;
2038
+ updatedAt: string;
2039
+ }[];
2040
+ };
2041
+ outputFormat: "json";
2042
+ status: import("hono/utils/http-status").ContentfulStatusCode;
2043
+ };
2044
+ };
2045
+ } & {
2046
+ "/:id/fulfillments": {
2047
+ $post: {
2048
+ input: {
2049
+ param: {
2050
+ id: string;
2051
+ };
2052
+ };
2053
+ output: {
2054
+ error: string;
2055
+ };
2056
+ outputFormat: "json";
2057
+ status: 404;
2058
+ } | {
2059
+ input: {
2060
+ param: {
2061
+ id: string;
2062
+ };
2063
+ };
2064
+ output: {
2065
+ data: {
2066
+ id: string;
2067
+ status: "failed" | "pending" | "revoked" | "issued" | "reissued";
2068
+ createdAt: string;
2069
+ payload: {
2070
+ [x: string]: import("hono/utils/types").JSONValue;
2071
+ } | null;
2072
+ updatedAt: string;
2073
+ revokedAt: string | null;
2074
+ bookingId: string;
2075
+ travelerId: string | null;
2076
+ bookingItemId: string | null;
2077
+ fulfillmentType: "other" | "pdf" | "voucher" | "ticket" | "qr_code" | "barcode" | "mobile";
2078
+ deliveryChannel: "api" | "email" | "other" | "download" | "wallet";
2079
+ artifactUrl: string | null;
2080
+ issuedAt: string | null;
2081
+ };
2082
+ };
2083
+ outputFormat: "json";
2084
+ status: 201;
2085
+ };
2086
+ };
2087
+ } & {
2088
+ "/:id/fulfillments/:fulfillmentId": {
2089
+ $patch: {
2090
+ input: {
2091
+ param: {
2092
+ id: string;
2093
+ } & {
2094
+ fulfillmentId: string;
2095
+ };
2096
+ };
2097
+ output: {
2098
+ error: string;
2099
+ };
2100
+ outputFormat: "json";
2101
+ status: 404;
2102
+ } | {
2103
+ input: {
2104
+ param: {
2105
+ id: string;
2106
+ } & {
2107
+ fulfillmentId: string;
2108
+ };
2109
+ };
2110
+ output: {
2111
+ data: {
2112
+ id: string;
2113
+ bookingId: string;
2114
+ bookingItemId: string | null;
2115
+ travelerId: string | null;
2116
+ fulfillmentType: "other" | "pdf" | "voucher" | "ticket" | "qr_code" | "barcode" | "mobile";
2117
+ deliveryChannel: "api" | "email" | "other" | "download" | "wallet";
2118
+ status: "failed" | "pending" | "revoked" | "issued" | "reissued";
2119
+ artifactUrl: string | null;
2120
+ payload: {
2121
+ [x: string]: import("hono/utils/types").JSONValue;
2122
+ } | null;
2123
+ issuedAt: string | null;
2124
+ revokedAt: string | null;
2125
+ createdAt: string;
2126
+ updatedAt: string;
2127
+ };
2128
+ };
2129
+ outputFormat: "json";
2130
+ status: import("hono/utils/http-status").ContentfulStatusCode;
2131
+ };
2132
+ };
2133
+ } & {
2134
+ "/:id/redemptions": {
2135
+ $get: {
2136
+ input: {
2137
+ param: {
2138
+ id: string;
2139
+ };
2140
+ };
2141
+ output: {
2142
+ data: {
2143
+ id: string;
2144
+ bookingId: string;
2145
+ bookingItemId: string | null;
2146
+ travelerId: string | null;
2147
+ redeemedAt: string;
2148
+ redeemedBy: string | null;
2149
+ location: string | null;
2150
+ method: "api" | "other" | "manual" | "scan";
2151
+ metadata: {
2152
+ [x: string]: import("hono/utils/types").JSONValue;
2153
+ } | null;
2154
+ createdAt: string;
2155
+ }[];
2156
+ };
2157
+ outputFormat: "json";
2158
+ status: import("hono/utils/http-status").ContentfulStatusCode;
2159
+ };
2160
+ };
2161
+ } & {
2162
+ "/:id/redemptions": {
2163
+ $post: {
2164
+ input: {
2165
+ param: {
2166
+ id: string;
2167
+ };
2168
+ };
2169
+ output: {
2170
+ error: string;
2171
+ };
2172
+ outputFormat: "json";
2173
+ status: 404;
2174
+ } | {
2175
+ input: {
2176
+ param: {
2177
+ id: string;
2178
+ };
2179
+ };
2180
+ output: {
2181
+ data: {
2182
+ id: string;
2183
+ createdAt: string;
2184
+ metadata: {
2185
+ [x: string]: import("hono/utils/types").JSONValue;
2186
+ } | null;
2187
+ redeemedAt: string;
2188
+ bookingId: string;
2189
+ travelerId: string | null;
2190
+ bookingItemId: string | null;
2191
+ redeemedBy: string | null;
2192
+ location: string | null;
2193
+ method: "api" | "other" | "manual" | "scan";
2194
+ };
2195
+ };
2196
+ outputFormat: "json";
2197
+ status: 201;
2198
+ };
2199
+ };
2200
+ } & {
2201
+ "/:id/activity": {
2202
+ $get: {
2203
+ input: {
2204
+ param: {
2205
+ id: string;
2206
+ };
2207
+ };
2208
+ output: {
2209
+ data: {
2210
+ actorName: string | null;
2211
+ actorEmail: string | null;
2212
+ id: string;
2213
+ bookingId: string;
2214
+ actorId: string | null;
2215
+ activityType: "booking_created" | "booking_reserved" | "booking_converted" | "booking_confirmed" | "booking_started" | "booking_completed" | "hold_extended" | "hold_expired" | "status_change" | "status_overridden" | "item_update" | "allocation_released" | "fulfillment_issued" | "fulfillment_updated" | "redemption_recorded" | "supplier_update" | "traveler_update" | "note_added" | "system_action";
2216
+ description: string;
2217
+ metadata: {
2218
+ [x: string]: import("hono/utils/types").JSONValue;
2219
+ } | null;
2220
+ createdAt: string;
2221
+ }[];
2222
+ };
2223
+ outputFormat: "json";
2224
+ status: import("hono/utils/http-status").ContentfulStatusCode;
2225
+ };
2226
+ };
2227
+ } & {
2228
+ "/:id/group": {
2229
+ $get: {
2230
+ input: {
2231
+ param: {
2232
+ id: string;
2233
+ };
2234
+ };
2235
+ output: {
2236
+ data: {
2237
+ id: string;
2238
+ createdAt: string;
2239
+ metadata: {
2240
+ [x: string]: import("hono/utils/types").JSONValue;
2241
+ } | null;
2242
+ updatedAt: string;
2243
+ kind: "other" | "shared_room" | "cruise_party";
2244
+ label: string;
2245
+ primaryBookingId: string | null;
2246
+ productId: string | null;
2247
+ optionUnitId: string | null;
2248
+ membership: {
2249
+ id: string;
2250
+ createdAt: string;
2251
+ role: "primary" | "shared";
2252
+ bookingId: string;
2253
+ groupId: string;
2254
+ };
2255
+ } | null;
2256
+ };
2257
+ outputFormat: "json";
2258
+ status: import("hono/utils/http-status").ContentfulStatusCode;
2259
+ };
2260
+ };
2261
+ } & {
2262
+ "/:id/notes": {
2263
+ $get: {
2264
+ input: {
2265
+ param: {
2266
+ id: string;
2267
+ };
2268
+ };
2269
+ output: {
2270
+ data: {
2271
+ authorName: string | null;
2272
+ authorEmail: string | null;
2273
+ id: string;
2274
+ bookingId: string;
2275
+ authorId: string;
2276
+ content: string;
2277
+ createdAt: string;
2278
+ }[];
2279
+ };
2280
+ outputFormat: "json";
2281
+ status: import("hono/utils/http-status").ContentfulStatusCode;
2282
+ };
2283
+ };
2284
+ } & {
2285
+ "/:id/notes": {
2286
+ $post: {
2287
+ input: {
2288
+ param: {
2289
+ id: string;
2290
+ };
2291
+ };
2292
+ output: {
2293
+ error: string;
2294
+ };
2295
+ outputFormat: "json";
2296
+ status: 404;
2297
+ } | {
2298
+ input: {
2299
+ param: {
2300
+ id: string;
2301
+ };
2302
+ };
2303
+ output: {
2304
+ data: {
2305
+ id: string;
2306
+ createdAt: string;
2307
+ bookingId: string;
2308
+ authorId: string;
2309
+ content: string;
2310
+ };
2311
+ };
2312
+ outputFormat: "json";
2313
+ status: 201;
2314
+ };
2315
+ };
2316
+ } & {
2317
+ "/:id/notes/:noteId": {
2318
+ $patch: {
2319
+ input: {
2320
+ param: {
2321
+ id: string;
2322
+ } & {
2323
+ noteId: string;
2324
+ };
2325
+ };
2326
+ output: {
2327
+ error: string;
2328
+ };
2329
+ outputFormat: "json";
2330
+ status: 404;
2331
+ } | {
2332
+ input: {
2333
+ param: {
2334
+ id: string;
2335
+ } & {
2336
+ noteId: string;
2337
+ };
2338
+ };
2339
+ output: {
2340
+ data: {
2341
+ id: string;
2342
+ bookingId: string;
2343
+ authorId: string;
2344
+ content: string;
2345
+ createdAt: string;
2346
+ };
2347
+ };
2348
+ outputFormat: "json";
2349
+ status: import("hono/utils/http-status").ContentfulStatusCode;
2350
+ };
2351
+ };
2352
+ } & {
2353
+ "/:id/notes/:noteId": {
2354
+ $delete: {
2355
+ input: {
2356
+ param: {
2357
+ id: string;
2358
+ } & {
2359
+ noteId: string;
2360
+ };
2361
+ };
2362
+ output: {
2363
+ error: string;
2364
+ };
2365
+ outputFormat: "json";
2366
+ status: 404;
2367
+ } | {
2368
+ input: {
2369
+ param: {
2370
+ id: string;
2371
+ } & {
2372
+ noteId: string;
2373
+ };
2374
+ };
2375
+ output: {
2376
+ success: true;
2377
+ };
2378
+ outputFormat: "json";
2379
+ status: 200;
2380
+ };
2381
+ };
2382
+ } & {
2383
+ "/:id/documents": {
2384
+ $get: {
2385
+ input: {
2386
+ param: {
2387
+ id: string;
2388
+ };
2389
+ };
2390
+ output: {
2391
+ data: {
2392
+ id: string;
2393
+ bookingId: string;
2394
+ travelerId: string | null;
2395
+ type: "visa" | "other" | "insurance" | "health" | "passport_copy";
2396
+ fileName: string;
2397
+ fileUrl: string;
2398
+ expiresAt: string | null;
2399
+ notes: string | null;
2400
+ createdAt: string;
2401
+ }[];
2402
+ };
2403
+ outputFormat: "json";
2404
+ status: import("hono/utils/http-status").ContentfulStatusCode;
2405
+ };
2406
+ };
2407
+ } & {
2408
+ "/:id/documents": {
2409
+ $post: {
2410
+ input: {
2411
+ param: {
2412
+ id: string;
2413
+ };
2414
+ };
2415
+ output: {
2416
+ error: string;
2417
+ };
2418
+ outputFormat: "json";
2419
+ status: 404;
2420
+ } | {
2421
+ input: {
2422
+ param: {
2423
+ id: string;
2424
+ };
2425
+ };
2426
+ output: {
2427
+ data: {
2428
+ type: "visa" | "other" | "insurance" | "health" | "passport_copy";
2429
+ id: string;
2430
+ createdAt: string;
2431
+ expiresAt: string | null;
2432
+ notes: string | null;
2433
+ fileName: string;
2434
+ bookingId: string;
2435
+ travelerId: string | null;
2436
+ fileUrl: string;
2437
+ };
2438
+ };
2439
+ outputFormat: "json";
2440
+ status: 201;
2441
+ };
2442
+ };
2443
+ } & {
2444
+ "/:id/documents/:documentId": {
2445
+ $delete: {
2446
+ input: {
2447
+ param: {
2448
+ id: string;
2449
+ } & {
2450
+ documentId: string;
2451
+ };
2452
+ };
2453
+ output: {
2454
+ error: string;
2455
+ };
2456
+ outputFormat: "json";
2457
+ status: 404;
2458
+ } | {
2459
+ input: {
2460
+ param: {
2461
+ id: string;
2462
+ } & {
2463
+ documentId: string;
2464
+ };
2465
+ };
2466
+ output: {
2467
+ success: true;
2468
+ };
2469
+ outputFormat: "json";
2470
+ status: 200;
2471
+ };
2472
+ };
2473
+ }) | import("hono/types").MergeSchemaPath<{
2474
+ "/": {
2475
+ $get: {
2476
+ input: {};
2477
+ output: {
2478
+ data: {
2479
+ id: string;
2480
+ createdAt: string;
2481
+ metadata: {
2482
+ [x: string]: import("hono/utils/types").JSONValue;
2483
+ } | null;
2484
+ updatedAt: string;
2485
+ kind: "other" | "shared_room" | "cruise_party";
2486
+ label: string;
2487
+ primaryBookingId: string | null;
2488
+ productId: string | null;
2489
+ optionUnitId: string | null;
2490
+ }[];
2491
+ total: number;
2492
+ limit: number;
2493
+ offset: number;
2494
+ };
2495
+ outputFormat: "json";
2496
+ status: import("hono/utils/http-status").ContentfulStatusCode;
2497
+ };
2498
+ };
2499
+ } & {
2500
+ "/": {
2501
+ $post: {
2502
+ input: {};
2503
+ output: {
2504
+ data: {
2505
+ id: string;
2506
+ createdAt: string;
2507
+ metadata: {
2508
+ [x: string]: import("hono/utils/types").JSONValue;
2509
+ } | null;
2510
+ updatedAt: string;
2511
+ kind: "other" | "shared_room" | "cruise_party";
2512
+ label: string;
2513
+ primaryBookingId: string | null;
2514
+ productId: string | null;
2515
+ optionUnitId: string | null;
2516
+ };
2517
+ };
2518
+ outputFormat: "json";
2519
+ status: 201;
2520
+ };
2521
+ };
2522
+ } & {
2523
+ "/:id": {
2524
+ $get: {
2525
+ input: {
2526
+ param: {
2527
+ id: string;
2528
+ };
2529
+ };
2530
+ output: {
2531
+ error: string;
2532
+ };
2533
+ outputFormat: "json";
2534
+ status: 404;
2535
+ } | {
2536
+ input: {
2537
+ param: {
2538
+ id: string;
2539
+ };
2540
+ };
2541
+ output: {
2542
+ data: {
2543
+ members: {
2544
+ id: string;
2545
+ createdAt: string;
2546
+ role: "primary" | "shared";
2547
+ bookingId: string;
2548
+ groupId: string;
2549
+ booking: {
2550
+ id: string;
2551
+ status: "expired" | "cancelled" | "completed" | "draft" | "on_hold" | "awaiting_payment" | "confirmed" | "in_progress";
2552
+ organizationId: string | null;
2553
+ createdAt: string;
2554
+ updatedAt: string;
2555
+ redeemedAt: string | null;
2556
+ startDate: string | null;
2557
+ endDate: string | null;
2558
+ completedAt: string | null;
2559
+ bookingNumber: string;
2560
+ personId: string | null;
2561
+ sourceType: "internal" | "direct" | "manual" | "affiliate" | "ota" | "reseller" | "api_partner";
2562
+ externalBookingRef: string | null;
2563
+ communicationLanguage: string | null;
2564
+ contactFirstName: string | null;
2565
+ contactLastName: string | null;
2566
+ contactPartyType: string | null;
2567
+ contactTaxId: string | null;
2568
+ contactEmail: string | null;
2569
+ contactPhone: string | null;
2570
+ contactPreferredLanguage: string | null;
2571
+ contactCountry: string | null;
2572
+ contactRegion: string | null;
2573
+ contactCity: string | null;
2574
+ contactAddressLine1: string | null;
2575
+ contactAddressLine2: string | null;
2576
+ contactPostalCode: string | null;
2577
+ sellCurrency: string;
2578
+ baseCurrency: string | null;
2579
+ fxRateSetId: string | null;
2580
+ sellAmountCents: number | null;
2581
+ baseSellAmountCents: number | null;
2582
+ costAmountCents: number | null;
2583
+ baseCostAmountCents: number | null;
2584
+ marginPercent: number | null;
2585
+ pax: number | null;
2586
+ internalNotes: string | null;
2587
+ customerPaymentPolicy: import("hono/utils/types").JSONValue;
2588
+ priceOverride: {
2589
+ isManual: true;
2590
+ originalAmountCents: number | null;
2591
+ overriddenAmountCents: number;
2592
+ currency: string;
2593
+ reason: string;
2594
+ overriddenBy: string;
2595
+ overriddenAt: string;
2596
+ } | null;
2597
+ holdExpiresAt: string | null;
2598
+ confirmedAt: string | null;
2599
+ expiredAt: string | null;
2600
+ cancelledAt: string | null;
2601
+ awaitingPaymentAt: string | null;
2602
+ paidAt: string | null;
2603
+ } | null;
2604
+ }[];
2605
+ id: string;
2606
+ createdAt: string;
2607
+ metadata: {
2608
+ [x: string]: import("hono/utils/types").JSONValue;
2609
+ } | null;
2610
+ updatedAt: string;
2611
+ kind: "other" | "shared_room" | "cruise_party";
2612
+ label: string;
2613
+ primaryBookingId: string | null;
2614
+ productId: string | null;
2615
+ optionUnitId: string | null;
2616
+ };
2617
+ };
2618
+ outputFormat: "json";
2619
+ status: import("hono/utils/http-status").ContentfulStatusCode;
2620
+ };
2621
+ };
2622
+ } & {
2623
+ "/:id": {
2624
+ $patch: {
2625
+ input: {
2626
+ param: {
2627
+ id: string;
2628
+ };
2629
+ };
2630
+ output: {
2631
+ error: string;
2632
+ };
2633
+ outputFormat: "json";
2634
+ status: 404;
2635
+ } | {
2636
+ input: {
2637
+ param: {
2638
+ id: string;
2639
+ };
2640
+ };
2641
+ output: {
2642
+ data: {
2643
+ id: string;
2644
+ createdAt: string;
2645
+ metadata: {
2646
+ [x: string]: import("hono/utils/types").JSONValue;
2647
+ } | null;
2648
+ updatedAt: string;
2649
+ kind: "other" | "shared_room" | "cruise_party";
2650
+ label: string;
2651
+ primaryBookingId: string | null;
2652
+ productId: string | null;
2653
+ optionUnitId: string | null;
2654
+ };
2655
+ };
2656
+ outputFormat: "json";
2657
+ status: import("hono/utils/http-status").ContentfulStatusCode;
2658
+ };
2659
+ };
2660
+ } & {
2661
+ "/:id": {
2662
+ $delete: {
2663
+ input: {
2664
+ param: {
2665
+ id: string;
2666
+ };
2667
+ };
2668
+ output: {
2669
+ error: string;
2670
+ };
2671
+ outputFormat: "json";
2672
+ status: 404;
2673
+ } | {
2674
+ input: {
2675
+ param: {
2676
+ id: string;
2677
+ };
2678
+ };
2679
+ output: {
2680
+ success: true;
2681
+ };
2682
+ outputFormat: "json";
2683
+ status: import("hono/utils/http-status").ContentfulStatusCode;
2684
+ };
2685
+ };
2686
+ } & {
2687
+ "/:id/members": {
2688
+ $get: {
2689
+ input: {
2690
+ param: {
2691
+ id: string;
2692
+ };
2693
+ };
2694
+ output: {
2695
+ data: {
2696
+ id: string;
2697
+ createdAt: string;
2698
+ role: "primary" | "shared";
2699
+ bookingId: string;
2700
+ groupId: string;
2701
+ booking: {
2702
+ id: string;
2703
+ status: "expired" | "cancelled" | "completed" | "draft" | "on_hold" | "awaiting_payment" | "confirmed" | "in_progress";
2704
+ organizationId: string | null;
2705
+ createdAt: string;
2706
+ updatedAt: string;
2707
+ redeemedAt: string | null;
2708
+ startDate: string | null;
2709
+ endDate: string | null;
2710
+ completedAt: string | null;
2711
+ bookingNumber: string;
2712
+ personId: string | null;
2713
+ sourceType: "internal" | "direct" | "manual" | "affiliate" | "ota" | "reseller" | "api_partner";
2714
+ externalBookingRef: string | null;
2715
+ communicationLanguage: string | null;
2716
+ contactFirstName: string | null;
2717
+ contactLastName: string | null;
2718
+ contactPartyType: string | null;
2719
+ contactTaxId: string | null;
2720
+ contactEmail: string | null;
2721
+ contactPhone: string | null;
2722
+ contactPreferredLanguage: string | null;
2723
+ contactCountry: string | null;
2724
+ contactRegion: string | null;
2725
+ contactCity: string | null;
2726
+ contactAddressLine1: string | null;
2727
+ contactAddressLine2: string | null;
2728
+ contactPostalCode: string | null;
2729
+ sellCurrency: string;
2730
+ baseCurrency: string | null;
2731
+ fxRateSetId: string | null;
2732
+ sellAmountCents: number | null;
2733
+ baseSellAmountCents: number | null;
2734
+ costAmountCents: number | null;
2735
+ baseCostAmountCents: number | null;
2736
+ marginPercent: number | null;
2737
+ pax: number | null;
2738
+ internalNotes: string | null;
2739
+ customerPaymentPolicy: import("hono/utils/types").JSONValue;
2740
+ priceOverride: {
2741
+ isManual: true;
2742
+ originalAmountCents: number | null;
2743
+ overriddenAmountCents: number;
2744
+ currency: string;
2745
+ reason: string;
2746
+ overriddenBy: string;
2747
+ overriddenAt: string;
2748
+ } | null;
2749
+ holdExpiresAt: string | null;
2750
+ confirmedAt: string | null;
2751
+ expiredAt: string | null;
2752
+ cancelledAt: string | null;
2753
+ awaitingPaymentAt: string | null;
2754
+ paidAt: string | null;
2755
+ } | null;
2756
+ }[];
2757
+ };
2758
+ outputFormat: "json";
2759
+ status: import("hono/utils/http-status").ContentfulStatusCode;
2760
+ };
2761
+ };
2762
+ } & {
2763
+ "/:id/members": {
2764
+ $post: {
2765
+ input: {
2766
+ param: {
2767
+ id: string;
2768
+ };
2769
+ };
2770
+ output: {
2771
+ error: string;
2772
+ };
2773
+ outputFormat: "json";
2774
+ status: 404;
2775
+ } | {
2776
+ input: {
2777
+ param: {
2778
+ id: string;
2779
+ };
2780
+ };
2781
+ output: {
2782
+ error: string;
2783
+ currentGroupId: string;
2784
+ };
2785
+ outputFormat: "json";
2786
+ status: 409;
2787
+ } | {
2788
+ input: {
2789
+ param: {
2790
+ id: string;
2791
+ };
2792
+ };
2793
+ output: {
2794
+ data: {
2795
+ id: string;
2796
+ createdAt: string;
2797
+ role: "primary" | "shared";
2798
+ bookingId: string;
2799
+ groupId: string;
2800
+ };
2801
+ };
2802
+ outputFormat: "json";
2803
+ status: 201;
2804
+ };
2805
+ };
2806
+ } & {
2807
+ "/:id/members/:bookingId": {
2808
+ $delete: {
2809
+ input: {
2810
+ param: {
2811
+ id: string;
2812
+ } & {
2813
+ bookingId: string;
2814
+ };
2815
+ };
2816
+ output: {
2817
+ error: string;
2818
+ };
2819
+ outputFormat: "json";
2820
+ status: 404;
2821
+ } | {
2822
+ input: {
2823
+ param: {
2824
+ id: string;
2825
+ } & {
2826
+ bookingId: string;
2827
+ };
2828
+ };
2829
+ output: {
2830
+ success: true;
2831
+ };
2832
+ outputFormat: "json";
2833
+ status: import("hono/utils/http-status").ContentfulStatusCode;
2834
+ };
2835
+ };
2836
+ } & {
2837
+ "/:id/travelers": {
2838
+ $get: {
2839
+ input: {
2840
+ param: {
2841
+ id: string;
2842
+ };
2843
+ };
2844
+ output: {
2845
+ data: {
2846
+ id: string;
2847
+ createdAt: string;
2848
+ updatedAt: string;
2849
+ email: string | null;
2850
+ notes: string | null;
2851
+ firstName: string;
2852
+ lastName: string;
2853
+ bookingId: string;
2854
+ personId: string | null;
2855
+ participantType: "other" | "traveler" | "occupant";
2856
+ travelerCategory: "child" | "other" | "adult" | "infant" | "senior" | null;
2857
+ phone: string | null;
2858
+ preferredLanguage: string | null;
2859
+ specialRequests: string | null;
2860
+ isPrimary: boolean;
2861
+ }[];
2862
+ };
2863
+ outputFormat: "json";
2864
+ status: import("hono/utils/http-status").ContentfulStatusCode;
2865
+ };
2866
+ };
2867
+ }, "/groups">, "/", "/:id/documents/:documentId">;
2868
+ export type BookingRoutes = typeof bookingRoutes;
2869
+ export type PublicBookingRoutes = typeof publicBookingRoutes;
2870
+ export declare const __test__: {
2871
+ bookingActionLedgerQuerySchema: z.ZodPipe<z.ZodObject<{
2872
+ cursorOccurredAt: z.ZodOptional<z.ZodString>;
2873
+ cursorId: z.ZodOptional<z.ZodString>;
2874
+ limit: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
2875
+ }, z.core.$strip>, z.ZodTransform<{
2876
+ cursor: {
2877
+ occurredAt: string;
2878
+ id: string;
2879
+ } | undefined;
2880
+ limit?: number | undefined;
2881
+ }, {
2882
+ cursorOccurredAt?: string | undefined;
2883
+ cursorId?: string | undefined;
2884
+ limit?: number | undefined;
2885
+ }>>;
2886
+ bookingMutationSummary: typeof bookingMutationSummary;
2887
+ buildBookingActionLedgerPage: typeof buildBookingActionLedgerPage;
2888
+ changedBookingItemFields: typeof changedBookingItemFields;
2889
+ changedBookingMutationFields: typeof changedBookingMutationFields;
2890
+ changedBookingTravelDetailFields: typeof changedBookingTravelDetailFields;
2891
+ changedBookingTravelerFields: typeof changedBookingTravelerFields;
2892
+ };
2893
+ export {};
2894
+ //# sourceMappingURL=routes-admin.d.ts.map