@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,82 @@
1
+ import { existsSync, readFileSync } from "node:fs";
2
+ import { dirname, join, relative } from "node:path";
3
+ import { fileURLToPath } from "node:url";
4
+ import ts from "typescript";
5
+ import { describe, expect, it } from "vitest";
6
+
7
+ const src = fileURLToPath(new URL("..", import.meta.url));
8
+ const entry = fileURLToPath(new URL("./index.ts", import.meta.url));
9
+
10
+ function resolveRelative(from: string, specifier: string): string {
11
+ const base = join(dirname(from), specifier);
12
+ for (const candidate of [
13
+ `${base}.ts`,
14
+ `${base}.tsx`,
15
+ join(base, "index.ts"),
16
+ join(base, "index.tsx"),
17
+ ]) {
18
+ if (existsSync(candidate)) return candidate;
19
+ }
20
+ throw new Error(`cannot resolve ${specifier} from ${from}`);
21
+ }
22
+
23
+ /** Specifiers a file loads at runtime: type-only imports and exports are erased. */
24
+ function runtimeSpecifiers(file: string): string[] {
25
+ const source = ts.createSourceFile(
26
+ file,
27
+ readFileSync(file, "utf8"),
28
+ ts.ScriptTarget.Latest,
29
+ true,
30
+ );
31
+ const found: string[] = [];
32
+ const visit = (node: ts.Node) => {
33
+ if (ts.isImportDeclaration(node) && !node.importClause?.isTypeOnly) {
34
+ found.push((node.moduleSpecifier as ts.StringLiteral).text);
35
+ } else if (ts.isExportDeclaration(node) && node.moduleSpecifier && !node.isTypeOnly) {
36
+ found.push((node.moduleSpecifier as ts.StringLiteral).text);
37
+ } else if (
38
+ ts.isCallExpression(node) &&
39
+ (node.expression.kind === ts.SyntaxKind.ImportKeyword ||
40
+ (ts.isIdentifier(node.expression) && node.expression.text === "require")) &&
41
+ node.arguments[0] &&
42
+ ts.isStringLiteral(node.arguments[0])
43
+ ) {
44
+ found.push(node.arguments[0].text);
45
+ }
46
+ ts.forEachChild(node, visit);
47
+ };
48
+ visit(source);
49
+ return found;
50
+ }
51
+
52
+ function runtimeGraph(start: string) {
53
+ const files = new Set<string>();
54
+ const packages = new Map<string, string>();
55
+ const walk = (file: string) => {
56
+ if (files.has(file)) return;
57
+ files.add(file);
58
+ for (const specifier of runtimeSpecifiers(file)) {
59
+ if (specifier.startsWith(".")) walk(resolveRelative(file, specifier));
60
+ else packages.set(specifier, relative(src, file));
61
+ }
62
+ };
63
+ walk(start);
64
+ return { files: [...files].map((file) => relative(src, file)).sort(), packages };
65
+ }
66
+
67
+ describe("the core entry", () => {
68
+ it("loads no chain SDK: only React and its own files", () => {
69
+ const { files, packages } = runtimeGraph(entry);
70
+ expect([...packages.keys()]).toEqual(["react"]);
71
+ expect(files.every((file) => file.startsWith("core/") || file === "clients/types.ts")).toBe(
72
+ true,
73
+ );
74
+ });
75
+
76
+ it("the scan sees a runtime import it should refuse", () => {
77
+ const { packages } = runtimeGraph(
78
+ fileURLToPath(new URL("../message/index.ts", import.meta.url)),
79
+ );
80
+ expect(packages.has("viem")).toBe(true);
81
+ });
82
+ });
@@ -0,0 +1,70 @@
1
+ // Core contracts of mpo web3 (MPO-385): the family registry, the connection
2
+ // driver interface, the connection store and the message registry. Nothing here
3
+ // imports a chain SDK; each family package brings its own driver and message.
4
+ export {
5
+ createFamilyRegistry,
6
+ defineWalletFamily,
7
+ type BridgeRequester,
8
+ type FamilyBridge,
9
+ type FamilyRegistry,
10
+ type WalletFamily,
11
+ type WalletFamilyDefinition,
12
+ } from "./family";
13
+ export {
14
+ createMessageRegistry,
15
+ formatWalletMessage,
16
+ type MessageFamily,
17
+ type WalletMessageRegistry,
18
+ type WalletMessageSpec,
19
+ } from "./message";
20
+ export {
21
+ createConnectionStore,
22
+ defaultConnectionStorageKey,
23
+ type ConnectionStore,
24
+ type ConnectionStoreOptions,
25
+ type FamilyConnector,
26
+ } from "./store";
27
+ export {
28
+ lightDriver,
29
+ type LightDriverOptions,
30
+ type LightWallet,
31
+ type LightWalletAdapter,
32
+ } from "./lightDriver";
33
+ export {
34
+ ConnectionProvider,
35
+ useConnection,
36
+ useConnectionStore,
37
+ useOptionalConnectionStore,
38
+ type ConnectionProviderProps,
39
+ } from "./react";
40
+ export {
41
+ SignInProvider,
42
+ signInWithConnection,
43
+ useOptionalSignIn,
44
+ useSignIn,
45
+ type SignIn,
46
+ type SignInConfig,
47
+ type SignInCredential,
48
+ type SignInMessageArgs,
49
+ type SignInProviderProps,
50
+ type SignInStatus,
51
+ } from "./signIn";
52
+ export type {
53
+ ConnectOptions,
54
+ ConnectionDriver,
55
+ ConnectionState,
56
+ ConnectionStatus,
57
+ ConnectionStorage,
58
+ DriverAccount,
59
+ DriverConnectOptions,
60
+ DriverState,
61
+ SavedConnection,
62
+ WalletConnector,
63
+ } from "./types";
64
+ export {
65
+ ReadOnlyClientError,
66
+ UnsupportedClientMethodError,
67
+ type ChainClient,
68
+ type ClientCapability,
69
+ type ClientFamily,
70
+ } from "../clients/types";
@@ -0,0 +1,284 @@
1
+ import { describe, expect, it, vi } from "vitest";
2
+ import {
3
+ createWallets,
4
+ describeConnectionDriver,
5
+ type DriverHarness,
6
+ type Wallets,
7
+ } from "../../tests/core/driverContract";
8
+ import { deferred } from "../../tests/core/testDriver";
9
+ import { lightDriver, type LightWallet, type LightWalletAdapter } from "./lightDriver";
10
+
11
+ const phantom = "7EcDhSYGxXyscszYEp35KHN8vvw3svAuLKTzXwCFLtV";
12
+ const solflare = "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin";
13
+ const backpack = "DRpbCBMxVnDK7maPM5tGv6MvB3v1sRMC86PZ8okm21hy";
14
+ const glow = "GLoWMgcn3VbyFKiC2FGMgfKxYSyTJS7uKFwKY2CSkq9X";
15
+
16
+ const signature = (address: string, message: string) => `signed:${address}:${message}`;
17
+
18
+ /** An adapter over one scripted wallet, the shape SolanaAdapter and friends have. */
19
+ function scriptedAdapter(wallets: Wallets, id: string) {
20
+ const listeners = new Set<() => void>();
21
+ const adapter = {
22
+ address: null as string | null,
23
+ async connect() {
24
+ await wallets.answer(id, "prompt");
25
+ const wallet = wallets.get(id);
26
+ wallet.authorized = true;
27
+ wallet.open = true;
28
+ adapter.address = wallet.address;
29
+ },
30
+ async restore() {
31
+ const wallet = wallets.get(id);
32
+ if (!wallet.authorized) return false;
33
+ await wallets.answer(id, "restore");
34
+ wallet.open = true;
35
+ adapter.address = wallet.address;
36
+ return true;
37
+ },
38
+ async disconnect() {
39
+ wallets.get(id).open = false;
40
+ adapter.address = null;
41
+ },
42
+ subscribe(listener: () => void) {
43
+ listeners.add(listener);
44
+ return () => {
45
+ listeners.delete(listener);
46
+ };
47
+ },
48
+ async signMessage(message: string) {
49
+ if (!adapter.address) throw new Error("not connected");
50
+ return signature(adapter.address, message);
51
+ },
52
+ emit() {
53
+ for (const listener of listeners) listener();
54
+ },
55
+ listeners,
56
+ } satisfies LightWalletAdapter & Record<string, unknown>;
57
+ return adapter;
58
+ }
59
+
60
+ const client = (wallet: LightWallet, account: { address: string; chainId?: string | number }) => ({
61
+ family: "solana" as const,
62
+ address: account.address,
63
+ chainId: account.chainId,
64
+ capabilities: ["signMessage" as const],
65
+ signMessage: (message: string) => wallet.adapter.signMessage(message),
66
+ });
67
+
68
+ function setup() {
69
+ const wallets = createWallets({ phantom, solflare, backpack });
70
+ const build = () => {
71
+ const adapters = {
72
+ phantom: scriptedAdapter(wallets, "phantom"),
73
+ solflare: scriptedAdapter(wallets, "solflare"),
74
+ backpack: scriptedAdapter(wallets, "backpack"),
75
+ };
76
+ const list: LightWallet[] = [
77
+ { id: "phantom", name: "Phantom", adapter: adapters.phantom },
78
+ { id: "solflare", name: "Solflare", adapter: adapters.solflare },
79
+ { id: "backpack", name: "Backpack", adapter: adapters.backpack },
80
+ ];
81
+ const driver = lightDriver({ wallets: () => list, chainId: "solana:mainnet", client });
82
+ return { adapters, driver, list };
83
+ };
84
+ const { adapters, driver, list } = build();
85
+ const harness: DriverHarness = {
86
+ driver,
87
+ wallets,
88
+ first: "phantom",
89
+ second: "solflare",
90
+ third: "backpack",
91
+ otherAddress: glow,
92
+ multiple: true,
93
+ normalize: (address) => address,
94
+ switchAccount(id, address) {
95
+ wallets.get(id).address = address;
96
+ const adapter = adapters[id as keyof typeof adapters];
97
+ adapter.address = address;
98
+ adapter.emit();
99
+ },
100
+ walletDisconnect(id) {
101
+ wallets.get(id).open = false;
102
+ const adapter = adapters[id as keyof typeof adapters];
103
+ adapter.address = null;
104
+ adapter.emit();
105
+ },
106
+ remount: () => build().driver,
107
+ verify: (address, message, signed) => signed === signature(address, message),
108
+ };
109
+ return { ...harness, adapters, list };
110
+ }
111
+
112
+ describeConnectionDriver("lightDriver", setup);
113
+
114
+ describe("lightDriver", () => {
115
+ it("keeps the first adapter it saw for a wallet, however often discovery runs", async () => {
116
+ const wallets = createWallets({ phantom });
117
+ const discover = vi.fn((): LightWallet[] => [
118
+ { id: "phantom", name: "Phantom", adapter: scriptedAdapter(wallets, "phantom") },
119
+ ]);
120
+ const driver = lightDriver({ wallets: discover, client });
121
+ const account = await driver.connect("phantom");
122
+ driver.connectors();
123
+ driver.connectors();
124
+ expect(discover.mock.calls.length).toBeGreaterThan(1);
125
+ const signer = await driver.client?.(driver.getState());
126
+ expect(await signer?.signMessage("hi")).toBe(signature(account.address, "hi"));
127
+ });
128
+
129
+ it("lists a wallet that announces itself late, and tells watchConnectors", () => {
130
+ const wallets = createWallets({ phantom, solflare });
131
+ let list: LightWallet[] = [
132
+ { id: "phantom", name: "Phantom", adapter: scriptedAdapter(wallets, "phantom") },
133
+ ];
134
+ const announce = new Set<() => void>();
135
+ const driver = lightDriver({
136
+ wallets: () => list,
137
+ watchWallets: (listener) => {
138
+ announce.add(listener);
139
+ return () => announce.delete(listener);
140
+ },
141
+ });
142
+ const listener = vi.fn();
143
+ const unwatch = driver.watchConnectors?.(listener);
144
+ const before = driver.connectors();
145
+ expect(driver.connectors()).toBe(before);
146
+ list = [
147
+ ...list,
148
+ {
149
+ id: "solflare",
150
+ name: "Solflare",
151
+ icon: "data:icon",
152
+ adapter: scriptedAdapter(wallets, "solflare"),
153
+ },
154
+ ];
155
+ for (const announced of announce) announced();
156
+ expect(listener).toHaveBeenCalledTimes(1);
157
+ expect(driver.connectors()).toEqual([
158
+ { id: "phantom", name: "Phantom" },
159
+ { id: "solflare", name: "Solflare", icon: "data:icon" },
160
+ ]);
161
+ unwatch?.();
162
+ expect(announce.size).toBe(0);
163
+ });
164
+
165
+ it("without watchWallets has no watchConnectors, so the store reads the list each time", () => {
166
+ const { driver } = setup();
167
+ expect(driver.watchConnectors).toBeUndefined();
168
+ });
169
+
170
+ it("a wallet that cannot restore silently restores only while it still holds an address", async () => {
171
+ const wallets = createWallets({ phantom });
172
+ const { restore: _, ...adapter } = scriptedAdapter(wallets, "phantom");
173
+ const driver = lightDriver({
174
+ wallets: () => [{ id: "phantom", name: "Phantom", adapter }],
175
+ });
176
+ expect(await driver.reconnect("phantom")).toBeNull();
177
+ adapter.address = phantom;
178
+ expect(await driver.reconnect("phantom")).toEqual({ address: phantom });
179
+ expect(driver.getState()).toMatchObject({ status: "connected", connectorId: "phantom" });
180
+ expect(wallets.get("phantom").prompts).toBe(0);
181
+ });
182
+
183
+ it("a restore that fails rejects, so the store keeps the record for later", async () => {
184
+ const { driver, adapters } = setup();
185
+ vi.spyOn(adapters.phantom, "restore").mockRejectedValueOnce(new Error("wallet locked"));
186
+ await expect(driver.reconnect("phantom")).rejects.toThrow(/locked/);
187
+ expect(driver.getState()).toMatchObject({ status: "disconnected", account: null });
188
+ });
189
+
190
+ it("a connect that resolves with no address rejects and opens nothing", async () => {
191
+ const { driver, adapters } = setup();
192
+ vi.spyOn(adapters.phantom, "connect").mockResolvedValueOnce(undefined);
193
+ await expect(driver.connect("phantom")).rejects.toThrow(/no account/);
194
+ expect(driver.getState().account).toBeNull();
195
+ expect(adapters.phantom.listeners.size).toBe(0);
196
+ });
197
+
198
+ it("reports connecting and reconnecting while an attempt with nothing open is out", async () => {
199
+ const { driver, wallets } = setup();
200
+ const listener = vi.fn();
201
+ driver.subscribe(listener);
202
+ const gate = wallets.hold("phantom");
203
+ const connecting = driver.connect("phantom");
204
+ await vi.waitFor(() => expect(driver.getState().status).toBe("connecting"));
205
+ gate.approve();
206
+ await connecting;
207
+ await driver.disconnect();
208
+ wallets.get("phantom").authorized = true;
209
+ const held = wallets.hold("phantom");
210
+ const restoring = driver.reconnect("phantom");
211
+ await vi.waitFor(() => expect(driver.getState().status).toBe("reconnecting"));
212
+ held.approve();
213
+ await restoring;
214
+ expect(driver.getState().status).toBe("connected");
215
+ expect(listener.mock.calls.length).toBeGreaterThanOrEqual(4);
216
+ });
217
+
218
+ it("listens to a wallet's events only while it is open", async () => {
219
+ const { driver, adapters } = setup();
220
+ await driver.connect("phantom");
221
+ expect(adapters.phantom.listeners.size).toBe(1);
222
+ await driver.disconnect("phantom");
223
+ expect(adapters.phantom.listeners.size).toBe(0);
224
+ await driver.connect("phantom");
225
+ adapters.phantom.address = null;
226
+ adapters.phantom.emit();
227
+ expect(adapters.phantom.listeners.size).toBe(0);
228
+ });
229
+
230
+ it("names each account's chain, by wallet when chainId is a function", async () => {
231
+ const wallets = createWallets({ phantom, solflare });
232
+ const driver = lightDriver({
233
+ wallets: () => [
234
+ { id: "phantom", name: "Phantom", adapter: scriptedAdapter(wallets, "phantom") },
235
+ { id: "solflare", name: "Solflare", adapter: scriptedAdapter(wallets, "solflare") },
236
+ ],
237
+ chainId: (wallet) => (wallet.id === "phantom" ? "solana:devnet" : undefined),
238
+ });
239
+ expect(await driver.connect("phantom")).toEqual({ address: phantom, chainId: "solana:devnet" });
240
+ expect(await driver.connect("solflare")).toEqual({ address: solflare });
241
+ });
242
+
243
+ it("keeps one state object while nothing changes, and a client only while connected", async () => {
244
+ const { driver } = setup();
245
+ expect(await driver.client?.(driver.getState())).toBeNull();
246
+ await driver.connect("phantom");
247
+ expect(driver.getState()).toBe(driver.getState());
248
+ const noClient = lightDriver({ wallets: () => [] });
249
+ expect(noClient.client?.(driver.getState()) ?? null).toBeNull();
250
+ });
251
+
252
+ it("closing everything asks every wallet, whatever one of them does", async () => {
253
+ const { driver, adapters, wallets } = setup();
254
+ await driver.connect("phantom");
255
+ await driver.connect("solflare");
256
+ vi.spyOn(adapters.phantom, "disconnect").mockReturnValueOnce(new Promise(() => {}));
257
+ void driver.disconnect();
258
+ expect(driver.getState().account).toBeNull();
259
+ await vi.waitFor(() => expect(wallets.get("solflare").open).toBe(false));
260
+ });
261
+
262
+ it("an adapter whose disconnect throws synchronously does not stop the others closing", async () => {
263
+ const { driver, adapters, wallets } = setup();
264
+ await driver.connect("phantom");
265
+ await driver.connect("solflare");
266
+ vi.spyOn(adapters.phantom, "disconnect").mockImplementationOnce(() => {
267
+ throw new Error("sync boom");
268
+ });
269
+ await expect(driver.disconnect()).rejects.toThrow(/sync boom/);
270
+ expect(wallets.get("solflare").open).toBe(false);
271
+ });
272
+
273
+ it("a disconnect that the wallet fails still lets go, then reports the failure", async () => {
274
+ const { driver, adapters, wallets } = setup();
275
+ await driver.connect("phantom");
276
+ const closing = deferred<void>();
277
+ vi.spyOn(adapters.phantom, "disconnect").mockReturnValueOnce(closing.promise);
278
+ const done = driver.disconnect();
279
+ expect(driver.getState()).toMatchObject({ status: "disconnected", account: null });
280
+ closing.reject(new Error("extension gone"));
281
+ await expect(done).rejects.toThrow(/extension gone/);
282
+ expect(wallets.get("phantom").open).toBe(true);
283
+ });
284
+ });
@@ -0,0 +1,235 @@
1
+ import type { ChainClient } from "../clients/types";
2
+ import type { ConnectionDriver, DriverAccount, DriverState, WalletConnector } from "./types";
3
+
4
+ /**
5
+ * One wallet as the light driver drives it: an injected provider or a Wallet
6
+ * Standard wallet behind a small adapter. The mpo adapters (SolanaAdapter,
7
+ * SuiAdapter, BitcoinAdapter) fit as they are.
8
+ */
9
+ export interface LightWalletAdapter {
10
+ /** The connected address, or null. */
11
+ readonly address: string | null;
12
+ /** Prompts the user and leaves `address` set. Rejects when they decline. */
13
+ connect(): Promise<void>;
14
+ disconnect(): Promise<void>;
15
+ /**
16
+ * Connects without prompting. Resolves false when the wallet no longer
17
+ * trusts the page; rejects when it cannot tell yet. Without it, a restore
18
+ * succeeds only while the adapter still holds an address.
19
+ */
20
+ restore?(): Promise<boolean>;
21
+ /** Wallet-side account switches and disconnects; the driver re-reads `address` on each. */
22
+ subscribe?(listener: () => void): () => void;
23
+ signMessage(message: string): Promise<string>;
24
+ }
25
+
26
+ export interface LightWallet {
27
+ readonly id: string;
28
+ readonly name: string;
29
+ readonly icon?: string;
30
+ readonly adapter: LightWalletAdapter;
31
+ }
32
+
33
+ export interface LightDriverOptions {
34
+ /**
35
+ * The wallets present now, read for every connector list. The first
36
+ * adapter seen for an id is the one the driver keeps, so discovery may
37
+ * build fresh adapters each time.
38
+ */
39
+ wallets: () => readonly LightWallet[];
40
+ /** Called when a wallet announces itself after the page loaded. */
41
+ watchWallets?: (listener: () => void) => () => void;
42
+ /** The chain an account is on: `solana:mainnet`, `sui:mainnet`, `bitcoin`. */
43
+ chainId?: string | number | ((wallet: LightWallet) => string | number | undefined);
44
+ /** The per-chain client for a connected wallet. */
45
+ client?: (
46
+ wallet: LightWallet,
47
+ account: DriverAccount,
48
+ ) => ChainClient | null | Promise<ChainClient | null>;
49
+ }
50
+
51
+ interface Open {
52
+ readonly wallet: LightWallet;
53
+ account: DriverAccount;
54
+ readonly unsubscribe: () => void;
55
+ }
56
+
57
+ const sameConnector = (a: WalletConnector, b: WalletConnector) =>
58
+ a.id === b.id && a.name === b.name && a.icon === b.icon;
59
+
60
+ /**
61
+ * The connection driver for families that need no wallet SDK: connect,
62
+ * disconnect, wallet-side events and silent restore over a small adapter per
63
+ * wallet, several wallets open at once. The connection store remembers which
64
+ * one to restore. It imports no chain SDK, so a Solana-, Sui- or Bitcoin-only
65
+ * app ships neither wagmi nor viem.
66
+ */
67
+ export function lightDriver(options: LightDriverOptions): ConnectionDriver {
68
+ const kept = new Map<string, LightWallet>();
69
+ const open = new Map<string, Open>();
70
+ const listeners = new Set<() => void>();
71
+ let current: string | null = null;
72
+ let connecting = 0;
73
+ let restoring = 0;
74
+ let snapshot: readonly WalletConnector[] = Object.freeze([]);
75
+ let state: DriverState = Object.freeze({
76
+ status: "disconnected",
77
+ connectorId: null,
78
+ account: null,
79
+ });
80
+
81
+ const present = (): LightWallet[] =>
82
+ options.wallets().map((wallet) => {
83
+ const known = kept.get(wallet.id);
84
+ if (known) return known;
85
+ kept.set(wallet.id, wallet);
86
+ return wallet;
87
+ });
88
+
89
+ const find = (id: string) => kept.get(id) ?? present().find((wallet) => wallet.id === id);
90
+
91
+ const chainOf = (wallet: LightWallet) =>
92
+ typeof options.chainId === "function" ? options.chainId(wallet) : options.chainId;
93
+
94
+ const accountOf = (wallet: LightWallet, address: string): DriverAccount => {
95
+ const chainId = chainOf(wallet);
96
+ return chainId === undefined ? { address } : { address, chainId };
97
+ };
98
+
99
+ const derive = (): DriverState => {
100
+ const active = current === null ? undefined : open.get(current);
101
+ if (active)
102
+ return { status: "connected", connectorId: active.wallet.id, account: active.account };
103
+ return {
104
+ status: restoring > 0 ? "reconnecting" : connecting > 0 ? "connecting" : "disconnected",
105
+ connectorId: null,
106
+ account: null,
107
+ };
108
+ };
109
+
110
+ const notify = () => {
111
+ const next = derive();
112
+ if (
113
+ next.status === state.status &&
114
+ next.connectorId === state.connectorId &&
115
+ next.account?.address === state.account?.address &&
116
+ next.account?.chainId === state.account?.chainId
117
+ ) {
118
+ return;
119
+ }
120
+ state = Object.freeze(next);
121
+ for (const listener of listeners) listener();
122
+ };
123
+
124
+ // `open` is kept in the order wallets were last current, so closing the
125
+ // current one falls back to the one current before it.
126
+ const close = (id: string) => {
127
+ const entry = open.get(id);
128
+ if (!entry) return;
129
+ entry.unsubscribe();
130
+ open.delete(id);
131
+ if (current === id) current = [...open.keys()].pop() ?? null;
132
+ };
133
+
134
+ const follow = (wallet: LightWallet) => () => {
135
+ const entry = open.get(wallet.id);
136
+ if (!entry) return;
137
+ const address = wallet.adapter.address;
138
+ if (address) entry.account = accountOf(wallet, address);
139
+ else close(wallet.id);
140
+ notify();
141
+ };
142
+
143
+ const hold = (wallet: LightWallet): DriverAccount => {
144
+ const address = wallet.adapter.address;
145
+ if (!address) throw new Error(`${wallet.name} returned no account`);
146
+ const existing = open.get(wallet.id);
147
+ open.delete(wallet.id);
148
+ open.set(wallet.id, {
149
+ wallet,
150
+ account: accountOf(wallet, address),
151
+ unsubscribe:
152
+ existing?.unsubscribe ?? wallet.adapter.subscribe?.(follow(wallet)) ?? (() => {}),
153
+ });
154
+ current = wallet.id;
155
+ notify();
156
+ return (open.get(wallet.id) as Open).account;
157
+ };
158
+
159
+ const driver: ConnectionDriver = {
160
+ connectors() {
161
+ const next = present().map((wallet) =>
162
+ wallet.icon === undefined
163
+ ? { id: wallet.id, name: wallet.name }
164
+ : { id: wallet.id, name: wallet.name, icon: wallet.icon },
165
+ );
166
+ const unchanged =
167
+ next.length === snapshot.length &&
168
+ next.every((connector, index) => {
169
+ const previous = snapshot[index];
170
+ return previous !== undefined && sameConnector(connector, previous);
171
+ });
172
+ if (!unchanged) snapshot = Object.freeze(next.map((connector) => Object.freeze(connector)));
173
+ return snapshot;
174
+ },
175
+ getState: () => state,
176
+ subscribe(listener) {
177
+ listeners.add(listener);
178
+ return () => {
179
+ listeners.delete(listener);
180
+ };
181
+ },
182
+ async connect(connectorId) {
183
+ const wallet = find(connectorId);
184
+ if (!wallet) throw new Error(`no wallet ${connectorId} on this page`);
185
+ if (open.has(connectorId)) return hold(wallet);
186
+ connecting++;
187
+ notify();
188
+ try {
189
+ await wallet.adapter.connect();
190
+ return hold(wallet);
191
+ } finally {
192
+ connecting--;
193
+ notify();
194
+ }
195
+ },
196
+ async disconnect(connectorId) {
197
+ const closing = [...open.values()]
198
+ .map((entry) => entry.wallet)
199
+ .filter((wallet) => connectorId === undefined || wallet.id === connectorId);
200
+ for (const wallet of closing) close(wallet.id);
201
+ notify();
202
+ const results = await Promise.allSettled(
203
+ closing.map(async (wallet) => wallet.adapter.disconnect()),
204
+ );
205
+ const failed = results.find((result) => result.status === "rejected");
206
+ if (failed) throw failed.reason;
207
+ },
208
+ async reconnect(connectorId) {
209
+ const wallet = find(connectorId);
210
+ if (!wallet) throw new Error(`wallet ${connectorId} has not announced itself yet`);
211
+ if (open.has(connectorId)) return hold(wallet);
212
+ restoring++;
213
+ notify();
214
+ try {
215
+ const restored = wallet.adapter.restore
216
+ ? await wallet.adapter.restore()
217
+ : wallet.adapter.address !== null;
218
+ return restored && wallet.adapter.address ? hold(wallet) : null;
219
+ } finally {
220
+ restoring--;
221
+ notify();
222
+ }
223
+ },
224
+ client(driverState) {
225
+ if (!driverState.account || !driverState.connectorId || !options.client) return null;
226
+ const wallet = kept.get(driverState.connectorId);
227
+ return wallet ? options.client(wallet, driverState.account) : null;
228
+ },
229
+ };
230
+ if (options.watchWallets) {
231
+ const watch = options.watchWallets;
232
+ return { ...driver, watchConnectors: (listener) => watch(listener) };
233
+ }
234
+ return driver;
235
+ }