@voyantjs/customer-portal 0.3.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"validation-public.d.ts","sourceRoot":"","sources":["../src/validation-public.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"validation-public.d.ts","sourceRoot":"","sources":["../src/validation-public.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AA6JvB,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;iBAWtC,CAAA;AAEF,eAAO,MAAM,iCAAiC;;;;;;;;;;;;;;;;;;;iBAc1C,CAAA;AAEJ,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAerC,CAAA;AAEF,eAAO,MAAM,sCAAsC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAGjD,CAAA;AAEF,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAuCtC,CAAA;AAEF,eAAO,MAAM,gCAAgC;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAS3C,CAAA;AAEF,eAAO,MAAM,iCAAiC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAyC1C,CAAA;AAEJ,eAAO,MAAM,sCAAsC;;iBAEjD,CAAA;AAEF,eAAO,MAAM,uCAAuC;;;;;iBAKlD,CAAA;AAEF,eAAO,MAAM,2CAA2C;;iBAEtD,CAAA;AAEF,eAAO,MAAM,4CAA4C;;;;iBAIvD,CAAA;AAEF,eAAO,MAAM,6BAA6B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAYtC,CAAA;AAEJ,eAAO,MAAM,mCAAmC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAS9C,CAAA;AAEF,eAAO,MAAM,6BAA6B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAuCxC,CAAA;AAEF,eAAO,MAAM,mCAAmC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAyD9C,CAAA;AAEF,eAAO,MAAM,mCAAmC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAI5C,CAAA;AAEJ,eAAO,MAAM,6CAA6C;;iBAExD,CAAA;AAEF,eAAO,MAAM,mDAAmD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAG9D,CAAA;AAEF,eAAO,MAAM,kCAAkC;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAe7C,CAAA;AAEF,eAAO,MAAM,0CAA0C;;;;;;;;;;;;iBAKrD,CAAA;AAEF,eAAO,MAAM,+BAA+B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAe1C,CAAA;AAEF,eAAO,MAAM,sCAAsC;;;;;;;;;;;;;iBAMjD,CAAA;AAEF,eAAO,MAAM,yCAAyC;;;;;;;;;;iBAUpD,CAAA;AAEF,eAAO,MAAM,mCAAmC;;;;;;;;;;;;;;;;;;;;;;;iBAS9C,CAAA;AAEF,eAAO,MAAM,4CAA4C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAevD,CAAA;AAEF,eAAO,MAAM,kCAAkC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAY7C,CAAA;AAEF,eAAO,MAAM,qCAAqC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAGhD,CAAA;AAEF,eAAO,MAAM,sCAAsC;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAQjD,CAAA;AAEF,eAAO,MAAM,iCAAiC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAkB5C,CAAA;AAEF,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAA;AAC/E,MAAM,MAAM,gCAAgC,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iCAAiC,CAAC,CAAA;AAChG,MAAM,MAAM,gCAAgC,GAAG,CAAC,CAAC,KAAK,CACpD,OAAO,sCAAsC,CAC9C,CAAA;AACD,MAAM,MAAM,iCAAiC,GAAG,CAAC,CAAC,KAAK,CACrD,OAAO,uCAAuC,CAC/C,CAAA;AACD,MAAM,MAAM,qCAAqC,GAAG,CAAC,CAAC,KAAK,CACzD,OAAO,2CAA2C,CACnD,CAAA;AACD,MAAM,MAAM,sCAAsC,GAAG,CAAC,CAAC,KAAK,CAC1D,OAAO,4CAA4C,CACpD,CAAA;AACD,MAAM,MAAM,4BAA4B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,6BAA6B,CAAC,CAAA;AACxF,MAAM,MAAM,6BAA6B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mCAAmC,CAAC,CAAA;AAC/F,MAAM,MAAM,gCAAgC,GAAG,CAAC,CAAC,KAAK,CACpD,OAAO,sCAAsC,CAC9C,CAAA;AACD,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,6BAA6B,CAAC,CAAA;AACnF,MAAM,MAAM,kCAAkC,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mCAAmC,CAAC,CAAA;AACpG,MAAM,MAAM,kCAAkC,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mCAAmC,CAAC,CAAA;AACpG,MAAM,MAAM,4CAA4C,GAAG,CAAC,CAAC,KAAK,CAChE,OAAO,6CAA6C,CACrD,CAAA;AACD,MAAM,MAAM,6CAA6C,GAAG,CAAC,CAAC,KAAK,CACjE,OAAO,mDAAmD,CAC3D,CAAA;AACD,MAAM,MAAM,4BAA4B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kCAAkC,CAAC,CAAA;AAC7F,MAAM,MAAM,mCAAmC,GAAG,CAAC,CAAC,KAAK,CACvD,OAAO,yCAAyC,CACjD,CAAA;AACD,MAAM,MAAM,6BAA6B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mCAAmC,CAAC,CAAA;AAC/F,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAA;AAC/E,MAAM,MAAM,gCAAgC,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iCAAiC,CAAC,CAAA;AAChG,MAAM,MAAM,sCAAsC,GAAG,CAAC,CAAC,KAAK,CAC1D,OAAO,4CAA4C,CACpD,CAAA;AACD,MAAM,MAAM,4BAA4B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kCAAkC,CAAC,CAAA;AAC7F,MAAM,MAAM,+BAA+B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qCAAqC,CAAC,CAAA;AACnG,MAAM,MAAM,2BAA2B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iCAAiC,CAAC,CAAA"}
@@ -44,7 +44,18 @@ const bookingItemParticipantRoleSchema = z.enum([
44
44
  "beneficiary",
45
45
  "other",
46
46
  ]);
47
- const bookingDocumentTypeSchema = z.enum(["visa", "insurance", "health", "passport_copy", "other"]);
47
+ const bookingDocumentTypeSchema = z.enum([
48
+ "visa",
49
+ "insurance",
50
+ "health",
51
+ "passport_copy",
52
+ "contract",
53
+ "invoice",
54
+ "proforma",
55
+ "credit_note",
56
+ "other",
57
+ ]);
58
+ const bookingDocumentSourceSchema = z.enum(["booking_document", "legal", "finance"]);
48
59
  const bookingFulfillmentTypeSchema = z.enum([
49
60
  "voucher",
50
61
  "ticket",
@@ -69,6 +80,97 @@ const bookingFulfillmentStatusSchema = z.enum([
69
80
  "failed",
70
81
  ]);
71
82
  const seatingPreferenceSchema = z.enum(["aisle", "window", "middle", "no_preference"]);
83
+ const customerPortalAddressLabelSchema = z.enum([
84
+ "primary",
85
+ "billing",
86
+ "shipping",
87
+ "mailing",
88
+ "meeting",
89
+ "service",
90
+ "legal",
91
+ "other",
92
+ ]);
93
+ const customerPortalFinanceInvoiceTypeSchema = z.enum(["invoice", "proforma", "credit_note"]);
94
+ const customerPortalFinanceInvoiceStatusSchema = z.enum([
95
+ "draft",
96
+ "sent",
97
+ "partially_paid",
98
+ "paid",
99
+ "overdue",
100
+ "void",
101
+ ]);
102
+ const customerPortalFinancePaymentStatusSchema = z.enum([
103
+ "pending",
104
+ "completed",
105
+ "failed",
106
+ "refunded",
107
+ ]);
108
+ const customerPortalFinancePaymentMethodSchema = z.enum([
109
+ "bank_transfer",
110
+ "credit_card",
111
+ "debit_card",
112
+ "cash",
113
+ "cheque",
114
+ "wallet",
115
+ "direct_bill",
116
+ "voucher",
117
+ "other",
118
+ ]);
119
+ const customerPortalBookingPaymentSummaryStatusSchema = z.enum([
120
+ "unpaid",
121
+ "partially_paid",
122
+ "paid",
123
+ "overdue",
124
+ ]);
125
+ const customerPortalFinanceDocumentAvailabilitySchema = z.enum([
126
+ "missing",
127
+ "pending",
128
+ "ready",
129
+ "failed",
130
+ "stale",
131
+ ]);
132
+ const customerPortalFinanceDocumentFormatSchema = z.enum(["html", "pdf", "xml", "json"]);
133
+ const customerPortalProfileDocumentTypeSchema = z.enum([
134
+ "passport",
135
+ "id_card",
136
+ "visa",
137
+ "drivers_license",
138
+ "other",
139
+ ]);
140
+ const customerPortalCompanionDocumentTypeSchema = z.enum([
141
+ "passport",
142
+ "id_card",
143
+ "visa",
144
+ "drivers_license",
145
+ "other",
146
+ ]);
147
+ export const customerPortalAddressSchema = z.object({
148
+ id: z.string(),
149
+ label: customerPortalAddressLabelSchema,
150
+ fullText: z.string().nullable(),
151
+ line1: z.string().nullable(),
152
+ line2: z.string().nullable(),
153
+ city: z.string().nullable(),
154
+ region: z.string().nullable(),
155
+ postalCode: z.string().nullable(),
156
+ country: z.string().nullable(),
157
+ isPrimary: z.boolean(),
158
+ });
159
+ export const updateCustomerPortalAddressSchema = z
160
+ .object({
161
+ label: customerPortalAddressLabelSchema.optional(),
162
+ fullText: z.string().nullable().optional(),
163
+ line1: z.string().nullable().optional(),
164
+ line2: z.string().nullable().optional(),
165
+ city: z.string().nullable().optional(),
166
+ region: z.string().nullable().optional(),
167
+ postalCode: z.string().nullable().optional(),
168
+ country: z.string().nullable().optional(),
169
+ isPrimary: z.boolean().optional(),
170
+ })
171
+ .refine((value) => Object.keys(value).length > 0, {
172
+ message: "At least one billingAddress field must be provided",
173
+ });
72
174
  export const customerPortalRecordSchema = z.object({
73
175
  id: z.string(),
74
176
  firstName: z.string(),
@@ -81,6 +183,7 @@ export const customerPortalRecordSchema = z.object({
81
183
  address: z.string().nullable(),
82
184
  city: z.string().nullable(),
83
185
  country: z.string().nullable(),
186
+ billingAddress: customerPortalAddressSchema.nullable(),
84
187
  relation: z.string().nullable(),
85
188
  status: z.string(),
86
189
  });
@@ -93,13 +196,35 @@ export const customerPortalProfileSchema = z.object({
93
196
  email: z.string().email(),
94
197
  emailVerified: z.boolean(),
95
198
  firstName: z.string().nullable(),
199
+ middleName: z.string().nullable(),
96
200
  lastName: z.string().nullable(),
97
201
  avatarUrl: z.string().nullable(),
98
202
  locale: z.string(),
99
203
  timezone: z.string().nullable(),
100
204
  seatingPreference: seatingPreferenceSchema.nullable(),
205
+ dateOfBirth: z.string().nullable(),
206
+ address: z
207
+ .object({
208
+ country: z.string().nullable(),
209
+ state: z.string().nullable(),
210
+ city: z.string().nullable(),
211
+ postalCode: z.string().nullable(),
212
+ addressLine1: z.string().nullable(),
213
+ addressLine2: z.string().nullable(),
214
+ })
215
+ .nullable(),
216
+ documents: z.array(z.object({
217
+ type: customerPortalProfileDocumentTypeSchema,
218
+ number: z.string(),
219
+ issuingAuthority: z.string().nullable(),
220
+ issuingCountry: z.string(),
221
+ nationality: z.string().nullable(),
222
+ expiryDate: z.string(),
223
+ issueDate: z.string().nullable(),
224
+ })),
101
225
  marketingConsent: z.boolean(),
102
226
  marketingConsentAt: z.string().nullable(),
227
+ marketingConsentSource: z.string().nullable(),
103
228
  notificationDefaults: z.record(z.string(), z.unknown()).nullable(),
104
229
  uiPrefs: z.record(z.string(), z.unknown()).nullable(),
105
230
  customerRecord: customerPortalRecordSchema.nullable(),
@@ -112,16 +237,41 @@ export const updateCustomerPortalRecordSchema = z.object({
112
237
  address: z.string().nullable().optional(),
113
238
  city: z.string().nullable().optional(),
114
239
  country: z.string().nullable().optional(),
240
+ billingAddress: updateCustomerPortalAddressSchema.optional(),
115
241
  });
116
242
  export const updateCustomerPortalProfileSchema = z
117
243
  .object({
118
244
  firstName: z.string().max(200).nullable().optional(),
245
+ middleName: z.string().max(200).nullable().optional(),
119
246
  lastName: z.string().max(200).nullable().optional(),
120
247
  avatarUrl: z.string().url().nullable().optional(),
121
248
  locale: z.string().max(10).optional(),
122
249
  timezone: z.string().max(64).nullable().optional(),
123
250
  seatingPreference: seatingPreferenceSchema.nullable().optional(),
251
+ dateOfBirth: z.string().date().nullable().optional(),
252
+ address: z
253
+ .object({
254
+ country: z.string().nullable().optional(),
255
+ state: z.string().nullable().optional(),
256
+ city: z.string().nullable().optional(),
257
+ postalCode: z.string().nullable().optional(),
258
+ addressLine1: z.string().nullable().optional(),
259
+ addressLine2: z.string().nullable().optional(),
260
+ })
261
+ .optional(),
262
+ documents: z
263
+ .array(z.object({
264
+ type: customerPortalProfileDocumentTypeSchema,
265
+ number: z.string().min(1).max(255),
266
+ issuingAuthority: z.string().max(255).nullable().optional(),
267
+ issuingCountry: z.string().min(1).max(255),
268
+ nationality: z.string().max(255).nullable().optional(),
269
+ expiryDate: z.string().date(),
270
+ issueDate: z.string().date().nullable().optional(),
271
+ }))
272
+ .optional(),
124
273
  marketingConsent: z.boolean().optional(),
274
+ marketingConsentSource: z.string().max(255).nullable().optional(),
125
275
  notificationDefaults: z.record(z.string(), z.unknown()).nullable().optional(),
126
276
  uiPrefs: z.record(z.string(), z.unknown()).nullable().optional(),
127
277
  customerRecord: updateCustomerPortalRecordSchema.optional(),
@@ -138,6 +288,14 @@ export const customerPortalContactExistsResultSchema = z.object({
138
288
  customerRecordExists: z.boolean(),
139
289
  linkedCustomerRecordExists: z.boolean(),
140
290
  });
291
+ export const customerPortalPhoneContactExistsQuerySchema = z.object({
292
+ phone: z.string().min(1).max(50),
293
+ });
294
+ export const customerPortalPhoneContactExistsResultSchema = z.object({
295
+ phone: z.string(),
296
+ customerRecordExists: z.boolean(),
297
+ linkedCustomerRecordExists: z.boolean(),
298
+ });
141
299
  export const bootstrapCustomerPortalSchema = z
142
300
  .object({
143
301
  customerRecordId: z.string().optional(),
@@ -145,6 +303,7 @@ export const bootstrapCustomerPortalSchema = z
145
303
  firstName: z.string().max(200).nullable().optional(),
146
304
  lastName: z.string().max(200).nullable().optional(),
147
305
  marketingConsent: z.boolean().optional(),
306
+ marketingConsentSource: z.string().max(255).nullable().optional(),
148
307
  customerRecord: updateCustomerPortalRecordSchema.optional(),
149
308
  })
150
309
  .refine((value) => value.customerRecordId || value.createCustomerIfMissing !== false, {
@@ -169,6 +328,31 @@ export const customerPortalCompanionSchema = z.object({
169
328
  phone: z.string().nullable(),
170
329
  isPrimary: z.boolean(),
171
330
  notes: z.string().nullable(),
331
+ typeKey: z.string().nullable(),
332
+ person: z.object({
333
+ firstName: z.string().nullable(),
334
+ middleName: z.string().nullable(),
335
+ lastName: z.string().nullable(),
336
+ dateOfBirth: z.string().nullable(),
337
+ addresses: z.array(z.object({
338
+ type: z.string().nullable(),
339
+ country: z.string().nullable(),
340
+ state: z.string().nullable(),
341
+ city: z.string().nullable(),
342
+ postalCode: z.string().nullable(),
343
+ addressLine1: z.string().nullable(),
344
+ addressLine2: z.string().nullable(),
345
+ isDefault: z.boolean(),
346
+ })),
347
+ documents: z.array(z.object({
348
+ type: customerPortalCompanionDocumentTypeSchema,
349
+ number: z.string().nullable(),
350
+ issuingAuthority: z.string().nullable(),
351
+ country: z.string().nullable(),
352
+ issueDate: z.string().nullable(),
353
+ expiryDate: z.string().nullable(),
354
+ })),
355
+ }),
172
356
  metadata: z.record(z.string(), z.unknown()).nullable(),
173
357
  });
174
358
  export const createCustomerPortalCompanionSchema = z.object({
@@ -192,6 +376,37 @@ export const createCustomerPortalCompanionSchema = z.object({
192
376
  phone: z.string().max(50).nullable().optional(),
193
377
  isPrimary: z.boolean().default(false),
194
378
  notes: z.string().nullable().optional(),
379
+ typeKey: z.string().max(100).nullable().optional(),
380
+ person: z
381
+ .object({
382
+ firstName: z.string().max(200).nullable().optional(),
383
+ middleName: z.string().max(200).nullable().optional(),
384
+ lastName: z.string().max(200).nullable().optional(),
385
+ dateOfBirth: z.string().date().nullable().optional(),
386
+ addresses: z
387
+ .array(z.object({
388
+ type: z.string().max(100).nullable().optional(),
389
+ country: z.string().max(255).nullable().optional(),
390
+ state: z.string().max(255).nullable().optional(),
391
+ city: z.string().max(255).nullable().optional(),
392
+ postalCode: z.string().max(50).nullable().optional(),
393
+ addressLine1: z.string().max(255).nullable().optional(),
394
+ addressLine2: z.string().max(255).nullable().optional(),
395
+ isDefault: z.boolean().optional(),
396
+ }))
397
+ .optional(),
398
+ documents: z
399
+ .array(z.object({
400
+ type: customerPortalCompanionDocumentTypeSchema,
401
+ number: z.string().max(255).nullable().optional(),
402
+ issuingAuthority: z.string().max(255).nullable().optional(),
403
+ country: z.string().max(255).nullable().optional(),
404
+ issueDate: z.string().date().nullable().optional(),
405
+ expiryDate: z.string().date().nullable().optional(),
406
+ }))
407
+ .optional(),
408
+ })
409
+ .optional(),
195
410
  metadata: z.record(z.string(), z.unknown()).nullable().optional(),
196
411
  });
197
412
  export const updateCustomerPortalCompanionSchema = createCustomerPortalCompanionSchema
@@ -199,12 +414,21 @@ export const updateCustomerPortalCompanionSchema = createCustomerPortalCompanion
199
414
  .refine((value) => Object.keys(value).length > 0, {
200
415
  message: "At least one field must be provided",
201
416
  });
417
+ export const importCustomerPortalBookingParticipantsSchema = z.object({
418
+ bookingIds: z.array(z.string()).min(1).optional(),
419
+ });
420
+ export const importCustomerPortalBookingParticipantsResultSchema = z.object({
421
+ created: z.array(customerPortalCompanionSchema),
422
+ skippedCount: z.number().int().nonnegative(),
423
+ });
202
424
  export const customerPortalBookingSummarySchema = z.object({
203
425
  bookingId: z.string(),
204
426
  bookingNumber: z.string(),
205
427
  status: bookingStatusSchema,
206
428
  sellCurrency: z.string(),
207
429
  sellAmountCents: z.number().int().nullable(),
430
+ productTitle: z.string().nullable(),
431
+ paymentStatus: customerPortalBookingPaymentSummaryStatusSchema,
208
432
  startDate: z.string().nullable(),
209
433
  endDate: z.string().nullable(),
210
434
  pax: z.number().int().nullable(),
@@ -242,12 +466,59 @@ export const customerPortalBookingParticipantSchema = z.object({
242
466
  lastName: z.string(),
243
467
  isPrimary: z.boolean(),
244
468
  });
469
+ export const customerPortalBookingBillingContactSchema = z.object({
470
+ email: z.string().nullable(),
471
+ phone: z.string().nullable(),
472
+ firstName: z.string().nullable(),
473
+ lastName: z.string().nullable(),
474
+ country: z.string().nullable(),
475
+ state: z.string().nullable(),
476
+ city: z.string().nullable(),
477
+ address1: z.string().nullable(),
478
+ postal: z.string().nullable(),
479
+ });
245
480
  export const customerPortalBookingDocumentSchema = z.object({
246
481
  id: z.string(),
482
+ source: bookingDocumentSourceSchema,
247
483
  participantId: z.string().nullable(),
248
484
  type: bookingDocumentTypeSchema,
249
485
  fileName: z.string(),
250
486
  fileUrl: z.string(),
487
+ mimeType: z.string().nullable(),
488
+ reference: z.string().nullable(),
489
+ });
490
+ export const customerPortalBookingFinancialDocumentSchema = z.object({
491
+ invoiceId: z.string(),
492
+ invoiceNumber: z.string(),
493
+ invoiceType: customerPortalFinanceInvoiceTypeSchema,
494
+ invoiceStatus: customerPortalFinanceInvoiceStatusSchema,
495
+ currency: z.string(),
496
+ totalCents: z.number().int(),
497
+ paidCents: z.number().int(),
498
+ balanceDueCents: z.number().int(),
499
+ issueDate: z.string(),
500
+ dueDate: z.string(),
501
+ documentStatus: customerPortalFinanceDocumentAvailabilitySchema,
502
+ format: customerPortalFinanceDocumentFormatSchema.nullable(),
503
+ generatedAt: z.string().nullable(),
504
+ downloadUrl: z.string().nullable(),
505
+ });
506
+ export const customerPortalBookingPaymentSchema = z.object({
507
+ id: z.string(),
508
+ invoiceId: z.string(),
509
+ invoiceNumber: z.string(),
510
+ invoiceType: customerPortalFinanceInvoiceTypeSchema,
511
+ status: customerPortalFinancePaymentStatusSchema,
512
+ paymentMethod: customerPortalFinancePaymentMethodSchema,
513
+ amountCents: z.number().int(),
514
+ currency: z.string(),
515
+ paymentDate: z.string(),
516
+ referenceNumber: z.string().nullable(),
517
+ notes: z.string().nullable(),
518
+ });
519
+ export const customerPortalBookingFinancialsSchema = z.object({
520
+ documents: z.array(customerPortalBookingFinancialDocumentSchema),
521
+ payments: z.array(customerPortalBookingPaymentSchema),
251
522
  });
252
523
  export const customerPortalBookingFulfillmentSchema = z.object({
253
524
  id: z.string(),
@@ -272,6 +543,8 @@ export const customerPortalBookingDetailSchema = z.object({
272
543
  completedAt: z.string().nullable(),
273
544
  participants: z.array(customerPortalBookingParticipantSchema),
274
545
  items: z.array(customerPortalBookingItemSchema),
546
+ billingContact: customerPortalBookingBillingContactSchema.nullable(),
275
547
  documents: z.array(customerPortalBookingDocumentSchema),
548
+ financials: customerPortalBookingFinancialsSchema,
276
549
  fulfillments: z.array(customerPortalBookingFulfillmentSchema),
277
550
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@voyantjs/customer-portal",
3
- "version": "0.3.0",
3
+ "version": "0.4.0",
4
4
  "license": "FSL-1.1-Apache-2.0",
5
5
  "repository": {
6
6
  "type": "git",
@@ -30,12 +30,15 @@
30
30
  "drizzle-orm": "^0.45.2",
31
31
  "hono": "^4.12.10",
32
32
  "zod": "^4.3.6",
33
- "@voyantjs/bookings": "0.3.0",
34
- "@voyantjs/core": "0.3.0",
35
- "@voyantjs/crm": "0.3.0",
36
- "@voyantjs/db": "0.3.0",
37
- "@voyantjs/hono": "0.3.0",
38
- "@voyantjs/identity": "0.3.0"
33
+ "@voyantjs/bookings": "0.4.0",
34
+ "@voyantjs/core": "0.4.0",
35
+ "@voyantjs/crm": "0.4.0",
36
+ "@voyantjs/db": "0.4.0",
37
+ "@voyantjs/finance": "0.4.0",
38
+ "@voyantjs/hono": "0.4.0",
39
+ "@voyantjs/identity": "0.4.0",
40
+ "@voyantjs/legal": "0.4.0",
41
+ "@voyantjs/utils": "0.4.0"
39
42
  },
40
43
  "devDependencies": {
41
44
  "typescript": "^6.0.2",