@voyantjs/bookings 0.80.18 → 0.81.1

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.
@@ -0,0 +1,259 @@
1
+ /**
2
+ * Pure, transport-agnostic logic for mapping travelers onto option_units
3
+ * at booking-create time. Lives in `@voyantjs/bookings` so the
4
+ * booking-create dialog (preview + submit) is the only call site today,
5
+ * but the server can import the same module to validate or re-resolve
6
+ * submit payloads in a follow-up — that wiring is not yet in place.
7
+ *
8
+ * Vocabulary:
9
+ * - A **pricing tier** (`unit_type='person'`) is a per-pax price band
10
+ * a traveler is billed as (Adult / Child 6-12 / Infant 0-5 / …).
11
+ * - An **inventory unit** (`'room' | 'vehicle' | 'seat'`) is a finite
12
+ * container a traveler is placed into (one DBL room holds 2 pax).
13
+ * - "Person-priced options" are options that only have pricing tiers
14
+ * (no inventory). Excursions. For these, line-item quantities
15
+ * **derive from the traveler list** (1 adult + 1 child + 1 infant).
16
+ * - "Accommodation options" have inventory units (and usually a
17
+ * paired person unit for per-pax fees). For these, line-item
18
+ * quantities **stay as the operator picked them** (1 DBL room is
19
+ * still 1 line, not 2).
20
+ *
21
+ * The `roomUnitAssignmentSource` enum on the traveler tracks operator
22
+ * intent so the resolver knows when to re-derive ("auto") versus
23
+ * respect an explicit choice ("manual" / "none" for No room).
24
+ *
25
+ * No React, no DB, no HTTP — just the assignment math.
26
+ *
27
+ * Tracking: voyantjs/voyant#1267.
28
+ */
29
+ export type TravelerRole = "lead" | "adult" | "child" | "infant";
30
+ export type AssignmentRoleHint = "adult" | "child" | "infant";
31
+ export type BookingDraftUnitAssignmentSource = "auto" | "manual" | "none";
32
+ export interface BookingDraftTraveler {
33
+ personId: string | null;
34
+ firstName: string;
35
+ lastName: string;
36
+ email: string;
37
+ phone: string;
38
+ preferredLanguage: string;
39
+ role: TravelerRole;
40
+ dateOfBirth: string | null;
41
+ /**
42
+ * Legacy field name kept for compatibility with the current dialog.
43
+ * For person-priced products it carries the traveler's pricing
44
+ * tier; for accommodation products it carries the selected
45
+ * room/inventory unit. Source of intent disambiguated by
46
+ * `roomUnitAssignmentSource` below.
47
+ */
48
+ roomUnitId: string | null;
49
+ /**
50
+ * Tracks operator intent around the legacy `roomUnitId` field.
51
+ *
52
+ * - `auto`: derived from product shape, DOB, role hints, and
53
+ * selected quantity. Eligible for re-derivation on every render.
54
+ * - `manual`: operator explicitly clicked a category/room button.
55
+ * The resolver respects the value when it's in the current unit
56
+ * set; otherwise it re-derives.
57
+ * - `none`: operator explicitly picked "No room". Stays null
58
+ * regardless of unit demand.
59
+ */
60
+ roomUnitAssignmentSource?: BookingDraftUnitAssignmentSource;
61
+ }
62
+ export interface PricingAssignmentUnit {
63
+ /** Option the unit belongs to. Null for product-level units. */
64
+ optionId?: string | null;
65
+ /** Stable id of the unit (option_unit primary key). */
66
+ optionUnitId: string;
67
+ /** Display name (e.g. "Adult", "Child 6-12", "DBL room"). */
68
+ unitName: string;
69
+ /** Stable code from the products schema (`ADULT`, `child_6_12`, …) when present. */
70
+ unitCode?: string | null;
71
+ /** Inclusive lower age bound for this unit, when configured. */
72
+ minAge?: number | null;
73
+ /** Inclusive upper age bound for this unit, when configured. */
74
+ maxAge?: number | null;
75
+ /** Unit category — drives the pricing-tier vs inventory split. */
76
+ unitType?: "person" | "group" | "room" | "vehicle" | "service" | "other" | null;
77
+ }
78
+ export type BookingDraftQuantities = Record<string, number>;
79
+ export interface ResolvedBookingDraft<TTraveler extends BookingDraftTraveler> {
80
+ quantities: BookingDraftQuantities;
81
+ travelers: TTraveler[];
82
+ /**
83
+ * For each unit that ended up assigned, the indexes (into the input
84
+ * traveler array) of travelers mapped to it. Used at submit time to
85
+ * stamp `travelerIndexes` on `booking_item` lines so the server can
86
+ * link items to travelers through `booking_item_travelers`.
87
+ */
88
+ travelerIndexesByUnitId: Record<string, number[]>;
89
+ }
90
+ /**
91
+ * Minimal structural shape `resolveBookingExtraLines` needs from an
92
+ * extra line. Real callers (booking-create dialog) pass the full
93
+ * `BookingCreateExtraLineInput` from `@voyantjs/bookings-react`; this
94
+ * type avoids a cyclic dependency.
95
+ */
96
+ export interface ResolvableExtraLine {
97
+ productExtraId: string;
98
+ pricingMode?: string | null;
99
+ pricedPerPerson?: boolean | null;
100
+ quantity: number;
101
+ unitSellAmountCents?: number | null;
102
+ totalSellAmountCents?: number | null;
103
+ clientLineKey?: string | null;
104
+ travelerIndexes?: number[] | null;
105
+ }
106
+ /**
107
+ * Compute integer age in full years from an ISO date-of-birth string.
108
+ * Returns null when the DOB is missing or unparseable.
109
+ */
110
+ export declare function computeAgeYears(dob: string | null, now?: Date): number | null;
111
+ /**
112
+ * Derive the age-banded traveler category from DOB + role hint.
113
+ * DOB-derived age wins; role hint is the fallback for travelers
114
+ * added before the operator filled in a birthday.
115
+ */
116
+ export declare function deriveDraftPaxBand(traveler: Pick<BookingDraftTraveler, "dateOfBirth" | "role">, now?: Date): "adult" | "child" | "infant" | null;
117
+ /**
118
+ * Pick the unit for a traveler pricing band. Priorities:
119
+ * 1. DOB-derived age that falls into a unit's `[minAge, maxAge]`
120
+ * 2. Role hint mapped to a representative age (infant→1, child→8,
121
+ * adult→30) matched against bands. Works for products coded
122
+ * `child_0_5` / `child_6_12` (not just literal `INFANT`/`CHILD`).
123
+ * 3. Code/name matching for legacy products with no min/max set.
124
+ */
125
+ export declare function pickUnitForAge<TUnit extends PricingAssignmentUnit>(units: ReadonlyArray<TUnit>, age: number | null, roleHint?: AssignmentRoleHint | null): TUnit | undefined;
126
+ /**
127
+ * Find the unit whose `[minAge, maxAge]` contains the DOB-derived
128
+ * age. Used by the UI to pre-pick a unit when a traveler attaches.
129
+ */
130
+ export declare function matchUnitByDob<TUnit extends PricingAssignmentUnit>(units: ReadonlyArray<TUnit>, dob: string | null): string | null;
131
+ /**
132
+ * Find the unit matching a role hint when DOB is missing. Same
133
+ * HINT_AGE mapping as `pickUnitForAge`. Returns null when the role
134
+ * carries no age signal (e.g. `lead`).
135
+ */
136
+ export declare function matchUnitByRoleHint<TUnit extends PricingAssignmentUnit>(units: ReadonlyArray<TUnit>, role: TravelerRole | null): string | null;
137
+ /**
138
+ * Resolve a booking-create draft into the per-unit quantities and
139
+ * per-traveler unit assignments the submit pipeline + price preview
140
+ * both need. Single source of truth for traveler→unit mapping.
141
+ *
142
+ * Shape branching:
143
+ * - **Person-priced options** (only `person` units, no `room`):
144
+ * quantities are derived from traveler assignments (1 adult + 1
145
+ * child + 1 infant = 3 line items, not "3 x Adult"). Auto-source
146
+ * travelers are re-derived against the current option's bands.
147
+ * - **Accommodation options** (any `room` unit): operator-picked
148
+ * stepper quantities are preserved (1 DBL room is 1 line). Per-
149
+ * traveler room assignments still update `travelerIndexesByUnitId`
150
+ * so `booking_item_travelers` rows can be created.
151
+ *
152
+ * Respects `roomUnitAssignmentSource`:
153
+ * - `none` → traveler stays null (explicit No room)
154
+ * - `manual` → traveler's existing roomUnitId is kept when valid
155
+ * - `auto` → re-derived against current options
156
+ */
157
+ export declare function resolveBookingDraft<TTraveler extends BookingDraftTraveler>(options: {
158
+ quantities: BookingDraftQuantities;
159
+ travelers: readonly TTraveler[];
160
+ units: readonly PricingAssignmentUnit[];
161
+ now?: Date;
162
+ }): ResolvedBookingDraft<TTraveler>;
163
+ /**
164
+ * Normalize per-person extras to charged traveler quantity and
165
+ * stamp `travelerIndexes` + `clientLineKey` so the server can link
166
+ * each extra line to the travelers it applies to via
167
+ * `booking_item_travelers`.
168
+ *
169
+ * Per-person mode (`pricingMode === "per_person"` or
170
+ * `pricedPerPerson === true`): quantity multiplied by travelerCount,
171
+ * `travelerIndexes` set to all travelers (uniform applicability).
172
+ * Non-per-person lines pass through with `clientLineKey` only.
173
+ */
174
+ export declare function resolveBookingExtraLines<TLine extends ResolvableExtraLine>(options: {
175
+ extraLines: readonly TLine[];
176
+ travelerCount: number;
177
+ }): TLine[];
178
+ /**
179
+ * Project a resolved draft's traveler list into the wire-format
180
+ * `BookingCreateTravelerInput[]` shape the dialog submits. Derives
181
+ * the `travelerCategory` from DOB / role and respects the
182
+ * `roomUnitAssignmentSource === "none"` carve-out.
183
+ */
184
+ export declare function travelersToRows(value: {
185
+ travelers: readonly BookingDraftTraveler[];
186
+ }, now?: Date): Array<{
187
+ personId: string | null;
188
+ firstName: string;
189
+ lastName: string;
190
+ email: string | null;
191
+ phone: string | null;
192
+ preferredLanguage: string | null;
193
+ participantType: "traveler";
194
+ travelerCategory: "adult" | "child" | "infant" | null;
195
+ isPrimary: boolean;
196
+ roomUnitId: string | null;
197
+ }>;
198
+ /**
199
+ * Minimal traveler shape `verifyBookingDraft` needs. Mirrors the
200
+ * wire-format `BookingCreateTravelerInput` from
201
+ * `@voyantjs/bookings-react`, defined here to avoid a cyclic
202
+ * dependency. The verifier doesn't care about most fields —
203
+ * `firstName` / `email` / etc. — only the role + traveler-category +
204
+ * primary flag that decide which pricing band each traveler
205
+ * implicitly maps to.
206
+ */
207
+ export interface VerifiableTraveler {
208
+ isPrimary?: boolean | null;
209
+ travelerCategory?: "adult" | "child" | "infant" | "senior" | "other" | null;
210
+ }
211
+ /**
212
+ * Submitted itemLine shape `verifyBookingDraft` needs. Mirrors the
213
+ * wire-format `BookingCreateItemLineInput`.
214
+ */
215
+ export interface VerifiableItemLine {
216
+ optionUnitId: string;
217
+ quantity: number;
218
+ travelerIndexes?: number[] | null;
219
+ }
220
+ export interface BookingDraftMismatch {
221
+ /** "qty" — submitted quantity differs from resolver-derived quantity for a unit. */
222
+ /** "missing" — resolver derived a unit not present in the submitted lines. */
223
+ /** "extra" — submitted line for a unit the resolver wouldn't have produced. */
224
+ kind: "qty" | "missing" | "extra";
225
+ optionUnitId: string;
226
+ submittedQuantity: number;
227
+ resolvedQuantity: number;
228
+ }
229
+ export interface VerifyBookingDraftResult {
230
+ ok: boolean;
231
+ mismatches: BookingDraftMismatch[];
232
+ }
233
+ /**
234
+ * Re-derive what `resolveBookingDraft` would have produced from the
235
+ * submitted wire-format payload and compare against the submitted
236
+ * itemLines. Used server-side as a sanity check on the client's
237
+ * draft resolution. Returns `ok: true` when the submitted lines
238
+ * match the resolver, else lists per-unit mismatches.
239
+ *
240
+ * Behavior of this helper is *non-rejecting* — callers decide
241
+ * whether to log, warn, or fail. The orchestrator currently logs;
242
+ * a follow-up will flip to rejection once observability confirms
243
+ * no legitimate clients trip the warning.
244
+ *
245
+ * Notes on the reconstruction:
246
+ * - The wire format doesn't carry per-traveler `roomUnitId` (the
247
+ * join-table model encodes it through `itemLines[].travelerIndexes`),
248
+ * so we reconstruct it by walking item lines and matching them
249
+ * to traveler indexes.
250
+ * - DOB doesn't round-trip on the wire today either; we feed the
251
+ * resolver the `travelerCategory` as a role hint so age-banded
252
+ * options can still be re-derived.
253
+ */
254
+ export declare function verifyBookingDraft(input: {
255
+ travelers: ReadonlyArray<VerifiableTraveler>;
256
+ itemLines: ReadonlyArray<VerifiableItemLine>;
257
+ units: ReadonlyArray<PricingAssignmentUnit>;
258
+ }): VerifyBookingDraftResult;
259
+ //# sourceMappingURL=pricing-assignment.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pricing-assignment.d.ts","sourceRoot":"","sources":["../src/pricing-assignment.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,GAAG,QAAQ,CAAA;AAChE,MAAM,MAAM,kBAAkB,GAAG,OAAO,GAAG,OAAO,GAAG,QAAQ,CAAA;AAC7D,MAAM,MAAM,gCAAgC,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,CAAA;AAEzE,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,iBAAiB,EAAE,MAAM,CAAA;IACzB,IAAI,EAAE,YAAY,CAAA;IAClB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B;;;;;;OAMG;IACH,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB;;;;;;;;;;OAUG;IACH,wBAAwB,CAAC,EAAE,gCAAgC,CAAA;CAC5D;AAED,MAAM,WAAW,qBAAqB;IACpC,gEAAgE;IAChE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,uDAAuD;IACvD,YAAY,EAAE,MAAM,CAAA;IACpB,6DAA6D;IAC7D,QAAQ,EAAE,MAAM,CAAA;IAChB,oFAAoF;IACpF,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,gEAAgE;IAChE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,gEAAgE;IAChE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,kEAAkE;IAClE,QAAQ,CAAC,EAAE,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,IAAI,CAAA;CAChF;AAED,MAAM,MAAM,sBAAsB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;AAE3D,MAAM,WAAW,oBAAoB,CAAC,SAAS,SAAS,oBAAoB;IAC1E,UAAU,EAAE,sBAAsB,CAAA;IAClC,SAAS,EAAE,SAAS,EAAE,CAAA;IACtB;;;;;OAKG;IACH,uBAAuB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;CAClD;AAED;;;;;GAKG;AACH,MAAM,WAAW,mBAAmB;IAClC,cAAc,EAAE,MAAM,CAAA;IACtB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,eAAe,CAAC,EAAE,OAAO,GAAG,IAAI,CAAA;IAChC,QAAQ,EAAE,MAAM,CAAA;IAChB,mBAAmB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACnC,oBAAoB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACpC,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7B,eAAe,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;CAClC;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,EAAE,GAAG,GAAE,IAAiB,GAAG,MAAM,GAAG,IAAI,CAUzF;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,IAAI,CAAC,oBAAoB,EAAE,aAAa,GAAG,MAAM,CAAC,EAC5D,GAAG,GAAE,IAAiB,GACrB,OAAO,GAAG,OAAO,GAAG,QAAQ,GAAG,IAAI,CAUrC;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,KAAK,SAAS,qBAAqB,EAChE,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC,EAC3B,GAAG,EAAE,MAAM,GAAG,IAAI,EAClB,QAAQ,GAAE,kBAAkB,GAAG,IAAW,GACzC,KAAK,GAAG,SAAS,CAoCnB;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,KAAK,SAAS,qBAAqB,EAChE,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC,EAC3B,GAAG,EAAE,MAAM,GAAG,IAAI,GACjB,MAAM,GAAG,IAAI,CASf;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,SAAS,qBAAqB,EACrE,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC,EAC3B,IAAI,EAAE,YAAY,GAAG,IAAI,GACxB,MAAM,GAAG,IAAI,CAiBf;AAyBD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,SAAS,oBAAoB,EAAE,OAAO,EAAE;IACnF,UAAU,EAAE,sBAAsB,CAAA;IAClC,SAAS,EAAE,SAAS,SAAS,EAAE,CAAA;IAC/B,KAAK,EAAE,SAAS,qBAAqB,EAAE,CAAA;IACvC,GAAG,CAAC,EAAE,IAAI,CAAA;CACX,GAAG,oBAAoB,CAAC,SAAS,CAAC,CAiJlC;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,SAAS,mBAAmB,EAAE,OAAO,EAAE;IACnF,UAAU,EAAE,SAAS,KAAK,EAAE,CAAA;IAC5B,aAAa,EAAE,MAAM,CAAA;CACtB,GAAG,KAAK,EAAE,CAsBV;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE;IAAE,SAAS,EAAE,SAAS,oBAAoB,EAAE,CAAA;CAAE,EACrD,GAAG,GAAE,IAAiB,GACrB,KAAK,CAAC;IACP,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAA;IAChC,eAAe,EAAE,UAAU,CAAA;IAC3B,gBAAgB,EAAE,OAAO,GAAG,OAAO,GAAG,QAAQ,GAAG,IAAI,CAAA;IACrD,SAAS,EAAE,OAAO,CAAA;IAClB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;CAC1B,CAAC,CAaD;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,kBAAkB;IACjC,SAAS,CAAC,EAAE,OAAO,GAAG,IAAI,CAAA;IAC1B,gBAAgB,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,IAAI,CAAA;CAC5E;AAED;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,YAAY,EAAE,MAAM,CAAA;IACpB,QAAQ,EAAE,MAAM,CAAA;IAChB,eAAe,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;CAClC;AAED,MAAM,WAAW,oBAAoB;IACnC,oFAAoF;IACpF,8EAA8E;IAC9E,+EAA+E;IAC/E,IAAI,EAAE,KAAK,GAAG,SAAS,GAAG,OAAO,CAAA;IACjC,YAAY,EAAE,MAAM,CAAA;IACpB,iBAAiB,EAAE,MAAM,CAAA;IACzB,gBAAgB,EAAE,MAAM,CAAA;CACzB;AAED,MAAM,WAAW,wBAAwB;IACvC,EAAE,EAAE,OAAO,CAAA;IACX,UAAU,EAAE,oBAAoB,EAAE,CAAA;CACnC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE;IACxC,SAAS,EAAE,aAAa,CAAC,kBAAkB,CAAC,CAAA;IAC5C,SAAS,EAAE,aAAa,CAAC,kBAAkB,CAAC,CAAA;IAC5C,KAAK,EAAE,aAAa,CAAC,qBAAqB,CAAC,CAAA;CAC5C,GAAG,wBAAwB,CAoF3B"}
@@ -0,0 +1,463 @@
1
+ /**
2
+ * Pure, transport-agnostic logic for mapping travelers onto option_units
3
+ * at booking-create time. Lives in `@voyantjs/bookings` so the
4
+ * booking-create dialog (preview + submit) is the only call site today,
5
+ * but the server can import the same module to validate or re-resolve
6
+ * submit payloads in a follow-up — that wiring is not yet in place.
7
+ *
8
+ * Vocabulary:
9
+ * - A **pricing tier** (`unit_type='person'`) is a per-pax price band
10
+ * a traveler is billed as (Adult / Child 6-12 / Infant 0-5 / …).
11
+ * - An **inventory unit** (`'room' | 'vehicle' | 'seat'`) is a finite
12
+ * container a traveler is placed into (one DBL room holds 2 pax).
13
+ * - "Person-priced options" are options that only have pricing tiers
14
+ * (no inventory). Excursions. For these, line-item quantities
15
+ * **derive from the traveler list** (1 adult + 1 child + 1 infant).
16
+ * - "Accommodation options" have inventory units (and usually a
17
+ * paired person unit for per-pax fees). For these, line-item
18
+ * quantities **stay as the operator picked them** (1 DBL room is
19
+ * still 1 line, not 2).
20
+ *
21
+ * The `roomUnitAssignmentSource` enum on the traveler tracks operator
22
+ * intent so the resolver knows when to re-derive ("auto") versus
23
+ * respect an explicit choice ("manual" / "none" for No room).
24
+ *
25
+ * No React, no DB, no HTTP — just the assignment math.
26
+ *
27
+ * Tracking: voyantjs/voyant#1267.
28
+ */
29
+ /**
30
+ * Compute integer age in full years from an ISO date-of-birth string.
31
+ * Returns null when the DOB is missing or unparseable.
32
+ */
33
+ export function computeAgeYears(dob, now = new Date()) {
34
+ if (!dob)
35
+ return null;
36
+ const birth = new Date(dob);
37
+ if (Number.isNaN(birth.getTime()))
38
+ return null;
39
+ let age = now.getFullYear() - birth.getFullYear();
40
+ const beforeBirthday = now.getMonth() < birth.getMonth() ||
41
+ (now.getMonth() === birth.getMonth() && now.getDate() < birth.getDate());
42
+ if (beforeBirthday)
43
+ age -= 1;
44
+ return age >= 0 ? age : null;
45
+ }
46
+ /**
47
+ * Derive the age-banded traveler category from DOB + role hint.
48
+ * DOB-derived age wins; role hint is the fallback for travelers
49
+ * added before the operator filled in a birthday.
50
+ */
51
+ export function deriveDraftPaxBand(traveler, now = new Date()) {
52
+ const age = computeAgeYears(traveler.dateOfBirth, now);
53
+ if (age == null) {
54
+ return traveler.role === "adult" || traveler.role === "child" || traveler.role === "infant"
55
+ ? traveler.role
56
+ : null;
57
+ }
58
+ if (age < 2)
59
+ return "infant";
60
+ if (age < 18)
61
+ return "child";
62
+ return "adult";
63
+ }
64
+ /**
65
+ * Pick the unit for a traveler pricing band. Priorities:
66
+ * 1. DOB-derived age that falls into a unit's `[minAge, maxAge]`
67
+ * 2. Role hint mapped to a representative age (infant→1, child→8,
68
+ * adult→30) matched against bands. Works for products coded
69
+ * `child_0_5` / `child_6_12` (not just literal `INFANT`/`CHILD`).
70
+ * 3. Code/name matching for legacy products with no min/max set.
71
+ */
72
+ export function pickUnitForAge(units, age, roleHint = null) {
73
+ if (units.length === 0)
74
+ return undefined;
75
+ const personUnits = units.filter((u) => u.unitType == null || u.unitType === "person");
76
+ const pool = personUnits.length > 0 ? personUnits : units;
77
+ const sorted = [...pool].sort((a, b) => (a.minAge ?? 0) - (b.minAge ?? 0));
78
+ const matchByAge = (target) => sorted.find((u) => (u.minAge == null || target >= u.minAge) && (u.maxAge == null || target <= u.maxAge));
79
+ if (age != null) {
80
+ const match = matchByAge(age);
81
+ if (match)
82
+ return match;
83
+ }
84
+ if (roleHint) {
85
+ const HINT_AGE = { adult: 30, child: 8, infant: 1 };
86
+ const hintAge = HINT_AGE[roleHint];
87
+ // Only consider units with at least one explicit age bound.
88
+ // Without this, legacy units with null min/max (just bare
89
+ // ADULT/CHILD codes) would all match every hint age and collapse
90
+ // onto the first sorted entry. Code-matching below handles those.
91
+ const banded = sorted.filter((u) => u.minAge != null || u.maxAge != null);
92
+ const match = banded.find((u) => (u.minAge == null || hintAge >= u.minAge) && (u.maxAge == null || hintAge <= u.maxAge));
93
+ if (match)
94
+ return match;
95
+ }
96
+ const findByCode = (code) => sorted.find((u) => (u.unitCode ?? "").toUpperCase() === code) ??
97
+ sorted.find((u) => new RegExp(`\\b${code}\\b`, "i").test(u.unitName));
98
+ if (roleHint === "child")
99
+ return findByCode("CHILD") ?? sorted[0];
100
+ if (roleHint === "infant")
101
+ return findByCode("INFANT") ?? sorted[0];
102
+ return findByCode("ADULT") ?? sorted[sorted.length - 1] ?? sorted[0];
103
+ }
104
+ /**
105
+ * Find the unit whose `[minAge, maxAge]` contains the DOB-derived
106
+ * age. Used by the UI to pre-pick a unit when a traveler attaches.
107
+ */
108
+ export function matchUnitByDob(units, dob) {
109
+ if (!dob)
110
+ return null;
111
+ const age = computeAgeYears(dob);
112
+ if (age == null)
113
+ return null;
114
+ const personUnits = units.filter((u) => u.unitType == null || u.unitType === "person");
115
+ const match = personUnits.find((u) => (u.minAge == null || age >= u.minAge) && (u.maxAge == null || age <= u.maxAge));
116
+ return match?.optionUnitId ?? null;
117
+ }
118
+ /**
119
+ * Find the unit matching a role hint when DOB is missing. Same
120
+ * HINT_AGE mapping as `pickUnitForAge`. Returns null when the role
121
+ * carries no age signal (e.g. `lead`).
122
+ */
123
+ export function matchUnitByRoleHint(units, role) {
124
+ if (!role || role === "lead")
125
+ return null;
126
+ const HINT_AGE = {
127
+ adult: 30,
128
+ child: 8,
129
+ infant: 1,
130
+ };
131
+ const hintAge = HINT_AGE[role];
132
+ if (hintAge == null)
133
+ return null;
134
+ const banded = units.filter((u) => (u.unitType == null || u.unitType === "person") && (u.minAge != null || u.maxAge != null));
135
+ const match = banded.find((u) => (u.minAge == null || hintAge >= u.minAge) && (u.maxAge == null || hintAge <= u.maxAge));
136
+ return match?.optionUnitId ?? null;
137
+ }
138
+ function optionKey(unit) {
139
+ return unit.optionId ?? unit.optionUnitId;
140
+ }
141
+ function isPersonUnit(unit) {
142
+ return unit.unitType == null || unit.unitType === "person";
143
+ }
144
+ /**
145
+ * Inventory units are finite containers a traveler is placed into.
146
+ * Rooms (hotels), vehicles (transfers), seats (where modeled
147
+ * explicitly). Distinct from pricing tiers (`person`).
148
+ */
149
+ function isInventoryUnit(unit) {
150
+ return unit.unitType === "room" || unit.unitType === "vehicle";
151
+ }
152
+ function roleHintForTraveler(traveler) {
153
+ return traveler.role === "adult" || traveler.role === "child" || traveler.role === "infant"
154
+ ? traveler.role
155
+ : null;
156
+ }
157
+ /**
158
+ * Resolve a booking-create draft into the per-unit quantities and
159
+ * per-traveler unit assignments the submit pipeline + price preview
160
+ * both need. Single source of truth for traveler→unit mapping.
161
+ *
162
+ * Shape branching:
163
+ * - **Person-priced options** (only `person` units, no `room`):
164
+ * quantities are derived from traveler assignments (1 adult + 1
165
+ * child + 1 infant = 3 line items, not "3 x Adult"). Auto-source
166
+ * travelers are re-derived against the current option's bands.
167
+ * - **Accommodation options** (any `room` unit): operator-picked
168
+ * stepper quantities are preserved (1 DBL room is 1 line). Per-
169
+ * traveler room assignments still update `travelerIndexesByUnitId`
170
+ * so `booking_item_travelers` rows can be created.
171
+ *
172
+ * Respects `roomUnitAssignmentSource`:
173
+ * - `none` → traveler stays null (explicit No room)
174
+ * - `manual` → traveler's existing roomUnitId is kept when valid
175
+ * - `auto` → re-derived against current options
176
+ */
177
+ export function resolveBookingDraft(options) {
178
+ const { quantities, travelers, now = new Date() } = options;
179
+ const units = [...options.units];
180
+ if (units.length === 0) {
181
+ return { quantities, travelers: [...travelers], travelerIndexesByUnitId: {} };
182
+ }
183
+ const unitsByOption = new Map();
184
+ const unitById = new Map();
185
+ const unitToOption = new Map();
186
+ for (const unit of units) {
187
+ const key = optionKey(unit);
188
+ unitById.set(unit.optionUnitId, unit);
189
+ unitToOption.set(unit.optionUnitId, key);
190
+ const list = unitsByOption.get(key);
191
+ if (list)
192
+ list.push(unit);
193
+ else
194
+ unitsByOption.set(key, [unit]);
195
+ }
196
+ // An option is "person-priced" when it has at least one person unit
197
+ // and no inventory unit (room/vehicle). That's the excursion shape:
198
+ // line quantities derive from travelers, not from the stepper's
199
+ // primary-unit count. Multi-day packages with both a room AND a
200
+ // person-typed adult fee fall outside this set — the room
201
+ // quantity passes through unchanged.
202
+ const personPricedOptions = new Set();
203
+ for (const [key, optionUnits] of unitsByOption) {
204
+ const hasPerson = optionUnits.some(isPersonUnit);
205
+ const hasInventory = optionUnits.some(isInventoryUnit);
206
+ if (hasPerson && !hasInventory)
207
+ personPricedOptions.add(key);
208
+ }
209
+ const totalByOption = new Map();
210
+ for (const [unitId, quantity] of Object.entries(quantities)) {
211
+ if (quantity <= 0)
212
+ continue;
213
+ const key = unitToOption.get(unitId);
214
+ if (!key)
215
+ continue;
216
+ totalByOption.set(key, (totalByOption.get(key) ?? 0) + quantity);
217
+ }
218
+ const assignedForDefaulting = new Map();
219
+ for (const traveler of travelers) {
220
+ if (!traveler.roomUnitId || traveler.roomUnitAssignmentSource === "none")
221
+ continue;
222
+ const key = unitToOption.get(traveler.roomUnitId);
223
+ if (!key)
224
+ continue;
225
+ assignedForDefaulting.set(key, (assignedForDefaulting.get(key) ?? 0) + 1);
226
+ }
227
+ const optionDemand = Array.from(totalByOption.entries());
228
+ const pickOptionWithDemand = () => optionDemand.find(([candidate, total]) => (assignedForDefaulting.get(candidate) ?? 0) < total)?.[0] ?? optionDemand[0]?.[0];
229
+ const resolveUnitForTraveler = (traveler, key) => pickUnitForAge(unitsByOption.get(key) ?? [], computeAgeYears(traveler.dateOfBirth, now), roleHintForTraveler(traveler));
230
+ const assignNextDemandUnit = (traveler) => {
231
+ const key = pickOptionWithDemand();
232
+ if (!key)
233
+ return { ...traveler, roomUnitId: null, roomUnitAssignmentSource: "auto" };
234
+ const unit = resolveUnitForTraveler(traveler, key);
235
+ if (!unit)
236
+ return { ...traveler, roomUnitId: null, roomUnitAssignmentSource: "auto" };
237
+ assignedForDefaulting.set(key, (assignedForDefaulting.get(key) ?? 0) + 1);
238
+ return {
239
+ ...traveler,
240
+ roomUnitId: unit.optionUnitId,
241
+ roomUnitAssignmentSource: "auto",
242
+ };
243
+ };
244
+ const nextTravelers = travelers.map((traveler) => {
245
+ const source = traveler.roomUnitAssignmentSource ?? "auto";
246
+ if (source === "none") {
247
+ return { ...traveler, roomUnitId: null, roomUnitAssignmentSource: "none" };
248
+ }
249
+ if (traveler.roomUnitId && unitById.has(traveler.roomUnitId)) {
250
+ const key = unitToOption.get(traveler.roomUnitId);
251
+ if (!key || source === "manual" || !personPricedOptions.has(key))
252
+ return traveler;
253
+ // Stale auto-assigned person-priced unit: re-derive against the
254
+ // current bands so a child traveler who was placed on Adult by
255
+ // an earlier pass moves to the right band on the next render.
256
+ const unit = resolveUnitForTraveler(traveler, key);
257
+ return unit && unit.optionUnitId !== traveler.roomUnitId
258
+ ? {
259
+ ...traveler,
260
+ roomUnitId: unit.optionUnitId,
261
+ roomUnitAssignmentSource: "auto",
262
+ }
263
+ : traveler;
264
+ }
265
+ return assignNextDemandUnit(traveler);
266
+ });
267
+ const next = {};
268
+ const travelerIndexesByUnitId = {};
269
+ // Accommodation quantities pass through unchanged — 1 DBL room
270
+ // stays 1 line. Person-priced quantities are rebuilt from traveler
271
+ // assignments below.
272
+ for (const [unitId, quantity] of Object.entries(quantities)) {
273
+ if (quantity <= 0)
274
+ continue;
275
+ const key = unitToOption.get(unitId);
276
+ if (!key || personPricedOptions.has(key))
277
+ continue;
278
+ next[unitId] = quantity;
279
+ }
280
+ const assignedByOption = new Map();
281
+ for (const [index, traveler] of nextTravelers.entries()) {
282
+ if (!traveler.roomUnitId || traveler.roomUnitAssignmentSource === "none")
283
+ continue;
284
+ const key = unitToOption.get(traveler.roomUnitId);
285
+ if (!key)
286
+ continue;
287
+ const unitIndexes = travelerIndexesByUnitId[traveler.roomUnitId] ?? [];
288
+ unitIndexes.push(index);
289
+ travelerIndexesByUnitId[traveler.roomUnitId] = unitIndexes;
290
+ if (personPricedOptions.has(key)) {
291
+ next[traveler.roomUnitId] = (next[traveler.roomUnitId] ?? 0) + 1;
292
+ assignedByOption.set(key, (assignedByOption.get(key) ?? 0) + 1);
293
+ }
294
+ }
295
+ // Person-priced residual: operator picked N seats but only added M
296
+ // travelers (M < N) → put the leftover on the option's adult unit
297
+ // so the line-item total matches the stepper.
298
+ for (const [key, total] of totalByOption) {
299
+ if (!personPricedOptions.has(key))
300
+ continue;
301
+ const assigned = assignedByOption.get(key) ?? 0;
302
+ const residual = Math.max(0, total - assigned);
303
+ if (residual === 0)
304
+ continue;
305
+ const adult = pickUnitForAge(unitsByOption.get(key) ?? [], null, "adult");
306
+ if (!adult)
307
+ continue;
308
+ next[adult.optionUnitId] = (next[adult.optionUnitId] ?? 0) + residual;
309
+ }
310
+ return { quantities: next, travelers: nextTravelers, travelerIndexesByUnitId };
311
+ }
312
+ /**
313
+ * Normalize per-person extras to charged traveler quantity and
314
+ * stamp `travelerIndexes` + `clientLineKey` so the server can link
315
+ * each extra line to the travelers it applies to via
316
+ * `booking_item_travelers`.
317
+ *
318
+ * Per-person mode (`pricingMode === "per_person"` or
319
+ * `pricedPerPerson === true`): quantity multiplied by travelerCount,
320
+ * `travelerIndexes` set to all travelers (uniform applicability).
321
+ * Non-per-person lines pass through with `clientLineKey` only.
322
+ */
323
+ export function resolveBookingExtraLines(options) {
324
+ const travelerIndexes = Array.from({ length: options.travelerCount }, (_, index) => index);
325
+ return options.extraLines.map((line) => {
326
+ const perPerson = line.pricingMode === "per_person" || line.pricedPerPerson === true;
327
+ if (!perPerson) {
328
+ return {
329
+ ...line,
330
+ clientLineKey: line.clientLineKey ?? `extra:${line.productExtraId}`,
331
+ };
332
+ }
333
+ const quantity = Math.max(1, options.travelerCount) * line.quantity;
334
+ return {
335
+ ...line,
336
+ clientLineKey: line.clientLineKey ?? `extra:${line.productExtraId}`,
337
+ quantity,
338
+ totalSellAmountCents: line.unitSellAmountCents == null
339
+ ? line.totalSellAmountCents
340
+ : line.unitSellAmountCents * quantity,
341
+ travelerIndexes,
342
+ };
343
+ });
344
+ }
345
+ /**
346
+ * Project a resolved draft's traveler list into the wire-format
347
+ * `BookingCreateTravelerInput[]` shape the dialog submits. Derives
348
+ * the `travelerCategory` from DOB / role and respects the
349
+ * `roomUnitAssignmentSource === "none"` carve-out.
350
+ */
351
+ export function travelersToRows(value, now = new Date()) {
352
+ return value.travelers.map((traveler) => ({
353
+ personId: traveler.personId,
354
+ firstName: traveler.firstName.trim(),
355
+ lastName: traveler.lastName.trim(),
356
+ email: traveler.email.trim() || null,
357
+ phone: traveler.phone.trim() || null,
358
+ preferredLanguage: traveler.preferredLanguage.trim() || null,
359
+ participantType: "traveler",
360
+ travelerCategory: deriveDraftPaxBand(traveler, now),
361
+ isPrimary: traveler.role === "lead",
362
+ roomUnitId: traveler.roomUnitAssignmentSource === "none" ? null : traveler.roomUnitId,
363
+ }));
364
+ }
365
+ /**
366
+ * Re-derive what `resolveBookingDraft` would have produced from the
367
+ * submitted wire-format payload and compare against the submitted
368
+ * itemLines. Used server-side as a sanity check on the client's
369
+ * draft resolution. Returns `ok: true` when the submitted lines
370
+ * match the resolver, else lists per-unit mismatches.
371
+ *
372
+ * Behavior of this helper is *non-rejecting* — callers decide
373
+ * whether to log, warn, or fail. The orchestrator currently logs;
374
+ * a follow-up will flip to rejection once observability confirms
375
+ * no legitimate clients trip the warning.
376
+ *
377
+ * Notes on the reconstruction:
378
+ * - The wire format doesn't carry per-traveler `roomUnitId` (the
379
+ * join-table model encodes it through `itemLines[].travelerIndexes`),
380
+ * so we reconstruct it by walking item lines and matching them
381
+ * to traveler indexes.
382
+ * - DOB doesn't round-trip on the wire today either; we feed the
383
+ * resolver the `travelerCategory` as a role hint so age-banded
384
+ * options can still be re-derived.
385
+ */
386
+ export function verifyBookingDraft(input) {
387
+ if (input.itemLines.length === 0 || input.units.length === 0) {
388
+ return { ok: true, mismatches: [] };
389
+ }
390
+ // Walk the submitted itemLines to recover the per-traveler unit
391
+ // assignment the client intended. If the client didn't send
392
+ // `travelerIndexes` (legacy clients), we can't verify per-traveler
393
+ // assignment — just compare aggregate quantities.
394
+ const unitByTravelerIndex = new Map();
395
+ for (const line of input.itemLines) {
396
+ for (const idx of line.travelerIndexes ?? []) {
397
+ unitByTravelerIndex.set(idx, line.optionUnitId);
398
+ }
399
+ }
400
+ const travelerDrafts = input.travelers.map((t, i) => {
401
+ const cat = t.travelerCategory;
402
+ const role = t.isPrimary === true
403
+ ? "lead"
404
+ : cat === "child" || cat === "infant" || cat === "adult"
405
+ ? cat
406
+ : "adult";
407
+ const assigned = unitByTravelerIndex.get(i);
408
+ return {
409
+ personId: null,
410
+ firstName: "",
411
+ lastName: "",
412
+ email: "",
413
+ phone: "",
414
+ preferredLanguage: "",
415
+ role,
416
+ dateOfBirth: null,
417
+ // We deliberately use `auto` (not `manual`) here even though
418
+ // the client effectively committed to an assignment when it
419
+ // serialized the line. The point of verification is to ask
420
+ // "would a fresh resolver, given the same role/category
421
+ // signals, produce these quantities?" — i.e. allow the
422
+ // resolver to re-derive instead of treating the submitted
423
+ // value as ground truth. Otherwise the day-tour bug shape
424
+ // (3 travelers all manually frozen to Adult) would round-trip
425
+ // through the verifier unchanged.
426
+ roomUnitId: assigned ?? null,
427
+ roomUnitAssignmentSource: "auto",
428
+ };
429
+ });
430
+ // Aggregate submitted quantities for resolver input. For
431
+ // accommodation options the resolver passes these through
432
+ // unchanged; for person-priced options it rebuilds them from
433
+ // traveler assignments.
434
+ const submittedQuantities = {};
435
+ for (const line of input.itemLines) {
436
+ submittedQuantities[line.optionUnitId] =
437
+ (submittedQuantities[line.optionUnitId] ?? 0) + line.quantity;
438
+ }
439
+ const resolved = resolveBookingDraft({
440
+ quantities: submittedQuantities,
441
+ travelers: travelerDrafts,
442
+ units: input.units,
443
+ });
444
+ const mismatches = [];
445
+ const allUnitIds = new Set([
446
+ ...Object.keys(submittedQuantities),
447
+ ...Object.keys(resolved.quantities),
448
+ ]);
449
+ for (const unitId of allUnitIds) {
450
+ const submitted = submittedQuantities[unitId] ?? 0;
451
+ const resolvedQty = resolved.quantities[unitId] ?? 0;
452
+ if (submitted === resolvedQty)
453
+ continue;
454
+ const kind = submitted === 0 ? "missing" : resolvedQty === 0 ? "extra" : "qty";
455
+ mismatches.push({
456
+ kind,
457
+ optionUnitId: unitId,
458
+ submittedQuantity: submitted,
459
+ resolvedQuantity: resolvedQty,
460
+ });
461
+ }
462
+ return { ok: mismatches.length === 0, mismatches };
463
+ }
@@ -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
@@ -1855,6 +1855,16 @@ export const bookingsService = {
1855
1855
  productNameSnapshot: product.name,
1856
1856
  optionNameSnapshot: option?.name ?? null,
1857
1857
  };
1858
+ // Stamp the wire-format `clientLineKey` into the inserted item's
1859
+ // metadata so the booking-create orchestrator can find the row
1860
+ // afterward and write `booking_item_travelers` linkages. The
1861
+ // existing slot metadata (when present) is preserved.
1862
+ const itemLineMetadata = (clientLineKey) => {
1863
+ const slotMetadata = (slotFields.metadata ?? {});
1864
+ return clientLineKey
1865
+ ? { ...slotMetadata, bookingCreateLineKey: clientLineKey }
1866
+ : slotFields.metadata;
1867
+ };
1858
1868
  // Seeded line-item totals must match the booking's `sellAmountCents`
1859
1869
  // so checkout / payment / invoicing don't see a list-price item beneath
1860
1870
  // a discounted booking header.
@@ -1881,6 +1891,7 @@ export const bookingsService = {
1881
1891
  ...productOptionSnapshot,
1882
1892
  unitNameSnapshot: unit.name,
1883
1893
  ...slotFields,
1894
+ metadata: itemLineMetadata(line.clientLineKey),
1884
1895
  };
1885
1896
  })
1886
1897
  : unitsToSeed.length > 0
@@ -325,6 +325,7 @@ export declare const convertProductSchema: z.ZodObject<{
325
325
  contactAddressLine1: z.ZodNullable<z.ZodOptional<z.ZodString>>;
326
326
  contactPostalCode: z.ZodNullable<z.ZodOptional<z.ZodString>>;
327
327
  itemLines: z.ZodOptional<z.ZodArray<z.ZodObject<{
328
+ clientLineKey: z.ZodNullable<z.ZodOptional<z.ZodString>>;
328
329
  optionId: z.ZodNullable<z.ZodOptional<z.ZodString>>;
329
330
  optionUnitId: z.ZodString;
330
331
  quantity: z.ZodNumber;
@@ -1 +1 @@
1
- {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAuCvB,eAAO,MAAM,0BAA0B;;;;;;;;iBAQrC,CAAA;AAyCF,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAAoB,CAAA;AACpD,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAA8B,CAAA;AAE9D,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAW5B,CAAA;AAEJ,eAAO,MAAM,0BAA0B;;;;;;;;EAQrC,CAAA;AAEF,eAAO,MAAM,wBAAwB;;;EAA0B,CAAA;AAE/D,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAwBjC,CAAA;AAEF,eAAO,MAAM,4BAA4B;;;;iBASvC,CAAA;AAEF,eAAO,MAAM,+BAA+B;;iBAE1C,CAAA;AAEF,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAoF7B,CAAA;AAEJ;;;;GAIG;AACH,eAAO,MAAM,oBAAoB;;;;iBAI/B,CAAA;AAEF,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAyBnC,CAAA;AAEF,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAmB7B,CAAA;AAEJ,eAAO,MAAM,uBAAuB;;;iBAYhC,CAAA;AAEJ,eAAO,MAAM,oBAAoB;;;iBAS/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;;;;;;;GAOG;AACH,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;iBAetC,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;;;;;;;;;;;;;;;;;;;;iBAgB5C,CAAA;AAKF,eAAO,MAAM,qCAAqC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAEjD,CAAA;AACD,eAAO,MAAM,qCAAqC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAAkD,CAAA;AAsCpG,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;;;;EAAmD,CAAA;AACtF,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"}
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"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"}
@@ -183,6 +183,14 @@ export const convertProductSchema = z
183
183
  contactPostalCode: z.string().max(20).optional().nullable(),
184
184
  itemLines: z
185
185
  .array(z.object({
186
+ /**
187
+ * Stable client-side key (e.g. `unit:optu_adult`). Stamped
188
+ * into the inserted booking_item's
189
+ * `metadata.bookingCreateLineKey` so the orchestrator can
190
+ * link items to travelers via `booking_item_travelers`.
191
+ * See voyantjs/voyant#1267.
192
+ */
193
+ clientLineKey: z.string().min(1).max(255).optional().nullable(),
186
194
  optionId: z.string().min(1).optional().nullable(),
187
195
  optionUnitId: z.string().min(1),
188
196
  quantity: z.number().int().min(1),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@voyantjs/bookings",
3
- "version": "0.80.18",
3
+ "version": "0.81.1",
4
4
  "license": "Apache-2.0",
5
5
  "type": "module",
6
6
  "exports": {
@@ -64,6 +64,11 @@
64
64
  "import": "./dist/checkout-capability.js",
65
65
  "default": "./dist/checkout-capability.js"
66
66
  },
67
+ "./pricing-assignment": {
68
+ "types": "./dist/pricing-assignment.d.ts",
69
+ "import": "./dist/pricing-assignment.js",
70
+ "default": "./dist/pricing-assignment.js"
71
+ },
67
72
  "./extensions/suppliers": {
68
73
  "types": "./dist/extensions/suppliers.d.ts",
69
74
  "import": "./dist/extensions/suppliers.js",
@@ -79,15 +84,15 @@
79
84
  "drizzle-orm": "^0.45.2",
80
85
  "hono": "^4.12.10",
81
86
  "zod": "^4.3.6",
82
- "@voyantjs/action-ledger": "0.80.18",
83
- "@voyantjs/core": "0.80.18",
84
- "@voyantjs/db": "0.80.18",
85
- "@voyantjs/hono": "0.80.18",
86
- "@voyantjs/utils": "0.80.18"
87
+ "@voyantjs/action-ledger": "0.81.1",
88
+ "@voyantjs/core": "0.81.1",
89
+ "@voyantjs/db": "0.81.1",
90
+ "@voyantjs/hono": "0.81.1",
91
+ "@voyantjs/utils": "0.81.1"
87
92
  },
88
93
  "devDependencies": {
89
94
  "typescript": "^6.0.2",
90
- "@voyantjs/products": "0.80.18",
95
+ "@voyantjs/products": "0.81.1",
91
96
  "@voyantjs/voyant-typescript-config": "0.1.0"
92
97
  },
93
98
  "files": [