@unchainedshop/plugins 2.8.15 → 2.8.17
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/saferpay/adapter.d.ts +3 -0
- package/lib/payment/saferpay/adapter.js +181 -0
- package/lib/payment/saferpay/adapter.js.map +1 -0
- package/lib/payment/saferpay/api/api/SaferpayClient.d.ts +17 -0
- package/lib/payment/saferpay/api/api/SaferpayClient.js +44 -0
- package/lib/payment/saferpay/api/api/SaferpayClient.js.map +1 -0
- package/lib/payment/{worldline-saferpay/worldline-saferpay-client → saferpay/api}/api/SaferpayConnection.js +2 -4
- package/lib/payment/saferpay/api/api/SaferpayConnection.js.map +1 -0
- package/lib/payment/saferpay/api/index.js.map +1 -0
- package/lib/payment/saferpay/api/models/PaymentMethods.js.map +1 -0
- package/lib/payment/saferpay/api/models/PaymentPageAssert.js.map +1 -0
- package/lib/payment/{worldline-saferpay/worldline-saferpay-client → saferpay/api}/models/PaymentPageInitialize.d.ts +9 -6
- package/lib/payment/saferpay/api/models/PaymentPageInitialize.js.map +1 -0
- package/lib/payment/saferpay/api/models/Request.js.map +1 -0
- package/lib/payment/{worldline-saferpay/worldline-saferpay-client → saferpay/api}/models/Response.d.ts +1 -1
- package/lib/payment/saferpay/api/models/Response.js.map +1 -0
- package/lib/payment/saferpay/api/models/Transaction.js.map +1 -0
- package/lib/payment/saferpay/api/models/TransactionCancel.js.map +1 -0
- package/lib/payment/saferpay/api/models/TransactionCapture.d.ts +18 -0
- package/lib/payment/saferpay/api/models/TransactionCapture.js +2 -0
- package/lib/payment/saferpay/api/models/TransactionCapture.js.map +1 -0
- package/lib/payment/saferpay/buildSignature.d.ts +1 -0
- package/lib/payment/saferpay/buildSignature.js +9 -0
- package/lib/payment/saferpay/buildSignature.js.map +1 -0
- package/lib/payment/saferpay/db/SaferpayTransactionsCollection.d.ts +7 -0
- package/lib/payment/saferpay/db/SaferpayTransactionsCollection.js +5 -0
- package/lib/payment/saferpay/db/SaferpayTransactionsCollection.js.map +1 -0
- package/lib/payment/saferpay/getReturnPath.d.ts +3 -0
- package/lib/payment/saferpay/getReturnPath.js +4 -0
- package/lib/payment/saferpay/getReturnPath.js.map +1 -0
- package/lib/payment/saferpay/index.d.ts +3 -0
- package/lib/payment/saferpay/index.js +4 -0
- package/lib/payment/saferpay/index.js.map +1 -0
- package/lib/payment/saferpay/middleware.d.ts +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 +9 -0
- package/lib/payment/saferpay/module/configureSaferpayTransactionsModule.js +24 -0
- package/lib/payment/saferpay/module/configureSaferpayTransactionsModule.js.map +1 -0
- package/lib/plugins-index.d.ts +0 -1
- package/lib/plugins-index.js +6 -2
- package/lib/plugins-index.js.map +1 -1
- package/package.json +21 -21
- package/src/payment/saferpay/adapter.ts +255 -0
- package/src/payment/saferpay/api/api/SaferpayClient.ts +79 -0
- package/src/payment/{worldline-saferpay/worldline-saferpay-client → saferpay/api}/api/SaferpayConnection.ts +2 -4
- package/src/payment/{worldline-saferpay/worldline-saferpay-client → saferpay/api}/models/PaymentPageInitialize.ts +9 -6
- package/src/payment/{worldline-saferpay/worldline-saferpay-client → saferpay/api}/models/Response.ts +1 -1
- package/src/payment/saferpay/api/models/TransactionCapture.ts +20 -0
- package/src/payment/saferpay/buildSignature.ts +9 -0
- package/src/payment/saferpay/db/SaferpayTransactionsCollection.ts +13 -0
- package/src/payment/saferpay/getReturnPath.ts +10 -0
- package/src/payment/saferpay/index.ts +3 -0
- package/src/payment/saferpay/middleware.ts +74 -0
- package/src/payment/saferpay/module/configureSaferpayTransactionsModule.ts +33 -0
- package/src/plugins-index.ts +7 -2
- package/lib/payment/worldline-saferpay/index.d.ts +0 -1
- package/lib/payment/worldline-saferpay/index.js +0 -112
- package/lib/payment/worldline-saferpay/index.js.map +0 -1
- package/lib/payment/worldline-saferpay/worldline-saferpay-client/api/SaferpayClient.d.ts +0 -14
- package/lib/payment/worldline-saferpay/worldline-saferpay-client/api/SaferpayClient.js +0 -29
- package/lib/payment/worldline-saferpay/worldline-saferpay-client/api/SaferpayClient.js.map +0 -1
- package/lib/payment/worldline-saferpay/worldline-saferpay-client/api/SaferpayConnection.js.map +0 -1
- package/lib/payment/worldline-saferpay/worldline-saferpay-client/index.js.map +0 -1
- package/lib/payment/worldline-saferpay/worldline-saferpay-client/models/PaymentMethods.js.map +0 -1
- package/lib/payment/worldline-saferpay/worldline-saferpay-client/models/PaymentPageAssert.js.map +0 -1
- package/lib/payment/worldline-saferpay/worldline-saferpay-client/models/PaymentPageInitialize.js.map +0 -1
- package/lib/payment/worldline-saferpay/worldline-saferpay-client/models/Request.js.map +0 -1
- package/lib/payment/worldline-saferpay/worldline-saferpay-client/models/Response.js.map +0 -1
- package/lib/payment/worldline-saferpay/worldline-saferpay-client/models/Transaction.js.map +0 -1
- package/lib/payment/worldline-saferpay/worldline-saferpay-client/models/TransactionCancel.js.map +0 -1
- package/src/payment/worldline-saferpay/index.ts +0 -139
- package/src/payment/worldline-saferpay/worldline-saferpay-client/api/SaferpayClient.ts +0 -54
- /package/lib/payment/{worldline-saferpay/worldline-saferpay-client → saferpay/api}/api/SaferpayConnection.d.ts +0 -0
- /package/lib/payment/{worldline-saferpay/worldline-saferpay-client → saferpay/api}/index.d.ts +0 -0
- /package/lib/payment/{worldline-saferpay/worldline-saferpay-client → saferpay/api}/index.js +0 -0
- /package/lib/payment/{worldline-saferpay/worldline-saferpay-client → saferpay/api}/models/PaymentMethods.d.ts +0 -0
- /package/lib/payment/{worldline-saferpay/worldline-saferpay-client → saferpay/api}/models/PaymentMethods.js +0 -0
- /package/lib/payment/{worldline-saferpay/worldline-saferpay-client → saferpay/api}/models/PaymentPageAssert.d.ts +0 -0
- /package/lib/payment/{worldline-saferpay/worldline-saferpay-client → saferpay/api}/models/PaymentPageAssert.js +0 -0
- /package/lib/payment/{worldline-saferpay/worldline-saferpay-client → saferpay/api}/models/PaymentPageInitialize.js +0 -0
- /package/lib/payment/{worldline-saferpay/worldline-saferpay-client → saferpay/api}/models/Request.d.ts +0 -0
- /package/lib/payment/{worldline-saferpay/worldline-saferpay-client → saferpay/api}/models/Request.js +0 -0
- /package/lib/payment/{worldline-saferpay/worldline-saferpay-client → saferpay/api}/models/Response.js +0 -0
- /package/lib/payment/{worldline-saferpay/worldline-saferpay-client → saferpay/api}/models/Transaction.d.ts +0 -0
- /package/lib/payment/{worldline-saferpay/worldline-saferpay-client → saferpay/api}/models/Transaction.js +0 -0
- /package/lib/payment/{worldline-saferpay/worldline-saferpay-client → saferpay/api}/models/TransactionCancel.d.ts +0 -0
- /package/lib/payment/{worldline-saferpay/worldline-saferpay-client → saferpay/api}/models/TransactionCancel.js +0 -0
- /package/src/payment/{worldline-saferpay/worldline-saferpay-client → saferpay/api}/index.ts +0 -0
- /package/src/payment/{worldline-saferpay/worldline-saferpay-client → saferpay/api}/models/PaymentMethods.ts +0 -0
- /package/src/payment/{worldline-saferpay/worldline-saferpay-client → saferpay/api}/models/PaymentPageAssert.ts +0 -0
- /package/src/payment/{worldline-saferpay/worldline-saferpay-client → saferpay/api}/models/Request.ts +0 -0
- /package/src/payment/{worldline-saferpay/worldline-saferpay-client → saferpay/api}/models/Transaction.ts +0 -0
- /package/src/payment/{worldline-saferpay/worldline-saferpay-client → saferpay/api}/models/TransactionCancel.ts +0 -0
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
import { PaymentAdapter, PaymentDirector, PaymentError } from '@unchainedshop/core-payment';
|
|
2
|
+
import { mongodb } from '@unchainedshop/mongodb';
|
|
3
|
+
import { SaferpayClient } from './api/index.js';
|
|
4
|
+
import { buildSignature } from './buildSignature.js';
|
|
5
|
+
export * from './middleware.js';
|
|
6
|
+
const { SAFERPAY_BASE_URL = 'https://test.saferpay.com/api', SAFERPAY_CUSTOMER_ID, SAFERPAY_WEBHOOK_PATH = '/payment/saferpay/webhook', SAFERPAY_RETURN_PATH = '/saferpay/return', ROOT_URL = 'http://localhost:4010', EMAIL_WEBSITE_URL, SAFERPAY_USER, SAFERPAY_PW, } = process.env;
|
|
7
|
+
const newSaferpayError = ({ code, message }) => {
|
|
8
|
+
const error = new Error(message || code);
|
|
9
|
+
error.name = `SAFERPAY_${code}`;
|
|
10
|
+
return error;
|
|
11
|
+
};
|
|
12
|
+
const addTransactionId = (urlString, saferpayTransactionId) => {
|
|
13
|
+
const urlWithTransactionId = new URL(urlString);
|
|
14
|
+
urlWithTransactionId.searchParams.append('transactionId', saferpayTransactionId.toString('hex'));
|
|
15
|
+
return urlWithTransactionId.href;
|
|
16
|
+
};
|
|
17
|
+
export const WordlineSaferpay = {
|
|
18
|
+
...PaymentAdapter,
|
|
19
|
+
key: 'shop.unchained.payment.saferpay',
|
|
20
|
+
label: 'Worldline Saferpay API',
|
|
21
|
+
version: '1.40.0',
|
|
22
|
+
typeSupported(type) {
|
|
23
|
+
return type === 'GENERIC';
|
|
24
|
+
},
|
|
25
|
+
actions: (params) => {
|
|
26
|
+
const { modules } = params.context;
|
|
27
|
+
const createSaferPayClient = () => {
|
|
28
|
+
if (!SAFERPAY_CUSTOMER_ID || !SAFERPAY_USER || !SAFERPAY_PW)
|
|
29
|
+
throw new Error('Credentials not Set');
|
|
30
|
+
const saferpayClient = new SaferpayClient(SAFERPAY_BASE_URL, SAFERPAY_CUSTOMER_ID, SAFERPAY_USER, SAFERPAY_PW);
|
|
31
|
+
return saferpayClient;
|
|
32
|
+
};
|
|
33
|
+
const adapter = {
|
|
34
|
+
...PaymentAdapter.actions(params),
|
|
35
|
+
getTerminalId() {
|
|
36
|
+
return params.config.find((item) => item.key === 'terminalId')?.value;
|
|
37
|
+
},
|
|
38
|
+
// eslint-disable-next-line
|
|
39
|
+
configurationError() {
|
|
40
|
+
// eslint-disable-line
|
|
41
|
+
if (!SAFERPAY_BASE_URL ||
|
|
42
|
+
!SAFERPAY_CUSTOMER_ID ||
|
|
43
|
+
!SAFERPAY_USER ||
|
|
44
|
+
!SAFERPAY_PW ||
|
|
45
|
+
!adapter.getTerminalId()) {
|
|
46
|
+
return PaymentError.INCOMPLETE_CONFIGURATION;
|
|
47
|
+
}
|
|
48
|
+
return null;
|
|
49
|
+
},
|
|
50
|
+
isActive() {
|
|
51
|
+
if (adapter.configurationError() === null)
|
|
52
|
+
return true;
|
|
53
|
+
return false;
|
|
54
|
+
},
|
|
55
|
+
isPayLaterAllowed() {
|
|
56
|
+
return false;
|
|
57
|
+
},
|
|
58
|
+
sign: async (transactionContext = {}) => {
|
|
59
|
+
const { orderPayment, order } = params.paymentContext;
|
|
60
|
+
if (!orderPayment || !order) {
|
|
61
|
+
throw new Error('orderPayment or order not found');
|
|
62
|
+
}
|
|
63
|
+
const pricing = modules.orders.pricingSheet(order);
|
|
64
|
+
const totalAmount = pricing?.total({ useNetPrice: false }).amount;
|
|
65
|
+
const saferpayTransactionId = await modules.saferpayTransactions.createTransaction(orderPayment._id);
|
|
66
|
+
const signature = await buildSignature(saferpayTransactionId.toString('hex'), orderPayment._id);
|
|
67
|
+
const paymentPageInitInput = {
|
|
68
|
+
...(transactionContext || {}),
|
|
69
|
+
TerminalId: adapter.getTerminalId(),
|
|
70
|
+
Payment: {
|
|
71
|
+
Amount: {
|
|
72
|
+
Value: totalAmount.toString(),
|
|
73
|
+
CurrencyCode: order.currency,
|
|
74
|
+
},
|
|
75
|
+
OrderId: order._id,
|
|
76
|
+
Description: transactionContext.description || 'Bestellung',
|
|
77
|
+
...(transactionContext?.Payment || {}),
|
|
78
|
+
},
|
|
79
|
+
ReturnUrl: {
|
|
80
|
+
Url: `${EMAIL_WEBSITE_URL || ROOT_URL}${SAFERPAY_RETURN_PATH}`,
|
|
81
|
+
...(transactionContext?.ReturnUrl || {}),
|
|
82
|
+
},
|
|
83
|
+
Notification: {
|
|
84
|
+
SuccessNotifyUrl: `${ROOT_URL}${SAFERPAY_WEBHOOK_PATH}?orderPaymentId=${orderPayment._id}&signature=${signature}`,
|
|
85
|
+
},
|
|
86
|
+
};
|
|
87
|
+
paymentPageInitInput.ReturnUrl.Url = addTransactionId(paymentPageInitInput.ReturnUrl.Url, saferpayTransactionId);
|
|
88
|
+
paymentPageInitInput.Notification.SuccessNotifyUrl = addTransactionId(paymentPageInitInput.Notification.SuccessNotifyUrl, saferpayTransactionId);
|
|
89
|
+
const api = createSaferPayClient();
|
|
90
|
+
const paymentPageInit = await api.paymentPageInitialize(orderPayment, paymentPageInitInput);
|
|
91
|
+
await modules.saferpayTransactions.setToken(saferpayTransactionId, paymentPageInit.Token);
|
|
92
|
+
return JSON.stringify({
|
|
93
|
+
location: paymentPageInit.RedirectUrl,
|
|
94
|
+
token: paymentPageInit.Token,
|
|
95
|
+
transactionId: saferpayTransactionId.toString('hex'),
|
|
96
|
+
});
|
|
97
|
+
},
|
|
98
|
+
charge: async ({ transactionId }) => {
|
|
99
|
+
const { orderPayment, order } = params.paymentContext;
|
|
100
|
+
if (!orderPayment || !order) {
|
|
101
|
+
throw new Error('orderPayment or order not found');
|
|
102
|
+
}
|
|
103
|
+
const pricing = modules.orders.pricingSheet(order);
|
|
104
|
+
const totalAmount = pricing.total({ useNetPrice: false }).amount;
|
|
105
|
+
const saferpayTransaction = await modules.saferpayTransactions.findTransactionById(mongodb.ObjectId.createFromHexString(transactionId));
|
|
106
|
+
const api = createSaferPayClient();
|
|
107
|
+
const paymentPageAssert = await api.paymentPageAssert(orderPayment, {
|
|
108
|
+
Token: saferpayTransaction.token,
|
|
109
|
+
});
|
|
110
|
+
const success = !paymentPageAssert.ErrorMessage &&
|
|
111
|
+
paymentPageAssert.Transaction.Amount.Value === totalAmount.toString() &&
|
|
112
|
+
paymentPageAssert.Transaction.Amount.CurrencyCode === order.currency &&
|
|
113
|
+
(paymentPageAssert.Transaction.Status === 'AUTHORIZED' ||
|
|
114
|
+
paymentPageAssert.Transaction.Status === 'CAPTURED');
|
|
115
|
+
if (success) {
|
|
116
|
+
return {
|
|
117
|
+
transactionId,
|
|
118
|
+
settledTransaction: paymentPageAssert.Transaction,
|
|
119
|
+
// arbitraryFields,
|
|
120
|
+
// credentials,
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
throw newSaferpayError({
|
|
124
|
+
code: paymentPageAssert.ErrorName || `WRONG_STATUS_${paymentPageAssert.Transaction.Status}`,
|
|
125
|
+
message: paymentPageAssert.ErrorMessage,
|
|
126
|
+
});
|
|
127
|
+
},
|
|
128
|
+
async confirm() {
|
|
129
|
+
const { orderPayment } = params.paymentContext;
|
|
130
|
+
if (!orderPayment) {
|
|
131
|
+
throw new Error('orderPayment not found');
|
|
132
|
+
}
|
|
133
|
+
const { transactionId } = orderPayment;
|
|
134
|
+
if (!transactionId)
|
|
135
|
+
return false;
|
|
136
|
+
const saferpayTransaction = await modules.saferpayTransactions.findTransactionById(mongodb.ObjectId.createFromHexString(transactionId));
|
|
137
|
+
const api = createSaferPayClient();
|
|
138
|
+
const paymentPageAssert = await api.paymentPageAssert(orderPayment, {
|
|
139
|
+
Token: saferpayTransaction.token,
|
|
140
|
+
});
|
|
141
|
+
if (paymentPageAssert.Behavior === 'DO_NOT_RETRY')
|
|
142
|
+
return false;
|
|
143
|
+
if (paymentPageAssert.Transaction.Status !== 'AUTHORIZED')
|
|
144
|
+
return false;
|
|
145
|
+
const transactionCaptureRes = await api.transactionCapture(orderPayment, {
|
|
146
|
+
TransactionReference: {
|
|
147
|
+
TransactionId: paymentPageAssert.Transaction.Id,
|
|
148
|
+
},
|
|
149
|
+
});
|
|
150
|
+
return transactionCaptureRes.Status === 'CAPTURED';
|
|
151
|
+
},
|
|
152
|
+
cancel: async () => {
|
|
153
|
+
const { orderPayment } = params.paymentContext;
|
|
154
|
+
if (!orderPayment) {
|
|
155
|
+
throw new Error('orderPayment not found');
|
|
156
|
+
}
|
|
157
|
+
const { transactionId } = orderPayment;
|
|
158
|
+
if (!transactionId)
|
|
159
|
+
return false;
|
|
160
|
+
const saferpayTransaction = await modules.saferpayTransactions.findTransactionById(mongodb.ObjectId.createFromHexString(transactionId));
|
|
161
|
+
const api = createSaferPayClient();
|
|
162
|
+
const paymentPageAssert = await api.paymentPageAssert(orderPayment, {
|
|
163
|
+
Token: saferpayTransaction.token,
|
|
164
|
+
});
|
|
165
|
+
if (paymentPageAssert.Behavior === 'DO_NOT_RETRY')
|
|
166
|
+
return false;
|
|
167
|
+
if (paymentPageAssert.Transaction.Status !== 'AUTHORIZED')
|
|
168
|
+
return false;
|
|
169
|
+
const transactionCancelRes = await api.transactionCancel(orderPayment, {
|
|
170
|
+
TransactionReference: {
|
|
171
|
+
TransactionId: paymentPageAssert.Transaction.Id,
|
|
172
|
+
},
|
|
173
|
+
});
|
|
174
|
+
return transactionCancelRes.TransactionId === transactionId;
|
|
175
|
+
},
|
|
176
|
+
};
|
|
177
|
+
return adapter;
|
|
178
|
+
},
|
|
179
|
+
};
|
|
180
|
+
PaymentDirector.registerAdapter(WordlineSaferpay);
|
|
181
|
+
//# sourceMappingURL=adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../src/payment/saferpay/adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { OrderPayment } from '@unchainedshop/types/orders.payments.js';
|
|
2
|
+
import { TransactionCancelInput, TransactionCancelResponse } from '../models/TransactionCancel.js';
|
|
3
|
+
import { TransactionCaptureInput, TransactionCaptureResponse } from '../models/TransactionCapture.js';
|
|
4
|
+
import { PaymentPageAssertInput, PaymentPageAssertResponse } from '../models/PaymentPageAssert.js';
|
|
5
|
+
import { PaymentPageInitializeInput, PaymentPageInitializeResponse } from '../models/PaymentPageInitialize.js';
|
|
6
|
+
import { RequestHeader } from '../models/Request.js';
|
|
7
|
+
export declare class SaferpayClient {
|
|
8
|
+
private conn;
|
|
9
|
+
private customerId;
|
|
10
|
+
private specVersion;
|
|
11
|
+
constructor(baseUrl: string, customerId: string, user: string, password: string, specVersion?: string);
|
|
12
|
+
buildRequestHeader(requestId: string, retryIndicator: number): RequestHeader;
|
|
13
|
+
paymentPageInitialize(orderPayment: OrderPayment, input: Omit<PaymentPageInitializeInput, 'RequestHeader'>): Promise<PaymentPageInitializeResponse>;
|
|
14
|
+
paymentPageAssert(orderPayment: OrderPayment, input: Omit<PaymentPageAssertInput, 'RequestHeader'>): Promise<PaymentPageAssertResponse>;
|
|
15
|
+
transactionCancel(orderPayment: OrderPayment, input: Omit<TransactionCancelInput, 'RequestHeader'>): Promise<TransactionCancelResponse>;
|
|
16
|
+
transactionCapture(orderPayment: OrderPayment, input: Omit<TransactionCaptureInput, 'RequestHeader'>): Promise<TransactionCaptureResponse>;
|
|
17
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { SaferpayConnection } from './SaferpayConnection.js';
|
|
2
|
+
export class SaferpayClient {
|
|
3
|
+
conn;
|
|
4
|
+
customerId;
|
|
5
|
+
specVersion;
|
|
6
|
+
constructor(baseUrl, customerId, user, password, specVersion) {
|
|
7
|
+
this.customerId = customerId;
|
|
8
|
+
this.specVersion = specVersion || '1.40';
|
|
9
|
+
this.conn = new SaferpayConnection(baseUrl, user, password);
|
|
10
|
+
}
|
|
11
|
+
buildRequestHeader(requestId, retryIndicator) {
|
|
12
|
+
return {
|
|
13
|
+
SpecVersion: this.specVersion,
|
|
14
|
+
CustomerId: this.customerId,
|
|
15
|
+
RequestId: requestId,
|
|
16
|
+
RetryIndicator: retryIndicator,
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
async paymentPageInitialize(orderPayment, input) {
|
|
20
|
+
return this.conn.post('/Payment/v1/PaymentPage/Initialize', {
|
|
21
|
+
...input,
|
|
22
|
+
RequestHeader: this.buildRequestHeader(orderPayment._id, 0),
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
async paymentPageAssert(orderPayment, input) {
|
|
26
|
+
return this.conn.post('/Payment/v1/PaymentPage/Assert', {
|
|
27
|
+
...input,
|
|
28
|
+
RequestHeader: this.buildRequestHeader(orderPayment._id, 0),
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
async transactionCancel(orderPayment, input) {
|
|
32
|
+
return this.conn.post('/Payment/v1/Transaction/Cancel', {
|
|
33
|
+
...input,
|
|
34
|
+
RequestHeader: this.buildRequestHeader(orderPayment._id, 0),
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
async transactionCapture(orderPayment, input) {
|
|
38
|
+
return this.conn.post('/Payment/v1/Transaction/Capture', {
|
|
39
|
+
...input,
|
|
40
|
+
RequestHeader: this.buildRequestHeader(orderPayment._id, 0),
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=SaferpayClient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SaferpayClient.js","sourceRoot":"","sources":["../../../../../src/payment/saferpay/api/api/SaferpayClient.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAE7D,MAAM,OAAO,cAAc;IACjB,IAAI,CAAqB;IAEzB,UAAU,CAAS;IAEnB,WAAW,CAAS;IAE5B,YACE,OAAe,EACf,UAAkB,EAClB,IAAY,EACZ,QAAgB,EAChB,WAAoB;QAEpB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,WAAW,GAAG,WAAW,IAAI,MAAM,CAAC;QACzC,IAAI,CAAC,IAAI,GAAG,IAAI,kBAAkB,CAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC9D,CAAC;IAEM,kBAAkB,CAAC,SAAiB,EAAE,cAAsB;QACjE,OAAO;YACL,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,SAAS,EAAE,SAAS;YACpB,cAAc,EAAE,cAAc;SAC/B,CAAC;IACJ,CAAC;IAEM,KAAK,CAAC,qBAAqB,CAChC,YAA0B,EAC1B,KAAwD;QAExD,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,oCAAoC,EAAE;YAC1D,GAAG,KAAK;YACR,aAAa,EAAE,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,CAAC;SAC5D,CAA2C,CAAC;IAC/C,CAAC;IAEM,KAAK,CAAC,iBAAiB,CAC5B,YAA0B,EAC1B,KAAoD;QAEpD,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,gCAAgC,EAAE;YACtD,GAAG,KAAK;YACR,aAAa,EAAE,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,CAAC;SAC5D,CAAuC,CAAC;IAC3C,CAAC;IAEM,KAAK,CAAC,iBAAiB,CAC5B,YAA0B,EAC1B,KAAoD;QAEpD,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,gCAAgC,EAAE;YACtD,GAAG,KAAK;YACR,aAAa,EAAE,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,CAAC;SAC5D,CAAuC,CAAC;IAC3C,CAAC;IAEM,KAAK,CAAC,kBAAkB,CAC7B,YAA0B,EAC1B,KAAqD;QAErD,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,iCAAiC,EAAE;YACvD,GAAG,KAAK;YACR,aAAa,EAAE,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,CAAC;SAC5D,CAAwC,CAAC;IAC5C,CAAC;CACF"}
|
|
@@ -13,7 +13,8 @@ export class SaferpayConnection {
|
|
|
13
13
|
}
|
|
14
14
|
getHeaders() {
|
|
15
15
|
return {
|
|
16
|
-
'Content-Type': 'application/json',
|
|
16
|
+
'Content-Type': 'application/json; charset=utf-8',
|
|
17
|
+
Accept: 'application/json',
|
|
17
18
|
Authorization: `Basic ${Buffer.from(`${this.user}:${this.password}`, 'binary').toString('base64')}`,
|
|
18
19
|
};
|
|
19
20
|
}
|
|
@@ -21,9 +22,6 @@ export class SaferpayConnection {
|
|
|
21
22
|
const res = await fetch(this.buildUrl(uri), {
|
|
22
23
|
method: 'POST',
|
|
23
24
|
body: JSON.stringify(data),
|
|
24
|
-
// eslint-disable-next-line
|
|
25
|
-
// @ts-ignore
|
|
26
|
-
duplex: 'half',
|
|
27
25
|
headers: this.getHeaders(),
|
|
28
26
|
});
|
|
29
27
|
return res.json();
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SaferpayConnection.js","sourceRoot":"","sources":["../../../../../src/payment/saferpay/api/api/SaferpayConnection.ts"],"names":[],"mappings":"AAAA,2BAA2B;AAC3B,MAAM,OAAO,kBAAkB;IACrB,OAAO,CAAS;IAEhB,IAAI,CAAS;IAEb,QAAQ,CAAS;IAEzB,YAAmB,OAAe,EAAE,IAAY,EAAE,QAAgB;QAChE,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAEO,QAAQ,CAAC,GAAW;QAC1B,OAAO,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC;IAC5B,CAAC;IAEO,UAAU;QAChB,OAAO;YACL,cAAc,EAAE,iCAAiC;YACjD,MAAM,EAAE,kBAAkB;YAC1B,aAAa,EAAE,SAAS,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE,QAAQ,CAAC,CAAC,QAAQ,CACrF,QAAQ,CACT,EAAE;SACJ,CAAC;IACJ,CAAC;IAEM,KAAK,CAAC,IAAI,CAAC,GAAW,EAAE,IAAY;QACzC,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;YAC1C,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;YAC1B,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE;SAC3B,CAAC,CAAC;QACH,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC;IACpB,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/payment/saferpay/api/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PaymentMethods.js","sourceRoot":"","sources":["../../../../../src/payment/saferpay/api/models/PaymentMethods.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PaymentPageAssert.js","sourceRoot":"","sources":["../../../../../src/payment/saferpay/api/models/PaymentPageAssert.ts"],"names":[],"mappings":""}
|
|
@@ -31,19 +31,22 @@ export interface PaymentPageInitializeInput extends Request {
|
|
|
31
31
|
Wallets?: string[];
|
|
32
32
|
Payer?: {
|
|
33
33
|
IpAddress?: string;
|
|
34
|
+
Ipv6Address?: string;
|
|
34
35
|
LanguageCode?: string;
|
|
36
|
+
BillingAddress?: Map<string, string>;
|
|
37
|
+
DeliveryAddress?: Map<string, string>;
|
|
35
38
|
};
|
|
36
|
-
BillingAddress?: Map<string, string>;
|
|
37
|
-
DeliveryAddress?: Map<string, string>;
|
|
38
39
|
RegisterAlias?: {
|
|
39
40
|
IdGenerator: 'MANUAL' | 'RANDOM' | 'RANDOM_UNIQUE';
|
|
40
41
|
Id?: string;
|
|
41
42
|
Lifetime?: number;
|
|
42
43
|
};
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
44
|
+
ReturnUrl: {
|
|
45
|
+
Url: string;
|
|
46
|
+
};
|
|
47
|
+
Notification?: {
|
|
48
|
+
SuccessNotifyUrl?: string;
|
|
49
|
+
FailNotifyUrl?: string;
|
|
47
50
|
};
|
|
48
51
|
}
|
|
49
52
|
export interface PaymentPageInitializeResponse extends Response {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PaymentPageInitialize.js","sourceRoot":"","sources":["../../../../../src/payment/saferpay/api/models/PaymentPageInitialize.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Request.js","sourceRoot":"","sources":["../../../../../src/payment/saferpay/api/models/Request.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Response.js","sourceRoot":"","sources":["../../../../../src/payment/saferpay/api/models/Response.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Transaction.js","sourceRoot":"","sources":["../../../../../src/payment/saferpay/api/models/Transaction.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TransactionCancel.js","sourceRoot":"","sources":["../../../../../src/payment/saferpay/api/models/TransactionCancel.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Response } from './Response.js';
|
|
2
|
+
import { Request } from './Request.js';
|
|
3
|
+
import type { TransactionAmount } from './Transaction.js';
|
|
4
|
+
export interface TransactionCaptureInput extends Request {
|
|
5
|
+
TransactionReference: {
|
|
6
|
+
TransactionId: string;
|
|
7
|
+
OrderId?: string;
|
|
8
|
+
};
|
|
9
|
+
Amount?: TransactionAmount;
|
|
10
|
+
Marketplace?: any;
|
|
11
|
+
}
|
|
12
|
+
export interface TransactionCaptureResponse extends Response {
|
|
13
|
+
CaptureId: string;
|
|
14
|
+
Status: 'PENDING' | 'CAPTURED';
|
|
15
|
+
OrderId?: string;
|
|
16
|
+
Date: string;
|
|
17
|
+
Invoice?: any;
|
|
18
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TransactionCapture.js","sourceRoot":"","sources":["../../../../../src/payment/saferpay/api/models/TransactionCapture.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const buildSignature: (transactionId: any, orderPaymentId: any) => Promise<string>;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export const buildSignature = async (transactionId, orderPaymentId) => {
|
|
2
|
+
const payload = [transactionId, orderPaymentId, process.env.SAFERPAY_PW].filter(Boolean).join(':');
|
|
3
|
+
const msgUint8 = new TextEncoder().encode(payload);
|
|
4
|
+
const hashBuffer = await crypto.subtle.digest('SHA-256', msgUint8);
|
|
5
|
+
const hashArray = Array.from(new Uint8Array(hashBuffer));
|
|
6
|
+
const hashHex = hashArray.map((b) => b.toString(16).padStart(2, '0')).join('');
|
|
7
|
+
return hashHex;
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=buildSignature.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buildSignature.js","sourceRoot":"","sources":["../../../src/payment/saferpay/buildSignature.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,EAAE;IACpE,MAAM,OAAO,GAAG,CAAC,aAAa,EAAE,cAAc,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAEnG,MAAM,QAAQ,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACnD,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IACnE,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC;IACzD,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC/E,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { mongodb } from '@unchainedshop/mongodb';
|
|
2
|
+
import { TimestampFields } from '@unchainedshop/types/common.js';
|
|
3
|
+
export type SaferpayTransaction = {
|
|
4
|
+
orderPaymentId: any;
|
|
5
|
+
token?: string;
|
|
6
|
+
} & TimestampFields;
|
|
7
|
+
export declare const SaferpayTransactionsCollection: (db: mongodb.Db) => Promise<mongodb.Collection<SaferpayTransaction>>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SaferpayTransactionsCollection.js","sourceRoot":"","sources":["../../../../src/payment/saferpay/db/SaferpayTransactionsCollection.ts"],"names":[],"mappings":"AAQA,MAAM,CAAC,MAAM,8BAA8B,GAAG,KAAK,EAAE,EAAc,EAAE,EAAE;IACrE,MAAM,oBAAoB,GAAG,EAAE,CAAC,UAAU,CAAsB,+BAA+B,CAAC,CAAC;IAEjG,OAAO,oBAAoB,CAAC;AAC9B,CAAC,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
const { ROOT_URL, SAFERPAY_WEBHOOK_PATH = '/payment/saferpay/webhook', SAFERPAY_RETURN_PATH = '/saferpay/return', } = process.env;
|
|
2
|
+
export const webhookPath = (orderPaymentId) => `${ROOT_URL}${SAFERPAY_WEBHOOK_PATH}?orderPaymentId=${orderPaymentId}`;
|
|
3
|
+
export default () => `${ROOT_URL}${SAFERPAY_RETURN_PATH}`;
|
|
4
|
+
//# sourceMappingURL=getReturnPath.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getReturnPath.js","sourceRoot":"","sources":["../../../src/payment/saferpay/getReturnPath.ts"],"names":[],"mappings":"AAAA,MAAM,EACJ,QAAQ,EACR,qBAAqB,GAAG,2BAA2B,EACnD,oBAAoB,GAAG,kBAAkB,GAC1C,GAAG,OAAO,CAAC,GAAG,CAAC;AAEhB,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,cAAc,EAAE,EAAE,CAC5C,GAAG,QAAQ,GAAG,qBAAqB,mBAAmB,cAAc,EAAE,CAAC;AAEzE,eAAe,GAAW,EAAE,CAAC,GAAG,QAAQ,GAAG,oBAAoB,EAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/payment/saferpay/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,iDAAiD,CAAC;AAChE,cAAc,iBAAiB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const saferpayHandler: (request: any, response: any) => Promise<void>;
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { createLogger } from '@unchainedshop/logger';
|
|
2
|
+
import { buildSignature } from './buildSignature.js';
|
|
3
|
+
const logger = createLogger('unchained:core-payment:saferpay:webhook');
|
|
4
|
+
export const saferpayHandler = async (request, response) => {
|
|
5
|
+
const resolvedContext = request.unchainedContext;
|
|
6
|
+
const { modules } = resolvedContext;
|
|
7
|
+
const { orderPaymentId, signature, transactionId } = request.query;
|
|
8
|
+
const isValidRequest = typeof orderPaymentId === 'string' &&
|
|
9
|
+
typeof signature === 'string' &&
|
|
10
|
+
typeof transactionId === 'string' &&
|
|
11
|
+
orderPaymentId &&
|
|
12
|
+
transactionId &&
|
|
13
|
+
signature;
|
|
14
|
+
if ((request.method !== 'GET' && request.method !== 'HEAD') || !isValidRequest) {
|
|
15
|
+
logger.warn(`unhandled http method ${request.method} or orderPaymentId missing in query`);
|
|
16
|
+
response.writeHead(404);
|
|
17
|
+
response.end();
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
try {
|
|
21
|
+
logger.verbose(`checkout with orderPaymentId: ${orderPaymentId}`);
|
|
22
|
+
const orderPayment = await modules.orders.payments.findOrderPayment({
|
|
23
|
+
orderPaymentId,
|
|
24
|
+
});
|
|
25
|
+
if (!orderPayment) {
|
|
26
|
+
throw new Error(`order payment not found with orderPaymentId: ${orderPaymentId}`);
|
|
27
|
+
}
|
|
28
|
+
const correctSignature = await buildSignature(transactionId, orderPaymentId);
|
|
29
|
+
if (correctSignature !== signature) {
|
|
30
|
+
throw new Error('Invalid signature');
|
|
31
|
+
}
|
|
32
|
+
const order = await modules.orders.checkout(orderPayment.orderId, {
|
|
33
|
+
paymentContext: {
|
|
34
|
+
transactionId,
|
|
35
|
+
},
|
|
36
|
+
}, resolvedContext);
|
|
37
|
+
logger.info(`checkout successful`, {
|
|
38
|
+
orderPaymentId,
|
|
39
|
+
orderId: order._id,
|
|
40
|
+
});
|
|
41
|
+
response.writeHead(200);
|
|
42
|
+
response.end(JSON.stringify({
|
|
43
|
+
message: 'checkout successful',
|
|
44
|
+
orderPaymentId,
|
|
45
|
+
orderId: order._id,
|
|
46
|
+
}));
|
|
47
|
+
}
|
|
48
|
+
catch (error) {
|
|
49
|
+
logger.error(error, {
|
|
50
|
+
orderPaymentId,
|
|
51
|
+
transactionId,
|
|
52
|
+
});
|
|
53
|
+
response.writeHead(500);
|
|
54
|
+
response.end(error.message);
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
//# sourceMappingURL=middleware.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../../src/payment/saferpay/middleware.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAGrD,MAAM,MAAM,GAAG,YAAY,CAAC,yCAAyC,CAAC,CAAC;AAEvE,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE;IACzD,MAAM,eAAe,GAAG,OAAO,CAAC,gBAE/B,CAAC;IACF,MAAM,EAAE,OAAO,EAAE,GAAG,eAAe,CAAC;IAEpC,MAAM,EAAE,cAAc,EAAE,SAAS,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC;IACnE,MAAM,cAAc,GAClB,OAAO,cAAc,KAAK,QAAQ;QAClC,OAAO,SAAS,KAAK,QAAQ;QAC7B,OAAO,aAAa,KAAK,QAAQ;QACjC,cAAc;QACd,aAAa;QACb,SAAS,CAAC;IAEZ,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,KAAK,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;QAC/E,MAAM,CAAC,IAAI,CAAC,yBAAyB,OAAO,CAAC,MAAM,qCAAqC,CAAC,CAAC;QAC1F,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QACxB,QAAQ,CAAC,GAAG,EAAE,CAAC;QACf,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,MAAM,CAAC,OAAO,CAAC,iCAAiC,cAAc,EAAE,CAAC,CAAC;QAClE,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC;YAClE,cAAc;SACf,CAAC,CAAC;QACH,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,gDAAgD,cAAc,EAAE,CAAC,CAAC;QACpF,CAAC;QAED,MAAM,gBAAgB,GAAG,MAAM,cAAc,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;QAE7E,IAAI,gBAAgB,KAAK,SAAS,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;QACvC,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,QAAQ,CACzC,YAAY,CAAC,OAAO,EACpB;YACE,cAAc,EAAE;gBACd,aAAa;aACd;SACF,EACD,eAAe,CAChB,CAAC;QACF,MAAM,CAAC,IAAI,CAAC,qBAAqB,EAAE;YACjC,cAAc;YACd,OAAO,EAAE,KAAK,CAAC,GAAG;SACnB,CAAC,CAAC;QACH,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QACxB,QAAQ,CAAC,GAAG,CACV,IAAI,CAAC,SAAS,CAAC;YACb,OAAO,EAAE,qBAAqB;YAC9B,cAAc;YACd,OAAO,EAAE,KAAK,CAAC,GAAG;SACnB,CAAC,CACH,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE;YAClB,cAAc;YACd,aAAa;SACd,CAAC,CAAC;QACH,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QACxB,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC9B,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { mongodb } from '@unchainedshop/mongodb';
|
|
2
|
+
export declare const configureSaferpayTransactionsModule: ({ db }: {
|
|
3
|
+
db: mongodb.Db;
|
|
4
|
+
}) => Promise<{
|
|
5
|
+
findTransactionById: (_id: mongodb.ObjectId) => Promise<mongodb.WithId<import("../db/SaferpayTransactionsCollection.js").SaferpayTransaction>>;
|
|
6
|
+
createTransaction: (orderPaymentId: any) => Promise<mongodb.BSON.ObjectId>;
|
|
7
|
+
setToken: (_id: mongodb.ObjectId, token: string) => Promise<void>;
|
|
8
|
+
}>;
|
|
9
|
+
export type SaferpayTransactionsModule = Awaited<ReturnType<typeof configureSaferpayTransactionsModule>>;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { SaferpayTransactionsCollection } from '../db/SaferpayTransactionsCollection.js';
|
|
2
|
+
export const configureSaferpayTransactionsModule = async ({ db }) => {
|
|
3
|
+
const SaferpayTransactions = await SaferpayTransactionsCollection(db);
|
|
4
|
+
return {
|
|
5
|
+
findTransactionById: async (_id) => {
|
|
6
|
+
return SaferpayTransactions.findOne({
|
|
7
|
+
_id,
|
|
8
|
+
});
|
|
9
|
+
},
|
|
10
|
+
createTransaction: async (orderPaymentId) => {
|
|
11
|
+
const result = await SaferpayTransactions.insertOne({
|
|
12
|
+
created: new Date(),
|
|
13
|
+
orderPaymentId,
|
|
14
|
+
});
|
|
15
|
+
return result.insertedId;
|
|
16
|
+
},
|
|
17
|
+
setToken: async (_id, token) => {
|
|
18
|
+
await SaferpayTransactions.updateOne({ _id }, {
|
|
19
|
+
$set: { token, updated: new Date() },
|
|
20
|
+
});
|
|
21
|
+
},
|
|
22
|
+
};
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=configureSaferpayTransactionsModule.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"configureSaferpayTransactionsModule.js","sourceRoot":"","sources":["../../../../src/payment/saferpay/module/configureSaferpayTransactionsModule.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,8BAA8B,EAAE,MAAM,yCAAyC,CAAC;AAEzF,MAAM,CAAC,MAAM,mCAAmC,GAAG,KAAK,EAAE,EAAE,EAAE,EAAsB,EAAE,EAAE;IACtF,MAAM,oBAAoB,GAAG,MAAM,8BAA8B,CAAC,EAAE,CAAC,CAAC;IAEtE,OAAO;QACL,mBAAmB,EAAE,KAAK,EAAE,GAAqB,EAAE,EAAE;YACnD,OAAO,oBAAoB,CAAC,OAAO,CAAC;gBAClC,GAAG;aACJ,CAAC,CAAC;QACL,CAAC;QAED,iBAAiB,EAAE,KAAK,EAAE,cAAc,EAAE,EAAE;YAC1C,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC,SAAS,CAAC;gBAClD,OAAO,EAAE,IAAI,IAAI,EAAE;gBACnB,cAAc;aACf,CAAC,CAAC;YACH,OAAO,MAAM,CAAC,UAAU,CAAC;QAC3B,CAAC;QAED,QAAQ,EAAE,KAAK,EAAE,GAAqB,EAAE,KAAa,EAAE,EAAE;YACvD,MAAM,oBAAoB,CAAC,SAAS,CAClC,EAAE,GAAG,EAAE,EACP;gBACE,IAAI,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,IAAI,EAAE,EAAE;aACrC,CACF,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC,CAAC"}
|
package/lib/plugins-index.d.ts
CHANGED
|
@@ -6,7 +6,6 @@ import './delivery/stores.js';
|
|
|
6
6
|
import './payment/invoice.js';
|
|
7
7
|
import './payment/invoice-prepaid.js';
|
|
8
8
|
import './payment/paypal-checkout.js';
|
|
9
|
-
import './payment/worldline-saferpay/index.js';
|
|
10
9
|
import './warehousing/store.js';
|
|
11
10
|
import './warehousing/eth-minter.js';
|
|
12
11
|
import './pricing/discount-half-price-manual.js';
|
package/lib/plugins-index.js
CHANGED
|
@@ -9,12 +9,12 @@ import './delivery/stores.js';
|
|
|
9
9
|
import './payment/invoice.js';
|
|
10
10
|
import './payment/invoice-prepaid.js';
|
|
11
11
|
import './payment/paypal-checkout.js';
|
|
12
|
-
import './payment/worldline-saferpay/index.js';
|
|
13
12
|
import { datatransHandler } from './payment/datatrans-v2/index.js';
|
|
14
13
|
import { configureCryptopayModule, cryptopayHandler } from './payment/cryptopay/index.js';
|
|
15
14
|
import { appleIAPHandler, configureAppleTransactionsModule } from './payment/apple-iap/index.js';
|
|
16
15
|
import { stripeHandler } from './payment/stripe/index.js';
|
|
17
16
|
import { postfinanceCheckoutHandler } from './payment/postfinance-checkout/index.js';
|
|
17
|
+
import { configureSaferpayTransactionsModule, saferpayHandler } from './payment/saferpay/index.js';
|
|
18
18
|
import { payrexxHandler } from './payment/payrexx/index.js';
|
|
19
19
|
// Warehousing
|
|
20
20
|
import './warehousing/store.js';
|
|
@@ -66,13 +66,16 @@ import './accounts/google-oauth.js';
|
|
|
66
66
|
import './accounts/linkedin-oauth.js';
|
|
67
67
|
const { CRYPTOPAY_WEBHOOK_PATH = '/payment/cryptopay', STRIPE_WEBHOOK_PATH = '/payment/stripe', PAYREXX_WEBHOOK_PATH = '/payment/payrexx', PFCHECKOUT_WEBHOOK_PATH = '/payment/postfinance-checkout', DATATRANS_WEBHOOK_PATH = '/payment/datatrans/webhook', APPLE_IAP_WEBHOOK_PATH = '/payment/apple-iap',
|
|
68
68
|
// MINIO_PUT_SERVER_PATH = '/minio',
|
|
69
|
-
GRIDFS_PUT_SERVER_PATH = '/gridfs', } = process.env;
|
|
69
|
+
GRIDFS_PUT_SERVER_PATH = '/gridfs', SAFERPAY_WEBHOOK_PATH = '/payment/saferpay/webhook', } = process.env;
|
|
70
70
|
// import './files/minio/minio-adapter';
|
|
71
71
|
// import { minioHandler } from './files/minio/minio-webhook';
|
|
72
72
|
export const defaultModules = {
|
|
73
73
|
appleTransactions: {
|
|
74
74
|
configure: configureAppleTransactionsModule,
|
|
75
75
|
},
|
|
76
|
+
saferpayTransactions: {
|
|
77
|
+
configure: configureSaferpayTransactionsModule,
|
|
78
|
+
},
|
|
76
79
|
gridfsFileUploads: {
|
|
77
80
|
configure: configureGridFSFileUploadModule,
|
|
78
81
|
},
|
|
@@ -92,6 +95,7 @@ export const connectDefaultPluginsToExpress4 = (app, { unchainedAPI }) => {
|
|
|
92
95
|
strict: false,
|
|
93
96
|
}), appleIAPHandler);
|
|
94
97
|
useMiddlewareWithCurrentContext(app, PAYREXX_WEBHOOK_PATH, express.json({ type: 'application/json' }), payrexxHandler);
|
|
98
|
+
useMiddlewareWithCurrentContext(app, SAFERPAY_WEBHOOK_PATH, saferpayHandler);
|
|
95
99
|
// useMiddlewareWithCurrentContext(
|
|
96
100
|
// app,
|
|
97
101
|
// MINIO_PUT_SERVER_PATH,
|