@voyantjs/transactions 0.6.8 → 0.6.9

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 (60) hide show
  1. package/dist/index.d.ts +6 -6
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +3 -3
  4. package/dist/pii.d.ts +16 -9
  5. package/dist/pii.d.ts.map +1 -1
  6. package/dist/pii.js +76 -70
  7. package/dist/routes-offers.d.ts +462 -28
  8. package/dist/routes-offers.d.ts.map +1 -1
  9. package/dist/routes-offers.js +199 -84
  10. package/dist/routes-orders.d.ts +461 -27
  11. package/dist/routes-orders.d.ts.map +1 -1
  12. package/dist/routes-orders.js +199 -84
  13. package/dist/routes-shared.d.ts +20 -13
  14. package/dist/routes-shared.d.ts.map +1 -1
  15. package/dist/routes-shared.js +7 -6
  16. package/dist/schema/participant-identity.d.ts +43 -6
  17. package/dist/schema/participant-identity.d.ts.map +1 -1
  18. package/dist/schema/participant-identity.js +12 -5
  19. package/dist/schema-audit.d.ts +4 -4
  20. package/dist/schema-audit.js +3 -3
  21. package/dist/schema-contacts.d.ts +529 -0
  22. package/dist/schema-contacts.d.ts.map +1 -0
  23. package/dist/schema-contacts.js +57 -0
  24. package/dist/schema-offers.d.ts +177 -3
  25. package/dist/schema-offers.d.ts.map +1 -1
  26. package/dist/schema-offers.js +13 -3
  27. package/dist/schema-orders.d.ts +177 -3
  28. package/dist/schema-orders.d.ts.map +1 -1
  29. package/dist/schema-orders.js +13 -3
  30. package/dist/schema-relations.d.ts +24 -0
  31. package/dist/schema-relations.d.ts.map +1 -1
  32. package/dist/schema-relations.js +40 -2
  33. package/dist/schema-shared.d.ts +3 -1
  34. package/dist/schema-shared.d.ts.map +1 -1
  35. package/dist/schema-shared.js +8 -2
  36. package/dist/schema-staff.d.ts +529 -0
  37. package/dist/schema-staff.d.ts.map +1 -0
  38. package/dist/schema-staff.js +57 -0
  39. package/dist/schema.d.ts +2 -0
  40. package/dist/schema.d.ts.map +1 -1
  41. package/dist/schema.js +2 -0
  42. package/dist/service-offers.d.ts +275 -29
  43. package/dist/service-offers.d.ts.map +1 -1
  44. package/dist/service-offers.js +306 -43
  45. package/dist/service-orders.d.ts +227 -25
  46. package/dist/service-orders.d.ts.map +1 -1
  47. package/dist/service-orders.js +127 -22
  48. package/dist/service-shared.d.ts +144 -22
  49. package/dist/service-shared.d.ts.map +1 -1
  50. package/dist/service-shared.js +30 -2
  51. package/dist/service.d.ts +62 -22
  52. package/dist/service.d.ts.map +1 -1
  53. package/dist/service.js +42 -2
  54. package/dist/storefront-offers.d.ts +39 -5
  55. package/dist/storefront-offers.d.ts.map +1 -1
  56. package/dist/storefront-offers.js +3 -3
  57. package/dist/validation.d.ts +674 -36
  58. package/dist/validation.d.ts.map +1 -1
  59. package/dist/validation.js +186 -29
  60. package/package.json +5 -5
@@ -1,8 +1,9 @@
1
- import { parseJsonBody, parseQuery } from "@voyantjs/hono";
1
+ import { normalizeValidationError, parseJsonBody, parseQuery } from "@voyantjs/hono";
2
2
  import { Hono } from "hono";
3
- import { authorizeTransactionPiiAccess, createPiiService, hasParticipantIdentityInput, logTransactionPiiAccess, notFound, } from "./routes-shared.js";
3
+ import { authorizeTransactionPiiAccess, createPiiService, hasTravelerIdentityInput, logTransactionPiiAccess, notFound, } from "./routes-shared.js";
4
4
  import { transactionsService } from "./service.js";
5
- import { insertOfferItemParticipantSchema, insertOfferItemSchema, insertOfferParticipantSchema, insertOfferSchema, offerItemListQuerySchema, offerItemParticipantListQuerySchema, offerListQuerySchema, offerParticipantListQuerySchema, updateOfferItemParticipantSchema, updateOfferItemSchema, updateOfferParticipantSchema, updateOfferSchema, } from "./validation.js";
5
+ import { toTravelerIdentityResponse } from "./service-shared.js";
6
+ import { insertOfferContactAssignmentSchema, insertOfferItemSchema, insertOfferItemTravelerSchema, insertOfferSchema, insertOfferStaffAssignmentSchema, insertOfferTravelerSchema, offerContactAssignmentListQuerySchema, offerItemListQuerySchema, offerItemTravelerListQuerySchema, offerListQuerySchema, offerStaffAssignmentListQuerySchema, offerTravelerListQuerySchema, updateOfferContactAssignmentSchema, updateOfferItemSchema, updateOfferItemTravelerSchema, updateOfferSchema, updateOfferStaffAssignmentSchema, updateOfferTravelerSchema, } from "./validation.js";
6
7
  export const transactionOfferRoutes = new Hono()
7
8
  .get("/offers", async (c) => {
8
9
  const query = parseQuery(c, offerListQuerySchema);
@@ -23,104 +24,218 @@ export const transactionOfferRoutes = new Hono()
23
24
  const row = await transactionsService.deleteOffer(c.get("db"), c.req.param("id"));
24
25
  return row ? c.json({ success: true }) : notFound(c, "Offer not found");
25
26
  })
26
- .get("/offer-participants", async (c) => {
27
- const query = parseQuery(c, offerParticipantListQuerySchema);
28
- return c.json(await transactionsService.listOfferParticipants(c.get("db"), query));
27
+ .get("/offer-travelers", async (c) => {
28
+ const query = parseQuery(c, offerTravelerListQuerySchema);
29
+ return c.json(await transactionsService.listOfferTravelers(c.get("db"), query));
29
30
  })
30
- .post("/offer-participants", async (c) => {
31
- const payload = await parseJsonBody(c, insertOfferParticipantSchema);
32
- const row = await transactionsService.createOfferParticipant(c.get("db"), payload);
33
- if (!row)
31
+ .post("/offer-travelers", async (c) => {
32
+ try {
33
+ const payload = await parseJsonBody(c, insertOfferTravelerSchema);
34
+ const row = await transactionsService.createOfferTraveler(c.get("db"), payload);
35
+ if (!row)
36
+ return c.json({ data: row }, 201);
37
+ if (hasTravelerIdentityInput(payload)) {
38
+ const pii = createPiiService(c, "offer", row.offerId);
39
+ await pii.upsertTravelerIdentity(c.get("db"), "offer", row.id, payload, c.get("userId"));
40
+ return c.json({ data: await transactionsService.getOfferTravelerById(c.get("db"), row.id) }, 201);
41
+ }
34
42
  return c.json({ data: row }, 201);
35
- if (hasParticipantIdentityInput(payload)) {
36
- const pii = createPiiService(c, "offer", row.offerId);
37
- await pii.upsertParticipantIdentity(c.get("db"), "offer", row.id, payload, c.get("userId"));
38
- return c.json({ data: await transactionsService.getOfferParticipantById(c.get("db"), row.id) }, 201);
39
43
  }
40
- return c.json({ data: row }, 201);
41
- })
42
- .get("/offer-participants/:id", async (c) => {
43
- const row = await transactionsService.getOfferParticipantById(c.get("db"), c.req.param("id"));
44
- return row ? c.json({ data: row }) : notFound(c, "Offer participant not found");
45
- })
46
- .patch("/offer-participants/:id", async (c) => {
47
- const payload = await parseJsonBody(c, updateOfferParticipantSchema);
48
- const row = await transactionsService.updateOfferParticipant(c.get("db"), c.req.param("id"), payload);
49
- if (!row)
50
- return notFound(c, "Offer participant not found");
51
- if (hasParticipantIdentityInput(payload)) {
52
- const pii = createPiiService(c, "offer", row.offerId);
53
- await pii.upsertParticipantIdentity(c.get("db"), "offer", row.id, payload, c.get("userId"));
54
- return c.json({
55
- data: await transactionsService.getOfferParticipantById(c.get("db"), row.id),
56
- });
44
+ catch (error) {
45
+ const validationError = normalizeValidationError(error);
46
+ if (validationError?.status === 400) {
47
+ return c.json({
48
+ error: validationError.message,
49
+ details: validationError.details?.fields ?? validationError.details,
50
+ }, 400);
51
+ }
52
+ throw error;
57
53
  }
58
- return c.json({ data: row });
59
54
  })
60
- .get("/offer-participants/:id/travel-details", async (c) => {
61
- const participant = await transactionsService.getOfferParticipantById(c.get("db"), c.req.param("id"));
62
- if (!participant)
63
- return notFound(c, "Offer participant not found");
55
+ .get("/offer-travelers/:id", async (c) => {
56
+ const row = await transactionsService.getOfferTravelerById(c.get("db"), c.req.param("id"));
57
+ return row ? c.json({ data: row }) : notFound(c, "Offer traveler not found");
58
+ })
59
+ .patch("/offer-travelers/:id", async (c) => {
60
+ try {
61
+ const payload = await parseJsonBody(c, updateOfferTravelerSchema);
62
+ const row = await transactionsService.updateOfferTraveler(c.get("db"), c.req.param("id"), payload);
63
+ if (!row)
64
+ return notFound(c, "Offer traveler not found");
65
+ if (hasTravelerIdentityInput(payload)) {
66
+ const pii = createPiiService(c, "offer", row.offerId);
67
+ await pii.upsertTravelerIdentity(c.get("db"), "offer", row.id, payload, c.get("userId"));
68
+ return c.json({
69
+ data: await transactionsService.getOfferTravelerById(c.get("db"), row.id),
70
+ });
71
+ }
72
+ return c.json({ data: row });
73
+ }
74
+ catch (error) {
75
+ const validationError = normalizeValidationError(error);
76
+ if (validationError?.status === 400) {
77
+ return c.json({
78
+ error: validationError.message,
79
+ details: validationError.details?.fields ?? validationError.details,
80
+ }, 400);
81
+ }
82
+ throw error;
83
+ }
84
+ })
85
+ .get("/offer-travelers/:id/travel-details", async (c) => {
86
+ const traveler = await transactionsService.getOfferTravelerById(c.get("db"), c.req.param("id"));
87
+ if (!traveler)
88
+ return notFound(c, "Offer traveler not found");
64
89
  const auth = await authorizeTransactionPiiAccess(c, {
65
- participantKind: "offer",
66
- participantId: participant.id,
67
- parentId: participant.offerId,
90
+ travelerKind: "offer",
91
+ travelerId: traveler.id,
92
+ parentId: traveler.offerId,
68
93
  action: "read",
69
94
  });
70
95
  if (!auth.allowed)
71
96
  return auth.response;
72
- const pii = createPiiService(c, "offer", participant.offerId);
73
- const row = await pii.getParticipantIdentity(c.get("db"), "offer", participant.id, c.get("userId"));
97
+ const pii = createPiiService(c, "offer", traveler.offerId);
98
+ const row = await pii.getTravelerIdentity(c.get("db"), "offer", traveler.id, c.get("userId"));
74
99
  if (!row) {
75
100
  await logTransactionPiiAccess(c, {
76
- participantKind: "offer",
77
- parentId: participant.offerId,
78
- participantId: participant.id,
101
+ travelerKind: "offer",
102
+ parentId: traveler.offerId,
103
+ travelerId: traveler.id,
79
104
  action: "read",
80
105
  outcome: "denied",
81
106
  reason: "travel_details_not_found",
82
107
  });
83
- return c.json({ error: "Offer participant travel details not found" }, 404);
108
+ return c.json({ error: "Offer traveler travel details not found" }, 404);
84
109
  }
85
- return c.json({ data: row });
110
+ return c.json({ data: toTravelerIdentityResponse(row) });
86
111
  })
87
- .patch("/offer-participants/:id/travel-details", async (c) => {
88
- const participant = await transactionsService.getOfferParticipantById(c.get("db"), c.req.param("id"));
89
- if (!participant)
90
- return notFound(c, "Offer participant not found");
112
+ .patch("/offer-travelers/:id/travel-details", async (c) => {
113
+ const traveler = await transactionsService.getOfferTravelerById(c.get("db"), c.req.param("id"));
114
+ if (!traveler)
115
+ return notFound(c, "Offer traveler not found");
91
116
  const auth = await authorizeTransactionPiiAccess(c, {
92
- participantKind: "offer",
93
- participantId: participant.id,
94
- parentId: participant.offerId,
117
+ travelerKind: "offer",
118
+ travelerId: traveler.id,
119
+ parentId: traveler.offerId,
95
120
  action: "update",
96
121
  });
97
122
  if (!auth.allowed)
98
123
  return auth.response;
99
- const pii = createPiiService(c, "offer", participant.offerId);
100
- const row = await pii.upsertParticipantIdentity(c.get("db"), "offer", participant.id, await parseJsonBody(c, updateOfferParticipantSchema), c.get("userId"));
101
- return row ? c.json({ data: row }) : notFound(c, "Offer participant not found");
102
- })
103
- .delete("/offer-participants/:id/travel-details", async (c) => {
104
- const participant = await transactionsService.getOfferParticipantById(c.get("db"), c.req.param("id"));
105
- if (!participant)
106
- return notFound(c, "Offer participant not found");
124
+ const pii = createPiiService(c, "offer", traveler.offerId);
125
+ const row = await pii.upsertTravelerIdentity(c.get("db"), "offer", traveler.id, await parseJsonBody(c, updateOfferTravelerSchema), c.get("userId"));
126
+ return row
127
+ ? c.json({ data: toTravelerIdentityResponse(row) })
128
+ : notFound(c, "Offer traveler not found");
129
+ })
130
+ .delete("/offer-travelers/:id/travel-details", async (c) => {
131
+ const traveler = await transactionsService.getOfferTravelerById(c.get("db"), c.req.param("id"));
132
+ if (!traveler)
133
+ return notFound(c, "Offer traveler not found");
107
134
  const auth = await authorizeTransactionPiiAccess(c, {
108
- participantKind: "offer",
109
- participantId: participant.id,
110
- parentId: participant.offerId,
135
+ travelerKind: "offer",
136
+ travelerId: traveler.id,
137
+ parentId: traveler.offerId,
111
138
  action: "delete",
112
139
  });
113
140
  if (!auth.allowed)
114
141
  return auth.response;
115
- const pii = createPiiService(c, "offer", participant.offerId);
116
- const row = await pii.deleteParticipantIdentity(c.get("db"), "offer", participant.id, c.get("userId"));
142
+ const pii = createPiiService(c, "offer", traveler.offerId);
143
+ const row = await pii.deleteTravelerIdentity(c.get("db"), "offer", traveler.id, c.get("userId"));
117
144
  return row
118
145
  ? c.json({ success: true })
119
- : c.json({ error: "Offer participant travel details not found" }, 404);
146
+ : c.json({ error: "Offer traveler travel details not found" }, 404);
147
+ })
148
+ .delete("/offer-travelers/:id", async (c) => {
149
+ const row = await transactionsService.deleteOfferTraveler(c.get("db"), c.req.param("id"));
150
+ return row ? c.json({ success: true }) : notFound(c, "Offer traveler not found");
151
+ })
152
+ .get("/offer-contact-assignments", async (c) => {
153
+ const query = parseQuery(c, offerContactAssignmentListQuerySchema);
154
+ return c.json(await transactionsService.listOfferContactAssignments(c.get("db"), query));
155
+ })
156
+ .post("/offer-contact-assignments", async (c) => {
157
+ try {
158
+ const row = await transactionsService.createOfferContactAssignment(c.get("db"), await parseJsonBody(c, insertOfferContactAssignmentSchema));
159
+ return c.json({ data: row }, 201);
160
+ }
161
+ catch (error) {
162
+ const validationError = normalizeValidationError(error);
163
+ if (validationError?.status === 400) {
164
+ return c.json({
165
+ error: validationError.message,
166
+ details: validationError.details?.fields ?? validationError.details,
167
+ }, 400);
168
+ }
169
+ throw error;
170
+ }
171
+ })
172
+ .get("/offer-contact-assignments/:id", async (c) => {
173
+ const row = await transactionsService.getOfferContactAssignmentById(c.get("db"), c.req.param("id"));
174
+ return row ? c.json({ data: row }) : notFound(c, "Offer contact assignment not found");
175
+ })
176
+ .patch("/offer-contact-assignments/:id", async (c) => {
177
+ try {
178
+ const row = await transactionsService.updateOfferContactAssignment(c.get("db"), c.req.param("id"), await parseJsonBody(c, updateOfferContactAssignmentSchema));
179
+ return row ? c.json({ data: row }) : notFound(c, "Offer contact assignment not found");
180
+ }
181
+ catch (error) {
182
+ const validationError = normalizeValidationError(error);
183
+ if (validationError?.status === 400) {
184
+ return c.json({
185
+ error: validationError.message,
186
+ details: validationError.details?.fields ?? validationError.details,
187
+ }, 400);
188
+ }
189
+ throw error;
190
+ }
191
+ })
192
+ .delete("/offer-contact-assignments/:id", async (c) => {
193
+ const row = await transactionsService.deleteOfferContactAssignment(c.get("db"), c.req.param("id"));
194
+ return row ? c.json({ success: true }) : notFound(c, "Offer contact assignment not found");
195
+ })
196
+ .get("/offer-staff-assignments", async (c) => {
197
+ const query = parseQuery(c, offerStaffAssignmentListQuerySchema);
198
+ return c.json(await transactionsService.listOfferStaffAssignments(c.get("db"), query));
199
+ })
200
+ .post("/offer-staff-assignments", async (c) => {
201
+ try {
202
+ const row = await transactionsService.createOfferStaffAssignment(c.get("db"), await parseJsonBody(c, insertOfferStaffAssignmentSchema));
203
+ return c.json({ data: row }, 201);
204
+ }
205
+ catch (error) {
206
+ const validationError = normalizeValidationError(error);
207
+ if (validationError?.status === 400) {
208
+ return c.json({
209
+ error: validationError.message,
210
+ details: validationError.details?.fields ?? validationError.details,
211
+ }, 400);
212
+ }
213
+ throw error;
214
+ }
215
+ })
216
+ .get("/offer-staff-assignments/:id", async (c) => {
217
+ const row = await transactionsService.getOfferStaffAssignmentById(c.get("db"), c.req.param("id"));
218
+ return row ? c.json({ data: row }) : notFound(c, "Offer staff assignment not found");
219
+ })
220
+ .patch("/offer-staff-assignments/:id", async (c) => {
221
+ try {
222
+ const row = await transactionsService.updateOfferStaffAssignment(c.get("db"), c.req.param("id"), await parseJsonBody(c, updateOfferStaffAssignmentSchema));
223
+ return row ? c.json({ data: row }) : notFound(c, "Offer staff assignment not found");
224
+ }
225
+ catch (error) {
226
+ const validationError = normalizeValidationError(error);
227
+ if (validationError?.status === 400) {
228
+ return c.json({
229
+ error: validationError.message,
230
+ details: validationError.details?.fields ?? validationError.details,
231
+ }, 400);
232
+ }
233
+ throw error;
234
+ }
120
235
  })
121
- .delete("/offer-participants/:id", async (c) => {
122
- const row = await transactionsService.deleteOfferParticipant(c.get("db"), c.req.param("id"));
123
- return row ? c.json({ success: true }) : notFound(c, "Offer participant not found");
236
+ .delete("/offer-staff-assignments/:id", async (c) => {
237
+ const row = await transactionsService.deleteOfferStaffAssignment(c.get("db"), c.req.param("id"));
238
+ return row ? c.json({ success: true }) : notFound(c, "Offer staff assignment not found");
124
239
  })
125
240
  .get("/offer-items", async (c) => {
126
241
  const query = parseQuery(c, offerItemListQuerySchema);
@@ -141,22 +256,22 @@ export const transactionOfferRoutes = new Hono()
141
256
  const row = await transactionsService.deleteOfferItem(c.get("db"), c.req.param("id"));
142
257
  return row ? c.json({ success: true }) : notFound(c, "Offer item not found");
143
258
  })
144
- .get("/offer-item-participants", async (c) => {
145
- const query = parseQuery(c, offerItemParticipantListQuerySchema);
146
- return c.json(await transactionsService.listOfferItemParticipants(c.get("db"), query));
259
+ .get("/offer-item-travelers", async (c) => {
260
+ const query = parseQuery(c, offerItemTravelerListQuerySchema);
261
+ return c.json(await transactionsService.listOfferItemTravelers(c.get("db"), query));
147
262
  })
148
- .post("/offer-item-participants", async (c) => c.json({
149
- data: await transactionsService.createOfferItemParticipant(c.get("db"), await parseJsonBody(c, insertOfferItemParticipantSchema)),
263
+ .post("/offer-item-travelers", async (c) => c.json({
264
+ data: await transactionsService.createOfferItemTraveler(c.get("db"), await parseJsonBody(c, insertOfferItemTravelerSchema)),
150
265
  }, 201))
151
- .get("/offer-item-participants/:id", async (c) => {
152
- const row = await transactionsService.getOfferItemParticipantById(c.get("db"), c.req.param("id"));
153
- return row ? c.json({ data: row }) : notFound(c, "Offer item participant not found");
266
+ .get("/offer-item-travelers/:id", async (c) => {
267
+ const row = await transactionsService.getOfferItemTravelerById(c.get("db"), c.req.param("id"));
268
+ return row ? c.json({ data: row }) : notFound(c, "Offer item traveler not found");
154
269
  })
155
- .patch("/offer-item-participants/:id", async (c) => {
156
- const row = await transactionsService.updateOfferItemParticipant(c.get("db"), c.req.param("id"), await parseJsonBody(c, updateOfferItemParticipantSchema));
157
- return row ? c.json({ data: row }) : notFound(c, "Offer item participant not found");
270
+ .patch("/offer-item-travelers/:id", async (c) => {
271
+ const row = await transactionsService.updateOfferItemTraveler(c.get("db"), c.req.param("id"), await parseJsonBody(c, updateOfferItemTravelerSchema));
272
+ return row ? c.json({ data: row }) : notFound(c, "Offer item traveler not found");
158
273
  })
159
- .delete("/offer-item-participants/:id", async (c) => {
160
- const row = await transactionsService.deleteOfferItemParticipant(c.get("db"), c.req.param("id"));
161
- return row ? c.json({ success: true }) : notFound(c, "Offer item participant not found");
274
+ .delete("/offer-item-travelers/:id", async (c) => {
275
+ const row = await transactionsService.deleteOfferItemTraveler(c.get("db"), c.req.param("id"));
276
+ return row ? c.json({ success: true }) : notFound(c, "Offer item traveler not found");
162
277
  });