@multiplatform.one/web3 7.25.0 → 7.28.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 (755) hide show
  1. package/README.md +157 -8
  2. package/dist/cjs/bridge/base58.cjs +48 -0
  3. package/dist/cjs/bridge/base58.native.js +51 -0
  4. package/dist/cjs/bridge/base58.native.js.map +1 -0
  5. package/dist/cjs/bridge/core.cjs +5 -1
  6. package/dist/cjs/bridge/core.native.js +5 -1
  7. package/dist/cjs/bridge/core.native.js.map +1 -1
  8. package/dist/cjs/bridge/drivers.cjs +141 -0
  9. package/dist/cjs/bridge/drivers.native.js +161 -0
  10. package/dist/cjs/bridge/drivers.native.js.map +1 -0
  11. package/dist/cjs/bridge/nativeHost.cjs +49 -9
  12. package/dist/cjs/bridge/nativeHost.native.js +56 -9
  13. package/dist/cjs/bridge/nativeHost.native.js.map +1 -1
  14. package/dist/cjs/clients/adapter.native.js.map +1 -1
  15. package/dist/cjs/clients/connector.native.js.map +1 -1
  16. package/dist/cjs/clients/evm.cjs +1 -0
  17. package/dist/cjs/clients/evm.native.js +1 -0
  18. package/dist/cjs/clients/evm.native.js.map +1 -1
  19. package/dist/cjs/clients/evmRead.cjs +104 -0
  20. package/dist/cjs/clients/evmRead.native.js +124 -0
  21. package/dist/cjs/clients/evmRead.native.js.map +1 -0
  22. package/dist/cjs/clients/hooks.cjs +37 -7
  23. package/dist/cjs/clients/hooks.native.js +43 -5
  24. package/dist/cjs/clients/hooks.native.js.map +1 -1
  25. package/dist/cjs/clients/index.cjs +5 -0
  26. package/dist/cjs/clients/index.native.js +5 -0
  27. package/dist/cjs/clients/index.native.js.map +1 -1
  28. package/dist/cjs/clients/types.cjs +7 -0
  29. package/dist/cjs/clients/types.native.js +14 -0
  30. package/dist/cjs/clients/types.native.js.map +1 -1
  31. package/dist/cjs/connectkit/adapters/BitcoinAdapter.cjs +44 -2
  32. package/dist/cjs/connectkit/adapters/BitcoinAdapter.native.js +73 -5
  33. package/dist/cjs/connectkit/adapters/BitcoinAdapter.native.js.map +1 -1
  34. package/dist/cjs/connectkit/adapters/SolanaAdapter.cjs +46 -0
  35. package/dist/cjs/connectkit/adapters/SolanaAdapter.native.js +55 -0
  36. package/dist/cjs/connectkit/adapters/SolanaAdapter.native.js.map +1 -1
  37. package/dist/cjs/connectkit/adapters/SuiAdapter.cjs +40 -0
  38. package/dist/cjs/connectkit/adapters/SuiAdapter.native.js +50 -0
  39. package/dist/cjs/connectkit/adapters/SuiAdapter.native.js.map +1 -1
  40. package/dist/cjs/connectkit/connectors/ensureWalletConnectors.cjs +4 -1
  41. package/dist/cjs/connectkit/connectors/ensureWalletConnectors.native.js +8 -1
  42. package/dist/cjs/connectkit/connectors/ensureWalletConnectors.native.js.map +1 -1
  43. package/dist/cjs/connectkit/connectors/getWalletConnectors.native.js.map +1 -1
  44. package/dist/cjs/connectkit/connectors/syntheticChains.native.js.map +1 -1
  45. package/dist/cjs/connectkit/connectors/walletAdapterConnector.native.js.map +1 -1
  46. package/dist/cjs/connectkit/defaultConfig.cjs +5 -2
  47. package/dist/cjs/connectkit/defaultConfig.native.js +9 -2
  48. package/dist/cjs/connectkit/defaultConfig.native.js.map +1 -1
  49. package/dist/cjs/connectkit/siwe/SIWEContext.native.js.map +1 -1
  50. package/dist/cjs/connectkit/siwe/SIWEProvider.cjs +6 -4
  51. package/dist/cjs/connectkit/siwe/SIWEProvider.native.js +8 -4
  52. package/dist/cjs/connectkit/siwe/SIWEProvider.native.js.map +1 -1
  53. package/dist/cjs/connectkit/siwe/connectIntent.cjs +56 -16
  54. package/dist/cjs/connectkit/siwe/connectIntent.native.js +100 -16
  55. package/dist/cjs/connectkit/siwe/connectIntent.native.js.map +1 -1
  56. package/dist/cjs/connectkit/siwe/useSIWE.native.js.map +1 -1
  57. package/dist/cjs/connectkit/web3Bridge.cjs +58 -12
  58. package/dist/cjs/connectkit/web3Bridge.native.js +64 -14
  59. package/dist/cjs/connectkit/web3Bridge.native.js.map +1 -1
  60. package/dist/cjs/core/family.cjs +105 -0
  61. package/dist/cjs/core/family.native.js +132 -0
  62. package/dist/cjs/core/family.native.js.map +1 -0
  63. package/dist/cjs/core/index.cjs +50 -0
  64. package/dist/cjs/core/index.native.js +53 -0
  65. package/dist/cjs/core/index.native.js.map +1 -0
  66. package/dist/cjs/core/lightDriver.cjs +182 -0
  67. package/dist/cjs/core/lightDriver.native.js +260 -0
  68. package/dist/cjs/core/lightDriver.native.js.map +1 -0
  69. package/dist/cjs/core/message.cjs +89 -0
  70. package/dist/cjs/core/message.native.js +104 -0
  71. package/dist/cjs/core/message.native.js.map +1 -0
  72. package/dist/cjs/core/names.cjs +51 -0
  73. package/dist/cjs/core/names.native.js +95 -0
  74. package/dist/cjs/core/names.native.js.map +1 -0
  75. package/dist/cjs/core/react.cjs +59 -0
  76. package/dist/cjs/core/react.native.js +67 -0
  77. package/dist/cjs/core/react.native.js.map +1 -0
  78. package/dist/cjs/core/signIn.cjs +201 -0
  79. package/dist/cjs/core/signIn.native.js +240 -0
  80. package/dist/cjs/core/signIn.native.js.map +1 -0
  81. package/dist/cjs/core/store.cjs +495 -0
  82. package/dist/cjs/core/store.native.js +684 -0
  83. package/dist/cjs/core/store.native.js.map +1 -0
  84. package/dist/cjs/core/types.cjs +18 -0
  85. package/dist/cjs/core/types.native.js +21 -0
  86. package/dist/cjs/core/types.native.js.map +1 -0
  87. package/dist/cjs/families/btc.cjs +44 -0
  88. package/dist/cjs/families/btc.native.js +49 -0
  89. package/dist/cjs/families/btc.native.js.map +1 -0
  90. package/dist/cjs/families/eth.cjs +57 -0
  91. package/dist/cjs/families/eth.native.js +61 -0
  92. package/dist/cjs/families/eth.native.js.map +1 -0
  93. package/dist/cjs/families/gpg.cjs +40 -0
  94. package/dist/cjs/families/gpg.native.js +43 -0
  95. package/dist/cjs/families/gpg.native.js.map +1 -0
  96. package/dist/cjs/families/host.cjs +38 -0
  97. package/dist/cjs/families/host.native.js +41 -0
  98. package/dist/cjs/families/host.native.js.map +1 -0
  99. package/dist/cjs/families/index.cjs +53 -0
  100. package/dist/cjs/families/index.native.js +56 -0
  101. package/dist/cjs/families/index.native.js.map +1 -0
  102. package/dist/cjs/families/messages.cjs +61 -0
  103. package/dist/cjs/families/messages.native.js +66 -0
  104. package/dist/cjs/families/messages.native.js.map +1 -0
  105. package/dist/cjs/families/sol.cjs +55 -0
  106. package/dist/cjs/families/sol.native.js +64 -0
  107. package/dist/cjs/families/sol.native.js.map +1 -0
  108. package/dist/cjs/families/sui.cjs +48 -0
  109. package/dist/cjs/families/sui.native.js +53 -0
  110. package/dist/cjs/families/sui.native.js.map +1 -0
  111. package/dist/cjs/index.cjs +23 -2
  112. package/dist/cjs/index.native.js +22 -1
  113. package/dist/cjs/index.native.js.map +1 -1
  114. package/dist/cjs/keycloak/keycloakWallet.cjs +13 -0
  115. package/dist/cjs/keycloak/keycloakWallet.native.js +15 -0
  116. package/dist/cjs/keycloak/keycloakWallet.native.js.map +1 -1
  117. package/dist/cjs/keycloak/useDirectLogin.cjs +10 -5
  118. package/dist/cjs/keycloak/useDirectLogin.native.js +12 -5
  119. package/dist/cjs/keycloak/useDirectLogin.native.js.map +1 -1
  120. package/dist/cjs/keycloak/useWalletLogin.cjs +16 -8
  121. package/dist/cjs/light/drivers.cjs +73 -0
  122. package/dist/cjs/light/drivers.native.js +97 -0
  123. package/dist/cjs/light/drivers.native.js.map +1 -0
  124. package/dist/cjs/light/index.cjs +30 -0
  125. package/dist/cjs/light/index.native.js +33 -0
  126. package/dist/cjs/light/index.native.js.map +1 -0
  127. package/dist/cjs/providers/WalletProvider.cjs +59 -17
  128. package/dist/cjs/providers/WalletProvider.native.js +99 -56
  129. package/dist/cjs/providers/WalletProvider.native.js.map +1 -1
  130. package/dist/cjs/providers/families.cjs +53 -0
  131. package/dist/cjs/providers/families.native.js +59 -0
  132. package/dist/cjs/providers/families.native.js.map +1 -0
  133. package/dist/cjs/providers/index.cjs +1 -0
  134. package/dist/cjs/providers/index.native.js +1 -0
  135. package/dist/cjs/providers/index.native.js.map +1 -1
  136. package/dist/cjs/providers/walletConfig.cjs +41 -0
  137. package/dist/cjs/providers/walletConfig.native.js +68 -0
  138. package/dist/cjs/providers/walletConfig.native.js.map +1 -1
  139. package/dist/cjs/wagmi/driver.cjs +257 -0
  140. package/dist/cjs/wagmi/driver.native.js +331 -0
  141. package/dist/cjs/wagmi/driver.native.js.map +1 -0
  142. package/dist/cjs/wagmi/host.cjs +239 -0
  143. package/dist/cjs/wagmi/host.native.js +320 -0
  144. package/dist/cjs/wagmi/host.native.js.map +1 -0
  145. package/dist/cjs/wagmi/index.cjs +28 -0
  146. package/dist/cjs/wagmi/index.native.js +31 -0
  147. package/dist/cjs/wagmi/index.native.js.map +1 -0
  148. package/dist/cjs/web.cjs +84 -0
  149. package/dist/esm/bridge/base58.mjs +23 -0
  150. package/dist/esm/bridge/base58.mjs.map +1 -0
  151. package/dist/esm/bridge/base58.native.js +23 -0
  152. package/dist/esm/bridge/base58.native.js.map +1 -0
  153. package/dist/esm/bridge/core.mjs +3 -2
  154. package/dist/esm/bridge/core.mjs.map +1 -1
  155. package/dist/esm/bridge/core.native.js +3 -2
  156. package/dist/esm/bridge/core.native.js.map +1 -1
  157. package/dist/esm/bridge/drivers.mjs +113 -0
  158. package/dist/esm/bridge/drivers.mjs.map +1 -0
  159. package/dist/esm/bridge/drivers.native.js +130 -0
  160. package/dist/esm/bridge/drivers.native.js.map +1 -0
  161. package/dist/esm/bridge/nativeHost.mjs +50 -11
  162. package/dist/esm/bridge/nativeHost.mjs.map +1 -1
  163. package/dist/esm/bridge/nativeHost.native.js +57 -11
  164. package/dist/esm/bridge/nativeHost.native.js.map +1 -1
  165. package/dist/esm/clients/adapter.mjs.map +1 -1
  166. package/dist/esm/clients/adapter.native.js.map +1 -1
  167. package/dist/esm/clients/connector.mjs.map +1 -1
  168. package/dist/esm/clients/connector.native.js.map +1 -1
  169. package/dist/esm/clients/evm.mjs +1 -0
  170. package/dist/esm/clients/evm.mjs.map +1 -1
  171. package/dist/esm/clients/evm.native.js +1 -0
  172. package/dist/esm/clients/evm.native.js.map +1 -1
  173. package/dist/esm/clients/evmRead.mjs +78 -0
  174. package/dist/esm/clients/evmRead.mjs.map +1 -0
  175. package/dist/esm/clients/evmRead.native.js +95 -0
  176. package/dist/esm/clients/evmRead.native.js.map +1 -0
  177. package/dist/esm/clients/hooks.mjs +38 -9
  178. package/dist/esm/clients/hooks.mjs.map +1 -1
  179. package/dist/esm/clients/hooks.native.js +44 -7
  180. package/dist/esm/clients/hooks.native.js.map +1 -1
  181. package/dist/esm/clients/index.mjs +4 -3
  182. package/dist/esm/clients/index.mjs.map +1 -1
  183. package/dist/esm/clients/index.native.js +4 -3
  184. package/dist/esm/clients/index.native.js.map +1 -1
  185. package/dist/esm/clients/types.mjs +7 -1
  186. package/dist/esm/clients/types.mjs.map +1 -1
  187. package/dist/esm/clients/types.native.js +14 -1
  188. package/dist/esm/clients/types.native.js.map +1 -1
  189. package/dist/esm/connectkit/adapters/BitcoinAdapter.mjs +44 -2
  190. package/dist/esm/connectkit/adapters/BitcoinAdapter.mjs.map +1 -1
  191. package/dist/esm/connectkit/adapters/BitcoinAdapter.native.js +73 -5
  192. package/dist/esm/connectkit/adapters/BitcoinAdapter.native.js.map +1 -1
  193. package/dist/esm/connectkit/adapters/SolanaAdapter.mjs +46 -0
  194. package/dist/esm/connectkit/adapters/SolanaAdapter.mjs.map +1 -1
  195. package/dist/esm/connectkit/adapters/SolanaAdapter.native.js +55 -0
  196. package/dist/esm/connectkit/adapters/SolanaAdapter.native.js.map +1 -1
  197. package/dist/esm/connectkit/adapters/SuiAdapter.mjs +40 -0
  198. package/dist/esm/connectkit/adapters/SuiAdapter.mjs.map +1 -1
  199. package/dist/esm/connectkit/adapters/SuiAdapter.native.js +50 -0
  200. package/dist/esm/connectkit/adapters/SuiAdapter.native.js.map +1 -1
  201. package/dist/esm/connectkit/connectors/ensureWalletConnectors.mjs +4 -1
  202. package/dist/esm/connectkit/connectors/ensureWalletConnectors.mjs.map +1 -1
  203. package/dist/esm/connectkit/connectors/ensureWalletConnectors.native.js +8 -1
  204. package/dist/esm/connectkit/connectors/ensureWalletConnectors.native.js.map +1 -1
  205. package/dist/esm/connectkit/connectors/getWalletConnectors.mjs.map +1 -1
  206. package/dist/esm/connectkit/connectors/getWalletConnectors.native.js.map +1 -1
  207. package/dist/esm/connectkit/connectors/syntheticChains.mjs.map +1 -1
  208. package/dist/esm/connectkit/connectors/syntheticChains.native.js.map +1 -1
  209. package/dist/esm/connectkit/connectors/walletAdapterConnector.mjs.map +1 -1
  210. package/dist/esm/connectkit/connectors/walletAdapterConnector.native.js.map +1 -1
  211. package/dist/esm/connectkit/defaultConfig.mjs +6 -3
  212. package/dist/esm/connectkit/defaultConfig.mjs.map +1 -1
  213. package/dist/esm/connectkit/defaultConfig.native.js +10 -3
  214. package/dist/esm/connectkit/defaultConfig.native.js.map +1 -1
  215. package/dist/esm/connectkit/siwe/SIWEContext.mjs.map +1 -1
  216. package/dist/esm/connectkit/siwe/SIWEContext.native.js.map +1 -1
  217. package/dist/esm/connectkit/siwe/SIWEProvider.mjs +6 -4
  218. package/dist/esm/connectkit/siwe/SIWEProvider.mjs.map +1 -1
  219. package/dist/esm/connectkit/siwe/SIWEProvider.native.js +8 -4
  220. package/dist/esm/connectkit/siwe/SIWEProvider.native.js.map +1 -1
  221. package/dist/esm/connectkit/siwe/connectIntent.mjs +54 -16
  222. package/dist/esm/connectkit/siwe/connectIntent.mjs.map +1 -1
  223. package/dist/esm/connectkit/siwe/connectIntent.native.js +98 -16
  224. package/dist/esm/connectkit/siwe/connectIntent.native.js.map +1 -1
  225. package/dist/esm/connectkit/siwe/useSIWE.mjs.map +1 -1
  226. package/dist/esm/connectkit/siwe/useSIWE.native.js.map +1 -1
  227. package/dist/esm/connectkit/web3Bridge.mjs +61 -16
  228. package/dist/esm/connectkit/web3Bridge.mjs.map +1 -1
  229. package/dist/esm/connectkit/web3Bridge.native.js +67 -18
  230. package/dist/esm/connectkit/web3Bridge.native.js.map +1 -1
  231. package/dist/esm/core/family.mjs +79 -0
  232. package/dist/esm/core/family.mjs.map +1 -0
  233. package/dist/esm/core/family.native.js +103 -0
  234. package/dist/esm/core/family.native.js.map +1 -0
  235. package/dist/esm/core/index.mjs +9 -0
  236. package/dist/esm/core/index.mjs.map +1 -0
  237. package/dist/esm/core/index.native.js +9 -0
  238. package/dist/esm/core/index.native.js.map +1 -0
  239. package/dist/esm/core/lightDriver.mjs +157 -0
  240. package/dist/esm/core/lightDriver.mjs.map +1 -0
  241. package/dist/esm/core/lightDriver.native.js +232 -0
  242. package/dist/esm/core/lightDriver.native.js.map +1 -0
  243. package/dist/esm/core/message.mjs +63 -0
  244. package/dist/esm/core/message.mjs.map +1 -0
  245. package/dist/esm/core/message.native.js +75 -0
  246. package/dist/esm/core/message.native.js.map +1 -0
  247. package/dist/esm/core/names.mjs +25 -0
  248. package/dist/esm/core/names.mjs.map +1 -0
  249. package/dist/esm/core/names.native.js +66 -0
  250. package/dist/esm/core/names.native.js.map +1 -0
  251. package/dist/esm/core/react.mjs +30 -0
  252. package/dist/esm/core/react.mjs.map +1 -0
  253. package/dist/esm/core/react.native.js +35 -0
  254. package/dist/esm/core/react.native.js.map +1 -0
  255. package/dist/esm/core/signIn.mjs +173 -0
  256. package/dist/esm/core/signIn.mjs.map +1 -0
  257. package/dist/esm/core/signIn.native.js +209 -0
  258. package/dist/esm/core/signIn.native.js.map +1 -0
  259. package/dist/esm/core/store.mjs +469 -0
  260. package/dist/esm/core/store.mjs.map +1 -0
  261. package/dist/esm/core/store.native.js +655 -0
  262. package/dist/esm/core/store.native.js.map +1 -0
  263. package/dist/esm/core/types.mjs +2 -0
  264. package/dist/esm/core/types.mjs.map +1 -0
  265. package/dist/esm/core/types.native.js +2 -0
  266. package/dist/esm/core/types.native.js.map +1 -0
  267. package/dist/esm/families/btc.mjs +19 -0
  268. package/dist/esm/families/btc.mjs.map +1 -0
  269. package/dist/esm/families/btc.native.js +21 -0
  270. package/dist/esm/families/btc.native.js.map +1 -0
  271. package/dist/esm/families/eth.mjs +32 -0
  272. package/dist/esm/families/eth.mjs.map +1 -0
  273. package/dist/esm/families/eth.native.js +33 -0
  274. package/dist/esm/families/eth.native.js.map +1 -0
  275. package/dist/esm/families/gpg.mjs +15 -0
  276. package/dist/esm/families/gpg.mjs.map +1 -0
  277. package/dist/esm/families/gpg.native.js +15 -0
  278. package/dist/esm/families/gpg.native.js.map +1 -0
  279. package/dist/esm/families/host.mjs +12 -0
  280. package/dist/esm/families/host.mjs.map +1 -0
  281. package/dist/esm/families/host.native.js +12 -0
  282. package/dist/esm/families/host.native.js.map +1 -0
  283. package/dist/esm/families/index.mjs +23 -0
  284. package/dist/esm/families/index.mjs.map +1 -0
  285. package/dist/esm/families/index.native.js +23 -0
  286. package/dist/esm/families/index.native.js.map +1 -0
  287. package/dist/esm/families/messages.mjs +32 -0
  288. package/dist/esm/families/messages.mjs.map +1 -0
  289. package/dist/esm/families/messages.native.js +34 -0
  290. package/dist/esm/families/messages.native.js.map +1 -0
  291. package/dist/esm/families/sol.mjs +30 -0
  292. package/dist/esm/families/sol.mjs.map +1 -0
  293. package/dist/esm/families/sol.native.js +36 -0
  294. package/dist/esm/families/sol.native.js.map +1 -0
  295. package/dist/esm/families/sui.mjs +23 -0
  296. package/dist/esm/families/sui.mjs.map +1 -0
  297. package/dist/esm/families/sui.native.js +25 -0
  298. package/dist/esm/families/sui.native.js.map +1 -0
  299. package/dist/esm/index.mjs +7 -3
  300. package/dist/esm/index.mjs.map +1 -1
  301. package/dist/esm/index.native.js +7 -3
  302. package/dist/esm/index.native.js.map +1 -1
  303. package/dist/esm/keycloak/keycloakWallet.mjs +13 -0
  304. package/dist/esm/keycloak/keycloakWallet.mjs.map +1 -1
  305. package/dist/esm/keycloak/keycloakWallet.native.js +15 -0
  306. package/dist/esm/keycloak/keycloakWallet.native.js.map +1 -1
  307. package/dist/esm/keycloak/useDirectLogin.mjs +10 -5
  308. package/dist/esm/keycloak/useDirectLogin.mjs.map +1 -1
  309. package/dist/esm/keycloak/useDirectLogin.native.js +12 -5
  310. package/dist/esm/keycloak/useDirectLogin.native.js.map +1 -1
  311. package/dist/esm/keycloak/useWalletLogin.mjs +16 -8
  312. package/dist/esm/keycloak/useWalletLogin.mjs.map +1 -1
  313. package/dist/esm/light/drivers.mjs +46 -0
  314. package/dist/esm/light/drivers.mjs.map +1 -0
  315. package/dist/esm/light/drivers.native.js +67 -0
  316. package/dist/esm/light/drivers.native.js.map +1 -0
  317. package/dist/esm/light/index.mjs +3 -0
  318. package/dist/esm/light/index.mjs.map +1 -0
  319. package/dist/esm/light/index.native.js +3 -0
  320. package/dist/esm/light/index.native.js.map +1 -0
  321. package/dist/esm/providers/WalletProvider.mjs +60 -19
  322. package/dist/esm/providers/WalletProvider.mjs.map +1 -1
  323. package/dist/esm/providers/WalletProvider.native.js +101 -59
  324. package/dist/esm/providers/WalletProvider.native.js.map +1 -1
  325. package/dist/esm/providers/families.mjs +27 -0
  326. package/dist/esm/providers/families.mjs.map +1 -0
  327. package/dist/esm/providers/families.native.js +30 -0
  328. package/dist/esm/providers/families.native.js.map +1 -0
  329. package/dist/esm/providers/index.mjs +2 -2
  330. package/dist/esm/providers/index.mjs.map +1 -1
  331. package/dist/esm/providers/index.native.js +2 -2
  332. package/dist/esm/providers/index.native.js.map +1 -1
  333. package/dist/esm/providers/walletConfig.mjs +40 -1
  334. package/dist/esm/providers/walletConfig.mjs.map +1 -1
  335. package/dist/esm/providers/walletConfig.native.js +67 -1
  336. package/dist/esm/providers/walletConfig.native.js.map +1 -1
  337. package/dist/esm/wagmi/driver.mjs +232 -0
  338. package/dist/esm/wagmi/driver.mjs.map +1 -0
  339. package/dist/esm/wagmi/driver.native.js +303 -0
  340. package/dist/esm/wagmi/driver.native.js.map +1 -0
  341. package/dist/esm/wagmi/host.mjs +213 -0
  342. package/dist/esm/wagmi/host.mjs.map +1 -0
  343. package/dist/esm/wagmi/host.native.js +291 -0
  344. package/dist/esm/wagmi/host.native.js.map +1 -0
  345. package/dist/esm/wagmi/index.mjs +3 -0
  346. package/dist/esm/wagmi/index.mjs.map +1 -0
  347. package/dist/esm/wagmi/index.native.js +3 -0
  348. package/dist/esm/wagmi/index.native.js.map +1 -0
  349. package/dist/esm/web.mjs +13 -0
  350. package/dist/esm/web.mjs.map +1 -0
  351. package/dist/jsx/bridge/base58.mjs +23 -0
  352. package/dist/jsx/bridge/base58.mjs.map +1 -0
  353. package/dist/jsx/bridge/base58.native.js +51 -0
  354. package/dist/jsx/bridge/base58.native.js.map +1 -0
  355. package/dist/jsx/bridge/core.mjs +3 -2
  356. package/dist/jsx/bridge/core.mjs.map +1 -1
  357. package/dist/jsx/bridge/core.native.js +5 -1
  358. package/dist/jsx/bridge/core.native.js.map +1 -1
  359. package/dist/jsx/bridge/drivers.mjs +113 -0
  360. package/dist/jsx/bridge/drivers.mjs.map +1 -0
  361. package/dist/jsx/bridge/drivers.native.js +161 -0
  362. package/dist/jsx/bridge/drivers.native.js.map +1 -0
  363. package/dist/jsx/bridge/nativeHost.mjs +50 -11
  364. package/dist/jsx/bridge/nativeHost.mjs.map +1 -1
  365. package/dist/jsx/bridge/nativeHost.native.js +56 -9
  366. package/dist/jsx/bridge/nativeHost.native.js.map +1 -1
  367. package/dist/jsx/clients/adapter.mjs.map +1 -1
  368. package/dist/jsx/clients/adapter.native.js.map +1 -1
  369. package/dist/jsx/clients/connector.mjs.map +1 -1
  370. package/dist/jsx/clients/connector.native.js.map +1 -1
  371. package/dist/jsx/clients/evm.mjs +1 -0
  372. package/dist/jsx/clients/evm.mjs.map +1 -1
  373. package/dist/jsx/clients/evm.native.js +1 -0
  374. package/dist/jsx/clients/evm.native.js.map +1 -1
  375. package/dist/jsx/clients/evmRead.mjs +78 -0
  376. package/dist/jsx/clients/evmRead.mjs.map +1 -0
  377. package/dist/jsx/clients/evmRead.native.js +124 -0
  378. package/dist/jsx/clients/evmRead.native.js.map +1 -0
  379. package/dist/jsx/clients/hooks.mjs +38 -9
  380. package/dist/jsx/clients/hooks.mjs.map +1 -1
  381. package/dist/jsx/clients/hooks.native.js +43 -5
  382. package/dist/jsx/clients/hooks.native.js.map +1 -1
  383. package/dist/jsx/clients/index.mjs +4 -3
  384. package/dist/jsx/clients/index.mjs.map +1 -1
  385. package/dist/jsx/clients/index.native.js +5 -0
  386. package/dist/jsx/clients/index.native.js.map +1 -1
  387. package/dist/jsx/clients/types.mjs +7 -1
  388. package/dist/jsx/clients/types.mjs.map +1 -1
  389. package/dist/jsx/clients/types.native.js +14 -0
  390. package/dist/jsx/clients/types.native.js.map +1 -1
  391. package/dist/jsx/connectkit/adapters/BitcoinAdapter.mjs +44 -2
  392. package/dist/jsx/connectkit/adapters/BitcoinAdapter.mjs.map +1 -1
  393. package/dist/jsx/connectkit/adapters/BitcoinAdapter.native.js +73 -5
  394. package/dist/jsx/connectkit/adapters/BitcoinAdapter.native.js.map +1 -1
  395. package/dist/jsx/connectkit/adapters/SolanaAdapter.mjs +46 -0
  396. package/dist/jsx/connectkit/adapters/SolanaAdapter.mjs.map +1 -1
  397. package/dist/jsx/connectkit/adapters/SolanaAdapter.native.js +55 -0
  398. package/dist/jsx/connectkit/adapters/SolanaAdapter.native.js.map +1 -1
  399. package/dist/jsx/connectkit/adapters/SuiAdapter.mjs +40 -0
  400. package/dist/jsx/connectkit/adapters/SuiAdapter.mjs.map +1 -1
  401. package/dist/jsx/connectkit/adapters/SuiAdapter.native.js +50 -0
  402. package/dist/jsx/connectkit/adapters/SuiAdapter.native.js.map +1 -1
  403. package/dist/jsx/connectkit/connectors/ensureWalletConnectors.mjs +4 -1
  404. package/dist/jsx/connectkit/connectors/ensureWalletConnectors.mjs.map +1 -1
  405. package/dist/jsx/connectkit/connectors/ensureWalletConnectors.native.js +8 -1
  406. package/dist/jsx/connectkit/connectors/ensureWalletConnectors.native.js.map +1 -1
  407. package/dist/jsx/connectkit/connectors/getWalletConnectors.mjs.map +1 -1
  408. package/dist/jsx/connectkit/connectors/getWalletConnectors.native.js.map +1 -1
  409. package/dist/jsx/connectkit/connectors/syntheticChains.mjs.map +1 -1
  410. package/dist/jsx/connectkit/connectors/syntheticChains.native.js.map +1 -1
  411. package/dist/jsx/connectkit/connectors/walletAdapterConnector.mjs.map +1 -1
  412. package/dist/jsx/connectkit/connectors/walletAdapterConnector.native.js.map +1 -1
  413. package/dist/jsx/connectkit/defaultConfig.mjs +6 -3
  414. package/dist/jsx/connectkit/defaultConfig.mjs.map +1 -1
  415. package/dist/jsx/connectkit/defaultConfig.native.js +9 -2
  416. package/dist/jsx/connectkit/defaultConfig.native.js.map +1 -1
  417. package/dist/jsx/connectkit/siwe/SIWEContext.mjs.map +1 -1
  418. package/dist/jsx/connectkit/siwe/SIWEContext.native.js.map +1 -1
  419. package/dist/jsx/connectkit/siwe/SIWEProvider.mjs +6 -4
  420. package/dist/jsx/connectkit/siwe/SIWEProvider.mjs.map +1 -1
  421. package/dist/jsx/connectkit/siwe/SIWEProvider.native.js +8 -4
  422. package/dist/jsx/connectkit/siwe/SIWEProvider.native.js.map +1 -1
  423. package/dist/jsx/connectkit/siwe/connectIntent.mjs +54 -16
  424. package/dist/jsx/connectkit/siwe/connectIntent.mjs.map +1 -1
  425. package/dist/jsx/connectkit/siwe/connectIntent.native.js +100 -16
  426. package/dist/jsx/connectkit/siwe/connectIntent.native.js.map +1 -1
  427. package/dist/jsx/connectkit/siwe/useSIWE.mjs.map +1 -1
  428. package/dist/jsx/connectkit/siwe/useSIWE.native.js.map +1 -1
  429. package/dist/jsx/connectkit/web3Bridge.mjs +61 -16
  430. package/dist/jsx/connectkit/web3Bridge.mjs.map +1 -1
  431. package/dist/jsx/connectkit/web3Bridge.native.js +64 -14
  432. package/dist/jsx/connectkit/web3Bridge.native.js.map +1 -1
  433. package/dist/jsx/core/family.mjs +79 -0
  434. package/dist/jsx/core/family.mjs.map +1 -0
  435. package/dist/jsx/core/family.native.js +132 -0
  436. package/dist/jsx/core/family.native.js.map +1 -0
  437. package/dist/jsx/core/index.mjs +9 -0
  438. package/dist/jsx/core/index.mjs.map +1 -0
  439. package/dist/jsx/core/index.native.js +53 -0
  440. package/dist/jsx/core/index.native.js.map +1 -0
  441. package/dist/jsx/core/lightDriver.mjs +157 -0
  442. package/dist/jsx/core/lightDriver.mjs.map +1 -0
  443. package/dist/jsx/core/lightDriver.native.js +260 -0
  444. package/dist/jsx/core/lightDriver.native.js.map +1 -0
  445. package/dist/jsx/core/message.mjs +63 -0
  446. package/dist/jsx/core/message.mjs.map +1 -0
  447. package/dist/jsx/core/message.native.js +104 -0
  448. package/dist/jsx/core/message.native.js.map +1 -0
  449. package/dist/jsx/core/names.mjs +25 -0
  450. package/dist/jsx/core/names.mjs.map +1 -0
  451. package/dist/jsx/core/names.native.js +95 -0
  452. package/dist/jsx/core/names.native.js.map +1 -0
  453. package/dist/jsx/core/react.mjs +30 -0
  454. package/dist/jsx/core/react.mjs.map +1 -0
  455. package/dist/jsx/core/react.native.js +67 -0
  456. package/dist/jsx/core/react.native.js.map +1 -0
  457. package/dist/jsx/core/signIn.mjs +173 -0
  458. package/dist/jsx/core/signIn.mjs.map +1 -0
  459. package/dist/jsx/core/signIn.native.js +240 -0
  460. package/dist/jsx/core/signIn.native.js.map +1 -0
  461. package/dist/jsx/core/store.mjs +469 -0
  462. package/dist/jsx/core/store.mjs.map +1 -0
  463. package/dist/jsx/core/store.native.js +684 -0
  464. package/dist/jsx/core/store.native.js.map +1 -0
  465. package/dist/jsx/core/types.mjs +2 -0
  466. package/dist/jsx/core/types.mjs.map +1 -0
  467. package/dist/jsx/core/types.native.js +21 -0
  468. package/dist/jsx/core/types.native.js.map +1 -0
  469. package/dist/jsx/families/btc.mjs +19 -0
  470. package/dist/jsx/families/btc.mjs.map +1 -0
  471. package/dist/jsx/families/btc.native.js +49 -0
  472. package/dist/jsx/families/btc.native.js.map +1 -0
  473. package/dist/jsx/families/eth.mjs +32 -0
  474. package/dist/jsx/families/eth.mjs.map +1 -0
  475. package/dist/jsx/families/eth.native.js +61 -0
  476. package/dist/jsx/families/eth.native.js.map +1 -0
  477. package/dist/jsx/families/gpg.mjs +15 -0
  478. package/dist/jsx/families/gpg.mjs.map +1 -0
  479. package/dist/jsx/families/gpg.native.js +43 -0
  480. package/dist/jsx/families/gpg.native.js.map +1 -0
  481. package/dist/jsx/families/host.mjs +12 -0
  482. package/dist/jsx/families/host.mjs.map +1 -0
  483. package/dist/jsx/families/host.native.js +41 -0
  484. package/dist/jsx/families/host.native.js.map +1 -0
  485. package/dist/jsx/families/index.mjs +23 -0
  486. package/dist/jsx/families/index.mjs.map +1 -0
  487. package/dist/jsx/families/index.native.js +56 -0
  488. package/dist/jsx/families/index.native.js.map +1 -0
  489. package/dist/jsx/families/messages.mjs +32 -0
  490. package/dist/jsx/families/messages.mjs.map +1 -0
  491. package/dist/jsx/families/messages.native.js +66 -0
  492. package/dist/jsx/families/messages.native.js.map +1 -0
  493. package/dist/jsx/families/sol.mjs +30 -0
  494. package/dist/jsx/families/sol.mjs.map +1 -0
  495. package/dist/jsx/families/sol.native.js +64 -0
  496. package/dist/jsx/families/sol.native.js.map +1 -0
  497. package/dist/jsx/families/sui.mjs +23 -0
  498. package/dist/jsx/families/sui.mjs.map +1 -0
  499. package/dist/jsx/families/sui.native.js +53 -0
  500. package/dist/jsx/families/sui.native.js.map +1 -0
  501. package/dist/jsx/index.js +7 -3
  502. package/dist/jsx/index.js.map +1 -1
  503. package/dist/jsx/index.mjs +7 -3
  504. package/dist/jsx/index.mjs.map +1 -1
  505. package/dist/jsx/index.native.js +22 -1
  506. package/dist/jsx/index.native.js.map +1 -1
  507. package/dist/jsx/keycloak/keycloakWallet.mjs +13 -0
  508. package/dist/jsx/keycloak/keycloakWallet.mjs.map +1 -1
  509. package/dist/jsx/keycloak/keycloakWallet.native.js +15 -0
  510. package/dist/jsx/keycloak/keycloakWallet.native.js.map +1 -1
  511. package/dist/jsx/keycloak/useDirectLogin.mjs +10 -5
  512. package/dist/jsx/keycloak/useDirectLogin.mjs.map +1 -1
  513. package/dist/jsx/keycloak/useDirectLogin.native.js +12 -5
  514. package/dist/jsx/keycloak/useDirectLogin.native.js.map +1 -1
  515. package/dist/jsx/keycloak/useWalletLogin.mjs +16 -8
  516. package/dist/jsx/keycloak/useWalletLogin.mjs.map +1 -1
  517. package/dist/jsx/light/drivers.mjs +46 -0
  518. package/dist/jsx/light/drivers.mjs.map +1 -0
  519. package/dist/jsx/light/drivers.native.js +97 -0
  520. package/dist/jsx/light/drivers.native.js.map +1 -0
  521. package/dist/jsx/light/index.mjs +3 -0
  522. package/dist/jsx/light/index.mjs.map +1 -0
  523. package/dist/jsx/light/index.native.js +33 -0
  524. package/dist/jsx/light/index.native.js.map +1 -0
  525. package/dist/jsx/providers/WalletProvider.mjs +60 -19
  526. package/dist/jsx/providers/WalletProvider.mjs.map +1 -1
  527. package/dist/jsx/providers/WalletProvider.native.js +99 -56
  528. package/dist/jsx/providers/WalletProvider.native.js.map +1 -1
  529. package/dist/jsx/providers/families.mjs +27 -0
  530. package/dist/jsx/providers/families.mjs.map +1 -0
  531. package/dist/jsx/providers/families.native.js +59 -0
  532. package/dist/jsx/providers/families.native.js.map +1 -0
  533. package/dist/jsx/providers/index.mjs +2 -2
  534. package/dist/jsx/providers/index.mjs.map +1 -1
  535. package/dist/jsx/providers/index.native.js +1 -0
  536. package/dist/jsx/providers/index.native.js.map +1 -1
  537. package/dist/jsx/providers/walletConfig.mjs +40 -1
  538. package/dist/jsx/providers/walletConfig.mjs.map +1 -1
  539. package/dist/jsx/providers/walletConfig.native.js +68 -0
  540. package/dist/jsx/providers/walletConfig.native.js.map +1 -1
  541. package/dist/jsx/wagmi/driver.mjs +232 -0
  542. package/dist/jsx/wagmi/driver.mjs.map +1 -0
  543. package/dist/jsx/wagmi/driver.native.js +331 -0
  544. package/dist/jsx/wagmi/driver.native.js.map +1 -0
  545. package/dist/jsx/wagmi/host.mjs +213 -0
  546. package/dist/jsx/wagmi/host.mjs.map +1 -0
  547. package/dist/jsx/wagmi/host.native.js +320 -0
  548. package/dist/jsx/wagmi/host.native.js.map +1 -0
  549. package/dist/jsx/wagmi/index.mjs +3 -0
  550. package/dist/jsx/wagmi/index.mjs.map +1 -0
  551. package/dist/jsx/wagmi/index.native.js +31 -0
  552. package/dist/jsx/wagmi/index.native.js.map +1 -0
  553. package/dist/jsx/web.mjs +13 -0
  554. package/dist/jsx/web.mjs.map +1 -0
  555. package/dist/keycloak/login.iife.js +449 -443
  556. package/docs/bridge-protocol.md +41 -14
  557. package/package.json +13 -6
  558. package/src/bridge/base58.spec.ts +18 -0
  559. package/src/bridge/base58.ts +25 -0
  560. package/src/bridge/core.ts +2 -0
  561. package/src/bridge/drivers.spec.ts +283 -0
  562. package/src/bridge/drivers.ts +155 -0
  563. package/src/bridge/index.spec.ts +3 -0
  564. package/src/bridge/nativeHost.spec.ts +139 -15
  565. package/src/bridge/nativeHost.ts +84 -14
  566. package/src/bundler/metaMaskConnectTimeouts.spec.ts +3 -0
  567. package/src/clients/adapter.ts +5 -1
  568. package/src/clients/connector.ts +2 -0
  569. package/src/clients/evm.spec.ts +8 -0
  570. package/src/clients/evm.ts +3 -0
  571. package/src/clients/evmRead.spec.ts +180 -0
  572. package/src/clients/evmRead.ts +140 -0
  573. package/src/clients/hooks.spec.tsx +58 -0
  574. package/src/clients/hooks.ts +73 -14
  575. package/src/clients/index.ts +11 -1
  576. package/src/clients/types.ts +15 -1
  577. package/src/clients/useEvmReadClient.spec.tsx +93 -0
  578. package/src/connectkit/adapters/BitcoinAdapter.ts +64 -4
  579. package/src/connectkit/adapters/SolanaAdapter.ts +49 -0
  580. package/src/connectkit/adapters/SuiAdapter.ts +47 -1
  581. package/src/connectkit/connectors/ensureWalletConnectors.ts +10 -1
  582. package/src/connectkit/connectors/getWalletConnectors.ts +2 -0
  583. package/src/connectkit/connectors/syntheticChains.ts +8 -0
  584. package/src/connectkit/connectors/walletAdapterConnector.ts +2 -0
  585. package/src/connectkit/defaultConfig.ts +21 -7
  586. package/src/connectkit/siwe/SIWEContext.tsx +3 -0
  587. package/src/connectkit/siwe/SIWEProvider.spec.tsx +109 -0
  588. package/src/connectkit/siwe/SIWEProvider.tsx +16 -7
  589. package/src/connectkit/siwe/connectIntent.spec.ts +100 -30
  590. package/src/connectkit/siwe/connectIntent.ts +99 -25
  591. package/src/connectkit/siwe/useSIWE.ts +4 -1
  592. package/src/connectkit/web3Bridge.tsx +75 -15
  593. package/src/core/family.spec.ts +136 -0
  594. package/src/core/family.ts +146 -0
  595. package/src/core/imports.spec.ts +82 -0
  596. package/src/core/index.ts +70 -0
  597. package/src/core/lightDriver.spec.ts +284 -0
  598. package/src/core/lightDriver.ts +235 -0
  599. package/src/core/message.spec.ts +178 -0
  600. package/src/core/message.ts +119 -0
  601. package/src/core/names.ts +29 -0
  602. package/src/core/react.spec.tsx +75 -0
  603. package/src/core/react.ts +52 -0
  604. package/src/core/signIn.spec.tsx +305 -0
  605. package/src/core/signIn.ts +282 -0
  606. package/src/core/store.spec.ts +973 -0
  607. package/src/core/store.ts +609 -0
  608. package/src/core/types.ts +110 -0
  609. package/src/families/btc.ts +16 -0
  610. package/src/families/eth.ts +35 -0
  611. package/src/families/families.spec.ts +180 -0
  612. package/src/families/gpg.ts +13 -0
  613. package/src/families/host.ts +34 -0
  614. package/src/families/index.ts +32 -0
  615. package/src/families/messages.ts +39 -0
  616. package/src/families/sol.ts +25 -0
  617. package/src/families/sui.ts +17 -0
  618. package/src/index.ts +42 -1
  619. package/src/keycloak/KeycloakWalletLogin.spec.tsx +211 -4
  620. package/src/keycloak/keycloakWallet.spec.ts +81 -1
  621. package/src/keycloak/keycloakWallet.ts +24 -2
  622. package/src/keycloak/useDirectLogin.spec.tsx +77 -4
  623. package/src/keycloak/useDirectLogin.ts +23 -11
  624. package/src/keycloak/useWalletLogin.spec.tsx +52 -0
  625. package/src/keycloak/useWalletLogin.ts +24 -6
  626. package/src/light/drivers.spec.ts +330 -0
  627. package/src/light/drivers.ts +54 -0
  628. package/src/light/index.ts +1 -0
  629. package/src/light/native.spec.ts +22 -0
  630. package/src/providers/WalletProvider.native.spec.tsx +288 -0
  631. package/src/providers/WalletProvider.native.tsx +132 -59
  632. package/src/providers/WalletProvider.spec.tsx +521 -0
  633. package/src/providers/WalletProvider.tsx +90 -19
  634. package/src/providers/families.tsx +39 -0
  635. package/src/providers/index.ts +3 -0
  636. package/src/providers/walletConfig.spec.ts +19 -1
  637. package/src/providers/walletConfig.ts +80 -2
  638. package/src/wagmi/driver.spec.ts +407 -0
  639. package/src/wagmi/driver.ts +303 -0
  640. package/src/wagmi/host.spec.tsx +416 -0
  641. package/src/wagmi/host.tsx +260 -0
  642. package/src/wagmi/index.ts +1 -0
  643. package/src/web.spec.ts +58 -0
  644. package/src/web.ts +82 -0
  645. package/types/bridge/base58.d.ts +2 -0
  646. package/types/bridge/base58.d.ts.map +1 -0
  647. package/types/bridge/core.d.ts +2 -1
  648. package/types/bridge/core.d.ts.map +1 -1
  649. package/types/bridge/drivers.d.ts +24 -0
  650. package/types/bridge/drivers.d.ts.map +1 -0
  651. package/types/bridge/nativeHost.d.ts +34 -4
  652. package/types/bridge/nativeHost.d.ts.map +1 -1
  653. package/types/clients/adapter.d.ts +5 -1
  654. package/types/clients/adapter.d.ts.map +1 -1
  655. package/types/clients/connector.d.ts +2 -0
  656. package/types/clients/connector.d.ts.map +1 -1
  657. package/types/clients/evm.d.ts +2 -0
  658. package/types/clients/evm.d.ts.map +1 -1
  659. package/types/clients/evmRead.d.ts +54 -0
  660. package/types/clients/evmRead.d.ts.map +1 -0
  661. package/types/clients/hooks.d.ts +23 -3
  662. package/types/clients/hooks.d.ts.map +1 -1
  663. package/types/clients/index.d.ts +4 -2
  664. package/types/clients/index.d.ts.map +1 -1
  665. package/types/clients/types.d.ts +11 -1
  666. package/types/clients/types.d.ts.map +1 -1
  667. package/types/connectkit/adapters/BitcoinAdapter.d.ts +9 -0
  668. package/types/connectkit/adapters/BitcoinAdapter.d.ts.map +1 -1
  669. package/types/connectkit/adapters/SolanaAdapter.d.ts +12 -0
  670. package/types/connectkit/adapters/SolanaAdapter.d.ts.map +1 -1
  671. package/types/connectkit/adapters/SuiAdapter.d.ts +8 -0
  672. package/types/connectkit/adapters/SuiAdapter.d.ts.map +1 -1
  673. package/types/connectkit/connectors/ensureWalletConnectors.d.ts +3 -0
  674. package/types/connectkit/connectors/ensureWalletConnectors.d.ts.map +1 -1
  675. package/types/connectkit/connectors/getWalletConnectors.d.ts +2 -0
  676. package/types/connectkit/connectors/getWalletConnectors.d.ts.map +1 -1
  677. package/types/connectkit/connectors/syntheticChains.d.ts +8 -0
  678. package/types/connectkit/connectors/syntheticChains.d.ts.map +1 -1
  679. package/types/connectkit/connectors/walletAdapterConnector.d.ts +2 -0
  680. package/types/connectkit/connectors/walletAdapterConnector.d.ts.map +1 -1
  681. package/types/connectkit/defaultConfig.d.ts +2 -1
  682. package/types/connectkit/defaultConfig.d.ts.map +1 -1
  683. package/types/connectkit/siwe/SIWEContext.d.ts.map +1 -1
  684. package/types/connectkit/siwe/SIWEProvider.d.ts +6 -0
  685. package/types/connectkit/siwe/SIWEProvider.d.ts.map +1 -1
  686. package/types/connectkit/siwe/connectIntent.d.ts +16 -5
  687. package/types/connectkit/siwe/connectIntent.d.ts.map +1 -1
  688. package/types/connectkit/siwe/useSIWE.d.ts +4 -0
  689. package/types/connectkit/siwe/useSIWE.d.ts.map +1 -1
  690. package/types/connectkit/web3Bridge.d.ts +2 -0
  691. package/types/connectkit/web3Bridge.d.ts.map +1 -1
  692. package/types/core/family.d.ts +70 -0
  693. package/types/core/family.d.ts.map +1 -0
  694. package/types/core/index.d.ts +9 -0
  695. package/types/core/index.d.ts.map +1 -0
  696. package/types/core/lightDriver.d.ts +52 -0
  697. package/types/core/lightDriver.d.ts.map +1 -0
  698. package/types/core/message.d.ts +44 -0
  699. package/types/core/message.d.ts.map +1 -0
  700. package/types/core/names.d.ts +7 -0
  701. package/types/core/names.d.ts.map +1 -0
  702. package/types/core/react.d.ts +18 -0
  703. package/types/core/react.d.ts.map +1 -0
  704. package/types/core/signIn.d.ts +85 -0
  705. package/types/core/signIn.d.ts.map +1 -0
  706. package/types/core/store.d.ts +73 -0
  707. package/types/core/store.d.ts.map +1 -0
  708. package/types/core/types.d.ts +101 -0
  709. package/types/core/types.d.ts.map +1 -0
  710. package/types/families/btc.d.ts +4 -0
  711. package/types/families/btc.d.ts.map +1 -0
  712. package/types/families/eth.d.ts +13 -0
  713. package/types/families/eth.d.ts.map +1 -0
  714. package/types/families/gpg.d.ts +4 -0
  715. package/types/families/gpg.d.ts.map +1 -0
  716. package/types/families/host.d.ts +24 -0
  717. package/types/families/host.d.ts.map +1 -0
  718. package/types/families/index.d.ts +14 -0
  719. package/types/families/index.d.ts.map +1 -0
  720. package/types/families/messages.d.ts +7 -0
  721. package/types/families/messages.d.ts.map +1 -0
  722. package/types/families/sol.d.ts +9 -0
  723. package/types/families/sol.d.ts.map +1 -0
  724. package/types/families/sui.d.ts +4 -0
  725. package/types/families/sui.d.ts.map +1 -0
  726. package/types/index.d.ts +6 -2
  727. package/types/index.d.ts.map +1 -1
  728. package/types/keycloak/keycloakWallet.d.ts +15 -2
  729. package/types/keycloak/keycloakWallet.d.ts.map +1 -1
  730. package/types/keycloak/useDirectLogin.d.ts +11 -6
  731. package/types/keycloak/useDirectLogin.d.ts.map +1 -1
  732. package/types/keycloak/useWalletLogin.d.ts +8 -1
  733. package/types/keycloak/useWalletLogin.d.ts.map +1 -1
  734. package/types/light/drivers.d.ts +13 -0
  735. package/types/light/drivers.d.ts.map +1 -0
  736. package/types/light/index.d.ts +2 -0
  737. package/types/light/index.d.ts.map +1 -0
  738. package/types/providers/WalletProvider.d.ts +37 -6
  739. package/types/providers/WalletProvider.d.ts.map +1 -1
  740. package/types/providers/WalletProvider.native.d.ts +32 -3
  741. package/types/providers/WalletProvider.native.d.ts.map +1 -1
  742. package/types/providers/families.d.ts +12 -0
  743. package/types/providers/families.d.ts.map +1 -0
  744. package/types/providers/index.d.ts +1 -1
  745. package/types/providers/index.d.ts.map +1 -1
  746. package/types/providers/walletConfig.d.ts +32 -2
  747. package/types/providers/walletConfig.d.ts.map +1 -1
  748. package/types/wagmi/driver.d.ts +44 -0
  749. package/types/wagmi/driver.d.ts.map +1 -0
  750. package/types/wagmi/host.d.ts +31 -0
  751. package/types/wagmi/host.d.ts.map +1 -0
  752. package/types/wagmi/index.d.ts +2 -0
  753. package/types/wagmi/index.d.ts.map +1 -0
  754. package/types/web.d.ts +13 -0
  755. package/types/web.d.ts.map +1 -0
@@ -0,0 +1,140 @@
1
+ import {
2
+ createPublicClient,
3
+ erc20Abi,
4
+ http,
5
+ type Address,
6
+ type Chain,
7
+ type Hash,
8
+ type PublicClient,
9
+ } from "viem";
10
+ import { chainTransports, resolveChains, type Web3ChainConfig } from "../providers/walletConfig";
11
+ import { ReadOnlyClientError, type ChainClient } from "./types";
12
+
13
+ /** The ERC-20 reads, with the owner always named: a read-only client has no account. */
14
+ export interface Erc20ReadActions {
15
+ balanceOf(token: Address, owner: Address): Promise<bigint>;
16
+ allowance(token: Address, spender: Address, owner: Address): Promise<bigint>;
17
+ decimals(token: Address): Promise<number>;
18
+ }
19
+
20
+ /**
21
+ * Reads one EVM chain with no wallet: prices, sale state, a quote or a balance
22
+ * for a visitor who has not connected, or a chain other than the connected
23
+ * one. Signing and sending reject with ReadOnlyClientError without a request.
24
+ */
25
+ export interface EvmReadClient extends ChainClient<"evm"> {
26
+ readonly address: null;
27
+ readonly chainId: number;
28
+ readonly chain: Chain;
29
+ /** Reads, simulation, logs and receipts. */
30
+ readonly publicClient: PublicClient;
31
+ readonly readContract: PublicClient["readContract"];
32
+ readonly erc20: Erc20ReadActions;
33
+ /** The chain explorer's page for `hash`, when the chain names an explorer. */
34
+ explorerTxUrl(hash: Hash): string | undefined;
35
+ signMessage(message: string): Promise<never>;
36
+ sendTransaction(parameters: unknown): Promise<never>;
37
+ writeContract(parameters: unknown): Promise<never>;
38
+ }
39
+
40
+ export interface EvmReadClientConfig {
41
+ chain: Chain;
42
+ /** Reads go here. Defaults to an http client on `rpcUrl`, else the chain's default RPC. */
43
+ publicClient?: PublicClient;
44
+ /** Used only when `publicClient` is not given. */
45
+ rpcUrl?: string;
46
+ }
47
+
48
+ /** A read-only mpo EVM client for one chain. */
49
+ export function evmReadClient(config: EvmReadClientConfig): EvmReadClient {
50
+ const { chain } = config;
51
+ const publicClient =
52
+ config.publicClient ??
53
+ (createPublicClient({ chain, transport: http(config.rpcUrl) }) as PublicClient);
54
+ if (publicClient.chain && publicClient.chain.id !== chain.id) {
55
+ throw new Error(
56
+ `evmReadClient: the public client reads chain ${publicClient.chain.id}, not chain ${chain.id}`,
57
+ );
58
+ }
59
+ const explorer = chain.blockExplorers?.default.url.replace(/\/+$/, "");
60
+ const refuse = (method: string) => async (): Promise<never> => {
61
+ throw new ReadOnlyClientError("evm", method);
62
+ };
63
+ return {
64
+ family: "evm",
65
+ address: null,
66
+ chainId: chain.id,
67
+ chain,
68
+ capabilities: [],
69
+ publicClient,
70
+ readContract: publicClient.readContract,
71
+ erc20: {
72
+ balanceOf: (token, owner) =>
73
+ publicClient.readContract({
74
+ address: token,
75
+ abi: erc20Abi,
76
+ functionName: "balanceOf",
77
+ args: [owner],
78
+ }),
79
+ allowance: (token, spender, owner) =>
80
+ publicClient.readContract({
81
+ address: token,
82
+ abi: erc20Abi,
83
+ functionName: "allowance",
84
+ args: [owner, spender],
85
+ }),
86
+ decimals: (token) =>
87
+ publicClient.readContract({ address: token, abi: erc20Abi, functionName: "decimals" }),
88
+ },
89
+ explorerTxUrl: (hash) => (explorer ? `${explorer}/tx/${hash}` : undefined),
90
+ signMessage: refuse("signMessage"),
91
+ sendTransaction: refuse("sendTransaction"),
92
+ writeContract: refuse("writeContract"),
93
+ };
94
+ }
95
+
96
+ export interface EvmReadClients {
97
+ /** The chains a WalletProvider with the same config offers, its default first. */
98
+ readonly chains: readonly [Chain, ...Chain[]];
99
+ /**
100
+ * The read client for `chainId`, or for the default chain. One per chain,
101
+ * made on first use. Throws for a chain the config does not offer.
102
+ */
103
+ get(chainId?: number): EvmReadClient;
104
+ }
105
+
106
+ /**
107
+ * Read clients for the chains of a Web3Config, outside React: the chain list
108
+ * WalletProvider resolves (testnet filter, localnet dev chain first) and the
109
+ * transports it reads them over. Inside a WalletProvider, useEvmReadClient
110
+ * reads through the provider's own wagmi clients instead.
111
+ */
112
+ export function evmReadClients(config: Web3ChainConfig): EvmReadClients {
113
+ const chains = resolveChains(config);
114
+ const transports = chainTransports(chains);
115
+ const made = new Map<number, EvmReadClient>();
116
+ return {
117
+ chains,
118
+ get(chainId = chains[0].id) {
119
+ const cached = made.get(chainId);
120
+ if (cached) return cached;
121
+ const chain = chains.find((candidate) => candidate.id === chainId);
122
+ if (!chain) {
123
+ throw new Error(
124
+ `evmReadClients: chain ${chainId} is not configured; the config offers [${chains
125
+ .map((c) => c.id)
126
+ .join(", ")}]`,
127
+ );
128
+ }
129
+ const client = evmReadClient({
130
+ chain,
131
+ publicClient: createPublicClient({
132
+ chain,
133
+ transport: transports[chain.id],
134
+ }) as PublicClient,
135
+ });
136
+ made.set(chainId, client);
137
+ return client;
138
+ },
139
+ };
140
+ }
@@ -6,6 +6,10 @@ import { getBase58Decoder } from "@solana/kit";
6
6
  import { createPublicClient, createWalletClient, custom } from "viem";
7
7
  import { mainnet } from "viem/chains";
8
8
  import { Web3ConfigContext, type Web3Config } from "../providers/walletConfig";
9
+ import { testDriver } from "../../tests/core/testDriver";
10
+ import { defineWalletFamily } from "../core/family";
11
+ import { ConnectionProvider } from "../core/react";
12
+ import { createConnectionStore } from "../core/store";
9
13
 
10
14
  const { mockUseAccount, mockUseWalletClient, mockUsePublicClient } = vi.hoisted(() => ({
11
15
  mockUseAccount: vi.fn(),
@@ -111,3 +115,57 @@ describe("useSuiClient / useBitcoinClient", () => {
111
115
  expect(renderHook(() => useBitcoinClient()).result.current?.chainId).toBe("bitcoin");
112
116
  });
113
117
  });
118
+
119
+ describe("the family client hooks under a connection store", () => {
120
+ const message = { header: "wants you to sign in:", statement: null, chainId: null };
121
+
122
+ async function connected(family: "eth" | "sui" | "btc", address: string) {
123
+ const ecosystem = { eth: "evm", sui: "sui", btc: "bitcoin" }[family] as
124
+ | "evm"
125
+ | "sui"
126
+ | "bitcoin";
127
+ const driver = testDriver(ecosystem, [{ id: "wallet", name: "Wallet" }], {
128
+ wallet: { address, chainId: family === "eth" ? 1 : `${ecosystem}:mainnet` },
129
+ });
130
+ const store = createConnectionStore({
131
+ storage: null,
132
+ families: [defineWalletFamily({ id: family, label: family, message, driver: () => driver })],
133
+ });
134
+ await store.connect(family, "wallet");
135
+ const wrapper = ({ children }: { children: ReactNode }) => (
136
+ <ConnectionProvider store={store}>{children}</ConnectionProvider>
137
+ );
138
+ return { store, wrapper };
139
+ }
140
+
141
+ it("useSuiClient and useBitcoinClient read the store's connection, not wagmi's", async () => {
142
+ mockUseAccount.mockReturnValue({ connector: shim("bitcoin", "bc1q"), address: "bc1q" });
143
+ const { store, wrapper } = await connected("sui", "0xsui");
144
+ expect(renderHook(() => useSuiClient(), { wrapper }).result.current).toBe(
145
+ store.getState().client,
146
+ );
147
+ expect(renderHook(() => useBitcoinClient(), { wrapper }).result.current).toBeUndefined();
148
+ });
149
+
150
+ it("useEvmClient is the store's EVM client, and undefined while another family is active", async () => {
151
+ mockUseAccount.mockReturnValue({ connector: { id: "metaMask" }, chainId: 1 });
152
+ mockUseWalletClient.mockReturnValue({ data: walletClient });
153
+ const evm = await connected("eth", evmAddress);
154
+ expect(renderHook(() => useEvmClient(), { wrapper: evm.wrapper }).result.current).toBe(
155
+ evm.store.getState().client,
156
+ );
157
+ const sui = await connected("sui", "0xsui");
158
+ expect(
159
+ renderHook(() => useEvmClient(), { wrapper: sui.wrapper }).result.current,
160
+ ).toBeUndefined();
161
+ });
162
+
163
+ it("useEvmClient for a named chain still asks wagmi for that chain", async () => {
164
+ mockUseAccount.mockReturnValue({ connector: { id: "metaMask" }, chainId: 1 });
165
+ mockUseWalletClient.mockReturnValue({ data: walletClient });
166
+ const { wrapper } = await connected("eth", evmAddress);
167
+ const { result } = renderHook(() => useEvmClient({ chainId: 1 }), { wrapper });
168
+ expect(result.current?.family).toBe("evm");
169
+ expect(mockUseWalletClient).toHaveBeenCalledWith(expect.objectContaining({ chainId: 1 }));
170
+ });
171
+ });
@@ -1,51 +1,110 @@
1
1
  import { useMemo } from "react";
2
- import { useAccount, usePublicClient, useWalletClient } from "wagmi";
2
+ import { useAccount, useChainId, useConfig, usePublicClient, useWalletClient } from "wagmi";
3
3
  import { isSyntheticChainId } from "../connectkit/connectors/syntheticChains";
4
+ import { useOptionalConnection } from "../core/react";
4
5
  import { bitcoinClient, type BitcoinClient } from "./bitcoin";
5
6
  import { connectorAdapter } from "./adapter";
6
7
  import { evmClient, type EvmClient, type EvmWalletClient } from "./evm";
8
+ import { evmReadClient, type EvmReadClient } from "./evmRead";
7
9
  import { suiClient, type SuiClient } from "./sui";
8
10
  import type { PublicClient } from "viem";
9
11
 
10
12
  /**
11
13
  * The connected EVM wallet as a viem WalletClient plus a PublicClient for reads,
12
14
  * wrapped in the mpo EVM client. Undefined until an EVM wallet is connected, and
13
- * while a non-EVM wallet holds the connection.
15
+ * while a non-EVM wallet holds the connection. Under a connection store
16
+ * (Web3Provider) it is the store's EVM client; for a named `chainId` it asks
17
+ * wagmi for a client on that chain.
14
18
  */
15
19
  export function useEvmClient(parameters: { chainId?: number } = {}): EvmClient | undefined {
20
+ const connection = useOptionalConnection();
21
+ const fromStore = connection !== null && parameters.chainId === undefined;
16
22
  const { connector, chainId: connectedChainId } = useAccount();
17
- const evm = !!connector && !connectorAdapter(connector) && !isSyntheticChainId(connectedChainId);
23
+ const evm =
24
+ !!connector &&
25
+ !connectorAdapter(connector) &&
26
+ !isSyntheticChainId(connectedChainId) &&
27
+ (connection === null || connection.family === "eth");
18
28
  const { data: walletClient } = useWalletClient({
19
29
  chainId: parameters.chainId,
20
- query: { enabled: evm },
30
+ query: { enabled: evm && !fromStore },
21
31
  });
22
32
  const publicClient = usePublicClient({ chainId: walletClient?.chain.id ?? parameters.chainId });
33
+ return useMemo(() => {
34
+ if (fromStore) {
35
+ return connection.family === "eth"
36
+ ? ((connection.client as EvmClient | null) ?? undefined)
37
+ : undefined;
38
+ }
39
+ return evm && walletClient && publicClient
40
+ ? evmClient({
41
+ walletClient: walletClient as unknown as EvmWalletClient,
42
+ publicClient: publicClient as PublicClient,
43
+ })
44
+ : undefined;
45
+ }, [fromStore, connection, evm, walletClient, publicClient]);
46
+ }
47
+
48
+ /**
49
+ * A read-only EVM client over WalletProvider's own public client for
50
+ * `chainId`. It needs no wallet, so a page can read a chain before one
51
+ * connects. With no `chainId` it follows wagmi's current chain: the connected
52
+ * EVM wallet's, else the last one used, and the default chain while a non-EVM
53
+ * wallet holds the connection. Pass `chainId` to read a contract on a fixed
54
+ * chain. Undefined for a chain the provider does not offer.
55
+ */
56
+ export function useEvmReadClient(parameters: { chainId?: number } = {}): EvmReadClient | undefined {
57
+ const config = useConfig();
58
+ const currentChainId = useChainId();
59
+ // A Solana, Sui or Bitcoin wallet moves wagmi onto a synthetic chain that
60
+ // has no transport, where usePublicClient returns undefined.
61
+ const chainId =
62
+ parameters.chainId ??
63
+ (isSyntheticChainId(currentChainId)
64
+ ? config.chains.find((chain) => !isSyntheticChainId(chain.id))?.id
65
+ : undefined);
66
+ const publicClient = usePublicClient({ chainId });
23
67
  return useMemo(
24
68
  () =>
25
- evm && walletClient && publicClient
26
- ? evmClient({
27
- walletClient: walletClient as unknown as EvmWalletClient,
28
- publicClient: publicClient as PublicClient,
29
- })
69
+ publicClient
70
+ ? evmReadClient({ chain: publicClient.chain, publicClient: publicClient as PublicClient })
30
71
  : undefined,
31
- [evm, walletClient, publicClient],
72
+ [publicClient],
32
73
  );
33
74
  }
34
75
 
35
- /** The connected Sui wallet (message signing only for now). */
76
+ /**
77
+ * The connected Sui wallet (message signing only for now): the connection
78
+ * store's when one is mounted, else wagmi's shim connector's.
79
+ */
36
80
  export function useSuiClient(): SuiClient | undefined {
81
+ const connection = useOptionalConnection();
37
82
  const { connector, address } = useAccount();
38
83
  return useMemo(() => {
84
+ if (connection) {
85
+ return connection.family === "sui"
86
+ ? ((connection.client as SuiClient | null) ?? undefined)
87
+ : undefined;
88
+ }
39
89
  const adapter = connectorAdapter(connector, "sui");
40
90
  return adapter?.address ? suiClient(adapter) : undefined;
41
- }, [connector, address]);
91
+ }, [connection, connector, address]);
42
92
  }
43
93
 
44
- /** The connected Bitcoin wallet (message signing only for now). */
94
+ /**
95
+ * The connected Bitcoin wallet (message signing only for now): the
96
+ * connection store's when one is mounted, else wagmi's shim connector's.
97
+ */
45
98
  export function useBitcoinClient(): BitcoinClient | undefined {
99
+ const connection = useOptionalConnection();
46
100
  const { connector, address } = useAccount();
47
101
  return useMemo(() => {
102
+ if (connection) {
103
+ return connection.family === "btc"
104
+ ? ((connection.client as BitcoinClient | null) ?? undefined)
105
+ : undefined;
106
+ }
48
107
  const adapter = connectorAdapter(connector, "bitcoin");
49
108
  return adapter?.address ? bitcoinClient(adapter) : undefined;
50
- }, [connector, address]);
109
+ }, [connection, connector, address]);
51
110
  }
@@ -5,6 +5,7 @@
5
5
  // native signs Solana through the WebView bridge, so @solana/kit must never
6
6
  // enter that bundle, and sign-in (solanaMessageClient) does not need it.
7
7
  export {
8
+ ReadOnlyClientError,
8
9
  UnsupportedClientMethodError,
9
10
  type ChainClient,
10
11
  type ClientCapability,
@@ -27,6 +28,15 @@ export {
27
28
  type EvmWriteContractParameters,
28
29
  type TxErrorKind,
29
30
  } from "./evm";
31
+ export {
32
+ evmReadClient,
33
+ evmReadClients,
34
+ type Erc20ReadActions,
35
+ type EvmReadClient,
36
+ type EvmReadClientConfig,
37
+ type EvmReadClients,
38
+ } from "./evmRead";
39
+ export type { Web3ChainConfig } from "../providers/walletConfig";
30
40
  export { suiClient, type SuiClient } from "./sui";
31
41
  export { bitcoinClient, type BitcoinClient } from "./bitcoin";
32
42
  export {
@@ -45,4 +55,4 @@ export {
45
55
  type SolanaCluster,
46
56
  type SolanaMessageClient,
47
57
  } from "./solanaMessage";
48
- export { useBitcoinClient, useEvmClient, useSuiClient } from "./hooks";
58
+ export { useBitcoinClient, useEvmClient, useEvmReadClient, useSuiClient } from "./hooks";
@@ -19,7 +19,10 @@ export type ClientCapability =
19
19
  */
20
20
  export interface ChainClient<F extends ClientFamily = ClientFamily> {
21
21
  readonly family: F;
22
- /** Chain-native address. Null for GPG, whose identity arrives with the signature. */
22
+ /**
23
+ * Chain-native address. Null for GPG, whose identity arrives with the
24
+ * signature, and for a read-only client, which has no account.
25
+ */
23
26
  readonly address: string | null;
24
27
  /** EVM numeric chain id, or a CAIP-2 style id (`solana:mainnet`, `sui:mainnet`, `bitcoin`). */
25
28
  readonly chainId?: number | string;
@@ -38,3 +41,14 @@ export class UnsupportedClientMethodError extends Error {
38
41
  this.name = "UnsupportedClientMethodError";
39
42
  }
40
43
  }
44
+
45
+ /**
46
+ * A signing or sending method called on a read-only client, such as
47
+ * evmReadClient's. Nothing reached a wallet and nothing was sent.
48
+ */
49
+ export class ReadOnlyClientError extends UnsupportedClientMethodError {
50
+ constructor(family: ClientFamily, method: string) {
51
+ super(family, method, "read-only client, connect a wallet to sign or send");
52
+ this.name = "ReadOnlyClientError";
53
+ }
54
+ }
@@ -0,0 +1,93 @@
1
+ // @vitest-environment happy-dom
2
+ import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
3
+ import { act, renderHook } from "@testing-library/react";
4
+ import type { ReactNode } from "react";
5
+ import { afterEach, describe, expect, it } from "vitest";
6
+ import { WagmiProvider, createConfig, createStorage } from "wagmi";
7
+ import { connect, disconnect } from "wagmi/actions";
8
+ import { mock } from "wagmi/connectors";
9
+ import { mainnet, polygon } from "wagmi/chains";
10
+ import { solanaChain } from "../connectkit/connectors/syntheticChains";
11
+ import { chainTransports } from "../providers/walletConfig";
12
+ import { useEvmReadClient } from "./hooks";
13
+
14
+ const account = "0x1111111111111111111111111111111111111111";
15
+
16
+ /**
17
+ * The wagmi config WalletProvider builds: its chains, then the synthetic
18
+ * non-EVM chains getDefaultConfig appends, with transports for the real ones
19
+ * only.
20
+ */
21
+ function walletProviderConfig() {
22
+ const map = new Map<string, string>();
23
+ return createConfig({
24
+ chains: [mainnet, polygon, solanaChain],
25
+ connectors: [mock({ accounts: [account], features: {} })],
26
+ transports: chainTransports([mainnet, polygon]),
27
+ storage: createStorage({
28
+ storage: {
29
+ getItem: (key) => map.get(key) ?? null,
30
+ setItem: (key, value) => void map.set(key, value),
31
+ removeItem: (key) => void map.delete(key),
32
+ },
33
+ }),
34
+ });
35
+ }
36
+
37
+ const rendered: { unmount(): void }[] = [];
38
+ afterEach(() => {
39
+ for (const r of rendered.splice(0)) r.unmount();
40
+ });
41
+
42
+ function render(config: ReturnType<typeof walletProviderConfig>, chainId?: number) {
43
+ const queryClient = new QueryClient();
44
+ const wrapper = ({ children }: { children: ReactNode }) => (
45
+ <WagmiProvider config={config}>
46
+ <QueryClientProvider client={queryClient}>{children}</QueryClientProvider>
47
+ </WagmiProvider>
48
+ );
49
+ const hook = renderHook(() => useEvmReadClient(chainId ? { chainId } : {}), { wrapper });
50
+ rendered.push(hook);
51
+ return hook;
52
+ }
53
+
54
+ describe("useEvmReadClient in a WalletProvider's wagmi config", () => {
55
+ it("reads the default chain before any wallet connects", () => {
56
+ const { result } = render(walletProviderConfig());
57
+ expect(result.current?.chainId).toBe(mainnet.id);
58
+ expect(result.current?.address).toBeNull();
59
+ expect(result.current?.publicClient.chain?.id).toBe(mainnet.id);
60
+ });
61
+
62
+ it("follows the connected EVM wallet's chain, and keeps the chain it names", async () => {
63
+ const config = walletProviderConfig();
64
+ const current = render(config);
65
+ const named = render(config, mainnet.id);
66
+ await act(() => connect(config, { connector: config.connectors[0], chainId: polygon.id }));
67
+ expect(current.result.current?.chainId).toBe(polygon.id);
68
+ expect(named.result.current?.chainId).toBe(mainnet.id);
69
+ await act(() => disconnect(config));
70
+ expect(current.result.current?.chainId).toBe(polygon.id);
71
+ });
72
+
73
+ it("reads the default chain while a non-EVM wallet holds a synthetic chain", () => {
74
+ const config = walletProviderConfig();
75
+ const { result } = render(config);
76
+ act(() => config.setState((state) => ({ ...state, chainId: solanaChain.id })));
77
+ expect(result.current?.chainId).toBe(mainnet.id);
78
+ expect(render(config, polygon.id).result.current?.chainId).toBe(polygon.id);
79
+ });
80
+
81
+ it("is undefined for a chain the config does not offer, or one with no RPC", () => {
82
+ const config = walletProviderConfig();
83
+ expect(render(config, 999).result.current).toBeUndefined();
84
+ expect(render(config, solanaChain.id).result.current).toBeUndefined();
85
+ });
86
+
87
+ it("keeps one client while the chain stays put", () => {
88
+ const { result, rerender } = render(walletProviderConfig());
89
+ const first = result.current;
90
+ rerender();
91
+ expect(result.current).toBe(first);
92
+ });
93
+ });
@@ -19,7 +19,10 @@ import type { SignInMessageOptions, WalletAdapter, WalletAddress } from "./types
19
19
 
20
20
  interface UnisatProvider {
21
21
  requestAccounts(): Promise<string[]>;
22
+ getAccounts?(): Promise<string[]>;
22
23
  signMessage(message: string, type?: "ecdsa" | "bip322-simple"): Promise<string>;
24
+ on?(event: "accountsChanged", listener: (accounts: string[]) => void): void;
25
+ removeListener?(event: "accountsChanged", listener: (accounts: string[]) => void): void;
23
26
  }
24
27
 
25
28
  interface PhantomBtcAccount {
@@ -30,8 +33,18 @@ interface PhantomBtcAccount {
30
33
  interface PhantomBtcProvider {
31
34
  requestAccounts(): Promise<PhantomBtcAccount[]>;
32
35
  signMessage(address: string, message: Uint8Array): Promise<{ signature: Uint8Array }>;
36
+ on?(event: "accountsChanged", listener: (accounts: PhantomBtcAccount[]) => void): void;
37
+ off?(event: "accountsChanged", listener: (accounts: PhantomBtcAccount[]) => void): void;
38
+ removeListener?(
39
+ event: "accountsChanged",
40
+ listener: (accounts: PhantomBtcAccount[]) => void,
41
+ ): void;
33
42
  }
34
43
 
44
+ /** BIP-322 P2WPKH only: the native-segwit "payment" account (bc1q…). */
45
+ const paymentAccount = (accounts: readonly PhantomBtcAccount[] | undefined) =>
46
+ accounts?.find((a) => a.purpose === "payment" || a.addressType === "p2wpkh") ?? accounts?.[0];
47
+
35
48
  function bytesToBase64(bytes: Uint8Array): string {
36
49
  let s = "";
37
50
  for (let i = 0; i < bytes.length; i++) s += String.fromCharCode(bytes[i]);
@@ -65,10 +78,7 @@ export class BitcoinAdapter implements WalletAdapter {
65
78
  }
66
79
  if (w.phantom?.bitcoin) {
67
80
  const phantom = w.phantom.bitcoin;
68
- const accounts = await phantom.requestAccounts();
69
- // BIP-322 P2WPKH only: pick the native-segwit "payment" account (bc1q…).
70
- const payment =
71
- accounts.find((a) => a.purpose === "payment" || a.addressType === "p2wpkh") ?? accounts[0];
81
+ const payment = paymentAccount(await phantom.requestAccounts());
72
82
  if (!payment) throw new Error("Bitcoin wallet returned no accounts");
73
83
  this.kind = "phantom";
74
84
  this.phantom = phantom;
@@ -79,6 +89,56 @@ export class BitcoinAdapter implements WalletAdapter {
79
89
  throw new Error("No Bitcoin wallet found. Install a Bitcoin wallet (Unisat, OKX, Phantom).");
80
90
  }
81
91
 
92
+ /**
93
+ * Reconnects without a prompt through UniSat's or OKX's `getAccounts`.
94
+ * Resolves false when the wallet no longer trusts the page, and for
95
+ * Phantom, whose Bitcoin provider has no silent path. Throws when no
96
+ * Bitcoin wallet is injected yet.
97
+ */
98
+ async restore(): Promise<boolean> {
99
+ const w = window as unknown as {
100
+ unisat?: UnisatProvider;
101
+ okxwallet?: { bitcoin?: UnisatProvider };
102
+ phantom?: { bitcoin?: PhantomBtcProvider };
103
+ };
104
+ const unisat = w.unisat ?? w.okxwallet?.bitcoin;
105
+ if (unisat) {
106
+ const accounts = (await unisat.getAccounts?.()) ?? [];
107
+ if (!accounts.length) return false;
108
+ this.kind = "unisat";
109
+ this.unisat = unisat;
110
+ this.address = accounts[0];
111
+ this.isConnected = true;
112
+ return true;
113
+ }
114
+ if (w.phantom?.bitcoin) return false;
115
+ throw new Error("No Bitcoin wallet found yet.");
116
+ }
117
+
118
+ /** The wallet's account switches; an empty list means it disconnected. */
119
+ subscribe(listener: () => void): () => void {
120
+ const update = (address: string | null) => {
121
+ this.address = address;
122
+ this.isConnected = address !== null;
123
+ listener();
124
+ };
125
+ const unisat = this.kind === "unisat" ? this.unisat : null;
126
+ if (unisat?.on) {
127
+ const onAccounts = (accounts: string[]) => update(accounts[0] ?? null);
128
+ unisat.on("accountsChanged", onAccounts);
129
+ return () => unisat.removeListener?.("accountsChanged", onAccounts);
130
+ }
131
+ const phantom = this.kind === "phantom" ? this.phantom : null;
132
+ if (phantom?.on) {
133
+ const onAccounts = (accounts: PhantomBtcAccount[]) =>
134
+ update(paymentAccount(accounts)?.address ?? null);
135
+ phantom.on("accountsChanged", onAccounts);
136
+ return () =>
137
+ (phantom.off ?? phantom.removeListener)?.call(phantom, "accountsChanged", onAccounts);
138
+ }
139
+ return () => {};
140
+ }
141
+
82
142
  async disconnect(): Promise<void> {
83
143
  this.kind = null;
84
144
  this.unisat = null;
@@ -37,12 +37,17 @@ function base58encode(bytes: Uint8Array): string {
37
37
  return str;
38
38
  }
39
39
 
40
+ type SolanaListener = (publicKey?: { toString(): string } | null) => void;
41
+
40
42
  interface InjectedSolana {
41
43
  isPhantom?: boolean;
42
44
  publicKey?: { toString(): string } | null;
43
45
  connect(opts?: { onlyIfTrusted?: boolean }): Promise<{ publicKey: { toString(): string } }>;
44
46
  disconnect(): Promise<void>;
45
47
  signMessage(message: Uint8Array, display?: "utf8" | "hex"): Promise<{ signature: Uint8Array }>;
48
+ on?(event: "accountChanged" | "disconnect", listener: SolanaListener): void;
49
+ off?(event: "accountChanged" | "disconnect", listener: SolanaListener): void;
50
+ removeListener?(event: "accountChanged" | "disconnect", listener: SolanaListener): void;
46
51
  }
47
52
 
48
53
  function getInjectedProvider(): InjectedSolana {
@@ -72,6 +77,50 @@ export class SolanaAdapter implements WalletAdapter {
72
77
  this.isConnected = true;
73
78
  }
74
79
 
80
+ /**
81
+ * Reconnects without a prompt (`onlyIfTrusted`). Resolves false when the
82
+ * wallet refuses because it no longer trusts the page (4001); throws on
83
+ * any other failure, and when no wallet is injected yet.
84
+ */
85
+ async restore(): Promise<boolean> {
86
+ const provider = getInjectedProvider();
87
+ try {
88
+ const { publicKey } = await provider.connect({ onlyIfTrusted: true });
89
+ this.address = publicKey.toString();
90
+ this.isConnected = true;
91
+ return true;
92
+ } catch (error) {
93
+ if ((error as { code?: unknown } | null)?.code === 4001) return false;
94
+ throw error;
95
+ }
96
+ }
97
+
98
+ /**
99
+ * The wallet's account switches and disconnects. Phantom reports a null
100
+ * account when the user switches to one this page has not connected, so the
101
+ * page must connect again; the adapter treats it as a disconnect.
102
+ */
103
+ subscribe(listener: () => void): () => void {
104
+ const provider = getInjectedProvider();
105
+ const onAccount: SolanaListener = (publicKey) => {
106
+ this.address = publicKey ? publicKey.toString() : null;
107
+ this.isConnected = this.address !== null;
108
+ listener();
109
+ };
110
+ const onDisconnect: SolanaListener = () => {
111
+ this.address = null;
112
+ this.isConnected = false;
113
+ listener();
114
+ };
115
+ provider.on?.("accountChanged", onAccount);
116
+ provider.on?.("disconnect", onDisconnect);
117
+ return () => {
118
+ const off = (provider.off ?? provider.removeListener)?.bind(provider);
119
+ off?.("accountChanged", onAccount);
120
+ off?.("disconnect", onDisconnect);
121
+ };
122
+ }
123
+
75
124
  async disconnect(): Promise<void> {
76
125
  try {
77
126
  await getInjectedProvider().disconnect();