@develit-services/bank 0.0.28 → 0.0.29

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 (39) hide show
  1. package/dist/database/schema.cjs +10 -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 +8 -1
  6. package/dist/export/worker.cjs +762 -575
  7. package/dist/export/worker.d.cts +52 -12
  8. package/dist/export/worker.d.mts +52 -12
  9. package/dist/export/worker.d.ts +52 -12
  10. package/dist/export/worker.mjs +732 -545
  11. package/dist/export/wrangler.cjs +1 -1
  12. package/dist/export/wrangler.d.cts +2 -3
  13. package/dist/export/wrangler.d.mts +2 -3
  14. package/dist/export/wrangler.d.ts +2 -3
  15. package/dist/export/wrangler.mjs +1 -1
  16. package/dist/shared/{bank.BuNG2S8h.d.cts → bank.07oMM145.d.cts} +528 -11
  17. package/dist/shared/{bank.BuNG2S8h.d.mts → bank.07oMM145.d.mts} +528 -11
  18. package/dist/shared/{bank.BuNG2S8h.d.ts → bank.07oMM145.d.ts} +528 -11
  19. package/dist/shared/bank.5CiXtVIb.mjs +9 -0
  20. package/dist/shared/{bank.CEZKAEiY.d.cts → bank.BchnXQDL.d.cts} +2 -2
  21. package/dist/shared/{bank.CEZKAEiY.d.mts → bank.BchnXQDL.d.mts} +2 -2
  22. package/dist/shared/{bank.CEZKAEiY.d.ts → bank.BchnXQDL.d.ts} +2 -2
  23. package/dist/shared/bank.BeJh7l2V.cjs +11 -0
  24. package/dist/shared/bank.By8Vh0l5.d.ts +1648 -0
  25. package/dist/shared/bank.CWt0unt2.d.cts +1648 -0
  26. package/dist/shared/{bank.DnDcNEvX.mjs → bank.Ce4ZEpjD.mjs} +329 -107
  27. package/dist/shared/bank.DS18_iuS.d.mts +1648 -0
  28. package/dist/shared/{bank.Cy_TcyKb.cjs → bank.DXzEZPsO.cjs} +346 -106
  29. package/dist/types.cjs +32 -20
  30. package/dist/types.d.cts +496 -35
  31. package/dist/types.d.mts +496 -35
  32. package/dist/types.d.ts +496 -35
  33. package/dist/types.mjs +5 -4
  34. package/package.json +1 -1
  35. package/dist/shared/bank.BkLncGmL.d.ts +0 -122
  36. package/dist/shared/bank.C9jAvwna.mjs +0 -90
  37. package/dist/shared/bank.DWVLVMDa.d.mts +0 -122
  38. package/dist/shared/bank.DmypH3Au.d.cts +0 -122
  39. package/dist/shared/bank.P9gDUycr.cjs +0 -98
@@ -1,74 +1,31 @@
1
1
  import { uuidv4, useResult, createInternalError, develitWorker, first, RPCResponse, action, service } from '@develit-io/backend-sdk';
2
- import { P as PAYMENT_TYPES, t as tables, F as FinbricksConnector, M as MockConnector, a as MockCobsConnector, E as ErsteConnector, g as getPaymentDirection } from '../shared/bank.DnDcNEvX.mjs';
2
+ import { t as tables, F as FinbricksConnector, M as MockConnector, E as ErsteConnector, P as PAYMENT_TYPES, e as CONNECTOR_KEYS, q as getPaymentDirection } from '../shared/bank.Ce4ZEpjD.mjs';
3
3
  import { WorkerEntrypoint } from 'cloudflare:workers';
4
4
  import { drizzle } from 'drizzle-orm/d1';
5
5
  import { z } from 'zod';
6
6
  import { CURRENCY_CODES } from '@develit-io/general-codes';
7
- import { C as CONNECTOR_KEYS } from '../shared/bank.C9jAvwna.mjs';
8
7
  import 'jose';
9
8
  import { eq, and, inArray, desc, sql } from 'drizzle-orm';
9
+ import { M as MockCobsConnector } from '../shared/bank.5CiXtVIb.mjs';
10
10
  import superjson from 'superjson';
11
- import 'date-fns';
11
+ import 'drizzle-zod';
12
12
  import 'drizzle-orm/sqlite-core';
13
+ import 'date-fns';
13
14
  import 'drizzle-orm/relations';
14
15
 
15
- const sendPaymentInputSchema = z.object({
16
- refId: z.string(),
17
- amount: z.number().positive(),
18
- paymentType: z.enum(PAYMENT_TYPES),
19
- currency: z.enum(CURRENCY_CODES),
20
- vs: z.string().nullable().optional(),
21
- ss: z.string().nullable().optional(),
22
- ks: z.string().nullable().optional(),
23
- message: z.string().nullable().optional(),
24
- creditorHolderName: z.string(),
25
- creditorAccountNumberWithBankCode: z.string(),
26
- creditorIban: z.string(),
27
- debtorHolderName: z.string(),
28
- debtorAccountNumberWithBankCode: z.string(),
29
- debtorIban: z.string()
30
- });
31
-
32
- const getAuthUriInputSchema = z.object({
33
- accountId: z.string()
34
- });
35
-
36
- const authorizeAccountInputSchema = z.object({
37
- ott: z.string(),
38
- urlParams: z.string()
39
- });
40
-
41
- const simulateDepositInputSchema = z.object({
42
- amount: z.number(),
43
- currency: z.enum(CURRENCY_CODES),
44
- bankingVs: z.string().max(10),
45
- bankingSs: z.string().max(10).optional(),
46
- bankingKs: z.string().max(10).optional(),
47
- message: z.string(),
48
- creditorIban: z.string().max(34),
49
- creditorHolderName: z.string(),
50
- debtorIban: z.string().max(34),
51
- debtorHolderName: z.string()
52
- });
53
-
54
- const setLastSyncAtInputSchema = z.object({
55
- iban: z.string(),
56
- lastSyncedAt: z.coerce.date()
57
- });
58
-
59
- const initiateConnectorInputSchema = z.object({
60
- connectorKey: z.enum(CONNECTOR_KEYS)
61
- });
62
-
63
- const getBatchesInputSchema = z.object({
64
- limit: z.number().positive().optional().default(100),
65
- offset: z.number().min(0).optional().default(0)
66
- });
67
-
68
- const processBatchInputSchema = z.object({
69
- connectorKey: z.enum(CONNECTOR_KEYS),
70
- batch: z.custom()
71
- });
16
+ const upsertAccountCommand = (db, { account }) => {
17
+ const id = account.id || uuidv4();
18
+ const command = db.insert(tables.account).values({ ...account, id }).onConflictDoUpdate({
19
+ target: tables.account.iban,
20
+ set: {
21
+ ...account
22
+ }
23
+ }).returning();
24
+ return {
25
+ id,
26
+ command
27
+ };
28
+ };
72
29
 
73
30
  const createPaymentCommand = (db, { payment }) => {
74
31
  return {
@@ -101,7 +58,7 @@ const upsertBatchCommand = (db, { batch }) => {
101
58
 
102
59
  const createOneTimeTokenCommand = (db, {
103
60
  ott,
104
- account,
61
+ refId,
105
62
  tokenType
106
63
  }) => {
107
64
  const id = uuidv4();
@@ -110,13 +67,38 @@ const createOneTimeTokenCommand = (db, {
110
67
  id,
111
68
  oneTimeToken: ott,
112
69
  tokenType,
113
- accountId: account.id,
114
- connectorKey: account.connectorKey,
115
- expiresAt
70
+ expiresAt,
71
+ refId
116
72
  }).returning();
117
73
  return { id, command };
118
74
  };
119
75
 
76
+ const expireOneTimeTokenCommand = (db, {
77
+ ott
78
+ }) => {
79
+ return {
80
+ command: db.update(tables.ott).set({
81
+ expiresAt: /* @__PURE__ */ new Date()
82
+ }).where(eq(tables.ott.oneTimeToken, ott))
83
+ };
84
+ };
85
+
86
+ const createAccountCredentialsCommand = (db, { credentials }) => {
87
+ const id = credentials.id || uuidv4();
88
+ const command = db.insert(tables.accountCredentials).values({ ...credentials, id }).returning();
89
+ return {
90
+ id,
91
+ command
92
+ };
93
+ };
94
+
95
+ const deleteAccountCredentialsCommand = (db, { accountId }) => {
96
+ const command = db.delete(tables.accountCredentials).where(eq(tables.accountCredentials.accountId, accountId));
97
+ return {
98
+ command
99
+ };
100
+ };
101
+
120
102
  const getPaymentByRefIdQuery = async (db, { refId }) => {
121
103
  const payment = await db.select().from(tables.payment).where(eq(tables.payment.refId, refId)).limit(1).get();
122
104
  return payment;
@@ -140,6 +122,25 @@ const getOttQuery = async (db, { ott }) => {
140
122
  return await db.select().from(tables.ott).where(eq(tables.ott.oneTimeToken, ott)).get();
141
123
  };
142
124
 
125
+ const getAllPendingBatchesQuery = (db) => {
126
+ return db.select().from(tables.batch).where(
127
+ inArray(tables.batch.status, [
128
+ "PROCESSING",
129
+ "READY_TO_SIGN",
130
+ "WAITING_FOR_PROCESSING"
131
+ ])
132
+ );
133
+ };
134
+
135
+ const getCredentialsByAccountId = async (db, { accountId }) => {
136
+ const cred = await db.select().from(tables.accountCredentials).where(eq(tables.accountCredentials.accountId, accountId)).get();
137
+ return cred;
138
+ };
139
+
140
+ const getAccountByIbanQuery = async (db, { iban }) => {
141
+ return await db.select().from(tables.account).where(eq(tables.account.iban, iban)).get();
142
+ };
143
+
143
144
  class CreditasConnector extends FinbricksConnector {
144
145
  constructor(config) {
145
146
  super("CREDITAS", config);
@@ -158,53 +159,57 @@ class MonetaConnector extends FinbricksConnector {
158
159
  }
159
160
  }
160
161
 
161
- const initiateConnector = (bank, env) => {
162
+ const initiateConnector = ({
163
+ bank,
164
+ env,
165
+ connectedAccounts
166
+ }) => {
162
167
  switch (bank) {
163
168
  case "ERSTE":
164
169
  return new ErsteConnector({
165
170
  API_KEY: env.ERSTE_API_KEY,
166
171
  CLIENT_ID: env.ERSTE_CLIENT_ID,
167
172
  CLIENT_SECRET: env.ERSTE_CLIENT_SECRET,
168
- REDIRECT_URI: env.ERSTE_REDIRECT_URI,
173
+ REDIRECT_URI: env.REDIRECT_URI,
169
174
  AUTH_URI: env.ERSTE_AUTH_URI,
170
175
  PAYMENTS_URI: env.ERSTE_PAYMENTS_URI,
171
176
  ACCOUNTS_URI: env.ERSTE_ACCOUNTS_URI,
172
- KV: env.BANK_KV
177
+ connectedAccounts
173
178
  });
174
179
  case "CREDITAS":
175
180
  return new CreditasConnector({
176
181
  BASE_URI: env.FINBRICKS_BASE_URI,
177
182
  MERCHANT_ID: env.FINBRICKS_MERCHANT_ID,
178
183
  PRIVATE_KEY_PEM: env.FINBRICKS_PRIVATE_KEY_PEM,
179
- REDIRECT_URI: env.ERSTE_REDIRECT_URI,
180
- KV: env.BANK_KV
184
+ REDIRECT_URI: env.REDIRECT_URI,
185
+ connectedAccounts
181
186
  });
182
187
  case "MOCK_COBS":
183
188
  return new MockCobsConnector({
184
189
  BASE_URI: env.FINBRICKS_BASE_URI,
185
190
  MERCHANT_ID: env.FINBRICKS_MERCHANT_ID,
186
191
  PRIVATE_KEY_PEM: env.FINBRICKS_PRIVATE_KEY_PEM,
187
- REDIRECT_URI: env.ERSTE_REDIRECT_URI,
188
- KV: env.BANK_KV
192
+ REDIRECT_URI: env.REDIRECT_URI,
193
+ connectedAccounts
189
194
  });
190
195
  case "FIO":
191
196
  return new FioConnector({
192
197
  BASE_URI: env.FINBRICKS_BASE_URI,
193
198
  MERCHANT_ID: env.FINBRICKS_MERCHANT_ID,
194
199
  PRIVATE_KEY_PEM: env.FINBRICKS_PRIVATE_KEY_PEM,
195
- REDIRECT_URI: env.ERSTE_REDIRECT_URI,
196
- KV: env.BANK_KV
200
+ REDIRECT_URI: env.REDIRECT_URI,
201
+ connectedAccounts
197
202
  });
198
203
  case "MONETA":
199
204
  return new MonetaConnector({
200
205
  BASE_URI: env.FINBRICKS_BASE_URI,
201
206
  MERCHANT_ID: env.FINBRICKS_MERCHANT_ID,
202
207
  PRIVATE_KEY_PEM: env.FINBRICKS_PRIVATE_KEY_PEM,
203
- REDIRECT_URI: env.ERSTE_REDIRECT_URI,
204
- KV: env.BANK_KV
208
+ REDIRECT_URI: env.REDIRECT_URI,
209
+ connectedAccounts
205
210
  });
206
211
  default:
207
- return new MockConnector(env.BANK_KV);
212
+ return new MockConnector();
208
213
  }
209
214
  };
210
215
 
@@ -213,7 +218,7 @@ const useSync = (kv) => {
213
218
  account
214
219
  }) => {
215
220
  const [rawSync, rawSyncError] = await useResult(
216
- kv.get(`sync-log:${account.identification.iban}:${account.currency}`)
221
+ kv.get(`sync-log:${account.iban}:${account.currency}`)
217
222
  );
218
223
  if (rawSyncError) throw createInternalError(rawSyncError);
219
224
  if (!rawSync) return null;
@@ -225,7 +230,7 @@ const useSync = (kv) => {
225
230
  }) => {
226
231
  const [_, error] = await useResult(
227
232
  kv.put(
228
- `sync-log:${account.identification.iban}:${account.currency}`,
233
+ `sync-log:${account.iban}:${account.currency}`,
229
234
  superjson.stringify(log)
230
235
  )
231
236
  );
@@ -241,7 +246,7 @@ const seperateSupportedPayments = (mappedPayments, accounts) => {
241
246
  const [supportedPayments, unsupportedPayments] = mappedPayments.reduce(
242
247
  ([valid, invalid], payment) => {
243
248
  const isValid = accounts.some(
244
- (acc) => acc.identification.iban === payment.debtorIban && acc.currency === payment.currency
249
+ (acc) => acc.iban === payment.debtorIban && acc.currency === payment.currency
245
250
  );
246
251
  if (isValid) {
247
252
  valid.push(payment);
@@ -258,6 +263,66 @@ const seperateSupportedPayments = (mappedPayments, accounts) => {
258
263
  };
259
264
  };
260
265
 
266
+ const sendPaymentInputSchema = z.object({
267
+ refId: z.string(),
268
+ amount: z.number().positive(),
269
+ paymentType: z.enum(PAYMENT_TYPES),
270
+ currency: z.enum(CURRENCY_CODES),
271
+ vs: z.string().nullable().optional(),
272
+ ss: z.string().nullable().optional(),
273
+ ks: z.string().nullable().optional(),
274
+ message: z.string().nullable().optional(),
275
+ creditorHolderName: z.string(),
276
+ creditorAccountNumberWithBankCode: z.string(),
277
+ creditorIban: z.string(),
278
+ debtorHolderName: z.string(),
279
+ debtorAccountNumberWithBankCode: z.string(),
280
+ debtorIban: z.string()
281
+ });
282
+
283
+ const getAuthUriInputSchema = z.object({
284
+ connectorKey: z.enum(CONNECTOR_KEYS)
285
+ });
286
+
287
+ const authorizeAccountInputSchema = z.object({
288
+ ott: z.string(),
289
+ urlParams: z.string()
290
+ });
291
+
292
+ const simulateDepositInputSchema = z.object({
293
+ amount: z.number(),
294
+ currency: z.enum(CURRENCY_CODES),
295
+ bankingVs: z.string().max(10),
296
+ bankingSs: z.string().max(10).optional(),
297
+ bankingKs: z.string().max(10).optional(),
298
+ message: z.string(),
299
+ creditorIban: z.string().max(34),
300
+ creditorHolderName: z.string(),
301
+ debtorIban: z.string().max(34),
302
+ debtorHolderName: z.string(),
303
+ connectorKey: z.enum(CONNECTOR_KEYS)
304
+ });
305
+
306
+ const setLastSyncAtInputSchema = z.object({
307
+ iban: z.string(),
308
+ lastSyncedAt: z.coerce.date()
309
+ });
310
+
311
+ const initiateConnectorInputSchema = z.object({
312
+ connectorKey: z.enum(CONNECTOR_KEYS),
313
+ withAuth: z.boolean().default(true).optional()
314
+ });
315
+
316
+ const getBatchesInputSchema = z.object({
317
+ limit: z.number().positive().optional().default(100),
318
+ offset: z.number().min(0).optional().default(0)
319
+ });
320
+
321
+ const processBatchInputSchema = z.object({
322
+ connectorKey: z.enum(CONNECTOR_KEYS),
323
+ batch: z.custom()
324
+ });
325
+
261
326
  var __defProp = Object.defineProperty;
262
327
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
263
328
  var __decorateClass = (decorators, target, key, kind) => {
@@ -269,13 +334,17 @@ var __decorateClass = (decorators, target, key, kind) => {
269
334
  return result;
270
335
  };
271
336
  let BankServiceBase = class extends develitWorker(WorkerEntrypoint) {
272
- constructor(ctx, env, configAccounts) {
337
+ constructor(ctx, env, config) {
273
338
  super(ctx, env);
274
- this.configAccounts = configAccounts;
339
+ this.allowedProviders = [];
340
+ this.allowedProviders = config.allowedProviders;
275
341
  this.db = drizzle(this.env.BANK_D1, { schema: tables });
276
342
  }
277
- get accounts() {
278
- return this.env.ENVIRONMENT === "production" ? this.configAccounts.productionAccounts : this.configAccounts.stagingAccounts;
343
+ getAllowedProviders() {
344
+ return this.allowedProviders;
345
+ }
346
+ async getAccounts() {
347
+ return await this.db.select().from(tables.account);
279
348
  }
280
349
  accountFetchInterval(connectorKey) {
281
350
  switch (connectorKey) {
@@ -293,16 +362,17 @@ let BankServiceBase = class extends develitWorker(WorkerEntrypoint) {
293
362
  return this.handleAction(null, {}, async () => {
294
363
  const accountsToSync = [];
295
364
  const { getLastSync } = useSync(this.env.BANK_KV);
296
- for (const account of this.accounts.filter(
365
+ const accounts = await this.getAccounts();
366
+ for (const account of accounts.filter(
297
367
  (acc) => !!!acc.connectorKey.includes("MOCK")
298
368
  )) {
299
- let lastSync = await getLastSync({ account });
369
+ let lastSync = await getLastSync({ account: { ...account, token: "" } });
300
370
  if (!lastSync) {
301
371
  await this.setLastSyncAt({
302
- iban: account.identification.iban,
303
- lastSyncedAt: account.fallbackLastSync
372
+ iban: account.iban,
373
+ lastSyncedAt: account.lastSyncedAt || /* @__PURE__ */ new Date()
304
374
  });
305
- lastSync = await getLastSync({ account });
375
+ lastSync = await getLastSync({ account: { ...account, token: "" } });
306
376
  if (!lastSync) continue;
307
377
  }
308
378
  const accountFetchInterval = this.accountFetchInterval(
@@ -315,7 +385,8 @@ let BankServiceBase = class extends develitWorker(WorkerEntrypoint) {
315
385
  if (!shouldFetch) continue;
316
386
  accountsToSync.push({
317
387
  ...account,
318
- lastSyncAt: lastSync
388
+ lastSyncAt: lastSync,
389
+ token: ""
319
390
  });
320
391
  }
321
392
  console.log("ACCS TO SYNC", accountsToSync.length);
@@ -328,16 +399,95 @@ let BankServiceBase = class extends develitWorker(WorkerEntrypoint) {
328
399
  console.log("Scheduled CRON payments processing");
329
400
  await this.syncAccounts();
330
401
  }
402
+ if (controller.cron === this.env.CRON_BATCH_STATUSES) {
403
+ console.log("Scheduled CRON batch statuses");
404
+ await this.updateBatchStatuses();
405
+ }
406
+ }
407
+ async updateBatchStatuses() {
408
+ const pendingBatches = await getAllPendingBatchesQuery(this.db);
409
+ const uniqueConnectors = /* @__PURE__ */ new Set();
410
+ const accounts = await this.getAccounts();
411
+ for (const batch of pendingBatches) {
412
+ const connectorKey = accounts.find(
413
+ (acc) => acc.id === batch.accountId
414
+ ).connectorKey;
415
+ if (!uniqueConnectors.has(connectorKey)) {
416
+ uniqueConnectors.add(connectorKey);
417
+ }
418
+ }
419
+ const finalBatches = [];
420
+ for (const connectorKey of uniqueConnectors) {
421
+ const accs = accounts.filter((acc) => acc.connectorKey === connectorKey);
422
+ const updatedBatches = await Promise.all(
423
+ accs.map(async (account) => {
424
+ const batch = pendingBatches.find((acc) => acc.id === account.id);
425
+ const newStatus = await this.bankConnector.getBatchStatus({
426
+ batchId: batch.id
427
+ });
428
+ return {
429
+ ...batch,
430
+ status: newStatus
431
+ };
432
+ })
433
+ );
434
+ finalBatches.push(...updatedBatches);
435
+ }
436
+ const updateBatchesCommands = finalBatches.map((batch) => {
437
+ const { command } = upsertBatchCommand(this.db, {
438
+ batch: {
439
+ ...batch
440
+ }
441
+ });
442
+ return command;
443
+ });
444
+ console.log("Updated batches", finalBatches);
445
+ await this.db.batch([
446
+ updateBatchesCommands[0],
447
+ ...updateBatchesCommands.slice(1)
448
+ ]);
449
+ console.log("Batch update completed");
331
450
  }
332
451
  // @action('initiate-bank-connector')
333
452
  async initiateBankConnector(input) {
334
453
  return this.handleAction(
335
454
  { data: input, schema: initiateConnectorInputSchema },
336
455
  { successMessage: "Bank connector initiated successfully" },
337
- async ({ connectorKey }) => {
338
- this.bankConnector = initiateConnector(connectorKey, this.env);
339
- const token = await this.env.BANK_KV.get(`${connectorKey}:auth`);
340
- if (!token) throw createInternalError("Provider not authorized");
456
+ async ({ connectorKey, withAuth }) => {
457
+ if (!this.allowedProviders.includes(connectorKey)) {
458
+ throw createInternalError(null, {
459
+ message: `Invalid connector key: ${connectorKey}`
460
+ });
461
+ }
462
+ const accounts = await this.getAccounts();
463
+ const accountsForConnector = accounts.filter(
464
+ (acc) => acc.connectorKey === connectorKey
465
+ );
466
+ const accountsWithCredentials = await Promise.all(
467
+ accountsForConnector.map(async (acc) => {
468
+ const credentials = await getCredentialsByAccountId(this.db, {
469
+ accountId: acc.id
470
+ });
471
+ if (!credentials) {
472
+ throw createInternalError(null, {
473
+ message: `No credentials found for account ${acc.id}`
474
+ });
475
+ }
476
+ return {
477
+ currency: acc.currency,
478
+ iban: acc.iban,
479
+ token: credentials.value,
480
+ id: acc.id,
481
+ connectorKey: acc.connectorKey
482
+ };
483
+ })
484
+ );
485
+ this.bankConnector = initiateConnector({
486
+ bank: connectorKey,
487
+ connectedAccounts: accountsWithCredentials,
488
+ env: this.env
489
+ });
490
+ if (!withAuth) return;
341
491
  await this.bankConnector.authenticate();
342
492
  }
343
493
  );
@@ -351,6 +501,7 @@ let BankServiceBase = class extends develitWorker(WorkerEntrypoint) {
351
501
  (payment) => ({
352
502
  id: uuidv4(),
353
503
  refId: payment.refId,
504
+ connectorKey: "MOCK",
354
505
  amount: payment.amount,
355
506
  direction: "OUTGOING",
356
507
  paymentType: payment.paymentType,
@@ -370,7 +521,10 @@ let BankServiceBase = class extends develitWorker(WorkerEntrypoint) {
370
521
  debtorIban: payment.debtorIban
371
522
  })
372
523
  );
373
- const { supportedPayments, unsupportedPayments } = seperateSupportedPayments(mappedPayments, this.accounts);
524
+ const { supportedPayments, unsupportedPayments } = seperateSupportedPayments(
525
+ mappedPayments,
526
+ this.bankConnector.connectedAccounts
527
+ );
374
528
  if (unsupportedPayments.length > 0) {
375
529
  this.logError({ unsupportedPayments });
376
530
  await this.pushToQueue(
@@ -396,15 +550,18 @@ let BankServiceBase = class extends develitWorker(WorkerEntrypoint) {
396
550
  }))
397
551
  );
398
552
  }
399
- for (const acc of this.accounts) {
553
+ for (const acc of this.bankConnector.connectedAccounts) {
400
554
  const newPayments = supportedPayments.filter(
401
- (payment) => payment.debtorIban === acc.identification.iban && payment.currency === acc.currency
402
- );
555
+ (payment) => payment.debtorIban === acc.iban && payment.currency === acc.currency
556
+ ).map((payment) => ({
557
+ ...payment,
558
+ connectorKey: acc.connectorKey
559
+ }));
403
560
  if (newPayments.length === 0) {
404
561
  continue;
405
562
  }
406
563
  this.log({
407
- message: `\u{1F4B0} Processing ${newPayments.length} payments for account ${acc.id} (${acc.identification.iban}, ${acc.currency})`
564
+ message: `\u{1F4B0} Processing ${newPayments.length} payments for account (${acc.iban}, ${acc.currency})`
408
565
  });
409
566
  const existingBatch = await getOpenBatchByAccountIdQuery(this.db, {
410
567
  accountId: acc.id
@@ -576,26 +733,19 @@ let BankServiceBase = class extends develitWorker(WorkerEntrypoint) {
576
733
  return this.handleAction(
577
734
  { data: input, schema: getAuthUriInputSchema },
578
735
  { successMessage: "Auth URI obtained." },
579
- async ({ accountId }) => {
580
- const account = this.accounts.find((acc) => acc.id === accountId);
581
- if (!account)
582
- throw createInternalError(null, {
583
- message: "Account not found",
584
- code: "ACCOUNT_NOT_FOUND",
585
- status: 404
586
- });
587
- this.bankConnector = initiateConnector(account.connectorKey, this.env);
736
+ async ({ connectorKey }) => {
737
+ await this.initiateBankConnector({ connectorKey, withAuth: false });
588
738
  const ott = uuidv4();
589
- const { command: oneTimeTokenCommand } = createOneTimeTokenCommand(
739
+ const { command: createOneTimeToken } = createOneTimeTokenCommand(
590
740
  this.db,
591
741
  {
592
742
  ott,
593
- account,
743
+ refId: connectorKey,
594
744
  tokenType: "ACCOUNT_AUTHORIZATION"
595
745
  }
596
746
  );
597
- await oneTimeTokenCommand.execute();
598
- const uri = await this.bankConnector.getAuthUri({ accountId, ott });
747
+ await createOneTimeToken.execute();
748
+ const uri = await this.bankConnector.getAuthUri({ ott });
599
749
  return { uri };
600
750
  }
601
751
  );
@@ -622,11 +772,50 @@ let BankServiceBase = class extends develitWorker(WorkerEntrypoint) {
622
772
  status: 400
623
773
  });
624
774
  }
625
- this.bankConnector = initiateConnector(ottRow.connectorKey, this.env);
626
- const authorized = await this.bankConnector.authorizeAccount({
775
+ await this.initiateBankConnector({
776
+ connectorKey: ottRow.refId
777
+ });
778
+ const { credentials, accounts } = await this.bankConnector.authorizeAccount({
627
779
  urlParams
628
780
  });
629
- return { authorized };
781
+ console.log("Bank connector initiated");
782
+ const alreadyExistingAccounts = (await this.getAccounts()).filter(
783
+ (acc) => acc.connectorKey === ottRow.refId && accounts.map((item) => item.iban).includes(acc.iban)
784
+ );
785
+ const upsertAccounts = accounts.map(
786
+ (acc) => upsertAccountCommand(this.db, {
787
+ account: acc
788
+ }).command
789
+ );
790
+ const deleteCredentials = alreadyExistingAccounts.map(
791
+ (acc) => deleteAccountCredentialsCommand(this.db, {
792
+ accountId: acc.id
793
+ }).command
794
+ );
795
+ const createAccountCredentials = credentials.map(
796
+ (cr) => createAccountCredentialsCommand(this.db, {
797
+ credentials: cr
798
+ }).command
799
+ );
800
+ const { command: updateOtt } = expireOneTimeTokenCommand(this.db, {
801
+ ott
802
+ });
803
+ await this.db.batch([
804
+ updateOtt,
805
+ ...upsertAccounts,
806
+ ...deleteCredentials,
807
+ ...createAccountCredentials
808
+ ]);
809
+ const fetchedAccounts = await this.getAccounts();
810
+ if (!fetchedAccounts)
811
+ throw createInternalError(null, {
812
+ message: "Account not found",
813
+ code: "NOT_FOUND",
814
+ status: 404
815
+ });
816
+ return {
817
+ accounts: fetchedAccounts
818
+ };
630
819
  }
631
820
  );
632
821
  }
@@ -652,10 +841,7 @@ let BankServiceBase = class extends develitWorker(WorkerEntrypoint) {
652
841
  if (!payments || payments.length === 0) continue;
653
842
  this.log(payments);
654
843
  payments.forEach((payment) => {
655
- payment.direction = getPaymentDirection(
656
- payment,
657
- account.identification.iban
658
- );
844
+ payment.direction = getPaymentDirection(payment, account.iban);
659
845
  });
660
846
  allFetchedPayments.push(...payments);
661
847
  }
@@ -678,7 +864,7 @@ let BankServiceBase = class extends develitWorker(WorkerEntrypoint) {
678
864
  console.log("FETCHEDPAYMANETS TO SYNC", allFetchedPayments.length);
679
865
  for (const account of accounts) {
680
866
  const paymentsForAccount = allFetchedPayments.filter(
681
- (payment) => (payment.direction === "OUTGOING" ? payment.debtorIban : payment.creditorIban) === account.identification.iban
867
+ (payment) => (payment.direction === "OUTGOING" ? payment.debtorIban : payment.creditorIban) === account.iban
682
868
  );
683
869
  let lastSyncPayment;
684
870
  lastSyncPayment = paymentsForAccount.filter(({ status }) => status !== "COMPLETED").sort(
@@ -725,11 +911,13 @@ let BankServiceBase = class extends develitWorker(WorkerEntrypoint) {
725
911
  creditorIban,
726
912
  creditorHolderName,
727
913
  debtorIban,
728
- debtorHolderName
914
+ debtorHolderName,
915
+ connectorKey
729
916
  }) => {
730
917
  const payment = {
731
918
  id: uuidv4(),
732
919
  amount,
920
+ connectorKey,
733
921
  direction: "INCOMING",
734
922
  paymentType: "DOMESTIC",
735
923
  currency,
@@ -767,10 +955,10 @@ let BankServiceBase = class extends develitWorker(WorkerEntrypoint) {
767
955
  { successMessage: "Last sync set." },
768
956
  async ({ iban, lastSyncedAt }) => {
769
957
  const { setLastSync } = useSync(this.env.BANK_KV);
770
- const configAccount = this.accounts.find(
771
- (acc) => acc.identification.iban === iban
772
- );
773
- if (!configAccount) {
958
+ const account = await getAccountByIbanQuery(this.db, {
959
+ iban
960
+ });
961
+ if (!account) {
774
962
  throw createInternalError(null, {
775
963
  status: 404,
776
964
  message: "Account for this organization does not exist."
@@ -780,7 +968,7 @@ let BankServiceBase = class extends develitWorker(WorkerEntrypoint) {
780
968
  log: {
781
969
  lastSyncedAt
782
970
  },
783
- account: configAccount
971
+ account: { ...account, token: "" }
784
972
  });
785
973
  return {};
786
974
  }
@@ -800,7 +988,7 @@ let BankServiceBase = class extends develitWorker(WorkerEntrypoint) {
800
988
  }
801
989
  async getBankAccounts() {
802
990
  return RPCResponse.ok("Bank accounts retrieved successfully", {
803
- data: this.accounts
991
+ data: await this.getAccounts()
804
992
  });
805
993
  }
806
994
  async getBatches(input) {
@@ -827,6 +1015,9 @@ __decorateClass([
827
1015
  __decorateClass([
828
1016
  action("scheduled")
829
1017
  ], BankServiceBase.prototype, "scheduled", 1);
1018
+ __decorateClass([
1019
+ action("update-batch-statuses")
1020
+ ], BankServiceBase.prototype, "updateBatchStatuses", 1);
830
1021
  __decorateClass([
831
1022
  action("add-payments-to-batch")
832
1023
  ], BankServiceBase.prototype, "addPaymentsToBatch", 1);
@@ -864,433 +1055,429 @@ BankServiceBase = __decorateClass([
864
1055
  service("bank")
865
1056
  ], BankServiceBase);
866
1057
  function defineBankService({
867
- configAccounts
1058
+ config
868
1059
  }) {
869
1060
  return class BankService extends BankServiceBase {
870
1061
  constructor(ctx, env) {
871
- super(ctx, env, configAccounts);
1062
+ super(ctx, env, config);
872
1063
  }
873
1064
  };
874
1065
  }
875
1066
 
876
- const monthAgo = new Date(
877
- Date.now() - 30 * 24 * 60 * 60 * 1e3
878
- // 30 days ago
879
- );
880
1067
  const BankService = defineBankService({
881
- configAccounts: {
882
- stagingAccounts: [
883
- {
884
- connectorKey: "MOCK_COBS",
885
- id: "staging-czk",
886
- identification: {
887
- number: "1234567890",
888
- bankCode: "5051",
889
- iban: "CZ0350510000000000000449",
890
- holderName: "Devizov\xE1 Burza a.s."
891
- },
892
- fallbackLastSync: monthAgo,
893
- currency: "CZK",
894
- production: false
895
- },
896
- {
897
- connectorKey: "MOCK_COBS",
898
- id: "staging-eur",
899
- identification: {
900
- number: "2345678901",
901
- bankCode: "5051",
902
- iban: "CZ0750510000000000000668",
903
- holderName: "Devizov\xE1 Burza a.s."
904
- },
905
- fallbackLastSync: monthAgo,
906
- currency: "EUR",
907
- production: false
908
- },
909
- {
910
- connectorKey: "FIO",
911
- id: "kleinpetr-test",
912
- identification: {
913
- number: "2502130437",
914
- bankCode: "2010",
915
- iban: "CZ8520100000002502130437",
916
- holderName: "Petr Klein"
917
- },
918
- fallbackLastSync: monthAgo,
919
- currency: "CZK",
920
- production: true
921
- },
922
- {
923
- connectorKey: "MOCK",
924
- id: "id-test",
925
- identification: {
926
- number: "777777777",
927
- bankCode: "0800",
928
- iban: "PL0000000000002444430437",
929
- holderName: "Test Test"
930
- },
931
- fallbackLastSync: monthAgo,
932
- currency: "PLN",
933
- production: false
934
- }
935
- // {
936
- // connectorKey: 'MOCK_COBS',
937
- // id: 'staging-usd',
938
- // identification: {
939
- // iban: 'CZ3456789012345678901234',
940
- // accountNumberWithBankCode: '3456789012/3456',
941
- // },
942
- // currency: 'USD',
943
- // bankCode: '0800',
944
- // accountNumber: '3456789012',
945
- // production: false,
946
- // },
947
- ],
948
- productionAccounts: [
949
- // Banka CREDITAS (2250)
950
- {
951
- connectorKey: "CREDITAS",
952
- id: "2250-CZK",
953
- identification: {
954
- number: "100602391",
955
- bankCode: "2250",
956
- iban: "CZ5122500000000100602391",
957
- holderName: "Devizov\xE1 Burza a.s."
958
- },
959
- fallbackLastSync: monthAgo,
960
- currency: "CZK",
961
- production: true
962
- },
963
- {
964
- connectorKey: "CREDITAS",
965
- id: "2250-EUR",
966
- identification: {
967
- number: "100602404",
968
- bankCode: "2250",
969
- iban: "CZ8822500000000100602404",
970
- holderName: "Devizov\xE1 Burza a.s."
971
- },
972
- fallbackLastSync: monthAgo,
973
- currency: "EUR",
974
- production: true
975
- },
976
- {
977
- connectorKey: "CREDITAS",
978
- id: "2250-USD",
979
- identification: {
980
- number: "100602412",
981
- bankCode: "2250",
982
- iban: "CZ6622500000000100602412",
983
- holderName: "Devizov\xE1 Burza a.s."
984
- },
985
- fallbackLastSync: monthAgo,
986
- currency: "USD",
987
- production: true
988
- },
989
- {
990
- connectorKey: "CREDITAS",
991
- id: "2250-GBP",
992
- identification: {
993
- number: "100602420",
994
- bankCode: "2250",
995
- iban: "CZ4422500000000100602420",
996
- holderName: "Devizov\xE1 Burza a.s."
997
- },
998
- fallbackLastSync: monthAgo,
999
- currency: "GBP",
1000
- production: true
1001
- },
1002
- {
1003
- connectorKey: "CREDITAS",
1004
- id: "2250-CHF",
1005
- identification: {
1006
- number: "100602439",
1007
- bankCode: "2250",
1008
- iban: "CZ1622500000000100602439",
1009
- holderName: "Devizov\xE1 Burza a.s."
1010
- },
1011
- fallbackLastSync: monthAgo,
1012
- currency: "CHF",
1013
- production: true
1014
- },
1015
- {
1016
- connectorKey: "CREDITAS",
1017
- id: "2250-PLN",
1018
- identification: {
1019
- number: "100602447",
1020
- bankCode: "2250",
1021
- iban: "CZ9122500000000100602447",
1022
- holderName: "Devizov\xE1 Burza a.s."
1023
- },
1024
- fallbackLastSync: monthAgo,
1025
- currency: "PLN",
1026
- production: true
1027
- },
1028
- // Fio banka (2010)
1029
- {
1030
- connectorKey: "FINBRICKS",
1031
- id: "2010-CZK",
1032
- identification: {
1033
- number: "2500845869",
1034
- bankCode: "2010",
1035
- iban: "CZ0420100000002500845869",
1036
- holderName: "Devizov\xE1 Burza a.s."
1037
- },
1038
- fallbackLastSync: monthAgo,
1039
- currency: "CZK",
1040
- production: true
1041
- },
1042
- {
1043
- connectorKey: "FINBRICKS",
1044
- id: "2010-EUR",
1045
- identification: {
1046
- number: "2600884128",
1047
- bankCode: "2010",
1048
- iban: "CZ0820100000002600884128",
1049
- holderName: "Devizov\xE1 Burza a.s."
1050
- },
1051
- fallbackLastSync: monthAgo,
1052
- currency: "EUR",
1053
- production: true
1054
- },
1055
- {
1056
- connectorKey: "FINBRICKS",
1057
- id: "2010-USD",
1058
- identification: {
1059
- number: "2700884133",
1060
- bankCode: "2010",
1061
- iban: "CZ1420100000002700884133",
1062
- holderName: "Devizov\xE1 Burza a.s."
1063
- },
1064
- fallbackLastSync: monthAgo,
1065
- currency: "USD",
1066
- production: true
1067
- },
1068
- {
1069
- connectorKey: "FINBRICKS",
1070
- id: "2010-CHF",
1071
- identification: {
1072
- number: "2401098351",
1073
- bankCode: "2010",
1074
- iban: "CZ0920100000002401098351",
1075
- holderName: "Devizov\xE1 Burza a.s."
1076
- },
1077
- fallbackLastSync: monthAgo,
1078
- currency: "CHF",
1079
- production: true
1080
- },
1081
- {
1082
- connectorKey: "FINBRICKS",
1083
- id: "2010-GBP",
1084
- identification: {
1085
- number: "2400884131",
1086
- bankCode: "2010",
1087
- iban: "CZ3320100000002400884131",
1088
- holderName: "Devizov\xE1 Burza a.s."
1089
- },
1090
- fallbackLastSync: monthAgo,
1091
- currency: "GBP",
1092
- production: true
1093
- },
1094
- {
1095
- connectorKey: "FINBRICKS",
1096
- id: "2010-PLN",
1097
- identification: {
1098
- number: "2701098353",
1099
- bankCode: "2010",
1100
- iban: "CZ8720100000002701098353",
1101
- holderName: "Devizov\xE1 Burza a.s."
1102
- },
1103
- fallbackLastSync: monthAgo,
1104
- currency: "PLN",
1105
- production: true
1106
- },
1107
- {
1108
- connectorKey: "FINBRICKS",
1109
- id: "2010-CAD",
1110
- identification: {
1111
- number: "2701478102",
1112
- bankCode: "2010",
1113
- iban: "CZ5520100000002701478102",
1114
- holderName: "Devizov\xE1 Burza a.s."
1115
- },
1116
- fallbackLastSync: monthAgo,
1117
- currency: "CAD",
1118
- production: true
1119
- },
1120
- // Komerční banka (0100)
1121
- {
1122
- connectorKey: "FINBRICKS",
1123
- id: "0100-CZK",
1124
- identification: {
1125
- number: "115-1483630297",
1126
- bankCode: "0100",
1127
- iban: "CZ5901000001151483630297",
1128
- holderName: "Devizov\xE1 Burza a.s."
1129
- },
1130
- fallbackLastSync: monthAgo,
1131
- currency: "CZK",
1132
- production: true
1133
- },
1134
- {
1135
- connectorKey: "FINBRICKS",
1136
- id: "0100-EUR",
1137
- identification: {
1138
- number: "115-1484940297",
1139
- bankCode: "0100",
1140
- iban: "CZ4201000001151484940297",
1141
- holderName: "Devizov\xE1 Burza a.s."
1142
- },
1143
- fallbackLastSync: monthAgo,
1144
- currency: "EUR",
1145
- production: true
1146
- },
1147
- {
1148
- connectorKey: "FINBRICKS",
1149
- id: "0100-USD",
1150
- identification: {
1151
- number: "115-1483960237",
1152
- bankCode: "0100",
1153
- iban: "CZ6201000001151483960237",
1154
- holderName: "Devizov\xE1 Burza a.s."
1155
- },
1156
- fallbackLastSync: monthAgo,
1157
- currency: "USD",
1158
- production: true
1159
- },
1160
- {
1161
- connectorKey: "FINBRICKS",
1162
- id: "0100-PLN",
1163
- identification: {
1164
- number: "115-6674290267",
1165
- bankCode: "0100",
1166
- iban: "CZ3501000001156674290267",
1167
- holderName: "Devizov\xE1 Burza a.s."
1168
- },
1169
- fallbackLastSync: monthAgo,
1170
- currency: "PLN",
1171
- production: true
1172
- },
1173
- {
1174
- connectorKey: "FINBRICKS",
1175
- id: "0100-SEK",
1176
- identification: {
1177
- number: "115-9578110207",
1178
- bankCode: "0100",
1179
- iban: "CZ2401000001159578110207",
1180
- holderName: "Devizov\xE1 Burza a.s."
1181
- },
1182
- fallbackLastSync: monthAgo,
1183
- currency: "SEK",
1184
- production: true
1185
- },
1186
- // Česká spořitelna (0800)
1187
- {
1188
- connectorKey: "ERSTE",
1189
- id: "0800-CZK",
1190
- identification: {
1191
- number: "4413926379",
1192
- bankCode: "0800",
1193
- iban: "CZ7908000000004413926379",
1194
- holderName: "Devizov\xE1 Burza a.s."
1195
- },
1196
- fallbackLastSync: monthAgo,
1197
- currency: "CZK",
1198
- production: true
1199
- },
1200
- {
1201
- connectorKey: "ERSTE",
1202
- id: "0800-EUR",
1203
- identification: {
1204
- number: "1966646293",
1205
- bankCode: "0800",
1206
- iban: "CZ2308000000001966646293",
1207
- holderName: "Devizov\xE1 Burza a.s."
1208
- },
1209
- fallbackLastSync: monthAgo,
1210
- currency: "EUR",
1211
- production: true
1212
- },
1213
- {
1214
- connectorKey: "ERSTE",
1215
- id: "0800-USD",
1216
- identification: {
1217
- number: "1978982243",
1218
- bankCode: "0800",
1219
- iban: "CZ1908000000001978982243",
1220
- holderName: "Devizov\xE1 Burza a.s."
1221
- },
1222
- fallbackLastSync: monthAgo,
1223
- currency: "USD",
1224
- production: true
1225
- },
1226
- {
1227
- connectorKey: "ERSTE",
1228
- id: "0800-HUF",
1229
- identification: {
1230
- number: "13461252",
1231
- bankCode: "0800",
1232
- iban: "CZ1908000000000013461252",
1233
- holderName: "Devizov\xE1 Burza a.s."
1234
- },
1235
- fallbackLastSync: monthAgo,
1236
- currency: "HUF",
1237
- production: true
1238
- },
1239
- // MONETA Money Bank (0600)
1240
- {
1241
- connectorKey: "FINBRICKS",
1242
- id: "0600-CZK",
1243
- identification: {
1244
- number: "224252186",
1245
- bankCode: "0600",
1246
- iban: "CZ5906000000000224252186",
1247
- holderName: "Devizov\xE1 Burza a.s."
1248
- },
1249
- fallbackLastSync: monthAgo,
1250
- currency: "CZK",
1251
- production: true
1252
- },
1253
- {
1254
- connectorKey: "FINBRICKS",
1255
- id: "0600-EUR",
1256
- identification: {
1257
- number: "224252231",
1258
- bankCode: "0600",
1259
- iban: "CZ0806000000000224252231",
1260
- holderName: "Devizov\xE1 Burza a.s."
1261
- },
1262
- fallbackLastSync: monthAgo,
1263
- currency: "EUR",
1264
- production: true
1265
- },
1266
- {
1267
- connectorKey: "FINBRICKS",
1268
- id: "0600-USD",
1269
- identification: {
1270
- number: "224252290",
1271
- bankCode: "0600",
1272
- iban: "CZ6406000000000224252290",
1273
- holderName: "Devizov\xE1 Burza a.s."
1274
- },
1275
- fallbackLastSync: monthAgo,
1276
- currency: "USD",
1277
- production: true
1278
- },
1279
- // NEY spořitelní družstvo (2260)
1280
- {
1281
- connectorKey: "FINBRICKS",
1282
- id: "2260-CZK",
1283
- identification: {
1284
- number: "1702700014",
1285
- bankCode: "2260",
1286
- iban: "CZ7422600000001702700014",
1287
- holderName: "Devizov\xE1 Burza a.s."
1288
- },
1289
- fallbackLastSync: monthAgo,
1290
- currency: "CZK",
1291
- production: true
1292
- }
1293
- ]
1068
+ config: {
1069
+ allowedProviders: []
1070
+ // {
1071
+ // connectorKey: 'MOCK_COBS',
1072
+ // id: 'staging-czk',
1073
+ // identification: {
1074
+ // number: '1234567890',
1075
+ // bankCode: '5051',
1076
+ // iban: 'CZ0350510000000000000449',
1077
+ // holderName: 'Devizová Burza a.s.',
1078
+ // },
1079
+ // fallbackLastSync: monthAgo,
1080
+ // currency: 'CZK',
1081
+ // production: false,
1082
+ // },
1083
+ // {
1084
+ // connectorKey: 'MOCK_COBS',
1085
+ // id: 'staging-eur',
1086
+ // identification: {
1087
+ // number: '2345678901',
1088
+ // bankCode: '5051',
1089
+ // iban: 'CZ0750510000000000000668',
1090
+ // holderName: 'Devizová Burza a.s.',
1091
+ // },
1092
+ // fallbackLastSync: monthAgo,
1093
+ // currency: 'EUR',
1094
+ // production: false,
1095
+ // },
1096
+ // {
1097
+ // connectorKey: 'FIO',
1098
+ // id: 'kleinpetr-test',
1099
+ // identification: {
1100
+ // number: '2502130437',
1101
+ // bankCode: '2010',
1102
+ // iban: 'CZ8520100000002502130437',
1103
+ // holderName: 'Petr Klein',
1104
+ // },
1105
+ // fallbackLastSync: monthAgo,
1106
+ // currency: 'CZK',
1107
+ // production: true,
1108
+ // },
1109
+ // {
1110
+ // connectorKey: 'MOCK',
1111
+ // id: 'id-test',
1112
+ // identification: {
1113
+ // number: '777777777',
1114
+ // bankCode: '0800',
1115
+ // iban: 'PL0000000000002444430437',
1116
+ // holderName: 'Test Test',
1117
+ // },
1118
+ // fallbackLastSync: monthAgo,
1119
+ // currency: 'PLN',
1120
+ // production: false,
1121
+ // },
1122
+ // {
1123
+ // connectorKey: 'MOCK_COBS',
1124
+ // id: 'staging-usd',
1125
+ // identification: {
1126
+ // iban: 'CZ3456789012345678901234',
1127
+ // accountNumberWithBankCode: '3456789012/3456',
1128
+ // },
1129
+ // currency: 'USD',
1130
+ // bankCode: '0800',
1131
+ // accountNumber: '3456789012',
1132
+ // production: false,
1133
+ // },
1134
+ // ],
1135
+ // productionAccounts: [
1136
+ // // Banka CREDITAS (2250)
1137
+ // {
1138
+ // connectorKey: 'CREDITAS',
1139
+ // id: '2250-CZK',
1140
+ // identification: {
1141
+ // number: '100602391',
1142
+ // bankCode: '2250',
1143
+ // iban: 'CZ5122500000000100602391',
1144
+ // holderName: 'Devizová Burza a.s.',
1145
+ // },
1146
+ // fallbackLastSync: monthAgo,
1147
+ // currency: 'CZK',
1148
+ // production: true,
1149
+ // },
1150
+ // {
1151
+ // connectorKey: 'CREDITAS',
1152
+ // id: '2250-EUR',
1153
+ // identification: {
1154
+ // number: '100602404',
1155
+ // bankCode: '2250',
1156
+ // iban: 'CZ8822500000000100602404',
1157
+ // holderName: 'Devizová Burza a.s.',
1158
+ // },
1159
+ // fallbackLastSync: monthAgo,
1160
+ // currency: 'EUR',
1161
+ // production: true,
1162
+ // },
1163
+ // {
1164
+ // connectorKey: 'CREDITAS',
1165
+ // id: '2250-USD',
1166
+ // identification: {
1167
+ // number: '100602412',
1168
+ // bankCode: '2250',
1169
+ // iban: 'CZ6622500000000100602412',
1170
+ // holderName: 'Devizová Burza a.s.',
1171
+ // },
1172
+ // fallbackLastSync: monthAgo,
1173
+ // currency: 'USD',
1174
+ // production: true,
1175
+ // },
1176
+ // {
1177
+ // connectorKey: 'CREDITAS',
1178
+ // id: '2250-GBP',
1179
+ // identification: {
1180
+ // number: '100602420',
1181
+ // bankCode: '2250',
1182
+ // iban: 'CZ4422500000000100602420',
1183
+ // holderName: 'Devizová Burza a.s.',
1184
+ // },
1185
+ // fallbackLastSync: monthAgo,
1186
+ // currency: 'GBP',
1187
+ // production: true,
1188
+ // },
1189
+ // {
1190
+ // connectorKey: 'CREDITAS',
1191
+ // id: '2250-CHF',
1192
+ // identification: {
1193
+ // number: '100602439',
1194
+ // bankCode: '2250',
1195
+ // iban: 'CZ1622500000000100602439',
1196
+ // holderName: 'Devizová Burza a.s.',
1197
+ // },
1198
+ // fallbackLastSync: monthAgo,
1199
+ // currency: 'CHF',
1200
+ // production: true,
1201
+ // },
1202
+ // {
1203
+ // connectorKey: 'CREDITAS',
1204
+ // id: '2250-PLN',
1205
+ // identification: {
1206
+ // number: '100602447',
1207
+ // bankCode: '2250',
1208
+ // iban: 'CZ9122500000000100602447',
1209
+ // holderName: 'Devizová Burza a.s.',
1210
+ // },
1211
+ // fallbackLastSync: monthAgo,
1212
+ // currency: 'PLN',
1213
+ // production: true,
1214
+ // },
1215
+ // // Fio banka (2010)
1216
+ // {
1217
+ // connectorKey: 'FINBRICKS',
1218
+ // id: '2010-CZK',
1219
+ // identification: {
1220
+ // number: '2500845869',
1221
+ // bankCode: '2010',
1222
+ // iban: 'CZ0420100000002500845869',
1223
+ // holderName: 'Devizová Burza a.s.',
1224
+ // },
1225
+ // fallbackLastSync: monthAgo,
1226
+ // currency: 'CZK',
1227
+ // production: true,
1228
+ // },
1229
+ // {
1230
+ // connectorKey: 'FINBRICKS',
1231
+ // id: '2010-EUR',
1232
+ // identification: {
1233
+ // number: '2600884128',
1234
+ // bankCode: '2010',
1235
+ // iban: 'CZ0820100000002600884128',
1236
+ // holderName: 'Devizová Burza a.s.',
1237
+ // },
1238
+ // fallbackLastSync: monthAgo,
1239
+ // currency: 'EUR',
1240
+ // production: true,
1241
+ // },
1242
+ // {
1243
+ // connectorKey: 'FINBRICKS',
1244
+ // id: '2010-USD',
1245
+ // identification: {
1246
+ // number: '2700884133',
1247
+ // bankCode: '2010',
1248
+ // iban: 'CZ1420100000002700884133',
1249
+ // holderName: 'Devizová Burza a.s.',
1250
+ // },
1251
+ // fallbackLastSync: monthAgo,
1252
+ // currency: 'USD',
1253
+ // production: true,
1254
+ // },
1255
+ // {
1256
+ // connectorKey: 'FINBRICKS',
1257
+ // id: '2010-CHF',
1258
+ // identification: {
1259
+ // number: '2401098351',
1260
+ // bankCode: '2010',
1261
+ // iban: 'CZ0920100000002401098351',
1262
+ // holderName: 'Devizová Burza a.s.',
1263
+ // },
1264
+ // fallbackLastSync: monthAgo,
1265
+ // currency: 'CHF',
1266
+ // production: true,
1267
+ // },
1268
+ // {
1269
+ // connectorKey: 'FINBRICKS',
1270
+ // id: '2010-GBP',
1271
+ // identification: {
1272
+ // number: '2400884131',
1273
+ // bankCode: '2010',
1274
+ // iban: 'CZ3320100000002400884131',
1275
+ // holderName: 'Devizová Burza a.s.',
1276
+ // },
1277
+ // fallbackLastSync: monthAgo,
1278
+ // currency: 'GBP',
1279
+ // production: true,
1280
+ // },
1281
+ // {
1282
+ // connectorKey: 'FINBRICKS',
1283
+ // id: '2010-PLN',
1284
+ // identification: {
1285
+ // number: '2701098353',
1286
+ // bankCode: '2010',
1287
+ // iban: 'CZ8720100000002701098353',
1288
+ // holderName: 'Devizová Burza a.s.',
1289
+ // },
1290
+ // fallbackLastSync: monthAgo,
1291
+ // currency: 'PLN',
1292
+ // production: true,
1293
+ // },
1294
+ // {
1295
+ // connectorKey: 'FINBRICKS',
1296
+ // id: '2010-CAD',
1297
+ // identification: {
1298
+ // number: '2701478102',
1299
+ // bankCode: '2010',
1300
+ // iban: 'CZ5520100000002701478102',
1301
+ // holderName: 'Devizová Burza a.s.',
1302
+ // },
1303
+ // fallbackLastSync: monthAgo,
1304
+ // currency: 'CAD',
1305
+ // production: true,
1306
+ // },
1307
+ // // Komerční banka (0100)
1308
+ // {
1309
+ // connectorKey: 'FINBRICKS',
1310
+ // id: '0100-CZK',
1311
+ // identification: {
1312
+ // number: '115-1483630297',
1313
+ // bankCode: '0100',
1314
+ // iban: 'CZ5901000001151483630297',
1315
+ // holderName: 'Devizová Burza a.s.',
1316
+ // },
1317
+ // fallbackLastSync: monthAgo,
1318
+ // currency: 'CZK',
1319
+ // production: true,
1320
+ // },
1321
+ // {
1322
+ // connectorKey: 'FINBRICKS',
1323
+ // id: '0100-EUR',
1324
+ // identification: {
1325
+ // number: '115-1484940297',
1326
+ // bankCode: '0100',
1327
+ // iban: 'CZ4201000001151484940297',
1328
+ // holderName: 'Devizová Burza a.s.',
1329
+ // },
1330
+ // fallbackLastSync: monthAgo,
1331
+ // currency: 'EUR',
1332
+ // production: true,
1333
+ // },
1334
+ // {
1335
+ // connectorKey: 'FINBRICKS',
1336
+ // id: '0100-USD',
1337
+ // identification: {
1338
+ // number: '115-1483960237',
1339
+ // bankCode: '0100',
1340
+ // iban: 'CZ6201000001151483960237',
1341
+ // holderName: 'Devizová Burza a.s.',
1342
+ // },
1343
+ // fallbackLastSync: monthAgo,
1344
+ // currency: 'USD',
1345
+ // production: true,
1346
+ // },
1347
+ // {
1348
+ // connectorKey: 'FINBRICKS',
1349
+ // id: '0100-PLN',
1350
+ // identification: {
1351
+ // number: '115-6674290267',
1352
+ // bankCode: '0100',
1353
+ // iban: 'CZ3501000001156674290267',
1354
+ // holderName: 'Devizová Burza a.s.',
1355
+ // },
1356
+ // fallbackLastSync: monthAgo,
1357
+ // currency: 'PLN',
1358
+ // production: true,
1359
+ // },
1360
+ // {
1361
+ // connectorKey: 'FINBRICKS',
1362
+ // id: '0100-SEK',
1363
+ // identification: {
1364
+ // number: '115-9578110207',
1365
+ // bankCode: '0100',
1366
+ // iban: 'CZ2401000001159578110207',
1367
+ // holderName: 'Devizová Burza a.s.',
1368
+ // },
1369
+ // fallbackLastSync: monthAgo,
1370
+ // currency: 'SEK',
1371
+ // production: true,
1372
+ // },
1373
+ // // Česká spořitelna (0800)
1374
+ // {
1375
+ // connectorKey: 'ERSTE',
1376
+ // id: '0800-CZK',
1377
+ // identification: {
1378
+ // number: '4413926379',
1379
+ // bankCode: '0800',
1380
+ // iban: 'CZ7908000000004413926379',
1381
+ // holderName: 'Devizová Burza a.s.',
1382
+ // },
1383
+ // fallbackLastSync: monthAgo,
1384
+ // currency: 'CZK',
1385
+ // production: true,
1386
+ // },
1387
+ // {
1388
+ // connectorKey: 'ERSTE',
1389
+ // id: '0800-EUR',
1390
+ // identification: {
1391
+ // number: '1966646293',
1392
+ // bankCode: '0800',
1393
+ // iban: 'CZ2308000000001966646293',
1394
+ // holderName: 'Devizová Burza a.s.',
1395
+ // },
1396
+ // fallbackLastSync: monthAgo,
1397
+ // currency: 'EUR',
1398
+ // production: true,
1399
+ // },
1400
+ // {
1401
+ // connectorKey: 'ERSTE',
1402
+ // id: '0800-USD',
1403
+ // identification: {
1404
+ // number: '1978982243',
1405
+ // bankCode: '0800',
1406
+ // iban: 'CZ1908000000001978982243',
1407
+ // holderName: 'Devizová Burza a.s.',
1408
+ // },
1409
+ // fallbackLastSync: monthAgo,
1410
+ // currency: 'USD',
1411
+ // production: true,
1412
+ // },
1413
+ // {
1414
+ // connectorKey: 'ERSTE',
1415
+ // id: '0800-HUF',
1416
+ // identification: {
1417
+ // number: '13461252',
1418
+ // bankCode: '0800',
1419
+ // iban: 'CZ1908000000000013461252',
1420
+ // holderName: 'Devizová Burza a.s.',
1421
+ // },
1422
+ // fallbackLastSync: monthAgo,
1423
+ // currency: 'HUF',
1424
+ // production: true,
1425
+ // },
1426
+ // // MONETA Money Bank (0600)
1427
+ // {
1428
+ // connectorKey: 'FINBRICKS',
1429
+ // id: '0600-CZK',
1430
+ // identification: {
1431
+ // number: '224252186',
1432
+ // bankCode: '0600',
1433
+ // iban: 'CZ5906000000000224252186',
1434
+ // holderName: 'Devizová Burza a.s.',
1435
+ // },
1436
+ // fallbackLastSync: monthAgo,
1437
+ // currency: 'CZK',
1438
+ // production: true,
1439
+ // },
1440
+ // {
1441
+ // connectorKey: 'FINBRICKS',
1442
+ // id: '0600-EUR',
1443
+ // identification: {
1444
+ // number: '224252231',
1445
+ // bankCode: '0600',
1446
+ // iban: 'CZ0806000000000224252231',
1447
+ // holderName: 'Devizová Burza a.s.',
1448
+ // },
1449
+ // fallbackLastSync: monthAgo,
1450
+ // currency: 'EUR',
1451
+ // production: true,
1452
+ // },
1453
+ // {
1454
+ // connectorKey: 'FINBRICKS',
1455
+ // id: '0600-USD',
1456
+ // identification: {
1457
+ // number: '224252290',
1458
+ // bankCode: '0600',
1459
+ // iban: 'CZ6406000000000224252290',
1460
+ // holderName: 'Devizová Burza a.s.',
1461
+ // },
1462
+ // fallbackLastSync: monthAgo,
1463
+ // currency: 'USD',
1464
+ // production: true,
1465
+ // },
1466
+ // // NEY spořitelní družstvo (2260)
1467
+ // {
1468
+ // connectorKey: 'FINBRICKS',
1469
+ // id: '2260-CZK',
1470
+ // identification: {
1471
+ // number: '1702700014',
1472
+ // bankCode: '2260',
1473
+ // iban: 'CZ7422600000001702700014',
1474
+ // holderName: 'Devizová Burza a.s.',
1475
+ // },
1476
+ // fallbackLastSync: monthAgo,
1477
+ // currency: 'CZK',
1478
+ // production: true,
1479
+ // },
1480
+ // ],
1294
1481
  }
1295
1482
  });
1296
1483