@unchainedshop/plugins 2.5.5 → 2.5.7
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/cryptopay/plugin.js +2 -2
- package/lib/payment/cryptopay/plugin.js.map +1 -1
- package/lib/payment/datatrans-v2/middleware.js +8 -5
- package/lib/payment/datatrans-v2/middleware.js.map +1 -1
- package/lib/payment/stripe/index.d.ts +1 -0
- package/lib/payment/{stripe.js → stripe/index.js} +4 -137
- package/lib/payment/stripe/index.js.map +1 -0
- package/lib/payment/stripe/middleware.js +109 -0
- package/lib/payment/stripe/middleware.js.map +1 -0
- package/lib/payment/stripe/stripe.d.ts +14 -0
- package/lib/payment/stripe/stripe.js +46 -0
- package/lib/payment/stripe/stripe.js.map +1 -0
- package/lib/plugins-index.js +1 -1
- package/lib/plugins-index.js.map +1 -1
- package/lib/worker/email.js +20 -26
- package/lib/worker/email.js.map +1 -1
- package/package.json +23 -23
- package/src/payment/cryptopay/plugin.ts +2 -2
- package/src/payment/datatrans-v2/middleware.ts +9 -5
- package/src/payment/stripe/index.ts +145 -0
- package/src/payment/stripe/middleware.ts +132 -0
- package/src/payment/stripe/readme.md +8 -0
- package/src/payment/stripe/stripe.ts +53 -0
- package/src/plugins-index.ts +1 -1
- package/src/worker/email.ts +21 -25
- package/lib/payment/stripe.js.map +0 -1
- package/src/payment/stripe.ts +0 -307
- /package/lib/payment/{stripe.d.ts → stripe/middleware.d.ts} +0 -0
|
@@ -40,7 +40,7 @@ const Cryptopay = {
|
|
|
40
40
|
const targetCurrencyObj = await modules.currencies.findCurrency({
|
|
41
41
|
isoCode: addressData.currency,
|
|
42
42
|
});
|
|
43
|
-
if (!targetCurrencyObj
|
|
43
|
+
if (!targetCurrencyObj?.isActive)
|
|
44
44
|
return null;
|
|
45
45
|
const rateData = await modules.products.prices.rates.getRate(originCurrencyObj, targetCurrencyObj);
|
|
46
46
|
return {
|
|
@@ -120,7 +120,7 @@ const Cryptopay = {
|
|
|
120
120
|
// we neuter for security reasons, it's still quite complicated for most ethereum clients to show an appropriate
|
|
121
121
|
// xpub, that's why
|
|
122
122
|
const hdWallet = ethers.HDNodeWallet.fromExtendedKey(CRYPTOPAY_ETH_XPUB);
|
|
123
|
-
const hardenedMaster = hdWallet
|
|
123
|
+
const hardenedMaster = 'neuter' in hdWallet ? hdWallet.neuter() : hdWallet;
|
|
124
124
|
const ethDerivationNumber = await modules.cryptopay.getNextDerivationNumber(CryptopayCurrencies.ETH);
|
|
125
125
|
const derivationPath = getDerivationPath(CryptopayCurrencies.ETH, ethDerivationNumber);
|
|
126
126
|
const cleanedForHD = derivationPath.split('/').slice(-2).join('/');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../../src/payment/cryptopay/plugin.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC5F,OAAO,EAAkC,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AACrC,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAC;AACtC,OAAO,KAAK,OAAO,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAG/D,MAAM,MAAM,GAAG,YAAY,CAAC,kCAAkC,CAAC,CAAC;AAEhE,MAAM,EACJ,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,EAClB,qBAAqB,EACrB,0BAA0B,GAAG,GAAG,GACjC,GAAG,OAAO,CAAC,GAAG,CAAC;AAEhB,IAAK,mBAGJ;AAHD,WAAK,mBAAmB;IACtB,kCAAW,CAAA;IACX,kCAAW,CAAA;AACb,CAAC,EAHI,mBAAmB,KAAnB,mBAAmB,QAGvB;AASD,MAAM,iBAAiB,GAAG,CAAC,QAA6B,EAAE,KAAa,EAAU,EAAE;IACjF,MAAM,OAAO,GAAG,GAAG,CAAC,QAAQ,CAAC,0BAA0B,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC;IAC7E,IAAI,QAAQ,KAAK,mBAAmB,CAAC,GAAG,EAAE;QACxC,MAAM,cAAc,GAAG,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACrD,cAAc,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC;QACpD,OAAO,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KACjC;IACD,IAAI,QAAQ,KAAK,mBAAmB,CAAC,GAAG,EAAE;QACxC,OAAO,iBAAiB,OAAO,EAAE,CAAC;KACnC;IACD,OAAO,KAAK,OAAO,EAAE,CAAC;AACxB,CAAC,CAAC;AAEF,MAAM,SAAS,GAAoB;IACjC,GAAG,cAAc;IAEjB,GAAG,EAAE,kCAAkC;IACvC,KAAK,EAAE,WAAW;IAClB,OAAO,EAAE,OAAO;IAEhB,aAAa,CAAC,IAAI;QAChB,OAAO,IAAI,KAAK,SAAS,CAAC;IAC5B,CAAC;IAED,OAAO,EAAE,CAAC,MAAM,EAAE,EAAE;QAClB,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,OAAoE,CAAC;QAEpG,MAAM,kBAAkB,GAAG,KAAK,EAAE,YAAoB,EAAE,iBAAwB,EAAE,EAAE;YAClF,MAAM,iBAAiB,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC,CAAC;YAC3F,MAAM,gBAAgB,GAAG,MAAM,OAAO,CAAC,GAAG,CACxC,iBAAiB,CAAC,GAAG,CAAC,KAAK,EAAE,WAAW,EAAE,EAAE;gBAC1C,MAAM,iBAAiB,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC;oBAC9D,OAAO,EAAE,WAAW,CAAC,QAAQ;iBAC9B,CAAC,CAAC;gBACH,IAAI,CAAC,iBAAiB,
|
|
1
|
+
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../../src/payment/cryptopay/plugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createLogger } from '@unchainedshop/logger';
|
|
2
2
|
import generateSignature, { Security } from './generateSignature.js';
|
|
3
3
|
const { DATATRANS_SIGN_KEY, DATATRANS_SIGN2_KEY, DATATRANS_SECURITY = Security.DYNAMIC_SIGN, } = process.env;
|
|
4
|
-
const logger = createLogger('unchained:core-payment:datatrans');
|
|
4
|
+
const logger = createLogger('unchained:core-payment:datatrans:webhook');
|
|
5
5
|
export const datatransHandler = async (req, res) => {
|
|
6
6
|
const resolvedContext = req.unchainedContext;
|
|
7
7
|
const { modules } = resolvedContext;
|
|
@@ -15,12 +15,15 @@ export const datatransHandler = async (req, res) => {
|
|
|
15
15
|
signKey: DATATRANS_SIGN2_KEY || DATATRANS_SIGN_KEY,
|
|
16
16
|
})(timestamp, req.body);
|
|
17
17
|
if (hash !== comparableSignature) {
|
|
18
|
-
logger.error(`
|
|
18
|
+
logger.error(`hash mismatch: ${signature} / ${comparableSignature}`, req.body);
|
|
19
19
|
res.writeHead(403);
|
|
20
20
|
res.end('Hash mismatch');
|
|
21
21
|
return;
|
|
22
22
|
}
|
|
23
23
|
const transaction = JSON.parse(req.body);
|
|
24
|
+
logger.verbose(`received request`, {
|
|
25
|
+
type: transaction.type,
|
|
26
|
+
});
|
|
24
27
|
if (transaction.status === 'authorized') {
|
|
25
28
|
const userId = transaction.refno2;
|
|
26
29
|
const referenceId = Buffer.from(transaction.refno, 'base64').toString('hex');
|
|
@@ -28,7 +31,7 @@ export const datatransHandler = async (req, res) => {
|
|
|
28
31
|
if (transaction.type === 'card_check') {
|
|
29
32
|
const paymentProviderId = referenceId;
|
|
30
33
|
const paymentCredentials = await modules.payment.registerCredentials(paymentProviderId, { userId, transactionContext: { transactionId: transaction.transactionId } }, { ...resolvedContext });
|
|
31
|
-
logger.info(`
|
|
34
|
+
logger.info(`registered payment credentials for ${userId}`, {
|
|
32
35
|
userId,
|
|
33
36
|
});
|
|
34
37
|
res.writeHead(200);
|
|
@@ -44,7 +47,7 @@ export const datatransHandler = async (req, res) => {
|
|
|
44
47
|
throw new Error(`Order Payment with id ${orderPaymentId} not found`);
|
|
45
48
|
const order = await modules.orders.checkout(orderPayment.orderId, { paymentContext: { userId, transactionId: transaction.transactionId } }, resolvedContext);
|
|
46
49
|
res.writeHead(200);
|
|
47
|
-
logger.info(`
|
|
50
|
+
logger.info(`confirmed checkout for order ${order.orderNumber}`, {
|
|
48
51
|
orderId: order._id,
|
|
49
52
|
});
|
|
50
53
|
res.end(JSON.stringify(order));
|
|
@@ -52,7 +55,7 @@ export const datatransHandler = async (req, res) => {
|
|
|
52
55
|
}
|
|
53
56
|
}
|
|
54
57
|
catch (e) {
|
|
55
|
-
logger.error(`
|
|
58
|
+
logger.error(`rejected to checkout with message`, e);
|
|
56
59
|
res.writeHead(500);
|
|
57
60
|
res.end(JSON.stringify({ name: e.name, code: e.code, message: e.message }));
|
|
58
61
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../../src/payment/datatrans-v2/middleware.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,OAAO,iBAAiB,EAAE,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAIrE,MAAM,EACJ,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,GAAG,QAAQ,CAAC,YAAY,GAC3C,GAAG,OAAO,CAAC,GAAG,CAAC;AAEhB,MAAM,MAAM,GAAG,YAAY,CAAC,
|
|
1
|
+
{"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../../src/payment/datatrans-v2/middleware.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './middleware.js';
|
|
@@ -1,137 +1,8 @@
|
|
|
1
1
|
import { PaymentAdapter, PaymentDirector, PaymentError } from '@unchainedshop/core-payment';
|
|
2
2
|
import { createLogger } from '@unchainedshop/logger';
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
brew install stripe/stripe-cli/stripe
|
|
7
|
-
stripe login --api-key sk_....
|
|
8
|
-
stripe listen --forward-to http://localhost:4010/payment/stripe
|
|
9
|
-
stripe trigger payment_intent.succeeded
|
|
10
|
-
*/
|
|
11
|
-
import createStripeClient from 'stripe';
|
|
3
|
+
import stripe, { createOrderPaymentIntent, createRegistrationIntent } from './stripe.js';
|
|
4
|
+
export * from './middleware.js';
|
|
12
5
|
const logger = createLogger('unchained:core-payment:stripe');
|
|
13
|
-
const { STRIPE_SECRET, STRIPE_ENDPOINT_SECRET, EMAIL_WEBSITE_NAME } = process.env;
|
|
14
|
-
// eslint-disable-next-line
|
|
15
|
-
// @ts-ignore
|
|
16
|
-
const stripe = createStripeClient(STRIPE_SECRET);
|
|
17
|
-
export const stripeHandler = async (request, response) => {
|
|
18
|
-
const sig = request.headers['stripe-signature'];
|
|
19
|
-
const resolvedContext = request.unchainedContext;
|
|
20
|
-
const { modules } = resolvedContext;
|
|
21
|
-
let event;
|
|
22
|
-
try {
|
|
23
|
-
event = stripe.webhooks.constructEvent(request.body, sig, STRIPE_ENDPOINT_SECRET);
|
|
24
|
-
logger.verbose(`Webhook received`, {
|
|
25
|
-
type: event.type,
|
|
26
|
-
});
|
|
27
|
-
}
|
|
28
|
-
catch (err) {
|
|
29
|
-
logger.error(`Webhook failed: ${err.message}`);
|
|
30
|
-
response.writeHead(400);
|
|
31
|
-
response.end(err.message);
|
|
32
|
-
return;
|
|
33
|
-
}
|
|
34
|
-
try {
|
|
35
|
-
if (event.type === 'payment_intent.succeeded') {
|
|
36
|
-
const paymentIntent = event.data.object;
|
|
37
|
-
const orderPaymentId = paymentIntent.metadata?.orderPaymentId;
|
|
38
|
-
logger.verbose(`Webhook tries to checkout with orderPaymentId: ${orderPaymentId}`, {
|
|
39
|
-
type: event.type,
|
|
40
|
-
});
|
|
41
|
-
await modules.orders.payments.logEvent(orderPaymentId, event);
|
|
42
|
-
const orderPayment = await modules.orders.payments.findOrderPayment({
|
|
43
|
-
orderPaymentId,
|
|
44
|
-
});
|
|
45
|
-
if (!orderPayment) {
|
|
46
|
-
throw new Error(`Order payment object not found with orderPaymentId: ${orderPaymentId}`);
|
|
47
|
-
}
|
|
48
|
-
const order = await modules.orders.checkout(orderPayment.orderId, {
|
|
49
|
-
transactionContext: {
|
|
50
|
-
paymentIntentId: paymentIntent.id,
|
|
51
|
-
},
|
|
52
|
-
paymentContext: {
|
|
53
|
-
paymentIntentId: paymentIntent.id,
|
|
54
|
-
},
|
|
55
|
-
}, resolvedContext);
|
|
56
|
-
logger.info(`Webhook confirmed checkout for order: ${order._id}`, {
|
|
57
|
-
orderId: order._id,
|
|
58
|
-
type: event.type,
|
|
59
|
-
});
|
|
60
|
-
}
|
|
61
|
-
else if (event.type === 'setup_intent.succeeded') {
|
|
62
|
-
const setupIntent = event.data.object;
|
|
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
|
-
});
|
|
68
|
-
await modules.payment.registerCredentials(paymentProviderId, {
|
|
69
|
-
transactionContext: {
|
|
70
|
-
setupIntentId: setupIntent.id,
|
|
71
|
-
},
|
|
72
|
-
userId,
|
|
73
|
-
}, resolvedContext);
|
|
74
|
-
logger.info(`Webhook registered payment credentials with paymentProviderId: ${paymentProviderId}`, {
|
|
75
|
-
userId,
|
|
76
|
-
type: event.type,
|
|
77
|
-
});
|
|
78
|
-
}
|
|
79
|
-
else {
|
|
80
|
-
logger.verbose(`Unhandled webhook type`, {
|
|
81
|
-
type: event.type,
|
|
82
|
-
});
|
|
83
|
-
response.writeHead(404);
|
|
84
|
-
response.end();
|
|
85
|
-
return;
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
catch (err) {
|
|
89
|
-
logger.error(`Webhook failed: ${err.message}`, {
|
|
90
|
-
type: event.type,
|
|
91
|
-
});
|
|
92
|
-
response.writeHead(400);
|
|
93
|
-
response.end(err.message || 'Error');
|
|
94
|
-
return;
|
|
95
|
-
}
|
|
96
|
-
// Return a 200 response to acknowledge receipt of the event
|
|
97
|
-
response.end(JSON.stringify({ received: true }));
|
|
98
|
-
};
|
|
99
|
-
const createRegistrationIntent = async ({ userId, name, email, paymentProviderId }, options = {}) => {
|
|
100
|
-
const customer = await stripe.customers.create({
|
|
101
|
-
metadata: {
|
|
102
|
-
userId,
|
|
103
|
-
},
|
|
104
|
-
name,
|
|
105
|
-
email,
|
|
106
|
-
});
|
|
107
|
-
const setupIntent = await stripe.setupIntents.create({
|
|
108
|
-
customer: customer.id,
|
|
109
|
-
metadata: {
|
|
110
|
-
userId,
|
|
111
|
-
paymentProviderId,
|
|
112
|
-
},
|
|
113
|
-
...options,
|
|
114
|
-
});
|
|
115
|
-
return setupIntent;
|
|
116
|
-
};
|
|
117
|
-
const createOrderPaymentIntent = async ({ order, orderPayment, pricing }, options = {}) => {
|
|
118
|
-
const reference = EMAIL_WEBSITE_NAME || order._id;
|
|
119
|
-
const { currency, amount } = pricing.total({ useNetPrice: false });
|
|
120
|
-
const paymentIntent = await stripe.paymentIntents.create({
|
|
121
|
-
amount: Math.round(amount),
|
|
122
|
-
currency: currency.toLowerCase(),
|
|
123
|
-
description: `${reference} #${order.orderNumber}`,
|
|
124
|
-
statement_descriptor: order.orderNumber,
|
|
125
|
-
statement_descriptor_suffix: reference,
|
|
126
|
-
receipt_email: order.contact?.emailAddress,
|
|
127
|
-
setup_future_usage: 'off_session',
|
|
128
|
-
metadata: {
|
|
129
|
-
orderPaymentId: orderPayment._id,
|
|
130
|
-
},
|
|
131
|
-
...options,
|
|
132
|
-
});
|
|
133
|
-
return paymentIntent;
|
|
134
|
-
};
|
|
135
6
|
const Stripe = {
|
|
136
7
|
...PaymentAdapter,
|
|
137
8
|
key: 'shop.unchained.payment.stripe',
|
|
@@ -144,10 +15,8 @@ const Stripe = {
|
|
|
144
15
|
const { modules } = params.context;
|
|
145
16
|
const adapterActions = {
|
|
146
17
|
...PaymentAdapter.actions(params),
|
|
147
|
-
// eslint-disable-next-line
|
|
148
18
|
configurationError() {
|
|
149
|
-
|
|
150
|
-
if (!STRIPE_SECRET || !STRIPE_ENDPOINT_SECRET) {
|
|
19
|
+
if (!stripe) {
|
|
151
20
|
return PaymentError.INCOMPLETE_CONFIGURATION;
|
|
152
21
|
}
|
|
153
22
|
return null;
|
|
@@ -162,7 +31,6 @@ const Stripe = {
|
|
|
162
31
|
},
|
|
163
32
|
validate: async ({ token }) => {
|
|
164
33
|
const paymentMethod = await stripe.paymentMethods.retrieve(token);
|
|
165
|
-
// TODO: Add further checks like expiration of cards
|
|
166
34
|
return !!paymentMethod;
|
|
167
35
|
},
|
|
168
36
|
register: async ({ setupIntentId }) => {
|
|
@@ -183,7 +51,6 @@ const Stripe = {
|
|
|
183
51
|
return null;
|
|
184
52
|
},
|
|
185
53
|
sign: async (transactionContext = {}) => {
|
|
186
|
-
// eslint-disable-line
|
|
187
54
|
const { orderPayment, order, paymentProviderId } = params.paymentContext;
|
|
188
55
|
if (orderPayment) {
|
|
189
56
|
const pricing = await modules.orders.pricingSheet(order);
|
|
@@ -236,4 +103,4 @@ const Stripe = {
|
|
|
236
103
|
},
|
|
237
104
|
};
|
|
238
105
|
PaymentDirector.registerAdapter(Stripe);
|
|
239
|
-
//# sourceMappingURL=
|
|
106
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/payment/stripe/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { createLogger } from '@unchainedshop/logger';
|
|
2
|
+
import stripe from './stripe.js';
|
|
3
|
+
const logger = createLogger('unchained:core-payment:stripe:webhook');
|
|
4
|
+
const { STRIPE_ENDPOINT_SECRET, STRIPE_WEBHOOK_ENVIRONMENT } = process.env;
|
|
5
|
+
function checkEnvironment(metadata) {
|
|
6
|
+
const environmentInMetadata = metadata?.environment;
|
|
7
|
+
const environmentInEnv = STRIPE_WEBHOOK_ENVIRONMENT;
|
|
8
|
+
if (!environmentInMetadata && !environmentInEnv) {
|
|
9
|
+
return true;
|
|
10
|
+
}
|
|
11
|
+
return environmentInEnv === environmentInMetadata;
|
|
12
|
+
}
|
|
13
|
+
export const stripeHandler = async (request, response) => {
|
|
14
|
+
const resolvedContext = request.unchainedContext;
|
|
15
|
+
const { modules } = resolvedContext;
|
|
16
|
+
let event;
|
|
17
|
+
try {
|
|
18
|
+
const sig = request.headers['stripe-signature'];
|
|
19
|
+
event = stripe.webhooks.constructEvent(request.body, sig, STRIPE_ENDPOINT_SECRET);
|
|
20
|
+
logger.verbose(`received event`, {
|
|
21
|
+
type: event.type,
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
catch (err) {
|
|
25
|
+
logger.error(`failed event validation with: ${err.message}`);
|
|
26
|
+
response.writeHead(400);
|
|
27
|
+
response.end(err.message);
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
try {
|
|
31
|
+
if (event.type === 'payment_intent.succeeded') {
|
|
32
|
+
const paymentIntent = event.data.object;
|
|
33
|
+
const { orderPaymentId } = paymentIntent.metadata || {};
|
|
34
|
+
if (!checkEnvironment(paymentIntent.metadata)) {
|
|
35
|
+
logger.verbose(`event ignored because of environment difference`, {
|
|
36
|
+
type: event.type,
|
|
37
|
+
});
|
|
38
|
+
response.end(JSON.stringify({ received: true, ignored: true }));
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
logger.verbose(`checkout with orderPaymentId: ${orderPaymentId}`, {
|
|
42
|
+
type: event.type,
|
|
43
|
+
});
|
|
44
|
+
await modules.orders.payments.logEvent(orderPaymentId, event);
|
|
45
|
+
const orderPayment = await modules.orders.payments.findOrderPayment({
|
|
46
|
+
orderPaymentId,
|
|
47
|
+
});
|
|
48
|
+
if (!orderPayment) {
|
|
49
|
+
throw new Error(`order payment not found with orderPaymentId: ${orderPaymentId}`);
|
|
50
|
+
}
|
|
51
|
+
const order = await modules.orders.checkout(orderPayment.orderId, {
|
|
52
|
+
transactionContext: {
|
|
53
|
+
paymentIntentId: paymentIntent.id,
|
|
54
|
+
},
|
|
55
|
+
paymentContext: {
|
|
56
|
+
paymentIntentId: paymentIntent.id,
|
|
57
|
+
},
|
|
58
|
+
}, resolvedContext);
|
|
59
|
+
logger.info(`confirmed checkout for order: ${order._id}`, {
|
|
60
|
+
orderId: order._id,
|
|
61
|
+
type: event.type,
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
else if (event.type === 'setup_intent.succeeded') {
|
|
65
|
+
const setupIntent = event.data.object;
|
|
66
|
+
const { paymentProviderId, userId } = setupIntent.metadata || {};
|
|
67
|
+
if (!checkEnvironment(setupIntent.metadata)) {
|
|
68
|
+
response.end(JSON.stringify({ received: true, ignored: true }));
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
logger.verbose(`registered payment credential with paymentProviderId: ${paymentProviderId}`, {
|
|
72
|
+
type: event.type,
|
|
73
|
+
userId,
|
|
74
|
+
});
|
|
75
|
+
await modules.payment.registerCredentials(paymentProviderId, {
|
|
76
|
+
transactionContext: {
|
|
77
|
+
setupIntentId: setupIntent.id,
|
|
78
|
+
},
|
|
79
|
+
userId,
|
|
80
|
+
}, resolvedContext);
|
|
81
|
+
logger.info(`registered payment credentials with paymentProviderId: ${paymentProviderId}`, {
|
|
82
|
+
userId,
|
|
83
|
+
type: event.type,
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
logger.verbose(`unhandled type`, {
|
|
88
|
+
type: event.type,
|
|
89
|
+
});
|
|
90
|
+
response.writeHead(404);
|
|
91
|
+
response.end();
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
catch (err) {
|
|
96
|
+
logger.error(`failed with: ${err.message}`, {
|
|
97
|
+
type: event.type,
|
|
98
|
+
});
|
|
99
|
+
response.writeHead(400);
|
|
100
|
+
response.end(err.message || 'Error');
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
// Return a 200 response to acknowledge receipt of the event
|
|
104
|
+
logger.verbose(`event processed`, {
|
|
105
|
+
type: event.type,
|
|
106
|
+
});
|
|
107
|
+
response.end(JSON.stringify({ received: true }));
|
|
108
|
+
};
|
|
109
|
+
//# sourceMappingURL=middleware.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../../src/payment/stripe/middleware.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import Stripe from 'stripe';
|
|
2
|
+
declare const stripe: Stripe;
|
|
3
|
+
export default stripe;
|
|
4
|
+
export declare const createRegistrationIntent: ({ userId, name, email, paymentProviderId }: {
|
|
5
|
+
userId: any;
|
|
6
|
+
name: any;
|
|
7
|
+
email: any;
|
|
8
|
+
paymentProviderId: any;
|
|
9
|
+
}, options?: {}) => Promise<Stripe.Response<Stripe.SetupIntent>>;
|
|
10
|
+
export declare const createOrderPaymentIntent: ({ order, orderPayment, pricing }: {
|
|
11
|
+
order: any;
|
|
12
|
+
orderPayment: any;
|
|
13
|
+
pricing: any;
|
|
14
|
+
}, options?: {}) => Promise<Stripe.Response<Stripe.PaymentIntent>>;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import Stripe from 'stripe';
|
|
2
|
+
const { STRIPE_SECRET, STRIPE_WEBHOOK_ENVIRONMENT, EMAIL_WEBSITE_NAME } = process.env;
|
|
3
|
+
const stripe = new Stripe(STRIPE_SECRET, {
|
|
4
|
+
apiVersion: '2023-08-16',
|
|
5
|
+
});
|
|
6
|
+
export default stripe;
|
|
7
|
+
export const createRegistrationIntent = async ({ userId, name, email, paymentProviderId }, options = {}) => {
|
|
8
|
+
const customer = await stripe.customers.create({
|
|
9
|
+
metadata: {
|
|
10
|
+
userId,
|
|
11
|
+
environment: STRIPE_WEBHOOK_ENVIRONMENT ?? null,
|
|
12
|
+
},
|
|
13
|
+
name,
|
|
14
|
+
email,
|
|
15
|
+
});
|
|
16
|
+
const setupIntent = await stripe.setupIntents.create({
|
|
17
|
+
customer: customer.id,
|
|
18
|
+
metadata: {
|
|
19
|
+
userId,
|
|
20
|
+
paymentProviderId,
|
|
21
|
+
environment: STRIPE_WEBHOOK_ENVIRONMENT ?? null,
|
|
22
|
+
},
|
|
23
|
+
...options,
|
|
24
|
+
});
|
|
25
|
+
return setupIntent;
|
|
26
|
+
};
|
|
27
|
+
export const createOrderPaymentIntent = async ({ order, orderPayment, pricing }, options = {}) => {
|
|
28
|
+
const reference = EMAIL_WEBSITE_NAME || order._id;
|
|
29
|
+
const { currency, amount } = pricing.total({ useNetPrice: false });
|
|
30
|
+
const paymentIntent = await stripe.paymentIntents.create({
|
|
31
|
+
amount: Math.round(amount),
|
|
32
|
+
currency: currency.toLowerCase(),
|
|
33
|
+
description: `${reference} #${order.orderNumber}`,
|
|
34
|
+
statement_descriptor: order.orderNumber,
|
|
35
|
+
statement_descriptor_suffix: reference,
|
|
36
|
+
receipt_email: order.contact?.emailAddress,
|
|
37
|
+
setup_future_usage: 'off_session',
|
|
38
|
+
metadata: {
|
|
39
|
+
orderPaymentId: orderPayment._id,
|
|
40
|
+
environment: STRIPE_WEBHOOK_ENVIRONMENT ?? null,
|
|
41
|
+
},
|
|
42
|
+
...options,
|
|
43
|
+
});
|
|
44
|
+
return paymentIntent;
|
|
45
|
+
};
|
|
46
|
+
//# sourceMappingURL=stripe.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stripe.js","sourceRoot":"","sources":["../../../src/payment/stripe/stripe.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B,MAAM,EAAE,aAAa,EAAE,0BAA0B,EAAE,kBAAkB,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC;AAEtF,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,aAAa,EAAE;IACvC,UAAU,EAAE,YAAY;CACzB,CAAC,CAAC;AAEH,eAAe,MAAM,CAAC;AAEtB,MAAM,CAAC,MAAM,wBAAwB,GAAG,KAAK,EAC3C,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,iBAAiB,EAAE,EAC1C,OAAO,GAAG,EAAE,EACZ,EAAE;IACF,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC;QAC7C,QAAQ,EAAE;YACR,MAAM;YACN,WAAW,EAAE,0BAA0B,IAAI,IAAI;SAChD;QACD,IAAI;QACJ,KAAK;KACN,CAAC,CAAC;IACH,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC;QACnD,QAAQ,EAAE,QAAQ,CAAC,EAAE;QACrB,QAAQ,EAAE;YACR,MAAM;YACN,iBAAiB;YACjB,WAAW,EAAE,0BAA0B,IAAI,IAAI;SAChD;QACD,GAAG,OAAO;KACX,CAAC,CAAC;IACH,OAAO,WAAW,CAAC;AACrB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,wBAAwB,GAAG,KAAK,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,EAAE,OAAO,GAAG,EAAE,EAAE,EAAE;IAC/F,MAAM,SAAS,GAAG,kBAAkB,IAAI,KAAK,CAAC,GAAG,CAAC;IAClD,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC;IACnE,MAAM,aAAa,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC;QACvD,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;QAC1B,QAAQ,EAAE,QAAQ,CAAC,WAAW,EAAE;QAChC,WAAW,EAAE,GAAG,SAAS,KAAK,KAAK,CAAC,WAAW,EAAE;QACjD,oBAAoB,EAAE,KAAK,CAAC,WAAW;QACvC,2BAA2B,EAAE,SAAS;QACtC,aAAa,EAAE,KAAK,CAAC,OAAO,EAAE,YAAY;QAC1C,kBAAkB,EAAE,aAAa;QACjC,QAAQ,EAAE;YACR,cAAc,EAAE,YAAY,CAAC,GAAG;YAChC,WAAW,EAAE,0BAA0B,IAAI,IAAI;SAChD;QACD,GAAG,OAAO;KACX,CAAC,CAAC;IACH,OAAO,aAAa,CAAC;AACvB,CAAC,CAAC"}
|
package/lib/plugins-index.js
CHANGED
|
@@ -13,7 +13,7 @@ import './payment/worldline-saferpay/index.js';
|
|
|
13
13
|
import { datatransHandler } from './payment/datatrans-v2/index.js';
|
|
14
14
|
import { configureCryptopayModule, cryptopayHandler } from './payment/cryptopay/index.js';
|
|
15
15
|
import { appleIAPHandler, configureAppleTransactionsModule } from './payment/apple-iap/index.js';
|
|
16
|
-
import { stripeHandler } from './payment/stripe.js';
|
|
16
|
+
import { stripeHandler } from './payment/stripe/index.js';
|
|
17
17
|
import { postfinanceCheckoutHandler } from './payment/postfinance-checkout/index.js';
|
|
18
18
|
// Warehousing
|
|
19
19
|
import './warehousing/store.js';
|
package/lib/plugins-index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugins-index.js","sourceRoot":"","sources":["../src/plugins-index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,+BAA+B,EAAE,MAAM,qCAAqC,CAAC;AAEtF,OAAO,OAAO,MAAM,SAAS,CAAC;AAE9B,WAAW;AACX,OAAO,oBAAoB,CAAC;AAC5B,OAAO,wBAAwB,CAAC;AAChC,OAAO,4BAA4B,CAAC;AACpC,OAAO,sBAAsB,CAAC;AAE9B,UAAU;AACV,OAAO,sBAAsB,CAAC;AAC9B,OAAO,8BAA8B,CAAC;AACtC,OAAO,8BAA8B,CAAC;AACtC,OAAO,uCAAuC,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAC1F,OAAO,EAAE,eAAe,EAAE,gCAAgC,EAAE,MAAM,8BAA8B,CAAC;AACjG,OAAO,EAAE,aAAa,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"plugins-index.js","sourceRoot":"","sources":["../src/plugins-index.ts"],"names":[],"mappings":"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"}
|
package/lib/worker/email.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { mkdtemp, writeFile } from 'fs/promises';
|
|
2
2
|
import { join, isAbsolute } from 'path';
|
|
3
|
-
import
|
|
3
|
+
import { tmpdir } from 'os';
|
|
4
4
|
import { WorkerDirector, WorkerAdapter } from '@unchainedshop/core-worker';
|
|
5
5
|
import { createLogger } from '@unchainedshop/logger';
|
|
6
6
|
import open from 'open';
|
|
@@ -21,21 +21,17 @@ const buildLink = ({ filename, content, href, contentType, encoding, path }) =>
|
|
|
21
21
|
}
|
|
22
22
|
return '';
|
|
23
23
|
};
|
|
24
|
-
|
|
25
|
-
fs.mkdtemp(join(os.tmpdir(), 'email-'), (err1, folder) => {
|
|
26
|
-
if (err1)
|
|
27
|
-
return done(err1);
|
|
28
|
-
const temporaryFolderPath = `${folder}/${filename}`;
|
|
29
|
-
return fs.writeFile(temporaryFolderPath, data, (err2) => {
|
|
30
|
-
if (err2)
|
|
31
|
-
return done(err2);
|
|
32
|
-
return done(null, temporaryFolderPath);
|
|
33
|
-
});
|
|
34
|
-
});
|
|
35
|
-
}
|
|
36
|
-
const openInBrowser = (options) => {
|
|
24
|
+
const openInBrowser = async (options) => {
|
|
37
25
|
const filename = `${Date.now()}.html`;
|
|
26
|
+
const messageBody = options.html || options.text.replace(/(\r\n|\n|\r)/gm, '<br/>');
|
|
38
27
|
const content = `
|
|
28
|
+
<!DOCTYPE html>
|
|
29
|
+
<html lang="en" xmlns="https://www.w3.org/1999/xhtml" xmlns:o="urn:schemas-microsoft-com:office:office">
|
|
30
|
+
<head>
|
|
31
|
+
<meta charset="UTF-8"/>
|
|
32
|
+
<meta name="viewport" content="width=device-width,initial-scale=1">
|
|
33
|
+
</head>
|
|
34
|
+
<body>
|
|
39
35
|
<b>From: </b>${options.from}<br/>
|
|
40
36
|
<b>To: </b>${options.to}<br/>
|
|
41
37
|
<b>Cc: </b>${options.cc}<br/>
|
|
@@ -45,16 +41,13 @@ const openInBrowser = (options) => {
|
|
|
45
41
|
<b>subject: </b>${options.subject}<br/>
|
|
46
42
|
<b>attachments: </b>${(options.attachments || []).map(buildLink).join(', ')}<br/>
|
|
47
43
|
<hr/>
|
|
48
|
-
${
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
logger.verbose('unchained:platform -> Mailman detected an outgoing email');
|
|
56
|
-
open(filePath);
|
|
57
|
-
});
|
|
44
|
+
${messageBody}
|
|
45
|
+
</body>
|
|
46
|
+
</html>`;
|
|
47
|
+
const folder = await mkdtemp(join(tmpdir(), 'email-'));
|
|
48
|
+
const fileName = `${folder}/${filename}`;
|
|
49
|
+
await writeFile(fileName, content);
|
|
50
|
+
return open(fileName);
|
|
58
51
|
};
|
|
59
52
|
const EmailWorkerPlugin = {
|
|
60
53
|
...WorkerAdapter,
|
|
@@ -81,7 +74,8 @@ const EmailWorkerPlugin = {
|
|
|
81
74
|
...rest,
|
|
82
75
|
};
|
|
83
76
|
if (checkEmailInterceptionEnabled()) {
|
|
84
|
-
|
|
77
|
+
logger.verbose('unchained:platform -> Mailman detected an outgoing email');
|
|
78
|
+
await openInBrowser(sendMailOptions);
|
|
85
79
|
return { success: true, result: { intercepted: true } };
|
|
86
80
|
}
|
|
87
81
|
if (!process.env.MAIL_URL) {
|
package/lib/worker/email.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"email.js","sourceRoot":"","sources":["../../src/worker/email.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"email.js","sourceRoot":"","sources":["../../src/worker/email.ts"],"names":[],"mappings":"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"}
|