@develit-services/bank 0.0.41 → 0.0.42

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,12 +1,12 @@
1
- import { uuidv4, develitWorker, createInternalError, first, RPCResponse, action, service } from '@develit-io/backend-sdk';
1
+ import { uuidv4, bankAccountMetadataSchema, develitWorker, createInternalError, first, action, service } from '@develit-io/backend-sdk';
2
2
  import { WorkerEntrypoint } from 'cloudflare:workers';
3
3
  import { drizzle } from 'drizzle-orm/d1';
4
- import { t as tables, F as FinbricksConnector, M as MockConnector, E as ErsteConnector, P as PAYMENT_TYPES, e as CONNECTOR_KEYS, B as BATCH_STATUSES, c as PAYMENT_STATUSES, d as PAYMENT_DIRECTIONS, q as getPaymentDirection } from '../shared/bank.HuMp6uP6.mjs';
4
+ import { t as tables, F as FinbricksConnector, M as MockConnector, E as ErsteConnector, c as INSTRUCTION_PRIORITIES, C as CHARGE_BEARERS, P as PAYMENT_TYPES, g as CONNECTOR_KEYS, B as BATCH_STATUSES, d as PAYMENT_STATUSES, e as PAYMENT_DIRECTIONS, i as accountInsertSchema, v as getPaymentDirection } from '../shared/bank.C4RJkRzZ.mjs';
5
5
  import 'jose';
6
6
  import { CURRENCY_CODES } from '@develit-io/general-codes';
7
7
  import { z } from 'zod';
8
8
  import { eq, inArray, and, sql, asc, desc, gte, lte } from 'drizzle-orm';
9
- import { M as MockCobsConnector } from '../shared/bank.E-nyO12E.mjs';
9
+ import { M as MockCobsConnector } from '../shared/bank.WJE512Ly.mjs';
10
10
  import 'drizzle-orm/sqlite-core';
11
11
  import 'drizzle-zod';
12
12
  import 'date-fns';
@@ -345,20 +345,21 @@ const seperateSupportedPayments = (mappedPayments, accounts) => {
345
345
  };
346
346
 
347
347
  const sendPaymentInputSchema = z.object({
348
+ correlationId: z.string().min(1),
348
349
  refId: z.string(),
349
350
  amount: z.number().positive(),
350
351
  paymentType: z.enum(PAYMENT_TYPES),
352
+ chargeBearer: z.enum(CHARGE_BEARERS),
353
+ executionDate: z.string(),
354
+ instructionPriority: z.enum(INSTRUCTION_PRIORITIES),
351
355
  currency: z.enum(CURRENCY_CODES),
352
- vs: z.string().nullable().optional(),
353
- ss: z.string().nullable().optional(),
354
- ks: z.string().nullable().optional(),
355
- message: z.string().nullable().optional(),
356
- creditorHolderName: z.string(),
357
- creditorAccountNumberWithBankCode: z.string(),
358
- creditorIban: z.string(),
359
- debtorHolderName: z.string(),
360
- debtorAccountNumberWithBankCode: z.string(),
361
- debtorIban: z.string()
356
+ vs: z.string().optional(),
357
+ ss: z.string().optional(),
358
+ ks: z.string().optional(),
359
+ message: z.string().optional(),
360
+ creditor: bankAccountMetadataSchema,
361
+ debtor: bankAccountMetadataSchema,
362
+ purpose: z.string().optional()
362
363
  });
363
364
 
364
365
  const getAuthUriInputSchema = z.object({
@@ -389,11 +390,6 @@ const setLastSyncAtInputSchema = z.object({
389
390
  lastSyncedAt: z.coerce.date()
390
391
  });
391
392
 
392
- const initiateConnectorInputSchema = z.object({
393
- connectorKey: z.enum(CONNECTOR_KEYS),
394
- withAuth: z.boolean().default(true).optional()
395
- });
396
-
397
393
  const ALLOWED_BATCH_FILTERS = {
398
394
  ACCOUNT_ID: "filterBatchAccountId",
399
395
  STATUS: "filterBatchStatus"
@@ -443,6 +439,10 @@ const syncAccountInputSchema = z.object({
443
439
  accountId: z.uuid()
444
440
  });
445
441
 
442
+ const updateAccountInputSchema = z.object({
443
+ account: accountInsertSchema
444
+ });
445
+
446
446
  var __defProp = Object.defineProperty;
447
447
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
448
448
  var __decorateClass = (decorators, target, key, kind) => {
@@ -460,22 +460,123 @@ let BankServiceBase = class extends develitWorker(WorkerEntrypoint) {
460
460
  this.allowedProviders = config.allowedProviders;
461
461
  this.db = drizzle(this.env.BANK_D1, { schema: tables });
462
462
  }
463
- getAllowedProviders() {
464
- return this.allowedProviders;
465
- }
466
- async getAccounts() {
463
+ async _getAccounts() {
467
464
  return await getAllAccountsQuery(this.db);
468
465
  }
469
- async getPayments(input) {
470
- return this.handleAction(
471
- { data: input, schema: getPaymentsInputSchema },
472
- { successMessage: "Payments fetched successfully" },
473
- async (pagination) => {
474
- return await getPaymentsWithPaginationQuery(this.db, pagination);
466
+ async _saveOrUpdatePayments(accounts) {
467
+ const allFetchedPayments = [];
468
+ const connectorKeys = new Set(
469
+ accounts.map(({ connectorKey }) => connectorKey)
470
+ );
471
+ for (const connectorKey of connectorKeys) {
472
+ await this._initiateBankConnector({ connectorKey });
473
+ for (const account of accounts.filter(
474
+ (acc) => acc.connectorKey === connectorKey
475
+ )) {
476
+ const payments = await this.bankConnector.getAllAccountPayments({
477
+ db: this.db,
478
+ env: this.env.ENVIRONMENT,
479
+ account
480
+ });
481
+ if (!payments || payments.length === 0) continue;
482
+ this.log(payments);
483
+ payments.forEach((payment) => {
484
+ payment.direction = getPaymentDirection(payment, account.iban);
485
+ });
486
+ allFetchedPayments.push(...payments);
487
+ }
488
+ }
489
+ if (allFetchedPayments.length < 1) return;
490
+ const bankRefIds = allFetchedPayments.map((payment) => payment.bankRefId).filter(Boolean);
491
+ const alreadyExistingPayments = await getPaymentsByBankRefIdsQuery(
492
+ this.db,
493
+ {
494
+ ids: bankRefIds
475
495
  }
476
496
  );
497
+ const paymentsCommands = allFetchedPayments.map((payment) => {
498
+ const isAlreadyExisting = alreadyExistingPayments.some(
499
+ (existingPayment) => existingPayment.bankRefId === payment.bankRefId
500
+ );
501
+ if (isAlreadyExisting)
502
+ return updatePaymentCommand(this.db, { payment }).command;
503
+ return createPaymentCommand(this.db, { payment }).command;
504
+ });
505
+ await this.db.batch([paymentsCommands[0], ...paymentsCommands.slice(1)]);
506
+ console.log("FETCHEDPAYMANETS TO SYNC", allFetchedPayments.length);
507
+ for (const account of accounts) {
508
+ const paymentsForAccount = allFetchedPayments.filter(
509
+ (payment) => (payment.direction === "OUTGOING" ? payment.debtorIban : payment.creditorIban) === account.iban
510
+ );
511
+ let lastSyncPayment;
512
+ lastSyncPayment = paymentsForAccount.filter(({ status }) => status !== "COMPLETED").sort(
513
+ (a, b) => (a.createdAt?.getTime() || 0) - (b.createdAt?.getTime() || 0)
514
+ )[0];
515
+ if (!lastSyncPayment) {
516
+ lastSyncPayment = paymentsForAccount.sort(
517
+ (a, b) => (b.createdAt?.getTime() || 0) - (a.createdAt?.getTime() || 0)
518
+ )[0];
519
+ }
520
+ if (lastSyncPayment.createdAt) {
521
+ await updateAccountLastSyncCommand(this.db, {
522
+ accountId: account.id,
523
+ lastSyncedAt: lastSyncPayment.createdAt
524
+ }).command.execute();
525
+ }
526
+ }
527
+ await this.pushToQueue(
528
+ this.env.QUEUE_BUS_QUEUE,
529
+ allFetchedPayments.map((payment) => ({
530
+ eventType: "BANK_PAYMENT",
531
+ bankPayment: payment,
532
+ metadata: {
533
+ correlationId: uuidv4(),
534
+ timestamp: (/* @__PURE__ */ new Date()).toDateString()
535
+ }
536
+ }))
537
+ );
538
+ }
539
+ async _initiateBankConnector({
540
+ connectorKey,
541
+ withAuth
542
+ }) {
543
+ if (!this.allowedProviders.includes(connectorKey)) {
544
+ throw createInternalError(null, {
545
+ message: `Invalid connector key: ${connectorKey}`
546
+ });
547
+ }
548
+ const accounts = await this._getAccounts();
549
+ const accountsForConnector = accounts.filter(
550
+ (acc) => acc.connectorKey === connectorKey
551
+ );
552
+ const accountsWithCredentials = await Promise.all(
553
+ accountsForConnector.map(async (acc) => {
554
+ const credentials = await getCredentialsByAccountId(this.db, {
555
+ accountId: acc.id
556
+ });
557
+ if (!credentials) {
558
+ throw createInternalError(null, {
559
+ message: `No credentials found for account ${acc.id}`
560
+ });
561
+ }
562
+ return {
563
+ currency: acc.currency,
564
+ iban: acc.iban,
565
+ token: credentials.value,
566
+ id: acc.id,
567
+ connectorKey: acc.connectorKey
568
+ };
569
+ })
570
+ );
571
+ this.bankConnector = initiateConnector({
572
+ bank: connectorKey,
573
+ connectedAccounts: accountsWithCredentials,
574
+ env: this.env
575
+ });
576
+ if (!withAuth) return;
577
+ await this.bankConnector.authenticate();
477
578
  }
478
- accountFetchInterval(connectorKey) {
579
+ _accountFetchInterval(connectorKey) {
479
580
  switch (connectorKey) {
480
581
  case "ERSTE":
481
582
  return ErsteConnector.FETCH_INTERVAL;
@@ -487,10 +588,19 @@ let BankServiceBase = class extends develitWorker(WorkerEntrypoint) {
487
588
  return 0;
488
589
  }
489
590
  }
591
+ async getPayments(input) {
592
+ return this.handleAction(
593
+ { data: input, schema: getPaymentsInputSchema },
594
+ { successMessage: "Payments fetched successfully" },
595
+ async (pagination) => {
596
+ return await getPaymentsWithPaginationQuery(this.db, pagination);
597
+ }
598
+ );
599
+ }
490
600
  async syncAccount(input) {
491
601
  return this.handleAction(
492
602
  { data: input, schema: syncAccountInputSchema },
493
- { successMessage: "" },
603
+ { successMessage: "Account synchronized successfully" },
494
604
  async ({ accountId }) => {
495
605
  const account = await getAccountByIdQuery(this.db, {
496
606
  accountId
@@ -501,38 +611,40 @@ let BankServiceBase = class extends develitWorker(WorkerEntrypoint) {
501
611
  message: "Account not found",
502
612
  status: 404
503
613
  });
504
- await this.syncAccounts({
505
- accounts: [account]
506
- });
614
+ await this._saveOrUpdatePayments([account]);
507
615
  }
508
616
  );
509
617
  }
510
618
  async syncAccounts(options) {
511
- return this.handleAction(null, {}, async () => {
512
- const accountsToSync = [];
513
- let accounts = options?.accounts || [];
514
- if (!accounts.length) {
515
- accounts = await this.getAccounts();
516
- }
517
- for (const account of accounts.filter(
518
- (acc) => !!!acc.connectorKey.includes("MOCK")
519
- )) {
520
- const accountFetchInterval = this.accountFetchInterval(
521
- account.connectorKey
522
- );
523
- const now = Date.now();
524
- const lastSyncTime = account.lastSyncedAt.getTime();
525
- const intervalMs = accountFetchInterval * 1e3;
526
- const shouldFetch = now - lastSyncTime >= intervalMs;
527
- if (!shouldFetch) continue;
528
- accountsToSync.push({
529
- ...account
530
- });
619
+ return this.handleAction(
620
+ null,
621
+ { successMessage: "Accounts synchronized successfully" },
622
+ async () => {
623
+ const accountsToSync = [];
624
+ let accounts = options?.accounts || [];
625
+ if (!accounts.length) {
626
+ accounts = await this._getAccounts();
627
+ }
628
+ for (const account of accounts.filter(
629
+ (acc) => !!!acc.connectorKey.includes("MOCK")
630
+ )) {
631
+ const accountFetchInterval = this._accountFetchInterval(
632
+ account.connectorKey
633
+ );
634
+ const now = Date.now();
635
+ const lastSyncTime = account.lastSyncedAt.getTime();
636
+ const intervalMs = accountFetchInterval * 1e3;
637
+ const shouldFetch = now - lastSyncTime >= intervalMs;
638
+ if (!shouldFetch) continue;
639
+ accountsToSync.push({
640
+ ...account
641
+ });
642
+ }
643
+ console.log("ACCS TO SYNC", accountsToSync.length);
644
+ if (accountsToSync.length <= 0) return;
645
+ await this._saveOrUpdatePayments(accounts);
531
646
  }
532
- console.log("ACCS TO SYNC", accountsToSync.length);
533
- if (accountsToSync.length <= 0) return;
534
- await this.saveOrUpdatePayments(accountsToSync);
535
- });
647
+ );
536
648
  }
537
649
  async scheduled(controller) {
538
650
  if (controller.cron === this.env.CRON_PAYMENTS_PROCESSING) {
@@ -547,7 +659,7 @@ let BankServiceBase = class extends develitWorker(WorkerEntrypoint) {
547
659
  async updateBatchStatuses() {
548
660
  const pendingBatches = await getAllPendingBatchesQuery(this.db);
549
661
  const uniqueConnectors = /* @__PURE__ */ new Set();
550
- const accounts = await this.getAccounts();
662
+ const accounts = await this._getAccounts();
551
663
  for (const batch of pendingBatches) {
552
664
  const connectorKey = accounts.find(
553
665
  (acc) => acc.id === batch.accountId
@@ -588,53 +700,6 @@ let BankServiceBase = class extends develitWorker(WorkerEntrypoint) {
588
700
  ]);
589
701
  console.log("Batch update completed");
590
702
  }
591
- // @action('initiate-bank-connector')
592
- async initiateBankConnector(input) {
593
- return this.handleAction(
594
- { data: input, schema: initiateConnectorInputSchema },
595
- { successMessage: "Bank connector initiated successfully" },
596
- async ({ connectorKey, withAuth }) => {
597
- if (!this.allowedProviders.includes(connectorKey)) {
598
- throw createInternalError(null, {
599
- message: `Invalid connector key: ${connectorKey}`
600
- });
601
- }
602
- const accounts = await this.getAccounts();
603
- const accountsForConnector = accounts.filter(
604
- (acc) => acc.connectorKey === connectorKey
605
- );
606
- const accountsWithCredentials = await Promise.all(
607
- accountsForConnector.map(async (acc) => {
608
- const credentials = await getCredentialsByAccountId(this.db, {
609
- accountId: acc.id
610
- });
611
- if (!credentials) {
612
- throw createInternalError(null, {
613
- message: `No credentials found for account ${acc.id}`
614
- });
615
- }
616
- return {
617
- currency: acc.currency,
618
- iban: acc.iban,
619
- token: credentials.value,
620
- id: acc.id,
621
- connectorKey: acc.connectorKey
622
- };
623
- })
624
- );
625
- this.bankConnector = initiateConnector({
626
- bank: connectorKey,
627
- connectedAccounts: accountsWithCredentials,
628
- env: this.env
629
- });
630
- if (!withAuth) return;
631
- await this.bankConnector.authenticate();
632
- }
633
- );
634
- }
635
- batchLimit(connectorKey) {
636
- return 50;
637
- }
638
703
  async addPaymentsToBatch({
639
704
  paymentsToBatch
640
705
  }) {
@@ -644,9 +709,8 @@ let BankServiceBase = class extends develitWorker(WorkerEntrypoint) {
644
709
  (payment) => {
645
710
  return {
646
711
  id: uuidv4(),
647
- accountId: "",
712
+ correlationId: payment.correlationId,
648
713
  refId: payment.refId,
649
- connectorKey: "MOCK",
650
714
  amount: payment.amount,
651
715
  direction: "OUTGOING",
652
716
  paymentType: payment.paymentType,
@@ -658,16 +722,14 @@ let BankServiceBase = class extends develitWorker(WorkerEntrypoint) {
658
722
  ss: payment.ss || null,
659
723
  ks: payment.ks || null,
660
724
  message: payment.message || null,
661
- creditorHolderName: payment.creditorHolderName,
662
- creditorAccountNumberWithBankCode: payment.creditorAccountNumberWithBankCode,
663
- creditorIban: payment.creditorIban,
664
- debtorHolderName: payment.debtorHolderName,
665
- debtorAccountNumberWithBankCode: payment.debtorAccountNumberWithBankCode,
666
- debtorIban: payment.debtorIban
725
+ creditor: payment.creditor,
726
+ creditorIban: payment.creditor.iban || null,
727
+ debtor: payment.debtor,
728
+ debtorIban: payment.debtor.iban || null
667
729
  };
668
730
  }
669
731
  );
670
- const accounts = await this.getAccounts();
732
+ const accounts = await this._getAccounts();
671
733
  const { supportedPayments, unsupportedPayments } = seperateSupportedPayments(mappedPayments, accounts);
672
734
  if (unsupportedPayments.length > 0) {
673
735
  this.logError({ unsupportedPayments });
@@ -678,23 +740,16 @@ let BankServiceBase = class extends develitWorker(WorkerEntrypoint) {
678
740
  bankPayment: {
679
741
  ...unsupported,
680
742
  status: "FAILED",
681
- statusReason: "UNSUPPORTED_ACCOUNT",
682
- paymentType: unsupported.paymentType,
683
- creditorAccountNumberWithBankCode: unsupported.creditorAccountNumberWithBankCode,
684
- creditorIban: unsupported.creditorIban,
685
- creditorHolderName: unsupported.creditorHolderName,
686
- debtorAccountNumberWithBankCode: unsupported.debtorAccountNumberWithBankCode,
687
- debtorIban: unsupported.debtorIban,
688
- debtorHolderName: unsupported.debtorHolderName
743
+ statusReason: "UNSUPPORTED_ACCOUNT"
689
744
  },
690
745
  metadata: {
691
- correlationId: uuidv4(),
746
+ correlationId: unsupported.correlationId,
692
747
  timestamp: (/* @__PURE__ */ new Date()).toDateString()
693
748
  }
694
749
  }))
695
750
  );
696
751
  }
697
- for (const acc of await this.getAccounts()) {
752
+ for (const acc of accounts) {
698
753
  const newPayments = supportedPayments.filter(
699
754
  (payment) => payment.debtorIban === acc.iban && payment.currency === acc.currency
700
755
  ).map((payment) => ({
@@ -712,7 +767,7 @@ let BankServiceBase = class extends develitWorker(WorkerEntrypoint) {
712
767
  accountId: acc.id
713
768
  });
714
769
  const availableBatch = openBatches.find(
715
- (batch) => batch.payments.length >= this.batchLimit(acc.connectorKey)
770
+ (batch) => batch.payments.length >= acc.batchSizeLimit
716
771
  );
717
772
  this.log({
718
773
  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`
@@ -748,7 +803,7 @@ let BankServiceBase = class extends develitWorker(WorkerEntrypoint) {
748
803
  status: "PROCESSING"
749
804
  }
750
805
  }).command.execute();
751
- await this.initiateBankConnector({ connectorKey });
806
+ await this._initiateBankConnector({ connectorKey });
752
807
  if (!this.bankConnector) {
753
808
  await upsertBatchCommand(this.db, {
754
809
  batch: {
@@ -877,7 +932,7 @@ let BankServiceBase = class extends develitWorker(WorkerEntrypoint) {
877
932
  { data: input, schema: getAuthUriInputSchema },
878
933
  { successMessage: "Auth URI obtained." },
879
934
  async ({ connectorKey }) => {
880
- await this.initiateBankConnector({ connectorKey, withAuth: false });
935
+ await this._initiateBankConnector({ connectorKey, withAuth: false });
881
936
  const ott = uuidv4();
882
937
  const { command: createOneTimeToken } = createOneTimeTokenCommand(
883
938
  this.db,
@@ -915,14 +970,14 @@ let BankServiceBase = class extends develitWorker(WorkerEntrypoint) {
915
970
  status: 400
916
971
  });
917
972
  }
918
- await this.initiateBankConnector({
973
+ await this._initiateBankConnector({
919
974
  connectorKey: ottRow.refId
920
975
  });
921
976
  const { credentials, accounts } = await this.bankConnector.authorizeAccount({
922
977
  urlParams
923
978
  });
924
979
  console.log("Bank connector initiated");
925
- const alreadyExistingAccounts = (await this.getAccounts()).filter(
980
+ const alreadyExistingAccounts = (await this._getAccounts()).filter(
926
981
  (acc) => acc.connectorKey === ottRow.refId && accounts.map((item) => item.iban).includes(acc.iban)
927
982
  );
928
983
  const upsertAccounts = accounts.map(
@@ -949,7 +1004,7 @@ let BankServiceBase = class extends develitWorker(WorkerEntrypoint) {
949
1004
  ...deleteCredentials,
950
1005
  ...createAccountCredentials
951
1006
  ]);
952
- const fetchedAccounts = await this.getAccounts();
1007
+ const fetchedAccounts = await this._getAccounts();
953
1008
  if (!fetchedAccounts)
954
1009
  throw createInternalError(null, {
955
1010
  message: "Account not found",
@@ -962,79 +1017,6 @@ let BankServiceBase = class extends develitWorker(WorkerEntrypoint) {
962
1017
  }
963
1018
  );
964
1019
  }
965
- async saveOrUpdatePayments(accounts) {
966
- return this.handleAction(null, {}, async () => {
967
- const allFetchedPayments = [];
968
- const connectorKeys = new Set(
969
- accounts.map(({ connectorKey }) => connectorKey)
970
- );
971
- for (const connectorKey of connectorKeys) {
972
- await this.initiateBankConnector({ connectorKey });
973
- for (const account of accounts.filter(
974
- (acc) => acc.connectorKey === connectorKey
975
- )) {
976
- const payments = await this.bankConnector.getAllAccountPayments({
977
- db: this.db,
978
- env: this.env.ENVIRONMENT,
979
- account
980
- });
981
- if (!payments || payments.length === 0) continue;
982
- this.log(payments);
983
- payments.forEach((payment) => {
984
- payment.direction = getPaymentDirection(payment, account.iban);
985
- });
986
- allFetchedPayments.push(...payments);
987
- }
988
- }
989
- if (allFetchedPayments.length < 1) return;
990
- const bankRefIds = allFetchedPayments.map((payment) => payment.bankRefId).filter(Boolean);
991
- const alreadyExistingPayments = await getPaymentsByBankRefIdsQuery(
992
- this.db,
993
- { ids: bankRefIds }
994
- );
995
- const paymentsCommands = allFetchedPayments.map((payment) => {
996
- const isAlreadyExisting = alreadyExistingPayments.some(
997
- (existingPayment) => existingPayment.bankRefId === payment.bankRefId
998
- );
999
- if (isAlreadyExisting)
1000
- return updatePaymentCommand(this.db, { payment }).command;
1001
- return createPaymentCommand(this.db, { payment }).command;
1002
- });
1003
- await this.db.batch([paymentsCommands[0], ...paymentsCommands.slice(1)]);
1004
- console.log("FETCHEDPAYMANETS TO SYNC", allFetchedPayments.length);
1005
- for (const account of accounts) {
1006
- const paymentsForAccount = allFetchedPayments.filter(
1007
- (payment) => (payment.direction === "OUTGOING" ? payment.debtorIban : payment.creditorIban) === account.iban
1008
- );
1009
- let lastSyncPayment;
1010
- lastSyncPayment = paymentsForAccount.filter(({ status }) => status !== "COMPLETED").sort(
1011
- (a, b) => (a.createdAt?.getTime() || 0) - (b.createdAt?.getTime() || 0)
1012
- )[0];
1013
- if (!lastSyncPayment) {
1014
- lastSyncPayment = paymentsForAccount.sort(
1015
- (a, b) => (b.createdAt?.getTime() || 0) - (a.createdAt?.getTime() || 0)
1016
- )[0];
1017
- }
1018
- if (lastSyncPayment.createdAt) {
1019
- await updateAccountLastSyncCommand(this.db, {
1020
- accountId: account.id,
1021
- lastSyncedAt: lastSyncPayment.createdAt
1022
- }).command.execute();
1023
- }
1024
- }
1025
- await this.pushToQueue(
1026
- this.env.QUEUE_BUS_QUEUE,
1027
- allFetchedPayments.map((payment) => ({
1028
- eventType: "BANK_PAYMENT",
1029
- bankPayment: payment,
1030
- metadata: {
1031
- correlationId: uuidv4(),
1032
- timestamp: (/* @__PURE__ */ new Date()).toDateString()
1033
- }
1034
- }))
1035
- );
1036
- });
1037
- }
1038
1020
  async simulateDeposit(input) {
1039
1021
  return this.handleAction(
1040
1022
  { data: input, schema: simulateDepositInputSchema },
@@ -1115,7 +1097,6 @@ let BankServiceBase = class extends develitWorker(WorkerEntrypoint) {
1115
1097
  accountId: account.id,
1116
1098
  lastSyncedAt
1117
1099
  }).command.execute();
1118
- return {};
1119
1100
  }
1120
1101
  );
1121
1102
  }
@@ -1132,9 +1113,33 @@ let BankServiceBase = class extends develitWorker(WorkerEntrypoint) {
1132
1113
  );
1133
1114
  }
1134
1115
  async getBankAccounts() {
1135
- return RPCResponse.ok("Bank accounts retrieved successfully", {
1136
- data: await this.getAccounts()
1137
- });
1116
+ return this.handleAction(
1117
+ null,
1118
+ { successMessage: "Bank accounts retrieved successfully" },
1119
+ async () => await this._getAccounts()
1120
+ );
1121
+ }
1122
+ async updateAccount(input) {
1123
+ return this.handleAction(
1124
+ {
1125
+ data: input,
1126
+ schema: updateAccountInputSchema
1127
+ },
1128
+ { successMessage: "Account updated successfully" },
1129
+ async ({ account }) => {
1130
+ const updatedAccount = await upsertAccountCommand(this.db, {
1131
+ account
1132
+ }).command.execute().then(first);
1133
+ if (!updatedAccount) {
1134
+ throw createInternalError(null, {
1135
+ message: "Account not found",
1136
+ code: "ACCOUNT_NOT_FOUND",
1137
+ status: 404
1138
+ });
1139
+ }
1140
+ return updatedAccount;
1141
+ }
1142
+ );
1138
1143
  }
1139
1144
  async getBatches(input) {
1140
1145
  return this.handleAction(
@@ -1176,9 +1181,6 @@ __decorateClass([
1176
1181
  __decorateClass([
1177
1182
  action("authorize-account")
1178
1183
  ], BankServiceBase.prototype, "authorizeAccount", 1);
1179
- __decorateClass([
1180
- action("save-or-update-payments")
1181
- ], BankServiceBase.prototype, "saveOrUpdatePayments", 1);
1182
1184
  __decorateClass([
1183
1185
  action("simulate-deposit")
1184
1186
  ], BankServiceBase.prototype, "simulateDeposit", 1);
@@ -1191,6 +1193,9 @@ __decorateClass([
1191
1193
  __decorateClass([
1192
1194
  action("get-bank-accounts")
1193
1195
  ], BankServiceBase.prototype, "getBankAccounts", 1);
1196
+ __decorateClass([
1197
+ action("update-account")
1198
+ ], BankServiceBase.prototype, "updateAccount", 1);
1194
1199
  __decorateClass([
1195
1200
  action("getBatches")
1196
1201
  ], BankServiceBase.prototype, "getBatches", 1);