@0xsquid/react-hooks 6.7.0-beta.0 → 6.7.0-rollup-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (250) hide show
  1. package/dist/hooks/index.d.ts +5 -4
  2. package/dist/index.esm.js +16892 -0
  3. package/dist/index.esm.js.map +1 -0
  4. package/dist/index.js +17096 -6
  5. package/dist/index.js.map +1 -1
  6. package/dist/secretService-Cc7emxDy.js +162 -0
  7. package/dist/secretService-Cc7emxDy.js.map +1 -0
  8. package/dist/{services/external/secretService.js → secretService-SEqSyHG0.js} +37 -8
  9. package/dist/secretService-SEqSyHG0.js.map +1 -0
  10. package/package.json +18 -4
  11. package/dist/core/abis/ics20.json +0 -128
  12. package/dist/core/connectors/bitcoin/errors/index.js +0 -22
  13. package/dist/core/connectors/bitcoin/errors/index.js.map +0 -1
  14. package/dist/core/connectors/bitcoin/helpers.js +0 -86
  15. package/dist/core/connectors/bitcoin/helpers.js.map +0 -1
  16. package/dist/core/connectors/bitcoin/index.js +0 -2
  17. package/dist/core/connectors/bitcoin/index.js.map +0 -1
  18. package/dist/core/connectors/bitcoin/wallets/index.js +0 -4
  19. package/dist/core/connectors/bitcoin/wallets/index.js.map +0 -1
  20. package/dist/core/connectors/bitcoin/wallets/keplr.js +0 -28
  21. package/dist/core/connectors/bitcoin/wallets/keplr.js.map +0 -1
  22. package/dist/core/connectors/bitcoin/wallets/phantom.js +0 -56
  23. package/dist/core/connectors/bitcoin/wallets/phantom.js.map +0 -1
  24. package/dist/core/connectors/bitcoin/wallets/unisat.js +0 -28
  25. package/dist/core/connectors/bitcoin/wallets/unisat.js.map +0 -1
  26. package/dist/core/constants.js +0 -144
  27. package/dist/core/constants.js.map +0 -1
  28. package/dist/core/externalLinks.js +0 -21
  29. package/dist/core/externalLinks.js.map +0 -1
  30. package/dist/core/index.js +0 -4
  31. package/dist/core/index.js.map +0 -1
  32. package/dist/core/multicall3.js +0 -442
  33. package/dist/core/multicall3.js.map +0 -1
  34. package/dist/core/providers/CosmosProvider.js +0 -13
  35. package/dist/core/providers/CosmosProvider.js.map +0 -1
  36. package/dist/core/providers/SolanaProvider.js +0 -15
  37. package/dist/core/providers/SolanaProvider.js.map +0 -1
  38. package/dist/core/providers/SuiProvider.js +0 -15
  39. package/dist/core/providers/SuiProvider.js.map +0 -1
  40. package/dist/core/queries/queries-keys.js +0 -204
  41. package/dist/core/queries/queries-keys.js.map +0 -1
  42. package/dist/core/queries/react-query-config.js +0 -11
  43. package/dist/core/queries/react-query-config.js.map +0 -1
  44. package/dist/core/types/config.js +0 -2
  45. package/dist/core/types/config.js.map +0 -1
  46. package/dist/core/types/dex.js +0 -33
  47. package/dist/core/types/dex.js.map +0 -1
  48. package/dist/core/types/error.js +0 -12
  49. package/dist/core/types/error.js.map +0 -1
  50. package/dist/core/types/event.js +0 -2
  51. package/dist/core/types/event.js.map +0 -1
  52. package/dist/core/types/index.js +0 -2
  53. package/dist/core/types/index.js.map +0 -1
  54. package/dist/core/types/rpc.js +0 -2
  55. package/dist/core/types/rpc.js.map +0 -1
  56. package/dist/core/types/sui.js +0 -2
  57. package/dist/core/types/sui.js.map +0 -1
  58. package/dist/core/types/swap.js +0 -2
  59. package/dist/core/types/swap.js.map +0 -1
  60. package/dist/core/types/tokens.js +0 -2
  61. package/dist/core/types/tokens.js.map +0 -1
  62. package/dist/core/types/transaction.js +0 -41
  63. package/dist/core/types/transaction.js.map +0 -1
  64. package/dist/core/types/wallet.js +0 -26
  65. package/dist/core/types/wallet.js.map +0 -1
  66. package/dist/core/wagmiConfig.js +0 -60
  67. package/dist/core/wagmiConfig.js.map +0 -1
  68. package/dist/core/wallets.js +0 -549
  69. package/dist/core/wallets.js.map +0 -1
  70. package/dist/hooks/chains/useSquidChains.js +0 -107
  71. package/dist/hooks/chains/useSquidChains.js.map +0 -1
  72. package/dist/hooks/client/useClient.js +0 -6
  73. package/dist/hooks/client/useClient.js.map +0 -1
  74. package/dist/hooks/cosmos/useCosmos.js +0 -172
  75. package/dist/hooks/cosmos/useCosmos.js.map +0 -1
  76. package/dist/hooks/cosmos/useCosmosForChain.js +0 -33
  77. package/dist/hooks/cosmos/useCosmosForChain.js.map +0 -1
  78. package/dist/hooks/index.js +0 -44
  79. package/dist/hooks/index.js.map +0 -1
  80. package/dist/hooks/navigation/useKeyboardNavigation.js +0 -67
  81. package/dist/hooks/navigation/useKeyboardNavigation.js.map +0 -1
  82. package/dist/hooks/query/useSquidQueryClient.js +0 -23
  83. package/dist/hooks/query/useSquidQueryClient.js.map +0 -1
  84. package/dist/hooks/solana/useSolana.js +0 -104
  85. package/dist/hooks/solana/useSolana.js.map +0 -1
  86. package/dist/hooks/squid/useSquid.js +0 -55
  87. package/dist/hooks/squid/useSquid.js.map +0 -1
  88. package/dist/hooks/store/useAddressBookStore.js +0 -26
  89. package/dist/hooks/store/useAddressBookStore.js.map +0 -1
  90. package/dist/hooks/store/useAssetsColorsStore.js +0 -7
  91. package/dist/hooks/store/useAssetsColorsStore.js.map +0 -1
  92. package/dist/hooks/store/useDepositAddressStore.js +0 -12
  93. package/dist/hooks/store/useDepositAddressStore.js.map +0 -1
  94. package/dist/hooks/store/useFavoriteTokensStore.js +0 -28
  95. package/dist/hooks/store/useFavoriteTokensStore.js.map +0 -1
  96. package/dist/hooks/store/useHistoryStore.js +0 -41
  97. package/dist/hooks/store/useHistoryStore.js.map +0 -1
  98. package/dist/hooks/store/useSquidStore.js +0 -56
  99. package/dist/hooks/store/useSquidStore.js.map +0 -1
  100. package/dist/hooks/store/useWalletStore.js +0 -42
  101. package/dist/hooks/store/useWalletStore.js.map +0 -1
  102. package/dist/hooks/sui/useSui.js +0 -28
  103. package/dist/hooks/sui/useSui.js.map +0 -1
  104. package/dist/hooks/sui/useSuiClient.js +0 -16
  105. package/dist/hooks/sui/useSuiClient.js.map +0 -1
  106. package/dist/hooks/sui/useSuiWallets.js +0 -42
  107. package/dist/hooks/sui/useSuiWallets.js.map +0 -1
  108. package/dist/hooks/swap/useDepositAddress.js +0 -63
  109. package/dist/hooks/swap/useDepositAddress.js.map +0 -1
  110. package/dist/hooks/swap/useSwap.js +0 -209
  111. package/dist/hooks/swap/useSwap.js.map +0 -1
  112. package/dist/hooks/tokens/useAllConnectedWalletBalances.js +0 -103
  113. package/dist/hooks/tokens/useAllConnectedWalletBalances.js.map +0 -1
  114. package/dist/hooks/tokens/useAllTokensWithBalanceForChainType.js +0 -119
  115. package/dist/hooks/tokens/useAllTokensWithBalanceForChainType.js.map +0 -1
  116. package/dist/hooks/tokens/useBalance.js +0 -136
  117. package/dist/hooks/tokens/useBalance.js.map +0 -1
  118. package/dist/hooks/tokens/useMultiChainBalance.js +0 -68
  119. package/dist/hooks/tokens/useMultiChainBalance.js.map +0 -1
  120. package/dist/hooks/tokens/useMultipleTokenPrices.js +0 -46
  121. package/dist/hooks/tokens/useMultipleTokenPrices.js.map +0 -1
  122. package/dist/hooks/tokens/useNativeBalance.js +0 -217
  123. package/dist/hooks/tokens/useNativeBalance.js.map +0 -1
  124. package/dist/hooks/tokens/useNativeTokenForChain.js +0 -28
  125. package/dist/hooks/tokens/useNativeTokenForChain.js.map +0 -1
  126. package/dist/hooks/tokens/useSingleTokenPrice.js +0 -38
  127. package/dist/hooks/tokens/useSingleTokenPrice.js.map +0 -1
  128. package/dist/hooks/tokens/useSquidTokens.js +0 -80
  129. package/dist/hooks/tokens/useSquidTokens.js.map +0 -1
  130. package/dist/hooks/tokens/useTokenHistoricalData.js +0 -23
  131. package/dist/hooks/tokens/useTokenHistoricalData.js.map +0 -1
  132. package/dist/hooks/transaction/useAllTransactionsStatus.js +0 -68
  133. package/dist/hooks/transaction/useAllTransactionsStatus.js.map +0 -1
  134. package/dist/hooks/transaction/useApproval.js +0 -223
  135. package/dist/hooks/transaction/useApproval.js.map +0 -1
  136. package/dist/hooks/transaction/useErc20Allowance.js +0 -43
  137. package/dist/hooks/transaction/useErc20Allowance.js.map +0 -1
  138. package/dist/hooks/transaction/useEstimate.js +0 -118
  139. package/dist/hooks/transaction/useEstimate.js.map +0 -1
  140. package/dist/hooks/transaction/useEstimatePriceImpact.js +0 -31
  141. package/dist/hooks/transaction/useEstimatePriceImpact.js.map +0 -1
  142. package/dist/hooks/transaction/useExecuteTransaction.js +0 -605
  143. package/dist/hooks/transaction/useExecuteTransaction.js.map +0 -1
  144. package/dist/hooks/transaction/useGetRoute.js +0 -224
  145. package/dist/hooks/transaction/useGetRoute.js.map +0 -1
  146. package/dist/hooks/transaction/useIcs20Allowance.js +0 -40
  147. package/dist/hooks/transaction/useIcs20Allowance.js.map +0 -1
  148. package/dist/hooks/transaction/useRouteWarnings.js +0 -19
  149. package/dist/hooks/transaction/useRouteWarnings.js.map +0 -1
  150. package/dist/hooks/transaction/useSingleTransaction.js +0 -91
  151. package/dist/hooks/transaction/useSingleTransaction.js.map +0 -1
  152. package/dist/hooks/user/useAvatar.js +0 -34
  153. package/dist/hooks/user/useAvatar.js.map +0 -1
  154. package/dist/hooks/user/useHistory.js +0 -106
  155. package/dist/hooks/user/useHistory.js.map +0 -1
  156. package/dist/hooks/user/useUserParams.js +0 -33
  157. package/dist/hooks/user/useUserParams.js.map +0 -1
  158. package/dist/hooks/wallet/useAddToken.js +0 -49
  159. package/dist/hooks/wallet/useAddToken.js.map +0 -1
  160. package/dist/hooks/wallet/useAutoConnect.js +0 -74
  161. package/dist/hooks/wallet/useAutoConnect.js.map +0 -1
  162. package/dist/hooks/wallet/useEns.js +0 -69
  163. package/dist/hooks/wallet/useEns.js.map +0 -1
  164. package/dist/hooks/wallet/useGnosisContext.js +0 -78
  165. package/dist/hooks/wallet/useGnosisContext.js.map +0 -1
  166. package/dist/hooks/wallet/useIntegratorContext.js +0 -39
  167. package/dist/hooks/wallet/useIntegratorContext.js.map +0 -1
  168. package/dist/hooks/wallet/useMultiChainWallet.js +0 -175
  169. package/dist/hooks/wallet/useMultiChainWallet.js.map +0 -1
  170. package/dist/hooks/wallet/useSigner.js +0 -76
  171. package/dist/hooks/wallet/useSigner.js.map +0 -1
  172. package/dist/hooks/wallet/useWallet.js +0 -206
  173. package/dist/hooks/wallet/useWallet.js.map +0 -1
  174. package/dist/hooks/wallet/useWallets.js +0 -36
  175. package/dist/hooks/wallet/useWallets.js.map +0 -1
  176. package/dist/provider/index.js +0 -113
  177. package/dist/provider/index.js.map +0 -1
  178. package/dist/services/external/ens.js +0 -66
  179. package/dist/services/external/ens.js.map +0 -1
  180. package/dist/services/external/rpcService.js +0 -421
  181. package/dist/services/external/rpcService.js.map +0 -1
  182. package/dist/services/external/secretService.js.map +0 -1
  183. package/dist/services/external/suiRpcClient.js +0 -80
  184. package/dist/services/external/suiRpcClient.js.map +0 -1
  185. package/dist/services/external/tokenDataService.js +0 -108
  186. package/dist/services/external/tokenDataService.js.map +0 -1
  187. package/dist/services/index.js +0 -16
  188. package/dist/services/index.js.map +0 -1
  189. package/dist/services/internal/apiService.js +0 -21
  190. package/dist/services/internal/apiService.js.map +0 -1
  191. package/dist/services/internal/assetsService.js +0 -586
  192. package/dist/services/internal/assetsService.js.map +0 -1
  193. package/dist/services/internal/bitcoinService.js +0 -51
  194. package/dist/services/internal/bitcoinService.js.map +0 -1
  195. package/dist/services/internal/configService.js +0 -215
  196. package/dist/services/internal/configService.js.map +0 -1
  197. package/dist/services/internal/cosmosService.js +0 -141
  198. package/dist/services/internal/cosmosService.js.map +0 -1
  199. package/dist/services/internal/errorService.js +0 -188
  200. package/dist/services/internal/errorService.js.map +0 -1
  201. package/dist/services/internal/estimateService.js +0 -221
  202. package/dist/services/internal/estimateService.js.map +0 -1
  203. package/dist/services/internal/eventService.js +0 -156
  204. package/dist/services/internal/eventService.js.map +0 -1
  205. package/dist/services/internal/evmService.js +0 -42
  206. package/dist/services/internal/evmService.js.map +0 -1
  207. package/dist/services/internal/numberService.js +0 -171
  208. package/dist/services/internal/numberService.js.map +0 -1
  209. package/dist/services/internal/priceService.js +0 -53
  210. package/dist/services/internal/priceService.js.map +0 -1
  211. package/dist/services/internal/searchService.js +0 -98
  212. package/dist/services/internal/searchService.js.map +0 -1
  213. package/dist/services/internal/solanaService.js +0 -109
  214. package/dist/services/internal/solanaService.js.map +0 -1
  215. package/dist/services/internal/suiService.js +0 -119
  216. package/dist/services/internal/suiService.js.map +0 -1
  217. package/dist/services/internal/transactionService.js +0 -207
  218. package/dist/services/internal/transactionService.js.map +0 -1
  219. package/dist/services/internal/transactionStatusService.js +0 -315
  220. package/dist/services/internal/transactionStatusService.js.map +0 -1
  221. package/dist/services/internal/walletService.js +0 -464
  222. package/dist/services/internal/walletService.js.map +0 -1
  223. package/dist/tests/apiService.test.js +0 -40
  224. package/dist/tests/apiService.test.js.map +0 -1
  225. package/dist/tests/assetsService.test.js +0 -500
  226. package/dist/tests/assetsService.test.js.map +0 -1
  227. package/dist/tests/configService.test.js +0 -673
  228. package/dist/tests/configService.test.js.map +0 -1
  229. package/dist/tests/estimateService.test.js +0 -355
  230. package/dist/tests/estimateService.test.js.map +0 -1
  231. package/dist/tests/fetchSquidData.js +0 -36
  232. package/dist/tests/fetchSquidData.js.map +0 -1
  233. package/dist/tests/jest-svg-transform.d.ts +0 -0
  234. package/dist/tests/jest-svg-transform.js +0 -21
  235. package/dist/tests/jest-svg-transform.js.map +0 -1
  236. package/dist/tests/numberService.test.js +0 -135
  237. package/dist/tests/numberService.test.js.map +0 -1
  238. package/dist/tests/priceService.test.js +0 -38
  239. package/dist/tests/priceService.test.js.map +0 -1
  240. package/dist/tests/sample.json +0 -0
  241. package/dist/tests/searchService.test.js +0 -92
  242. package/dist/tests/searchService.test.js.map +0 -1
  243. package/dist/tests/swapConfig.test.js +0 -332
  244. package/dist/tests/swapConfig.test.js.map +0 -1
  245. package/dist/tests/transactionService.test.js +0 -53
  246. package/dist/tests/transactionService.test.js.map +0 -1
  247. package/dist/tests/transactionStatusService.test.js +0 -165
  248. package/dist/tests/transactionStatusService.test.js.map +0 -1
  249. package/dist/tests/walletService.test.js +0 -264
  250. package/dist/tests/walletService.test.js.map +0 -1
@@ -0,0 +1,162 @@
1
+ 'use strict';
2
+
3
+ var stargate = require('@cosmjs/stargate');
4
+ var secretjs = require('secretjs');
5
+ var index = require('./index.js');
6
+ require('@0xsquid/squid-types');
7
+ require('react');
8
+ require('ethers');
9
+ require('viem');
10
+ require('axios');
11
+ require('bignumber.js');
12
+ require('wagmi/connectors');
13
+ require('@cosmjs/encoding');
14
+ require('fuse.js');
15
+ require('@solana/spl-token');
16
+ require('@solana/web3.js');
17
+ require('bitcoinjs-lib');
18
+ require('@bitcoinerlab/secp256k1');
19
+ require('@mysten/wallet-standard');
20
+ require('zustand');
21
+ require('zustand/middleware');
22
+ require('@tanstack/react-query');
23
+ require('wagmi');
24
+ require('@safe-global/safe-apps-sdk');
25
+ require('@solana/wallet-adapter-phantom');
26
+ require('@mysten/slush-wallet');
27
+ require('@cosmjs/cosmwasm-stargate');
28
+ require('@mysten/sui/transactions');
29
+ require('@injectivelabs/sdk-ts/dist/cjs/core/stargate');
30
+ require('@mysten/sui/client');
31
+ require('@0xsquid/sdk');
32
+ require('viem/chains');
33
+
34
+ /**
35
+ * Fetch secret network token balance
36
+ * Using the permit signature, see permit function for more details
37
+ * @param secretJS
38
+ * @param contract
39
+ * @param chainId
40
+ * @param walletAddress
41
+ * @param permit
42
+ * @returns
43
+ */
44
+ const getTokenBalance = async (secretJS, contract, permit) => {
45
+ if (permit) {
46
+ const msg = {
47
+ balance: {},
48
+ };
49
+ const result = await secretJS.query.compute.queryContract({
50
+ contract_address: contract.address,
51
+ code_hash: contract.codeHash,
52
+ query: {
53
+ with_permit: {
54
+ query: msg,
55
+ permit,
56
+ },
57
+ },
58
+ });
59
+ return result;
60
+ }
61
+ return -1;
62
+ };
63
+ const getPermit = async (chainId, contracts, address) => {
64
+ const contractsString = contracts.join("_");
65
+ const permKey = `perm_${chainId}_${contractsString}_${address}`;
66
+ let permit;
67
+ const permitStored = window.localStorage.getItem(permKey);
68
+ if (permitStored)
69
+ permit = JSON.parse(permitStored);
70
+ // Not able to fetch permit signature from local storage,
71
+ // Ask user to sign message
72
+ if (!permit) {
73
+ try {
74
+ const result = await window.keplr.signAmino(chainId, address, {
75
+ chain_id: chainId,
76
+ account_number: "0",
77
+ sequence: "0",
78
+ fee: {
79
+ amount: [{ denom: "uscrt", amount: "0" }],
80
+ gas: "1",
81
+ },
82
+ msgs: [
83
+ {
84
+ type: "query_permit",
85
+ value: {
86
+ permit_name: "secret-bridge-balance",
87
+ allowed_tokens: contracts,
88
+ permissions: ["balance"],
89
+ },
90
+ },
91
+ ],
92
+ memo: "",
93
+ }, {
94
+ preferNoSetFee: true,
95
+ preferNoSetMemo: true,
96
+ });
97
+ permit = {
98
+ params: {
99
+ permit_name: "secret-bridge-balance",
100
+ allowed_tokens: contracts,
101
+ chain_id: chainId,
102
+ permissions: ["balance"],
103
+ },
104
+ signature: result.signature,
105
+ };
106
+ window.localStorage.setItem(permKey, JSON.stringify(permit));
107
+ }
108
+ catch (err) {
109
+ console.error("--- PERMIT ERROR ---");
110
+ console.error(err);
111
+ }
112
+ }
113
+ return permit;
114
+ };
115
+ /**
116
+ * Fetches the secret balance of the user
117
+ * This has a different logic than the other balances because Secret network hides the balance of the user by design
118
+ * So we need to fetch the balance in a different way
119
+ */
120
+ const fetchAllSecretBalances = async (chainData, userAddress, secretTokens, keplr) => {
121
+ if (!keplr)
122
+ return [];
123
+ // Enables app to utilize keplr's secret utilities
124
+ await keplr.enable(index.CHAIN_IDS.SECRET);
125
+ // Create a client that handles the query encryption
126
+ const client = new secretjs.SecretNetworkClient({
127
+ url: chainData.rest,
128
+ chainId: index.CHAIN_IDS.SECRET,
129
+ wallet: keplr.getOfflineSignerOnlyAmino(index.CHAIN_IDS.SECRET),
130
+ encryptionUtils: keplr.getEnigmaUtils(index.CHAIN_IDS.SECRET),
131
+ walletAddress: userAddress,
132
+ });
133
+ // Get secret tokens
134
+ const permit = await getPermit(index.CHAIN_IDS.SECRET, secretTokens.map((st) => st.address), userAddress);
135
+ // Fetching all balances in parallel
136
+ const privateTokens = await Promise.all(secretTokens
137
+ .filter((t) => !!t.codeHash)
138
+ .map(async (token) => {
139
+ const result = (await getTokenBalance(client, {
140
+ address: token.address,
141
+ codeHash: token.codeHash ?? "",
142
+ }, permit));
143
+ return {
144
+ ...token,
145
+ balance: index.formatBNToReadable(BigInt(result.balance.amount), token?.decimals),
146
+ };
147
+ }));
148
+ // Use Stargate getBalance for SCRT
149
+ const stargateClient = await stargate.StargateClient.connect(chainData.rpc);
150
+ const nativeSecretToken = secretTokens.find((t) => t.address === "uscrt");
151
+ const publicTokenBalance = await stargateClient.getBalance(userAddress, "uscrt");
152
+ const publicTokenWithBalance = {
153
+ ...nativeSecretToken,
154
+ balance: index.formatBNToReadable(BigInt(publicTokenBalance.amount), nativeSecretToken?.decimals ?? 18),
155
+ };
156
+ return [...privateTokens, publicTokenWithBalance];
157
+ };
158
+
159
+ exports.fetchAllSecretBalances = fetchAllSecretBalances;
160
+ exports.getPermit = getPermit;
161
+ exports.getTokenBalance = getTokenBalance;
162
+ //# sourceMappingURL=secretService-Cc7emxDy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secretService-Cc7emxDy.js","sources":["../src/services/external/secretService.ts"],"sourcesContent":["import type { ChainData, CosmosChain, Token } from \"@0xsquid/squid-types\";\nimport { StargateClient } from \"@cosmjs/stargate\";\nimport type { Keplr } from \"@keplr-wallet/types\";\nimport { SecretNetworkClient } from \"secretjs\";\nimport { CHAIN_IDS } from \"../../core/constants\";\nimport type { TokenWithBalance } from \"../../core/types/tokens\";\nimport type { TypedWindow } from \"../../core/types/wallet\";\nimport { formatBNToReadable } from \"../internal/numberService\";\n\n/**\n * Fetch secret network token balance\n * Using the permit signature, see permit function for more details\n * @param secretJS\n * @param contract\n * @param chainId\n * @param walletAddress\n * @param permit\n * @returns\n */\nexport const getTokenBalance = async (\n secretJS: SecretNetworkClient,\n contract: { address: string; codeHash: string },\n permit: any\n) => {\n if (permit) {\n const msg = {\n balance: {},\n };\n\n const result = await secretJS.query.compute.queryContract({\n contract_address: contract.address,\n code_hash: contract.codeHash,\n query: {\n with_permit: {\n query: msg,\n permit,\n },\n },\n });\n return result;\n }\n return -1;\n};\n\nexport const getPermit = async (\n chainId: string,\n contracts: any[],\n address: string\n) => {\n const contractsString = contracts.join(\"_\");\n const permKey = `perm_${chainId}_${contractsString}_${address}`;\n let permit: any;\n\n const permitStored = window.localStorage.getItem(permKey);\n if (permitStored) permit = JSON.parse(permitStored);\n\n // Not able to fetch permit signature from local storage,\n // Ask user to sign message\n if (!permit) {\n try {\n const result = await (window as TypedWindow).keplr.signAmino(\n chainId,\n address,\n {\n chain_id: chainId,\n account_number: \"0\",\n sequence: \"0\",\n fee: {\n amount: [{ denom: \"uscrt\", amount: \"0\" }],\n gas: \"1\",\n },\n msgs: [\n {\n type: \"query_permit\",\n value: {\n permit_name: \"secret-bridge-balance\",\n allowed_tokens: contracts,\n permissions: [\"balance\"],\n },\n },\n ],\n memo: \"\",\n },\n {\n preferNoSetFee: true,\n preferNoSetMemo: true,\n }\n );\n permit = {\n params: {\n permit_name: \"secret-bridge-balance\",\n allowed_tokens: contracts,\n chain_id: chainId,\n permissions: [\"balance\"],\n },\n signature: result.signature,\n };\n window.localStorage.setItem(permKey, JSON.stringify(permit));\n } catch (err) {\n console.error(\"--- PERMIT ERROR ---\");\n console.error(err);\n }\n }\n return permit;\n};\n\n/**\n * Fetches the secret balance of the user\n * This has a different logic than the other balances because Secret network hides the balance of the user by design\n * So we need to fetch the balance in a different way\n */\nexport const fetchAllSecretBalances = async (\n chainData: ChainData,\n userAddress: string,\n secretTokens: (Token & { codeHash?: string })[],\n keplr?: Keplr\n): Promise<TokenWithBalance[]> => {\n if (!keplr) return [];\n // Enables app to utilize keplr's secret utilities\n await keplr.enable(CHAIN_IDS.SECRET);\n // Create a client that handles the query encryption\n const client = new SecretNetworkClient({\n url: (chainData as CosmosChain).rest,\n chainId: CHAIN_IDS.SECRET,\n wallet: keplr.getOfflineSignerOnlyAmino(CHAIN_IDS.SECRET),\n encryptionUtils: keplr.getEnigmaUtils(CHAIN_IDS.SECRET),\n walletAddress: userAddress,\n });\n\n // Get secret tokens\n\n const permit = await getPermit(\n CHAIN_IDS.SECRET,\n secretTokens.map((st) => st.address),\n userAddress\n );\n\n // Fetching all balances in parallel\n const privateTokens = await Promise.all(\n secretTokens\n .filter((t) => !!t.codeHash)\n .map(async (token) => {\n const result = (await getTokenBalance(\n client,\n {\n address: token.address,\n codeHash: token.codeHash ?? \"\",\n },\n permit\n )) as { balance: { amount: string } };\n\n return {\n ...token,\n balance: formatBNToReadable(\n BigInt(result.balance.amount),\n token?.decimals\n ),\n } as TokenWithBalance;\n })\n );\n\n // Use Stargate getBalance for SCRT\n const stargateClient = await StargateClient.connect(chainData.rpc);\n const nativeSecretToken = secretTokens.find((t) => t.address === \"uscrt\");\n\n const publicTokenBalance = await stargateClient.getBalance(\n userAddress,\n \"uscrt\"\n );\n\n const publicTokenWithBalance = {\n ...nativeSecretToken,\n balance: formatBNToReadable(\n BigInt(publicTokenBalance.amount),\n nativeSecretToken?.decimals ?? 18\n ),\n } as TokenWithBalance;\n\n return [...privateTokens, publicTokenWithBalance];\n};\n"],"names":["CHAIN_IDS","SecretNetworkClient","formatBNToReadable","StargateClient"],"mappings":"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"}
@@ -1,7 +1,34 @@
1
- import { StargateClient } from "@cosmjs/stargate";
2
- import { SecretNetworkClient } from "secretjs";
3
- import { CHAIN_IDS } from "../../core/constants";
4
- import { formatBNToReadable } from "../internal/numberService";
1
+ import { StargateClient } from '@cosmjs/stargate';
2
+ import { SecretNetworkClient } from 'secretjs';
3
+ import { CHAIN_IDS, formatBNToReadable } from './index.esm.js';
4
+ import '@0xsquid/squid-types';
5
+ import 'react';
6
+ import 'ethers';
7
+ import 'viem';
8
+ import 'axios';
9
+ import 'bignumber.js';
10
+ import 'wagmi/connectors';
11
+ import '@cosmjs/encoding';
12
+ import 'fuse.js';
13
+ import '@solana/spl-token';
14
+ import '@solana/web3.js';
15
+ import 'bitcoinjs-lib';
16
+ import '@bitcoinerlab/secp256k1';
17
+ import '@mysten/wallet-standard';
18
+ import 'zustand';
19
+ import 'zustand/middleware';
20
+ import '@tanstack/react-query';
21
+ import 'wagmi';
22
+ import '@safe-global/safe-apps-sdk';
23
+ import '@solana/wallet-adapter-phantom';
24
+ import '@mysten/slush-wallet';
25
+ import '@cosmjs/cosmwasm-stargate';
26
+ import '@mysten/sui/transactions';
27
+ import '@injectivelabs/sdk-ts/dist/cjs/core/stargate';
28
+ import '@mysten/sui/client';
29
+ import '@0xsquid/sdk';
30
+ import 'viem/chains';
31
+
5
32
  /**
6
33
  * Fetch secret network token balance
7
34
  * Using the permit signature, see permit function for more details
@@ -12,7 +39,7 @@ import { formatBNToReadable } from "../internal/numberService";
12
39
  * @param permit
13
40
  * @returns
14
41
  */
15
- export const getTokenBalance = async (secretJS, contract, permit) => {
42
+ const getTokenBalance = async (secretJS, contract, permit) => {
16
43
  if (permit) {
17
44
  const msg = {
18
45
  balance: {},
@@ -31,7 +58,7 @@ export const getTokenBalance = async (secretJS, contract, permit) => {
31
58
  }
32
59
  return -1;
33
60
  };
34
- export const getPermit = async (chainId, contracts, address) => {
61
+ const getPermit = async (chainId, contracts, address) => {
35
62
  const contractsString = contracts.join("_");
36
63
  const permKey = `perm_${chainId}_${contractsString}_${address}`;
37
64
  let permit;
@@ -88,7 +115,7 @@ export const getPermit = async (chainId, contracts, address) => {
88
115
  * This has a different logic than the other balances because Secret network hides the balance of the user by design
89
116
  * So we need to fetch the balance in a different way
90
117
  */
91
- export const fetchAllSecretBalances = async (chainData, userAddress, secretTokens, keplr) => {
118
+ const fetchAllSecretBalances = async (chainData, userAddress, secretTokens, keplr) => {
92
119
  if (!keplr)
93
120
  return [];
94
121
  // Enables app to utilize keplr's secret utilities
@@ -126,4 +153,6 @@ export const fetchAllSecretBalances = async (chainData, userAddress, secretToken
126
153
  };
127
154
  return [...privateTokens, publicTokenWithBalance];
128
155
  };
129
- //# sourceMappingURL=secretService.js.map
156
+
157
+ export { fetchAllSecretBalances, getPermit, getTokenBalance };
158
+ //# sourceMappingURL=secretService-SEqSyHG0.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secretService-SEqSyHG0.js","sources":["../src/services/external/secretService.ts"],"sourcesContent":["import type { ChainData, CosmosChain, Token } from \"@0xsquid/squid-types\";\nimport { StargateClient } from \"@cosmjs/stargate\";\nimport type { Keplr } from \"@keplr-wallet/types\";\nimport { SecretNetworkClient } from \"secretjs\";\nimport { CHAIN_IDS } from \"../../core/constants\";\nimport type { TokenWithBalance } from \"../../core/types/tokens\";\nimport type { TypedWindow } from \"../../core/types/wallet\";\nimport { formatBNToReadable } from \"../internal/numberService\";\n\n/**\n * Fetch secret network token balance\n * Using the permit signature, see permit function for more details\n * @param secretJS\n * @param contract\n * @param chainId\n * @param walletAddress\n * @param permit\n * @returns\n */\nexport const getTokenBalance = async (\n secretJS: SecretNetworkClient,\n contract: { address: string; codeHash: string },\n permit: any\n) => {\n if (permit) {\n const msg = {\n balance: {},\n };\n\n const result = await secretJS.query.compute.queryContract({\n contract_address: contract.address,\n code_hash: contract.codeHash,\n query: {\n with_permit: {\n query: msg,\n permit,\n },\n },\n });\n return result;\n }\n return -1;\n};\n\nexport const getPermit = async (\n chainId: string,\n contracts: any[],\n address: string\n) => {\n const contractsString = contracts.join(\"_\");\n const permKey = `perm_${chainId}_${contractsString}_${address}`;\n let permit: any;\n\n const permitStored = window.localStorage.getItem(permKey);\n if (permitStored) permit = JSON.parse(permitStored);\n\n // Not able to fetch permit signature from local storage,\n // Ask user to sign message\n if (!permit) {\n try {\n const result = await (window as TypedWindow).keplr.signAmino(\n chainId,\n address,\n {\n chain_id: chainId,\n account_number: \"0\",\n sequence: \"0\",\n fee: {\n amount: [{ denom: \"uscrt\", amount: \"0\" }],\n gas: \"1\",\n },\n msgs: [\n {\n type: \"query_permit\",\n value: {\n permit_name: \"secret-bridge-balance\",\n allowed_tokens: contracts,\n permissions: [\"balance\"],\n },\n },\n ],\n memo: \"\",\n },\n {\n preferNoSetFee: true,\n preferNoSetMemo: true,\n }\n );\n permit = {\n params: {\n permit_name: \"secret-bridge-balance\",\n allowed_tokens: contracts,\n chain_id: chainId,\n permissions: [\"balance\"],\n },\n signature: result.signature,\n };\n window.localStorage.setItem(permKey, JSON.stringify(permit));\n } catch (err) {\n console.error(\"--- PERMIT ERROR ---\");\n console.error(err);\n }\n }\n return permit;\n};\n\n/**\n * Fetches the secret balance of the user\n * This has a different logic than the other balances because Secret network hides the balance of the user by design\n * So we need to fetch the balance in a different way\n */\nexport const fetchAllSecretBalances = async (\n chainData: ChainData,\n userAddress: string,\n secretTokens: (Token & { codeHash?: string })[],\n keplr?: Keplr\n): Promise<TokenWithBalance[]> => {\n if (!keplr) return [];\n // Enables app to utilize keplr's secret utilities\n await keplr.enable(CHAIN_IDS.SECRET);\n // Create a client that handles the query encryption\n const client = new SecretNetworkClient({\n url: (chainData as CosmosChain).rest,\n chainId: CHAIN_IDS.SECRET,\n wallet: keplr.getOfflineSignerOnlyAmino(CHAIN_IDS.SECRET),\n encryptionUtils: keplr.getEnigmaUtils(CHAIN_IDS.SECRET),\n walletAddress: userAddress,\n });\n\n // Get secret tokens\n\n const permit = await getPermit(\n CHAIN_IDS.SECRET,\n secretTokens.map((st) => st.address),\n userAddress\n );\n\n // Fetching all balances in parallel\n const privateTokens = await Promise.all(\n secretTokens\n .filter((t) => !!t.codeHash)\n .map(async (token) => {\n const result = (await getTokenBalance(\n client,\n {\n address: token.address,\n codeHash: token.codeHash ?? \"\",\n },\n permit\n )) as { balance: { amount: string } };\n\n return {\n ...token,\n balance: formatBNToReadable(\n BigInt(result.balance.amount),\n token?.decimals\n ),\n } as TokenWithBalance;\n })\n );\n\n // Use Stargate getBalance for SCRT\n const stargateClient = await StargateClient.connect(chainData.rpc);\n const nativeSecretToken = secretTokens.find((t) => t.address === \"uscrt\");\n\n const publicTokenBalance = await stargateClient.getBalance(\n userAddress,\n \"uscrt\"\n );\n\n const publicTokenWithBalance = {\n ...nativeSecretToken,\n balance: formatBNToReadable(\n BigInt(publicTokenBalance.amount),\n nativeSecretToken?.decimals ?? 18\n ),\n } as TokenWithBalance;\n\n return [...privateTokens, publicTokenWithBalance];\n};\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,11 +1,18 @@
1
1
  {
2
2
  "name": "@0xsquid/react-hooks",
3
- "version": "6.7.0-beta.0",
3
+ "version": "6.7.0-rollup-beta.0",
4
4
  "description": "Squid hooks monorepo",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
7
- "module": "dist/index.js",
7
+ "module": "dist/index.esm.js",
8
8
  "type": "module",
9
+ "exports": {
10
+ ".": {
11
+ "import": "./dist/index.esm.js",
12
+ "require": "./dist/index.js",
13
+ "types": "./dist/index.d.ts"
14
+ }
15
+ },
9
16
  "files": [
10
17
  "dist",
11
18
  "README.md"
@@ -16,12 +23,12 @@
16
23
  },
17
24
  "scripts": {
18
25
  "clean": "rimraf dist",
19
- "build": "yarn clean && tsc --noEmit false && node scripts/copyAssets.js",
26
+ "build": "yarn clean && rollup -c rollup.config.js && node scripts/copyAssets.js",
20
27
  "lint": "eslint . --ext .js,.jsx,.ts,.tsx",
21
28
  "lint:fix": "eslint . --ext .js,.jsx,.ts,.tsx --fix",
22
29
  "test": "node --experimental-vm-modules node_modules/.bin/jest",
23
30
  "release": "release-it",
24
- "release:pre": "release-it --preRelease=beta",
31
+ "release:pre": "release-it --preRelease=rollup-beta",
25
32
  "release:ci": "release-it --ci",
26
33
  "release:dry": "release-it --dry-run",
27
34
  "packlib": "rm -f squid-hooks-lib-*.tgz && yarn build && yarn pack --filename squid-hooks-lib-$(date +%s).tgz"
@@ -76,6 +83,12 @@
76
83
  "@types/node": "18.7.23",
77
84
  "@types/react": "^18.3.3",
78
85
  "@types/react-dom": "^18.3.0",
86
+ "@rollup/plugin-commonjs": "^25.0.7",
87
+ "@rollup/plugin-json": "^6.1.0",
88
+ "@rollup/plugin-node-resolve": "^15.2.3",
89
+ "@rollup/plugin-typescript": "^11.1.6",
90
+ "rollup": "^4.18.0",
91
+ "rollup-plugin-dts": "^6.1.1",
79
92
  "@typescript-eslint/eslint-plugin": "7.5.0",
80
93
  "@typescript-eslint/parser": "7.5.0",
81
94
  "autoprefixer": "9",
@@ -101,6 +114,7 @@
101
114
  "rimraf": "5.0.5",
102
115
  "ts-jest": "29.1.0",
103
116
  "ts-loader": "9.4.1",
117
+ "tslib": "^2.6.3",
104
118
  "ts-node": "10.9.2",
105
119
  "typescript": "5.1.3"
106
120
  },
@@ -1,128 +0,0 @@
1
- [
2
- {
3
- "inputs": [
4
- {
5
- "internalType": "address",
6
- "name": "grantee",
7
- "type": "address"
8
- },
9
- {
10
- "internalType": "address",
11
- "name": "granter",
12
- "type": "address"
13
- }
14
- ],
15
- "name": "allowance",
16
- "outputs": [
17
- {
18
- "components": [
19
- {
20
- "internalType": "string",
21
- "name": "sourcePort",
22
- "type": "string"
23
- },
24
- {
25
- "internalType": "string",
26
- "name": "sourceChannel",
27
- "type": "string"
28
- },
29
- {
30
- "components": [
31
- {
32
- "internalType": "string",
33
- "name": "denom",
34
- "type": "string"
35
- },
36
- {
37
- "internalType": "uint256",
38
- "name": "amount",
39
- "type": "uint256"
40
- }
41
- ],
42
- "internalType": "struct Coin[]",
43
- "name": "spendLimit",
44
- "type": "tuple[]"
45
- },
46
- {
47
- "internalType": "string[]",
48
- "name": "allowList",
49
- "type": "string[]"
50
- },
51
- {
52
- "internalType": "string[]",
53
- "name": "allowedPacketData",
54
- "type": "string[]"
55
- }
56
- ],
57
- "internalType": "struct ICS20Allocation[]",
58
- "name": "allocations",
59
- "type": "tuple[]"
60
- }
61
- ],
62
- "stateMutability": "view",
63
- "type": "function"
64
- },
65
- {
66
- "inputs": [
67
- {
68
- "internalType": "address",
69
- "name": "grantee",
70
- "type": "address"
71
- },
72
- {
73
- "components": [
74
- {
75
- "internalType": "string",
76
- "name": "sourcePort",
77
- "type": "string"
78
- },
79
- {
80
- "internalType": "string",
81
- "name": "sourceChannel",
82
- "type": "string"
83
- },
84
- {
85
- "components": [
86
- {
87
- "internalType": "string",
88
- "name": "denom",
89
- "type": "string"
90
- },
91
- {
92
- "internalType": "uint256",
93
- "name": "amount",
94
- "type": "uint256"
95
- }
96
- ],
97
- "internalType": "struct Coin[]",
98
- "name": "spendLimit",
99
- "type": "tuple[]"
100
- },
101
- {
102
- "internalType": "string[]",
103
- "name": "allowList",
104
- "type": "string[]"
105
- },
106
- {
107
- "internalType": "string[]",
108
- "name": "allowedPacketData",
109
- "type": "string[]"
110
- }
111
- ],
112
- "internalType": "struct ICS20Allocation[]",
113
- "name": "allocations",
114
- "type": "tuple[]"
115
- }
116
- ],
117
- "name": "approve",
118
- "outputs": [
119
- {
120
- "internalType": "bool",
121
- "name": "approved",
122
- "type": "bool"
123
- }
124
- ],
125
- "stateMutability": "nonpayable",
126
- "type": "function"
127
- }
128
- ]
@@ -1,22 +0,0 @@
1
- class BitcoinConnectorError extends Error {
2
- constructor(message) {
3
- super(message);
4
- this.name = "BitcoinConnectorError";
5
- }
6
- }
7
- export class BitcoinConnectorProviderNotFoundError extends BitcoinConnectorError {
8
- constructor(providerName) {
9
- super(`Bitcoin provider ${providerName} not found`);
10
- }
11
- }
12
- export class BitcoinConnectorTransactionFailedError extends BitcoinConnectorError {
13
- constructor() {
14
- super("Bitcoin transaction failed");
15
- }
16
- }
17
- export class BitcoinConnectorInvalidAccountError extends BitcoinConnectorError {
18
- constructor() {
19
- super("Bitcoin account is invalid");
20
- }
21
- }
22
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/core/connectors/bitcoin/errors/index.ts"],"names":[],"mappings":"AAAA,MAAM,qBAAsB,SAAQ,KAAK;IACvC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAC;IACtC,CAAC;CACF;AAED,MAAM,OAAO,qCAAsC,SAAQ,qBAAqB;IAC9E,YAAY,YAAoB;QAC9B,KAAK,CAAC,oBAAoB,YAAY,YAAY,CAAC,CAAC;IACtD,CAAC;CACF;AAED,MAAM,OAAO,sCAAuC,SAAQ,qBAAqB;IAC/E;QACE,KAAK,CAAC,4BAA4B,CAAC,CAAC;IACtC,CAAC;CACF;AAED,MAAM,OAAO,mCAAoC,SAAQ,qBAAqB;IAC5E;QACE,KAAK,CAAC,4BAA4B,CAAC,CAAC;IACtC,CAAC;CACF"}
@@ -1,86 +0,0 @@
1
- import * as ecc from "@bitcoinerlab/secp256k1";
2
- import axios from "axios";
3
- import * as bitcoin from "bitcoinjs-lib";
4
- bitcoin.initEccLib(ecc);
5
- const network = bitcoin.networks.bitcoin;
6
- export const fromHexString = (hexString) => {
7
- const matches = hexString.match(/.{1,2}/g);
8
- if (!matches) {
9
- throw new Error("Invalid hex string");
10
- }
11
- return Uint8Array.from(matches.map((byte) => parseInt(byte, 16)));
12
- };
13
- export async function createSendBtcPsbt(senderAddress, recipientAddress, amount) {
14
- const feeRate = await getFeeRate();
15
- const utxos = await getAddressUtxos(senderAddress);
16
- if (!utxos) {
17
- throw new Error("No UTXOs found");
18
- }
19
- // Sort UTXOs by value in descending order
20
- // This ensures that we select the UTXOs with the highest value first
21
- // to optimize the transaction size
22
- const sortedUtxos = utxos.sort((a, b) => b.value - a.value);
23
- // Sum up the values of the UTXOs up to the desired amount
24
- let inputAmount = 0;
25
- const inputs = [];
26
- for (const utxo of sortedUtxos) {
27
- inputAmount += utxo.value;
28
- inputs.push(utxo);
29
- if (inputAmount >= amount)
30
- break;
31
- }
32
- if (inputAmount < amount)
33
- throw new Error("Insufficient balance");
34
- const outputsCount = 2; // Only two outputs, recipient and change outputs
35
- // Calculate fee based on the byte size of the total inputs and outputs
36
- // Approximate transaction size = (inputs * 150 bytes + outputs * 34 bytes + 10 bytes overhead)
37
- const transactionSize = inputs.length * 150 + outputsCount * 34 + 10;
38
- const fee = feeRate * transactionSize;
39
- const satsNeeded = fee + amount;
40
- const psbt = new bitcoin.Psbt({ network });
41
- let amountGathered = 0;
42
- for (const utxo of sortedUtxos) {
43
- const { txid, vout, value } = utxo;
44
- const script = bitcoin.address.toOutputScript(senderAddress, network);
45
- psbt.addInput({
46
- hash: txid,
47
- index: vout,
48
- witnessUtxo: {
49
- script,
50
- value: BigInt(value),
51
- },
52
- });
53
- amountGathered += value;
54
- if (amountGathered >= satsNeeded) {
55
- break;
56
- }
57
- }
58
- psbt.addOutput({
59
- address: recipientAddress,
60
- value: BigInt(amount),
61
- });
62
- if (amountGathered > satsNeeded) {
63
- psbt.addOutput({
64
- address: senderAddress,
65
- value: BigInt(amountGathered - satsNeeded),
66
- });
67
- }
68
- return {
69
- psbtHex: psbt.toHex(),
70
- };
71
- }
72
- export async function broadcastTx(txHex) {
73
- return axios
74
- .post(`https://mempool.space/api/tx`, txHex)
75
- .then((res) => res.data);
76
- }
77
- async function getAddressUtxos(address) {
78
- return axios
79
- .get(`https://mempool.space/api/address/${address}/utxo`)
80
- .then((response) => response.data);
81
- }
82
- async function getFeeRate() {
83
- const response = await axios.get("https://mempool.space/api/v1/fees/recommended");
84
- return response.data.halfHourFee;
85
- }
86
- //# sourceMappingURL=helpers.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../../src/core/connectors/bitcoin/helpers.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export * from "./wallets";
2
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/connectors/bitcoin/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC"}
@@ -1,4 +0,0 @@
1
- export { KeplrConnector } from "./keplr";
2
- export { PhantomConnector } from "./phantom";
3
- export { UnisatConnector } from "./unisat";
4
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/core/connectors/bitcoin/wallets/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC"}
@@ -1,28 +0,0 @@
1
- import { BitcoinConnectorInvalidAccountError, BitcoinConnectorProviderNotFoundError, BitcoinConnectorTransactionFailedError, } from "../errors";
2
- export class KeplrConnector {
3
- get getProvider() {
4
- const provider = window?.bitcoin_keplr;
5
- if (!provider) {
6
- throw new BitcoinConnectorProviderNotFoundError("Keplr");
7
- }
8
- return provider;
9
- }
10
- async sendBTC(to, amount) {
11
- const txHash = await this.getProvider.sendBitcoin(to, amount);
12
- if (!txHash) {
13
- throw new BitcoinConnectorTransactionFailedError();
14
- }
15
- return { txHash };
16
- }
17
- async requestAccount() {
18
- const accounts = await this.getProvider.requestAccounts();
19
- const account = accounts[0];
20
- if (typeof account !== "string") {
21
- throw new BitcoinConnectorInvalidAccountError();
22
- }
23
- return {
24
- address: account,
25
- };
26
- }
27
- }
28
- //# sourceMappingURL=keplr.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"keplr.js","sourceRoot":"","sources":["../../../../../src/core/connectors/bitcoin/wallets/keplr.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,mCAAmC,EACnC,qCAAqC,EACrC,sCAAsC,GACvC,MAAM,WAAW,CAAC;AAEnB,MAAM,OAAO,cAAc;IACzB,IAAW,WAAW;QACpB,MAAM,QAAQ,GAAI,MAAc,EAAE,aAAa,CAAC;QAEhD,IAAI,CAAC,QAAQ,EAAE;YACb,MAAM,IAAI,qCAAqC,CAAC,OAAO,CAAC,CAAC;SAC1D;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,EAAU,EAAE,MAAc;QACtC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QAE9D,IAAI,CAAC,MAAM,EAAE;YACX,MAAM,IAAI,sCAAsC,EAAE,CAAC;SACpD;QAED,OAAO,EAAE,MAAM,EAAE,CAAC;IACpB,CAAC;IAED,KAAK,CAAC,cAAc;QAClB,MAAM,QAAQ,GAAa,MAAM,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE,CAAC;QAEpE,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QAE5B,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;YAC/B,MAAM,IAAI,mCAAmC,EAAE,CAAC;SACjD;QAED,OAAO;YACL,OAAO,EAAE,OAAO;SACjB,CAAC;IACJ,CAAC;CACF"}