@unchainedshop/plugins 2.4.2 → 2.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/payment/stripe.js +34 -9
- package/lib/payment/stripe.js.map +1 -1
- package/lib/pricing/order-delivery.js +3 -4
- package/lib/pricing/order-delivery.js.map +1 -1
- package/lib/pricing/order-discount.js +13 -20
- package/lib/pricing/order-discount.js.map +1 -1
- package/lib/pricing/order-items-discount.js +7 -16
- package/lib/pricing/order-items-discount.js.map +1 -1
- package/lib/pricing/order-items.js +2 -5
- package/lib/pricing/order-items.js.map +1 -1
- package/lib/pricing/order-payment.js +3 -4
- package/lib/pricing/order-payment.js.map +1 -1
- package/package.json +20 -20
- package/src/payment/stripe.ts +46 -12
- package/src/pricing/order-delivery.ts +3 -4
- package/src/pricing/order-discount.ts +13 -20
- package/src/pricing/order-items-discount.ts +7 -16
- package/src/pricing/order-items.ts +2 -6
- package/src/pricing/order-payment.ts +3 -4
package/lib/payment/stripe.js
CHANGED
|
@@ -21,20 +21,30 @@ export const stripeHandler = async (request, response) => {
|
|
|
21
21
|
let event;
|
|
22
22
|
try {
|
|
23
23
|
event = stripe.webhooks.constructEvent(request.body, sig, STRIPE_ENDPOINT_SECRET);
|
|
24
|
+
logger.verbose(`Webhook received`, {
|
|
25
|
+
type: event.type,
|
|
26
|
+
});
|
|
24
27
|
}
|
|
25
28
|
catch (err) {
|
|
29
|
+
logger.error(`Webhook failed: ${err.message}`);
|
|
26
30
|
response.writeHead(400);
|
|
27
|
-
response.end(
|
|
31
|
+
response.end(err.message);
|
|
28
32
|
return;
|
|
29
33
|
}
|
|
30
34
|
try {
|
|
31
35
|
if (event.type === 'payment_intent.succeeded') {
|
|
32
36
|
const paymentIntent = event.data.object;
|
|
33
37
|
const orderPaymentId = paymentIntent.metadata?.orderPaymentId;
|
|
38
|
+
logger.verbose(`Webhook tries to checkout with orderPaymentId: ${orderPaymentId}`, {
|
|
39
|
+
type: event.type,
|
|
40
|
+
});
|
|
34
41
|
await modules.orders.payments.logEvent(orderPaymentId, event);
|
|
35
42
|
const orderPayment = await modules.orders.payments.findOrderPayment({
|
|
36
43
|
orderPaymentId,
|
|
37
44
|
});
|
|
45
|
+
if (!orderPayment) {
|
|
46
|
+
throw new Error(`Order payment object not found with orderPaymentId: ${orderPaymentId}`);
|
|
47
|
+
}
|
|
38
48
|
const order = await modules.orders.checkout(orderPayment.orderId, {
|
|
39
49
|
transactionContext: {
|
|
40
50
|
paymentIntentId: paymentIntent.id,
|
|
@@ -43,32 +53,44 @@ export const stripeHandler = async (request, response) => {
|
|
|
43
53
|
paymentIntentId: paymentIntent.id,
|
|
44
54
|
},
|
|
45
55
|
}, resolvedContext);
|
|
46
|
-
logger.info(`
|
|
56
|
+
logger.info(`Webhook confirmed checkout for order: ${order._id}`, {
|
|
47
57
|
orderId: order._id,
|
|
58
|
+
type: event.type,
|
|
48
59
|
});
|
|
49
60
|
}
|
|
50
61
|
else if (event.type === 'setup_intent.succeeded') {
|
|
51
62
|
const setupIntent = event.data.object;
|
|
52
63
|
const { paymentProviderId, userId } = setupIntent.metadata;
|
|
64
|
+
logger.verbose(`Webhook tries to register payment credential with paymentProviderId: ${paymentProviderId}`, {
|
|
65
|
+
type: event.type,
|
|
66
|
+
userId,
|
|
67
|
+
});
|
|
53
68
|
await modules.payment.registerCredentials(paymentProviderId, {
|
|
54
69
|
transactionContext: {
|
|
55
70
|
setupIntentId: setupIntent.id,
|
|
56
71
|
},
|
|
57
72
|
userId,
|
|
58
73
|
}, resolvedContext);
|
|
59
|
-
logger.info(`
|
|
74
|
+
logger.info(`Webhook registered payment credentials with paymentProviderId: ${paymentProviderId}`, {
|
|
60
75
|
userId,
|
|
76
|
+
type: event.type,
|
|
61
77
|
});
|
|
62
78
|
}
|
|
63
79
|
else {
|
|
80
|
+
logger.verbose(`Unhandled webhook type`, {
|
|
81
|
+
type: event.type,
|
|
82
|
+
});
|
|
64
83
|
response.writeHead(404);
|
|
65
84
|
response.end();
|
|
66
85
|
return;
|
|
67
86
|
}
|
|
68
87
|
}
|
|
69
88
|
catch (err) {
|
|
89
|
+
logger.error(`Webhook failed: ${err.message}`, {
|
|
90
|
+
type: event.type,
|
|
91
|
+
});
|
|
70
92
|
response.writeHead(400);
|
|
71
|
-
response.end(
|
|
93
|
+
response.end(err.message || 'Error');
|
|
72
94
|
return;
|
|
73
95
|
}
|
|
74
96
|
// Return a 200 response to acknowledge receipt of the event
|
|
@@ -145,7 +167,7 @@ const Stripe = {
|
|
|
145
167
|
},
|
|
146
168
|
register: async ({ setupIntentId }) => {
|
|
147
169
|
if (!setupIntentId) {
|
|
148
|
-
throw new Error('You have to provide a
|
|
170
|
+
throw new Error('You have to provide a setupIntentId');
|
|
149
171
|
}
|
|
150
172
|
const setupIntent = await stripe.setupIntents.retrieve(setupIntentId);
|
|
151
173
|
if (setupIntent.status === 'succeeded') {
|
|
@@ -157,7 +179,7 @@ const Stripe = {
|
|
|
157
179
|
usage: setupIntent.usage,
|
|
158
180
|
};
|
|
159
181
|
}
|
|
160
|
-
logger.warn('
|
|
182
|
+
logger.warn('Registration declined', setupIntentId);
|
|
161
183
|
return null;
|
|
162
184
|
},
|
|
163
185
|
sign: async (transactionContext = {}) => {
|
|
@@ -177,7 +199,7 @@ const Stripe = {
|
|
|
177
199
|
},
|
|
178
200
|
charge: async ({ paymentIntentId, paymentCredentials }) => {
|
|
179
201
|
if (!paymentIntentId && !paymentCredentials) {
|
|
180
|
-
throw new Error('You have to provide
|
|
202
|
+
throw new Error('You have to provide paymentIntentId or paymentCredentials');
|
|
181
203
|
}
|
|
182
204
|
const { order } = params.paymentContext;
|
|
183
205
|
const orderPayment = await modules.orders.payments.findOrderPayment({
|
|
@@ -196,14 +218,17 @@ const Stripe = {
|
|
|
196
218
|
const { currency, amount } = pricing.total({ useNetPrice: false });
|
|
197
219
|
if (paymentIntentObject.currency !== currency.toLowerCase() ||
|
|
198
220
|
paymentIntentObject.amount !== Math.round(amount)) {
|
|
199
|
-
throw new Error('The price has changed since
|
|
221
|
+
throw new Error('The price has changed since the intent has been created');
|
|
200
222
|
}
|
|
201
223
|
if (paymentIntentObject.metadata?.orderPaymentId !== orderPayment?._id) {
|
|
202
|
-
throw new Error('The order payment is different from the initiating intent
|
|
224
|
+
throw new Error('The order payment is different from the initiating intent');
|
|
203
225
|
}
|
|
204
226
|
if (paymentIntentObject.status === 'succeeded') {
|
|
205
227
|
return paymentIntentObject;
|
|
206
228
|
}
|
|
229
|
+
logger.verbose('Charge postponed because paymentIntent has wrong status', {
|
|
230
|
+
orderPaymentId: paymentIntentObject.id,
|
|
231
|
+
});
|
|
207
232
|
return false;
|
|
208
233
|
},
|
|
209
234
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stripe.js","sourceRoot":"","sources":["../../src/payment/stripe.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC5F,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD;;;;;;;EAOE;AAEF,OAAO,kBAAkB,MAAM,QAAQ,CAAC;AAExC,MAAM,MAAM,GAAG,YAAY,CAAC,+BAA+B,CAAC,CAAC;AAE7D,MAAM,EAAE,aAAa,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC;AAElF,2BAA2B;AAC3B,aAAa;AACb,MAAM,MAAM,GAAG,kBAAkB,CAAC,aAAa,CAAC,CAAC;AAEjD,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE;IACvD,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAChD,MAAM,eAAe,GAAG,OAAO,CAAC,gBAA2B,CAAC;IAC5D,MAAM,EAAE,OAAO,EAAE,GAAG,eAAe,CAAC;IAEpC,IAAI,KAAK,CAAC;IAEV,IAAI;QACF,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,sBAAsB,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"stripe.js","sourceRoot":"","sources":["../../src/payment/stripe.ts"],"names":[],"mappings":"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"}
|
|
@@ -20,10 +20,9 @@ export const OrderDelivery = {
|
|
|
20
20
|
const pricing = modules.orders.deliveries.pricingSheet(orderDelivery, order.currency, params.context);
|
|
21
21
|
const tax = pricing.taxSum();
|
|
22
22
|
const shipping = pricing.gross();
|
|
23
|
-
pricingAdapter
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
}
|
|
23
|
+
pricingAdapter
|
|
24
|
+
.resultSheet()
|
|
25
|
+
.addDelivery({ amount: shipping, taxAmount: tax, meta: { adapter: OrderDelivery.key } });
|
|
27
26
|
return pricingAdapter.calculate();
|
|
28
27
|
},
|
|
29
28
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"order-delivery.js","sourceRoot":"","sources":["../../src/pricing/order-delivery.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEvF,MAAM,CAAC,MAAM,aAAa,GAAyB;IACjD,GAAG,mBAAmB;IAEtB,GAAG,EAAE,uCAAuC;IAC5C,OAAO,EAAE,OAAO;IAChB,KAAK,EAAE,4BAA4B;IACnC,UAAU,EAAE,EAAE;IAEd,cAAc,EAAE,GAAG,EAAE;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,EAAE,CAAC,MAAM,EAAE,EAAE;QAClB,MAAM,cAAc,GAAG,mBAAmB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC3D,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC;QAEzD,OAAO;YACL,GAAG,cAAc;YAEjB,SAAS,EAAE,KAAK,IAAI,EAAE;gBACpB,4CAA4C;gBAC5C,IAAI,CAAC,aAAa;oBAAE,OAAO,IAAI,CAAC;gBAChC,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,YAAY,CACpD,aAAa,EACb,KAAK,CAAC,QAAQ,EACd,MAAM,CAAC,OAAO,CACf,CAAC;gBACF,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;gBAC7B,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;gBAEjC,cAAc,
|
|
1
|
+
{"version":3,"file":"order-delivery.js","sourceRoot":"","sources":["../../src/pricing/order-delivery.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEvF,MAAM,CAAC,MAAM,aAAa,GAAyB;IACjD,GAAG,mBAAmB;IAEtB,GAAG,EAAE,uCAAuC;IAC5C,OAAO,EAAE,OAAO;IAChB,KAAK,EAAE,4BAA4B;IACnC,UAAU,EAAE,EAAE;IAEd,cAAc,EAAE,GAAG,EAAE;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,EAAE,CAAC,MAAM,EAAE,EAAE;QAClB,MAAM,cAAc,GAAG,mBAAmB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC3D,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC;QAEzD,OAAO;YACL,GAAG,cAAc;YAEjB,SAAS,EAAE,KAAK,IAAI,EAAE;gBACpB,4CAA4C;gBAC5C,IAAI,CAAC,aAAa;oBAAE,OAAO,IAAI,CAAC;gBAChC,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,YAAY,CACpD,aAAa,EACb,KAAK,CAAC,QAAQ,EACd,MAAM,CAAC,OAAO,CACf,CAAC;gBACF,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;gBAC7B,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;gBAEjC,cAAc;qBACX,WAAW,EAAE;qBACb,WAAW,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,aAAa,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;gBAE3F,OAAO,cAAc,CAAC,SAAS,EAAE,CAAC;YACpC,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC;AAEF,oBAAoB,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC"}
|
|
@@ -19,15 +19,18 @@ export const OrderDiscount = {
|
|
|
19
19
|
// discounts need to provide a *fixedRate*
|
|
20
20
|
// if you want to add percentual discounts,
|
|
21
21
|
// add it to the order item calculation
|
|
22
|
-
const totalAmountOfItems = params.calculationSheet.
|
|
22
|
+
const totalAmountOfItems = params.calculationSheet.total({
|
|
23
23
|
category: OrderPricingRowCategory.Items,
|
|
24
|
-
|
|
25
|
-
|
|
24
|
+
useNetPrice: false,
|
|
25
|
+
}).amount;
|
|
26
|
+
const totalAmountOfPaymentAndDelivery = params.calculationSheet.total({
|
|
26
27
|
category: OrderPricingRowCategory.Payment,
|
|
27
|
-
|
|
28
|
-
|
|
28
|
+
useNetPrice: false,
|
|
29
|
+
}).amount +
|
|
30
|
+
params.calculationSheet.total({
|
|
29
31
|
category: OrderPricingRowCategory.Delivery,
|
|
30
|
-
|
|
32
|
+
useNetPrice: false,
|
|
33
|
+
}).amount;
|
|
31
34
|
const itemShares = orderPositions.map((orderPosition) => calcUtils.resolveRatioAndTaxDivisorForPricingSheet(modules.orders.positions.pricingSheet(orderPosition, order.currency, params.context), totalAmountOfItems));
|
|
32
35
|
const deliveryShare = calcUtils.resolveRatioAndTaxDivisorForPricingSheet(orderDelivery &&
|
|
33
36
|
modules.orders.deliveries.pricingSheet(orderDelivery, order.currency, params.context), totalAmountOfPaymentAndDelivery);
|
|
@@ -46,27 +49,17 @@ export const OrderDiscount = {
|
|
|
46
49
|
const [deliveryAndPaymentDiscountAmount, deliveryAndPaymentTaxAmount] = calcUtils.applyDiscountToMultipleShares([deliveryShare, paymentShare], Math.max(0, Math.min(amountLeft, leftInFeesToSplit)));
|
|
47
50
|
amountLeft -= deliveryAndPaymentDiscountAmount;
|
|
48
51
|
alreadyDeducted += itemsDiscountAmount;
|
|
49
|
-
const discountAmount = itemsDiscountAmount + deliveryAndPaymentDiscountAmount;
|
|
50
|
-
const taxAmount = itemsTaxAmount + deliveryAndPaymentTaxAmount;
|
|
52
|
+
const discountAmount = (itemsDiscountAmount + deliveryAndPaymentDiscountAmount) * -1;
|
|
53
|
+
const taxAmount = (itemsTaxAmount + deliveryAndPaymentTaxAmount) * -1;
|
|
51
54
|
if (discountAmount) {
|
|
52
55
|
pricingAdapter.resultSheet().addDiscount({
|
|
53
|
-
amount: discountAmount
|
|
56
|
+
amount: discountAmount,
|
|
57
|
+
taxAmount,
|
|
54
58
|
discountId,
|
|
55
|
-
isTaxable: false,
|
|
56
|
-
isNetPrice: false,
|
|
57
59
|
meta: {
|
|
58
60
|
adapter: OrderDiscount.key,
|
|
59
61
|
},
|
|
60
62
|
});
|
|
61
|
-
if (taxAmount !== 0) {
|
|
62
|
-
pricingAdapter.resultSheet().addTax({
|
|
63
|
-
amount: taxAmount * -1,
|
|
64
|
-
meta: {
|
|
65
|
-
discountId,
|
|
66
|
-
adapter: OrderDiscount.key,
|
|
67
|
-
},
|
|
68
|
-
});
|
|
69
|
-
}
|
|
70
63
|
}
|
|
71
64
|
});
|
|
72
65
|
return pricingAdapter.calculate();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"order-discount.js","sourceRoot":"","sources":["../../src/pricing/order-discount.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,uBAAuB,EAAE,MAAM,wCAAwC,CAAC;AACvG,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACvF,OAAO,EAAE,WAAW,IAAI,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEhE,MAAM,CAAC,MAAM,aAAa,GAAyB;IACjD,GAAG,mBAAmB;IAEtB,GAAG,EAAE,uCAAuC;IAC5C,OAAO,EAAE,OAAO;IAChB,KAAK,EAAE,sCAAsC;IAC7C,UAAU,EAAE,EAAE;IAEd,cAAc,EAAE,GAAG,EAAE;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,EAAE,CAAC,MAAM,EAAE,EAAE;QAClB,MAAM,cAAc,GAAG,mBAAmB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC3D,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,YAAY,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC;QAEvF,OAAO;YACL,GAAG,cAAc;YAEjB,SAAS,EAAE,KAAK,IAAI,EAAE;gBACpB,0CAA0C;gBAC1C,2CAA2C;gBAC3C,uCAAuC;gBACvC,MAAM,kBAAkB,GAAG,MAAM,CAAC,gBAAgB,CAAC,
|
|
1
|
+
{"version":3,"file":"order-discount.js","sourceRoot":"","sources":["../../src/pricing/order-discount.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,36 +19,27 @@ const OrderItemsDiscount = {
|
|
|
19
19
|
// discounts need to provide a *fixedRate*
|
|
20
20
|
// if you want to add percentual discounts,
|
|
21
21
|
// add it to the order item calculation
|
|
22
|
-
const totalAmountOfItems = params.calculationSheet.
|
|
22
|
+
const totalAmountOfItems = params.calculationSheet.total({
|
|
23
23
|
category: OrderPricingRowCategory.Items,
|
|
24
|
-
|
|
24
|
+
useNetPrice: false,
|
|
25
|
+
}).amount;
|
|
25
26
|
const itemShares = orderPositions.map((orderPosition) => calcUtils.resolveRatioAndTaxDivisorForPricingSheet(modules.orders.positions.pricingSheet(orderPosition, order.currency, params.context), totalAmountOfItems));
|
|
26
27
|
let alreadyDeducted = 0;
|
|
27
28
|
params.discounts.forEach(({ configuration, discountId }) => {
|
|
28
29
|
// First, we deduce the discount from the items
|
|
29
30
|
const [itemsDiscountAmount, itemsTaxAmount] = calcUtils.applyDiscountToMultipleShares(itemShares, calcUtils.calculateAmountToSplit({ ...configuration, alreadyDeducted }, totalAmountOfItems));
|
|
30
31
|
alreadyDeducted = +itemsDiscountAmount;
|
|
31
|
-
const discountAmount = itemsDiscountAmount;
|
|
32
|
-
const taxAmount = itemsTaxAmount;
|
|
32
|
+
const discountAmount = itemsDiscountAmount * -1;
|
|
33
|
+
const taxAmount = itemsTaxAmount * -1;
|
|
33
34
|
if (discountAmount) {
|
|
34
35
|
pricingAdapter.resultSheet().addDiscount({
|
|
35
|
-
amount: discountAmount
|
|
36
|
+
amount: discountAmount,
|
|
37
|
+
taxAmount,
|
|
36
38
|
discountId,
|
|
37
|
-
isTaxable: false,
|
|
38
|
-
isNetPrice: false,
|
|
39
39
|
meta: {
|
|
40
40
|
adapter: OrderItemsDiscount.key,
|
|
41
41
|
},
|
|
42
42
|
});
|
|
43
|
-
if (taxAmount !== 0) {
|
|
44
|
-
pricingAdapter.resultSheet().addTax({
|
|
45
|
-
amount: taxAmount * -1,
|
|
46
|
-
meta: {
|
|
47
|
-
discountId,
|
|
48
|
-
adapter: OrderItemsDiscount.key,
|
|
49
|
-
},
|
|
50
|
-
});
|
|
51
|
-
}
|
|
52
43
|
}
|
|
53
44
|
});
|
|
54
45
|
return pricingAdapter.calculate();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"order-items-discount.js","sourceRoot":"","sources":["../../src/pricing/order-items-discount.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,uBAAuB,EAAE,MAAM,wCAAwC,CAAC;AACvG,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACvF,OAAO,EAAE,WAAW,IAAI,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEhE,MAAM,kBAAkB,GAAyB;IAC/C,GAAG,mBAAmB;IAEtB,GAAG,EAAE,6CAA6C;IAClD,OAAO,EAAE,OAAO;IAChB,KAAK,EAAE,yCAAyC;IAChD,UAAU,EAAE,EAAE;IAEd,cAAc,EAAE,GAAG,EAAE;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,EAAE,CAAC,MAAM,EAAE,EAAE;QAClB,MAAM,cAAc,GAAG,mBAAmB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC3D,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC;QAE1D,OAAO;YACL,GAAG,cAAc;YAEjB,SAAS,EAAE,KAAK,IAAI,EAAE;gBACpB,0CAA0C;gBAC1C,2CAA2C;gBAC3C,uCAAuC;gBAEvC,MAAM,kBAAkB,GAAG,MAAM,CAAC,gBAAgB,CAAC,
|
|
1
|
+
{"version":3,"file":"order-items-discount.js","sourceRoot":"","sources":["../../src/pricing/order-items-discount.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,uBAAuB,EAAE,MAAM,wCAAwC,CAAC;AACvG,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACvF,OAAO,EAAE,WAAW,IAAI,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEhE,MAAM,kBAAkB,GAAyB;IAC/C,GAAG,mBAAmB;IAEtB,GAAG,EAAE,6CAA6C;IAClD,OAAO,EAAE,OAAO;IAChB,KAAK,EAAE,yCAAyC;IAChD,UAAU,EAAE,EAAE;IAEd,cAAc,EAAE,GAAG,EAAE;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,EAAE,CAAC,MAAM,EAAE,EAAE;QAClB,MAAM,cAAc,GAAG,mBAAmB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC3D,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC;QAE1D,OAAO;YACL,GAAG,cAAc;YAEjB,SAAS,EAAE,KAAK,IAAI,EAAE;gBACpB,0CAA0C;gBAC1C,2CAA2C;gBAC3C,uCAAuC;gBAEvC,MAAM,kBAAkB,GAAG,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC;oBACvD,QAAQ,EAAE,uBAAuB,CAAC,KAAK;oBACvC,WAAW,EAAE,KAAK;iBACnB,CAAC,CAAC,MAAM,CAAC;gBAEV,MAAM,UAAU,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,aAAa,EAAE,EAAE,CACtD,SAAS,CAAC,wCAAwC,CAChD,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC,aAAa,EAAE,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,EACpF,kBAAkB,CACnB,CACF,CAAC;gBAEF,IAAI,eAAe,GAAG,CAAC,CAAC;gBAExB,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,EAAE,aAAa,EAAE,UAAU,EAAE,EAAE,EAAE;oBACzD,+CAA+C;oBAC/C,MAAM,CAAC,mBAAmB,EAAE,cAAc,CAAC,GAAG,SAAS,CAAC,6BAA6B,CACnF,UAAU,EACV,SAAS,CAAC,sBAAsB,CAAC,EAAE,GAAG,aAAa,EAAE,eAAe,EAAE,EAAE,kBAAkB,CAAC,CAC5F,CAAC;oBACF,eAAe,GAAG,CAAC,mBAAmB,CAAC;oBAEvC,MAAM,cAAc,GAAG,mBAAmB,GAAG,CAAC,CAAC,CAAC;oBAChD,MAAM,SAAS,GAAG,cAAc,GAAG,CAAC,CAAC,CAAC;oBACtC,IAAI,cAAc,EAAE;wBAClB,cAAc,CAAC,WAAW,EAAE,CAAC,WAAW,CAAC;4BACvC,MAAM,EAAE,cAAc;4BACtB,SAAS;4BACT,UAAU;4BACV,IAAI,EAAE;gCACJ,OAAO,EAAE,kBAAkB,CAAC,GAAG;6BAChC;yBACF,CAAC,CAAC;qBACJ;gBACH,CAAC,CAAC,CAAC;gBAEH,OAAO,cAAc,CAAC,SAAS,EAAE,CAAC;YACpC,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC;AAEF,oBAAoB,CAAC,eAAe,CAAC,kBAAkB,CAAC,CAAC"}
|
|
@@ -29,12 +29,9 @@ const OrderItems = {
|
|
|
29
29
|
});
|
|
30
30
|
pricingAdapter.resultSheet().addItems({
|
|
31
31
|
amount: totalAndTaxesOfAllItems.items,
|
|
32
|
+
taxAmount: totalAndTaxesOfAllItems.taxes,
|
|
33
|
+
meta: { adapter: OrderItems.key },
|
|
32
34
|
});
|
|
33
|
-
if (totalAndTaxesOfAllItems.taxes !== 0) {
|
|
34
|
-
pricingAdapter.resultSheet().addTax({
|
|
35
|
-
amount: totalAndTaxesOfAllItems.taxes,
|
|
36
|
-
});
|
|
37
|
-
}
|
|
38
35
|
return pricingAdapter.calculate();
|
|
39
36
|
},
|
|
40
37
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"order-items.js","sourceRoot":"","sources":["../../src/pricing/order-items.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEvF,MAAM,UAAU,GAAyB;IACvC,GAAG,mBAAmB;IAEtB,GAAG,EAAE,oCAAoC;IACzC,OAAO,EAAE,OAAO;IAChB,KAAK,EAAE,mCAAmC;IAC1C,UAAU,EAAE,CAAC;IAEb,cAAc,EAAE,GAAG,EAAE;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,EAAE,CAAC,MAAM,EAAE,EAAE;QAClB,MAAM,cAAc,GAAG,mBAAmB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC3D,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC;QAE1D,OAAO;YACL,GAAG,cAAc;YAEjB,SAAS,EAAE,KAAK,IAAI,EAAE;gBACpB,sDAAsD;gBACtD,MAAM,uBAAuB,GAAG,cAAc,CAAC,MAAM,CACnD,CAAC,OAAO,EAAE,aAAa,EAAE,EAAE;oBACzB,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,YAAY,CACnD,aAAa,EACb,KAAK,CAAC,QAAQ,EACd,MAAM,CAAC,OAAO,CACf,CAAC;oBACF,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;oBAC7B,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;oBAC9B,OAAO;wBACL,KAAK,EAAE,OAAO,CAAC,KAAK,GAAG,GAAG;wBAC1B,KAAK,EAAE,OAAO,CAAC,KAAK,GAAG,KAAK;qBAC7B,CAAC;gBACJ,CAAC,EACD;oBACE,KAAK,EAAE,CAAC;oBACR,KAAK,EAAE,CAAC;iBACT,CACF,CAAC;gBAEF,cAAc,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC;oBACpC,MAAM,EAAE,uBAAuB,CAAC,KAAK;
|
|
1
|
+
{"version":3,"file":"order-items.js","sourceRoot":"","sources":["../../src/pricing/order-items.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEvF,MAAM,UAAU,GAAyB;IACvC,GAAG,mBAAmB;IAEtB,GAAG,EAAE,oCAAoC;IACzC,OAAO,EAAE,OAAO;IAChB,KAAK,EAAE,mCAAmC;IAC1C,UAAU,EAAE,CAAC;IAEb,cAAc,EAAE,GAAG,EAAE;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,EAAE,CAAC,MAAM,EAAE,EAAE;QAClB,MAAM,cAAc,GAAG,mBAAmB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC3D,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC;QAE1D,OAAO;YACL,GAAG,cAAc;YAEjB,SAAS,EAAE,KAAK,IAAI,EAAE;gBACpB,sDAAsD;gBACtD,MAAM,uBAAuB,GAAG,cAAc,CAAC,MAAM,CACnD,CAAC,OAAO,EAAE,aAAa,EAAE,EAAE;oBACzB,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,YAAY,CACnD,aAAa,EACb,KAAK,CAAC,QAAQ,EACd,MAAM,CAAC,OAAO,CACf,CAAC;oBACF,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;oBAC7B,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;oBAC9B,OAAO;wBACL,KAAK,EAAE,OAAO,CAAC,KAAK,GAAG,GAAG;wBAC1B,KAAK,EAAE,OAAO,CAAC,KAAK,GAAG,KAAK;qBAC7B,CAAC;gBACJ,CAAC,EACD;oBACE,KAAK,EAAE,CAAC;oBACR,KAAK,EAAE,CAAC;iBACT,CACF,CAAC;gBAEF,cAAc,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC;oBACpC,MAAM,EAAE,uBAAuB,CAAC,KAAK;oBACrC,SAAS,EAAE,uBAAuB,CAAC,KAAK;oBACxC,IAAI,EAAE,EAAE,OAAO,EAAE,UAAU,CAAC,GAAG,EAAE;iBAClC,CAAC,CAAC;gBAEH,OAAO,cAAc,CAAC,SAAS,EAAE,CAAC;YACpC,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC;AAEF,oBAAoB,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC"}
|
|
@@ -20,10 +20,9 @@ const OrderPayment = {
|
|
|
20
20
|
const pricing = modules.orders.payments.pricingSheet(orderPayment, order.currency, params.context);
|
|
21
21
|
const tax = pricing.taxSum();
|
|
22
22
|
const paymentFees = pricing.gross();
|
|
23
|
-
pricingAdapter
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
}
|
|
23
|
+
pricingAdapter
|
|
24
|
+
.resultSheet()
|
|
25
|
+
.addPayment({ amount: paymentFees, taxAmount: tax, meta: { adapter: OrderPayment.key } });
|
|
27
26
|
return pricingAdapter.calculate();
|
|
28
27
|
},
|
|
29
28
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"order-payment.js","sourceRoot":"","sources":["../../src/pricing/order-payment.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEvF,MAAM,YAAY,GAAyB;IACzC,GAAG,mBAAmB;IAEtB,GAAG,EAAE,sCAAsC;IAC3C,OAAO,EAAE,OAAO;IAChB,KAAK,EAAE,2BAA2B;IAClC,UAAU,EAAE,EAAE;IAEd,cAAc,EAAE,GAAG,EAAE;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,EAAE,CAAC,MAAM,EAAE,EAAE;QAClB,MAAM,cAAc,GAAG,mBAAmB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC3D,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC;QAExD,OAAO;YACL,GAAG,cAAc;YAEjB,SAAS,EAAE,KAAK,IAAI,EAAE;gBACpB,4CAA4C;gBAC5C,IAAI,CAAC,YAAY;oBAAE,OAAO,IAAI,CAAC;gBAE/B,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAClD,YAAY,EACZ,KAAK,CAAC,QAAQ,EACd,MAAM,CAAC,OAAO,CACf,CAAC;gBACF,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;gBAC7B,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;gBAEpC,cAAc,
|
|
1
|
+
{"version":3,"file":"order-payment.js","sourceRoot":"","sources":["../../src/pricing/order-payment.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEvF,MAAM,YAAY,GAAyB;IACzC,GAAG,mBAAmB;IAEtB,GAAG,EAAE,sCAAsC;IAC3C,OAAO,EAAE,OAAO;IAChB,KAAK,EAAE,2BAA2B;IAClC,UAAU,EAAE,EAAE;IAEd,cAAc,EAAE,GAAG,EAAE;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,EAAE,CAAC,MAAM,EAAE,EAAE;QAClB,MAAM,cAAc,GAAG,mBAAmB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC3D,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC;QAExD,OAAO;YACL,GAAG,cAAc;YAEjB,SAAS,EAAE,KAAK,IAAI,EAAE;gBACpB,4CAA4C;gBAC5C,IAAI,CAAC,YAAY;oBAAE,OAAO,IAAI,CAAC;gBAE/B,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAClD,YAAY,EACZ,KAAK,CAAC,QAAQ,EACd,MAAM,CAAC,OAAO,CACf,CAAC;gBACF,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;gBAC7B,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;gBAEpC,cAAc;qBACX,WAAW,EAAE;qBACb,UAAU,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,YAAY,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;gBAE5F,OAAO,cAAc,CAAC,SAAS,EAAE,CAAC;YACpC,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC;AAEF,oBAAoB,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@unchainedshop/plugins",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.5.0",
|
|
4
4
|
"main": "lib/plugins-index.js",
|
|
5
5
|
"types": "lib/plugins-index.d.ts",
|
|
6
6
|
"exports": {
|
|
@@ -78,29 +78,29 @@
|
|
|
78
78
|
"ethers": "^6.7.1",
|
|
79
79
|
"express": "^4.18.2",
|
|
80
80
|
"mongodb": "^4.0.0",
|
|
81
|
-
"stripe": "^13.
|
|
81
|
+
"stripe": "^13.5.0",
|
|
82
82
|
"tiny-secp256k1": "^2.2.3",
|
|
83
83
|
"web-push": "^3.6.3"
|
|
84
84
|
},
|
|
85
85
|
"devDependencies": {
|
|
86
86
|
"@redis/client": "^1.5.9",
|
|
87
|
-
"@types/node": "^18.17.
|
|
88
|
-
"@unchainedshop/api": "^2.
|
|
89
|
-
"@unchainedshop/core-delivery": "^2.
|
|
90
|
-
"@unchainedshop/core-enrollments": "^2.
|
|
91
|
-
"@unchainedshop/core-filters": "^2.
|
|
92
|
-
"@unchainedshop/core-messaging": "^2.
|
|
93
|
-
"@unchainedshop/core-orders": "^2.
|
|
94
|
-
"@unchainedshop/core-payment": "^2.
|
|
95
|
-
"@unchainedshop/core-products": "^2.
|
|
96
|
-
"@unchainedshop/core-quotations": "^2.
|
|
97
|
-
"@unchainedshop/core-warehousing": "^2.
|
|
98
|
-
"@unchainedshop/core-worker": "^2.
|
|
99
|
-
"@unchainedshop/events": "^2.
|
|
100
|
-
"@unchainedshop/file-upload": "^2.
|
|
101
|
-
"@unchainedshop/logger": "^2.
|
|
102
|
-
"@unchainedshop/types": "^2.
|
|
103
|
-
"@unchainedshop/utils": "^2.
|
|
87
|
+
"@types/node": "^18.17.15",
|
|
88
|
+
"@unchainedshop/api": "^2.5.0",
|
|
89
|
+
"@unchainedshop/core-delivery": "^2.5.0",
|
|
90
|
+
"@unchainedshop/core-enrollments": "^2.5.0",
|
|
91
|
+
"@unchainedshop/core-filters": "^2.5.0",
|
|
92
|
+
"@unchainedshop/core-messaging": "^2.5.0",
|
|
93
|
+
"@unchainedshop/core-orders": "^2.5.0",
|
|
94
|
+
"@unchainedshop/core-payment": "^2.5.0",
|
|
95
|
+
"@unchainedshop/core-products": "^2.5.0",
|
|
96
|
+
"@unchainedshop/core-quotations": "^2.5.0",
|
|
97
|
+
"@unchainedshop/core-warehousing": "^2.5.0",
|
|
98
|
+
"@unchainedshop/core-worker": "^2.5.0",
|
|
99
|
+
"@unchainedshop/events": "^2.5.0",
|
|
100
|
+
"@unchainedshop/file-upload": "^2.5.0",
|
|
101
|
+
"@unchainedshop/logger": "^2.5.0",
|
|
102
|
+
"@unchainedshop/types": "^2.5.0",
|
|
103
|
+
"@unchainedshop/utils": "^2.5.0",
|
|
104
104
|
"bluebird": "^3.7.2",
|
|
105
105
|
"event-iterator": "^2.0.0",
|
|
106
106
|
"express": "^4.18.2",
|
|
@@ -109,7 +109,7 @@
|
|
|
109
109
|
"minio": "^7.1.3",
|
|
110
110
|
"mongodb": "^4.17.1",
|
|
111
111
|
"node-sheets": "^1.2.0",
|
|
112
|
-
"nodemailer": "^6.9.
|
|
112
|
+
"nodemailer": "^6.9.5",
|
|
113
113
|
"open": "^9.1.0",
|
|
114
114
|
"request": "^2.88.2",
|
|
115
115
|
"ts-jest": "^29.1.1",
|
package/src/payment/stripe.ts
CHANGED
|
@@ -31,9 +31,13 @@ export const stripeHandler = async (request, response) => {
|
|
|
31
31
|
|
|
32
32
|
try {
|
|
33
33
|
event = stripe.webhooks.constructEvent(request.body, sig, STRIPE_ENDPOINT_SECRET);
|
|
34
|
+
logger.verbose(`Webhook received`, {
|
|
35
|
+
type: event.type,
|
|
36
|
+
});
|
|
34
37
|
} catch (err) {
|
|
38
|
+
logger.error(`Webhook failed: ${err.message}`);
|
|
35
39
|
response.writeHead(400);
|
|
36
|
-
response.end(
|
|
40
|
+
response.end(err.message);
|
|
37
41
|
return;
|
|
38
42
|
}
|
|
39
43
|
|
|
@@ -42,12 +46,19 @@ export const stripeHandler = async (request, response) => {
|
|
|
42
46
|
const paymentIntent = event.data.object;
|
|
43
47
|
const orderPaymentId = paymentIntent.metadata?.orderPaymentId;
|
|
44
48
|
|
|
45
|
-
|
|
49
|
+
logger.verbose(`Webhook tries to checkout with orderPaymentId: ${orderPaymentId}`, {
|
|
50
|
+
type: event.type,
|
|
51
|
+
});
|
|
46
52
|
|
|
53
|
+
await modules.orders.payments.logEvent(orderPaymentId, event);
|
|
47
54
|
const orderPayment = await modules.orders.payments.findOrderPayment({
|
|
48
55
|
orderPaymentId,
|
|
49
56
|
});
|
|
50
57
|
|
|
58
|
+
if (!orderPayment) {
|
|
59
|
+
throw new Error(`Order payment object not found with orderPaymentId: ${orderPaymentId}`);
|
|
60
|
+
}
|
|
61
|
+
|
|
51
62
|
const order = await modules.orders.checkout(
|
|
52
63
|
orderPayment.orderId,
|
|
53
64
|
{
|
|
@@ -61,13 +72,22 @@ export const stripeHandler = async (request, response) => {
|
|
|
61
72
|
resolvedContext,
|
|
62
73
|
);
|
|
63
74
|
|
|
64
|
-
logger.info(`
|
|
75
|
+
logger.info(`Webhook confirmed checkout for order: ${order._id}`, {
|
|
65
76
|
orderId: order._id,
|
|
77
|
+
type: event.type,
|
|
66
78
|
});
|
|
67
79
|
} else if (event.type === 'setup_intent.succeeded') {
|
|
68
80
|
const setupIntent = event.data.object;
|
|
69
81
|
const { paymentProviderId, userId } = setupIntent.metadata;
|
|
70
82
|
|
|
83
|
+
logger.verbose(
|
|
84
|
+
`Webhook tries to register payment credential with paymentProviderId: ${paymentProviderId}`,
|
|
85
|
+
{
|
|
86
|
+
type: event.type,
|
|
87
|
+
userId,
|
|
88
|
+
},
|
|
89
|
+
);
|
|
90
|
+
|
|
71
91
|
await modules.payment.registerCredentials(
|
|
72
92
|
paymentProviderId,
|
|
73
93
|
{
|
|
@@ -79,17 +99,27 @@ export const stripeHandler = async (request, response) => {
|
|
|
79
99
|
resolvedContext,
|
|
80
100
|
);
|
|
81
101
|
|
|
82
|
-
logger.info(
|
|
83
|
-
|
|
84
|
-
|
|
102
|
+
logger.info(
|
|
103
|
+
`Webhook registered payment credentials with paymentProviderId: ${paymentProviderId}`,
|
|
104
|
+
{
|
|
105
|
+
userId,
|
|
106
|
+
type: event.type,
|
|
107
|
+
},
|
|
108
|
+
);
|
|
85
109
|
} else {
|
|
110
|
+
logger.verbose(`Unhandled webhook type`, {
|
|
111
|
+
type: event.type,
|
|
112
|
+
});
|
|
86
113
|
response.writeHead(404);
|
|
87
114
|
response.end();
|
|
88
115
|
return;
|
|
89
116
|
}
|
|
90
117
|
} catch (err) {
|
|
118
|
+
logger.error(`Webhook failed: ${err.message}`, {
|
|
119
|
+
type: event.type,
|
|
120
|
+
});
|
|
91
121
|
response.writeHead(400);
|
|
92
|
-
response.end(
|
|
122
|
+
response.end(err.message || 'Error');
|
|
93
123
|
return;
|
|
94
124
|
}
|
|
95
125
|
// Return a 200 response to acknowledge receipt of the event
|
|
@@ -177,7 +207,7 @@ const Stripe: IPaymentAdapter = {
|
|
|
177
207
|
|
|
178
208
|
register: async ({ setupIntentId }) => {
|
|
179
209
|
if (!setupIntentId) {
|
|
180
|
-
throw new Error('You have to provide a
|
|
210
|
+
throw new Error('You have to provide a setupIntentId');
|
|
181
211
|
}
|
|
182
212
|
|
|
183
213
|
const setupIntent = await stripe.setupIntents.retrieve(setupIntentId);
|
|
@@ -192,7 +222,7 @@ const Stripe: IPaymentAdapter = {
|
|
|
192
222
|
};
|
|
193
223
|
}
|
|
194
224
|
|
|
195
|
-
logger.warn('
|
|
225
|
+
logger.warn('Registration declined', setupIntentId);
|
|
196
226
|
return null;
|
|
197
227
|
},
|
|
198
228
|
|
|
@@ -223,7 +253,7 @@ const Stripe: IPaymentAdapter = {
|
|
|
223
253
|
|
|
224
254
|
charge: async ({ paymentIntentId, paymentCredentials }) => {
|
|
225
255
|
if (!paymentIntentId && !paymentCredentials) {
|
|
226
|
-
throw new Error('You have to provide
|
|
256
|
+
throw new Error('You have to provide paymentIntentId or paymentCredentials');
|
|
227
257
|
}
|
|
228
258
|
|
|
229
259
|
const { order } = params.paymentContext;
|
|
@@ -252,16 +282,20 @@ const Stripe: IPaymentAdapter = {
|
|
|
252
282
|
paymentIntentObject.currency !== currency.toLowerCase() ||
|
|
253
283
|
paymentIntentObject.amount !== Math.round(amount)
|
|
254
284
|
) {
|
|
255
|
-
throw new Error('The price has changed since
|
|
285
|
+
throw new Error('The price has changed since the intent has been created');
|
|
256
286
|
}
|
|
257
287
|
if (paymentIntentObject.metadata?.orderPaymentId !== orderPayment?._id) {
|
|
258
|
-
throw new Error('The order payment is different from the initiating intent
|
|
288
|
+
throw new Error('The order payment is different from the initiating intent');
|
|
259
289
|
}
|
|
260
290
|
|
|
261
291
|
if (paymentIntentObject.status === 'succeeded') {
|
|
262
292
|
return paymentIntentObject;
|
|
263
293
|
}
|
|
264
294
|
|
|
295
|
+
logger.verbose('Charge postponed because paymentIntent has wrong status', {
|
|
296
|
+
orderPaymentId: paymentIntentObject.id,
|
|
297
|
+
});
|
|
298
|
+
|
|
265
299
|
return false;
|
|
266
300
|
},
|
|
267
301
|
};
|
|
@@ -31,10 +31,9 @@ export const OrderDelivery: IOrderPricingAdapter = {
|
|
|
31
31
|
const tax = pricing.taxSum();
|
|
32
32
|
const shipping = pricing.gross();
|
|
33
33
|
|
|
34
|
-
pricingAdapter
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
}
|
|
34
|
+
pricingAdapter
|
|
35
|
+
.resultSheet()
|
|
36
|
+
.addDelivery({ amount: shipping, taxAmount: tax, meta: { adapter: OrderDelivery.key } });
|
|
38
37
|
|
|
39
38
|
return pricingAdapter.calculate();
|
|
40
39
|
},
|
|
@@ -25,16 +25,19 @@ export const OrderDiscount: IOrderPricingAdapter = {
|
|
|
25
25
|
// discounts need to provide a *fixedRate*
|
|
26
26
|
// if you want to add percentual discounts,
|
|
27
27
|
// add it to the order item calculation
|
|
28
|
-
const totalAmountOfItems = params.calculationSheet.
|
|
28
|
+
const totalAmountOfItems = params.calculationSheet.total({
|
|
29
29
|
category: OrderPricingRowCategory.Items,
|
|
30
|
-
|
|
30
|
+
useNetPrice: false,
|
|
31
|
+
}).amount;
|
|
31
32
|
const totalAmountOfPaymentAndDelivery =
|
|
32
|
-
params.calculationSheet.
|
|
33
|
+
params.calculationSheet.total({
|
|
33
34
|
category: OrderPricingRowCategory.Payment,
|
|
34
|
-
|
|
35
|
-
|
|
35
|
+
useNetPrice: false,
|
|
36
|
+
}).amount +
|
|
37
|
+
params.calculationSheet.total({
|
|
36
38
|
category: OrderPricingRowCategory.Delivery,
|
|
37
|
-
|
|
39
|
+
useNetPrice: false,
|
|
40
|
+
}).amount;
|
|
38
41
|
|
|
39
42
|
const itemShares = orderPositions.map((orderPosition) =>
|
|
40
43
|
calcUtils.resolveRatioAndTaxDivisorForPricingSheet(
|
|
@@ -84,28 +87,18 @@ export const OrderDiscount: IOrderPricingAdapter = {
|
|
|
84
87
|
amountLeft -= deliveryAndPaymentDiscountAmount;
|
|
85
88
|
alreadyDeducted += itemsDiscountAmount;
|
|
86
89
|
|
|
87
|
-
const discountAmount = itemsDiscountAmount + deliveryAndPaymentDiscountAmount;
|
|
88
|
-
const taxAmount = itemsTaxAmount + deliveryAndPaymentTaxAmount;
|
|
90
|
+
const discountAmount = (itemsDiscountAmount + deliveryAndPaymentDiscountAmount) * -1;
|
|
91
|
+
const taxAmount = (itemsTaxAmount + deliveryAndPaymentTaxAmount) * -1;
|
|
89
92
|
|
|
90
93
|
if (discountAmount) {
|
|
91
94
|
pricingAdapter.resultSheet().addDiscount({
|
|
92
|
-
amount: discountAmount
|
|
95
|
+
amount: discountAmount,
|
|
96
|
+
taxAmount,
|
|
93
97
|
discountId,
|
|
94
|
-
isTaxable: false,
|
|
95
|
-
isNetPrice: false,
|
|
96
98
|
meta: {
|
|
97
99
|
adapter: OrderDiscount.key,
|
|
98
100
|
},
|
|
99
101
|
});
|
|
100
|
-
if (taxAmount !== 0) {
|
|
101
|
-
pricingAdapter.resultSheet().addTax({
|
|
102
|
-
amount: taxAmount * -1,
|
|
103
|
-
meta: {
|
|
104
|
-
discountId,
|
|
105
|
-
adapter: OrderDiscount.key,
|
|
106
|
-
},
|
|
107
|
-
});
|
|
108
|
-
}
|
|
109
102
|
}
|
|
110
103
|
});
|
|
111
104
|
|
|
@@ -26,9 +26,10 @@ const OrderItemsDiscount: IOrderPricingAdapter = {
|
|
|
26
26
|
// if you want to add percentual discounts,
|
|
27
27
|
// add it to the order item calculation
|
|
28
28
|
|
|
29
|
-
const totalAmountOfItems = params.calculationSheet.
|
|
29
|
+
const totalAmountOfItems = params.calculationSheet.total({
|
|
30
30
|
category: OrderPricingRowCategory.Items,
|
|
31
|
-
|
|
31
|
+
useNetPrice: false,
|
|
32
|
+
}).amount;
|
|
32
33
|
|
|
33
34
|
const itemShares = orderPositions.map((orderPosition) =>
|
|
34
35
|
calcUtils.resolveRatioAndTaxDivisorForPricingSheet(
|
|
@@ -47,27 +48,17 @@ const OrderItemsDiscount: IOrderPricingAdapter = {
|
|
|
47
48
|
);
|
|
48
49
|
alreadyDeducted = +itemsDiscountAmount;
|
|
49
50
|
|
|
50
|
-
const discountAmount = itemsDiscountAmount;
|
|
51
|
-
const taxAmount = itemsTaxAmount;
|
|
51
|
+
const discountAmount = itemsDiscountAmount * -1;
|
|
52
|
+
const taxAmount = itemsTaxAmount * -1;
|
|
52
53
|
if (discountAmount) {
|
|
53
54
|
pricingAdapter.resultSheet().addDiscount({
|
|
54
|
-
amount: discountAmount
|
|
55
|
+
amount: discountAmount,
|
|
56
|
+
taxAmount,
|
|
55
57
|
discountId,
|
|
56
|
-
isTaxable: false,
|
|
57
|
-
isNetPrice: false,
|
|
58
58
|
meta: {
|
|
59
59
|
adapter: OrderItemsDiscount.key,
|
|
60
60
|
},
|
|
61
61
|
});
|
|
62
|
-
if (taxAmount !== 0) {
|
|
63
|
-
pricingAdapter.resultSheet().addTax({
|
|
64
|
-
amount: taxAmount * -1,
|
|
65
|
-
meta: {
|
|
66
|
-
discountId,
|
|
67
|
-
adapter: OrderItemsDiscount.key,
|
|
68
|
-
},
|
|
69
|
-
});
|
|
70
|
-
}
|
|
71
62
|
}
|
|
72
63
|
});
|
|
73
64
|
|
|
@@ -44,14 +44,10 @@ const OrderItems: IOrderPricingAdapter = {
|
|
|
44
44
|
|
|
45
45
|
pricingAdapter.resultSheet().addItems({
|
|
46
46
|
amount: totalAndTaxesOfAllItems.items,
|
|
47
|
+
taxAmount: totalAndTaxesOfAllItems.taxes,
|
|
48
|
+
meta: { adapter: OrderItems.key },
|
|
47
49
|
});
|
|
48
50
|
|
|
49
|
-
if (totalAndTaxesOfAllItems.taxes !== 0) {
|
|
50
|
-
pricingAdapter.resultSheet().addTax({
|
|
51
|
-
amount: totalAndTaxesOfAllItems.taxes,
|
|
52
|
-
});
|
|
53
|
-
}
|
|
54
|
-
|
|
55
51
|
return pricingAdapter.calculate();
|
|
56
52
|
},
|
|
57
53
|
};
|
|
@@ -32,10 +32,9 @@ const OrderPayment: IOrderPricingAdapter = {
|
|
|
32
32
|
const tax = pricing.taxSum();
|
|
33
33
|
const paymentFees = pricing.gross();
|
|
34
34
|
|
|
35
|
-
pricingAdapter
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
}
|
|
35
|
+
pricingAdapter
|
|
36
|
+
.resultSheet()
|
|
37
|
+
.addPayment({ amount: paymentFees, taxAmount: tax, meta: { adapter: OrderPayment.key } });
|
|
39
38
|
|
|
40
39
|
return pricingAdapter.calculate();
|
|
41
40
|
},
|