@develit-services/bank 5.0.1 → 5.1.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.
@@ -1237,264 +1237,6 @@ class CsobConnector extends FinbricksConnector {
1237
1237
  }
1238
1238
  }
1239
1239
 
1240
- class AirBankConnector extends FinbricksConnector {
1241
- constructor(config) {
1242
- super("AIRBANK", config);
1243
- }
1244
- supportsBatch() {
1245
- return false;
1246
- }
1247
- }
1248
-
1249
- class CreditasConnector extends FinbricksConnector {
1250
- constructor(config) {
1251
- super("CREDITAS", config);
1252
- }
1253
- /**
1254
- * Creditas bank doesn't support batch payments at all.
1255
- */
1256
- supportsBatch() {
1257
- return false;
1258
- }
1259
- }
1260
-
1261
- class CSASConnector extends FinbricksConnector {
1262
- constructor(config) {
1263
- super("CSAS", config);
1264
- }
1265
- supportsBatch(paymentType) {
1266
- return paymentType === "DOMESTIC";
1267
- }
1268
- }
1269
-
1270
- class FioConnector extends FinbricksConnector {
1271
- constructor(config) {
1272
- super("FIO", config);
1273
- }
1274
- /**
1275
- * FIO supports batch only for DOMESTIC (CZK) payments.
1276
- * SEPA and SWIFT batch support is planned by Finbricks.
1277
- */
1278
- supportsBatch(paymentType) {
1279
- return paymentType === "DOMESTIC";
1280
- }
1281
- }
1282
-
1283
- class KBConnector extends FinbricksConnector {
1284
- constructor(config) {
1285
- super("KB", config);
1286
- }
1287
- supportsBatch(paymentType) {
1288
- return paymentType === "DOMESTIC";
1289
- }
1290
- }
1291
-
1292
- class MonetaConnector extends FinbricksConnector {
1293
- constructor(config) {
1294
- super("MONETA", config);
1295
- }
1296
- /**
1297
- * MONETA supports batch only for DOMESTIC (CZK) payments.
1298
- * SEPA and SWIFT batch support is planned by Finbricks.
1299
- */
1300
- supportsBatch(paymentType) {
1301
- return paymentType === "DOMESTIC";
1302
- }
1303
- /**
1304
- * MONETA rejects all special characters in endToEndIdentification.
1305
- * Boundaries between segments are unambiguous without a separator —
1306
- * `VS`/`SS`/`KS` prefixes are alphabetic and values are always numeric,
1307
- * so the parsing regex `VS[:\s]*(\d+)` extracts each value correctly.
1308
- *
1309
- * Format: `VS1234SS5678KS0308` (max 30 chars).
1310
- * Confirmed by Finbricks support (2026-04-23).
1311
- */
1312
- buildEndToEndId(payment) {
1313
- return buildEndToEndId(payment, { separator: "" });
1314
- }
1315
- }
1316
-
1317
- const isDeposit = (payment, creditorIban) => {
1318
- return payment.creditor.iban === creditorIban;
1319
- };
1320
- const getPaymentDirection = (payment, iban) => {
1321
- if (isDeposit(payment, iban)) return "INCOMING";
1322
- return "OUTGOING";
1323
- };
1324
-
1325
- const initiateConnector = async ({
1326
- bank,
1327
- env,
1328
- connectedAccounts,
1329
- resolveCredentials
1330
- }) => {
1331
- switch (bank) {
1332
- case "ERSTE":
1333
- return new ErsteConnector({
1334
- API_KEY: (await env.SECRETS_STORE.get({
1335
- secretName: "BANK_SERVICE_ERSTE_API_KEY"
1336
- })).data?.secretValue || "",
1337
- CLIENT_ID: (await env.SECRETS_STORE.get({
1338
- secretName: "BANK_SERVICE_ERSTE_CLIENT_ID"
1339
- })).data?.secretValue || "",
1340
- CLIENT_SECRET: (await env.SECRETS_STORE.get({
1341
- secretName: "BANK_SERVICE_ERSTE_CLIENT_SECRET"
1342
- })).data?.secretValue || "",
1343
- REDIRECT_URI: env.REDIRECT_URI,
1344
- AUTH_URI: env.ERSTE_AUTH_URI,
1345
- PAYMENTS_URI: env.ERSTE_PAYMENTS_URI,
1346
- ACCOUNTS_URI: env.ERSTE_ACCOUNTS_URI,
1347
- connectedAccounts,
1348
- resolveCredentials
1349
- });
1350
- case "CREDITAS":
1351
- return new CreditasConnector({
1352
- BASE_URI: env.FINBRICKS_BASE_URI,
1353
- MERCHANT_ID: env.FINBRICKS_MERCHANT_ID,
1354
- PRIVATE_KEY_PEM: (await env.SECRETS_STORE.get({
1355
- secretName: "BANK_SERVICE_FINBRICKS_PRIVATE_KEY_PEM"
1356
- })).data?.secretValue || "",
1357
- REDIRECT_URI: env.REDIRECT_URI,
1358
- connectedAccounts,
1359
- resolveCredentials
1360
- });
1361
- case "MOCK_COBS":
1362
- return new MockCobsConnector({
1363
- BASE_URI: env.FINBRICKS_BASE_URI,
1364
- MERCHANT_ID: env.FINBRICKS_MERCHANT_ID,
1365
- PRIVATE_KEY_PEM: (await env.SECRETS_STORE.get({
1366
- secretName: "BANK_SERVICE_FINBRICKS_PRIVATE_KEY_PEM"
1367
- })).data?.secretValue || "",
1368
- REDIRECT_URI: env.REDIRECT_URI,
1369
- connectedAccounts,
1370
- resolveCredentials
1371
- });
1372
- case "FIO":
1373
- return new FioConnector({
1374
- BASE_URI: env.FINBRICKS_BASE_URI,
1375
- MERCHANT_ID: env.FINBRICKS_MERCHANT_ID,
1376
- PRIVATE_KEY_PEM: (await env.SECRETS_STORE.get({
1377
- secretName: "BANK_SERVICE_FINBRICKS_PRIVATE_KEY_PEM"
1378
- })).data?.secretValue || "",
1379
- REDIRECT_URI: env.REDIRECT_URI,
1380
- connectedAccounts,
1381
- resolveCredentials
1382
- });
1383
- case "MONETA":
1384
- return new MonetaConnector({
1385
- BASE_URI: env.FINBRICKS_BASE_URI,
1386
- MERCHANT_ID: env.FINBRICKS_MERCHANT_ID,
1387
- PRIVATE_KEY_PEM: (await env.SECRETS_STORE.get({
1388
- secretName: "BANK_SERVICE_FINBRICKS_PRIVATE_KEY_PEM"
1389
- })).data?.secretValue || "",
1390
- REDIRECT_URI: env.REDIRECT_URI,
1391
- connectedAccounts,
1392
- resolveCredentials
1393
- });
1394
- case "AIRBANK":
1395
- return new AirBankConnector({
1396
- BASE_URI: env.FINBRICKS_BASE_URI,
1397
- MERCHANT_ID: env.FINBRICKS_MERCHANT_ID,
1398
- PRIVATE_KEY_PEM: (await env.SECRETS_STORE.get({
1399
- secretName: "BANK_SERVICE_FINBRICKS_PRIVATE_KEY_PEM"
1400
- })).data?.secretValue || "",
1401
- REDIRECT_URI: env.REDIRECT_URI,
1402
- connectedAccounts,
1403
- resolveCredentials
1404
- });
1405
- case "CSAS":
1406
- return new CSASConnector({
1407
- BASE_URI: env.FINBRICKS_BASE_URI,
1408
- MERCHANT_ID: env.FINBRICKS_MERCHANT_ID,
1409
- PRIVATE_KEY_PEM: (await env.SECRETS_STORE.get({
1410
- secretName: "BANK_SERVICE_FINBRICKS_PRIVATE_KEY_PEM"
1411
- })).data?.secretValue || "",
1412
- REDIRECT_URI: env.REDIRECT_URI,
1413
- connectedAccounts,
1414
- resolveCredentials
1415
- });
1416
- case "KB":
1417
- return new KBConnector({
1418
- BASE_URI: env.FINBRICKS_BASE_URI,
1419
- MERCHANT_ID: env.FINBRICKS_MERCHANT_ID,
1420
- PRIVATE_KEY_PEM: (await env.SECRETS_STORE.get({
1421
- secretName: "BANK_SERVICE_FINBRICKS_PRIVATE_KEY_PEM"
1422
- })).data?.secretValue || "",
1423
- REDIRECT_URI: env.REDIRECT_URI,
1424
- connectedAccounts,
1425
- resolveCredentials
1426
- });
1427
- case "CSOB":
1428
- return new CsobConnector({
1429
- BASE_URI: env.FINBRICKS_BASE_URI,
1430
- MERCHANT_ID: env.FINBRICKS_MERCHANT_ID,
1431
- PRIVATE_KEY_PEM: (await env.SECRETS_STORE.get({
1432
- secretName: "BANK_SERVICE_FINBRICKS_PRIVATE_KEY_PEM"
1433
- })).data?.secretValue || "",
1434
- REDIRECT_URI: env.REDIRECT_URI,
1435
- connectedAccounts,
1436
- resolveCredentials
1437
- });
1438
- case "DBU":
1439
- return new DbuConnector({
1440
- BASE_URL: env.DBUCS_BASE_URI,
1441
- USERNAME: env.DBUCS_USERNAME,
1442
- APPLICATION_CODE: env.DBUCS_APPLICATION_CODE,
1443
- KV: env.BANK_KV,
1444
- API: env.DBU_CBS_BACKOFFICE_DEV,
1445
- REDIRECT_URI: env.REDIRECT_URI,
1446
- TX_AUTH_URI: env.DBUCS_TX_AUTH_URI,
1447
- connectedAccounts
1448
- });
1449
- default:
1450
- const mockConnector = new MockConnector();
1451
- mockConnector.connectedAccounts = connectedAccounts;
1452
- return mockConnector;
1453
- }
1454
- };
1455
- function mod97(string) {
1456
- let checksum = string.slice(0, 2);
1457
- let fragment = "";
1458
- for (let offset = 2; offset < string.length; offset += 7) {
1459
- fragment = checksum + string.substring(offset, offset + 7);
1460
- checksum = (parseInt(fragment, 10) % 97).toString();
1461
- }
1462
- return parseInt(checksum, 10);
1463
- }
1464
- const parseCzechIban = (iban) => {
1465
- const stripped = iban.replace(/\s/g, "").toUpperCase();
1466
- if (!stripped.startsWith("CZ") || stripped.length !== 24) {
1467
- throw new Error(`Invalid Czech IBAN: ${iban}`);
1468
- }
1469
- const bankCode = stripped.slice(4, 8);
1470
- const prefix = stripped.slice(8, 14).replace(/^0+/, "");
1471
- const main = stripped.slice(14, 24).replace(/^0+/, "");
1472
- const accountNumber = prefix ? `${prefix}-${main}` : main;
1473
- return { bankCode, accountNumber };
1474
- };
1475
- const calculateCzechIban = (accountNumber, bankCode) => {
1476
- const paddedBankCode = bankCode.padStart(4, "0");
1477
- let prefix = "";
1478
- let mainAccount = accountNumber;
1479
- if (accountNumber.includes("-")) {
1480
- const parts = accountNumber.split("-");
1481
- if (parts.length !== 2) {
1482
- throw new Error(
1483
- `Invalid account number format: expected "prefix-main" or "main", got "${accountNumber}"`
1484
- );
1485
- }
1486
- prefix = parts[0];
1487
- mainAccount = parts[1];
1488
- }
1489
- const paddedPrefix = prefix.padStart(6, "0");
1490
- const paddedAccount = mainAccount.padStart(10, "0");
1491
- const basicIban = paddedBankCode + paddedPrefix + paddedAccount;
1492
- const rearranged = basicIban + "123500";
1493
- const remainder = mod97(rearranged);
1494
- const checkDigits = (98 - remainder).toString().padStart(2, "0");
1495
- return `CZ${checkDigits}${basicIban}`;
1496
- };
1497
-
1498
1240
  const dbuAccountConfigSchema = z.object({
1499
1241
  with4EyeApproval: z.enum(["Y", "N"]).default("Y"),
1500
1242
  realizeImmediate: z.enum(["Y", "N"]).default("Y"),
@@ -2402,10 +2144,19 @@ class ErsteConnector extends IBankConnector {
2402
2144
  async getPaymentStatus(_) {
2403
2145
  throw new Error("Erste connector: getPaymentStatus not implemented");
2404
2146
  }
2405
- parseAuthorizationCallback(_callbackUrl) {
2406
- throw new Error(
2407
- "Erste connector: parseAuthorizationCallback not implemented"
2408
- );
2147
+ parseAuthorizationCallback(_callbackUrl) {
2148
+ throw new Error(
2149
+ "Erste connector: parseAuthorizationCallback not implemented"
2150
+ );
2151
+ }
2152
+ }
2153
+
2154
+ class KBConnector extends FinbricksConnector {
2155
+ constructor(config) {
2156
+ super("KB", config);
2157
+ }
2158
+ supportsBatch(paymentType) {
2159
+ return paymentType === "DOMESTIC";
2409
2160
  }
2410
2161
  }
2411
2162
 
@@ -2516,4 +2267,253 @@ const ottInsertSchema = createInsertSchema(ott);
2516
2267
  const ottUpdateSchema = createUpdateSchema(ott);
2517
2268
  const ottSelectSchema = createSelectSchema(ott);
2518
2269
 
2519
- export { useFinbricksFetch as A, BASE_TERMINAL_STATUSES as B, CsobConnector as C, DbuConnector as D, ErsteConnector as E, FINBRICKS_ENDPOINTS as F, tables as G, relations as H, IBankConnector as I, initiateConnector as J, KBConnector as K, getNonTerminalPaymentRequestsQuery as L, MockCobsConnector as M, FinbricksClient as a, FinbricksConnector as b, MockConnector as c, accountCredentialsInsertSchema as d, accountCredentialsSelectSchema as e, accountCredentialsUpdateSchema as f, accountInsertSchema as g, accountSelectSchema as h, accountUpdateSchema as i, assignAccount as j, dbuAccountConfigSchema as k, hasPaymentAccountAssigned as l, isPaymentCompleted as m, isPendingStatus as n, isProcessedStatus as o, isTerminalStatus as p, ottInsertSchema as q, ottSelectSchema as r, ottUpdateSchema as s, signFinbricksJws as t, toBatchedPayment as u, toBatchedPaymentFromPaymentRequest as v, toCompletedPayment as w, toIncomingPayment as x, toPaymentRequestInsert as y, toPreparedPayment as z };
2270
+ class AirBankConnector extends FinbricksConnector {
2271
+ constructor(config) {
2272
+ super("AIRBANK", config);
2273
+ }
2274
+ supportsBatch() {
2275
+ return false;
2276
+ }
2277
+ }
2278
+
2279
+ class CreditasConnector extends FinbricksConnector {
2280
+ constructor(config) {
2281
+ super("CREDITAS", config);
2282
+ }
2283
+ /**
2284
+ * Creditas bank doesn't support batch payments at all.
2285
+ */
2286
+ supportsBatch() {
2287
+ return false;
2288
+ }
2289
+ }
2290
+
2291
+ class CSASConnector extends FinbricksConnector {
2292
+ constructor(config) {
2293
+ super("CSAS", config);
2294
+ }
2295
+ supportsBatch(paymentType) {
2296
+ return paymentType === "DOMESTIC";
2297
+ }
2298
+ }
2299
+
2300
+ class FioConnector extends FinbricksConnector {
2301
+ constructor(config) {
2302
+ super("FIO", config);
2303
+ }
2304
+ /**
2305
+ * FIO supports batch only for DOMESTIC (CZK) payments.
2306
+ * SEPA and SWIFT batch support is planned by Finbricks.
2307
+ */
2308
+ supportsBatch(paymentType) {
2309
+ return paymentType === "DOMESTIC";
2310
+ }
2311
+ }
2312
+
2313
+ class MonetaConnector extends FinbricksConnector {
2314
+ constructor(config) {
2315
+ super("MONETA", config);
2316
+ }
2317
+ /**
2318
+ * MONETA supports batch only for DOMESTIC (CZK) payments.
2319
+ * SEPA and SWIFT batch support is planned by Finbricks.
2320
+ */
2321
+ supportsBatch(paymentType) {
2322
+ return paymentType === "DOMESTIC";
2323
+ }
2324
+ /**
2325
+ * MONETA rejects all special characters in endToEndIdentification.
2326
+ * Boundaries between segments are unambiguous without a separator —
2327
+ * `VS`/`SS`/`KS` prefixes are alphabetic and values are always numeric,
2328
+ * so the parsing regex `VS[:\s]*(\d+)` extracts each value correctly.
2329
+ *
2330
+ * Format: `VS1234SS5678KS0308` (max 30 chars).
2331
+ * Confirmed by Finbricks support (2026-04-23).
2332
+ */
2333
+ buildEndToEndId(payment) {
2334
+ return buildEndToEndId(payment, { separator: "" });
2335
+ }
2336
+ }
2337
+
2338
+ const isDeposit = (payment, creditorIban) => {
2339
+ return payment.creditor.iban === creditorIban;
2340
+ };
2341
+ const getPaymentDirection = (payment, iban) => {
2342
+ if (isDeposit(payment, iban)) return "INCOMING";
2343
+ return "OUTGOING";
2344
+ };
2345
+
2346
+ const initiateConnector = async ({
2347
+ bank,
2348
+ env,
2349
+ connectedAccounts,
2350
+ resolveCredentials
2351
+ }) => {
2352
+ switch (bank) {
2353
+ case "ERSTE":
2354
+ return new ErsteConnector({
2355
+ API_KEY: (await env.SECRETS_STORE.get({
2356
+ secretName: "BANK_SERVICE_ERSTE_API_KEY"
2357
+ })).data?.secretValue || "",
2358
+ CLIENT_ID: (await env.SECRETS_STORE.get({
2359
+ secretName: "BANK_SERVICE_ERSTE_CLIENT_ID"
2360
+ })).data?.secretValue || "",
2361
+ CLIENT_SECRET: (await env.SECRETS_STORE.get({
2362
+ secretName: "BANK_SERVICE_ERSTE_CLIENT_SECRET"
2363
+ })).data?.secretValue || "",
2364
+ REDIRECT_URI: env.REDIRECT_URI,
2365
+ AUTH_URI: env.ERSTE_AUTH_URI,
2366
+ PAYMENTS_URI: env.ERSTE_PAYMENTS_URI,
2367
+ ACCOUNTS_URI: env.ERSTE_ACCOUNTS_URI,
2368
+ connectedAccounts,
2369
+ resolveCredentials
2370
+ });
2371
+ case "CREDITAS":
2372
+ return new CreditasConnector({
2373
+ BASE_URI: env.FINBRICKS_BASE_URI,
2374
+ MERCHANT_ID: env.FINBRICKS_MERCHANT_ID,
2375
+ PRIVATE_KEY_PEM: (await env.SECRETS_STORE.get({
2376
+ secretName: "BANK_SERVICE_FINBRICKS_PRIVATE_KEY_PEM"
2377
+ })).data?.secretValue || "",
2378
+ REDIRECT_URI: env.REDIRECT_URI,
2379
+ connectedAccounts,
2380
+ resolveCredentials
2381
+ });
2382
+ case "MOCK_COBS":
2383
+ return new MockCobsConnector({
2384
+ BASE_URI: env.FINBRICKS_BASE_URI,
2385
+ MERCHANT_ID: env.FINBRICKS_MERCHANT_ID,
2386
+ PRIVATE_KEY_PEM: (await env.SECRETS_STORE.get({
2387
+ secretName: "BANK_SERVICE_FINBRICKS_PRIVATE_KEY_PEM"
2388
+ })).data?.secretValue || "",
2389
+ REDIRECT_URI: env.REDIRECT_URI,
2390
+ connectedAccounts,
2391
+ resolveCredentials
2392
+ });
2393
+ case "FIO":
2394
+ return new FioConnector({
2395
+ BASE_URI: env.FINBRICKS_BASE_URI,
2396
+ MERCHANT_ID: env.FINBRICKS_MERCHANT_ID,
2397
+ PRIVATE_KEY_PEM: (await env.SECRETS_STORE.get({
2398
+ secretName: "BANK_SERVICE_FINBRICKS_PRIVATE_KEY_PEM"
2399
+ })).data?.secretValue || "",
2400
+ REDIRECT_URI: env.REDIRECT_URI,
2401
+ connectedAccounts,
2402
+ resolveCredentials
2403
+ });
2404
+ case "MONETA":
2405
+ return new MonetaConnector({
2406
+ BASE_URI: env.FINBRICKS_BASE_URI,
2407
+ MERCHANT_ID: env.FINBRICKS_MERCHANT_ID,
2408
+ PRIVATE_KEY_PEM: (await env.SECRETS_STORE.get({
2409
+ secretName: "BANK_SERVICE_FINBRICKS_PRIVATE_KEY_PEM"
2410
+ })).data?.secretValue || "",
2411
+ REDIRECT_URI: env.REDIRECT_URI,
2412
+ connectedAccounts,
2413
+ resolveCredentials
2414
+ });
2415
+ case "AIRBANK":
2416
+ return new AirBankConnector({
2417
+ BASE_URI: env.FINBRICKS_BASE_URI,
2418
+ MERCHANT_ID: env.FINBRICKS_MERCHANT_ID,
2419
+ PRIVATE_KEY_PEM: (await env.SECRETS_STORE.get({
2420
+ secretName: "BANK_SERVICE_FINBRICKS_PRIVATE_KEY_PEM"
2421
+ })).data?.secretValue || "",
2422
+ REDIRECT_URI: env.REDIRECT_URI,
2423
+ connectedAccounts,
2424
+ resolveCredentials
2425
+ });
2426
+ case "CSAS":
2427
+ return new CSASConnector({
2428
+ BASE_URI: env.FINBRICKS_BASE_URI,
2429
+ MERCHANT_ID: env.FINBRICKS_MERCHANT_ID,
2430
+ PRIVATE_KEY_PEM: (await env.SECRETS_STORE.get({
2431
+ secretName: "BANK_SERVICE_FINBRICKS_PRIVATE_KEY_PEM"
2432
+ })).data?.secretValue || "",
2433
+ REDIRECT_URI: env.REDIRECT_URI,
2434
+ connectedAccounts,
2435
+ resolveCredentials
2436
+ });
2437
+ case "KB":
2438
+ return new KBConnector({
2439
+ BASE_URI: env.FINBRICKS_BASE_URI,
2440
+ MERCHANT_ID: env.FINBRICKS_MERCHANT_ID,
2441
+ PRIVATE_KEY_PEM: (await env.SECRETS_STORE.get({
2442
+ secretName: "BANK_SERVICE_FINBRICKS_PRIVATE_KEY_PEM"
2443
+ })).data?.secretValue || "",
2444
+ REDIRECT_URI: env.REDIRECT_URI,
2445
+ connectedAccounts,
2446
+ resolveCredentials
2447
+ });
2448
+ case "CSOB":
2449
+ return new CsobConnector({
2450
+ BASE_URI: env.FINBRICKS_BASE_URI,
2451
+ MERCHANT_ID: env.FINBRICKS_MERCHANT_ID,
2452
+ PRIVATE_KEY_PEM: (await env.SECRETS_STORE.get({
2453
+ secretName: "BANK_SERVICE_FINBRICKS_PRIVATE_KEY_PEM"
2454
+ })).data?.secretValue || "",
2455
+ REDIRECT_URI: env.REDIRECT_URI,
2456
+ connectedAccounts,
2457
+ resolveCredentials
2458
+ });
2459
+ case "DBU":
2460
+ return new DbuConnector({
2461
+ BASE_URL: env.DBUCS_BASE_URI,
2462
+ USERNAME: env.DBUCS_USERNAME,
2463
+ APPLICATION_CODE: env.DBUCS_APPLICATION_CODE,
2464
+ KV: env.BANK_KV,
2465
+ API: env.DBU_CBS_BACKOFFICE_DEV,
2466
+ REDIRECT_URI: env.REDIRECT_URI,
2467
+ TX_AUTH_URI: env.DBUCS_TX_AUTH_URI,
2468
+ connectedAccounts
2469
+ });
2470
+ default:
2471
+ const mockConnector = new MockConnector();
2472
+ mockConnector.connectedAccounts = connectedAccounts;
2473
+ return mockConnector;
2474
+ }
2475
+ };
2476
+ function mod97(string) {
2477
+ let checksum = string.slice(0, 2);
2478
+ let fragment = "";
2479
+ for (let offset = 2; offset < string.length; offset += 7) {
2480
+ fragment = checksum + string.substring(offset, offset + 7);
2481
+ checksum = (parseInt(fragment, 10) % 97).toString();
2482
+ }
2483
+ return parseInt(checksum, 10);
2484
+ }
2485
+ const parseCzechIban = (iban) => {
2486
+ const stripped = iban.replace(/\s/g, "").toUpperCase();
2487
+ if (!stripped.startsWith("CZ") || stripped.length !== 24) {
2488
+ throw new Error(`Invalid Czech IBAN: ${iban}`);
2489
+ }
2490
+ const bankCode = stripped.slice(4, 8);
2491
+ const prefix = stripped.slice(8, 14).replace(/^0+/, "");
2492
+ const main = stripped.slice(14, 24).replace(/^0+/, "");
2493
+ const accountNumber = prefix ? `${prefix}-${main}` : main;
2494
+ return { bankCode, accountNumber };
2495
+ };
2496
+ const calculateCzechIban = (accountNumber, bankCode) => {
2497
+ const paddedBankCode = bankCode.padStart(4, "0");
2498
+ let prefix = "";
2499
+ let mainAccount = accountNumber;
2500
+ if (accountNumber.includes("-")) {
2501
+ const parts = accountNumber.split("-");
2502
+ if (parts.length !== 2) {
2503
+ throw new Error(
2504
+ `Invalid account number format: expected "prefix-main" or "main", got "${accountNumber}"`
2505
+ );
2506
+ }
2507
+ prefix = parts[0];
2508
+ mainAccount = parts[1];
2509
+ }
2510
+ const paddedPrefix = prefix.padStart(6, "0");
2511
+ const paddedAccount = mainAccount.padStart(10, "0");
2512
+ const basicIban = paddedBankCode + paddedPrefix + paddedAccount;
2513
+ const rearranged = basicIban + "123500";
2514
+ const remainder = mod97(rearranged);
2515
+ const checkDigits = (98 - remainder).toString().padStart(2, "0");
2516
+ return `CZ${checkDigits}${basicIban}`;
2517
+ };
2518
+
2519
+ export { useFinbricksFetch as A, BASE_TERMINAL_STATUSES as B, CsobConnector as C, DbuConnector as D, ErsteConnector as E, FINBRICKS_ENDPOINTS as F, tables as G, relations as H, IBankConnector as I, initiateConnector as J, KBConnector as K, getNonTerminalPaymentRequestsQuery as L, MockCobsConnector as M, calculateCzechIban as N, FinbricksClient as a, FinbricksConnector as b, MockConnector as c, accountCredentialsInsertSchema as d, accountCredentialsSelectSchema as e, accountCredentialsUpdateSchema as f, accountInsertSchema as g, accountSelectSchema as h, accountUpdateSchema as i, assignAccount as j, dbuAccountConfigSchema as k, hasPaymentAccountAssigned as l, isPaymentCompleted as m, isPendingStatus as n, isProcessedStatus as o, isTerminalStatus as p, ottInsertSchema as q, ottSelectSchema as r, ottUpdateSchema as s, signFinbricksJws as t, toBatchedPayment as u, toBatchedPaymentFromPaymentRequest as v, toCompletedPayment as w, toIncomingPayment as x, toPaymentRequestInsert as y, toPreparedPayment as z };
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  const drizzleOrm = require('drizzle-orm');
4
- const ott_zod = require('./bank.BSX82jhx.cjs');
4
+ const bank = require('./bank.CjEKRnVl.cjs');
5
5
  const backendSdk = require('@develit-io/backend-sdk');
6
6
  require('./bank.9Yw4KHyl.cjs');
7
7
  require('date-fns');
@@ -11,16 +11,16 @@ const node_crypto = require('node:crypto');
11
11
 
12
12
  const createPaymentCommand = (db, { payment }) => {
13
13
  return {
14
- command: db.insert(ott_zod.tables.payment).values({
14
+ command: db.insert(bank.tables.payment).values({
15
15
  ...payment,
16
16
  creditorIban: payment.creditor.iban,
17
17
  debtorIban: payment.debtor.iban
18
18
  }).onConflictDoUpdate({
19
19
  // Unique index: (connector_key, account_id, bank_ref_id)
20
20
  target: [
21
- ott_zod.tables.payment.connectorKey,
22
- ott_zod.tables.payment.accountId,
23
- ott_zod.tables.payment.bankRefId
21
+ bank.tables.payment.connectorKey,
22
+ bank.tables.payment.accountId,
23
+ bank.tables.payment.bankRefId
24
24
  ],
25
25
  set: {
26
26
  status: drizzleOrm.sql`excluded.status`,
@@ -38,11 +38,11 @@ const createPaymentCommand = (db, { payment }) => {
38
38
 
39
39
  const upsertBatchCommand = (db, { batch }) => {
40
40
  const id = batch.id || backendSdk.uuidv4();
41
- const command = db.insert(ott_zod.tables.batch).values({
41
+ const command = db.insert(bank.tables.batch).values({
42
42
  ...batch,
43
43
  id
44
44
  }).onConflictDoUpdate({
45
- target: ott_zod.tables.batch.id,
45
+ target: bank.tables.batch.id,
46
46
  set: {
47
47
  ...batch
48
48
  }
@@ -56,25 +56,25 @@ const upsertBatchCommand = (db, { batch }) => {
56
56
  const updatePaymentRequestStatusCommand = (db, values) => {
57
57
  const { id, ...set } = values;
58
58
  return {
59
- command: db.update(ott_zod.tables.paymentRequest).set(set).where(
59
+ command: db.update(bank.tables.paymentRequest).set(set).where(
60
60
  drizzleOrm.and(
61
- drizzleOrm.eq(ott_zod.tables.paymentRequest.id, id),
62
- drizzleOrm.isNull(ott_zod.tables.paymentRequest.deletedAt)
61
+ drizzleOrm.eq(bank.tables.paymentRequest.id, id),
62
+ drizzleOrm.isNull(bank.tables.paymentRequest.deletedAt)
63
63
  )
64
64
  ).returning()
65
65
  };
66
66
  };
67
67
 
68
68
  const getAccountByIdQuery = async (db, { accountId }) => {
69
- return await db.select().from(ott_zod.tables.account).where(drizzleOrm.eq(ott_zod.tables.account.id, accountId)).get();
69
+ return await db.select().from(bank.tables.account).where(drizzleOrm.eq(bank.tables.account.id, accountId)).get();
70
70
  };
71
71
 
72
72
  const getBatchByIdQuery = async (db, { batchId }) => {
73
- return await db.select().from(ott_zod.tables.batch).where(drizzleOrm.eq(ott_zod.tables.batch.id, batchId)).get();
73
+ return await db.select().from(bank.tables.batch).where(drizzleOrm.eq(bank.tables.batch.id, batchId)).get();
74
74
  };
75
75
 
76
76
  const getCredentialsByAccountId = async (db, encryptionKey, { accountId }) => {
77
- const cred = await db.select().from(ott_zod.tables.accountCredentials).where(drizzleOrm.eq(ott_zod.tables.accountCredentials.accountId, accountId)).get();
77
+ const cred = await db.select().from(bank.tables.accountCredentials).where(drizzleOrm.eq(bank.tables.accountCredentials.accountId, accountId)).get();
78
78
  return cred ? {
79
79
  ...cred,
80
80
  value: await decrypt(cred.value, encryptionKey)
@@ -82,10 +82,10 @@ const getCredentialsByAccountId = async (db, encryptionKey, { accountId }) => {
82
82
  };
83
83
 
84
84
  const getPaymentRequestsByBatchIdQuery = async (db, { batchId }) => {
85
- return await db.select().from(ott_zod.tables.paymentRequest).where(
85
+ return await db.select().from(bank.tables.paymentRequest).where(
86
86
  drizzleOrm.and(
87
- drizzleOrm.eq(ott_zod.tables.paymentRequest.batchId, batchId),
88
- drizzleOrm.isNull(ott_zod.tables.paymentRequest.deletedAt)
87
+ drizzleOrm.eq(bank.tables.paymentRequest.batchId, batchId),
88
+ drizzleOrm.isNull(bank.tables.paymentRequest.deletedAt)
89
89
  )
90
90
  );
91
91
  };
@@ -2144,7 +2144,7 @@ declare const batch: drizzle_orm_sqlite_core.SQLiteTableWithColumns<{
2144
2144
  name: string;
2145
2145
  tableName: "batch";
2146
2146
  dataType: "string enum";
2147
- data: "AUTHORIZED" | "COMPLETED" | "PROCESSING" | "READY_TO_SIGN" | "FAILED";
2147
+ data: "AUTHORIZED" | "PROCESSING" | "READY_TO_SIGN" | "COMPLETED" | "FAILED";
2148
2148
  driverParam: string;
2149
2149
  notNull: false;
2150
2150
  hasDefault: false;
@@ -2415,7 +2415,7 @@ declare const payment: drizzle_orm_sqlite_core.SQLiteTableWithColumns<{
2415
2415
  name: string;
2416
2416
  tableName: "payment";
2417
2417
  dataType: "string enum";
2418
- data: "BOOKED" | "REJECTED" | "PENDING" | "PROCESSING" | "CANCELLED" | "SCHEDULED" | "HOLD" | "INFO";
2418
+ data: "PROCESSING" | "PENDING" | "BOOKED" | "CANCELLED" | "REJECTED" | "SCHEDULED" | "HOLD" | "INFO";
2419
2419
  driverParam: string;
2420
2420
  notNull: true;
2421
2421
  hasDefault: false;
@@ -2814,7 +2814,7 @@ declare const paymentRequest: drizzle_orm_sqlite_core.SQLiteTableWithColumns<{
2814
2814
  name: string;
2815
2815
  tableName: "payment_request";
2816
2816
  dataType: "string enum";
2817
- data: "OPENED" | "AUTHORIZED" | "COMPLETED" | "BOOKED" | "SETTLED" | "REJECTED" | "CLOSED";
2817
+ data: "AUTHORIZED" | "COMPLETED" | "BOOKED" | "REJECTED" | "OPENED" | "SETTLED" | "CLOSED";
2818
2818
  driverParam: string;
2819
2819
  notNull: true;
2820
2820
  hasDefault: false;
@@ -2144,7 +2144,7 @@ declare const batch: drizzle_orm_sqlite_core.SQLiteTableWithColumns<{
2144
2144
  name: string;
2145
2145
  tableName: "batch";
2146
2146
  dataType: "string enum";
2147
- data: "AUTHORIZED" | "COMPLETED" | "PROCESSING" | "READY_TO_SIGN" | "FAILED";
2147
+ data: "AUTHORIZED" | "PROCESSING" | "READY_TO_SIGN" | "COMPLETED" | "FAILED";
2148
2148
  driverParam: string;
2149
2149
  notNull: false;
2150
2150
  hasDefault: false;
@@ -2415,7 +2415,7 @@ declare const payment: drizzle_orm_sqlite_core.SQLiteTableWithColumns<{
2415
2415
  name: string;
2416
2416
  tableName: "payment";
2417
2417
  dataType: "string enum";
2418
- data: "BOOKED" | "REJECTED" | "PENDING" | "PROCESSING" | "CANCELLED" | "SCHEDULED" | "HOLD" | "INFO";
2418
+ data: "PROCESSING" | "PENDING" | "BOOKED" | "CANCELLED" | "REJECTED" | "SCHEDULED" | "HOLD" | "INFO";
2419
2419
  driverParam: string;
2420
2420
  notNull: true;
2421
2421
  hasDefault: false;
@@ -2814,7 +2814,7 @@ declare const paymentRequest: drizzle_orm_sqlite_core.SQLiteTableWithColumns<{
2814
2814
  name: string;
2815
2815
  tableName: "payment_request";
2816
2816
  dataType: "string enum";
2817
- data: "OPENED" | "AUTHORIZED" | "COMPLETED" | "BOOKED" | "SETTLED" | "REJECTED" | "CLOSED";
2817
+ data: "AUTHORIZED" | "COMPLETED" | "BOOKED" | "REJECTED" | "OPENED" | "SETTLED" | "CLOSED";
2818
2818
  driverParam: string;
2819
2819
  notNull: true;
2820
2820
  hasDefault: false;