@develit-services/bank 4.1.0 → 4.2.1

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 (32) hide show
  1. package/dist/database/schema.d.cts +1 -1
  2. package/dist/database/schema.d.mts +1 -1
  3. package/dist/database/schema.d.ts +1 -1
  4. package/dist/export/worker.cjs +217 -17
  5. package/dist/export/worker.d.cts +3 -2
  6. package/dist/export/worker.d.mts +3 -2
  7. package/dist/export/worker.d.ts +3 -2
  8. package/dist/export/worker.mjs +217 -17
  9. package/dist/export/workflows.cjs +102 -87
  10. package/dist/export/workflows.mjs +102 -87
  11. package/dist/export/wrangler.d.cts +2 -1
  12. package/dist/export/wrangler.d.mts +2 -1
  13. package/dist/export/wrangler.d.ts +2 -1
  14. package/dist/shared/{bank.C0JeMUxQ.d.cts → bank.BCqBwSKC.d.cts} +22 -3
  15. package/dist/shared/{bank.C0JeMUxQ.d.mts → bank.BCqBwSKC.d.mts} +22 -3
  16. package/dist/shared/{bank.C0JeMUxQ.d.ts → bank.BCqBwSKC.d.ts} +22 -3
  17. package/dist/shared/{bank.BScD3GXI.mjs → bank.BELDXSDV.mjs} +1 -1
  18. package/dist/shared/{bank.BxZARqNE.mjs → bank.BOMobxtA.mjs} +45 -18
  19. package/dist/shared/{bank.DflRiCrT.d.ts → bank.BmX_IG66.d.ts} +1 -1
  20. package/dist/shared/{bank.CjPpPiJF.d.mts → bank.BnCJmT6k.d.mts} +1 -1
  21. package/dist/shared/{bank.DNFep60v.cjs → bank.CioJeFzf.cjs} +1 -1
  22. package/dist/shared/{bank.xrNekjj9.cjs → bank.DiJmJkDt.cjs} +44 -16
  23. package/dist/shared/{bank.BydmpvCs.d.ts → bank.Dq24vYU7.d.cts} +1 -0
  24. package/dist/shared/{bank.BydmpvCs.d.cts → bank.Dq24vYU7.d.mts} +1 -0
  25. package/dist/shared/{bank.BydmpvCs.d.mts → bank.Dq24vYU7.d.ts} +1 -0
  26. package/dist/shared/{bank.CwB3cDIG.d.cts → bank.mHFTrKBv.d.cts} +1 -1
  27. package/dist/types.cjs +2 -1
  28. package/dist/types.d.cts +5 -5
  29. package/dist/types.d.mts +5 -5
  30. package/dist/types.d.ts +5 -5
  31. package/dist/types.mjs +1 -1
  32. package/package.json +1 -1
@@ -1,4 +1,4 @@
1
- export { aA as account, aB as accountCredentials, aC as batch, aD as ott, aE as payment, aF as paymentRequest } from '../shared/bank.C0JeMUxQ.cjs';
1
+ export { aB as account, aC as accountCredentials, aD as batch, aE as ott, aF as payment, aG as paymentRequest } from '../shared/bank.BCqBwSKC.cjs';
2
2
  import 'drizzle-orm';
3
3
  import 'drizzle-orm/sqlite-core';
4
4
  import '@develit-io/general-codes';
@@ -1,4 +1,4 @@
1
- export { aA as account, aB as accountCredentials, aC as batch, aD as ott, aE as payment, aF as paymentRequest } from '../shared/bank.C0JeMUxQ.mjs';
1
+ export { aB as account, aC as accountCredentials, aD as batch, aE as ott, aF as payment, aG as paymentRequest } from '../shared/bank.BCqBwSKC.mjs';
2
2
  import 'drizzle-orm';
3
3
  import 'drizzle-orm/sqlite-core';
4
4
  import '@develit-io/general-codes';
@@ -1,4 +1,4 @@
1
- export { aA as account, aB as accountCredentials, aC as batch, aD as ott, aE as payment, aF as paymentRequest } from '../shared/bank.C0JeMUxQ.js';
1
+ export { aB as account, aC as accountCredentials, aD as batch, aE as ott, aF as payment, aG as paymentRequest } from '../shared/bank.BCqBwSKC.js';
2
2
  import 'drizzle-orm';
3
3
  import 'drizzle-orm/sqlite-core';
4
4
  import '@develit-io/general-codes';
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  const backendSdk = require('@develit-io/backend-sdk');
4
- const ott_zod = require('../shared/bank.xrNekjj9.cjs');
4
+ const ott_zod = require('../shared/bank.DiJmJkDt.cjs');
5
5
  const drizzleOrm = require('drizzle-orm');
6
6
  const cloudflare_workers = require('cloudflare:workers');
7
7
  const d1 = require('drizzle-orm/d1');
@@ -11,10 +11,69 @@ const database_schema = require('../shared/bank.9Yw4KHyl.cjs');
11
11
  const generalCodes = require('@develit-io/general-codes');
12
12
  require('date-fns');
13
13
  require('node:crypto');
14
- const credentialsResolver = require('../shared/bank.DNFep60v.cjs');
14
+ const credentialsResolver = require('../shared/bank.CioJeFzf.cjs');
15
15
  require('drizzle-orm/zod');
16
16
  require('drizzle-orm/sqlite-core');
17
17
 
18
+ const SYNC_WORKFLOW_HEARTBEAT_CRON = "0 */8 * * *";
19
+ const DEAD_STATUSES = /* @__PURE__ */ new Set([
20
+ "complete",
21
+ "terminated",
22
+ "errored",
23
+ "unknown"
24
+ ]);
25
+ async function heartbeatSyncWorkflows({
26
+ entities,
27
+ resetAfterIterations,
28
+ getInstance,
29
+ createInstance,
30
+ logger
31
+ }) {
32
+ await Promise.all(
33
+ entities.map(async ({ id, iterationCount }) => {
34
+ try {
35
+ const instance = await getInstance(id);
36
+ const { status } = await instance.status();
37
+ if (DEAD_STATUSES.has(status)) {
38
+ await instance.restart();
39
+ logger.info("sync-workflow.heartbeat.zombie-recovery", {
40
+ id,
41
+ previousStatus: status
42
+ });
43
+ return;
44
+ }
45
+ if (iterationCount == null) {
46
+ logger.warn("sync-workflow.heartbeat.iteration-count-missing", {
47
+ id,
48
+ status
49
+ });
50
+ return;
51
+ }
52
+ if (iterationCount >= resetAfterIterations) {
53
+ await instance.restart();
54
+ logger.info("sync-workflow.heartbeat.scheduled-reset", {
55
+ id,
56
+ iterationCount
57
+ });
58
+ }
59
+ } catch (err) {
60
+ try {
61
+ await createInstance(id);
62
+ logger.info("sync-workflow.heartbeat.created-missing-instance", {
63
+ id
64
+ });
65
+ } catch (createErr) {
66
+ logger.error("sync-workflow.heartbeat.failed", {
67
+ id,
68
+ error: err instanceof Error ? err.message : String(err),
69
+ createError: createErr instanceof Error ? createErr.message : String(createErr)
70
+ });
71
+ }
72
+ }
73
+ })
74
+ );
75
+ }
76
+
18
77
  const sendPaymentInputSchema = zod.z.object({
19
78
  correlationId: zod.z.string().min(1),
20
79
  refId: zod.z.string().optional(),
@@ -757,6 +816,7 @@ let BankServiceBase = class extends backendSdk.develitWorker(cloudflare_workers.
757
816
  const byConnector = Map.groupBy(allPRs, (pr) => pr.connectorKey);
758
817
  let processed = 0;
759
818
  let statusChanged = 0;
819
+ let skippedNoBankRefId = 0;
760
820
  const eventsToEmit = [];
761
821
  for (const [connectorKey, requests] of byConnector) {
762
822
  let connector;
@@ -769,10 +829,30 @@ let BankServiceBase = class extends backendSdk.develitWorker(cloudflare_workers.
769
829
  continue;
770
830
  }
771
831
  for (const pr of requests) {
832
+ if (!pr.bankRefId && pr.connectorKey === "DBU") {
833
+ skippedNoBankRefId++;
834
+ console.warn(
835
+ "[_resolvePaymentRequestStatuses] Skipping DBU PR without bankRefId",
836
+ {
837
+ prId: pr.id,
838
+ status: pr.status,
839
+ connectorKey: pr.connectorKey,
840
+ createdAt: pr.createdAt
841
+ }
842
+ );
843
+ continue;
844
+ }
772
845
  try {
773
846
  const paymentId = pr.bankRefId ?? pr.id;
774
847
  const newStatus = await connector.getPaymentStatus({ paymentId });
775
848
  if (newStatus !== pr.status) {
849
+ console.log("[_resolvePaymentRequestStatuses] Status changed", {
850
+ prId: pr.id,
851
+ connectorKey: pr.connectorKey,
852
+ bankRefId: pr.bankRefId,
853
+ oldStatus: pr.status,
854
+ newStatus
855
+ });
776
856
  await credentialsResolver.updatePaymentRequestStatusCommand(this.db, {
777
857
  id: pr.id,
778
858
  status: newStatus,
@@ -785,17 +865,34 @@ let BankServiceBase = class extends backendSdk.develitWorker(cloudflare_workers.
785
865
  }
786
866
  processed++;
787
867
  } catch (err) {
788
- this.logError({
789
- message: `Failed to resolve status for PR ${pr.id}: ${err}`
790
- });
868
+ console.error(
869
+ "[_resolvePaymentRequestStatuses] Failed to get payment status",
870
+ {
871
+ prId: pr.id,
872
+ connectorKey: pr.connectorKey,
873
+ status: pr.status,
874
+ bankRefId: pr.bankRefId,
875
+ error: err instanceof Error ? err.message : String(err)
876
+ }
877
+ );
791
878
  }
792
879
  }
793
880
  }
794
881
  if (eventsToEmit.length > 0) {
795
- await this.pushToQueue(
796
- this.env.QUEUE_BUS_QUEUE,
797
- eventsToEmit
798
- );
882
+ try {
883
+ await this.pushToQueue(
884
+ this.env.QUEUE_BUS_QUEUE,
885
+ eventsToEmit
886
+ );
887
+ } catch (err) {
888
+ console.error(
889
+ "[_resolvePaymentRequestStatuses] Failed to push events to queue",
890
+ {
891
+ eventCount: eventsToEmit.length,
892
+ error: err instanceof Error ? err.message : String(err)
893
+ }
894
+ );
895
+ }
799
896
  }
800
897
  const affectedBatchIds = [
801
898
  ...new Set(
@@ -803,7 +900,32 @@ let BankServiceBase = class extends backendSdk.develitWorker(cloudflare_workers.
803
900
  )
804
901
  ];
805
902
  for (const batchId of affectedBatchIds) {
806
- await this._deriveBatchStatus(batchId);
903
+ try {
904
+ await this._deriveBatchStatus(batchId);
905
+ } catch (err) {
906
+ console.error(
907
+ "[_resolvePaymentRequestStatuses] Failed to derive batch status",
908
+ {
909
+ batchId,
910
+ error: err instanceof Error ? err.message : String(err)
911
+ }
912
+ );
913
+ }
914
+ }
915
+ console.log("[_resolvePaymentRequestStatuses] Summary", {
916
+ total: allPRs.length,
917
+ processed,
918
+ statusChanged,
919
+ skippedNoBankRefId
920
+ });
921
+ if (skippedNoBankRefId > 5) {
922
+ console.warn(
923
+ "[_resolvePaymentRequestStatuses] HIGH NUMBER of PRs without bankRefId",
924
+ {
925
+ count: skippedNoBankRefId,
926
+ note: "These PRs may be orphaned - payment sent but bankRefId not saved"
927
+ }
928
+ );
807
929
  }
808
930
  return { processed, statusChanged };
809
931
  }
@@ -818,8 +940,9 @@ let BankServiceBase = class extends backendSdk.develitWorker(cloudflare_workers.
818
940
  if (!batch || batch.status === "COMPLETED" || batch.status === "FAILED")
819
941
  return;
820
942
  if (allPRs.length === 0) return;
943
+ const connectorKey = allPRs[0]?.connectorKey;
821
944
  const allTerminal = allPRs.every(
822
- (pr) => ott_zod.isTerminalStatus(pr.status)
945
+ (pr) => ott_zod.isTerminalStatus(pr.status, connectorKey)
823
946
  );
824
947
  const allAuthorizedOrHigher = allPRs.every((pr) => pr.status !== "OPENED");
825
948
  if (allTerminal) {
@@ -840,16 +963,49 @@ let BankServiceBase = class extends backendSdk.develitWorker(cloudflare_workers.
840
963
  null,
841
964
  { successMessage: "Payment request statuses updated" },
842
965
  async () => {
966
+ const startTime = Date.now();
967
+ console.log("[updatePaymentRequestStatuses] Starting", {
968
+ timestamp: (/* @__PURE__ */ new Date()).toISOString()
969
+ });
843
970
  const nonTerminalPRs = await ott_zod.getNonTerminalPaymentRequestsQuery(this.db);
844
971
  if (nonTerminalPRs.length === 0) {
972
+ console.log(
973
+ "[updatePaymentRequestStatuses] No non-terminal PRs found",
974
+ {
975
+ duration: `${Date.now() - startTime}ms`
976
+ }
977
+ );
845
978
  return { processed: 0, statusChanged: 0 };
846
979
  }
980
+ const byConnector = nonTerminalPRs.reduce(
981
+ (acc, pr) => {
982
+ const key = pr.connectorKey || "unknown";
983
+ acc[key] = (acc[key] || 0) + 1;
984
+ return acc;
985
+ },
986
+ {}
987
+ );
988
+ console.log("[updatePaymentRequestStatuses] By connector", byConnector);
847
989
  const now = Date.now();
848
990
  const pollableIds = [];
849
991
  for (const pr of nonTerminalPRs) {
850
992
  const status = pr.status;
993
+ if (ott_zod.isTerminalStatus(status, pr.connectorKey)) {
994
+ continue;
995
+ }
851
996
  if (status === "OPENED" || status === "AUTHORIZED") {
852
997
  if (pr.createdAt != null && now - pr.createdAt.getTime() > this.POLLING_TIMEOUT_MS) {
998
+ console.warn(
999
+ "[updatePaymentRequestStatuses] Closing PR due to timeout",
1000
+ {
1001
+ prId: pr.id,
1002
+ status: pr.status,
1003
+ connectorKey: pr.connectorKey,
1004
+ createdAt: pr.createdAt,
1005
+ bankRefId: pr.bankRefId,
1006
+ age: `${Math.floor((now - pr.createdAt.getTime()) / (24 * 60 * 60 * 1e3))} days`
1007
+ }
1008
+ );
853
1009
  await credentialsResolver.updatePaymentRequestStatusCommand(this.db, {
854
1010
  id: pr.id,
855
1011
  status: "CLOSED",
@@ -859,14 +1015,20 @@ let BankServiceBase = class extends backendSdk.develitWorker(cloudflare_workers.
859
1015
  continue;
860
1016
  }
861
1017
  pollableIds.push(pr.id);
862
- } else if (status === "COMPLETED" || status === "BOOKED") {
863
- if (pr.processedAt != null && now - pr.processedAt.getTime() > this.COMPLETED_POLLING_WINDOW_MS) {
864
- continue;
865
- }
866
- pollableIds.push(pr.id);
867
1018
  }
868
1019
  }
869
- return this._resolvePaymentRequestStatuses(pollableIds);
1020
+ const result = await this._resolvePaymentRequestStatuses(pollableIds);
1021
+ const duration = Date.now() - startTime;
1022
+ console.log("[updatePaymentRequestStatuses] Completed", {
1023
+ duration: `${duration}ms`,
1024
+ metrics: {
1025
+ total: nonTerminalPRs.length,
1026
+ polled: pollableIds.length,
1027
+ processed: result.processed,
1028
+ statusChanged: result.statusChanged
1029
+ }
1030
+ });
1031
+ return result;
870
1032
  }
871
1033
  );
872
1034
  }
@@ -874,8 +1036,46 @@ let BankServiceBase = class extends backendSdk.develitWorker(cloudflare_workers.
874
1036
  if (controller.cron === this.env.CRON_PAYMENT_STATUSES) {
875
1037
  console.log("Scheduled CRON payment request statuses");
876
1038
  await this.updatePaymentRequestStatuses();
1039
+ return;
1040
+ }
1041
+ if (controller.cron === SYNC_WORKFLOW_HEARTBEAT_CRON) {
1042
+ console.log("Scheduled CRON sync workflow heartbeat");
1043
+ await this.heartbeatSyncWorkflows();
877
1044
  }
878
1045
  }
1046
+ async heartbeatSyncWorkflows() {
1047
+ const accounts = await this.db.select({
1048
+ id: ott_zod.tables.account.id,
1049
+ lastSyncMetadata: ott_zod.tables.account.lastSyncMetadata
1050
+ }).from(ott_zod.tables.account).where(drizzleOrm.eq(ott_zod.tables.account.status, "AUTHORIZED")).all();
1051
+ const resetAfterIterations = Number(
1052
+ this.env.SYNC_WORKFLOW_RESET_AFTER_ITERATIONS
1053
+ );
1054
+ if (!Number.isFinite(resetAfterIterations) || resetAfterIterations <= 0) {
1055
+ console.error(
1056
+ "Invalid SYNC_WORKFLOW_RESET_AFTER_ITERATIONS, skipping heartbeat",
1057
+ { value: this.env.SYNC_WORKFLOW_RESET_AFTER_ITERATIONS }
1058
+ );
1059
+ return;
1060
+ }
1061
+ await heartbeatSyncWorkflows({
1062
+ entities: accounts.map((a) => ({
1063
+ id: a.id,
1064
+ iterationCount: a.lastSyncMetadata?.iterationCount
1065
+ })),
1066
+ resetAfterIterations,
1067
+ getInstance: (id) => this.env.SYNC_ACCOUNT_PAYMENTS_WORKFLOW.get(id),
1068
+ createInstance: (id) => this.env.SYNC_ACCOUNT_PAYMENTS_WORKFLOW.create({
1069
+ id,
1070
+ params: { accountId: id }
1071
+ }),
1072
+ logger: {
1073
+ info: (event, data) => console.log(JSON.stringify({ level: "info", event, ...data })),
1074
+ warn: (event, data) => console.warn(JSON.stringify({ level: "warn", event, ...data })),
1075
+ error: (event, data) => console.error(JSON.stringify({ level: "error", event, ...data }))
1076
+ }
1077
+ });
1078
+ }
879
1079
  async handleAuthorizationCallback(input) {
880
1080
  return this.handleAction(
881
1081
  { data: input, schema: handleAuthorizationCallbackInputSchema },
@@ -1,6 +1,6 @@
1
1
  import * as drizzle_orm from 'drizzle-orm';
2
- import { B as BatchSelectType, P as PaymentRequestSelectType, A as AccountSelectType, a as PaymentSelectType, L as LastSyncMetadata, C as ConnectorConfig, b as ConfigEnvironmentBank, t as tables, c as ConnectorKey, I as IBankConnector, d as PaymentType, e as CurrencyCode, H as HandleAuthorizationCallbackInput, f as HandleAuthorizationCallbackOutput } from '../shared/bank.C0JeMUxQ.cjs';
3
- import { S as SendPaymentInput, a as SendPaymentOutput, b as SendPaymentSyncInput, c as SendPaymentSyncOutput, F as FinbricksSupportedBanksResponse } from '../shared/bank.CwB3cDIG.cjs';
2
+ import { B as BatchSelectType, P as PaymentRequestSelectType, A as AccountSelectType, a as PaymentSelectType, L as LastSyncMetadata, C as ConnectorConfig, b as ConfigEnvironmentBank, t as tables, c as ConnectorKey, I as IBankConnector, d as PaymentType, e as CurrencyCode, H as HandleAuthorizationCallbackInput, f as HandleAuthorizationCallbackOutput } from '../shared/bank.BCqBwSKC.cjs';
3
+ import { S as SendPaymentInput, a as SendPaymentOutput, b as SendPaymentSyncInput, c as SendPaymentSyncOutput, F as FinbricksSupportedBanksResponse } from '../shared/bank.mHFTrKBv.cjs';
4
4
  import * as _develit_io_backend_sdk from '@develit-io/backend-sdk';
5
5
  import { WorkflowInstanceStatus, IRPCResponse } from '@develit-io/backend-sdk';
6
6
  import { WorkerEntrypoint } from 'cloudflare:workers';
@@ -3886,6 +3886,7 @@ declare class BankServiceBase extends BankServiceBase_base {
3886
3886
  statusChanged: number;
3887
3887
  }>>;
3888
3888
  scheduled(controller: ScheduledController): Promise<void>;
3889
+ private heartbeatSyncWorkflows;
3889
3890
  handleAuthorizationCallback(input: HandleAuthorizationCallbackInput): Promise<IRPCResponse<HandleAuthorizationCallbackOutput>>;
3890
3891
  processBatch(input: ProcessBatchInput): Promise<IRPCResponse<ProcessBatchOutput>>;
3891
3892
  processBatchStatus(input: ProcessBatchStatusInput): Promise<IRPCResponse<ProcessBatchStatusOutput>>;
@@ -1,6 +1,6 @@
1
1
  import * as drizzle_orm from 'drizzle-orm';
2
- import { B as BatchSelectType, P as PaymentRequestSelectType, A as AccountSelectType, a as PaymentSelectType, L as LastSyncMetadata, C as ConnectorConfig, b as ConfigEnvironmentBank, t as tables, c as ConnectorKey, I as IBankConnector, d as PaymentType, e as CurrencyCode, H as HandleAuthorizationCallbackInput, f as HandleAuthorizationCallbackOutput } from '../shared/bank.C0JeMUxQ.mjs';
3
- import { S as SendPaymentInput, a as SendPaymentOutput, b as SendPaymentSyncInput, c as SendPaymentSyncOutput, F as FinbricksSupportedBanksResponse } from '../shared/bank.CjPpPiJF.mjs';
2
+ import { B as BatchSelectType, P as PaymentRequestSelectType, A as AccountSelectType, a as PaymentSelectType, L as LastSyncMetadata, C as ConnectorConfig, b as ConfigEnvironmentBank, t as tables, c as ConnectorKey, I as IBankConnector, d as PaymentType, e as CurrencyCode, H as HandleAuthorizationCallbackInput, f as HandleAuthorizationCallbackOutput } from '../shared/bank.BCqBwSKC.mjs';
3
+ import { S as SendPaymentInput, a as SendPaymentOutput, b as SendPaymentSyncInput, c as SendPaymentSyncOutput, F as FinbricksSupportedBanksResponse } from '../shared/bank.BnCJmT6k.mjs';
4
4
  import * as _develit_io_backend_sdk from '@develit-io/backend-sdk';
5
5
  import { WorkflowInstanceStatus, IRPCResponse } from '@develit-io/backend-sdk';
6
6
  import { WorkerEntrypoint } from 'cloudflare:workers';
@@ -3886,6 +3886,7 @@ declare class BankServiceBase extends BankServiceBase_base {
3886
3886
  statusChanged: number;
3887
3887
  }>>;
3888
3888
  scheduled(controller: ScheduledController): Promise<void>;
3889
+ private heartbeatSyncWorkflows;
3889
3890
  handleAuthorizationCallback(input: HandleAuthorizationCallbackInput): Promise<IRPCResponse<HandleAuthorizationCallbackOutput>>;
3890
3891
  processBatch(input: ProcessBatchInput): Promise<IRPCResponse<ProcessBatchOutput>>;
3891
3892
  processBatchStatus(input: ProcessBatchStatusInput): Promise<IRPCResponse<ProcessBatchStatusOutput>>;
@@ -1,6 +1,6 @@
1
1
  import * as drizzle_orm from 'drizzle-orm';
2
- import { B as BatchSelectType, P as PaymentRequestSelectType, A as AccountSelectType, a as PaymentSelectType, L as LastSyncMetadata, C as ConnectorConfig, b as ConfigEnvironmentBank, t as tables, c as ConnectorKey, I as IBankConnector, d as PaymentType, e as CurrencyCode, H as HandleAuthorizationCallbackInput, f as HandleAuthorizationCallbackOutput } from '../shared/bank.C0JeMUxQ.js';
3
- import { S as SendPaymentInput, a as SendPaymentOutput, b as SendPaymentSyncInput, c as SendPaymentSyncOutput, F as FinbricksSupportedBanksResponse } from '../shared/bank.DflRiCrT.js';
2
+ import { B as BatchSelectType, P as PaymentRequestSelectType, A as AccountSelectType, a as PaymentSelectType, L as LastSyncMetadata, C as ConnectorConfig, b as ConfigEnvironmentBank, t as tables, c as ConnectorKey, I as IBankConnector, d as PaymentType, e as CurrencyCode, H as HandleAuthorizationCallbackInput, f as HandleAuthorizationCallbackOutput } from '../shared/bank.BCqBwSKC.js';
3
+ import { S as SendPaymentInput, a as SendPaymentOutput, b as SendPaymentSyncInput, c as SendPaymentSyncOutput, F as FinbricksSupportedBanksResponse } from '../shared/bank.BmX_IG66.js';
4
4
  import * as _develit_io_backend_sdk from '@develit-io/backend-sdk';
5
5
  import { WorkflowInstanceStatus, IRPCResponse } from '@develit-io/backend-sdk';
6
6
  import { WorkerEntrypoint } from 'cloudflare:workers';
@@ -3886,6 +3886,7 @@ declare class BankServiceBase extends BankServiceBase_base {
3886
3886
  statusChanged: number;
3887
3887
  }>>;
3888
3888
  scheduled(controller: ScheduledController): Promise<void>;
3889
+ private heartbeatSyncWorkflows;
3889
3890
  handleAuthorizationCallback(input: HandleAuthorizationCallbackInput): Promise<IRPCResponse<HandleAuthorizationCallbackOutput>>;
3890
3891
  processBatch(input: ProcessBatchInput): Promise<IRPCResponse<ProcessBatchOutput>>;
3891
3892
  processBatchStatus(input: ProcessBatchStatusInput): Promise<IRPCResponse<ProcessBatchStatusOutput>>;