@voyantjs/bookings 0.10.0 → 0.11.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 CHANGED
@@ -6,7 +6,7 @@ export { type PiiAccessContext, redactBookingContact, redactEmail, redactPhone,
6
6
  export type { ConvertProductData } from "./service.js";
7
7
  export { bookingsService } from "./service.js";
8
8
  export { type AddBookingGroupMemberInput, type BookingGroupListQuery, type BookingGroupMemberWithBooking, bookingGroupsService, type CreateBookingGroupInput, listGroupBookingTravelers, type UpdateBookingGroupInput, } from "./service-groups.js";
9
- export { BOOKING_TRANSITIONS, type BookingStatus, type BookingStatusPatch, BookingTransitionError, canTransitionBooking, transitionBooking, } from "./state-machine.js";
9
+ export type { BookingStatus } from "./state-machine.js";
10
10
  export { type ExpireStaleBookingHoldsInput, type ExpireStaleBookingHoldsResult, expireStaleBookingHolds, } from "./tasks/index.js";
11
11
  export declare const bookingLinkable: LinkableDefinition;
12
12
  export declare const bookingsLinkable: {
@@ -25,5 +25,5 @@ export { bookingTravelerDietarySchema, bookingTravelerIdentitySchema, bookingTra
25
25
  export type { Booking, BookingActivity, BookingAllocation, BookingDocument, BookingFulfillment, BookingGroup, BookingGroupMember, BookingItem, BookingItemTraveler, BookingNote, BookingPiiAccessLog, BookingRedemptionEvent, BookingSessionState, BookingStaffAssignment, BookingSupplierStatus, BookingTraveler, NewBooking, NewBookingActivity, NewBookingAllocation, NewBookingDocument, NewBookingFulfillment, NewBookingGroup, NewBookingGroupMember, NewBookingItem, NewBookingItemTraveler, NewBookingNote, NewBookingPiiAccessLog, NewBookingRedemptionEvent, NewBookingSessionState, NewBookingStaffAssignment, NewBookingSupplierStatus, NewBookingTraveler, } from "./schema.js";
26
26
  export { bookingActivityLog, bookingAllocations, bookingDocuments, bookingFulfillments, bookingGroupKindEnum, bookingGroupMemberRoleEnum, bookingGroupMembers, bookingGroups, bookingItems, bookingItemTravelers, bookingNotes, bookingPiiAccessLog, bookingRedemptionEvents, bookingSessionStates, bookingStaffAssignments, bookingSupplierStatuses, bookings, bookingTravelers, } from "./schema.js";
27
27
  export { publicBookingsService, resolveSessionPricingSnapshot } from "./service-public.js";
28
- export { addBookingGroupMemberSchema, bookingGroupKindSchema, bookingGroupListQuerySchema, bookingGroupMemberRoleSchema, bookingListQuerySchema, cancelBookingSchema, confirmBookingSchema, convertProductSchema, createBookingSchema, expireBookingSchema, expireStaleBookingsSchema, extendBookingHoldSchema, insertBookingAllocationSchema, insertBookingDocumentSchema, insertBookingFulfillmentSchema, insertBookingGroupSchema, insertBookingItemSchema, insertBookingItemTravelerSchema, insertBookingNoteSchema, insertBookingSchema, insertBookingTravelerDocumentSchema, insertSupplierStatusSchema, insertTravelerSchema, internalBookingOverviewLookupQuerySchema, pricingPreviewSchema, publicBookingOverviewLookupQuerySchema, publicBookingSessionMutationSchema, publicBookingSessionRepriceItemSchema, publicBookingSessionRepriceResultSchema, publicBookingSessionRepriceSummarySchema, publicBookingSessionStateSchema, publicCreateBookingSessionSchema, publicRepriceBookingSessionSchema, publicUpdateBookingSessionSchema, publicUpsertBookingSessionStateSchema, recordBookingRedemptionSchema, reserveBookingFromTransactionSchema, reserveBookingSchema, updateBookingAllocationSchema, updateBookingFulfillmentSchema, updateBookingGroupSchema, updateBookingItemSchema, updateBookingSchema, updateBookingStatusSchema, updateSupplierStatusSchema, updateTravelerSchema, upsertTravelerTravelDetailsSchema, } from "./validation.js";
28
+ export { addBookingGroupMemberSchema, bookingGroupKindSchema, bookingGroupListQuerySchema, bookingGroupMemberRoleSchema, bookingListQuerySchema, cancelBookingSchema, completeBookingSchema, confirmBookingSchema, convertProductSchema, createBookingSchema, expireBookingSchema, expireStaleBookingsSchema, extendBookingHoldSchema, insertBookingAllocationSchema, insertBookingDocumentSchema, insertBookingFulfillmentSchema, insertBookingGroupSchema, insertBookingItemSchema, insertBookingItemTravelerSchema, insertBookingNoteSchema, insertBookingSchema, insertBookingTravelerDocumentSchema, insertSupplierStatusSchema, insertTravelerSchema, internalBookingOverviewLookupQuerySchema, overrideBookingStatusSchema, pricingPreviewSchema, publicBookingOverviewLookupQuerySchema, publicBookingSessionMutationSchema, publicBookingSessionRepriceItemSchema, publicBookingSessionRepriceResultSchema, publicBookingSessionRepriceSummarySchema, publicBookingSessionStateSchema, publicCreateBookingSessionSchema, publicRepriceBookingSessionSchema, publicUpdateBookingSessionSchema, publicUpsertBookingSessionStateSchema, recordBookingRedemptionSchema, reserveBookingFromTransactionSchema, reserveBookingSchema, startBookingSchema, updateBookingAllocationSchema, updateBookingFulfillmentSchema, updateBookingGroupSchema, updateBookingItemSchema, updateBookingSchema, updateSupplierStatusSchema, updateTravelerSchema, upsertTravelerTravelDetailsSchema, } from "./validation.js";
29
29
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -6,7 +6,6 @@ export { createBookingPiiService, } from "./pii.js";
6
6
  export { redactBookingContact, redactEmail, redactPhone, redactString, redactTravelerIdentity, shouldRevealBookingPii, } from "./pii-redaction.js";
7
7
  export { bookingsService } from "./service.js";
8
8
  export { bookingGroupsService, listGroupBookingTravelers, } from "./service-groups.js";
9
- export { BOOKING_TRANSITIONS, BookingTransitionError, canTransitionBooking, transitionBooking, } from "./state-machine.js";
10
9
  export { expireStaleBookingHolds, } from "./tasks/index.js";
11
10
  export const bookingLinkable = {
12
11
  module: "bookings",
@@ -41,4 +40,4 @@ export { publicBookingRoutes } from "./routes-public.js";
41
40
  export { bookingTravelerDietarySchema, bookingTravelerIdentitySchema, bookingTravelerTravelDetailInsertSchema, bookingTravelerTravelDetailSelectSchema, bookingTravelerTravelDetails, bookingTravelerTravelDetailUpdateSchema, decryptedBookingTravelerTravelDetailSchema, } from "./schema/travel-details.js";
42
41
  export { bookingActivityLog, bookingAllocations, bookingDocuments, bookingFulfillments, bookingGroupKindEnum, bookingGroupMemberRoleEnum, bookingGroupMembers, bookingGroups, bookingItems, bookingItemTravelers, bookingNotes, bookingPiiAccessLog, bookingRedemptionEvents, bookingSessionStates, bookingStaffAssignments, bookingSupplierStatuses, bookings, bookingTravelers, } from "./schema.js";
43
42
  export { publicBookingsService, resolveSessionPricingSnapshot } from "./service-public.js";
44
- export { addBookingGroupMemberSchema, bookingGroupKindSchema, bookingGroupListQuerySchema, bookingGroupMemberRoleSchema, bookingListQuerySchema, cancelBookingSchema, confirmBookingSchema, convertProductSchema, createBookingSchema, expireBookingSchema, expireStaleBookingsSchema, extendBookingHoldSchema, insertBookingAllocationSchema, insertBookingDocumentSchema, insertBookingFulfillmentSchema, insertBookingGroupSchema, insertBookingItemSchema, insertBookingItemTravelerSchema, insertBookingNoteSchema, insertBookingSchema, insertBookingTravelerDocumentSchema, insertSupplierStatusSchema, insertTravelerSchema, internalBookingOverviewLookupQuerySchema, pricingPreviewSchema, publicBookingOverviewLookupQuerySchema, publicBookingSessionMutationSchema, publicBookingSessionRepriceItemSchema, publicBookingSessionRepriceResultSchema, publicBookingSessionRepriceSummarySchema, publicBookingSessionStateSchema, publicCreateBookingSessionSchema, publicRepriceBookingSessionSchema, publicUpdateBookingSessionSchema, publicUpsertBookingSessionStateSchema, recordBookingRedemptionSchema, reserveBookingFromTransactionSchema, reserveBookingSchema, updateBookingAllocationSchema, updateBookingFulfillmentSchema, updateBookingGroupSchema, updateBookingItemSchema, updateBookingSchema, updateBookingStatusSchema, updateSupplierStatusSchema, updateTravelerSchema, upsertTravelerTravelDetailsSchema, } from "./validation.js";
43
+ export { addBookingGroupMemberSchema, bookingGroupKindSchema, bookingGroupListQuerySchema, bookingGroupMemberRoleSchema, bookingListQuerySchema, cancelBookingSchema, completeBookingSchema, confirmBookingSchema, convertProductSchema, createBookingSchema, expireBookingSchema, expireStaleBookingsSchema, extendBookingHoldSchema, insertBookingAllocationSchema, insertBookingDocumentSchema, insertBookingFulfillmentSchema, insertBookingGroupSchema, insertBookingItemSchema, insertBookingItemTravelerSchema, insertBookingNoteSchema, insertBookingSchema, insertBookingTravelerDocumentSchema, insertSupplierStatusSchema, insertTravelerSchema, internalBookingOverviewLookupQuerySchema, overrideBookingStatusSchema, pricingPreviewSchema, publicBookingOverviewLookupQuerySchema, publicBookingSessionMutationSchema, publicBookingSessionRepriceItemSchema, publicBookingSessionRepriceResultSchema, publicBookingSessionRepriceSummarySchema, publicBookingSessionStateSchema, publicCreateBookingSessionSchema, publicRepriceBookingSessionSchema, publicUpdateBookingSessionSchema, publicUpsertBookingSessionStateSchema, recordBookingRedemptionSchema, reserveBookingFromTransactionSchema, reserveBookingSchema, startBookingSchema, updateBookingAllocationSchema, updateBookingFulfillmentSchema, updateBookingGroupSchema, updateBookingItemSchema, updateBookingSchema, updateSupplierStatusSchema, updateTravelerSchema, upsertTravelerTravelDetailsSchema, } from "./validation.js";
package/dist/routes.d.ts CHANGED
@@ -655,8 +655,8 @@ export declare const bookingRoutes: import("hono/hono-base").HonoBase<Env, ({
655
655
  };
656
656
  };
657
657
  } & {
658
- "/:id/status": {
659
- $patch: {
658
+ "/:id/confirm": {
659
+ $post: {
660
660
  input: {
661
661
  param: {
662
662
  id: string;
@@ -685,7 +685,46 @@ export declare const bookingRoutes: import("hono/hono-base").HonoBase<Env, ({
685
685
  };
686
686
  };
687
687
  output: {
688
- data: import("hono/utils/types").JSONValue;
688
+ data: {
689
+ id: string;
690
+ bookingNumber: string;
691
+ status: "cancelled" | "draft" | "on_hold" | "confirmed" | "in_progress" | "completed" | "expired";
692
+ personId: string | null;
693
+ organizationId: string | null;
694
+ sourceType: "internal" | "reseller" | "direct" | "manual" | "affiliate" | "ota" | "api_partner";
695
+ externalBookingRef: string | null;
696
+ communicationLanguage: string | null;
697
+ contactFirstName: string | null;
698
+ contactLastName: string | null;
699
+ contactEmail: string | null;
700
+ contactPhone: string | null;
701
+ contactPreferredLanguage: string | null;
702
+ contactCountry: string | null;
703
+ contactRegion: string | null;
704
+ contactCity: string | null;
705
+ contactAddressLine1: string | null;
706
+ contactPostalCode: string | null;
707
+ sellCurrency: string;
708
+ baseCurrency: string | null;
709
+ fxRateSetId: string | null;
710
+ sellAmountCents: number | null;
711
+ baseSellAmountCents: number | null;
712
+ costAmountCents: number | null;
713
+ baseCostAmountCents: number | null;
714
+ marginPercent: number | null;
715
+ startDate: string | null;
716
+ endDate: string | null;
717
+ pax: number | null;
718
+ internalNotes: string | null;
719
+ holdExpiresAt: string | null;
720
+ confirmedAt: string | null;
721
+ expiredAt: string | null;
722
+ cancelledAt: string | null;
723
+ completedAt: string | null;
724
+ redeemedAt: string | null;
725
+ createdAt: string;
726
+ updatedAt: string;
727
+ } | null;
689
728
  };
690
729
  outputFormat: "json";
691
730
  status: import("hono/utils/http-status").ContentfulStatusCode;
@@ -703,7 +742,7 @@ export declare const bookingRoutes: import("hono/hono-base").HonoBase<Env, ({
703
742
  };
704
743
  };
705
744
  } & {
706
- "/:id/confirm": {
745
+ "/:id/extend-hold": {
707
746
  $post: {
708
747
  input: {
709
748
  param: {
@@ -790,7 +829,7 @@ export declare const bookingRoutes: import("hono/hono-base").HonoBase<Env, ({
790
829
  };
791
830
  };
792
831
  } & {
793
- "/:id/extend-hold": {
832
+ "/:id/expire": {
794
833
  $post: {
795
834
  input: {
796
835
  param: {
@@ -877,7 +916,20 @@ export declare const bookingRoutes: import("hono/hono-base").HonoBase<Env, ({
877
916
  };
878
917
  };
879
918
  } & {
880
- "/:id/expire": {
919
+ "/expire-stale": {
920
+ $post: {
921
+ input: {};
922
+ output: {
923
+ expiredIds: string[];
924
+ count: number;
925
+ cutoff: string;
926
+ };
927
+ outputFormat: "json";
928
+ status: import("hono/utils/http-status").ContentfulStatusCode;
929
+ };
930
+ };
931
+ } & {
932
+ "/:id/cancel": {
881
933
  $post: {
882
934
  input: {
883
935
  param: {
@@ -946,7 +998,7 @@ export declare const bookingRoutes: import("hono/hono-base").HonoBase<Env, ({
946
998
  redeemedAt: string | null;
947
999
  createdAt: string;
948
1000
  updatedAt: string;
949
- } | null;
1001
+ } | null | undefined;
950
1002
  };
951
1003
  outputFormat: "json";
952
1004
  status: import("hono/utils/http-status").ContentfulStatusCode;
@@ -964,20 +1016,94 @@ export declare const bookingRoutes: import("hono/hono-base").HonoBase<Env, ({
964
1016
  };
965
1017
  };
966
1018
  } & {
967
- "/expire-stale": {
1019
+ "/:id/start": {
968
1020
  $post: {
969
- input: {};
1021
+ input: {
1022
+ param: {
1023
+ id: string;
1024
+ };
1025
+ };
970
1026
  output: {
971
- expiredIds: string[];
972
- count: number;
973
- cutoff: string;
1027
+ error: string;
1028
+ };
1029
+ outputFormat: "json";
1030
+ status: 404;
1031
+ } | {
1032
+ input: {
1033
+ param: {
1034
+ id: string;
1035
+ };
1036
+ };
1037
+ output: {
1038
+ error: string;
1039
+ };
1040
+ outputFormat: "json";
1041
+ status: 409;
1042
+ } | {
1043
+ input: {
1044
+ param: {
1045
+ id: string;
1046
+ };
1047
+ };
1048
+ output: {
1049
+ data: {
1050
+ id: string;
1051
+ bookingNumber: string;
1052
+ status: "cancelled" | "draft" | "on_hold" | "confirmed" | "in_progress" | "completed" | "expired";
1053
+ personId: string | null;
1054
+ organizationId: string | null;
1055
+ sourceType: "internal" | "reseller" | "direct" | "manual" | "affiliate" | "ota" | "api_partner";
1056
+ externalBookingRef: string | null;
1057
+ communicationLanguage: string | null;
1058
+ contactFirstName: string | null;
1059
+ contactLastName: string | null;
1060
+ contactEmail: string | null;
1061
+ contactPhone: string | null;
1062
+ contactPreferredLanguage: string | null;
1063
+ contactCountry: string | null;
1064
+ contactRegion: string | null;
1065
+ contactCity: string | null;
1066
+ contactAddressLine1: string | null;
1067
+ contactPostalCode: string | null;
1068
+ sellCurrency: string;
1069
+ baseCurrency: string | null;
1070
+ fxRateSetId: string | null;
1071
+ sellAmountCents: number | null;
1072
+ baseSellAmountCents: number | null;
1073
+ costAmountCents: number | null;
1074
+ baseCostAmountCents: number | null;
1075
+ marginPercent: number | null;
1076
+ startDate: string | null;
1077
+ endDate: string | null;
1078
+ pax: number | null;
1079
+ internalNotes: string | null;
1080
+ holdExpiresAt: string | null;
1081
+ confirmedAt: string | null;
1082
+ expiredAt: string | null;
1083
+ cancelledAt: string | null;
1084
+ completedAt: string | null;
1085
+ redeemedAt: string | null;
1086
+ createdAt: string;
1087
+ updatedAt: string;
1088
+ } | null;
974
1089
  };
975
1090
  outputFormat: "json";
976
1091
  status: import("hono/utils/http-status").ContentfulStatusCode;
1092
+ } | {
1093
+ input: {
1094
+ param: {
1095
+ id: string;
1096
+ };
1097
+ };
1098
+ output: {
1099
+ error: string;
1100
+ };
1101
+ outputFormat: "json";
1102
+ status: 400;
977
1103
  };
978
1104
  };
979
1105
  } & {
980
- "/:id/cancel": {
1106
+ "/:id/complete": {
981
1107
  $post: {
982
1108
  input: {
983
1109
  param: {
@@ -1000,6 +1126,82 @@ export declare const bookingRoutes: import("hono/hono-base").HonoBase<Env, ({
1000
1126
  };
1001
1127
  outputFormat: "json";
1002
1128
  status: 409;
1129
+ } | {
1130
+ input: {
1131
+ param: {
1132
+ id: string;
1133
+ };
1134
+ };
1135
+ output: {
1136
+ data: {
1137
+ id: string;
1138
+ bookingNumber: string;
1139
+ status: "cancelled" | "draft" | "on_hold" | "confirmed" | "in_progress" | "completed" | "expired";
1140
+ personId: string | null;
1141
+ organizationId: string | null;
1142
+ sourceType: "internal" | "reseller" | "direct" | "manual" | "affiliate" | "ota" | "api_partner";
1143
+ externalBookingRef: string | null;
1144
+ communicationLanguage: string | null;
1145
+ contactFirstName: string | null;
1146
+ contactLastName: string | null;
1147
+ contactEmail: string | null;
1148
+ contactPhone: string | null;
1149
+ contactPreferredLanguage: string | null;
1150
+ contactCountry: string | null;
1151
+ contactRegion: string | null;
1152
+ contactCity: string | null;
1153
+ contactAddressLine1: string | null;
1154
+ contactPostalCode: string | null;
1155
+ sellCurrency: string;
1156
+ baseCurrency: string | null;
1157
+ fxRateSetId: string | null;
1158
+ sellAmountCents: number | null;
1159
+ baseSellAmountCents: number | null;
1160
+ costAmountCents: number | null;
1161
+ baseCostAmountCents: number | null;
1162
+ marginPercent: number | null;
1163
+ startDate: string | null;
1164
+ endDate: string | null;
1165
+ pax: number | null;
1166
+ internalNotes: string | null;
1167
+ holdExpiresAt: string | null;
1168
+ confirmedAt: string | null;
1169
+ expiredAt: string | null;
1170
+ cancelledAt: string | null;
1171
+ completedAt: string | null;
1172
+ redeemedAt: string | null;
1173
+ createdAt: string;
1174
+ updatedAt: string;
1175
+ } | null;
1176
+ };
1177
+ outputFormat: "json";
1178
+ status: import("hono/utils/http-status").ContentfulStatusCode;
1179
+ } | {
1180
+ input: {
1181
+ param: {
1182
+ id: string;
1183
+ };
1184
+ };
1185
+ output: {
1186
+ error: string;
1187
+ };
1188
+ outputFormat: "json";
1189
+ status: 400;
1190
+ };
1191
+ };
1192
+ } & {
1193
+ "/:id/override-status": {
1194
+ $post: {
1195
+ input: {
1196
+ param: {
1197
+ id: string;
1198
+ };
1199
+ };
1200
+ output: {
1201
+ error: string;
1202
+ };
1203
+ outputFormat: "json";
1204
+ status: 404;
1003
1205
  } | {
1004
1206
  input: {
1005
1207
  param: {
@@ -1881,7 +2083,7 @@ export declare const bookingRoutes: import("hono/hono-base").HonoBase<Env, ({
1881
2083
  id: string;
1882
2084
  bookingId: string;
1883
2085
  actorId: string | null;
1884
- activityType: "booking_created" | "booking_reserved" | "booking_converted" | "booking_confirmed" | "hold_extended" | "hold_expired" | "status_change" | "item_update" | "allocation_released" | "fulfillment_issued" | "fulfillment_updated" | "redemption_recorded" | "supplier_update" | "passenger_update" | "note_added";
2086
+ 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" | "passenger_update" | "note_added";
1885
2087
  description: string;
1886
2088
  metadata: {
1887
2089
  [x: string]: import("hono/utils/types").JSONValue;
@@ -1 +1 @@
1
- {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../src/routes.ts"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AAC7D,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAA;AAqM7C,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iDA04Ba,CAAA;AAEvC,MAAM,MAAM,aAAa,GAAG,OAAO,aAAa,CAAA;AAChD,MAAM,MAAM,mBAAmB,GAAG,OAAO,mBAAmB,CAAA"}
1
+ {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../src/routes.ts"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AAC7D,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAA;AAuM7C,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iDA27Ba,CAAA;AAEvC,MAAM,MAAM,aAAa,GAAG,OAAO,aAAa,CAAA;AAChD,MAAM,MAAM,mBAAmB,GAAG,OAAO,mBAAmB,CAAA"}
package/dist/routes.js CHANGED
@@ -8,7 +8,7 @@ import { bookingPiiAccessLog } from "./schema.js";
8
8
  import { bookingsService } from "./service.js";
9
9
  import { bookingGroupsService } from "./service-groups.js";
10
10
  import { publicBookingsService, resolveSessionPricingSnapshot } from "./service-public.js";
11
- import { bookingAggregatesQuerySchema, bookingListQuerySchema, cancelBookingSchema, confirmBookingSchema, convertProductSchema, createBookingSchema, expireBookingSchema, expireStaleBookingsSchema, extendBookingHoldSchema, insertBookingDocumentSchema, insertBookingFulfillmentSchema, insertBookingItemSchema, insertBookingItemTravelerSchema, insertBookingNoteSchema, insertSupplierStatusSchema, insertTravelerSchema, internalBookingOverviewLookupQuerySchema, pricingPreviewSchema, recordBookingRedemptionSchema, reserveBookingFromTransactionSchema, reserveBookingSchema, updateBookingFulfillmentSchema, updateBookingItemSchema, updateBookingSchema, updateBookingStatusSchema, updateSupplierStatusSchema, updateTravelerSchema, upsertTravelerTravelDetailsSchema, } from "./validation.js";
11
+ import { bookingAggregatesQuerySchema, bookingListQuerySchema, cancelBookingSchema, completeBookingSchema, confirmBookingSchema, convertProductSchema, createBookingSchema, expireBookingSchema, expireStaleBookingsSchema, extendBookingHoldSchema, insertBookingDocumentSchema, insertBookingFulfillmentSchema, insertBookingItemSchema, insertBookingItemTravelerSchema, insertBookingNoteSchema, insertSupplierStatusSchema, insertTravelerSchema, internalBookingOverviewLookupQuerySchema, overrideBookingStatusSchema, pricingPreviewSchema, recordBookingRedemptionSchema, reserveBookingFromTransactionSchema, reserveBookingSchema, startBookingSchema, updateBookingFulfillmentSchema, updateBookingItemSchema, updateBookingSchema, updateSupplierStatusSchema, updateTravelerSchema, upsertTravelerTravelDetailsSchema, } from "./validation.js";
12
12
  function hasPiiScope(scopes, action) {
13
13
  if (!scopes || scopes.length === 0) {
14
14
  return false;
@@ -315,20 +315,6 @@ export const bookingRoutes = new Hono()
315
315
  // ==========================================================================
316
316
  // Status
317
317
  // ==========================================================================
318
- // 7. PATCH /:id/status — Change booking status
319
- .patch("/:id/status", async (c) => {
320
- const result = await bookingsService.updateBookingStatus(c.get("db"), c.req.param("id"), await parseJsonBody(c, updateBookingStatusSchema), c.get("userId"), { eventBus: c.get("eventBus") });
321
- if (result.status === "not_found") {
322
- return c.json({ error: "Booking not found" }, 404);
323
- }
324
- if (result.status === "invalid_transition") {
325
- return c.json({ error: "Invalid booking status transition" }, 409);
326
- }
327
- if ("booking" in result) {
328
- return c.json({ data: result.booking });
329
- }
330
- return c.json({ error: "Unable to update booking status" }, 400);
331
- })
332
318
  // 8. POST /:id/confirm — Confirm an on-hold booking
333
319
  .post("/:id/confirm", async (c) => {
334
320
  const result = await bookingsService.confirmBooking(c.get("db"), c.req.param("id"), await parseJsonBody(c, confirmBookingSchema), c.get("userId"), { eventBus: c.get("eventBus") });
@@ -394,6 +380,48 @@ export const bookingRoutes = new Hono()
394
380
  return c.json({ data: result.booking });
395
381
  }
396
382
  return c.json({ error: "Unable to cancel booking" }, 400);
383
+ })
384
+ // 11a. POST /:id/start — Mark a confirmed booking as in-progress
385
+ .post("/:id/start", async (c) => {
386
+ const result = await bookingsService.startBooking(c.get("db"), c.req.param("id"), await parseJsonBody(c, startBookingSchema), c.get("userId"), { eventBus: c.get("eventBus") });
387
+ if (result.status === "not_found") {
388
+ return c.json({ error: "Booking not found" }, 404);
389
+ }
390
+ if (result.status === "invalid_transition") {
391
+ return c.json({ error: "Booking is not in a confirmed state" }, 409);
392
+ }
393
+ if ("booking" in result) {
394
+ return c.json({ data: result.booking });
395
+ }
396
+ return c.json({ error: "Unable to start booking" }, 400);
397
+ })
398
+ // 11b. POST /:id/complete — Mark an in-progress booking as completed
399
+ .post("/:id/complete", async (c) => {
400
+ const result = await bookingsService.completeBooking(c.get("db"), c.req.param("id"), await parseJsonBody(c, completeBookingSchema), c.get("userId"), { eventBus: c.get("eventBus") });
401
+ if (result.status === "not_found") {
402
+ return c.json({ error: "Booking not found" }, 404);
403
+ }
404
+ if (result.status === "invalid_transition") {
405
+ return c.json({ error: "Booking is not in an in-progress state" }, 409);
406
+ }
407
+ if ("booking" in result) {
408
+ return c.json({ data: result.booking });
409
+ }
410
+ return c.json({ error: "Unable to complete booking" }, 400);
411
+ })
412
+ // 11c. POST /:id/override-status — Admin override that bypasses the
413
+ // transition graph. Updates the booking row only — no cascade to items,
414
+ // allocations, or fulfillments. Always emits booking.status_overridden for
415
+ // audit. Requires a non-empty `reason`.
416
+ .post("/:id/override-status", async (c) => {
417
+ const result = await bookingsService.overrideBookingStatus(c.get("db"), c.req.param("id"), await parseJsonBody(c, overrideBookingStatusSchema), c.get("userId"), { eventBus: c.get("eventBus") });
418
+ if (result.status === "not_found") {
419
+ return c.json({ error: "Booking not found" }, 404);
420
+ }
421
+ if ("booking" in result) {
422
+ return c.json({ data: result.booking });
423
+ }
424
+ return c.json({ error: "Unable to override booking status" }, 400);
397
425
  })
398
426
  // 12. GET /:id/allocations — List booking allocations
399
427
  .get("/:id/allocations", async (c) => {
@@ -269,14 +269,14 @@ export declare const bookingActivityLog: import("drizzle-orm/pg-core").PgTableWi
269
269
  tableName: "booking_activity_log";
270
270
  dataType: "string";
271
271
  columnType: "PgEnumColumn";
272
- data: "booking_created" | "booking_reserved" | "booking_converted" | "booking_confirmed" | "hold_extended" | "hold_expired" | "status_change" | "item_update" | "allocation_released" | "fulfillment_issued" | "fulfillment_updated" | "redemption_recorded" | "supplier_update" | "passenger_update" | "note_added";
272
+ data: "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" | "passenger_update" | "note_added";
273
273
  driverParam: string;
274
274
  notNull: true;
275
275
  hasDefault: false;
276
276
  isPrimaryKey: false;
277
277
  isAutoincrement: false;
278
278
  hasRuntimeDefault: false;
279
- enumValues: ["booking_created", "booking_reserved", "booking_converted", "booking_confirmed", "hold_extended", "hold_expired", "status_change", "item_update", "allocation_released", "fulfillment_issued", "fulfillment_updated", "redemption_recorded", "supplier_update", "passenger_update", "note_added"];
279
+ enumValues: ["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", "passenger_update", "note_added"];
280
280
  baseColumn: never;
281
281
  identity: undefined;
282
282
  generated: undefined;
@@ -1,6 +1,6 @@
1
1
  export declare const bookingStatusEnum: import("drizzle-orm/pg-core").PgEnum<["draft", "on_hold", "confirmed", "in_progress", "completed", "expired", "cancelled"]>;
2
2
  export declare const supplierConfirmationStatusEnum: import("drizzle-orm/pg-core").PgEnum<["pending", "confirmed", "rejected", "cancelled"]>;
3
- export declare const bookingActivityTypeEnum: import("drizzle-orm/pg-core").PgEnum<["booking_created", "booking_reserved", "booking_converted", "booking_confirmed", "hold_extended", "hold_expired", "status_change", "item_update", "allocation_released", "fulfillment_issued", "fulfillment_updated", "redemption_recorded", "supplier_update", "passenger_update", "note_added"]>;
3
+ export declare const bookingActivityTypeEnum: import("drizzle-orm/pg-core").PgEnum<["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", "passenger_update", "note_added"]>;
4
4
  export declare const bookingDocumentTypeEnum: import("drizzle-orm/pg-core").PgEnum<["visa", "insurance", "health", "passport_copy", "other"]>;
5
5
  export declare const bookingSourceTypeEnum: import("drizzle-orm/pg-core").PgEnum<["direct", "manual", "affiliate", "ota", "reseller", "api_partner", "internal"]>;
6
6
  export declare const bookingParticipantTypeEnum: import("drizzle-orm/pg-core").PgEnum<["traveler", "occupant", "other"]>;
@@ -1 +1 @@
1
- {"version":3,"file":"schema-shared.d.ts","sourceRoot":"","sources":["../src/schema-shared.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,iBAAiB,6HAQ5B,CAAA;AAEF,eAAO,MAAM,8BAA8B,yFAKzC,CAAA;AAEF,eAAO,MAAM,uBAAuB,0UAgBlC,CAAA;AAEF,eAAO,MAAM,uBAAuB,iGAMlC,CAAA;AAEF,eAAO,MAAM,qBAAqB,uHAQhC,CAAA;AAEF,eAAO,MAAM,0BAA0B,yEAIrC,CAAA;AAEF,eAAO,MAAM,2BAA2B,uFAMtC,CAAA;AAEF,eAAO,MAAM,mBAAmB,mJAW9B,CAAA;AAEF,eAAO,MAAM,qBAAqB,8GAOhC,CAAA;AAEF,eAAO,MAAM,yBAAyB,sEAIpC,CAAA;AAEF,eAAO,MAAM,2BAA2B,8GAOtC,CAAA;AAEF,eAAO,MAAM,0BAA0B,6GAQrC,CAAA;AAEF,eAAO,MAAM,qCAAqC,uFAGjD,CAAA;AAED,eAAO,MAAM,4BAA4B,8FAMvC,CAAA;AAEF,eAAO,MAAM,2BAA2B,0EAKtC,CAAA;AAEF,eAAO,MAAM,8BAA8B,wFAKzC,CAAA;AAEF,eAAO,MAAM,8BAA8B,qEAGzC,CAAA;AAEF,eAAO,MAAM,0BAA0B,oEAIrC,CAAA;AAEF,eAAO,MAAM,2BAA2B,6DAGtC,CAAA"}
1
+ {"version":3,"file":"schema-shared.d.ts","sourceRoot":"","sources":["../src/schema-shared.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,iBAAiB,6HAQ5B,CAAA;AAEF,eAAO,MAAM,8BAA8B,yFAKzC,CAAA;AAEF,eAAO,MAAM,uBAAuB,uYAmBlC,CAAA;AAEF,eAAO,MAAM,uBAAuB,iGAMlC,CAAA;AAEF,eAAO,MAAM,qBAAqB,uHAQhC,CAAA;AAEF,eAAO,MAAM,0BAA0B,yEAIrC,CAAA;AAEF,eAAO,MAAM,2BAA2B,uFAMtC,CAAA;AAEF,eAAO,MAAM,mBAAmB,mJAW9B,CAAA;AAEF,eAAO,MAAM,qBAAqB,8GAOhC,CAAA;AAEF,eAAO,MAAM,yBAAyB,sEAIpC,CAAA;AAEF,eAAO,MAAM,2BAA2B,8GAOtC,CAAA;AAEF,eAAO,MAAM,0BAA0B,6GAQrC,CAAA;AAEF,eAAO,MAAM,qCAAqC,uFAGjD,CAAA;AAED,eAAO,MAAM,4BAA4B,8FAMvC,CAAA;AAEF,eAAO,MAAM,2BAA2B,0EAKtC,CAAA;AAEF,eAAO,MAAM,8BAA8B,wFAKzC,CAAA;AAEF,eAAO,MAAM,8BAA8B,qEAGzC,CAAA;AAEF,eAAO,MAAM,0BAA0B,oEAIrC,CAAA;AAEF,eAAO,MAAM,2BAA2B,6DAGtC,CAAA"}
@@ -19,9 +19,12 @@ export const bookingActivityTypeEnum = pgEnum("booking_activity_type", [
19
19
  "booking_reserved",
20
20
  "booking_converted",
21
21
  "booking_confirmed",
22
+ "booking_started",
23
+ "booking_completed",
22
24
  "hold_extended",
23
25
  "hold_expired",
24
26
  "status_change",
27
+ "status_overridden",
25
28
  "item_update",
26
29
  "allocation_released",
27
30
  "fulfillment_issued",
package/dist/service.d.ts CHANGED
@@ -2,18 +2,20 @@ import type { EventBus } from "@voyantjs/core";
2
2
  import type { PostgresJsDatabase } from "drizzle-orm/postgres-js";
3
3
  import type { z } from "zod";
4
4
  import { type BookingStatus } from "./state-machine.js";
5
- import type { bookingListQuerySchema, cancelBookingSchema, confirmBookingSchema, convertProductSchema, expireBookingSchema, expireStaleBookingsSchema, extendBookingHoldSchema, insertBookingDocumentSchema, insertBookingFulfillmentSchema, insertBookingItemParticipantSchema, insertBookingItemSchema, insertBookingNoteSchema, insertBookingSchema, insertTravelerRecordSchema, insertTravelerSchema, recordBookingRedemptionSchema, reserveBookingFromTransactionSchema, reserveBookingSchema, updateBookingFulfillmentSchema, updateBookingItemSchema, updateBookingSchema, updateBookingStatusSchema, updateTravelerRecordSchema, updateTravelerSchema } from "./validation.js";
5
+ import type { bookingListQuerySchema, cancelBookingSchema, completeBookingSchema, confirmBookingSchema, convertProductSchema, expireBookingSchema, expireStaleBookingsSchema, extendBookingHoldSchema, insertBookingDocumentSchema, insertBookingFulfillmentSchema, insertBookingItemParticipantSchema, insertBookingItemSchema, insertBookingNoteSchema, insertBookingSchema, insertTravelerRecordSchema, insertTravelerSchema, overrideBookingStatusSchema, recordBookingRedemptionSchema, reserveBookingFromTransactionSchema, reserveBookingSchema, startBookingSchema, updateBookingFulfillmentSchema, updateBookingItemSchema, updateBookingSchema, updateTravelerRecordSchema, updateTravelerSchema } from "./validation.js";
6
6
  type BookingListQuery = z.infer<typeof bookingListQuerySchema>;
7
7
  type ConvertProductInput = z.infer<typeof convertProductSchema>;
8
8
  type CreateBookingInput = z.infer<typeof insertBookingSchema>;
9
9
  type UpdateBookingInput = z.infer<typeof updateBookingSchema>;
10
- type UpdateBookingStatusInput = z.infer<typeof updateBookingStatusSchema>;
11
10
  type ReserveBookingInput = z.infer<typeof reserveBookingSchema>;
12
11
  type ExtendBookingHoldInput = z.infer<typeof extendBookingHoldSchema>;
13
12
  type ConfirmBookingInput = z.infer<typeof confirmBookingSchema>;
14
13
  type CancelBookingInput = z.infer<typeof cancelBookingSchema>;
15
14
  type ExpireBookingInput = z.infer<typeof expireBookingSchema>;
16
15
  type ExpireStaleBookingsInput = z.infer<typeof expireStaleBookingsSchema>;
16
+ type StartBookingInput = z.infer<typeof startBookingSchema>;
17
+ type CompleteBookingInput = z.infer<typeof completeBookingSchema>;
18
+ type OverrideBookingStatusInput = z.infer<typeof overrideBookingStatusSchema>;
17
19
  type CreateTravelerInput = z.infer<typeof insertTravelerSchema>;
18
20
  type UpdateTravelerInput = z.infer<typeof updateTravelerSchema>;
19
21
  type CreateTravelerRecordInput = z.infer<typeof insertTravelerRecordSchema>;
@@ -113,6 +115,31 @@ export interface BookingExpiredEvent {
113
115
  cause: "route" | "sweep";
114
116
  actorId: string | null;
115
117
  }
118
+ /** Payload for `booking.started` — confirmed → in_progress. */
119
+ export interface BookingStartedEvent {
120
+ bookingId: string;
121
+ bookingNumber: string;
122
+ actorId: string | null;
123
+ }
124
+ /** Payload for `booking.completed` — in_progress → completed. */
125
+ export interface BookingCompletedEvent {
126
+ bookingId: string;
127
+ bookingNumber: string;
128
+ actorId: string | null;
129
+ }
130
+ /**
131
+ * Payload for `booking.status_overridden`. Fires when an admin bypasses the
132
+ * transition graph. Subscribers should treat this as a privileged audit signal
133
+ * distinct from the normal lifecycle events — e.g. compliance dashboards.
134
+ */
135
+ export interface BookingStatusOverriddenEvent {
136
+ bookingId: string;
137
+ bookingNumber: string;
138
+ fromStatus: BookingStatus;
139
+ toStatus: BookingStatus;
140
+ reason: string;
141
+ actorId: string | null;
142
+ }
116
143
  export interface BookingAggregates {
117
144
  /** Total bookings across all statuses in range. */
118
145
  total: number;
@@ -1053,9 +1080,6 @@ export declare const bookingsService: {
1053
1080
  deleteBooking(db: PostgresJsDatabase, id: string): Promise<{
1054
1081
  id: string;
1055
1082
  } | null>;
1056
- updateBookingStatus(db: PostgresJsDatabase, id: string, data: UpdateBookingStatusInput, userId?: string, runtime?: BookingServiceRuntime): Promise<{
1057
- status: Exclude<string, "ok">;
1058
- }>;
1059
1083
  confirmBooking(db: PostgresJsDatabase, id: string, data: ConfirmBookingInput, userId?: string, runtime?: BookingServiceRuntime): Promise<{
1060
1084
  status: "ok";
1061
1085
  booking: {
@@ -1244,6 +1268,149 @@ export declare const bookingsService: {
1244
1268
  status: Exclude<string, "ok">;
1245
1269
  booking?: undefined;
1246
1270
  }>;
1271
+ startBooking(db: PostgresJsDatabase, id: string, data: StartBookingInput, userId?: string, runtime?: BookingServiceRuntime): Promise<{
1272
+ status: "ok";
1273
+ booking: {
1274
+ id: string;
1275
+ bookingNumber: string;
1276
+ status: "cancelled" | "draft" | "on_hold" | "confirmed" | "in_progress" | "completed" | "expired";
1277
+ personId: string | null;
1278
+ organizationId: string | null;
1279
+ sourceType: "internal" | "reseller" | "direct" | "manual" | "affiliate" | "ota" | "api_partner";
1280
+ externalBookingRef: string | null;
1281
+ communicationLanguage: string | null;
1282
+ contactFirstName: string | null;
1283
+ contactLastName: string | null;
1284
+ contactEmail: string | null;
1285
+ contactPhone: string | null;
1286
+ contactPreferredLanguage: string | null;
1287
+ contactCountry: string | null;
1288
+ contactRegion: string | null;
1289
+ contactCity: string | null;
1290
+ contactAddressLine1: string | null;
1291
+ contactPostalCode: string | null;
1292
+ sellCurrency: string;
1293
+ baseCurrency: string | null;
1294
+ fxRateSetId: string | null;
1295
+ sellAmountCents: number | null;
1296
+ baseSellAmountCents: number | null;
1297
+ costAmountCents: number | null;
1298
+ baseCostAmountCents: number | null;
1299
+ marginPercent: number | null;
1300
+ startDate: string | null;
1301
+ endDate: string | null;
1302
+ pax: number | null;
1303
+ internalNotes: string | null;
1304
+ holdExpiresAt: Date | null;
1305
+ confirmedAt: Date | null;
1306
+ expiredAt: Date | null;
1307
+ cancelledAt: Date | null;
1308
+ completedAt: Date | null;
1309
+ redeemedAt: Date | null;
1310
+ createdAt: Date;
1311
+ updatedAt: Date;
1312
+ } | null;
1313
+ } | {
1314
+ status: Exclude<string, "ok">;
1315
+ }>;
1316
+ completeBooking(db: PostgresJsDatabase, id: string, data: CompleteBookingInput, userId?: string, runtime?: BookingServiceRuntime): Promise<{
1317
+ status: "ok";
1318
+ booking: {
1319
+ id: string;
1320
+ bookingNumber: string;
1321
+ status: "cancelled" | "draft" | "on_hold" | "confirmed" | "in_progress" | "completed" | "expired";
1322
+ personId: string | null;
1323
+ organizationId: string | null;
1324
+ sourceType: "internal" | "reseller" | "direct" | "manual" | "affiliate" | "ota" | "api_partner";
1325
+ externalBookingRef: string | null;
1326
+ communicationLanguage: string | null;
1327
+ contactFirstName: string | null;
1328
+ contactLastName: string | null;
1329
+ contactEmail: string | null;
1330
+ contactPhone: string | null;
1331
+ contactPreferredLanguage: string | null;
1332
+ contactCountry: string | null;
1333
+ contactRegion: string | null;
1334
+ contactCity: string | null;
1335
+ contactAddressLine1: string | null;
1336
+ contactPostalCode: string | null;
1337
+ sellCurrency: string;
1338
+ baseCurrency: string | null;
1339
+ fxRateSetId: string | null;
1340
+ sellAmountCents: number | null;
1341
+ baseSellAmountCents: number | null;
1342
+ costAmountCents: number | null;
1343
+ baseCostAmountCents: number | null;
1344
+ marginPercent: number | null;
1345
+ startDate: string | null;
1346
+ endDate: string | null;
1347
+ pax: number | null;
1348
+ internalNotes: string | null;
1349
+ holdExpiresAt: Date | null;
1350
+ confirmedAt: Date | null;
1351
+ expiredAt: Date | null;
1352
+ cancelledAt: Date | null;
1353
+ completedAt: Date | null;
1354
+ redeemedAt: Date | null;
1355
+ createdAt: Date;
1356
+ updatedAt: Date;
1357
+ } | null;
1358
+ } | {
1359
+ status: Exclude<string, "ok">;
1360
+ }>;
1361
+ /**
1362
+ * Admin-only force: bypasses the transition graph. Updates the booking row
1363
+ * only — does NOT cascade to items, allocations, or fulfillments. If the
1364
+ * operator needs cascaded behavior (e.g. release allocations), they should
1365
+ * call the verb-specific method instead. The override is for data
1366
+ * correction; misuse leaves child state inconsistent with the parent.
1367
+ */
1368
+ overrideBookingStatus(db: PostgresJsDatabase, id: string, data: OverrideBookingStatusInput, userId?: string, runtime?: BookingServiceRuntime): Promise<{
1369
+ status: "ok";
1370
+ booking: {
1371
+ id: string;
1372
+ bookingNumber: string;
1373
+ status: "cancelled" | "draft" | "on_hold" | "confirmed" | "in_progress" | "completed" | "expired";
1374
+ personId: string | null;
1375
+ organizationId: string | null;
1376
+ sourceType: "internal" | "reseller" | "direct" | "manual" | "affiliate" | "ota" | "api_partner";
1377
+ externalBookingRef: string | null;
1378
+ communicationLanguage: string | null;
1379
+ contactFirstName: string | null;
1380
+ contactLastName: string | null;
1381
+ contactEmail: string | null;
1382
+ contactPhone: string | null;
1383
+ contactPreferredLanguage: string | null;
1384
+ contactCountry: string | null;
1385
+ contactRegion: string | null;
1386
+ contactCity: string | null;
1387
+ contactAddressLine1: string | null;
1388
+ contactPostalCode: string | null;
1389
+ sellCurrency: string;
1390
+ baseCurrency: string | null;
1391
+ fxRateSetId: string | null;
1392
+ sellAmountCents: number | null;
1393
+ baseSellAmountCents: number | null;
1394
+ costAmountCents: number | null;
1395
+ baseCostAmountCents: number | null;
1396
+ marginPercent: number | null;
1397
+ startDate: string | null;
1398
+ endDate: string | null;
1399
+ pax: number | null;
1400
+ internalNotes: string | null;
1401
+ holdExpiresAt: Date | null;
1402
+ confirmedAt: Date | null;
1403
+ expiredAt: Date | null;
1404
+ cancelledAt: Date | null;
1405
+ completedAt: Date | null;
1406
+ redeemedAt: Date | null;
1407
+ createdAt: Date;
1408
+ updatedAt: Date;
1409
+ } | null;
1410
+ } | {
1411
+ status: Exclude<string, "ok">;
1412
+ booking?: undefined;
1413
+ }>;
1247
1414
  listTravelerRecords(db: PostgresJsDatabase, bookingId: string): Omit<import("drizzle-orm/pg-core").PgSelectBase<"booking_travelers", {
1248
1415
  id: import("drizzle-orm/pg-core").PgColumn<{
1249
1416
  name: string;
@@ -4509,14 +4676,14 @@ export declare const bookingsService: {
4509
4676
  tableName: "booking_activity_log";
4510
4677
  dataType: "string";
4511
4678
  columnType: "PgEnumColumn";
4512
- data: "booking_created" | "booking_reserved" | "booking_converted" | "booking_confirmed" | "hold_extended" | "hold_expired" | "status_change" | "item_update" | "allocation_released" | "fulfillment_issued" | "fulfillment_updated" | "redemption_recorded" | "supplier_update" | "passenger_update" | "note_added";
4679
+ data: "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" | "passenger_update" | "note_added";
4513
4680
  driverParam: string;
4514
4681
  notNull: true;
4515
4682
  hasDefault: false;
4516
4683
  isPrimaryKey: false;
4517
4684
  isAutoincrement: false;
4518
4685
  hasRuntimeDefault: false;
4519
- enumValues: ["booking_created", "booking_reserved", "booking_converted", "booking_confirmed", "hold_extended", "hold_expired", "status_change", "item_update", "allocation_released", "fulfillment_issued", "fulfillment_updated", "redemption_recorded", "supplier_update", "passenger_update", "note_added"];
4686
+ enumValues: ["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", "passenger_update", "note_added"];
4520
4687
  baseColumn: never;
4521
4688
  identity: undefined;
4522
4689
  generated: undefined;
@@ -4578,7 +4745,7 @@ export declare const bookingsService: {
4578
4745
  id: string;
4579
4746
  bookingId: string;
4580
4747
  actorId: string | null;
4581
- activityType: "booking_created" | "booking_reserved" | "booking_converted" | "booking_confirmed" | "hold_extended" | "hold_expired" | "status_change" | "item_update" | "allocation_released" | "fulfillment_issued" | "fulfillment_updated" | "redemption_recorded" | "supplier_update" | "passenger_update" | "note_added";
4748
+ 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" | "passenger_update" | "note_added";
4582
4749
  description: string;
4583
4750
  metadata: Record<string, unknown> | null;
4584
4751
  createdAt: Date;
@@ -4639,14 +4806,14 @@ export declare const bookingsService: {
4639
4806
  tableName: "booking_activity_log";
4640
4807
  dataType: "string";
4641
4808
  columnType: "PgEnumColumn";
4642
- data: "booking_created" | "booking_reserved" | "booking_converted" | "booking_confirmed" | "hold_extended" | "hold_expired" | "status_change" | "item_update" | "allocation_released" | "fulfillment_issued" | "fulfillment_updated" | "redemption_recorded" | "supplier_update" | "passenger_update" | "note_added";
4809
+ data: "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" | "passenger_update" | "note_added";
4643
4810
  driverParam: string;
4644
4811
  notNull: true;
4645
4812
  hasDefault: false;
4646
4813
  isPrimaryKey: false;
4647
4814
  isAutoincrement: false;
4648
4815
  hasRuntimeDefault: false;
4649
- enumValues: ["booking_created", "booking_reserved", "booking_converted", "booking_confirmed", "hold_extended", "hold_expired", "status_change", "item_update", "allocation_released", "fulfillment_issued", "fulfillment_updated", "redemption_recorded", "supplier_update", "passenger_update", "note_added"];
4816
+ enumValues: ["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", "passenger_update", "note_added"];
4650
4817
  baseColumn: never;
4651
4818
  identity: undefined;
4652
4819
  generated: undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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"}
package/dist/service.js CHANGED
@@ -4,7 +4,7 @@ import { exchangeRatesRef } from "./markets-ref.js";
4
4
  import { bookingItemProductDetailsRef, bookingProductDetailsRef, optionUnitsRef, productDayServicesRef, productDaysRef, productItinerariesRef, productOptionsRef, productsRef, productTicketSettingsRef, } from "./products-ref.js";
5
5
  import { bookingActivityLog, bookingAllocations, bookingDocuments, bookingFulfillments, bookingItems, bookingItemTravelers, bookingNotes, bookingRedemptionEvents, bookingStaffAssignments, bookingSupplierStatuses, bookings, bookingTravelers, } from "./schema.js";
6
6
  import { cleanupGroupOnBookingCancelled } from "./service-groups.js";
7
- import { BookingTransitionError, canTransitionBooking, transitionBooking, } from "./state-machine.js";
7
+ import { canTransitionBooking, transitionBooking } from "./state-machine.js";
8
8
  import { bookingTransactionDetailsRef, offerItemParticipantsRef, offerItemsRef, offerParticipantsRef, offerStaffAssignmentsRef, offersRef, orderItemParticipantsRef, orderItemsRef, orderParticipantsRef, orderStaffAssignmentsRef, ordersRef, } from "./transactions-ref.js";
9
9
  const travelerParticipantTypes = ["traveler", "occupant"];
10
10
  class BookingServiceError extends Error {
@@ -1550,65 +1550,6 @@ export const bookingsService = {
1550
1550
  .returning({ id: bookings.id });
1551
1551
  return row ?? null;
1552
1552
  },
1553
- async updateBookingStatus(db, id, data, userId, runtime = {}) {
1554
- const [current] = await db
1555
- .select({ id: bookings.id, status: bookings.status })
1556
- .from(bookings)
1557
- .where(eq(bookings.id, id))
1558
- .limit(1);
1559
- if (!current) {
1560
- return { status: "not_found" };
1561
- }
1562
- if (current.status === "on_hold" && data.status === "confirmed") {
1563
- return bookingsService.confirmBooking(db, id, { note: data.note }, userId, runtime);
1564
- }
1565
- if (current.status === "on_hold" && data.status === "expired") {
1566
- return bookingsService.expireBooking(db, id, { note: data.note }, userId, runtime);
1567
- }
1568
- if (data.status === "cancelled") {
1569
- return bookingsService.cancelBooking(db, id, { note: data.note }, userId, runtime);
1570
- }
1571
- // `on_hold` is only reachable through `reserveBooking`, never via direct status PATCH.
1572
- if (data.status === "on_hold") {
1573
- return { status: "invalid_transition" };
1574
- }
1575
- let patch;
1576
- try {
1577
- patch = transitionBooking(current.status, data.status);
1578
- }
1579
- catch (error) {
1580
- if (error instanceof BookingTransitionError) {
1581
- return { status: "invalid_transition" };
1582
- }
1583
- throw error;
1584
- }
1585
- const [row] = await db
1586
- .update(bookings)
1587
- .set({
1588
- ...patch,
1589
- updatedAt: new Date(),
1590
- })
1591
- .where(eq(bookings.id, id))
1592
- .returning();
1593
- await db.insert(bookingActivityLog).values({
1594
- bookingId: id,
1595
- actorId: userId ?? "system",
1596
- activityType: "status_change",
1597
- description: `Status changed from ${current.status} to ${data.status}`,
1598
- metadata: { oldStatus: current.status, newStatus: data.status },
1599
- });
1600
- if (data.note) {
1601
- await db.insert(bookingNotes).values({
1602
- bookingId: id,
1603
- authorId: userId ?? "system",
1604
- content: data.note,
1605
- });
1606
- }
1607
- if (data.status === "confirmed") {
1608
- await autoIssueFulfillmentsForBooking(db, id, userId);
1609
- }
1610
- return { status: "ok", booking: row ?? null };
1611
- },
1612
1553
  async confirmBooking(db, id, data, userId, runtime = {}) {
1613
1554
  try {
1614
1555
  const result = await db.transaction(async (tx) => {
@@ -1919,6 +1860,198 @@ export const bookingsService = {
1919
1860
  throw error;
1920
1861
  }
1921
1862
  },
1863
+ async startBooking(db, id, data, userId, runtime = {}) {
1864
+ try {
1865
+ const result = await db.transaction(async (tx) => {
1866
+ const rows = await tx.execute(sql `SELECT id, booking_number, status
1867
+ FROM ${bookings}
1868
+ WHERE ${bookings.id} = ${id}
1869
+ FOR UPDATE`);
1870
+ const booking = rows[0];
1871
+ if (!booking) {
1872
+ throw new BookingServiceError("not_found");
1873
+ }
1874
+ if (!canTransitionBooking(booking.status, "in_progress")) {
1875
+ throw new BookingServiceError("invalid_transition");
1876
+ }
1877
+ const patch = transitionBooking(booking.status, "in_progress");
1878
+ const [row] = await tx
1879
+ .update(bookings)
1880
+ .set({
1881
+ ...patch,
1882
+ updatedAt: new Date(),
1883
+ })
1884
+ .where(eq(bookings.id, id))
1885
+ .returning();
1886
+ await tx.insert(bookingActivityLog).values({
1887
+ bookingId: id,
1888
+ actorId: userId ?? "system",
1889
+ activityType: "booking_started",
1890
+ description: `Booking ${booking.booking_number} started`,
1891
+ });
1892
+ if (data.note) {
1893
+ await tx.insert(bookingNotes).values({
1894
+ bookingId: id,
1895
+ authorId: userId ?? "system",
1896
+ content: data.note,
1897
+ });
1898
+ }
1899
+ return { status: "ok", booking: row ?? null };
1900
+ });
1901
+ if (result.status === "ok" && result.booking) {
1902
+ await runtime.eventBus?.emit("booking.started", {
1903
+ bookingId: result.booking.id,
1904
+ bookingNumber: result.booking.bookingNumber,
1905
+ actorId: userId ?? null,
1906
+ }, { category: "domain", source: "service" });
1907
+ }
1908
+ return result;
1909
+ }
1910
+ catch (error) {
1911
+ if (error instanceof BookingServiceError) {
1912
+ return { status: error.code };
1913
+ }
1914
+ throw error;
1915
+ }
1916
+ },
1917
+ async completeBooking(db, id, data, userId, runtime = {}) {
1918
+ try {
1919
+ const result = await db.transaction(async (tx) => {
1920
+ const rows = await tx.execute(sql `SELECT id, booking_number, status
1921
+ FROM ${bookings}
1922
+ WHERE ${bookings.id} = ${id}
1923
+ FOR UPDATE`);
1924
+ const booking = rows[0];
1925
+ if (!booking) {
1926
+ throw new BookingServiceError("not_found");
1927
+ }
1928
+ if (!canTransitionBooking(booking.status, "completed")) {
1929
+ throw new BookingServiceError("invalid_transition");
1930
+ }
1931
+ const patch = transitionBooking(booking.status, "completed");
1932
+ await tx
1933
+ .update(bookingAllocations)
1934
+ .set({ status: "fulfilled", updatedAt: new Date() })
1935
+ .where(and(eq(bookingAllocations.bookingId, id), eq(bookingAllocations.status, "confirmed")));
1936
+ await tx
1937
+ .update(bookingItems)
1938
+ .set({ status: "fulfilled", updatedAt: new Date() })
1939
+ .where(and(eq(bookingItems.bookingId, id), eq(bookingItems.status, "confirmed")));
1940
+ const [row] = await tx
1941
+ .update(bookings)
1942
+ .set({
1943
+ ...patch,
1944
+ updatedAt: new Date(),
1945
+ })
1946
+ .where(eq(bookings.id, id))
1947
+ .returning();
1948
+ await tx.insert(bookingActivityLog).values({
1949
+ bookingId: id,
1950
+ actorId: userId ?? "system",
1951
+ activityType: "booking_completed",
1952
+ description: `Booking ${booking.booking_number} completed`,
1953
+ });
1954
+ if (data.note) {
1955
+ await tx.insert(bookingNotes).values({
1956
+ bookingId: id,
1957
+ authorId: userId ?? "system",
1958
+ content: data.note,
1959
+ });
1960
+ }
1961
+ return { status: "ok", booking: row ?? null };
1962
+ });
1963
+ if (result.status === "ok" && result.booking) {
1964
+ await runtime.eventBus?.emit("booking.completed", {
1965
+ bookingId: result.booking.id,
1966
+ bookingNumber: result.booking.bookingNumber,
1967
+ actorId: userId ?? null,
1968
+ }, { category: "domain", source: "service" });
1969
+ }
1970
+ return result;
1971
+ }
1972
+ catch (error) {
1973
+ if (error instanceof BookingServiceError) {
1974
+ return { status: error.code };
1975
+ }
1976
+ throw error;
1977
+ }
1978
+ },
1979
+ /**
1980
+ * Admin-only force: bypasses the transition graph. Updates the booking row
1981
+ * only — does NOT cascade to items, allocations, or fulfillments. If the
1982
+ * operator needs cascaded behavior (e.g. release allocations), they should
1983
+ * call the verb-specific method instead. The override is for data
1984
+ * correction; misuse leaves child state inconsistent with the parent.
1985
+ */
1986
+ async overrideBookingStatus(db, id, data, userId, runtime = {}) {
1987
+ try {
1988
+ const result = await db.transaction(async (tx) => {
1989
+ const rows = await tx.execute(sql `SELECT id, booking_number, status
1990
+ FROM ${bookings}
1991
+ WHERE ${bookings.id} = ${id}
1992
+ FOR UPDATE`);
1993
+ const booking = rows[0];
1994
+ if (!booking) {
1995
+ throw new BookingServiceError("not_found");
1996
+ }
1997
+ const now = new Date();
1998
+ const updates = {
1999
+ status: data.status,
2000
+ updatedAt: now,
2001
+ };
2002
+ if (data.status === "confirmed")
2003
+ updates.confirmedAt = now;
2004
+ if (data.status === "expired")
2005
+ updates.expiredAt = now;
2006
+ if (data.status === "cancelled")
2007
+ updates.cancelledAt = now;
2008
+ if (data.status === "completed")
2009
+ updates.completedAt = now;
2010
+ const [row] = await tx.update(bookings).set(updates).where(eq(bookings.id, id)).returning();
2011
+ await tx.insert(bookingActivityLog).values({
2012
+ bookingId: id,
2013
+ actorId: userId ?? "system",
2014
+ activityType: "status_overridden",
2015
+ description: `Booking status overridden from ${booking.status} to ${data.status}`,
2016
+ metadata: {
2017
+ oldStatus: booking.status,
2018
+ newStatus: data.status,
2019
+ reason: data.reason,
2020
+ },
2021
+ });
2022
+ if (data.note) {
2023
+ await tx.insert(bookingNotes).values({
2024
+ bookingId: id,
2025
+ authorId: userId ?? "system",
2026
+ content: data.note,
2027
+ });
2028
+ }
2029
+ return {
2030
+ status: "ok",
2031
+ booking: row ?? null,
2032
+ fromStatus: booking.status,
2033
+ toStatus: data.status,
2034
+ };
2035
+ });
2036
+ if (result.status === "ok" && result.booking) {
2037
+ await runtime.eventBus?.emit("booking.status_overridden", {
2038
+ bookingId: result.booking.id,
2039
+ bookingNumber: result.booking.bookingNumber,
2040
+ fromStatus: result.fromStatus,
2041
+ toStatus: result.toStatus,
2042
+ reason: data.reason,
2043
+ actorId: userId ?? null,
2044
+ }, { category: "domain", source: "service" });
2045
+ }
2046
+ return { status: result.status, booking: result.booking };
2047
+ }
2048
+ catch (error) {
2049
+ if (error instanceof BookingServiceError) {
2050
+ return { status: error.code };
2051
+ }
2052
+ throw error;
2053
+ }
2054
+ },
1922
2055
  listTravelerRecords(db, bookingId) {
1923
2056
  return db
1924
2057
  .select()
@@ -191,18 +191,6 @@ export declare const pricingPreviewSchema: z.ZodObject<{
191
191
  optionId: z.ZodNullable<z.ZodOptional<z.ZodString>>;
192
192
  catalogId: z.ZodNullable<z.ZodOptional<z.ZodString>>;
193
193
  }, z.core.$strip>;
194
- export declare const updateBookingStatusSchema: z.ZodObject<{
195
- status: z.ZodEnum<{
196
- cancelled: "cancelled";
197
- draft: "draft";
198
- on_hold: "on_hold";
199
- confirmed: "confirmed";
200
- in_progress: "in_progress";
201
- completed: "completed";
202
- expired: "expired";
203
- }>;
204
- note: z.ZodNullable<z.ZodOptional<z.ZodString>>;
205
- }, z.core.$strip>;
206
194
  export declare const reserveBookingItemSchema: z.ZodObject<{
207
195
  title: z.ZodString;
208
196
  description: z.ZodNullable<z.ZodOptional<z.ZodString>>;
@@ -333,6 +321,31 @@ export declare const expireStaleBookingsSchema: z.ZodObject<{
333
321
  before: z.ZodNullable<z.ZodOptional<z.ZodString>>;
334
322
  note: z.ZodNullable<z.ZodOptional<z.ZodString>>;
335
323
  }, z.core.$strip>;
324
+ export declare const startBookingSchema: z.ZodObject<{
325
+ note: z.ZodNullable<z.ZodOptional<z.ZodString>>;
326
+ }, z.core.$strip>;
327
+ export declare const completeBookingSchema: z.ZodObject<{
328
+ note: z.ZodNullable<z.ZodOptional<z.ZodString>>;
329
+ }, z.core.$strip>;
330
+ /**
331
+ * Admin-only override: skips the transition graph. `reason` is required —
332
+ * the operator has to explain why they're bypassing lifecycle laws. Use the
333
+ * verb-specific endpoints (/confirm, /cancel, /start, /complete, /expire) for
334
+ * normal state changes; this is for data-correction and exceptional cases.
335
+ */
336
+ export declare const overrideBookingStatusSchema: z.ZodObject<{
337
+ status: z.ZodEnum<{
338
+ cancelled: "cancelled";
339
+ draft: "draft";
340
+ on_hold: "on_hold";
341
+ confirmed: "confirmed";
342
+ in_progress: "in_progress";
343
+ completed: "completed";
344
+ expired: "expired";
345
+ }>;
346
+ reason: z.ZodString;
347
+ note: z.ZodNullable<z.ZodOptional<z.ZodString>>;
348
+ }, z.core.$strip>;
336
349
  export declare const reserveBookingFromTransactionSchema: z.ZodObject<{
337
350
  bookingNumber: z.ZodString;
338
351
  contactFirstName: z.ZodNullable<z.ZodOptional<z.ZodString>>;
@@ -1 +1 @@
1
- {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AA2DvB,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAAoB,CAAA;AACpD,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAA8B,CAAA;AAE9D,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAW5B,CAAA;AAEJ,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;iBASjC,CAAA;AAEF,eAAO,MAAM,4BAA4B;;;iBAGvC,CAAA;AAEF,eAAO,MAAM,oBAAoB;;;;;;;;iBAQ/B,CAAA;AAEF;;;;GAIG;AACH,eAAO,MAAM,oBAAoB;;;;iBAI/B,CAAA;AAEF,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAqBnC,CAAA;AAEF,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAmB7B,CAAA;AAEJ,eAAO,MAAM,uBAAuB;;;iBAYhC,CAAA;AAEJ,eAAO,MAAM,oBAAoB;;iBAE/B,CAAA;AAEF,eAAO,MAAM,mBAAmB;;iBAE9B,CAAA;AAEF,eAAO,MAAM,mBAAmB;;iBAE9B,CAAA;AAEF,eAAO,MAAM,yBAAyB;;;iBAGpC,CAAA;AAEF,eAAO,MAAM,kBAAkB;;iBAE7B,CAAA;AAEF,eAAO,MAAM,qBAAqB;;iBAEhC,CAAA;AAEF;;;;;GAKG;AACH,eAAO,MAAM,2BAA2B;;;;;;;;;;;;iBAItC,CAAA;AAEF,eAAO,MAAM,mCAAmC;;;;;;;;;;;;;;;;;;;;;;;;;;iBA2B5C,CAAA;AAgCJ,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;iBAAqB,CAAA;AACtD,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;iBAA+B,CAAA;AAChE,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;iBAA2B,CAAA;AAClE,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;iBAAqC,CAAA;AAI5E,eAAO,MAAM,iCAAiC;;;;;;;iBAO5C,CAAA;AA6BF,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAAwB,CAAA;AAC5D,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAAkC,CAAA;AAEtE,eAAO,MAAM,6BAA6B;;;;;;;;;;;;;;;;;;;;;;;;;iBAcxC,CAAA;AAEF,eAAO,MAAM,6BAA6B;;;;;;;;;;;;;;;;;;;;;;;;;iBAA0C,CAAA;AAgBpF,eAAO,MAAM,8BAA8B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAK1C,CAAA;AAED,eAAO,MAAM,8BAA8B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAKtC,CAAA;AAIL,eAAO,MAAM,6BAA6B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAarC,CAAA;AAIL,eAAO,MAAM,+BAA+B;;;;;;;;;;;;;;;;;GAavC,CAAA;AAEL,eAAO,MAAM,kCAAkC;;;;;;;;;;;;;;;;;GAAkC,CAAA;AAcjF,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;iBAA2B,CAAA;AAClE,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;iBAErC,CAAA;AAIF,eAAO,MAAM,uBAAuB;;iBAElC,CAAA;AAIF,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;GAYnC,CAAA;AAEL,eAAO,MAAM,mCAAmC;;;;;;;;;;;;;;;;;;;;;;;;;;;GAA8B,CAAA;AAI9E,eAAO,MAAM,sBAAsB;;;EAAmC,CAAA;AACtE,eAAO,MAAM,4BAA4B;;;EAAgC,CAAA;AAWzE,eAAO,MAAM,wBAAwB;;;;;;;;;;iBAAyB,CAAA;AAC9D,eAAO,MAAM,wBAAwB;;;;;;;;;;iBAAmC,CAAA;AAExE,eAAO,MAAM,2BAA2B;;;;;;iBAGtC,CAAA;AAEF,eAAO,MAAM,2BAA2B;;;;;;;;;iBAMtC,CAAA;AAEF,cAAc,wBAAwB,CAAA;AACtC,cAAc,wBAAwB,CAAA"}
@@ -84,10 +84,6 @@ export const pricingPreviewSchema = z.object({
84
84
  optionId: z.string().optional().nullable(),
85
85
  catalogId: z.string().optional().nullable(),
86
86
  });
87
- export const updateBookingStatusSchema = z.object({
88
- status: bookingStatusSchema,
89
- note: z.string().optional().nullable(),
90
- });
91
87
  export const reserveBookingItemSchema = z.object({
92
88
  title: z.string().min(1).max(255),
93
89
  description: z.string().optional().nullable(),
@@ -156,6 +152,23 @@ export const expireStaleBookingsSchema = z.object({
156
152
  before: z.string().datetime().optional().nullable(),
157
153
  note: z.string().optional().nullable(),
158
154
  });
155
+ export const startBookingSchema = z.object({
156
+ note: z.string().optional().nullable(),
157
+ });
158
+ export const completeBookingSchema = z.object({
159
+ note: z.string().optional().nullable(),
160
+ });
161
+ /**
162
+ * Admin-only override: skips the transition graph. `reason` is required —
163
+ * the operator has to explain why they're bypassing lifecycle laws. Use the
164
+ * verb-specific endpoints (/confirm, /cancel, /start, /complete, /expire) for
165
+ * normal state changes; this is for data-correction and exceptional cases.
166
+ */
167
+ export const overrideBookingStatusSchema = z.object({
168
+ status: bookingStatusSchema,
169
+ reason: z.string().min(1).max(2000),
170
+ note: z.string().optional().nullable(),
171
+ });
159
172
  export const reserveBookingFromTransactionSchema = bookingCoreSchema
160
173
  .pick({
161
174
  bookingNumber: true,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@voyantjs/bookings",
3
- "version": "0.10.0",
3
+ "version": "0.11.0",
4
4
  "license": "FSL-1.1-Apache-2.0",
5
5
  "type": "module",
6
6
  "exports": {
@@ -49,15 +49,15 @@
49
49
  "drizzle-orm": "^0.45.2",
50
50
  "hono": "^4.12.10",
51
51
  "zod": "^4.3.6",
52
- "@voyantjs/core": "0.10.0",
53
- "@voyantjs/db": "0.10.0",
54
- "@voyantjs/hono": "0.10.0",
55
- "@voyantjs/utils": "0.10.0"
52
+ "@voyantjs/core": "0.11.0",
53
+ "@voyantjs/db": "0.11.0",
54
+ "@voyantjs/hono": "0.11.0",
55
+ "@voyantjs/utils": "0.11.0"
56
56
  },
57
57
  "devDependencies": {
58
58
  "typescript": "^6.0.2",
59
- "@voyantjs/markets": "0.10.0",
60
- "@voyantjs/products": "0.10.0",
59
+ "@voyantjs/markets": "0.11.0",
60
+ "@voyantjs/products": "0.11.0",
61
61
  "@voyantjs/voyant-typescript-config": "0.1.0"
62
62
  },
63
63
  "files": [