@driveflux/api-functions 1.0.21 → 1.0.23
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.
- package/dist/auth/confirm.js +29 -24
- package/dist/auth/emails.js +13 -12
- package/dist/auth/formatter.js +5 -5
- package/dist/auth/otp.js +50 -66
- package/dist/auth/register.js +34 -42
- package/dist/auth/tokens.js +55 -58
- package/dist/auth/verifications.js +52 -53
- package/dist/constants.js +1 -0
- package/dist/create-logger.d.ts +2 -0
- package/dist/create-logger.d.ts.map +1 -0
- package/dist/create-logger.js +3 -0
- package/dist/create-logger.js.map +1 -0
- package/dist/mailjet/calls/manage-contacts-in-list.js +6 -5
- package/dist/mailjet/calls/manage-subscription-status.js +5 -4
- package/dist/mailjet/calls/request-service.js +6 -7
- package/dist/mailjet/refresh-email-preferences.js +12 -11
- package/dist/mailjet/set-contact.js +12 -11
- package/dist/mailjet/types.js +2 -1
- package/dist/mailjet/utils/convert-to-array.js +6 -8
- package/dist/mailjet/utils/extract-email-preferences.js +15 -14
- package/dist/mailjet/utils/lists.js +8 -7
- package/dist/mailjet/utils/update-email-references.js +15 -16
- package/dist/notion/client.js +19 -22
- package/dist/notion/helpful.js +9 -6
- package/dist/notion/schemas/block.js +48 -42
- package/dist/notion/schemas/common.js +14 -9
- package/dist/notion/schemas/database.js +60 -62
- package/dist/notion/schemas/emoji.js +2 -1
- package/dist/notion/schemas/file.js +9 -9
- package/dist/notion/schemas/kb.js +6 -5
- package/dist/notion/schemas/page.js +61 -72
- package/dist/notion/schemas/parent.js +5 -4
- package/dist/notion/schemas/user.js +19 -18
- package/dist/reservation/agree.js +7 -6
- package/dist/reservation/checks.js +4 -3
- package/dist/reservation/display-vehicle.js +71 -65
- package/dist/reservation/fetch-or-create.js +54 -48
- package/dist/reservation/invoice.d.ts.map +1 -1
- package/dist/reservation/invoice.js +108 -63
- package/dist/reservation/invoice.js.map +1 -1
- package/dist/reservation/payer.js +6 -5
- package/dist/reservation/reserve.js +4 -3
- package/dist/reservation/types.js +2 -1
- package/dist/reservation/vehicle.js +16 -13
- package/dist/slack.js +29 -24
- package/dist/validation.js +79 -77
- package/dist/vehicle/vehicle-pricing/constants.js +19 -22
- package/dist/vehicle/vehicle-pricing/index.js +42 -28
- package/dist/vehicle/vehicle-pricing/types.js +2 -1
- package/package.json +10 -9
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { config } from '@driveflux/config/backend';
|
|
2
2
|
import { loadCoupon, PROBLEM_APPLICABLE_NOT_FOUND } from '@driveflux/coupon';
|
|
3
|
-
import { prisma } from '@driveflux/db';
|
|
3
|
+
import { prisma, } from '@driveflux/db';
|
|
4
4
|
import { generateId } from '@driveflux/db/id';
|
|
5
5
|
import { EMPTY_BILLING_ADDRESS } from '@driveflux/db/models/other';
|
|
6
6
|
import { PURPOSE_RESERVATION } from '@driveflux/db/models/subscription';
|
|
@@ -12,15 +12,18 @@ import { Ok } from '@driveflux/result';
|
|
|
12
12
|
import { format } from '@driveflux/time';
|
|
13
13
|
import { isAfter } from 'date-fns/isAfter';
|
|
14
14
|
import { subMinutes } from 'date-fns/subMinutes';
|
|
15
|
-
|
|
15
|
+
import { createScopedLogger } from '../create-logger.js';
|
|
16
|
+
const log = createScopedLogger('reservation:invoice');
|
|
17
|
+
export const updateReservationInvoiceIfNeeded = async (oldReservationInvoice, newParams) => {
|
|
16
18
|
const couponIsDifferent = oldReservationInvoice.couponCode !== newParams.couponCode;
|
|
17
|
-
if (!couponIsDifferent &&
|
|
19
|
+
if (!couponIsDifferent &&
|
|
20
|
+
oldReservationInvoice.stripePaymentIntentId === newParams.paymentIntentId) {
|
|
18
21
|
return new Ok(oldReservationInvoice);
|
|
19
22
|
}
|
|
20
23
|
// If the coupon or payment intent are differnt we should update the invoice
|
|
21
24
|
let update = {
|
|
22
25
|
stripePaymentIntentId: newParams.paymentIntentId,
|
|
23
|
-
couponCode: newParams.couponCode
|
|
26
|
+
couponCode: newParams.couponCode,
|
|
24
27
|
};
|
|
25
28
|
// If the coupon is different, we need to apply the coupon to the invoice
|
|
26
29
|
if (couponIsDifferent) {
|
|
@@ -28,56 +31,63 @@ export const updateReservationInvoiceIfNeeded = async (oldReservationInvoice, ne
|
|
|
28
31
|
const result = await coupons.applyCouponToUnsavedInvoice(newParams.couponCode, oldReservationInvoice);
|
|
29
32
|
if (result.ok) {
|
|
30
33
|
const { discounts, ...rest } = result.val;
|
|
31
|
-
const toDisconnect = discounts
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
34
|
+
const toDisconnect = discounts
|
|
35
|
+
? oldReservationInvoice.discountIds?.filter((id) => !discounts.connect?.some((d) => d.id === id))
|
|
36
|
+
: undefined;
|
|
37
|
+
const disconnectClauses = toDisconnect?.length
|
|
38
|
+
? {
|
|
39
|
+
disconnect: toDisconnect.map((id) => ({ id })),
|
|
40
|
+
}
|
|
41
|
+
: undefined;
|
|
37
42
|
update = {
|
|
38
43
|
...update,
|
|
39
44
|
...rest,
|
|
40
|
-
...discounts || disconnectClauses
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
45
|
+
...(discounts || disconnectClauses
|
|
46
|
+
? {
|
|
47
|
+
discounts: {
|
|
48
|
+
...(discounts || {}),
|
|
49
|
+
...(disconnectClauses || {}),
|
|
50
|
+
},
|
|
44
51
|
}
|
|
45
|
-
|
|
52
|
+
: {}),
|
|
46
53
|
metadata: {
|
|
47
54
|
...update.metadata,
|
|
48
|
-
couponCode: newParams.couponCode
|
|
55
|
+
couponCode: newParams.couponCode,
|
|
49
56
|
},
|
|
50
57
|
providerMetadata: {
|
|
51
58
|
...update.providerMetadata,
|
|
52
|
-
couponCode: newParams.couponCode
|
|
53
|
-
}
|
|
59
|
+
couponCode: newParams.couponCode,
|
|
60
|
+
},
|
|
54
61
|
};
|
|
55
62
|
}
|
|
56
63
|
if (result.err && result.val.code !== PROBLEM_APPLICABLE_NOT_FOUND) {
|
|
57
64
|
return result;
|
|
58
65
|
}
|
|
59
|
-
}
|
|
66
|
+
}
|
|
67
|
+
else if (oldReservationInvoice.discountIds.length) {
|
|
60
68
|
// No discounts, so we disconnect all of them
|
|
61
69
|
update = {
|
|
62
70
|
discounts: {
|
|
63
|
-
disconnect: oldReservationInvoice.discountIds.map((id)=>({
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
}
|
|
71
|
+
disconnect: oldReservationInvoice.discountIds.map((id) => ({
|
|
72
|
+
id,
|
|
73
|
+
})),
|
|
74
|
+
},
|
|
67
75
|
};
|
|
68
76
|
}
|
|
69
77
|
}
|
|
70
78
|
let updated = await wrapInResult(biller.updateInvoice(oldReservationInvoice.id, update));
|
|
71
79
|
// If the invoice was locked due to pending status and we're more than 1 minute old, we unlock it
|
|
72
80
|
if (updated.err && updated.val.code === 'invoice_pending') {
|
|
73
|
-
if (oldReservationInvoice.lockedAt &&
|
|
81
|
+
if ((oldReservationInvoice.lockedAt &&
|
|
82
|
+
isAfter(oldReservationInvoice.lockedAt, subMinutes(new Date(), 1))) ||
|
|
83
|
+
!oldReservationInvoice.lockedAt) {
|
|
74
84
|
updated = await wrapInResult(biller.updateInvoice(oldReservationInvoice.id, {
|
|
75
85
|
...update,
|
|
76
86
|
locked: false,
|
|
77
87
|
lockedAt: null,
|
|
78
88
|
lockReason: null,
|
|
79
89
|
unlockAt: null,
|
|
80
|
-
status: 'draft'
|
|
90
|
+
status: 'draft',
|
|
81
91
|
}));
|
|
82
92
|
}
|
|
83
93
|
}
|
|
@@ -86,7 +96,7 @@ export const updateReservationInvoiceIfNeeded = async (oldReservationInvoice, ne
|
|
|
86
96
|
}
|
|
87
97
|
return new Ok(updated.val);
|
|
88
98
|
};
|
|
89
|
-
export const createReservationInvoice = async ({ invoiceId, couponCode, plan, mileagePackage, referralCode, reservationId, paymentIntentId, freeReservation, freeReservationReason, analytics, vehicle, payer, subscribingUser })=>{
|
|
99
|
+
export const createReservationInvoice = async ({ invoiceId, couponCode, plan, mileagePackage, referralCode, reservationId, paymentIntentId, freeReservation, freeReservationReason, analytics, vehicle, payer, subscribingUser, }) => {
|
|
90
100
|
if (freeReservation) {
|
|
91
101
|
// It's a free reservation, so we don't need to add a coupon code
|
|
92
102
|
return await wrapInResult(biller.createInvoice(getInvoiceCreateDetails({
|
|
@@ -99,17 +109,21 @@ export const createReservationInvoice = async ({ invoiceId, couponCode, plan, mi
|
|
|
99
109
|
freeReservation,
|
|
100
110
|
freeReservationReason,
|
|
101
111
|
analytics,
|
|
102
|
-
reservationId
|
|
112
|
+
reservationId,
|
|
103
113
|
})));
|
|
104
114
|
}
|
|
105
115
|
let finalCouponCode = couponCode;
|
|
106
116
|
// If we don't have a reservation coupon ID, we apply the referral discount if any
|
|
107
|
-
const referral = referralCode &&
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
117
|
+
const referral = referralCode &&
|
|
118
|
+
(await prisma.referral.findUnique({
|
|
119
|
+
where: {
|
|
120
|
+
id: referralCode,
|
|
121
|
+
},
|
|
122
|
+
}));
|
|
123
|
+
if (!finalCouponCode &&
|
|
124
|
+
referral &&
|
|
125
|
+
referral.discountToReceiverCouponId &&
|
|
126
|
+
referral.discountToReceiverCouponApplicationName === 'reservationFee') {
|
|
113
127
|
const referralCoupon = await loadCoupon(referral.discountToReceiverCouponId);
|
|
114
128
|
if (referralCoupon) {
|
|
115
129
|
finalCouponCode = referralCoupon.code;
|
|
@@ -128,16 +142,17 @@ export const createReservationInvoice = async ({ invoiceId, couponCode, plan, mi
|
|
|
128
142
|
freeReservation,
|
|
129
143
|
freeReservationReason,
|
|
130
144
|
analytics,
|
|
131
|
-
reservationId
|
|
145
|
+
reservationId,
|
|
132
146
|
}),
|
|
133
147
|
lines: [
|
|
134
148
|
{
|
|
135
149
|
amount: reservationAmount,
|
|
136
150
|
description: `Reservation fee for ${vehicleName(vehicle)}`,
|
|
137
|
-
chargingFor: 'reservationFee'
|
|
138
|
-
}
|
|
139
|
-
]
|
|
151
|
+
chargingFor: 'reservationFee',
|
|
152
|
+
},
|
|
153
|
+
],
|
|
140
154
|
};
|
|
155
|
+
console.log('invoiceCreateDetails', invoiceCreateDetails);
|
|
141
156
|
if (finalCouponCode) {
|
|
142
157
|
const withCoupon = await coupons.applyCouponToUnsavedInvoice(finalCouponCode, invoiceCreateDetails, 'reservationFee', {
|
|
143
158
|
subscriptionPlans: plan,
|
|
@@ -146,9 +161,10 @@ export const createReservationInvoice = async ({ invoiceId, couponCode, plan, mi
|
|
|
146
161
|
vehicleMake: vehicle.make,
|
|
147
162
|
userId: subscribingUser.id,
|
|
148
163
|
businessId: payer.object === 'business' ? payer.id : undefined,
|
|
149
|
-
vehicleType: vehicle.type
|
|
164
|
+
vehicleType: vehicle.type,
|
|
150
165
|
});
|
|
151
|
-
if (withCoupon.err &&
|
|
166
|
+
if (withCoupon.err &&
|
|
167
|
+
withCoupon.val.code !== PROBLEM_APPLICABLE_NOT_FOUND) {
|
|
152
168
|
return withCoupon;
|
|
153
169
|
}
|
|
154
170
|
if (withCoupon.ok) {
|
|
@@ -156,18 +172,48 @@ export const createReservationInvoice = async ({ invoiceId, couponCode, plan, mi
|
|
|
156
172
|
...withCoupon.val,
|
|
157
173
|
metadata: {
|
|
158
174
|
...withCoupon.val.metadata,
|
|
159
|
-
couponCode: finalCouponCode
|
|
175
|
+
couponCode: finalCouponCode,
|
|
160
176
|
},
|
|
161
177
|
providerMetadata: {
|
|
162
178
|
...withCoupon.val.providerMetadata,
|
|
163
|
-
couponCode: finalCouponCode
|
|
164
|
-
}
|
|
179
|
+
couponCode: finalCouponCode,
|
|
180
|
+
},
|
|
165
181
|
};
|
|
166
182
|
}
|
|
167
183
|
}
|
|
168
|
-
|
|
184
|
+
console.log('invoiceCreateDetails after coupon', invoiceCreateDetails);
|
|
185
|
+
const result = await wrapInResult(biller.createInvoice({
|
|
186
|
+
...invoiceCreateDetails,
|
|
187
|
+
providerMetadata: {
|
|
188
|
+
...invoiceCreateDetails.providerMetadata,
|
|
189
|
+
invoiceId: invoiceCreateDetails.id,
|
|
190
|
+
},
|
|
191
|
+
}));
|
|
192
|
+
if (result.err) {
|
|
193
|
+
return result;
|
|
194
|
+
}
|
|
195
|
+
// Let's make sure the payment intent, if provided, has the invoiceId set in the metadata
|
|
196
|
+
if (paymentIntentId && !result.val.providerMetadata?.invoiceId) {
|
|
197
|
+
log.warn({
|
|
198
|
+
paymentIntentId,
|
|
199
|
+
invoiceId: result.val.id,
|
|
200
|
+
}, 'Payment intent provided but invoice ID is not set in the provider metadata');
|
|
201
|
+
const stripe = biller.getPaymentProvider('stripe').getStripe();
|
|
202
|
+
try {
|
|
203
|
+
await stripe.paymentIntents.update(paymentIntentId, {
|
|
204
|
+
metadata: {
|
|
205
|
+
...result.val.providerMetadata,
|
|
206
|
+
invoiceId: result.val.id,
|
|
207
|
+
},
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
catch (error) {
|
|
211
|
+
log.error(error, 'Error updating payment intent metadata');
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
return new Ok(result.val);
|
|
169
215
|
};
|
|
170
|
-
const getInvoiceCreateDetails = ({ invoiceId, payer, date, reservationDiscountId, vehicle, plan, mileagePackage, couponCode, paymentIntentId, freeReservation, freeReservationReason, analytics, reservationId })=>{
|
|
216
|
+
const getInvoiceCreateDetails = ({ invoiceId, payer, date, reservationDiscountId, vehicle, plan, mileagePackage, couponCode, paymentIntentId, freeReservation, freeReservationReason, analytics, reservationId, }) => {
|
|
171
217
|
return {
|
|
172
218
|
id: invoiceId || generateId('Invoice'),
|
|
173
219
|
taxPercentage: 0,
|
|
@@ -183,13 +229,15 @@ const getInvoiceCreateDetails = ({ invoiceId, payer, date, reservationDiscountId
|
|
|
183
229
|
description: 'Reservation fee for a FLUX subscription',
|
|
184
230
|
footer: `Invoice for a FLUX subscription reservation. Due by ${format(date ?? new Date())}`,
|
|
185
231
|
invoiceUrl: `${config.appUrl}/invoice-preview/${invoiceId}`,
|
|
186
|
-
...reservationDiscountId
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
232
|
+
...(reservationDiscountId
|
|
233
|
+
? {
|
|
234
|
+
discounts: {
|
|
235
|
+
connect: {
|
|
236
|
+
id: reservationDiscountId,
|
|
237
|
+
},
|
|
238
|
+
},
|
|
191
239
|
}
|
|
192
|
-
|
|
240
|
+
: {}),
|
|
193
241
|
lines: [],
|
|
194
242
|
subscriptionDetails: {
|
|
195
243
|
vehicleId: vehicle.id,
|
|
@@ -198,7 +246,7 @@ const getInvoiceCreateDetails = ({ invoiceId, payer, date, reservationDiscountId
|
|
|
198
246
|
variant: vehicle.variant,
|
|
199
247
|
year: vehicle.year,
|
|
200
248
|
plan: plan,
|
|
201
|
-
mileagePackage: mileagePackage
|
|
249
|
+
mileagePackage: mileagePackage,
|
|
202
250
|
},
|
|
203
251
|
stripePaymentIntentId: paymentIntentId,
|
|
204
252
|
providerMetadata: {
|
|
@@ -206,18 +254,14 @@ const getInvoiceCreateDetails = ({ invoiceId, payer, date, reservationDiscountId
|
|
|
206
254
|
mileagePackage,
|
|
207
255
|
vehicleId: vehicle.id,
|
|
208
256
|
vehicleName: vehicleName(vehicle),
|
|
209
|
-
...reservationId ? {
|
|
210
|
-
|
|
211
|
-
} : {},
|
|
212
|
-
...couponCode ? {
|
|
213
|
-
couponCode
|
|
214
|
-
} : {}
|
|
257
|
+
...(reservationId ? { reservationId } : {}),
|
|
258
|
+
...(couponCode ? { couponCode } : {}),
|
|
215
259
|
},
|
|
216
260
|
autoRetry: {
|
|
217
261
|
enabled: false,
|
|
218
262
|
interval: 0,
|
|
219
263
|
maxAttempts: 0,
|
|
220
|
-
attempts: 0
|
|
264
|
+
attempts: 0,
|
|
221
265
|
},
|
|
222
266
|
metadata: {
|
|
223
267
|
purpose: PURPOSE_RESERVATION,
|
|
@@ -226,10 +270,11 @@ const getInvoiceCreateDetails = ({ invoiceId, payer, date, reservationDiscountId
|
|
|
226
270
|
plan,
|
|
227
271
|
mileagePackage,
|
|
228
272
|
couponCode,
|
|
229
|
-
...freeReservation && freeReservationReason
|
|
230
|
-
freeReservationReason
|
|
231
|
-
|
|
232
|
-
analytics
|
|
233
|
-
}
|
|
273
|
+
...(freeReservation && freeReservationReason
|
|
274
|
+
? { freeReservationReason }
|
|
275
|
+
: {}),
|
|
276
|
+
analytics,
|
|
277
|
+
},
|
|
234
278
|
};
|
|
235
279
|
};
|
|
280
|
+
//# sourceMappingURL=invoice.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"invoice.js","sourceRoot":"","sources":["../../src/reservation/invoice.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAA;AAClD,OAAO,EAAE,UAAU,EAAE,4BAA4B,EAAE,MAAM,mBAAmB,CAAA;AAC5E,OAAO,EAGN,MAAM,GAGN,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAA;AAClE,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAA;AACvE,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAA;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAA;AAC1D,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AACtD,OAAO,EAAE,EAAE,EAAuB,MAAM,mBAAmB,CAAA;AAC3D,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"invoice.js","sourceRoot":"","sources":["../../src/reservation/invoice.ts"],"names":[],"mappings":"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"}
|
|
@@ -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,3 +35,4 @@ const checkPayerObjectSanity = (subscriber)=>{
|
|
|
35
35
|
}
|
|
36
36
|
return new Ok(true);
|
|
37
37
|
};
|
|
38
|
+
//# sourceMappingURL=payer.js.map
|
|
@@ -4,14 +4,14 @@ import { checkIfUserCanReserve } from './checks.js';
|
|
|
4
4
|
import { fetchOrCreateReservation } from './fetch-or-create.js';
|
|
5
5
|
import { getPayer } from './payer.js';
|
|
6
6
|
import { getVehicle } from './vehicle.js';
|
|
7
|
-
const processBody = (body)=>{
|
|
7
|
+
const processBody = (body) => {
|
|
8
8
|
// Switch mileage package
|
|
9
9
|
if (body.plan === 'plan1' || body.plan === 'planWeekly') {
|
|
10
10
|
body.mileagePackage = 'unlimited';
|
|
11
11
|
}
|
|
12
12
|
return body;
|
|
13
13
|
};
|
|
14
|
-
export const reserveVehicle = async (vehicleId, unprocessed)=>{
|
|
14
|
+
export const reserveVehicle = async (vehicleId, unprocessed) => {
|
|
15
15
|
const body = processBody(unprocessed);
|
|
16
16
|
// Agree to terms if not done yet
|
|
17
17
|
await handleAgreeToTerms(body);
|
|
@@ -33,7 +33,7 @@ export const reserveVehicle = async (vehicleId, unprocessed)=>{
|
|
|
33
33
|
const reservationResult = await fetchOrCreateReservation({
|
|
34
34
|
vehicle,
|
|
35
35
|
payer,
|
|
36
|
-
body
|
|
36
|
+
body,
|
|
37
37
|
});
|
|
38
38
|
if (reservationResult.err) {
|
|
39
39
|
return reservationResult;
|
|
@@ -41,3 +41,4 @@ export const reserveVehicle = async (vehicleId, unprocessed)=>{
|
|
|
41
41
|
const reservation = reservationResult.val;
|
|
42
42
|
return new Ok(reservation);
|
|
43
43
|
};
|
|
44
|
+
//# sourceMappingURL=reserve.js.map
|
|
@@ -1 +1,2 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -4,19 +4,21 @@ 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
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
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
|
+
});
|
|
20
22
|
if (!vehicle) {
|
|
21
23
|
return new Err(makeProblem(PROBLEM_NOT_FOUND, 'Vehicle not found'));
|
|
22
24
|
}
|
|
@@ -27,3 +29,4 @@ export const getVehicle = async (id, { selectedColor, plan, requestUser }, reque
|
|
|
27
29
|
}
|
|
28
30
|
return new Ok(vehicle);
|
|
29
31
|
};
|
|
32
|
+
//# sourceMappingURL=vehicle.js.map
|
package/dist/slack.js
CHANGED
|
@@ -10,11 +10,12 @@ const slackBlocks = global.__slackBlocks;
|
|
|
10
10
|
/**
|
|
11
11
|
*
|
|
12
12
|
* @deprecated Use slackLater instead and commitSlack to commit
|
|
13
|
-
*/
|
|
13
|
+
*/
|
|
14
|
+
export const slack = async (message, channel = config.slack.defaultChannelId) => {
|
|
14
15
|
return await enhancedFetch('https://slack.com/api/chat.postMessage', {
|
|
15
16
|
method: 'POST',
|
|
16
17
|
headers: {
|
|
17
|
-
Authorization: `Bearer ${config.slack.token}
|
|
18
|
+
Authorization: `Bearer ${config.slack.token}`,
|
|
18
19
|
},
|
|
19
20
|
body: JSON.stringify({
|
|
20
21
|
channel,
|
|
@@ -23,20 +24,23 @@ const slackBlocks = global.__slackBlocks;
|
|
|
23
24
|
type: 'section',
|
|
24
25
|
text: {
|
|
25
26
|
type: 'mrkdwn',
|
|
26
|
-
text: message
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
]
|
|
30
|
-
})
|
|
27
|
+
text: message,
|
|
28
|
+
},
|
|
29
|
+
},
|
|
30
|
+
],
|
|
31
|
+
}),
|
|
31
32
|
});
|
|
32
33
|
};
|
|
33
|
-
export const getSlackBlocks = (channel)=>channel ? slackBlocks.get(channel) : slackBlocks;
|
|
34
|
+
export const getSlackBlocks = (channel) => channel ? slackBlocks.get(channel) : slackBlocks;
|
|
34
35
|
/**
|
|
35
36
|
* Naive implementation, however, for now (uncrowded serverless env), this works
|
|
36
37
|
* @param blocks
|
|
37
38
|
* @param channel
|
|
38
|
-
*/
|
|
39
|
-
|
|
39
|
+
*/
|
|
40
|
+
export function slackLater(blocks, channel) {
|
|
41
|
+
const targetChannel = (config.appEnv === 'production'
|
|
42
|
+
? channel
|
|
43
|
+
: config.slack.defaultChannelId) || config.slack.defaultChannelId;
|
|
40
44
|
if (!targetChannel || !blocks) {
|
|
41
45
|
return;
|
|
42
46
|
}
|
|
@@ -46,13 +50,15 @@ export const getSlackBlocks = (channel)=>channel ? slackBlocks.get(channel) : sl
|
|
|
46
50
|
type: 'section',
|
|
47
51
|
text: {
|
|
48
52
|
type: 'mrkdwn',
|
|
49
|
-
text: blocks
|
|
50
|
-
}
|
|
53
|
+
text: blocks,
|
|
54
|
+
},
|
|
51
55
|
});
|
|
52
|
-
}
|
|
56
|
+
}
|
|
57
|
+
else if (!Array.isArray(blocks)) {
|
|
53
58
|
messages.add(blocks);
|
|
54
|
-
}
|
|
55
|
-
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
for (const b of blocks) {
|
|
56
62
|
messages.add(b);
|
|
57
63
|
}
|
|
58
64
|
}
|
|
@@ -63,22 +69,22 @@ export async function sendSlackMessages(channel, blocks) {
|
|
|
63
69
|
return await enhancedFetch('https://slack.com/api/chat.postMessage', {
|
|
64
70
|
method: 'POST',
|
|
65
71
|
headers: {
|
|
66
|
-
Authorization: `Bearer ${config.slack.token}
|
|
72
|
+
Authorization: `Bearer ${config.slack.token}`,
|
|
67
73
|
},
|
|
68
74
|
body: JSON.stringify({
|
|
69
75
|
channel: targetChannel,
|
|
70
|
-
blocks: Array.from(blocks)
|
|
71
|
-
})
|
|
76
|
+
blocks: Array.from(blocks),
|
|
77
|
+
}),
|
|
72
78
|
});
|
|
73
79
|
}
|
|
74
|
-
export const commitSlack = ()=>{
|
|
80
|
+
export const commitSlack = () => {
|
|
75
81
|
if (!slackBlocks.size) {
|
|
76
82
|
return;
|
|
77
83
|
}
|
|
78
84
|
const channels = slackBlocks.keys();
|
|
79
85
|
let i = 1;
|
|
80
86
|
const baseUrl = config.appEnv === 'development' ? config.tunnelUrl : config.appUrl;
|
|
81
|
-
for (const channel of channels){
|
|
87
|
+
for (const channel of channels) {
|
|
82
88
|
const blocks = slackBlocks.get(channel);
|
|
83
89
|
if (!blocks?.size) {
|
|
84
90
|
continue;
|
|
@@ -88,13 +94,12 @@ export const commitSlack = ()=>{
|
|
|
88
94
|
name: TASK_COMMIT_SLACK_CHANNEL,
|
|
89
95
|
metadata: {
|
|
90
96
|
channel,
|
|
91
|
-
blocks: [
|
|
92
|
-
...blocks
|
|
93
|
-
]
|
|
97
|
+
blocks: [...blocks],
|
|
94
98
|
},
|
|
95
99
|
taskHandlerUrl: `${baseUrl || config.appUrl}/api/hooks/slack-pipeline`,
|
|
96
|
-
scheduledAt: addSeconds(new Date(), i++)
|
|
100
|
+
scheduledAt: addSeconds(new Date(), i++),
|
|
97
101
|
});
|
|
98
102
|
}
|
|
99
103
|
slackBlocks.clear();
|
|
100
104
|
};
|
|
105
|
+
//# sourceMappingURL=slack.js.map
|