@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.
Files changed (95) hide show
  1. package/README.md +3 -0
  2. package/dist/index.d.ts +7 -0
  3. package/dist/index.d.ts.map +1 -0
  4. package/dist/index.js +13 -0
  5. package/dist/index.js.map +1 -0
  6. package/dist/joiner-config.d.ts +2 -0
  7. package/dist/joiner-config.d.ts.map +1 -0
  8. package/dist/joiner-config.js +26 -0
  9. package/dist/joiner-config.js.map +1 -0
  10. package/dist/loaders/index.d.ts +2 -0
  11. package/dist/loaders/index.d.ts.map +1 -0
  12. package/dist/loaders/index.js +18 -0
  13. package/dist/loaders/index.js.map +1 -0
  14. package/dist/loaders/providers.d.ts +6 -0
  15. package/dist/loaders/providers.d.ts.map +1 -0
  16. package/dist/loaders/providers.js +70 -0
  17. package/dist/loaders/providers.js.map +1 -0
  18. package/dist/migrations/Migration20240225134525.d.ts +5 -0
  19. package/dist/migrations/Migration20240225134525.d.ts.map +1 -0
  20. package/dist/migrations/Migration20240225134525.js +272 -0
  21. package/dist/migrations/Migration20240225134525.js.map +1 -0
  22. package/dist/migrations/Migration20240806072619.d.ts +6 -0
  23. package/dist/migrations/Migration20240806072619.d.ts.map +1 -0
  24. package/dist/migrations/Migration20240806072619.js +38 -0
  25. package/dist/migrations/Migration20240806072619.js.map +1 -0
  26. package/dist/migrations/Migration20241211151053.d.ts +6 -0
  27. package/dist/migrations/Migration20241211151053.d.ts.map +1 -0
  28. package/dist/migrations/Migration20241211151053.js +34 -0
  29. package/dist/migrations/Migration20241211151053.js.map +1 -0
  30. package/dist/models/capture.d.ts +87 -0
  31. package/dist/models/capture.d.ts.map +1 -0
  32. package/dist/models/capture.js +25 -0
  33. package/dist/models/capture.js.map +1 -0
  34. package/dist/models/index.d.ts +9 -0
  35. package/dist/models/index.d.ts.map +1 -0
  36. package/dist/models/index.js +23 -0
  37. package/dist/models/index.js.map +1 -0
  38. package/dist/models/payment-collection.d.ts +160 -0
  39. package/dist/models/payment-collection.d.ts.map +1 -0
  40. package/dist/models/payment-collection.js +44 -0
  41. package/dist/models/payment-collection.js.map +1 -0
  42. package/dist/models/payment-method-token.d.ts +11 -0
  43. package/dist/models/payment-method-token.d.ts.map +1 -0
  44. package/dist/models/payment-method-token.js +14 -0
  45. package/dist/models/payment-method-token.js.map +1 -0
  46. package/dist/models/payment-provider.d.ts +160 -0
  47. package/dist/models/payment-provider.d.ts.map +1 -0
  48. package/dist/models/payment-provider.js +16 -0
  49. package/dist/models/payment-provider.js.map +1 -0
  50. package/dist/models/payment-session.d.ts +137 -0
  51. package/dist/models/payment-session.d.ts.map +1 -0
  52. package/dist/models/payment-session.js +38 -0
  53. package/dist/models/payment-session.js.map +1 -0
  54. package/dist/models/payment.d.ts +88 -0
  55. package/dist/models/payment.d.ts.map +1 -0
  56. package/dist/models/payment.js +55 -0
  57. package/dist/models/payment.js.map +1 -0
  58. package/dist/models/refund-reason.d.ts +81 -0
  59. package/dist/models/refund-reason.d.ts.map +1 -0
  60. package/dist/models/refund-reason.js +18 -0
  61. package/dist/models/refund-reason.js.map +1 -0
  62. package/dist/models/refund.d.ts +87 -0
  63. package/dist/models/refund.d.ts.map +1 -0
  64. package/dist/models/refund.js +32 -0
  65. package/dist/models/refund.js.map +1 -0
  66. package/dist/providers/index.d.ts +2 -0
  67. package/dist/providers/index.d.ts.map +1 -0
  68. package/dist/providers/index.js +9 -0
  69. package/dist/providers/index.js.map +1 -0
  70. package/dist/providers/system.d.ts +22 -0
  71. package/dist/providers/system.d.ts.map +1 -0
  72. package/dist/providers/system.js +46 -0
  73. package/dist/providers/system.js.map +1 -0
  74. package/dist/schema/index.d.ts +3 -0
  75. package/dist/schema/index.d.ts.map +1 -0
  76. package/dist/schema/index.js +114 -0
  77. package/dist/schema/index.js.map +1 -0
  78. package/dist/services/index.d.ts +3 -0
  79. package/dist/services/index.d.ts.map +1 -0
  80. package/dist/services/index.js +11 -0
  81. package/dist/services/index.js.map +1 -0
  82. package/dist/services/payment-module.d.ts +78 -0
  83. package/dist/services/payment-module.d.ts.map +1 -0
  84. package/dist/services/payment-module.js +629 -0
  85. package/dist/services/payment-module.js.map +1 -0
  86. package/dist/services/payment-provider.d.ts +27 -0
  87. package/dist/services/payment-provider.d.ts.map +1 -0
  88. package/dist/services/payment-provider.js +111 -0
  89. package/dist/services/payment-provider.js.map +1 -0
  90. package/dist/tsconfig.tsbuildinfo +1 -0
  91. package/dist/types/index.d.ts +24 -0
  92. package/dist/types/index.d.ts.map +1 -0
  93. package/dist/types/index.js +3 -0
  94. package/dist/types/index.js.map +1 -0
  95. 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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"}