@circle-fin/usdckit 0.21.0 → 0.22.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 (707) hide show
  1. package/dist/cjs/actions/generateTransferLink.d.ts +3 -3
  2. package/dist/cjs/actions/generateTransferLink.js +3 -0
  3. package/dist/cjs/actions/generateTransferLink.test.js +17 -0
  4. package/dist/cjs/actions/getSwapExactInQuote.d.ts +3 -3
  5. package/dist/cjs/actions/getTokenBalance.d.ts +30 -0
  6. package/dist/cjs/actions/getTokenBalance.js +51 -0
  7. package/dist/cjs/actions/getTokenBalance.test.js +165 -0
  8. package/dist/cjs/actions/index.d.ts +9 -1
  9. package/dist/cjs/actions/index.js +12 -9
  10. package/dist/cjs/actions/index.test.js +2 -0
  11. package/dist/cjs/actions/swapExactIn.d.ts +3 -3
  12. package/dist/cjs/actions/sweep.d.ts +3 -2
  13. package/dist/cjs/actions/sweep.js +5 -5
  14. package/dist/cjs/actions/sweep.test.js +13 -10
  15. package/dist/cjs/actions/transfer.d.ts +2 -2
  16. package/dist/cjs/actions/transfer.js +58 -30
  17. package/dist/cjs/actions/transfer.test.js +334 -135
  18. package/dist/cjs/chains.d.ts +2 -0
  19. package/dist/cjs/chains.js +12 -0
  20. package/dist/cjs/client.d.ts +35 -0
  21. package/dist/cjs/client.js +12 -0
  22. package/dist/cjs/extractChain.d.ts +109 -109
  23. package/dist/cjs/index.d.ts +4 -1
  24. package/dist/cjs/index.js +56 -10
  25. package/dist/cjs/index.test.js +1 -0
  26. package/dist/cjs/metadata.js +1 -1
  27. package/dist/cjs/onResponse.d.ts +1 -1
  28. package/dist/cjs/onResponse.js +3 -0
  29. package/dist/cjs/providers/circle-wallets/actions/createAccount.d.ts +2 -1
  30. package/dist/cjs/providers/circle-wallets/actions/createContractExecutionTransaction.d.ts +9 -1
  31. package/dist/cjs/providers/circle-wallets/actions/createContractExecutionTransaction.js +8 -0
  32. package/dist/cjs/providers/circle-wallets/actions/createTransaction.d.ts +4 -1
  33. package/dist/cjs/providers/circle-wallets/actions/createTransaction.js +3 -0
  34. package/dist/cjs/providers/circle-wallets/actions/createWalletSet.d.ts +1 -1
  35. package/dist/cjs/providers/circle-wallets/actions/createWallets.d.ts +1 -1
  36. package/dist/cjs/providers/circle-wallets/actions/deriveWallet.d.ts +1 -1
  37. package/dist/cjs/providers/circle-wallets/actions/drip.d.ts +2 -1
  38. package/dist/cjs/providers/circle-wallets/actions/estimateContractExecutionFee.d.ts +1 -1
  39. package/dist/cjs/providers/circle-wallets/actions/estimateTransferFee.d.ts +2 -1
  40. package/dist/cjs/providers/circle-wallets/actions/estimateTransferFee.js +2 -3
  41. package/dist/cjs/providers/circle-wallets/actions/estimateTransferFee.test.js +1 -20
  42. package/dist/cjs/providers/circle-wallets/actions/getAccounts.d.ts +2 -1
  43. package/dist/cjs/providers/circle-wallets/actions/getNotificationSignature.d.ts +1 -1
  44. package/dist/cjs/providers/circle-wallets/actions/getTokenBalances.d.ts +4 -15
  45. package/dist/cjs/providers/circle-wallets/actions/getTransactionById.d.ts +1 -1
  46. package/dist/cjs/providers/circle-wallets/actions/getWallet.d.ts +1 -1
  47. package/dist/cjs/providers/circle-wallets/actions/getWalletTokenBalance.d.ts +1 -1
  48. package/dist/cjs/providers/circle-wallets/actions/getWalletsWithBalances.d.ts +1 -1
  49. package/dist/cjs/providers/circle-wallets/actions/importContract.d.ts +1 -1
  50. package/dist/cjs/providers/circle-wallets/actions/index.d.ts +0 -8
  51. package/dist/cjs/providers/circle-wallets/actions/index.js +0 -8
  52. package/dist/cjs/providers/circle-wallets/actions/index.test.js +0 -4
  53. package/dist/cjs/providers/circle-wallets/actions/listTransactions.d.ts +1 -1
  54. package/dist/cjs/providers/circle-wallets/actions/listWallets.d.ts +1 -1
  55. package/dist/cjs/providers/circle-wallets/actions/requestTestnetTokens.d.ts +1 -1
  56. package/dist/cjs/providers/circle-wallets/actions/signTransaction.d.ts +1 -1
  57. package/dist/cjs/providers/circle-wallets/actions/verifyNotification.d.ts +1 -1
  58. package/dist/cjs/providers/circle-wallets/actions/writeContract.d.ts +2 -1
  59. package/dist/cjs/providers/circle-wallets/actions/writeContract.js +2 -5
  60. package/dist/cjs/providers/circle-wallets/actions/writeContract.test.js +9 -18
  61. package/dist/cjs/providers/circle-wallets/index.d.ts +4481 -0
  62. package/dist/cjs/providers/circle-wallets/index.js +40 -3
  63. package/dist/cjs/providers/circle-wallets/index.test.js +52 -3
  64. package/dist/cjs/providers/circle-wallets/transports/http.d.ts +19 -1
  65. package/dist/cjs/providers/circle-wallets/transports/http.js +2 -2
  66. package/dist/cjs/providers/circle-wallets/transports/http.test.js +24 -4
  67. package/dist/cjs/providers/circle-wallets/transports/index.d.ts +102 -22
  68. package/dist/cjs/providers/circle-wallets/transports/index.js +255 -1
  69. package/dist/cjs/providers/circle-wallets/transports/index.test.js +1623 -183
  70. package/dist/cjs/providers/circle-wallets/utils/index.d.ts +1 -0
  71. package/dist/cjs/providers/circle-wallets/utils/index.js +27 -0
  72. package/dist/cjs/providers/circle-wallets/utils/toSolanaSigner.d.ts +4 -0
  73. package/dist/cjs/providers/circle-wallets/utils/toSolanaSigner.js +33 -0
  74. package/dist/cjs/providers/circle-wallets/utils/toSolanaSigner.test.js +129 -0
  75. package/dist/cjs/providers/cross-chain-transfer-protocol/actions/approve.d.ts +3 -3
  76. package/dist/cjs/providers/cross-chain-transfer-protocol/actions/approve.js +5 -8
  77. package/dist/cjs/providers/cross-chain-transfer-protocol/actions/bridge.d.ts +3 -3
  78. package/dist/cjs/providers/cross-chain-transfer-protocol/actions/bridge.js +0 -3
  79. package/dist/cjs/providers/cross-chain-transfer-protocol/actions/depositForBurn.d.ts +3 -3
  80. package/dist/cjs/providers/cross-chain-transfer-protocol/actions/depositForBurn.js +5 -9
  81. package/dist/cjs/providers/cross-chain-transfer-protocol/actions/index.js +6 -7
  82. package/dist/cjs/providers/cross-chain-transfer-protocol/actions/listMessages.d.ts +3 -3
  83. package/dist/cjs/providers/cross-chain-transfer-protocol/actions/receiveMessage.d.ts +3 -3
  84. package/dist/cjs/providers/cross-chain-transfer-protocol/actions/receiveMessage.js +5 -9
  85. package/dist/cjs/providers/cross-chain-transfer-protocol/actions/waitForAttestationMessage.d.ts +3 -2
  86. package/dist/cjs/providers/cross-chain-transfer-protocol/transports/http.d.ts +0 -1
  87. package/dist/cjs/providers/cross-chain-transfer-protocol/transports/index.d.ts +1 -1
  88. package/dist/cjs/providers/cross-chain-transfer-protocol/transports/index.test.js +2 -2
  89. package/dist/cjs/providers/solana/actions/getAccountInfo.d.ts +23 -0
  90. package/dist/cjs/providers/{circle-wallets/actions/signTypedData.js → solana/actions/getAccountInfo.js} +7 -5
  91. package/dist/cjs/providers/solana/actions/getAccountInfo.test.js +39 -0
  92. package/dist/cjs/providers/solana/actions/getBalance.d.ts +15 -0
  93. package/dist/cjs/providers/solana/actions/getBalance.js +23 -0
  94. package/dist/cjs/providers/solana/actions/getBalance.test.js +35 -0
  95. package/dist/cjs/providers/solana/actions/getBlock.d.ts +60 -0
  96. package/dist/{esm/providers/circle-wallets/actions/signTypedData.js → cjs/providers/solana/actions/getBlock.js} +9 -4
  97. package/dist/cjs/providers/solana/actions/getBlock.test.d.ts +1 -0
  98. package/dist/cjs/providers/solana/actions/getBlock.test.js +34 -0
  99. package/dist/cjs/providers/solana/actions/getBlockCommitment.d.ts +13 -0
  100. package/dist/cjs/providers/solana/actions/getBlockCommitment.js +23 -0
  101. package/dist/cjs/providers/solana/actions/getBlockCommitment.test.d.ts +1 -0
  102. package/dist/cjs/providers/solana/actions/getBlockCommitment.test.js +36 -0
  103. package/dist/cjs/providers/solana/actions/getBlockHeight.d.ts +10 -0
  104. package/dist/cjs/providers/solana/actions/getBlockHeight.js +23 -0
  105. package/dist/cjs/providers/solana/actions/getBlockHeight.test.d.ts +1 -0
  106. package/dist/cjs/providers/solana/actions/getBlockHeight.test.js +33 -0
  107. package/dist/cjs/providers/solana/actions/getBlockProduction.d.ts +23 -0
  108. package/dist/cjs/providers/solana/actions/getBlockProduction.js +23 -0
  109. package/dist/cjs/providers/solana/actions/getBlockProduction.test.d.ts +1 -0
  110. package/dist/cjs/providers/solana/actions/getBlockProduction.test.js +40 -0
  111. package/dist/cjs/providers/solana/actions/getBlockTime.d.ts +10 -0
  112. package/dist/cjs/providers/solana/actions/getBlockTime.js +23 -0
  113. package/dist/cjs/providers/solana/actions/getBlockTime.test.d.ts +1 -0
  114. package/dist/cjs/providers/solana/actions/getBlockTime.test.js +33 -0
  115. package/dist/cjs/providers/solana/actions/getBlocks.d.ts +10 -0
  116. package/dist/cjs/providers/solana/actions/getBlocks.js +23 -0
  117. package/dist/cjs/providers/solana/actions/getBlocks.test.d.ts +1 -0
  118. package/dist/cjs/providers/solana/actions/getBlocks.test.js +35 -0
  119. package/dist/cjs/providers/solana/actions/getBlocksWithLimit.d.ts +10 -0
  120. package/dist/cjs/providers/solana/actions/getBlocksWithLimit.js +23 -0
  121. package/dist/cjs/providers/solana/actions/getBlocksWithLimit.test.d.ts +1 -0
  122. package/dist/cjs/providers/solana/actions/getBlocksWithLimit.test.js +34 -0
  123. package/dist/cjs/providers/solana/actions/getClusterName.d.ts +8 -0
  124. package/dist/cjs/providers/solana/actions/getClusterName.js +25 -0
  125. package/dist/cjs/providers/solana/actions/getClusterName.test.d.ts +1 -0
  126. package/dist/cjs/providers/solana/actions/getClusterName.test.js +32 -0
  127. package/dist/cjs/providers/solana/actions/getClusterNodes.d.ts +25 -0
  128. package/dist/cjs/providers/solana/actions/getClusterNodes.js +23 -0
  129. package/dist/cjs/providers/solana/actions/getClusterNodes.test.d.ts +1 -0
  130. package/dist/cjs/providers/solana/actions/getClusterNodes.test.js +32 -0
  131. package/dist/cjs/providers/solana/actions/getEpochInfo.d.ts +17 -0
  132. package/dist/cjs/providers/solana/actions/getEpochInfo.js +23 -0
  133. package/dist/cjs/providers/solana/actions/getEpochInfo.test.d.ts +1 -0
  134. package/dist/cjs/providers/solana/actions/getEpochInfo.test.js +39 -0
  135. package/dist/cjs/providers/solana/actions/getEpochSchedule.d.ts +16 -0
  136. package/dist/cjs/providers/solana/actions/getEpochSchedule.js +23 -0
  137. package/dist/cjs/providers/solana/actions/getEpochSchedule.test.d.ts +1 -0
  138. package/dist/cjs/providers/solana/actions/getEpochSchedule.test.js +32 -0
  139. package/dist/cjs/providers/solana/actions/getFeeForMessage.d.ts +15 -0
  140. package/dist/cjs/providers/solana/actions/getFeeForMessage.js +23 -0
  141. package/dist/cjs/providers/solana/actions/getFeeForMessage.test.d.ts +1 -0
  142. package/dist/cjs/providers/solana/actions/getFeeForMessage.test.js +33 -0
  143. package/dist/cjs/providers/solana/actions/getFirstAvailableBlock.d.ts +10 -0
  144. package/dist/cjs/providers/solana/actions/getFirstAvailableBlock.js +23 -0
  145. package/dist/cjs/providers/solana/actions/getFirstAvailableBlock.test.d.ts +1 -0
  146. package/dist/cjs/providers/solana/actions/getFirstAvailableBlock.test.js +32 -0
  147. package/dist/cjs/providers/solana/actions/getGenesisHash.d.ts +10 -0
  148. package/dist/cjs/providers/solana/actions/getGenesisHash.js +23 -0
  149. package/dist/cjs/providers/solana/actions/getGenesisHash.test.d.ts +1 -0
  150. package/dist/cjs/providers/solana/actions/getGenesisHash.test.js +32 -0
  151. package/dist/cjs/providers/solana/actions/getHealth.d.ts +10 -0
  152. package/dist/cjs/providers/solana/actions/getHealth.js +23 -0
  153. package/dist/cjs/providers/solana/actions/getHealth.test.d.ts +1 -0
  154. package/dist/cjs/providers/solana/actions/getHealth.test.js +32 -0
  155. package/dist/cjs/providers/solana/actions/getHighestSnapshotSlot.d.ts +13 -0
  156. package/dist/cjs/providers/solana/actions/getHighestSnapshotSlot.js +23 -0
  157. package/dist/cjs/providers/solana/actions/getHighestSnapshotSlot.test.d.ts +1 -0
  158. package/dist/cjs/providers/solana/actions/getHighestSnapshotSlot.test.js +32 -0
  159. package/dist/cjs/providers/solana/actions/getIdentity.d.ts +12 -0
  160. package/dist/cjs/providers/solana/actions/getIdentity.js +23 -0
  161. package/dist/cjs/providers/solana/actions/getIdentity.test.d.ts +1 -0
  162. package/dist/cjs/providers/solana/actions/getIdentity.test.js +32 -0
  163. package/dist/cjs/providers/solana/actions/getInflationGovernor.d.ts +16 -0
  164. package/dist/cjs/providers/solana/actions/getInflationGovernor.js +23 -0
  165. package/dist/cjs/providers/solana/actions/getInflationGovernor.test.d.ts +1 -0
  166. package/dist/cjs/providers/solana/actions/getInflationGovernor.test.js +33 -0
  167. package/dist/cjs/providers/solana/actions/getInflationRate.d.ts +15 -0
  168. package/dist/cjs/providers/solana/actions/getInflationRate.js +23 -0
  169. package/dist/cjs/providers/solana/actions/getInflationRate.test.d.ts +1 -0
  170. package/dist/cjs/providers/solana/actions/getInflationRate.test.js +39 -0
  171. package/dist/cjs/providers/solana/actions/getInflationReward.d.ts +16 -0
  172. package/dist/cjs/providers/solana/actions/getInflationReward.js +23 -0
  173. package/dist/cjs/providers/solana/actions/getInflationReward.test.d.ts +1 -0
  174. package/dist/cjs/providers/solana/actions/getInflationReward.test.js +35 -0
  175. package/dist/cjs/providers/solana/actions/getLargestAccounts.d.ts +18 -0
  176. package/dist/cjs/providers/solana/actions/getLargestAccounts.js +23 -0
  177. package/dist/cjs/providers/solana/actions/getLargestAccounts.test.d.ts +1 -0
  178. package/dist/cjs/providers/solana/actions/getLargestAccounts.test.js +33 -0
  179. package/dist/cjs/providers/solana/actions/getLatestBlockhash.d.ts +18 -0
  180. package/dist/cjs/providers/solana/actions/getLatestBlockhash.js +23 -0
  181. package/dist/cjs/providers/solana/actions/getLatestBlockhash.test.d.ts +1 -0
  182. package/dist/cjs/providers/solana/actions/getLatestBlockhash.test.js +33 -0
  183. package/dist/cjs/providers/solana/actions/getLeaderSchedule.d.ts +12 -0
  184. package/dist/cjs/providers/solana/actions/getLeaderSchedule.js +23 -0
  185. package/dist/cjs/providers/solana/actions/getLeaderSchedule.test.d.ts +1 -0
  186. package/dist/cjs/providers/solana/actions/getLeaderSchedule.test.js +34 -0
  187. package/dist/cjs/providers/solana/actions/getMaxRetransmitSlot.d.ts +10 -0
  188. package/dist/cjs/providers/solana/actions/getMaxRetransmitSlot.js +23 -0
  189. package/dist/cjs/providers/solana/actions/getMaxRetransmitSlot.test.d.ts +1 -0
  190. package/dist/cjs/providers/solana/actions/getMaxRetransmitSlot.test.js +32 -0
  191. package/dist/cjs/providers/solana/actions/getMaxShredInsertSlot.d.ts +10 -0
  192. package/dist/cjs/providers/solana/actions/getMaxShredInsertSlot.js +23 -0
  193. package/dist/cjs/providers/solana/actions/getMaxShredInsertSlot.test.d.ts +1 -0
  194. package/dist/cjs/providers/solana/actions/getMaxShredInsertSlot.test.js +32 -0
  195. package/dist/cjs/providers/solana/actions/getMinimumBalanceForRentExemption.d.ts +10 -0
  196. package/dist/cjs/providers/solana/actions/getMinimumBalanceForRentExemption.js +23 -0
  197. package/dist/cjs/providers/solana/actions/getMinimumBalanceForRentExemption.test.d.ts +1 -0
  198. package/dist/cjs/providers/solana/actions/getMinimumBalanceForRentExemption.test.js +34 -0
  199. package/dist/cjs/providers/solana/actions/getMultipleAccounts.d.ts +23 -0
  200. package/dist/cjs/providers/solana/actions/getMultipleAccounts.js +23 -0
  201. package/dist/cjs/providers/solana/actions/getMultipleAccounts.test.d.ts +1 -0
  202. package/dist/cjs/providers/solana/actions/getMultipleAccounts.test.js +43 -0
  203. package/dist/cjs/providers/solana/actions/getProgramAccounts.d.ts +21 -0
  204. package/dist/cjs/providers/solana/actions/getProgramAccounts.js +23 -0
  205. package/dist/cjs/providers/solana/actions/getProgramAccounts.test.d.ts +1 -0
  206. package/dist/cjs/providers/solana/actions/getProgramAccounts.test.js +39 -0
  207. package/dist/cjs/providers/solana/actions/getRecentPerformanceSamples.d.ts +16 -0
  208. package/dist/cjs/providers/solana/actions/getRecentPerformanceSamples.js +23 -0
  209. package/dist/cjs/providers/solana/actions/getRecentPerformanceSamples.test.d.ts +1 -0
  210. package/dist/cjs/providers/solana/actions/getRecentPerformanceSamples.test.js +33 -0
  211. package/dist/cjs/providers/solana/actions/getRecentPrioritizationFees.d.ts +13 -0
  212. package/dist/cjs/providers/solana/actions/getRecentPrioritizationFees.js +23 -0
  213. package/dist/cjs/providers/solana/actions/getRecentPrioritizationFees.test.d.ts +1 -0
  214. package/dist/cjs/providers/solana/actions/getRecentPrioritizationFees.test.js +34 -0
  215. package/dist/cjs/providers/solana/actions/getSignatureStatuses.d.ts +25 -0
  216. package/dist/cjs/providers/solana/actions/getSignatureStatuses.js +23 -0
  217. package/dist/cjs/providers/solana/actions/getSignatureStatuses.test.d.ts +1 -0
  218. package/dist/cjs/providers/solana/actions/getSignatureStatuses.test.js +35 -0
  219. package/dist/cjs/providers/solana/actions/getSignaturesForAddress.d.ts +17 -0
  220. package/dist/cjs/providers/solana/actions/getSignaturesForAddress.js +23 -0
  221. package/dist/cjs/providers/solana/actions/getSignaturesForAddress.test.d.ts +1 -0
  222. package/dist/cjs/providers/solana/actions/getSignaturesForAddress.test.js +46 -0
  223. package/dist/cjs/providers/solana/actions/getSlot.d.ts +10 -0
  224. package/dist/cjs/providers/solana/actions/getSlot.js +23 -0
  225. package/dist/cjs/providers/solana/actions/getSlot.test.d.ts +1 -0
  226. package/dist/cjs/providers/solana/actions/getSlot.test.js +33 -0
  227. package/dist/cjs/providers/solana/actions/getSlotLeader.d.ts +10 -0
  228. package/dist/cjs/providers/solana/actions/getSlotLeader.js +23 -0
  229. package/dist/cjs/providers/solana/actions/getSlotLeader.test.d.ts +1 -0
  230. package/dist/cjs/providers/solana/actions/getSlotLeader.test.js +33 -0
  231. package/dist/cjs/providers/solana/actions/getSlotLeaders.d.ts +10 -0
  232. package/dist/cjs/providers/solana/actions/getSlotLeaders.js +23 -0
  233. package/dist/cjs/providers/solana/actions/getSlotLeaders.test.d.ts +1 -0
  234. package/dist/cjs/providers/solana/actions/getSlotLeaders.test.js +34 -0
  235. package/dist/cjs/providers/solana/actions/getSupply.d.ts +21 -0
  236. package/dist/cjs/providers/solana/actions/getSupply.js +23 -0
  237. package/dist/cjs/providers/solana/actions/getSupply.test.d.ts +1 -0
  238. package/dist/cjs/providers/solana/actions/getSupply.test.js +33 -0
  239. package/dist/cjs/providers/solana/actions/getTokenAccountBalance.d.ts +20 -0
  240. package/dist/cjs/providers/solana/actions/getTokenAccountBalance.js +23 -0
  241. package/dist/cjs/providers/solana/actions/getTokenAccountBalance.test.d.ts +1 -0
  242. package/dist/cjs/providers/solana/actions/getTokenAccountBalance.test.js +34 -0
  243. package/dist/cjs/providers/solana/actions/getTokenAccountsByDelegate.d.ts +26 -0
  244. package/dist/cjs/providers/solana/actions/getTokenAccountsByDelegate.js +23 -0
  245. package/dist/cjs/providers/solana/actions/getTokenAccountsByDelegate.test.d.ts +1 -0
  246. package/dist/cjs/providers/solana/actions/getTokenAccountsByDelegate.test.js +35 -0
  247. package/dist/cjs/providers/solana/actions/getTokenAccountsByOwner.d.ts +26 -0
  248. package/dist/cjs/providers/solana/actions/getTokenAccountsByOwner.js +23 -0
  249. package/dist/cjs/providers/solana/actions/getTokenAccountsByOwner.test.d.ts +1 -0
  250. package/dist/cjs/providers/solana/actions/getTokenAccountsByOwner.test.js +39 -0
  251. package/dist/cjs/providers/solana/actions/getTokenLargestAccounts.d.ts +22 -0
  252. package/dist/cjs/providers/solana/actions/getTokenLargestAccounts.js +23 -0
  253. package/dist/cjs/providers/solana/actions/getTokenLargestAccounts.test.d.ts +1 -0
  254. package/dist/cjs/providers/solana/actions/getTokenLargestAccounts.test.js +34 -0
  255. package/dist/cjs/providers/solana/actions/getTokenSupply.d.ts +20 -0
  256. package/dist/cjs/providers/solana/actions/getTokenSupply.js +23 -0
  257. package/dist/cjs/providers/solana/actions/getTokenSupply.test.d.ts +1 -0
  258. package/dist/cjs/providers/solana/actions/getTokenSupply.test.js +34 -0
  259. package/dist/cjs/providers/solana/actions/getTransaction.d.ts +80 -0
  260. package/dist/cjs/providers/solana/actions/getTransaction.js +23 -0
  261. package/dist/cjs/providers/solana/actions/getTransaction.test.d.ts +1 -0
  262. package/dist/cjs/providers/solana/actions/getTransaction.test.js +34 -0
  263. package/dist/cjs/providers/solana/actions/getTransactionCount.d.ts +10 -0
  264. package/dist/cjs/providers/solana/actions/getTransactionCount.js +23 -0
  265. package/dist/cjs/providers/solana/actions/getTransactionCount.test.d.ts +1 -0
  266. package/dist/cjs/providers/solana/actions/getTransactionCount.test.js +33 -0
  267. package/dist/cjs/providers/solana/actions/getVersion.d.ts +13 -0
  268. package/dist/cjs/providers/solana/actions/getVersion.js +23 -0
  269. package/dist/cjs/providers/solana/actions/getVersion.test.d.ts +1 -0
  270. package/dist/cjs/providers/solana/actions/getVersion.test.js +35 -0
  271. package/dist/cjs/providers/solana/actions/getVoteAccounts.d.ts +31 -0
  272. package/dist/cjs/providers/solana/actions/getVoteAccounts.js +23 -0
  273. package/dist/cjs/providers/solana/actions/getVoteAccounts.test.d.ts +1 -0
  274. package/dist/cjs/providers/solana/actions/getVoteAccounts.test.js +33 -0
  275. package/dist/cjs/providers/solana/actions/index.d.ts +216 -0
  276. package/dist/cjs/providers/solana/actions/index.js +190 -0
  277. package/dist/cjs/providers/solana/actions/index.test.d.ts +1 -0
  278. package/dist/cjs/providers/solana/actions/index.test.js +78 -0
  279. package/dist/cjs/providers/solana/actions/isBlockhashValid.d.ts +15 -0
  280. package/dist/cjs/providers/solana/actions/isBlockhashValid.js +23 -0
  281. package/dist/cjs/providers/solana/actions/isBlockhashValid.test.d.ts +1 -0
  282. package/dist/cjs/providers/solana/actions/isBlockhashValid.test.js +34 -0
  283. package/dist/cjs/providers/solana/actions/minimumLedgerSlot.d.ts +10 -0
  284. package/dist/cjs/providers/solana/actions/minimumLedgerSlot.js +23 -0
  285. package/dist/cjs/providers/solana/actions/minimumLedgerSlot.test.d.ts +1 -0
  286. package/dist/cjs/providers/solana/actions/minimumLedgerSlot.test.js +32 -0
  287. package/dist/cjs/providers/solana/actions/sendTransaction.d.ts +13 -0
  288. package/dist/cjs/providers/solana/actions/sendTransaction.js +30 -0
  289. package/dist/cjs/providers/solana/actions/sendTransaction.test.d.ts +1 -0
  290. package/dist/cjs/providers/solana/actions/sendTransaction.test.js +82 -0
  291. package/dist/cjs/providers/solana/actions/simulateTransaction.d.ts +28 -0
  292. package/dist/cjs/providers/solana/actions/simulateTransaction.js +30 -0
  293. package/dist/cjs/providers/solana/actions/simulateTransaction.test.d.ts +1 -0
  294. package/dist/cjs/providers/solana/actions/simulateTransaction.test.js +82 -0
  295. package/dist/cjs/providers/solana/actions/switchCluster.d.ts +10 -0
  296. package/dist/cjs/providers/solana/actions/switchCluster.js +26 -0
  297. package/dist/cjs/providers/solana/actions/switchCluster.test.d.ts +1 -0
  298. package/dist/cjs/providers/solana/actions/switchCluster.test.js +33 -0
  299. package/dist/cjs/providers/solana/constants.d.ts +6 -0
  300. package/dist/cjs/providers/solana/constants.js +23 -0
  301. package/dist/cjs/providers/solana/index.d.ts +101 -0
  302. package/dist/cjs/providers/solana/index.js +39 -0
  303. package/dist/cjs/providers/solana/index.test.d.ts +1 -0
  304. package/dist/cjs/providers/solana/index.test.js +201 -0
  305. package/dist/cjs/providers/solana/transports/http.d.ts +8 -0
  306. package/dist/cjs/providers/solana/transports/http.js +20 -0
  307. package/dist/cjs/providers/solana/transports/http.test.d.ts +1 -0
  308. package/dist/cjs/providers/solana/transports/http.test.js +88 -0
  309. package/dist/cjs/providers/solana/transports/index.d.ts +734 -0
  310. package/dist/cjs/providers/solana/transports/index.js +205 -0
  311. package/dist/cjs/providers/solana/transports/index.test.d.ts +1 -0
  312. package/dist/cjs/providers/solana/transports/index.test.js +307 -0
  313. package/dist/cjs/providers/solana/utils/codecs.d.ts +4 -0
  314. package/dist/cjs/providers/solana/utils/codecs.js +20 -0
  315. package/dist/cjs/providers/solana/utils/index.d.ts +2 -0
  316. package/dist/cjs/providers/solana/utils/index.js +30 -0
  317. package/dist/cjs/providers/solana/utils/index.test.d.ts +1 -0
  318. package/dist/cjs/providers/solana/utils/index.test.js +53 -0
  319. package/dist/cjs/providers/solana/utils/toBase64EncodedWireTransaction.d.ts +26 -0
  320. package/dist/cjs/providers/solana/utils/toBase64EncodedWireTransaction.js +42 -0
  321. package/dist/cjs/providers/solana/utils/toBase64EncodedWireTransaction.test.d.ts +1 -0
  322. package/dist/cjs/providers/solana/utils/toBase64EncodedWireTransaction.test.js +108 -0
  323. package/dist/cjs/providers/uniswap/actions/exactInputSingle.d.ts +3 -3
  324. package/dist/cjs/providers/uniswap/actions/exactInputSingle.js +4 -4
  325. package/dist/cjs/providers/uniswap/actions/getPool.d.ts +3 -2
  326. package/dist/cjs/providers/uniswap/actions/quoteExactInputSingle.d.ts +3 -2
  327. package/dist/cjs/types.d.ts +8 -16
  328. package/dist/cjs/types.js +0 -10
  329. package/dist/cjs/utils/createConfig.d.ts +36 -0
  330. package/dist/cjs/utils/createConfig.js +51 -0
  331. package/dist/cjs/utils/createConfig.test.d.ts +1 -0
  332. package/dist/cjs/utils/createConfig.test.js +66 -0
  333. package/dist/cjs/utils/createCustomWalletClient.d.ts +46 -0
  334. package/dist/cjs/utils/createCustomWalletClient.js +114 -0
  335. package/dist/cjs/utils/createCustomWalletClient.test.d.ts +1 -0
  336. package/dist/cjs/utils/createCustomWalletClient.test.js +100 -0
  337. package/dist/cjs/utils/getChainContractByAddress.d.ts +2 -1
  338. package/dist/cjs/utils/getClient.d.ts +458 -0
  339. package/dist/cjs/utils/getClient.js +25 -0
  340. package/dist/cjs/utils/getClient.test.d.ts +1 -0
  341. package/dist/cjs/utils/getClient.test.js +46 -0
  342. package/dist/cjs/utils/index.d.ts +1 -0
  343. package/dist/cjs/utils/index.js +1 -0
  344. package/dist/cjs/utils/index.test.js +2 -0
  345. package/dist/esm/actions/generateTransferLink.d.ts +3 -3
  346. package/dist/esm/actions/generateTransferLink.js +3 -0
  347. package/dist/esm/actions/generateTransferLink.test.js +17 -0
  348. package/dist/esm/actions/getSwapExactInQuote.d.ts +3 -3
  349. package/dist/esm/actions/getTokenBalance.d.ts +30 -0
  350. package/dist/esm/actions/getTokenBalance.js +48 -0
  351. package/dist/esm/actions/getTokenBalance.test.d.ts +1 -0
  352. package/dist/esm/actions/getTokenBalance.test.js +163 -0
  353. package/dist/esm/actions/index.d.ts +9 -1
  354. package/dist/esm/actions/index.js +12 -9
  355. package/dist/esm/actions/index.test.js +2 -0
  356. package/dist/esm/actions/swapExactIn.d.ts +3 -3
  357. package/dist/esm/actions/sweep.d.ts +3 -2
  358. package/dist/esm/actions/sweep.js +5 -5
  359. package/dist/esm/actions/sweep.test.js +13 -10
  360. package/dist/esm/actions/transfer.d.ts +2 -2
  361. package/dist/esm/actions/transfer.js +60 -32
  362. package/dist/esm/actions/transfer.test.js +334 -135
  363. package/dist/esm/chains.d.ts +2 -0
  364. package/dist/esm/chains.js +11 -0
  365. package/dist/esm/client.d.ts +35 -0
  366. package/dist/esm/client.js +11 -0
  367. package/dist/esm/extractChain.d.ts +109 -109
  368. package/dist/esm/index.d.ts +4 -1
  369. package/dist/esm/index.js +31 -7
  370. package/dist/esm/index.test.js +1 -0
  371. package/dist/esm/metadata.js +1 -1
  372. package/dist/esm/onResponse.d.ts +1 -1
  373. package/dist/esm/onResponse.js +3 -0
  374. package/dist/esm/providers/circle-wallets/actions/createAccount.d.ts +2 -1
  375. package/dist/esm/providers/circle-wallets/actions/createContractExecutionTransaction.d.ts +9 -1
  376. package/dist/esm/providers/circle-wallets/actions/createContractExecutionTransaction.js +8 -0
  377. package/dist/esm/providers/circle-wallets/actions/createTransaction.d.ts +4 -1
  378. package/dist/esm/providers/circle-wallets/actions/createTransaction.js +3 -0
  379. package/dist/esm/providers/circle-wallets/actions/createWalletSet.d.ts +1 -1
  380. package/dist/esm/providers/circle-wallets/actions/createWallets.d.ts +1 -1
  381. package/dist/esm/providers/circle-wallets/actions/deriveWallet.d.ts +1 -1
  382. package/dist/esm/providers/circle-wallets/actions/drip.d.ts +2 -1
  383. package/dist/esm/providers/circle-wallets/actions/estimateContractExecutionFee.d.ts +1 -1
  384. package/dist/esm/providers/circle-wallets/actions/estimateTransferFee.d.ts +2 -1
  385. package/dist/esm/providers/circle-wallets/actions/estimateTransferFee.js +2 -3
  386. package/dist/esm/providers/circle-wallets/actions/estimateTransferFee.test.js +1 -20
  387. package/dist/esm/providers/circle-wallets/actions/getAccounts.d.ts +2 -1
  388. package/dist/esm/providers/circle-wallets/actions/getNotificationSignature.d.ts +1 -1
  389. package/dist/esm/providers/circle-wallets/actions/getTokenBalances.d.ts +4 -15
  390. package/dist/esm/providers/circle-wallets/actions/getTransactionById.d.ts +1 -1
  391. package/dist/esm/providers/circle-wallets/actions/getWallet.d.ts +1 -1
  392. package/dist/esm/providers/circle-wallets/actions/getWalletTokenBalance.d.ts +1 -1
  393. package/dist/esm/providers/circle-wallets/actions/getWalletsWithBalances.d.ts +1 -1
  394. package/dist/esm/providers/circle-wallets/actions/importContract.d.ts +1 -1
  395. package/dist/esm/providers/circle-wallets/actions/index.d.ts +0 -8
  396. package/dist/esm/providers/circle-wallets/actions/index.js +0 -8
  397. package/dist/esm/providers/circle-wallets/actions/index.test.js +0 -4
  398. package/dist/esm/providers/circle-wallets/actions/listTransactions.d.ts +1 -1
  399. package/dist/esm/providers/circle-wallets/actions/listWallets.d.ts +1 -1
  400. package/dist/esm/providers/circle-wallets/actions/requestTestnetTokens.d.ts +1 -1
  401. package/dist/esm/providers/circle-wallets/actions/signTransaction.d.ts +1 -1
  402. package/dist/esm/providers/circle-wallets/actions/verifyNotification.d.ts +1 -1
  403. package/dist/esm/providers/circle-wallets/actions/writeContract.d.ts +2 -1
  404. package/dist/esm/providers/circle-wallets/actions/writeContract.js +2 -5
  405. package/dist/esm/providers/circle-wallets/actions/writeContract.test.js +9 -18
  406. package/dist/esm/providers/circle-wallets/index.d.ts +4481 -0
  407. package/dist/esm/providers/circle-wallets/index.js +35 -0
  408. package/dist/esm/providers/circle-wallets/index.test.js +51 -2
  409. package/dist/esm/providers/circle-wallets/transports/http.d.ts +19 -1
  410. package/dist/esm/providers/circle-wallets/transports/http.js +3 -3
  411. package/dist/esm/providers/circle-wallets/transports/http.test.js +24 -4
  412. package/dist/esm/providers/circle-wallets/transports/index.d.ts +102 -22
  413. package/dist/esm/providers/circle-wallets/transports/index.js +257 -3
  414. package/dist/esm/providers/circle-wallets/transports/index.test.js +1617 -177
  415. package/dist/esm/providers/circle-wallets/utils/index.d.ts +1 -0
  416. package/dist/esm/providers/circle-wallets/utils/index.js +11 -0
  417. package/dist/esm/providers/circle-wallets/utils/toSolanaSigner.d.ts +4 -0
  418. package/dist/esm/providers/circle-wallets/utils/toSolanaSigner.js +30 -0
  419. package/dist/esm/providers/circle-wallets/utils/toSolanaSigner.test.d.ts +1 -0
  420. package/dist/esm/providers/circle-wallets/utils/toSolanaSigner.test.js +127 -0
  421. package/dist/esm/providers/cross-chain-transfer-protocol/actions/approve.d.ts +3 -3
  422. package/dist/esm/providers/cross-chain-transfer-protocol/actions/approve.js +7 -10
  423. package/dist/esm/providers/cross-chain-transfer-protocol/actions/bridge.d.ts +3 -3
  424. package/dist/esm/providers/cross-chain-transfer-protocol/actions/bridge.js +0 -3
  425. package/dist/esm/providers/cross-chain-transfer-protocol/actions/depositForBurn.d.ts +3 -3
  426. package/dist/esm/providers/cross-chain-transfer-protocol/actions/depositForBurn.js +6 -10
  427. package/dist/esm/providers/cross-chain-transfer-protocol/actions/index.js +6 -7
  428. package/dist/esm/providers/cross-chain-transfer-protocol/actions/listMessages.d.ts +3 -3
  429. package/dist/esm/providers/cross-chain-transfer-protocol/actions/receiveMessage.d.ts +3 -3
  430. package/dist/esm/providers/cross-chain-transfer-protocol/actions/receiveMessage.js +6 -10
  431. package/dist/esm/providers/cross-chain-transfer-protocol/actions/waitForAttestationMessage.d.ts +3 -2
  432. package/dist/esm/providers/cross-chain-transfer-protocol/transports/http.d.ts +0 -1
  433. package/dist/esm/providers/cross-chain-transfer-protocol/transports/index.d.ts +1 -1
  434. package/dist/esm/providers/cross-chain-transfer-protocol/transports/index.test.js +2 -2
  435. package/dist/esm/providers/solana/actions/getAccountInfo.d.ts +23 -0
  436. package/dist/esm/providers/solana/actions/getAccountInfo.js +20 -0
  437. package/dist/esm/providers/solana/actions/getAccountInfo.test.d.ts +1 -0
  438. package/dist/esm/providers/solana/actions/getAccountInfo.test.js +37 -0
  439. package/dist/esm/providers/solana/actions/getBalance.d.ts +15 -0
  440. package/dist/esm/providers/solana/actions/getBalance.js +20 -0
  441. package/dist/esm/providers/solana/actions/getBalance.test.d.ts +1 -0
  442. package/dist/esm/providers/solana/actions/getBalance.test.js +33 -0
  443. package/dist/esm/providers/solana/actions/getBlock.d.ts +60 -0
  444. package/dist/esm/providers/solana/actions/getBlock.js +20 -0
  445. package/dist/esm/providers/solana/actions/getBlock.test.d.ts +1 -0
  446. package/dist/esm/providers/solana/actions/getBlock.test.js +32 -0
  447. package/dist/esm/providers/solana/actions/getBlockCommitment.d.ts +13 -0
  448. package/dist/esm/providers/solana/actions/getBlockCommitment.js +20 -0
  449. package/dist/esm/providers/solana/actions/getBlockCommitment.test.d.ts +1 -0
  450. package/dist/esm/providers/solana/actions/getBlockCommitment.test.js +34 -0
  451. package/dist/esm/providers/solana/actions/getBlockHeight.d.ts +10 -0
  452. package/dist/esm/providers/solana/actions/getBlockHeight.js +20 -0
  453. package/dist/esm/providers/solana/actions/getBlockHeight.test.d.ts +1 -0
  454. package/dist/esm/providers/solana/actions/getBlockHeight.test.js +31 -0
  455. package/dist/esm/providers/solana/actions/getBlockProduction.d.ts +23 -0
  456. package/dist/esm/providers/solana/actions/getBlockProduction.js +20 -0
  457. package/dist/esm/providers/solana/actions/getBlockProduction.test.d.ts +1 -0
  458. package/dist/esm/providers/solana/actions/getBlockProduction.test.js +38 -0
  459. package/dist/esm/providers/solana/actions/getBlockTime.d.ts +10 -0
  460. package/dist/esm/providers/solana/actions/getBlockTime.js +20 -0
  461. package/dist/esm/providers/solana/actions/getBlockTime.test.d.ts +1 -0
  462. package/dist/esm/providers/solana/actions/getBlockTime.test.js +31 -0
  463. package/dist/esm/providers/solana/actions/getBlocks.d.ts +10 -0
  464. package/dist/esm/providers/solana/actions/getBlocks.js +20 -0
  465. package/dist/esm/providers/solana/actions/getBlocks.test.d.ts +1 -0
  466. package/dist/esm/providers/solana/actions/getBlocks.test.js +33 -0
  467. package/dist/esm/providers/solana/actions/getBlocksWithLimit.d.ts +10 -0
  468. package/dist/esm/providers/solana/actions/getBlocksWithLimit.js +20 -0
  469. package/dist/esm/providers/solana/actions/getBlocksWithLimit.test.d.ts +1 -0
  470. package/dist/esm/providers/solana/actions/getBlocksWithLimit.test.js +32 -0
  471. package/dist/esm/providers/solana/actions/getClusterName.d.ts +8 -0
  472. package/dist/esm/providers/solana/actions/getClusterName.js +22 -0
  473. package/dist/esm/providers/solana/actions/getClusterName.test.d.ts +1 -0
  474. package/dist/esm/providers/solana/actions/getClusterName.test.js +30 -0
  475. package/dist/esm/providers/solana/actions/getClusterNodes.d.ts +25 -0
  476. package/dist/esm/providers/solana/actions/getClusterNodes.js +20 -0
  477. package/dist/esm/providers/solana/actions/getClusterNodes.test.d.ts +1 -0
  478. package/dist/esm/providers/solana/actions/getClusterNodes.test.js +30 -0
  479. package/dist/esm/providers/solana/actions/getEpochInfo.d.ts +17 -0
  480. package/dist/esm/providers/solana/actions/getEpochInfo.js +20 -0
  481. package/dist/esm/providers/solana/actions/getEpochInfo.test.d.ts +1 -0
  482. package/dist/esm/providers/solana/actions/getEpochInfo.test.js +37 -0
  483. package/dist/esm/providers/solana/actions/getEpochSchedule.d.ts +16 -0
  484. package/dist/esm/providers/solana/actions/getEpochSchedule.js +20 -0
  485. package/dist/esm/providers/solana/actions/getEpochSchedule.test.d.ts +1 -0
  486. package/dist/esm/providers/solana/actions/getEpochSchedule.test.js +30 -0
  487. package/dist/esm/providers/solana/actions/getFeeForMessage.d.ts +15 -0
  488. package/dist/esm/providers/solana/actions/getFeeForMessage.js +20 -0
  489. package/dist/esm/providers/solana/actions/getFeeForMessage.test.d.ts +1 -0
  490. package/dist/esm/providers/solana/actions/getFeeForMessage.test.js +31 -0
  491. package/dist/esm/providers/solana/actions/getFirstAvailableBlock.d.ts +10 -0
  492. package/dist/esm/providers/solana/actions/getFirstAvailableBlock.js +20 -0
  493. package/dist/esm/providers/solana/actions/getFirstAvailableBlock.test.d.ts +1 -0
  494. package/dist/esm/providers/solana/actions/getFirstAvailableBlock.test.js +30 -0
  495. package/dist/esm/providers/solana/actions/getGenesisHash.d.ts +10 -0
  496. package/dist/esm/providers/solana/actions/getGenesisHash.js +20 -0
  497. package/dist/esm/providers/solana/actions/getGenesisHash.test.d.ts +1 -0
  498. package/dist/esm/providers/solana/actions/getGenesisHash.test.js +30 -0
  499. package/dist/esm/providers/solana/actions/getHealth.d.ts +10 -0
  500. package/dist/esm/providers/solana/actions/getHealth.js +20 -0
  501. package/dist/esm/providers/solana/actions/getHealth.test.d.ts +1 -0
  502. package/dist/esm/providers/solana/actions/getHealth.test.js +30 -0
  503. package/dist/esm/providers/solana/actions/getHighestSnapshotSlot.d.ts +13 -0
  504. package/dist/esm/providers/solana/actions/getHighestSnapshotSlot.js +20 -0
  505. package/dist/esm/providers/solana/actions/getHighestSnapshotSlot.test.d.ts +1 -0
  506. package/dist/esm/providers/solana/actions/getHighestSnapshotSlot.test.js +30 -0
  507. package/dist/esm/providers/solana/actions/getIdentity.d.ts +12 -0
  508. package/dist/esm/providers/solana/actions/getIdentity.js +20 -0
  509. package/dist/esm/providers/solana/actions/getIdentity.test.d.ts +1 -0
  510. package/dist/esm/providers/solana/actions/getIdentity.test.js +30 -0
  511. package/dist/esm/providers/solana/actions/getInflationGovernor.d.ts +16 -0
  512. package/dist/esm/providers/solana/actions/getInflationGovernor.js +20 -0
  513. package/dist/esm/providers/solana/actions/getInflationGovernor.test.d.ts +1 -0
  514. package/dist/esm/providers/solana/actions/getInflationGovernor.test.js +31 -0
  515. package/dist/esm/providers/solana/actions/getInflationRate.d.ts +15 -0
  516. package/dist/esm/providers/solana/actions/getInflationRate.js +20 -0
  517. package/dist/esm/providers/solana/actions/getInflationRate.test.d.ts +1 -0
  518. package/dist/esm/providers/solana/actions/getInflationRate.test.js +37 -0
  519. package/dist/esm/providers/solana/actions/getInflationReward.d.ts +16 -0
  520. package/dist/esm/providers/solana/actions/getInflationReward.js +20 -0
  521. package/dist/esm/providers/solana/actions/getInflationReward.test.d.ts +1 -0
  522. package/dist/esm/providers/solana/actions/getInflationReward.test.js +33 -0
  523. package/dist/esm/providers/solana/actions/getLargestAccounts.d.ts +18 -0
  524. package/dist/esm/providers/solana/actions/getLargestAccounts.js +20 -0
  525. package/dist/esm/providers/solana/actions/getLargestAccounts.test.d.ts +1 -0
  526. package/dist/esm/providers/solana/actions/getLargestAccounts.test.js +31 -0
  527. package/dist/esm/providers/solana/actions/getLatestBlockhash.d.ts +18 -0
  528. package/dist/esm/providers/solana/actions/getLatestBlockhash.js +20 -0
  529. package/dist/esm/providers/solana/actions/getLatestBlockhash.test.d.ts +1 -0
  530. package/dist/esm/providers/solana/actions/getLatestBlockhash.test.js +31 -0
  531. package/dist/esm/providers/solana/actions/getLeaderSchedule.d.ts +12 -0
  532. package/dist/esm/providers/solana/actions/getLeaderSchedule.js +20 -0
  533. package/dist/esm/providers/solana/actions/getLeaderSchedule.test.d.ts +1 -0
  534. package/dist/esm/providers/solana/actions/getLeaderSchedule.test.js +32 -0
  535. package/dist/esm/providers/solana/actions/getMaxRetransmitSlot.d.ts +10 -0
  536. package/dist/esm/providers/solana/actions/getMaxRetransmitSlot.js +20 -0
  537. package/dist/esm/providers/solana/actions/getMaxRetransmitSlot.test.d.ts +1 -0
  538. package/dist/esm/providers/solana/actions/getMaxRetransmitSlot.test.js +30 -0
  539. package/dist/esm/providers/solana/actions/getMaxShredInsertSlot.d.ts +10 -0
  540. package/dist/esm/providers/solana/actions/getMaxShredInsertSlot.js +20 -0
  541. package/dist/esm/providers/solana/actions/getMaxShredInsertSlot.test.d.ts +1 -0
  542. package/dist/esm/providers/solana/actions/getMaxShredInsertSlot.test.js +30 -0
  543. package/dist/esm/providers/solana/actions/getMinimumBalanceForRentExemption.d.ts +10 -0
  544. package/dist/esm/providers/solana/actions/getMinimumBalanceForRentExemption.js +20 -0
  545. package/dist/esm/providers/solana/actions/getMinimumBalanceForRentExemption.test.d.ts +1 -0
  546. package/dist/esm/providers/solana/actions/getMinimumBalanceForRentExemption.test.js +32 -0
  547. package/dist/esm/providers/solana/actions/getMultipleAccounts.d.ts +23 -0
  548. package/dist/esm/providers/solana/actions/getMultipleAccounts.js +20 -0
  549. package/dist/esm/providers/solana/actions/getMultipleAccounts.test.d.ts +1 -0
  550. package/dist/esm/providers/solana/actions/getMultipleAccounts.test.js +41 -0
  551. package/dist/esm/providers/solana/actions/getProgramAccounts.d.ts +21 -0
  552. package/dist/esm/providers/solana/actions/getProgramAccounts.js +20 -0
  553. package/dist/esm/providers/solana/actions/getProgramAccounts.test.d.ts +1 -0
  554. package/dist/esm/providers/solana/actions/getProgramAccounts.test.js +37 -0
  555. package/dist/esm/providers/solana/actions/getRecentPerformanceSamples.d.ts +16 -0
  556. package/dist/esm/providers/solana/actions/getRecentPerformanceSamples.js +20 -0
  557. package/dist/esm/providers/solana/actions/getRecentPerformanceSamples.test.d.ts +1 -0
  558. package/dist/esm/providers/solana/actions/getRecentPerformanceSamples.test.js +31 -0
  559. package/dist/esm/providers/solana/actions/getRecentPrioritizationFees.d.ts +13 -0
  560. package/dist/esm/providers/solana/actions/getRecentPrioritizationFees.js +20 -0
  561. package/dist/esm/providers/solana/actions/getRecentPrioritizationFees.test.d.ts +1 -0
  562. package/dist/esm/providers/solana/actions/getRecentPrioritizationFees.test.js +32 -0
  563. package/dist/esm/providers/solana/actions/getSignatureStatuses.d.ts +25 -0
  564. package/dist/esm/providers/solana/actions/getSignatureStatuses.js +20 -0
  565. package/dist/esm/providers/solana/actions/getSignatureStatuses.test.d.ts +1 -0
  566. package/dist/esm/providers/solana/actions/getSignatureStatuses.test.js +33 -0
  567. package/dist/esm/providers/solana/actions/getSignaturesForAddress.d.ts +17 -0
  568. package/dist/esm/providers/solana/actions/getSignaturesForAddress.js +20 -0
  569. package/dist/esm/providers/solana/actions/getSignaturesForAddress.test.d.ts +1 -0
  570. package/dist/esm/providers/solana/actions/getSignaturesForAddress.test.js +44 -0
  571. package/dist/esm/providers/solana/actions/getSlot.d.ts +10 -0
  572. package/dist/esm/providers/solana/actions/getSlot.js +20 -0
  573. package/dist/esm/providers/solana/actions/getSlot.test.d.ts +1 -0
  574. package/dist/esm/providers/solana/actions/getSlot.test.js +31 -0
  575. package/dist/esm/providers/solana/actions/getSlotLeader.d.ts +10 -0
  576. package/dist/esm/providers/solana/actions/getSlotLeader.js +20 -0
  577. package/dist/esm/providers/solana/actions/getSlotLeader.test.d.ts +1 -0
  578. package/dist/esm/providers/solana/actions/getSlotLeader.test.js +31 -0
  579. package/dist/esm/providers/solana/actions/getSlotLeaders.d.ts +10 -0
  580. package/dist/esm/providers/solana/actions/getSlotLeaders.js +20 -0
  581. package/dist/esm/providers/solana/actions/getSlotLeaders.test.d.ts +1 -0
  582. package/dist/esm/providers/solana/actions/getSlotLeaders.test.js +32 -0
  583. package/dist/esm/providers/solana/actions/getSupply.d.ts +21 -0
  584. package/dist/esm/providers/solana/actions/getSupply.js +20 -0
  585. package/dist/esm/providers/solana/actions/getSupply.test.d.ts +1 -0
  586. package/dist/esm/providers/solana/actions/getSupply.test.js +31 -0
  587. package/dist/esm/providers/solana/actions/getTokenAccountBalance.d.ts +20 -0
  588. package/dist/esm/providers/solana/actions/getTokenAccountBalance.js +20 -0
  589. package/dist/esm/providers/solana/actions/getTokenAccountBalance.test.d.ts +1 -0
  590. package/dist/esm/providers/solana/actions/getTokenAccountBalance.test.js +32 -0
  591. package/dist/esm/providers/solana/actions/getTokenAccountsByDelegate.d.ts +26 -0
  592. package/dist/esm/providers/solana/actions/getTokenAccountsByDelegate.js +20 -0
  593. package/dist/esm/providers/solana/actions/getTokenAccountsByDelegate.test.d.ts +1 -0
  594. package/dist/esm/providers/solana/actions/getTokenAccountsByDelegate.test.js +33 -0
  595. package/dist/esm/providers/solana/actions/getTokenAccountsByOwner.d.ts +26 -0
  596. package/dist/esm/providers/solana/actions/getTokenAccountsByOwner.js +20 -0
  597. package/dist/esm/providers/solana/actions/getTokenAccountsByOwner.test.d.ts +1 -0
  598. package/dist/esm/providers/solana/actions/getTokenAccountsByOwner.test.js +37 -0
  599. package/dist/esm/providers/solana/actions/getTokenLargestAccounts.d.ts +22 -0
  600. package/dist/esm/providers/solana/actions/getTokenLargestAccounts.js +20 -0
  601. package/dist/esm/providers/solana/actions/getTokenLargestAccounts.test.d.ts +1 -0
  602. package/dist/esm/providers/solana/actions/getTokenLargestAccounts.test.js +32 -0
  603. package/dist/esm/providers/solana/actions/getTokenSupply.d.ts +20 -0
  604. package/dist/esm/providers/solana/actions/getTokenSupply.js +20 -0
  605. package/dist/esm/providers/solana/actions/getTokenSupply.test.d.ts +1 -0
  606. package/dist/esm/providers/solana/actions/getTokenSupply.test.js +32 -0
  607. package/dist/esm/providers/solana/actions/getTransaction.d.ts +80 -0
  608. package/dist/esm/providers/solana/actions/getTransaction.js +20 -0
  609. package/dist/esm/providers/solana/actions/getTransaction.test.d.ts +1 -0
  610. package/dist/esm/providers/solana/actions/getTransaction.test.js +32 -0
  611. package/dist/esm/providers/solana/actions/getTransactionCount.d.ts +10 -0
  612. package/dist/esm/providers/solana/actions/getTransactionCount.js +20 -0
  613. package/dist/esm/providers/solana/actions/getTransactionCount.test.d.ts +1 -0
  614. package/dist/esm/providers/solana/actions/getTransactionCount.test.js +31 -0
  615. package/dist/esm/providers/solana/actions/getVersion.d.ts +13 -0
  616. package/dist/esm/providers/solana/actions/getVersion.js +20 -0
  617. package/dist/esm/providers/solana/actions/getVersion.test.d.ts +1 -0
  618. package/dist/esm/providers/solana/actions/getVersion.test.js +33 -0
  619. package/dist/esm/providers/solana/actions/getVoteAccounts.d.ts +31 -0
  620. package/dist/esm/providers/solana/actions/getVoteAccounts.js +20 -0
  621. package/dist/esm/providers/solana/actions/getVoteAccounts.test.d.ts +1 -0
  622. package/dist/esm/providers/solana/actions/getVoteAccounts.test.js +31 -0
  623. package/dist/esm/providers/solana/actions/index.d.ts +216 -0
  624. package/dist/esm/providers/solana/actions/index.js +173 -0
  625. package/dist/esm/providers/solana/actions/index.test.d.ts +1 -0
  626. package/dist/esm/providers/solana/actions/index.test.js +76 -0
  627. package/dist/esm/providers/solana/actions/isBlockhashValid.d.ts +15 -0
  628. package/dist/esm/providers/solana/actions/isBlockhashValid.js +20 -0
  629. package/dist/esm/providers/solana/actions/isBlockhashValid.test.d.ts +1 -0
  630. package/dist/esm/providers/solana/actions/isBlockhashValid.test.js +32 -0
  631. package/dist/esm/providers/solana/actions/minimumLedgerSlot.d.ts +10 -0
  632. package/dist/esm/providers/solana/actions/minimumLedgerSlot.js +20 -0
  633. package/dist/esm/providers/solana/actions/minimumLedgerSlot.test.d.ts +1 -0
  634. package/dist/esm/providers/solana/actions/minimumLedgerSlot.test.js +30 -0
  635. package/dist/esm/providers/solana/actions/sendTransaction.d.ts +13 -0
  636. package/dist/esm/providers/solana/actions/sendTransaction.js +27 -0
  637. package/dist/esm/providers/solana/actions/sendTransaction.test.d.ts +1 -0
  638. package/dist/esm/providers/solana/actions/sendTransaction.test.js +80 -0
  639. package/dist/esm/providers/solana/actions/simulateTransaction.d.ts +28 -0
  640. package/dist/esm/providers/solana/actions/simulateTransaction.js +27 -0
  641. package/dist/esm/providers/solana/actions/simulateTransaction.test.d.ts +1 -0
  642. package/dist/esm/providers/solana/actions/simulateTransaction.test.js +80 -0
  643. package/dist/esm/providers/solana/actions/switchCluster.d.ts +10 -0
  644. package/dist/esm/providers/solana/actions/switchCluster.js +23 -0
  645. package/dist/esm/providers/solana/actions/switchCluster.test.d.ts +1 -0
  646. package/dist/esm/providers/solana/actions/switchCluster.test.js +31 -0
  647. package/dist/esm/providers/solana/constants.d.ts +6 -0
  648. package/dist/esm/providers/solana/constants.js +17 -0
  649. package/dist/esm/providers/solana/index.d.ts +101 -0
  650. package/dist/esm/providers/solana/index.js +21 -0
  651. package/dist/esm/providers/solana/index.test.d.ts +1 -0
  652. package/dist/esm/providers/solana/index.test.js +166 -0
  653. package/dist/esm/providers/solana/transports/http.d.ts +8 -0
  654. package/dist/esm/providers/solana/transports/http.js +17 -0
  655. package/dist/esm/providers/solana/transports/http.test.d.ts +1 -0
  656. package/dist/esm/providers/solana/transports/http.test.js +86 -0
  657. package/dist/esm/providers/solana/transports/index.d.ts +734 -0
  658. package/dist/esm/providers/solana/transports/index.js +200 -0
  659. package/dist/esm/providers/solana/transports/index.test.d.ts +1 -0
  660. package/dist/esm/providers/solana/transports/index.test.js +272 -0
  661. package/dist/esm/providers/solana/utils/codecs.d.ts +4 -0
  662. package/dist/esm/providers/solana/utils/codecs.js +17 -0
  663. package/dist/esm/providers/solana/utils/index.d.ts +2 -0
  664. package/dist/esm/providers/solana/utils/index.js +12 -0
  665. package/dist/esm/providers/solana/utils/index.test.d.ts +1 -0
  666. package/dist/esm/providers/solana/utils/index.test.js +18 -0
  667. package/dist/esm/providers/solana/utils/toBase64EncodedWireTransaction.d.ts +26 -0
  668. package/dist/esm/providers/solana/utils/toBase64EncodedWireTransaction.js +39 -0
  669. package/dist/esm/providers/solana/utils/toBase64EncodedWireTransaction.test.d.ts +1 -0
  670. package/dist/esm/providers/solana/utils/toBase64EncodedWireTransaction.test.js +106 -0
  671. package/dist/esm/providers/uniswap/actions/exactInputSingle.d.ts +3 -3
  672. package/dist/esm/providers/uniswap/actions/exactInputSingle.js +5 -5
  673. package/dist/esm/providers/uniswap/actions/getPool.d.ts +3 -2
  674. package/dist/esm/providers/uniswap/actions/quoteExactInputSingle.d.ts +3 -2
  675. package/dist/esm/types.d.ts +8 -16
  676. package/dist/esm/types.js +0 -10
  677. package/dist/esm/utils/createConfig.d.ts +36 -0
  678. package/dist/esm/utils/createConfig.js +48 -0
  679. package/dist/esm/utils/createConfig.test.d.ts +1 -0
  680. package/dist/esm/utils/createConfig.test.js +64 -0
  681. package/dist/esm/utils/createCustomWalletClient.d.ts +46 -0
  682. package/dist/esm/utils/createCustomWalletClient.js +78 -0
  683. package/dist/esm/utils/createCustomWalletClient.test.d.ts +1 -0
  684. package/dist/esm/utils/createCustomWalletClient.test.js +98 -0
  685. package/dist/esm/utils/getChainContractByAddress.d.ts +2 -1
  686. package/dist/esm/utils/getClient.d.ts +458 -0
  687. package/dist/esm/utils/getClient.js +22 -0
  688. package/dist/esm/utils/getClient.test.d.ts +1 -0
  689. package/dist/esm/utils/getClient.test.js +44 -0
  690. package/dist/esm/utils/index.d.ts +1 -0
  691. package/dist/esm/utils/index.js +1 -0
  692. package/dist/esm/utils/index.test.js +2 -0
  693. package/package.json +11 -3
  694. package/dist/cjs/providers/circle-wallets/actions/signTypedData.d.ts +0 -8
  695. package/dist/cjs/providers/circle-wallets/actions/signTypedData.test.js +0 -51
  696. package/dist/cjs/providers/circle-wallets/actions/waitForTransactionHash.d.ts +0 -19
  697. package/dist/cjs/providers/circle-wallets/actions/waitForTransactionHash.js +0 -45
  698. package/dist/cjs/providers/circle-wallets/actions/waitForTransactionHash.test.js +0 -92
  699. package/dist/esm/providers/circle-wallets/actions/signTypedData.d.ts +0 -8
  700. package/dist/esm/providers/circle-wallets/actions/signTypedData.test.js +0 -49
  701. package/dist/esm/providers/circle-wallets/actions/waitForTransactionHash.d.ts +0 -19
  702. package/dist/esm/providers/circle-wallets/actions/waitForTransactionHash.js +0 -42
  703. package/dist/esm/providers/circle-wallets/actions/waitForTransactionHash.test.js +0 -90
  704. /package/dist/cjs/{providers/circle-wallets/actions/signTypedData.test.d.ts → actions/getTokenBalance.test.d.ts} +0 -0
  705. /package/dist/cjs/providers/circle-wallets/{actions/waitForTransactionHash.test.d.ts → utils/toSolanaSigner.test.d.ts} +0 -0
  706. /package/dist/{esm/providers/circle-wallets/actions/signTypedData.test.d.ts → cjs/providers/solana/actions/getAccountInfo.test.d.ts} +0 -0
  707. /package/dist/{esm/providers/circle-wallets/actions/waitForTransactionHash.test.d.ts → cjs/providers/solana/actions/getBalance.test.d.ts} +0 -0
@@ -47,9 +47,12 @@ const developer_controlled_wallets_1 = require("@circle-fin/developer-controlled
47
47
  const smart_contract_platform_1 = require("@circle-fin/smart-contract-platform");
48
48
  const viem_1 = require("viem");
49
49
  const vitest_1 = require("vitest");
50
+ const index_js_1 = require("../../../errors/index.js");
50
51
  const generateIdempotencyKeyMod = __importStar(require("../../../utils/generateIdempotencyKey.js"));
51
- const index_js_1 = require("../index.js");
52
- const index_js_2 = require("./index.js");
52
+ const index_js_2 = require("../../cross-chain-transfer-protocol/chains/index.js");
53
+ const index_js_3 = require("../index.js");
54
+ const circleWalletsIndex = __importStar(require("../index.js"));
55
+ const index_js_4 = require("./index.js");
53
56
  vitest_1.vi.mock('@circle-fin/smart-contract-platform');
54
57
  vitest_1.vi.mock('@circle-fin/developer-controlled-wallets');
55
58
  vitest_1.vi.mock('../../../utils/generateIdempotencyKey.js');
@@ -59,6 +62,7 @@ vitest_1.vi.mock('@circle-fin/developer-controlled-wallets', () => ({
59
62
  (0, vitest_1.describe)('Provider', () => {
60
63
  let provider;
61
64
  let mockClient;
65
+ let mockScp;
62
66
  (0, vitest_1.beforeEach)(() => {
63
67
  mockClient = {
64
68
  createWalletSet: vitest_1.vi.fn(),
@@ -66,22 +70,29 @@ vitest_1.vi.mock('@circle-fin/developer-controlled-wallets', () => ({
66
70
  listWallets: vitest_1.vi.fn(),
67
71
  getWallet: vitest_1.vi.fn(),
68
72
  estimateTransferFee: vitest_1.vi.fn(),
73
+ estimateContractExecutionFee: vitest_1.vi.fn(),
69
74
  createTransaction: vitest_1.vi.fn(),
75
+ createContractExecutionTransaction: vitest_1.vi.fn(),
70
76
  getTransaction: vitest_1.vi.fn(),
71
77
  getWalletTokenBalance: vitest_1.vi.fn(),
72
78
  deriveWallet: vitest_1.vi.fn(),
73
79
  getNotificationSignature: vitest_1.vi.fn(),
74
80
  getWalletsWithBalances: vitest_1.vi.fn(),
75
81
  requestTestnetTokens: vitest_1.vi.fn(() => ''),
76
- signTypedData: vitest_1.vi.fn(),
77
82
  signTransaction: vitest_1.vi.fn(),
83
+ signTypedData: vitest_1.vi.fn(),
78
84
  listTransactions: vitest_1.vi.fn(),
79
85
  };
86
+ mockScp = {
87
+ queryContract: vitest_1.vi.fn(),
88
+ };
80
89
  developer_controlled_wallets_1.initiateDeveloperControlledWalletsClient.mockReturnValue(mockClient);
81
- provider = new index_js_2.Provider({
90
+ smart_contract_platform_1.initiateSmartContractPlatformClient.mockReturnValue(mockScp);
91
+ provider = new index_js_4.Provider({
82
92
  apiKey: 'test-api-key',
83
93
  entitySecret: 'test-entity-secret',
84
94
  baseUrl: 'base-url',
95
+ chainId: 1,
85
96
  });
86
97
  });
87
98
  (0, vitest_1.beforeEach)(() => {
@@ -91,7 +102,7 @@ vitest_1.vi.mock('@circle-fin/developer-controlled-wallets', () => ({
91
102
  const params = { name: 'test-wallet-set' };
92
103
  const response = { data: { walletSet: 'test-wallet-set-id' } };
93
104
  mockClient.createWalletSet.mockResolvedValue(response);
94
- const result = await provider.circle_createWalletSet(params);
105
+ const result = await provider.request({ method: 'circle_createWalletSet', params: [params] });
95
106
  (0, vitest_1.expect)(result).toBe('test-wallet-set-id');
96
107
  (0, vitest_1.expect)(mockClient.createWalletSet).toHaveBeenCalledWith(params);
97
108
  });
@@ -103,7 +114,7 @@ vitest_1.vi.mock('@circle-fin/developer-controlled-wallets', () => ({
103
114
  };
104
115
  const response = { data: { wallets: ['wallet1'] } };
105
116
  mockClient.createWallets.mockResolvedValue(response);
106
- const result = await provider.circle_createWallets(params);
117
+ const result = await provider.request({ method: 'circle_createWallets', params: [params] });
107
118
  (0, vitest_1.expect)(result).toEqual(['wallet1']);
108
119
  (0, vitest_1.expect)(mockClient.createWallets).toHaveBeenCalledWith(params);
109
120
  });
@@ -111,7 +122,7 @@ vitest_1.vi.mock('@circle-fin/developer-controlled-wallets', () => ({
111
122
  const params = { walletSetId: 'test-wallet-set-id' };
112
123
  const response = { data: { wallets: ['wallet1', 'wallet2'] } };
113
124
  mockClient.listWallets.mockResolvedValue(response);
114
- const result = await provider.circle_listWallets(params);
125
+ const result = await provider.request({ method: 'circle_listWallets', params: [params] });
115
126
  (0, vitest_1.expect)(result).toEqual(['wallet1', 'wallet2']);
116
127
  (0, vitest_1.expect)(mockClient.listWallets).toHaveBeenCalledWith(params);
117
128
  });
@@ -123,7 +134,7 @@ vitest_1.vi.mock('@circle-fin/developer-controlled-wallets', () => ({
123
134
  ];
124
135
  const response = { data: { transactions } };
125
136
  mockClient.listTransactions.mockResolvedValue(response);
126
- const result = await provider.circle_listTransactions(params);
137
+ const result = await provider.request({ method: 'circle_listTransactions', params: [params] });
127
138
  (0, vitest_1.expect)(result).toEqual(transactions);
128
139
  (0, vitest_1.expect)(mockClient.listTransactions).toHaveBeenCalledWith(params);
129
140
  });
@@ -131,7 +142,7 @@ vitest_1.vi.mock('@circle-fin/developer-controlled-wallets', () => ({
131
142
  const params = { walletId: 'empty-wallet-id' };
132
143
  const response = { data: {} }; // No transactions property
133
144
  mockClient.listTransactions.mockResolvedValue(response);
134
- const result = await provider.circle_listTransactions(params);
145
+ const result = await provider.request({ method: 'circle_listTransactions', params: [params] });
135
146
  (0, vitest_1.expect)(result).toEqual([]);
136
147
  (0, vitest_1.expect)(mockClient.listTransactions).toHaveBeenCalledWith(params);
137
148
  });
@@ -150,7 +161,7 @@ vitest_1.vi.mock('@circle-fin/developer-controlled-wallets', () => ({
150
161
  },
151
162
  };
152
163
  mockClient.estimateTransferFee.mockResolvedValue(response);
153
- const result = await provider.circle_estimateTransferFee(params);
164
+ const result = await provider.request({ method: 'circle_estimateTransferFee', params: [params] });
154
165
  (0, vitest_1.expect)(result).toEqual({
155
166
  high: {
156
167
  gasLimit: '4',
@@ -186,7 +197,7 @@ vitest_1.vi.mock('@circle-fin/developer-controlled-wallets', () => ({
186
197
  },
187
198
  };
188
199
  mockClient.estimateTransferFee.mockResolvedValue(response);
189
- const result = await provider.circle_estimateTransferFee(params);
200
+ const result = await provider.request({ method: 'circle_estimateTransferFee', params: [params] });
190
201
  (0, vitest_1.expect)(result).toEqual({
191
202
  high: {
192
203
  gasLimit: '4',
@@ -220,7 +231,7 @@ vitest_1.vi.mock('@circle-fin/developer-controlled-wallets', () => ({
220
231
  const getTransactionResult = { ...createTransactionResult, state: 'COMPLETE', txHash: '0x1234' };
221
232
  mockClient.createTransaction.mockResolvedValue({ data: createTransactionResult });
222
233
  mockClient.getTransaction.mockResolvedValue({ data: { transaction: getTransactionResult } });
223
- const result = await provider.circle_createTransaction(params);
234
+ const result = await provider.request({ method: 'circle_createTransaction', params: [params] });
224
235
  (0, vitest_1.expect)(mockClient.createTransaction).toHaveBeenCalledWith({
225
236
  walletId: 'test-wallet-id',
226
237
  amount: ['100'],
@@ -245,7 +256,7 @@ vitest_1.vi.mock('@circle-fin/developer-controlled-wallets', () => ({
245
256
  const getTransactionResult = { ...createTransactionResult, state: 'COMPLETE', txHash: '0x1234' };
246
257
  mockClient.createTransaction.mockResolvedValue({ data: createTransactionResult });
247
258
  mockClient.getTransaction.mockResolvedValue({ data: { transaction: getTransactionResult } });
248
- const result = await provider.circle_createTransaction(params);
259
+ const result = await provider.request({ method: 'circle_createTransaction', params: [params] });
249
260
  (0, vitest_1.expect)(mockClient.createTransaction).toHaveBeenCalledWith({
250
261
  walletId: 'test-wallet-id',
251
262
  amount: ['100'],
@@ -279,7 +290,7 @@ vitest_1.vi.mock('@circle-fin/developer-controlled-wallets', () => ({
279
290
  });
280
291
  mockClient.createTransaction.mockResolvedValue({ data: createTransactionResult });
281
292
  mockClient.getTransaction.mockResolvedValue({ data: { transaction: getTransactionResult } });
282
- const result = await provider.circle_createTransaction(params);
293
+ const result = await provider.request({ method: 'circle_createTransaction', params: [params] });
283
294
  (0, vitest_1.expect)(mockClient.createTransaction).toHaveBeenCalledWith({
284
295
  destinationAddress: '0x456',
285
296
  blockchain: 'MATIC-AMOY',
@@ -305,7 +316,74 @@ vitest_1.vi.mock('@circle-fin/developer-controlled-wallets', () => ({
305
316
  mockClient.listWallets.mockResolvedValue({
306
317
  data: { wallets: [] },
307
318
  });
308
- await (0, vitest_1.expect)(provider.circle_createTransaction(params)).rejects.toThrowError('156001');
319
+ await (0, vitest_1.expect)(provider.request({ method: 'circle_createTransaction', params: [params] })).rejects.toThrowError('156001');
320
+ });
321
+ (0, vitest_1.it)('should wait for transaction hash when waitForTransactionHash is true', async () => {
322
+ const params = {
323
+ walletId: 'test-wallet-id',
324
+ amount: ['100'],
325
+ tokenId: '0x123',
326
+ fee: {
327
+ type: 'level',
328
+ config: {
329
+ feeLevel: 'LOW',
330
+ },
331
+ },
332
+ waitForTransactionHash: true,
333
+ };
334
+ const createTransactionResult = { id: 'transaction-id', state: 'QUEUED' };
335
+ const getTransactionResult = { id: 'transaction-id', state: 'COMPLETE', txHash: '0x123' };
336
+ mockClient.createTransaction.mockResolvedValue({ data: createTransactionResult });
337
+ mockClient.getTransaction.mockResolvedValue({ data: { transaction: getTransactionResult } });
338
+ const result = await provider.request({ method: 'circle_createTransaction', params: [params] });
339
+ (0, vitest_1.expect)(result).toEqual(getTransactionResult);
340
+ (0, vitest_1.expect)(mockClient.createTransaction).toHaveBeenCalledWith({
341
+ walletId: 'test-wallet-id',
342
+ amount: ['100'],
343
+ tokenId: '0x123',
344
+ fee: {
345
+ type: 'level',
346
+ config: {
347
+ feeLevel: 'LOW',
348
+ },
349
+ },
350
+ waitForTransactionHash: true,
351
+ });
352
+ (0, vitest_1.expect)(mockClient.getTransaction).toHaveBeenCalledWith({ id: 'transaction-id' });
353
+ });
354
+ (0, vitest_1.it)('should not wait for transaction hash when waitForTransactionHash is false', async () => {
355
+ const params = {
356
+ walletId: 'test-wallet-id',
357
+ amount: ['100'],
358
+ tokenId: '0x123',
359
+ fee: {
360
+ type: 'level',
361
+ config: {
362
+ feeLevel: 'LOW',
363
+ },
364
+ },
365
+ waitForTransactionHash: false,
366
+ };
367
+ const createTransactionResult = { id: 'transaction-id', state: 'QUEUED' };
368
+ mockClient.createTransaction.mockResolvedValue({ data: createTransactionResult });
369
+ mockClient.getTransaction.mockResolvedValue({ data: { transaction: createTransactionResult } });
370
+ const result = await provider.request({ method: 'circle_createTransaction', params: [params] });
371
+ (0, vitest_1.expect)(result).toEqual(createTransactionResult);
372
+ (0, vitest_1.expect)(mockClient.createTransaction).toHaveBeenCalledWith({
373
+ walletId: 'test-wallet-id',
374
+ amount: ['100'],
375
+ tokenId: '0x123',
376
+ fee: {
377
+ type: 'level',
378
+ config: {
379
+ feeLevel: 'LOW',
380
+ },
381
+ },
382
+ waitForTransactionHash: false,
383
+ });
384
+ // Should call getTransaction once to get the transaction structure, but not wait for txHash
385
+ (0, vitest_1.expect)(mockClient.getTransaction).toHaveBeenCalledWith({ id: 'transaction-id' });
386
+ (0, vitest_1.expect)(mockClient.getTransaction).toHaveBeenCalledTimes(1);
309
387
  });
310
388
  });
311
389
  (0, vitest_1.describe)('circle_getTransaction', () => {
@@ -313,7 +391,7 @@ vitest_1.vi.mock('@circle-fin/developer-controlled-wallets', () => ({
313
391
  const params = { id: 'transaction-id' };
314
392
  const getTransactionResult = { ...params, state: 'COMPLETE', txHash: '0x123' };
315
393
  mockClient.getTransaction.mockResolvedValue({ data: { transaction: getTransactionResult } });
316
- const result = await provider.circle_getTransaction(params);
394
+ const result = await provider.request({ method: 'circle_getTransaction', params: [params] });
317
395
  (0, vitest_1.expect)(mockClient.getTransaction).toHaveBeenCalledWith(params);
318
396
  (0, vitest_1.expect)(result).toMatchObject(getTransactionResult);
319
397
  });
@@ -465,7 +543,7 @@ vitest_1.vi.mock('@circle-fin/developer-controlled-wallets', () => ({
465
543
  const params = { id: 'wallet-id', blockchain: 'MATIC-AMOY' };
466
544
  const expectedResult = { id: 'wallet-id', blockchain: 'MATIC-AMOY' };
467
545
  mockClient.deriveWallet.mockResolvedValue({ data: { wallet: expectedResult } });
468
- const result = await provider.circle_deriveWallet(params);
546
+ const result = await provider.request({ method: 'circle_deriveWallet', params: [params] });
469
547
  (0, vitest_1.expect)(mockClient.deriveWallet).toHaveBeenCalledWith(params);
470
548
  (0, vitest_1.expect)(result).toEqual(expectedResult);
471
549
  });
@@ -475,7 +553,7 @@ vitest_1.vi.mock('@circle-fin/developer-controlled-wallets', () => ({
475
553
  const params = { id: 'wallet-id' };
476
554
  const expectedResult = { id: 'wallet-id', blockchain: 'ETH-SEPOLIA' };
477
555
  mockClient.getWallet.mockResolvedValue({ data: { wallet: expectedResult } });
478
- const result = await provider.circle_getWallet(params);
556
+ const result = await provider.request({ method: 'circle_getWallet', params: [params] });
479
557
  (0, vitest_1.expect)(mockClient.getWallet).toHaveBeenCalledWith(params);
480
558
  (0, vitest_1.expect)(result).toEqual(expectedResult);
481
559
  });
@@ -550,38 +628,44 @@ vitest_1.vi.mock('@circle-fin/developer-controlled-wallets', () => ({
550
628
  },
551
629
  ];
552
630
  mockClient.getWalletsWithBalances.mockResolvedValue({ data: { wallets: expectedResult } });
553
- const result = await provider.circle_getWalletsWithBalances(params);
631
+ const result = await provider.request({ method: 'circle_getWalletsWithBalances', params: [params] });
554
632
  (0, vitest_1.expect)(mockClient.getWalletsWithBalances).toHaveBeenCalledWith(params);
555
633
  (0, vitest_1.expect)(result).toEqual(expectedResult);
556
634
  });
557
635
  });
558
- (0, vitest_1.describe)('circle_signTypedData', () => {
559
- (0, vitest_1.it)('should return signed typed data', async () => {
636
+ (0, vitest_1.describe)('circle_signTransaction', () => {
637
+ (0, vitest_1.it)('should return signed transaction', async () => {
560
638
  const params = {
561
639
  walletId: '00000000-0000-0000-0000-000000000000',
562
- data: '{"types": {"Data": [{ "name": "dummy", "type": "string" }],"EIP712Domain":[{ "name": "name", "type": "string" },{ "name": "chainId", "type": "uint256" }]}, "domain": { "name": "Test", "chainId": 1337 }, "primaryType": "Data", "message": { "dummy": "dummy" }}',
640
+ transaction: '{"nonce":1,"to":"0x9e4ebf23f713268b8e72cd162337f20c536357c9","value":"10000000000000000","gas":"21000","maxFeePerGas":"42000000000","maxPriorityFeePerGas":"25000000000","chainId":80002}',
641
+ memo: 'hello world',
563
642
  };
564
643
  const expectedResult = {
565
- signature: '3W6r38STvZuBSmk2bbbct132SjEsYSARo3CJi3JQvNUaFoYu',
644
+ signature: '0xe35aff124b45a36fd438ddfc0c61306e1001fdac65d87131591e7e12ef1010707fcc4194739acd0eec173fa31dda4d3c3381967f06933adc57d5ef08176a8e0900',
645
+ signedTransaction: '0x02f87683013882018505d21dba008509c7652400825208949e4ebf23f713268b8e72cd162337f20c536357c9872386f26fc1000080c080a0e35aff124b45a36fd438ddfc0c61306e1001fdac65d87131591e7e12ef101070a07fcc4194739acd0eec173fa31dda4d3c3381967f06933adc57d5ef08176a8e09',
646
+ txHash: '0xc37b57369e8c25cc5484829d23e288dd8416107a92b5d6e2d0a9753703fc4fed',
566
647
  };
567
- mockClient.signTypedData.mockResolvedValue({ data: expectedResult });
568
- const result = await provider.circle_signTypedData(params);
569
- (0, vitest_1.expect)(mockClient.signTypedData).toHaveBeenCalledWith(params);
648
+ mockClient.signTransaction.mockResolvedValue({ data: expectedResult });
649
+ const result = await provider.request({ method: 'circle_signTransaction', params: [params] });
650
+ (0, vitest_1.expect)(mockClient.signTransaction).toHaveBeenCalledWith(params);
570
651
  (0, vitest_1.expect)(result).toEqual(expectedResult);
571
652
  });
572
653
  (0, vitest_1.it)('should resolve address and blockchain to walletId', async () => {
573
654
  const params = {
574
655
  address: '0x9e4ebf23f713268b8e72cd162337f20c536357c9',
575
- blockchain: 'ETH-SEPOLIA',
576
- data: '{"types": {"Data": [{ "name": "dummy", "type": "string" }],"EIP712Domain":[{ "name": "name", "type": "string" },{ "name": "chainId", "type": "uint256" }]}, "domain": { "name": "Test", "chainId": 1337 }, "primaryType": "Data", "message": { "dummy": "dummy" }}',
656
+ blockchain: 'EVM-TESTNET',
657
+ transaction: '{"nonce":1,"to":"0x9e4ebf23f713268b8e72cd162337f20c536357c9","value":"10000000000000000","gas":"21000","maxFeePerGas":"42000000000","maxPriorityFeePerGas":"25000000000","chainId":80002}',
658
+ memo: 'hello world',
577
659
  };
578
660
  const expectedResult = {
579
- signature: '3W6r38STvZuBSmk2bbbct132SjEsYSARo3CJi3JQvNUaFoYu',
661
+ signature: '0xe35aff124b45a36fd438ddfc0c61306e1001fdac65d87131591e7e12ef1010707fcc4194739acd0eec173fa31dda4d3c3381967f06933adc57d5ef08176a8e0900',
662
+ signedTransaction: '0x02f87683013882018505d21dba008509c7652400825208949e4ebf23f713268b8e72cd162337f20c536357c9872386f26fc1000080c080a0e35aff124b45a36fd438ddfc0c61306e1001fdac65d87131591e7e12ef101070a07fcc4194739acd0eec173fa31dda4d3c3381967f06933adc57d5ef08176a8e09',
663
+ txHash: '0xc37b57369e8c25cc5484829d23e288dd8416107a92b5d6e2d0a9753703fc4fed',
580
664
  };
581
- mockClient.signTypedData.mockResolvedValue({ data: expectedResult });
665
+ mockClient.signTransaction.mockResolvedValue({ data: expectedResult });
582
666
  mockClient.listWallets.mockResolvedValue({ data: { wallets: [{ id: 'my-wallet-id' }] } });
583
- await provider.circle_signTypedData(params);
584
- (0, vitest_1.expect)(mockClient.signTypedData).toHaveBeenCalledWith({
667
+ await provider.request({ method: 'circle_signTransaction', params: [params] });
668
+ (0, vitest_1.expect)(mockClient.signTransaction).toHaveBeenCalledWith({
585
669
  ...params,
586
670
  address: undefined,
587
671
  blockchain: undefined,
@@ -589,45 +673,154 @@ vitest_1.vi.mock('@circle-fin/developer-controlled-wallets', () => ({
589
673
  });
590
674
  });
591
675
  });
592
- (0, vitest_1.describe)('circle_signTransaction', () => {
593
- (0, vitest_1.it)('should return signed transaction', async () => {
676
+ (0, vitest_1.describe)('circle_signTypedData', () => {
677
+ (0, vitest_1.it)('should return signed typed data', async () => {
594
678
  const params = {
595
679
  walletId: '00000000-0000-0000-0000-000000000000',
596
- transaction: '{"nonce":1,"to":"0x9e4ebf23f713268b8e72cd162337f20c536357c9","value":"10000000000000000","gas":"21000","maxFeePerGas":"42000000000","maxPriorityFeePerGas":"25000000000","chainId":80002}',
597
- memo: 'hello world',
680
+ data: '{"types":{"EIP712Domain":[{"name":"name","type":"string"},{"name":"version","type":"string"},{"name":"chainId","type":"uint256"},{"name":"verifyingContract","type":"address"}],"Person":[{"name":"name","type":"string"},{"name":"wallet","type":"address"}]},"primaryType":"Person","domain":{"name":"Ether Mail","version":"1","chainId":1,"verifyingContract":"0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC"},"message":{"name":"Bob","wallet":"0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB"}}',
681
+ memo: 'test signature',
598
682
  };
599
683
  const expectedResult = {
600
- signature: '0xe35aff124b45a36fd438ddfc0c61306e1001fdac65d87131591e7e12ef1010707fcc4194739acd0eec173fa31dda4d3c3381967f06933adc57d5ef08176a8e0900',
601
- signedTransaction: '0x02f87683013882018505d21dba008509c7652400825208949e4ebf23f713268b8e72cd162337f20c536357c9872386f26fc1000080c080a0e35aff124b45a36fd438ddfc0c61306e1001fdac65d87131591e7e12ef101070a07fcc4194739acd0eec173fa31dda4d3c3381967f06933adc57d5ef08176a8e09',
602
- txHash: '0xc37b57369e8c25cc5484829d23e288dd8416107a92b5d6e2d0a9753703fc4fed',
684
+ signature: '0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef12',
603
685
  };
604
- mockClient.signTransaction.mockResolvedValue({ data: expectedResult });
605
- const result = await provider.circle_signTransaction(params);
606
- (0, vitest_1.expect)(mockClient.signTransaction).toHaveBeenCalledWith(params);
686
+ mockClient.signTypedData.mockResolvedValue({ data: expectedResult });
687
+ const result = await provider.request({ method: 'circle_signTypedData', params: [params] });
688
+ (0, vitest_1.expect)(mockClient.signTypedData).toHaveBeenCalledWith(params);
607
689
  (0, vitest_1.expect)(result).toEqual(expectedResult);
608
690
  });
609
691
  (0, vitest_1.it)('should resolve address and blockchain to walletId', async () => {
610
692
  const params = {
611
693
  address: '0x9e4ebf23f713268b8e72cd162337f20c536357c9',
612
- blockchain: 'EVM-TESTNET',
613
- transaction: '{"nonce":1,"to":"0x9e4ebf23f713268b8e72cd162337f20c536357c9","value":"10000000000000000","gas":"21000","maxFeePerGas":"42000000000","maxPriorityFeePerGas":"25000000000","chainId":80002}',
614
- memo: 'hello world',
694
+ blockchain: 'ETH-SEPOLIA',
695
+ data: '{"types":{"EIP712Domain":[{"name":"name","type":"string"},{"name":"version","type":"string"},{"name":"chainId","type":"uint256"},{"name":"verifyingContract","type":"address"}],"Person":[{"name":"name","type":"string"},{"name":"wallet","type":"address"}]},"primaryType":"Person","domain":{"name":"Ether Mail","version":"1","chainId":1,"verifyingContract":"0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC"},"message":{"name":"Bob","wallet":"0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB"}}',
696
+ memo: 'test signature',
615
697
  };
616
698
  const expectedResult = {
617
- signature: '0xe35aff124b45a36fd438ddfc0c61306e1001fdac65d87131591e7e12ef1010707fcc4194739acd0eec173fa31dda4d3c3381967f06933adc57d5ef08176a8e0900',
618
- signedTransaction: '0x02f87683013882018505d21dba008509c7652400825208949e4ebf23f713268b8e72cd162337f20c536357c9872386f26fc1000080c080a0e35aff124b45a36fd438ddfc0c61306e1001fdac65d87131591e7e12ef101070a07fcc4194739acd0eec173fa31dda4d3c3381967f06933adc57d5ef08176a8e09',
619
- txHash: '0xc37b57369e8c25cc5484829d23e288dd8416107a92b5d6e2d0a9753703fc4fed',
699
+ signature: '0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef12',
620
700
  };
621
- mockClient.signTransaction.mockResolvedValue({ data: expectedResult });
701
+ mockClient.signTypedData.mockResolvedValue({ data: expectedResult });
622
702
  mockClient.listWallets.mockResolvedValue({ data: { wallets: [{ id: 'my-wallet-id' }] } });
623
- await provider.circle_signTransaction(params);
624
- (0, vitest_1.expect)(mockClient.signTransaction).toHaveBeenCalledWith({
703
+ await provider.request({ method: 'circle_signTypedData', params: [params] });
704
+ (0, vitest_1.expect)(mockClient.signTypedData).toHaveBeenCalledWith({
625
705
  ...params,
626
706
  address: undefined,
627
707
  blockchain: undefined,
628
708
  walletId: 'my-wallet-id',
629
709
  });
630
710
  });
711
+ (0, vitest_1.it)('should throw error when wallet not found for address and blockchain', async () => {
712
+ const params = {
713
+ address: '0xNotFound',
714
+ blockchain: 'ETH-SEPOLIA',
715
+ data: '{"types":{"EIP712Domain":[]},"primaryType":"Person","domain":{},"message":{}}',
716
+ };
717
+ mockClient.listWallets.mockResolvedValue({ data: { wallets: [] } });
718
+ await (0, vitest_1.expect)(provider.request({ method: 'circle_signTypedData', params: [params] })).rejects.toThrowError('156001');
719
+ });
720
+ });
721
+ (0, vitest_1.describe)('eth_signTypedData_v4', () => {
722
+ (0, vitest_1.it)('should sign typed data and return signature', async () => {
723
+ const address = '0x9e4ebf23f713268b8e72cd162337f20c536357c9';
724
+ const message = '{"types":{"EIP712Domain":[{"name":"name","type":"string"},{"name":"version","type":"string"},{"name":"chainId","type":"uint256"},{"name":"verifyingContract","type":"address"}],"Person":[{"name":"name","type":"string"},{"name":"wallet","type":"address"}]},"primaryType":"Person","domain":{"name":"Ether Mail","version":"1","chainId":1,"verifyingContract":"0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC"},"message":{"name":"Bob","wallet":"0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB"}}';
725
+ const expectedSignature = '0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef12';
726
+ mockClient.signTypedData.mockResolvedValue({
727
+ data: { signature: expectedSignature },
728
+ });
729
+ mockClient.listWallets.mockResolvedValue({
730
+ data: { wallets: [{ id: 'my-wallet-id' }] },
731
+ });
732
+ const result = await provider.request({ method: 'eth_signTypedData_v4', params: [address, message] });
733
+ (0, vitest_1.expect)(result).toBe(expectedSignature);
734
+ (0, vitest_1.expect)(mockClient.signTypedData).toHaveBeenCalledWith({
735
+ walletId: 'my-wallet-id',
736
+ data: message,
737
+ });
738
+ });
739
+ (0, vitest_1.it)('should use provider chainId regardless of message domain chainId', async () => {
740
+ const address = '0x9e4ebf23f713268b8e72cd162337f20c536357c9';
741
+ // Message contains Sepolia chainId (11155111) in domain, but provider uses mainnet (chainId: 1)
742
+ const message = '{"types":{"EIP712Domain":[{"name":"chainId","type":"uint256"}],"Person":[]},"primaryType":"Person","domain":{"chainId":11155111},"message":{}}';
743
+ const expectedSignature = '0xabcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890';
744
+ mockClient.signTypedData.mockResolvedValue({
745
+ data: { signature: expectedSignature },
746
+ });
747
+ mockClient.listWallets.mockResolvedValue({
748
+ data: { wallets: [{ id: 'mainnet-wallet-id' }] },
749
+ });
750
+ const result = await provider.request({ method: 'eth_signTypedData_v4', params: [address, message] });
751
+ (0, vitest_1.expect)(result).toBe(expectedSignature);
752
+ (0, vitest_1.expect)(mockClient.signTypedData).toHaveBeenCalledWith({
753
+ walletId: 'mainnet-wallet-id',
754
+ data: message,
755
+ });
756
+ // Verify that listWallets was called with ETH blockchain (derived from provider's chainId 1)
757
+ // not ETH-SEPOLIA (which would be derived from message domain chainId 11155111)
758
+ (0, vitest_1.expect)(mockClient.listWallets).toHaveBeenCalledWith({
759
+ address,
760
+ blockchain: 'ETH',
761
+ });
762
+ });
763
+ (0, vitest_1.it)('should throw error for unsupported provider chain ID', async () => {
764
+ // Create a provider with an unsupported chainId
765
+ const mockUnsupportedClient = {
766
+ signTypedData: vitest_1.vi.fn(),
767
+ listWallets: vitest_1.vi.fn(),
768
+ };
769
+ developer_controlled_wallets_1.initiateDeveloperControlledWalletsClient.mockReturnValueOnce(mockUnsupportedClient);
770
+ const unsupportedProvider = new index_js_4.Provider({
771
+ apiKey: 'test-api-key',
772
+ entitySecret: 'test-entity-secret',
773
+ baseUrl: 'base-url',
774
+ chainId: 999999, // Unsupported chainId
775
+ });
776
+ const address = '0x9e4ebf23f713268b8e72cd162337f20c536357c9';
777
+ const message = '{"types":{"EIP712Domain":[{"name":"chainId","type":"uint256"}],"Person":[]},"primaryType":"Person","domain":{"chainId":1},"message":{}}';
778
+ await (0, vitest_1.expect)(unsupportedProvider.request({ method: 'eth_signTypedData_v4', params: [address, message] })).rejects.toThrow();
779
+ });
780
+ (0, vitest_1.it)('should throw error when wallet not found', async () => {
781
+ const address = '0xNotFound';
782
+ const message = '{"types":{"EIP712Domain":[{"name":"chainId","type":"uint256"}],"Person":[]},"primaryType":"Person","domain":{"chainId":1},"message":{}}';
783
+ mockClient.listWallets.mockResolvedValue({ data: { wallets: [] } });
784
+ await (0, vitest_1.expect)(provider.request({ method: 'eth_signTypedData_v4', params: [address, message] })).rejects.toThrowError('156001');
785
+ });
786
+ (0, vitest_1.it)('should use provider chainId instead of message domain chainId', async () => {
787
+ // Mock the client for the new provider instance
788
+ const mockSepoliaClient = {
789
+ signTypedData: vitest_1.vi.fn(),
790
+ listWallets: vitest_1.vi.fn(),
791
+ };
792
+ developer_controlled_wallets_1.initiateDeveloperControlledWalletsClient.mockReturnValueOnce(mockSepoliaClient);
793
+ // Create provider with chainId 11155111 (Sepolia)
794
+ const sepoliaProvider = new index_js_4.Provider({
795
+ apiKey: 'test-api-key',
796
+ entitySecret: 'test-entity-secret',
797
+ baseUrl: 'base-url',
798
+ chainId: 11155111, // Sepolia chainId
799
+ });
800
+ const address = '0x9e4ebf23f713268b8e72cd162337f20c536357c9';
801
+ // Message has different chainId (1 = mainnet) in domain, but provider should use its own chainId (11155111)
802
+ const message = '{"types":{"EIP712Domain":[{"name":"name","type":"string"},{"name":"chainId","type":"uint256"}],"Person":[{"name":"name","type":"string"}]},"primaryType":"Person","domain":{"name":"Test","chainId":1},"message":{"name":"Alice"}}';
803
+ const expectedSignature = '0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef12';
804
+ mockSepoliaClient.signTypedData.mockResolvedValue({
805
+ data: { signature: expectedSignature },
806
+ });
807
+ mockSepoliaClient.listWallets.mockResolvedValue({
808
+ data: { wallets: [{ id: 'sepolia-wallet-id' }] },
809
+ });
810
+ const result = await sepoliaProvider.request({ method: 'eth_signTypedData_v4', params: [address, message] });
811
+ (0, vitest_1.expect)(result).toBe(expectedSignature);
812
+ // Verify that signTypedData was called with walletId (converted from address/blockchain)
813
+ (0, vitest_1.expect)(mockSepoliaClient.signTypedData).toHaveBeenCalledWith({
814
+ walletId: 'sepolia-wallet-id',
815
+ data: message,
816
+ });
817
+ // Verify that listWallets was called with ETH-SEPOLIA blockchain (derived from provider's chainId 11155111)
818
+ // not ETH (which would be derived from message domain chainId 1)
819
+ (0, vitest_1.expect)(mockSepoliaClient.listWallets).toHaveBeenCalledWith({
820
+ address,
821
+ blockchain: 'ETH-SEPOLIA',
822
+ });
823
+ });
631
824
  });
632
825
  (0, vitest_1.describe)('circle_requestTestnetTokens', () => {
633
826
  (0, vitest_1.it)('should return successfully', async () => {
@@ -638,7 +831,7 @@ vitest_1.vi.mock('@circle-fin/developer-controlled-wallets', () => ({
638
831
  usdc: false,
639
832
  eurc: true,
640
833
  };
641
- const result = await provider.circle_requestTestnetTokens(params);
834
+ const result = await provider.request({ method: 'circle_requestTestnetTokens', params: [params] });
642
835
  (0, vitest_1.expect)(result).toBe(undefined);
643
836
  (0, vitest_1.expect)(mockClient.requestTestnetTokens).toHaveBeenCalledWith(params);
644
837
  });
@@ -654,8 +847,8 @@ vitest_1.vi.mock('@circle-fin/developer-controlled-wallets', () => ({
654
847
  type: 'absolute',
655
848
  config: {
656
849
  gasLimit: '21000',
657
- maxFee: `${(0, viem_1.formatGwei)(index_js_1.SENTINEL_FEES)}`, // SENTINEL_FEES as string
658
- priorityFee: `${(0, viem_1.formatGwei)(index_js_1.SENTINEL_FEES)}`, // SENTINEL_FEES as string
850
+ maxFee: `${(0, viem_1.formatGwei)(index_js_3.SENTINEL_FEES)}`, // SENTINEL_FEES as string
851
+ priorityFee: `${(0, viem_1.formatGwei)(index_js_3.SENTINEL_FEES)}`, // SENTINEL_FEES as string
659
852
  },
660
853
  },
661
854
  };
@@ -670,8 +863,15 @@ vitest_1.vi.mock('@circle-fin/developer-controlled-wallets', () => ({
670
863
  },
671
864
  };
672
865
  mockClient.createTransaction.mockResolvedValue(mockResponse);
673
- mockClient.getTransaction.mockResolvedValue({ data: { transaction: mockResponse.data } });
674
- await provider.circle_createTransaction(params);
866
+ mockClient.getTransaction.mockResolvedValue({
867
+ data: {
868
+ transaction: {
869
+ ...mockResponse.data,
870
+ txHash: '0xabc123',
871
+ },
872
+ },
873
+ });
874
+ await provider.request({ method: 'circle_createTransaction', params: [params] });
675
875
  // Verify that SENTINEL_FEES are converted to level-based fee
676
876
  (0, vitest_1.expect)(mockClient.createTransaction).toHaveBeenCalledWith({
677
877
  walletId: 'test-wallet-id',
@@ -694,7 +894,7 @@ vitest_1.vi.mock('@circle-fin/developer-controlled-wallets', () => ({
694
894
  type: 'absolute',
695
895
  config: {
696
896
  gasLimit: '21000',
697
- maxFee: `${(0, viem_1.formatGwei)(index_js_1.SENTINEL_FEES)}`, // SENTINEL_FEES as string
897
+ maxFee: `${(0, viem_1.formatGwei)(index_js_3.SENTINEL_FEES)}`, // SENTINEL_FEES as string
698
898
  priorityFee: '0.001', // Normal fee
699
899
  },
700
900
  },
@@ -710,8 +910,15 @@ vitest_1.vi.mock('@circle-fin/developer-controlled-wallets', () => ({
710
910
  },
711
911
  };
712
912
  mockClient.createTransaction.mockResolvedValue(mockResponse);
713
- mockClient.getTransaction.mockResolvedValue({ data: { transaction: mockResponse.data } });
714
- await provider.circle_createTransaction(params);
913
+ mockClient.getTransaction.mockResolvedValue({
914
+ data: {
915
+ transaction: {
916
+ ...mockResponse.data,
917
+ txHash: '0xabc123',
918
+ },
919
+ },
920
+ });
921
+ await provider.request({ method: 'circle_createTransaction', params: [params] });
715
922
  // Verify that only maxFee is converted to empty string
716
923
  (0, vitest_1.expect)(mockClient.createTransaction).toHaveBeenCalledWith({
717
924
  walletId: 'test-wallet-id',
@@ -752,8 +959,15 @@ vitest_1.vi.mock('@circle-fin/developer-controlled-wallets', () => ({
752
959
  },
753
960
  };
754
961
  mockClient.createTransaction.mockResolvedValue(mockResponse);
755
- mockClient.getTransaction.mockResolvedValue({ data: { transaction: mockResponse.data } });
756
- await provider.circle_createTransaction(params);
962
+ mockClient.getTransaction.mockResolvedValue({
963
+ data: {
964
+ transaction: {
965
+ ...mockResponse.data,
966
+ txHash: '0xabc123',
967
+ },
968
+ },
969
+ });
970
+ await provider.request({ method: 'circle_createTransaction', params: [params] });
757
971
  // Verify that normal fees are not modified
758
972
  (0, vitest_1.expect)(mockClient.createTransaction).toHaveBeenCalledWith({
759
973
  walletId: 'test-wallet-id',
@@ -771,124 +985,1255 @@ vitest_1.vi.mock('@circle-fin/developer-controlled-wallets', () => ({
771
985
  });
772
986
  });
773
987
  });
774
- });
775
- (0, vitest_1.describe)('Provider 2', () => {
776
- let provider;
777
- const mockClient = {
778
- estimateContractExecutionFee: vitest_1.vi.fn(),
779
- createContractExecutionTransaction: vitest_1.vi.fn(),
780
- createTransaction: vitest_1.vi.fn(),
781
- getTransaction: vitest_1.vi.fn(),
782
- listWallets: vitest_1.vi.fn(),
783
- };
784
- const mockScp = {
785
- importContract: vitest_1.vi.fn(),
786
- };
787
- (0, vitest_1.beforeEach)(() => {
788
- ;
789
- developer_controlled_wallets_1.initiateDeveloperControlledWalletsClient.mockReturnValue(mockClient);
790
- smart_contract_platform_1.initiateSmartContractPlatformClient.mockReturnValue(mockScp);
791
- provider = new index_js_2.Provider({
792
- apiKey: 'test-api-key',
793
- entitySecret: 'test-entity-secret',
794
- baseUrl: 'base-url',
988
+ (0, vitest_1.describe)('defaultSignal getter', () => {
989
+ (0, vitest_1.it)('should return AbortSignal.timeout when timeout is set', () => {
990
+ const provider = new index_js_4.Provider({
991
+ apiKey: 'test-api-key',
992
+ entitySecret: 'test-entity-secret',
993
+ chainId: 1,
994
+ timeout: 5000,
995
+ });
996
+ const signal = provider.defaultSignal;
997
+ (0, vitest_1.expect)(signal).toBeInstanceOf(AbortSignal);
795
998
  });
796
- });
797
- (0, vitest_1.beforeEach)(() => {
798
- vitest_1.vi.restoreAllMocks();
799
- });
800
- (0, vitest_1.test)('estimate contract execution fee', async () => {
801
- const params = {
802
- abiFunctionSignature: 'value',
803
- source: {
804
- sourceAddress: 'sourceAddress',
805
- blockchain: 'ETH-SEPOLIA',
806
- },
807
- contractAddress: 'contractAddress',
808
- abiParameters: [],
809
- };
810
- mockClient.estimateContractExecutionFee.mockResolvedValue({
811
- data: {
812
- high: { gasLimit: '3', maxFee: '6', priorityFee: '9', baseFee: '12', networkFee: '15' },
813
- medium: { gasLimit: '2', maxFee: '4', priorityFee: '6', baseFee: '8', networkFee: '10' },
814
- low: { gasLimit: '1', maxFee: '2', priorityFee: '3', baseFee: '4', networkFee: '5' },
815
- },
999
+ (0, vitest_1.it)('should return undefined when timeout is not set', () => {
1000
+ const provider = new index_js_4.Provider({
1001
+ apiKey: 'test-api-key',
1002
+ entitySecret: 'test-entity-secret',
1003
+ chainId: 1,
1004
+ // timeout not provided
1005
+ });
1006
+ const signal = provider.defaultSignal;
1007
+ (0, vitest_1.expect)(signal).toBeUndefined();
816
1008
  });
817
- const result = await provider.circle_estimateContractExecutionFee(params);
818
- (0, vitest_1.expect)(result).toMatchObject({
819
- high: {
820
- gasLimit: '4',
821
- maxFee: '6.300000000000001',
822
- priorityFee: '9.450000000000001',
823
- baseFee: '12',
824
- networkFee: '15',
825
- },
826
- medium: { gasLimit: '3', maxFee: '4.2', priorityFee: '6.300000000000001', baseFee: '8', networkFee: '10' },
827
- low: { gasLimit: '2', maxFee: '2.1', priorityFee: '3.1500000000000004', baseFee: '4', networkFee: '5' },
1009
+ (0, vitest_1.it)('should return AbortSignal.timeout for zero timeout', () => {
1010
+ const provider = new index_js_4.Provider({
1011
+ apiKey: 'test-api-key',
1012
+ entitySecret: 'test-entity-secret',
1013
+ chainId: 1,
1014
+ timeout: 0,
1015
+ });
1016
+ const signal = provider.defaultSignal;
1017
+ (0, vitest_1.expect)(signal).toBeInstanceOf(AbortSignal);
828
1018
  });
829
- (0, vitest_1.expect)(mockClient.estimateContractExecutionFee).toHaveBeenCalledWith(params);
830
1019
  });
831
- (0, vitest_1.test)('estimate contract execution fee for SCA', async () => {
832
- const params = {
833
- abiFunctionSignature: 'value',
834
- source: {
835
- sourceAddress: 'sourceAddress',
836
- blockchain: 'ETH-SEPOLIA',
837
- },
838
- contractAddress: 'contractAddress',
839
- abiParameters: [],
840
- };
841
- mockClient.estimateContractExecutionFee.mockResolvedValue({
842
- data: {
843
- high: { gasLimit: '3', maxFee: '6', priorityFee: '9', baseFee: '12', networkFee: '15' },
844
- medium: { gasLimit: '2', maxFee: '4', priorityFee: '6', baseFee: '8', networkFee: '10' },
845
- low: { gasLimit: '1', maxFee: '2', priorityFee: '3', baseFee: '4', networkFee: '5' },
846
- callGasLimit: '11111',
847
- verificationGasLimit: '22222',
848
- preVerificationGas: '33333',
849
- },
1020
+ (0, vitest_1.describe)('Provider constructor validation', () => {
1021
+ (0, vitest_1.it)('should throw error when pollingInterval is negative', () => {
1022
+ (0, vitest_1.expect)(() => new index_js_4.Provider({
1023
+ apiKey: 'test-api-key',
1024
+ entitySecret: 'test-entity-secret',
1025
+ chainId: 1,
1026
+ pollingInterval: -1000,
1027
+ })).toThrow('Polling interval must be greater than 0');
850
1028
  });
851
- const result = await provider.circle_estimateContractExecutionFee(params);
852
- (0, vitest_1.expect)(result).toMatchObject({
853
- high: {
854
- gasLimit: '4',
855
- maxFee: '6.300000000000001',
856
- priorityFee: '9.450000000000001',
857
- baseFee: '12',
858
- networkFee: '15',
859
- },
860
- medium: { gasLimit: '3', maxFee: '4.2', priorityFee: '6.300000000000001', baseFee: '8', networkFee: '10' },
861
- low: { gasLimit: '2', maxFee: '2.1', priorityFee: '3.1500000000000004', baseFee: '4', networkFee: '5' },
862
- callGasLimit: '11111',
863
- verificationGasLimit: '22222',
864
- preVerificationGas: '33333',
1029
+ (0, vitest_1.it)('should throw error when pollingInterval is zero', () => {
1030
+ (0, vitest_1.expect)(() => new index_js_4.Provider({
1031
+ apiKey: 'test-api-key',
1032
+ entitySecret: 'test-entity-secret',
1033
+ chainId: 1,
1034
+ pollingInterval: 0,
1035
+ })).toThrow('Polling interval must be greater than 0');
1036
+ });
1037
+ (0, vitest_1.it)('should accept positive pollingInterval', () => {
1038
+ (0, vitest_1.expect)(() => new index_js_4.Provider({
1039
+ apiKey: 'test-api-key',
1040
+ entitySecret: 'test-entity-secret',
1041
+ chainId: 1,
1042
+ pollingInterval: 2000,
1043
+ })).not.toThrow();
865
1044
  });
866
- (0, vitest_1.expect)(mockClient.estimateContractExecutionFee).toHaveBeenCalledWith(params);
867
1045
  });
868
- (0, vitest_1.describe)('create contract execution transaction', () => {
869
- vitest_1.test.each([
870
- {
871
- name: 'with wallet id',
872
- params: {
873
- walletId: 'test-wallet-id',
874
- contractAddress: '0xcontract-address',
875
- fee: {
876
- type: 'level',
877
- config: {
878
- feeLevel: 'LOW',
879
- },
880
- },
881
- },
882
- },
883
- {
884
- name: 'without wallet id',
885
- params: {
886
- contractAddress: '0xcontract-address',
887
- sourceAddress: '0xtest-address',
888
- blockchain: 'ETH-SEPOLIA',
889
- fee: {
890
- type: 'level',
891
- config: {
1046
+ (0, vitest_1.describe)('Request method with fallback support', () => {
1047
+ (0, vitest_1.it)('should fallback to fallback provider for unsupported methods', async () => {
1048
+ const mockFallback = vitest_1.vi.fn().mockReturnValue({
1049
+ request: vitest_1.vi.fn().mockResolvedValue('0x123abc'),
1050
+ });
1051
+ const providerWithMockFallback = new index_js_4.Provider({
1052
+ apiKey: 'test-api-key',
1053
+ entitySecret: 'test-entity-secret',
1054
+ chainId: 1,
1055
+ fallbackTransport: mockFallback,
1056
+ });
1057
+ const result = await providerWithMockFallback.request({
1058
+ method: 'eth_blockNumber',
1059
+ params: [],
1060
+ });
1061
+ (0, vitest_1.expect)(result).toBe('0x123abc');
1062
+ (0, vitest_1.expect)(mockFallback).toHaveBeenCalledTimes(1);
1063
+ const mockProvider = mockFallback();
1064
+ (0, vitest_1.expect)(mockProvider.request).toHaveBeenCalledWith({
1065
+ method: 'eth_blockNumber',
1066
+ params: [],
1067
+ });
1068
+ });
1069
+ (0, vitest_1.it)('should throw error for unsupported chain in fallback methods', async () => {
1070
+ const providerWithUnsupportedChain = new index_js_4.Provider({
1071
+ apiKey: 'test-api-key',
1072
+ entitySecret: 'test-entity-secret',
1073
+ chainId: 999999, // Unsupported chain
1074
+ });
1075
+ await (0, vitest_1.expect)(providerWithUnsupportedChain.request({ method: 'eth_blockNumber', params: [] })).rejects.toThrow();
1076
+ });
1077
+ (0, vitest_1.it)('should handle fallback errors gracefully', async () => {
1078
+ const mockFallback = vitest_1.vi.fn().mockReturnValue({
1079
+ request: vitest_1.vi.fn().mockRejectedValue(new Error('Network error')),
1080
+ });
1081
+ const providerWithMockFallback = new index_js_4.Provider({
1082
+ apiKey: 'test-api-key',
1083
+ entitySecret: 'test-entity-secret',
1084
+ chainId: 1,
1085
+ fallbackTransport: mockFallback,
1086
+ });
1087
+ await (0, vitest_1.expect)(providerWithMockFallback.request({
1088
+ method: 'eth_getTransactionByHash',
1089
+ params: ['0x123'],
1090
+ })).rejects.toThrow('Network error');
1091
+ });
1092
+ (0, vitest_1.it)('should call super.request first before falling back', async () => {
1093
+ const mockRequest = vitest_1.vi.fn().mockResolvedValue('0x456def');
1094
+ const mockFallback = vitest_1.vi.fn().mockReturnValue({
1095
+ request: mockRequest,
1096
+ });
1097
+ const providerWithMockFallback = new index_js_4.Provider({
1098
+ apiKey: 'test-api-key',
1099
+ entitySecret: 'test-entity-secret',
1100
+ chainId: 1,
1101
+ fallbackTransport: mockFallback,
1102
+ });
1103
+ // Mock a supported method to ensure it doesn't fallback
1104
+ const result = await providerWithMockFallback.request({
1105
+ method: 'eth_chainId',
1106
+ params: [],
1107
+ });
1108
+ (0, vitest_1.expect)(result).toBe('0x1'); // Should return chainId from provider, not fallback
1109
+ (0, vitest_1.expect)(mockFallback).toHaveBeenCalledTimes(1);
1110
+ (0, vitest_1.expect)(mockRequest).not.toHaveBeenCalled();
1111
+ });
1112
+ (0, vitest_1.it)('should only fallback on MethodNotFoundRpcError', async () => {
1113
+ const mockRequest = vitest_1.vi.fn().mockResolvedValue('fallback-result');
1114
+ const mockFallback = vitest_1.vi.fn().mockReturnValue({
1115
+ request: mockRequest,
1116
+ });
1117
+ const providerWithMockFallback = new index_js_4.Provider({
1118
+ apiKey: 'test-api-key',
1119
+ entitySecret: 'test-entity-secret',
1120
+ chainId: 1,
1121
+ fallbackTransport: mockFallback,
1122
+ });
1123
+ // Test with an error that's not MethodNotFoundRpcError (should not fallback)
1124
+ await (0, vitest_1.expect)(providerWithMockFallback.request({
1125
+ method: 'eth_chainId',
1126
+ params: [],
1127
+ })).resolves.toBe('0x1'); // Should succeed without fallback
1128
+ (0, vitest_1.expect)(mockFallback).toHaveBeenCalledTimes(1);
1129
+ (0, vitest_1.expect)(mockRequest).not.toHaveBeenCalled();
1130
+ });
1131
+ (0, vitest_1.it)('should properly handle MethodNotFoundRpcError and fallback', async () => {
1132
+ const mockFallback = vitest_1.vi.fn().mockReturnValue({
1133
+ request: vitest_1.vi.fn().mockResolvedValue('0xfallback123'),
1134
+ });
1135
+ const providerWithMockFallback = new index_js_4.Provider({
1136
+ apiKey: 'test-api-key',
1137
+ entitySecret: 'test-entity-secret',
1138
+ chainId: 1,
1139
+ fallbackTransport: mockFallback,
1140
+ });
1141
+ // Test that unsupported methods trigger fallback
1142
+ const result = await providerWithMockFallback.request({
1143
+ method: 'eth_getTransactionByHash',
1144
+ params: ['0x123'],
1145
+ });
1146
+ (0, vitest_1.expect)(result).toBe('0xfallback123');
1147
+ (0, vitest_1.expect)(mockFallback).toHaveBeenCalledTimes(1);
1148
+ const mockProvider = mockFallback();
1149
+ (0, vitest_1.expect)(mockProvider.request).toHaveBeenCalledWith({
1150
+ method: 'eth_getTransactionByHash',
1151
+ params: ['0x123'],
1152
+ });
1153
+ });
1154
+ (0, vitest_1.it)('should handle multiple fallback methods correctly', async () => {
1155
+ const mockRequest = vitest_1.vi
1156
+ .fn()
1157
+ .mockResolvedValueOnce('0xblock123')
1158
+ .mockResolvedValueOnce('0xtx456')
1159
+ .mockResolvedValueOnce('0xreceipt789');
1160
+ const mockFallback = vitest_1.vi.fn().mockReturnValue({
1161
+ request: mockRequest,
1162
+ });
1163
+ const providerWithMockFallback = new index_js_4.Provider({
1164
+ apiKey: 'test-api-key',
1165
+ entitySecret: 'test-entity-secret',
1166
+ chainId: 1,
1167
+ fallbackTransport: mockFallback,
1168
+ });
1169
+ // Test multiple different fallback methods
1170
+ const blockResult = await providerWithMockFallback.request({
1171
+ method: 'eth_blockNumber',
1172
+ params: [],
1173
+ });
1174
+ const txResult = await providerWithMockFallback.request({
1175
+ method: 'eth_getTransactionByHash',
1176
+ params: ['0x123'],
1177
+ });
1178
+ const receiptResult = await providerWithMockFallback.request({
1179
+ method: 'eth_getTransactionReceipt',
1180
+ params: ['0x456'],
1181
+ });
1182
+ (0, vitest_1.expect)(blockResult).toBe('0xblock123');
1183
+ (0, vitest_1.expect)(txResult).toBe('0xtx456');
1184
+ (0, vitest_1.expect)(receiptResult).toBe('0xreceipt789');
1185
+ (0, vitest_1.expect)(mockFallback).toHaveBeenCalledTimes(1);
1186
+ (0, vitest_1.expect)(mockRequest).toHaveBeenCalledTimes(3);
1187
+ });
1188
+ (0, vitest_1.it)('should not fallback when fallback is null', async () => {
1189
+ const providerWithNullFallback = new index_js_4.Provider({
1190
+ apiKey: 'test-api-key',
1191
+ entitySecret: 'test-entity-secret',
1192
+ chainId: 1,
1193
+ fallbackTransport: null,
1194
+ });
1195
+ await (0, vitest_1.expect)(providerWithNullFallback.request({
1196
+ method: 'eth_blockNumber',
1197
+ params: [],
1198
+ })).rejects.toThrow('The method "eth_blockNumber" does not exist / is not available');
1199
+ });
1200
+ (0, vitest_1.it)('should fallback to fallback provider for eth_call with UnsupportedChainError', async () => {
1201
+ const mockFallback = vitest_1.vi.fn().mockReturnValue({
1202
+ request: vitest_1.vi.fn().mockResolvedValue('0x1'),
1203
+ });
1204
+ const providerWithFallback = new index_js_4.Provider({
1205
+ apiKey: 'api-key',
1206
+ entitySecret: 'entity-secret',
1207
+ chainId: index_js_2.AVAX.id, // AVAX is supported in devC, but not supported in SCP query contract API.
1208
+ fallbackTransport: mockFallback,
1209
+ });
1210
+ const params = { to: '0x742d35cc6634C0532925a3b8D0c8c0C8D8d8d8d8' };
1211
+ const result = await providerWithFallback.request({
1212
+ method: 'eth_call',
1213
+ params: [params],
1214
+ });
1215
+ (0, vitest_1.expect)(result).toBe('0x1');
1216
+ const mockProvider = mockFallback();
1217
+ (0, vitest_1.expect)(mockProvider.request).toHaveBeenCalledWith({
1218
+ method: 'eth_call',
1219
+ params: [params],
1220
+ });
1221
+ });
1222
+ (0, vitest_1.it)('should not fallback for eth_call with non-UnsupportedChainError', async () => {
1223
+ const mockFallback = vitest_1.vi.fn().mockReturnValue({
1224
+ request: vitest_1.vi.fn().mockResolvedValue('should-not-be-called'),
1225
+ });
1226
+ mockScp.queryContract = vitest_1.vi.fn();
1227
+ smart_contract_platform_1.initiateSmartContractPlatformClient.mockReturnValue(mockScp);
1228
+ mockScp.queryContract.mockRejectedValue(new Error('Network timeout'));
1229
+ const provider = new index_js_4.Provider({
1230
+ apiKey: 'api-key',
1231
+ entitySecret: 'entity-secret',
1232
+ chainId: 1, // Supported chain
1233
+ fallbackTransport: mockFallback,
1234
+ });
1235
+ const params = {
1236
+ to: '0x742d35cc6634C0532925a3b8D0c8c0C8D8d8d8d8',
1237
+ data: '0x70a08231',
1238
+ };
1239
+ await (0, vitest_1.expect)(provider.request({
1240
+ method: 'eth_call',
1241
+ params: [params],
1242
+ })).rejects.toThrow('Network timeout');
1243
+ // Verify that fallback was not called.
1244
+ const mockProvider = mockFallback();
1245
+ (0, vitest_1.expect)(mockProvider.request).not.toHaveBeenCalled();
1246
+ });
1247
+ (0, vitest_1.it)('should not fallback for UnsupportedChainError with non-eth_call methods', async () => {
1248
+ const mockFallback = vitest_1.vi.fn().mockReturnValue({
1249
+ request: vitest_1.vi.fn().mockResolvedValue('should-not-be-called'),
1250
+ });
1251
+ const provider = new index_js_4.Provider({
1252
+ apiKey: 'api-key',
1253
+ entitySecret: 'entity-secret',
1254
+ chainId: 1,
1255
+ fallbackTransport: mockFallback,
1256
+ });
1257
+ // Simulate the throw of UnsupportedChainError.
1258
+ const extractChainSpy = vitest_1.vi.spyOn(circleWalletsIndex, 'extractChain');
1259
+ extractChainSpy.mockImplementation(() => {
1260
+ throw new index_js_1.UnsupportedChainError();
1261
+ });
1262
+ await (0, vitest_1.expect)(provider.request({
1263
+ method: 'eth_sendTransaction',
1264
+ params: [{ from: '0x123', to: '0x456', value: '0x0' }],
1265
+ })).rejects.toThrow(index_js_1.UnsupportedChainError);
1266
+ (0, vitest_1.expect)(extractChainSpy).toHaveBeenCalled();
1267
+ // Verify that fallback was not called.
1268
+ const mockProvider = mockFallback();
1269
+ (0, vitest_1.expect)(mockProvider.request).not.toHaveBeenCalled();
1270
+ extractChainSpy.mockRestore();
1271
+ });
1272
+ (0, vitest_1.it)('should not fallback for eth_call with UnsupportedChainError when fallback is null', async () => {
1273
+ const provider = new index_js_4.Provider({
1274
+ apiKey: 'api-key',
1275
+ entitySecret: 'entity-secret',
1276
+ chainId: index_js_2.AVAX.id,
1277
+ fallbackTransport: null,
1278
+ });
1279
+ const params = { to: '0x742d35cc6634C0532925a3b8D0c8c0C8D8d8d8d8' };
1280
+ await (0, vitest_1.expect)(provider.request({
1281
+ method: 'eth_call',
1282
+ params: [params],
1283
+ })).rejects.toThrow(viem_1.MethodNotFoundRpcError);
1284
+ });
1285
+ });
1286
+ (0, vitest_1.describe)('eth_sendTransaction', () => {
1287
+ (0, vitest_1.it)('should create transaction and return hash', async () => {
1288
+ const params = {
1289
+ from: '0x123',
1290
+ to: '0x456',
1291
+ value: (0, viem_1.numberToHex)((0, viem_1.parseEther)('0.01')),
1292
+ };
1293
+ mockClient.listWallets.mockResolvedValue({
1294
+ data: { wallets: [{ id: 'wallet-1' }] },
1295
+ });
1296
+ mockClient.createTransaction.mockResolvedValue({
1297
+ data: { id: 'tx-1' },
1298
+ });
1299
+ mockClient.getTransaction
1300
+ .mockResolvedValueOnce({
1301
+ data: {
1302
+ transaction: { id: 'tx-1', state: 'PENDING' },
1303
+ },
1304
+ })
1305
+ .mockResolvedValueOnce({
1306
+ data: {
1307
+ transaction: {
1308
+ id: 'tx-1',
1309
+ state: 'COMPLETE',
1310
+ txHash: '0xabc123',
1311
+ },
1312
+ },
1313
+ });
1314
+ const result = await provider.request({
1315
+ method: 'eth_sendTransaction',
1316
+ params: [params],
1317
+ });
1318
+ (0, vitest_1.expect)(result).toBe('0xabc123');
1319
+ (0, vitest_1.expect)(mockClient.createTransaction).toHaveBeenCalledWith({
1320
+ walletId: 'wallet-1',
1321
+ blockchain: 'ETH',
1322
+ amount: ['0.01'],
1323
+ destinationAddress: '0x456',
1324
+ fee: {
1325
+ type: 'level',
1326
+ config: {
1327
+ feeLevel: 'HIGH',
1328
+ },
1329
+ },
1330
+ });
1331
+ });
1332
+ (0, vitest_1.it)('should throw error for unsupported chain', async () => {
1333
+ const params = {
1334
+ from: '0x123',
1335
+ to: '0x456',
1336
+ value: '0x2386f26fc10000',
1337
+ };
1338
+ await (0, vitest_1.expect)(provider.request({
1339
+ method: 'eth_sendTransaction',
1340
+ params: [params],
1341
+ })).rejects.toThrow();
1342
+ });
1343
+ (0, vitest_1.it)('should handle transaction failure states', async () => {
1344
+ const params = {
1345
+ from: '0x123',
1346
+ to: '0x456',
1347
+ value: '0x2386f26fc10000',
1348
+ };
1349
+ mockClient.listWallets.mockResolvedValue({
1350
+ data: { wallets: [{ id: 'wallet-1' }] },
1351
+ });
1352
+ mockClient.createTransaction.mockResolvedValue({
1353
+ data: { id: 'tx-1' },
1354
+ });
1355
+ mockClient.getTransaction.mockResolvedValue({
1356
+ data: {
1357
+ transaction: {
1358
+ id: 'tx-1',
1359
+ state: 'FAILED',
1360
+ errorReason: '123',
1361
+ errorDetails: 'Transaction failed',
1362
+ },
1363
+ },
1364
+ });
1365
+ await (0, vitest_1.expect)(provider.request({
1366
+ method: 'eth_sendTransaction',
1367
+ params: [params],
1368
+ })).rejects.toThrow();
1369
+ });
1370
+ (0, vitest_1.it)('should handle contract execution', async () => {
1371
+ const params = {
1372
+ from: '0x123',
1373
+ to: '0x456',
1374
+ value: (0, viem_1.numberToHex)((0, viem_1.parseEther)('0.01')),
1375
+ data: '0x1234567890abcdef', // Contract call data
1376
+ };
1377
+ // Mock contract execution transaction flow
1378
+ mockClient.listWallets.mockResolvedValue({
1379
+ data: { wallets: [{ id: 'wallet-1' }] },
1380
+ });
1381
+ mockClient.createContractExecutionTransaction.mockResolvedValue({
1382
+ data: { id: 'contract-tx-1' },
1383
+ });
1384
+ mockClient.getTransaction
1385
+ .mockResolvedValueOnce({
1386
+ data: {
1387
+ transaction: { id: 'contract-tx-1', state: 'PENDING' },
1388
+ },
1389
+ })
1390
+ .mockResolvedValueOnce({
1391
+ data: {
1392
+ transaction: {
1393
+ id: 'contract-tx-1',
1394
+ state: 'COMPLETE',
1395
+ txHash: '0xcontract123',
1396
+ },
1397
+ },
1398
+ });
1399
+ const result = await provider.request({
1400
+ method: 'eth_sendTransaction',
1401
+ params: [params],
1402
+ });
1403
+ (0, vitest_1.expect)(result).toBe('0xcontract123');
1404
+ (0, vitest_1.expect)(mockClient.createContractExecutionTransaction).toHaveBeenCalledWith({
1405
+ sourceAddress: '0x123',
1406
+ blockchain: 'ETH',
1407
+ contractAddress: '0x456',
1408
+ callData: '0x1234567890abcdef',
1409
+ amount: '0.01',
1410
+ fee: {
1411
+ type: 'level',
1412
+ config: {
1413
+ feeLevel: 'HIGH',
1414
+ },
1415
+ },
1416
+ walletId: 'wallet-1',
1417
+ });
1418
+ });
1419
+ (0, vitest_1.it)('should support legacy transaction with gas and gasPrice', async () => {
1420
+ const params = {
1421
+ from: '0x123',
1422
+ to: '0x456',
1423
+ value: (0, viem_1.numberToHex)((0, viem_1.parseEther)('0.01')),
1424
+ gas: '0x5208', // 21000
1425
+ gasPrice: '0x4a817c800', // 20 gwei
1426
+ };
1427
+ mockClient.listWallets.mockResolvedValue({
1428
+ data: { wallets: [{ id: 'wallet-1' }] },
1429
+ });
1430
+ mockClient.createTransaction.mockResolvedValue({
1431
+ data: { id: 'tx-1' },
1432
+ });
1433
+ mockClient.getTransaction
1434
+ .mockResolvedValueOnce({
1435
+ data: {
1436
+ transaction: { id: 'tx-1', state: 'PENDING' },
1437
+ },
1438
+ })
1439
+ .mockResolvedValueOnce({
1440
+ data: {
1441
+ transaction: {
1442
+ id: 'tx-1',
1443
+ state: 'COMPLETE',
1444
+ txHash: '0xabc123',
1445
+ },
1446
+ },
1447
+ });
1448
+ const result = await provider.request({
1449
+ method: 'eth_sendTransaction',
1450
+ params: [params],
1451
+ });
1452
+ (0, vitest_1.expect)(result).toBe('0xabc123');
1453
+ (0, vitest_1.expect)(mockClient.createTransaction).toHaveBeenCalledWith({
1454
+ walletId: 'wallet-1',
1455
+ blockchain: 'ETH',
1456
+ amount: ['0.01'],
1457
+ destinationAddress: '0x456',
1458
+ fee: {
1459
+ type: 'gas',
1460
+ config: {
1461
+ gasLimit: '21000',
1462
+ gasPrice: '20', // 20 gwei
1463
+ },
1464
+ },
1465
+ });
1466
+ });
1467
+ (0, vitest_1.it)('should support EIP-1559 transaction with gas, maxFeePerGas, and maxPriorityFeePerGas', async () => {
1468
+ const params = {
1469
+ from: '0x123',
1470
+ to: '0x456',
1471
+ value: (0, viem_1.numberToHex)((0, viem_1.parseEther)('0.01')),
1472
+ gas: '0x5208', // 21000
1473
+ maxFeePerGas: '0x9502f9000', // 40 gwei
1474
+ maxPriorityFeePerGas: '0x4a817c800', // 20 gwei
1475
+ };
1476
+ mockClient.listWallets.mockResolvedValue({
1477
+ data: { wallets: [{ id: 'wallet-1' }] },
1478
+ });
1479
+ mockClient.createTransaction.mockResolvedValue({
1480
+ data: { id: 'tx-1' },
1481
+ });
1482
+ mockClient.getTransaction
1483
+ .mockResolvedValueOnce({
1484
+ data: {
1485
+ transaction: { id: 'tx-1', state: 'PENDING' },
1486
+ },
1487
+ })
1488
+ .mockResolvedValueOnce({
1489
+ data: {
1490
+ transaction: {
1491
+ id: 'tx-1',
1492
+ state: 'COMPLETE',
1493
+ txHash: '0xabc123',
1494
+ },
1495
+ },
1496
+ });
1497
+ const result = await provider.request({
1498
+ method: 'eth_sendTransaction',
1499
+ params: [params],
1500
+ });
1501
+ (0, vitest_1.expect)(result).toBe('0xabc123');
1502
+ (0, vitest_1.expect)(mockClient.createTransaction).toHaveBeenCalledWith({
1503
+ walletId: 'wallet-1',
1504
+ blockchain: 'ETH',
1505
+ amount: ['0.01'],
1506
+ destinationAddress: '0x456',
1507
+ fee: {
1508
+ type: 'absolute',
1509
+ config: {
1510
+ gasLimit: '21000',
1511
+ maxFee: '40', // 40 gwei
1512
+ priorityFee: '20', // 20 gwei
1513
+ },
1514
+ },
1515
+ });
1516
+ });
1517
+ (0, vitest_1.it)('should estimate gas when not provided in legacy transaction', async () => {
1518
+ const params = {
1519
+ from: '0x123',
1520
+ to: '0x456',
1521
+ value: (0, viem_1.numberToHex)((0, viem_1.parseEther)('0.01')),
1522
+ gasPrice: '0x4a817c800', // 20 gwei
1523
+ // gas not provided - should be estimated
1524
+ };
1525
+ mockClient.listWallets.mockResolvedValue({
1526
+ data: { wallets: [{ id: 'wallet-1' }] },
1527
+ });
1528
+ mockClient.estimateTransferFee.mockResolvedValue({
1529
+ data: {
1530
+ high: { gasLimit: '25000', maxFee: '20000000000', priorityFee: '1000000000' },
1531
+ },
1532
+ });
1533
+ mockClient.createTransaction.mockResolvedValue({
1534
+ data: { id: 'tx-1' },
1535
+ });
1536
+ mockClient.getTransaction
1537
+ .mockResolvedValueOnce({
1538
+ data: {
1539
+ transaction: { id: 'tx-1', state: 'PENDING' },
1540
+ },
1541
+ })
1542
+ .mockResolvedValueOnce({
1543
+ data: {
1544
+ transaction: {
1545
+ id: 'tx-1',
1546
+ state: 'COMPLETE',
1547
+ txHash: '0xabc123',
1548
+ },
1549
+ },
1550
+ });
1551
+ const result = await provider.request({
1552
+ method: 'eth_sendTransaction',
1553
+ params: [params],
1554
+ });
1555
+ (0, vitest_1.expect)(result).toBe('0xabc123');
1556
+ (0, vitest_1.expect)(mockClient.createTransaction).toHaveBeenCalledWith({
1557
+ walletId: 'wallet-1',
1558
+ blockchain: 'ETH',
1559
+ amount: ['0.01'],
1560
+ destinationAddress: '0x456',
1561
+ fee: {
1562
+ type: 'gas',
1563
+ config: {
1564
+ gasLimit: '26250', // 25000 * 1.05 buffer from estimate
1565
+ gasPrice: '20', // 20 gwei
1566
+ },
1567
+ },
1568
+ });
1569
+ });
1570
+ (0, vitest_1.it)('should estimate gas when not provided in EIP-1559 transaction', async () => {
1571
+ const params = {
1572
+ from: '0x123',
1573
+ to: '0x456',
1574
+ value: (0, viem_1.numberToHex)((0, viem_1.parseEther)('0.01')),
1575
+ maxFeePerGas: '0x9502f9000', // 40 gwei
1576
+ maxPriorityFeePerGas: '0x4a817c800', // 20 gwei
1577
+ // gas not provided - should be estimated
1578
+ };
1579
+ mockClient.listWallets.mockResolvedValue({
1580
+ data: { wallets: [{ id: 'wallet-1' }] },
1581
+ });
1582
+ mockClient.estimateTransferFee.mockResolvedValue({
1583
+ data: {
1584
+ high: { gasLimit: '25000', maxFee: '20000000000', priorityFee: '1000000000' },
1585
+ },
1586
+ });
1587
+ mockClient.createTransaction.mockResolvedValue({
1588
+ data: { id: 'tx-1' },
1589
+ });
1590
+ mockClient.getTransaction
1591
+ .mockResolvedValueOnce({
1592
+ data: {
1593
+ transaction: { id: 'tx-1', state: 'PENDING' },
1594
+ },
1595
+ })
1596
+ .mockResolvedValueOnce({
1597
+ data: {
1598
+ transaction: {
1599
+ id: 'tx-1',
1600
+ state: 'COMPLETE',
1601
+ txHash: '0xabc123',
1602
+ },
1603
+ },
1604
+ });
1605
+ const result = await provider.request({
1606
+ method: 'eth_sendTransaction',
1607
+ params: [params],
1608
+ });
1609
+ (0, vitest_1.expect)(result).toBe('0xabc123');
1610
+ (0, vitest_1.expect)(mockClient.createTransaction).toHaveBeenCalledWith({
1611
+ walletId: 'wallet-1',
1612
+ blockchain: 'ETH',
1613
+ amount: ['0.01'],
1614
+ destinationAddress: '0x456',
1615
+ fee: {
1616
+ type: 'absolute',
1617
+ config: {
1618
+ gasLimit: '26250', // 25000 * 1.05 buffer from estimate
1619
+ maxFee: '40', // 40 gwei
1620
+ priorityFee: '20', // 20 gwei
1621
+ },
1622
+ },
1623
+ });
1624
+ });
1625
+ });
1626
+ (0, vitest_1.describe)('eth_signTransaction', () => {
1627
+ (0, vitest_1.it)('should sign successfully on mainnet (EVM)', async () => {
1628
+ const txParams = { from: '0x00000000000000000000000000000000000000Aa' };
1629
+ mockClient.listWallets.mockResolvedValue({
1630
+ data: { wallets: [{ id: 'wallet-1', address: '0x00000000000000000000000000000000000000aa' }] },
1631
+ });
1632
+ mockClient.signTransaction.mockResolvedValue({
1633
+ data: { signedTransaction: '0xdeadbeef', signature: '0xsig', txHash: '0xhash' },
1634
+ });
1635
+ const result = await provider.request({ method: 'eth_signTransaction', params: [txParams] });
1636
+ (0, vitest_1.expect)(result).toBe('0xdeadbeef');
1637
+ (0, vitest_1.expect)(mockClient.listWallets).toHaveBeenCalledWith({
1638
+ address: txParams.from,
1639
+ blockchain: 'EVM',
1640
+ });
1641
+ const callArg = mockClient.signTransaction.mock.calls[0][0];
1642
+ (0, vitest_1.expect)(callArg.walletId).toBe('wallet-1');
1643
+ const signedPayload = JSON.parse(callArg.transaction);
1644
+ (0, vitest_1.expect)(signedPayload.from).toBe(txParams.from);
1645
+ (0, vitest_1.expect)(signedPayload.chainId).toBe((0, viem_1.numberToHex)(1));
1646
+ });
1647
+ (0, vitest_1.it)('should use EVM-TESTNET for testnet chains', async () => {
1648
+ // Create new mock for this specific test instance
1649
+ const testnetMockClient = {
1650
+ listWallets: vitest_1.vi.fn(),
1651
+ signTransaction: vitest_1.vi.fn(),
1652
+ };
1653
+ developer_controlled_wallets_1.initiateDeveloperControlledWalletsClient.mockReturnValueOnce(testnetMockClient);
1654
+ const testnetProvider = new index_js_4.Provider({
1655
+ apiKey: 'test-api-key',
1656
+ entitySecret: 'test-entity-secret',
1657
+ baseUrl: 'base-url',
1658
+ chainId: 11155111, // This test requires a testnet chainId
1659
+ });
1660
+ const txParams = { from: '0x00000000000000000000000000000000000000bb' };
1661
+ testnetMockClient.listWallets.mockResolvedValue({
1662
+ data: { wallets: [{ id: 'wallet-sep', address: txParams.from }] },
1663
+ });
1664
+ testnetMockClient.signTransaction.mockResolvedValue({
1665
+ data: { signedTransaction: '0xfeedface' },
1666
+ });
1667
+ const result = await testnetProvider.request({ method: 'eth_signTransaction', params: [txParams] });
1668
+ (0, vitest_1.expect)(result).toBe('0xfeedface');
1669
+ (0, vitest_1.expect)(testnetMockClient.listWallets).toHaveBeenCalledWith({
1670
+ address: txParams.from,
1671
+ blockchain: 'EVM-TESTNET',
1672
+ });
1673
+ const callArg = testnetMockClient.signTransaction.mock.calls[0][0];
1674
+ (0, vitest_1.expect)(callArg.walletId).toBe('wallet-sep');
1675
+ const signedPayload = JSON.parse(callArg.transaction);
1676
+ (0, vitest_1.expect)(signedPayload.from).toBe(txParams.from);
1677
+ (0, vitest_1.expect)(signedPayload.chainId).toBe((0, viem_1.numberToHex)(11155111));
1678
+ });
1679
+ (0, vitest_1.it)('uses provided chainId in transaction payload', async () => {
1680
+ const txParams = {
1681
+ from: '0x00000000000000000000000000000000000000CC',
1682
+ chainId: (0, viem_1.numberToHex)(137),
1683
+ };
1684
+ mockClient.listWallets.mockResolvedValue({
1685
+ data: { wallets: [{ id: 'wallet-1', address: '0x00000000000000000000000000000000000000cc' }] },
1686
+ });
1687
+ mockClient.signTransaction.mockResolvedValue({
1688
+ data: { signedTransaction: '0xbead', signature: '0xsig2', txHash: '0xhash2' },
1689
+ });
1690
+ const result = await provider.request({ method: 'eth_signTransaction', params: [txParams] });
1691
+ (0, vitest_1.expect)(result).toBe('0xbead');
1692
+ const callArg = mockClient.signTransaction.mock.calls[0][0];
1693
+ const signedPayload = JSON.parse(callArg.transaction);
1694
+ (0, vitest_1.expect)(signedPayload.chainId).toBe((0, viem_1.numberToHex)(137));
1695
+ });
1696
+ (0, vitest_1.it)('should throw when `from` is missing', async () => {
1697
+ await (0, vitest_1.expect)(provider.request({ method: 'eth_signTransaction', params: [{}] })).rejects.toThrow();
1698
+ });
1699
+ (0, vitest_1.it)('should throw when wallet not found', async () => {
1700
+ const txParams = { from: '0x000000000000000000000000000000000000000c' };
1701
+ mockClient.listWallets.mockResolvedValue({ data: { wallets: [] } });
1702
+ await (0, vitest_1.expect)(provider.request({ method: 'eth_signTransaction', params: [txParams] })).rejects.toThrow();
1703
+ });
1704
+ (0, vitest_1.it)('throws when zero wallets found', async () => {
1705
+ const txParams = { from: '0x0000000000000000000000000000000000000d00' };
1706
+ mockClient.listWallets.mockResolvedValue({ data: { wallets: [] } });
1707
+ await (0, vitest_1.expect)(provider.request({ method: 'eth_signTransaction', params: [txParams] })).rejects.toThrow();
1708
+ });
1709
+ (0, vitest_1.it)('throws when multiple wallets found', async () => {
1710
+ const txParams = { from: '0x0000000000000000000000000000000000000d01' };
1711
+ mockClient.listWallets.mockResolvedValue({
1712
+ data: {
1713
+ wallets: [
1714
+ { id: 'w1', address: txParams.from },
1715
+ { id: 'w2', address: txParams.from },
1716
+ ],
1717
+ },
1718
+ });
1719
+ await (0, vitest_1.expect)(provider.request({ method: 'eth_signTransaction', params: [txParams] })).rejects.toThrow();
1720
+ });
1721
+ });
1722
+ (0, vitest_1.describe)('eth_chainId', () => {
1723
+ (0, vitest_1.it)('should throw error when chainId is not set', async () => {
1724
+ // @ts-expect-error - Testing behavior without chainId
1725
+ const provider = new index_js_4.Provider({
1726
+ apiKey: 'test-api-key',
1727
+ entitySecret: 'test-entity-secret',
1728
+ baseUrl: 'base-url',
1729
+ // chainId is undefined
1730
+ });
1731
+ await (0, vitest_1.expect)(provider.request({ method: 'eth_chainId', params: [] })).rejects.toThrowError();
1732
+ });
1733
+ (0, vitest_1.it)('should work with EIP-1193 interface', async () => {
1734
+ const provider = new index_js_4.Provider({
1735
+ apiKey: 'test-api-key',
1736
+ entitySecret: 'test-entity-secret',
1737
+ baseUrl: 'base-url',
1738
+ chainId: 1337,
1739
+ });
1740
+ const result = (await provider.request({ method: 'eth_chainId' }));
1741
+ (0, vitest_1.expect)(result).toBe((0, viem_1.numberToHex)(1337));
1742
+ });
1743
+ });
1744
+ (0, vitest_1.describe)('eth_getBalance', () => {
1745
+ (0, vitest_1.it)('should return native token balance for valid address', async () => {
1746
+ const address = '0x123456789abcdef123456789abcdef123456789a';
1747
+ const nativeTokenBalance = {
1748
+ token: {
1749
+ id: '979869da-9115-5f7d-917d-12d434e56ae7',
1750
+ blockchain: 'ETH',
1751
+ name: 'Ethereum',
1752
+ symbol: 'ETH',
1753
+ decimals: 18,
1754
+ isNative: true,
1755
+ updateDate: '2025-01-01T00:00:00.000Z',
1756
+ createDate: '2025-01-01T00:00:00.000Z',
1757
+ },
1758
+ amount: '1.5',
1759
+ updateDate: '2025-02-19T03:17:30Z',
1760
+ };
1761
+ mockClient.listWallets.mockResolvedValue({
1762
+ data: { wallets: [{ id: 'wallet-id', address, blockchain: 'ETH' }] },
1763
+ });
1764
+ mockClient.getWalletTokenBalance.mockResolvedValue({
1765
+ data: { tokenBalances: [nativeTokenBalance] },
1766
+ });
1767
+ const result = await provider.request({
1768
+ method: 'eth_getBalance',
1769
+ params: [address, 'latest'],
1770
+ });
1771
+ // 1.5 ETH = 1.5 * 10^18 wei = 1500000000000000000 wei = 0x14d1120d7b160000
1772
+ (0, vitest_1.expect)(result).toBe('0x14d1120d7b160000');
1773
+ (0, vitest_1.expect)(mockClient.getWalletTokenBalance).toHaveBeenCalledWith({
1774
+ id: 'wallet-id',
1775
+ tokenAddresses: ['', ''],
1776
+ });
1777
+ });
1778
+ (0, vitest_1.it)('should work with default block tag (latest)', async () => {
1779
+ const address = '0x123456789abcdef123456789abcdef123456789a';
1780
+ const nativeTokenBalance = {
1781
+ token: {
1782
+ id: '979869da-9115-5f7d-917d-12d434e56ae7',
1783
+ blockchain: 'ETH',
1784
+ name: 'Ethereum',
1785
+ symbol: 'ETH',
1786
+ decimals: 18,
1787
+ isNative: true,
1788
+ updateDate: '2025-01-01T00:00:00.000Z',
1789
+ createDate: '2025-01-01T00:00:00.000Z',
1790
+ },
1791
+ amount: '2.0',
1792
+ updateDate: '2025-02-19T03:17:30Z',
1793
+ };
1794
+ mockClient.listWallets.mockResolvedValue({
1795
+ data: { wallets: [{ id: 'wallet-id', address, blockchain: 'ETH' }] },
1796
+ });
1797
+ mockClient.getWalletTokenBalance.mockResolvedValue({
1798
+ data: { tokenBalances: [nativeTokenBalance] },
1799
+ });
1800
+ const result = await provider.request({
1801
+ method: 'eth_getBalance',
1802
+ params: [address], // No block tag provided
1803
+ });
1804
+ // 2.0 ETH = 2 * 10^18 wei = 2000000000000000000 wei = 0x1bc16d674ec80000
1805
+ (0, vitest_1.expect)(result).toBe('0x1bc16d674ec80000');
1806
+ });
1807
+ (0, vitest_1.it)('should throw error for unsupported block tags', async () => {
1808
+ const address = '0x123456789abcdef123456789abcdef123456789a';
1809
+ await (0, vitest_1.expect)(provider.request({
1810
+ method: 'eth_getBalance',
1811
+ params: [address, 'earliest'],
1812
+ })).rejects.toThrow('Only "latest" block tag is supported');
1813
+ await (0, vitest_1.expect)(provider.request({
1814
+ method: 'eth_getBalance',
1815
+ params: [address, '0x1'],
1816
+ })).rejects.toThrow('Only "latest" block tag is supported');
1817
+ });
1818
+ (0, vitest_1.it)('should throw error when chainId is not set', async () => {
1819
+ // @ts-expect-error - Testing behavior without chainId
1820
+ const provider = new index_js_4.Provider({
1821
+ apiKey: 'test-api-key',
1822
+ entitySecret: 'test-entity-secret',
1823
+ baseUrl: 'base-url',
1824
+ });
1825
+ const address = '0x123456789abcdef123456789abcdef123456789a';
1826
+ await (0, vitest_1.expect)(provider.request({
1827
+ method: 'eth_getBalance',
1828
+ params: [address, 'latest'],
1829
+ })).rejects.toThrow();
1830
+ });
1831
+ (0, vitest_1.it)('should throw error for unsupported chainId', async () => {
1832
+ const provider = new index_js_4.Provider({
1833
+ apiKey: 'test-api-key',
1834
+ entitySecret: 'test-entity-secret',
1835
+ baseUrl: 'base-url',
1836
+ chainId: 999999, // Unsupported chain
1837
+ });
1838
+ const address = '0x123456789abcdef123456789abcdef123456789a';
1839
+ await (0, vitest_1.expect)(provider.request({
1840
+ method: 'eth_getBalance',
1841
+ params: [address, 'latest'],
1842
+ })).rejects.toThrow();
1843
+ });
1844
+ (0, vitest_1.it)('should return 0 when no native token balance found', async () => {
1845
+ const address = '0x123456789abcdef123456789abcdef123456789a';
1846
+ mockClient.listWallets.mockResolvedValue({
1847
+ data: { wallets: [{ id: 'wallet-id', address, blockchain: 'ETH' }] },
1848
+ });
1849
+ // Mock getWalletTokenBalance to return empty balances
1850
+ mockClient.getWalletTokenBalance.mockResolvedValue({
1851
+ data: { tokenBalances: [] },
1852
+ });
1853
+ const result = await provider.request({
1854
+ method: 'eth_getBalance',
1855
+ params: [address, 'latest'],
1856
+ });
1857
+ (0, vitest_1.expect)(result).toBe((0, viem_1.numberToHex)(0));
1858
+ });
1859
+ (0, vitest_1.it)('should handle zero balance correctly', async () => {
1860
+ const address = '0x123456789abcdef123456789abcdef123456789a';
1861
+ const nativeTokenBalance = {
1862
+ token: {
1863
+ id: '979869da-9115-5f7d-917d-12d434e56ae7',
1864
+ blockchain: 'ETH',
1865
+ name: 'Ethereum',
1866
+ symbol: 'ETH',
1867
+ decimals: 18,
1868
+ isNative: true,
1869
+ updateDate: '2025-01-01T00:00:00.000Z',
1870
+ createDate: '2025-01-01T00:00:00.000Z',
1871
+ },
1872
+ amount: '0',
1873
+ updateDate: '2025-02-19T03:17:30Z',
1874
+ };
1875
+ mockClient.listWallets.mockResolvedValue({
1876
+ data: { wallets: [{ id: 'wallet-id', address, blockchain: 'ETH' }] },
1877
+ });
1878
+ mockClient.getWalletTokenBalance.mockResolvedValue({
1879
+ data: { tokenBalances: [nativeTokenBalance] },
1880
+ });
1881
+ const result = await provider.request({
1882
+ method: 'eth_getBalance',
1883
+ params: [address, 'latest'],
1884
+ });
1885
+ (0, vitest_1.expect)(result).toBe('0x0');
1886
+ });
1887
+ });
1888
+ (0, vitest_1.describe)('eth_call', () => {
1889
+ (0, vitest_1.it)('should perform contract query successfully', async () => {
1890
+ const params = {
1891
+ to: '0x742d35cc6634C0532925a3b8D0c8c0C8D8d8d8d8',
1892
+ data: '0x70a08231000000000000000000000000742d35cc6634c0532925a3b8d0c8c0c8d8d8d8d8',
1893
+ from: '0x123456789abcdef123456789abcdef123456789a',
1894
+ };
1895
+ mockScp.queryContract.mockResolvedValue({
1896
+ data: {
1897
+ outputData: '0x0000000000000000000000000000000000000000000000000de0b6b3a7640000',
1898
+ },
1899
+ });
1900
+ const result = await provider.request({
1901
+ method: 'eth_call',
1902
+ params: [params],
1903
+ });
1904
+ (0, vitest_1.expect)(result).toBe('0x0000000000000000000000000000000000000000000000000de0b6b3a7640000');
1905
+ (0, vitest_1.expect)(mockScp.queryContract).toHaveBeenCalledWith({
1906
+ blockchain: 'ETH',
1907
+ address: params.to,
1908
+ callData: params.data,
1909
+ fromAddress: params.from,
1910
+ });
1911
+ });
1912
+ (0, vitest_1.it)('should throw UnsupportedChainError when chainId is not supported for contract queries', async () => {
1913
+ const provider = new index_js_4.Provider({
1914
+ apiKey: 'test-api-key',
1915
+ entitySecret: 'test-entity-secret',
1916
+ chainId: 999999, // Unsupported chain
1917
+ });
1918
+ const params = {
1919
+ to: '0x742d35cc6634C0532925a3b8D0c8c0C8D8d8d8d8',
1920
+ data: '0x70a08231',
1921
+ };
1922
+ await (0, vitest_1.expect)(provider.request({
1923
+ method: 'eth_call',
1924
+ params: [params],
1925
+ })).rejects.toThrow();
1926
+ });
1927
+ (0, vitest_1.it)('should work without from parameter', async () => {
1928
+ const params = {
1929
+ to: '0x742d35cc6634C0532925a3b8D0c8c0C8D8d8d8d8',
1930
+ data: '0x70a08231000000000000000000000000742d35cc6634c0532925a3b8d0c8c0c8d8d8d8d8',
1931
+ };
1932
+ mockScp.queryContract.mockResolvedValue({
1933
+ data: {
1934
+ outputData: '0x0000000000000000000000000000000000000000000000000de0b6b3a7640000',
1935
+ },
1936
+ });
1937
+ const result = await provider.request({
1938
+ method: 'eth_call',
1939
+ params: [params],
1940
+ });
1941
+ (0, vitest_1.expect)(result).toBe('0x0000000000000000000000000000000000000000000000000de0b6b3a7640000');
1942
+ (0, vitest_1.expect)(mockScp.queryContract).toHaveBeenCalledWith({
1943
+ blockchain: 'ETH',
1944
+ address: params.to,
1945
+ callData: params.data,
1946
+ fromAddress: undefined,
1947
+ });
1948
+ });
1949
+ (0, vitest_1.it)('should throw error when blockIdentifier is not "latest"', async () => {
1950
+ const params = {
1951
+ to: '0x742d35cc6634C0532925a3b8D0c8c0C8D8d8d8d8',
1952
+ data: '0x70a08231',
1953
+ };
1954
+ await (0, vitest_1.expect)(provider.request({
1955
+ method: 'eth_call',
1956
+ params: [params, 'earliest'],
1957
+ })).rejects.toThrow('Only `latest` block identifier is supported');
1958
+ await (0, vitest_1.expect)(provider.request({
1959
+ method: 'eth_call',
1960
+ params: [params, '0x1234'],
1961
+ })).rejects.toThrow('Only `latest` block identifier is supported');
1962
+ });
1963
+ (0, vitest_1.it)('should throw error when unsupported transaction params are provided', async () => {
1964
+ const baseParams = {
1965
+ to: '0x742d35cc6634C0532925a3b8D0c8c0C8D8d8d8d8',
1966
+ data: '0x70a08231',
1967
+ };
1968
+ // Test each unsupported parameter individually
1969
+ const unsupportedParams = [
1970
+ { gas: '0x186A0' },
1971
+ { gasPrice: '0x3B9ACA00' },
1972
+ { maxFeePerGas: '0x3B9ACA00' },
1973
+ { maxPriorityFeePerGas: '0x3B9ACA00' },
1974
+ { nonce: '0x1' },
1975
+ { value: '0x0' },
1976
+ ];
1977
+ for (const param of unsupportedParams) {
1978
+ const testParams = { ...baseParams, ...param };
1979
+ await (0, vitest_1.expect)(provider.request({
1980
+ method: 'eth_call',
1981
+ params: [testParams],
1982
+ })).rejects.toThrow();
1983
+ }
1984
+ // Test multiple unsupported params together
1985
+ const multipleUnsupportedParams = {
1986
+ ...baseParams,
1987
+ gas: '0x186A0',
1988
+ value: '0x0',
1989
+ nonce: '0x1',
1990
+ };
1991
+ await (0, vitest_1.expect)(provider.request({
1992
+ method: 'eth_call',
1993
+ params: [multipleUnsupportedParams],
1994
+ })).rejects.toThrow();
1995
+ });
1996
+ });
1997
+ (0, vitest_1.describe)('eth_estimateGas', () => {
1998
+ (0, vitest_1.test)('estimate gas for transfer transaction (no data field)', async () => {
1999
+ const params = {
2000
+ from: '0x123',
2001
+ to: '0x456',
2002
+ value: '0x16345785d8a0000',
2003
+ };
2004
+ mockClient.estimateTransferFee.mockResolvedValue({
2005
+ data: {
2006
+ high: { gasLimit: '21000', maxFee: '20000000000', priorityFee: '1000000000' },
2007
+ medium: { gasLimit: '21000', maxFee: '15000000000', priorityFee: '800000000' },
2008
+ low: { gasLimit: '21000', maxFee: '10000000000', priorityFee: '500000000' },
2009
+ },
2010
+ });
2011
+ const result = await provider.request({
2012
+ method: 'eth_estimateGas',
2013
+ params: [params],
2014
+ });
2015
+ (0, vitest_1.expect)(result).toBe('0x5622'); // 22050 in hex (21000 * 1.05 buffer)
2016
+ (0, vitest_1.expect)(mockClient.estimateTransferFee).toHaveBeenCalledWith({
2017
+ sourceAddress: '0x123',
2018
+ blockchain: 'ETH',
2019
+ amount: ['0.1'],
2020
+ destinationAddress: '0x456',
2021
+ });
2022
+ });
2023
+ (0, vitest_1.test)('estimate gas for contract execution transaction (with data field)', async () => {
2024
+ const params = {
2025
+ from: '0x123',
2026
+ to: '0x456',
2027
+ data: '0xa9059cbb',
2028
+ value: '0x0',
2029
+ };
2030
+ mockClient.estimateContractExecutionFee.mockResolvedValue({
2031
+ data: {
2032
+ high: { gasLimit: '50000', maxFee: '20000000000', priorityFee: '1000000000' },
2033
+ medium: { gasLimit: '50000', maxFee: '15000000000', priorityFee: '800000000' },
2034
+ low: { gasLimit: '50000', maxFee: '10000000000', priorityFee: '500000000' },
2035
+ },
2036
+ });
2037
+ const result = await provider.request({
2038
+ method: 'eth_estimateGas',
2039
+ params: [params],
2040
+ });
2041
+ (0, vitest_1.expect)(result).toBe('0xcd14'); // 52500 in hex (50000 * 1.05 buffer)
2042
+ (0, vitest_1.expect)(mockClient.estimateContractExecutionFee).toHaveBeenCalledWith({
2043
+ source: {
2044
+ sourceAddress: '0x123',
2045
+ blockchain: 'ETH',
2046
+ },
2047
+ amount: '0',
2048
+ contractAddress: '0x456',
2049
+ callData: '0xa9059cbb',
2050
+ });
2051
+ });
2052
+ (0, vitest_1.test)('estimate gas without value field', async () => {
2053
+ const params = {
2054
+ from: '0x123',
2055
+ to: '0x456',
2056
+ };
2057
+ mockClient.estimateTransferFee.mockResolvedValue({
2058
+ data: {
2059
+ high: { gasLimit: '21000', maxFee: '20000000000', priorityFee: '1000000000' },
2060
+ medium: { gasLimit: '21000', maxFee: '15000000000', priorityFee: '800000000' },
2061
+ low: { gasLimit: '21000', maxFee: '10000000000', priorityFee: '500000000' },
2062
+ },
2063
+ });
2064
+ const result = await provider.request({
2065
+ method: 'eth_estimateGas',
2066
+ params: [params],
2067
+ });
2068
+ (0, vitest_1.expect)(result).toBe('0x5622');
2069
+ (0, vitest_1.expect)(mockClient.estimateTransferFee).toHaveBeenCalledWith({
2070
+ sourceAddress: '0x123',
2071
+ blockchain: 'ETH',
2072
+ amount: [undefined],
2073
+ destinationAddress: '0x456',
2074
+ });
2075
+ });
2076
+ (0, vitest_1.test)('throws error when chainId is not set', async () => {
2077
+ // @ts-expect-error - Testing behavior without chainId
2078
+ const providerWithoutChainId = new index_js_4.Provider({ apiKey: 'apiKey', entitySecret: 'entitySecret' });
2079
+ const params = {
2080
+ from: '0x123',
2081
+ to: '0x456',
2082
+ value: '0x16345785d8a0000',
2083
+ };
2084
+ await (0, vitest_1.expect)(providerWithoutChainId.request({ method: 'eth_estimateGas', params: [params] })).rejects.toThrow();
2085
+ });
2086
+ (0, vitest_1.test)('throws error when blockIdentifier is not latest', async () => {
2087
+ const params = {
2088
+ from: '0x123',
2089
+ to: '0x456',
2090
+ value: '0x16345785d8a0000',
2091
+ };
2092
+ await (0, vitest_1.expect)(provider.request({
2093
+ method: 'eth_estimateGas',
2094
+ params: [params, '0x1000'], // specific block number
2095
+ })).rejects.toThrow('Only `latest` block identifier is supported');
2096
+ });
2097
+ (0, vitest_1.test)('accepts latest blockIdentifier', async () => {
2098
+ const params = {
2099
+ from: '0x123',
2100
+ to: '0x456',
2101
+ value: '0x16345785d8a0000',
2102
+ };
2103
+ mockClient.estimateTransferFee.mockResolvedValue({
2104
+ data: {
2105
+ high: { gasLimit: '21000', maxFee: '20000000000', priorityFee: '1000000000' },
2106
+ medium: { gasLimit: '21000', maxFee: '15000000000', priorityFee: '800000000' },
2107
+ low: { gasLimit: '21000', maxFee: '10000000000', priorityFee: '500000000' },
2108
+ },
2109
+ });
2110
+ const result = await provider.request({
2111
+ method: 'eth_estimateGas',
2112
+ params: [params, 'latest'],
2113
+ });
2114
+ (0, vitest_1.expect)(result).toBe('0x5622'); // Should work normally (uses HIGH fee level with 1.05 buffer)
2115
+ });
2116
+ });
2117
+ });
2118
+ (0, vitest_1.describe)('Provider 2', () => {
2119
+ let provider;
2120
+ const mockClient = {
2121
+ estimateContractExecutionFee: vitest_1.vi.fn(),
2122
+ estimateTransferFee: vitest_1.vi.fn(),
2123
+ createContractExecutionTransaction: vitest_1.vi.fn(),
2124
+ createTransaction: vitest_1.vi.fn(),
2125
+ getTransaction: vitest_1.vi.fn(),
2126
+ listWallets: vitest_1.vi.fn(),
2127
+ };
2128
+ const mockScp = {
2129
+ importContract: vitest_1.vi.fn(),
2130
+ };
2131
+ (0, vitest_1.beforeEach)(() => {
2132
+ ;
2133
+ developer_controlled_wallets_1.initiateDeveloperControlledWalletsClient.mockReturnValue(mockClient);
2134
+ smart_contract_platform_1.initiateSmartContractPlatformClient.mockReturnValue(mockScp);
2135
+ provider = new index_js_4.Provider({
2136
+ apiKey: 'test-api-key',
2137
+ entitySecret: 'test-entity-secret',
2138
+ baseUrl: 'base-url',
2139
+ chainId: 1,
2140
+ });
2141
+ });
2142
+ (0, vitest_1.beforeEach)(() => {
2143
+ vitest_1.vi.restoreAllMocks();
2144
+ });
2145
+ (0, vitest_1.test)('estimate contract execution fee', async () => {
2146
+ const params = {
2147
+ abiFunctionSignature: 'value',
2148
+ source: {
2149
+ sourceAddress: 'sourceAddress',
2150
+ blockchain: 'ETH-SEPOLIA',
2151
+ },
2152
+ contractAddress: 'contractAddress',
2153
+ abiParameters: [],
2154
+ };
2155
+ mockClient.estimateContractExecutionFee.mockResolvedValue({
2156
+ data: {
2157
+ high: { gasLimit: '3', maxFee: '6', priorityFee: '9', baseFee: '12', networkFee: '15' },
2158
+ medium: { gasLimit: '2', maxFee: '4', priorityFee: '6', baseFee: '8', networkFee: '10' },
2159
+ low: { gasLimit: '1', maxFee: '2', priorityFee: '3', baseFee: '4', networkFee: '5' },
2160
+ },
2161
+ });
2162
+ const result = await provider.request({ method: 'circle_estimateContractExecutionFee', params: [params] });
2163
+ (0, vitest_1.expect)(result).toMatchObject({
2164
+ high: {
2165
+ gasLimit: '4',
2166
+ maxFee: '6.300000000000001',
2167
+ priorityFee: '9.450000000000001',
2168
+ baseFee: '12',
2169
+ networkFee: '15',
2170
+ },
2171
+ medium: { gasLimit: '3', maxFee: '4.2', priorityFee: '6.300000000000001', baseFee: '8', networkFee: '10' },
2172
+ low: { gasLimit: '2', maxFee: '2.1', priorityFee: '3.1500000000000004', baseFee: '4', networkFee: '5' },
2173
+ });
2174
+ (0, vitest_1.expect)(mockClient.estimateContractExecutionFee).toHaveBeenCalledWith(params);
2175
+ });
2176
+ (0, vitest_1.test)('estimate contract execution fee for SCA', async () => {
2177
+ const params = {
2178
+ abiFunctionSignature: 'value',
2179
+ source: {
2180
+ sourceAddress: 'sourceAddress',
2181
+ blockchain: 'ETH-SEPOLIA',
2182
+ },
2183
+ contractAddress: 'contractAddress',
2184
+ abiParameters: [],
2185
+ };
2186
+ mockClient.estimateContractExecutionFee.mockResolvedValue({
2187
+ data: {
2188
+ high: { gasLimit: '3', maxFee: '6', priorityFee: '9', baseFee: '12', networkFee: '15' },
2189
+ medium: { gasLimit: '2', maxFee: '4', priorityFee: '6', baseFee: '8', networkFee: '10' },
2190
+ low: { gasLimit: '1', maxFee: '2', priorityFee: '3', baseFee: '4', networkFee: '5' },
2191
+ callGasLimit: '11111',
2192
+ verificationGasLimit: '22222',
2193
+ preVerificationGas: '33333',
2194
+ },
2195
+ });
2196
+ const result = await provider.request({ method: 'circle_estimateContractExecutionFee', params: [params] });
2197
+ (0, vitest_1.expect)(result).toMatchObject({
2198
+ high: {
2199
+ gasLimit: '4',
2200
+ maxFee: '6.300000000000001',
2201
+ priorityFee: '9.450000000000001',
2202
+ baseFee: '12',
2203
+ networkFee: '15',
2204
+ },
2205
+ medium: { gasLimit: '3', maxFee: '4.2', priorityFee: '6.300000000000001', baseFee: '8', networkFee: '10' },
2206
+ low: { gasLimit: '2', maxFee: '2.1', priorityFee: '3.1500000000000004', baseFee: '4', networkFee: '5' },
2207
+ callGasLimit: '11111',
2208
+ verificationGasLimit: '22222',
2209
+ preVerificationGas: '33333',
2210
+ });
2211
+ (0, vitest_1.expect)(mockClient.estimateContractExecutionFee).toHaveBeenCalledWith(params);
2212
+ });
2213
+ (0, vitest_1.describe)('create contract execution transaction', () => {
2214
+ vitest_1.test.each([
2215
+ {
2216
+ name: 'with wallet id',
2217
+ params: {
2218
+ walletId: 'test-wallet-id',
2219
+ contractAddress: '0xcontract-address',
2220
+ fee: {
2221
+ type: 'level',
2222
+ config: {
2223
+ feeLevel: 'LOW',
2224
+ },
2225
+ },
2226
+ },
2227
+ },
2228
+ {
2229
+ name: 'without wallet id',
2230
+ params: {
2231
+ contractAddress: '0xcontract-address',
2232
+ sourceAddress: '0xtest-address',
2233
+ blockchain: 'ETH-SEPOLIA',
2234
+ fee: {
2235
+ type: 'level',
2236
+ config: {
892
2237
  feeLevel: 'LOW',
893
2238
  },
894
2239
  },
@@ -903,20 +2248,20 @@ vitest_1.vi.mock('@circle-fin/developer-controlled-wallets', () => ({
903
2248
  state: 'COMPLETE',
904
2249
  transactionType: 'OUTBOUND',
905
2250
  updateDate: '2024-01-01T00:00:00Z',
2251
+ txHash: '0xabc123',
906
2252
  };
907
2253
  mockClient.createContractExecutionTransaction.mockResolvedValue(mockResponse);
908
2254
  mockClient.listWallets.mockResolvedValue({
909
2255
  data: { wallets: [{ id: 'test-wallet-id' }] },
910
2256
  });
911
- vitest_1.vi.spyOn(provider, 'circle_getTransaction').mockResolvedValue(mockTransaction);
912
- const result = await provider.circle_createContractExecutionTransaction(params);
2257
+ mockClient.getTransaction.mockResolvedValue({ data: { transaction: mockTransaction } });
2258
+ const result = await provider.request({ method: 'circle_createContractExecutionTransaction', params: [params] });
913
2259
  (0, vitest_1.expect)(result).toEqual(mockTransaction);
914
2260
  (0, vitest_1.expect)(mockClient.createContractExecutionTransaction).toHaveBeenCalledWith({
915
2261
  ...params,
916
2262
  walletId: 'test-wallet-id',
917
2263
  });
918
- // eslint-disable-next-line @typescript-eslint/unbound-method
919
- (0, vitest_1.expect)(provider.circle_getTransaction).toHaveBeenCalledWith({
2264
+ (0, vitest_1.expect)(mockClient.getTransaction).toHaveBeenCalledWith({
920
2265
  id: 'transaction-id',
921
2266
  });
922
2267
  });
@@ -952,8 +2297,89 @@ vitest_1.vi.mock('@circle-fin/developer-controlled-wallets', () => ({
952
2297
  mockClient.listWallets.mockResolvedValue({
953
2298
  data: { wallets: [undefined] },
954
2299
  });
955
- vitest_1.vi.spyOn(provider, 'circle_getTransaction').mockResolvedValue(mockTransaction);
956
- await (0, vitest_1.expect)(provider.circle_createContractExecutionTransaction(params)).rejects.toThrowError('Wallet not found');
2300
+ mockClient.getTransaction.mockResolvedValue({ data: { transaction: mockTransaction } });
2301
+ await (0, vitest_1.expect)(provider.request({ method: 'circle_createContractExecutionTransaction', params: [params] })).rejects.toThrowError('Wallet not found');
2302
+ });
2303
+ (0, vitest_1.it)('should wait for transaction hash when waitForTransactionHash is true', async () => {
2304
+ const params = {
2305
+ walletId: 'test-wallet-id',
2306
+ contractAddress: '0xcontract-address',
2307
+ callData: '0x123',
2308
+ fee: {
2309
+ type: 'level',
2310
+ config: {
2311
+ feeLevel: 'LOW',
2312
+ },
2313
+ },
2314
+ waitForTransactionHash: true,
2315
+ };
2316
+ const createTransactionResult = { id: 'transaction-id', state: 'QUEUED' };
2317
+ const getTransactionResult = {
2318
+ id: 'transaction-id',
2319
+ state: 'COMPLETE',
2320
+ txHash: '0x123',
2321
+ blockchain: 'ETH-SEPOLIA',
2322
+ createDate: '2024-01-01T00:00:00Z',
2323
+ transactionType: 'OUTBOUND',
2324
+ updateDate: '2024-01-01T00:00:00Z',
2325
+ };
2326
+ mockClient.createContractExecutionTransaction.mockResolvedValue({ data: createTransactionResult });
2327
+ mockClient.listWallets.mockResolvedValue({
2328
+ data: { wallets: [{ id: 'test-wallet-id' }] },
2329
+ });
2330
+ mockClient.getTransaction.mockResolvedValue({ data: { transaction: getTransactionResult } });
2331
+ const result = await provider.request({ method: 'circle_createContractExecutionTransaction', params: [params] });
2332
+ (0, vitest_1.expect)(result).toEqual(getTransactionResult);
2333
+ (0, vitest_1.expect)(mockClient.createContractExecutionTransaction).toHaveBeenCalledWith({
2334
+ walletId: 'test-wallet-id',
2335
+ contractAddress: '0xcontract-address',
2336
+ callData: '0x123',
2337
+ fee: {
2338
+ type: 'level',
2339
+ config: {
2340
+ feeLevel: 'LOW',
2341
+ },
2342
+ },
2343
+ waitForTransactionHash: true,
2344
+ });
2345
+ (0, vitest_1.expect)(mockClient.getTransaction).toHaveBeenCalledWith({ id: 'transaction-id' });
2346
+ });
2347
+ (0, vitest_1.it)('should not wait for transaction hash when waitForTransactionHash is false', async () => {
2348
+ const params = {
2349
+ walletId: 'test-wallet-id',
2350
+ contractAddress: '0xcontract-address',
2351
+ callData: '0x123',
2352
+ fee: {
2353
+ type: 'level',
2354
+ config: {
2355
+ feeLevel: 'LOW',
2356
+ },
2357
+ },
2358
+ waitForTransactionHash: false,
2359
+ };
2360
+ const createTransactionResult = { id: 'transaction-id', state: 'QUEUED' };
2361
+ mockClient.createContractExecutionTransaction.mockResolvedValue({ data: createTransactionResult });
2362
+ mockClient.listWallets.mockResolvedValue({
2363
+ data: { wallets: [{ id: 'test-wallet-id' }] },
2364
+ });
2365
+ mockClient.getTransaction.mockResolvedValue({ data: { transaction: createTransactionResult } });
2366
+ const result = await provider.request({ method: 'circle_createContractExecutionTransaction', params: [params] });
2367
+ (0, vitest_1.expect)(result).toEqual(createTransactionResult);
2368
+ (0, vitest_1.expect)(mockClient.createContractExecutionTransaction).toHaveBeenCalledWith({
2369
+ walletId: 'test-wallet-id',
2370
+ contractAddress: '0xcontract-address',
2371
+ callData: '0x123',
2372
+ fee: {
2373
+ type: 'level',
2374
+ config: {
2375
+ feeLevel: 'LOW',
2376
+ },
2377
+ },
2378
+ waitForTransactionHash: false,
2379
+ });
2380
+ // Should call getTransaction once to get the transaction structure, but not wait for txHash
2381
+ (0, vitest_1.expect)(mockClient.getTransaction).toHaveBeenCalledWith({ id: 'transaction-id' });
2382
+ (0, vitest_1.expect)(mockClient.getTransaction).toHaveBeenCalledTimes(1);
957
2383
  });
958
2384
  });
959
2385
  (0, vitest_1.describe)('import contract', () => {
@@ -962,7 +2388,7 @@ vitest_1.vi.mock('@circle-fin/developer-controlled-wallets', () => ({
962
2388
  const mockResponse = { data: { contract: 'contract-data' } };
963
2389
  mockScp.importContract.mockResolvedValue(mockResponse);
964
2390
  generateIdempotencyKeyMod.generateIdempotencyKey.mockReturnValue('test-idempotency-key');
965
- const result = await provider.circle_importContract(params);
2391
+ const result = await provider.request({ method: 'circle_importContract', params: [params] });
966
2392
  (0, vitest_1.expect)(result).toBe('contract-data');
967
2393
  (0, vitest_1.expect)(mockScp.importContract).toHaveBeenCalledWith({
968
2394
  ...params,
@@ -996,8 +2422,15 @@ vitest_1.vi.mock('@circle-fin/developer-controlled-wallets', () => ({
996
2422
  },
997
2423
  };
998
2424
  mockClient.createContractExecutionTransaction.mockResolvedValue(mockResponse);
999
- mockClient.getTransaction.mockResolvedValue({ data: { transaction: mockResponse.data } });
1000
- await provider.circle_createContractExecutionTransaction(params);
2425
+ mockClient.getTransaction.mockResolvedValue({
2426
+ data: {
2427
+ transaction: {
2428
+ ...mockResponse.data,
2429
+ txHash: '0xabc123',
2430
+ },
2431
+ },
2432
+ });
2433
+ await provider.request({ method: 'circle_createContractExecutionTransaction', params: [params] });
1001
2434
  // Verify that SENTINEL_FEES are converted to level-based fee
1002
2435
  (0, vitest_1.expect)(mockClient.createContractExecutionTransaction).toHaveBeenCalledWith({
1003
2436
  walletId: 'test-wallet-id',
@@ -1034,8 +2467,15 @@ vitest_1.vi.mock('@circle-fin/developer-controlled-wallets', () => ({
1034
2467
  },
1035
2468
  };
1036
2469
  mockClient.createContractExecutionTransaction.mockResolvedValue(mockResponse);
1037
- mockClient.getTransaction.mockResolvedValue({ data: { transaction: mockResponse.data } });
1038
- await provider.circle_createContractExecutionTransaction(params);
2470
+ mockClient.getTransaction.mockResolvedValue({
2471
+ data: {
2472
+ transaction: {
2473
+ ...mockResponse.data,
2474
+ txHash: '0xabc123',
2475
+ },
2476
+ },
2477
+ });
2478
+ await provider.request({ method: 'circle_createContractExecutionTransaction', params: [params] });
1039
2479
  // Verify that only maxFee is converted to empty string
1040
2480
  (0, vitest_1.expect)(mockClient.createContractExecutionTransaction).toHaveBeenCalledWith({
1041
2481
  walletId: 'test-wallet-id',