@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.
@@ -1,15 +1,15 @@
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.BWcFhTu1.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.6WoCPIFy.mjs';
10
10
  import 'drizzle-orm/sqlite-core';
11
- import 'drizzle-zod';
12
11
  import 'date-fns';
12
+ import 'drizzle-zod';
13
13
  import 'drizzle-orm/relations';
14
14
 
15
15
  const upsertAccountCommand = (db, { account }) => {
@@ -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({
@@ -377,10 +378,8 @@ const simulateDepositInputSchema = z.object({
377
378
  bankingSs: z.string().max(10).optional(),
378
379
  bankingKs: z.string().max(10).optional(),
379
380
  message: z.string(),
380
- creditorIban: z.string().max(34),
381
- creditorHolderName: z.string(),
382
- debtorIban: z.string().max(34),
383
- debtorHolderName: z.string(),
381
+ creditor: bankAccountMetadataSchema,
382
+ debtor: bankAccountMetadataSchema,
384
383
  connectorKey: z.enum(CONNECTOR_KEYS)
385
384
  });
386
385
 
@@ -389,11 +388,6 @@ const setLastSyncAtInputSchema = z.object({
389
388
  lastSyncedAt: z.coerce.date()
390
389
  });
391
390
 
392
- const initiateConnectorInputSchema = z.object({
393
- connectorKey: z.enum(CONNECTOR_KEYS),
394
- withAuth: z.boolean().default(true).optional()
395
- });
396
-
397
391
  const ALLOWED_BATCH_FILTERS = {
398
392
  ACCOUNT_ID: "filterBatchAccountId",
399
393
  STATUS: "filterBatchStatus"
@@ -443,6 +437,10 @@ const syncAccountInputSchema = z.object({
443
437
  accountId: z.uuid()
444
438
  });
445
439
 
440
+ const updateAccountInputSchema = z.object({
441
+ account: accountInsertSchema
442
+ });
443
+
446
444
  var __defProp = Object.defineProperty;
447
445
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
448
446
  var __decorateClass = (decorators, target, key, kind) => {
@@ -460,22 +458,124 @@ let BankServiceBase = class extends develitWorker(WorkerEntrypoint) {
460
458
  this.allowedProviders = config.allowedProviders;
461
459
  this.db = drizzle(this.env.BANK_D1, { schema: tables });
462
460
  }
463
- getAllowedProviders() {
464
- return this.allowedProviders;
465
- }
466
- async getAccounts() {
461
+ async _getAccounts() {
467
462
  return await getAllAccountsQuery(this.db);
468
463
  }
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);
464
+ async _saveOrUpdatePayments(accounts) {
465
+ const allFetchedPayments = [];
466
+ const connectorKeys = new Set(
467
+ accounts.map(({ connectorKey }) => connectorKey)
468
+ );
469
+ for (const connectorKey of connectorKeys) {
470
+ await this._initiateBankConnector({ connectorKey });
471
+ for (const account of accounts.filter(
472
+ (acc) => acc.connectorKey === connectorKey
473
+ )) {
474
+ const payments = await this.bankConnector.getAllAccountPayments({
475
+ db: this.db,
476
+ env: this.env.ENVIRONMENT,
477
+ account
478
+ });
479
+ if (!payments || payments.length === 0) continue;
480
+ this.log(payments);
481
+ payments.forEach((payment) => {
482
+ payment.direction = getPaymentDirection(payment, account.iban);
483
+ });
484
+ allFetchedPayments.push(...payments);
485
+ }
486
+ }
487
+ if (allFetchedPayments.length < 1) return;
488
+ const bankRefIds = allFetchedPayments.map((payment) => payment.bankRefId).filter(Boolean);
489
+ const alreadyExistingPayments = await getPaymentsByBankRefIdsQuery(
490
+ this.db,
491
+ {
492
+ ids: bankRefIds
475
493
  }
476
494
  );
495
+ const paymentsCommands = allFetchedPayments.map((payment) => {
496
+ const isAlreadyExisting = alreadyExistingPayments.some(
497
+ (existingPayment) => existingPayment.bankRefId === payment.bankRefId
498
+ );
499
+ if (isAlreadyExisting)
500
+ return updatePaymentCommand(this.db, { payment }).command;
501
+ return createPaymentCommand(this.db, { payment }).command;
502
+ });
503
+ await this.db.batch([paymentsCommands[0], ...paymentsCommands.slice(1)]);
504
+ console.log("FETCHEDPAYMANETS TO SYNC", allFetchedPayments.length);
505
+ for (const account of accounts) {
506
+ const paymentsForAccount = allFetchedPayments.filter(
507
+ (payment) => (payment.direction === "OUTGOING" ? payment.debtorIban : payment.creditorIban) === account.iban
508
+ );
509
+ let lastSyncPayment;
510
+ lastSyncPayment = paymentsForAccount.filter(({ status }) => status !== "COMPLETED").sort(
511
+ (a, b) => (a.createdAt?.getTime() || 0) - (b.createdAt?.getTime() || 0)
512
+ )[0];
513
+ if (!lastSyncPayment) {
514
+ lastSyncPayment = paymentsForAccount.sort(
515
+ (a, b) => (b.createdAt?.getTime() || 0) - (a.createdAt?.getTime() || 0)
516
+ )[0];
517
+ }
518
+ if (lastSyncPayment.createdAt) {
519
+ await updateAccountLastSyncCommand(this.db, {
520
+ accountId: account.id,
521
+ lastSyncedAt: lastSyncPayment.createdAt
522
+ }).command.execute();
523
+ }
524
+ }
525
+ await this.pushToQueue(
526
+ this.env.QUEUE_BUS_QUEUE,
527
+ allFetchedPayments.map((payment) => ({
528
+ eventType: "BANK_PAYMENT",
529
+ eventSignal: "created",
530
+ bankPayment: payment,
531
+ metadata: {
532
+ correlationId: uuidv4(),
533
+ timestamp: (/* @__PURE__ */ new Date()).toDateString()
534
+ }
535
+ }))
536
+ );
537
+ }
538
+ async _initiateBankConnector({
539
+ connectorKey,
540
+ withAuth
541
+ }) {
542
+ if (!this.allowedProviders.includes(connectorKey)) {
543
+ throw createInternalError(null, {
544
+ message: `Invalid connector key: ${connectorKey}`
545
+ });
546
+ }
547
+ const accounts = await this._getAccounts();
548
+ const accountsForConnector = accounts.filter(
549
+ (acc) => acc.connectorKey === connectorKey
550
+ );
551
+ const accountsWithCredentials = await Promise.all(
552
+ accountsForConnector.map(async (acc) => {
553
+ const credentials = await getCredentialsByAccountId(this.db, {
554
+ accountId: acc.id
555
+ });
556
+ if (!credentials) {
557
+ throw createInternalError(null, {
558
+ message: `No credentials found for account ${acc.id}`
559
+ });
560
+ }
561
+ return {
562
+ currency: acc.currency,
563
+ iban: acc.iban,
564
+ token: credentials.value,
565
+ id: acc.id,
566
+ connectorKey: acc.connectorKey
567
+ };
568
+ })
569
+ );
570
+ this.bankConnector = initiateConnector({
571
+ bank: connectorKey,
572
+ connectedAccounts: accountsWithCredentials,
573
+ env: this.env
574
+ });
575
+ if (!withAuth) return;
576
+ await this.bankConnector.authenticate();
477
577
  }
478
- accountFetchInterval(connectorKey) {
578
+ _accountFetchInterval(connectorKey) {
479
579
  switch (connectorKey) {
480
580
  case "ERSTE":
481
581
  return ErsteConnector.FETCH_INTERVAL;
@@ -487,10 +587,19 @@ let BankServiceBase = class extends develitWorker(WorkerEntrypoint) {
487
587
  return 0;
488
588
  }
489
589
  }
590
+ async getPayments(input) {
591
+ return this.handleAction(
592
+ { data: input, schema: getPaymentsInputSchema },
593
+ { successMessage: "Payments fetched successfully" },
594
+ async (pagination) => {
595
+ return await getPaymentsWithPaginationQuery(this.db, pagination);
596
+ }
597
+ );
598
+ }
490
599
  async syncAccount(input) {
491
600
  return this.handleAction(
492
601
  { data: input, schema: syncAccountInputSchema },
493
- { successMessage: "" },
602
+ { successMessage: "Account synchronized successfully" },
494
603
  async ({ accountId }) => {
495
604
  const account = await getAccountByIdQuery(this.db, {
496
605
  accountId
@@ -501,38 +610,40 @@ let BankServiceBase = class extends develitWorker(WorkerEntrypoint) {
501
610
  message: "Account not found",
502
611
  status: 404
503
612
  });
504
- await this.syncAccounts({
505
- accounts: [account]
506
- });
613
+ await this._saveOrUpdatePayments([account]);
507
614
  }
508
615
  );
509
616
  }
510
617
  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
- });
618
+ return this.handleAction(
619
+ null,
620
+ { successMessage: "Accounts synchronized successfully" },
621
+ async () => {
622
+ const accountsToSync = [];
623
+ let accounts = options?.accounts || [];
624
+ if (!accounts.length) {
625
+ accounts = await this._getAccounts();
626
+ }
627
+ for (const account of accounts.filter(
628
+ (acc) => !!!acc.connectorKey.includes("MOCK")
629
+ )) {
630
+ const accountFetchInterval = this._accountFetchInterval(
631
+ account.connectorKey
632
+ );
633
+ const now = Date.now();
634
+ const lastSyncTime = account.lastSyncedAt.getTime();
635
+ const intervalMs = accountFetchInterval * 1e3;
636
+ const shouldFetch = now - lastSyncTime >= intervalMs;
637
+ if (!shouldFetch) continue;
638
+ accountsToSync.push({
639
+ ...account
640
+ });
641
+ }
642
+ console.log("ACCS TO SYNC", accountsToSync.length);
643
+ if (accountsToSync.length <= 0) return;
644
+ await this._saveOrUpdatePayments(accounts);
531
645
  }
532
- console.log("ACCS TO SYNC", accountsToSync.length);
533
- if (accountsToSync.length <= 0) return;
534
- await this.saveOrUpdatePayments(accountsToSync);
535
- });
646
+ );
536
647
  }
537
648
  async scheduled(controller) {
538
649
  if (controller.cron === this.env.CRON_PAYMENTS_PROCESSING) {
@@ -547,7 +658,7 @@ let BankServiceBase = class extends develitWorker(WorkerEntrypoint) {
547
658
  async updateBatchStatuses() {
548
659
  const pendingBatches = await getAllPendingBatchesQuery(this.db);
549
660
  const uniqueConnectors = /* @__PURE__ */ new Set();
550
- const accounts = await this.getAccounts();
661
+ const accounts = await this._getAccounts();
551
662
  for (const batch of pendingBatches) {
552
663
  const connectorKey = accounts.find(
553
664
  (acc) => acc.id === batch.accountId
@@ -588,53 +699,6 @@ let BankServiceBase = class extends develitWorker(WorkerEntrypoint) {
588
699
  ]);
589
700
  console.log("Batch update completed");
590
701
  }
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
702
  async addPaymentsToBatch({
639
703
  paymentsToBatch
640
704
  }) {
@@ -644,9 +708,8 @@ let BankServiceBase = class extends develitWorker(WorkerEntrypoint) {
644
708
  (payment) => {
645
709
  return {
646
710
  id: uuidv4(),
647
- accountId: "",
711
+ correlationId: payment.correlationId,
648
712
  refId: payment.refId,
649
- connectorKey: "MOCK",
650
713
  amount: payment.amount,
651
714
  direction: "OUTGOING",
652
715
  paymentType: payment.paymentType,
@@ -658,16 +721,14 @@ let BankServiceBase = class extends develitWorker(WorkerEntrypoint) {
658
721
  ss: payment.ss || null,
659
722
  ks: payment.ks || null,
660
723
  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
724
+ creditor: payment.creditor,
725
+ creditorIban: payment.creditor.iban || null,
726
+ debtor: payment.debtor,
727
+ debtorIban: payment.debtor.iban || null
667
728
  };
668
729
  }
669
730
  );
670
- const accounts = await this.getAccounts();
731
+ const accounts = await this._getAccounts();
671
732
  const { supportedPayments, unsupportedPayments } = seperateSupportedPayments(mappedPayments, accounts);
672
733
  if (unsupportedPayments.length > 0) {
673
734
  this.logError({ unsupportedPayments });
@@ -678,23 +739,17 @@ let BankServiceBase = class extends develitWorker(WorkerEntrypoint) {
678
739
  bankPayment: {
679
740
  ...unsupported,
680
741
  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
742
+ statusReason: "UNSUPPORTED_ACCOUNT"
689
743
  },
744
+ eventSignal: "failed",
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 },
@@ -1046,14 +1028,12 @@ let BankServiceBase = class extends develitWorker(WorkerEntrypoint) {
1046
1028
  bankingSs,
1047
1029
  bankingKs,
1048
1030
  message,
1049
- creditorIban,
1050
- creditorHolderName,
1051
- debtorIban,
1052
- debtorHolderName,
1031
+ creditor,
1032
+ debtor,
1053
1033
  connectorKey
1054
1034
  }) => {
1055
1035
  const account = await getAccountByIbanQuery(this.db, {
1056
- iban: creditorIban
1036
+ iban: debtor.iban
1057
1037
  });
1058
1038
  if (!account)
1059
1039
  throw createInternalError(null, {
@@ -1063,6 +1043,7 @@ let BankServiceBase = class extends develitWorker(WorkerEntrypoint) {
1063
1043
  });
1064
1044
  const payment = {
1065
1045
  id: uuidv4(),
1046
+ correlationId: uuidv4(),
1066
1047
  amount,
1067
1048
  connectorKey,
1068
1049
  accountId: account.id,
@@ -1077,19 +1058,20 @@ let BankServiceBase = class extends develitWorker(WorkerEntrypoint) {
1077
1058
  ss: bankingSs,
1078
1059
  ks: bankingKs,
1079
1060
  message,
1080
- creditorIban,
1081
- creditorHolderName,
1082
- debtorIban,
1083
- debtorHolderName
1061
+ creditor,
1062
+ creditorIban: creditor.iban,
1063
+ debtor,
1064
+ debtorIban: debtor.iban
1084
1065
  };
1085
1066
  const { command } = createPaymentCommand(this.db, { payment });
1086
1067
  const createdPayment = await command.execute().then(first);
1087
1068
  this.logQueuePush({ payment, isPaymentExecuted: true });
1088
1069
  await this.pushToQueue(this.env.QUEUE_BUS_QUEUE, {
1089
1070
  eventType: "BANK_PAYMENT",
1071
+ eventSignal: "completed",
1090
1072
  bankPayment: createdPayment,
1091
1073
  metadata: {
1092
- correlationId: createdPayment.id,
1074
+ correlationId: createdPayment.correlationId,
1093
1075
  timestamp: (/* @__PURE__ */ new Date()).toDateString()
1094
1076
  }
1095
1077
  });
@@ -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);
@@ -1,4 +1,4 @@
1
- import { F as FinbricksConnector } from './bank.HuMp6uP6.mjs';
1
+ import { F as FinbricksConnector } from './bank.BWcFhTu1.mjs';
2
2
 
3
3
  class MockCobsConnector extends FinbricksConnector {
4
4
  constructor(config) {