@develit-services/bank 2.2.3 → 2.4.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 (35) hide show
  1. package/dist/database/schema.cjs +2 -1
  2. package/dist/database/schema.d.cts +1 -1
  3. package/dist/database/schema.d.mts +1 -1
  4. package/dist/database/schema.d.ts +1 -1
  5. package/dist/database/schema.mjs +2 -1
  6. package/dist/export/worker.cjs +15 -15
  7. package/dist/export/worker.d.cts +23 -2
  8. package/dist/export/worker.d.mts +23 -2
  9. package/dist/export/worker.d.ts +23 -2
  10. package/dist/export/worker.mjs +4 -4
  11. package/dist/export/workflows.cjs +11 -9
  12. package/dist/export/workflows.mjs +7 -5
  13. package/dist/export/wrangler.cjs +4 -1
  14. package/dist/export/wrangler.d.cts +10 -2
  15. package/dist/export/wrangler.d.mts +10 -2
  16. package/dist/export/wrangler.d.ts +10 -2
  17. package/dist/export/wrangler.mjs +4 -1
  18. package/dist/shared/{bank.B0EWZbAs.cjs → bank.B0I6H6AT.cjs} +1 -1
  19. package/dist/shared/{bank.Cw3K7nIh.d.cts → bank.BI2OxQsM.d.mts} +1 -1
  20. package/dist/shared/{bank.COez_hEH.d.mts → bank.BJ_vbyUT.d.cts} +80 -2
  21. package/dist/shared/{bank.COez_hEH.d.ts → bank.BJ_vbyUT.d.mts} +80 -2
  22. package/dist/shared/{bank.COez_hEH.d.cts → bank.BJ_vbyUT.d.ts} +80 -2
  23. package/dist/shared/{bank.t019WQuV.d.mts → bank.Bs0isbAY.d.ts} +1 -1
  24. package/dist/shared/{bank.VB_ZSWGd.d.ts → bank.Ca0iWjhb.d.cts} +1 -1
  25. package/dist/shared/{bank.CmgGdN-q.mjs → bank.IlVbIEuM.mjs} +389 -31
  26. package/dist/shared/{bank.CQfKMyzc.cjs → bank.c1sHv5v_.cjs} +425 -29
  27. package/dist/shared/{bank.UBWdag5k.mjs → bank.fZkUcrn9.mjs} +1 -1
  28. package/dist/types.cjs +25 -24
  29. package/dist/types.d.cts +30 -8
  30. package/dist/types.d.mts +30 -8
  31. package/dist/types.d.ts +30 -8
  32. package/dist/types.mjs +5 -5
  33. package/package.json +1 -1
  34. package/dist/shared/bank.C7MA33AX.mjs +0 -325
  35. 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 {
@@ -476,6 +479,26 @@ const SEPA_COUNTRIES = /* @__PURE__ */ new Set([
476
479
  "GI",
477
480
  "XK"
478
481
  ]);
482
+ function parseOtherIdentification(value) {
483
+ if (!value) return {};
484
+ const [first, second] = value.split("/");
485
+ if (!first) return {};
486
+ const looksLikeIban = first.length >= 15 && /^[A-Z]{2}\d{2}[A-Z0-9]+$/.test(first);
487
+ if (looksLikeIban) {
488
+ const iban = first;
489
+ const swiftBic = second || void 0;
490
+ if (iban.startsWith("CZ") && iban.length === 24) {
491
+ const bankCode = iban.slice(4, 8);
492
+ const number = iban.slice(14, 24).replace(/^0+/, "") || iban.slice(14, 24);
493
+ return { iban, swiftBic, bankCode, number };
494
+ }
495
+ return { iban, swiftBic };
496
+ }
497
+ return {
498
+ number: first,
499
+ bankCode: second || void 0
500
+ };
501
+ }
479
502
  function detectPaymentType(tx, isIncoming) {
480
503
  const related = tx.entryDetails?.transactionDetails?.relatedParties;
481
504
  const otherParty = isIncoming ? related?.debtorAccount : related?.creditorAccount;
@@ -497,6 +520,12 @@ const mapFinbricksTransactionToPayment = (tx, account) => {
497
520
  const related = tx.entryDetails?.transactionDetails?.relatedParties;
498
521
  const endToEndId = tx.entryDetails.transactionDetails?.references?.endToEndIdentification;
499
522
  const symbolsRegex = /^\/?VS\d+/;
523
+ const debtorParsed = parseOtherIdentification(
524
+ related?.debtorAccount?.identification?.other?.identification
525
+ );
526
+ const creditorParsed = parseOtherIdentification(
527
+ related?.creditorAccount?.identification?.other?.identification
528
+ );
500
529
  const base = {
501
530
  id: backendSdk.uuidv4(),
502
531
  correlationId: backendSdk.uuidv4(),
@@ -514,13 +543,10 @@ const mapFinbricksTransactionToPayment = (tx, account) => {
514
543
  ),
515
544
  creditor: {
516
545
  holderName: related?.creditorAccount?.name || related?.creditor?.name || "Unknown",
517
- iban: isIncoming ? account.iban || void 0 : related?.creditorAccount?.identification?.iban || account.iban || void 0,
518
- number: isIncoming ? account.number || void 0 : related?.creditorAccount?.identification?.other?.identification ? related.creditorAccount.identification.other.identification.split(
519
- "/"
520
- )[0] : account.number || void 0,
521
- bankCode: isIncoming ? account.bankCode || void 0 : related?.creditorAccount?.identification?.other?.identification ? related.creditorAccount.identification.other.identification.split(
522
- "/"
523
- )[1] : account.bankCode || void 0,
546
+ iban: isIncoming ? account.iban || void 0 : related?.creditorAccount?.identification?.iban || creditorParsed.iban || void 0,
547
+ number: isIncoming ? account.number || void 0 : creditorParsed.number || void 0,
548
+ bankCode: isIncoming ? account.bankCode || void 0 : creditorParsed.bankCode || void 0,
549
+ swiftBic: isIncoming ? void 0 : creditorParsed.swiftBic,
524
550
  address: related?.creditor?.postalAddress ? {
525
551
  streetName: related.creditor.postalAddress.streetName,
526
552
  buildingNumber: related.creditor.postalAddress.buildingNumber,
@@ -531,13 +557,10 @@ const mapFinbricksTransactionToPayment = (tx, account) => {
531
557
  },
532
558
  debtor: {
533
559
  holderName: related?.debtorAccount?.name || related?.debtor?.name || "Unknown",
534
- iban: isIncoming ? related?.debtorAccount?.identification?.iban || account.iban || void 0 : account.iban ?? void 0,
535
- number: isIncoming ? related?.debtorAccount?.identification?.other?.identification ? related.debtorAccount.identification.other.identification.split(
536
- "/"
537
- )[0] : account.number || void 0 : account.number || void 0,
538
- bankCode: isIncoming ? related?.debtorAccount?.identification?.other?.identification ? related.debtorAccount.identification.other.identification.split(
539
- "/"
540
- )[1] : account.bankCode || void 0 : account.bankCode || void 0,
560
+ iban: isIncoming ? related?.debtorAccount?.identification?.iban || debtorParsed.iban || void 0 : account.iban ?? void 0,
561
+ number: isIncoming ? debtorParsed.number || void 0 : account.number || void 0,
562
+ bankCode: isIncoming ? debtorParsed.bankCode || void 0 : account.bankCode || void 0,
563
+ swiftBic: isIncoming ? debtorParsed.swiftBic : void 0,
541
564
  address: related?.debtor?.postalAddress ? {
542
565
  streetName: related.debtor.postalAddress.streetName,
543
566
  buildingNumber: related.debtor.postalAddress.buildingNumber,
@@ -669,7 +692,8 @@ class FinbricksConnector extends IBankConnector {
669
692
  connectorKey: this.PROVIDER,
670
693
  currency: acc.currency,
671
694
  iban: acc.identification.iban,
672
- id: acc.id
695
+ id: acc.id,
696
+ config: null
673
697
  }))
674
698
  );
675
699
  return {
@@ -1076,6 +1100,40 @@ class CsobConnector extends FinbricksConnector {
1076
1100
  }
1077
1101
  }
1078
1102
 
1103
+ const PAYMENT_TYPES = ["SEPA", "SWIFT", "DOMESTIC", "UNKNOWN"];
1104
+ const CHARGE_BEARERS = ["SHA", "OUR", "BEN"];
1105
+ const INSTRUCTION_PRIORITIES = ["NORM", "HIGH", "INST"];
1106
+ const PAYMENT_REQUEST_STATUSES = [
1107
+ "OPENED",
1108
+ "AUTHORIZED",
1109
+ "COMPLETED",
1110
+ "BOOKED",
1111
+ "SETTLED",
1112
+ "REJECTED",
1113
+ "CLOSED"
1114
+ ];
1115
+ const PAYMENT_STATUSES = [
1116
+ "PENDING",
1117
+ "PROCESSING",
1118
+ "BOOKED",
1119
+ "CANCELLED",
1120
+ "REJECTED",
1121
+ "SCHEDULED",
1122
+ "HOLD",
1123
+ "INFO"
1124
+ ];
1125
+ const PAYMENT_DIRECTIONS = ["INCOMING", "OUTGOING"];
1126
+ const BATCH_STATUSES = [
1127
+ "PROCESSING",
1128
+ "READY_TO_SIGN",
1129
+ "AUTHORIZED",
1130
+ "COMPLETED",
1131
+ "FAILED"
1132
+ ];
1133
+ const BATCH_MODES = ["NATIVE", "SINGLE"];
1134
+ const ACCOUNT_STATUSES = ["AUTHORIZED", "DISABLED", "EXPIRED"];
1135
+ const COUNTRY_CODES = generalCodes.COUNTRY_CODES_2;
1136
+
1079
1137
  class AirBankConnector extends FinbricksConnector {
1080
1138
  constructor(config) {
1081
1139
  super("AIRBANK", config);
@@ -1334,6 +1392,14 @@ const calculateCzechIban = (accountNumber, bankCode) => {
1334
1392
  return `CZ${checkDigits}${basicIban}`;
1335
1393
  };
1336
1394
 
1395
+ const dbuAccountConfigSchema = zod.z.object({
1396
+ with4EyeApproval: zod.z.enum(["Y", "N"]).default("Y"),
1397
+ channelCode: zod.z.string().default("WWW"),
1398
+ actionTypeCode: zod.z.string().default("TRANSFER"),
1399
+ transactionTypeCode: zod.z.string().default("TRANSFER"),
1400
+ partialRealization: zod.z.enum(["Y", "N"]).default("N"),
1401
+ forceRealization: zod.z.enum(["Y", "N"]).default("N")
1402
+ });
1337
1403
  class DbuConnector extends IBankConnector {
1338
1404
  constructor({
1339
1405
  BASE_URL,
@@ -1355,7 +1421,10 @@ class DbuConnector extends IBankConnector {
1355
1421
  this.api = API;
1356
1422
  this.redirectUri = REDIRECT_URI;
1357
1423
  this.txAuthUri = TX_AUTH_URI;
1358
- this.connectedAccounts = connectedAccounts;
1424
+ this.connectedAccounts = connectedAccounts.map((acc) => ({
1425
+ ...acc,
1426
+ config: dbuAccountConfigSchema.parse(acc.config ?? {})
1427
+ }));
1359
1428
  this.sessionId = backendSdk.uuidv4();
1360
1429
  this.allowedPostEndpoints = [
1361
1430
  "/required-transactions",
@@ -1610,7 +1679,7 @@ class DbuConnector extends IBankConnector {
1610
1679
  return [];
1611
1680
  }
1612
1681
  // ── Single payment methods ──────────────────────────────────────────
1613
- resolveIdAccountDebit(payment) {
1682
+ resolveAccount(payment) {
1614
1683
  const account = this.connectedAccounts.find(
1615
1684
  (acc) => acc.id === payment.accountId
1616
1685
  );
@@ -1620,7 +1689,10 @@ class DbuConnector extends IBankConnector {
1620
1689
  code: "DBU_ACCOUNT_NOT_FOUND"
1621
1690
  });
1622
1691
  }
1623
- return Number(account.bankRefId);
1692
+ return account;
1693
+ }
1694
+ resolveIdAccountDebit(payment) {
1695
+ return Number(this.resolveAccount(payment).bankRefId);
1624
1696
  }
1625
1697
  resolveAccountDetails(account) {
1626
1698
  if (account.number && account.bankCode) {
@@ -1637,13 +1709,15 @@ class DbuConnector extends IBankConnector {
1637
1709
  }
1638
1710
  async initiateInstantPayment(payment) {
1639
1711
  const creditor = this.resolveAccountDetails(payment.creditor);
1712
+ const debtorAccount = this.resolveAccount(payment);
1713
+ const cfg = debtorAccount.config;
1640
1714
  const body = {
1641
1715
  accountNumberCredit: creditor.number,
1642
- idAccountDebit: this.resolveIdAccountDebit(payment),
1716
+ idAccountDebit: Number(debtorAccount.bankRefId),
1643
1717
  bankCodeCredit: creditor.bankCode,
1644
1718
  amount: payment.amount,
1645
1719
  currencyCode: "CZK",
1646
- channelCode: "WWW",
1720
+ channelCode: cfg.channelCode,
1647
1721
  textMessage: payment.message,
1648
1722
  varSymbol: payment.vs,
1649
1723
  specSymbol: payment.ss,
@@ -1677,6 +1751,7 @@ class DbuConnector extends IBankConnector {
1677
1751
  }
1678
1752
  const debtor = this.resolveAccountDetails(payment.debtor);
1679
1753
  const creditor = this.resolveAccountDetails(payment.creditor);
1754
+ const cfg = this.resolveAccount(payment).config;
1680
1755
  const body = {
1681
1756
  accountNumberDebit: debtor.number,
1682
1757
  accountNumberCredit: creditor.number,
@@ -1684,20 +1759,20 @@ class DbuConnector extends IBankConnector {
1684
1759
  bankCodeCredit: creditor.bankCode,
1685
1760
  amount: payment.amount,
1686
1761
  currencyCode: "CZK",
1687
- actionTypeCode: "TRANSFER",
1688
- channelCode: "WWW",
1762
+ actionTypeCode: cfg.actionTypeCode,
1763
+ channelCode: cfg.channelCode,
1689
1764
  textMessage: payment.message,
1690
- transactionTypeCode: "TRANSFER",
1765
+ transactionTypeCode: cfg.transactionTypeCode,
1691
1766
  validFrom: dateFns.format(/* @__PURE__ */ new Date(), "yyyy-MM-dd"),
1692
1767
  validTo: null,
1693
1768
  subEntity: "DOMESTIC",
1694
- partialRealization: "N",
1695
- forceRealization: "N",
1769
+ partialRealization: cfg.partialRealization,
1770
+ forceRealization: cfg.forceRealization,
1696
1771
  varSymbol: payment.vs,
1697
1772
  specSymbol: payment.ss,
1698
1773
  constSymbol: payment.ks,
1699
1774
  uniqueExternalId: payment.id,
1700
- with4EyeApproval: "Y",
1775
+ with4EyeApproval: cfg.with4EyeApproval,
1701
1776
  applicationCode: this.applicationCode
1702
1777
  };
1703
1778
  const response = await this.makeRequest(
@@ -1893,6 +1968,39 @@ class DbuConnector extends IBankConnector {
1893
1968
  }
1894
1969
  }
1895
1970
 
1971
+ const TERMINAL_STATUSES$1 = /* @__PURE__ */ new Set([
1972
+ "SETTLED",
1973
+ "REJECTED",
1974
+ "CLOSED"
1975
+ ]);
1976
+ const PENDING_STATUSES = /* @__PURE__ */ new Set([
1977
+ "OPENED",
1978
+ "AUTHORIZED"
1979
+ ]);
1980
+ function isTerminalStatus(status) {
1981
+ return TERMINAL_STATUSES$1.has(status);
1982
+ }
1983
+ function isPendingStatus(status) {
1984
+ return PENDING_STATUSES.has(status);
1985
+ }
1986
+ function isProcessedStatus(status) {
1987
+ return !isPendingStatus(status);
1988
+ }
1989
+ function hasPaymentAccountAssigned(payment) {
1990
+ return "accountId" in payment && "connectorKey" in payment && payment.accountId !== void 0 && payment.connectorKey !== void 0;
1991
+ }
1992
+ function isPaymentCompleted(payment) {
1993
+ return (payment.status === "COMPLETED" || payment.status === "BOOKED" || payment.status === "SETTLED" || payment.status === "REJECTED" || payment.status === "CLOSED") && "bankRefId" in payment && typeof payment.bankRefId === "string";
1994
+ }
1995
+
1996
+ const TERMINAL_STATUSES = PAYMENT_REQUEST_STATUSES.filter(isTerminalStatus);
1997
+ const getNonTerminalPaymentRequestsQuery = (db) => db.select().from(tables.paymentRequest).where(
1998
+ drizzleOrm.and(
1999
+ drizzleOrm.not(drizzleOrm.inArray(tables.paymentRequest.status, TERMINAL_STATUSES)),
2000
+ drizzleOrm.isNull(tables.paymentRequest.deletedAt)
2001
+ )
2002
+ );
2003
+
1896
2004
  class ErsteConnector extends IBankConnector {
1897
2005
  constructor(config) {
1898
2006
  super();
@@ -2307,6 +2415,263 @@ class MockConnector extends IBankConnector {
2307
2415
  }
2308
2416
  }
2309
2417
 
2418
+ const CONNECTOR_KEYS = [
2419
+ "ERSTE",
2420
+ "FINBRICKS",
2421
+ "MOCK",
2422
+ "CREDITAS",
2423
+ "MOCK_COBS",
2424
+ "FIO",
2425
+ "MONETA",
2426
+ "DBU",
2427
+ "CSAS",
2428
+ "AIRBANK",
2429
+ "KB",
2430
+ "CSOB"
2431
+ ];
2432
+ const CREDENTIALS_TYPES = [
2433
+ "AUTH_TOKEN",
2434
+ "REFRESH_TOKEN",
2435
+ "CLIENT_ID",
2436
+ "API_KEY"
2437
+ ];
2438
+ const TOKEN_TYPES = ["ACCOUNT_AUTHORIZATION"];
2439
+
2440
+ const account = sqliteCore.sqliteTable(
2441
+ "account",
2442
+ {
2443
+ ...backendSdk.base,
2444
+ ...backendSdk.bankAccount,
2445
+ // countryCode is temporary until bankAccount is update to include US country code
2446
+ countryCode: sqliteCore.text("country_code", { enum: COUNTRY_CODES }).$type().notNull(),
2447
+ number: sqliteCore.text("number").notNull(),
2448
+ name: sqliteCore.text("name"),
2449
+ iban: sqliteCore.text("iban").notNull(),
2450
+ bankCode: sqliteCore.text("bank_code", { enum: generalCodes.BANK_CODES }).notNull(),
2451
+ connectorKey: sqliteCore.text("connector_key", {
2452
+ enum: CONNECTOR_KEYS
2453
+ }).$type().notNull(),
2454
+ status: sqliteCore.text("status", { enum: ACCOUNT_STATUSES }).$type().notNull(),
2455
+ bankRefId: sqliteCore.text("bank_ref_id").notNull(),
2456
+ batchSizeLimit: sqliteCore.integer("batch_size_limit").notNull().default(50),
2457
+ syncIntervalS: sqliteCore.integer("sync_interval_s").notNull().default(600),
2458
+ lastSyncAt: sqliteCore.integer("last_sync_at", { mode: "timestamp_ms" }),
2459
+ lastSyncMetadata: sqliteCore.text("last_sync_metadata", {
2460
+ mode: "json"
2461
+ }).$type(),
2462
+ connectorConfig: sqliteCore.text("connector_config", {
2463
+ mode: "json"
2464
+ }).$type()
2465
+ },
2466
+ (t) => [sqliteCore.unique().on(t.iban)]
2467
+ );
2468
+
2469
+ const accountInsertSchema = drizzleZod.createInsertSchema(account, {
2470
+ address: () => backendSdk.structuredAddressSchema.optional()
2471
+ });
2472
+ const accountUpdateSchema = drizzleZod.createUpdateSchema(account, {
2473
+ address: () => backendSdk.structuredAddressSchema.optional()
2474
+ });
2475
+ const accountSelectSchema = drizzleZod.createSelectSchema(account, {
2476
+ address: () => backendSdk.structuredAddressSchema.nullable()
2477
+ });
2478
+
2479
+ const accountCredentials = sqliteCore.sqliteTable("account_credentials", {
2480
+ ...backendSdk.base,
2481
+ accountId: sqliteCore.text("account_id").references(() => account.id, { onDelete: "restrict", onUpdate: "cascade" }).notNull(),
2482
+ connectorKey: sqliteCore.text("connector_key", {
2483
+ enum: CONNECTOR_KEYS
2484
+ }).$type().notNull(),
2485
+ type: sqliteCore.text("type", {
2486
+ enum: CREDENTIALS_TYPES
2487
+ }).$type().notNull(),
2488
+ value: sqliteCore.text("value").notNull(),
2489
+ expiresAt: sqliteCore.integer("expires_at", { mode: "timestamp_ms" }).notNull()
2490
+ });
2491
+
2492
+ const accountCredentialsInsertSchema = drizzleZod.createInsertSchema(accountCredentials);
2493
+ const accountCredentialsUpdateSchema = drizzleZod.createUpdateSchema(accountCredentials);
2494
+ const accountCredentialsSelectSchema = drizzleZod.createSelectSchema(accountCredentials);
2495
+
2496
+ const ott = sqliteCore.sqliteTable("ott", {
2497
+ ...backendSdk.base,
2498
+ oneTimeToken: sqliteCore.text("one_time_token").notNull(),
2499
+ refId: sqliteCore.text("ref_id").notNull(),
2500
+ tokenType: sqliteCore.text("token_type", { enum: TOKEN_TYPES }).$type().notNull(),
2501
+ expiresAt: sqliteCore.integer("expires_at", { mode: "timestamp_ms" }).notNull()
2502
+ });
2503
+
2504
+ const ottInsertSchema = drizzleZod.createInsertSchema(ott);
2505
+ const ottUpdateSchema = drizzleZod.createUpdateSchema(ott);
2506
+ const ottSelectSchema = drizzleZod.createSelectSchema(ott);
2507
+
2508
+ const batch = sqliteCore.sqliteTable("batch", {
2509
+ ...backendSdk.base,
2510
+ batchPaymentInitiatedAt: sqliteCore.integer("batch_payment_initiated_at", {
2511
+ mode: "timestamp_ms"
2512
+ }),
2513
+ authorizationUrls: sqliteCore.text("authorization_urls", { mode: "json" }).$type(),
2514
+ accountId: sqliteCore.text("account_id").references(() => account.id, {
2515
+ onDelete: "restrict",
2516
+ onUpdate: "cascade"
2517
+ }),
2518
+ status: sqliteCore.text("status", { enum: BATCH_STATUSES }).$type(),
2519
+ statusReason: sqliteCore.text("status_reason"),
2520
+ statusResponse: sqliteCore.text("status_response", { mode: "json" }).$type(),
2521
+ metadata: sqliteCore.text("metadata", { mode: "json" }).$type(),
2522
+ paymentType: sqliteCore.text("payment_type", {
2523
+ enum: PAYMENT_TYPES
2524
+ }).$type(),
2525
+ paymentsChecksum: sqliteCore.text("payments_checksum"),
2526
+ batchMode: sqliteCore.text("batch_mode", { enum: BATCH_MODES }).$type()
2527
+ });
2528
+
2529
+ const payment = sqliteCore.sqliteTable(
2530
+ "payment",
2531
+ {
2532
+ ...backendSdk.base,
2533
+ correlationId: sqliteCore.text("correlation_id").notNull(),
2534
+ refId: sqliteCore.text("ref_id"),
2535
+ bankRefId: sqliteCore.text("bank_ref_id").notNull(),
2536
+ accountId: sqliteCore.text("account_id").references(() => account.id, {
2537
+ onDelete: "restrict",
2538
+ onUpdate: "cascade"
2539
+ }).notNull(),
2540
+ connectorKey: sqliteCore.text("connector_key", { enum: CONNECTOR_KEYS }).$type().notNull(),
2541
+ amount: sqliteCore.real("amount").notNull(),
2542
+ direction: sqliteCore.text("direction").$type().notNull(),
2543
+ paymentType: sqliteCore.text("payment_type").$type().notNull(),
2544
+ currency: sqliteCore.text("currency").$type().notNull(),
2545
+ status: sqliteCore.text("status", { enum: PAYMENT_STATUSES }).$type().notNull(),
2546
+ statusReason: sqliteCore.text("status_reason"),
2547
+ batchId: sqliteCore.text("bank_execution_batch_id"),
2548
+ initiatedAt: sqliteCore.integer("initiated_at", {
2549
+ mode: "timestamp_ms"
2550
+ }),
2551
+ vs: sqliteCore.text("vs"),
2552
+ ss: sqliteCore.text("ss"),
2553
+ ks: sqliteCore.text("ks"),
2554
+ message: sqliteCore.text("message"),
2555
+ chargeBearer: sqliteCore.text("charge_bearer", {
2556
+ enum: CHARGE_BEARERS
2557
+ }).$type(),
2558
+ instructionPriority: sqliteCore.text("instruction_priority", {
2559
+ enum: INSTRUCTION_PRIORITIES
2560
+ }).$type(),
2561
+ processedAt: sqliteCore.integer("processed_at", {
2562
+ mode: "timestamp_ms"
2563
+ }),
2564
+ creditor: sqliteCore.text("creditor", { mode: "json" }).$type().notNull(),
2565
+ creditorIban: sqliteCore.text("creditor_iban"),
2566
+ debtor: sqliteCore.text("debtor", { mode: "json" }).$type().notNull(),
2567
+ debtorIban: sqliteCore.text("debtor_iban")
2568
+ },
2569
+ (t) => [
2570
+ sqliteCore.unique().on(t.connectorKey, t.accountId, t.bankRefId),
2571
+ sqliteCore.index("payment_account_id_idx").on(t.accountId),
2572
+ sqliteCore.index("payment_account_id_status_idx").on(t.accountId, t.status),
2573
+ sqliteCore.index("payment_account_id_created_at_idx").on(t.accountId, t.createdAt),
2574
+ sqliteCore.index("payment_created_at_idx").on(t.createdAt),
2575
+ sqliteCore.index("payment_direction_idx").on(t.direction),
2576
+ sqliteCore.index("payment_batch_id_idx").on(t.batchId),
2577
+ sqliteCore.index("payment_creditor_iban_idx").on(t.creditorIban),
2578
+ sqliteCore.index("payment_debtor_iban_idx").on(t.debtorIban)
2579
+ ]
2580
+ );
2581
+ const paymentRelations = relations.relations(payment, ({ one }) => ({
2582
+ batch: one(batch, { fields: [payment.batchId], references: [batch.id] })
2583
+ }));
2584
+
2585
+ const paymentRequest = sqliteCore.sqliteTable(
2586
+ "payment_request",
2587
+ {
2588
+ ...backendSdk.base,
2589
+ batchId: sqliteCore.text("batch_id").references(() => batch.id, {
2590
+ onDelete: "restrict",
2591
+ onUpdate: "cascade"
2592
+ }),
2593
+ accountId: sqliteCore.text("account_id").references(() => account.id, {
2594
+ onDelete: "restrict",
2595
+ onUpdate: "cascade"
2596
+ }).notNull(),
2597
+ correlationId: sqliteCore.text("correlation_id").notNull(),
2598
+ refId: sqliteCore.text("ref_id"),
2599
+ bankRefId: sqliteCore.text("bank_ref_id"),
2600
+ connectorKey: sqliteCore.text("connector_key", { enum: CONNECTOR_KEYS }).$type().notNull(),
2601
+ amount: sqliteCore.real("amount").notNull(),
2602
+ paymentType: sqliteCore.text("payment_type", { enum: PAYMENT_TYPES }).$type().notNull(),
2603
+ currency: sqliteCore.text("currency").$type().notNull(),
2604
+ status: sqliteCore.text("status", { enum: PAYMENT_REQUEST_STATUSES }).$type().notNull(),
2605
+ statusReason: sqliteCore.text("status_reason"),
2606
+ authorizationUrl: sqliteCore.text("authorization_url"),
2607
+ initiatedAt: sqliteCore.integer("initiated_at", { mode: "timestamp_ms" }),
2608
+ processedAt: sqliteCore.integer("processed_at", { mode: "timestamp_ms" }),
2609
+ vs: sqliteCore.text("vs"),
2610
+ ss: sqliteCore.text("ss"),
2611
+ ks: sqliteCore.text("ks"),
2612
+ message: sqliteCore.text("message"),
2613
+ chargeBearer: sqliteCore.text("charge_bearer", {
2614
+ enum: CHARGE_BEARERS
2615
+ }).$type(),
2616
+ instructionPriority: sqliteCore.text("instruction_priority", {
2617
+ enum: INSTRUCTION_PRIORITIES
2618
+ }).$type(),
2619
+ creditor: sqliteCore.text("creditor", { mode: "json" }).$type().notNull(),
2620
+ creditorIban: sqliteCore.text("creditor_iban"),
2621
+ debtor: sqliteCore.text("debtor", { mode: "json" }).$type().notNull(),
2622
+ debtorIban: sqliteCore.text("debtor_iban"),
2623
+ sendAsSinglePayment: sqliteCore.integer("send_as_single_payment", {
2624
+ mode: "boolean"
2625
+ })
2626
+ },
2627
+ (t) => [
2628
+ sqliteCore.index("payment_request_batch_id_idx").on(t.batchId),
2629
+ sqliteCore.index("payment_request_account_id_idx").on(t.accountId),
2630
+ sqliteCore.index("payment_request_creditor_iban_idx").on(t.creditorIban),
2631
+ sqliteCore.index("payment_request_debtor_iban_idx").on(t.debtorIban),
2632
+ sqliteCore.index("payment_request_status_idx").on(t.status),
2633
+ sqliteCore.index("payment_request_created_at_idx").on(t.createdAt),
2634
+ sqliteCore.index("payment_request_account_status_idx").on(t.accountId, t.status),
2635
+ sqliteCore.index("payment_request_status_created_at_idx").on(t.status, t.createdAt),
2636
+ sqliteCore.index("payment_request_account_status_created_at_idx").on(
2637
+ t.accountId,
2638
+ t.status,
2639
+ t.createdAt
2640
+ )
2641
+ ]
2642
+ );
2643
+ const paymentRequestRelations = relations.relations(paymentRequest, ({ one }) => ({
2644
+ batch: one(batch, {
2645
+ fields: [paymentRequest.batchId],
2646
+ references: [batch.id]
2647
+ }),
2648
+ account: one(account, {
2649
+ fields: [paymentRequest.accountId],
2650
+ references: [account.id]
2651
+ })
2652
+ }));
2653
+
2654
+ const schema = {
2655
+ __proto__: null,
2656
+ account: account,
2657
+ accountCredentials: accountCredentials,
2658
+ batch: batch,
2659
+ ott: ott,
2660
+ payment: payment,
2661
+ paymentRelations: paymentRelations,
2662
+ paymentRequest: paymentRequest,
2663
+ paymentRequestRelations: paymentRequestRelations
2664
+ };
2665
+
2666
+ const tables = schema;
2667
+
2668
+ exports.ACCOUNT_STATUSES = ACCOUNT_STATUSES;
2669
+ exports.BATCH_MODES = BATCH_MODES;
2670
+ exports.BATCH_STATUSES = BATCH_STATUSES;
2671
+ exports.CHARGE_BEARERS = CHARGE_BEARERS;
2672
+ exports.CONNECTOR_KEYS = CONNECTOR_KEYS;
2673
+ exports.COUNTRY_CODES = COUNTRY_CODES;
2674
+ exports.CREDENTIALS_TYPES = CREDENTIALS_TYPES;
2310
2675
  exports.CsobConnector = CsobConnector;
2311
2676
  exports.DbuConnector = DbuConnector;
2312
2677
  exports.ErsteConnector = ErsteConnector;
@@ -2314,12 +2679,43 @@ exports.FINBRICKS_ENDPOINTS = FINBRICKS_ENDPOINTS;
2314
2679
  exports.FinbricksClient = FinbricksClient;
2315
2680
  exports.FinbricksConnector = FinbricksConnector;
2316
2681
  exports.IBankConnector = IBankConnector;
2682
+ exports.INSTRUCTION_PRIORITIES = INSTRUCTION_PRIORITIES;
2317
2683
  exports.KBConnector = KBConnector;
2318
2684
  exports.MockCobsConnector = MockCobsConnector;
2319
2685
  exports.MockConnector = MockConnector;
2686
+ exports.PAYMENT_DIRECTIONS = PAYMENT_DIRECTIONS;
2687
+ exports.PAYMENT_REQUEST_STATUSES = PAYMENT_REQUEST_STATUSES;
2688
+ exports.PAYMENT_STATUSES = PAYMENT_STATUSES;
2689
+ exports.PAYMENT_TYPES = PAYMENT_TYPES;
2690
+ exports.TOKEN_TYPES = TOKEN_TYPES;
2691
+ exports.account = account;
2692
+ exports.accountCredentials = accountCredentials;
2693
+ exports.accountCredentialsInsertSchema = accountCredentialsInsertSchema;
2694
+ exports.accountCredentialsSelectSchema = accountCredentialsSelectSchema;
2695
+ exports.accountCredentialsUpdateSchema = accountCredentialsUpdateSchema;
2696
+ exports.accountInsertSchema = accountInsertSchema;
2697
+ exports.accountSelectSchema = accountSelectSchema;
2698
+ exports.accountUpdateSchema = accountUpdateSchema;
2320
2699
  exports.assignAccount = assignAccount;
2700
+ exports.batch = batch;
2701
+ exports.dbuAccountConfigSchema = dbuAccountConfigSchema;
2702
+ exports.getNonTerminalPaymentRequestsQuery = getNonTerminalPaymentRequestsQuery;
2703
+ exports.hasPaymentAccountAssigned = hasPaymentAccountAssigned;
2321
2704
  exports.initiateConnector = initiateConnector;
2705
+ exports.isPaymentCompleted = isPaymentCompleted;
2706
+ exports.isPendingStatus = isPendingStatus;
2707
+ exports.isProcessedStatus = isProcessedStatus;
2708
+ exports.isTerminalStatus = isTerminalStatus;
2709
+ exports.ott = ott;
2710
+ exports.ottInsertSchema = ottInsertSchema;
2711
+ exports.ottSelectSchema = ottSelectSchema;
2712
+ exports.ottUpdateSchema = ottUpdateSchema;
2713
+ exports.payment = payment;
2714
+ exports.paymentRelations = paymentRelations;
2715
+ exports.paymentRequest = paymentRequest;
2716
+ exports.paymentRequestRelations = paymentRequestRelations;
2322
2717
  exports.signFinbricksJws = signFinbricksJws;
2718
+ exports.tables = tables;
2323
2719
  exports.toBatchedPayment = toBatchedPayment;
2324
2720
  exports.toBatchedPaymentFromPaymentRequest = toBatchedPaymentFromPaymentRequest;
2325
2721
  exports.toCompletedPayment = toCompletedPayment;
@@ -1,5 +1,5 @@
1
1
  import { sql, and, eq, isNull } from 'drizzle-orm';
2
- import { v as tables } from './bank.C7MA33AX.mjs';
2
+ import { V as tables } from './bank.IlVbIEuM.mjs';
3
3
  import { uuidv4 } from '@develit-io/backend-sdk';
4
4
  import 'date-fns';
5
5
  import 'jose';
package/dist/types.cjs CHANGED
@@ -1,39 +1,20 @@
1
1
  'use strict';
2
2
 
3
- const mock_connector = require('./shared/bank.CQfKMyzc.cjs');
4
- const database_schema = require('./shared/bank.CIWYI18z.cjs');
3
+ const database_schema = require('./shared/bank.c1sHv5v_.cjs');
5
4
  const batchLifecycle = require('./shared/bank.NF8bZBy0.cjs');
6
5
  const generalCodes = require('@develit-io/general-codes');
7
6
  require('@develit-io/backend-sdk');
7
+ require('drizzle-orm/sqlite-core');
8
8
  require('date-fns');
9
- require('drizzle-orm');
10
9
  require('jose');
11
- require('node:crypto');
12
- require('drizzle-orm/sqlite-core');
10
+ require('zod');
13
11
  require('drizzle-orm/relations');
12
+ require('drizzle-orm');
13
+ require('node:crypto');
14
14
  require('drizzle-zod');
15
15
 
16
16
 
17
17
 
18
- exports.CsobConnector = mock_connector.CsobConnector;
19
- exports.DbuConnector = mock_connector.DbuConnector;
20
- exports.ErsteConnector = mock_connector.ErsteConnector;
21
- exports.FINBRICKS_ENDPOINTS = mock_connector.FINBRICKS_ENDPOINTS;
22
- exports.FinbricksClient = mock_connector.FinbricksClient;
23
- exports.FinbricksConnector = mock_connector.FinbricksConnector;
24
- exports.IBankConnector = mock_connector.IBankConnector;
25
- exports.KBConnector = mock_connector.KBConnector;
26
- exports.MockCobsConnector = mock_connector.MockCobsConnector;
27
- exports.MockConnector = mock_connector.MockConnector;
28
- exports.assignAccount = mock_connector.assignAccount;
29
- exports.signFinbricksJws = mock_connector.signFinbricksJws;
30
- exports.toBatchedPayment = mock_connector.toBatchedPayment;
31
- exports.toBatchedPaymentFromPaymentRequest = mock_connector.toBatchedPaymentFromPaymentRequest;
32
- exports.toCompletedPayment = mock_connector.toCompletedPayment;
33
- exports.toIncomingPayment = mock_connector.toIncomingPayment;
34
- exports.toPaymentRequestInsert = mock_connector.toPaymentRequestInsert;
35
- exports.toPreparedPayment = mock_connector.toPreparedPayment;
36
- exports.useFinbricksFetch = mock_connector.useFinbricksFetch;
37
18
  exports.ACCOUNT_STATUSES = database_schema.ACCOUNT_STATUSES;
38
19
  exports.BATCH_MODES = database_schema.BATCH_MODES;
39
20
  exports.BATCH_STATUES = database_schema.BATCH_STATUSES;
@@ -42,7 +23,17 @@ exports.CHARGE_BEARERS = database_schema.CHARGE_BEARERS;
42
23
  exports.CONNECTOR_KEYS = database_schema.CONNECTOR_KEYS;
43
24
  exports.COUNTRY_CODES = database_schema.COUNTRY_CODES;
44
25
  exports.CREDENTIALS_TYPES = database_schema.CREDENTIALS_TYPES;
26
+ exports.CsobConnector = database_schema.CsobConnector;
27
+ exports.DbuConnector = database_schema.DbuConnector;
28
+ exports.ErsteConnector = database_schema.ErsteConnector;
29
+ exports.FINBRICKS_ENDPOINTS = database_schema.FINBRICKS_ENDPOINTS;
30
+ exports.FinbricksClient = database_schema.FinbricksClient;
31
+ exports.FinbricksConnector = database_schema.FinbricksConnector;
32
+ exports.IBankConnector = database_schema.IBankConnector;
45
33
  exports.INSTRUCTION_PRIORITIES = database_schema.INSTRUCTION_PRIORITIES;
34
+ exports.KBConnector = database_schema.KBConnector;
35
+ exports.MockCobsConnector = database_schema.MockCobsConnector;
36
+ exports.MockConnector = database_schema.MockConnector;
46
37
  exports.PAYMENT_DIRECTIONS = database_schema.PAYMENT_DIRECTIONS;
47
38
  exports.PAYMENT_REQUEST_STATUSES = database_schema.PAYMENT_REQUEST_STATUSES;
48
39
  exports.PAYMENT_STATUSES = database_schema.PAYMENT_STATUSES;
@@ -54,6 +45,8 @@ exports.accountCredentialsUpdateSchema = database_schema.accountCredentialsUpdat
54
45
  exports.accountInsertSchema = database_schema.accountInsertSchema;
55
46
  exports.accountSelectSchema = database_schema.accountSelectSchema;
56
47
  exports.accountUpdateSchema = database_schema.accountUpdateSchema;
48
+ exports.assignAccount = database_schema.assignAccount;
49
+ exports.dbuAccountConfigSchema = database_schema.dbuAccountConfigSchema;
57
50
  exports.hasPaymentAccountAssigned = database_schema.hasPaymentAccountAssigned;
58
51
  exports.isPaymentCompleted = database_schema.isPaymentCompleted;
59
52
  exports.isPendingStatus = database_schema.isPendingStatus;
@@ -62,6 +55,14 @@ exports.isTerminalStatus = database_schema.isTerminalStatus;
62
55
  exports.ottInsertSchema = database_schema.ottInsertSchema;
63
56
  exports.ottSelectSchema = database_schema.ottSelectSchema;
64
57
  exports.ottUpdateSchema = database_schema.ottUpdateSchema;
58
+ exports.signFinbricksJws = database_schema.signFinbricksJws;
59
+ exports.toBatchedPayment = database_schema.toBatchedPayment;
60
+ exports.toBatchedPaymentFromPaymentRequest = database_schema.toBatchedPaymentFromPaymentRequest;
61
+ exports.toCompletedPayment = database_schema.toCompletedPayment;
62
+ exports.toIncomingPayment = database_schema.toIncomingPayment;
63
+ exports.toPaymentRequestInsert = database_schema.toPaymentRequestInsert;
64
+ exports.toPreparedPayment = database_schema.toPreparedPayment;
65
+ exports.useFinbricksFetch = database_schema.useFinbricksFetch;
65
66
  exports.isBatchAuthorized = batchLifecycle.isBatchAuthorized;
66
67
  exports.isBatchCompleted = batchLifecycle.isBatchCompleted;
67
68
  exports.isBatchFailed = batchLifecycle.isBatchFailed;