@develit-services/bank 0.7.8 → 0.7.10

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.
@@ -1,11 +1,69 @@
1
- import { uuidv4, useResult, createInternalError } from '@develit-io/backend-sdk';
1
+ import { uuidv4, createInternalError, useResult } from '@develit-io/backend-sdk';
2
2
  import { format, parseISO } from 'date-fns';
3
3
  import { CURRENCY_CODES } from '@develit-io/general-codes';
4
- import './bank.PB07ttj3.mjs';
4
+ import './bank.993UA65l.mjs';
5
5
  import 'drizzle-orm';
6
6
  import { importPKCS8, SignJWT } from 'jose';
7
7
  import 'node:crypto';
8
8
 
9
+ function toIncomingPayment(input) {
10
+ return {
11
+ id: uuidv4(),
12
+ correlationId: input.correlationId,
13
+ refId: input.refId,
14
+ amount: input.amount,
15
+ direction: "OUTGOING",
16
+ paymentType: input.paymentType,
17
+ currency: input.currency,
18
+ status: "CREATED",
19
+ statusReason: null,
20
+ batchId: null,
21
+ initiatedAt: null,
22
+ // Will be set in preparePayment when sent to bank
23
+ processedAt: null,
24
+ vs: input.vs || null,
25
+ ss: input.ss || null,
26
+ ks: input.ks || null,
27
+ message: input.message || null,
28
+ creditor: input.creditor,
29
+ creditorIban: input.creditor.iban || null,
30
+ debtor: input.debtor,
31
+ debtorIban: input.debtor.iban || null,
32
+ sendAsSinglePayment: input.sendAsSinglePayment,
33
+ chargeBearer: input.chargeBearer,
34
+ instructionPriority: input.instructionPriority
35
+ };
36
+ }
37
+ function assignAccount(payment, account) {
38
+ return {
39
+ ...payment,
40
+ accountId: account.id,
41
+ connectorKey: account.connectorKey
42
+ };
43
+ }
44
+ function toBatchedPayment(payment) {
45
+ return payment;
46
+ }
47
+ function toPreparedPayment(payment, bankRefId, initiatedAt) {
48
+ return {
49
+ ...payment,
50
+ status: "PREPARED",
51
+ bankRefId,
52
+ initiatedAt: initiatedAt ?? /* @__PURE__ */ new Date()
53
+ };
54
+ }
55
+ function toCompletedPayment(payment, status, bankRefId, processedAt) {
56
+ return {
57
+ ...payment,
58
+ bankRefId,
59
+ status,
60
+ processedAt: processedAt ?? /* @__PURE__ */ new Date()
61
+ };
62
+ }
63
+ function batchTransform(payments, transformer) {
64
+ return payments.map(transformer);
65
+ }
66
+
9
67
  class IBankConnector {
10
68
  // ── Deprecated methods (backward compatibility) ────────────────────
11
69
  /**
@@ -94,64 +152,6 @@ class IBankConnector {
94
152
  }
95
153
  }
96
154
 
97
- function toIncomingPayment(input) {
98
- return {
99
- id: uuidv4(),
100
- correlationId: input.correlationId,
101
- refId: input.refId,
102
- amount: input.amount,
103
- direction: "OUTGOING",
104
- paymentType: input.paymentType,
105
- currency: input.currency,
106
- status: "CREATED",
107
- statusReason: null,
108
- batchId: null,
109
- initiatedAt: null,
110
- // Will be set in preparePayment when sent to bank
111
- processedAt: null,
112
- vs: input.vs || null,
113
- ss: input.ss || null,
114
- ks: input.ks || null,
115
- message: input.message || null,
116
- creditor: input.creditor,
117
- creditorIban: input.creditor.iban || null,
118
- debtor: input.debtor,
119
- debtorIban: input.debtor.iban || null,
120
- sendAsSinglePayment: input.sendAsSinglePayment,
121
- chargeBearer: input.chargeBearer,
122
- instructionPriority: input.instructionPriority
123
- };
124
- }
125
- function assignAccount(payment, account) {
126
- return {
127
- ...payment,
128
- accountId: account.id,
129
- connectorKey: account.connectorKey
130
- };
131
- }
132
- function toBatchedPayment(payment) {
133
- return payment;
134
- }
135
- function toPreparedPayment(payment, bankRefId, initiatedAt) {
136
- return {
137
- ...payment,
138
- status: "PREPARED",
139
- bankRefId,
140
- initiatedAt: initiatedAt ?? /* @__PURE__ */ new Date()
141
- };
142
- }
143
- function toCompletedPayment(payment, status, bankRefId, processedAt) {
144
- return {
145
- ...payment,
146
- bankRefId,
147
- status,
148
- processedAt: processedAt ?? /* @__PURE__ */ new Date()
149
- };
150
- }
151
- function batchTransform(payments, transformer) {
152
- return payments.map(transformer);
153
- }
154
-
155
155
  async function signFinbricksJws({
156
156
  privateKeyPem,
157
157
  merchantId,
@@ -386,7 +386,8 @@ class FinbricksConnector extends IBankConnector {
386
386
  MERCHANT_ID,
387
387
  PRIVATE_KEY_PEM,
388
388
  REDIRECT_URI,
389
- connectedAccounts
389
+ connectedAccounts,
390
+ resolveCredentials
390
391
  }) {
391
392
  super();
392
393
  this.connectorKey = "FINBRICKS";
@@ -399,6 +400,26 @@ class FinbricksConnector extends IBankConnector {
399
400
  REDIRECT_URI
400
401
  );
401
402
  this.connectedAccounts = connectedAccounts;
403
+ this.resolveCredentials = resolveCredentials;
404
+ }
405
+ async getClientId(accountId) {
406
+ if (!this.resolveCredentials) {
407
+ throw createInternalError(null, {
408
+ message: "Credentials resolver not provided"
409
+ });
410
+ }
411
+ const credentials = await this.resolveCredentials(accountId);
412
+ if (!credentials) {
413
+ throw createInternalError(null, {
414
+ message: `No credentials found for account: ${accountId}`
415
+ });
416
+ }
417
+ if (credentials.expiresAt < /* @__PURE__ */ new Date()) {
418
+ throw createInternalError(null, {
419
+ message: `Credentials have expired for account: ${accountId}`
420
+ });
421
+ }
422
+ return credentials.value;
402
423
  }
403
424
  async getAuthUri({ ott }) {
404
425
  const clientId = uuidv4();
@@ -458,8 +479,7 @@ class FinbricksConnector extends IBankConnector {
458
479
  connectorKey: this.PROVIDER,
459
480
  currency: acc.currency,
460
481
  iban: acc.identification.iban,
461
- id: acc.id,
462
- token: clientId
482
+ id: acc.id
463
483
  }))
464
484
  );
465
485
  return {
@@ -554,6 +574,7 @@ class FinbricksConnector extends IBankConnector {
554
574
  throw createInternalError(null, {
555
575
  message: `Batch for unauthorized client with iban: ${payments[0].debtor.iban}`
556
576
  });
577
+ const clientId = await this.getClientId(authorizedClient.id);
557
578
  const [response, error] = await useResult(
558
579
  this.finbricks.request({
559
580
  endpoint: FINBRICKS_ENDPOINTS.TRANSACTION_BATCH_INIT,
@@ -562,7 +583,7 @@ class FinbricksConnector extends IBankConnector {
562
583
  batchPaymentIdentification: {
563
584
  merchantId: this.finbricks.MERCHANT_ID,
564
585
  debtorAccountIban: payments[0].debtor.iban,
565
- clientId: authorizedClient.token,
586
+ clientId,
566
587
  callbackUrl: `${this.finbricks.REDIRECT_URI}?type=batch&batchId=${batchId}`,
567
588
  merchantBatchId: batchId
568
589
  },
@@ -599,6 +620,10 @@ class FinbricksConnector extends IBankConnector {
599
620
  throw new Error("Finbricks: Foreign batch not implemented");
600
621
  }
601
622
  async initiateForeignPayment(payment) {
623
+ const debtorAccount = this.connectedAccounts.find(
624
+ (acc) => acc.iban === payment.debtorIban
625
+ );
626
+ const clientId = await this.getClientId(debtorAccount.id);
602
627
  const bankRefId = uuidv4();
603
628
  const [response, error] = await useResult(
604
629
  this.finbricks.request({
@@ -607,9 +632,7 @@ class FinbricksConnector extends IBankConnector {
607
632
  body: {
608
633
  merchantIdentification: {
609
634
  merchantId: this.finbricks.MERCHANT_ID,
610
- clientId: this.connectedAccounts.find(
611
- (acc) => acc.iban === payment.debtorIban
612
- ).token
635
+ clientId
613
636
  },
614
637
  paymentIdentification: {
615
638
  merchantTransactionId: bankRefId
@@ -660,6 +683,10 @@ class FinbricksConnector extends IBankConnector {
660
683
  };
661
684
  }
662
685
  async initiateSEPAPayment(payment) {
686
+ const debtorAccount = this.connectedAccounts.find(
687
+ (acc) => acc.iban === payment.debtorIban
688
+ );
689
+ const clientId = await this.getClientId(debtorAccount.id);
663
690
  const bankRefId = uuidv4();
664
691
  const [response, error] = await useResult(
665
692
  this.finbricks.request({
@@ -668,9 +695,7 @@ class FinbricksConnector extends IBankConnector {
668
695
  body: {
669
696
  merchantIdentification: {
670
697
  merchantId: this.finbricks.MERCHANT_ID,
671
- clientId: this.connectedAccounts.find(
672
- (acc) => acc.iban === payment.debtorIban
673
- ).token
698
+ clientId
674
699
  },
675
700
  paymentIdentification: {
676
701
  merchantTransactionId: bankRefId
@@ -749,6 +774,10 @@ class FinbricksConnector extends IBankConnector {
749
774
  account,
750
775
  filter
751
776
  }) {
777
+ const connectedAccount = this.connectedAccounts.find(
778
+ (acc) => acc.iban === account.iban
779
+ );
780
+ const clientId = await this.getClientId(connectedAccount.id);
752
781
  let cursor = null;
753
782
  const allPayments = [];
754
783
  const dateFormat = "yyyy-MM-dd";
@@ -761,9 +790,7 @@ class FinbricksConnector extends IBankConnector {
761
790
  endpoint: FINBRICKS_ENDPOINTS.ACCOUNT_TRANSACTIONS,
762
791
  query: {
763
792
  merchantId: this.finbricks.MERCHANT_ID,
764
- clientId: this.connectedAccounts.find(
765
- (acc) => acc.iban === account.iban
766
- ).token,
793
+ clientId,
767
794
  paymentProvider: this.PROVIDER,
768
795
  bankAccountId: account.bankRefId,
769
796
  dateFrom,
@@ -844,6 +871,15 @@ class FinbricksConnector extends IBankConnector {
844
871
  }
845
872
  }
846
873
 
874
+ class CsobConnector extends FinbricksConnector {
875
+ constructor(config) {
876
+ super("CSOB", config);
877
+ }
878
+ supportsBatch(paymentType) {
879
+ return paymentType === "DOMESTIC";
880
+ }
881
+ }
882
+
847
883
  class AirBankConnector extends FinbricksConnector {
848
884
  constructor(config) {
849
885
  super("AIRBANK", config);
@@ -920,7 +956,8 @@ const getPaymentDirection = (payment, iban) => {
920
956
  const initiateConnector = async ({
921
957
  bank,
922
958
  env,
923
- connectedAccounts
959
+ connectedAccounts,
960
+ resolveCredentials
924
961
  }) => {
925
962
  switch (bank) {
926
963
  case "ERSTE":
@@ -938,7 +975,8 @@ const initiateConnector = async ({
938
975
  AUTH_URI: env.ERSTE_AUTH_URI,
939
976
  PAYMENTS_URI: env.ERSTE_PAYMENTS_URI,
940
977
  ACCOUNTS_URI: env.ERSTE_ACCOUNTS_URI,
941
- connectedAccounts
978
+ connectedAccounts,
979
+ resolveCredentials
942
980
  });
943
981
  case "CREDITAS":
944
982
  return new CreditasConnector({
@@ -948,7 +986,8 @@ const initiateConnector = async ({
948
986
  secretName: "BANK_SERVICE_FINBRICKS_PRIVATE_KEY_PEM"
949
987
  })).data?.secretValue || "",
950
988
  REDIRECT_URI: env.REDIRECT_URI,
951
- connectedAccounts
989
+ connectedAccounts,
990
+ resolveCredentials
952
991
  });
953
992
  case "MOCK_COBS":
954
993
  return new MockCobsConnector({
@@ -958,7 +997,8 @@ const initiateConnector = async ({
958
997
  secretName: "BANK_SERVICE_FINBRICKS_PRIVATE_KEY_PEM"
959
998
  })).data?.secretValue || "",
960
999
  REDIRECT_URI: env.REDIRECT_URI,
961
- connectedAccounts
1000
+ connectedAccounts,
1001
+ resolveCredentials
962
1002
  });
963
1003
  case "FIO":
964
1004
  return new FioConnector({
@@ -968,7 +1008,8 @@ const initiateConnector = async ({
968
1008
  secretName: "BANK_SERVICE_FINBRICKS_PRIVATE_KEY_PEM"
969
1009
  })).data?.secretValue || "",
970
1010
  REDIRECT_URI: env.REDIRECT_URI,
971
- connectedAccounts
1011
+ connectedAccounts,
1012
+ resolveCredentials
972
1013
  });
973
1014
  case "MONETA":
974
1015
  return new MonetaConnector({
@@ -978,7 +1019,8 @@ const initiateConnector = async ({
978
1019
  secretName: "BANK_SERVICE_FINBRICKS_PRIVATE_KEY_PEM"
979
1020
  })).data?.secretValue || "",
980
1021
  REDIRECT_URI: env.REDIRECT_URI,
981
- connectedAccounts
1022
+ connectedAccounts,
1023
+ resolveCredentials
982
1024
  });
983
1025
  case "AIRBANK":
984
1026
  return new AirBankConnector({
@@ -988,7 +1030,8 @@ const initiateConnector = async ({
988
1030
  secretName: "BANK_SERVICE_FINBRICKS_PRIVATE_KEY_PEM"
989
1031
  })).data?.secretValue || "",
990
1032
  REDIRECT_URI: env.REDIRECT_URI,
991
- connectedAccounts
1033
+ connectedAccounts,
1034
+ resolveCredentials
992
1035
  });
993
1036
  case "CSAS":
994
1037
  return new CSASConnector({
@@ -998,7 +1041,8 @@ const initiateConnector = async ({
998
1041
  secretName: "BANK_SERVICE_FINBRICKS_PRIVATE_KEY_PEM"
999
1042
  })).data?.secretValue || "",
1000
1043
  REDIRECT_URI: env.REDIRECT_URI,
1001
- connectedAccounts
1044
+ connectedAccounts,
1045
+ resolveCredentials
1002
1046
  });
1003
1047
  case "KB":
1004
1048
  return new KBConnector({
@@ -1008,7 +1052,19 @@ const initiateConnector = async ({
1008
1052
  secretName: "BANK_SERVICE_FINBRICKS_PRIVATE_KEY_PEM"
1009
1053
  })).data?.secretValue || "",
1010
1054
  REDIRECT_URI: env.REDIRECT_URI,
1011
- connectedAccounts
1055
+ connectedAccounts,
1056
+ resolveCredentials
1057
+ });
1058
+ case "CSOB":
1059
+ return new CsobConnector({
1060
+ BASE_URI: env.FINBRICKS_BASE_URI,
1061
+ MERCHANT_ID: env.FINBRICKS_MERCHANT_ID,
1062
+ PRIVATE_KEY_PEM: (await env.SECRETS_STORE.get({
1063
+ secretName: "BANK_SERVICE_FINBRICKS_PRIVATE_KEY_PEM"
1064
+ })).data?.secretValue || "",
1065
+ REDIRECT_URI: env.REDIRECT_URI,
1066
+ connectedAccounts,
1067
+ resolveCredentials
1012
1068
  });
1013
1069
  case "DBU":
1014
1070
  return new DbuConnector({
@@ -1295,17 +1351,7 @@ class DbuConnector extends IBankConnector {
1295
1351
  bankRefId: idAccount,
1296
1352
  currency: "CZK"
1297
1353
  };
1298
- const credentials = [
1299
- {
1300
- accountId: id,
1301
- connectorKey: "DBU",
1302
- type: "API_KEY",
1303
- value: "dbu-tunnel-auth",
1304
- expiresAt: new Date(Date.now() + 10 * 365 * 24 * 60 * 60 * 1e3)
1305
- // 10 years
1306
- }
1307
- ];
1308
- return { credentials, accounts: [account] };
1354
+ return { credentials: [], accounts: [account] };
1309
1355
  }
1310
1356
  async listAccounts() {
1311
1357
  return [];
@@ -1530,6 +1576,7 @@ class ErsteConnector extends IBankConnector {
1530
1576
  this.PAYMENTS_URI = config.PAYMENTS_URI;
1531
1577
  this.ACCOUNTS_URI = config.ACCOUNTS_URI;
1532
1578
  this.connectedAccounts = config.connectedAccounts;
1579
+ this.resolveCredentials = config.resolveCredentials;
1533
1580
  }
1534
1581
  initiateDomesticPayment(_payment) {
1535
1582
  throw new Error("Method not implemented.");
@@ -1926,4 +1973,4 @@ class MockConnector extends IBankConnector {
1926
1973
  }
1927
1974
  }
1928
1975
 
1929
- export { DbuConnector as D, ErsteConnector as E, FINBRICKS_ENDPOINTS as F, IBankConnector as I, KBConnector as K, MockCobsConnector as M, FinbricksClient as a, FinbricksConnector as b, MockConnector as c, assignAccount as d, batchTransform as e, toCompletedPayment as f, toIncomingPayment as g, toPreparedPayment as h, initiateConnector as i, signFinbricksJws as s, toBatchedPayment as t, useFinbricksFetch as u };
1976
+ export { CsobConnector as C, DbuConnector as D, ErsteConnector as E, FINBRICKS_ENDPOINTS as F, IBankConnector as I, KBConnector as K, MockCobsConnector as M, FinbricksClient as a, FinbricksConnector as b, MockConnector as c, assignAccount as d, batchTransform as e, toCompletedPayment as f, toIncomingPayment as g, toPreparedPayment as h, initiateConnector as i, signFinbricksJws as s, toBatchedPayment as t, useFinbricksFetch as u };
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- const payment_schema = require('./bank.DgGri2Wr.cjs');
3
+ const payment_schema = require('./bank.IVhZ_RlH.cjs');
4
4
 
5
5
  const schema = {
6
6
  __proto__: null,
@@ -4,8 +4,8 @@ const backendSdk = require('@develit-io/backend-sdk');
4
4
  const relations = require('drizzle-orm/relations');
5
5
  const sqliteCore = require('drizzle-orm/sqlite-core');
6
6
  require('date-fns');
7
- const generalCodes = require('@develit-io/general-codes');
8
7
  require('jose');
8
+ const generalCodes = require('@develit-io/general-codes');
9
9
  require('drizzle-orm');
10
10
  require('node:crypto');
11
11
  const drizzleZod = require('drizzle-zod');
@@ -43,7 +43,8 @@ const CONNECTOR_KEYS = [
43
43
  "DBU",
44
44
  "CSAS",
45
45
  "AIRBANK",
46
- "KB"
46
+ "KB",
47
+ "CSOB"
47
48
  ];
48
49
  const CREDENTIALS_TYPES = [
49
50
  "AUTH_TOKEN",
@@ -1,4 +1,4 @@
1
- import { n as account, p as accountCredentials, q as batch, r as ott, s as payment, t as paymentRelations } from './bank.PB07ttj3.mjs';
1
+ import { n as account, p as accountCredentials, q as batch, r as ott, s as payment, t as paymentRelations } from './bank.993UA65l.mjs';
2
2
 
3
3
  const schema = {
4
4
  __proto__: null,
package/dist/types.cjs CHANGED
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
- const mock_connector = require('./shared/bank.kYaMR0UG.cjs');
4
- const payment_schema = require('./shared/bank.DgGri2Wr.cjs');
3
+ const mock_connector = require('./shared/bank.Ce-NBBw1.cjs');
4
+ const payment_schema = require('./shared/bank.IVhZ_RlH.cjs');
5
5
  const batchLifecycle = require('./shared/bank.Bg3Pdwm4.cjs');
6
6
  const generalCodes = require('@develit-io/general-codes');
7
7
  require('@develit-io/backend-sdk');
@@ -15,6 +15,7 @@ require('drizzle-zod');
15
15
 
16
16
 
17
17
 
18
+ exports.CsobConnector = mock_connector.CsobConnector;
18
19
  exports.DbuConnector = mock_connector.DbuConnector;
19
20
  exports.ErsteConnector = mock_connector.ErsteConnector;
20
21
  exports.FINBRICKS_ENDPOINTS = mock_connector.FINBRICKS_ENDPOINTS;