@atomiqlabs/chain-starknet 1.0.9 → 2.0.0-beta.0

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 +106 -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 +159 -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,54 @@ 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) {
203
+ const currentBlockNumber = currentBlock.block_number;
204
+ lastBlockNumber ?? (lastBlockNumber = currentBlockNumber);
205
+ const logStartHeight = currentBlockNumber > lastBlockNumber ? lastBlockNumber + 1 : lastBlockNumber;
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);
208
+ if (lastTxHash != null) {
209
+ const latestProcessedEventIndex = (0, Utils_1.findLastIndex)(events, val => val.txHash === lastTxHash);
210
+ if (latestProcessedEventIndex !== -1) {
211
+ events.splice(0, latestProcessedEventIndex + 1);
212
+ this.logger.debug("checkEvents(EscrowManager): Splicing processed events, resulting size: " + events.length);
213
+ }
214
+ }
215
+ if (events.length > 0) {
216
+ await this.processEvents(events, currentBlock?.block_number, currentBlock?.timestamp, Math.floor(Date.now() / 1000));
217
+ lastTxHash = events[events.length - 1].txHash;
218
+ }
219
+ return lastTxHash;
220
+ }
221
+ async checkEventsSpvVaults(lastTxHash, lastBlockNumber, currentBlock) {
139
222
  const currentBlockNumber = currentBlock.block_number;
140
223
  lastBlockNumber ?? (lastBlockNumber = currentBlockNumber);
141
224
  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);
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);
144
227
  if (lastTxHash != null) {
145
228
  const latestProcessedEventIndex = (0, Utils_1.findLastIndex)(events, val => val.txHash === lastTxHash);
146
229
  if (latestProcessedEventIndex !== -1) {
147
230
  events.splice(0, latestProcessedEventIndex + 1);
148
- this.logger.debug("checkEvents(): Splicing processed events, resulting size: " + events.length);
231
+ this.logger.debug("checkEvents(SpvVaults): Splicing processed events, resulting size: " + events.length);
149
232
  }
150
233
  }
151
234
  if (events.length > 0) {
152
- await this.processEvents(events, currentBlockNumber, currentBlock.timestamp, Math.floor(Date.now() / 1000));
235
+ await this.processEvents(events, currentBlock?.block_number, currentBlock?.timestamp, Math.floor(Date.now() / 1000));
153
236
  lastTxHash = events[events.length - 1].txHash;
154
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
+ if (lastBlockNumber != null && currentBlockNumber > lastBlockNumber) {
245
+ lastTxHashes[0] = await this.checkEventsEcrowManager(lastTxHashes[0], lastBlockNumber, currentBlock);
246
+ lastTxHashes[1] = await this.checkEventsSpvVaults(lastTxHashes[1], lastBlockNumber, currentBlock);
247
+ }
155
248
  return {
156
- txHash: lastTxHash,
249
+ txHashes: lastTxHashes,
157
250
  blockNumber: currentBlockNumber
158
251
  };
159
252
  }
@@ -162,15 +255,15 @@ class StarknetChainEventsBrowser {
162
255
  *
163
256
  * @protected
164
257
  */
165
- async setupPoll(lastBlockNumber, lastTxHash, saveLatestProcessedBlockNumber) {
258
+ async setupPoll(lastBlockNumber, lastTxHashes, saveLatestProcessedBlockNumber) {
166
259
  this.stopped = false;
167
260
  let func;
168
261
  func = async () => {
169
- await this.checkEvents(lastBlockNumber, lastTxHash).then(({ blockNumber, txHash }) => {
262
+ await this.checkEvents(lastBlockNumber, lastTxHashes).then(({ blockNumber, txHashes }) => {
170
263
  lastBlockNumber = blockNumber;
171
- lastTxHash = txHash;
264
+ lastTxHashes = txHashes;
172
265
  if (saveLatestProcessedBlockNumber != null)
173
- return saveLatestProcessedBlockNumber(blockNumber, lastTxHash);
266
+ return saveLatestProcessedBlockNumber(blockNumber, lastTxHashes);
174
267
  }).catch(e => {
175
268
  this.logger.error("setupPoll(): Failed to fetch starknet log: ", e);
176
269
  });
@@ -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;