@develit-services/bank 0.8.9 → 0.8.12
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 +150 -275
- package/dist/database/schema.cjs +1 -1
- package/dist/database/schema.d.cts +2 -2
- package/dist/database/schema.d.mts +2 -2
- package/dist/database/schema.d.ts +2 -2
- package/dist/database/schema.mjs +1 -1
- package/dist/export/worker.cjs +425 -557
- package/dist/export/worker.d.cts +848 -84
- package/dist/export/worker.d.mts +848 -84
- package/dist/export/worker.d.ts +848 -84
- package/dist/export/worker.mjs +425 -557
- package/dist/export/workflows.cjs +16 -16
- package/dist/export/workflows.mjs +16 -16
- package/dist/export/wrangler.cjs +0 -12
- package/dist/export/wrangler.d.cts +1 -8
- package/dist/export/wrangler.d.mts +1 -8
- package/dist/export/wrangler.d.ts +1 -8
- package/dist/export/wrangler.mjs +0 -12
- package/dist/shared/{bank.JVlyPAAb.cjs → bank.BBXoZ5QU.cjs} +26 -13
- package/dist/shared/{bank.CHQ3VSEh.d.ts → bank.BCop1cDT.d.mts} +4 -15
- package/dist/shared/{bank.Bg3Pdwm4.cjs → bank.BsIiXsFH.cjs} +5 -13
- package/dist/shared/{bank.BoZtXQpG.mjs → bank.CR0UlyRi.mjs} +1 -1
- package/dist/shared/{bank.CtnsGHM8.cjs → bank.CUvVxlHy.cjs} +126 -152
- package/dist/shared/{bank.DJnDSYqE.cjs → bank.CVi6R7fr.cjs} +1 -1
- package/dist/shared/{bank.C6jjS1Pl.mjs → bank.CXBeULUL.mjs} +25 -14
- package/dist/shared/{bank.DT6bg8k5.cjs → bank.Cev1E9sk.cjs} +2 -2
- package/dist/shared/{bank.pgyk4j94.d.cts → bank.Cj2Goq7s.d.cts} +104 -176
- package/dist/shared/{bank.pgyk4j94.d.mts → bank.Cj2Goq7s.d.mts} +104 -176
- package/dist/shared/{bank.pgyk4j94.d.ts → bank.Cj2Goq7s.d.ts} +104 -176
- package/dist/shared/{bank.vPWD7Ce4.d.cts → bank.CjTfEd1Q.d.cts} +4 -15
- package/dist/shared/{bank.BtszLapg.mjs → bank.D-O_gmmZ.mjs} +127 -152
- package/dist/shared/{bank.BP_3WMIF.d.cts → bank.DMjtitKo.d.cts} +0 -1
- package/dist/shared/{bank.BP_3WMIF.d.mts → bank.DMjtitKo.d.mts} +0 -1
- package/dist/shared/{bank.BP_3WMIF.d.ts → bank.DMjtitKo.d.ts} +0 -1
- package/dist/shared/{bank.CwuH4spB.d.mts → bank.OlDt7dpb.d.ts} +4 -15
- package/dist/shared/{bank.CbAwwIhZ.mjs → bank.vz1uqEYa.mjs} +5 -11
- package/dist/shared/{bank.B5bZRvgq.mjs → bank.xB9eTN77.mjs} +2 -2
- package/dist/types.cjs +6 -6
- package/dist/types.d.cts +26 -45
- package/dist/types.d.mts +26 -45
- package/dist/types.d.ts +26 -45
- package/dist/types.mjs +3 -3
- package/package.json +1 -1
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
const backendSdk = require('@develit-io/backend-sdk');
|
|
4
4
|
const dateFns = require('date-fns');
|
|
5
5
|
const generalCodes = require('@develit-io/general-codes');
|
|
6
|
-
require('./bank.
|
|
6
|
+
require('./bank.BBXoZ5QU.cjs');
|
|
7
7
|
require('drizzle-orm');
|
|
8
8
|
const jose = require('jose');
|
|
9
9
|
require('node:crypto');
|
|
@@ -14,10 +14,9 @@ function toIncomingPayment(input) {
|
|
|
14
14
|
correlationId: input.correlationId,
|
|
15
15
|
refId: input.refId,
|
|
16
16
|
amount: input.amount,
|
|
17
|
-
direction: "OUTGOING",
|
|
18
17
|
paymentType: input.paymentType,
|
|
19
18
|
currency: input.currency,
|
|
20
|
-
status: "
|
|
19
|
+
status: "OPENED",
|
|
21
20
|
statusReason: null,
|
|
22
21
|
batchId: null,
|
|
23
22
|
initiatedAt: null,
|
|
@@ -49,7 +48,7 @@ function toBatchedPayment(payment) {
|
|
|
49
48
|
function toPreparedPayment(payment, bankRefId, initiatedAt) {
|
|
50
49
|
return {
|
|
51
50
|
...payment,
|
|
52
|
-
status: "
|
|
51
|
+
status: "OPENED",
|
|
53
52
|
bankRefId,
|
|
54
53
|
initiatedAt: initiatedAt ?? /* @__PURE__ */ new Date()
|
|
55
54
|
};
|
|
@@ -73,7 +72,7 @@ function toPaymentRequestInsert(payment, batchId) {
|
|
|
73
72
|
amount: payment.amount,
|
|
74
73
|
paymentType: payment.paymentType,
|
|
75
74
|
currency: payment.currency,
|
|
76
|
-
status: "
|
|
75
|
+
status: "OPENED",
|
|
77
76
|
vs: payment.vs ?? null,
|
|
78
77
|
ss: payment.ss ?? null,
|
|
79
78
|
ks: payment.ks ?? null,
|
|
@@ -95,10 +94,9 @@ function toBatchedPaymentFromPaymentRequest(sp) {
|
|
|
95
94
|
accountId: sp.accountId,
|
|
96
95
|
connectorKey: sp.connectorKey,
|
|
97
96
|
amount: sp.amount,
|
|
98
|
-
direction: "OUTGOING",
|
|
99
97
|
paymentType: sp.paymentType,
|
|
100
98
|
currency: sp.currency,
|
|
101
|
-
status: "
|
|
99
|
+
status: "OPENED",
|
|
102
100
|
statusReason: sp.statusReason,
|
|
103
101
|
batchId: sp.batchId,
|
|
104
102
|
initiatedAt: sp.initiatedAt,
|
|
@@ -354,43 +352,25 @@ const FINBRICKS_ENDPOINTS = {
|
|
|
354
352
|
const mapFinbricksStatus = (status) => {
|
|
355
353
|
switch (status) {
|
|
356
354
|
case "BOOK":
|
|
357
|
-
return "
|
|
355
|
+
return "BOOKED";
|
|
358
356
|
case "PDNG":
|
|
359
357
|
return "PENDING";
|
|
360
358
|
case "CANCL":
|
|
361
|
-
return "
|
|
359
|
+
return "CANCELLED";
|
|
362
360
|
case "RJCT":
|
|
363
|
-
return "
|
|
361
|
+
return "REJECTED";
|
|
364
362
|
case "SCHDL":
|
|
365
|
-
return "
|
|
363
|
+
return "SCHEDULED";
|
|
366
364
|
case "HOLD":
|
|
367
|
-
return "
|
|
365
|
+
return "HOLD";
|
|
368
366
|
case "INFO":
|
|
369
|
-
return "
|
|
367
|
+
return "INFO";
|
|
370
368
|
default:
|
|
371
369
|
return "PENDING";
|
|
372
370
|
}
|
|
373
371
|
};
|
|
374
|
-
const mapFinbricksTransactionStatus = (status
|
|
375
|
-
|
|
376
|
-
case "OPENED":
|
|
377
|
-
return "PREPARED";
|
|
378
|
-
case "AUTHORIZED":
|
|
379
|
-
return finalBankStatus ? "COMPLETED" : "PENDING";
|
|
380
|
-
case "COMPLETED":
|
|
381
|
-
return finalBankStatus ? "COMPLETED" : "PENDING";
|
|
382
|
-
case "BOOKED":
|
|
383
|
-
return finalBankStatus ? "COMPLETED" : "PENDING";
|
|
384
|
-
case "SETTLED":
|
|
385
|
-
return "COMPLETED";
|
|
386
|
-
case "REJECTED":
|
|
387
|
-
return "FAILED";
|
|
388
|
-
case "CLOSED":
|
|
389
|
-
return "FAILED";
|
|
390
|
-
}
|
|
391
|
-
};
|
|
392
|
-
const mapFinbricksBatchStatus = (status) => {
|
|
393
|
-
return status === "REJECTED" ? "SIGNATURE_FAILED" : status === "AUTHORIZED" ? "SIGNED" : void 0;
|
|
372
|
+
const mapFinbricksTransactionStatus = (status) => {
|
|
373
|
+
return status;
|
|
394
374
|
};
|
|
395
375
|
|
|
396
376
|
const mapFinbricksAccountInsert = ({
|
|
@@ -553,7 +533,6 @@ class FinbricksConnector extends IBankConnector {
|
|
|
553
533
|
}) {
|
|
554
534
|
super();
|
|
555
535
|
this.connectorKey = "FINBRICKS";
|
|
556
|
-
this.lifecycleMode = "batch";
|
|
557
536
|
this.connectedAccounts = [];
|
|
558
537
|
this.PROVIDER = provider;
|
|
559
538
|
this.finbricks = new FinbricksClient(
|
|
@@ -823,7 +802,7 @@ class FinbricksConnector extends IBankConnector {
|
|
|
823
802
|
},
|
|
824
803
|
creditorName: payment.creditor.holderName || ""
|
|
825
804
|
},
|
|
826
|
-
callbackUrl: `${this.finbricks.REDIRECT_URI}?type=
|
|
805
|
+
callbackUrl: `${this.finbricks.REDIRECT_URI}?type=paymentRequest&paymentRequestId=${payment.id}`
|
|
827
806
|
}
|
|
828
807
|
})
|
|
829
808
|
);
|
|
@@ -839,7 +818,7 @@ class FinbricksConnector extends IBankConnector {
|
|
|
839
818
|
payment: {
|
|
840
819
|
...payment,
|
|
841
820
|
bankRefId,
|
|
842
|
-
status: "
|
|
821
|
+
status: "OPENED",
|
|
843
822
|
initiatedAt: /* @__PURE__ */ new Date(),
|
|
844
823
|
accountId: this.connectedAccounts.find(
|
|
845
824
|
(acc) => acc.iban === payment.debtorIban
|
|
@@ -877,7 +856,7 @@ class FinbricksConnector extends IBankConnector {
|
|
|
877
856
|
creditorAccountIban: payment.creditor.iban,
|
|
878
857
|
creditorName: payment.creditor.holderName
|
|
879
858
|
},
|
|
880
|
-
callbackUrl: `${this.finbricks.REDIRECT_URI}?type=
|
|
859
|
+
callbackUrl: `${this.finbricks.REDIRECT_URI}?type=paymentRequest&paymentRequestId=${payment.id}`
|
|
881
860
|
}
|
|
882
861
|
})
|
|
883
862
|
);
|
|
@@ -893,7 +872,7 @@ class FinbricksConnector extends IBankConnector {
|
|
|
893
872
|
payment: {
|
|
894
873
|
...payment,
|
|
895
874
|
bankRefId,
|
|
896
|
-
status: "
|
|
875
|
+
status: "OPENED",
|
|
897
876
|
initiatedAt: /* @__PURE__ */ new Date(),
|
|
898
877
|
accountId: this.connectedAccounts.find(
|
|
899
878
|
(acc) => acc.iban === payment.debtorIban
|
|
@@ -916,7 +895,7 @@ class FinbricksConnector extends IBankConnector {
|
|
|
916
895
|
creditorName: payment.creditor.holderName,
|
|
917
896
|
description: payment.message,
|
|
918
897
|
variableSymbol: payment.vs ?? (payment.ss ? void 0 : autoVariableSymbol(payment.id)),
|
|
919
|
-
callbackUrl: `${this.finbricks.REDIRECT_URI}?type=
|
|
898
|
+
callbackUrl: `${this.finbricks.REDIRECT_URI}?type=paymentRequest&paymentRequestId=${payment.id}`,
|
|
920
899
|
paymentProvider: this.PROVIDER
|
|
921
900
|
}
|
|
922
901
|
})
|
|
@@ -932,7 +911,7 @@ class FinbricksConnector extends IBankConnector {
|
|
|
932
911
|
authorizationUrl: response.redirectUrl,
|
|
933
912
|
payment: {
|
|
934
913
|
...payment,
|
|
935
|
-
status: "
|
|
914
|
+
status: "OPENED",
|
|
936
915
|
initiatedAt: /* @__PURE__ */ new Date()
|
|
937
916
|
}
|
|
938
917
|
};
|
|
@@ -1006,37 +985,32 @@ class FinbricksConnector extends IBankConnector {
|
|
|
1006
985
|
message: "Finbricks: failed to fetch payment status"
|
|
1007
986
|
});
|
|
1008
987
|
}
|
|
1009
|
-
return mapFinbricksTransactionStatus(
|
|
1010
|
-
response.resultCode,
|
|
1011
|
-
response.finalBankStatus ?? false
|
|
1012
|
-
);
|
|
988
|
+
return mapFinbricksTransactionStatus(response.resultCode);
|
|
1013
989
|
}
|
|
1014
|
-
|
|
1015
|
-
|
|
1016
|
-
|
|
1017
|
-
|
|
1018
|
-
|
|
1019
|
-
|
|
1020
|
-
|
|
1021
|
-
|
|
1022
|
-
|
|
1023
|
-
|
|
1024
|
-
|
|
1025
|
-
|
|
1026
|
-
|
|
1027
|
-
);
|
|
1028
|
-
if (
|
|
1029
|
-
|
|
1030
|
-
|
|
1031
|
-
|
|
990
|
+
parseAuthorizationCallback(callbackUrl) {
|
|
991
|
+
const url = new URL(callbackUrl);
|
|
992
|
+
const params = url.searchParams;
|
|
993
|
+
const error = params.get("error");
|
|
994
|
+
if (error) {
|
|
995
|
+
return {
|
|
996
|
+
success: false,
|
|
997
|
+
error,
|
|
998
|
+
code: params.get("code")
|
|
999
|
+
};
|
|
1000
|
+
}
|
|
1001
|
+
const type = params.get("type");
|
|
1002
|
+
const paymentRequestId = params.get("paymentRequestId");
|
|
1003
|
+
const batchId = params.get("batchId");
|
|
1004
|
+
if (type === "paymentRequest" && paymentRequestId) {
|
|
1005
|
+
return { success: true, type: "paymentRequest", paymentRequestId };
|
|
1006
|
+
}
|
|
1007
|
+
if (type === "batch" && batchId) {
|
|
1008
|
+
return { success: true, type: "batch", batchId };
|
|
1032
1009
|
}
|
|
1033
|
-
const allAuthorized = response.payments.every(
|
|
1034
|
-
(p) => p.resultCode === "AUTHORIZED" || p.resultCode === "BOOKED" || p.resultCode === "SETTLED" || p.resultCode === "COMPLETED"
|
|
1035
|
-
);
|
|
1036
|
-
const status = allAuthorized ? "SIGNED" : mapFinbricksBatchStatus(response.batchResultCode) ?? currentStatus;
|
|
1037
1010
|
return {
|
|
1038
|
-
|
|
1039
|
-
|
|
1011
|
+
success: false,
|
|
1012
|
+
error: `Unknown callback format: type=${type}`,
|
|
1013
|
+
code: null
|
|
1040
1014
|
};
|
|
1041
1015
|
}
|
|
1042
1016
|
}
|
|
@@ -1062,7 +1036,6 @@ class AirBankConnector extends FinbricksConnector {
|
|
|
1062
1036
|
class CreditasConnector extends FinbricksConnector {
|
|
1063
1037
|
constructor(config) {
|
|
1064
1038
|
super("CREDITAS", config);
|
|
1065
|
-
this.lifecycleMode = "per-payment";
|
|
1066
1039
|
}
|
|
1067
1040
|
/**
|
|
1068
1041
|
* Creditas bank doesn't support batch payments at all.
|
|
@@ -1332,7 +1305,6 @@ class DbuConnector extends IBankConnector {
|
|
|
1332
1305
|
}) {
|
|
1333
1306
|
super();
|
|
1334
1307
|
this.connectorKey = "DBU";
|
|
1335
|
-
this.lifecycleMode = "per-payment";
|
|
1336
1308
|
this.connectedAccounts = [];
|
|
1337
1309
|
this.baseUrl = BASE_URL;
|
|
1338
1310
|
this.username = USERNAME;
|
|
@@ -1448,71 +1420,59 @@ class DbuConnector extends IBankConnector {
|
|
|
1448
1420
|
parsed
|
|
1449
1421
|
};
|
|
1450
1422
|
}
|
|
1451
|
-
|
|
1423
|
+
mapDbuStatusToPaymentRequestStatus(dbuStatus) {
|
|
1452
1424
|
const statusCode = dbuStatus.trim();
|
|
1453
1425
|
switch (statusCode) {
|
|
1426
|
+
// OPENED - New, waiting for authorization
|
|
1427
|
+
case "0":
|
|
1428
|
+
// RQT_STATUS_NEW
|
|
1429
|
+
case "50":
|
|
1430
|
+
// RQT_STATUS_4E (four-eye approval)
|
|
1431
|
+
case "51":
|
|
1432
|
+
return "OPENED";
|
|
1454
1433
|
// COMPLETED - Transaction is fully realized
|
|
1434
|
+
case "2":
|
|
1435
|
+
// RQT_STATUS_PARTIAL_REALIZED
|
|
1455
1436
|
case "3":
|
|
1456
1437
|
return "COMPLETED";
|
|
1457
|
-
//
|
|
1458
|
-
case "
|
|
1459
|
-
return "
|
|
1460
|
-
//
|
|
1461
|
-
case "
|
|
1462
|
-
//
|
|
1438
|
+
// CLOSED - Expired (timeout, not active rejection)
|
|
1439
|
+
case "14":
|
|
1440
|
+
return "CLOSED";
|
|
1441
|
+
// REJECTED - Cancelled, suspended, reverted, rejected
|
|
1442
|
+
case "10":
|
|
1443
|
+
// RQT_STATUS_CANCELLED
|
|
1444
|
+
case "12":
|
|
1445
|
+
// RQT_STATUS_SUSPENDED
|
|
1446
|
+
case "13":
|
|
1447
|
+
// RQT_STATUS_REVERTED
|
|
1448
|
+
case "15":
|
|
1449
|
+
// RQT_STATUS_REJECTED
|
|
1450
|
+
case "33":
|
|
1451
|
+
// RQT_STATUS_HD_CANCELLED
|
|
1452
|
+
case "39":
|
|
1453
|
+
return "REJECTED";
|
|
1454
|
+
// AUTHORIZED - All other processing states
|
|
1455
|
+
default:
|
|
1456
|
+
return "AUTHORIZED";
|
|
1457
|
+
}
|
|
1458
|
+
}
|
|
1459
|
+
mapDbuStatusToPaymentStatus(dbuStatus) {
|
|
1460
|
+
const statusCode = dbuStatus.trim();
|
|
1461
|
+
switch (statusCode) {
|
|
1462
|
+
// BOOKED - Realized
|
|
1463
1463
|
case "2":
|
|
1464
1464
|
// RQT_STATUS_PARTIAL_REALIZED
|
|
1465
|
+
case "3":
|
|
1466
|
+
return "BOOKED";
|
|
1467
|
+
// HOLD - Held/blocked
|
|
1465
1468
|
case "4":
|
|
1466
1469
|
// RQT_STATUS_PARTIAL_HOLDED
|
|
1467
1470
|
case "5":
|
|
1468
|
-
|
|
1469
|
-
|
|
1470
|
-
// RQT_STATUS_WAIT_FOR_COT
|
|
1471
|
-
case "11":
|
|
1472
|
-
// RQT_STATUS_UNHOLDED
|
|
1473
|
-
case "30":
|
|
1474
|
-
// RQT_STATUS_RQ_TO_HD
|
|
1475
|
-
case "31":
|
|
1476
|
-
// RQT_STATUS_RQ_TO_HD_SENT
|
|
1477
|
-
case "32":
|
|
1478
|
-
// RQT_STATUS_WAIT_TO_HD_VERIFY
|
|
1479
|
-
case "34":
|
|
1480
|
-
// RQT_STATUS_HD_NEW_COLLECTION
|
|
1481
|
-
case "35":
|
|
1482
|
-
// RQT_STATUS_HD_RQ_COLLECTION
|
|
1471
|
+
return "HOLD";
|
|
1472
|
+
// SCHEDULED - SIPO charge
|
|
1483
1473
|
case "40":
|
|
1484
|
-
|
|
1485
|
-
|
|
1486
|
-
// RQT_STATUS_4E
|
|
1487
|
-
case "51":
|
|
1488
|
-
// RQT_STATUS_4E_EDIT
|
|
1489
|
-
case "60":
|
|
1490
|
-
// RQT_STATUS_READY_TO_CANCELLED
|
|
1491
|
-
case "61":
|
|
1492
|
-
// RQT_STATUS_READY_TO_UNHOLDED
|
|
1493
|
-
case "63":
|
|
1494
|
-
// RQT_STATUS_READY_TO_REVERTED
|
|
1495
|
-
case "64":
|
|
1496
|
-
// RQT_STATUS_CC_CREATED
|
|
1497
|
-
case "65":
|
|
1498
|
-
// RQT_STATUS_CC_WAIT_FOR_RATE
|
|
1499
|
-
case "66":
|
|
1500
|
-
// RQT_STATUS_WAIT_FOR_DEBTOR
|
|
1501
|
-
case "70":
|
|
1502
|
-
// RQT_STATUS_RQ_TO_SEPA
|
|
1503
|
-
case "71":
|
|
1504
|
-
// RQT_STATUS_RQ_TO_SEPA_SENT
|
|
1505
|
-
case "72":
|
|
1506
|
-
// RQT_STATUS_RQ_TO_SEPA_CNC
|
|
1507
|
-
case "73":
|
|
1508
|
-
// RQT_STATUS_RQ_TO_SEPA_CNC_URG
|
|
1509
|
-
case "74":
|
|
1510
|
-
// RQT_STATUS_RQ_TO_SEPA_CNC_CLIENT
|
|
1511
|
-
case "75":
|
|
1512
|
-
// RQT_STATUS_RQ_TO_SEPA_056
|
|
1513
|
-
case "80":
|
|
1514
|
-
return "PENDING";
|
|
1515
|
-
// FAILED - Transaction is cancelled, rejected, reverted, suspended or expired
|
|
1474
|
+
return "SCHEDULED";
|
|
1475
|
+
// CANCELLED - Cancelled, suspended, reverted, expired
|
|
1516
1476
|
case "10":
|
|
1517
1477
|
// RQT_STATUS_CANCELLED
|
|
1518
1478
|
case "12":
|
|
@@ -1521,13 +1481,14 @@ class DbuConnector extends IBankConnector {
|
|
|
1521
1481
|
// RQT_STATUS_REVERTED
|
|
1522
1482
|
case "14":
|
|
1523
1483
|
// RQT_STATUS_EXPIRED
|
|
1524
|
-
case "15":
|
|
1525
|
-
// RQT_STATUS_REJECTED
|
|
1526
1484
|
case "33":
|
|
1527
1485
|
// RQT_STATUS_HD_CANCELLED
|
|
1528
1486
|
case "39":
|
|
1529
|
-
return "
|
|
1530
|
-
//
|
|
1487
|
+
return "CANCELLED";
|
|
1488
|
+
// REJECTED - Explicitly rejected by bank
|
|
1489
|
+
case "15":
|
|
1490
|
+
return "REJECTED";
|
|
1491
|
+
// PENDING - All other processing states
|
|
1531
1492
|
default:
|
|
1532
1493
|
return "PENDING";
|
|
1533
1494
|
}
|
|
@@ -1622,7 +1583,7 @@ class DbuConnector extends IBankConnector {
|
|
|
1622
1583
|
authorizationUrl: `${this.txAuthUri}/${bankRefId}`,
|
|
1623
1584
|
payment: {
|
|
1624
1585
|
...payment,
|
|
1625
|
-
status: "
|
|
1586
|
+
status: "OPENED",
|
|
1626
1587
|
bankRefId
|
|
1627
1588
|
}
|
|
1628
1589
|
};
|
|
@@ -1676,7 +1637,7 @@ class DbuConnector extends IBankConnector {
|
|
|
1676
1637
|
authorizationUrl: `${this.txAuthUri}/${bankRefId}`,
|
|
1677
1638
|
payment: {
|
|
1678
1639
|
...payment,
|
|
1679
|
-
status: "
|
|
1640
|
+
status: "OPENED",
|
|
1680
1641
|
bankRefId
|
|
1681
1642
|
}
|
|
1682
1643
|
};
|
|
@@ -1773,14 +1734,28 @@ class DbuConnector extends IBankConnector {
|
|
|
1773
1734
|
`/required-transactions/${paymentId}`,
|
|
1774
1735
|
backendSdk.uuidv4()
|
|
1775
1736
|
);
|
|
1776
|
-
return this.
|
|
1737
|
+
return this.mapDbuStatusToPaymentRequestStatus(response.status);
|
|
1777
1738
|
}
|
|
1778
|
-
|
|
1779
|
-
|
|
1780
|
-
|
|
1739
|
+
parseAuthorizationCallback(callbackUrl) {
|
|
1740
|
+
const url = new URL(callbackUrl);
|
|
1741
|
+
const params = url.searchParams;
|
|
1742
|
+
const error = params.get("error");
|
|
1743
|
+
if (error) {
|
|
1744
|
+
return { success: false, error, code: params.get("code") };
|
|
1745
|
+
}
|
|
1746
|
+
const type = params.get("type");
|
|
1747
|
+
const paymentRequestId = params.get("paymentRequestId");
|
|
1748
|
+
const batchId = params.get("batchId");
|
|
1749
|
+
if (type === "paymentRequest" && paymentRequestId) {
|
|
1750
|
+
return { success: true, type: "paymentRequest", paymentRequestId };
|
|
1751
|
+
}
|
|
1752
|
+
if (type === "batch" && batchId) {
|
|
1753
|
+
return { success: true, type: "batch", batchId };
|
|
1754
|
+
}
|
|
1781
1755
|
return {
|
|
1782
|
-
|
|
1783
|
-
|
|
1756
|
+
success: false,
|
|
1757
|
+
error: `Unknown callback format: type=${type}`,
|
|
1758
|
+
code: null
|
|
1784
1759
|
};
|
|
1785
1760
|
}
|
|
1786
1761
|
}
|
|
@@ -1789,7 +1764,6 @@ class ErsteConnector extends IBankConnector {
|
|
|
1789
1764
|
constructor(config) {
|
|
1790
1765
|
super();
|
|
1791
1766
|
this.connectorKey = "ERSTE";
|
|
1792
|
-
this.lifecycleMode = "batch";
|
|
1793
1767
|
this.accessToken = null;
|
|
1794
1768
|
this.API_KEY = config.API_KEY;
|
|
1795
1769
|
this.CLIENT_ID = config.CLIENT_ID;
|
|
@@ -1926,9 +1900,8 @@ class ErsteConnector extends IBankConnector {
|
|
|
1926
1900
|
return {
|
|
1927
1901
|
...payment,
|
|
1928
1902
|
bankRefId: erstePayment.paymentIdentification.transactionIdentification,
|
|
1929
|
-
direction: "OUTGOING",
|
|
1930
1903
|
paymentType: payment.paymentType,
|
|
1931
|
-
status: "
|
|
1904
|
+
status: "OPENED",
|
|
1932
1905
|
initiatedAt: /* @__PURE__ */ new Date(),
|
|
1933
1906
|
accountId: this.connectedAccounts.find(
|
|
1934
1907
|
(acc) => acc.iban === payment.debtor.iban
|
|
@@ -2088,7 +2061,7 @@ class ErsteConnector extends IBankConnector {
|
|
|
2088
2061
|
ss: symbols.ss,
|
|
2089
2062
|
ks: symbols.ks,
|
|
2090
2063
|
processedAt: dateFns.parseISO(payment.bookingDate.date),
|
|
2091
|
-
status: "
|
|
2064
|
+
status: "BOOKED"
|
|
2092
2065
|
};
|
|
2093
2066
|
return {
|
|
2094
2067
|
raw: payment,
|
|
@@ -2100,11 +2073,13 @@ class ErsteConnector extends IBankConnector {
|
|
|
2100
2073
|
});
|
|
2101
2074
|
return payments;
|
|
2102
2075
|
}
|
|
2103
|
-
getPaymentStatus(_) {
|
|
2104
|
-
throw new Error("
|
|
2076
|
+
async getPaymentStatus(_) {
|
|
2077
|
+
throw new Error("Erste connector: getPaymentStatus not implemented");
|
|
2105
2078
|
}
|
|
2106
|
-
|
|
2107
|
-
throw new Error(
|
|
2079
|
+
parseAuthorizationCallback(_callbackUrl) {
|
|
2080
|
+
throw new Error(
|
|
2081
|
+
"Erste connector: parseAuthorizationCallback not implemented"
|
|
2082
|
+
);
|
|
2108
2083
|
}
|
|
2109
2084
|
}
|
|
2110
2085
|
|
|
@@ -2121,7 +2096,6 @@ class MockConnector extends IBankConnector {
|
|
|
2121
2096
|
constructor() {
|
|
2122
2097
|
super();
|
|
2123
2098
|
this.connectorKey = "MOCK";
|
|
2124
|
-
this.lifecycleMode = "batch";
|
|
2125
2099
|
this.connectedAccounts = [];
|
|
2126
2100
|
}
|
|
2127
2101
|
supportsBatch(_paymentType) {
|
|
@@ -2143,7 +2117,7 @@ class MockConnector extends IBankConnector {
|
|
|
2143
2117
|
const preparedPayment = {
|
|
2144
2118
|
...payment,
|
|
2145
2119
|
bankRefId: backendSdk.uuidv4(),
|
|
2146
|
-
status: "
|
|
2120
|
+
status: "OPENED",
|
|
2147
2121
|
initiatedAt: /* @__PURE__ */ new Date()
|
|
2148
2122
|
};
|
|
2149
2123
|
return {
|
|
@@ -2165,7 +2139,7 @@ class MockConnector extends IBankConnector {
|
|
|
2165
2139
|
const preparedPayments = payments.map((payment) => ({
|
|
2166
2140
|
...payment,
|
|
2167
2141
|
bankRefId: backendSdk.uuidv4(),
|
|
2168
|
-
status: "
|
|
2142
|
+
status: "OPENED",
|
|
2169
2143
|
initiatedAt: /* @__PURE__ */ new Date()
|
|
2170
2144
|
}));
|
|
2171
2145
|
return {
|
|
@@ -2187,12 +2161,13 @@ class MockConnector extends IBankConnector {
|
|
|
2187
2161
|
return [];
|
|
2188
2162
|
}
|
|
2189
2163
|
async getPaymentStatus(_) {
|
|
2190
|
-
return "
|
|
2164
|
+
return "SETTLED";
|
|
2191
2165
|
}
|
|
2192
|
-
|
|
2166
|
+
parseAuthorizationCallback(_callbackUrl) {
|
|
2193
2167
|
return {
|
|
2194
|
-
|
|
2195
|
-
|
|
2168
|
+
success: true,
|
|
2169
|
+
type: "paymentRequest",
|
|
2170
|
+
paymentRequestId: "mock-pr-id"
|
|
2196
2171
|
};
|
|
2197
2172
|
}
|
|
2198
2173
|
}
|
|
@@ -2209,7 +2184,6 @@ exports.MockCobsConnector = MockCobsConnector;
|
|
|
2209
2184
|
exports.MockConnector = MockConnector;
|
|
2210
2185
|
exports.assignAccount = assignAccount;
|
|
2211
2186
|
exports.initiateConnector = initiateConnector;
|
|
2212
|
-
exports.mapFinbricksTransactionStatus = mapFinbricksTransactionStatus;
|
|
2213
2187
|
exports.signFinbricksJws = signFinbricksJws;
|
|
2214
2188
|
exports.toBatchedPayment = toBatchedPayment;
|
|
2215
2189
|
exports.toBatchedPaymentFromPaymentRequest = toBatchedPaymentFromPaymentRequest;
|
|
@@ -11,24 +11,34 @@ import { createInsertSchema, createUpdateSchema, createSelectSchema } from 'driz
|
|
|
11
11
|
const PAYMENT_TYPES = ["SEPA", "SWIFT", "DOMESTIC", "UNKNOWN"];
|
|
12
12
|
const CHARGE_BEARERS = ["SHA", "OUR", "BEN"];
|
|
13
13
|
const INSTRUCTION_PRIORITIES = ["NORM", "HIGH", "INST"];
|
|
14
|
+
const PAYMENT_REQUEST_STATUSES = [
|
|
15
|
+
"OPENED",
|
|
16
|
+
"AUTHORIZED",
|
|
17
|
+
"COMPLETED",
|
|
18
|
+
"BOOKED",
|
|
19
|
+
"SETTLED",
|
|
20
|
+
"REJECTED",
|
|
21
|
+
"CLOSED"
|
|
22
|
+
];
|
|
14
23
|
const PAYMENT_STATUSES = [
|
|
15
|
-
"CREATED",
|
|
16
|
-
"PREPARED",
|
|
17
|
-
"SIGNED",
|
|
18
24
|
"PENDING",
|
|
19
|
-
"
|
|
20
|
-
"
|
|
25
|
+
"PROCESSING",
|
|
26
|
+
"BOOKED",
|
|
27
|
+
"CANCELLED",
|
|
28
|
+
"REJECTED",
|
|
29
|
+
"SCHEDULED",
|
|
30
|
+
"HOLD",
|
|
31
|
+
"INFO"
|
|
21
32
|
];
|
|
22
33
|
const PAYMENT_DIRECTIONS = ["INCOMING", "OUTGOING"];
|
|
23
34
|
const BATCH_STATUSES = [
|
|
24
|
-
"OPEN",
|
|
25
35
|
"PROCESSING",
|
|
26
36
|
"READY_TO_SIGN",
|
|
27
|
-
"
|
|
28
|
-
"
|
|
29
|
-
"FAILED"
|
|
30
|
-
"COMPLETED"
|
|
37
|
+
"AUTHORIZED",
|
|
38
|
+
"COMPLETED",
|
|
39
|
+
"FAILED"
|
|
31
40
|
];
|
|
41
|
+
const BATCH_MODES = ["NATIVE", "SINGLE"];
|
|
32
42
|
const ACCOUNT_STATUSES = ["AUTHORIZED", "DISABLED", "EXPIRED"];
|
|
33
43
|
const COUNTRY_CODES = COUNTRY_CODES_2;
|
|
34
44
|
|
|
@@ -130,7 +140,8 @@ const batch = sqliteTable("batch", {
|
|
|
130
140
|
paymentType: text("payment_type", {
|
|
131
141
|
enum: PAYMENT_TYPES
|
|
132
142
|
}).$type(),
|
|
133
|
-
paymentsChecksum: text("payments_checksum")
|
|
143
|
+
paymentsChecksum: text("payments_checksum"),
|
|
144
|
+
batchMode: text("batch_mode", { enum: BATCH_MODES }).$type()
|
|
134
145
|
});
|
|
135
146
|
|
|
136
147
|
const payment = sqliteTable(
|
|
@@ -149,7 +160,7 @@ const payment = sqliteTable(
|
|
|
149
160
|
direction: text("direction").$type().notNull(),
|
|
150
161
|
paymentType: text("payment_type").$type().notNull(),
|
|
151
162
|
currency: text("currency").$type().notNull(),
|
|
152
|
-
status: text("status").$type().notNull(),
|
|
163
|
+
status: text("status", { enum: PAYMENT_STATUSES }).$type().notNull(),
|
|
153
164
|
statusReason: text("status_reason"),
|
|
154
165
|
batchId: text("bank_execution_batch_id"),
|
|
155
166
|
initiatedAt: integer("initiated_at", {
|
|
@@ -208,7 +219,7 @@ const paymentRequest = sqliteTable(
|
|
|
208
219
|
amount: real("amount").notNull(),
|
|
209
220
|
paymentType: text("payment_type", { enum: PAYMENT_TYPES }).$type().notNull(),
|
|
210
221
|
currency: text("currency").$type().notNull(),
|
|
211
|
-
status: text("status", { enum:
|
|
222
|
+
status: text("status", { enum: PAYMENT_REQUEST_STATUSES }).$type().notNull(),
|
|
212
223
|
statusReason: text("status_reason"),
|
|
213
224
|
authorizationUrl: text("authorization_url"),
|
|
214
225
|
initiatedAt: integer("initiated_at", { mode: "timestamp_ms" }),
|
|
@@ -258,4 +269,4 @@ const paymentRequestRelations = relations(paymentRequest, ({ one }) => ({
|
|
|
258
269
|
})
|
|
259
270
|
}));
|
|
260
271
|
|
|
261
|
-
export { ACCOUNT_STATUSES as A,
|
|
272
|
+
export { ACCOUNT_STATUSES as A, BATCH_MODES as B, CHARGE_BEARERS as C, INSTRUCTION_PRIORITIES as I, PAYMENT_DIRECTIONS as P, TOKEN_TYPES as T, BATCH_STATUSES as a, CONNECTOR_KEYS as b, COUNTRY_CODES as c, CREDENTIALS_TYPES as d, PAYMENT_REQUEST_STATUSES as e, PAYMENT_STATUSES as f, PAYMENT_TYPES as g, accountCredentialsInsertSchema as h, accountCredentialsSelectSchema as i, accountCredentialsUpdateSchema as j, accountInsertSchema as k, accountSelectSchema as l, accountUpdateSchema as m, ottSelectSchema as n, ottInsertSchema as o, ottUpdateSchema as p, account as q, accountCredentials as r, batch as s, ott as t, payment as u, paymentRelations as v, paymentRequest as w, paymentRequestRelations as x };
|
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
const drizzleOrm = require('drizzle-orm');
|
|
4
4
|
const backendSdk = require('@develit-io/backend-sdk');
|
|
5
|
-
require('./bank.
|
|
5
|
+
require('./bank.BBXoZ5QU.cjs');
|
|
6
6
|
require('date-fns');
|
|
7
7
|
require('jose');
|
|
8
8
|
require('@develit-io/general-codes');
|
|
9
9
|
const node_crypto = require('node:crypto');
|
|
10
|
-
const database_schema = require('./bank.
|
|
10
|
+
const database_schema = require('./bank.CVi6R7fr.cjs');
|
|
11
11
|
|
|
12
12
|
const createPaymentCommand = (db, { payment }) => {
|
|
13
13
|
return {
|