@etohq/payment 1.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/README.md +3 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -0
- package/dist/joiner-config.d.ts +2 -0
- package/dist/joiner-config.d.ts.map +1 -0
- package/dist/joiner-config.js +26 -0
- package/dist/joiner-config.js.map +1 -0
- package/dist/loaders/index.d.ts +2 -0
- package/dist/loaders/index.d.ts.map +1 -0
- package/dist/loaders/index.js +18 -0
- package/dist/loaders/index.js.map +1 -0
- package/dist/loaders/providers.d.ts +6 -0
- package/dist/loaders/providers.d.ts.map +1 -0
- package/dist/loaders/providers.js +70 -0
- package/dist/loaders/providers.js.map +1 -0
- package/dist/migrations/Migration20240225134525.d.ts +5 -0
- package/dist/migrations/Migration20240225134525.d.ts.map +1 -0
- package/dist/migrations/Migration20240225134525.js +272 -0
- package/dist/migrations/Migration20240225134525.js.map +1 -0
- package/dist/migrations/Migration20240806072619.d.ts +6 -0
- package/dist/migrations/Migration20240806072619.d.ts.map +1 -0
- package/dist/migrations/Migration20240806072619.js +38 -0
- package/dist/migrations/Migration20240806072619.js.map +1 -0
- package/dist/migrations/Migration20241211151053.d.ts +6 -0
- package/dist/migrations/Migration20241211151053.d.ts.map +1 -0
- package/dist/migrations/Migration20241211151053.js +34 -0
- package/dist/migrations/Migration20241211151053.js.map +1 -0
- package/dist/models/capture.d.ts +87 -0
- package/dist/models/capture.d.ts.map +1 -0
- package/dist/models/capture.js +25 -0
- package/dist/models/capture.js.map +1 -0
- package/dist/models/index.d.ts +9 -0
- package/dist/models/index.d.ts.map +1 -0
- package/dist/models/index.js +23 -0
- package/dist/models/index.js.map +1 -0
- package/dist/models/payment-collection.d.ts +160 -0
- package/dist/models/payment-collection.d.ts.map +1 -0
- package/dist/models/payment-collection.js +44 -0
- package/dist/models/payment-collection.js.map +1 -0
- package/dist/models/payment-method-token.d.ts +11 -0
- package/dist/models/payment-method-token.d.ts.map +1 -0
- package/dist/models/payment-method-token.js +14 -0
- package/dist/models/payment-method-token.js.map +1 -0
- package/dist/models/payment-provider.d.ts +160 -0
- package/dist/models/payment-provider.d.ts.map +1 -0
- package/dist/models/payment-provider.js +16 -0
- package/dist/models/payment-provider.js.map +1 -0
- package/dist/models/payment-session.d.ts +137 -0
- package/dist/models/payment-session.d.ts.map +1 -0
- package/dist/models/payment-session.js +38 -0
- package/dist/models/payment-session.js.map +1 -0
- package/dist/models/payment.d.ts +88 -0
- package/dist/models/payment.d.ts.map +1 -0
- package/dist/models/payment.js +55 -0
- package/dist/models/payment.js.map +1 -0
- package/dist/models/refund-reason.d.ts +81 -0
- package/dist/models/refund-reason.d.ts.map +1 -0
- package/dist/models/refund-reason.js +18 -0
- package/dist/models/refund-reason.js.map +1 -0
- package/dist/models/refund.d.ts +87 -0
- package/dist/models/refund.d.ts.map +1 -0
- package/dist/models/refund.js +32 -0
- package/dist/models/refund.js.map +1 -0
- package/dist/providers/index.d.ts +2 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +9 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/system.d.ts +22 -0
- package/dist/providers/system.d.ts.map +1 -0
- package/dist/providers/system.js +46 -0
- package/dist/providers/system.js.map +1 -0
- package/dist/schema/index.d.ts +3 -0
- package/dist/schema/index.d.ts.map +1 -0
- package/dist/schema/index.js +114 -0
- package/dist/schema/index.js.map +1 -0
- package/dist/services/index.d.ts +3 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/index.js +11 -0
- package/dist/services/index.js.map +1 -0
- package/dist/services/payment-module.d.ts +78 -0
- package/dist/services/payment-module.d.ts.map +1 -0
- package/dist/services/payment-module.js +629 -0
- package/dist/services/payment-module.js.map +1 -0
- package/dist/services/payment-provider.d.ts +27 -0
- package/dist/services/payment-provider.d.ts.map +1 -0
- package/dist/services/payment-provider.js +111 -0
- package/dist/services/payment-provider.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/dist/types/index.d.ts +24 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +3 -0
- package/dist/types/index.js.map +1 -0
- package/package.json +60 -0
|
@@ -0,0 +1,629 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
const utils_1 = require("@etohq/framework/utils");
|
|
16
|
+
const _models_1 = require("../models");
|
|
17
|
+
const joiner_config_1 = require("../joiner-config");
|
|
18
|
+
const generateMethodForModels = {
|
|
19
|
+
PaymentCollection: _models_1.PaymentCollection,
|
|
20
|
+
PaymentSession: _models_1.PaymentSession,
|
|
21
|
+
Payment: _models_1.Payment,
|
|
22
|
+
Capture: _models_1.Capture,
|
|
23
|
+
Refund: _models_1.Refund,
|
|
24
|
+
RefundReason: _models_1.RefundReason,
|
|
25
|
+
};
|
|
26
|
+
class PaymentModuleService extends utils_1.ModulesSdkUtils.EtoService(generateMethodForModels) {
|
|
27
|
+
constructor({ baseRepository, paymentService, captureService, refundService, paymentSessionService, paymentProviderService, paymentCollectionService, }, moduleDeclaration) {
|
|
28
|
+
// @ts-ignore
|
|
29
|
+
super(...arguments);
|
|
30
|
+
this.moduleDeclaration = moduleDeclaration;
|
|
31
|
+
this.baseRepository_ = baseRepository;
|
|
32
|
+
this.refundService_ = refundService;
|
|
33
|
+
this.captureService_ = captureService;
|
|
34
|
+
this.paymentService_ = paymentService;
|
|
35
|
+
this.paymentSessionService_ = paymentSessionService;
|
|
36
|
+
this.paymentProviderService_ = paymentProviderService;
|
|
37
|
+
this.paymentCollectionService_ = paymentCollectionService;
|
|
38
|
+
}
|
|
39
|
+
__joinerConfig() {
|
|
40
|
+
return joiner_config_1.joinerConfig;
|
|
41
|
+
}
|
|
42
|
+
async createPaymentCollections(data, sharedContext) {
|
|
43
|
+
const input = Array.isArray(data) ? data : [data];
|
|
44
|
+
const collections = await this.createPaymentCollections_(input, sharedContext);
|
|
45
|
+
return await this.baseRepository_.serialize(Array.isArray(data) ? collections : collections[0], {
|
|
46
|
+
populate: true,
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
async createPaymentCollections_(data, sharedContext) {
|
|
50
|
+
return await this.paymentCollectionService_.create(data, sharedContext);
|
|
51
|
+
}
|
|
52
|
+
async updatePaymentCollections(idOrSelector, data, sharedContext) {
|
|
53
|
+
let updateData = [];
|
|
54
|
+
if ((0, utils_1.isString)(idOrSelector)) {
|
|
55
|
+
updateData = [
|
|
56
|
+
{
|
|
57
|
+
id: idOrSelector,
|
|
58
|
+
...data,
|
|
59
|
+
},
|
|
60
|
+
];
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
const collections = await this.paymentCollectionService_.list(idOrSelector, {}, sharedContext);
|
|
64
|
+
updateData = collections.map((c) => ({
|
|
65
|
+
id: c.id,
|
|
66
|
+
...data,
|
|
67
|
+
}));
|
|
68
|
+
}
|
|
69
|
+
const result = await this.updatePaymentCollections_(updateData, sharedContext);
|
|
70
|
+
return await this.baseRepository_.serialize(Array.isArray(data) ? result : result[0], {
|
|
71
|
+
populate: true,
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
async updatePaymentCollections_(data, sharedContext) {
|
|
75
|
+
return await this.paymentCollectionService_.update(data, sharedContext);
|
|
76
|
+
}
|
|
77
|
+
async upsertPaymentCollections(data, sharedContext) {
|
|
78
|
+
const input = Array.isArray(data) ? data : [data];
|
|
79
|
+
const forUpdate = input.filter((collection) => !!collection.id);
|
|
80
|
+
const forCreate = input.filter((collection) => !collection.id);
|
|
81
|
+
const operations = [];
|
|
82
|
+
if (forCreate.length) {
|
|
83
|
+
operations.push(this.createPaymentCollections_(forCreate, sharedContext));
|
|
84
|
+
}
|
|
85
|
+
if (forUpdate.length) {
|
|
86
|
+
operations.push(this.updatePaymentCollections_(forUpdate, sharedContext));
|
|
87
|
+
}
|
|
88
|
+
const result = (await (0, utils_1.promiseAll)(operations)).flat();
|
|
89
|
+
return await this.baseRepository_.serialize(Array.isArray(data) ? result : result[0]);
|
|
90
|
+
}
|
|
91
|
+
async completePaymentCollections(paymentCollectionId, sharedContext) {
|
|
92
|
+
const input = Array.isArray(paymentCollectionId)
|
|
93
|
+
? paymentCollectionId.map((id) => ({
|
|
94
|
+
id,
|
|
95
|
+
completed_at: new Date(),
|
|
96
|
+
}))
|
|
97
|
+
: [{ id: paymentCollectionId, completed_at: new Date() }];
|
|
98
|
+
// TODO: what checks should be done here? e.g. captured_amount === amount?
|
|
99
|
+
const updated = await this.paymentCollectionService_.update(input, sharedContext);
|
|
100
|
+
return await this.baseRepository_.serialize(Array.isArray(paymentCollectionId) ? updated : updated[0], { populate: true });
|
|
101
|
+
}
|
|
102
|
+
async createPaymentSession(paymentCollectionId, input, sharedContext) {
|
|
103
|
+
let paymentSession;
|
|
104
|
+
let providerPaymentSession;
|
|
105
|
+
try {
|
|
106
|
+
paymentSession = await this.createPaymentSession_(paymentCollectionId, input, sharedContext);
|
|
107
|
+
providerPaymentSession = await this.paymentProviderService_.createSession(input.provider_id, {
|
|
108
|
+
context: { ...input.context, session_id: paymentSession.id },
|
|
109
|
+
amount: input.amount,
|
|
110
|
+
currency_code: input.currency_code,
|
|
111
|
+
});
|
|
112
|
+
paymentSession = (await this.paymentSessionService_.update({
|
|
113
|
+
id: paymentSession.id,
|
|
114
|
+
data: { ...input.data, ...providerPaymentSession },
|
|
115
|
+
}, sharedContext))[0];
|
|
116
|
+
}
|
|
117
|
+
catch (error) {
|
|
118
|
+
if (providerPaymentSession) {
|
|
119
|
+
await this.paymentProviderService_.deleteSession({
|
|
120
|
+
provider_id: input.provider_id,
|
|
121
|
+
data: input.data,
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
if (paymentSession) {
|
|
125
|
+
await this.paymentSessionService_.delete(paymentSession.id, sharedContext);
|
|
126
|
+
}
|
|
127
|
+
throw error;
|
|
128
|
+
}
|
|
129
|
+
return await this.baseRepository_.serialize(paymentSession);
|
|
130
|
+
}
|
|
131
|
+
async createPaymentSession_(paymentCollectionId, data, sharedContext) {
|
|
132
|
+
const paymentSession = await this.paymentSessionService_.create({
|
|
133
|
+
payment_collection_id: paymentCollectionId,
|
|
134
|
+
provider_id: data.provider_id,
|
|
135
|
+
amount: data.amount,
|
|
136
|
+
currency_code: data.currency_code,
|
|
137
|
+
context: data.context,
|
|
138
|
+
data: data.data,
|
|
139
|
+
}, sharedContext);
|
|
140
|
+
return paymentSession;
|
|
141
|
+
}
|
|
142
|
+
async updatePaymentSession(data, sharedContext) {
|
|
143
|
+
const session = await this.paymentSessionService_.retrieve(data.id, { select: ["id", "data", "provider_id"] }, sharedContext);
|
|
144
|
+
const updated = await this.paymentSessionService_.update({
|
|
145
|
+
id: session.id,
|
|
146
|
+
amount: data.amount,
|
|
147
|
+
currency_code: data.currency_code,
|
|
148
|
+
data: data.data,
|
|
149
|
+
}, sharedContext);
|
|
150
|
+
return await this.baseRepository_.serialize(updated[0], { populate: true });
|
|
151
|
+
}
|
|
152
|
+
async deletePaymentSession(id, sharedContext) {
|
|
153
|
+
const session = await this.paymentSessionService_.retrieve(id, { select: ["id", "data", "provider_id"] }, sharedContext);
|
|
154
|
+
await this.paymentProviderService_.deleteSession({
|
|
155
|
+
provider_id: session.provider_id,
|
|
156
|
+
data: session.data,
|
|
157
|
+
});
|
|
158
|
+
await this.paymentSessionService_.delete(id, sharedContext);
|
|
159
|
+
}
|
|
160
|
+
async authorizePaymentSession(id, context, sharedContext) {
|
|
161
|
+
const session = await this.paymentSessionService_.retrieve(id, {
|
|
162
|
+
select: [
|
|
163
|
+
"id",
|
|
164
|
+
"data",
|
|
165
|
+
"provider_id",
|
|
166
|
+
"amount",
|
|
167
|
+
"raw_amount",
|
|
168
|
+
"currency_code",
|
|
169
|
+
"authorized_at",
|
|
170
|
+
"payment_collection_id",
|
|
171
|
+
],
|
|
172
|
+
relations: ["payment", "payment_collection"],
|
|
173
|
+
}, sharedContext);
|
|
174
|
+
// this method needs to be idempotent
|
|
175
|
+
if (session.payment && session.authorized_at) {
|
|
176
|
+
return await this.baseRepository_.serialize(session.payment, {
|
|
177
|
+
populate: true,
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
let { data, status } = await this.paymentProviderService_.authorizePayment({
|
|
181
|
+
provider_id: session.provider_id,
|
|
182
|
+
data: session.data,
|
|
183
|
+
}, context);
|
|
184
|
+
if (status !== utils_1.PaymentSessionStatus.AUTHORIZED &&
|
|
185
|
+
status !== utils_1.PaymentSessionStatus.CAPTURED) {
|
|
186
|
+
throw new utils_1.EtoError(utils_1.EtoError.Types.NOT_ALLOWED, `Session: ${session.id} is not authorized with the provider.`);
|
|
187
|
+
}
|
|
188
|
+
let payment;
|
|
189
|
+
try {
|
|
190
|
+
payment = await this.authorizePaymentSession_(session, data, status, sharedContext);
|
|
191
|
+
}
|
|
192
|
+
catch (error) {
|
|
193
|
+
await this.paymentProviderService_.cancelPayment({
|
|
194
|
+
provider_id: session.provider_id,
|
|
195
|
+
data,
|
|
196
|
+
});
|
|
197
|
+
throw error;
|
|
198
|
+
}
|
|
199
|
+
await this.maybeUpdatePaymentCollection_(session.payment_collection_id, sharedContext);
|
|
200
|
+
return await this.retrievePayment(payment.id, { relations: ["payment_collection"] }, sharedContext);
|
|
201
|
+
}
|
|
202
|
+
async authorizePaymentSession_(session, data, status, sharedContext) {
|
|
203
|
+
let autoCapture = false;
|
|
204
|
+
if (status === utils_1.PaymentSessionStatus.CAPTURED) {
|
|
205
|
+
status = utils_1.PaymentSessionStatus.AUTHORIZED;
|
|
206
|
+
autoCapture = true;
|
|
207
|
+
}
|
|
208
|
+
await this.paymentSessionService_.update({
|
|
209
|
+
id: session.id,
|
|
210
|
+
data,
|
|
211
|
+
status,
|
|
212
|
+
authorized_at: status === utils_1.PaymentSessionStatus.AUTHORIZED ? new Date() : null,
|
|
213
|
+
}, sharedContext);
|
|
214
|
+
const payment = await this.paymentService_.create({
|
|
215
|
+
amount: session.amount,
|
|
216
|
+
currency_code: session.currency_code,
|
|
217
|
+
payment_session: session.id,
|
|
218
|
+
payment_collection_id: session.payment_collection_id,
|
|
219
|
+
provider_id: session.provider_id,
|
|
220
|
+
data,
|
|
221
|
+
}, sharedContext);
|
|
222
|
+
if (autoCapture) {
|
|
223
|
+
await this.capturePayment({ payment_id: payment.id, amount: session.amount }, sharedContext);
|
|
224
|
+
}
|
|
225
|
+
return payment;
|
|
226
|
+
}
|
|
227
|
+
// @ts-expect-error
|
|
228
|
+
async retrievePaymentSession(id, config = {}, sharedContext) {
|
|
229
|
+
const session = await this.paymentSessionService_.retrieve(id, config, sharedContext);
|
|
230
|
+
return await this.baseRepository_.serialize(session);
|
|
231
|
+
}
|
|
232
|
+
// @ts-expect-error
|
|
233
|
+
async listPaymentSessions(filters, config, sharedContext) {
|
|
234
|
+
const sessions = await this.paymentSessionService_.list(filters, config, sharedContext);
|
|
235
|
+
return await this.baseRepository_.serialize(sessions);
|
|
236
|
+
}
|
|
237
|
+
async updatePayment(data, sharedContext) {
|
|
238
|
+
// NOTE: currently there is no update with the provider but maybe data could be updated
|
|
239
|
+
const result = await this.paymentService_.update(data, sharedContext);
|
|
240
|
+
return await this.baseRepository_.serialize(result[0]);
|
|
241
|
+
}
|
|
242
|
+
async capturePayment(data, sharedContext = {}) {
|
|
243
|
+
const { payment, isFullyCaptured, capture } = await this.capturePayment_(data, sharedContext);
|
|
244
|
+
try {
|
|
245
|
+
await this.capturePaymentFromProvider_(payment, isFullyCaptured, sharedContext);
|
|
246
|
+
}
|
|
247
|
+
catch (error) {
|
|
248
|
+
if (capture?.id) {
|
|
249
|
+
await super.deleteCaptures({ id: capture.id }, sharedContext);
|
|
250
|
+
}
|
|
251
|
+
throw error;
|
|
252
|
+
}
|
|
253
|
+
await this.maybeUpdatePaymentCollection_(payment.payment_collection_id, sharedContext);
|
|
254
|
+
return await this.retrievePayment(payment.id, { relations: ["captures"] }, sharedContext);
|
|
255
|
+
}
|
|
256
|
+
async capturePayment_(data, sharedContext = {}) {
|
|
257
|
+
const payment = await this.paymentService_.retrieve(data.payment_id, {
|
|
258
|
+
select: [
|
|
259
|
+
"id",
|
|
260
|
+
"data",
|
|
261
|
+
"provider_id",
|
|
262
|
+
"payment_collection_id",
|
|
263
|
+
"amount",
|
|
264
|
+
"raw_amount",
|
|
265
|
+
"captured_at",
|
|
266
|
+
"canceled_at",
|
|
267
|
+
],
|
|
268
|
+
relations: ["captures.raw_amount"],
|
|
269
|
+
}, sharedContext);
|
|
270
|
+
// If no custom amount is passed, we assume the full amount needs to be captured
|
|
271
|
+
if (!data.amount) {
|
|
272
|
+
data.amount = payment.amount;
|
|
273
|
+
}
|
|
274
|
+
if (payment.canceled_at) {
|
|
275
|
+
throw new utils_1.EtoError(utils_1.EtoError.Types.INVALID_DATA, `The payment: ${payment.id} has been canceled.`);
|
|
276
|
+
}
|
|
277
|
+
if (payment.captured_at) {
|
|
278
|
+
return { payment, isFullyCaptured: true };
|
|
279
|
+
}
|
|
280
|
+
const capturedAmount = payment.captures.reduce((captureAmount, next) => {
|
|
281
|
+
return utils_1.MathBN.add(captureAmount, next.raw_amount);
|
|
282
|
+
}, utils_1.MathBN.convert(0));
|
|
283
|
+
const authorizedAmount = new utils_1.BigNumber(payment.raw_amount);
|
|
284
|
+
const newCaptureAmount = new utils_1.BigNumber(data.amount);
|
|
285
|
+
const remainingToCapture = utils_1.MathBN.sub(authorizedAmount, capturedAmount);
|
|
286
|
+
if (utils_1.MathBN.gt(newCaptureAmount, remainingToCapture)) {
|
|
287
|
+
throw new utils_1.EtoError(utils_1.EtoError.Types.INVALID_DATA, `You cannot capture more than the authorized amount substracted by what is already captured.`);
|
|
288
|
+
}
|
|
289
|
+
// When the entire authorized amount has been captured, we return it as complete
|
|
290
|
+
const totalCaptured = utils_1.MathBN.convert(utils_1.MathBN.add(capturedAmount, newCaptureAmount));
|
|
291
|
+
const isFullyCaptured = utils_1.MathBN.gte(totalCaptured, authorizedAmount);
|
|
292
|
+
const capture = await this.captureService_.create({
|
|
293
|
+
payment: data.payment_id,
|
|
294
|
+
amount: data.amount,
|
|
295
|
+
captured_by: data.captured_by,
|
|
296
|
+
}, sharedContext);
|
|
297
|
+
return { payment, isFullyCaptured, capture };
|
|
298
|
+
}
|
|
299
|
+
async capturePaymentFromProvider_(payment, isFullyCaptured, sharedContext = {}) {
|
|
300
|
+
const paymentData = await this.paymentProviderService_.capturePayment({
|
|
301
|
+
data: payment.data,
|
|
302
|
+
provider_id: payment.provider_id,
|
|
303
|
+
});
|
|
304
|
+
await this.paymentService_.update({
|
|
305
|
+
id: payment.id,
|
|
306
|
+
data: paymentData,
|
|
307
|
+
captured_at: isFullyCaptured ? new Date() : undefined,
|
|
308
|
+
}, sharedContext);
|
|
309
|
+
return payment;
|
|
310
|
+
}
|
|
311
|
+
async refundPayment(data, sharedContext = {}) {
|
|
312
|
+
const payment = await this.paymentService_.retrieve(data.payment_id, {
|
|
313
|
+
select: [
|
|
314
|
+
"id",
|
|
315
|
+
"data",
|
|
316
|
+
"provider_id",
|
|
317
|
+
"payment_collection_id",
|
|
318
|
+
"amount",
|
|
319
|
+
"raw_amount",
|
|
320
|
+
],
|
|
321
|
+
relations: ["captures.raw_amount", "refunds.raw_amount"],
|
|
322
|
+
}, sharedContext);
|
|
323
|
+
const refund = await this.refundPayment_(payment, data, sharedContext);
|
|
324
|
+
try {
|
|
325
|
+
await this.refundPaymentFromProvider_(payment, refund, sharedContext);
|
|
326
|
+
}
|
|
327
|
+
catch (error) {
|
|
328
|
+
await super.deleteRefunds(data.payment_id, sharedContext);
|
|
329
|
+
throw error;
|
|
330
|
+
}
|
|
331
|
+
await this.maybeUpdatePaymentCollection_(payment.payment_collection_id, sharedContext);
|
|
332
|
+
return await this.retrievePayment(payment.id, { relations: ["refunds"] }, sharedContext);
|
|
333
|
+
}
|
|
334
|
+
async refundPayment_(payment, data, sharedContext = {}) {
|
|
335
|
+
if (!data.amount) {
|
|
336
|
+
data.amount = payment.amount;
|
|
337
|
+
}
|
|
338
|
+
const capturedAmount = payment.captures.reduce((captureAmount, next) => {
|
|
339
|
+
const amountAsBigNumber = new utils_1.BigNumber(next.raw_amount);
|
|
340
|
+
return utils_1.MathBN.add(captureAmount, amountAsBigNumber);
|
|
341
|
+
}, utils_1.MathBN.convert(0));
|
|
342
|
+
const refundedAmount = payment.refunds.reduce((refundedAmount, next) => {
|
|
343
|
+
return utils_1.MathBN.add(refundedAmount, next.raw_amount);
|
|
344
|
+
}, utils_1.MathBN.convert(0));
|
|
345
|
+
const totalRefundedAmount = utils_1.MathBN.add(refundedAmount, data.amount);
|
|
346
|
+
if (utils_1.MathBN.lt(capturedAmount, totalRefundedAmount)) {
|
|
347
|
+
throw new utils_1.EtoError(utils_1.EtoError.Types.INVALID_DATA, `You cannot refund more than what is captured on the payment.`);
|
|
348
|
+
}
|
|
349
|
+
const refund = await this.refundService_.create({
|
|
350
|
+
payment: data.payment_id,
|
|
351
|
+
amount: data.amount,
|
|
352
|
+
created_by: data.created_by,
|
|
353
|
+
note: data.note,
|
|
354
|
+
refund_reason_id: data.refund_reason_id,
|
|
355
|
+
}, sharedContext);
|
|
356
|
+
return refund;
|
|
357
|
+
}
|
|
358
|
+
async refundPaymentFromProvider_(payment, refund, sharedContext = {}) {
|
|
359
|
+
const paymentData = await this.paymentProviderService_.refundPayment({
|
|
360
|
+
data: payment.data,
|
|
361
|
+
provider_id: payment.provider_id,
|
|
362
|
+
}, refund.raw_amount);
|
|
363
|
+
await this.paymentService_.update({ id: payment.id, data: paymentData }, sharedContext);
|
|
364
|
+
return payment;
|
|
365
|
+
}
|
|
366
|
+
async cancelPayment(paymentId, sharedContext) {
|
|
367
|
+
const payment = await this.paymentService_.retrieve(paymentId, { select: ["id", "data", "provider_id"] }, sharedContext);
|
|
368
|
+
await this.paymentProviderService_.cancelPayment({
|
|
369
|
+
data: payment.data,
|
|
370
|
+
provider_id: payment.provider_id,
|
|
371
|
+
});
|
|
372
|
+
await this.paymentService_.update({ id: paymentId, canceled_at: new Date() }, sharedContext);
|
|
373
|
+
return await this.retrievePayment(payment.id, {}, sharedContext);
|
|
374
|
+
}
|
|
375
|
+
async getWebhookActionAndData(eventData, sharedContext) {
|
|
376
|
+
const providerId = `pp_${eventData.provider}`;
|
|
377
|
+
return await this.paymentProviderService_.getWebhookActionAndData(providerId, eventData.payload);
|
|
378
|
+
}
|
|
379
|
+
async listPaymentProviders(filters = {}, config = {}, sharedContext) {
|
|
380
|
+
const providers = await this.paymentProviderService_.list(filters, config, sharedContext);
|
|
381
|
+
return await this.baseRepository_.serialize(providers, {
|
|
382
|
+
populate: true,
|
|
383
|
+
});
|
|
384
|
+
}
|
|
385
|
+
async listAndCountPaymentProviders(filters = {}, config = {}, sharedContext) {
|
|
386
|
+
const [providers, count] = await this.paymentProviderService_.listAndCount(filters, config, sharedContext);
|
|
387
|
+
return [
|
|
388
|
+
await this.baseRepository_.serialize(providers, {
|
|
389
|
+
populate: true,
|
|
390
|
+
}),
|
|
391
|
+
count,
|
|
392
|
+
];
|
|
393
|
+
}
|
|
394
|
+
async maybeUpdatePaymentCollection_(paymentCollectionId, sharedContext) {
|
|
395
|
+
const paymentCollection = await this.paymentCollectionService_.retrieve(paymentCollectionId, {
|
|
396
|
+
select: ["amount", "raw_amount", "status"],
|
|
397
|
+
relations: [
|
|
398
|
+
"payment_sessions.amount",
|
|
399
|
+
"payment_sessions.raw_amount",
|
|
400
|
+
"payments.captures.amount",
|
|
401
|
+
"payments.captures.raw_amount",
|
|
402
|
+
"payments.refunds.amount",
|
|
403
|
+
"payments.refunds.raw_amount",
|
|
404
|
+
],
|
|
405
|
+
}, sharedContext);
|
|
406
|
+
const paymentSessions = paymentCollection.payment_sessions;
|
|
407
|
+
const captures = paymentCollection.payments
|
|
408
|
+
.map((pay) => [...pay.captures])
|
|
409
|
+
.flat();
|
|
410
|
+
const refunds = paymentCollection.payments
|
|
411
|
+
.map((pay) => [...pay.refunds])
|
|
412
|
+
.flat();
|
|
413
|
+
let authorizedAmount = utils_1.MathBN.convert(0);
|
|
414
|
+
let capturedAmount = utils_1.MathBN.convert(0);
|
|
415
|
+
let refundedAmount = utils_1.MathBN.convert(0);
|
|
416
|
+
for (const ps of paymentSessions) {
|
|
417
|
+
if (ps.status === utils_1.PaymentSessionStatus.AUTHORIZED) {
|
|
418
|
+
authorizedAmount = utils_1.MathBN.add(authorizedAmount, ps.amount);
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
for (const capture of captures) {
|
|
422
|
+
capturedAmount = utils_1.MathBN.add(capturedAmount, capture.amount);
|
|
423
|
+
}
|
|
424
|
+
for (const refund of refunds) {
|
|
425
|
+
refundedAmount = utils_1.MathBN.add(refundedAmount, refund.amount);
|
|
426
|
+
}
|
|
427
|
+
let status = paymentSessions.length === 0
|
|
428
|
+
? utils_1.PaymentCollectionStatus.NOT_PAID
|
|
429
|
+
: utils_1.PaymentCollectionStatus.AWAITING;
|
|
430
|
+
if (utils_1.MathBN.gt(authorizedAmount, 0)) {
|
|
431
|
+
status = utils_1.MathBN.gte(authorizedAmount, paymentCollection.amount)
|
|
432
|
+
? utils_1.PaymentCollectionStatus.AUTHORIZED
|
|
433
|
+
: utils_1.PaymentCollectionStatus.PARTIALLY_AUTHORIZED;
|
|
434
|
+
}
|
|
435
|
+
await this.paymentCollectionService_.update({
|
|
436
|
+
id: paymentCollectionId,
|
|
437
|
+
status,
|
|
438
|
+
authorized_amount: authorizedAmount,
|
|
439
|
+
captured_amount: capturedAmount,
|
|
440
|
+
refunded_amount: refundedAmount,
|
|
441
|
+
}, sharedContext);
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
exports.default = PaymentModuleService;
|
|
445
|
+
__decorate([
|
|
446
|
+
(0, utils_1.InjectManager)(),
|
|
447
|
+
__param(1, (0, utils_1.EtoContext)()),
|
|
448
|
+
__metadata("design:type", Function),
|
|
449
|
+
__metadata("design:paramtypes", [Object, Object]),
|
|
450
|
+
__metadata("design:returntype", Promise)
|
|
451
|
+
], PaymentModuleService.prototype, "createPaymentCollections", null);
|
|
452
|
+
__decorate([
|
|
453
|
+
(0, utils_1.InjectTransactionManager)(),
|
|
454
|
+
__param(1, (0, utils_1.EtoContext)()),
|
|
455
|
+
__metadata("design:type", Function),
|
|
456
|
+
__metadata("design:paramtypes", [Array, Object]),
|
|
457
|
+
__metadata("design:returntype", Promise)
|
|
458
|
+
], PaymentModuleService.prototype, "createPaymentCollections_", null);
|
|
459
|
+
__decorate([
|
|
460
|
+
(0, utils_1.InjectManager)(),
|
|
461
|
+
__param(2, (0, utils_1.EtoContext)()),
|
|
462
|
+
__metadata("design:type", Function),
|
|
463
|
+
__metadata("design:paramtypes", [Object, Object, Object]),
|
|
464
|
+
__metadata("design:returntype", Promise)
|
|
465
|
+
], PaymentModuleService.prototype, "updatePaymentCollections", null);
|
|
466
|
+
__decorate([
|
|
467
|
+
(0, utils_1.InjectManager)(),
|
|
468
|
+
__param(1, (0, utils_1.EtoContext)()),
|
|
469
|
+
__metadata("design:type", Function),
|
|
470
|
+
__metadata("design:paramtypes", [Array, Object]),
|
|
471
|
+
__metadata("design:returntype", Promise)
|
|
472
|
+
], PaymentModuleService.prototype, "updatePaymentCollections_", null);
|
|
473
|
+
__decorate([
|
|
474
|
+
(0, utils_1.InjectManager)(),
|
|
475
|
+
__param(1, (0, utils_1.EtoContext)()),
|
|
476
|
+
__metadata("design:type", Function),
|
|
477
|
+
__metadata("design:paramtypes", [Object, Object]),
|
|
478
|
+
__metadata("design:returntype", Promise)
|
|
479
|
+
], PaymentModuleService.prototype, "upsertPaymentCollections", null);
|
|
480
|
+
__decorate([
|
|
481
|
+
(0, utils_1.InjectManager)(),
|
|
482
|
+
__param(1, (0, utils_1.EtoContext)()),
|
|
483
|
+
__metadata("design:type", Function),
|
|
484
|
+
__metadata("design:paramtypes", [Object, Object]),
|
|
485
|
+
__metadata("design:returntype", Promise)
|
|
486
|
+
], PaymentModuleService.prototype, "completePaymentCollections", null);
|
|
487
|
+
__decorate([
|
|
488
|
+
(0, utils_1.InjectManager)(),
|
|
489
|
+
__param(2, (0, utils_1.EtoContext)()),
|
|
490
|
+
__metadata("design:type", Function),
|
|
491
|
+
__metadata("design:paramtypes", [String, Object, Object]),
|
|
492
|
+
__metadata("design:returntype", Promise)
|
|
493
|
+
], PaymentModuleService.prototype, "createPaymentSession", null);
|
|
494
|
+
__decorate([
|
|
495
|
+
(0, utils_1.InjectTransactionManager)(),
|
|
496
|
+
__param(2, (0, utils_1.EtoContext)()),
|
|
497
|
+
__metadata("design:type", Function),
|
|
498
|
+
__metadata("design:paramtypes", [String, Object, Object]),
|
|
499
|
+
__metadata("design:returntype", Promise)
|
|
500
|
+
], PaymentModuleService.prototype, "createPaymentSession_", null);
|
|
501
|
+
__decorate([
|
|
502
|
+
(0, utils_1.InjectManager)(),
|
|
503
|
+
__param(1, (0, utils_1.EtoContext)()),
|
|
504
|
+
__metadata("design:type", Function),
|
|
505
|
+
__metadata("design:paramtypes", [Object, Object]),
|
|
506
|
+
__metadata("design:returntype", Promise)
|
|
507
|
+
], PaymentModuleService.prototype, "updatePaymentSession", null);
|
|
508
|
+
__decorate([
|
|
509
|
+
(0, utils_1.InjectManager)(),
|
|
510
|
+
__param(1, (0, utils_1.EtoContext)()),
|
|
511
|
+
__metadata("design:type", Function),
|
|
512
|
+
__metadata("design:paramtypes", [String, Object]),
|
|
513
|
+
__metadata("design:returntype", Promise)
|
|
514
|
+
], PaymentModuleService.prototype, "deletePaymentSession", null);
|
|
515
|
+
__decorate([
|
|
516
|
+
(0, utils_1.InjectManager)(),
|
|
517
|
+
__param(2, (0, utils_1.EtoContext)()),
|
|
518
|
+
__metadata("design:type", Function),
|
|
519
|
+
__metadata("design:paramtypes", [String, Object, Object]),
|
|
520
|
+
__metadata("design:returntype", Promise)
|
|
521
|
+
], PaymentModuleService.prototype, "authorizePaymentSession", null);
|
|
522
|
+
__decorate([
|
|
523
|
+
(0, utils_1.InjectTransactionManager)(),
|
|
524
|
+
__param(3, (0, utils_1.EtoContext)()),
|
|
525
|
+
__metadata("design:type", Function),
|
|
526
|
+
__metadata("design:paramtypes", [Object, Object, String, Object]),
|
|
527
|
+
__metadata("design:returntype", Promise)
|
|
528
|
+
], PaymentModuleService.prototype, "authorizePaymentSession_", null);
|
|
529
|
+
__decorate([
|
|
530
|
+
(0, utils_1.InjectManager)()
|
|
531
|
+
// @ts-expect-error
|
|
532
|
+
,
|
|
533
|
+
__param(2, (0, utils_1.EtoContext)()),
|
|
534
|
+
__metadata("design:type", Function),
|
|
535
|
+
__metadata("design:paramtypes", [String, Object, Object]),
|
|
536
|
+
__metadata("design:returntype", Promise)
|
|
537
|
+
], PaymentModuleService.prototype, "retrievePaymentSession", null);
|
|
538
|
+
__decorate([
|
|
539
|
+
(0, utils_1.InjectManager)()
|
|
540
|
+
// @ts-expect-error
|
|
541
|
+
,
|
|
542
|
+
__metadata("design:type", Function),
|
|
543
|
+
__metadata("design:paramtypes", [Object, Object, Object]),
|
|
544
|
+
__metadata("design:returntype", Promise)
|
|
545
|
+
], PaymentModuleService.prototype, "listPaymentSessions", null);
|
|
546
|
+
__decorate([
|
|
547
|
+
(0, utils_1.InjectManager)(),
|
|
548
|
+
__param(1, (0, utils_1.EtoContext)()),
|
|
549
|
+
__metadata("design:type", Function),
|
|
550
|
+
__metadata("design:paramtypes", [Object, Object]),
|
|
551
|
+
__metadata("design:returntype", Promise)
|
|
552
|
+
], PaymentModuleService.prototype, "updatePayment", null);
|
|
553
|
+
__decorate([
|
|
554
|
+
(0, utils_1.InjectManager)(),
|
|
555
|
+
__param(1, (0, utils_1.EtoContext)()),
|
|
556
|
+
__metadata("design:type", Function),
|
|
557
|
+
__metadata("design:paramtypes", [Object, Object]),
|
|
558
|
+
__metadata("design:returntype", Promise)
|
|
559
|
+
], PaymentModuleService.prototype, "capturePayment", null);
|
|
560
|
+
__decorate([
|
|
561
|
+
(0, utils_1.InjectTransactionManager)(),
|
|
562
|
+
__param(1, (0, utils_1.EtoContext)()),
|
|
563
|
+
__metadata("design:type", Function),
|
|
564
|
+
__metadata("design:paramtypes", [Object, Object]),
|
|
565
|
+
__metadata("design:returntype", Promise)
|
|
566
|
+
], PaymentModuleService.prototype, "capturePayment_", null);
|
|
567
|
+
__decorate([
|
|
568
|
+
(0, utils_1.InjectManager)(),
|
|
569
|
+
__param(2, (0, utils_1.EtoContext)()),
|
|
570
|
+
__metadata("design:type", Function),
|
|
571
|
+
__metadata("design:paramtypes", [Object, Boolean, Object]),
|
|
572
|
+
__metadata("design:returntype", Promise)
|
|
573
|
+
], PaymentModuleService.prototype, "capturePaymentFromProvider_", null);
|
|
574
|
+
__decorate([
|
|
575
|
+
(0, utils_1.InjectManager)(),
|
|
576
|
+
__param(1, (0, utils_1.EtoContext)()),
|
|
577
|
+
__metadata("design:type", Function),
|
|
578
|
+
__metadata("design:paramtypes", [Object, Object]),
|
|
579
|
+
__metadata("design:returntype", Promise)
|
|
580
|
+
], PaymentModuleService.prototype, "refundPayment", null);
|
|
581
|
+
__decorate([
|
|
582
|
+
(0, utils_1.InjectTransactionManager)(),
|
|
583
|
+
__param(2, (0, utils_1.EtoContext)()),
|
|
584
|
+
__metadata("design:type", Function),
|
|
585
|
+
__metadata("design:paramtypes", [Object, Object, Object]),
|
|
586
|
+
__metadata("design:returntype", Promise)
|
|
587
|
+
], PaymentModuleService.prototype, "refundPayment_", null);
|
|
588
|
+
__decorate([
|
|
589
|
+
(0, utils_1.InjectManager)(),
|
|
590
|
+
__param(2, (0, utils_1.EtoContext)()),
|
|
591
|
+
__metadata("design:type", Function),
|
|
592
|
+
__metadata("design:paramtypes", [Object, Object, Object]),
|
|
593
|
+
__metadata("design:returntype", Promise)
|
|
594
|
+
], PaymentModuleService.prototype, "refundPaymentFromProvider_", null);
|
|
595
|
+
__decorate([
|
|
596
|
+
(0, utils_1.InjectManager)(),
|
|
597
|
+
__param(1, (0, utils_1.EtoContext)()),
|
|
598
|
+
__metadata("design:type", Function),
|
|
599
|
+
__metadata("design:paramtypes", [String, Object]),
|
|
600
|
+
__metadata("design:returntype", Promise)
|
|
601
|
+
], PaymentModuleService.prototype, "cancelPayment", null);
|
|
602
|
+
__decorate([
|
|
603
|
+
(0, utils_1.InjectManager)(),
|
|
604
|
+
__param(1, (0, utils_1.EtoContext)()),
|
|
605
|
+
__metadata("design:type", Function),
|
|
606
|
+
__metadata("design:paramtypes", [Object, Object]),
|
|
607
|
+
__metadata("design:returntype", Promise)
|
|
608
|
+
], PaymentModuleService.prototype, "getWebhookActionAndData", null);
|
|
609
|
+
__decorate([
|
|
610
|
+
(0, utils_1.InjectManager)(),
|
|
611
|
+
__param(2, (0, utils_1.EtoContext)()),
|
|
612
|
+
__metadata("design:type", Function),
|
|
613
|
+
__metadata("design:paramtypes", [Object, Object, Object]),
|
|
614
|
+
__metadata("design:returntype", Promise)
|
|
615
|
+
], PaymentModuleService.prototype, "listPaymentProviders", null);
|
|
616
|
+
__decorate([
|
|
617
|
+
(0, utils_1.InjectManager)(),
|
|
618
|
+
__param(2, (0, utils_1.EtoContext)()),
|
|
619
|
+
__metadata("design:type", Function),
|
|
620
|
+
__metadata("design:paramtypes", [Object, Object, Object]),
|
|
621
|
+
__metadata("design:returntype", Promise)
|
|
622
|
+
], PaymentModuleService.prototype, "listAndCountPaymentProviders", null);
|
|
623
|
+
__decorate([
|
|
624
|
+
(0, utils_1.InjectManager)(),
|
|
625
|
+
__metadata("design:type", Function),
|
|
626
|
+
__metadata("design:paramtypes", [String, Object]),
|
|
627
|
+
__metadata("design:returntype", Promise)
|
|
628
|
+
], PaymentModuleService.prototype, "maybeUpdatePaymentCollection_", null);
|
|
629
|
+
//# sourceMappingURL=payment-module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"payment-module.js","sourceRoot":"","sources":["../../src/services/payment-module.ts"],"names":[],"mappings":"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"}
|