@driveflux/api-functions 1.0.44 → 1.0.45

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 (49) hide show
  1. package/dist/auth/confirm.js +24 -29
  2. package/dist/auth/emails.js +12 -13
  3. package/dist/auth/formatter.js +5 -5
  4. package/dist/auth/otp.js +66 -50
  5. package/dist/auth/register.js +42 -34
  6. package/dist/auth/tokens.js +58 -55
  7. package/dist/auth/verifications.js +53 -52
  8. package/dist/constants.js +0 -1
  9. package/dist/create-logger.js +1 -2
  10. package/dist/mailjet/calls/manage-contacts-in-list.js +5 -6
  11. package/dist/mailjet/calls/manage-subscription-status.js +4 -5
  12. package/dist/mailjet/calls/request-service.js +7 -6
  13. package/dist/mailjet/refresh-email-preferences.js +11 -12
  14. package/dist/mailjet/set-contact.js +11 -12
  15. package/dist/mailjet/types.js +1 -2
  16. package/dist/mailjet/utils/convert-to-array.js +8 -6
  17. package/dist/mailjet/utils/extract-email-preferences.js +14 -15
  18. package/dist/mailjet/utils/lists.js +7 -8
  19. package/dist/mailjet/utils/update-email-references.js +16 -15
  20. package/dist/notion/client.js +22 -19
  21. package/dist/notion/helpful.js +6 -9
  22. package/dist/notion/schemas/block.js +42 -48
  23. package/dist/notion/schemas/common.js +9 -14
  24. package/dist/notion/schemas/database.d.ts +2 -2
  25. package/dist/notion/schemas/database.js +62 -60
  26. package/dist/notion/schemas/emoji.js +1 -2
  27. package/dist/notion/schemas/file.d.ts +1 -1
  28. package/dist/notion/schemas/file.js +9 -9
  29. package/dist/notion/schemas/kb.d.ts +4 -4
  30. package/dist/notion/schemas/kb.js +5 -6
  31. package/dist/notion/schemas/page.d.ts +3 -3
  32. package/dist/notion/schemas/page.js +72 -61
  33. package/dist/notion/schemas/parent.js +4 -5
  34. package/dist/notion/schemas/user.js +18 -19
  35. package/dist/reservation/agree.js +6 -7
  36. package/dist/reservation/checks.js +3 -4
  37. package/dist/reservation/display-vehicle.js +65 -71
  38. package/dist/reservation/ensure-user-billing-address.js +9 -11
  39. package/dist/reservation/fetch-or-create.js +48 -54
  40. package/dist/reservation/payer.js +5 -6
  41. package/dist/reservation/reserve.js +3 -4
  42. package/dist/reservation/types.js +1 -2
  43. package/dist/reservation/vehicle.js +13 -16
  44. package/dist/slack.js +24 -29
  45. package/dist/validation.js +77 -79
  46. package/dist/vehicle/vehicle-pricing/constants.js +22 -19
  47. package/dist/vehicle/vehicle-pricing/index.js +28 -42
  48. package/dist/vehicle/vehicle-pricing/types.js +1 -2
  49. package/package.json +2 -2
@@ -1,73 +1,75 @@
1
1
  import { config } from '@driveflux/config/backend';
2
- import { prisma, } from '@driveflux/db';
2
+ import { prisma } from '@driveflux/db';
3
3
  import { generateId } from '@driveflux/db/id';
4
4
  import { createPricingController } from '@driveflux/db/models/vehicle';
5
- import { getFluxExcessMileage, getFluxPiceMatrix, getHostExcessMileage, getHostsMatrix, getRecommendedMotorcycleDeposit, getStartFeeMatrix, } from '../vehicle/vehicle-pricing/index.js';
6
- export const fetchDisplayVehicle = async (displayVehicle) => {
7
- return typeof displayVehicle === 'string'
8
- ? await prisma.displayVehicle.findFirst({ where: { id: displayVehicle } })
9
- : displayVehicle;
5
+ import { getFluxExcessMileage, getFluxPiceMatrix, getHostExcessMileage, getHostsMatrix, getRecommendedMotorcycleDeposit, getStartFeeMatrix } from '../vehicle/vehicle-pricing/index.js';
6
+ export const fetchDisplayVehicle = async (displayVehicle)=>{
7
+ return typeof displayVehicle === 'string' ? await prisma.displayVehicle.findFirst({
8
+ where: {
9
+ id: displayVehicle
10
+ }
11
+ }) : displayVehicle;
10
12
  };
11
- export const createVehicleFromDisplayVehicle = async (displayVehicle, selectedColor) => {
13
+ export const createVehicleFromDisplayVehicle = async (displayVehicle, selectedColor)=>{
12
14
  const dv = await fetchDisplayVehicle(displayVehicle);
13
- if (!dv || typeof dv !== 'object')
14
- return;
15
- if (!dv.details)
16
- return;
17
- const mainImage = dv.images.main.find((m) => m.variant === selectedColor)?.url;
15
+ if (!dv || typeof dv !== 'object') return;
16
+ if (!dv.details) return;
17
+ const mainImage = dv.images.main.find((m)=>m.variant === selectedColor)?.url;
18
18
  const vehicleData = {
19
19
  id: generateId('Vehicle'),
20
20
  ...transformBasicVehicleData(dv),
21
21
  images: [
22
- ...(mainImage ? [transfromSingleImage(mainImage)] : []),
23
- ...transformImages(dv.images),
22
+ ...mainImage ? [
23
+ transfromSingleImage(mainImage)
24
+ ] : [],
25
+ ...transformImages(dv.images)
24
26
  ],
25
27
  ...transformBasePrices(dv.pricing),
26
28
  pricing: transformPriceMatrix(dv.type, dv.pricing),
27
29
  details: transformDetails(dv.details, selectedColor),
28
30
  host: {
29
31
  connect: {
30
- id: dv.defaultHostId,
31
- },
32
+ id: dv.defaultHostId
33
+ }
32
34
  },
33
35
  displayVehicle: {
34
36
  connect: {
35
- id: dv.id,
36
- },
37
- },
37
+ id: dv.id
38
+ }
39
+ }
38
40
  };
39
41
  return await prisma.vehicle.create({
40
42
  data: vehicleData,
41
43
  include: {
42
- host: true,
43
- },
44
+ host: true
45
+ }
44
46
  });
45
47
  };
46
- export const transfromVehicleDisplayToVehicle = async (displayVehicle, selectedColor) => {
48
+ export const transfromVehicleDisplayToVehicle = async (displayVehicle, selectedColor)=>{
47
49
  const dv = await fetchDisplayVehicle(displayVehicle);
48
- if (!dv || typeof dv !== 'object')
49
- return;
50
- if (!dv.details)
51
- return;
52
- const mainImage = dv.images.main.find((m) => m.variant === selectedColor)?.url;
50
+ if (!dv || typeof dv !== 'object') return;
51
+ if (!dv.details) return;
52
+ const mainImage = dv.images.main.find((m)=>m.variant === selectedColor)?.url;
53
53
  return {
54
54
  id: dv.id,
55
55
  ...transformBasicVehicleData(dv),
56
56
  images: [
57
- ...(mainImage ? [transfromSingleImage(mainImage)] : []),
58
- ...transformImages(dv.images),
57
+ ...mainImage ? [
58
+ transfromSingleImage(mainImage)
59
+ ] : [],
60
+ ...transformImages(dv.images)
59
61
  ],
60
62
  ...transformBasePrices(dv.pricing),
61
63
  pricing: transformPriceMatrix(dv.type, dv.pricing),
62
64
  details: transformDetails(dv.details, selectedColor),
63
65
  host: {
64
66
  address: {
65
- state: 'Kuala Lumpur',
66
- },
67
- },
67
+ state: 'Kuala Lumpur'
68
+ }
69
+ }
68
70
  };
69
71
  };
70
- export const transformBasicVehicleData = (dv) => {
72
+ export const transformBasicVehicleData = (dv)=>{
71
73
  return {
72
74
  registrationNumber: null,
73
75
  featured: false,
@@ -85,17 +87,17 @@ export const transformBasicVehicleData = (dv) => {
85
87
  type: dv.type,
86
88
  niceName: `${dv.make} ${dv.vehicleModel} ${dv.variant} ${dv.year}`,
87
89
  niceNameShort: `${dv.make} ${dv.vehicleModel}`,
88
- appliedCoupon: dv.appliedCoupon,
90
+ appliedCoupon: dv.appliedCoupon
89
91
  };
90
92
  };
91
- export const transformImages = (images) => {
93
+ export const transformImages = (images)=>{
92
94
  return [
93
95
  transfromSingleImage(images.exterior[0].url, 'exterior'),
94
96
  transfromSingleImage(images.interior[0].url, 'interior'),
95
- ...images.gallery.map((i) => transfromSingleImage(i.url)),
97
+ ...images.gallery.map((i)=>transfromSingleImage(i.url))
96
98
  ];
97
99
  };
98
- const transfromSingleImage = (imageUrl, inspectionType) => {
100
+ const transfromSingleImage = (imageUrl, inspectionType)=>{
99
101
  return {
100
102
  default: imageUrl,
101
103
  blurBase64: null,
@@ -106,20 +108,20 @@ const transfromSingleImage = (imageUrl, inspectionType) => {
106
108
  description: null,
107
109
  inspection: !!inspectionType,
108
110
  inspectionType: inspectionType || null,
109
- notActualPhoto: true,
111
+ notActualPhoto: true
110
112
  };
111
113
  };
112
- const transformBasePrices = (pricing) => {
114
+ const transformBasePrices = (pricing)=>{
113
115
  return {
114
116
  basePrice: pricing.matrix.plan36.lite,
115
117
  basePricePlan1: pricing.matrix.plan1.lite,
116
118
  basePricePlan12: pricing.matrix.plan12.lite,
117
119
  basePricePlan24: pricing.matrix.plan24.lite,
118
120
  basePricePlan36: pricing.matrix.plan36.lite,
119
- basePricePlan60: pricing.matrix.plan60.lite,
121
+ basePricePlan60: pricing.matrix.plan60.lite
120
122
  };
121
123
  };
122
- const transformPriceMatrix = (vehicleType, pricing) => {
124
+ const transformPriceMatrix = (vehicleType, pricing)=>{
123
125
  const baseline = pricing?.matrix.plan36.lite;
124
126
  const ultraTier = 'tier1';
125
127
  const fluxPriceCoefficient = 25;
@@ -132,16 +134,14 @@ const transformPriceMatrix = (vehicleType, pricing) => {
132
134
  const { availablePlans, availableMileagePackages } = getNonZeroKeys(priceMatrix);
133
135
  const pricingController = createPricingController({
134
136
  coefficient: fluxPriceCoefficient,
135
- vehicleType,
137
+ vehicleType
136
138
  });
137
139
  const startFeeMatrix = excludeServiceFeesFrom(getStartFeeMatrix(pricingController, baseline, flatPricing));
138
140
  const hostMatrix = excludeServiceFeesFrom(getHostsMatrix(pricingController, baseline, ultraTier, flatPricing));
139
141
  const hostExcessMileage = getHostExcessMileage(pricingController, baseline);
140
142
  const fluxPriceMatrix = excludeServiceFeesFrom(getFluxPiceMatrix(pricingController, vehicleType, baseline, hostMatrix, ultraTier, flatPricing));
141
143
  const fluxExcessMileage = getFluxExcessMileage(pricingController, baseline);
142
- const recommendedDeposit = pricing.refundableDeposit || vehicleType === 'motorcycle'
143
- ? getRecommendedMotorcycleDeposit(baseline)
144
- : null;
144
+ const recommendedDeposit = pricing.refundableDeposit || vehicleType === 'motorcycle' ? getRecommendedMotorcycleDeposit(baseline) : null;
145
145
  return {
146
146
  tmv,
147
147
  gfv,
@@ -160,31 +160,31 @@ const transformPriceMatrix = (vehicleType, pricing) => {
160
160
  excessMileage: fluxExcessMileage,
161
161
  originalExcessMileage: fluxExcessMileage,
162
162
  matrixComments: null,
163
- add: null,
163
+ add: null
164
164
  },
165
165
  hostTake: {
166
166
  matrix: hostMatrix,
167
167
  originalMatrix: hostMatrix,
168
168
  excessMileage: hostExcessMileage,
169
169
  originalExcessMileage: hostExcessMileage,
170
- matrixComments: null,
170
+ matrixComments: null
171
171
  },
172
172
  startFee: {
173
173
  matrix: startFeeMatrix,
174
174
  originalMatrix: startFeeMatrix,
175
- matrixComments: null,
176
- },
175
+ matrixComments: null
176
+ }
177
177
  };
178
178
  };
179
- const getNonZeroKeys = (matrix) => {
179
+ const getNonZeroKeys = (matrix)=>{
180
180
  const planKeys = new Set();
181
181
  const mileageKeys = new Set();
182
- for (const [plan, mileageMap] of Object.entries(matrix)) {
182
+ for (const [plan, mileageMap] of Object.entries(matrix)){
183
183
  const entries = Object.entries(mileageMap ?? {});
184
- const hasNonZero = entries.some(([_, value]) => (value ?? 0) > 0);
184
+ const hasNonZero = entries.some(([_, value])=>(value ?? 0) > 0);
185
185
  if (hasNonZero) {
186
186
  planKeys.add(plan);
187
- for (const [mileage, value] of entries) {
187
+ for (const [mileage, value] of entries){
188
188
  if ((value ?? 0) > 0) {
189
189
  mileageKeys.add(mileage);
190
190
  }
@@ -193,20 +193,20 @@ const getNonZeroKeys = (matrix) => {
193
193
  }
194
194
  return {
195
195
  availablePlans: Array.from(planKeys),
196
- availableMileagePackages: Array.from(mileageKeys),
196
+ availableMileagePackages: Array.from(mileageKeys)
197
197
  };
198
198
  };
199
- const _getInspection = () => {
199
+ const _getInspection = ()=>{
200
200
  return {
201
201
  exterior: 5,
202
202
  interior: 5,
203
203
  engine: 5,
204
204
  frame: 5,
205
205
  total: 5,
206
- comment: 'COMMENT HERE',
206
+ comment: 'COMMENT HERE'
207
207
  };
208
208
  };
209
- const transformDetails = (details, selectColor) => {
209
+ const transformDetails = (details, selectColor)=>{
210
210
  const color = selectColor || details.colors[0].name || '';
211
211
  return {
212
212
  numberOfSeats: details.numberOfSeats,
@@ -214,31 +214,25 @@ const transformDetails = (details, selectColor) => {
214
214
  bodyType: details.bodyType,
215
215
  transmission: details.transmission,
216
216
  engineType: details.fuelType,
217
- engineCapacity: details.fuelType === 'electric'
218
- ? details.batteryCapacity
219
- : details.engineCapacity,
217
+ engineCapacity: details.fuelType === 'electric' ? details.batteryCapacity : details.engineCapacity,
220
218
  drivetrain: details.drivetrain,
221
219
  accelerationTo100km: details.accelerationTo100km,
222
220
  fuelConsumptionLitersPer100Km: details.fuelConsumptionLitersPer100Km,
223
221
  color,
224
222
  features: details.features,
225
- condition: 'new',
223
+ condition: 'new'
226
224
  };
227
225
  };
228
- const excludeServiceFeesFrom = (originalMatrix) => {
226
+ const excludeServiceFeesFrom = (originalMatrix)=>{
229
227
  const matrix = {};
230
- for (const [planKey, planValue] of Object.entries(originalMatrix)) {
231
- if (!planValue)
232
- continue;
233
- if (!matrix[planKey])
234
- matrix[planKey] = {};
235
- for (const [mileageKey, price] of Object.entries(planValue)) {
228
+ for (const [planKey, planValue] of Object.entries(originalMatrix)){
229
+ if (!planValue) continue;
230
+ if (!matrix[planKey]) matrix[planKey] = {};
231
+ for (const [mileageKey, price] of Object.entries(planValue)){
236
232
  if (typeof price === 'number') {
237
- matrix[planKey][mileageKey] =
238
- price / (1 + config.serviceRate);
233
+ matrix[planKey][mileageKey] = price / (1 + config.serviceRate);
239
234
  }
240
235
  }
241
236
  }
242
237
  return matrix;
243
238
  };
244
- //# sourceMappingURL=display-vehicle.js.map
@@ -3,29 +3,27 @@ import { makeProblem, PROBLEM_INTERNAL } from '@driveflux/problem';
3
3
  import { Err, Ok } from '@driveflux/result';
4
4
  import { createScopedLogger } from '../create-logger.js';
5
5
  const log = createScopedLogger('reservation:ensure-user-billing-address');
6
- export const ensureUserBillingAddress = async (userOrBusiness, deliveryAddresses) => {
6
+ export const ensureUserBillingAddress = async (userOrBusiness, deliveryAddresses)=>{
7
7
  if (userOrBusiness.addresses?.billing) {
8
8
  return new Ok(userOrBusiness);
9
9
  }
10
10
  try {
11
11
  const fullQuery = {
12
- where: { id: userOrBusiness.id },
12
+ where: {
13
+ id: userOrBusiness.id
14
+ },
13
15
  data: {
14
16
  addresses: {
15
17
  home: deliveryAddresses.home,
16
- billing: deliveryAddresses.billing,
17
- },
18
- },
18
+ billing: deliveryAddresses.billing
19
+ }
20
+ }
19
21
  };
20
22
  // Use the delivery addresses
21
- const updatedUserOrBusiness = userOrBusiness.object === 'user'
22
- ? await prisma.user.update(fullQuery)
23
- : await prisma.business.update(fullQuery);
23
+ const updatedUserOrBusiness = userOrBusiness.object === 'user' ? await prisma.user.update(fullQuery) : await prisma.business.update(fullQuery);
24
24
  return new Ok(updatedUserOrBusiness);
25
- }
26
- catch (error) {
25
+ } catch (error) {
27
26
  log.error(error, 'Failed to ensure user billing address');
28
27
  return new Err(makeProblem(PROBLEM_INTERNAL, 'Failed to ensure user billing address'));
29
28
  }
30
29
  };
31
- //# sourceMappingURL=ensure-user-billing-address.js.map
@@ -1,11 +1,11 @@
1
- import { prisma, } from '@driveflux/db';
1
+ import { prisma } from '@driveflux/db';
2
2
  import { generateId } from '@driveflux/db/id';
3
3
  import { reportError } from '@driveflux/reporter';
4
4
  import { Ok } from '@driveflux/result';
5
5
  import { slackLater } from '../slack.js';
6
- import { createReservationInvoice, updateReservationInvoiceIfNeeded, } from './invoice.js';
7
- export const fetchOrCreateReservation = async ({ vehicle, payer, body, }) => {
8
- const { subscribingUser, plan, mileagePackage, couponCode, referralCode, asBusiness, source, deliveryAddresses, deliveryDate, analytics, paymentIntentId, freeReservation, freeReservationReason, } = body;
6
+ import { createReservationInvoice, updateReservationInvoiceIfNeeded } from './invoice.js';
7
+ export const fetchOrCreateReservation = async ({ vehicle, payer, body })=>{
8
+ const { subscribingUser, plan, mileagePackage, couponCode, referralCode, asBusiness, source, deliveryAddresses, deliveryDate, analytics, paymentIntentId, freeReservation, freeReservationReason } = body;
9
9
  try {
10
10
  const previousReservation = await prisma.subscriptionReservation.findFirst({
11
11
  where: {
@@ -19,14 +19,14 @@ export const fetchOrCreateReservation = async ({ vehicle, payer, body, }) => {
19
19
  source,
20
20
  // If the subscription ID was populated, this means that this reservation was consumed into a subsription,
21
21
  // so we shouldn't re-use it
22
- subscription: null,
22
+ subscription: null
23
23
  },
24
24
  orderBy: {
25
- updatedAt: 'desc',
25
+ updatedAt: 'desc'
26
26
  },
27
27
  include: {
28
- invoice: true,
29
- },
28
+ invoice: true
29
+ }
30
30
  });
31
31
  if (previousReservation) {
32
32
  if (previousReservation.invoice.voided) {
@@ -39,7 +39,7 @@ export const fetchOrCreateReservation = async ({ vehicle, payer, body, }) => {
39
39
  'partiallyPaid',
40
40
  'partiallyRefunded',
41
41
  'refunded',
42
- 'pendingRefund',
42
+ 'pendingRefund'
43
43
  ];
44
44
  if (wrongStatuses.includes(previousReservation.invoice.status)) {
45
45
  const updatedReservation = await recreateReservationInvoiceAndUpdateReservation(previousReservation, body, vehicle, payer);
@@ -52,16 +52,16 @@ export const fetchOrCreateReservation = async ({ vehicle, payer, body, }) => {
52
52
  text: {
53
53
  type: 'plain_text',
54
54
  text: '‼️ Reservation invoice in wrong status',
55
- emoji: true,
56
- },
55
+ emoji: true
56
+ }
57
57
  },
58
58
  {
59
59
  type: 'section',
60
60
  text: {
61
61
  type: 'plain_text',
62
- text: `The reservation invoice ${previousReservation.invoice.id} was in a wrong status (${previousReservation.invoice.status}), it was discarded and a new invoice (${updatedReservation.val.id}) was created, however, investigate the issue.`,
63
- },
64
- },
62
+ text: `The reservation invoice ${previousReservation.invoice.id} was in a wrong status (${previousReservation.invoice.status}), it was discarded and a new invoice (${updatedReservation.val.id}) was created, however, investigate the issue.`
63
+ }
64
+ }
65
65
  ]);
66
66
  return updatedReservation;
67
67
  }
@@ -73,8 +73,7 @@ export const fetchOrCreateReservation = async ({ vehicle, payer, body, }) => {
73
73
  // Otherwise, we need to create a new reservation
74
74
  return new Ok(previousReservation);
75
75
  }
76
- }
77
- catch (error) {
76
+ } catch (error) {
78
77
  // We couldn't fetch the reservation, so we create a new one and just log this
79
78
  await reportError(error);
80
79
  }
@@ -93,7 +92,7 @@ export const fetchOrCreateReservation = async ({ vehicle, payer, body, }) => {
93
92
  analytics,
94
93
  vehicle,
95
94
  payer,
96
- subscribingUser,
95
+ subscribingUser
97
96
  });
98
97
  if (invoiceResult.err) {
99
98
  return invoiceResult;
@@ -112,70 +111,66 @@ export const fetchOrCreateReservation = async ({ vehicle, payer, body, }) => {
112
111
  deliveryAddresses,
113
112
  deliveryDate,
114
113
  asBusiness,
115
- source,
114
+ source
116
115
  });
117
116
  return new Ok(reservation);
118
117
  };
119
- const createReservation = async ({ reservationId, invoiceId, subscribingUserId, vehicleId, businessId, plan, mileagePackage, couponCode, referralCode, analytics, deliveryAddresses, deliveryDate, asBusiness, source, }) => {
118
+ const createReservation = async ({ reservationId, invoiceId, subscribingUserId, vehicleId, businessId, plan, mileagePackage, couponCode, referralCode, analytics, deliveryAddresses, deliveryDate, asBusiness, source })=>{
120
119
  return await prisma.subscriptionReservation.create({
121
120
  data: {
122
121
  id: reservationId,
123
122
  invoice: {
124
123
  connect: {
125
- id: invoiceId,
126
- },
124
+ id: invoiceId
125
+ }
127
126
  },
128
127
  user: {
129
128
  connect: {
130
- id: subscribingUserId,
131
- },
129
+ id: subscribingUserId
130
+ }
132
131
  },
133
132
  vehicle: {
134
133
  connect: {
135
- id: vehicleId,
136
- },
134
+ id: vehicleId
135
+ }
137
136
  },
138
- ...(businessId
139
- ? {
140
- business: {
141
- connect: {
142
- id: businessId,
143
- },
144
- },
137
+ ...businessId ? {
138
+ business: {
139
+ connect: {
140
+ id: businessId
141
+ }
145
142
  }
146
- : undefined),
143
+ } : undefined,
147
144
  plan,
148
145
  mileagePackage,
149
146
  couponCode: couponCode,
150
147
  deliveryAddresses: deliveryAddresses,
151
148
  deliveryDate: deliveryDate,
152
- ...(referralCode
153
- ? {
154
- referral: {
155
- connect: {
156
- id: referralCode,
157
- },
158
- },
149
+ ...referralCode ? {
150
+ referral: {
151
+ connect: {
152
+ id: referralCode
153
+ }
159
154
  }
160
- : undefined),
155
+ } : undefined,
161
156
  asBusiness: !!asBusiness,
162
157
  source,
163
158
  metadata: {
164
- analytics,
165
- },
159
+ analytics
160
+ }
166
161
  },
167
162
  include: {
168
- invoice: true,
169
- },
163
+ invoice: true
164
+ }
170
165
  });
171
166
  };
172
- const recreateReservationInvoiceAndUpdateReservation = async (previousReservation, body, vehicle, payer) => {
167
+ const recreateReservationInvoiceAndUpdateReservation = async (previousReservation, body, vehicle, payer)=>{
173
168
  const invoiceResult = await createReservationInvoice({
174
169
  ...body,
175
170
  invoiceId: generateId('Invoice'),
176
171
  reservationId: previousReservation.id,
177
172
  vehicle,
178
- payer,
173
+ payer
179
174
  });
180
175
  if (!invoiceResult.ok) {
181
176
  return invoiceResult;
@@ -183,19 +178,18 @@ const recreateReservationInvoiceAndUpdateReservation = async (previousReservatio
183
178
  const invoice = invoiceResult.val;
184
179
  const updatedReservation = await prisma.subscriptionReservation.update({
185
180
  where: {
186
- id: previousReservation.id,
181
+ id: previousReservation.id
187
182
  },
188
183
  data: {
189
184
  invoice: {
190
185
  connect: {
191
- id: invoice.id,
192
- },
193
- },
186
+ id: invoice.id
187
+ }
188
+ }
194
189
  },
195
190
  include: {
196
- invoice: true,
197
- },
191
+ invoice: true
192
+ }
198
193
  });
199
194
  return new Ok(updatedReservation);
200
195
  };
201
- //# sourceMappingURL=fetch-or-create.js.map
@@ -1,7 +1,7 @@
1
1
  import { prisma } from '@driveflux/db';
2
- import { makeProblem, PROBLEM_CONDITION_FAILED, PROBLEM_NOT_FOUND, } from '@driveflux/problem';
2
+ import { makeProblem, PROBLEM_CONDITION_FAILED, PROBLEM_NOT_FOUND } from '@driveflux/problem';
3
3
  import { Err, Ok } from '@driveflux/result';
4
- export const getPayer = async ({ subscribingUser, asBusiness, }) => {
4
+ export const getPayer = async ({ subscribingUser, asBusiness })=>{
5
5
  let business = null;
6
6
  let payer = subscribingUser;
7
7
  if (asBusiness) {
@@ -11,8 +11,8 @@ export const getPayer = async ({ subscribingUser, asBusiness, }) => {
11
11
  // load business
12
12
  business = await prisma.business.findUnique({
13
13
  where: {
14
- id: subscribingUser.businessId,
15
- },
14
+ id: subscribingUser.businessId
15
+ }
16
16
  });
17
17
  if (!business) {
18
18
  return new Err(makeProblem(PROBLEM_NOT_FOUND, `The business ${subscribingUser.businessId} was not found.`));
@@ -26,7 +26,7 @@ export const getPayer = async ({ subscribingUser, asBusiness, }) => {
26
26
  }
27
27
  return new Ok(payer);
28
28
  };
29
- const checkPayerObjectSanity = (subscriber) => {
29
+ const checkPayerObjectSanity = (subscriber)=>{
30
30
  if (!subscriber.email) {
31
31
  return new Err(makeProblem(PROBLEM_CONDITION_FAILED, `Subscriber ${subscriber.id} has no email. Please add a verified email first.`));
32
32
  }
@@ -35,4 +35,3 @@ const checkPayerObjectSanity = (subscriber) => {
35
35
  }
36
36
  return new Ok(true);
37
37
  };
38
- //# sourceMappingURL=payer.js.map
@@ -6,14 +6,14 @@ import { fetchOrCreateReservation } from './fetch-or-create.js';
6
6
  import { getPayer } from './payer.js';
7
7
  import { ensurePaymentIntentIdIsSynced } from './payment-intent-sync.js';
8
8
  import { getVehicle } from './vehicle.js';
9
- const processBody = (body) => {
9
+ const processBody = (body)=>{
10
10
  // Switch mileage package
11
11
  if (body.plan === 'plan1' || body.plan === 'planWeekly') {
12
12
  body.mileagePackage = 'unlimited';
13
13
  }
14
14
  return body;
15
15
  };
16
- export const reserveVehicle = async (vehicleId, unprocessed) => {
16
+ export const reserveVehicle = async (vehicleId, unprocessed)=>{
17
17
  const body = processBody(unprocessed);
18
18
  // Agree to terms if not done yet
19
19
  await handleAgreeToTerms(body);
@@ -41,7 +41,7 @@ export const reserveVehicle = async (vehicleId, unprocessed) => {
41
41
  const reservationResult = await fetchOrCreateReservation({
42
42
  vehicle,
43
43
  payer,
44
- body,
44
+ body
45
45
  });
46
46
  if (reservationResult.err) {
47
47
  return reservationResult;
@@ -57,4 +57,3 @@ export const reserveVehicle = async (vehicleId, unprocessed) => {
57
57
  }
58
58
  return new Ok(reservation);
59
59
  };
60
- //# sourceMappingURL=reserve.js.map
@@ -1,2 +1 @@
1
- export {};
2
- //# sourceMappingURL=types.js.map
1
+ export { };
@@ -4,21 +4,19 @@ import { makeProblem, PROBLEM_NOT_FOUND } from '@driveflux/problem';
4
4
  import { Err, Ok } from '@driveflux/result';
5
5
  import { checkIfVehicleIsAvailableForReservation } from './checks.js';
6
6
  import { createVehicleFromDisplayVehicle } from './display-vehicle.js';
7
- export const getVehicle = async (id, { selectedColor, plan, requestUser, }, requesterAbility) => {
8
- const vehicle = id.startsWith('DV_')
9
- ? await createVehicleFromDisplayVehicle(id, selectedColor || undefined)
10
- : await prisma.vehicle.findUnique({
11
- where: {
12
- id,
13
- },
14
- include: {
15
- host: {
16
- select: {
17
- id: true,
18
- },
19
- },
20
- },
21
- });
7
+ export const getVehicle = async (id, { selectedColor, plan, requestUser }, requesterAbility)=>{
8
+ const vehicle = id.startsWith('DV_') ? await createVehicleFromDisplayVehicle(id, selectedColor || undefined) : await prisma.vehicle.findUnique({
9
+ where: {
10
+ id
11
+ },
12
+ include: {
13
+ host: {
14
+ select: {
15
+ id: true
16
+ }
17
+ }
18
+ }
19
+ });
22
20
  if (!vehicle) {
23
21
  return new Err(makeProblem(PROBLEM_NOT_FOUND, 'Vehicle not found'));
24
22
  }
@@ -29,4 +27,3 @@ export const getVehicle = async (id, { selectedColor, plan, requestUser, }, requ
29
27
  }
30
28
  return new Ok(vehicle);
31
29
  };
32
- //# sourceMappingURL=vehicle.js.map