@0xsquid/react-hooks 1.0.3 → 1.0.5

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 (316) hide show
  1. package/dist/assets/images/icons/wallets/index.d.ts +22 -0
  2. package/{src/assets/images/icons/wallets/index.ts → dist/assets/images/icons/wallets/index.js} +21 -21
  3. package/dist/assets/images/icons/wallets/index.js.map +1 -0
  4. package/dist/connectors/ExodusConnector.d.ts +4 -0
  5. package/{src/connectors/ExodusConnector.ts → dist/connectors/ExodusConnector.js} +3 -3
  6. package/dist/connectors/ExodusConnector.js.map +1 -0
  7. package/dist/connectors/LedgerLiveConnector.d.ts +40 -0
  8. package/dist/connectors/LedgerLiveConnector.js +177 -0
  9. package/dist/connectors/LedgerLiveConnector.js.map +1 -0
  10. package/dist/contracts/typechain/factories/ERC20__factory.js +324 -0
  11. package/dist/contracts/typechain/factories/ERC20__factory.js.map +1 -0
  12. package/dist/core/constants.d.ts +37 -0
  13. package/dist/core/constants.js +487 -0
  14. package/dist/core/constants.js.map +1 -0
  15. package/dist/core/externalLinks.d.ts +18 -0
  16. package/{src/core/externalLinks.ts → dist/core/externalLinks.js} +5 -9
  17. package/dist/core/externalLinks.js.map +1 -0
  18. package/dist/core/index.js +2 -0
  19. package/dist/core/index.js.map +1 -0
  20. package/dist/core/multicall3.d.ts +16 -0
  21. package/dist/core/multicall3.js +23 -0
  22. package/dist/core/multicall3.js.map +1 -0
  23. package/dist/core/numbers.d.ts +3 -0
  24. package/dist/core/numbers.js +28 -0
  25. package/dist/core/numbers.js.map +1 -0
  26. package/dist/core/providers/CosmosProvider.d.ts +34 -0
  27. package/dist/core/providers/CosmosProvider.js +12 -0
  28. package/dist/core/providers/CosmosProvider.js.map +1 -0
  29. package/dist/core/queries/queries-keys.d.ts +34 -0
  30. package/dist/core/queries/queries-keys.js +120 -0
  31. package/dist/core/queries/queries-keys.js.map +1 -0
  32. package/dist/core/queries/react-query-config.d.ts +3 -0
  33. package/dist/core/queries/react-query-config.js +11 -0
  34. package/dist/core/queries/react-query-config.js.map +1 -0
  35. package/dist/core/types/components.d.ts +14 -0
  36. package/dist/core/types/components.js +2 -0
  37. package/dist/core/types/components.js.map +1 -0
  38. package/dist/core/types/config.d.ts +47 -0
  39. package/dist/core/types/config.js +2 -0
  40. package/dist/core/types/config.js.map +1 -0
  41. package/dist/core/types/dex.d.ts +28 -0
  42. package/dist/core/types/dex.js +33 -0
  43. package/dist/core/types/dex.js.map +1 -0
  44. package/dist/core/types/error.d.ts +44 -0
  45. package/dist/core/types/error.js +12 -0
  46. package/dist/core/types/error.js.map +1 -0
  47. package/dist/core/types/event.d.ts +17 -0
  48. package/dist/core/types/event.js +2 -0
  49. package/dist/core/types/event.js.map +1 -0
  50. package/dist/core/types/route.d.ts +9 -0
  51. package/dist/core/types/route.js +4 -0
  52. package/dist/core/types/route.js.map +1 -0
  53. package/dist/core/types/swap.d.ts +8 -0
  54. package/dist/core/types/swap.js +2 -0
  55. package/dist/core/types/swap.js.map +1 -0
  56. package/dist/core/types/tokens.d.ts +29 -0
  57. package/dist/core/types/tokens.js +2 -0
  58. package/dist/core/types/tokens.js.map +1 -0
  59. package/dist/core/types/transaction.d.ts +68 -0
  60. package/dist/core/types/transaction.js +38 -0
  61. package/dist/core/types/transaction.js.map +1 -0
  62. package/dist/core/types/types.d.ts +30 -0
  63. package/dist/core/types/types.js +7 -0
  64. package/dist/core/types/types.js.map +1 -0
  65. package/dist/core/types/wallet.d.ts +55 -0
  66. package/dist/core/types/wallet.js +26 -0
  67. package/dist/core/types/wallet.js.map +1 -0
  68. package/dist/hooks/chains/useSquidChains.d.ts +12 -0
  69. package/dist/hooks/chains/useSquidChains.js +45 -0
  70. package/dist/hooks/chains/useSquidChains.js.map +1 -0
  71. package/dist/hooks/cosmos/useCosmos.d.ts +33 -0
  72. package/dist/hooks/cosmos/useCosmos.js +194 -0
  73. package/dist/hooks/cosmos/useCosmos.js.map +1 -0
  74. package/dist/hooks/cosmos/useCosmosForChain.d.ts +4 -0
  75. package/dist/hooks/cosmos/useCosmosForChain.js +22 -0
  76. package/dist/hooks/cosmos/useCosmosForChain.js.map +1 -0
  77. package/{src/hooks/index.ts → dist/hooks/index.d.ts} +1 -7
  78. package/dist/hooks/index.js +27 -0
  79. package/dist/hooks/index.js.map +1 -0
  80. package/dist/hooks/navigation/useKeyboardNavigation.d.ts +7 -0
  81. package/dist/hooks/navigation/useKeyboardNavigation.js +69 -0
  82. package/dist/hooks/navigation/useKeyboardNavigation.js.map +1 -0
  83. package/dist/hooks/store/useSquidStore.d.ts +105 -0
  84. package/dist/hooks/store/useSquidStore.js +35 -0
  85. package/dist/hooks/store/useSquidStore.js.map +1 -0
  86. package/dist/hooks/swap/useSwap.d.ts +25 -0
  87. package/dist/hooks/swap/useSwap.js +229 -0
  88. package/dist/hooks/swap/useSwap.js.map +1 -0
  89. package/dist/hooks/tokens/useAllTokensWithBalance.d.ts +11 -0
  90. package/dist/hooks/tokens/useAllTokensWithBalance.js +97 -0
  91. package/dist/hooks/tokens/useAllTokensWithBalance.js.map +1 -0
  92. package/dist/hooks/tokens/useBalance.d.ts +34 -0
  93. package/dist/hooks/tokens/useBalance.js +112 -0
  94. package/dist/hooks/tokens/useBalance.js.map +1 -0
  95. package/dist/hooks/tokens/useMultiChainBalance.d.ts +17 -0
  96. package/dist/hooks/tokens/useMultiChainBalance.js +36 -0
  97. package/dist/hooks/tokens/useMultiChainBalance.js.map +1 -0
  98. package/dist/hooks/tokens/usePrices.d.ts +6 -0
  99. package/dist/hooks/tokens/usePrices.js +42 -0
  100. package/dist/hooks/tokens/usePrices.js.map +1 -0
  101. package/dist/hooks/tokens/useSingleTokenPrice.d.ts +10 -0
  102. package/dist/hooks/tokens/useSingleTokenPrice.js +32 -0
  103. package/dist/hooks/tokens/useSingleTokenPrice.js.map +1 -0
  104. package/dist/hooks/tokens/useSquidTokens.d.ts +13 -0
  105. package/dist/hooks/tokens/useSquidTokens.js +35 -0
  106. package/dist/hooks/tokens/useSquidTokens.js.map +1 -0
  107. package/dist/hooks/tokens/useTokensWithBalance.d.ts +7 -0
  108. package/dist/hooks/tokens/useTokensWithBalance.js +111 -0
  109. package/dist/hooks/tokens/useTokensWithBalance.js.map +1 -0
  110. package/dist/hooks/transaction/useEstimate.d.ts +44 -0
  111. package/dist/hooks/transaction/useEstimate.js +274 -0
  112. package/dist/hooks/transaction/useEstimate.js.map +1 -0
  113. package/dist/hooks/transaction/useEstimatePriceImpact.d.ts +7 -0
  114. package/dist/hooks/transaction/useEstimatePriceImpact.js +26 -0
  115. package/dist/hooks/transaction/useEstimatePriceImpact.js.map +1 -0
  116. package/dist/hooks/transaction/useExecuteTransaction.d.ts +20 -0
  117. package/dist/hooks/transaction/useExecuteTransaction.js +310 -0
  118. package/dist/hooks/transaction/useExecuteTransaction.js.map +1 -0
  119. package/dist/hooks/transaction/useExpress.d.ts +5 -0
  120. package/dist/hooks/transaction/useExpress.js +31 -0
  121. package/dist/hooks/transaction/useExpress.js.map +1 -0
  122. package/dist/hooks/transaction/useGetRoute.d.ts +14 -0
  123. package/dist/hooks/transaction/useGetRoute.js +96 -0
  124. package/dist/hooks/transaction/useGetRoute.js.map +1 -0
  125. package/dist/hooks/transaction/useSingleTransaction.d.ts +8 -0
  126. package/dist/hooks/transaction/useSingleTransaction.js +99 -0
  127. package/dist/hooks/transaction/useSingleTransaction.js.map +1 -0
  128. package/dist/hooks/transaction/useTransaction.d.ts +25 -0
  129. package/dist/hooks/transaction/useTransaction.js +521 -0
  130. package/dist/hooks/transaction/useTransaction.js.map +1 -0
  131. package/dist/hooks/user/useUserParams.d.ts +6 -0
  132. package/dist/hooks/user/useUserParams.js +41 -0
  133. package/dist/hooks/user/useUserParams.js.map +1 -0
  134. package/dist/hooks/wallet/useAddToken.d.ts +4 -0
  135. package/dist/hooks/wallet/useAddToken.js +45 -0
  136. package/dist/hooks/wallet/useAddToken.js.map +1 -0
  137. package/dist/hooks/wallet/useAutoConnect.d.ts +6 -0
  138. package/dist/hooks/wallet/useAutoConnect.js +44 -0
  139. package/dist/hooks/wallet/useAutoConnect.js.map +1 -0
  140. package/dist/hooks/wallet/useGnosisContext.d.ts +7 -0
  141. package/dist/hooks/wallet/useGnosisContext.js +70 -0
  142. package/dist/hooks/wallet/useGnosisContext.js.map +1 -0
  143. package/dist/hooks/wallet/useIntegratorContext.d.ts +5 -0
  144. package/dist/hooks/wallet/useIntegratorContext.js +39 -0
  145. package/dist/hooks/wallet/useIntegratorContext.js.map +1 -0
  146. package/dist/hooks/wallet/useMultiChainWallet.d.ts +8 -0
  147. package/dist/hooks/wallet/useMultiChainWallet.js +113 -0
  148. package/dist/hooks/wallet/useMultiChainWallet.js.map +1 -0
  149. package/dist/hooks/wallet/useWallet.d.ts +6 -0
  150. package/dist/hooks/wallet/useWallet.js +65 -0
  151. package/dist/hooks/wallet/useWallet.js.map +1 -0
  152. package/dist/hooks/webapp-router/useSquidRouter.d.ts +11 -0
  153. package/dist/hooks/webapp-router/useSquidRouter.js +33 -0
  154. package/dist/hooks/webapp-router/useSquidRouter.js.map +1 -0
  155. package/{src/index.ts → dist/index.d.ts} +0 -1
  156. package/dist/index.js.map +1 -0
  157. package/dist/provider/index.d.ts +10 -0
  158. package/dist/provider/index.js +71 -0
  159. package/dist/provider/index.js.map +1 -0
  160. package/dist/services/external/analyticsService.d.ts +18 -0
  161. package/dist/services/external/analyticsService.js +30 -0
  162. package/dist/services/external/analyticsService.js.map +1 -0
  163. package/dist/services/external/coingeckoService.d.ts +8 -0
  164. package/dist/services/external/coingeckoService.js +20 -0
  165. package/dist/services/external/coingeckoService.js.map +1 -0
  166. package/dist/services/external/rpcService.d.ts +4 -0
  167. package/dist/services/external/rpcService.js +145 -0
  168. package/dist/services/external/rpcService.js.map +1 -0
  169. package/dist/services/external/secretService.d.ts +28 -0
  170. package/dist/services/external/secretService.js +129 -0
  171. package/dist/services/external/secretService.js.map +1 -0
  172. package/dist/services/index.js +2 -0
  173. package/dist/services/index.js.map +1 -0
  174. package/dist/services/internal/apiService.d.ts +4 -0
  175. package/dist/services/internal/apiService.js +7 -0
  176. package/dist/services/internal/apiService.js.map +1 -0
  177. package/dist/services/internal/assetsService.d.ts +28 -0
  178. package/dist/services/internal/assetsService.js +46 -0
  179. package/dist/services/internal/assetsService.js.map +1 -0
  180. package/dist/services/internal/configService.d.ts +40 -0
  181. package/dist/services/internal/configService.js +119 -0
  182. package/dist/services/internal/configService.js.map +1 -0
  183. package/dist/services/internal/errorService.d.ts +30 -0
  184. package/{src/services/internal/errorService.ts → dist/services/internal/errorService.js} +35 -54
  185. package/dist/services/internal/errorService.js.map +1 -0
  186. package/dist/services/internal/eventService.d.ts +52 -0
  187. package/dist/services/internal/eventService.js +66 -0
  188. package/dist/services/internal/eventService.js.map +1 -0
  189. package/dist/services/internal/priceService.d.ts +1 -0
  190. package/dist/services/internal/priceService.js +7 -0
  191. package/dist/services/internal/priceService.js.map +1 -0
  192. package/dist/services/internal/transactionService.d.ts +43 -0
  193. package/dist/services/internal/transactionService.js +172 -0
  194. package/dist/services/internal/transactionService.js.map +1 -0
  195. package/dist/services/internal/transactionStatusService.d.ts +28 -0
  196. package/dist/services/internal/transactionStatusService.js +225 -0
  197. package/dist/services/internal/transactionStatusService.js.map +1 -0
  198. package/dist/services/internal/walletService.d.ts +28 -0
  199. package/dist/services/internal/walletService.js +123 -0
  200. package/dist/services/internal/walletService.js.map +1 -0
  201. package/dist/tests/assetsService.test.d.ts +1 -0
  202. package/dist/tests/assetsService.test.js +130 -0
  203. package/dist/tests/assetsService.test.js.map +1 -0
  204. package/dist/tests/configService.test.d.ts +1 -0
  205. package/dist/tests/configService.test.js +295 -0
  206. package/dist/tests/configService.test.js.map +1 -0
  207. package/dist/tests/fetchSquidData.d.ts +6 -0
  208. package/dist/tests/fetchSquidData.js +27 -0
  209. package/dist/tests/fetchSquidData.js.map +1 -0
  210. package/{src/tests/jest-svg-transform.ts → dist/tests/jest-svg-transform.js} +11 -9
  211. package/dist/tests/jest-svg-transform.js.map +1 -0
  212. package/dist/tests/sample.json +0 -0
  213. package/dist/tests/walletService.test.d.ts +1 -0
  214. package/dist/tests/walletService.test.js +74 -0
  215. package/dist/tests/walletService.test.js.map +1 -0
  216. package/package.json +6 -2
  217. package/.babelrc +0 -7
  218. package/.eslintignore +0 -1
  219. package/.eslintrc.json +0 -44
  220. package/CHANGELOG.md +0 -7
  221. package/jest.config.ts +0 -28
  222. package/scripts/copyAssets.js +0 -27
  223. package/scripts/removeBuildTestFolder.js +0 -28
  224. package/scripts/replacePaths.js +0 -37
  225. package/src/connectors/LedgerLiveConnector.ts +0 -226
  226. package/src/contracts/typechain/ERC20.d.ts +0 -441
  227. package/src/contracts/typechain/factories/ERC20__factory.ts +0 -340
  228. package/src/core/constants.ts +0 -549
  229. package/src/core/multicall3.ts +0 -22
  230. package/src/core/numbers.ts +0 -44
  231. package/src/core/providers/CosmosProvider.tsx +0 -55
  232. package/src/core/queries/queries-keys.ts +0 -156
  233. package/src/core/queries/react-query-config.ts +0 -13
  234. package/src/core/types/components.ts +0 -16
  235. package/src/core/types/config.ts +0 -52
  236. package/src/core/types/dex.ts +0 -31
  237. package/src/core/types/error.ts +0 -52
  238. package/src/core/types/event.ts +0 -16
  239. package/src/core/types/route.ts +0 -21
  240. package/src/core/types/swap.ts +0 -8
  241. package/src/core/types/tokens.ts +0 -30
  242. package/src/core/types/transaction.ts +0 -84
  243. package/src/core/types/types.ts +0 -37
  244. package/src/core/types/wallet.ts +0 -83
  245. package/src/hooks/chains/useSquidChains.ts +0 -66
  246. package/src/hooks/cosmos/useCosmos.ts +0 -279
  247. package/src/hooks/cosmos/useCosmosForChain.ts +0 -33
  248. package/src/hooks/navigation/useKeyboardNavigation.ts +0 -88
  249. package/src/hooks/store/useSquidStore.ts +0 -80
  250. package/src/hooks/swap/useSwap.ts +0 -359
  251. package/src/hooks/tokens/useAllTokensWithBalance.ts +0 -157
  252. package/src/hooks/tokens/useBalance.ts +0 -180
  253. package/src/hooks/tokens/useMultiChainBalance.ts +0 -59
  254. package/src/hooks/tokens/usePrices.ts +0 -52
  255. package/src/hooks/tokens/useSingleTokenPrice.ts +0 -45
  256. package/src/hooks/tokens/useSquidTokens.ts +0 -48
  257. package/src/hooks/tokens/useTokensWithBalance.ts +0 -169
  258. package/src/hooks/transaction/useEstimate.ts +0 -397
  259. package/src/hooks/transaction/useEstimatePriceImpact.ts +0 -39
  260. package/src/hooks/transaction/useExecuteTransaction.ts +0 -440
  261. package/src/hooks/transaction/useExpress.ts +0 -46
  262. package/src/hooks/transaction/useGetRoute.ts +0 -145
  263. package/src/hooks/transaction/useSingleTransaction.ts +0 -155
  264. package/src/hooks/transaction/useTransaction.ts +0 -734
  265. package/src/hooks/user/useUserParams.ts +0 -63
  266. package/src/hooks/wallet/useAddToken.ts +0 -53
  267. package/src/hooks/wallet/useAutoConnect.ts +0 -56
  268. package/src/hooks/wallet/useGnosisContext.ts +0 -84
  269. package/src/hooks/wallet/useIntegratorContext.ts +0 -44
  270. package/src/hooks/wallet/useMultiChainWallet.ts +0 -146
  271. package/src/hooks/wallet/useWallet.ts +0 -86
  272. package/src/hooks/webapp-router/useSquidRouter.ts +0 -42
  273. package/src/provider/index.tsx +0 -105
  274. package/src/react-app-env.d.ts +0 -2
  275. package/src/services/external/analyticsService.ts +0 -46
  276. package/src/services/external/coingeckoService.ts +0 -35
  277. package/src/services/external/rpcService.ts +0 -196
  278. package/src/services/external/secretService.ts +0 -178
  279. package/src/services/internal/apiService.ts +0 -6
  280. package/src/services/internal/assetsService.ts +0 -84
  281. package/src/services/internal/configService.ts +0 -261
  282. package/src/services/internal/eventService.ts +0 -93
  283. package/src/services/internal/priceService.ts +0 -10
  284. package/src/services/internal/transactionService.ts +0 -255
  285. package/src/services/internal/transactionStatusService.ts +0 -293
  286. package/src/services/internal/walletService.ts +0 -158
  287. package/src/tests/assetsService.test.ts +0 -176
  288. package/src/tests/configService.test.ts +0 -486
  289. package/src/tests/fetchSquidData.ts +0 -43
  290. package/src/tests/walletService.test.ts +0 -178
  291. package/tsconfig.json +0 -30
  292. /package/{src → dist}/assets/images/icons/wallets/binance.svg +0 -0
  293. /package/{src → dist}/assets/images/icons/wallets/bitget.svg +0 -0
  294. /package/{src → dist}/assets/images/icons/wallets/bitkeep.svg +0 -0
  295. /package/{src → dist}/assets/images/icons/wallets/blockchaindotcom.svg +0 -0
  296. /package/{src → dist}/assets/images/icons/wallets/brave.svg +0 -0
  297. /package/{src → dist}/assets/images/icons/wallets/c98.svg +0 -0
  298. /package/{src → dist}/assets/images/icons/wallets/coinbase.svg +0 -0
  299. /package/{src → dist}/assets/images/icons/wallets/cosmostation.svg +0 -0
  300. /package/{src → dist}/assets/images/icons/wallets/defiConnect.svg +0 -0
  301. /package/{src → dist}/assets/images/icons/wallets/exodus.svg +0 -0
  302. /package/{src → dist}/assets/images/icons/wallets/fetchai.svg +0 -0
  303. /package/{src → dist}/assets/images/icons/wallets/keplr.svg +0 -0
  304. /package/{src → dist}/assets/images/icons/wallets/leap.svg +0 -0
  305. /package/{src → dist}/assets/images/icons/wallets/metamask.svg +0 -0
  306. /package/{src → dist}/assets/images/icons/wallets/okx.svg +0 -0
  307. /package/{src → dist}/assets/images/icons/wallets/rabby.svg +0 -0
  308. /package/{src → dist}/assets/images/icons/wallets/trustwallet.svg +0 -0
  309. /package/{src → dist}/assets/images/icons/wallets/walletConnect.svg +0 -0
  310. /package/{src → dist}/assets/images/icons/wallets/wallet_icon.svg +0 -0
  311. /package/{src → dist}/assets/images/icons/wallets/xdefi.svg +0 -0
  312. /package/{src → dist}/assets/images/icons/wallets/zerion.svg +0 -0
  313. /package/{src → dist}/contracts/typechain/factories/ERC20__factory.d.ts +0 -0
  314. /package/{src/core/index.ts → dist/core/index.d.ts} +0 -0
  315. /package/{src/services/index.ts → dist/services/index.d.ts} +0 -0
  316. /package/{src/tests/sample.json → dist/tests/jest-svg-transform.d.ts} +0 -0
@@ -1,28 +0,0 @@
1
- const fs = require('fs');
2
- const path = require('path');
3
-
4
- // Define the path to the directory you want to delete
5
- const directory = path.join(__dirname, '../dist/tests');
6
-
7
- // Function to recursively delete a directory
8
- function deleteDirectory(dirPath) {
9
- if (fs.existsSync(dirPath)) {
10
- fs.readdirSync(dirPath).forEach((file) => {
11
- const currentPath = path.join(dirPath, file);
12
- if (fs.lstatSync(currentPath).isDirectory()) {
13
- // Recurse if the current path is a directory
14
- deleteDirectory(currentPath);
15
- } else {
16
- // Delete file
17
- fs.unlinkSync(currentPath);
18
- }
19
- });
20
- // Delete now-empty directory
21
- fs.rmdirSync(dirPath);
22
- } else {
23
- console.log("Directory not found: ", dirPath);
24
- }
25
- }
26
-
27
- // Call the function to delete the directory
28
- deleteDirectory(directory);
@@ -1,37 +0,0 @@
1
- const fs = require('fs');
2
- const path = require('path');
3
-
4
- const directoryPath = path.join(__dirname, '../dist');
5
-
6
- // Function to replace path aliases based on file depth
7
- function replacePathInFile(filePath) {
8
- fs.readFile(filePath, 'utf8', function (err, data) {
9
- if (err) {
10
- return console.log(err);
11
- }
12
- // Calculate depth to adjust relative path replacements
13
- const depth = filePath.split('/').length - directoryPath.split('/').length - 1;
14
- const replacement = './' + '../'.repeat(depth);
15
-
16
- // Replace "@/..." with relative paths
17
- var result = data.replace(/@\//g, replacement);
18
-
19
- fs.writeFile(filePath, result, 'utf8', function (err) {
20
- if (err) return console.log(err);
21
- });
22
- });
23
- }
24
-
25
- // Read all files in directory recursively and replace paths
26
- function readDirectory(directory) {
27
- fs.readdirSync(directory).forEach(file => {
28
- const absolutePath = path.join(directory, file);
29
- if (fs.statSync(absolutePath).isDirectory()) {
30
- return readDirectory(absolutePath);
31
- } else if (absolutePath.endsWith('.js')) { // Ensure only JavaScript files are processed
32
- replacePathInFile(absolutePath);
33
- }
34
- });
35
- }
36
-
37
- readDirectory(directoryPath);
@@ -1,226 +0,0 @@
1
- import { PriorityConnectors } from "@/core/constants";
2
- import { IFrameEthereumProvider } from "@ledgerhq/iframe-provider";
3
- import type { Chain, ProviderRpcError, RpcError } from "@wagmi/core";
4
- import {
5
- AddChainError,
6
- ChainNotConfiguredError,
7
- Connector,
8
- ConnectorNotFoundError,
9
- ResourceUnavailableError,
10
- SwitchChainError,
11
- UserRejectedRequestError,
12
- normalizeChainId,
13
- } from "@wagmi/core";
14
- import { providers } from "ethers";
15
- import { getAddress, hexValue } from "ethers/lib/utils";
16
-
17
- type IFrameEthereumProviderOptions = ConstructorParameters<
18
- typeof IFrameEthereumProvider
19
- >[0];
20
-
21
- export class IFrameEthereumConnector extends Connector<
22
- IFrameEthereumProvider,
23
- IFrameEthereumProviderOptions
24
- > {
25
- readonly id = PriorityConnectors.LedgerLive;
26
-
27
- readonly name = "Ledger Live";
28
-
29
- readonly ready = true;
30
-
31
- providerInstance?: IFrameEthereumProvider;
32
-
33
- async connect({ chainId }: { chainId?: number } = {}) {
34
- try {
35
- const provider = await this.getProvider();
36
- if (!provider) throw new ConnectorNotFoundError();
37
-
38
- if (provider.on) {
39
- provider.on("accountsChanged", this.onAccountsChanged);
40
- provider.on("chainChanged", this.onChainChanged);
41
- }
42
-
43
- this.emit("message", { type: "connecting" });
44
-
45
- const account = await this.getAccount();
46
- // Switch to chain if provided
47
- let id = await this.getChainId();
48
- let unsupported = this.isChainUnsupported(id);
49
- if (chainId && id !== chainId) {
50
- const chain = await this.switchChain(chainId);
51
- id = chain.id;
52
- unsupported = this.isChainUnsupported(id);
53
- }
54
-
55
- return { account, chain: { id, unsupported }, provider };
56
- } catch (error) {
57
- if (this.isUserRejectedRequestError(error)) {
58
- throw new UserRejectedRequestError(error);
59
- }
60
- if ((error as RpcError).code === -32002) {
61
- throw new ResourceUnavailableError(error);
62
- }
63
- throw error;
64
- }
65
- }
66
-
67
- async disconnect() {
68
- const provider = await this.getProvider();
69
- if (!provider?.removeListener) return;
70
-
71
- provider.removeListener("accountsChanged", this.onAccountsChanged);
72
- provider.removeListener("chainChanged", this.onChainChanged);
73
- }
74
-
75
- async getAccount() {
76
- const provider = await this.getProvider();
77
- if (!provider) throw new ConnectorNotFoundError();
78
- const accounts = await provider.send("eth_requestAccounts");
79
- // return checksum address
80
- return getAddress(accounts[0] as string);
81
- }
82
-
83
- async getChainId() {
84
- const provider = await this.getProvider();
85
- if (!provider) throw new ConnectorNotFoundError();
86
- return provider.send("eth_chainId").then(normalizeChainId);
87
- }
88
-
89
- async getProvider() {
90
- if (!this.providerInstance) {
91
- this.providerInstance = new IFrameEthereumProvider(this.options);
92
- }
93
- return this.providerInstance;
94
- }
95
-
96
- async getSigner() {
97
- const [provider, account] = await Promise.all([
98
- this.getProvider(),
99
- this.getAccount(),
100
- ]);
101
- return new providers.Web3Provider(
102
- provider as unknown as providers.ExternalProvider
103
- ).getSigner(account);
104
- }
105
-
106
- async isAuthorized() {
107
- try {
108
- const provider = await this.getProvider();
109
- if (!provider) throw new ConnectorNotFoundError();
110
- const accounts = await provider.send("eth_accounts");
111
- const account = accounts[0];
112
- return !!account;
113
- } catch {
114
- return false;
115
- }
116
- }
117
-
118
- override async switchChain(chainId: number): Promise<Chain> {
119
- const provider = await this.getProvider();
120
-
121
- if (!provider) throw new ConnectorNotFoundError();
122
- const id = hexValue(chainId);
123
-
124
- try {
125
- await provider.send("wallet_switchEthereumChain", [{ chainId: id }]);
126
-
127
- return (
128
- this.chains.find((x) => x.id === chainId) ?? {
129
- id: chainId,
130
- name: `Chain ${id}`,
131
- network: `${id}`,
132
- nativeCurrency: { decimals: 18, name: "Ether", symbol: "ETH" },
133
- rpcUrls: { default: { http: [""] }, public: { http: [""] } },
134
- }
135
- );
136
- } catch (error) {
137
- const chain = this.chains.find((x) => x.id === chainId);
138
- if (!chain) {
139
- throw new ChainNotConfiguredError({ chainId, connectorId: this.id });
140
- }
141
-
142
- // Indicates chain is not added to provider
143
- if (
144
- (error as ProviderRpcError).code === 4902 ||
145
- // Unwrapping for MetaMask Mobile
146
- // https://github.com/MetaMask/metamask-mobile/issues/2944#issuecomment-976988719
147
- (error as RpcError<{ originalError?: { code: number } }>)?.data
148
- ?.originalError?.code === 4902
149
- ) {
150
- try {
151
- await provider.send("wallet_addEthereumChain", [
152
- {
153
- chainId: id,
154
- chainName: chain.name,
155
- nativeCurrency: chain.nativeCurrency,
156
- rpcUrls: [chain.rpcUrls.public ?? chain.rpcUrls.default],
157
- blockExplorerUrls: this.getBlockExplorerUrls(chain),
158
- },
159
- ]);
160
-
161
- return chain;
162
- } catch (addError) {
163
- if (this.isUserRejectedRequestError(addError)) {
164
- throw new UserRejectedRequestError(error);
165
- }
166
- throw new AddChainError();
167
- }
168
- }
169
-
170
- if (this.isUserRejectedRequestError(error)) {
171
- throw new UserRejectedRequestError(error);
172
- }
173
- throw new SwitchChainError(error);
174
- }
175
- }
176
-
177
- override async watchAsset({
178
- address,
179
- decimals = 18,
180
- image,
181
- symbol,
182
- }: {
183
- address: string;
184
- decimals?: number;
185
- image?: string;
186
- symbol: string;
187
- }) {
188
- const provider = await this.getProvider();
189
- if (!provider) throw new ConnectorNotFoundError();
190
-
191
- return provider.send("wallet_watchAsset", [
192
- {
193
- type: "ERC20",
194
- options: {
195
- address,
196
- decimals,
197
- image,
198
- symbol,
199
- },
200
- },
201
- ]);
202
- }
203
-
204
- protected onAccountsChanged = (accounts: string[]) => {
205
- if (accounts.length === 0 || !accounts[0]) {
206
- this.emit("disconnect");
207
- } else {
208
- this.emit("change", { account: getAddress(accounts[0]) });
209
- }
210
- };
211
-
212
- protected onChainChanged = (chainId: number | string) => {
213
- const id = normalizeChainId(chainId);
214
- const unsupported = this.isChainUnsupported(id);
215
- this.emit("change", { chain: { id, unsupported } });
216
- };
217
-
218
- // eslint-disable-next-line class-methods-use-this
219
- protected isUserRejectedRequestError(error: unknown) {
220
- return (error as ProviderRpcError).code === 4001;
221
- }
222
-
223
- protected onDisconnect = () => {
224
- this.emit("disconnect");
225
- };
226
- }