@develit-services/bank 2.2.3 → 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.t019WQuV.d.mts → bank.C5NCnZWS.d.ts} +1 -1
- package/dist/shared/{bank.COez_hEH.d.mts → bank.CC4p6Jf-.d.cts} +82 -4
- package/dist/shared/{bank.COez_hEH.d.ts → bank.CC4p6Jf-.d.mts} +82 -4
- package/dist/shared/{bank.COez_hEH.d.cts → bank.CC4p6Jf-.d.ts} +82 -4
- package/dist/shared/{bank.Cw3K7nIh.d.cts → 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.CQfKMyzc.cjs → bank.avgw-IRO.cjs} +391 -15
- package/dist/shared/{bank.CmgGdN-q.mjs → bank.gVOunsjq.mjs} +355 -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 {
|
|
@@ -1076,6 +1080,40 @@ class CsobConnector extends FinbricksConnector {
|
|
|
1076
1080
|
}
|
|
1077
1081
|
}
|
|
1078
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
|
+
|
|
1079
1117
|
class AirBankConnector extends FinbricksConnector {
|
|
1080
1118
|
constructor(config) {
|
|
1081
1119
|
super("AIRBANK", config);
|
|
@@ -1334,6 +1372,14 @@ const calculateCzechIban = (accountNumber, bankCode) => {
|
|
|
1334
1372
|
return `CZ${checkDigits}${basicIban}`;
|
|
1335
1373
|
};
|
|
1336
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
|
+
});
|
|
1337
1383
|
class DbuConnector extends IBankConnector {
|
|
1338
1384
|
constructor({
|
|
1339
1385
|
BASE_URL,
|
|
@@ -1355,7 +1401,10 @@ class DbuConnector extends IBankConnector {
|
|
|
1355
1401
|
this.api = API;
|
|
1356
1402
|
this.redirectUri = REDIRECT_URI;
|
|
1357
1403
|
this.txAuthUri = TX_AUTH_URI;
|
|
1358
|
-
this.connectedAccounts = connectedAccounts
|
|
1404
|
+
this.connectedAccounts = connectedAccounts.map((acc) => ({
|
|
1405
|
+
...acc,
|
|
1406
|
+
config: dbuAccountConfigSchema.parse(acc.config ?? {})
|
|
1407
|
+
}));
|
|
1359
1408
|
this.sessionId = backendSdk.uuidv4();
|
|
1360
1409
|
this.allowedPostEndpoints = [
|
|
1361
1410
|
"/required-transactions",
|
|
@@ -1610,7 +1659,7 @@ class DbuConnector extends IBankConnector {
|
|
|
1610
1659
|
return [];
|
|
1611
1660
|
}
|
|
1612
1661
|
// ── Single payment methods ──────────────────────────────────────────
|
|
1613
|
-
|
|
1662
|
+
resolveAccount(payment) {
|
|
1614
1663
|
const account = this.connectedAccounts.find(
|
|
1615
1664
|
(acc) => acc.id === payment.accountId
|
|
1616
1665
|
);
|
|
@@ -1620,7 +1669,10 @@ class DbuConnector extends IBankConnector {
|
|
|
1620
1669
|
code: "DBU_ACCOUNT_NOT_FOUND"
|
|
1621
1670
|
});
|
|
1622
1671
|
}
|
|
1623
|
-
return
|
|
1672
|
+
return account;
|
|
1673
|
+
}
|
|
1674
|
+
resolveIdAccountDebit(payment) {
|
|
1675
|
+
return Number(this.resolveAccount(payment).bankRefId);
|
|
1624
1676
|
}
|
|
1625
1677
|
resolveAccountDetails(account) {
|
|
1626
1678
|
if (account.number && account.bankCode) {
|
|
@@ -1637,13 +1689,15 @@ class DbuConnector extends IBankConnector {
|
|
|
1637
1689
|
}
|
|
1638
1690
|
async initiateInstantPayment(payment) {
|
|
1639
1691
|
const creditor = this.resolveAccountDetails(payment.creditor);
|
|
1692
|
+
const debtorAccount = this.resolveAccount(payment);
|
|
1693
|
+
const cfg = debtorAccount.config;
|
|
1640
1694
|
const body = {
|
|
1641
1695
|
accountNumberCredit: creditor.number,
|
|
1642
|
-
idAccountDebit:
|
|
1696
|
+
idAccountDebit: Number(debtorAccount.bankRefId),
|
|
1643
1697
|
bankCodeCredit: creditor.bankCode,
|
|
1644
1698
|
amount: payment.amount,
|
|
1645
1699
|
currencyCode: "CZK",
|
|
1646
|
-
channelCode:
|
|
1700
|
+
channelCode: cfg.channelCode,
|
|
1647
1701
|
textMessage: payment.message,
|
|
1648
1702
|
varSymbol: payment.vs,
|
|
1649
1703
|
specSymbol: payment.ss,
|
|
@@ -1677,6 +1731,7 @@ class DbuConnector extends IBankConnector {
|
|
|
1677
1731
|
}
|
|
1678
1732
|
const debtor = this.resolveAccountDetails(payment.debtor);
|
|
1679
1733
|
const creditor = this.resolveAccountDetails(payment.creditor);
|
|
1734
|
+
const cfg = this.resolveAccount(payment).config;
|
|
1680
1735
|
const body = {
|
|
1681
1736
|
accountNumberDebit: debtor.number,
|
|
1682
1737
|
accountNumberCredit: creditor.number,
|
|
@@ -1684,20 +1739,20 @@ class DbuConnector extends IBankConnector {
|
|
|
1684
1739
|
bankCodeCredit: creditor.bankCode,
|
|
1685
1740
|
amount: payment.amount,
|
|
1686
1741
|
currencyCode: "CZK",
|
|
1687
|
-
actionTypeCode:
|
|
1688
|
-
channelCode:
|
|
1742
|
+
actionTypeCode: cfg.actionTypeCode,
|
|
1743
|
+
channelCode: cfg.channelCode,
|
|
1689
1744
|
textMessage: payment.message,
|
|
1690
|
-
transactionTypeCode:
|
|
1745
|
+
transactionTypeCode: cfg.transactionTypeCode,
|
|
1691
1746
|
validFrom: dateFns.format(/* @__PURE__ */ new Date(), "yyyy-MM-dd"),
|
|
1692
1747
|
validTo: null,
|
|
1693
1748
|
subEntity: "DOMESTIC",
|
|
1694
|
-
partialRealization:
|
|
1695
|
-
forceRealization:
|
|
1749
|
+
partialRealization: cfg.partialRealization,
|
|
1750
|
+
forceRealization: cfg.forceRealization,
|
|
1696
1751
|
varSymbol: payment.vs,
|
|
1697
1752
|
specSymbol: payment.ss,
|
|
1698
1753
|
constSymbol: payment.ks,
|
|
1699
1754
|
uniqueExternalId: payment.id,
|
|
1700
|
-
with4EyeApproval:
|
|
1755
|
+
with4EyeApproval: cfg.with4EyeApproval,
|
|
1701
1756
|
applicationCode: this.applicationCode
|
|
1702
1757
|
};
|
|
1703
1758
|
const response = await this.makeRequest(
|
|
@@ -1893,6 +1948,39 @@ class DbuConnector extends IBankConnector {
|
|
|
1893
1948
|
}
|
|
1894
1949
|
}
|
|
1895
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
|
+
|
|
1896
1984
|
class ErsteConnector extends IBankConnector {
|
|
1897
1985
|
constructor(config) {
|
|
1898
1986
|
super();
|
|
@@ -2307,6 +2395,263 @@ class MockConnector extends IBankConnector {
|
|
|
2307
2395
|
}
|
|
2308
2396
|
}
|
|
2309
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;
|
|
2310
2655
|
exports.CsobConnector = CsobConnector;
|
|
2311
2656
|
exports.DbuConnector = DbuConnector;
|
|
2312
2657
|
exports.ErsteConnector = ErsteConnector;
|
|
@@ -2314,12 +2659,43 @@ exports.FINBRICKS_ENDPOINTS = FINBRICKS_ENDPOINTS;
|
|
|
2314
2659
|
exports.FinbricksClient = FinbricksClient;
|
|
2315
2660
|
exports.FinbricksConnector = FinbricksConnector;
|
|
2316
2661
|
exports.IBankConnector = IBankConnector;
|
|
2662
|
+
exports.INSTRUCTION_PRIORITIES = INSTRUCTION_PRIORITIES;
|
|
2317
2663
|
exports.KBConnector = KBConnector;
|
|
2318
2664
|
exports.MockCobsConnector = MockCobsConnector;
|
|
2319
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;
|
|
2320
2679
|
exports.assignAccount = assignAccount;
|
|
2680
|
+
exports.batch = batch;
|
|
2681
|
+
exports.dbuAccountConfigSchema = dbuAccountConfigSchema;
|
|
2682
|
+
exports.getNonTerminalPaymentRequestsQuery = getNonTerminalPaymentRequestsQuery;
|
|
2683
|
+
exports.hasPaymentAccountAssigned = hasPaymentAccountAssigned;
|
|
2321
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;
|
|
2322
2697
|
exports.signFinbricksJws = signFinbricksJws;
|
|
2698
|
+
exports.tables = tables;
|
|
2323
2699
|
exports.toBatchedPayment = toBatchedPayment;
|
|
2324
2700
|
exports.toBatchedPaymentFromPaymentRequest = toBatchedPaymentFromPaymentRequest;
|
|
2325
2701
|
exports.toCompletedPayment = toCompletedPayment;
|