@atomiqlabs/chain-starknet 1.0.9 → 2.0.0-beta.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 (121) hide show
  1. package/dist/index.d.ts +13 -9
  2. package/dist/index.js +13 -9
  3. package/dist/starknet/StarknetChainType.d.ts +6 -2
  4. package/dist/starknet/StarknetInitializer.d.ts +3 -2
  5. package/dist/starknet/StarknetInitializer.js +17 -6
  6. package/dist/starknet/btcrelay/StarknetBtcRelay.d.ts +28 -7
  7. package/dist/starknet/btcrelay/StarknetBtcRelay.js +75 -20
  8. package/dist/starknet/{base → chain}/StarknetAction.d.ts +2 -2
  9. package/dist/starknet/chain/StarknetChainInterface.d.ts +52 -0
  10. package/dist/starknet/chain/StarknetChainInterface.js +91 -0
  11. package/dist/starknet/{base → chain}/StarknetModule.d.ts +3 -3
  12. package/dist/starknet/{base → chain}/modules/StarknetAddresses.d.ts +1 -1
  13. package/dist/starknet/{base → chain}/modules/StarknetAddresses.js +1 -1
  14. package/dist/starknet/{base → chain}/modules/StarknetSignatures.d.ts +2 -2
  15. package/dist/starknet/{base → chain}/modules/StarknetTokens.js +2 -1
  16. package/dist/starknet/{base → chain}/modules/StarknetTransactions.d.ts +7 -1
  17. package/dist/starknet/{base → chain}/modules/StarknetTransactions.js +45 -16
  18. package/dist/starknet/contract/StarknetContractBase.d.ts +5 -5
  19. package/dist/starknet/contract/StarknetContractBase.js +5 -7
  20. package/dist/starknet/contract/StarknetContractModule.d.ts +8 -0
  21. package/dist/starknet/contract/StarknetContractModule.js +11 -0
  22. package/dist/starknet/contract/modules/StarknetContractEvents.d.ts +15 -4
  23. package/dist/starknet/contract/modules/StarknetContractEvents.js +26 -6
  24. package/dist/starknet/events/StarknetChainEvents.d.ts +3 -1
  25. package/dist/starknet/events/StarknetChainEvents.js +9 -9
  26. package/dist/starknet/events/StarknetChainEventsBrowser.d.ts +23 -6
  27. package/dist/starknet/events/StarknetChainEventsBrowser.js +104 -13
  28. package/dist/starknet/provider/RpcProviderWithRetries.d.ts +21 -0
  29. package/dist/starknet/provider/RpcProviderWithRetries.js +32 -0
  30. package/dist/starknet/spv_swap/SpvVaultContractAbi.d.ts +488 -0
  31. package/dist/starknet/spv_swap/SpvVaultContractAbi.js +656 -0
  32. package/dist/starknet/spv_swap/StarknetSpvVaultContract.d.ts +65 -0
  33. package/dist/starknet/spv_swap/StarknetSpvVaultContract.js +372 -0
  34. package/dist/starknet/spv_swap/StarknetSpvVaultData.d.ts +49 -0
  35. package/dist/starknet/spv_swap/StarknetSpvVaultData.js +144 -0
  36. package/dist/starknet/spv_swap/StarknetSpvWithdrawalData.d.ts +24 -0
  37. package/dist/starknet/spv_swap/StarknetSpvWithdrawalData.js +61 -0
  38. package/dist/starknet/swaps/StarknetSwapContract.d.ts +4 -22
  39. package/dist/starknet/swaps/StarknetSwapContract.js +23 -80
  40. package/dist/starknet/swaps/StarknetSwapModule.d.ts +6 -5
  41. package/dist/starknet/swaps/StarknetSwapModule.js +5 -6
  42. package/dist/starknet/swaps/handlers/IHandler.d.ts +2 -2
  43. package/dist/starknet/swaps/handlers/claim/ClaimHandlers.d.ts +1 -1
  44. package/dist/starknet/swaps/handlers/claim/HashlockClaimHandler.d.ts +2 -2
  45. package/dist/starknet/swaps/handlers/claim/btc/BitcoinNoncedOutputClaimHandler.d.ts +2 -2
  46. package/dist/starknet/swaps/handlers/claim/btc/BitcoinOutputClaimHandler.d.ts +2 -2
  47. package/dist/starknet/swaps/handlers/claim/btc/BitcoinTxIdClaimHandler.d.ts +2 -2
  48. package/dist/starknet/swaps/handlers/claim/btc/IBitcoinClaimHandler.d.ts +2 -21
  49. package/dist/starknet/swaps/handlers/claim/btc/IBitcoinClaimHandler.js +7 -41
  50. package/dist/starknet/swaps/handlers/refund/TimelockRefundHandler.d.ts +2 -2
  51. package/dist/starknet/swaps/modules/StarknetLpVault.d.ts +1 -1
  52. package/dist/starknet/swaps/modules/StarknetLpVault.js +9 -9
  53. package/dist/starknet/swaps/modules/StarknetSwapClaim.d.ts +1 -1
  54. package/dist/starknet/swaps/modules/StarknetSwapClaim.js +8 -8
  55. package/dist/starknet/swaps/modules/StarknetSwapInit.d.ts +1 -1
  56. package/dist/starknet/swaps/modules/StarknetSwapInit.js +9 -9
  57. package/dist/starknet/swaps/modules/StarknetSwapRefund.d.ts +1 -3
  58. package/dist/starknet/swaps/modules/StarknetSwapRefund.js +8 -11
  59. package/dist/starknet/wallet/StarknetSigner.js +1 -1
  60. package/dist/utils/Utils.d.ts +2 -2
  61. package/dist/utils/Utils.js +3 -1
  62. package/package.json +2 -2
  63. package/src/index.ts +15 -9
  64. package/src/starknet/StarknetChainType.ts +10 -2
  65. package/src/starknet/StarknetInitializer.ts +23 -7
  66. package/src/starknet/btcrelay/StarknetBtcRelay.ts +104 -30
  67. package/src/starknet/{base → chain}/StarknetAction.ts +3 -3
  68. package/src/starknet/chain/StarknetChainInterface.ts +149 -0
  69. package/src/starknet/{base → chain}/StarknetModule.ts +3 -3
  70. package/src/starknet/{base → chain}/modules/StarknetAddresses.ts +1 -1
  71. package/src/starknet/{base → chain}/modules/StarknetSignatures.ts +2 -2
  72. package/src/starknet/{base → chain}/modules/StarknetTokens.ts +2 -1
  73. package/src/starknet/{base → chain}/modules/StarknetTransactions.ts +43 -18
  74. package/src/starknet/contract/StarknetContractBase.ts +9 -12
  75. package/src/starknet/contract/StarknetContractModule.ts +16 -0
  76. package/src/starknet/contract/modules/StarknetContractEvents.ts +33 -7
  77. package/src/starknet/events/StarknetChainEvents.ts +15 -11
  78. package/src/starknet/events/StarknetChainEventsBrowser.ts +157 -26
  79. package/src/starknet/provider/RpcProviderWithRetries.ts +43 -0
  80. package/src/starknet/spv_swap/SpvVaultContractAbi.ts +656 -0
  81. package/src/starknet/spv_swap/StarknetSpvVaultContract.ts +475 -0
  82. package/src/starknet/spv_swap/StarknetSpvVaultData.ts +194 -0
  83. package/src/starknet/spv_swap/StarknetSpvWithdrawalData.ts +68 -0
  84. package/src/starknet/swaps/StarknetSwapContract.ts +28 -116
  85. package/src/starknet/swaps/StarknetSwapModule.ts +8 -8
  86. package/src/starknet/swaps/handlers/IHandler.ts +2 -2
  87. package/src/starknet/swaps/handlers/claim/ClaimHandlers.ts +1 -1
  88. package/src/starknet/swaps/handlers/claim/HashlockClaimHandler.ts +2 -2
  89. package/src/starknet/swaps/handlers/claim/btc/BitcoinNoncedOutputClaimHandler.ts +2 -2
  90. package/src/starknet/swaps/handlers/claim/btc/BitcoinOutputClaimHandler.ts +2 -2
  91. package/src/starknet/swaps/handlers/claim/btc/BitcoinTxIdClaimHandler.ts +2 -2
  92. package/src/starknet/swaps/handlers/claim/btc/IBitcoinClaimHandler.ts +12 -61
  93. package/src/starknet/swaps/handlers/refund/TimelockRefundHandler.ts +2 -2
  94. package/src/starknet/swaps/modules/StarknetLpVault.ts +10 -10
  95. package/src/starknet/swaps/modules/StarknetSwapClaim.ts +9 -9
  96. package/src/starknet/swaps/modules/StarknetSwapInit.ts +10 -10
  97. package/src/starknet/swaps/modules/StarknetSwapRefund.ts +9 -13
  98. package/src/starknet/wallet/StarknetSigner.ts +1 -1
  99. package/src/utils/Utils.ts +4 -3
  100. package/dist/starknet/base/StarknetBase.d.ts +0 -34
  101. package/dist/starknet/base/StarknetBase.js +0 -29
  102. package/src/starknet/base/StarknetBase.ts +0 -56
  103. /package/dist/starknet/{base → chain}/StarknetAction.js +0 -0
  104. /package/dist/starknet/{base → chain}/StarknetModule.js +0 -0
  105. /package/dist/starknet/{base → chain}/modules/ERC20Abi.d.ts +0 -0
  106. /package/dist/starknet/{base → chain}/modules/ERC20Abi.js +0 -0
  107. /package/dist/starknet/{base → chain}/modules/StarknetAccounts.d.ts +0 -0
  108. /package/dist/starknet/{base → chain}/modules/StarknetAccounts.js +0 -0
  109. /package/dist/starknet/{base → chain}/modules/StarknetBlocks.d.ts +0 -0
  110. /package/dist/starknet/{base → chain}/modules/StarknetBlocks.js +0 -0
  111. /package/dist/starknet/{base → chain}/modules/StarknetEvents.d.ts +0 -0
  112. /package/dist/starknet/{base → chain}/modules/StarknetEvents.js +0 -0
  113. /package/dist/starknet/{base → chain}/modules/StarknetFees.d.ts +0 -0
  114. /package/dist/starknet/{base → chain}/modules/StarknetFees.js +0 -0
  115. /package/dist/starknet/{base → chain}/modules/StarknetSignatures.js +0 -0
  116. /package/dist/starknet/{base → chain}/modules/StarknetTokens.d.ts +0 -0
  117. /package/src/starknet/{base → chain}/modules/ERC20Abi.ts +0 -0
  118. /package/src/starknet/{base → chain}/modules/StarknetAccounts.ts +0 -0
  119. /package/src/starknet/{base → chain}/modules/StarknetBlocks.ts +0 -0
  120. /package/src/starknet/{base → chain}/modules/StarknetEvents.ts +0 -0
  121. /package/src/starknet/{base → chain}/modules/StarknetFees.ts +0 -0
@@ -10,14 +10,15 @@ const starknet_1 = require("starknet");
10
10
  * rely purely on events
11
11
  */
12
12
  class StarknetChainEventsBrowser {
13
- constructor(starknetSwapContract, pollIntervalSeconds = 5) {
13
+ constructor(chainInterface, starknetSwapContract, starknetSpvVaultContract, pollIntervalSeconds = 5) {
14
14
  this.listeners = [];
15
15
  this.eventListeners = [];
16
16
  this.logger = (0, Utils_1.getLogger)("StarknetChainEventsBrowser: ");
17
17
  this.initFunctionName = "initialize";
18
18
  this.initEntryPointSelector = BigInt(starknet_1.hash.starknetKeccak(this.initFunctionName));
19
- this.provider = starknetSwapContract.provider;
19
+ this.provider = chainInterface.provider;
20
20
  this.starknetSwapContract = starknetSwapContract;
21
+ this.starknetSpvVaultContract = starknetSpvVaultContract;
21
22
  this.pollIntervalSeconds = pollIntervalSeconds;
22
23
  }
23
24
  findInitSwapData(call, escrowHash, claimHandler) {
@@ -90,6 +91,55 @@ class StarknetChainEventsBrowser {
90
91
  " witnessResult: " + witnessResult + " escrowHash: " + escrowHash);
91
92
  return new base_1.ClaimEvent(escrowHash, witnessResult);
92
93
  }
94
+ parseSpvOpenEvent(event) {
95
+ const owner = (0, Utils_1.toHex)(event.params.owner);
96
+ const vaultId = (0, Utils_1.toBigInt)(event.params.vault_id);
97
+ const btcTxId = (0, Utils_1.bigNumberishToBuffer)(event.params.btc_tx_hash, 32).reverse().toString("hex");
98
+ const vout = Number((0, Utils_1.toBigInt)(event.params.vout));
99
+ this.logger.debug("SpvOpenEvent owner: " + owner + " vaultId: " + vaultId + " utxo: " + btcTxId + ":" + vout);
100
+ return new base_1.SpvVaultOpenEvent(owner, vaultId, btcTxId, vout);
101
+ }
102
+ parseSpvDepositEvent(event) {
103
+ const owner = (0, Utils_1.toHex)(event.params.owner);
104
+ const vaultId = (0, Utils_1.toBigInt)(event.params.vault_id);
105
+ const amounts = [(0, Utils_1.toBigInt)(event.params.amounts["0"]), (0, Utils_1.toBigInt)(event.params.amounts["1"])];
106
+ const depositCount = Number((0, Utils_1.toBigInt)(event.params.deposit_count));
107
+ this.logger.debug("SpvDepositEvent owner: " + owner + " vaultId: " + vaultId + " depositCount: " + depositCount + " amounts: ", amounts);
108
+ return new base_1.SpvVaultDepositEvent(owner, vaultId, amounts, depositCount);
109
+ }
110
+ parseSpvFrontEvent(event) {
111
+ const owner = (0, Utils_1.toHex)(event.params.owner);
112
+ const vaultId = (0, Utils_1.toBigInt)(event.params.vault_id);
113
+ const btcTxId = (0, Utils_1.bigNumberishToBuffer)(event.params.btc_tx_hash, 32).reverse().toString("hex");
114
+ const recipient = (0, Utils_1.toHex)(event.params.recipient);
115
+ const executionHash = (0, Utils_1.toHex)(event.params.execution_hash);
116
+ const amounts = [(0, Utils_1.toBigInt)(event.params.amounts["0"]), (0, Utils_1.toBigInt)(event.params.amounts["1"])];
117
+ const frontingAddress = (0, Utils_1.toHex)(event.params.caller);
118
+ this.logger.debug("SpvFrontEvent owner: " + owner + " vaultId: " + vaultId + " btcTxId: " + btcTxId +
119
+ " recipient: " + recipient + " frontedBy: " + frontingAddress + " amounts: ", amounts);
120
+ return new base_1.SpvVaultFrontEvent(owner, vaultId, btcTxId, recipient, executionHash, amounts, frontingAddress);
121
+ }
122
+ parseSpvClaimEvent(event) {
123
+ const owner = (0, Utils_1.toHex)(event.params.owner);
124
+ const vaultId = (0, Utils_1.toBigInt)(event.params.vault_id);
125
+ const btcTxId = (0, Utils_1.bigNumberishToBuffer)(event.params.btc_tx_hash, 32).reverse().toString("hex");
126
+ const recipient = (0, Utils_1.toHex)(event.params.recipient);
127
+ const executionHash = (0, Utils_1.toHex)(event.params.execution_hash);
128
+ const amounts = [(0, Utils_1.toBigInt)(event.params.amounts["0"]), (0, Utils_1.toBigInt)(event.params.amounts["1"])];
129
+ const caller = (0, Utils_1.toHex)(event.params.caller);
130
+ const frontingAddress = (0, Utils_1.toHex)(event.params.fronting_address);
131
+ const withdrawCount = Number((0, Utils_1.toBigInt)(event.params.withdraw_count));
132
+ this.logger.debug("SpvClaimEvent owner: " + owner + " vaultId: " + vaultId + " btcTxId: " + btcTxId + " withdrawCount: " + withdrawCount +
133
+ " recipient: " + recipient + " frontedBy: " + frontingAddress + " claimedBy: " + caller + " amounts: ", amounts);
134
+ return new base_1.SpvVaultClaimEvent(owner, vaultId, btcTxId, recipient, executionHash, amounts, caller, frontingAddress, withdrawCount);
135
+ }
136
+ parseSpvCloseEvent(event) {
137
+ const owner = (0, Utils_1.toHex)(event.params.owner);
138
+ const vaultId = (0, Utils_1.toBigInt)(event.params.vault_id);
139
+ const btcTxId = (0, Utils_1.bigNumberishToBuffer)(event.params.btc_tx_hash, 32).reverse().toString("hex");
140
+ const error = (0, Utils_1.bigNumberishToBuffer)(event.params.error).toString();
141
+ return new base_1.SpvVaultCloseEvent(owner, vaultId, btcTxId, error);
142
+ }
93
143
  /**
94
144
  * Processes event as received from the chain, parses it & calls event listeners
95
145
  *
@@ -121,6 +171,21 @@ class StarknetChainEventsBrowser {
121
171
  case "escrow_manager::events::Initialize":
122
172
  parsedEvent = this.parseInitializeEvent(event);
123
173
  break;
174
+ case "spv_swap_vault::events::Opened":
175
+ parsedEvent = this.parseSpvOpenEvent(event);
176
+ break;
177
+ case "spv_swap_vault::events::Deposited":
178
+ parsedEvent = this.parseSpvDepositEvent(event);
179
+ break;
180
+ case "spv_swap_vault::events::Fronted":
181
+ parsedEvent = this.parseSpvFrontEvent(event);
182
+ break;
183
+ case "spv_swap_vault::events::Claimed":
184
+ parsedEvent = this.parseSpvClaimEvent(event);
185
+ break;
186
+ case "spv_swap_vault::events::Closed":
187
+ parsedEvent = this.parseSpvCloseEvent(event);
188
+ break;
124
189
  }
125
190
  const timestamp = event.blockNumber == null ? pendingEventTime : await getBlockTimestamp(event.blockNumber);
126
191
  parsedEvent.meta = {
@@ -134,26 +199,52 @@ class StarknetChainEventsBrowser {
134
199
  await listener(parsedEvents);
135
200
  }
136
201
  }
137
- async checkEvents(lastBlockNumber, lastTxHash) {
138
- const currentBlock = await this.provider.getBlockWithTxHashes("latest");
202
+ async checkEventsEcrowManager(lastTxHash, lastBlockNumber, currentBlock) {
139
203
  const currentBlockNumber = currentBlock.block_number;
140
204
  lastBlockNumber ?? (lastBlockNumber = currentBlockNumber);
141
205
  const logStartHeight = currentBlockNumber > lastBlockNumber ? lastBlockNumber + 1 : lastBlockNumber;
142
- this.logger.debug("checkEvents(): Requesting logs: " + logStartHeight + "...pending");
143
- const events = await this.starknetSwapContract.Events.getContractBlockEvents(["escrow_manager::events::Initialize", "escrow_manager::events::Claim", "escrow_manager::events::Refund"], [], logStartHeight, null);
206
+ this.logger.debug("checkEvents(EscrowManager): Requesting logs: " + logStartHeight + "...pending");
207
+ let events = await this.starknetSwapContract.Events.getContractBlockEvents(["escrow_manager::events::Initialize", "escrow_manager::events::Claim", "escrow_manager::events::Refund"], [], logStartHeight, null);
144
208
  if (lastTxHash != null) {
145
209
  const latestProcessedEventIndex = (0, Utils_1.findLastIndex)(events, val => val.txHash === lastTxHash);
146
210
  if (latestProcessedEventIndex !== -1) {
147
211
  events.splice(0, latestProcessedEventIndex + 1);
148
- this.logger.debug("checkEvents(): Splicing processed events, resulting size: " + events.length);
212
+ this.logger.debug("checkEvents(EscrowManager): Splicing processed events, resulting size: " + events.length);
149
213
  }
150
214
  }
151
215
  if (events.length > 0) {
152
- await this.processEvents(events, currentBlockNumber, currentBlock.timestamp, Math.floor(Date.now() / 1000));
216
+ await this.processEvents(events, currentBlock?.block_number, currentBlock?.timestamp, Math.floor(Date.now() / 1000));
153
217
  lastTxHash = events[events.length - 1].txHash;
154
218
  }
219
+ return lastTxHash;
220
+ }
221
+ async checkEventsSpvVaults(lastTxHash, lastBlockNumber, currentBlock) {
222
+ const currentBlockNumber = currentBlock.block_number;
223
+ lastBlockNumber ?? (lastBlockNumber = currentBlockNumber);
224
+ const logStartHeight = currentBlockNumber > lastBlockNumber ? lastBlockNumber + 1 : lastBlockNumber;
225
+ this.logger.debug("checkEvents(SpvVaults): Requesting logs: " + logStartHeight + "...pending");
226
+ let events = await this.starknetSpvVaultContract.Events.getContractBlockEvents(["spv_swap_vault::events::Opened", "spv_swap_vault::events::Deposited", "spv_swap_vault::events::Closed", "spv_swap_vault::events::Fronted", "spv_swap_vault::events::Claimed"], [], logStartHeight, null);
227
+ if (lastTxHash != null) {
228
+ const latestProcessedEventIndex = (0, Utils_1.findLastIndex)(events, val => val.txHash === lastTxHash);
229
+ if (latestProcessedEventIndex !== -1) {
230
+ events.splice(0, latestProcessedEventIndex + 1);
231
+ this.logger.debug("checkEvents(SpvVaults): Splicing processed events, resulting size: " + events.length);
232
+ }
233
+ }
234
+ if (events.length > 0) {
235
+ await this.processEvents(events, currentBlock?.block_number, currentBlock?.timestamp, Math.floor(Date.now() / 1000));
236
+ lastTxHash = events[events.length - 1].txHash;
237
+ }
238
+ return lastTxHash;
239
+ }
240
+ async checkEvents(lastBlockNumber, lastTxHashes) {
241
+ lastTxHashes ?? (lastTxHashes = []);
242
+ const currentBlock = await this.provider.getBlockWithTxHashes("latest");
243
+ const currentBlockNumber = currentBlock.block_number;
244
+ lastTxHashes[0] = await this.checkEventsEcrowManager(lastTxHashes[0], lastBlockNumber, currentBlock);
245
+ lastTxHashes[1] = await this.checkEventsSpvVaults(lastTxHashes[1], lastBlockNumber, currentBlock);
155
246
  return {
156
- txHash: lastTxHash,
247
+ txHashes: lastTxHashes,
157
248
  blockNumber: currentBlockNumber
158
249
  };
159
250
  }
@@ -162,15 +253,15 @@ class StarknetChainEventsBrowser {
162
253
  *
163
254
  * @protected
164
255
  */
165
- async setupPoll(lastBlockNumber, lastTxHash, saveLatestProcessedBlockNumber) {
256
+ async setupPoll(lastBlockNumber, lastTxHashes, saveLatestProcessedBlockNumber) {
166
257
  this.stopped = false;
167
258
  let func;
168
259
  func = async () => {
169
- await this.checkEvents(lastBlockNumber, lastTxHash).then(({ blockNumber, txHash }) => {
260
+ await this.checkEvents(lastBlockNumber, lastTxHashes).then(({ blockNumber, txHashes }) => {
170
261
  lastBlockNumber = blockNumber;
171
- lastTxHash = txHash;
262
+ lastTxHashes = txHashes;
172
263
  if (saveLatestProcessedBlockNumber != null)
173
- return saveLatestProcessedBlockNumber(blockNumber, lastTxHash);
264
+ return saveLatestProcessedBlockNumber(blockNumber, lastTxHashes);
174
265
  }).catch(e => {
175
266
  this.logger.error("setupPoll(): Failed to fetch starknet log: ", e);
176
267
  });
@@ -0,0 +1,21 @@
1
+ import { RpcChannel, RpcProvider, RpcProviderOptions } from "starknet";
2
+ export declare class RpcChannelWithRetries extends RpcChannel {
3
+ readonly retryPolicy?: {
4
+ maxRetries?: number;
5
+ delay?: number;
6
+ exponential?: boolean;
7
+ };
8
+ constructor(options?: RpcProviderOptions, retryPolicy?: {
9
+ maxRetries?: number;
10
+ delay?: number;
11
+ exponential?: boolean;
12
+ });
13
+ protected fetchEndpoint(method: any, params?: any): Promise<any>;
14
+ }
15
+ export declare class RpcProviderWithRetries extends RpcProvider {
16
+ constructor(options?: RpcProviderOptions, retryPolicy?: {
17
+ maxRetries?: number;
18
+ delay?: number;
19
+ exponential?: boolean;
20
+ });
21
+ }
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RpcProviderWithRetries = exports.RpcChannelWithRetries = void 0;
4
+ const starknet_1 = require("starknet");
5
+ const Utils_1 = require("../../utils/Utils");
6
+ class RpcChannelWithRetries extends starknet_1.RpcChannel {
7
+ constructor(options, retryPolicy) {
8
+ super(options);
9
+ this.retryPolicy = retryPolicy;
10
+ }
11
+ fetchEndpoint(method, params) {
12
+ return (0, Utils_1.tryWithRetries)(() => super.fetchEndpoint(method, params), this.retryPolicy, e => {
13
+ if (!e.message.startsWith("RPC: "))
14
+ return false;
15
+ const arr = e.message.split("\n");
16
+ const errorCode = parseInt(arr[arr.length - 1]);
17
+ if (isNaN(errorCode))
18
+ return false;
19
+ if (errorCode < 0)
20
+ return false; //Not defined error, e.g. Rate limit (-32097)
21
+ return true;
22
+ });
23
+ }
24
+ }
25
+ exports.RpcChannelWithRetries = RpcChannelWithRetries;
26
+ class RpcProviderWithRetries extends starknet_1.RpcProvider {
27
+ constructor(options, retryPolicy) {
28
+ super(options);
29
+ this.channel = new RpcChannelWithRetries({ ...options, waitMode: false }, retryPolicy);
30
+ }
31
+ }
32
+ exports.RpcProviderWithRetries = RpcProviderWithRetries;