@xyo-network/chain-bridge 1.19.6 → 1.19.8

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 (117) hide show
  1. package/dist/node/config/getGateway.d.ts.map +1 -1
  2. package/dist/node/index.mjs +353 -351
  3. package/dist/node/index.mjs.map +1 -1
  4. package/dist/node/manifest/getIterableMap.d.ts +10 -0
  5. package/dist/node/manifest/getIterableMap.d.ts.map +1 -0
  6. package/dist/node/manifest/getModuleLocator.d.ts.map +1 -1
  7. package/dist/node/manifest/getNode.d.ts.map +1 -1
  8. package/dist/node/manifest/getServices.d.ts.map +1 -1
  9. package/dist/node/queue/flows/createXl1ToEthBridgeJob.d.ts +6 -0
  10. package/dist/node/queue/flows/createXl1ToEthBridgeJob.d.ts.map +1 -1
  11. package/dist/node/queue/workers/EthTransactionMonitor.d.ts +3 -0
  12. package/dist/node/queue/workers/EthTransactionMonitor.d.ts.map +1 -0
  13. package/dist/node/queue/workers/EthTransactionPreparation.d.ts +6 -0
  14. package/dist/node/queue/workers/EthTransactionPreparation.d.ts.map +1 -0
  15. package/dist/node/queue/workers/EthTransactionSubmission.d.ts +3 -0
  16. package/dist/node/queue/workers/EthTransactionSubmission.d.ts.map +1 -0
  17. package/dist/node/queue/workers/WorkerDescription.d.ts +2 -1
  18. package/dist/node/queue/workers/WorkerDescription.d.ts.map +1 -1
  19. package/dist/node/queue/workers/Xl1ToEthBridgeParent.d.ts +3 -0
  20. package/dist/node/queue/workers/Xl1ToEthBridgeParent.d.ts.map +1 -0
  21. package/dist/node/queue/workers/Xl1TransactionMonitor.d.ts +3 -0
  22. package/dist/node/queue/workers/Xl1TransactionMonitor.d.ts.map +1 -0
  23. package/dist/node/queue/workers/Xl1TransactionPreparation.d.ts +3 -0
  24. package/dist/node/queue/workers/Xl1TransactionPreparation.d.ts.map +1 -0
  25. package/dist/node/queue/workers/Xl1TransactionSubmission.d.ts +3 -0
  26. package/dist/node/queue/workers/Xl1TransactionSubmission.d.ts.map +1 -0
  27. package/dist/node/queue/workers/createWorkers.d.ts +2 -1
  28. package/dist/node/queue/workers/createWorkers.d.ts.map +1 -1
  29. package/dist/node/queue/workers/index.d.ts +7 -7
  30. package/dist/node/queue/workers/util/index.d.ts +3 -0
  31. package/dist/node/queue/workers/util/index.d.ts.map +1 -0
  32. package/dist/node/queue/workers/util/submitEthTransaction.d.ts +5 -0
  33. package/dist/node/queue/workers/util/submitEthTransaction.d.ts.map +1 -0
  34. package/dist/node/queue/workers/util/submitXl1Transaction.d.ts +43 -0
  35. package/dist/node/queue/workers/util/submitXl1Transaction.d.ts.map +1 -0
  36. package/dist/node/server/{flowProducer.d.ts → addFlowProducer.d.ts} +1 -1
  37. package/dist/node/server/addFlowProducer.d.ts.map +1 -0
  38. package/dist/node/server/addWorkers.d.ts +4 -0
  39. package/dist/node/server/addWorkers.d.ts.map +1 -0
  40. package/dist/node/server/index.d.ts +0 -2
  41. package/dist/node/server/index.d.ts.map +1 -1
  42. package/dist/node/server/routes/bridge/routeDefinitions/routes/bridgeConfig.d.ts +22 -0
  43. package/dist/node/server/routes/bridge/routeDefinitions/routes/bridgeConfig.d.ts.map +1 -1
  44. package/dist/node/server/routes/bridge/routeDefinitions/routes/bridgeToRemote.d.ts +81 -0
  45. package/dist/node/server/routes/bridge/routeDefinitions/routes/bridgeToRemote.d.ts.map +1 -1
  46. package/dist/node/server/routes/bridge/routeDefinitions/routes/bridgeToRemoteEstimate.d.ts +72 -0
  47. package/dist/node/server/routes/bridge/routeDefinitions/routes/bridgeToRemoteEstimate.d.ts.map +1 -1
  48. package/dist/node/server/routes/bridge/routeDefinitions/routes/bridgeToRemoteStatus.d.ts +81 -0
  49. package/dist/node/server/routes/bridge/routeDefinitions/routes/bridgeToRemoteStatus.d.ts.map +1 -1
  50. package/dist/node/server/server.d.ts.map +1 -1
  51. package/dist/node/services/IBridgeServiceCollection.d.ts +2 -1
  52. package/dist/node/services/IBridgeServiceCollection.d.ts.map +1 -1
  53. package/dist/node/util/calculateBridgeFees.d.ts +1 -1
  54. package/dist/node/util/calculateBridgeFees.d.ts.map +1 -1
  55. package/dist/node/util/getConfigFromEnv.d.ts +6 -0
  56. package/dist/node/util/getConfigFromEnv.d.ts.map +1 -0
  57. package/dist/node/util/index.d.ts +1 -0
  58. package/dist/node/util/index.d.ts.map +1 -1
  59. package/package.json +24 -20
  60. package/src/config/getBridgeEscrowAddress.ts +2 -2
  61. package/src/config/getBridgeFeesAddress.ts +2 -2
  62. package/src/config/getBridgeWalletAccount.ts +1 -1
  63. package/src/config/getFeeStructure.ts +1 -1
  64. package/src/config/getGateway.ts +7 -12
  65. package/src/config/getMaxBridgeAmount.ts +1 -1
  66. package/src/config/getMinBridgeAmount.ts +1 -1
  67. package/src/config/getRemoteChainId.ts +1 -1
  68. package/src/config/getRemoteTokenAddress.ts +1 -1
  69. package/src/config/getXl1ChainId.ts +1 -1
  70. package/src/config/getXl1TokenAddress.ts +1 -1
  71. package/src/manifest/getIterableMap.ts +34 -0
  72. package/src/manifest/getModuleLocator.ts +4 -6
  73. package/src/manifest/getNode.ts +8 -6
  74. package/src/manifest/getServices.ts +11 -47
  75. package/src/queue/connection.ts +1 -1
  76. package/src/queue/flows/createXl1ToEthBridgeJob.ts +34 -19
  77. package/src/queue/workers/{ethTransactionMonitor.ts → EthTransactionMonitor.ts} +16 -7
  78. package/src/queue/workers/{ethTransactionPreparation.ts → EthTransactionPreparation.ts} +21 -9
  79. package/src/queue/workers/{ethTransactionSubmission.ts → EthTransactionSubmission.ts} +24 -9
  80. package/src/queue/workers/WorkerDescription.ts +3 -1
  81. package/src/queue/workers/{xl1ToEthBridgeParent.ts → Xl1ToEthBridgeParent.ts} +10 -2
  82. package/src/queue/workers/{xl1TransactionMonitor.ts → Xl1TransactionMonitor.ts} +20 -10
  83. package/src/queue/workers/{xl1TransactionPreparation.ts → Xl1TransactionPreparation.ts} +16 -5
  84. package/src/queue/workers/{xl1TransactionSubmission.ts → Xl1TransactionSubmission.ts} +21 -10
  85. package/src/queue/workers/createWorkers.ts +16 -9
  86. package/src/queue/workers/index.ts +7 -7
  87. package/src/queue/workers/util/index.ts +2 -0
  88. package/src/queue/workers/util/submitEthTransaction.ts +25 -0
  89. package/src/queue/workers/util/submitXl1Transaction.ts +9 -0
  90. package/src/server/addWorkers.ts +9 -0
  91. package/src/server/app.ts +1 -1
  92. package/src/server/index.ts +2 -2
  93. package/src/server/routes/bridge/routeDefinitions/routes/bridgeConfig.ts +4 -2
  94. package/src/server/routes/bridge/routeDefinitions/routes/bridgeToRemote.ts +13 -10
  95. package/src/server/routes/bridge/routeDefinitions/routes/bridgeToRemoteEstimate.ts +21 -15
  96. package/src/server/routes/bridge/routeDefinitions/routes/bridgeToRemoteStatus.ts +17 -15
  97. package/src/server/server.ts +5 -3
  98. package/src/services/IBridgeServiceCollection.ts +2 -1
  99. package/src/util/calculateBridgeFees.ts +1 -1
  100. package/src/util/getConfigFromEnv.ts +15 -0
  101. package/src/util/index.ts +1 -0
  102. package/dist/node/queue/workers/ethTransactionMonitor.d.ts +0 -3
  103. package/dist/node/queue/workers/ethTransactionMonitor.d.ts.map +0 -1
  104. package/dist/node/queue/workers/ethTransactionPreparation.d.ts +0 -5
  105. package/dist/node/queue/workers/ethTransactionPreparation.d.ts.map +0 -1
  106. package/dist/node/queue/workers/ethTransactionSubmission.d.ts +0 -3
  107. package/dist/node/queue/workers/ethTransactionSubmission.d.ts.map +0 -1
  108. package/dist/node/queue/workers/xl1ToEthBridgeParent.d.ts +0 -3
  109. package/dist/node/queue/workers/xl1ToEthBridgeParent.d.ts.map +0 -1
  110. package/dist/node/queue/workers/xl1TransactionMonitor.d.ts +0 -3
  111. package/dist/node/queue/workers/xl1TransactionMonitor.d.ts.map +0 -1
  112. package/dist/node/queue/workers/xl1TransactionPreparation.d.ts +0 -3
  113. package/dist/node/queue/workers/xl1TransactionPreparation.d.ts.map +0 -1
  114. package/dist/node/queue/workers/xl1TransactionSubmission.d.ts +0 -3
  115. package/dist/node/queue/workers/xl1TransactionSubmission.d.ts.map +0 -1
  116. package/dist/node/server/flowProducer.d.ts.map +0 -1
  117. /package/src/server/{flowProducer.ts → addFlowProducer.ts} +0 -0
@@ -14,7 +14,7 @@ var connection;
14
14
  var maxRetriesPerRequest = null;
15
15
  var getConnection = /* @__PURE__ */ __name((config) => {
16
16
  if (isDefined(connection)) return connection;
17
- const { redisHost: host, redisPort: port } = config.bridge;
17
+ const { redisHost: host, redisPort: port } = config.actors.bridge;
18
18
  connection = new Redis({
19
19
  host,
20
20
  port,
@@ -35,15 +35,28 @@ var getFlowProducer = /* @__PURE__ */ __name((connection2) => {
35
35
  return flowProducer;
36
36
  }, "getFlowProducer");
37
37
 
38
- // src/queue/workers/ethTransactionMonitor.ts
38
+ // src/queue/workers/createWorkers.ts
39
+ var createWorkers = /* @__PURE__ */ __name((connection2, services) => {
40
+ Xl1ToEthBridgeParent.createWorker(connection2);
41
+ Xl1TransactionPreparation.createWorker(connection2, services);
42
+ Xl1TransactionSubmission.createWorker(connection2, services);
43
+ Xl1TransactionMonitor.createWorker(connection2, services);
44
+ EthTransactionPreparation.createWorker(connection2, services);
45
+ EthTransactionSubmission.createWorker(connection2, services);
46
+ EthTransactionMonitor.createWorker(connection2, services);
47
+ }, "createWorkers");
48
+
49
+ // src/queue/workers/EthTransactionMonitor.ts
39
50
  import { assertEx } from "@xylabs/sdk-js";
40
51
  import { PayloadBuilder } from "@xyo-network/payload-builder";
41
52
  import { Worker } from "bullmq";
42
53
  var name = "Monitor Submitted ETH Transaction";
43
54
  var queueName = "eth-tx-monitor";
44
- var createWorker = /* @__PURE__ */ __name((connection2) => {
45
- new Worker(queueName, async (job) => {
46
- const { provider, ethTxStateMap: stateMap, tx } = job.data;
55
+ var createWorker = /* @__PURE__ */ __name((connection2, services) => {
56
+ const provider = assertEx(services?.provider, () => "provider service not provided");
57
+ const stateMap = assertEx(services?.ethTxStateMap, () => "ethTxStateMap service not provided");
58
+ const worker = new Worker(queueName, async (job) => {
59
+ const { tx } = job.data;
47
60
  const hash = await PayloadBuilder.hash(tx[0]);
48
61
  const state = assertEx(await stateMap.get(hash), () => "State not found");
49
62
  const submissionHash = assertEx(state?.submissionHash, () => "submissionHash not found");
@@ -59,14 +72,20 @@ var createWorker = /* @__PURE__ */ __name((connection2) => {
59
72
  }, {
60
73
  connection: connection2
61
74
  });
75
+ worker.on("failed", (job, err) => {
76
+ console.error(`[${name}] Job ${job?.id} failed:`, err.message);
77
+ });
78
+ worker.on("error", (err) => {
79
+ console.error(`[${name}] Worker error:`, err);
80
+ });
62
81
  }, "createWorker");
63
- var ethTransactionMonitor = {
82
+ var EthTransactionMonitor = {
64
83
  createWorker,
65
84
  name,
66
85
  queueName
67
86
  };
68
87
 
69
- // src/queue/workers/ethTransactionPreparation.ts
88
+ // src/queue/workers/EthTransactionPreparation.ts
70
89
  import { assertEx as assertEx2, hexToBigInt } from "@xylabs/sdk-js";
71
90
  import { PayloadBuilder as PayloadBuilder2 } from "@xyo-network/payload-builder";
72
91
  import { isBridgeIntent } from "@xyo-network/xl1-sdk";
@@ -74,9 +93,11 @@ import { Worker as Worker2 } from "bullmq";
74
93
  import { getAddress } from "ethers";
75
94
  var name2 = "Prepare ETH Transaction";
76
95
  var queueName2 = "eth-tx-prepare";
77
- var createWorker2 = /* @__PURE__ */ __name((connection2) => {
78
- new Worker2(queueName2, async (job) => {
79
- const { bridge, ethTxStateMap: stateMap, tx } = job.data;
96
+ var createWorker2 = /* @__PURE__ */ __name((connection2, services) => {
97
+ const bridge = assertEx2(services?.bridge, () => "bridge service not provided");
98
+ const stateMap = assertEx2(services?.ethTxStateMap, () => "ethTxStateMap service not provided");
99
+ const worker = new Worker2(queueName2, async (job) => {
100
+ const { tx } = job.data;
80
101
  const hash = await PayloadBuilder2.hash(tx[0]);
81
102
  await job.log(`[${hash}] preparing ETH transaction`);
82
103
  await job.log(`[${hash}] building ETH transaction`);
@@ -84,7 +105,8 @@ var createWorker2 = /* @__PURE__ */ __name((connection2) => {
84
105
  const amount = hexToBigInt(bridgeIntent.destAmount);
85
106
  const srcAddress = getAddress(bridgeIntent.srcAddress);
86
107
  const destAddress = getAddress(bridgeIntent.destAddress);
87
- const preparedTx = await bridge.getFunction("bridgeFromRemote").populateTransaction(srcAddress, destAddress, amount, 0n);
108
+ const nonce = hexToBigInt(await PayloadBuilder2.hash(tx[0]));
109
+ const preparedTx = await bridge.getFunction("bridgeFromRemote").populateTransaction(srcAddress, destAddress, amount, nonce);
88
110
  await job.log(`[${hash}] built ETH transaction`);
89
111
  await job.log(`[${hash}] storing ETH preparedTx`);
90
112
  await stateMap.set(hash, {
@@ -96,25 +118,62 @@ var createWorker2 = /* @__PURE__ */ __name((connection2) => {
96
118
  }, {
97
119
  connection: connection2
98
120
  });
121
+ worker.on("failed", (job, err) => {
122
+ console.error(`[${name2}] Job ${job?.id} failed:`, err.message);
123
+ });
124
+ worker.on("error", (err) => {
125
+ console.error(`[${name2}] Worker error:`, err);
126
+ });
99
127
  }, "createWorker");
100
- var ethTransactionPreparation = {
128
+ var EthTransactionPreparation = {
101
129
  createWorker: createWorker2,
102
130
  name: name2,
103
131
  queueName: queueName2
104
132
  };
105
133
 
106
- // src/queue/workers/ethTransactionSubmission.ts
107
- import { assertEx as assertEx3, isDefined as isDefined3 } from "@xylabs/sdk-js";
108
- import { PayloadBuilder as PayloadBuilder3 } from "@xyo-network/payload-builder";
134
+ // src/queue/workers/EthTransactionSubmission.ts
135
+ import { assertEx as assertEx4, isDefined as isDefined3 } from "@xylabs/sdk-js";
136
+ import { PayloadBuilder as PayloadBuilder4 } from "@xyo-network/payload-builder";
109
137
  import { Worker as Worker3 } from "bullmq";
138
+
139
+ // src/queue/workers/util/submitEthTransaction.ts
140
+ import { assertEx as assertEx3, hexToBigInt as hexToBigInt2, toEthAddress } from "@xylabs/sdk-js";
141
+ import { PayloadBuilder as PayloadBuilder3 } from "@xyo-network/payload-builder";
142
+ import { isBridgeIntent as isBridgeIntent2 } from "@xyo-network/xl1-sdk";
143
+ var submitEthTransaction = /* @__PURE__ */ __name(async (tx, bridgeableToken, bridge, wallet) => {
144
+ const xl1Transaction = assertEx3(tx[0], () => "No corresponding XL1 transaction found");
145
+ const bridgeIntent = assertEx3(tx[1].find(isBridgeIntent2), () => "No bridge intent found");
146
+ const srcAddress = toEthAddress(bridgeIntent.srcAddress);
147
+ const destAddress = toEthAddress(bridgeIntent.destAddress);
148
+ const amount = hexToBigInt2(bridgeIntent.destAmount);
149
+ const nonce = hexToBigInt2(await PayloadBuilder3.hash(xl1Transaction));
150
+ const bridgeTx = await bridge.connect(wallet).bridgeFromRemote(srcAddress, destAddress, amount, nonce);
151
+ const receipt = await bridgeTx.wait(1);
152
+ return receipt?.hash;
153
+ }, "submitEthTransaction");
154
+
155
+ // src/queue/workers/util/submitXl1Transaction.ts
156
+ import { isAllowedBlockPayload } from "@xyo-network/xl1-sdk";
157
+ var submitXl1Transaction = /* @__PURE__ */ __name(async (preparedTx, gateway) => {
158
+ const onChain = preparedTx[1].filter(isAllowedBlockPayload);
159
+ const offChainPayloads = preparedTx[1].filter((p) => !isAllowedBlockPayload(p));
160
+ const result = await gateway.addPayloadsToChain(onChain, offChainPayloads);
161
+ return result;
162
+ }, "submitXl1Transaction");
163
+
164
+ // src/queue/workers/EthTransactionSubmission.ts
110
165
  var name3 = "Submit ETH Transaction";
111
166
  var queueName3 = "eth-tx-submit";
112
- var createWorker3 = /* @__PURE__ */ __name((connection2) => {
113
- new Worker3(queueName3, async (job) => {
114
- const { ethTxStateMap: stateMap, tx, wallet } = job.data;
115
- const hash = await PayloadBuilder3.hash(tx[0]);
116
- const state = assertEx3(await stateMap.get(hash), () => `[${hash}] state not found`);
117
- const preparedTx = assertEx3(state?.preparedTx, () => `[${hash}] preparedTx not found`);
167
+ var createWorker3 = /* @__PURE__ */ __name((connection2, services) => {
168
+ const bridge = assertEx4(services?.bridge, () => "bridge service not provided");
169
+ const bridgeableToken = assertEx4(services?.bridgeableToken, () => "bridgeableToken service not provided");
170
+ const wallet = assertEx4(services?.wallet, () => "wallet service not provided");
171
+ const stateMap = assertEx4(services?.ethTxStateMap, () => "ethTxStateMap service not provided");
172
+ const worker = new Worker3(queueName3, async (job) => {
173
+ const { tx } = job.data;
174
+ const hash = await PayloadBuilder4.hash(tx[0]);
175
+ const state = assertEx4(await stateMap.get(hash), () => `[${hash}] state not found`);
176
+ const preparedTx = assertEx4(state?.preparedTx, () => `[${hash}] preparedTx not found`);
118
177
  const { submissionHash: existingSubmissionHash } = state;
119
178
  if (isDefined3(existingSubmissionHash)) {
120
179
  await job.log(`[${hash}] Tx already submitted with submission response hash ${existingSubmissionHash}`);
@@ -123,8 +182,7 @@ var createWorker3 = /* @__PURE__ */ __name((connection2) => {
123
182
  };
124
183
  }
125
184
  await job.log(`[${hash}] Submitting ETH tx`);
126
- const submissionResponse = await wallet.sendTransaction(preparedTx);
127
- const submissionHash = submissionResponse.hash;
185
+ const submissionHash = assertEx4(await submitEthTransaction(tx, bridgeableToken, bridge, wallet), () => `[${hash}] submissionHash not found in receipt`);
128
186
  await job.log(`[${hash}] Submitted ETH tx and received submission response hash ${submissionHash}`);
129
187
  await job.log(`[${hash}] Storing ETH submissionHash`);
130
188
  state.submissionHash = submissionHash;
@@ -137,19 +195,25 @@ var createWorker3 = /* @__PURE__ */ __name((connection2) => {
137
195
  connection: connection2,
138
196
  concurrency: 1
139
197
  });
198
+ worker.on("failed", (job, err) => {
199
+ console.error(`[${name3}] Job ${job?.id} failed:`, err.message);
200
+ });
201
+ worker.on("error", (err) => {
202
+ console.error(`[${name3}] Worker error:`, err);
203
+ });
140
204
  }, "createWorker");
141
- var ethTransactionSubmission = {
205
+ var EthTransactionSubmission = {
142
206
  createWorker: createWorker3,
143
207
  name: name3,
144
208
  queueName: queueName3
145
209
  };
146
210
 
147
- // src/queue/workers/xl1ToEthBridgeParent.ts
211
+ // src/queue/workers/Xl1ToEthBridgeParent.ts
148
212
  import { Worker as Worker4 } from "bullmq";
149
213
  var name4 = "Bridge XL1 to Ethereum";
150
214
  var queueName4 = "xl1-to-eth-bridge";
151
215
  var createWorker4 = /* @__PURE__ */ __name((connection2) => {
152
- new Worker4(queueName4, async (job) => {
216
+ const worker = new Worker4(queueName4, async (job) => {
153
217
  await job.log(`[${job.name}] start`);
154
218
  await job.log(`[${job.name}] done`);
155
219
  return {
@@ -158,30 +222,39 @@ var createWorker4 = /* @__PURE__ */ __name((connection2) => {
158
222
  }, {
159
223
  connection: connection2
160
224
  });
225
+ worker.on("failed", (job, err) => {
226
+ console.error(`[${name4}] Job ${job?.id} failed:`, err.message);
227
+ });
228
+ worker.on("error", (err) => {
229
+ console.error(`[${name4}] Worker error:`, err);
230
+ });
161
231
  }, "createWorker");
162
- var xl1ToEthBridgeParent = {
232
+ var Xl1ToEthBridgeParent = {
163
233
  createWorker: createWorker4,
164
234
  name: name4,
165
235
  queueName: queueName4
166
236
  };
167
237
 
168
- // src/queue/workers/xl1TransactionMonitor.ts
169
- import { assertEx as assertEx4, isDefined as isDefined4, isNull } from "@xylabs/sdk-js";
170
- import { PayloadBuilder as PayloadBuilder4 } from "@xyo-network/payload-builder";
238
+ // src/queue/workers/Xl1TransactionMonitor.ts
239
+ import { assertEx as assertEx5, isDefined as isDefined4, isNull } from "@xylabs/sdk-js";
240
+ import { PayloadBuilder as PayloadBuilder5 } from "@xyo-network/payload-builder";
171
241
  import { UnrecoverableError, Worker as Worker5 } from "bullmq";
172
242
  var name5 = "Monitor Submitted XL1 Transaction";
173
243
  var queueName5 = "xl1-tx-monitor";
174
- var createWorker5 = /* @__PURE__ */ __name((connection2) => {
175
- new Worker5(queueName5, async (job) => {
176
- const { gateway, tx, xl1TxStateMap: stateMap } = job.data;
177
- const hash = await PayloadBuilder4.hash(tx[0]);
178
- const viewer = assertEx4(gateway.connection.viewer, () => `[${hash}] viewer not defined on gateway`);
179
- const state = assertEx4(await stateMap.get(hash), () => `[${hash}] state not found`);
244
+ var createWorker5 = /* @__PURE__ */ __name((connection2, services) => {
245
+ const gateway = assertEx5(services?.gateway, () => "gateway service not provided");
246
+ const stateMap = assertEx5(services?.xl1TxStateMap, () => "xl1TxStateMap service not provided");
247
+ const worker = new Worker5(queueName5, async (job) => {
248
+ const { tx } = job.data;
249
+ const hash = await PayloadBuilder5.hash(tx[0]);
250
+ const viewer = assertEx5(gateway.connection.viewer, () => `[${hash}] viewer not defined on gateway`);
251
+ const state = assertEx5(await stateMap.get(hash), () => `[${hash}] state not found`);
252
+ const submissionHash = assertEx5(state?.submissionHash, () => `[${hash}] submissionHash not found`);
180
253
  await job.log(`[${hash}] Checking for XL1 transaction inclusion on chain`);
181
- const foundTx = await viewer.transactionByHash(hash);
254
+ const foundTx = await viewer.transactionByHash(submissionHash);
182
255
  if (isDefined4(foundTx) && !isNull(foundTx)) {
183
256
  await job.log(`[${hash}] Found transaction on chain`);
184
- state.confirmationHash = hash;
257
+ state.confirmationHash = await PayloadBuilder5.hash(foundTx[0]);
185
258
  await stateMap.set(hash, state);
186
259
  return {};
187
260
  }
@@ -195,22 +268,30 @@ var createWorker5 = /* @__PURE__ */ __name((connection2) => {
195
268
  }, {
196
269
  connection: connection2
197
270
  });
271
+ worker.on("failed", (job, err) => {
272
+ console.error(`[${name5}] Job ${job?.id} failed:`, err.message);
273
+ });
274
+ worker.on("error", (err) => {
275
+ console.error(`[${name5}] Worker error:`, err);
276
+ });
198
277
  }, "createWorker");
199
- var xl1TransactionMonitor = {
278
+ var Xl1TransactionMonitor = {
200
279
  createWorker: createWorker5,
201
280
  name: name5,
202
281
  queueName: queueName5
203
282
  };
204
283
 
205
- // src/queue/workers/xl1TransactionPreparation.ts
206
- import { PayloadBuilder as PayloadBuilder5 } from "@xyo-network/payload-builder";
284
+ // src/queue/workers/Xl1TransactionPreparation.ts
285
+ import { assertEx as assertEx6 } from "@xylabs/sdk-js";
286
+ import { PayloadBuilder as PayloadBuilder6 } from "@xyo-network/payload-builder";
207
287
  import { Worker as Worker6 } from "bullmq";
208
288
  var name6 = "Prepare XL1 Transaction";
209
289
  var queueName6 = "xl1-tx-prepare";
210
- var createWorker6 = /* @__PURE__ */ __name((connection2) => {
211
- new Worker6(queueName6, async (job) => {
212
- const { tx, xl1TxStateMap: stateMap } = job.data;
213
- const hash = await PayloadBuilder5.hash(tx[0]);
290
+ var createWorker6 = /* @__PURE__ */ __name((connection2, services) => {
291
+ const stateMap = assertEx6(services?.xl1TxStateMap, () => "xl1TxStateMap service not provided");
292
+ const worker = new Worker6(queueName6, async (job) => {
293
+ const { tx } = job.data;
294
+ const hash = await PayloadBuilder6.hash(tx[0]);
214
295
  await job.log(`[${hash}] preparing XL1 transaction`);
215
296
  const preparedTx = tx;
216
297
  await job.log(`[${hash}] storing XL1 preparedTx`);
@@ -223,25 +304,33 @@ var createWorker6 = /* @__PURE__ */ __name((connection2) => {
223
304
  }, {
224
305
  connection: connection2
225
306
  });
307
+ worker.on("failed", (job, err) => {
308
+ console.error(`[${name6}] Job ${job?.id} failed:`, err.message);
309
+ });
310
+ worker.on("error", (err) => {
311
+ console.error(`[${name6}] Worker error:`, err);
312
+ });
226
313
  }, "createWorker");
227
- var xl1TransactionPreparation = {
314
+ var Xl1TransactionPreparation = {
228
315
  createWorker: createWorker6,
229
316
  name: name6,
230
317
  queueName: queueName6
231
318
  };
232
319
 
233
- // src/queue/workers/xl1TransactionSubmission.ts
234
- import { assertEx as assertEx5, isDefined as isDefined5 } from "@xylabs/sdk-js";
235
- import { PayloadBuilder as PayloadBuilder6 } from "@xyo-network/payload-builder";
320
+ // src/queue/workers/Xl1TransactionSubmission.ts
321
+ import { assertEx as assertEx7, isDefined as isDefined5 } from "@xylabs/sdk-js";
322
+ import { PayloadBuilder as PayloadBuilder7 } from "@xyo-network/payload-builder";
236
323
  import { Worker as Worker7 } from "bullmq";
237
324
  var name7 = "Submit XL1 Transaction";
238
325
  var queueName7 = "xl1-tx-submit";
239
- var createWorker7 = /* @__PURE__ */ __name((connection2) => {
240
- new Worker7(queueName7, async (job) => {
241
- const { gateway, tx, xl1TxStateMap: stateMap } = job.data;
242
- const hash = await PayloadBuilder6.hash(tx[0]);
243
- const state = assertEx5(await stateMap.get(hash), () => `[${hash}] state not found`);
244
- const preparedTx = assertEx5(state?.preparedTx, () => `[${hash}] preparedTx not found`);
326
+ var createWorker7 = /* @__PURE__ */ __name((connection2, services) => {
327
+ const gateway = assertEx7(services?.gateway, () => "gateway service not provided");
328
+ const stateMap = assertEx7(services?.xl1TxStateMap, () => "xl1TxStateMap service not provided");
329
+ const worker = new Worker7(queueName7, async (job) => {
330
+ const { tx } = job.data;
331
+ const hash = await PayloadBuilder7.hash(tx[0]);
332
+ const state = assertEx7(await stateMap.get(hash), () => `[${hash}] state not found`);
333
+ const preparedTx = assertEx7(state?.preparedTx, () => `[${hash}] preparedTx not found`);
245
334
  const { submissionHash: existingSubmissionHash } = state;
246
335
  if (isDefined5(existingSubmissionHash)) {
247
336
  await job.log(`[${hash}] Tx already submitted with submission response hash ${existingSubmissionHash}`);
@@ -250,8 +339,7 @@ var createWorker7 = /* @__PURE__ */ __name((connection2) => {
250
339
  };
251
340
  }
252
341
  await job.log(`[${hash}] Submitting XL1 tx`);
253
- const [submissionHash] = await gateway.addTransactionToChain(preparedTx);
254
- assertEx5(submissionHash === hash, () => `[${hash}] Submitted transaction hash ${submissionHash} does not match expected hash`);
342
+ const [submissionHash] = await submitXl1Transaction(preparedTx, gateway);
255
343
  await job.log(`[${hash}] Submitted XL1 tx`);
256
344
  await job.log(`[${hash}] Storing XL1 submissionHash`);
257
345
  state.submissionHash = submissionHash;
@@ -263,8 +351,14 @@ var createWorker7 = /* @__PURE__ */ __name((connection2) => {
263
351
  }, {
264
352
  connection: connection2
265
353
  });
354
+ worker.on("failed", (job, err) => {
355
+ console.error(`[${name7}] Job ${job?.id} failed:`, err.message);
356
+ });
357
+ worker.on("error", (err) => {
358
+ console.error(`[${name7}] Worker error:`, err);
359
+ });
266
360
  }, "createWorker");
267
- var xl1TransactionSubmission = {
361
+ var Xl1TransactionSubmission = {
268
362
  createWorker: createWorker7,
269
363
  name: name7,
270
364
  queueName: queueName7
@@ -273,66 +367,72 @@ var xl1TransactionSubmission = {
273
367
  // src/queue/flows/createXl1ToEthBridgeJob.ts
274
368
  var createXl1ToEthBridgeJob = /* @__PURE__ */ __name(async (flowProducer2, tx) => {
275
369
  const flow = await flowProducer2.add({
276
- name: xl1ToEthBridgeParent.name,
277
- queueName: xl1ToEthBridgeParent.queueName,
370
+ name: Xl1ToEthBridgeParent.name,
371
+ queueName: Xl1ToEthBridgeParent.queueName,
278
372
  data: {
279
373
  tx
280
374
  },
281
375
  children: [
282
376
  {
283
- name: xl1TransactionPreparation.name,
284
- queueName: xl1TransactionPreparation.queueName,
377
+ // Step 6 (runs after child completes)
378
+ name: EthTransactionMonitor.name,
379
+ queueName: EthTransactionMonitor.queueName,
285
380
  data: {
286
381
  tx
287
382
  },
383
+ opts: {
384
+ attempts: 60,
385
+ backoff: {
386
+ type: "fixed",
387
+ delay: 5e3
388
+ }
389
+ },
288
390
  children: [
289
391
  {
290
- name: xl1TransactionSubmission.name,
291
- queueName: xl1TransactionSubmission.queueName,
392
+ // Step 5
393
+ name: EthTransactionSubmission.name,
394
+ queueName: EthTransactionSubmission.queueName,
292
395
  data: {
293
396
  tx
294
397
  },
295
398
  children: [
296
399
  {
297
- name: xl1TransactionMonitor.name,
298
- queueName: xl1TransactionMonitor.queueName,
400
+ // Step 4
401
+ name: EthTransactionPreparation.name,
402
+ queueName: EthTransactionPreparation.queueName,
299
403
  data: {
300
404
  tx
301
405
  },
302
- opts: {
303
- attempts: 60,
304
- backoff: {
305
- type: "fixed",
306
- delay: 5e3
307
- }
308
- },
309
406
  children: [
310
407
  {
311
- name: ethTransactionPreparation.name,
312
- queueName: ethTransactionPreparation.queueName,
408
+ // Step 3
409
+ name: Xl1TransactionMonitor.name,
410
+ queueName: Xl1TransactionMonitor.queueName,
313
411
  data: {
314
412
  tx
315
413
  },
414
+ opts: {
415
+ attempts: 60,
416
+ backoff: {
417
+ type: "fixed",
418
+ delay: 5e3
419
+ }
420
+ },
316
421
  children: [
317
422
  {
318
- name: ethTransactionSubmission.name,
319
- queueName: ethTransactionSubmission.queueName,
423
+ // Step 2
424
+ name: Xl1TransactionSubmission.name,
425
+ queueName: Xl1TransactionSubmission.queueName,
320
426
  data: {
321
427
  tx
322
428
  },
323
429
  children: [
324
430
  {
325
- name: ethTransactionMonitor.name,
326
- queueName: ethTransactionMonitor.queueName,
431
+ // Step 1 (runs first as deepest child)
432
+ name: Xl1TransactionPreparation.name,
433
+ queueName: Xl1TransactionPreparation.queueName,
327
434
  data: {
328
435
  tx
329
- },
330
- opts: {
331
- attempts: 60,
332
- backoff: {
333
- type: "fixed",
334
- delay: 5e3
335
- }
336
436
  }
337
437
  }
338
438
  ]
@@ -350,7 +450,7 @@ var createXl1ToEthBridgeJob = /* @__PURE__ */ __name(async (flowProducer2, tx) =
350
450
  return flow;
351
451
  }, "createXl1ToEthBridgeJob");
352
452
 
353
- // src/server/flowProducer.ts
453
+ // src/server/addFlowProducer.ts
354
454
  var addFlowProducer = /* @__PURE__ */ __name((app, config) => {
355
455
  const connection2 = getConnection(config);
356
456
  const flowProducer2 = getFlowProducer(connection2);
@@ -391,22 +491,22 @@ var asToken = /* @__PURE__ */ __name((value) => {
391
491
  }, "asToken");
392
492
 
393
493
  // src/config/getBridgeEscrowAddress.ts
394
- import { asAddress as asAddress2, assertEx as assertEx6 } from "@xylabs/sdk-js";
494
+ import { asAddress as asAddress2, assertEx as assertEx8 } from "@xylabs/sdk-js";
395
495
  var tryGetBridgeEscrowAddress = /* @__PURE__ */ __name((config) => {
396
- const address = asAddress2(config.bridge.escrowAddress);
496
+ const address = asAddress2(config.actors.bridge.escrowAddress);
397
497
  return address;
398
498
  }, "tryGetBridgeEscrowAddress");
399
499
 
400
500
  // src/config/getBridgeFeesAddress.ts
401
- import { asAddress as asAddress3, assertEx as assertEx7 } from "@xylabs/sdk-js";
501
+ import { asAddress as asAddress3, assertEx as assertEx9 } from "@xylabs/sdk-js";
402
502
  var tryGetBridgeFeesAddress = /* @__PURE__ */ __name((config) => {
403
- const address = asAddress3(config.bridge.feesAddress);
503
+ const address = asAddress3(config.actors.bridge.feesAddress);
404
504
  return address;
405
505
  }, "tryGetBridgeFeesAddress");
406
506
 
407
507
  // src/config/getFeeStructure.ts
408
508
  var getFeeStructure = /* @__PURE__ */ __name((config) => {
409
- const { feeFixed, feeRateBasisPoints } = config.bridge;
509
+ const { feeFixed, feeRateBasisPoints } = config.actors.bridge;
410
510
  return {
411
511
  feeFixed,
412
512
  feeRateBasisPoints
@@ -415,28 +515,28 @@ var getFeeStructure = /* @__PURE__ */ __name((config) => {
415
515
 
416
516
  // src/config/getMaxBridgeAmount.ts
417
517
  var getMaxBridgeAmount = /* @__PURE__ */ __name((config) => {
418
- const { maxBridgeAmount } = config.bridge;
518
+ const { maxBridgeAmount } = config.actors.bridge;
419
519
  return maxBridgeAmount;
420
520
  }, "getMaxBridgeAmount");
421
521
 
422
522
  // src/config/getMinBridgeAmount.ts
423
523
  var getMinBridgeAmount = /* @__PURE__ */ __name((config) => {
424
- const { minBridgeAmount } = config.bridge;
524
+ const { minBridgeAmount } = config.actors.bridge;
425
525
  return minBridgeAmount;
426
526
  }, "getMinBridgeAmount");
427
527
 
428
528
  // src/config/getRemoteChainId.ts
429
- import { assertEx as assertEx8 } from "@xylabs/sdk-js";
529
+ import { assertEx as assertEx10 } from "@xylabs/sdk-js";
430
530
  var getRemoteChainId = /* @__PURE__ */ __name((config) => {
431
- const remoteChainId = assertEx8(asChainId(config.bridge.remoteChainId), () => "Invalid remote chain ID in config");
531
+ const remoteChainId = assertEx10(asChainId(config.actors.bridge.remoteChainId), () => "Invalid remote chain ID in config");
432
532
  return remoteChainId;
433
533
  }, "getRemoteChainId");
434
534
 
435
535
  // src/config/getRemoteTokenAddress.ts
436
- import { assertEx as assertEx9 } from "@xylabs/sdk-js";
536
+ import { assertEx as assertEx11 } from "@xylabs/sdk-js";
437
537
  var getRemoteTokenAddress = /* @__PURE__ */ __name((config) => {
438
- const token = asToken(config.bridge.remoteTokenAddress);
439
- return assertEx9(token, () => "Remote token address is not defined in bridge configuration");
538
+ const token = asToken(config.actors.bridge.remoteTokenAddress);
539
+ return assertEx11(token, () => "Remote token address is not defined in bridge configuration");
440
540
  }, "getRemoteTokenAddress");
441
541
 
442
542
  // src/config/getBridgeWalletAccount.ts
@@ -446,7 +546,7 @@ import { ADDRESS_INDEX, generateXyoBaseWalletFromPhrase } from "@xyo-network/xl1
446
546
  var accountServiceSingleton;
447
547
  var getBridgeWalletAccount = /* @__PURE__ */ __name(async (config) => {
448
548
  if (accountServiceSingleton) return accountServiceSingleton;
449
- let walletPhrase = config.bridge.mnemonic;
549
+ let walletPhrase = config.actors.bridge.mnemonic;
450
550
  if (isUndefined(walletPhrase)) {
451
551
  console.log("[Bridge] No wallet mnemonic specified!");
452
552
  const randomMnemonic = HDWallet.generateMnemonic();
@@ -474,19 +574,19 @@ var getTransferAddresses = /* @__PURE__ */ __name(async (config) => {
474
574
  }, "getTransferAddresses");
475
575
 
476
576
  // src/config/getXl1ChainId.ts
477
- import { assertEx as assertEx10, isDefined as isDefined7 } from "@xylabs/sdk-js";
577
+ import { assertEx as assertEx12, isDefined as isDefined7 } from "@xylabs/sdk-js";
478
578
  var getXl1ChainId = /* @__PURE__ */ __name((config) => {
479
- const xl1ChainId = config.bridge.xl1ChainId;
579
+ const xl1ChainId = config.actors.bridge.xl1ChainId;
480
580
  if (isDefined7(xl1ChainId)) {
481
- return assertEx10(asChainId(xl1ChainId), () => "Invalid xl1ChainId in bridge config");
581
+ return assertEx12(asChainId(xl1ChainId), () => "Invalid xl1ChainId in bridge config");
482
582
  }
483
- return assertEx10(asChainId(config.chain.id), () => "Invalid chain.id in config");
583
+ return assertEx12(asChainId(config.chain.id), () => "Invalid chain.id in config");
484
584
  }, "getXl1ChainId");
485
585
 
486
586
  // src/config/getXl1TokenAddress.ts
487
587
  import { isDefined as isDefined8 } from "@xylabs/sdk-js";
488
588
  var getXl1TokenAddress = /* @__PURE__ */ __name((config) => {
489
- const token = asToken(config.bridge.xl1TokenAddress);
589
+ const token = asToken(config.actors.bridge.xl1TokenAddress);
490
590
  if (isDefined8(token)) return token;
491
591
  return getXl1ChainId(config);
492
592
  }, "getXl1TokenAddress");
@@ -518,28 +618,26 @@ var getBridgeSettings = /* @__PURE__ */ __name(async (config) => {
518
618
  // src/config/getGateway.ts
519
619
  import { isDefined as isDefined9 } from "@xylabs/sdk-js";
520
620
  import { HDWallet as HDWallet2 } from "@xyo-network/wallet";
521
- import { buildJsonRpcProviderLocator, HttpRpcTransport, SimpleXyoGatewayRunner, SimpleXyoSigner, XyoGatewayRunnerMoniker } from "@xyo-network/xl1-sdk";
621
+ import { ADDRESS_INDEX as ADDRESS_INDEX2, buildJsonRpcProviderLocator, generateXyoBaseWalletFromPhrase as generateXyoBaseWalletFromPhrase2, HttpRpcTransport, XyoGatewayRunnerMoniker } from "@xyo-network/xl1-sdk";
522
622
  var gatewayInstance;
523
623
  var getGateway = /* @__PURE__ */ __name(async (config) => {
524
624
  if (isDefined9(gatewayInstance)) return gatewayInstance;
525
- const { mnemonic, chainRpcApiUrl: endpoint } = config.bridge;
526
- const walletPromise = isDefined9(mnemonic) ? HDWallet2.fromPhrase(mnemonic) : HDWallet2.random();
527
- const account = await walletPromise;
625
+ const { mnemonic, chainRpcApiUrl: endpoint } = config.actors.bridge;
626
+ const walletPhrase = isDefined9(mnemonic) ? mnemonic : HDWallet2.generateMnemonic();
627
+ const wallet = await generateXyoBaseWalletFromPhrase2(walletPhrase);
628
+ const signerAccount = await wallet.derivePath(ADDRESS_INDEX2.XYO);
528
629
  const transportFactory = /* @__PURE__ */ __name((schemas) => new HttpRpcTransport(endpoint, schemas), "transportFactory");
529
630
  const locator = await buildJsonRpcProviderLocator({
530
- transportFactory
631
+ transportFactory,
632
+ signerAccount
531
633
  });
532
- locator.register(SimpleXyoSigner.factory(SimpleXyoSigner.dependencies, {
533
- account
534
- }));
535
- locator.register(SimpleXyoGatewayRunner.factory(SimpleXyoGatewayRunner.dependencies));
536
634
  return await locator.getInstance(XyoGatewayRunnerMoniker);
537
635
  }, "getGateway");
538
636
 
539
637
  // src/server/routes/bridge/routeDefinitions/routes/bridgeConfig.ts
540
- var response = BridgeSettingsZod;
638
+ var BridgeConfigResponseZod = BridgeSettingsZod;
541
639
  var validateRequest = requestHandlerValidator({
542
- response
640
+ response: BridgeConfigResponseZod
543
641
  });
544
642
  var makeBridgeConfigRoute = /* @__PURE__ */ __name((config) => {
545
643
  return {
@@ -593,10 +691,10 @@ var makeBridgeFromRemoteStatusRoute = /* @__PURE__ */ __name((config) => {
593
691
  chainId: getRemoteChainIdZod(config),
594
692
  nonce: z.string().nonempty()
595
693
  });
596
- const response2 = PayloadZodStrictOfSchema(BridgeDestinationObservationSchema).extend(BridgeDestinationObservationFieldsZod.shape);
694
+ const response = PayloadZodStrictOfSchema(BridgeDestinationObservationSchema).extend(BridgeDestinationObservationFieldsZod.shape);
597
695
  const validateRequest2 = requestHandlerValidator2({
598
696
  params,
599
- response: response2
697
+ response
600
698
  });
601
699
  return {
602
700
  method: "get",
@@ -627,17 +725,17 @@ var makeBridgeFromRemoteStatusRoute = /* @__PURE__ */ __name((config) => {
627
725
 
628
726
  // src/server/routes/bridge/routeDefinitions/routes/bridgeToRemote.ts
629
727
  import { requestHandlerValidator as requestHandlerValidator3 } from "@xylabs/express";
630
- import { PayloadBuilder as PayloadBuilder10 } from "@xyo-network/payload-builder";
631
- import { PayloadZodStrictOfSchema as PayloadZodStrictOfSchema2 } from "@xyo-network/payload-model";
728
+ import { PayloadBuilder as PayloadBuilder11 } from "@xyo-network/payload-builder";
729
+ import { PayloadZodLooseOfSchema, PayloadZodStrictOfSchema as PayloadZodStrictOfSchema2 } from "@xyo-network/payload-model";
632
730
  import { BridgeIntentFieldsZod, BridgeIntentSchema as BridgeIntentSchema2, BridgeSourceObservationFieldsZod, BridgeSourceObservationSchema, SignedTransactionBoundWitnessZod, TransferZod } from "@xyo-network/xl1-sdk";
633
731
  import { z as z2 } from "zod";
634
732
 
635
733
  // src/util/calculateBridgeFees.ts
636
- import { hexToBigInt as hexToBigInt2, toHex as toHex2 } from "@xylabs/sdk-js";
734
+ import { hexToBigInt as hexToBigInt3, toHex as toHex2 } from "@xylabs/sdk-js";
637
735
  var calculateBridgeFees = /* @__PURE__ */ __name((srcAmount, feeStructure) => {
638
736
  const { feeFixed, feeRateBasisPoints } = feeStructure;
639
- const srcAmountBigInt = hexToBigInt2(srcAmount);
640
- const feeFixedBigInt = hexToBigInt2(feeFixed);
737
+ const srcAmountBigInt = hexToBigInt3(srcAmount);
738
+ const feeFixedBigInt = hexToBigInt3(feeFixed);
641
739
  const feeVariableBigInt = srcAmountBigInt * BigInt(feeRateBasisPoints) / 10000n;
642
740
  const feeVariable = toHex2(feeVariableBigInt);
643
741
  const feeTotalBigInt = feeFixedBigInt + feeVariableBigInt;
@@ -651,8 +749,8 @@ var calculateBridgeFees = /* @__PURE__ */ __name((srcAmount, feeStructure) => {
651
749
  }, "calculateBridgeFees");
652
750
 
653
751
  // src/util/generateBridgeEstimate.ts
654
- import { hexToBigInt as hexToBigInt3, toAddress as toAddress2 } from "@xylabs/sdk-js";
655
- import { PayloadBuilder as PayloadBuilder7 } from "@xyo-network/payload-builder";
752
+ import { hexToBigInt as hexToBigInt4, toAddress as toAddress2 } from "@xylabs/sdk-js";
753
+ import { PayloadBuilder as PayloadBuilder8 } from "@xyo-network/payload-builder";
656
754
  import { BridgeIntentSchema, createTransferPayload } from "@xyo-network/xl1-sdk";
657
755
  import { v4 } from "uuid";
658
756
  var generateBridgeEstimate = /* @__PURE__ */ __name(async (srcAddress, srcAmount, destAddress, config, nonceOverride) => {
@@ -677,7 +775,7 @@ var generateBridgeEstimate = /* @__PURE__ */ __name(async (srcAddress, srcAmount
677
775
  destToken: remoteTokenAddress,
678
776
  nonce
679
777
  };
680
- const bridgeIntent = new PayloadBuilder7({
778
+ const bridgeIntent = new PayloadBuilder8({
681
779
  schema: BridgeIntentSchema
682
780
  }).fields(bridgeIntentFields).build();
683
781
  const context = {
@@ -686,8 +784,8 @@ var generateBridgeEstimate = /* @__PURE__ */ __name(async (srcAddress, srcAmount
686
784
  feeVariable
687
785
  };
688
786
  const transfer = createTransferPayload(sender, {
689
- [escrowAddress]: hexToBigInt3(destAmount),
690
- [feesAddress]: hexToBigInt3(feeFixedAmount) + hexToBigInt3(feeVariable)
787
+ [escrowAddress]: hexToBigInt4(destAmount),
788
+ [feesAddress]: hexToBigInt4(feeFixedAmount) + hexToBigInt4(feeVariable)
691
789
  }, context);
692
790
  return [
693
791
  bridgeIntent,
@@ -697,24 +795,24 @@ var generateBridgeEstimate = /* @__PURE__ */ __name(async (srcAddress, srcAmount
697
795
 
698
796
  // src/util/validateBridgeEstimateExact.ts
699
797
  import { isUndefined as isUndefined3 } from "@xylabs/sdk-js";
700
- import { PayloadBuilder as PayloadBuilder8 } from "@xyo-network/payload-builder";
798
+ import { PayloadBuilder as PayloadBuilder9 } from "@xyo-network/payload-builder";
701
799
  var validateBridgeEstimateExact = /* @__PURE__ */ __name(async (intent, transfer, config) => {
702
800
  const { srcAddress, srcAmount, destAddress } = intent;
703
801
  const [calculatedIntent, calculatedTransfer] = await generateBridgeEstimate(srcAddress, srcAmount, destAddress, config);
704
802
  if (isUndefined3(calculatedIntent) || isUndefined3(calculatedTransfer)) return false;
705
803
  const { nonce: expectedIntentNonce, ...expectedIntentStatic } = calculatedIntent;
706
804
  const { nonce: actualIntentNonce, ...actualIntentStatic } = intent;
707
- if (await PayloadBuilder8.dataHash(expectedIntentStatic) !== await PayloadBuilder8.dataHash(actualIntentStatic)) return false;
805
+ if (await PayloadBuilder9.dataHash(expectedIntentStatic) !== await PayloadBuilder9.dataHash(actualIntentStatic)) return false;
708
806
  const { epoch: expectedTransferEpoch, ...expectedTransferStatic } = calculatedTransfer;
709
807
  const { epoch: actualTransferEpoch, ...actualTransferStatic } = transfer;
710
- if (await PayloadBuilder8.dataHash(expectedTransferStatic) !== await PayloadBuilder8.dataHash(actualTransferStatic)) return false;
808
+ if (await PayloadBuilder9.dataHash(expectedTransferStatic) !== await PayloadBuilder9.dataHash(actualTransferStatic)) return false;
711
809
  return true;
712
810
  }, "validateBridgeEstimateExact");
713
811
 
714
812
  // src/util/validateBridgeTransaction.ts
715
813
  import { asAddress as asAddress4, isDefined as isDefined10 } from "@xylabs/sdk-js";
716
814
  import { addressesContains, BoundWitnessValidator, payloadHashesContainsAll } from "@xyo-network/boundwitness-validator";
717
- import { PayloadBuilder as PayloadBuilder9 } from "@xyo-network/payload-builder";
815
+ import { PayloadBuilder as PayloadBuilder10 } from "@xyo-network/payload-builder";
718
816
  var validateBridgeTransaction = /* @__PURE__ */ __name(async (signedTxBw, intent, transfer, config) => {
719
817
  const { srcAddress } = intent;
720
818
  const chainId = getXl1ChainId(config);
@@ -723,7 +821,7 @@ var validateBridgeTransaction = /* @__PURE__ */ __name(async (signedTxBw, intent
723
821
  if (isDefined10(errors) && errors.length > 0) return false;
724
822
  const sender = asAddress4(srcAddress, true);
725
823
  if (!addressesContains(signedTxBw, sender)) return false;
726
- const hashes = await PayloadBuilder9.hashes([
824
+ const hashes = await PayloadBuilder10.hashes([
727
825
  intent,
728
826
  transfer
729
827
  ]);
@@ -732,20 +830,20 @@ var validateBridgeTransaction = /* @__PURE__ */ __name(async (signedTxBw, intent
732
830
  }, "validateBridgeTransaction");
733
831
 
734
832
  // src/server/routes/bridge/routeDefinitions/routes/bridgeToRemote.ts
833
+ var BridgeToRemoteBodyZod = z2.tuple([
834
+ SignedTransactionBoundWitnessZod,
835
+ PayloadZodLooseOfSchema(BridgeIntentSchema2).extend(BridgeIntentFieldsZod.shape),
836
+ TransferZod
837
+ ]);
838
+ var BridgeToRemoteResponseZod = PayloadZodStrictOfSchema2(BridgeSourceObservationSchema).extend(BridgeSourceObservationFieldsZod.shape);
735
839
  var makeBridgeToRemoteRoute = /* @__PURE__ */ __name((config) => {
736
840
  const params = z2.object({
737
841
  chainId: getRemoteChainIdZod(config)
738
842
  });
739
- const body = z2.tuple([
740
- SignedTransactionBoundWitnessZod,
741
- PayloadZodStrictOfSchema2(BridgeIntentSchema2).extend(BridgeIntentFieldsZod.shape),
742
- TransferZod
743
- ]);
744
- const response2 = PayloadZodStrictOfSchema2(BridgeSourceObservationSchema).extend(BridgeSourceObservationFieldsZod.shape);
745
843
  const validateRequest2 = requestHandlerValidator3({
746
844
  params,
747
- body,
748
- response: response2
845
+ body: BridgeToRemoteBodyZod,
846
+ response: BridgeToRemoteResponseZod
749
847
  });
750
848
  return {
751
849
  method: "post",
@@ -771,14 +869,14 @@ var makeBridgeToRemoteRoute = /* @__PURE__ */ __name((config) => {
771
869
  ]
772
870
  ];
773
871
  await createXl1ToEthBridgeJob(flowProducer2, singedHydratedTransaction);
774
- const srcConfirmation = await PayloadBuilder10.hash(signedTxBw);
872
+ const srcConfirmation = await PayloadBuilder11.hash(signedTxBw);
775
873
  const bridgeCommonFieldsZod = z2.object({}).extend(BridgeSourceObservationFieldsZod.shape);
776
874
  const bridgeCommonFields = bridgeCommonFieldsZod.parse(bridgeIntent);
777
875
  const bridgeObservationFields = {
778
876
  ...bridgeCommonFields,
779
877
  srcConfirmation
780
878
  };
781
- const bridgeObservation = new PayloadBuilder10({
879
+ const bridgeObservation = new PayloadBuilder11({
782
880
  schema: BridgeSourceObservationSchema
783
881
  }).fields(bridgeObservationFields).build();
784
882
  res.json(bridgeObservation);
@@ -788,29 +886,29 @@ var makeBridgeToRemoteRoute = /* @__PURE__ */ __name((config) => {
788
886
 
789
887
  // src/server/routes/bridge/routeDefinitions/routes/bridgeToRemoteEstimate.ts
790
888
  import { requestHandlerValidator as requestHandlerValidator4 } from "@xylabs/express";
791
- import { assertEx as assertEx11, toAddress as toAddress3 } from "@xylabs/sdk-js";
792
- import { PayloadZodLooseOfSchema, PayloadZodStrictOfSchema as PayloadZodStrictOfSchema3 } from "@xyo-network/payload-model";
793
- import { buildUnsignedTransaction } from "@xyo-network/xl1-sdk";
794
- import { BridgeIntentFieldsZod as BridgeIntentFieldsZod2, BridgeIntentSchema as BridgeIntentSchema3, toXL1BlockNumber, TransactionBoundWitnessZod, TransferSchema } from "@xyo-network/xl1-sdk";
889
+ import { assertEx as assertEx13, toAddress as toAddress3 } from "@xylabs/sdk-js";
890
+ import { PayloadZodStrictOfSchema as PayloadZodStrictOfSchema3 } from "@xyo-network/payload-model";
891
+ import { buildUnsignedTransaction, TransferZod as TransferZod2 } from "@xyo-network/xl1-sdk";
892
+ import { BridgeIntentFieldsZod as BridgeIntentFieldsZod2, BridgeIntentSchema as BridgeIntentSchema3, toXL1BlockNumber, TransactionBoundWitnessZod } from "@xyo-network/xl1-sdk";
795
893
  import { z as z3 } from "zod";
894
+ var BridgeToRemoteEstimateBodyZod = BridgeIntentFieldsZod2.pick({
895
+ destAddress: true,
896
+ srcAddress: true,
897
+ srcAmount: true
898
+ });
899
+ var BridgeToRemoteEstimateResponseZod = z3.tuple([
900
+ TransactionBoundWitnessZod,
901
+ PayloadZodStrictOfSchema3(BridgeIntentSchema3).extend(BridgeIntentFieldsZod2.shape),
902
+ TransferZod2
903
+ ]);
796
904
  var makeBridgeToRemoteEstimateRoute = /* @__PURE__ */ __name((config) => {
797
905
  const params = z3.object({
798
906
  chainId: getRemoteChainIdZod(config)
799
907
  });
800
- const body = BridgeIntentFieldsZod2.pick({
801
- destAddress: true,
802
- srcAddress: true,
803
- srcAmount: true
804
- });
805
- const response2 = z3.tuple([
806
- TransactionBoundWitnessZod,
807
- PayloadZodStrictOfSchema3(BridgeIntentSchema3).extend(BridgeIntentFieldsZod2.shape),
808
- PayloadZodLooseOfSchema(TransferSchema)
809
- ]);
810
908
  const validateRequest2 = requestHandlerValidator4({
811
909
  params,
812
- body,
813
- response: response2
910
+ body: BridgeToRemoteEstimateBodyZod,
911
+ response: BridgeToRemoteEstimateResponseZod
814
912
  });
815
913
  return {
816
914
  method: "post",
@@ -821,7 +919,7 @@ var makeBridgeToRemoteEstimateRoute = /* @__PURE__ */ __name((config) => {
821
919
  const [bridgeIntent, transfer] = await generateBridgeEstimate(srcAddress, srcAmount, destAddress, config);
822
920
  const sender = toAddress3(srcAddress);
823
921
  const gateway = await getGateway(config);
824
- const viewer = assertEx11(gateway.connection.viewer, () => new Error("Viewer not available on gateway connection"));
922
+ const viewer = assertEx13(gateway.connection.viewer, () => new Error("Viewer not available on gateway connection"));
825
923
  const currentBlockNumber = await viewer.currentBlockNumber();
826
924
  const nbf = toXL1BlockNumber(currentBlockNumber, true);
827
925
  const exp = toXL1BlockNumber(currentBlockNumber + 1e3, true);
@@ -845,6 +943,21 @@ import { asAddress as asAddress5, asHex as asHex3, toHex as toHex3 } from "@xyla
845
943
  import { PayloadZodStrictOfSchema as PayloadZodStrictOfSchema4 } from "@xyo-network/payload-model";
846
944
  import { BridgeDestinationObservationFieldsZod as BridgeDestinationObservationFieldsZod2, BridgeDestinationObservationSchema as BridgeDestinationObservationSchema2, BridgeIntentFieldsZod as BridgeIntentFieldsZod3, BridgeIntentSchema as BridgeIntentSchema4, BridgeSourceObservationFieldsZod as BridgeSourceObservationFieldsZod2, BridgeSourceObservationSchema as BridgeSourceObservationSchema2 } from "@xyo-network/xl1-sdk";
847
945
  import { z as z4 } from "zod";
946
+ var BridgeToRemoteStatusResponseZod = z4.union([
947
+ z4.tuple([]),
948
+ z4.tuple([
949
+ PayloadZodStrictOfSchema4(BridgeIntentSchema4).extend(BridgeIntentFieldsZod3.shape)
950
+ ]),
951
+ z4.tuple([
952
+ PayloadZodStrictOfSchema4(BridgeIntentSchema4).extend(BridgeIntentFieldsZod3.shape),
953
+ PayloadZodStrictOfSchema4(BridgeSourceObservationSchema2).extend(BridgeSourceObservationFieldsZod2.shape)
954
+ ]),
955
+ z4.tuple([
956
+ PayloadZodStrictOfSchema4(BridgeIntentSchema4).extend(BridgeIntentFieldsZod3.shape),
957
+ PayloadZodStrictOfSchema4(BridgeSourceObservationSchema2).extend(BridgeSourceObservationFieldsZod2.shape),
958
+ PayloadZodStrictOfSchema4(BridgeDestinationObservationSchema2).extend(BridgeDestinationObservationFieldsZod2.shape)
959
+ ])
960
+ ]);
848
961
  var makeBridgeToRemoteStatusRoute = /* @__PURE__ */ __name((config) => {
849
962
  const params = z4.object({
850
963
  chainId: getRemoteChainIdZod(config),
@@ -853,25 +966,10 @@ var makeBridgeToRemoteStatusRoute = /* @__PURE__ */ __name((config) => {
853
966
  const query = z4.object({
854
967
  mockStatus: z4.coerce.number().default(0)
855
968
  });
856
- const response2 = z4.union([
857
- z4.tuple([]),
858
- z4.tuple([
859
- PayloadZodStrictOfSchema4(BridgeIntentSchema4).extend(BridgeIntentFieldsZod3.shape)
860
- ]),
861
- z4.tuple([
862
- PayloadZodStrictOfSchema4(BridgeIntentSchema4).extend(BridgeIntentFieldsZod3.shape),
863
- PayloadZodStrictOfSchema4(BridgeSourceObservationSchema2).extend(BridgeSourceObservationFieldsZod2.shape)
864
- ]),
865
- z4.tuple([
866
- PayloadZodStrictOfSchema4(BridgeIntentSchema4).extend(BridgeIntentFieldsZod3.shape),
867
- PayloadZodStrictOfSchema4(BridgeSourceObservationSchema2).extend(BridgeSourceObservationFieldsZod2.shape),
868
- PayloadZodStrictOfSchema4(BridgeDestinationObservationSchema2).extend(BridgeDestinationObservationFieldsZod2.shape)
869
- ])
870
- ]);
871
969
  const validateRequest2 = requestHandlerValidator5({
872
970
  params,
873
971
  query,
874
- response: response2
972
+ response: BridgeToRemoteStatusResponseZod
875
973
  });
876
974
  return {
877
975
  method: "get",
@@ -976,18 +1074,18 @@ var getApp = /* @__PURE__ */ __name((node, config) => {
976
1074
  }, "getApp");
977
1075
 
978
1076
  // src/server/server.ts
979
- import { assertEx as assertEx16, isDefined as isDefined15, isString } from "@xylabs/sdk-js";
1077
+ import { assertEx as assertEx18, isDefined as isDefined15, isString } from "@xylabs/sdk-js";
980
1078
  import { boot } from "@xyo-network/bios";
981
1079
  import { HDWallet as HDWallet4 } from "@xyo-network/wallet";
982
1080
 
983
1081
  // src/manifest/getModuleLocator.ts
984
1082
  import { BaseMongoSdk } from "@xylabs/mongo";
985
- import { assertEx as assertEx14, isDefined as isDefined13 } from "@xylabs/sdk-js";
1083
+ import { assertEx as assertEx16, isDefined as isDefined13 } from "@xylabs/sdk-js";
986
1084
  import { MemoryArchivist } from "@xyo-network/archivist-memory";
987
1085
  import { MongoDBArchivistV2 } from "@xyo-network/archivist-mongodb";
988
1086
  import { ViewArchivist } from "@xyo-network/archivist-view";
1087
+ import { initEvmProvider } from "@xyo-network/chain-orchestration";
989
1088
  import { MongoMap } from "@xyo-network/chain-protocol";
990
- import { initEvmProvider } from "@xyo-network/chain-services";
991
1089
  import { initTelemetry } from "@xyo-network/chain-telemetry";
992
1090
  import { AbstractModule, LoggerModuleStatusReporter } from "@xyo-network/module-abstract";
993
1091
  import { ModuleFactoryLocator } from "@xyo-network/module-factory-locator";
@@ -995,12 +1093,12 @@ import { MemorySentinel } from "@xyo-network/sentinel-memory";
995
1093
  import { hasMongoConfig, mapToMapType, XyoGatewayRunnerMoniker as XyoGatewayRunnerMoniker2 } from "@xyo-network/xl1-sdk";
996
1094
 
997
1095
  // src/modules/EVMLiquidityBridgeTransactionCompletionMonitorSentinel/EVMLiquidityBridgeTransactionCompletionMonitorSentinel.ts
998
- import { asAddress as asAddress6, asHex as asHex4, assertEx as assertEx12, delay, hexFromBigInt, hexToBigInt as hexToBigInt4, isDefined as isDefined11, isUndefined as isUndefined4 } from "@xylabs/sdk-js";
999
- import { PayloadBuilder as PayloadBuilder11 } from "@xyo-network/payload-builder";
1096
+ import { asAddress as asAddress6, asHex as asHex4, assertEx as assertEx14, delay, hexFromBigInt, hexToBigInt as hexToBigInt5, isDefined as isDefined11, isUndefined as isUndefined4 } from "@xylabs/sdk-js";
1097
+ import { PayloadBuilder as PayloadBuilder12 } from "@xyo-network/payload-builder";
1000
1098
  import { asSchema } from "@xyo-network/payload-model";
1001
1099
  import { AbstractSentinel } from "@xyo-network/sentinel-abstract";
1002
1100
  import { LiquidityPoolBridge__factory } from "@xyo-network/typechain";
1003
- import { BridgeDestinationObservationSchema as BridgeDestinationObservationSchema3, flattenHydratedTransaction, flattenHydratedTransactions, isBridgeIntent as isBridgeIntent2, tryUnflattenHydratedTransaction } from "@xyo-network/xl1-sdk";
1101
+ import { BridgeDestinationObservationSchema as BridgeDestinationObservationSchema3, flattenHydratedTransaction, flattenHydratedTransactions, isBridgeIntent as isBridgeIntent3, tryUnflattenHydratedTransaction } from "@xyo-network/xl1-sdk";
1004
1102
  import { Mutex } from "async-mutex";
1005
1103
  import { getAddress as getAddress2 } from "ethers/address";
1006
1104
  import { Wallet } from "ethers/wallet";
@@ -1025,19 +1123,19 @@ var EVMLiquidityBridgeTransactionCompletionMonitorSentinel = class extends Abstr
1025
1123
  _successCounter;
1026
1124
  _wallet;
1027
1125
  get bridge() {
1028
- return assertEx12(this._bridge, () => new Error("Bridge contract not initialized"));
1126
+ return assertEx14(this._bridge, () => new Error("Bridge contract not initialized"));
1029
1127
  }
1030
1128
  get completedTransactions() {
1031
- return assertEx12(this.params.completedTransactions, () => "Completed transactions map is not defined");
1129
+ return assertEx14(this.params.completedTransactions, () => "Completed transactions map is not defined");
1032
1130
  }
1033
1131
  get jobCheckInterval() {
1034
1132
  return isDefined11(this.config.jobCheckInterval) ? this.config.jobCheckInterval : defaultJobCheckIntervalMs;
1035
1133
  }
1036
1134
  get pendingTransactions() {
1037
- return assertEx12(this.params.pendingTransactions, () => "Pending transactions map is not defined");
1135
+ return assertEx14(this.params.pendingTransactions, () => "Pending transactions map is not defined");
1038
1136
  }
1039
1137
  get wallet() {
1040
- return assertEx12(this._wallet, () => "wallet is required");
1138
+ return assertEx14(this._wallet, () => "wallet is required");
1041
1139
  }
1042
1140
  async createHandler() {
1043
1141
  await super.createHandler();
@@ -1054,11 +1152,11 @@ var EVMLiquidityBridgeTransactionCompletionMonitorSentinel = class extends Abstr
1054
1152
  description: "Number of errors"
1055
1153
  });
1056
1154
  const { provider, bridgeAddress } = this.params;
1057
- const key = assertEx12(this.account?.private?.hex, () => new Error("Account private key is required"));
1155
+ const key = assertEx14(this.account?.private?.hex, () => new Error("Account private key is required"));
1058
1156
  this._wallet = new Wallet(key, provider);
1059
1157
  this._bridge = LiquidityPoolBridge__factory.connect(getAddress2(bridgeAddress), this._wallet);
1060
1158
  const network = await provider.getNetwork();
1061
- this._bridgeChainId = assertEx12(hexFromBigInt(network.chainId), () => new Error("Failed to parse bridgeChainId"));
1159
+ this._bridgeChainId = assertEx14(hexFromBigInt(network.chainId), () => new Error("Failed to parse bridgeChainId"));
1062
1160
  const tokenAddress = await this.bridge.token();
1063
1161
  this._bridgeTokenAddress = asAddress6(tokenAddress, true);
1064
1162
  const bridgeRemoteChain = await this.bridge.remoteChain();
@@ -1068,7 +1166,7 @@ var EVMLiquidityBridgeTransactionCompletionMonitorSentinel = class extends Abstr
1068
1166
  if (isDefined11(payloads) && payloads.length > 0) {
1069
1167
  const signedHydratedTransaction = tryUnflattenHydratedTransaction(payloads);
1070
1168
  if (isDefined11(signedHydratedTransaction)) {
1071
- const txHash = await PayloadBuilder11.hash(signedHydratedTransaction[0]);
1169
+ const txHash = await PayloadBuilder12.hash(signedHydratedTransaction[0]);
1072
1170
  this.logger?.info(`Adding transaction ${signedHydratedTransaction[0]} with hash ${txHash} to pending transactions for monitoring`);
1073
1171
  await this.pendingTransactions.set(txHash, signedHydratedTransaction);
1074
1172
  return flattenHydratedTransaction(signedHydratedTransaction);
@@ -1080,11 +1178,11 @@ var EVMLiquidityBridgeTransactionCompletionMonitorSentinel = class extends Abstr
1080
1178
  return [];
1081
1179
  }
1082
1180
  return await this._reportMutex.runExclusive(async () => {
1083
- const response2 = [];
1181
+ const response = [];
1084
1182
  if (isUndefined4(payloads) || payloads.length === 0) {
1085
1183
  await this.processAllTransactions();
1086
1184
  }
1087
- return response2;
1185
+ return response;
1088
1186
  });
1089
1187
  }
1090
1188
  }
@@ -1105,7 +1203,7 @@ var EVMLiquidityBridgeTransactionCompletionMonitorSentinel = class extends Abstr
1105
1203
  try {
1106
1204
  let ret = void 0;
1107
1205
  this._checkCounter?.add(1);
1108
- const bridgeIntents = signedHydratedTransaction[1].filter(isBridgeIntent2);
1206
+ const bridgeIntents = signedHydratedTransaction[1].filter(isBridgeIntent3);
1109
1207
  if (bridgeIntents.length !== 1) {
1110
1208
  await this.pendingTransactions.delete(hash);
1111
1209
  return ret;
@@ -1128,7 +1226,7 @@ var EVMLiquidityBridgeTransactionCompletionMonitorSentinel = class extends Abstr
1128
1226
  * @returns Relays the intent in a blocking manner, returning the resulting BridgeDestinationObservation if successful
1129
1227
  */
1130
1228
  async relayBridgeIntentSync(bridgeIntent) {
1131
- const amount = hexToBigInt4(bridgeIntent.destAmount);
1229
+ const amount = hexToBigInt5(bridgeIntent.destAmount);
1132
1230
  const nonce = await this.wallet.getNonce();
1133
1231
  const srcAddress = getAddress2(bridgeIntent.srcAddress);
1134
1232
  const destAddress = getAddress2(bridgeIntent.destAddress);
@@ -1137,7 +1235,7 @@ var EVMLiquidityBridgeTransactionCompletionMonitorSentinel = class extends Abstr
1137
1235
  const transactionResponse = await confirmation?.getTransaction();
1138
1236
  const destConfirmation = asHex4(transactionResponse?.hash ?? "", true);
1139
1237
  const { schema, ...rest } = bridgeIntent;
1140
- const result = new PayloadBuilder11({
1238
+ const result = new PayloadBuilder12({
1141
1239
  schema: BridgeDestinationObservationSchema3
1142
1240
  }).fields({
1143
1241
  ...rest,
@@ -1148,8 +1246,8 @@ var EVMLiquidityBridgeTransactionCompletionMonitorSentinel = class extends Abstr
1148
1246
  };
1149
1247
 
1150
1248
  // src/modules/XL1TransactionCompletionMonitorSentinel/XL1TransactionCompletionMonitorSentinel.ts
1151
- import { assertEx as assertEx13, delay as delay2, isDefined as isDefined12, isNull as isNull2, isUndefined as isUndefined5 } from "@xylabs/sdk-js";
1152
- import { PayloadBuilder as PayloadBuilder12 } from "@xyo-network/payload-builder";
1249
+ import { assertEx as assertEx15, delay as delay2, isDefined as isDefined12, isNull as isNull2, isUndefined as isUndefined5 } from "@xylabs/sdk-js";
1250
+ import { PayloadBuilder as PayloadBuilder13 } from "@xyo-network/payload-builder";
1153
1251
  import { asSchema as asSchema2 } from "@xyo-network/payload-model";
1154
1252
  import { AbstractSentinel as AbstractSentinel2 } from "@xyo-network/sentinel-abstract";
1155
1253
  import { flattenHydratedTransaction as flattenHydratedTransaction2, flattenHydratedTransactions as flattenHydratedTransactions2, tryUnflattenHydratedTransaction as tryUnflattenHydratedTransaction2 } from "@xyo-network/xl1-sdk";
@@ -1170,16 +1268,16 @@ var XL1TransactionCompletionMonitorSentinel = class extends AbstractSentinel2 {
1170
1268
  _reportMutex = new Mutex2();
1171
1269
  _successCounter;
1172
1270
  get completedTransactions() {
1173
- return assertEx13(this.params.completedTransactions, () => "Completed transactions map is not defined");
1271
+ return assertEx15(this.params.completedTransactions, () => "Completed transactions map is not defined");
1174
1272
  }
1175
1273
  get jobCheckInterval() {
1176
1274
  return isDefined12(this.config.jobCheckInterval) ? this.config.jobCheckInterval : defaultJobCheckIntervalMs2;
1177
1275
  }
1178
1276
  get pendingTransactions() {
1179
- return assertEx13(this.params.pendingTransactions, () => "Pending transactions map is not defined");
1277
+ return assertEx15(this.params.pendingTransactions, () => "Pending transactions map is not defined");
1180
1278
  }
1181
1279
  get viewer() {
1182
- return assertEx13(this.params.viewer, () => "Viewer is not defined in params");
1280
+ return assertEx15(this.params.viewer, () => "Viewer is not defined in params");
1183
1281
  }
1184
1282
  async createHandler() {
1185
1283
  await super.createHandler();
@@ -1200,7 +1298,7 @@ var XL1TransactionCompletionMonitorSentinel = class extends AbstractSentinel2 {
1200
1298
  if (isDefined12(payloads) && payloads.length > 0) {
1201
1299
  const signedHydratedTransaction = tryUnflattenHydratedTransaction2(payloads);
1202
1300
  if (isDefined12(signedHydratedTransaction)) {
1203
- const txHash = await PayloadBuilder12.hash(signedHydratedTransaction[0]);
1301
+ const txHash = await PayloadBuilder13.hash(signedHydratedTransaction[0]);
1204
1302
  this.logger?.info(`Adding transaction ${signedHydratedTransaction[0]} with hash ${txHash} to pending transactions for monitoring`);
1205
1303
  await this.pendingTransactions.set(txHash, signedHydratedTransaction);
1206
1304
  return flattenHydratedTransaction2(signedHydratedTransaction);
@@ -1212,11 +1310,11 @@ var XL1TransactionCompletionMonitorSentinel = class extends AbstractSentinel2 {
1212
1310
  return [];
1213
1311
  }
1214
1312
  return await this._reportMutex.runExclusive(async () => {
1215
- const response2 = [];
1313
+ const response = [];
1216
1314
  if (isUndefined5(payloads) || payloads.length === 0) {
1217
1315
  await this.processAllTransactions();
1218
1316
  }
1219
- return response2;
1317
+ return response;
1220
1318
  });
1221
1319
  }
1222
1320
  }
@@ -1317,7 +1415,7 @@ var getModuleLocator = /* @__PURE__ */ __name(async (context) => {
1317
1415
  statusReporter
1318
1416
  }));
1319
1417
  const gateway = await locator.getInstance(XyoGatewayRunnerMoniker2);
1320
- const viewer = assertEx14(gateway.connection.viewer, () => "Gateway viewer is not defined");
1418
+ const viewer = assertEx16(gateway.connection.viewer, () => "Gateway viewer is not defined");
1321
1419
  const pendingXl1ToEthXl1BridgeIntentTransactions = await getIterableMap(config, "liquidity_bridge_xl1_to_eth_xl1_pending");
1322
1420
  const completedXl1ToEthXl1BridgeIntentTransactions = await getIterableMap(config, "liquidity_bridge_xl1_to_eth_xl1_completed");
1323
1421
  const xl1TransactionCompletionMonitorSentinelParams = {
@@ -1336,7 +1434,7 @@ var getModuleLocator = /* @__PURE__ */ __name(async (context) => {
1336
1434
  const provider = await initEvmProvider({
1337
1435
  config
1338
1436
  });
1339
- const bridgeAddress = config.bridge.remoteBridgeContractAddress;
1437
+ const bridgeAddress = config.actors.bridge.remoteBridgeContractAddress;
1340
1438
  const evmLiquidityBridgeTransactionCompletionMonitorSentinelParams = {
1341
1439
  bridgeAddress,
1342
1440
  completedTransactions: completedEthXl1BridgeTransactions,
@@ -1406,130 +1504,21 @@ var node_default = {
1406
1504
  // src/manifest/nodeManifest.ts
1407
1505
  var NodeManifest = node_default;
1408
1506
 
1409
- // src/manifest/private/index.ts
1410
- var PrivateChildManifests = [];
1411
-
1412
- // src/manifest/public/XL1.json
1413
- var XL1_default = {
1414
- $schema: "https://raw.githubusercontent.com/XYOracleNetwork/sdk-xyo-client-js/main/packages/manifest/src/schema.json",
1415
- nodes: [
1416
- {
1417
- config: {
1418
- accountPath: "2",
1419
- name: "XL1",
1420
- schema: "network.xyo.node.config"
1421
- },
1422
- modules: {
1423
- private: [
1424
- {
1425
- config: {
1426
- accountPath: "1/1'/1'",
1427
- automations: [
1428
- {
1429
- frequency: 6e4,
1430
- frequencyUnits: "millis",
1431
- schema: "network.xyo.automation.interval",
1432
- type: "interval"
1433
- }
1434
- ],
1435
- name: "XL1BridgeIntentTransactionCompletionMonitorSentinelIntervalSentinel",
1436
- schema: "network.xyo.sentinel.config",
1437
- synchronous: true,
1438
- tasks: [
1439
- {
1440
- mod: "XL1BridgeIntentTransactionCompletionMonitorSentinel",
1441
- endPoint: "report"
1442
- }
1443
- ]
1444
- }
1445
- }
1446
- ],
1447
- public: [
1448
- {
1449
- config: {
1450
- accountPath: "1/1/1",
1451
- name: "XL1BridgeIntentTransactionCompletionMonitorSentinel",
1452
- schema: "network.xyo.sentinel.chain.transaction.completion.monitor.config"
1453
- }
1454
- }
1455
- ]
1456
- }
1457
- }
1458
- ],
1459
- schema: "network.xyo.manifest"
1460
- };
1461
-
1462
- // src/manifest/public/Ethereum.json
1463
- var Ethereum_default = {
1464
- $schema: "https://raw.githubusercontent.com/XYOracleNetwork/sdk-xyo-client-js/main/packages/manifest/src/schema.json",
1465
- nodes: [
1466
- {
1467
- config: {
1468
- accountPath: "3",
1469
- name: "Ethereum",
1470
- schema: "network.xyo.node.config"
1471
- },
1472
- modules: {
1473
- private: [
1474
- {
1475
- config: {
1476
- accountPath: "1/1'/1'",
1477
- automations: [
1478
- {
1479
- frequency: 6e4,
1480
- frequencyUnits: "millis",
1481
- schema: "network.xyo.automation.interval",
1482
- type: "interval"
1483
- }
1484
- ],
1485
- name: "EVMLiquidityBridgeTransactionCompletionMonitorSentinelIntervalSentinel",
1486
- schema: "network.xyo.sentinel.config",
1487
- synchronous: true,
1488
- tasks: [
1489
- {
1490
- mod: "EVMLiquidityBridgeTransactionCompletionMonitorSentinel",
1491
- endPoint: "report"
1492
- }
1493
- ]
1494
- }
1495
- }
1496
- ],
1497
- public: [
1498
- {
1499
- config: {
1500
- accountPath: "1/1/1",
1501
- name: "EVMLiquidityBridgeTransactionCompletionMonitorSentinel",
1502
- schema: "network.xyo.sentinel.chain.evm.liquidity.bridge.transaction.completion.monitor.config"
1503
- }
1504
- }
1505
- ]
1506
- }
1507
- }
1508
- ],
1509
- schema: "network.xyo.manifest"
1510
- };
1511
-
1512
- // src/manifest/public/index.ts
1513
- var XL1NodeManifest = XL1_default;
1514
- var EthereumNodeManifest = Ethereum_default;
1515
- var PublicChildManifests = [
1516
- ...XL1NodeManifest.nodes,
1517
- ...EthereumNodeManifest.nodes
1518
- ];
1519
-
1520
1507
  // src/manifest/getNode.ts
1521
1508
  var getNode = /* @__PURE__ */ __name(async (context) => {
1522
- const { wallet } = context;
1523
- const { chainRpcApiUrl: endpoint } = context.config.bridge;
1509
+ const { config, wallet } = context;
1510
+ const { chainRpcApiUrl: endpoint } = config.actors.bridge;
1524
1511
  const transportFactory = /* @__PURE__ */ __name((schemas) => new HttpRpcTransport2(endpoint, schemas), "transportFactory");
1512
+ const signerAccount = await getBridgeWalletAccount(config);
1525
1513
  const locator = await buildJsonRpcProviderLocator2({
1514
+ signerAccount,
1526
1515
  transportFactory
1527
1516
  });
1528
1517
  const moduleLocator = await getModuleLocator({
1529
1518
  ...context,
1530
1519
  locator
1531
1520
  });
1532
- const wrapper = new ManifestWrapper(NodeManifest, wallet, moduleLocator, PublicChildManifests, PrivateChildManifests);
1521
+ const wrapper = new ManifestWrapper(NodeManifest, wallet, moduleLocator, [], []);
1533
1522
  const [node, ...childNodes] = await wrapper.loadNodes();
1534
1523
  if (childNodes?.length > 0) {
1535
1524
  await Promise.all(childNodes.map((childNode) => node.register(childNode)));
@@ -1539,38 +1528,16 @@ var getNode = /* @__PURE__ */ __name(async (context) => {
1539
1528
  }, "getNode");
1540
1529
 
1541
1530
  // src/manifest/getServices.ts
1531
+ import { assertEx as assertEx17, isDefined as isDefined14 } from "@xylabs/sdk-js";
1532
+ import { initEvmProvider as initEvmProvider2 } from "@xyo-network/chain-orchestration";
1533
+ import { BridgeableToken__factory, LiquidityPoolBridge__factory as LiquidityPoolBridge__factory2 } from "@xyo-network/typechain";
1534
+ import { HDWallet as HDWallet3 } from "@xyo-network/wallet";
1535
+ import { getAddress as getAddress3, Wallet as Wallet2 } from "ethers";
1536
+
1537
+ // src/manifest/getIterableMap.ts
1542
1538
  import { BaseMongoSdk as BaseMongoSdk2 } from "@xylabs/mongo";
1543
- import { assertEx as assertEx15, isDefined as isDefined14 } from "@xylabs/sdk-js";
1544
1539
  import { MongoMap as MongoMap2 } from "@xyo-network/chain-protocol";
1545
- import { initEvmProvider as initEvmProvider2 } from "@xyo-network/chain-services";
1546
- import { LiquidityPoolBridge__factory as LiquidityPoolBridge__factory2 } from "@xyo-network/typechain";
1547
- import { HDWallet as HDWallet3 } from "@xyo-network/wallet";
1548
1540
  import { hasMongoConfig as hasMongoConfig2, mapToMapType as mapToMapType2 } from "@xyo-network/xl1-sdk";
1549
- import { getAddress as getAddress3, Wallet as Wallet2 } from "ethers";
1550
- var getServices = /* @__PURE__ */ __name(async (context) => {
1551
- const { config } = context;
1552
- const gateway = await getGateway(config);
1553
- const ethTxStateMap = await getIterableMap2(config, "liquidity_bridge_xl1_to_eth_eth_tx_state");
1554
- const xl1TxStateMap = await getIterableMap2(config, "liquidity_bridge_xl1_to_eth_xl1_tx_state");
1555
- const provider = await initEvmProvider2({
1556
- config
1557
- });
1558
- const { remoteBridgeContractAddress, remoteChainWalletPrivateKey, mnemonic } = config.bridge;
1559
- const account = isDefined14(mnemonic) ? await HDWallet3.fromPhrase(mnemonic) : await HDWallet3.random();
1560
- const wallet = new Wallet2(remoteChainWalletPrivateKey, provider);
1561
- const bridge = LiquidityPoolBridge__factory2.connect(getAddress3(remoteBridgeContractAddress), wallet);
1562
- const bridgeOwner = await bridge.owner();
1563
- assertEx15(bridgeOwner.toLowerCase() === wallet.address.toLowerCase(), () => "Wallet is not the owner of the bridge contract");
1564
- return {
1565
- account,
1566
- bridge,
1567
- ethTxStateMap,
1568
- gateway,
1569
- provider,
1570
- wallet,
1571
- xl1TxStateMap
1572
- };
1573
- }, "getServices");
1574
1541
  var getIterableMap2 = /* @__PURE__ */ __name(async (config, collection) => {
1575
1542
  const mongoConfig = config.storage?.mongo;
1576
1543
  if (hasMongoConfig2(mongoConfig)) {
@@ -1599,12 +1566,46 @@ var getIterableMap2 = /* @__PURE__ */ __name(async (config, collection) => {
1599
1566
  }
1600
1567
  }, "getIterableMap");
1601
1568
 
1569
+ // src/manifest/getServices.ts
1570
+ var getServices = /* @__PURE__ */ __name(async (context) => {
1571
+ const { config } = context;
1572
+ const gateway = await getGateway(config);
1573
+ const ethTxStateMap = await getIterableMap2(config, "liquidity_bridge_xl1_to_eth_eth_tx_state");
1574
+ const xl1TxStateMap = await getIterableMap2(config, "liquidity_bridge_xl1_to_eth_xl1_tx_state");
1575
+ const provider = await initEvmProvider2({
1576
+ config
1577
+ });
1578
+ const { remoteBridgeContractAddress, remoteChainWalletPrivateKey, remoteTokenAddress, mnemonic } = config.actors.bridge;
1579
+ const account = isDefined14(mnemonic) ? await HDWallet3.fromPhrase(mnemonic) : await HDWallet3.random();
1580
+ const wallet = new Wallet2(remoteChainWalletPrivateKey, provider);
1581
+ const bridgeableToken = BridgeableToken__factory.connect(getAddress3(remoteTokenAddress), wallet);
1582
+ const bridge = LiquidityPoolBridge__factory2.connect(getAddress3(remoteBridgeContractAddress), wallet);
1583
+ const bridgeOwner = await bridge.owner();
1584
+ assertEx17(bridgeOwner.toLowerCase() === wallet.address.toLowerCase(), () => "Wallet is not the owner of the bridge contract");
1585
+ return {
1586
+ account,
1587
+ bridge,
1588
+ bridgeableToken,
1589
+ ethTxStateMap,
1590
+ gateway,
1591
+ provider,
1592
+ wallet,
1593
+ xl1TxStateMap
1594
+ };
1595
+ }, "getServices");
1596
+
1597
+ // src/server/addWorkers.ts
1598
+ var addWorkers = /* @__PURE__ */ __name((config, services) => {
1599
+ const connection2 = getConnection(config);
1600
+ createWorkers(connection2, services);
1601
+ }, "addWorkers");
1602
+
1602
1603
  // src/server/server.ts
1603
1604
  var hostname = "::";
1604
1605
  var getSeedPhrase = /* @__PURE__ */ __name(async (bios, config, logger) => {
1605
1606
  const storedSeedPhrase = await bios.seedPhraseStore.get("os");
1606
1607
  logger?.debug(`[Bridge] Stored mnemonic: ${storedSeedPhrase}`);
1607
- const { mnemonic } = config.api;
1608
+ const { mnemonic } = config.actors.api;
1608
1609
  if (isString(storedSeedPhrase) && isString(mnemonic)) {
1609
1610
  logger?.warn("[Bridge] Stored mnemonic does not match supplied. Updating stored mnemonic to supplied.");
1610
1611
  await bios.seedPhraseStore.set("os", mnemonic);
@@ -1619,11 +1620,11 @@ var getSeedPhrase = /* @__PURE__ */ __name(async (bios, config, logger) => {
1619
1620
  }
1620
1621
  await bios.seedPhraseStore.set("os", seedPhrase);
1621
1622
  }
1622
- return assertEx16(await bios.seedPhraseStore.get("os"), () => "Unable to acquire mnemonic from bios");
1623
+ return assertEx18(await bios.seedPhraseStore.get("os"), () => "Unable to acquire mnemonic from bios");
1623
1624
  }, "getSeedPhrase");
1624
1625
  var getServer = /* @__PURE__ */ __name(async (context) => {
1625
1626
  const { logger, config } = context;
1626
- const { port, mnemonic } = config.bridge;
1627
+ const { port, mnemonic } = config.actors.bridge;
1627
1628
  const bios = await boot();
1628
1629
  const seedPhrase = isDefined15(mnemonic) ? mnemonic : await getSeedPhrase(bios, config, logger);
1629
1630
  const wallet = await HDWallet4.fromPhrase(seedPhrase);
@@ -1634,10 +1635,11 @@ var getServer = /* @__PURE__ */ __name(async (context) => {
1634
1635
  };
1635
1636
  const node = context.node ?? await getNode(nodeContext);
1636
1637
  const app = getApp(node, config);
1637
- app.services = await getServices({
1638
+ const services = await getServices({
1638
1639
  config,
1639
1640
  logger
1640
1641
  });
1642
+ addWorkers(config, services);
1641
1643
  const server = app.listen(port, hostname, () => logger?.log(`[Bridge] Server listening at http://${hostname}:${port}`));
1642
1644
  server.setTimeout(2e4);
1643
1645
  return server;