@unchainedshop/plugins 4.0.0-rc.8 → 4.0.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/accounts/google-oauth.d.ts +4 -0
- package/lib/accounts/google-oauth.d.ts.map +1 -0
- package/lib/accounts/google-oauth.js +145 -0
- package/lib/accounts/google-oauth.js.map +1 -0
- package/lib/accounts/linkedin-oauth.d.ts +4 -0
- package/lib/accounts/linkedin-oauth.d.ts.map +1 -0
- package/lib/accounts/linkedin-oauth.js +82 -0
- package/lib/accounts/linkedin-oauth.js.map +1 -0
- package/lib/delivery/send-message.js.map +1 -1
- package/lib/enrollments/licensed.js +15 -2
- package/lib/enrollments/licensed.js.map +1 -1
- package/lib/files/gridfs/adapter.d.ts.map +1 -1
- package/lib/files/gridfs/adapter.js +11 -8
- package/lib/files/gridfs/adapter.js.map +1 -1
- package/lib/files/gridfs/gridfs-adapter.d.ts +3 -0
- package/lib/files/gridfs/gridfs-adapter.d.ts.map +1 -0
- package/lib/files/gridfs/gridfs-adapter.js +97 -0
- package/lib/files/gridfs/gridfs-adapter.js.map +1 -0
- package/lib/files/gridfs/gridfs-webhook.d.ts +11 -0
- package/lib/files/gridfs/gridfs-webhook.d.ts.map +1 -0
- package/lib/files/gridfs/gridfs-webhook.js +84 -0
- package/lib/files/gridfs/gridfs-webhook.js.map +1 -0
- package/lib/files/gridfs/handler-express.d.ts.map +1 -1
- package/lib/files/gridfs/handler-express.js +21 -25
- package/lib/files/gridfs/handler-express.js.map +1 -1
- package/lib/files/gridfs/handler-fastify.d.ts.map +1 -1
- package/lib/files/gridfs/handler-fastify.js +50 -13
- package/lib/files/gridfs/handler-fastify.js.map +1 -1
- package/lib/files/gridfs/module.d.ts +2 -2
- package/lib/files/minio/handler-express.d.ts.map +1 -1
- package/lib/files/minio/handler-express.js +4 -7
- package/lib/files/minio/handler-express.js.map +1 -1
- package/lib/files/minio/handler-fastify.js +2 -2
- package/lib/files/minio/handler-fastify.js.map +1 -1
- package/lib/files/minio/index.d.ts +1 -1
- package/lib/files/minio/index.d.ts.map +1 -1
- package/lib/files/minio/index.js +7 -7
- package/lib/files/minio/index.js.map +1 -1
- package/lib/files/minio/minio-adapter.d.ts +6 -0
- package/lib/files/minio/minio-adapter.d.ts.map +1 -0
- package/lib/files/minio/minio-adapter.js +181 -0
- package/lib/files/minio/minio-adapter.js.map +1 -0
- package/lib/files/minio/minio-webhook.d.ts +2 -0
- package/lib/files/minio/minio-webhook.d.ts.map +1 -0
- package/lib/files/minio/minio-webhook.js +33 -0
- package/lib/files/minio/minio-webhook.js.map +1 -0
- package/lib/filters/local-search.js +1 -1
- package/lib/filters/local-search.js.map +1 -1
- package/lib/filters/strict-equal.js +0 -18
- package/lib/filters/strict-equal.js.map +1 -1
- package/lib/payment/apple-iap/adapter.js +12 -10
- package/lib/payment/apple-iap/adapter.js.map +1 -1
- package/lib/payment/apple-iap/db/AppleTransactionsCollection.d.ts +1 -1
- package/lib/payment/apple-iap/db/AppleTransactionsCollection.d.ts.map +1 -1
- package/lib/payment/apple-iap/handler-express.d.ts.map +1 -1
- package/lib/payment/apple-iap/handler-express.js +14 -10
- package/lib/payment/apple-iap/handler-express.js.map +1 -1
- package/lib/payment/apple-iap/handler-fastify.d.ts.map +1 -1
- package/lib/payment/apple-iap/handler-fastify.js +15 -8
- package/lib/payment/apple-iap/handler-fastify.js.map +1 -1
- package/lib/payment/apple-iap/module/configureAppleTransactionsModule.d.ts +9 -0
- package/lib/payment/apple-iap/module/configureAppleTransactionsModule.d.ts.map +1 -0
- package/lib/payment/apple-iap/module/configureAppleTransactionsModule.js +17 -0
- package/lib/payment/apple-iap/module/configureAppleTransactionsModule.js.map +1 -0
- package/lib/payment/apple-iap/module.d.ts +4 -4
- package/lib/payment/apple-iap/module.d.ts.map +1 -1
- package/lib/payment/apple-iap/module.js +4 -2
- package/lib/payment/apple-iap/module.js.map +1 -1
- package/lib/payment/braintree.js +3 -1
- package/lib/payment/braintree.js.map +1 -1
- package/lib/payment/cryptopay/db/CryptopayTransactions.d.ts +1 -1
- package/lib/payment/cryptopay/db/CryptopayTransactions.d.ts.map +1 -1
- package/lib/payment/cryptopay/derive-btc-address.d.ts.map +1 -1
- package/lib/payment/cryptopay/derive-btc-address.js +2 -3
- package/lib/payment/cryptopay/derive-btc-address.js.map +1 -1
- package/lib/payment/cryptopay/derive-eth-address.d.ts.map +1 -1
- package/lib/payment/cryptopay/derive-eth-address.js +5 -3
- package/lib/payment/cryptopay/derive-eth-address.js.map +1 -1
- package/lib/payment/cryptopay/handle-webhook.js +2 -2
- package/lib/payment/cryptopay/handle-webhook.js.map +1 -1
- package/lib/payment/cryptopay/handler-express.d.ts.map +1 -1
- package/lib/payment/cryptopay/handler-express.js +4 -7
- package/lib/payment/cryptopay/handler-express.js.map +1 -1
- package/lib/payment/cryptopay/handler-fastify.js +1 -1
- package/lib/payment/cryptopay/handler-fastify.js.map +1 -1
- package/lib/payment/cryptopay/middleware.d.ts +2 -0
- package/lib/payment/cryptopay/middleware.d.ts.map +1 -0
- package/lib/payment/cryptopay/middleware.js +75 -0
- package/lib/payment/cryptopay/middleware.js.map +1 -0
- package/lib/payment/cryptopay/module/configureCryptopayModule.d.ts +25 -0
- package/lib/payment/cryptopay/module/configureCryptopayModule.d.ts.map +1 -0
- package/lib/payment/cryptopay/module/configureCryptopayModule.js +75 -0
- package/lib/payment/cryptopay/module/configureCryptopayModule.js.map +1 -0
- package/lib/payment/cryptopay/module.d.ts +2 -2
- package/lib/payment/cryptopay/module.d.ts.map +1 -1
- package/lib/payment/cryptopay/module.js +4 -4
- package/lib/payment/cryptopay/module.js.map +1 -1
- package/lib/payment/cryptopay/plugin.d.ts.map +1 -1
- package/lib/payment/cryptopay/plugin.js +18 -4
- package/lib/payment/cryptopay/plugin.js.map +1 -1
- package/lib/payment/datatrans-v2/handler-express.d.ts.map +1 -1
- package/lib/payment/datatrans-v2/handler-express.js +13 -11
- package/lib/payment/datatrans-v2/handler-express.js.map +1 -1
- package/lib/payment/datatrans-v2/handler-fastify.d.ts.map +1 -1
- package/lib/payment/datatrans-v2/handler-fastify.js +11 -5
- package/lib/payment/datatrans-v2/handler-fastify.js.map +1 -1
- package/lib/payment/datatrans-v2/index.js +63 -37
- package/lib/payment/datatrans-v2/index.js.map +1 -1
- package/lib/payment/datatrans-v2/middleware.d.ts +2 -0
- package/lib/payment/datatrans-v2/middleware.d.ts.map +1 -0
- package/lib/payment/datatrans-v2/middleware.js +68 -0
- package/lib/payment/datatrans-v2/middleware.js.map +1 -0
- package/lib/payment/datatrans-v2/parseRegistrationData.d.ts +1 -1
- package/lib/payment/datatrans-v2/parseRegistrationData.d.ts.map +1 -1
- package/lib/payment/paypal-checkout.js +4 -2
- package/lib/payment/paypal-checkout.js.map +1 -1
- package/lib/payment/payrexx/api/index.d.ts +1 -1
- package/lib/payment/payrexx/api/index.d.ts.map +1 -1
- package/lib/payment/payrexx/api/makeFetcher.d.ts +1 -1
- package/lib/payment/payrexx/api/makeFetcher.d.ts.map +1 -1
- package/lib/payment/payrexx/api/makeFetcher.js +1 -1
- package/lib/payment/payrexx/api/makeFetcher.js.map +1 -1
- package/lib/payment/payrexx/handler-express.d.ts.map +1 -1
- package/lib/payment/payrexx/handler-express.js +15 -15
- package/lib/payment/payrexx/handler-express.js.map +1 -1
- package/lib/payment/payrexx/handler-fastify.js +23 -15
- package/lib/payment/payrexx/handler-fastify.js.map +1 -1
- package/lib/payment/payrexx/index.js +21 -15
- package/lib/payment/payrexx/index.js.map +1 -1
- package/lib/payment/payrexx/middleware.d.ts +2 -0
- package/lib/payment/payrexx/middleware.d.ts.map +1 -0
- package/lib/payment/payrexx/middleware.js +86 -0
- package/lib/payment/payrexx/middleware.js.map +1 -0
- package/lib/payment/postfinance-checkout/api-client.d.ts.map +1 -1
- package/lib/payment/postfinance-checkout/api-client.js +7 -7
- package/lib/payment/postfinance-checkout/api-client.js.map +1 -1
- package/lib/payment/postfinance-checkout/handler-express.js +7 -8
- package/lib/payment/postfinance-checkout/handler-express.js.map +1 -1
- package/lib/payment/postfinance-checkout/handler-fastify.d.ts.map +1 -1
- package/lib/payment/postfinance-checkout/handler-fastify.js +6 -4
- package/lib/payment/postfinance-checkout/handler-fastify.js.map +1 -1
- package/lib/payment/postfinance-checkout/index.d.ts.map +1 -1
- package/lib/payment/postfinance-checkout/index.js +20 -7
- package/lib/payment/postfinance-checkout/index.js.map +1 -1
- package/lib/payment/postfinance-checkout/middleware.d.ts +2 -0
- package/lib/payment/postfinance-checkout/middleware.d.ts.map +1 -0
- package/lib/payment/postfinance-checkout/middleware.js +38 -0
- package/lib/payment/postfinance-checkout/middleware.js.map +1 -0
- package/lib/payment/saferpay/adapter.d.ts.map +1 -1
- package/lib/payment/saferpay/adapter.js +9 -0
- package/lib/payment/saferpay/adapter.js.map +1 -1
- package/lib/payment/saferpay/handler-express.d.ts.map +1 -1
- package/lib/payment/saferpay/handler-express.js +10 -8
- package/lib/payment/saferpay/handler-express.js.map +1 -1
- package/lib/payment/saferpay/handler-fastify.d.ts.map +1 -1
- package/lib/payment/saferpay/handler-fastify.js +11 -5
- package/lib/payment/saferpay/handler-fastify.js.map +1 -1
- package/lib/payment/saferpay/middleware.d.ts +2 -0
- package/lib/payment/saferpay/middleware.d.ts.map +1 -0
- package/lib/payment/saferpay/middleware.js +57 -0
- package/lib/payment/saferpay/middleware.js.map +1 -0
- package/lib/payment/saferpay/module/configureSaferpayTransactionsModule.d.ts +10 -0
- package/lib/payment/saferpay/module/configureSaferpayTransactionsModule.d.ts.map +1 -0
- package/lib/payment/saferpay/module/configureSaferpayTransactionsModule.js +24 -0
- package/lib/payment/saferpay/module/configureSaferpayTransactionsModule.js.map +1 -0
- package/lib/payment/saferpay/module.d.ts +2 -2
- package/lib/payment/stripe/handler-express.js +25 -17
- package/lib/payment/stripe/handler-express.js.map +1 -1
- package/lib/payment/stripe/handler-fastify.d.ts.map +1 -1
- package/lib/payment/stripe/handler-fastify.js +33 -12
- package/lib/payment/stripe/handler-fastify.js.map +1 -1
- package/lib/payment/stripe/index.js +21 -15
- package/lib/payment/stripe/index.js.map +1 -1
- package/lib/payment/stripe/middleware.d.ts +6 -0
- package/lib/payment/stripe/middleware.d.ts.map +1 -0
- package/lib/payment/stripe/middleware.js +114 -0
- package/lib/payment/stripe/middleware.js.map +1 -0
- package/lib/payment/stripe/stripe.d.ts +2 -2
- package/lib/payment/stripe/stripe.d.ts.map +1 -1
- package/lib/payment/stripe/stripe.js +14 -11
- package/lib/payment/stripe/stripe.js.map +1 -1
- package/lib/plugins-index.d.ts +48 -0
- package/lib/plugins-index.d.ts.map +1 -0
- package/lib/plugins-index.js +107 -0
- package/lib/plugins-index.js.map +1 -0
- package/lib/presets/all.d.ts +8 -6
- package/lib/presets/all.d.ts.map +1 -1
- package/lib/presets/all.js +3 -1
- package/lib/presets/all.js.map +1 -1
- package/lib/pricing/delivery-swiss-tax.d.ts.map +1 -1
- package/lib/pricing/delivery-swiss-tax.js +13 -20
- package/lib/pricing/delivery-swiss-tax.js.map +1 -1
- package/lib/pricing/order-discount.d.ts.map +1 -1
- package/lib/pricing/order-discount.js +5 -3
- package/lib/pricing/order-discount.js.map +1 -1
- package/lib/pricing/order-round.d.ts.map +1 -1
- package/lib/pricing/order-round.js +4 -3
- package/lib/pricing/order-round.js.map +1 -1
- package/lib/pricing/product-catalog-price-options.d.ts +2 -0
- package/lib/pricing/product-catalog-price-options.d.ts.map +1 -0
- package/lib/pricing/product-catalog-price-options.js +52 -0
- package/lib/pricing/product-catalog-price-options.js.map +1 -0
- package/lib/pricing/product-catalog-price.d.ts.map +1 -1
- package/lib/pricing/product-catalog-price.js +26 -2
- package/lib/pricing/product-catalog-price.js.map +1 -1
- package/lib/pricing/product-price-rateconversion.js +3 -3
- package/lib/pricing/product-price-rateconversion.js.map +1 -1
- package/lib/pricing/product-swiss-tax.d.ts +1 -5
- package/lib/pricing/product-swiss-tax.d.ts.map +1 -1
- package/lib/pricing/product-swiss-tax.js +26 -22
- package/lib/pricing/product-swiss-tax.js.map +1 -1
- package/lib/pricing/tax/ch.d.ts +7 -2
- package/lib/pricing/tax/ch.d.ts.map +1 -1
- package/lib/pricing/tax/ch.js +16 -1
- package/lib/pricing/tax/ch.js.map +1 -1
- package/lib/pricing/utils/isDeliveryAddressInCountry.d.ts +7 -0
- package/lib/pricing/utils/isDeliveryAddressInCountry.d.ts.map +1 -0
- package/lib/pricing/utils/isDeliveryAddressInCountry.js +13 -0
- package/lib/pricing/utils/isDeliveryAddressInCountry.js.map +1 -0
- package/lib/warehousing/eth-minter.js +23 -11
- package/lib/warehousing/eth-minter.js.map +1 -1
- package/lib/worker/budgetsms.d.ts +10 -0
- package/lib/worker/budgetsms.d.ts.map +1 -0
- package/lib/worker/budgetsms.js +217 -0
- package/lib/worker/budgetsms.js.map +1 -0
- package/lib/worker/bulk-import.d.ts +1 -1
- package/lib/worker/bulk-import.d.ts.map +1 -1
- package/lib/worker/bulk-import.js +11 -33
- package/lib/worker/bulk-import.js.map +1 -1
- package/lib/worker/bulkgate.d.ts +2 -0
- package/lib/worker/bulkgate.d.ts.map +1 -0
- package/lib/worker/bulkgate.js +104 -0
- package/lib/worker/bulkgate.js.map +1 -0
- package/lib/worker/email.d.ts.map +1 -1
- package/lib/worker/email.js +25 -7
- package/lib/worker/email.js.map +1 -1
- package/lib/worker/enrollment-order-generator.d.ts.map +1 -1
- package/lib/worker/enrollment-order-generator.js +7 -49
- package/lib/worker/enrollment-order-generator.js.map +1 -1
- package/lib/worker/error-notifications.js +1 -1
- package/lib/worker/error-notifications.js.map +1 -1
- package/lib/worker/export-token.d.ts.map +1 -1
- package/lib/worker/export-token.js +0 -1
- package/lib/worker/export-token.js.map +1 -1
- package/lib/worker/message.d.ts +1 -1
- package/lib/worker/message.d.ts.map +1 -1
- package/lib/worker/message.js +4 -2
- package/lib/worker/message.js.map +1 -1
- package/lib/worker/sms.js +17 -17
- package/lib/worker/sms.js.map +1 -1
- package/lib/worker/twilio.d.ts +2 -0
- package/lib/worker/twilio.d.ts.map +1 -0
- package/lib/worker/twilio.js +60 -0
- package/lib/worker/twilio.js.map +1 -0
- package/package.json +22 -33
- package/src/delivery/send-message.ts +1 -1
- package/src/enrollments/licensed.ts +15 -2
- package/src/files/gridfs/adapter.ts +12 -7
- package/src/files/gridfs/handler-express.ts +23 -25
- package/src/files/gridfs/handler-fastify.ts +53 -14
- package/src/files/minio/handler-express.ts +4 -7
- package/src/files/minio/handler-fastify.ts +2 -2
- package/src/files/minio/index.ts +16 -16
- package/src/filters/local-search.ts +1 -1
- package/src/filters/strict-equal.ts +0 -21
- package/src/payment/apple-iap/adapter.ts +12 -14
- package/src/payment/apple-iap/db/AppleTransactionsCollection.ts +1 -1
- package/src/payment/apple-iap/handler-express.ts +17 -11
- package/src/payment/apple-iap/handler-fastify.ts +19 -9
- package/src/payment/apple-iap/module.ts +9 -4
- package/src/payment/braintree.ts +4 -1
- package/src/payment/cryptopay/db/CryptopayTransactions.ts +1 -1
- package/src/payment/cryptopay/derive-btc-address.ts +1 -3
- package/src/payment/cryptopay/derive-eth-address.ts +5 -3
- package/src/payment/cryptopay/handle-webhook.ts +6 -6
- package/src/payment/cryptopay/handler-express.ts +4 -7
- package/src/payment/cryptopay/handler-fastify.ts +1 -1
- package/src/payment/cryptopay/module.ts +8 -5
- package/src/payment/cryptopay/plugin.ts +21 -4
- package/src/payment/datatrans-v2/handler-express.ts +17 -12
- package/src/payment/datatrans-v2/handler-fastify.ts +15 -6
- package/src/payment/datatrans-v2/index.ts +82 -50
- package/src/payment/paypal-checkout.ts +4 -2
- package/src/payment/payrexx/api/index.ts +1 -1
- package/src/payment/payrexx/api/makeFetcher.ts +2 -2
- package/src/payment/payrexx/handler-express.ts +24 -32
- package/src/payment/payrexx/handler-fastify.ts +33 -33
- package/src/payment/payrexx/index.ts +26 -16
- package/src/payment/postfinance-checkout/api-client.ts +13 -8
- package/src/payment/postfinance-checkout/handler-express.ts +8 -8
- package/src/payment/postfinance-checkout/handler-fastify.ts +7 -4
- package/src/payment/postfinance-checkout/index.ts +20 -8
- package/src/payment/saferpay/adapter.ts +14 -2
- package/src/payment/saferpay/handler-express.ts +14 -13
- package/src/payment/saferpay/handler-fastify.ts +14 -9
- package/src/payment/stripe/handler-express.ts +33 -33
- package/src/payment/stripe/handler-fastify.ts +40 -27
- package/src/payment/stripe/index.ts +18 -16
- package/src/payment/stripe/stripe.ts +17 -12
- package/src/presets/all.ts +3 -1
- package/src/pricing/delivery-swiss-tax.ts +16 -31
- package/src/pricing/order-discount.ts +6 -4
- package/src/pricing/order-round.ts +5 -4
- package/src/pricing/product-catalog-price-options.ts +67 -0
- package/src/pricing/product-catalog-price.ts +25 -2
- package/src/pricing/product-price-rateconversion.ts +3 -3
- package/src/pricing/product-swiss-tax.ts +39 -40
- package/src/pricing/tax/ch.ts +33 -7
- package/src/pricing/utils/isDeliveryAddressInCountry.test.ts +106 -0
- package/src/pricing/utils/isDeliveryAddressInCountry.ts +26 -0
- package/src/warehousing/eth-minter.ts +30 -11
- package/src/worker/budgetsms.ts +268 -0
- package/src/worker/bulk-import.ts +12 -53
- package/src/worker/bulkgate.ts +138 -0
- package/src/worker/email.ts +30 -8
- package/src/worker/enrollment-order-generator.ts +14 -72
- package/src/worker/error-notifications.ts +2 -2
- package/src/worker/export-token.ts +0 -1
- package/src/worker/message.ts +5 -3
- package/src/worker/{sms.ts → twilio.ts} +15 -26
- package/src/pricing/product-swiss-tax.test.ts +0 -139
|
@@ -3,7 +3,7 @@ import { createLogger } from '@unchainedshop/logger';
|
|
|
3
3
|
import { WebhookData } from './types.js';
|
|
4
4
|
import { getTransaction, getTransactionCompletion } from './api.js';
|
|
5
5
|
|
|
6
|
-
const logger = createLogger('unchained:
|
|
6
|
+
const logger = createLogger('unchained:postfinance-checkout:handler');
|
|
7
7
|
|
|
8
8
|
export const postfinanceCheckoutHandler = async (req, res) => {
|
|
9
9
|
const context = req.unchainedContext as Context;
|
|
@@ -26,19 +26,19 @@ export const postfinanceCheckoutHandler = async (req, res) => {
|
|
|
26
26
|
transactionId: transactionCompletion.linkedTransaction,
|
|
27
27
|
},
|
|
28
28
|
});
|
|
29
|
+
|
|
30
|
+
if (!order) throw new Error(`Order with id ${orderPayment.orderId} not found`);
|
|
31
|
+
|
|
29
32
|
logger.info(
|
|
30
|
-
`Transaction ${transactionCompletion.linkedTransaction} marked order payment ID ${transaction.metaData
|
|
33
|
+
`Transaction ${transactionCompletion.linkedTransaction} marked order payment ID ${transaction.metaData?.orderPaymentId} as paid`,
|
|
31
34
|
);
|
|
32
|
-
res.
|
|
33
|
-
res.end(`Order marked as paid: ${order.orderNumber}`);
|
|
35
|
+
res.status(200).send(`Order marked as paid: ${order.orderNumber}`);
|
|
34
36
|
} catch (e) {
|
|
35
37
|
logger.error(e);
|
|
36
|
-
res.
|
|
37
|
-
res.end(JSON.stringify({ name: e.name, code: e.code, message: e.message }));
|
|
38
|
+
res.status(500).send({ name: e.name, code: e.code, message: e.message });
|
|
38
39
|
}
|
|
39
40
|
} else {
|
|
40
41
|
logger.error(`Received unknown listenerEntityTechnicalName ${data.listenerEntityTechnicalName}`);
|
|
41
|
-
res.
|
|
42
|
-
res.end();
|
|
42
|
+
res.status(404).end();
|
|
43
43
|
}
|
|
44
44
|
};
|
|
@@ -4,7 +4,7 @@ import { WebhookData } from './types.js';
|
|
|
4
4
|
import { getTransaction, getTransactionCompletion } from './api.js';
|
|
5
5
|
import { FastifyRequest, RouteHandlerMethod } from 'fastify';
|
|
6
6
|
|
|
7
|
-
const logger = createLogger('unchained:
|
|
7
|
+
const logger = createLogger('unchained:postfinance-checkout:handler');
|
|
8
8
|
|
|
9
9
|
export const postfinanceCheckoutHandler: RouteHandlerMethod = async (
|
|
10
10
|
req: FastifyRequest & {
|
|
@@ -32,15 +32,18 @@ export const postfinanceCheckoutHandler: RouteHandlerMethod = async (
|
|
|
32
32
|
transactionId: transaction.id,
|
|
33
33
|
},
|
|
34
34
|
});
|
|
35
|
+
|
|
36
|
+
if (!order) throw new Error(`Order with id ${orderPayment.orderId} not found`);
|
|
37
|
+
|
|
35
38
|
logger.info(
|
|
36
|
-
`Transaction ${transaction.id} marked order payment ID ${transaction.metaData
|
|
39
|
+
`Transaction ${transaction.id} marked order payment ID ${transaction.metaData?.orderPaymentId} as paid`,
|
|
37
40
|
);
|
|
38
41
|
reply.status(200);
|
|
39
|
-
return reply.send(
|
|
42
|
+
return reply.send({ success: true, orderNumber: order.orderNumber });
|
|
40
43
|
} catch (e) {
|
|
41
44
|
logger.error(e);
|
|
42
45
|
reply.status(500);
|
|
43
|
-
return reply.send({ name: e.name, code: e.code, message: e.message });
|
|
46
|
+
return reply.send({ success: false, name: e.name, code: e.code, message: e.message });
|
|
44
47
|
}
|
|
45
48
|
} else {
|
|
46
49
|
logger.error(`Received unknown listenerEntityTechnicalName ${data.listenerEntityTechnicalName}`);
|
|
@@ -40,7 +40,7 @@ const {
|
|
|
40
40
|
PFCHECKOUT_FAILED_URL,
|
|
41
41
|
} = process.env;
|
|
42
42
|
|
|
43
|
-
const logger = createLogger('unchained:
|
|
43
|
+
const logger = createLogger('unchained:postfinance-checkout');
|
|
44
44
|
|
|
45
45
|
const newError = ({ code, message }: { code: string; message: string }) => {
|
|
46
46
|
const error = new Error(message);
|
|
@@ -104,6 +104,10 @@ const PostfinanceCheckout: IPaymentAdapter = {
|
|
|
104
104
|
sign: async (transactionContext: any = {}) => {
|
|
105
105
|
const { orderPayment, order } = context;
|
|
106
106
|
|
|
107
|
+
if (!order) throw new Error('No order in context, can only sign with order context');
|
|
108
|
+
if (!orderPayment)
|
|
109
|
+
throw new Error('No order payment in context, can only sign with order payment context');
|
|
110
|
+
|
|
107
111
|
const { integrationMode = IntegrationModes.PaymentPage }: { integrationMode: IntegrationModes } =
|
|
108
112
|
transactionContext;
|
|
109
113
|
const completionMode = adapter.getCompletionMode();
|
|
@@ -146,7 +150,10 @@ const PostfinanceCheckout: IPaymentAdapter = {
|
|
|
146
150
|
}
|
|
147
151
|
|
|
148
152
|
const transactionId = await createTransaction(transaction);
|
|
149
|
-
|
|
153
|
+
|
|
154
|
+
if (!transactionId) throw new Error('Could not create transaction');
|
|
155
|
+
|
|
156
|
+
let location: string | null = null;
|
|
150
157
|
if (integrationMode === IntegrationModes.PaymentPage) {
|
|
151
158
|
location = await getPaymentPageUrl(transactionId);
|
|
152
159
|
} else if (integrationMode === IntegrationModes.Lightbox) {
|
|
@@ -185,7 +192,11 @@ const PostfinanceCheckout: IPaymentAdapter = {
|
|
|
185
192
|
});
|
|
186
193
|
}
|
|
187
194
|
|
|
188
|
-
const
|
|
195
|
+
const { order, orderPayment } = context;
|
|
196
|
+
if (!orderPayment) throw new Error('No order payment in context, cannot charge payment');
|
|
197
|
+
if (!order) throw new Error('No order in context, can only sign with order context');
|
|
198
|
+
|
|
199
|
+
const isPaid = await orderIsPaid(order, transaction);
|
|
189
200
|
if (!isPaid) {
|
|
190
201
|
logger.error(`Transaction #${transactionId}: Invalid state / Amount incorrect`);
|
|
191
202
|
throw newError({
|
|
@@ -194,7 +205,7 @@ const PostfinanceCheckout: IPaymentAdapter = {
|
|
|
194
205
|
});
|
|
195
206
|
}
|
|
196
207
|
|
|
197
|
-
if (transaction.metaData
|
|
208
|
+
if (transaction.metaData?.orderPaymentId !== orderPayment._id) {
|
|
198
209
|
logger.error(`Transaction #${transactionId}: Invalid state / Amount incorrect`);
|
|
199
210
|
throw newError({
|
|
200
211
|
code: `TRANSACTION_ALREADY_USED`,
|
|
@@ -216,10 +227,11 @@ const PostfinanceCheckout: IPaymentAdapter = {
|
|
|
216
227
|
|
|
217
228
|
cancel: async () => {
|
|
218
229
|
const { orderPayment, order } = context;
|
|
219
|
-
|
|
220
|
-
if (!transactionId) {
|
|
230
|
+
if (!order) throw new Error('No order in context, can only cancel with order context');
|
|
231
|
+
if (!orderPayment?.transactionId) {
|
|
221
232
|
return false;
|
|
222
233
|
}
|
|
234
|
+
const { transactionId } = orderPayment;
|
|
223
235
|
const transaction = await getTransaction(transactionId);
|
|
224
236
|
const refund = transaction.state === TransactionState.FULFILL;
|
|
225
237
|
const pricing = OrderPricingSheet({
|
|
@@ -237,10 +249,10 @@ const PostfinanceCheckout: IPaymentAdapter = {
|
|
|
237
249
|
|
|
238
250
|
confirm: async () => {
|
|
239
251
|
const { orderPayment } = context;
|
|
240
|
-
|
|
241
|
-
if (!transactionId) {
|
|
252
|
+
if (!orderPayment?.transactionId) {
|
|
242
253
|
return false;
|
|
243
254
|
}
|
|
255
|
+
const { transactionId } = orderPayment;
|
|
244
256
|
const transaction = await getTransaction(transactionId);
|
|
245
257
|
if (transaction.state === TransactionState.AUTHORIZED) {
|
|
246
258
|
return confirmDeferredTransaction(transactionId);
|
|
@@ -133,8 +133,8 @@ export const WordlineSaferpay: IPaymentAdapter = {
|
|
|
133
133
|
saferpayTransactionId,
|
|
134
134
|
);
|
|
135
135
|
|
|
136
|
-
paymentPageInitInput.Notification
|
|
137
|
-
paymentPageInitInput.Notification
|
|
136
|
+
paymentPageInitInput.Notification!.SuccessNotifyUrl = addTransactionId(
|
|
137
|
+
paymentPageInitInput.Notification!.SuccessNotifyUrl,
|
|
138
138
|
saferpayTransactionId,
|
|
139
139
|
);
|
|
140
140
|
|
|
@@ -166,6 +166,10 @@ export const WordlineSaferpay: IPaymentAdapter = {
|
|
|
166
166
|
mongodb.ObjectId.createFromHexString(transactionId),
|
|
167
167
|
);
|
|
168
168
|
|
|
169
|
+
if (!saferpayTransaction?.token) {
|
|
170
|
+
throw new Error('No initialized transaction Token');
|
|
171
|
+
}
|
|
172
|
+
|
|
169
173
|
const api = createSaferPayClient();
|
|
170
174
|
const paymentPageAssert = await api.paymentPageAssert(orderPayment, {
|
|
171
175
|
Token: saferpayTransaction.token,
|
|
@@ -205,6 +209,10 @@ export const WordlineSaferpay: IPaymentAdapter = {
|
|
|
205
209
|
mongodb.ObjectId.createFromHexString(transactionId),
|
|
206
210
|
);
|
|
207
211
|
|
|
212
|
+
if (!saferpayTransaction?.token) {
|
|
213
|
+
throw new Error('No initialized transaction Token');
|
|
214
|
+
}
|
|
215
|
+
|
|
208
216
|
const api = createSaferPayClient();
|
|
209
217
|
const paymentPageAssert = await api.paymentPageAssert(orderPayment, {
|
|
210
218
|
Token: saferpayTransaction.token,
|
|
@@ -236,6 +244,10 @@ export const WordlineSaferpay: IPaymentAdapter = {
|
|
|
236
244
|
mongodb.ObjectId.createFromHexString(transactionId),
|
|
237
245
|
);
|
|
238
246
|
|
|
247
|
+
if (!saferpayTransaction?.token) {
|
|
248
|
+
throw new Error('No initialized transaction Token');
|
|
249
|
+
}
|
|
250
|
+
|
|
239
251
|
const api = createSaferPayClient();
|
|
240
252
|
const paymentPageAssert = await api.paymentPageAssert(orderPayment, {
|
|
241
253
|
Token: saferpayTransaction.token,
|
|
@@ -3,7 +3,7 @@ import { createLogger } from '@unchainedshop/logger';
|
|
|
3
3
|
import { buildSignature } from './buildSignature.js';
|
|
4
4
|
import { SaferpayTransactionsModule } from './module.js';
|
|
5
5
|
|
|
6
|
-
const logger = createLogger('unchained:
|
|
6
|
+
const logger = createLogger('unchained:saferpay:handler');
|
|
7
7
|
|
|
8
8
|
export const saferpayHandler = async (request, response) => {
|
|
9
9
|
const resolvedContext = request.unchainedContext as Context & {
|
|
@@ -22,8 +22,7 @@ export const saferpayHandler = async (request, response) => {
|
|
|
22
22
|
|
|
23
23
|
if ((request.method !== 'GET' && request.method !== 'HEAD') || !isValidRequest) {
|
|
24
24
|
logger.warn(`unhandled http method ${request.method} or orderPaymentId missing in query`);
|
|
25
|
-
response.
|
|
26
|
-
response.end();
|
|
25
|
+
response.status(404).end();
|
|
27
26
|
return;
|
|
28
27
|
}
|
|
29
28
|
|
|
@@ -47,24 +46,26 @@ export const saferpayHandler = async (request, response) => {
|
|
|
47
46
|
transactionId,
|
|
48
47
|
},
|
|
49
48
|
});
|
|
49
|
+
|
|
50
|
+
if (!order) throw new Error(`Order with id ${orderPayment.orderId} not found`);
|
|
51
|
+
|
|
50
52
|
logger.info(`checkout successful`, {
|
|
51
53
|
orderPaymentId,
|
|
52
54
|
orderId: order._id,
|
|
53
55
|
});
|
|
54
|
-
response.
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
orderId: order._id,
|
|
60
|
-
}),
|
|
61
|
-
);
|
|
56
|
+
response.status(200).send({
|
|
57
|
+
message: 'checkout successful',
|
|
58
|
+
orderPaymentId,
|
|
59
|
+
orderId: order._id,
|
|
60
|
+
});
|
|
62
61
|
} catch (error) {
|
|
63
62
|
logger.error(error, {
|
|
64
63
|
orderPaymentId,
|
|
65
64
|
transactionId,
|
|
66
65
|
});
|
|
67
|
-
response.
|
|
68
|
-
|
|
66
|
+
response.status(500).send({
|
|
67
|
+
message: error.message,
|
|
68
|
+
name: error.name,
|
|
69
|
+
});
|
|
69
70
|
}
|
|
70
71
|
};
|
|
@@ -4,7 +4,7 @@ import { buildSignature } from './buildSignature.js';
|
|
|
4
4
|
import { SaferpayTransactionsModule } from './module.js';
|
|
5
5
|
import { FastifyRequest, RouteHandlerMethod } from 'fastify';
|
|
6
6
|
|
|
7
|
-
const logger = createLogger('unchained:
|
|
7
|
+
const logger = createLogger('unchained:saferpay:handler');
|
|
8
8
|
|
|
9
9
|
export const saferpayHandler: RouteHandlerMethod = async (
|
|
10
10
|
request: FastifyRequest & {
|
|
@@ -52,24 +52,29 @@ export const saferpayHandler: RouteHandlerMethod = async (
|
|
|
52
52
|
transactionId,
|
|
53
53
|
},
|
|
54
54
|
});
|
|
55
|
+
|
|
56
|
+
if (!order) throw new Error(`Order with id ${orderPayment.orderId} not found`);
|
|
57
|
+
|
|
55
58
|
logger.info(`checkout successful`, {
|
|
56
59
|
orderPaymentId,
|
|
57
60
|
orderId: order._id,
|
|
58
61
|
});
|
|
59
62
|
reply.status(200);
|
|
60
|
-
return reply.send(
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
}),
|
|
66
|
-
);
|
|
63
|
+
return reply.send({
|
|
64
|
+
success: true,
|
|
65
|
+
orderPaymentId,
|
|
66
|
+
orderId: order._id,
|
|
67
|
+
});
|
|
67
68
|
} catch (error) {
|
|
68
69
|
logger.error(error, {
|
|
69
70
|
orderPaymentId,
|
|
70
71
|
transactionId,
|
|
71
72
|
});
|
|
72
73
|
reply.status(500);
|
|
73
|
-
return reply.send(
|
|
74
|
+
return reply.send({
|
|
75
|
+
success: false,
|
|
76
|
+
message: error.message,
|
|
77
|
+
name: error.name,
|
|
78
|
+
});
|
|
74
79
|
}
|
|
75
80
|
};
|
|
@@ -2,7 +2,7 @@ import { Context } from '@unchainedshop/api';
|
|
|
2
2
|
import { createLogger } from '@unchainedshop/logger';
|
|
3
3
|
import stripeClient from './stripe.js';
|
|
4
4
|
|
|
5
|
-
const logger = createLogger('unchained:
|
|
5
|
+
const logger = createLogger('unchained:stripe:handler');
|
|
6
6
|
|
|
7
7
|
export const WebhookEventTypes = {
|
|
8
8
|
PAYMENT_INTENT_SUCCEEDED: 'payment_intent.succeeded',
|
|
@@ -18,11 +18,19 @@ export const stripeHandler = async (request, response) => {
|
|
|
18
18
|
try {
|
|
19
19
|
const stripe = stripeClient();
|
|
20
20
|
const sig = request.headers['stripe-signature'];
|
|
21
|
+
if (!sig) {
|
|
22
|
+
throw new Error('stripe-signature header was not provided for webhook');
|
|
23
|
+
}
|
|
24
|
+
if (!process.env.STRIPE_ENDPOINT_SECRET) {
|
|
25
|
+
throw new Error('env STRIPE_ENDPOINT_SECRET is required for webhook handling');
|
|
26
|
+
}
|
|
21
27
|
event = stripe.webhooks.constructEvent(request.body, sig, process.env.STRIPE_ENDPOINT_SECRET);
|
|
22
28
|
} catch (err) {
|
|
23
29
|
logger.error(`Error constructing event: ${err.message}`);
|
|
24
|
-
response.
|
|
25
|
-
|
|
30
|
+
response.status(400).send({
|
|
31
|
+
message: err.message,
|
|
32
|
+
name: err.name,
|
|
33
|
+
});
|
|
26
34
|
return;
|
|
27
35
|
}
|
|
28
36
|
|
|
@@ -30,13 +38,10 @@ export const stripeHandler = async (request, response) => {
|
|
|
30
38
|
logger.info(`unhandled event type`, {
|
|
31
39
|
type: event.type,
|
|
32
40
|
});
|
|
33
|
-
response.
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
message: `Unhandled event type: ${event.type}. Supported types: ${Object.values(WebhookEventTypes).join(', ')}`,
|
|
38
|
-
}),
|
|
39
|
-
);
|
|
41
|
+
response.status(200).send({
|
|
42
|
+
ignored: true,
|
|
43
|
+
message: `Unhandled event type: ${event.type}. Supported types: ${Object.values(WebhookEventTypes).join(', ')}`,
|
|
44
|
+
});
|
|
40
45
|
return;
|
|
41
46
|
}
|
|
42
47
|
|
|
@@ -47,13 +52,10 @@ export const stripeHandler = async (request, response) => {
|
|
|
47
52
|
type: event.type,
|
|
48
53
|
environment: environmentInMetadata,
|
|
49
54
|
});
|
|
50
|
-
response.
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
message: `Unhandled event environment: ${environmentInMetadata}. Supported environment: ${environmentInEnv}`,
|
|
55
|
-
}),
|
|
56
|
-
);
|
|
55
|
+
response.status(200).send({
|
|
56
|
+
ignored: true,
|
|
57
|
+
message: `Unhandled event environment: ${environmentInMetadata}. Supported environment: ${environmentInEnv}`,
|
|
58
|
+
});
|
|
57
59
|
return;
|
|
58
60
|
}
|
|
59
61
|
|
|
@@ -84,18 +86,17 @@ export const stripeHandler = async (request, response) => {
|
|
|
84
86
|
},
|
|
85
87
|
});
|
|
86
88
|
|
|
89
|
+
if (!order) throw new Error(`Order with id ${orderPayment.orderId} not found`);
|
|
90
|
+
|
|
87
91
|
logger.info(`checkout successful`, {
|
|
88
92
|
orderPaymentId,
|
|
89
93
|
orderId: order._id,
|
|
90
94
|
type: event.type,
|
|
91
95
|
});
|
|
92
|
-
response.
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
orderId: order._id,
|
|
97
|
-
}),
|
|
98
|
-
);
|
|
96
|
+
response.status(200).send({
|
|
97
|
+
message: 'checkout successful',
|
|
98
|
+
orderId: order._id,
|
|
99
|
+
});
|
|
99
100
|
} else if (event.type === WebhookEventTypes.SETUP_INTENT_SUCCEEDED) {
|
|
100
101
|
const setupIntent = event.data.object;
|
|
101
102
|
const { paymentProviderId, userId } = setupIntent.metadata || {};
|
|
@@ -118,19 +119,18 @@ export const stripeHandler = async (request, response) => {
|
|
|
118
119
|
paymentCredentialsId: paymentCredentials?._id,
|
|
119
120
|
type: event.type,
|
|
120
121
|
});
|
|
121
|
-
response.
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
paymentCredentialsId: paymentCredentials?._id,
|
|
126
|
-
}),
|
|
127
|
-
);
|
|
122
|
+
response.status(200).send({
|
|
123
|
+
message: 'payment credentials registration successful',
|
|
124
|
+
paymentCredentialsId: paymentCredentials?._id,
|
|
125
|
+
});
|
|
128
126
|
}
|
|
129
127
|
} catch (error) {
|
|
130
128
|
logger.error(error, {
|
|
131
129
|
type: event.type,
|
|
132
130
|
});
|
|
133
|
-
response.
|
|
134
|
-
|
|
131
|
+
response.status(500).send({
|
|
132
|
+
message: error.message,
|
|
133
|
+
name: error.name,
|
|
134
|
+
});
|
|
135
135
|
}
|
|
136
136
|
};
|
|
@@ -3,7 +3,7 @@ import { createLogger } from '@unchainedshop/logger';
|
|
|
3
3
|
import stripeClient from './stripe.js';
|
|
4
4
|
import { FastifyRequest, RouteHandlerMethod } from 'fastify';
|
|
5
5
|
|
|
6
|
-
const logger = createLogger('unchained:
|
|
6
|
+
const logger = createLogger('unchained:stripe:handler');
|
|
7
7
|
|
|
8
8
|
export const WebhookEventTypes = {
|
|
9
9
|
PAYMENT_INTENT_SUCCEEDED: 'payment_intent.succeeded',
|
|
@@ -24,11 +24,21 @@ export const stripeHandler: RouteHandlerMethod = async (
|
|
|
24
24
|
try {
|
|
25
25
|
const stripe = stripeClient();
|
|
26
26
|
const sig = req.headers['stripe-signature'];
|
|
27
|
+
if (!process.env.STRIPE_ENDPOINT_SECRET) {
|
|
28
|
+
throw new Error('env STRIPE_ENDPOINT_SECRET is required for webhook handling');
|
|
29
|
+
}
|
|
30
|
+
if (!sig) {
|
|
31
|
+
throw new Error('stripe-signature header was not provided for webhook');
|
|
32
|
+
}
|
|
27
33
|
event = stripe.webhooks.constructEvent(req.body as string, sig, process.env.STRIPE_ENDPOINT_SECRET);
|
|
28
34
|
} catch (err) {
|
|
29
35
|
logger.error(`Error constructing event: ${err.message}`);
|
|
30
36
|
reply.status(400);
|
|
31
|
-
return reply.send(
|
|
37
|
+
return reply.send({
|
|
38
|
+
success: false,
|
|
39
|
+
message: err.message,
|
|
40
|
+
name: err.name,
|
|
41
|
+
});
|
|
32
42
|
}
|
|
33
43
|
|
|
34
44
|
if (!Object.values(WebhookEventTypes).includes(event.type)) {
|
|
@@ -36,12 +46,12 @@ export const stripeHandler: RouteHandlerMethod = async (
|
|
|
36
46
|
type: event.type,
|
|
37
47
|
});
|
|
38
48
|
reply.status(200);
|
|
39
|
-
return reply.send(
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
}),
|
|
44
|
-
);
|
|
49
|
+
return reply.send({
|
|
50
|
+
success: false,
|
|
51
|
+
ignored: true,
|
|
52
|
+
name: 'UNHANDLED_EVENT_TYPE',
|
|
53
|
+
message: `Unhandled event type: ${event.type}. Supported types: ${Object.values(WebhookEventTypes).join(', ')}`,
|
|
54
|
+
});
|
|
45
55
|
}
|
|
46
56
|
|
|
47
57
|
const environmentInMetadata = event.data?.object?.metadata?.environment || '';
|
|
@@ -52,12 +62,12 @@ export const stripeHandler: RouteHandlerMethod = async (
|
|
|
52
62
|
environment: environmentInMetadata,
|
|
53
63
|
});
|
|
54
64
|
reply.status(200);
|
|
55
|
-
return reply.send(
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
}
|
|
60
|
-
);
|
|
65
|
+
return reply.send({
|
|
66
|
+
success: false,
|
|
67
|
+
ignored: true,
|
|
68
|
+
name: 'UNHANDLED_EVENT_ENVIRONMENT',
|
|
69
|
+
message: `Unhandled event environment: ${environmentInMetadata}. Supported environment: ${environmentInEnv}`,
|
|
70
|
+
});
|
|
61
71
|
}
|
|
62
72
|
|
|
63
73
|
logger.info(`Processing event`, {
|
|
@@ -87,18 +97,18 @@ export const stripeHandler: RouteHandlerMethod = async (
|
|
|
87
97
|
},
|
|
88
98
|
});
|
|
89
99
|
|
|
100
|
+
if (!order) throw new Error(`Order with id ${orderPayment.orderId} not found`);
|
|
101
|
+
|
|
90
102
|
logger.info(`checkout successful`, {
|
|
91
103
|
orderPaymentId,
|
|
92
104
|
orderId: order._id,
|
|
93
105
|
type: event.type,
|
|
94
106
|
});
|
|
95
107
|
reply.status(200);
|
|
96
|
-
return reply.send(
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
}),
|
|
101
|
-
);
|
|
108
|
+
return reply.send({
|
|
109
|
+
success: true,
|
|
110
|
+
orderId: order._id,
|
|
111
|
+
});
|
|
102
112
|
} else if (event.type === WebhookEventTypes.SETUP_INTENT_SUCCEEDED) {
|
|
103
113
|
const setupIntent = event.data.object;
|
|
104
114
|
const { paymentProviderId, userId } = setupIntent.metadata || {};
|
|
@@ -122,18 +132,21 @@ export const stripeHandler: RouteHandlerMethod = async (
|
|
|
122
132
|
type: event.type,
|
|
123
133
|
});
|
|
124
134
|
reply.status(200);
|
|
125
|
-
return reply.send(
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
);
|
|
135
|
+
return reply.send({
|
|
136
|
+
success: true,
|
|
137
|
+
message: 'payment credentials registration successful',
|
|
138
|
+
paymentCredentialsId: paymentCredentials?._id,
|
|
139
|
+
});
|
|
131
140
|
}
|
|
132
141
|
} catch (error) {
|
|
133
142
|
logger.error(error, {
|
|
134
143
|
type: event.type,
|
|
135
144
|
});
|
|
136
145
|
reply.status(500);
|
|
137
|
-
return reply.send(
|
|
146
|
+
return reply.send({
|
|
147
|
+
success: false,
|
|
148
|
+
message: error.message,
|
|
149
|
+
name: error.name,
|
|
150
|
+
});
|
|
138
151
|
}
|
|
139
152
|
};
|
|
@@ -8,7 +8,7 @@ import {
|
|
|
8
8
|
PaymentError,
|
|
9
9
|
} from '@unchainedshop/core';
|
|
10
10
|
|
|
11
|
-
const logger = createLogger('unchained:
|
|
11
|
+
const logger = createLogger('unchained:stripe');
|
|
12
12
|
|
|
13
13
|
const Stripe: IPaymentAdapter = {
|
|
14
14
|
...PaymentAdapter,
|
|
@@ -24,13 +24,14 @@ const Stripe: IPaymentAdapter = {
|
|
|
24
24
|
actions: (config, context) => {
|
|
25
25
|
const { modules } = context;
|
|
26
26
|
|
|
27
|
-
const descriptorPrefix = config.find(({ key }) => key === 'descriptorPrefix')?.value;
|
|
27
|
+
const descriptorPrefix = config.find(({ key }) => key === 'descriptorPrefix')?.value || '';
|
|
28
28
|
|
|
29
|
-
const
|
|
29
|
+
const assertUserData = async (forcedUserId) => {
|
|
30
30
|
const userId = forcedUserId || context?.userId;
|
|
31
31
|
const user = await modules.users.findUserById(userId);
|
|
32
|
+
if (!user) throw new Error('User not found');
|
|
32
33
|
const email = modules.users.primaryEmail(user)?.address;
|
|
33
|
-
const name = user.profile
|
|
34
|
+
const name = user.profile?.displayName || user.username || email;
|
|
34
35
|
return {
|
|
35
36
|
email,
|
|
36
37
|
name,
|
|
@@ -41,8 +42,9 @@ const Stripe: IPaymentAdapter = {
|
|
|
41
42
|
...PaymentAdapter.actions(config, context),
|
|
42
43
|
|
|
43
44
|
configurationError() {
|
|
44
|
-
|
|
45
|
-
|
|
45
|
+
try {
|
|
46
|
+
stripeClient();
|
|
47
|
+
} catch {
|
|
46
48
|
return PaymentError.INCOMPLETE_CONFIGURATION;
|
|
47
49
|
}
|
|
48
50
|
return null;
|
|
@@ -86,13 +88,13 @@ const Stripe: IPaymentAdapter = {
|
|
|
86
88
|
|
|
87
89
|
sign: async (transactionContext = {}) => {
|
|
88
90
|
const { orderPayment, order, paymentProviderId } = context;
|
|
89
|
-
|
|
91
|
+
const { userId, name, email } = await assertUserData(order?.userId);
|
|
90
92
|
if (orderPayment) {
|
|
93
|
+
if (!order) throw new Error('order not found in context');
|
|
91
94
|
const pricing = OrderPricingSheet({
|
|
92
|
-
calculation: order
|
|
93
|
-
currencyCode: order
|
|
95
|
+
calculation: order?.calculation,
|
|
96
|
+
currencyCode: order?.currencyCode,
|
|
94
97
|
});
|
|
95
|
-
const { userId, name, email } = await getUserData(order?.userId);
|
|
96
98
|
const paymentIntent = await createOrderPaymentIntent(
|
|
97
99
|
{ userId, name, email, order, orderPayment, pricing, descriptorPrefix },
|
|
98
100
|
transactionContext,
|
|
@@ -100,7 +102,6 @@ const Stripe: IPaymentAdapter = {
|
|
|
100
102
|
return paymentIntent.client_secret;
|
|
101
103
|
}
|
|
102
104
|
|
|
103
|
-
const { userId, name, email } = await getUserData(order?.userId);
|
|
104
105
|
const paymentIntent = await createRegistrationIntent(
|
|
105
106
|
{ userId, name, email, paymentProviderId, descriptorPrefix },
|
|
106
107
|
transactionContext,
|
|
@@ -114,11 +115,12 @@ const Stripe: IPaymentAdapter = {
|
|
|
114
115
|
throw new Error('You have to provide paymentIntentId or paymentCredentials');
|
|
115
116
|
}
|
|
116
117
|
|
|
117
|
-
const { order } = context;
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
118
|
+
const { order, orderPayment } = context;
|
|
119
|
+
|
|
120
|
+
if (!order) throw new Error('order not found in context');
|
|
121
|
+
if (!orderPayment) throw new Error('orderPayment not found in context');
|
|
122
|
+
|
|
123
|
+
const { userId, name, email } = await assertUserData(order?.userId);
|
|
122
124
|
const pricing = OrderPricingSheet({
|
|
123
125
|
calculation: order.calculation,
|
|
124
126
|
currencyCode: order.currencyCode,
|