@develit-services/bank 0.0.41 → 0.0.43

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.
@@ -5,15 +5,15 @@ Object.defineProperty(exports, '__esModule', { value: true });
5
5
  const backendSdk = require('@develit-io/backend-sdk');
6
6
  const cloudflare_workers = require('cloudflare:workers');
7
7
  const d1 = require('drizzle-orm/d1');
8
- const database_schema = require('../shared/bank.C2tmTjwq.cjs');
8
+ const database_schema = require('../shared/bank.BVzOzXdX.cjs');
9
9
  require('jose');
10
10
  const generalCodes = require('@develit-io/general-codes');
11
11
  const zod = require('zod');
12
12
  const drizzleOrm = require('drizzle-orm');
13
- const mockCobs_connector = require('../shared/bank.DBgpADhg.cjs');
13
+ const mockCobs_connector = require('../shared/bank.BPcrbUBa.cjs');
14
14
  require('drizzle-orm/sqlite-core');
15
- require('drizzle-zod');
16
15
  require('date-fns');
16
+ require('drizzle-zod');
17
17
  require('drizzle-orm/relations');
18
18
 
19
19
  const upsertAccountCommand = (db, { account }) => {
@@ -349,20 +349,21 @@ const seperateSupportedPayments = (mappedPayments, accounts) => {
349
349
  };
350
350
 
351
351
  const sendPaymentInputSchema = zod.z.object({
352
+ correlationId: zod.z.string().min(1),
352
353
  refId: zod.z.string(),
353
354
  amount: zod.z.number().positive(),
354
355
  paymentType: zod.z.enum(database_schema.PAYMENT_TYPES),
356
+ chargeBearer: zod.z.enum(database_schema.CHARGE_BEARERS),
357
+ executionDate: zod.z.string(),
358
+ instructionPriority: zod.z.enum(database_schema.INSTRUCTION_PRIORITIES),
355
359
  currency: zod.z.enum(generalCodes.CURRENCY_CODES),
356
- vs: zod.z.string().nullable().optional(),
357
- ss: zod.z.string().nullable().optional(),
358
- ks: zod.z.string().nullable().optional(),
359
- message: zod.z.string().nullable().optional(),
360
- creditorHolderName: zod.z.string(),
361
- creditorAccountNumberWithBankCode: zod.z.string(),
362
- creditorIban: zod.z.string(),
363
- debtorHolderName: zod.z.string(),
364
- debtorAccountNumberWithBankCode: zod.z.string(),
365
- debtorIban: zod.z.string()
360
+ vs: zod.z.string().optional(),
361
+ ss: zod.z.string().optional(),
362
+ ks: zod.z.string().optional(),
363
+ message: zod.z.string().optional(),
364
+ creditor: backendSdk.bankAccountMetadataSchema,
365
+ debtor: backendSdk.bankAccountMetadataSchema,
366
+ purpose: zod.z.string().optional()
366
367
  });
367
368
 
368
369
  const getAuthUriInputSchema = zod.z.object({
@@ -381,10 +382,8 @@ const simulateDepositInputSchema = zod.z.object({
381
382
  bankingSs: zod.z.string().max(10).optional(),
382
383
  bankingKs: zod.z.string().max(10).optional(),
383
384
  message: zod.z.string(),
384
- creditorIban: zod.z.string().max(34),
385
- creditorHolderName: zod.z.string(),
386
- debtorIban: zod.z.string().max(34),
387
- debtorHolderName: zod.z.string(),
385
+ creditor: backendSdk.bankAccountMetadataSchema,
386
+ debtor: backendSdk.bankAccountMetadataSchema,
388
387
  connectorKey: zod.z.enum(database_schema.CONNECTOR_KEYS)
389
388
  });
390
389
 
@@ -393,11 +392,6 @@ const setLastSyncAtInputSchema = zod.z.object({
393
392
  lastSyncedAt: zod.z.coerce.date()
394
393
  });
395
394
 
396
- const initiateConnectorInputSchema = zod.z.object({
397
- connectorKey: zod.z.enum(database_schema.CONNECTOR_KEYS),
398
- withAuth: zod.z.boolean().default(true).optional()
399
- });
400
-
401
395
  const ALLOWED_BATCH_FILTERS = {
402
396
  ACCOUNT_ID: "filterBatchAccountId",
403
397
  STATUS: "filterBatchStatus"
@@ -447,6 +441,10 @@ const syncAccountInputSchema = zod.z.object({
447
441
  accountId: zod.z.uuid()
448
442
  });
449
443
 
444
+ const updateAccountInputSchema = zod.z.object({
445
+ account: database_schema.accountInsertSchema
446
+ });
447
+
450
448
  var __defProp = Object.defineProperty;
451
449
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
452
450
  var __decorateClass = (decorators, target, key, kind) => {
@@ -464,22 +462,124 @@ let BankServiceBase = class extends backendSdk.develitWorker(cloudflare_workers.
464
462
  this.allowedProviders = config.allowedProviders;
465
463
  this.db = d1.drizzle(this.env.BANK_D1, { schema: database_schema.tables });
466
464
  }
467
- getAllowedProviders() {
468
- return this.allowedProviders;
469
- }
470
- async getAccounts() {
465
+ async _getAccounts() {
471
466
  return await getAllAccountsQuery(this.db);
472
467
  }
473
- async getPayments(input) {
474
- return this.handleAction(
475
- { data: input, schema: getPaymentsInputSchema },
476
- { successMessage: "Payments fetched successfully" },
477
- async (pagination) => {
478
- return await getPaymentsWithPaginationQuery(this.db, pagination);
468
+ async _saveOrUpdatePayments(accounts) {
469
+ const allFetchedPayments = [];
470
+ const connectorKeys = new Set(
471
+ accounts.map(({ connectorKey }) => connectorKey)
472
+ );
473
+ for (const connectorKey of connectorKeys) {
474
+ await this._initiateBankConnector({ connectorKey });
475
+ for (const account of accounts.filter(
476
+ (acc) => acc.connectorKey === connectorKey
477
+ )) {
478
+ const payments = await this.bankConnector.getAllAccountPayments({
479
+ db: this.db,
480
+ env: this.env.ENVIRONMENT,
481
+ account
482
+ });
483
+ if (!payments || payments.length === 0) continue;
484
+ this.log(payments);
485
+ payments.forEach((payment) => {
486
+ payment.direction = database_schema.getPaymentDirection(payment, account.iban);
487
+ });
488
+ allFetchedPayments.push(...payments);
489
+ }
490
+ }
491
+ if (allFetchedPayments.length < 1) return;
492
+ const bankRefIds = allFetchedPayments.map((payment) => payment.bankRefId).filter(Boolean);
493
+ const alreadyExistingPayments = await getPaymentsByBankRefIdsQuery(
494
+ this.db,
495
+ {
496
+ ids: bankRefIds
479
497
  }
480
498
  );
499
+ const paymentsCommands = allFetchedPayments.map((payment) => {
500
+ const isAlreadyExisting = alreadyExistingPayments.some(
501
+ (existingPayment) => existingPayment.bankRefId === payment.bankRefId
502
+ );
503
+ if (isAlreadyExisting)
504
+ return updatePaymentCommand(this.db, { payment }).command;
505
+ return createPaymentCommand(this.db, { payment }).command;
506
+ });
507
+ await this.db.batch([paymentsCommands[0], ...paymentsCommands.slice(1)]);
508
+ console.log("FETCHEDPAYMANETS TO SYNC", allFetchedPayments.length);
509
+ for (const account of accounts) {
510
+ const paymentsForAccount = allFetchedPayments.filter(
511
+ (payment) => (payment.direction === "OUTGOING" ? payment.debtorIban : payment.creditorIban) === account.iban
512
+ );
513
+ let lastSyncPayment;
514
+ lastSyncPayment = paymentsForAccount.filter(({ status }) => status !== "COMPLETED").sort(
515
+ (a, b) => (a.createdAt?.getTime() || 0) - (b.createdAt?.getTime() || 0)
516
+ )[0];
517
+ if (!lastSyncPayment) {
518
+ lastSyncPayment = paymentsForAccount.sort(
519
+ (a, b) => (b.createdAt?.getTime() || 0) - (a.createdAt?.getTime() || 0)
520
+ )[0];
521
+ }
522
+ if (lastSyncPayment.createdAt) {
523
+ await updateAccountLastSyncCommand(this.db, {
524
+ accountId: account.id,
525
+ lastSyncedAt: lastSyncPayment.createdAt
526
+ }).command.execute();
527
+ }
528
+ }
529
+ await this.pushToQueue(
530
+ this.env.QUEUE_BUS_QUEUE,
531
+ allFetchedPayments.map((payment) => ({
532
+ eventType: "BANK_PAYMENT",
533
+ eventSignal: "created",
534
+ bankPayment: payment,
535
+ metadata: {
536
+ correlationId: backendSdk.uuidv4(),
537
+ timestamp: (/* @__PURE__ */ new Date()).toDateString()
538
+ }
539
+ }))
540
+ );
541
+ }
542
+ async _initiateBankConnector({
543
+ connectorKey,
544
+ withAuth
545
+ }) {
546
+ if (!this.allowedProviders.includes(connectorKey)) {
547
+ throw backendSdk.createInternalError(null, {
548
+ message: `Invalid connector key: ${connectorKey}`
549
+ });
550
+ }
551
+ const accounts = await this._getAccounts();
552
+ const accountsForConnector = accounts.filter(
553
+ (acc) => acc.connectorKey === connectorKey
554
+ );
555
+ const accountsWithCredentials = await Promise.all(
556
+ accountsForConnector.map(async (acc) => {
557
+ const credentials = await getCredentialsByAccountId(this.db, {
558
+ accountId: acc.id
559
+ });
560
+ if (!credentials) {
561
+ throw backendSdk.createInternalError(null, {
562
+ message: `No credentials found for account ${acc.id}`
563
+ });
564
+ }
565
+ return {
566
+ currency: acc.currency,
567
+ iban: acc.iban,
568
+ token: credentials.value,
569
+ id: acc.id,
570
+ connectorKey: acc.connectorKey
571
+ };
572
+ })
573
+ );
574
+ this.bankConnector = initiateConnector({
575
+ bank: connectorKey,
576
+ connectedAccounts: accountsWithCredentials,
577
+ env: this.env
578
+ });
579
+ if (!withAuth) return;
580
+ await this.bankConnector.authenticate();
481
581
  }
482
- accountFetchInterval(connectorKey) {
582
+ _accountFetchInterval(connectorKey) {
483
583
  switch (connectorKey) {
484
584
  case "ERSTE":
485
585
  return database_schema.ErsteConnector.FETCH_INTERVAL;
@@ -491,10 +591,19 @@ let BankServiceBase = class extends backendSdk.develitWorker(cloudflare_workers.
491
591
  return 0;
492
592
  }
493
593
  }
594
+ async getPayments(input) {
595
+ return this.handleAction(
596
+ { data: input, schema: getPaymentsInputSchema },
597
+ { successMessage: "Payments fetched successfully" },
598
+ async (pagination) => {
599
+ return await getPaymentsWithPaginationQuery(this.db, pagination);
600
+ }
601
+ );
602
+ }
494
603
  async syncAccount(input) {
495
604
  return this.handleAction(
496
605
  { data: input, schema: syncAccountInputSchema },
497
- { successMessage: "" },
606
+ { successMessage: "Account synchronized successfully" },
498
607
  async ({ accountId }) => {
499
608
  const account = await getAccountByIdQuery(this.db, {
500
609
  accountId
@@ -505,38 +614,40 @@ let BankServiceBase = class extends backendSdk.develitWorker(cloudflare_workers.
505
614
  message: "Account not found",
506
615
  status: 404
507
616
  });
508
- await this.syncAccounts({
509
- accounts: [account]
510
- });
617
+ await this._saveOrUpdatePayments([account]);
511
618
  }
512
619
  );
513
620
  }
514
621
  async syncAccounts(options) {
515
- return this.handleAction(null, {}, async () => {
516
- const accountsToSync = [];
517
- let accounts = options?.accounts || [];
518
- if (!accounts.length) {
519
- accounts = await this.getAccounts();
520
- }
521
- for (const account of accounts.filter(
522
- (acc) => !!!acc.connectorKey.includes("MOCK")
523
- )) {
524
- const accountFetchInterval = this.accountFetchInterval(
525
- account.connectorKey
526
- );
527
- const now = Date.now();
528
- const lastSyncTime = account.lastSyncedAt.getTime();
529
- const intervalMs = accountFetchInterval * 1e3;
530
- const shouldFetch = now - lastSyncTime >= intervalMs;
531
- if (!shouldFetch) continue;
532
- accountsToSync.push({
533
- ...account
534
- });
622
+ return this.handleAction(
623
+ null,
624
+ { successMessage: "Accounts synchronized successfully" },
625
+ async () => {
626
+ const accountsToSync = [];
627
+ let accounts = options?.accounts || [];
628
+ if (!accounts.length) {
629
+ accounts = await this._getAccounts();
630
+ }
631
+ for (const account of accounts.filter(
632
+ (acc) => !!!acc.connectorKey.includes("MOCK")
633
+ )) {
634
+ const accountFetchInterval = this._accountFetchInterval(
635
+ account.connectorKey
636
+ );
637
+ const now = Date.now();
638
+ const lastSyncTime = account.lastSyncedAt.getTime();
639
+ const intervalMs = accountFetchInterval * 1e3;
640
+ const shouldFetch = now - lastSyncTime >= intervalMs;
641
+ if (!shouldFetch) continue;
642
+ accountsToSync.push({
643
+ ...account
644
+ });
645
+ }
646
+ console.log("ACCS TO SYNC", accountsToSync.length);
647
+ if (accountsToSync.length <= 0) return;
648
+ await this._saveOrUpdatePayments(accounts);
535
649
  }
536
- console.log("ACCS TO SYNC", accountsToSync.length);
537
- if (accountsToSync.length <= 0) return;
538
- await this.saveOrUpdatePayments(accountsToSync);
539
- });
650
+ );
540
651
  }
541
652
  async scheduled(controller) {
542
653
  if (controller.cron === this.env.CRON_PAYMENTS_PROCESSING) {
@@ -551,7 +662,7 @@ let BankServiceBase = class extends backendSdk.develitWorker(cloudflare_workers.
551
662
  async updateBatchStatuses() {
552
663
  const pendingBatches = await getAllPendingBatchesQuery(this.db);
553
664
  const uniqueConnectors = /* @__PURE__ */ new Set();
554
- const accounts = await this.getAccounts();
665
+ const accounts = await this._getAccounts();
555
666
  for (const batch of pendingBatches) {
556
667
  const connectorKey = accounts.find(
557
668
  (acc) => acc.id === batch.accountId
@@ -592,53 +703,6 @@ let BankServiceBase = class extends backendSdk.develitWorker(cloudflare_workers.
592
703
  ]);
593
704
  console.log("Batch update completed");
594
705
  }
595
- // @action('initiate-bank-connector')
596
- async initiateBankConnector(input) {
597
- return this.handleAction(
598
- { data: input, schema: initiateConnectorInputSchema },
599
- { successMessage: "Bank connector initiated successfully" },
600
- async ({ connectorKey, withAuth }) => {
601
- if (!this.allowedProviders.includes(connectorKey)) {
602
- throw backendSdk.createInternalError(null, {
603
- message: `Invalid connector key: ${connectorKey}`
604
- });
605
- }
606
- const accounts = await this.getAccounts();
607
- const accountsForConnector = accounts.filter(
608
- (acc) => acc.connectorKey === connectorKey
609
- );
610
- const accountsWithCredentials = await Promise.all(
611
- accountsForConnector.map(async (acc) => {
612
- const credentials = await getCredentialsByAccountId(this.db, {
613
- accountId: acc.id
614
- });
615
- if (!credentials) {
616
- throw backendSdk.createInternalError(null, {
617
- message: `No credentials found for account ${acc.id}`
618
- });
619
- }
620
- return {
621
- currency: acc.currency,
622
- iban: acc.iban,
623
- token: credentials.value,
624
- id: acc.id,
625
- connectorKey: acc.connectorKey
626
- };
627
- })
628
- );
629
- this.bankConnector = initiateConnector({
630
- bank: connectorKey,
631
- connectedAccounts: accountsWithCredentials,
632
- env: this.env
633
- });
634
- if (!withAuth) return;
635
- await this.bankConnector.authenticate();
636
- }
637
- );
638
- }
639
- batchLimit(connectorKey) {
640
- return 50;
641
- }
642
706
  async addPaymentsToBatch({
643
707
  paymentsToBatch
644
708
  }) {
@@ -648,9 +712,8 @@ let BankServiceBase = class extends backendSdk.develitWorker(cloudflare_workers.
648
712
  (payment) => {
649
713
  return {
650
714
  id: backendSdk.uuidv4(),
651
- accountId: "",
715
+ correlationId: payment.correlationId,
652
716
  refId: payment.refId,
653
- connectorKey: "MOCK",
654
717
  amount: payment.amount,
655
718
  direction: "OUTGOING",
656
719
  paymentType: payment.paymentType,
@@ -662,16 +725,14 @@ let BankServiceBase = class extends backendSdk.develitWorker(cloudflare_workers.
662
725
  ss: payment.ss || null,
663
726
  ks: payment.ks || null,
664
727
  message: payment.message || null,
665
- creditorHolderName: payment.creditorHolderName,
666
- creditorAccountNumberWithBankCode: payment.creditorAccountNumberWithBankCode,
667
- creditorIban: payment.creditorIban,
668
- debtorHolderName: payment.debtorHolderName,
669
- debtorAccountNumberWithBankCode: payment.debtorAccountNumberWithBankCode,
670
- debtorIban: payment.debtorIban
728
+ creditor: payment.creditor,
729
+ creditorIban: payment.creditor.iban || null,
730
+ debtor: payment.debtor,
731
+ debtorIban: payment.debtor.iban || null
671
732
  };
672
733
  }
673
734
  );
674
- const accounts = await this.getAccounts();
735
+ const accounts = await this._getAccounts();
675
736
  const { supportedPayments, unsupportedPayments } = seperateSupportedPayments(mappedPayments, accounts);
676
737
  if (unsupportedPayments.length > 0) {
677
738
  this.logError({ unsupportedPayments });
@@ -682,23 +743,17 @@ let BankServiceBase = class extends backendSdk.develitWorker(cloudflare_workers.
682
743
  bankPayment: {
683
744
  ...unsupported,
684
745
  status: "FAILED",
685
- statusReason: "UNSUPPORTED_ACCOUNT",
686
- paymentType: unsupported.paymentType,
687
- creditorAccountNumberWithBankCode: unsupported.creditorAccountNumberWithBankCode,
688
- creditorIban: unsupported.creditorIban,
689
- creditorHolderName: unsupported.creditorHolderName,
690
- debtorAccountNumberWithBankCode: unsupported.debtorAccountNumberWithBankCode,
691
- debtorIban: unsupported.debtorIban,
692
- debtorHolderName: unsupported.debtorHolderName
746
+ statusReason: "UNSUPPORTED_ACCOUNT"
693
747
  },
748
+ eventSignal: "failed",
694
749
  metadata: {
695
- correlationId: backendSdk.uuidv4(),
750
+ correlationId: unsupported.correlationId,
696
751
  timestamp: (/* @__PURE__ */ new Date()).toDateString()
697
752
  }
698
753
  }))
699
754
  );
700
755
  }
701
- for (const acc of await this.getAccounts()) {
756
+ for (const acc of accounts) {
702
757
  const newPayments = supportedPayments.filter(
703
758
  (payment) => payment.debtorIban === acc.iban && payment.currency === acc.currency
704
759
  ).map((payment) => ({
@@ -716,7 +771,7 @@ let BankServiceBase = class extends backendSdk.develitWorker(cloudflare_workers.
716
771
  accountId: acc.id
717
772
  });
718
773
  const availableBatch = openBatches.find(
719
- (batch) => batch.payments.length >= this.batchLimit(acc.connectorKey)
774
+ (batch) => batch.payments.length >= acc.batchSizeLimit
720
775
  );
721
776
  this.log({
722
777
  message: availableBatch ? `\u{1F504} Found existing OPEN batches for account ${acc.id}, merging ${availableBatch.payments.length} existing + ${newPayments.length} new payments` : `\u2728 Creating new batch for account ${acc.id} with ${newPayments.length} payments`
@@ -752,7 +807,7 @@ let BankServiceBase = class extends backendSdk.develitWorker(cloudflare_workers.
752
807
  status: "PROCESSING"
753
808
  }
754
809
  }).command.execute();
755
- await this.initiateBankConnector({ connectorKey });
810
+ await this._initiateBankConnector({ connectorKey });
756
811
  if (!this.bankConnector) {
757
812
  await upsertBatchCommand(this.db, {
758
813
  batch: {
@@ -881,7 +936,7 @@ let BankServiceBase = class extends backendSdk.develitWorker(cloudflare_workers.
881
936
  { data: input, schema: getAuthUriInputSchema },
882
937
  { successMessage: "Auth URI obtained." },
883
938
  async ({ connectorKey }) => {
884
- await this.initiateBankConnector({ connectorKey, withAuth: false });
939
+ await this._initiateBankConnector({ connectorKey, withAuth: false });
885
940
  const ott = backendSdk.uuidv4();
886
941
  const { command: createOneTimeToken } = createOneTimeTokenCommand(
887
942
  this.db,
@@ -919,14 +974,14 @@ let BankServiceBase = class extends backendSdk.develitWorker(cloudflare_workers.
919
974
  status: 400
920
975
  });
921
976
  }
922
- await this.initiateBankConnector({
977
+ await this._initiateBankConnector({
923
978
  connectorKey: ottRow.refId
924
979
  });
925
980
  const { credentials, accounts } = await this.bankConnector.authorizeAccount({
926
981
  urlParams
927
982
  });
928
983
  console.log("Bank connector initiated");
929
- const alreadyExistingAccounts = (await this.getAccounts()).filter(
984
+ const alreadyExistingAccounts = (await this._getAccounts()).filter(
930
985
  (acc) => acc.connectorKey === ottRow.refId && accounts.map((item) => item.iban).includes(acc.iban)
931
986
  );
932
987
  const upsertAccounts = accounts.map(
@@ -953,7 +1008,7 @@ let BankServiceBase = class extends backendSdk.develitWorker(cloudflare_workers.
953
1008
  ...deleteCredentials,
954
1009
  ...createAccountCredentials
955
1010
  ]);
956
- const fetchedAccounts = await this.getAccounts();
1011
+ const fetchedAccounts = await this._getAccounts();
957
1012
  if (!fetchedAccounts)
958
1013
  throw backendSdk.createInternalError(null, {
959
1014
  message: "Account not found",
@@ -966,79 +1021,6 @@ let BankServiceBase = class extends backendSdk.develitWorker(cloudflare_workers.
966
1021
  }
967
1022
  );
968
1023
  }
969
- async saveOrUpdatePayments(accounts) {
970
- return this.handleAction(null, {}, async () => {
971
- const allFetchedPayments = [];
972
- const connectorKeys = new Set(
973
- accounts.map(({ connectorKey }) => connectorKey)
974
- );
975
- for (const connectorKey of connectorKeys) {
976
- await this.initiateBankConnector({ connectorKey });
977
- for (const account of accounts.filter(
978
- (acc) => acc.connectorKey === connectorKey
979
- )) {
980
- const payments = await this.bankConnector.getAllAccountPayments({
981
- db: this.db,
982
- env: this.env.ENVIRONMENT,
983
- account
984
- });
985
- if (!payments || payments.length === 0) continue;
986
- this.log(payments);
987
- payments.forEach((payment) => {
988
- payment.direction = database_schema.getPaymentDirection(payment, account.iban);
989
- });
990
- allFetchedPayments.push(...payments);
991
- }
992
- }
993
- if (allFetchedPayments.length < 1) return;
994
- const bankRefIds = allFetchedPayments.map((payment) => payment.bankRefId).filter(Boolean);
995
- const alreadyExistingPayments = await getPaymentsByBankRefIdsQuery(
996
- this.db,
997
- { ids: bankRefIds }
998
- );
999
- const paymentsCommands = allFetchedPayments.map((payment) => {
1000
- const isAlreadyExisting = alreadyExistingPayments.some(
1001
- (existingPayment) => existingPayment.bankRefId === payment.bankRefId
1002
- );
1003
- if (isAlreadyExisting)
1004
- return updatePaymentCommand(this.db, { payment }).command;
1005
- return createPaymentCommand(this.db, { payment }).command;
1006
- });
1007
- await this.db.batch([paymentsCommands[0], ...paymentsCommands.slice(1)]);
1008
- console.log("FETCHEDPAYMANETS TO SYNC", allFetchedPayments.length);
1009
- for (const account of accounts) {
1010
- const paymentsForAccount = allFetchedPayments.filter(
1011
- (payment) => (payment.direction === "OUTGOING" ? payment.debtorIban : payment.creditorIban) === account.iban
1012
- );
1013
- let lastSyncPayment;
1014
- lastSyncPayment = paymentsForAccount.filter(({ status }) => status !== "COMPLETED").sort(
1015
- (a, b) => (a.createdAt?.getTime() || 0) - (b.createdAt?.getTime() || 0)
1016
- )[0];
1017
- if (!lastSyncPayment) {
1018
- lastSyncPayment = paymentsForAccount.sort(
1019
- (a, b) => (b.createdAt?.getTime() || 0) - (a.createdAt?.getTime() || 0)
1020
- )[0];
1021
- }
1022
- if (lastSyncPayment.createdAt) {
1023
- await updateAccountLastSyncCommand(this.db, {
1024
- accountId: account.id,
1025
- lastSyncedAt: lastSyncPayment.createdAt
1026
- }).command.execute();
1027
- }
1028
- }
1029
- await this.pushToQueue(
1030
- this.env.QUEUE_BUS_QUEUE,
1031
- allFetchedPayments.map((payment) => ({
1032
- eventType: "BANK_PAYMENT",
1033
- bankPayment: payment,
1034
- metadata: {
1035
- correlationId: backendSdk.uuidv4(),
1036
- timestamp: (/* @__PURE__ */ new Date()).toDateString()
1037
- }
1038
- }))
1039
- );
1040
- });
1041
- }
1042
1024
  async simulateDeposit(input) {
1043
1025
  return this.handleAction(
1044
1026
  { data: input, schema: simulateDepositInputSchema },
@@ -1050,14 +1032,12 @@ let BankServiceBase = class extends backendSdk.develitWorker(cloudflare_workers.
1050
1032
  bankingSs,
1051
1033
  bankingKs,
1052
1034
  message,
1053
- creditorIban,
1054
- creditorHolderName,
1055
- debtorIban,
1056
- debtorHolderName,
1035
+ creditor,
1036
+ debtor,
1057
1037
  connectorKey
1058
1038
  }) => {
1059
1039
  const account = await getAccountByIbanQuery(this.db, {
1060
- iban: creditorIban
1040
+ iban: debtor.iban
1061
1041
  });
1062
1042
  if (!account)
1063
1043
  throw backendSdk.createInternalError(null, {
@@ -1067,6 +1047,7 @@ let BankServiceBase = class extends backendSdk.develitWorker(cloudflare_workers.
1067
1047
  });
1068
1048
  const payment = {
1069
1049
  id: backendSdk.uuidv4(),
1050
+ correlationId: backendSdk.uuidv4(),
1070
1051
  amount,
1071
1052
  connectorKey,
1072
1053
  accountId: account.id,
@@ -1081,19 +1062,20 @@ let BankServiceBase = class extends backendSdk.develitWorker(cloudflare_workers.
1081
1062
  ss: bankingSs,
1082
1063
  ks: bankingKs,
1083
1064
  message,
1084
- creditorIban,
1085
- creditorHolderName,
1086
- debtorIban,
1087
- debtorHolderName
1065
+ creditor,
1066
+ creditorIban: creditor.iban,
1067
+ debtor,
1068
+ debtorIban: debtor.iban
1088
1069
  };
1089
1070
  const { command } = createPaymentCommand(this.db, { payment });
1090
1071
  const createdPayment = await command.execute().then(backendSdk.first);
1091
1072
  this.logQueuePush({ payment, isPaymentExecuted: true });
1092
1073
  await this.pushToQueue(this.env.QUEUE_BUS_QUEUE, {
1093
1074
  eventType: "BANK_PAYMENT",
1075
+ eventSignal: "completed",
1094
1076
  bankPayment: createdPayment,
1095
1077
  metadata: {
1096
- correlationId: createdPayment.id,
1078
+ correlationId: createdPayment.correlationId,
1097
1079
  timestamp: (/* @__PURE__ */ new Date()).toDateString()
1098
1080
  }
1099
1081
  });
@@ -1119,7 +1101,6 @@ let BankServiceBase = class extends backendSdk.develitWorker(cloudflare_workers.
1119
1101
  accountId: account.id,
1120
1102
  lastSyncedAt
1121
1103
  }).command.execute();
1122
- return {};
1123
1104
  }
1124
1105
  );
1125
1106
  }
@@ -1136,9 +1117,33 @@ let BankServiceBase = class extends backendSdk.develitWorker(cloudflare_workers.
1136
1117
  );
1137
1118
  }
1138
1119
  async getBankAccounts() {
1139
- return backendSdk.RPCResponse.ok("Bank accounts retrieved successfully", {
1140
- data: await this.getAccounts()
1141
- });
1120
+ return this.handleAction(
1121
+ null,
1122
+ { successMessage: "Bank accounts retrieved successfully" },
1123
+ async () => await this._getAccounts()
1124
+ );
1125
+ }
1126
+ async updateAccount(input) {
1127
+ return this.handleAction(
1128
+ {
1129
+ data: input,
1130
+ schema: updateAccountInputSchema
1131
+ },
1132
+ { successMessage: "Account updated successfully" },
1133
+ async ({ account }) => {
1134
+ const updatedAccount = await upsertAccountCommand(this.db, {
1135
+ account
1136
+ }).command.execute().then(backendSdk.first);
1137
+ if (!updatedAccount) {
1138
+ throw backendSdk.createInternalError(null, {
1139
+ message: "Account not found",
1140
+ code: "ACCOUNT_NOT_FOUND",
1141
+ status: 404
1142
+ });
1143
+ }
1144
+ return updatedAccount;
1145
+ }
1146
+ );
1142
1147
  }
1143
1148
  async getBatches(input) {
1144
1149
  return this.handleAction(
@@ -1180,9 +1185,6 @@ __decorateClass([
1180
1185
  __decorateClass([
1181
1186
  backendSdk.action("authorize-account")
1182
1187
  ], BankServiceBase.prototype, "authorizeAccount", 1);
1183
- __decorateClass([
1184
- backendSdk.action("save-or-update-payments")
1185
- ], BankServiceBase.prototype, "saveOrUpdatePayments", 1);
1186
1188
  __decorateClass([
1187
1189
  backendSdk.action("simulate-deposit")
1188
1190
  ], BankServiceBase.prototype, "simulateDeposit", 1);
@@ -1195,6 +1197,9 @@ __decorateClass([
1195
1197
  __decorateClass([
1196
1198
  backendSdk.action("get-bank-accounts")
1197
1199
  ], BankServiceBase.prototype, "getBankAccounts", 1);
1200
+ __decorateClass([
1201
+ backendSdk.action("update-account")
1202
+ ], BankServiceBase.prototype, "updateAccount", 1);
1198
1203
  __decorateClass([
1199
1204
  backendSdk.action("getBatches")
1200
1205
  ], BankServiceBase.prototype, "getBatches", 1);