@driveflux/api-functions 1.0.33 → 1.0.35
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 +24 -29
- package/dist/auth/emails.js +12 -13
- package/dist/auth/formatter.js +5 -5
- package/dist/auth/otp.js +66 -50
- package/dist/auth/register.js +42 -34
- package/dist/auth/tokens.js +58 -55
- package/dist/auth/verifications.js +53 -52
- package/dist/constants.js +0 -1
- package/dist/create-logger.js +1 -2
- package/dist/mailjet/calls/manage-contacts-in-list.js +5 -6
- package/dist/mailjet/calls/manage-subscription-status.js +4 -5
- package/dist/mailjet/calls/request-service.js +7 -6
- package/dist/mailjet/refresh-email-preferences.js +11 -12
- package/dist/mailjet/set-contact.js +11 -12
- package/dist/mailjet/types.js +1 -2
- package/dist/mailjet/utils/convert-to-array.js +8 -6
- package/dist/mailjet/utils/extract-email-preferences.js +14 -15
- package/dist/mailjet/utils/lists.js +7 -8
- package/dist/mailjet/utils/update-email-references.js +16 -15
- package/dist/notion/client.js +22 -19
- package/dist/notion/helpful.js +6 -9
- package/dist/notion/schemas/block.js +42 -48
- package/dist/notion/schemas/common.js +9 -14
- package/dist/notion/schemas/database.js +62 -60
- package/dist/notion/schemas/emoji.js +1 -2
- package/dist/notion/schemas/file.js +9 -9
- package/dist/notion/schemas/kb.js +5 -6
- package/dist/notion/schemas/page.js +72 -61
- package/dist/notion/schemas/parent.js +4 -5
- package/dist/notion/schemas/user.js +18 -19
- package/dist/reservation/agree.js +6 -7
- package/dist/reservation/checks.js +3 -4
- package/dist/reservation/display-vehicle.js +65 -71
- package/dist/reservation/ensure-user-billing-address.d.ts.map +1 -1
- package/dist/reservation/ensure-user-billing-address.js +9 -11
- package/dist/reservation/ensure-user-billing-address.js.map +1 -1
- package/dist/reservation/fetch-or-create.js +48 -54
- package/dist/reservation/invoice.d.ts.map +1 -1
- package/dist/reservation/invoice.js +71 -77
- package/dist/reservation/invoice.js.map +1 -1
- package/dist/reservation/payer.js +5 -6
- package/dist/reservation/payment-intent-sync.js +4 -6
- package/dist/reservation/reserve.js +3 -4
- package/dist/reservation/types.js +1 -2
- package/dist/reservation/vehicle.js +13 -16
- package/dist/slack.js +24 -29
- package/dist/validation.js +77 -79
- package/dist/vehicle/vehicle-pricing/constants.js +22 -19
- package/dist/vehicle/vehicle-pricing/index.js +28 -42
- package/dist/vehicle/vehicle-pricing/types.js +1 -2
- package/package.json +11 -11
|
@@ -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
|
|
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';
|
|
@@ -13,17 +13,16 @@ 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
|
|
17
|
-
export const updateReservationInvoiceIfNeeded = async (oldReservationInvoice, newParams)
|
|
16
|
+
const log = createScopedLogger('reservation:invoice');
|
|
17
|
+
export const updateReservationInvoiceIfNeeded = async (oldReservationInvoice, newParams)=>{
|
|
18
18
|
const couponIsDifferent = oldReservationInvoice.couponCode !== newParams.couponCode;
|
|
19
|
-
if (!couponIsDifferent &&
|
|
20
|
-
oldReservationInvoice.stripePaymentIntentId === newParams.paymentIntentId) {
|
|
19
|
+
if (!couponIsDifferent && oldReservationInvoice.stripePaymentIntentId === newParams.paymentIntentId) {
|
|
21
20
|
return new Ok(oldReservationInvoice);
|
|
22
21
|
}
|
|
23
22
|
// If the coupon or payment intent are differnt we should update the invoice
|
|
24
23
|
let update = {
|
|
25
24
|
stripePaymentIntentId: newParams.paymentIntentId,
|
|
26
|
-
couponCode: newParams.couponCode
|
|
25
|
+
couponCode: newParams.couponCode
|
|
27
26
|
};
|
|
28
27
|
// If the coupon is different, we need to apply the coupon to the invoice
|
|
29
28
|
if (couponIsDifferent) {
|
|
@@ -31,63 +30,56 @@ export const updateReservationInvoiceIfNeeded = async (oldReservationInvoice, ne
|
|
|
31
30
|
const result = await coupons.applyCouponToUnsavedInvoice(newParams.couponCode, oldReservationInvoice);
|
|
32
31
|
if (result.ok) {
|
|
33
32
|
const { discounts, ...rest } = result.val;
|
|
34
|
-
const toDisconnect = discounts
|
|
35
|
-
|
|
36
|
-
:
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
}
|
|
41
|
-
: undefined;
|
|
33
|
+
const toDisconnect = discounts ? oldReservationInvoice.discountIds?.filter((id)=>!discounts.connect?.some((d)=>d.id === id)) : undefined;
|
|
34
|
+
const disconnectClauses = toDisconnect?.length ? {
|
|
35
|
+
disconnect: toDisconnect.map((id)=>({
|
|
36
|
+
id
|
|
37
|
+
}))
|
|
38
|
+
} : undefined;
|
|
42
39
|
update = {
|
|
43
40
|
...update,
|
|
44
41
|
...rest,
|
|
45
|
-
...
|
|
46
|
-
|
|
47
|
-
discounts
|
|
48
|
-
|
|
49
|
-
...(disconnectClauses || {}),
|
|
50
|
-
},
|
|
42
|
+
...discounts || disconnectClauses ? {
|
|
43
|
+
discounts: {
|
|
44
|
+
...discounts || {},
|
|
45
|
+
...disconnectClauses || {}
|
|
51
46
|
}
|
|
52
|
-
|
|
47
|
+
} : {},
|
|
53
48
|
metadata: {
|
|
54
49
|
...update.metadata,
|
|
55
|
-
couponCode: newParams.couponCode
|
|
50
|
+
couponCode: newParams.couponCode
|
|
56
51
|
},
|
|
57
52
|
providerMetadata: {
|
|
58
53
|
...update.providerMetadata,
|
|
59
|
-
couponCode: newParams.couponCode
|
|
60
|
-
}
|
|
54
|
+
couponCode: newParams.couponCode
|
|
55
|
+
}
|
|
61
56
|
};
|
|
62
57
|
}
|
|
63
58
|
if (result.err && result.val.code !== PROBLEM_APPLICABLE_NOT_FOUND) {
|
|
64
59
|
return result;
|
|
65
60
|
}
|
|
66
|
-
}
|
|
67
|
-
else if (oldReservationInvoice.discountIds.length) {
|
|
61
|
+
} else if (oldReservationInvoice.discountIds.length) {
|
|
68
62
|
// No discounts, so we disconnect all of them
|
|
69
63
|
update = {
|
|
70
64
|
discounts: {
|
|
71
|
-
disconnect: oldReservationInvoice.discountIds.map((id)
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
}
|
|
65
|
+
disconnect: oldReservationInvoice.discountIds.map((id)=>({
|
|
66
|
+
id
|
|
67
|
+
}))
|
|
68
|
+
}
|
|
75
69
|
};
|
|
76
70
|
}
|
|
77
71
|
}
|
|
78
72
|
let updated = await wrapInResult(biller.updateInvoice(oldReservationInvoice.id, update));
|
|
79
73
|
// If the invoice was locked due to pending status and we're more than 1 minute old, we unlock it
|
|
80
74
|
if (updated.err && updated.val.code === 'invoice_pending') {
|
|
81
|
-
if ((oldReservationInvoice.lockedAt
|
|
82
|
-
isAfter(oldReservationInvoice.lockedAt, subMinutes(new Date(), 1))) ||
|
|
83
|
-
!oldReservationInvoice.lockedAt) {
|
|
75
|
+
if (oldReservationInvoice.lockedAt && isAfter(oldReservationInvoice.lockedAt, subMinutes(new Date(), 1)) || !oldReservationInvoice.lockedAt) {
|
|
84
76
|
updated = await wrapInResult(biller.updateInvoice(oldReservationInvoice.id, {
|
|
85
77
|
...update,
|
|
86
78
|
locked: false,
|
|
87
79
|
lockedAt: null,
|
|
88
80
|
lockReason: null,
|
|
89
81
|
unlockAt: null,
|
|
90
|
-
status: 'draft'
|
|
82
|
+
status: 'draft'
|
|
91
83
|
}));
|
|
92
84
|
}
|
|
93
85
|
}
|
|
@@ -96,7 +88,7 @@ export const updateReservationInvoiceIfNeeded = async (oldReservationInvoice, ne
|
|
|
96
88
|
}
|
|
97
89
|
return new Ok(updated.val);
|
|
98
90
|
};
|
|
99
|
-
export const createReservationInvoice = async ({ invoiceId, couponCode, plan, mileagePackage, referralCode, reservationId, paymentIntentId, freeReservation, freeReservationReason, analytics, vehicle, payer, subscribingUser
|
|
91
|
+
export const createReservationInvoice = async ({ invoiceId, couponCode, plan, mileagePackage, referralCode, reservationId, paymentIntentId, freeReservation, freeReservationReason, analytics, vehicle, payer, subscribingUser })=>{
|
|
100
92
|
if (freeReservation) {
|
|
101
93
|
// It's a free reservation, so we don't need to add a coupon code
|
|
102
94
|
return await wrapInResult(biller.createInvoice(getInvoiceCreateDetails({
|
|
@@ -109,21 +101,17 @@ export const createReservationInvoice = async ({ invoiceId, couponCode, plan, mi
|
|
|
109
101
|
freeReservation,
|
|
110
102
|
freeReservationReason,
|
|
111
103
|
analytics,
|
|
112
|
-
reservationId
|
|
104
|
+
reservationId
|
|
113
105
|
})));
|
|
114
106
|
}
|
|
115
107
|
let finalCouponCode = couponCode;
|
|
116
108
|
// If we don't have a reservation coupon ID, we apply the referral discount if any
|
|
117
|
-
const referral = referralCode &&
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
if (!finalCouponCode &&
|
|
124
|
-
referral &&
|
|
125
|
-
referral.discountToReceiverCouponId &&
|
|
126
|
-
referral.discountToReceiverCouponApplicationName === 'reservationFee') {
|
|
109
|
+
const referral = referralCode && await prisma.referral.findUnique({
|
|
110
|
+
where: {
|
|
111
|
+
id: referralCode
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
if (!finalCouponCode && referral && referral.discountToReceiverCouponId && referral.discountToReceiverCouponApplicationName === 'reservationFee') {
|
|
127
115
|
const referralCoupon = await loadCoupon(referral.discountToReceiverCouponId);
|
|
128
116
|
if (referralCoupon) {
|
|
129
117
|
finalCouponCode = referralCoupon.code;
|
|
@@ -142,17 +130,20 @@ export const createReservationInvoice = async ({ invoiceId, couponCode, plan, mi
|
|
|
142
130
|
freeReservation,
|
|
143
131
|
freeReservationReason,
|
|
144
132
|
analytics,
|
|
145
|
-
reservationId
|
|
133
|
+
reservationId
|
|
146
134
|
}),
|
|
147
135
|
lines: [
|
|
148
136
|
{
|
|
149
137
|
amount: reservationAmount,
|
|
150
138
|
description: `Reservation fee for ${vehicleName(vehicle)}`,
|
|
151
|
-
chargingFor: 'reservationFee'
|
|
152
|
-
}
|
|
153
|
-
]
|
|
139
|
+
chargingFor: 'reservationFee'
|
|
140
|
+
}
|
|
141
|
+
]
|
|
154
142
|
};
|
|
155
143
|
if (finalCouponCode) {
|
|
144
|
+
log.debug({
|
|
145
|
+
finalCouponCode
|
|
146
|
+
}, 'Applying coupon code to invoice');
|
|
156
147
|
const withCoupon = await coupons.applyCouponToUnsavedInvoice(finalCouponCode, invoiceCreateDetails, 'reservationFee', {
|
|
157
148
|
subscriptionPlans: plan,
|
|
158
149
|
subscriptionMileagePackages: mileagePackage,
|
|
@@ -160,23 +151,25 @@ export const createReservationInvoice = async ({ invoiceId, couponCode, plan, mi
|
|
|
160
151
|
vehicleMake: vehicle.make,
|
|
161
152
|
userId: subscribingUser.id,
|
|
162
153
|
businessId: payer.object === 'business' ? payer.id : undefined,
|
|
163
|
-
vehicleType: vehicle.type
|
|
154
|
+
vehicleType: vehicle.type
|
|
164
155
|
});
|
|
165
|
-
if (withCoupon.err &&
|
|
166
|
-
withCoupon.val.code !== PROBLEM_APPLICABLE_NOT_FOUND) {
|
|
156
|
+
if (withCoupon.err && withCoupon.val.code !== PROBLEM_APPLICABLE_NOT_FOUND) {
|
|
167
157
|
return withCoupon;
|
|
168
158
|
}
|
|
159
|
+
log.debug({
|
|
160
|
+
couponUpdates: withCoupon.val
|
|
161
|
+
}, 'Coupon applied to invoice');
|
|
169
162
|
if (withCoupon.ok) {
|
|
170
163
|
invoiceCreateDetails = {
|
|
171
164
|
...withCoupon.val,
|
|
172
165
|
metadata: {
|
|
173
166
|
...withCoupon.val.metadata,
|
|
174
|
-
couponCode: finalCouponCode
|
|
167
|
+
couponCode: finalCouponCode
|
|
175
168
|
},
|
|
176
169
|
providerMetadata: {
|
|
177
170
|
...withCoupon.val.providerMetadata,
|
|
178
|
-
couponCode: finalCouponCode
|
|
179
|
-
}
|
|
171
|
+
couponCode: finalCouponCode
|
|
172
|
+
}
|
|
180
173
|
};
|
|
181
174
|
}
|
|
182
175
|
}
|
|
@@ -184,15 +177,15 @@ export const createReservationInvoice = async ({ invoiceId, couponCode, plan, mi
|
|
|
184
177
|
...invoiceCreateDetails,
|
|
185
178
|
providerMetadata: {
|
|
186
179
|
...invoiceCreateDetails.providerMetadata,
|
|
187
|
-
invoiceId: invoiceCreateDetails.id
|
|
188
|
-
}
|
|
180
|
+
invoiceId: invoiceCreateDetails.id
|
|
181
|
+
}
|
|
189
182
|
}));
|
|
190
183
|
if (result.err) {
|
|
191
184
|
return result;
|
|
192
185
|
}
|
|
193
186
|
return new Ok(result.val);
|
|
194
187
|
};
|
|
195
|
-
const getInvoiceCreateDetails = ({ invoiceId, payer, date, reservationDiscountId, vehicle, plan, mileagePackage, couponCode, paymentIntentId, freeReservation, freeReservationReason, analytics, reservationId
|
|
188
|
+
const getInvoiceCreateDetails = ({ invoiceId, payer, date, reservationDiscountId, vehicle, plan, mileagePackage, couponCode, paymentIntentId, freeReservation, freeReservationReason, analytics, reservationId })=>{
|
|
196
189
|
return {
|
|
197
190
|
id: invoiceId || generateId('Invoice'),
|
|
198
191
|
taxPercentage: 0,
|
|
@@ -208,15 +201,13 @@ const getInvoiceCreateDetails = ({ invoiceId, payer, date, reservationDiscountId
|
|
|
208
201
|
description: 'Reservation fee for a FLUX subscription',
|
|
209
202
|
footer: `Invoice for a FLUX subscription reservation. Due by ${format(date ?? new Date())}`,
|
|
210
203
|
invoiceUrl: `${config.appUrl}/invoice-preview/${invoiceId}`,
|
|
211
|
-
...
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
},
|
|
217
|
-
},
|
|
204
|
+
...reservationDiscountId ? {
|
|
205
|
+
discounts: {
|
|
206
|
+
connect: {
|
|
207
|
+
id: reservationDiscountId
|
|
208
|
+
}
|
|
218
209
|
}
|
|
219
|
-
|
|
210
|
+
} : {},
|
|
220
211
|
lines: [],
|
|
221
212
|
subscriptionDetails: {
|
|
222
213
|
vehicleId: vehicle.id,
|
|
@@ -225,7 +216,7 @@ const getInvoiceCreateDetails = ({ invoiceId, payer, date, reservationDiscountId
|
|
|
225
216
|
variant: vehicle.variant,
|
|
226
217
|
year: vehicle.year,
|
|
227
218
|
plan: plan,
|
|
228
|
-
mileagePackage: mileagePackage
|
|
219
|
+
mileagePackage: mileagePackage
|
|
229
220
|
},
|
|
230
221
|
// Legacy field:
|
|
231
222
|
stripePaymentIntentId: paymentIntentId,
|
|
@@ -235,14 +226,18 @@ const getInvoiceCreateDetails = ({ invoiceId, payer, date, reservationDiscountId
|
|
|
235
226
|
mileagePackage,
|
|
236
227
|
vehicleId: vehicle.id,
|
|
237
228
|
vehicleName: vehicleName(vehicle),
|
|
238
|
-
...
|
|
239
|
-
|
|
229
|
+
...reservationId ? {
|
|
230
|
+
reservationId
|
|
231
|
+
} : {},
|
|
232
|
+
...couponCode ? {
|
|
233
|
+
couponCode
|
|
234
|
+
} : {}
|
|
240
235
|
},
|
|
241
236
|
autoRetry: {
|
|
242
237
|
enabled: false,
|
|
243
238
|
interval: 0,
|
|
244
239
|
maxAttempts: 0,
|
|
245
|
-
attempts: 0
|
|
240
|
+
attempts: 0
|
|
246
241
|
},
|
|
247
242
|
metadata: {
|
|
248
243
|
purpose: PURPOSE_RESERVATION,
|
|
@@ -251,11 +246,10 @@ const getInvoiceCreateDetails = ({ invoiceId, payer, date, reservationDiscountId
|
|
|
251
246
|
plan,
|
|
252
247
|
mileagePackage,
|
|
253
248
|
couponCode,
|
|
254
|
-
...
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
analytics
|
|
258
|
-
}
|
|
249
|
+
...freeReservation && freeReservationReason ? {
|
|
250
|
+
freeReservationReason
|
|
251
|
+
} : {},
|
|
252
|
+
analytics
|
|
253
|
+
}
|
|
259
254
|
};
|
|
260
255
|
};
|
|
261
|
-
//# 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;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AAwBxD,MAAM,
|
|
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;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AAwBxD,MAAM,GAAG,GAAG,kBAAkB,CAAC,qBAAqB,CAAC,CAAA;AAErD,MAAM,CAAC,MAAM,gCAAgC,GAAG,KAAK,EACpD,qBASC,EACD,SAGC,EACyB,EAAE;IAC5B,MAAM,iBAAiB,GACtB,qBAAqB,CAAC,UAAU,KAAK,SAAS,CAAC,UAAU,CAAA;IAC1D,IACC,CAAC,iBAAiB;QAClB,qBAAqB,CAAC,qBAAqB,KAAK,SAAS,CAAC,eAAe,EACxE,CAAC;QACF,OAAO,IAAI,EAAE,CAAC,qBAAgC,CAAC,CAAA;IAChD,CAAC;IAED,4EAA4E;IAE5E,IAAI,MAAM,GAAkB;QAC3B,qBAAqB,EAAE,SAAS,CAAC,eAAe;QAChD,UAAU,EAAE,SAAS,CAAC,UAAU;KAChC,CAAA;IAED,yEAAyE;IACzE,IAAI,iBAAiB,EAAE,CAAC;QACvB,IAAI,SAAS,CAAC,UAAU,EAAE,CAAC;YAC1B,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,2BAA2B,CACvD,SAAS,CAAC,UAAU,EACpB,qBAAqB,CACrB,CAAA;YACD,IAAI,MAAM,CAAC,EAAE,EAAE,CAAC;gBACf,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM,CAAC,GAAG,CAAA;gBACzC,MAAM,YAAY,GAAG,SAAS;oBAC7B,CAAC,CAAC,qBAAqB,CAAC,WAAW,EAAE,MAAM,CACzC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CACpD;oBACF,CAAC,CAAC,SAAS,CAAA;gBAEZ,MAAM,iBAAiB,GAAG,YAAY,EAAE,MAAM;oBAC7C,CAAC,CAAC;wBACA,UAAU,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;qBAC9C;oBACF,CAAC,CAAC,SAAS,CAAA;gBAEZ,MAAM,GAAG;oBACR,GAAG,MAAM;oBACT,GAAG,IAAI;oBACP,GAAG,CAAC,SAAS,IAAI,iBAAiB;wBACjC,CAAC,CAAC;4BACA,SAAS,EAAE;gCACV,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC;gCACpB,GAAG,CAAC,iBAAiB,IAAI,EAAE,CAAC;6BAC5B;yBACD;wBACF,CAAC,CAAC,EAAE,CAAC;oBACN,QAAQ,EAAE;wBACT,GAAG,MAAM,CAAC,QAAQ;wBAClB,UAAU,EAAE,SAAS,CAAC,UAAU;qBAChC;oBACD,gBAAgB,EAAE;wBACjB,GAAG,MAAM,CAAC,gBAAgB;wBAC1B,UAAU,EAAE,SAAS,CAAC,UAAU;qBAChC;iBACD,CAAA;YACF,CAAC;YACD,IAAI,MAAM,CAAC,GAAG,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,KAAK,4BAA4B,EAAE,CAAC;gBACpE,OAAO,MAAM,CAAA;YACd,CAAC;QACF,CAAC;aAAM,IAAI,qBAAqB,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;YACrD,6CAA6C;YAC7C,MAAM,GAAG;gBACR,SAAS,EAAE;oBACV,UAAU,EAAE,qBAAqB,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;wBAC1D,EAAE;qBACF,CAAC,CAAC;iBACH;aACD,CAAA;QACF,CAAC;IACF,CAAC;IAED,IAAI,OAAO,GAAG,MAAM,YAAY,CAC/B,MAAM,CAAC,aAAa,CAAC,qBAAqB,CAAC,EAAE,EAAE,MAAM,CAAC,CACtD,CAAA;IAED,iGAAiG;IACjG,IAAI,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;QAC3D,IACC,CAAC,qBAAqB,CAAC,QAAQ;YAC9B,OAAO,CAAC,qBAAqB,CAAC,QAAQ,EAAE,UAAU,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;YACpE,CAAC,qBAAqB,CAAC,QAAQ,EAC9B,CAAC;YACF,OAAO,GAAG,MAAM,YAAY,CAC3B,MAAM,CAAC,aAAa,CAAC,qBAAqB,CAAC,EAAE,EAAE;gBAC9C,GAAG,MAAM;gBACT,MAAM,EAAE,KAAK;gBACb,QAAQ,EAAE,IAAI;gBACd,UAAU,EAAE,IAAI;gBAChB,QAAQ,EAAE,IAAI;gBACd,MAAM,EAAE,OAAO;aACf,CAAC,CACF,CAAA;QACF,CAAC;IACF,CAAC;IAED,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QACjB,OAAO,OAAO,CAAA;IACf,CAAC;IAED,OAAO,IAAI,EAAE,CAAC,OAAO,CAAC,GAAc,CAAC,CAAA;AACtC,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,wBAAwB,GAAG,KAAK,EAAE,EAC9C,SAAS,EACT,UAAU,EACV,IAAI,EACJ,cAAc,EACd,YAAY,EACZ,aAAa,EACb,eAAe,EACf,eAAe,EACf,qBAAqB,EACrB,SAAS,EACT,OAAO,EACP,KAAK,EACL,eAAe,GACiB,EAA2B,EAAE;IAC7D,IAAI,eAAe,EAAE,CAAC;QACrB,iEAAiE;QACjE,OAAO,MAAM,YAAY,CACxB,MAAM,CAAC,aAAa,CACnB,uBAAuB,CAAC;YACvB,SAAS;YACT,KAAK;YACL,OAAO;YACP,IAAI;YACJ,cAAc;YACd,eAAe;YACf,eAAe;YACf,qBAAqB;YACrB,SAAS;YACT,aAAa;SACb,CAAC,CACkB,CACrB,CAAA;IACF,CAAC;IAED,IAAI,eAAe,GAAG,UAAU,CAAA;IAEhC,kFAAkF;IAClF,MAAM,QAAQ,GACb,YAAY;QACZ,CAAC,MAAM,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC;YACjC,KAAK,EAAE;gBACN,EAAE,EAAE,YAAY;aAChB;SACD,CAAC,CAAC,CAAA;IAEJ,IACC,CAAC,eAAe;QAChB,QAAQ;QACR,QAAQ,CAAC,0BAA0B;QACnC,QAAQ,CAAC,uCAAuC,KAAK,gBAAgB,EACpE,CAAC;QACF,MAAM,cAAc,GAAG,MAAM,UAAU,CAAC,QAAQ,CAAC,0BAA0B,CAAC,CAAA;QAC5E,IAAI,cAAc,EAAE,CAAC;YACpB,eAAe,GAAG,cAAc,CAAC,IAAI,CAAA;QACtC,CAAC;IACF,CAAC;IAED,MAAM,iBAAiB,GAAG,MAAM,CAAC,cAAc,CAAA;IAE/C,gEAAgE;IAChE,IAAI,oBAAoB,GAAG;QAC1B,GAAG,uBAAuB,CAAC;YAC1B,SAAS;YACT,KAAK;YACL,OAAO;YACP,IAAI;YACJ,cAAc;YACd,eAAe;YACf,eAAe;YACf,qBAAqB;YACrB,SAAS;YACT,aAAa;SACb,CAAC;QACF,KAAK,EAAE;YACN;gBACC,MAAM,EAAE,iBAAiB;gBACzB,WAAW,EAAE,uBAAuB,WAAW,CAAC,OAAO,CAAC,EAAE;gBAC1D,WAAW,EAAE,gBAAgB;aAC7B;SACD;KAC+B,CAAA;IAEjC,IAAI,eAAe,EAAE,CAAC;QACrB,GAAG,CAAC,KAAK,CAAC,EAAE,eAAe,EAAE,EAAE,iCAAiC,CAAC,CAAA;QAEjE,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,2BAA2B,CAC3D,eAAe,EACf,oBAAoB,EACpB,gBAAgB,EAChB;YACC,iBAAiB,EAAE,IAAI;YACvB,2BAA2B,EAAE,cAAc;YAC3C,SAAS,EAAE,OAAO,CAAC,EAAE;YACrB,WAAW,EAAE,OAAO,CAAC,IAAI;YACzB,MAAM,EAAE,eAAe,CAAC,EAAE;YAC1B,UAAU,EAAE,KAAK,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS;YAC9D,WAAW,EAAE,OAAO,CAAC,IAAI;SACzB,CACD,CAAA;QAED,IACC,UAAU,CAAC,GAAG;YACd,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,4BAA4B,EACnD,CAAC;YACF,OAAO,UAAU,CAAA;QAClB,CAAC;QACD,GAAG,CAAC,KAAK,CAAC,EAAE,aAAa,EAAE,UAAU,CAAC,GAAG,EAAE,EAAE,2BAA2B,CAAC,CAAA;QAEzE,IAAI,UAAU,CAAC,EAAE,EAAE,CAAC;YACnB,oBAAoB,GAAG;gBACtB,GAAG,UAAU,CAAC,GAAG;gBACjB,QAAQ,EAAE;oBACT,GAAG,UAAU,CAAC,GAAG,CAAC,QAAQ;oBAC1B,UAAU,EAAE,eAAe;iBAC3B;gBACD,gBAAgB,EAAE;oBACjB,GAAG,UAAU,CAAC,GAAG,CAAC,gBAAgB;oBAClC,UAAU,EAAE,eAAe;iBAC3B;aACD,CAAA;QACF,CAAC;IACF,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,YAAY,CAChC,MAAM,CAAC,aAAa,CAAC;QACpB,GAAG,oBAAoB;QACvB,gBAAgB,EAAE;YACjB,GAAG,oBAAoB,CAAC,gBAAgB;YACxC,SAAS,EAAE,oBAAoB,CAAC,EAAY;SAC5C;KACD,CAAqB,CACtB,CAAA;IAED,IAAI,MAAM,CAAC,GAAG,EAAE,CAAC;QAChB,OAAO,MAAM,CAAA;IACd,CAAC;IAED,OAAO,IAAI,EAAE,CAAC,MAAM,CAAC,GAAc,CAAC,CAAA;AACrC,CAAC,CAAA;AAED,MAAM,uBAAuB,GAAG,CAAC,EAChC,SAAS,EACT,KAAK,EACL,IAAI,EACJ,qBAAqB,EACrB,OAAO,EACP,IAAI,EACJ,cAAc,EACd,UAAU,EACV,eAAe,EACf,eAAe,EACf,qBAAqB,EACrB,SAAS,EACT,aAAa,GAiBb,EAAyB,EAAE;IAC3B,OAAO;QACN,EAAE,EAAE,SAAS,IAAI,UAAU,CAAC,SAAS,CAAC;QACtC,aAAa,EAAE,CAAC;QAChB,0BAA0B,EAAE,IAAI;QAChC,SAAS,EAAE,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;QACzD,UAAU,EAAE,KAAK,CAAC,KAAe;QACjC,OAAO,EAAE,KAAK,CAAC,EAAE;QACjB,OAAO,EAAE,KAAK,CAAC,EAAE;QACjB,SAAS,EAAE,KAAK,CAAC,MAAM;QACvB,cAAc,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,IAAI,qBAAqB;QAClE,IAAI,EAAE,IAAI,IAAI,IAAI,IAAI,EAAE;QACxB,mBAAmB,EAAE,mBAAmB;QACxC,WAAW,EAAE,yCAAyC;QACtD,MAAM,EAAE,uDAAuD,MAAM,CAAC,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC,EAAE;QAC3F,UAAU,EAAE,GAAG,MAAM,CAAC,MAAM,oBAAoB,SAAS,EAAE;QAC3D,GAAG,CAAC,qBAAqB;YACxB,CAAC,CAAC;gBACA,SAAS,EAAE;oBACV,OAAO,EAAE;wBACR,EAAE,EAAE,qBAAqB;qBACzB;iBACD;aACD;YACF,CAAC,CAAC,EAAE,CAAC;QACN,KAAK,EAAE,EAAE;QACT,mBAAmB,EAAE;YACpB,SAAS,EAAE,OAAO,CAAC,EAAE;YACrB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,YAAY,EAAE,OAAO,CAAC,YAAY;YAClC,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,IAAI,EAAE,IAAI;YACV,cAAc,EAAE,cAAc;SAC9B;QACD,gBAAgB;QAChB,qBAAqB,EAAE,eAAe;QACtC,2BAA2B,EAAE,eAAe;QAC5C,gBAAgB,EAAE;YACjB,IAAI;YACJ,cAAc;YACd,SAAS,EAAE,OAAO,CAAC,EAAE;YACrB,WAAW,EAAE,WAAW,CAAC,OAAO,CAAC;YACjC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3C,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACrC;QACD,SAAS,EAAE;YACV,OAAO,EAAE,KAAK;YACd,QAAQ,EAAE,CAAC;YACX,WAAW,EAAE,CAAC;YACd,QAAQ,EAAE,CAAC;SACX;QACD,QAAQ,EAAE;YACT,OAAO,EAAE,mBAAmB;YAC5B,aAAa;YACb,WAAW,EAAE,WAAW,CAAC,OAAO,CAAC;YACjC,IAAI;YACJ,cAAc;YACd,UAAU;YACV,GAAG,CAAC,eAAe,IAAI,qBAAqB;gBAC3C,CAAC,CAAC,EAAE,qBAAqB,EAAE;gBAC3B,CAAC,CAAC,EAAE,CAAC;YACN,SAAS;SACT;KAC+B,CAAA;AAClC,CAAC,CAAA"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { prisma } from '@driveflux/db';
|
|
2
|
-
import { makeProblem, PROBLEM_CONDITION_FAILED, PROBLEM_NOT_FOUND
|
|
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
|
|
@@ -3,20 +3,18 @@ import { makeProblem, PROBLEM_EXTERNAL } 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:payment-intent-sync');
|
|
6
|
-
export const ensurePaymentIntentIdIsSynced = async (invoice, paymentIntentId)
|
|
6
|
+
export const ensurePaymentIntentIdIsSynced = async (invoice, paymentIntentId)=>{
|
|
7
7
|
const stripe = biller.getPaymentProvider('stripe').getStripe();
|
|
8
8
|
try {
|
|
9
9
|
await stripe.paymentIntents.update(paymentIntentId, {
|
|
10
10
|
metadata: {
|
|
11
11
|
...invoice.providerMetadata,
|
|
12
|
-
invoiceId: invoice.id
|
|
13
|
-
}
|
|
12
|
+
invoiceId: invoice.id
|
|
13
|
+
}
|
|
14
14
|
});
|
|
15
15
|
return new Ok(true);
|
|
16
|
-
}
|
|
17
|
-
catch (error) {
|
|
16
|
+
} catch (error) {
|
|
18
17
|
log.error(error, 'Error updating payment intent metadata');
|
|
19
18
|
return new Err(makeProblem(PROBLEM_EXTERNAL, 'Error updating payment intent metadata'));
|
|
20
19
|
}
|
|
21
20
|
};
|
|
22
|
-
//# sourceMappingURL=payment-intent-sync.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
|
|
8
|
-
const vehicle = id.startsWith('DV_')
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
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
|
package/dist/slack.js
CHANGED
|
@@ -10,12 +10,11 @@ const slackBlocks = global.__slackBlocks;
|
|
|
10
10
|
/**
|
|
11
11
|
*
|
|
12
12
|
* @deprecated Use slackLater instead and commitSlack to commit
|
|
13
|
-
*/
|
|
14
|
-
export const slack = async (message, channel = config.slack.defaultChannelId) => {
|
|
13
|
+
*/ export const slack = async (message, channel = config.slack.defaultChannelId)=>{
|
|
15
14
|
return await enhancedFetch('https://slack.com/api/chat.postMessage', {
|
|
16
15
|
method: 'POST',
|
|
17
16
|
headers: {
|
|
18
|
-
Authorization: `Bearer ${config.slack.token}
|
|
17
|
+
Authorization: `Bearer ${config.slack.token}`
|
|
19
18
|
},
|
|
20
19
|
body: JSON.stringify({
|
|
21
20
|
channel,
|
|
@@ -24,23 +23,20 @@ export const slack = async (message, channel = config.slack.defaultChannelId) =>
|
|
|
24
23
|
type: 'section',
|
|
25
24
|
text: {
|
|
26
25
|
type: 'mrkdwn',
|
|
27
|
-
text: message
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
]
|
|
31
|
-
})
|
|
26
|
+
text: message
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
]
|
|
30
|
+
})
|
|
32
31
|
});
|
|
33
32
|
};
|
|
34
|
-
export const getSlackBlocks = (channel)
|
|
33
|
+
export const getSlackBlocks = (channel)=>channel ? slackBlocks.get(channel) : slackBlocks;
|
|
35
34
|
/**
|
|
36
35
|
* Naive implementation, however, for now (uncrowded serverless env), this works
|
|
37
36
|
* @param blocks
|
|
38
37
|
* @param channel
|
|
39
|
-
*/
|
|
40
|
-
|
|
41
|
-
const targetChannel = (config.appEnv === 'production'
|
|
42
|
-
? channel
|
|
43
|
-
: config.slack.defaultChannelId) || config.slack.defaultChannelId;
|
|
38
|
+
*/ export function slackLater(blocks, channel) {
|
|
39
|
+
const targetChannel = (config.appEnv === 'production' ? channel : config.slack.defaultChannelId) || config.slack.defaultChannelId;
|
|
44
40
|
if (!targetChannel || !blocks) {
|
|
45
41
|
return;
|
|
46
42
|
}
|
|
@@ -50,15 +46,13 @@ export function slackLater(blocks, channel) {
|
|
|
50
46
|
type: 'section',
|
|
51
47
|
text: {
|
|
52
48
|
type: 'mrkdwn',
|
|
53
|
-
text: blocks
|
|
54
|
-
}
|
|
49
|
+
text: blocks
|
|
50
|
+
}
|
|
55
51
|
});
|
|
56
|
-
}
|
|
57
|
-
else if (!Array.isArray(blocks)) {
|
|
52
|
+
} else if (!Array.isArray(blocks)) {
|
|
58
53
|
messages.add(blocks);
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
for (const b of blocks) {
|
|
54
|
+
} else {
|
|
55
|
+
for (const b of blocks){
|
|
62
56
|
messages.add(b);
|
|
63
57
|
}
|
|
64
58
|
}
|
|
@@ -69,22 +63,22 @@ export async function sendSlackMessages(channel, blocks) {
|
|
|
69
63
|
return await enhancedFetch('https://slack.com/api/chat.postMessage', {
|
|
70
64
|
method: 'POST',
|
|
71
65
|
headers: {
|
|
72
|
-
Authorization: `Bearer ${config.slack.token}
|
|
66
|
+
Authorization: `Bearer ${config.slack.token}`
|
|
73
67
|
},
|
|
74
68
|
body: JSON.stringify({
|
|
75
69
|
channel: targetChannel,
|
|
76
|
-
blocks: Array.from(blocks)
|
|
77
|
-
})
|
|
70
|
+
blocks: Array.from(blocks)
|
|
71
|
+
})
|
|
78
72
|
});
|
|
79
73
|
}
|
|
80
|
-
export const commitSlack = ()
|
|
74
|
+
export const commitSlack = ()=>{
|
|
81
75
|
if (!slackBlocks.size) {
|
|
82
76
|
return;
|
|
83
77
|
}
|
|
84
78
|
const channels = slackBlocks.keys();
|
|
85
79
|
let i = 1;
|
|
86
80
|
const baseUrl = config.appEnv === 'development' ? config.tunnelUrl : config.appUrl;
|
|
87
|
-
for (const channel of channels)
|
|
81
|
+
for (const channel of channels){
|
|
88
82
|
const blocks = slackBlocks.get(channel);
|
|
89
83
|
if (!blocks?.size) {
|
|
90
84
|
continue;
|
|
@@ -94,12 +88,13 @@ export const commitSlack = () => {
|
|
|
94
88
|
name: TASK_COMMIT_SLACK_CHANNEL,
|
|
95
89
|
metadata: {
|
|
96
90
|
channel,
|
|
97
|
-
blocks: [
|
|
91
|
+
blocks: [
|
|
92
|
+
...blocks
|
|
93
|
+
]
|
|
98
94
|
},
|
|
99
95
|
taskHandlerUrl: `${baseUrl || config.appUrl}/api/hooks/slack-pipeline`,
|
|
100
|
-
scheduledAt: addSeconds(new Date(), i++)
|
|
96
|
+
scheduledAt: addSeconds(new Date(), i++)
|
|
101
97
|
});
|
|
102
98
|
}
|
|
103
99
|
slackBlocks.clear();
|
|
104
100
|
};
|
|
105
|
-
//# sourceMappingURL=slack.js.map
|