@develit-services/bank 2.2.2 → 2.3.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/dist/database/schema.cjs +2 -1
- package/dist/database/schema.d.cts +1 -1
- package/dist/database/schema.d.mts +1 -1
- package/dist/database/schema.d.ts +1 -1
- package/dist/database/schema.mjs +2 -1
- package/dist/export/worker.cjs +15 -15
- package/dist/export/worker.d.cts +25 -4
- package/dist/export/worker.d.mts +25 -4
- package/dist/export/worker.d.ts +25 -4
- package/dist/export/worker.mjs +4 -4
- package/dist/export/workflows.cjs +11 -9
- package/dist/export/workflows.mjs +7 -5
- package/dist/shared/{bank.UBWdag5k.mjs → bank.BSiA1m0B.mjs} +1 -1
- package/dist/shared/{bank.Cw3K7nIh.d.cts → bank.C5NCnZWS.d.ts} +1 -1
- package/dist/shared/{bank.COez_hEH.d.cts → bank.CC4p6Jf-.d.cts} +82 -4
- package/dist/shared/{bank.COez_hEH.d.mts → bank.CC4p6Jf-.d.mts} +82 -4
- package/dist/shared/{bank.COez_hEH.d.ts → bank.CC4p6Jf-.d.ts} +82 -4
- package/dist/shared/{bank.t019WQuV.d.mts → bank.CxAHQOwW.d.cts} +1 -1
- package/dist/shared/{bank.B0EWZbAs.cjs → bank.DICdNw3T.cjs} +1 -1
- package/dist/shared/{bank.VB_ZSWGd.d.ts → bank.Dl3mNNS2.d.mts} +1 -1
- package/dist/shared/{bank.BDJqvCeZ.cjs → bank.avgw-IRO.cjs} +394 -15
- package/dist/shared/{bank.B9HFqAex.mjs → bank.gVOunsjq.mjs} +358 -17
- package/dist/types.cjs +25 -24
- package/dist/types.d.cts +30 -8
- package/dist/types.d.mts +30 -8
- package/dist/types.d.ts +30 -8
- package/dist/types.mjs +5 -5
- package/package.json +1 -1
- package/dist/shared/bank.C7MA33AX.mjs +0 -325
- package/dist/shared/bank.CIWYI18z.cjs +0 -363
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
const backendSdk = require('@develit-io/backend-sdk');
|
|
4
|
+
const sqliteCore = require('drizzle-orm/sqlite-core');
|
|
4
5
|
const dateFns = require('date-fns');
|
|
5
|
-
const generalCodes = require('@develit-io/general-codes');
|
|
6
|
-
require('./bank.CIWYI18z.cjs');
|
|
7
|
-
require('drizzle-orm');
|
|
8
6
|
const jose = require('jose');
|
|
7
|
+
const zod = require('zod');
|
|
8
|
+
const generalCodes = require('@develit-io/general-codes');
|
|
9
|
+
const relations = require('drizzle-orm/relations');
|
|
10
|
+
const drizzleOrm = require('drizzle-orm');
|
|
9
11
|
require('node:crypto');
|
|
12
|
+
const drizzleZod = require('drizzle-zod');
|
|
10
13
|
|
|
11
14
|
function toIncomingPayment(input) {
|
|
12
15
|
return {
|
|
@@ -669,7 +672,8 @@ class FinbricksConnector extends IBankConnector {
|
|
|
669
672
|
connectorKey: this.PROVIDER,
|
|
670
673
|
currency: acc.currency,
|
|
671
674
|
iban: acc.identification.iban,
|
|
672
|
-
id: acc.id
|
|
675
|
+
id: acc.id,
|
|
676
|
+
config: null
|
|
673
677
|
}))
|
|
674
678
|
);
|
|
675
679
|
return {
|
|
@@ -880,6 +884,8 @@ class FinbricksConnector extends IBankConnector {
|
|
|
880
884
|
);
|
|
881
885
|
const clientId = await this.getClientId(debtorAccount.id);
|
|
882
886
|
const creditorAddress = mapToFinbricksAddress(payment.creditor.address);
|
|
887
|
+
const message = payment.message?.trim() ?? "";
|
|
888
|
+
const unstructured = message.length >= 3 ? message.slice(0, 140) : "Platba";
|
|
883
889
|
const bankRefId = backendSdk.uuidv4();
|
|
884
890
|
const [response, error] = await backendSdk.useResult(
|
|
885
891
|
this.finbricks.request({
|
|
@@ -905,6 +911,7 @@ class FinbricksConnector extends IBankConnector {
|
|
|
905
911
|
creditorName: payment.creditor.holderName,
|
|
906
912
|
...creditorAddress && { postalAddress: creditorAddress }
|
|
907
913
|
},
|
|
914
|
+
remittanceInformation: { unstructured },
|
|
908
915
|
callbackUrl: `${this.finbricks.REDIRECT_URI}?type=paymentRequest&paymentRequestId=${payment.id}`
|
|
909
916
|
}
|
|
910
917
|
})
|
|
@@ -1073,6 +1080,40 @@ class CsobConnector extends FinbricksConnector {
|
|
|
1073
1080
|
}
|
|
1074
1081
|
}
|
|
1075
1082
|
|
|
1083
|
+
const PAYMENT_TYPES = ["SEPA", "SWIFT", "DOMESTIC", "UNKNOWN"];
|
|
1084
|
+
const CHARGE_BEARERS = ["SHA", "OUR", "BEN"];
|
|
1085
|
+
const INSTRUCTION_PRIORITIES = ["NORM", "HIGH", "INST"];
|
|
1086
|
+
const PAYMENT_REQUEST_STATUSES = [
|
|
1087
|
+
"OPENED",
|
|
1088
|
+
"AUTHORIZED",
|
|
1089
|
+
"COMPLETED",
|
|
1090
|
+
"BOOKED",
|
|
1091
|
+
"SETTLED",
|
|
1092
|
+
"REJECTED",
|
|
1093
|
+
"CLOSED"
|
|
1094
|
+
];
|
|
1095
|
+
const PAYMENT_STATUSES = [
|
|
1096
|
+
"PENDING",
|
|
1097
|
+
"PROCESSING",
|
|
1098
|
+
"BOOKED",
|
|
1099
|
+
"CANCELLED",
|
|
1100
|
+
"REJECTED",
|
|
1101
|
+
"SCHEDULED",
|
|
1102
|
+
"HOLD",
|
|
1103
|
+
"INFO"
|
|
1104
|
+
];
|
|
1105
|
+
const PAYMENT_DIRECTIONS = ["INCOMING", "OUTGOING"];
|
|
1106
|
+
const BATCH_STATUSES = [
|
|
1107
|
+
"PROCESSING",
|
|
1108
|
+
"READY_TO_SIGN",
|
|
1109
|
+
"AUTHORIZED",
|
|
1110
|
+
"COMPLETED",
|
|
1111
|
+
"FAILED"
|
|
1112
|
+
];
|
|
1113
|
+
const BATCH_MODES = ["NATIVE", "SINGLE"];
|
|
1114
|
+
const ACCOUNT_STATUSES = ["AUTHORIZED", "DISABLED", "EXPIRED"];
|
|
1115
|
+
const COUNTRY_CODES = generalCodes.COUNTRY_CODES_2;
|
|
1116
|
+
|
|
1076
1117
|
class AirBankConnector extends FinbricksConnector {
|
|
1077
1118
|
constructor(config) {
|
|
1078
1119
|
super("AIRBANK", config);
|
|
@@ -1331,6 +1372,14 @@ const calculateCzechIban = (accountNumber, bankCode) => {
|
|
|
1331
1372
|
return `CZ${checkDigits}${basicIban}`;
|
|
1332
1373
|
};
|
|
1333
1374
|
|
|
1375
|
+
const dbuAccountConfigSchema = zod.z.object({
|
|
1376
|
+
with4EyeApproval: zod.z.enum(["Y", "N"]).default("Y"),
|
|
1377
|
+
channelCode: zod.z.string().default("WWW"),
|
|
1378
|
+
actionTypeCode: zod.z.string().default("TRANSFER"),
|
|
1379
|
+
transactionTypeCode: zod.z.string().default("TRANSFER"),
|
|
1380
|
+
partialRealization: zod.z.enum(["Y", "N"]).default("N"),
|
|
1381
|
+
forceRealization: zod.z.enum(["Y", "N"]).default("N")
|
|
1382
|
+
});
|
|
1334
1383
|
class DbuConnector extends IBankConnector {
|
|
1335
1384
|
constructor({
|
|
1336
1385
|
BASE_URL,
|
|
@@ -1352,7 +1401,10 @@ class DbuConnector extends IBankConnector {
|
|
|
1352
1401
|
this.api = API;
|
|
1353
1402
|
this.redirectUri = REDIRECT_URI;
|
|
1354
1403
|
this.txAuthUri = TX_AUTH_URI;
|
|
1355
|
-
this.connectedAccounts = connectedAccounts
|
|
1404
|
+
this.connectedAccounts = connectedAccounts.map((acc) => ({
|
|
1405
|
+
...acc,
|
|
1406
|
+
config: dbuAccountConfigSchema.parse(acc.config ?? {})
|
|
1407
|
+
}));
|
|
1356
1408
|
this.sessionId = backendSdk.uuidv4();
|
|
1357
1409
|
this.allowedPostEndpoints = [
|
|
1358
1410
|
"/required-transactions",
|
|
@@ -1607,7 +1659,7 @@ class DbuConnector extends IBankConnector {
|
|
|
1607
1659
|
return [];
|
|
1608
1660
|
}
|
|
1609
1661
|
// ── Single payment methods ──────────────────────────────────────────
|
|
1610
|
-
|
|
1662
|
+
resolveAccount(payment) {
|
|
1611
1663
|
const account = this.connectedAccounts.find(
|
|
1612
1664
|
(acc) => acc.id === payment.accountId
|
|
1613
1665
|
);
|
|
@@ -1617,7 +1669,10 @@ class DbuConnector extends IBankConnector {
|
|
|
1617
1669
|
code: "DBU_ACCOUNT_NOT_FOUND"
|
|
1618
1670
|
});
|
|
1619
1671
|
}
|
|
1620
|
-
return
|
|
1672
|
+
return account;
|
|
1673
|
+
}
|
|
1674
|
+
resolveIdAccountDebit(payment) {
|
|
1675
|
+
return Number(this.resolveAccount(payment).bankRefId);
|
|
1621
1676
|
}
|
|
1622
1677
|
resolveAccountDetails(account) {
|
|
1623
1678
|
if (account.number && account.bankCode) {
|
|
@@ -1634,13 +1689,15 @@ class DbuConnector extends IBankConnector {
|
|
|
1634
1689
|
}
|
|
1635
1690
|
async initiateInstantPayment(payment) {
|
|
1636
1691
|
const creditor = this.resolveAccountDetails(payment.creditor);
|
|
1692
|
+
const debtorAccount = this.resolveAccount(payment);
|
|
1693
|
+
const cfg = debtorAccount.config;
|
|
1637
1694
|
const body = {
|
|
1638
1695
|
accountNumberCredit: creditor.number,
|
|
1639
|
-
idAccountDebit:
|
|
1696
|
+
idAccountDebit: Number(debtorAccount.bankRefId),
|
|
1640
1697
|
bankCodeCredit: creditor.bankCode,
|
|
1641
1698
|
amount: payment.amount,
|
|
1642
1699
|
currencyCode: "CZK",
|
|
1643
|
-
channelCode:
|
|
1700
|
+
channelCode: cfg.channelCode,
|
|
1644
1701
|
textMessage: payment.message,
|
|
1645
1702
|
varSymbol: payment.vs,
|
|
1646
1703
|
specSymbol: payment.ss,
|
|
@@ -1674,6 +1731,7 @@ class DbuConnector extends IBankConnector {
|
|
|
1674
1731
|
}
|
|
1675
1732
|
const debtor = this.resolveAccountDetails(payment.debtor);
|
|
1676
1733
|
const creditor = this.resolveAccountDetails(payment.creditor);
|
|
1734
|
+
const cfg = this.resolveAccount(payment).config;
|
|
1677
1735
|
const body = {
|
|
1678
1736
|
accountNumberDebit: debtor.number,
|
|
1679
1737
|
accountNumberCredit: creditor.number,
|
|
@@ -1681,20 +1739,20 @@ class DbuConnector extends IBankConnector {
|
|
|
1681
1739
|
bankCodeCredit: creditor.bankCode,
|
|
1682
1740
|
amount: payment.amount,
|
|
1683
1741
|
currencyCode: "CZK",
|
|
1684
|
-
actionTypeCode:
|
|
1685
|
-
channelCode:
|
|
1742
|
+
actionTypeCode: cfg.actionTypeCode,
|
|
1743
|
+
channelCode: cfg.channelCode,
|
|
1686
1744
|
textMessage: payment.message,
|
|
1687
|
-
transactionTypeCode:
|
|
1745
|
+
transactionTypeCode: cfg.transactionTypeCode,
|
|
1688
1746
|
validFrom: dateFns.format(/* @__PURE__ */ new Date(), "yyyy-MM-dd"),
|
|
1689
1747
|
validTo: null,
|
|
1690
1748
|
subEntity: "DOMESTIC",
|
|
1691
|
-
partialRealization:
|
|
1692
|
-
forceRealization:
|
|
1749
|
+
partialRealization: cfg.partialRealization,
|
|
1750
|
+
forceRealization: cfg.forceRealization,
|
|
1693
1751
|
varSymbol: payment.vs,
|
|
1694
1752
|
specSymbol: payment.ss,
|
|
1695
1753
|
constSymbol: payment.ks,
|
|
1696
1754
|
uniqueExternalId: payment.id,
|
|
1697
|
-
with4EyeApproval:
|
|
1755
|
+
with4EyeApproval: cfg.with4EyeApproval,
|
|
1698
1756
|
applicationCode: this.applicationCode
|
|
1699
1757
|
};
|
|
1700
1758
|
const response = await this.makeRequest(
|
|
@@ -1890,6 +1948,39 @@ class DbuConnector extends IBankConnector {
|
|
|
1890
1948
|
}
|
|
1891
1949
|
}
|
|
1892
1950
|
|
|
1951
|
+
const TERMINAL_STATUSES$1 = /* @__PURE__ */ new Set([
|
|
1952
|
+
"SETTLED",
|
|
1953
|
+
"REJECTED",
|
|
1954
|
+
"CLOSED"
|
|
1955
|
+
]);
|
|
1956
|
+
const PENDING_STATUSES = /* @__PURE__ */ new Set([
|
|
1957
|
+
"OPENED",
|
|
1958
|
+
"AUTHORIZED"
|
|
1959
|
+
]);
|
|
1960
|
+
function isTerminalStatus(status) {
|
|
1961
|
+
return TERMINAL_STATUSES$1.has(status);
|
|
1962
|
+
}
|
|
1963
|
+
function isPendingStatus(status) {
|
|
1964
|
+
return PENDING_STATUSES.has(status);
|
|
1965
|
+
}
|
|
1966
|
+
function isProcessedStatus(status) {
|
|
1967
|
+
return !isPendingStatus(status);
|
|
1968
|
+
}
|
|
1969
|
+
function hasPaymentAccountAssigned(payment) {
|
|
1970
|
+
return "accountId" in payment && "connectorKey" in payment && payment.accountId !== void 0 && payment.connectorKey !== void 0;
|
|
1971
|
+
}
|
|
1972
|
+
function isPaymentCompleted(payment) {
|
|
1973
|
+
return (payment.status === "COMPLETED" || payment.status === "BOOKED" || payment.status === "SETTLED" || payment.status === "REJECTED" || payment.status === "CLOSED") && "bankRefId" in payment && typeof payment.bankRefId === "string";
|
|
1974
|
+
}
|
|
1975
|
+
|
|
1976
|
+
const TERMINAL_STATUSES = PAYMENT_REQUEST_STATUSES.filter(isTerminalStatus);
|
|
1977
|
+
const getNonTerminalPaymentRequestsQuery = (db) => db.select().from(tables.paymentRequest).where(
|
|
1978
|
+
drizzleOrm.and(
|
|
1979
|
+
drizzleOrm.not(drizzleOrm.inArray(tables.paymentRequest.status, TERMINAL_STATUSES)),
|
|
1980
|
+
drizzleOrm.isNull(tables.paymentRequest.deletedAt)
|
|
1981
|
+
)
|
|
1982
|
+
);
|
|
1983
|
+
|
|
1893
1984
|
class ErsteConnector extends IBankConnector {
|
|
1894
1985
|
constructor(config) {
|
|
1895
1986
|
super();
|
|
@@ -2304,6 +2395,263 @@ class MockConnector extends IBankConnector {
|
|
|
2304
2395
|
}
|
|
2305
2396
|
}
|
|
2306
2397
|
|
|
2398
|
+
const CONNECTOR_KEYS = [
|
|
2399
|
+
"ERSTE",
|
|
2400
|
+
"FINBRICKS",
|
|
2401
|
+
"MOCK",
|
|
2402
|
+
"CREDITAS",
|
|
2403
|
+
"MOCK_COBS",
|
|
2404
|
+
"FIO",
|
|
2405
|
+
"MONETA",
|
|
2406
|
+
"DBU",
|
|
2407
|
+
"CSAS",
|
|
2408
|
+
"AIRBANK",
|
|
2409
|
+
"KB",
|
|
2410
|
+
"CSOB"
|
|
2411
|
+
];
|
|
2412
|
+
const CREDENTIALS_TYPES = [
|
|
2413
|
+
"AUTH_TOKEN",
|
|
2414
|
+
"REFRESH_TOKEN",
|
|
2415
|
+
"CLIENT_ID",
|
|
2416
|
+
"API_KEY"
|
|
2417
|
+
];
|
|
2418
|
+
const TOKEN_TYPES = ["ACCOUNT_AUTHORIZATION"];
|
|
2419
|
+
|
|
2420
|
+
const account = sqliteCore.sqliteTable(
|
|
2421
|
+
"account",
|
|
2422
|
+
{
|
|
2423
|
+
...backendSdk.base,
|
|
2424
|
+
...backendSdk.bankAccount,
|
|
2425
|
+
// countryCode is temporary until bankAccount is update to include US country code
|
|
2426
|
+
countryCode: sqliteCore.text("country_code", { enum: COUNTRY_CODES }).$type().notNull(),
|
|
2427
|
+
number: sqliteCore.text("number").notNull(),
|
|
2428
|
+
name: sqliteCore.text("name"),
|
|
2429
|
+
iban: sqliteCore.text("iban").notNull(),
|
|
2430
|
+
bankCode: sqliteCore.text("bank_code", { enum: generalCodes.BANK_CODES }).notNull(),
|
|
2431
|
+
connectorKey: sqliteCore.text("connector_key", {
|
|
2432
|
+
enum: CONNECTOR_KEYS
|
|
2433
|
+
}).$type().notNull(),
|
|
2434
|
+
status: sqliteCore.text("status", { enum: ACCOUNT_STATUSES }).$type().notNull(),
|
|
2435
|
+
bankRefId: sqliteCore.text("bank_ref_id").notNull(),
|
|
2436
|
+
batchSizeLimit: sqliteCore.integer("batch_size_limit").notNull().default(50),
|
|
2437
|
+
syncIntervalS: sqliteCore.integer("sync_interval_s").notNull().default(600),
|
|
2438
|
+
lastSyncAt: sqliteCore.integer("last_sync_at", { mode: "timestamp_ms" }),
|
|
2439
|
+
lastSyncMetadata: sqliteCore.text("last_sync_metadata", {
|
|
2440
|
+
mode: "json"
|
|
2441
|
+
}).$type(),
|
|
2442
|
+
connectorConfig: sqliteCore.text("connector_config", {
|
|
2443
|
+
mode: "json"
|
|
2444
|
+
}).$type()
|
|
2445
|
+
},
|
|
2446
|
+
(t) => [sqliteCore.unique().on(t.iban)]
|
|
2447
|
+
);
|
|
2448
|
+
|
|
2449
|
+
const accountInsertSchema = drizzleZod.createInsertSchema(account, {
|
|
2450
|
+
address: () => backendSdk.structuredAddressSchema.optional()
|
|
2451
|
+
});
|
|
2452
|
+
const accountUpdateSchema = drizzleZod.createUpdateSchema(account, {
|
|
2453
|
+
address: () => backendSdk.structuredAddressSchema.optional()
|
|
2454
|
+
});
|
|
2455
|
+
const accountSelectSchema = drizzleZod.createSelectSchema(account, {
|
|
2456
|
+
address: () => backendSdk.structuredAddressSchema.nullable()
|
|
2457
|
+
});
|
|
2458
|
+
|
|
2459
|
+
const accountCredentials = sqliteCore.sqliteTable("account_credentials", {
|
|
2460
|
+
...backendSdk.base,
|
|
2461
|
+
accountId: sqliteCore.text("account_id").references(() => account.id, { onDelete: "restrict", onUpdate: "cascade" }).notNull(),
|
|
2462
|
+
connectorKey: sqliteCore.text("connector_key", {
|
|
2463
|
+
enum: CONNECTOR_KEYS
|
|
2464
|
+
}).$type().notNull(),
|
|
2465
|
+
type: sqliteCore.text("type", {
|
|
2466
|
+
enum: CREDENTIALS_TYPES
|
|
2467
|
+
}).$type().notNull(),
|
|
2468
|
+
value: sqliteCore.text("value").notNull(),
|
|
2469
|
+
expiresAt: sqliteCore.integer("expires_at", { mode: "timestamp_ms" }).notNull()
|
|
2470
|
+
});
|
|
2471
|
+
|
|
2472
|
+
const accountCredentialsInsertSchema = drizzleZod.createInsertSchema(accountCredentials);
|
|
2473
|
+
const accountCredentialsUpdateSchema = drizzleZod.createUpdateSchema(accountCredentials);
|
|
2474
|
+
const accountCredentialsSelectSchema = drizzleZod.createSelectSchema(accountCredentials);
|
|
2475
|
+
|
|
2476
|
+
const ott = sqliteCore.sqliteTable("ott", {
|
|
2477
|
+
...backendSdk.base,
|
|
2478
|
+
oneTimeToken: sqliteCore.text("one_time_token").notNull(),
|
|
2479
|
+
refId: sqliteCore.text("ref_id").notNull(),
|
|
2480
|
+
tokenType: sqliteCore.text("token_type", { enum: TOKEN_TYPES }).$type().notNull(),
|
|
2481
|
+
expiresAt: sqliteCore.integer("expires_at", { mode: "timestamp_ms" }).notNull()
|
|
2482
|
+
});
|
|
2483
|
+
|
|
2484
|
+
const ottInsertSchema = drizzleZod.createInsertSchema(ott);
|
|
2485
|
+
const ottUpdateSchema = drizzleZod.createUpdateSchema(ott);
|
|
2486
|
+
const ottSelectSchema = drizzleZod.createSelectSchema(ott);
|
|
2487
|
+
|
|
2488
|
+
const batch = sqliteCore.sqliteTable("batch", {
|
|
2489
|
+
...backendSdk.base,
|
|
2490
|
+
batchPaymentInitiatedAt: sqliteCore.integer("batch_payment_initiated_at", {
|
|
2491
|
+
mode: "timestamp_ms"
|
|
2492
|
+
}),
|
|
2493
|
+
authorizationUrls: sqliteCore.text("authorization_urls", { mode: "json" }).$type(),
|
|
2494
|
+
accountId: sqliteCore.text("account_id").references(() => account.id, {
|
|
2495
|
+
onDelete: "restrict",
|
|
2496
|
+
onUpdate: "cascade"
|
|
2497
|
+
}),
|
|
2498
|
+
status: sqliteCore.text("status", { enum: BATCH_STATUSES }).$type(),
|
|
2499
|
+
statusReason: sqliteCore.text("status_reason"),
|
|
2500
|
+
statusResponse: sqliteCore.text("status_response", { mode: "json" }).$type(),
|
|
2501
|
+
metadata: sqliteCore.text("metadata", { mode: "json" }).$type(),
|
|
2502
|
+
paymentType: sqliteCore.text("payment_type", {
|
|
2503
|
+
enum: PAYMENT_TYPES
|
|
2504
|
+
}).$type(),
|
|
2505
|
+
paymentsChecksum: sqliteCore.text("payments_checksum"),
|
|
2506
|
+
batchMode: sqliteCore.text("batch_mode", { enum: BATCH_MODES }).$type()
|
|
2507
|
+
});
|
|
2508
|
+
|
|
2509
|
+
const payment = sqliteCore.sqliteTable(
|
|
2510
|
+
"payment",
|
|
2511
|
+
{
|
|
2512
|
+
...backendSdk.base,
|
|
2513
|
+
correlationId: sqliteCore.text("correlation_id").notNull(),
|
|
2514
|
+
refId: sqliteCore.text("ref_id"),
|
|
2515
|
+
bankRefId: sqliteCore.text("bank_ref_id").notNull(),
|
|
2516
|
+
accountId: sqliteCore.text("account_id").references(() => account.id, {
|
|
2517
|
+
onDelete: "restrict",
|
|
2518
|
+
onUpdate: "cascade"
|
|
2519
|
+
}).notNull(),
|
|
2520
|
+
connectorKey: sqliteCore.text("connector_key", { enum: CONNECTOR_KEYS }).$type().notNull(),
|
|
2521
|
+
amount: sqliteCore.real("amount").notNull(),
|
|
2522
|
+
direction: sqliteCore.text("direction").$type().notNull(),
|
|
2523
|
+
paymentType: sqliteCore.text("payment_type").$type().notNull(),
|
|
2524
|
+
currency: sqliteCore.text("currency").$type().notNull(),
|
|
2525
|
+
status: sqliteCore.text("status", { enum: PAYMENT_STATUSES }).$type().notNull(),
|
|
2526
|
+
statusReason: sqliteCore.text("status_reason"),
|
|
2527
|
+
batchId: sqliteCore.text("bank_execution_batch_id"),
|
|
2528
|
+
initiatedAt: sqliteCore.integer("initiated_at", {
|
|
2529
|
+
mode: "timestamp_ms"
|
|
2530
|
+
}),
|
|
2531
|
+
vs: sqliteCore.text("vs"),
|
|
2532
|
+
ss: sqliteCore.text("ss"),
|
|
2533
|
+
ks: sqliteCore.text("ks"),
|
|
2534
|
+
message: sqliteCore.text("message"),
|
|
2535
|
+
chargeBearer: sqliteCore.text("charge_bearer", {
|
|
2536
|
+
enum: CHARGE_BEARERS
|
|
2537
|
+
}).$type(),
|
|
2538
|
+
instructionPriority: sqliteCore.text("instruction_priority", {
|
|
2539
|
+
enum: INSTRUCTION_PRIORITIES
|
|
2540
|
+
}).$type(),
|
|
2541
|
+
processedAt: sqliteCore.integer("processed_at", {
|
|
2542
|
+
mode: "timestamp_ms"
|
|
2543
|
+
}),
|
|
2544
|
+
creditor: sqliteCore.text("creditor", { mode: "json" }).$type().notNull(),
|
|
2545
|
+
creditorIban: sqliteCore.text("creditor_iban"),
|
|
2546
|
+
debtor: sqliteCore.text("debtor", { mode: "json" }).$type().notNull(),
|
|
2547
|
+
debtorIban: sqliteCore.text("debtor_iban")
|
|
2548
|
+
},
|
|
2549
|
+
(t) => [
|
|
2550
|
+
sqliteCore.unique().on(t.connectorKey, t.accountId, t.bankRefId),
|
|
2551
|
+
sqliteCore.index("payment_account_id_idx").on(t.accountId),
|
|
2552
|
+
sqliteCore.index("payment_account_id_status_idx").on(t.accountId, t.status),
|
|
2553
|
+
sqliteCore.index("payment_account_id_created_at_idx").on(t.accountId, t.createdAt),
|
|
2554
|
+
sqliteCore.index("payment_created_at_idx").on(t.createdAt),
|
|
2555
|
+
sqliteCore.index("payment_direction_idx").on(t.direction),
|
|
2556
|
+
sqliteCore.index("payment_batch_id_idx").on(t.batchId),
|
|
2557
|
+
sqliteCore.index("payment_creditor_iban_idx").on(t.creditorIban),
|
|
2558
|
+
sqliteCore.index("payment_debtor_iban_idx").on(t.debtorIban)
|
|
2559
|
+
]
|
|
2560
|
+
);
|
|
2561
|
+
const paymentRelations = relations.relations(payment, ({ one }) => ({
|
|
2562
|
+
batch: one(batch, { fields: [payment.batchId], references: [batch.id] })
|
|
2563
|
+
}));
|
|
2564
|
+
|
|
2565
|
+
const paymentRequest = sqliteCore.sqliteTable(
|
|
2566
|
+
"payment_request",
|
|
2567
|
+
{
|
|
2568
|
+
...backendSdk.base,
|
|
2569
|
+
batchId: sqliteCore.text("batch_id").references(() => batch.id, {
|
|
2570
|
+
onDelete: "restrict",
|
|
2571
|
+
onUpdate: "cascade"
|
|
2572
|
+
}),
|
|
2573
|
+
accountId: sqliteCore.text("account_id").references(() => account.id, {
|
|
2574
|
+
onDelete: "restrict",
|
|
2575
|
+
onUpdate: "cascade"
|
|
2576
|
+
}).notNull(),
|
|
2577
|
+
correlationId: sqliteCore.text("correlation_id").notNull(),
|
|
2578
|
+
refId: sqliteCore.text("ref_id"),
|
|
2579
|
+
bankRefId: sqliteCore.text("bank_ref_id"),
|
|
2580
|
+
connectorKey: sqliteCore.text("connector_key", { enum: CONNECTOR_KEYS }).$type().notNull(),
|
|
2581
|
+
amount: sqliteCore.real("amount").notNull(),
|
|
2582
|
+
paymentType: sqliteCore.text("payment_type", { enum: PAYMENT_TYPES }).$type().notNull(),
|
|
2583
|
+
currency: sqliteCore.text("currency").$type().notNull(),
|
|
2584
|
+
status: sqliteCore.text("status", { enum: PAYMENT_REQUEST_STATUSES }).$type().notNull(),
|
|
2585
|
+
statusReason: sqliteCore.text("status_reason"),
|
|
2586
|
+
authorizationUrl: sqliteCore.text("authorization_url"),
|
|
2587
|
+
initiatedAt: sqliteCore.integer("initiated_at", { mode: "timestamp_ms" }),
|
|
2588
|
+
processedAt: sqliteCore.integer("processed_at", { mode: "timestamp_ms" }),
|
|
2589
|
+
vs: sqliteCore.text("vs"),
|
|
2590
|
+
ss: sqliteCore.text("ss"),
|
|
2591
|
+
ks: sqliteCore.text("ks"),
|
|
2592
|
+
message: sqliteCore.text("message"),
|
|
2593
|
+
chargeBearer: sqliteCore.text("charge_bearer", {
|
|
2594
|
+
enum: CHARGE_BEARERS
|
|
2595
|
+
}).$type(),
|
|
2596
|
+
instructionPriority: sqliteCore.text("instruction_priority", {
|
|
2597
|
+
enum: INSTRUCTION_PRIORITIES
|
|
2598
|
+
}).$type(),
|
|
2599
|
+
creditor: sqliteCore.text("creditor", { mode: "json" }).$type().notNull(),
|
|
2600
|
+
creditorIban: sqliteCore.text("creditor_iban"),
|
|
2601
|
+
debtor: sqliteCore.text("debtor", { mode: "json" }).$type().notNull(),
|
|
2602
|
+
debtorIban: sqliteCore.text("debtor_iban"),
|
|
2603
|
+
sendAsSinglePayment: sqliteCore.integer("send_as_single_payment", {
|
|
2604
|
+
mode: "boolean"
|
|
2605
|
+
})
|
|
2606
|
+
},
|
|
2607
|
+
(t) => [
|
|
2608
|
+
sqliteCore.index("payment_request_batch_id_idx").on(t.batchId),
|
|
2609
|
+
sqliteCore.index("payment_request_account_id_idx").on(t.accountId),
|
|
2610
|
+
sqliteCore.index("payment_request_creditor_iban_idx").on(t.creditorIban),
|
|
2611
|
+
sqliteCore.index("payment_request_debtor_iban_idx").on(t.debtorIban),
|
|
2612
|
+
sqliteCore.index("payment_request_status_idx").on(t.status),
|
|
2613
|
+
sqliteCore.index("payment_request_created_at_idx").on(t.createdAt),
|
|
2614
|
+
sqliteCore.index("payment_request_account_status_idx").on(t.accountId, t.status),
|
|
2615
|
+
sqliteCore.index("payment_request_status_created_at_idx").on(t.status, t.createdAt),
|
|
2616
|
+
sqliteCore.index("payment_request_account_status_created_at_idx").on(
|
|
2617
|
+
t.accountId,
|
|
2618
|
+
t.status,
|
|
2619
|
+
t.createdAt
|
|
2620
|
+
)
|
|
2621
|
+
]
|
|
2622
|
+
);
|
|
2623
|
+
const paymentRequestRelations = relations.relations(paymentRequest, ({ one }) => ({
|
|
2624
|
+
batch: one(batch, {
|
|
2625
|
+
fields: [paymentRequest.batchId],
|
|
2626
|
+
references: [batch.id]
|
|
2627
|
+
}),
|
|
2628
|
+
account: one(account, {
|
|
2629
|
+
fields: [paymentRequest.accountId],
|
|
2630
|
+
references: [account.id]
|
|
2631
|
+
})
|
|
2632
|
+
}));
|
|
2633
|
+
|
|
2634
|
+
const schema = {
|
|
2635
|
+
__proto__: null,
|
|
2636
|
+
account: account,
|
|
2637
|
+
accountCredentials: accountCredentials,
|
|
2638
|
+
batch: batch,
|
|
2639
|
+
ott: ott,
|
|
2640
|
+
payment: payment,
|
|
2641
|
+
paymentRelations: paymentRelations,
|
|
2642
|
+
paymentRequest: paymentRequest,
|
|
2643
|
+
paymentRequestRelations: paymentRequestRelations
|
|
2644
|
+
};
|
|
2645
|
+
|
|
2646
|
+
const tables = schema;
|
|
2647
|
+
|
|
2648
|
+
exports.ACCOUNT_STATUSES = ACCOUNT_STATUSES;
|
|
2649
|
+
exports.BATCH_MODES = BATCH_MODES;
|
|
2650
|
+
exports.BATCH_STATUSES = BATCH_STATUSES;
|
|
2651
|
+
exports.CHARGE_BEARERS = CHARGE_BEARERS;
|
|
2652
|
+
exports.CONNECTOR_KEYS = CONNECTOR_KEYS;
|
|
2653
|
+
exports.COUNTRY_CODES = COUNTRY_CODES;
|
|
2654
|
+
exports.CREDENTIALS_TYPES = CREDENTIALS_TYPES;
|
|
2307
2655
|
exports.CsobConnector = CsobConnector;
|
|
2308
2656
|
exports.DbuConnector = DbuConnector;
|
|
2309
2657
|
exports.ErsteConnector = ErsteConnector;
|
|
@@ -2311,12 +2659,43 @@ exports.FINBRICKS_ENDPOINTS = FINBRICKS_ENDPOINTS;
|
|
|
2311
2659
|
exports.FinbricksClient = FinbricksClient;
|
|
2312
2660
|
exports.FinbricksConnector = FinbricksConnector;
|
|
2313
2661
|
exports.IBankConnector = IBankConnector;
|
|
2662
|
+
exports.INSTRUCTION_PRIORITIES = INSTRUCTION_PRIORITIES;
|
|
2314
2663
|
exports.KBConnector = KBConnector;
|
|
2315
2664
|
exports.MockCobsConnector = MockCobsConnector;
|
|
2316
2665
|
exports.MockConnector = MockConnector;
|
|
2666
|
+
exports.PAYMENT_DIRECTIONS = PAYMENT_DIRECTIONS;
|
|
2667
|
+
exports.PAYMENT_REQUEST_STATUSES = PAYMENT_REQUEST_STATUSES;
|
|
2668
|
+
exports.PAYMENT_STATUSES = PAYMENT_STATUSES;
|
|
2669
|
+
exports.PAYMENT_TYPES = PAYMENT_TYPES;
|
|
2670
|
+
exports.TOKEN_TYPES = TOKEN_TYPES;
|
|
2671
|
+
exports.account = account;
|
|
2672
|
+
exports.accountCredentials = accountCredentials;
|
|
2673
|
+
exports.accountCredentialsInsertSchema = accountCredentialsInsertSchema;
|
|
2674
|
+
exports.accountCredentialsSelectSchema = accountCredentialsSelectSchema;
|
|
2675
|
+
exports.accountCredentialsUpdateSchema = accountCredentialsUpdateSchema;
|
|
2676
|
+
exports.accountInsertSchema = accountInsertSchema;
|
|
2677
|
+
exports.accountSelectSchema = accountSelectSchema;
|
|
2678
|
+
exports.accountUpdateSchema = accountUpdateSchema;
|
|
2317
2679
|
exports.assignAccount = assignAccount;
|
|
2680
|
+
exports.batch = batch;
|
|
2681
|
+
exports.dbuAccountConfigSchema = dbuAccountConfigSchema;
|
|
2682
|
+
exports.getNonTerminalPaymentRequestsQuery = getNonTerminalPaymentRequestsQuery;
|
|
2683
|
+
exports.hasPaymentAccountAssigned = hasPaymentAccountAssigned;
|
|
2318
2684
|
exports.initiateConnector = initiateConnector;
|
|
2685
|
+
exports.isPaymentCompleted = isPaymentCompleted;
|
|
2686
|
+
exports.isPendingStatus = isPendingStatus;
|
|
2687
|
+
exports.isProcessedStatus = isProcessedStatus;
|
|
2688
|
+
exports.isTerminalStatus = isTerminalStatus;
|
|
2689
|
+
exports.ott = ott;
|
|
2690
|
+
exports.ottInsertSchema = ottInsertSchema;
|
|
2691
|
+
exports.ottSelectSchema = ottSelectSchema;
|
|
2692
|
+
exports.ottUpdateSchema = ottUpdateSchema;
|
|
2693
|
+
exports.payment = payment;
|
|
2694
|
+
exports.paymentRelations = paymentRelations;
|
|
2695
|
+
exports.paymentRequest = paymentRequest;
|
|
2696
|
+
exports.paymentRequestRelations = paymentRequestRelations;
|
|
2319
2697
|
exports.signFinbricksJws = signFinbricksJws;
|
|
2698
|
+
exports.tables = tables;
|
|
2320
2699
|
exports.toBatchedPayment = toBatchedPayment;
|
|
2321
2700
|
exports.toBatchedPaymentFromPaymentRequest = toBatchedPaymentFromPaymentRequest;
|
|
2322
2701
|
exports.toCompletedPayment = toCompletedPayment;
|