@voyantjs/customer-portal 0.2.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.
@@ -0,0 +1,12 @@
1
+ import type { Module } from "@voyantjs/core";
2
+ import type { HonoModule } from "@voyantjs/hono/module";
3
+ export type { CustomerPortalRoutes } from "./routes.js";
4
+ export { customerPortalRoutes } from "./routes.js";
5
+ export type { PublicCustomerPortalRoutes } from "./routes-public.js";
6
+ export { publicCustomerPortalRoutes } from "./routes-public.js";
7
+ export { publicCustomerPortalService } from "./service-public.js";
8
+ export type { BootstrapCustomerPortalInput, BootstrapCustomerPortalResult, CreateCustomerPortalCompanionInput, CustomerPortalBookingDetail, CustomerPortalBookingDocument, CustomerPortalBookingSummary, CustomerPortalBootstrapCandidate, CustomerPortalCompanion, CustomerPortalContactExistsQuery, CustomerPortalContactExistsResult, CustomerPortalProfile, UpdateCustomerPortalCompanionInput, UpdateCustomerPortalProfileInput, } from "./validation-public.js";
9
+ export { bootstrapCustomerPortalResultSchema, bootstrapCustomerPortalSchema, createCustomerPortalCompanionSchema, customerPortalBookingDetailSchema, customerPortalBookingDocumentSchema, customerPortalBookingSummarySchema, customerPortalBootstrapCandidateSchema, customerPortalCompanionSchema, customerPortalContactExistsQuerySchema, customerPortalContactExistsResultSchema, customerPortalProfileSchema, updateCustomerPortalCompanionSchema, updateCustomerPortalProfileSchema, } from "./validation-public.js";
10
+ export declare const customerPortalModule: Module;
11
+ export declare const customerPortalHonoModule: HonoModule;
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AAC5C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAKvD,YAAY,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AAClD,YAAY,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAA;AACpE,OAAO,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAA;AAC/D,OAAO,EAAE,2BAA2B,EAAE,MAAM,qBAAqB,CAAA;AACjE,YAAY,EACV,4BAA4B,EAC5B,6BAA6B,EAC7B,kCAAkC,EAClC,2BAA2B,EAC3B,6BAA6B,EAC7B,4BAA4B,EAC5B,gCAAgC,EAChC,uBAAuB,EACvB,gCAAgC,EAChC,iCAAiC,EACjC,qBAAqB,EACrB,kCAAkC,EAClC,gCAAgC,GACjC,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EACL,mCAAmC,EACnC,6BAA6B,EAC7B,mCAAmC,EACnC,iCAAiC,EACjC,mCAAmC,EACnC,kCAAkC,EAClC,sCAAsC,EACtC,6BAA6B,EAC7B,sCAAsC,EACtC,uCAAuC,EACvC,2BAA2B,EAC3B,mCAAmC,EACnC,iCAAiC,GAClC,MAAM,wBAAwB,CAAA;AAE/B,eAAO,MAAM,oBAAoB,EAAE,MAElC,CAAA;AAED,eAAO,MAAM,wBAAwB,EAAE,UAItC,CAAA"}
package/dist/index.js ADDED
@@ -0,0 +1,14 @@
1
+ import { customerPortalRoutes } from "./routes.js";
2
+ import { publicCustomerPortalRoutes } from "./routes-public.js";
3
+ export { customerPortalRoutes } from "./routes.js";
4
+ export { publicCustomerPortalRoutes } from "./routes-public.js";
5
+ export { publicCustomerPortalService } from "./service-public.js";
6
+ export { bootstrapCustomerPortalResultSchema, bootstrapCustomerPortalSchema, createCustomerPortalCompanionSchema, customerPortalBookingDetailSchema, customerPortalBookingDocumentSchema, customerPortalBookingSummarySchema, customerPortalBootstrapCandidateSchema, customerPortalCompanionSchema, customerPortalContactExistsQuerySchema, customerPortalContactExistsResultSchema, customerPortalProfileSchema, updateCustomerPortalCompanionSchema, updateCustomerPortalProfileSchema, } from "./validation-public.js";
7
+ export const customerPortalModule = {
8
+ name: "customer-portal",
9
+ };
10
+ export const customerPortalHonoModule = {
11
+ module: customerPortalModule,
12
+ routes: customerPortalRoutes,
13
+ publicRoutes: publicCustomerPortalRoutes,
14
+ };
@@ -0,0 +1,568 @@
1
+ import type { PostgresJsDatabase } from "drizzle-orm/postgres-js";
2
+ type Env = {
3
+ Variables: {
4
+ db: PostgresJsDatabase;
5
+ userId?: string;
6
+ };
7
+ };
8
+ export declare const publicCustomerPortalRoutes: import("hono/hono-base").HonoBase<Env, {
9
+ "/me": {
10
+ $get: {
11
+ input: {};
12
+ output: {
13
+ error: string;
14
+ };
15
+ outputFormat: "json";
16
+ status: 401;
17
+ } | {
18
+ input: {};
19
+ output: {
20
+ data: {
21
+ userId: string;
22
+ email: string;
23
+ emailVerified: boolean;
24
+ firstName: string | null;
25
+ lastName: string | null;
26
+ avatarUrl: string | null;
27
+ locale: string;
28
+ timezone: string | null;
29
+ seatingPreference: "aisle" | "window" | "middle" | "no_preference" | null;
30
+ marketingConsent: boolean;
31
+ marketingConsentAt: string | null;
32
+ notificationDefaults: {
33
+ [x: string]: import("hono/utils/types").JSONValue;
34
+ } | null;
35
+ uiPrefs: {
36
+ [x: string]: import("hono/utils/types").JSONValue;
37
+ } | null;
38
+ customerRecord: {
39
+ id: string;
40
+ firstName: string;
41
+ lastName: string;
42
+ preferredLanguage: string | null;
43
+ preferredCurrency: string | null;
44
+ birthday: string | null;
45
+ email: string | null;
46
+ phone: string | null;
47
+ address: string | null;
48
+ city: string | null;
49
+ country: string | null;
50
+ relation: string | null;
51
+ status: string;
52
+ } | null;
53
+ };
54
+ };
55
+ outputFormat: "json";
56
+ status: import("hono/utils/http-status").ContentfulStatusCode;
57
+ } | {
58
+ input: {};
59
+ output: {
60
+ error: string;
61
+ };
62
+ outputFormat: "json";
63
+ status: 404;
64
+ };
65
+ };
66
+ } & {
67
+ "/me": {
68
+ $patch: {
69
+ input: {};
70
+ output: {
71
+ error: string;
72
+ };
73
+ outputFormat: "json";
74
+ status: 401;
75
+ } | {
76
+ input: {};
77
+ output: {
78
+ error: string;
79
+ };
80
+ outputFormat: "json";
81
+ status: 404;
82
+ } | {
83
+ input: {};
84
+ output: {
85
+ error: string;
86
+ };
87
+ outputFormat: "json";
88
+ status: 409;
89
+ } | {
90
+ input: {};
91
+ output: {
92
+ data: {
93
+ userId: string;
94
+ email: string;
95
+ emailVerified: boolean;
96
+ firstName: string | null;
97
+ lastName: string | null;
98
+ avatarUrl: string | null;
99
+ locale: string;
100
+ timezone: string | null;
101
+ seatingPreference: "aisle" | "window" | "middle" | "no_preference" | null;
102
+ marketingConsent: boolean;
103
+ marketingConsentAt: string | null;
104
+ notificationDefaults: {
105
+ [x: string]: import("hono/utils/types").JSONValue;
106
+ } | null;
107
+ uiPrefs: {
108
+ [x: string]: import("hono/utils/types").JSONValue;
109
+ } | null;
110
+ customerRecord: {
111
+ id: string;
112
+ firstName: string;
113
+ lastName: string;
114
+ preferredLanguage: string | null;
115
+ preferredCurrency: string | null;
116
+ birthday: string | null;
117
+ email: string | null;
118
+ phone: string | null;
119
+ address: string | null;
120
+ city: string | null;
121
+ country: string | null;
122
+ relation: string | null;
123
+ status: string;
124
+ } | null;
125
+ };
126
+ };
127
+ outputFormat: "json";
128
+ status: import("hono/utils/http-status").ContentfulStatusCode;
129
+ };
130
+ };
131
+ } & {
132
+ "/bootstrap": {
133
+ $post: {
134
+ input: {};
135
+ output: {
136
+ error: string;
137
+ };
138
+ outputFormat: "json";
139
+ status: 401;
140
+ } | {
141
+ input: {};
142
+ output: {
143
+ error: string;
144
+ };
145
+ outputFormat: "json";
146
+ status: 404;
147
+ } | {
148
+ input: {};
149
+ output: {
150
+ error: string;
151
+ };
152
+ outputFormat: "json";
153
+ status: 409;
154
+ } | {
155
+ input: {};
156
+ output: {
157
+ data: {
158
+ status: "already_linked" | "linked_existing_customer" | "created_customer" | "customer_selection_required";
159
+ profile: {
160
+ userId: string;
161
+ email: string;
162
+ emailVerified: boolean;
163
+ firstName: string | null;
164
+ lastName: string | null;
165
+ avatarUrl: string | null;
166
+ locale: string;
167
+ timezone: string | null;
168
+ seatingPreference: "aisle" | "window" | "middle" | "no_preference" | null;
169
+ marketingConsent: boolean;
170
+ marketingConsentAt: string | null;
171
+ notificationDefaults: {
172
+ [x: string]: import("hono/utils/types").JSONValue;
173
+ } | null;
174
+ uiPrefs: {
175
+ [x: string]: import("hono/utils/types").JSONValue;
176
+ } | null;
177
+ customerRecord: {
178
+ id: string;
179
+ firstName: string;
180
+ lastName: string;
181
+ preferredLanguage: string | null;
182
+ preferredCurrency: string | null;
183
+ birthday: string | null;
184
+ email: string | null;
185
+ phone: string | null;
186
+ address: string | null;
187
+ city: string | null;
188
+ country: string | null;
189
+ relation: string | null;
190
+ status: string;
191
+ } | null;
192
+ } | null;
193
+ candidates: {
194
+ id: string;
195
+ firstName: string;
196
+ lastName: string;
197
+ preferredLanguage: string | null;
198
+ preferredCurrency: string | null;
199
+ birthday: string | null;
200
+ email: string | null;
201
+ phone: string | null;
202
+ address: string | null;
203
+ city: string | null;
204
+ country: string | null;
205
+ relation: string | null;
206
+ status: string;
207
+ linkable: boolean;
208
+ claimedByAnotherUser: boolean;
209
+ }[];
210
+ };
211
+ };
212
+ outputFormat: "json";
213
+ status: import("hono/utils/http-status").ContentfulStatusCode;
214
+ };
215
+ };
216
+ } & {
217
+ "/companions": {
218
+ $get: {
219
+ input: {};
220
+ output: {
221
+ error: string;
222
+ };
223
+ outputFormat: "json";
224
+ status: 401;
225
+ } | {
226
+ input: {};
227
+ output: {
228
+ data: {
229
+ id: string;
230
+ role: string;
231
+ name: string;
232
+ title: string | null;
233
+ email: string | null;
234
+ phone: string | null;
235
+ isPrimary: boolean;
236
+ notes: string | null;
237
+ metadata: {
238
+ [x: string]: import("hono/utils/types").JSONValue;
239
+ } | null;
240
+ }[];
241
+ };
242
+ outputFormat: "json";
243
+ status: import("hono/utils/http-status").ContentfulStatusCode;
244
+ };
245
+ };
246
+ } & {
247
+ "/companions": {
248
+ $post: {
249
+ input: {};
250
+ output: {
251
+ error: string;
252
+ };
253
+ outputFormat: "json";
254
+ status: 401;
255
+ } | {
256
+ input: {};
257
+ output: {
258
+ error: string;
259
+ };
260
+ outputFormat: "json";
261
+ status: 409;
262
+ } | {
263
+ input: {};
264
+ output: {
265
+ data: {
266
+ id: string;
267
+ role: string;
268
+ name: string;
269
+ title: string | null;
270
+ email: string | null;
271
+ phone: string | null;
272
+ isPrimary: boolean;
273
+ notes: string | null;
274
+ metadata: {
275
+ [x: string]: import("hono/utils/types").JSONValue;
276
+ } | null;
277
+ };
278
+ };
279
+ outputFormat: "json";
280
+ status: 201;
281
+ };
282
+ };
283
+ } & {
284
+ "/companions/:companionId": {
285
+ $patch: {
286
+ input: {
287
+ param: {
288
+ companionId: string;
289
+ };
290
+ };
291
+ output: {
292
+ error: string;
293
+ };
294
+ outputFormat: "json";
295
+ status: 401;
296
+ } | {
297
+ input: {
298
+ param: {
299
+ companionId: string;
300
+ };
301
+ };
302
+ output: {
303
+ error: string;
304
+ };
305
+ outputFormat: "json";
306
+ status: 404;
307
+ } | {
308
+ input: {
309
+ param: {
310
+ companionId: string;
311
+ };
312
+ };
313
+ output: {
314
+ error: string;
315
+ };
316
+ outputFormat: "json";
317
+ status: 403;
318
+ } | {
319
+ input: {
320
+ param: {
321
+ companionId: string;
322
+ };
323
+ };
324
+ output: {
325
+ data: {
326
+ id: string;
327
+ role: string;
328
+ name: string;
329
+ title: string | null;
330
+ email: string | null;
331
+ phone: string | null;
332
+ isPrimary: boolean;
333
+ notes: string | null;
334
+ metadata: {
335
+ [x: string]: import("hono/utils/types").JSONValue;
336
+ } | null;
337
+ };
338
+ };
339
+ outputFormat: "json";
340
+ status: import("hono/utils/http-status").ContentfulStatusCode;
341
+ };
342
+ };
343
+ } & {
344
+ "/companions/:companionId": {
345
+ $delete: {
346
+ input: {
347
+ param: {
348
+ companionId: string;
349
+ };
350
+ };
351
+ output: {
352
+ error: string;
353
+ };
354
+ outputFormat: "json";
355
+ status: 401;
356
+ } | {
357
+ input: {
358
+ param: {
359
+ companionId: string;
360
+ };
361
+ };
362
+ output: {
363
+ error: string;
364
+ };
365
+ outputFormat: "json";
366
+ status: 404;
367
+ } | {
368
+ input: {
369
+ param: {
370
+ companionId: string;
371
+ };
372
+ };
373
+ output: {
374
+ error: string;
375
+ };
376
+ outputFormat: "json";
377
+ status: 403;
378
+ } | {
379
+ input: {
380
+ param: {
381
+ companionId: string;
382
+ };
383
+ };
384
+ output: {
385
+ success: true;
386
+ };
387
+ outputFormat: "json";
388
+ status: import("hono/utils/http-status").ContentfulStatusCode;
389
+ };
390
+ };
391
+ } & {
392
+ "/bookings": {
393
+ $get: {
394
+ input: {};
395
+ output: {
396
+ error: string;
397
+ };
398
+ outputFormat: "json";
399
+ status: 401;
400
+ } | {
401
+ input: {};
402
+ output: {
403
+ error: string;
404
+ };
405
+ outputFormat: "json";
406
+ status: 404;
407
+ } | {
408
+ input: {};
409
+ output: {
410
+ data: {
411
+ bookingId: string;
412
+ bookingNumber: string;
413
+ status: "draft" | "on_hold" | "confirmed" | "in_progress" | "completed" | "expired" | "cancelled";
414
+ sellCurrency: string;
415
+ sellAmountCents: number | null;
416
+ startDate: string | null;
417
+ endDate: string | null;
418
+ pax: number | null;
419
+ confirmedAt: string | null;
420
+ completedAt: string | null;
421
+ participantCount: number;
422
+ primaryTravelerName: string | null;
423
+ }[];
424
+ };
425
+ outputFormat: "json";
426
+ status: import("hono/utils/http-status").ContentfulStatusCode;
427
+ };
428
+ };
429
+ } & {
430
+ "/bookings/:bookingId": {
431
+ $get: {
432
+ input: {
433
+ param: {
434
+ bookingId: string;
435
+ };
436
+ };
437
+ output: {
438
+ error: string;
439
+ };
440
+ outputFormat: "json";
441
+ status: 401;
442
+ } | {
443
+ input: {
444
+ param: {
445
+ bookingId: string;
446
+ };
447
+ };
448
+ output: {
449
+ error: string;
450
+ };
451
+ outputFormat: "json";
452
+ status: 404;
453
+ } | {
454
+ input: {
455
+ param: {
456
+ bookingId: string;
457
+ };
458
+ };
459
+ output: {
460
+ data: {
461
+ bookingId: string;
462
+ bookingNumber: string;
463
+ status: "draft" | "on_hold" | "confirmed" | "in_progress" | "completed" | "expired" | "cancelled";
464
+ sellCurrency: string;
465
+ sellAmountCents: number | null;
466
+ startDate: string | null;
467
+ endDate: string | null;
468
+ pax: number | null;
469
+ confirmedAt: string | null;
470
+ cancelledAt: string | null;
471
+ completedAt: string | null;
472
+ participants: {
473
+ id: string;
474
+ participantType: "staff" | "other" | "traveler" | "booker" | "contact" | "occupant";
475
+ firstName: string;
476
+ lastName: string;
477
+ isPrimary: boolean;
478
+ }[];
479
+ items: {
480
+ id: string;
481
+ title: string;
482
+ description: string | null;
483
+ itemType: "other" | "unit" | "extra" | "service" | "fee" | "tax" | "discount" | "adjustment" | "accommodation" | "transport";
484
+ status: "draft" | "on_hold" | "confirmed" | "expired" | "cancelled" | "fulfilled";
485
+ serviceDate: string | null;
486
+ startsAt: string | null;
487
+ endsAt: string | null;
488
+ quantity: number;
489
+ sellCurrency: string;
490
+ unitSellAmountCents: number | null;
491
+ totalSellAmountCents: number | null;
492
+ notes: string | null;
493
+ participantLinks: {
494
+ id: string;
495
+ participantId: string;
496
+ role: "other" | "traveler" | "occupant" | "primary_contact" | "service_assignee" | "beneficiary";
497
+ isPrimary: boolean;
498
+ }[];
499
+ }[];
500
+ documents: {
501
+ id: string;
502
+ participantId: string | null;
503
+ type: "visa" | "insurance" | "health" | "passport_copy" | "other";
504
+ fileName: string;
505
+ fileUrl: string;
506
+ }[];
507
+ fulfillments: {
508
+ id: string;
509
+ bookingItemId: string | null;
510
+ participantId: string | null;
511
+ fulfillmentType: "other" | "voucher" | "ticket" | "pdf" | "qr_code" | "barcode" | "mobile";
512
+ deliveryChannel: "other" | "download" | "email" | "api" | "wallet";
513
+ status: "pending" | "issued" | "reissued" | "revoked" | "failed";
514
+ artifactUrl: string | null;
515
+ }[];
516
+ };
517
+ };
518
+ outputFormat: "json";
519
+ status: import("hono/utils/http-status").ContentfulStatusCode;
520
+ };
521
+ };
522
+ } & {
523
+ "/bookings/:bookingId/documents": {
524
+ $get: {
525
+ input: {
526
+ param: {
527
+ bookingId: string;
528
+ };
529
+ };
530
+ output: {
531
+ error: string;
532
+ };
533
+ outputFormat: "json";
534
+ status: 401;
535
+ } | {
536
+ input: {
537
+ param: {
538
+ bookingId: string;
539
+ };
540
+ };
541
+ output: {
542
+ error: string;
543
+ };
544
+ outputFormat: "json";
545
+ status: 404;
546
+ } | {
547
+ input: {
548
+ param: {
549
+ bookingId: string;
550
+ };
551
+ };
552
+ output: {
553
+ data: {
554
+ id: string;
555
+ participantId: string | null;
556
+ type: "visa" | "insurance" | "health" | "passport_copy" | "other";
557
+ fileName: string;
558
+ fileUrl: string;
559
+ }[];
560
+ };
561
+ outputFormat: "json";
562
+ status: import("hono/utils/http-status").ContentfulStatusCode;
563
+ };
564
+ };
565
+ }, "/", "/bookings/:bookingId/documents">;
566
+ export type PublicCustomerPortalRoutes = typeof publicCustomerPortalRoutes;
567
+ export {};
568
+ //# sourceMappingURL=routes-public.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routes-public.d.ts","sourceRoot":"","sources":["../src/routes-public.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAWjE,KAAK,GAAG,GAAG;IACT,SAAS,EAAE;QACT,EAAE,EAAE,kBAAkB,CAAA;QACtB,MAAM,CAAC,EAAE,MAAM,CAAA;KAChB,CAAA;CACF,CAAA;AAwBD,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;yCAyKnC,CAAA;AAEJ,MAAM,MAAM,0BAA0B,GAAG,OAAO,0BAA0B,CAAA"}