@voyantjs/bookings 0.20.0 → 0.21.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.
Files changed (43) hide show
  1. package/dist/index.d.ts +1 -1
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +1 -0
  4. package/dist/pii-redaction.d.ts +3 -6
  5. package/dist/pii-redaction.d.ts.map +1 -1
  6. package/dist/pii-redaction.js +5 -6
  7. package/dist/products-ref.d.ts +75 -0
  8. package/dist/products-ref.d.ts.map +1 -1
  9. package/dist/products-ref.js +6 -0
  10. package/dist/routes-groups.d.ts +8 -2
  11. package/dist/routes-groups.d.ts.map +1 -1
  12. package/dist/routes-public.d.ts +4 -4
  13. package/dist/routes.d.ts +83 -21
  14. package/dist/routes.d.ts.map +1 -1
  15. package/dist/routes.js +50 -0
  16. package/dist/schema-core.d.ts +53 -2
  17. package/dist/schema-core.d.ts.map +1 -1
  18. package/dist/schema-core.js +15 -0
  19. package/dist/schema-items.d.ts +1 -1
  20. package/dist/schema-operations.d.ts +2 -2
  21. package/dist/schema-shared.d.ts +2 -2
  22. package/dist/schema-shared.d.ts.map +1 -1
  23. package/dist/schema-shared.js +11 -0
  24. package/dist/service-public.d.ts +10 -10
  25. package/dist/service.d.ts +140 -27
  26. package/dist/service.d.ts.map +1 -1
  27. package/dist/service.js +313 -31
  28. package/dist/state-machine.d.ts +11 -2
  29. package/dist/state-machine.d.ts.map +1 -1
  30. package/dist/state-machine.js +9 -3
  31. package/dist/tasks/expire-stale-holds.d.ts +2 -1
  32. package/dist/tasks/expire-stale-holds.d.ts.map +1 -1
  33. package/dist/tasks/expire-stale-holds.js +2 -2
  34. package/dist/validation-public.d.ts +6 -3
  35. package/dist/validation-public.d.ts.map +1 -1
  36. package/dist/validation-public.js +1 -1
  37. package/dist/validation-shared.d.ts +2 -1
  38. package/dist/validation-shared.d.ts.map +1 -1
  39. package/dist/validation-shared.js +1 -0
  40. package/dist/validation.d.ts +69 -8
  41. package/dist/validation.d.ts.map +1 -1
  42. package/dist/validation.js +14 -2
  43. package/package.json +6 -7
package/dist/index.d.ts CHANGED
@@ -7,7 +7,7 @@ export { type PiiAccessContext, redactBookingContact, redactEmail, redactPhone,
7
7
  export type { ConvertProductData, CreateTravelerWithTravelDetailsInput, UpdateTravelerWithTravelDetailsInput, } from "./service.js";
8
8
  export { bookingsService } from "./service.js";
9
9
  export { type AddBookingGroupMemberInput, type BookingGroupListQuery, type BookingGroupMemberWithBooking, bookingGroupsService, type CreateBookingGroupInput, listGroupBookingTravelers, type UpdateBookingGroupInput, } from "./service-groups.js";
10
- export type { BookingStatus } from "./state-machine.js";
10
+ export { BOOKING_TRANSITIONS, type BookingStatus, type BookingStatusPatch, BookingTransitionError, canTransitionBooking, transitionBooking, } from "./state-machine.js";
11
11
  export { type BookingStatusDispatchTarget, dispatchBookingStatusChange, } from "./status-dispatch.js";
12
12
  export { type ExpireStaleBookingHoldsInput, type ExpireStaleBookingHoldsResult, expireStaleBookingHolds, } from "./tasks/index.js";
13
13
  export declare const bookingLinkable: LinkableDefinition;
@@ -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,6 +6,7 @@ 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";
9
10
  export { dispatchBookingStatusChange, } from "./status-dispatch.js";
10
11
  export { expireStaleBookingHolds, } from "./tasks/index.js";
11
12
  export const bookingLinkable = {
@@ -26,12 +26,9 @@ export interface PiiAccessContext {
26
26
  /**
27
27
  * Returns true when the caller has earned the right to see PII in the clear.
28
28
  *
29
- * Internal requests (server-to-server inside the trust boundary) and API
30
- * keys with explicit `bookings-pii:read` scope (or superuser `*`) reveal.
31
- * Plain staff sessions WITHOUT the scope do NOT reveal — staff are
32
- * authorised to see *some* booking data but not necessarily the contact
33
- * identifiers. This makes "give the new agent a read-only role" safe by
34
- * default; granting `bookings-pii:read` is an explicit decision.
29
+ * Internal requests (server-to-server inside the trust boundary), staff
30
+ * dashboard sessions, and API keys with explicit `bookings-pii:read`
31
+ * scope (or superuser `*`) reveal.
35
32
  */
36
33
  export declare function shouldRevealBookingPii(ctx: PiiAccessContext): boolean;
37
34
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"pii-redaction.d.ts","sourceRoot":"","sources":["../src/pii-redaction.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAMH,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;IACxB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,iBAAiB,CAAC,EAAE,OAAO,CAAA;CAC5B;AAED;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAQrE;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAQ3E;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAK3E;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAG5E;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,CAAC,SAAS;IACR,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAChC,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC/B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,mBAAmB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACnC,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAClC,EACD,GAAG,EAAE,CAAC,GAAG,CAAC,CAUX;AAED;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CACpC,CAAC,SAAS;IACR,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC/B,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CACtB,EACD,GAAG,EAAE,CAAC,GAAG,CAAC,CAUX"}
1
+ {"version":3,"file":"pii-redaction.d.ts","sourceRoot":"","sources":["../src/pii-redaction.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAMH,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;IACxB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,iBAAiB,CAAC,EAAE,OAAO,CAAA;CAC5B;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CASrE;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAQ3E;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAK3E;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAG5E;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,CAAC,SAAS;IACR,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAChC,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC/B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,mBAAmB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACnC,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAClC,EACD,GAAG,EAAE,CAAC,GAAG,CAAC,CAUX;AAED;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CACpC,CAAC,SAAS;IACR,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC/B,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CACtB,EACD,GAAG,EAAE,CAAC,GAAG,CAAC,CAUX"}
@@ -23,16 +23,15 @@ const SUPERUSER_SCOPE = "*";
23
23
  /**
24
24
  * Returns true when the caller has earned the right to see PII in the clear.
25
25
  *
26
- * Internal requests (server-to-server inside the trust boundary) and API
27
- * keys with explicit `bookings-pii:read` scope (or superuser `*`) reveal.
28
- * Plain staff sessions WITHOUT the scope do NOT reveal — staff are
29
- * authorised to see *some* booking data but not necessarily the contact
30
- * identifiers. This makes "give the new agent a read-only role" safe by
31
- * default; granting `bookings-pii:read` is an explicit decision.
26
+ * Internal requests (server-to-server inside the trust boundary), staff
27
+ * dashboard sessions, and API keys with explicit `bookings-pii:read`
28
+ * scope (or superuser `*`) reveal.
32
29
  */
33
30
  export function shouldRevealBookingPii(ctx) {
34
31
  if (ctx.isInternalRequest)
35
32
  return true;
33
+ if (ctx.actor === "staff")
34
+ return true;
36
35
  const scopes = ctx.scopes ?? [];
37
36
  return (scopes.includes(SUPERUSER_SCOPE) ||
38
37
  scopes.includes(PII_SCOPE_ANY) ||
@@ -104,6 +104,23 @@ export declare const productsRef: import("drizzle-orm/pg-core").PgTableWithColum
104
104
  identity: undefined;
105
105
  generated: undefined;
106
106
  }, {}, {}>;
107
+ reservationTimeoutMinutes: import("drizzle-orm/pg-core").PgColumn<{
108
+ name: "reservation_timeout_minutes";
109
+ tableName: "products";
110
+ dataType: "number";
111
+ columnType: "PgInteger";
112
+ data: number;
113
+ driverParam: string | number;
114
+ notNull: false;
115
+ hasDefault: false;
116
+ isPrimaryKey: false;
117
+ isAutoincrement: false;
118
+ hasRuntimeDefault: false;
119
+ enumValues: undefined;
120
+ baseColumn: never;
121
+ identity: undefined;
122
+ generated: undefined;
123
+ }, {}, {}>;
107
124
  sellCurrency: import("drizzle-orm/pg-core").PgColumn<{
108
125
  name: "sell_currency";
109
126
  tableName: "products";
@@ -172,6 +189,23 @@ export declare const productsRef: import("drizzle-orm/pg-core").PgTableWithColum
172
189
  identity: undefined;
173
190
  generated: undefined;
174
191
  }, {}, {}>;
192
+ supplierId: import("drizzle-orm/pg-core").PgColumn<{
193
+ name: "supplier_id";
194
+ tableName: "products";
195
+ dataType: "string";
196
+ columnType: "PgText";
197
+ data: string;
198
+ driverParam: string;
199
+ notNull: false;
200
+ hasDefault: false;
201
+ isPrimaryKey: false;
202
+ isAutoincrement: false;
203
+ hasRuntimeDefault: false;
204
+ enumValues: [string, ...string[]];
205
+ baseColumn: never;
206
+ identity: undefined;
207
+ generated: undefined;
208
+ }, {}, {}>;
175
209
  startDate: import("drizzle-orm/pg-core").PgColumn<{
176
210
  name: "start_date";
177
211
  tableName: "products";
@@ -226,6 +260,47 @@ export declare const productsRef: import("drizzle-orm/pg-core").PgTableWithColum
226
260
  };
227
261
  dialect: "pg";
228
262
  }>;
263
+ export declare const suppliersRef: import("drizzle-orm/pg-core").PgTableWithColumns<{
264
+ name: "suppliers";
265
+ schema: undefined;
266
+ columns: {
267
+ id: import("drizzle-orm/pg-core").PgColumn<{
268
+ name: string;
269
+ tableName: "suppliers";
270
+ dataType: "string";
271
+ columnType: "PgText";
272
+ data: string;
273
+ driverParam: string;
274
+ notNull: true;
275
+ hasDefault: true;
276
+ isPrimaryKey: true;
277
+ isAutoincrement: false;
278
+ hasRuntimeDefault: true;
279
+ enumValues: [string, ...string[]];
280
+ baseColumn: never;
281
+ identity: undefined;
282
+ generated: undefined;
283
+ }, {}, {}>;
284
+ reservationTimeoutMinutes: import("drizzle-orm/pg-core").PgColumn<{
285
+ name: "reservation_timeout_minutes";
286
+ tableName: "suppliers";
287
+ dataType: "number";
288
+ columnType: "PgInteger";
289
+ data: number;
290
+ driverParam: string | number;
291
+ notNull: false;
292
+ hasDefault: false;
293
+ isPrimaryKey: false;
294
+ isAutoincrement: false;
295
+ hasRuntimeDefault: false;
296
+ enumValues: undefined;
297
+ baseColumn: never;
298
+ identity: undefined;
299
+ generated: undefined;
300
+ }, {}, {}>;
301
+ };
302
+ dialect: "pg";
303
+ }>;
229
304
  export declare const productOptionsRef: import("drizzle-orm/pg-core").PgTableWithColumns<{
230
305
  name: "product_options";
231
306
  schema: undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"products-ref.d.ts","sourceRoot":"","sources":["../src/products-ref.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EActB,CAAA;AAEF,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAQ5B,CAAA;AAEF,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiBzB,CAAA;AAEF,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAMhC,CAAA;AAMF,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAIzB,CAAA;AAEF,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAahC,CAAA;AAEF,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAMnC,CAAA;AAEF,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAMnC,CAAA;AAEF,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAQvC,CAAA"}
1
+ {"version":3,"file":"products-ref.d.ts","sourceRoot":"","sources":["../src/products-ref.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgBtB,CAAA;AAEF,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAGvB,CAAA;AAEF,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAQ5B,CAAA;AAEF,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiBzB,CAAA;AAEF,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAMhC,CAAA;AAMF,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAIzB,CAAA;AAEF,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAahC,CAAA;AAEF,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAMnC,CAAA;AAEF,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAMnC,CAAA;AAEF,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAQvC,CAAA"}
@@ -7,14 +7,20 @@ export const productsRef = pgTable("products", {
7
7
  description: text("description"),
8
8
  visibility: text("visibility").notNull(),
9
9
  activated: boolean("activated").notNull().default(false),
10
+ reservationTimeoutMinutes: integer("reservation_timeout_minutes"),
10
11
  sellCurrency: text("sell_currency").notNull(),
11
12
  sellAmountCents: integer("sell_amount_cents"),
12
13
  costAmountCents: integer("cost_amount_cents"),
13
14
  marginPercent: integer("margin_percent"),
15
+ supplierId: text("supplier_id"),
14
16
  startDate: date("start_date"),
15
17
  endDate: date("end_date"),
16
18
  pax: integer("pax"),
17
19
  });
20
+ export const suppliersRef = pgTable("suppliers", {
21
+ id: typeId("suppliers").primaryKey(),
22
+ reservationTimeoutMinutes: integer("reservation_timeout_minutes"),
23
+ });
18
24
  export const productOptionsRef = pgTable("product_options", {
19
25
  id: typeId("product_options").primaryKey(),
20
26
  productId: typeIdRef("product_id").notNull(),
@@ -83,7 +83,7 @@ export declare const bookingGroupRoutes: import("hono/hono-base").HonoBase<Env,
83
83
  groupId: string;
84
84
  booking: {
85
85
  id: string;
86
- status: "cancelled" | "draft" | "on_hold" | "confirmed" | "in_progress" | "completed" | "expired";
86
+ status: "cancelled" | "draft" | "on_hold" | "awaiting_payment" | "confirmed" | "in_progress" | "completed" | "expired";
87
87
  createdAt: string;
88
88
  updatedAt: string;
89
89
  organizationId: string | null;
@@ -115,11 +115,14 @@ export declare const bookingGroupRoutes: import("hono/hono-base").HonoBase<Env,
115
115
  marginPercent: number | null;
116
116
  pax: number | null;
117
117
  internalNotes: string | null;
118
+ customerPaymentPolicy: import("hono/utils/types").JSONValue;
118
119
  holdExpiresAt: string | null;
119
120
  confirmedAt: string | null;
120
121
  expiredAt: string | null;
121
122
  cancelledAt: string | null;
122
123
  completedAt: string | null;
124
+ awaitingPaymentAt: string | null;
125
+ paidAt: string | null;
123
126
  } | null;
124
127
  }[];
125
128
  id: string;
@@ -220,7 +223,7 @@ export declare const bookingGroupRoutes: import("hono/hono-base").HonoBase<Env,
220
223
  groupId: string;
221
224
  booking: {
222
225
  id: string;
223
- status: "cancelled" | "draft" | "on_hold" | "confirmed" | "in_progress" | "completed" | "expired";
226
+ status: "cancelled" | "draft" | "on_hold" | "awaiting_payment" | "confirmed" | "in_progress" | "completed" | "expired";
224
227
  createdAt: string;
225
228
  updatedAt: string;
226
229
  organizationId: string | null;
@@ -252,11 +255,14 @@ export declare const bookingGroupRoutes: import("hono/hono-base").HonoBase<Env,
252
255
  marginPercent: number | null;
253
256
  pax: number | null;
254
257
  internalNotes: string | null;
258
+ customerPaymentPolicy: import("hono/utils/types").JSONValue;
255
259
  holdExpiresAt: string | null;
256
260
  confirmedAt: string | null;
257
261
  expiredAt: string | null;
258
262
  cancelledAt: string | null;
259
263
  completedAt: string | null;
264
+ awaitingPaymentAt: string | null;
265
+ paidAt: string | null;
260
266
  } | null;
261
267
  }[];
262
268
  };
@@ -1 +1 @@
1
- {"version":3,"file":"routes-groups.d.ts","sourceRoot":"","sources":["../src/routes-groups.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAQ1D,KAAK,GAAG,GAAG;IACT,SAAS,EAAE;QACT,EAAE,EAAE,UAAU,CAAC,OAAO,oBAAoB,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAA;QAChE,MAAM,CAAC,EAAE,MAAM,CAAA;KAChB,CAAA;CACF,CAAA;AAED,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;yBA0E3B,CAAA;AAEJ,MAAM,MAAM,kBAAkB,GAAG,OAAO,kBAAkB,CAAA"}
1
+ {"version":3,"file":"routes-groups.d.ts","sourceRoot":"","sources":["../src/routes-groups.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAQ1D,KAAK,GAAG,GAAG;IACT,SAAS,EAAE;QACT,EAAE,EAAE,UAAU,CAAC,OAAO,oBAAoB,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAA;QAChE,MAAM,CAAC,EAAE,MAAM,CAAA;KAChB,CAAA;CACF,CAAA;AAED,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;yBA0E3B,CAAA;AAEJ,MAAM,MAAM,kBAAkB,GAAG,OAAO,kBAAkB,CAAA"}
@@ -36,7 +36,7 @@ export declare const publicBookingRoutes: import("hono/hono-base").HonoBase<Env,
36
36
  data: {
37
37
  sessionId: string;
38
38
  bookingNumber: string;
39
- status: "cancelled" | "draft" | "on_hold" | "confirmed" | "in_progress" | "completed" | "expired";
39
+ status: "cancelled" | "draft" | "on_hold" | "awaiting_payment" | "confirmed" | "in_progress" | "completed" | "expired";
40
40
  externalBookingRef: string | null;
41
41
  communicationLanguage: string | null;
42
42
  sellCurrency: string;
@@ -321,7 +321,7 @@ export declare const publicBookingRoutes: import("hono/hono-base").HonoBase<Env,
321
321
  session: {
322
322
  sessionId: string;
323
323
  bookingNumber: string;
324
- status: "cancelled" | "draft" | "on_hold" | "confirmed" | "in_progress" | "completed" | "expired";
324
+ status: "cancelled" | "draft" | "on_hold" | "awaiting_payment" | "confirmed" | "in_progress" | "completed" | "expired";
325
325
  externalBookingRef: string | null;
326
326
  communicationLanguage: string | null;
327
327
  sellCurrency: string;
@@ -505,7 +505,7 @@ export declare const publicBookingRoutes: import("hono/hono-base").HonoBase<Env,
505
505
  data: {
506
506
  bookingId: string;
507
507
  bookingNumber: string;
508
- status: "cancelled" | "draft" | "on_hold" | "confirmed" | "in_progress" | "completed" | "expired";
508
+ status: "cancelled" | "draft" | "on_hold" | "awaiting_payment" | "confirmed" | "in_progress" | "completed" | "expired";
509
509
  sellCurrency: string;
510
510
  sellAmountCents: number | null;
511
511
  startDate: string | null;
@@ -562,7 +562,7 @@ export declare const publicBookingRoutes: import("hono/hono-base").HonoBase<Env,
562
562
  travelerId: string | null;
563
563
  fulfillmentType: "other" | "voucher" | "ticket" | "pdf" | "qr_code" | "barcode" | "mobile";
564
564
  deliveryChannel: "email" | "other" | "download" | "api" | "wallet";
565
- status: "pending" | "issued" | "reissued" | "revoked" | "failed";
565
+ status: "pending" | "failed" | "issued" | "reissued" | "revoked";
566
566
  artifactUrl: string | null;
567
567
  }[];
568
568
  };