@multiplatform.one/web3 7.26.0 → 7.28.1

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 (714) 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 +17 -0
  61. package/dist/cjs/core/family.native.js +17 -0
  62. package/dist/cjs/core/family.native.js.map +1 -1
  63. package/dist/cjs/core/index.cjs +10 -1
  64. package/dist/cjs/core/index.native.js +10 -1
  65. package/dist/cjs/core/index.native.js.map +1 -1
  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/react.cjs +12 -1
  70. package/dist/cjs/core/react.native.js +16 -1
  71. package/dist/cjs/core/react.native.js.map +1 -1
  72. package/dist/cjs/core/signIn.cjs +201 -0
  73. package/dist/cjs/core/signIn.native.js +240 -0
  74. package/dist/cjs/core/signIn.native.js.map +1 -0
  75. package/dist/cjs/core/store.cjs +47 -2
  76. package/dist/cjs/core/store.native.js +49 -2
  77. package/dist/cjs/core/store.native.js.map +1 -1
  78. package/dist/cjs/families/btc.cjs +44 -0
  79. package/dist/cjs/families/btc.native.js +49 -0
  80. package/dist/cjs/families/btc.native.js.map +1 -0
  81. package/dist/cjs/families/eth.cjs +57 -0
  82. package/dist/cjs/families/eth.native.js +61 -0
  83. package/dist/cjs/families/eth.native.js.map +1 -0
  84. package/dist/cjs/families/gpg.cjs +40 -0
  85. package/dist/cjs/families/gpg.native.js +43 -0
  86. package/dist/cjs/families/gpg.native.js.map +1 -0
  87. package/dist/cjs/families/host.cjs +38 -0
  88. package/dist/cjs/families/host.native.js +41 -0
  89. package/dist/cjs/families/host.native.js.map +1 -0
  90. package/dist/cjs/families/index.cjs +53 -0
  91. package/dist/cjs/families/index.native.js +56 -0
  92. package/dist/cjs/families/index.native.js.map +1 -0
  93. package/dist/cjs/families/messages.cjs +61 -0
  94. package/dist/cjs/families/messages.native.js +66 -0
  95. package/dist/cjs/families/messages.native.js.map +1 -0
  96. package/dist/cjs/families/sol.cjs +55 -0
  97. package/dist/cjs/families/sol.native.js +64 -0
  98. package/dist/cjs/families/sol.native.js.map +1 -0
  99. package/dist/cjs/families/sui.cjs +48 -0
  100. package/dist/cjs/families/sui.native.js +53 -0
  101. package/dist/cjs/families/sui.native.js.map +1 -0
  102. package/dist/cjs/index.cjs +22 -2
  103. package/dist/cjs/index.native.js +21 -1
  104. package/dist/cjs/index.native.js.map +1 -1
  105. package/dist/cjs/keycloak/keycloakWallet.cjs +13 -0
  106. package/dist/cjs/keycloak/keycloakWallet.native.js +15 -0
  107. package/dist/cjs/keycloak/keycloakWallet.native.js.map +1 -1
  108. package/dist/cjs/keycloak/useDirectLogin.cjs +10 -5
  109. package/dist/cjs/keycloak/useDirectLogin.native.js +12 -5
  110. package/dist/cjs/keycloak/useDirectLogin.native.js.map +1 -1
  111. package/dist/cjs/keycloak/useWalletLogin.cjs +16 -8
  112. package/dist/cjs/light/drivers.cjs +73 -0
  113. package/dist/cjs/light/drivers.native.js +97 -0
  114. package/dist/cjs/light/drivers.native.js.map +1 -0
  115. package/dist/cjs/light/index.cjs +30 -0
  116. package/dist/cjs/light/index.native.js +33 -0
  117. package/dist/cjs/light/index.native.js.map +1 -0
  118. package/dist/cjs/providers/WalletProvider.cjs +59 -17
  119. package/dist/cjs/providers/WalletProvider.native.js +99 -56
  120. package/dist/cjs/providers/WalletProvider.native.js.map +1 -1
  121. package/dist/cjs/providers/families.cjs +53 -0
  122. package/dist/cjs/providers/families.native.js +59 -0
  123. package/dist/cjs/providers/families.native.js.map +1 -0
  124. package/dist/cjs/providers/index.cjs +1 -0
  125. package/dist/cjs/providers/index.native.js +1 -0
  126. package/dist/cjs/providers/index.native.js.map +1 -1
  127. package/dist/cjs/providers/walletConfig.cjs +41 -0
  128. package/dist/cjs/providers/walletConfig.native.js +68 -0
  129. package/dist/cjs/providers/walletConfig.native.js.map +1 -1
  130. package/dist/cjs/wagmi/driver.cjs +257 -0
  131. package/dist/cjs/wagmi/driver.native.js +331 -0
  132. package/dist/cjs/wagmi/driver.native.js.map +1 -0
  133. package/dist/cjs/wagmi/host.cjs +239 -0
  134. package/dist/cjs/wagmi/host.native.js +320 -0
  135. package/dist/cjs/wagmi/host.native.js.map +1 -0
  136. package/dist/cjs/wagmi/index.cjs +28 -0
  137. package/dist/cjs/wagmi/index.native.js +31 -0
  138. package/dist/cjs/wagmi/index.native.js.map +1 -0
  139. package/dist/cjs/web.cjs +84 -0
  140. package/dist/esm/bridge/base58.mjs +23 -0
  141. package/dist/esm/bridge/base58.mjs.map +1 -0
  142. package/dist/esm/bridge/base58.native.js +23 -0
  143. package/dist/esm/bridge/base58.native.js.map +1 -0
  144. package/dist/esm/bridge/core.mjs +3 -2
  145. package/dist/esm/bridge/core.mjs.map +1 -1
  146. package/dist/esm/bridge/core.native.js +3 -2
  147. package/dist/esm/bridge/core.native.js.map +1 -1
  148. package/dist/esm/bridge/drivers.mjs +113 -0
  149. package/dist/esm/bridge/drivers.mjs.map +1 -0
  150. package/dist/esm/bridge/drivers.native.js +130 -0
  151. package/dist/esm/bridge/drivers.native.js.map +1 -0
  152. package/dist/esm/bridge/nativeHost.mjs +50 -11
  153. package/dist/esm/bridge/nativeHost.mjs.map +1 -1
  154. package/dist/esm/bridge/nativeHost.native.js +57 -11
  155. package/dist/esm/bridge/nativeHost.native.js.map +1 -1
  156. package/dist/esm/clients/adapter.mjs.map +1 -1
  157. package/dist/esm/clients/adapter.native.js.map +1 -1
  158. package/dist/esm/clients/connector.mjs.map +1 -1
  159. package/dist/esm/clients/connector.native.js.map +1 -1
  160. package/dist/esm/clients/evm.mjs +1 -0
  161. package/dist/esm/clients/evm.mjs.map +1 -1
  162. package/dist/esm/clients/evm.native.js +1 -0
  163. package/dist/esm/clients/evm.native.js.map +1 -1
  164. package/dist/esm/clients/evmRead.mjs +78 -0
  165. package/dist/esm/clients/evmRead.mjs.map +1 -0
  166. package/dist/esm/clients/evmRead.native.js +95 -0
  167. package/dist/esm/clients/evmRead.native.js.map +1 -0
  168. package/dist/esm/clients/hooks.mjs +38 -9
  169. package/dist/esm/clients/hooks.mjs.map +1 -1
  170. package/dist/esm/clients/hooks.native.js +44 -7
  171. package/dist/esm/clients/hooks.native.js.map +1 -1
  172. package/dist/esm/clients/index.mjs +4 -3
  173. package/dist/esm/clients/index.mjs.map +1 -1
  174. package/dist/esm/clients/index.native.js +4 -3
  175. package/dist/esm/clients/index.native.js.map +1 -1
  176. package/dist/esm/clients/types.mjs +7 -1
  177. package/dist/esm/clients/types.mjs.map +1 -1
  178. package/dist/esm/clients/types.native.js +14 -1
  179. package/dist/esm/clients/types.native.js.map +1 -1
  180. package/dist/esm/connectkit/adapters/BitcoinAdapter.mjs +44 -2
  181. package/dist/esm/connectkit/adapters/BitcoinAdapter.mjs.map +1 -1
  182. package/dist/esm/connectkit/adapters/BitcoinAdapter.native.js +73 -5
  183. package/dist/esm/connectkit/adapters/BitcoinAdapter.native.js.map +1 -1
  184. package/dist/esm/connectkit/adapters/SolanaAdapter.mjs +46 -0
  185. package/dist/esm/connectkit/adapters/SolanaAdapter.mjs.map +1 -1
  186. package/dist/esm/connectkit/adapters/SolanaAdapter.native.js +55 -0
  187. package/dist/esm/connectkit/adapters/SolanaAdapter.native.js.map +1 -1
  188. package/dist/esm/connectkit/adapters/SuiAdapter.mjs +40 -0
  189. package/dist/esm/connectkit/adapters/SuiAdapter.mjs.map +1 -1
  190. package/dist/esm/connectkit/adapters/SuiAdapter.native.js +50 -0
  191. package/dist/esm/connectkit/adapters/SuiAdapter.native.js.map +1 -1
  192. package/dist/esm/connectkit/connectors/ensureWalletConnectors.mjs +4 -1
  193. package/dist/esm/connectkit/connectors/ensureWalletConnectors.mjs.map +1 -1
  194. package/dist/esm/connectkit/connectors/ensureWalletConnectors.native.js +8 -1
  195. package/dist/esm/connectkit/connectors/ensureWalletConnectors.native.js.map +1 -1
  196. package/dist/esm/connectkit/connectors/getWalletConnectors.mjs.map +1 -1
  197. package/dist/esm/connectkit/connectors/getWalletConnectors.native.js.map +1 -1
  198. package/dist/esm/connectkit/connectors/syntheticChains.mjs.map +1 -1
  199. package/dist/esm/connectkit/connectors/syntheticChains.native.js.map +1 -1
  200. package/dist/esm/connectkit/connectors/walletAdapterConnector.mjs.map +1 -1
  201. package/dist/esm/connectkit/connectors/walletAdapterConnector.native.js.map +1 -1
  202. package/dist/esm/connectkit/defaultConfig.mjs +6 -3
  203. package/dist/esm/connectkit/defaultConfig.mjs.map +1 -1
  204. package/dist/esm/connectkit/defaultConfig.native.js +10 -3
  205. package/dist/esm/connectkit/defaultConfig.native.js.map +1 -1
  206. package/dist/esm/connectkit/siwe/SIWEContext.mjs.map +1 -1
  207. package/dist/esm/connectkit/siwe/SIWEContext.native.js.map +1 -1
  208. package/dist/esm/connectkit/siwe/SIWEProvider.mjs +6 -4
  209. package/dist/esm/connectkit/siwe/SIWEProvider.mjs.map +1 -1
  210. package/dist/esm/connectkit/siwe/SIWEProvider.native.js +8 -4
  211. package/dist/esm/connectkit/siwe/SIWEProvider.native.js.map +1 -1
  212. package/dist/esm/connectkit/siwe/connectIntent.mjs +54 -16
  213. package/dist/esm/connectkit/siwe/connectIntent.mjs.map +1 -1
  214. package/dist/esm/connectkit/siwe/connectIntent.native.js +98 -16
  215. package/dist/esm/connectkit/siwe/connectIntent.native.js.map +1 -1
  216. package/dist/esm/connectkit/siwe/useSIWE.mjs.map +1 -1
  217. package/dist/esm/connectkit/siwe/useSIWE.native.js.map +1 -1
  218. package/dist/esm/connectkit/web3Bridge.mjs +61 -16
  219. package/dist/esm/connectkit/web3Bridge.mjs.map +1 -1
  220. package/dist/esm/connectkit/web3Bridge.native.js +67 -18
  221. package/dist/esm/connectkit/web3Bridge.native.js.map +1 -1
  222. package/dist/esm/core/family.mjs +17 -0
  223. package/dist/esm/core/family.mjs.map +1 -1
  224. package/dist/esm/core/family.native.js +17 -0
  225. package/dist/esm/core/family.native.js.map +1 -1
  226. package/dist/esm/core/index.mjs +5 -3
  227. package/dist/esm/core/index.mjs.map +1 -1
  228. package/dist/esm/core/index.native.js +5 -3
  229. package/dist/esm/core/index.native.js.map +1 -1
  230. package/dist/esm/core/lightDriver.mjs +157 -0
  231. package/dist/esm/core/lightDriver.mjs.map +1 -0
  232. package/dist/esm/core/lightDriver.native.js +232 -0
  233. package/dist/esm/core/lightDriver.native.js.map +1 -0
  234. package/dist/esm/core/react.mjs +10 -1
  235. package/dist/esm/core/react.mjs.map +1 -1
  236. package/dist/esm/core/react.native.js +14 -1
  237. package/dist/esm/core/react.native.js.map +1 -1
  238. package/dist/esm/core/signIn.mjs +173 -0
  239. package/dist/esm/core/signIn.mjs.map +1 -0
  240. package/dist/esm/core/signIn.native.js +209 -0
  241. package/dist/esm/core/signIn.native.js.map +1 -0
  242. package/dist/esm/core/store.mjs +47 -2
  243. package/dist/esm/core/store.mjs.map +1 -1
  244. package/dist/esm/core/store.native.js +49 -2
  245. package/dist/esm/core/store.native.js.map +1 -1
  246. package/dist/esm/families/btc.mjs +19 -0
  247. package/dist/esm/families/btc.mjs.map +1 -0
  248. package/dist/esm/families/btc.native.js +21 -0
  249. package/dist/esm/families/btc.native.js.map +1 -0
  250. package/dist/esm/families/eth.mjs +32 -0
  251. package/dist/esm/families/eth.mjs.map +1 -0
  252. package/dist/esm/families/eth.native.js +33 -0
  253. package/dist/esm/families/eth.native.js.map +1 -0
  254. package/dist/esm/families/gpg.mjs +15 -0
  255. package/dist/esm/families/gpg.mjs.map +1 -0
  256. package/dist/esm/families/gpg.native.js +15 -0
  257. package/dist/esm/families/gpg.native.js.map +1 -0
  258. package/dist/esm/families/host.mjs +12 -0
  259. package/dist/esm/families/host.mjs.map +1 -0
  260. package/dist/esm/families/host.native.js +12 -0
  261. package/dist/esm/families/host.native.js.map +1 -0
  262. package/dist/esm/families/index.mjs +23 -0
  263. package/dist/esm/families/index.mjs.map +1 -0
  264. package/dist/esm/families/index.native.js +23 -0
  265. package/dist/esm/families/index.native.js.map +1 -0
  266. package/dist/esm/families/messages.mjs +32 -0
  267. package/dist/esm/families/messages.mjs.map +1 -0
  268. package/dist/esm/families/messages.native.js +34 -0
  269. package/dist/esm/families/messages.native.js.map +1 -0
  270. package/dist/esm/families/sol.mjs +30 -0
  271. package/dist/esm/families/sol.mjs.map +1 -0
  272. package/dist/esm/families/sol.native.js +36 -0
  273. package/dist/esm/families/sol.native.js.map +1 -0
  274. package/dist/esm/families/sui.mjs +23 -0
  275. package/dist/esm/families/sui.mjs.map +1 -0
  276. package/dist/esm/families/sui.native.js +25 -0
  277. package/dist/esm/families/sui.native.js.map +1 -0
  278. package/dist/esm/index.mjs +6 -3
  279. package/dist/esm/index.mjs.map +1 -1
  280. package/dist/esm/index.native.js +6 -3
  281. package/dist/esm/index.native.js.map +1 -1
  282. package/dist/esm/keycloak/keycloakWallet.mjs +13 -0
  283. package/dist/esm/keycloak/keycloakWallet.mjs.map +1 -1
  284. package/dist/esm/keycloak/keycloakWallet.native.js +15 -0
  285. package/dist/esm/keycloak/keycloakWallet.native.js.map +1 -1
  286. package/dist/esm/keycloak/useDirectLogin.mjs +10 -5
  287. package/dist/esm/keycloak/useDirectLogin.mjs.map +1 -1
  288. package/dist/esm/keycloak/useDirectLogin.native.js +12 -5
  289. package/dist/esm/keycloak/useDirectLogin.native.js.map +1 -1
  290. package/dist/esm/keycloak/useWalletLogin.mjs +16 -8
  291. package/dist/esm/keycloak/useWalletLogin.mjs.map +1 -1
  292. package/dist/esm/light/drivers.mjs +46 -0
  293. package/dist/esm/light/drivers.mjs.map +1 -0
  294. package/dist/esm/light/drivers.native.js +67 -0
  295. package/dist/esm/light/drivers.native.js.map +1 -0
  296. package/dist/esm/light/index.mjs +3 -0
  297. package/dist/esm/light/index.mjs.map +1 -0
  298. package/dist/esm/light/index.native.js +3 -0
  299. package/dist/esm/light/index.native.js.map +1 -0
  300. package/dist/esm/providers/WalletProvider.mjs +60 -19
  301. package/dist/esm/providers/WalletProvider.mjs.map +1 -1
  302. package/dist/esm/providers/WalletProvider.native.js +101 -59
  303. package/dist/esm/providers/WalletProvider.native.js.map +1 -1
  304. package/dist/esm/providers/families.mjs +27 -0
  305. package/dist/esm/providers/families.mjs.map +1 -0
  306. package/dist/esm/providers/families.native.js +30 -0
  307. package/dist/esm/providers/families.native.js.map +1 -0
  308. package/dist/esm/providers/index.mjs +2 -2
  309. package/dist/esm/providers/index.mjs.map +1 -1
  310. package/dist/esm/providers/index.native.js +2 -2
  311. package/dist/esm/providers/index.native.js.map +1 -1
  312. package/dist/esm/providers/walletConfig.mjs +40 -1
  313. package/dist/esm/providers/walletConfig.mjs.map +1 -1
  314. package/dist/esm/providers/walletConfig.native.js +67 -1
  315. package/dist/esm/providers/walletConfig.native.js.map +1 -1
  316. package/dist/esm/wagmi/driver.mjs +232 -0
  317. package/dist/esm/wagmi/driver.mjs.map +1 -0
  318. package/dist/esm/wagmi/driver.native.js +303 -0
  319. package/dist/esm/wagmi/driver.native.js.map +1 -0
  320. package/dist/esm/wagmi/host.mjs +213 -0
  321. package/dist/esm/wagmi/host.mjs.map +1 -0
  322. package/dist/esm/wagmi/host.native.js +291 -0
  323. package/dist/esm/wagmi/host.native.js.map +1 -0
  324. package/dist/esm/wagmi/index.mjs +3 -0
  325. package/dist/esm/wagmi/index.mjs.map +1 -0
  326. package/dist/esm/wagmi/index.native.js +3 -0
  327. package/dist/esm/wagmi/index.native.js.map +1 -0
  328. package/dist/esm/web.mjs +13 -0
  329. package/dist/esm/web.mjs.map +1 -0
  330. package/dist/jsx/bridge/base58.mjs +23 -0
  331. package/dist/jsx/bridge/base58.mjs.map +1 -0
  332. package/dist/jsx/bridge/base58.native.js +51 -0
  333. package/dist/jsx/bridge/base58.native.js.map +1 -0
  334. package/dist/jsx/bridge/core.mjs +3 -2
  335. package/dist/jsx/bridge/core.mjs.map +1 -1
  336. package/dist/jsx/bridge/core.native.js +5 -1
  337. package/dist/jsx/bridge/core.native.js.map +1 -1
  338. package/dist/jsx/bridge/drivers.mjs +113 -0
  339. package/dist/jsx/bridge/drivers.mjs.map +1 -0
  340. package/dist/jsx/bridge/drivers.native.js +161 -0
  341. package/dist/jsx/bridge/drivers.native.js.map +1 -0
  342. package/dist/jsx/bridge/nativeHost.mjs +50 -11
  343. package/dist/jsx/bridge/nativeHost.mjs.map +1 -1
  344. package/dist/jsx/bridge/nativeHost.native.js +56 -9
  345. package/dist/jsx/bridge/nativeHost.native.js.map +1 -1
  346. package/dist/jsx/clients/adapter.mjs.map +1 -1
  347. package/dist/jsx/clients/adapter.native.js.map +1 -1
  348. package/dist/jsx/clients/connector.mjs.map +1 -1
  349. package/dist/jsx/clients/connector.native.js.map +1 -1
  350. package/dist/jsx/clients/evm.mjs +1 -0
  351. package/dist/jsx/clients/evm.mjs.map +1 -1
  352. package/dist/jsx/clients/evm.native.js +1 -0
  353. package/dist/jsx/clients/evm.native.js.map +1 -1
  354. package/dist/jsx/clients/evmRead.mjs +78 -0
  355. package/dist/jsx/clients/evmRead.mjs.map +1 -0
  356. package/dist/jsx/clients/evmRead.native.js +124 -0
  357. package/dist/jsx/clients/evmRead.native.js.map +1 -0
  358. package/dist/jsx/clients/hooks.mjs +38 -9
  359. package/dist/jsx/clients/hooks.mjs.map +1 -1
  360. package/dist/jsx/clients/hooks.native.js +43 -5
  361. package/dist/jsx/clients/hooks.native.js.map +1 -1
  362. package/dist/jsx/clients/index.mjs +4 -3
  363. package/dist/jsx/clients/index.mjs.map +1 -1
  364. package/dist/jsx/clients/index.native.js +5 -0
  365. package/dist/jsx/clients/index.native.js.map +1 -1
  366. package/dist/jsx/clients/types.mjs +7 -1
  367. package/dist/jsx/clients/types.mjs.map +1 -1
  368. package/dist/jsx/clients/types.native.js +14 -0
  369. package/dist/jsx/clients/types.native.js.map +1 -1
  370. package/dist/jsx/connectkit/adapters/BitcoinAdapter.mjs +44 -2
  371. package/dist/jsx/connectkit/adapters/BitcoinAdapter.mjs.map +1 -1
  372. package/dist/jsx/connectkit/adapters/BitcoinAdapter.native.js +73 -5
  373. package/dist/jsx/connectkit/adapters/BitcoinAdapter.native.js.map +1 -1
  374. package/dist/jsx/connectkit/adapters/SolanaAdapter.mjs +46 -0
  375. package/dist/jsx/connectkit/adapters/SolanaAdapter.mjs.map +1 -1
  376. package/dist/jsx/connectkit/adapters/SolanaAdapter.native.js +55 -0
  377. package/dist/jsx/connectkit/adapters/SolanaAdapter.native.js.map +1 -1
  378. package/dist/jsx/connectkit/adapters/SuiAdapter.mjs +40 -0
  379. package/dist/jsx/connectkit/adapters/SuiAdapter.mjs.map +1 -1
  380. package/dist/jsx/connectkit/adapters/SuiAdapter.native.js +50 -0
  381. package/dist/jsx/connectkit/adapters/SuiAdapter.native.js.map +1 -1
  382. package/dist/jsx/connectkit/connectors/ensureWalletConnectors.mjs +4 -1
  383. package/dist/jsx/connectkit/connectors/ensureWalletConnectors.mjs.map +1 -1
  384. package/dist/jsx/connectkit/connectors/ensureWalletConnectors.native.js +8 -1
  385. package/dist/jsx/connectkit/connectors/ensureWalletConnectors.native.js.map +1 -1
  386. package/dist/jsx/connectkit/connectors/getWalletConnectors.mjs.map +1 -1
  387. package/dist/jsx/connectkit/connectors/getWalletConnectors.native.js.map +1 -1
  388. package/dist/jsx/connectkit/connectors/syntheticChains.mjs.map +1 -1
  389. package/dist/jsx/connectkit/connectors/syntheticChains.native.js.map +1 -1
  390. package/dist/jsx/connectkit/connectors/walletAdapterConnector.mjs.map +1 -1
  391. package/dist/jsx/connectkit/connectors/walletAdapterConnector.native.js.map +1 -1
  392. package/dist/jsx/connectkit/defaultConfig.mjs +6 -3
  393. package/dist/jsx/connectkit/defaultConfig.mjs.map +1 -1
  394. package/dist/jsx/connectkit/defaultConfig.native.js +9 -2
  395. package/dist/jsx/connectkit/defaultConfig.native.js.map +1 -1
  396. package/dist/jsx/connectkit/siwe/SIWEContext.mjs.map +1 -1
  397. package/dist/jsx/connectkit/siwe/SIWEContext.native.js.map +1 -1
  398. package/dist/jsx/connectkit/siwe/SIWEProvider.mjs +6 -4
  399. package/dist/jsx/connectkit/siwe/SIWEProvider.mjs.map +1 -1
  400. package/dist/jsx/connectkit/siwe/SIWEProvider.native.js +8 -4
  401. package/dist/jsx/connectkit/siwe/SIWEProvider.native.js.map +1 -1
  402. package/dist/jsx/connectkit/siwe/connectIntent.mjs +54 -16
  403. package/dist/jsx/connectkit/siwe/connectIntent.mjs.map +1 -1
  404. package/dist/jsx/connectkit/siwe/connectIntent.native.js +100 -16
  405. package/dist/jsx/connectkit/siwe/connectIntent.native.js.map +1 -1
  406. package/dist/jsx/connectkit/siwe/useSIWE.mjs.map +1 -1
  407. package/dist/jsx/connectkit/siwe/useSIWE.native.js.map +1 -1
  408. package/dist/jsx/connectkit/web3Bridge.mjs +61 -16
  409. package/dist/jsx/connectkit/web3Bridge.mjs.map +1 -1
  410. package/dist/jsx/connectkit/web3Bridge.native.js +64 -14
  411. package/dist/jsx/connectkit/web3Bridge.native.js.map +1 -1
  412. package/dist/jsx/core/family.mjs +17 -0
  413. package/dist/jsx/core/family.mjs.map +1 -1
  414. package/dist/jsx/core/family.native.js +17 -0
  415. package/dist/jsx/core/family.native.js.map +1 -1
  416. package/dist/jsx/core/index.mjs +5 -3
  417. package/dist/jsx/core/index.mjs.map +1 -1
  418. package/dist/jsx/core/index.native.js +10 -1
  419. package/dist/jsx/core/index.native.js.map +1 -1
  420. package/dist/jsx/core/lightDriver.mjs +157 -0
  421. package/dist/jsx/core/lightDriver.mjs.map +1 -0
  422. package/dist/jsx/core/lightDriver.native.js +260 -0
  423. package/dist/jsx/core/lightDriver.native.js.map +1 -0
  424. package/dist/jsx/core/react.mjs +10 -1
  425. package/dist/jsx/core/react.mjs.map +1 -1
  426. package/dist/jsx/core/react.native.js +16 -1
  427. package/dist/jsx/core/react.native.js.map +1 -1
  428. package/dist/jsx/core/signIn.mjs +173 -0
  429. package/dist/jsx/core/signIn.mjs.map +1 -0
  430. package/dist/jsx/core/signIn.native.js +240 -0
  431. package/dist/jsx/core/signIn.native.js.map +1 -0
  432. package/dist/jsx/core/store.mjs +47 -2
  433. package/dist/jsx/core/store.mjs.map +1 -1
  434. package/dist/jsx/core/store.native.js +49 -2
  435. package/dist/jsx/core/store.native.js.map +1 -1
  436. package/dist/jsx/families/btc.mjs +19 -0
  437. package/dist/jsx/families/btc.mjs.map +1 -0
  438. package/dist/jsx/families/btc.native.js +49 -0
  439. package/dist/jsx/families/btc.native.js.map +1 -0
  440. package/dist/jsx/families/eth.mjs +32 -0
  441. package/dist/jsx/families/eth.mjs.map +1 -0
  442. package/dist/jsx/families/eth.native.js +61 -0
  443. package/dist/jsx/families/eth.native.js.map +1 -0
  444. package/dist/jsx/families/gpg.mjs +15 -0
  445. package/dist/jsx/families/gpg.mjs.map +1 -0
  446. package/dist/jsx/families/gpg.native.js +43 -0
  447. package/dist/jsx/families/gpg.native.js.map +1 -0
  448. package/dist/jsx/families/host.mjs +12 -0
  449. package/dist/jsx/families/host.mjs.map +1 -0
  450. package/dist/jsx/families/host.native.js +41 -0
  451. package/dist/jsx/families/host.native.js.map +1 -0
  452. package/dist/jsx/families/index.mjs +23 -0
  453. package/dist/jsx/families/index.mjs.map +1 -0
  454. package/dist/jsx/families/index.native.js +56 -0
  455. package/dist/jsx/families/index.native.js.map +1 -0
  456. package/dist/jsx/families/messages.mjs +32 -0
  457. package/dist/jsx/families/messages.mjs.map +1 -0
  458. package/dist/jsx/families/messages.native.js +66 -0
  459. package/dist/jsx/families/messages.native.js.map +1 -0
  460. package/dist/jsx/families/sol.mjs +30 -0
  461. package/dist/jsx/families/sol.mjs.map +1 -0
  462. package/dist/jsx/families/sol.native.js +64 -0
  463. package/dist/jsx/families/sol.native.js.map +1 -0
  464. package/dist/jsx/families/sui.mjs +23 -0
  465. package/dist/jsx/families/sui.mjs.map +1 -0
  466. package/dist/jsx/families/sui.native.js +53 -0
  467. package/dist/jsx/families/sui.native.js.map +1 -0
  468. package/dist/jsx/index.js +6 -3
  469. package/dist/jsx/index.js.map +1 -1
  470. package/dist/jsx/index.mjs +6 -3
  471. package/dist/jsx/index.mjs.map +1 -1
  472. package/dist/jsx/index.native.js +21 -1
  473. package/dist/jsx/index.native.js.map +1 -1
  474. package/dist/jsx/keycloak/keycloakWallet.mjs +13 -0
  475. package/dist/jsx/keycloak/keycloakWallet.mjs.map +1 -1
  476. package/dist/jsx/keycloak/keycloakWallet.native.js +15 -0
  477. package/dist/jsx/keycloak/keycloakWallet.native.js.map +1 -1
  478. package/dist/jsx/keycloak/useDirectLogin.mjs +10 -5
  479. package/dist/jsx/keycloak/useDirectLogin.mjs.map +1 -1
  480. package/dist/jsx/keycloak/useDirectLogin.native.js +12 -5
  481. package/dist/jsx/keycloak/useDirectLogin.native.js.map +1 -1
  482. package/dist/jsx/keycloak/useWalletLogin.mjs +16 -8
  483. package/dist/jsx/keycloak/useWalletLogin.mjs.map +1 -1
  484. package/dist/jsx/light/drivers.mjs +46 -0
  485. package/dist/jsx/light/drivers.mjs.map +1 -0
  486. package/dist/jsx/light/drivers.native.js +97 -0
  487. package/dist/jsx/light/drivers.native.js.map +1 -0
  488. package/dist/jsx/light/index.mjs +3 -0
  489. package/dist/jsx/light/index.mjs.map +1 -0
  490. package/dist/jsx/light/index.native.js +33 -0
  491. package/dist/jsx/light/index.native.js.map +1 -0
  492. package/dist/jsx/providers/WalletProvider.mjs +60 -19
  493. package/dist/jsx/providers/WalletProvider.mjs.map +1 -1
  494. package/dist/jsx/providers/WalletProvider.native.js +99 -56
  495. package/dist/jsx/providers/WalletProvider.native.js.map +1 -1
  496. package/dist/jsx/providers/families.mjs +27 -0
  497. package/dist/jsx/providers/families.mjs.map +1 -0
  498. package/dist/jsx/providers/families.native.js +59 -0
  499. package/dist/jsx/providers/families.native.js.map +1 -0
  500. package/dist/jsx/providers/index.mjs +2 -2
  501. package/dist/jsx/providers/index.mjs.map +1 -1
  502. package/dist/jsx/providers/index.native.js +1 -0
  503. package/dist/jsx/providers/index.native.js.map +1 -1
  504. package/dist/jsx/providers/walletConfig.mjs +40 -1
  505. package/dist/jsx/providers/walletConfig.mjs.map +1 -1
  506. package/dist/jsx/providers/walletConfig.native.js +68 -0
  507. package/dist/jsx/providers/walletConfig.native.js.map +1 -1
  508. package/dist/jsx/wagmi/driver.mjs +232 -0
  509. package/dist/jsx/wagmi/driver.mjs.map +1 -0
  510. package/dist/jsx/wagmi/driver.native.js +331 -0
  511. package/dist/jsx/wagmi/driver.native.js.map +1 -0
  512. package/dist/jsx/wagmi/host.mjs +213 -0
  513. package/dist/jsx/wagmi/host.mjs.map +1 -0
  514. package/dist/jsx/wagmi/host.native.js +320 -0
  515. package/dist/jsx/wagmi/host.native.js.map +1 -0
  516. package/dist/jsx/wagmi/index.mjs +3 -0
  517. package/dist/jsx/wagmi/index.mjs.map +1 -0
  518. package/dist/jsx/wagmi/index.native.js +31 -0
  519. package/dist/jsx/wagmi/index.native.js.map +1 -0
  520. package/dist/jsx/web.mjs +13 -0
  521. package/dist/jsx/web.mjs.map +1 -0
  522. package/dist/keycloak/login.iife.js +449 -443
  523. package/docs/bridge-protocol.md +41 -14
  524. package/package.json +13 -6
  525. package/src/bridge/base58.spec.ts +18 -0
  526. package/src/bridge/base58.ts +25 -0
  527. package/src/bridge/core.ts +2 -0
  528. package/src/bridge/drivers.spec.ts +283 -0
  529. package/src/bridge/drivers.ts +155 -0
  530. package/src/bridge/index.spec.ts +3 -0
  531. package/src/bridge/nativeHost.spec.ts +139 -15
  532. package/src/bridge/nativeHost.ts +84 -14
  533. package/src/bundler/metaMaskConnectTimeouts.spec.ts +3 -0
  534. package/src/clients/adapter.ts +5 -1
  535. package/src/clients/connector.ts +2 -0
  536. package/src/clients/evm.spec.ts +8 -0
  537. package/src/clients/evm.ts +3 -0
  538. package/src/clients/evmRead.spec.ts +180 -0
  539. package/src/clients/evmRead.ts +140 -0
  540. package/src/clients/hooks.spec.tsx +58 -0
  541. package/src/clients/hooks.ts +73 -14
  542. package/src/clients/index.ts +11 -1
  543. package/src/clients/types.ts +15 -1
  544. package/src/clients/useEvmReadClient.spec.tsx +93 -0
  545. package/src/connectkit/adapters/BitcoinAdapter.ts +64 -4
  546. package/src/connectkit/adapters/SolanaAdapter.ts +49 -0
  547. package/src/connectkit/adapters/SuiAdapter.ts +47 -1
  548. package/src/connectkit/connectors/ensureWalletConnectors.ts +10 -1
  549. package/src/connectkit/connectors/getWalletConnectors.ts +2 -0
  550. package/src/connectkit/connectors/syntheticChains.ts +8 -0
  551. package/src/connectkit/connectors/walletAdapterConnector.ts +2 -0
  552. package/src/connectkit/defaultConfig.ts +21 -7
  553. package/src/connectkit/siwe/SIWEContext.tsx +3 -0
  554. package/src/connectkit/siwe/SIWEProvider.spec.tsx +109 -0
  555. package/src/connectkit/siwe/SIWEProvider.tsx +16 -7
  556. package/src/connectkit/siwe/connectIntent.spec.ts +100 -30
  557. package/src/connectkit/siwe/connectIntent.ts +99 -25
  558. package/src/connectkit/siwe/useSIWE.ts +4 -1
  559. package/src/connectkit/web3Bridge.tsx +75 -15
  560. package/src/core/family.spec.ts +19 -0
  561. package/src/core/family.ts +43 -0
  562. package/src/core/imports.spec.ts +1 -1
  563. package/src/core/index.ts +23 -0
  564. package/src/core/lightDriver.spec.ts +284 -0
  565. package/src/core/lightDriver.ts +235 -0
  566. package/src/core/react.ts +18 -0
  567. package/src/core/signIn.spec.tsx +305 -0
  568. package/src/core/signIn.ts +282 -0
  569. package/src/core/store.spec.ts +83 -0
  570. package/src/core/store.ts +60 -9
  571. package/src/core/types.ts +15 -1
  572. package/src/families/btc.ts +16 -0
  573. package/src/families/eth.ts +35 -0
  574. package/src/families/families.spec.ts +180 -0
  575. package/src/families/gpg.ts +13 -0
  576. package/src/families/host.ts +34 -0
  577. package/src/families/index.ts +32 -0
  578. package/src/families/messages.ts +39 -0
  579. package/src/families/sol.ts +25 -0
  580. package/src/families/sui.ts +17 -0
  581. package/src/index.ts +38 -1
  582. package/src/keycloak/KeycloakWalletLogin.spec.tsx +211 -4
  583. package/src/keycloak/keycloakWallet.spec.ts +81 -1
  584. package/src/keycloak/keycloakWallet.ts +24 -2
  585. package/src/keycloak/useDirectLogin.spec.tsx +77 -4
  586. package/src/keycloak/useDirectLogin.ts +23 -11
  587. package/src/keycloak/useWalletLogin.spec.tsx +52 -0
  588. package/src/keycloak/useWalletLogin.ts +24 -6
  589. package/src/light/drivers.spec.ts +330 -0
  590. package/src/light/drivers.ts +54 -0
  591. package/src/light/index.ts +1 -0
  592. package/src/light/native.spec.ts +22 -0
  593. package/src/providers/WalletProvider.native.spec.tsx +288 -0
  594. package/src/providers/WalletProvider.native.tsx +132 -59
  595. package/src/providers/WalletProvider.spec.tsx +521 -0
  596. package/src/providers/WalletProvider.tsx +90 -19
  597. package/src/providers/families.tsx +39 -0
  598. package/src/providers/index.ts +3 -0
  599. package/src/providers/walletConfig.spec.ts +19 -1
  600. package/src/providers/walletConfig.ts +80 -2
  601. package/src/wagmi/driver.spec.ts +407 -0
  602. package/src/wagmi/driver.ts +303 -0
  603. package/src/wagmi/host.spec.tsx +416 -0
  604. package/src/wagmi/host.tsx +260 -0
  605. package/src/wagmi/index.ts +1 -0
  606. package/src/web.spec.ts +58 -0
  607. package/src/web.ts +82 -0
  608. package/types/bridge/base58.d.ts +2 -0
  609. package/types/bridge/base58.d.ts.map +1 -0
  610. package/types/bridge/core.d.ts +2 -1
  611. package/types/bridge/core.d.ts.map +1 -1
  612. package/types/bridge/drivers.d.ts +24 -0
  613. package/types/bridge/drivers.d.ts.map +1 -0
  614. package/types/bridge/nativeHost.d.ts +34 -4
  615. package/types/bridge/nativeHost.d.ts.map +1 -1
  616. package/types/clients/adapter.d.ts +5 -1
  617. package/types/clients/adapter.d.ts.map +1 -1
  618. package/types/clients/connector.d.ts +2 -0
  619. package/types/clients/connector.d.ts.map +1 -1
  620. package/types/clients/evm.d.ts +2 -0
  621. package/types/clients/evm.d.ts.map +1 -1
  622. package/types/clients/evmRead.d.ts +54 -0
  623. package/types/clients/evmRead.d.ts.map +1 -0
  624. package/types/clients/hooks.d.ts +23 -3
  625. package/types/clients/hooks.d.ts.map +1 -1
  626. package/types/clients/index.d.ts +4 -2
  627. package/types/clients/index.d.ts.map +1 -1
  628. package/types/clients/types.d.ts +11 -1
  629. package/types/clients/types.d.ts.map +1 -1
  630. package/types/connectkit/adapters/BitcoinAdapter.d.ts +9 -0
  631. package/types/connectkit/adapters/BitcoinAdapter.d.ts.map +1 -1
  632. package/types/connectkit/adapters/SolanaAdapter.d.ts +12 -0
  633. package/types/connectkit/adapters/SolanaAdapter.d.ts.map +1 -1
  634. package/types/connectkit/adapters/SuiAdapter.d.ts +8 -0
  635. package/types/connectkit/adapters/SuiAdapter.d.ts.map +1 -1
  636. package/types/connectkit/connectors/ensureWalletConnectors.d.ts +3 -0
  637. package/types/connectkit/connectors/ensureWalletConnectors.d.ts.map +1 -1
  638. package/types/connectkit/connectors/getWalletConnectors.d.ts +2 -0
  639. package/types/connectkit/connectors/getWalletConnectors.d.ts.map +1 -1
  640. package/types/connectkit/connectors/syntheticChains.d.ts +8 -0
  641. package/types/connectkit/connectors/syntheticChains.d.ts.map +1 -1
  642. package/types/connectkit/connectors/walletAdapterConnector.d.ts +2 -0
  643. package/types/connectkit/connectors/walletAdapterConnector.d.ts.map +1 -1
  644. package/types/connectkit/defaultConfig.d.ts +2 -1
  645. package/types/connectkit/defaultConfig.d.ts.map +1 -1
  646. package/types/connectkit/siwe/SIWEContext.d.ts.map +1 -1
  647. package/types/connectkit/siwe/SIWEProvider.d.ts +6 -0
  648. package/types/connectkit/siwe/SIWEProvider.d.ts.map +1 -1
  649. package/types/connectkit/siwe/connectIntent.d.ts +16 -5
  650. package/types/connectkit/siwe/connectIntent.d.ts.map +1 -1
  651. package/types/connectkit/siwe/useSIWE.d.ts +4 -0
  652. package/types/connectkit/siwe/useSIWE.d.ts.map +1 -1
  653. package/types/connectkit/web3Bridge.d.ts +2 -0
  654. package/types/connectkit/web3Bridge.d.ts.map +1 -1
  655. package/types/core/family.d.ts +26 -0
  656. package/types/core/family.d.ts.map +1 -1
  657. package/types/core/index.d.ts +6 -4
  658. package/types/core/index.d.ts.map +1 -1
  659. package/types/core/lightDriver.d.ts +52 -0
  660. package/types/core/lightDriver.d.ts.map +1 -0
  661. package/types/core/react.d.ts +4 -0
  662. package/types/core/react.d.ts.map +1 -1
  663. package/types/core/signIn.d.ts +85 -0
  664. package/types/core/signIn.d.ts.map +1 -0
  665. package/types/core/store.d.ts +12 -3
  666. package/types/core/store.d.ts.map +1 -1
  667. package/types/core/types.d.ts +14 -1
  668. package/types/core/types.d.ts.map +1 -1
  669. package/types/families/btc.d.ts +4 -0
  670. package/types/families/btc.d.ts.map +1 -0
  671. package/types/families/eth.d.ts +13 -0
  672. package/types/families/eth.d.ts.map +1 -0
  673. package/types/families/gpg.d.ts +4 -0
  674. package/types/families/gpg.d.ts.map +1 -0
  675. package/types/families/host.d.ts +24 -0
  676. package/types/families/host.d.ts.map +1 -0
  677. package/types/families/index.d.ts +14 -0
  678. package/types/families/index.d.ts.map +1 -0
  679. package/types/families/messages.d.ts +7 -0
  680. package/types/families/messages.d.ts.map +1 -0
  681. package/types/families/sol.d.ts +9 -0
  682. package/types/families/sol.d.ts.map +1 -0
  683. package/types/families/sui.d.ts +4 -0
  684. package/types/families/sui.d.ts.map +1 -0
  685. package/types/index.d.ts +5 -2
  686. package/types/index.d.ts.map +1 -1
  687. package/types/keycloak/keycloakWallet.d.ts +15 -2
  688. package/types/keycloak/keycloakWallet.d.ts.map +1 -1
  689. package/types/keycloak/useDirectLogin.d.ts +11 -6
  690. package/types/keycloak/useDirectLogin.d.ts.map +1 -1
  691. package/types/keycloak/useWalletLogin.d.ts +8 -1
  692. package/types/keycloak/useWalletLogin.d.ts.map +1 -1
  693. package/types/light/drivers.d.ts +13 -0
  694. package/types/light/drivers.d.ts.map +1 -0
  695. package/types/light/index.d.ts +2 -0
  696. package/types/light/index.d.ts.map +1 -0
  697. package/types/providers/WalletProvider.d.ts +37 -6
  698. package/types/providers/WalletProvider.d.ts.map +1 -1
  699. package/types/providers/WalletProvider.native.d.ts +32 -3
  700. package/types/providers/WalletProvider.native.d.ts.map +1 -1
  701. package/types/providers/families.d.ts +12 -0
  702. package/types/providers/families.d.ts.map +1 -0
  703. package/types/providers/index.d.ts +1 -1
  704. package/types/providers/index.d.ts.map +1 -1
  705. package/types/providers/walletConfig.d.ts +32 -2
  706. package/types/providers/walletConfig.d.ts.map +1 -1
  707. package/types/wagmi/driver.d.ts +44 -0
  708. package/types/wagmi/driver.d.ts.map +1 -0
  709. package/types/wagmi/host.d.ts +31 -0
  710. package/types/wagmi/host.d.ts.map +1 -0
  711. package/types/wagmi/index.d.ts +2 -0
  712. package/types/wagmi/index.d.ts.map +1 -0
  713. package/types/web.d.ts +13 -0
  714. package/types/web.d.ts.map +1 -0
@@ -77,7 +77,12 @@ The React Native host in this package is looser than this section asks:
77
77
  react-native-webview reports the sending frame's URL but not whether it is
78
78
  the top frame, so it accepts same-origin frames, and on an Android WebView
79
79
  without `WEB_MESSAGE_LISTENER` it sees the top frame's URL for every frame.
80
- The origin check in the delivery script still holds there.
80
+ The origin check in the delivery script still holds there. Navigations are
81
+ the same on Android: react-native-webview leaves `isTopFrame` out of
82
+ `onShouldStartLoadWithRequest`, or hardcodes it to true on its fallback path
83
+ (`TopShouldStartLoadWithRequestEvent.kt`), so every navigation Android asks
84
+ about counts as the top frame and the sub-frame rule in section 5 never runs
85
+ there. A sub-frame navigation to another web origin goes to the OS.
81
86
 
82
87
  **Android (Kotlin).** Receive page messages with
83
88
  `WebViewCompat.addWebMessageListener(webView, "ReactNativeWebView", setOf(pageOrigin), listener)`,
@@ -194,7 +199,8 @@ Event:
194
199
  it answers `-32601`.
195
200
  4. On a reload the page sends `ready` again. Requests in flight when the page
196
201
  went away never get an answer: fail them on the host (a reload, a crash,
197
- `onRenderProcessGone` / `webViewWebContentProcessDidTerminate`).
202
+ `onRenderProcessGone` / `webViewWebContentProcessDidTerminate`), and
203
+ close anything showing the page, since the reloaded page starts closed.
198
204
  5. When the app returns to the foreground (typically back from a wallet app)
199
205
  the host sends `sys.resync` so the page re-reports account state.
200
206
 
@@ -233,10 +239,17 @@ tokens, and a foreign page would receive them. Android does not ask
233
239
  `shouldOverrideUrlLoading` about a POST (a form with `target=_top`), so also
234
240
  watch the top frame start loading (`onPageStarted` /
235
241
  `didStartProvisionalNavigation`): a document on another origin means the page
236
- is gone. Fail what is in flight and deliver nothing until the next
237
- `sys.ready`, then load the page's URL again (not a reload, which would reload
238
- the foreign document), twice at most until the page announces itself. Sub-frame loads are the page's business; allow them
239
- unless they are wallet links.
242
+ is gone. Fail what is in flight, deliver nothing until the next
243
+ `sys.ready`, and close anything showing the page: the page that comes back
244
+ has none of its old state. Then load the page's URL again (not a reload,
245
+ which would reload the foreign document). Count one reload per foreign
246
+ document: until the page's own URL starts loading, a further foreign report
247
+ is the same document (Android reports a pushState or a client redirect
248
+ again). Twice at most until the page announces itself; after that stop
249
+ loading it, drop the foreign document, fail every request at once with
250
+ `-33002`, and try again only on a user action such as the app returning to
251
+ the foreground. Sub-frame loads
252
+ are the page's business; allow them unless they are wallet links.
240
253
 
241
254
  New windows (`window.open`, `target=_blank`; `onCreateWindow` /
242
255
  `createWebViewWith`) never open in the app: wallet links and `http`/`https`
@@ -274,6 +287,14 @@ redirect, whose `code` is the host's. MetaMask Connect needs only the
274
287
 
275
288
  `evm` errors are whatever the wallet's EIP-1193 provider threw, with its code.
276
289
 
290
+ The host raises two more codes to its own callers when the page cannot
291
+ answer. They never cross the wire.
292
+
293
+ | code | meaning |
294
+ | -------- | ---------------------------------------------------------------------------------------- |
295
+ | `-33001` | the page went away (a reload, a crash, a foreign document) before it answered; retry |
296
+ | `-33002` | the host stopped loading the page back (section 5); requests fail at once until it tries |
297
+
277
298
  ## 7. Namespaces
278
299
 
279
300
  ### `sys`
@@ -315,26 +336,32 @@ Events: `accountsChanged` (array of addresses), `chainChanged` (hex chain id),
315
336
 
316
337
  | method | params | result |
317
338
  | --------------------- | ------------------------------ | --------------------------------------------- |
339
+ | `account` | none | `{ "publicKey": base58 \| null }` |
318
340
  | `connect` | none | `{ "publicKey": base58 }` |
319
341
  | `disconnect` | none | `null` |
320
342
  | `signMessage` | `{ "message": base64 }` | `{ "signature": base64 }` (ed25519, 64 bytes) |
321
343
  | `signTransaction` | `{ "transaction": base64 }` | `{ "transaction": base64 }` |
322
344
  | `signAllTransactions` | `{ "transactions": [base64] }` | `{ "transactions": [base64] }` |
323
345
 
324
- Transactions are serialized legacy or versioned transactions. Event:
325
- `accountChanged` with `{ "publicKey": base58 | null }`.
346
+ `account` never prompts: it answers the connected wallet's key, or reconnects
347
+ one that already trusts the page, or answers null. A page older than this
348
+ method answers it with an error. Transactions are serialized legacy or
349
+ versioned transactions. Event: `accountChanged` with
350
+ `{ "publicKey": base58 | null }`.
326
351
 
327
352
  ### `sui`
328
353
 
329
- | method | params | result |
330
- | ------------- | ----------------------- | ------------------------- |
331
- | `connect` | none | `{ "address": "0x…" }` |
332
- | `disconnect` | none | `null` |
333
- | `signMessage` | `{ "message": string }` | `{ "signature": base64 }` |
354
+ | method | params | result |
355
+ | ------------- | ----------------------- | ------------------------------ |
356
+ | `account` | none | `{ "address": "0x…" \| null }` |
357
+ | `connect` | none | `{ "address": "0x…" }` |
358
+ | `disconnect` | none | `null` |
359
+ | `signMessage` | `{ "message": string }` | `{ "signature": base64 }` |
334
360
 
335
361
  `message` is UTF-8 text, signed as a Sui personal message. `signature` is
336
362
  Sui's serialized signature (flag, signature, public key), the form the
337
- Keycloak Sui verifier takes. `signMessage` connects first when needed. Event:
363
+ Keycloak Sui verifier takes. `signMessage` connects first when needed, and
364
+ `account` never prompts, as on `solana`. Event:
338
365
  `accountChanged` with `{ "address": string | null }`.
339
366
 
340
367
  ```json
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@multiplatform.one/web3",
3
- "version": "7.26.0",
3
+ "version": "7.28.1",
4
4
  "description": "Web3 wallet integration for multiplatform.one ecosystem with ConnectKit and wagmi",
5
5
  "keywords": [
6
6
  "connectkit",
@@ -54,6 +54,12 @@
54
54
  "require": "./dist/cjs/index.native.js",
55
55
  "default": "./dist/esm/index.native.js"
56
56
  },
57
+ "./web": {
58
+ "source": "./src/web.ts",
59
+ "types": "./types/web.d.ts",
60
+ "import": "./dist/esm/web.mjs",
61
+ "require": "./dist/cjs/web.cjs"
62
+ },
57
63
  "./bridge": {
58
64
  "source": "./src/bridge/core.ts",
59
65
  "react-native": "./src/bridge/core.ts",
@@ -107,10 +113,10 @@
107
113
  "dependencies": {
108
114
  "@aave/account": "^0.2.0",
109
115
  "@metamask/connect-evm": "^2.1.1",
110
- "@multiplatform.one/connectkit": "7.26.0",
111
- "@multiplatform.one/gpg": "7.26.0",
112
- "@multiplatform.one/platform": "7.26.0",
113
- "@multiplatform.one/theme": "7.26.0",
116
+ "@multiplatform.one/connectkit": "7.28.1",
117
+ "@multiplatform.one/gpg": "7.28.1",
118
+ "@multiplatform.one/platform": "7.28.1",
119
+ "@multiplatform.one/theme": "7.28.1",
114
120
  "@noble/curves": "^1.9.7",
115
121
  "@solana/kit": "^8.3.0",
116
122
  "@solana/wallet-adapter-base": "^0.9.27",
@@ -134,7 +140,7 @@
134
140
  "wagmi": "^3.7.1"
135
141
  },
136
142
  "devDependencies": {
137
- "@multiplatform.one/config": "7.26.0",
143
+ "@multiplatform.one/config": "7.28.1",
138
144
  "@tamagui/build": "2.7.6",
139
145
  "@tanstack/react-query": "^5.100.7",
140
146
  "@testing-library/jest-dom": "^6.9.1",
@@ -174,6 +180,7 @@
174
180
  "build:webview": "vite build --config webview/vite.config.ts && mv -f assets/index.html assets/webview.html && node scripts/verify-no-walletconnect.mjs assets/webview.html",
175
181
  "build:mock-wallet": "vite build --config webview-mock-wallet/vite.config.ts && mv -f assets/index.html assets/mock-wallet.html",
176
182
  "test:iife": "vite build --config keycloak-login/vite.config.ts && node scripts/verify-no-walletconnect.mjs dist/keycloak/login.iife.js && vitest run --config keycloak-login/vitest.config.mjs",
183
+ "test:web-entry": "vitest run --config web-entry/vitest.config.mjs",
177
184
  "test": "vitest run --coverage --coverage.provider=v8 --coverage.reporter=text --coverage.reporter=lcov --coverage.reporter=html"
178
185
  }
179
186
  }
@@ -0,0 +1,18 @@
1
+ import bs58 from "bs58";
2
+ import { describe, expect, it } from "vitest";
3
+ import { bytesToBase58 } from "./base58";
4
+
5
+ describe("bytesToBase58", () => {
6
+ it("matches bs58 on keys, signatures, leading zeros and the empty input", () => {
7
+ const samples = [
8
+ new Uint8Array([]),
9
+ new Uint8Array([0]),
10
+ new Uint8Array([0, 0, 1, 2, 255]),
11
+ new Uint8Array(32).fill(255),
12
+ ...Array.from({ length: 50 }, (_, n) =>
13
+ crypto.getRandomValues(new Uint8Array(n % 2 ? 64 : 32)),
14
+ ),
15
+ ];
16
+ for (const bytes of samples) expect(bytesToBase58(bytes)).toBe(bs58.encode(bytes));
17
+ });
18
+ });
@@ -0,0 +1,25 @@
1
+ // Pure-JS base58 (the Bitcoin alphabet Solana uses) for the native side, where
2
+ // bs58's ESM-only build does not load under Hermes.
3
+
4
+ const ALPHABET = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";
5
+
6
+ export function bytesToBase58(bytes: Uint8Array): string {
7
+ let zeros = 0;
8
+ while (zeros < bytes.length && bytes[zeros] === 0) zeros += 1;
9
+ const digits: number[] = [];
10
+ for (let i = zeros; i < bytes.length; i += 1) {
11
+ let carry = bytes[i];
12
+ for (let j = 0; j < digits.length; j += 1) {
13
+ carry += digits[j] << 8;
14
+ digits[j] = carry % 58;
15
+ carry = Math.floor(carry / 58);
16
+ }
17
+ while (carry > 0) {
18
+ digits.push(carry % 58);
19
+ carry = Math.floor(carry / 58);
20
+ }
21
+ }
22
+ let out = "1".repeat(zeros);
23
+ for (let i = digits.length - 1; i >= 0; i -= 1) out += ALPHABET[digits[i]];
24
+ return out;
25
+ }
@@ -11,6 +11,7 @@ export { bytesToBase64, base64ToBytes } from "./base64";
11
11
  export { SolanaBridge } from "./SolanaBridge";
12
12
  export { SuiBridge } from "./SuiBridge";
13
13
  export { GpgBridge, type GpgPendingRequest } from "./GpgBridge";
14
+ export { solanaBridgeDriver, suiBridgeDriver, type SolanaBridgeDriverOptions } from "./drivers";
14
15
  export {
15
16
  AuthBridge,
16
17
  type AuthBridgeOptions,
@@ -28,6 +29,7 @@ export {
28
29
  export {
29
30
  buildInjectScript,
30
31
  createNativeBridge,
32
+ NativeBridgeErrorCode,
31
33
  type NativeBridge,
32
34
  type NativeBridgeOptions,
33
35
  } from "./nativeHost";
@@ -0,0 +1,283 @@
1
+ import bs58 from "bs58";
2
+ import { describe, expect, it } from "vitest";
3
+ import {
4
+ createWallets,
5
+ describeConnectionDriver,
6
+ type DriverHarness,
7
+ type Wallets,
8
+ } from "../../tests/core/driverContract";
9
+ import { registerSolanaHandler, type SolanaByteSigner } from "../../webview/handlers/solana";
10
+ import { registerSuiHandler, type SuiMessageSigner } from "../../webview/handlers/sui";
11
+ import { createMockSolanaSigner } from "../../webview/wiring/mockSolanaSigner";
12
+ import { createMockSuiSigner } from "../../webview/wiring/mockSuiSigner";
13
+ import { solanaMessageClient } from "../clients/solanaMessage";
14
+ import { suiClient } from "../clients/sui";
15
+ import { lightDriver, type LightWallet } from "../core/lightDriver";
16
+ import { verifySiwsSignature } from "../siws/verify";
17
+ import { BridgeClient } from "./BridgeClient";
18
+ import { BridgeHost } from "./BridgeHost";
19
+ import {
20
+ solanaBridgeDriver,
21
+ solanaBridgeWallet,
22
+ suiBridgeDriver,
23
+ suiBridgeWallet,
24
+ } from "./drivers";
25
+ import { createMemoryTransportPair } from "./transport";
26
+
27
+ const utf8 = (text: string) => new TextEncoder().encode(text);
28
+ const signed = (address: string, message: string) => `signed:${address}:${message}`;
29
+
30
+ /** The page side of one scripted wallet: what the hosted page's signer does for it. */
31
+ function pageWallet(wallets: Wallets, id: string) {
32
+ let listener: ((address: string | null) => void) | null = null;
33
+ const wallet = () => wallets.get(id);
34
+ return {
35
+ current: () => (wallet().open ? wallet().address : null),
36
+ async connect() {
37
+ await wallets.answer(id, "prompt");
38
+ wallet().authorized = true;
39
+ wallet().open = true;
40
+ return wallet().address;
41
+ },
42
+ async restore() {
43
+ if (wallet().open) return wallet().address;
44
+ if (!wallet().authorized) return null;
45
+ await wallets.answer(id, "restore");
46
+ wallet().open = true;
47
+ return wallet().address;
48
+ },
49
+ async disconnect() {
50
+ wallet().open = false;
51
+ },
52
+ onAccountChanged(next: (address: string | null) => void) {
53
+ listener = next;
54
+ return () => {
55
+ listener = null;
56
+ };
57
+ },
58
+ emit: (address: string | null) => listener?.(address),
59
+ };
60
+ }
61
+
62
+ function solanaPage(wallets: Wallets, id: string, host: BridgeHost) {
63
+ const page = pageWallet(wallets, id);
64
+ const signer: SolanaByteSigner = {
65
+ getPublicKey: page.current,
66
+ connect: async () => ({ publicKey: await page.connect() }),
67
+ restore: page.restore,
68
+ disconnect: page.disconnect,
69
+ async signMessage(message) {
70
+ const address = page.current();
71
+ if (!address) throw new Error("not connected");
72
+ return utf8(signed(address, new TextDecoder().decode(message)));
73
+ },
74
+ signTransaction: async () => Promise.reject(new Error("unsupported")),
75
+ signAllTransactions: async () => Promise.reject(new Error("unsupported")),
76
+ onAccountChanged: page.onAccountChanged,
77
+ };
78
+ registerSolanaHandler(host, signer);
79
+ return page;
80
+ }
81
+
82
+ function suiPage(wallets: Wallets, id: string, host: BridgeHost) {
83
+ const page = pageWallet(wallets, id);
84
+ const signer: SuiMessageSigner = {
85
+ getAddress: page.current,
86
+ connect: async () => ({ address: await page.connect() }),
87
+ restore: page.restore,
88
+ disconnect: page.disconnect,
89
+ async signMessage(message) {
90
+ const address = page.current();
91
+ if (!address) throw new Error("not connected");
92
+ return signed(address, message);
93
+ },
94
+ onAccountChanged: page.onAccountChanged,
95
+ };
96
+ registerSuiHandler(host, signer);
97
+ return page;
98
+ }
99
+
100
+ /** A page per wallet, each on its own bridge, so one light driver drives three bridge wallets. */
101
+ function harness(family: "solana" | "sui") {
102
+ const addresses =
103
+ family === "solana"
104
+ ? {
105
+ phantom: "7EcDhSYGxXyscszYEp35KHN8vvw3svAuLKTzXwCFLtV",
106
+ solflare: "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin",
107
+ backpack: "DRpbCBMxVnDK7maPM5tGv6MvB3v1sRMC86PZ8okm21hy",
108
+ }
109
+ : {
110
+ phantom: `0x${"a1".repeat(32)}`,
111
+ solflare: `0x${"b2".repeat(32)}`,
112
+ backpack: `0x${"c3".repeat(32)}`,
113
+ };
114
+ const other =
115
+ family === "solana" ? "GLoWMgcn3VbyFKiC2FGMgfKxYSyTJS7uKFwKY2CSkq9X" : `0x${"d4".repeat(32)}`;
116
+ const wallets = createWallets(addresses);
117
+ const ids = Object.keys(addresses);
118
+ const pages = new Map<string, ReturnType<typeof pageWallet>>();
119
+ const clients = new Map<string, BridgeClient>();
120
+ for (const id of ids) {
121
+ const { a, b } = createMemoryTransportPair();
122
+ const host = new BridgeHost(b);
123
+ pages.set(id, family === "solana" ? solanaPage(wallets, id, host) : suiPage(wallets, id, host));
124
+ clients.set(id, new BridgeClient(a));
125
+ }
126
+ const build = () => {
127
+ const list: LightWallet[] = ids.map((id) =>
128
+ family === "solana"
129
+ ? solanaBridgeWallet(clients.get(id)!, { id, name: id })
130
+ : suiBridgeWallet(clients.get(id)!, { id, name: id }),
131
+ );
132
+ return lightDriver({
133
+ wallets: () => list,
134
+ chainId: family === "solana" ? "solana:mainnet" : "sui:mainnet",
135
+ client: (wallet) =>
136
+ family === "solana" ? solanaMessageClient(wallet.adapter) : suiClient(wallet.adapter),
137
+ });
138
+ };
139
+ const result: DriverHarness = {
140
+ driver: build(),
141
+ wallets,
142
+ first: "phantom",
143
+ second: "solflare",
144
+ third: "backpack",
145
+ otherAddress: other,
146
+ multiple: true,
147
+ normalize: (address) => address,
148
+ switchAccount(id, address) {
149
+ wallets.get(id).address = address;
150
+ pages.get(id)!.emit(address);
151
+ },
152
+ walletDisconnect(id) {
153
+ wallets.get(id).open = false;
154
+ pages.get(id)!.emit(null);
155
+ },
156
+ remount: build,
157
+ verify: (address, message, signature) =>
158
+ family === "solana"
159
+ ? signature === bs58.encode(utf8(signed(address, message)))
160
+ : signature === signed(address, message),
161
+ };
162
+ return result;
163
+ }
164
+
165
+ describeConnectionDriver("the Solana bridge wallet", () => harness("solana"));
166
+ describeConnectionDriver("the Sui bridge wallet", () => harness("sui"));
167
+
168
+ function page() {
169
+ const { a, b } = createMemoryTransportPair();
170
+ return { client: new BridgeClient(a), host: new BridgeHost(b) };
171
+ }
172
+
173
+ describe("solanaBridgeDriver", () => {
174
+ it("connects the page's Solana wallet and signs a message the SIWS verifier accepts", async () => {
175
+ const { client, host } = page();
176
+ registerSolanaHandler(host, createMockSolanaSigner());
177
+ const driver = solanaBridgeDriver(client, { chain: "solana:devnet" });
178
+ expect(driver.connectors()).toEqual([{ id: "webViewSolana", name: "Solana Wallet" }]);
179
+
180
+ const account = await driver.connect("webViewSolana");
181
+ expect(account.chainId).toBe("solana:devnet");
182
+ const solana = await driver.client!(driver.getState());
183
+ const message = "app.example.com wants you to sign in with your Solana account:\n…";
184
+ const signature = await solana!.signMessage(message);
185
+
186
+ expect(verifySiwsSignature(message, signature, account.address)).toBe(true);
187
+ });
188
+
189
+ it("a page with no account method cannot tell, so a restore rejects and the store keeps it", async () => {
190
+ const { client, host } = page();
191
+ registerSolanaHandler(host, createMockSolanaSigner());
192
+ const older = {
193
+ request: async (ns: string, method: string, params?: unknown) => {
194
+ if (method === "account") throw new Error("unknown solana method: account");
195
+ return client.request(ns as "solana", method, params);
196
+ },
197
+ on: client.on.bind(client),
198
+ };
199
+ await expect(solanaBridgeDriver(older).reconnect("webViewSolana")).rejects.toThrow(
200
+ /unknown solana method/,
201
+ );
202
+ });
203
+ });
204
+
205
+ describe("a page reload", () => {
206
+ it.each(["solana", "sui"] as const)(
207
+ "%s: the new page's account replaces the one the old page connected",
208
+ async (family) => {
209
+ const { client, host } = page();
210
+ const wallets = createWallets({
211
+ w:
212
+ family === "solana"
213
+ ? "7EcDhSYGxXyscszYEp35KHN8vvw3svAuLKTzXwCFLtV"
214
+ : `0x${"ab".repeat(32)}`,
215
+ });
216
+ (family === "solana" ? solanaPage : suiPage)(wallets, "w", host);
217
+ const driver = (family === "solana" ? solanaBridgeDriver : suiBridgeDriver)(client);
218
+ const id = family === "solana" ? "webViewSolana" : "webViewSui";
219
+ await driver.connect(id);
220
+ expect(driver.getState().status).toBe("connected");
221
+
222
+ // The WebView reloads: the new document holds no wallet session, the
223
+ // wallet will not restore it silently, and the page announces itself.
224
+ wallets.get("w").open = false;
225
+ wallets.get("w").authorized = false;
226
+ host.ready();
227
+ await new Promise((resolve) => setTimeout(resolve, 0));
228
+
229
+ expect(driver.getState()).toMatchObject({ status: "disconnected", account: null });
230
+ },
231
+ );
232
+ });
233
+
234
+ describe("a slow account answer", () => {
235
+ it("does not touch a connection opened after it was asked, nor a newer account", async () => {
236
+ const { client, host } = page();
237
+ const X = `0x${"a1".repeat(32)}`;
238
+ const Y = `0x${"b2".repeat(32)}`;
239
+ const answers: ((value: unknown) => void)[] = [];
240
+ host.register("sui", async (method) => {
241
+ if (method === "connect") return { address: X };
242
+ if (method === "disconnect") return null;
243
+ if (method === "account") return new Promise((resolve) => answers.push(resolve));
244
+ throw new Error(method);
245
+ });
246
+ const driver = suiBridgeDriver(client);
247
+ await driver.connect("webViewSui");
248
+
249
+ // The page reloads and is slow to answer; the user reconnects meanwhile.
250
+ host.ready();
251
+ await new Promise((resolve) => setTimeout(resolve, 0));
252
+ await driver.disconnect();
253
+ await driver.connect("webViewSui");
254
+ answers.shift()!({ address: null });
255
+ await new Promise((resolve) => setTimeout(resolve, 0));
256
+ expect(driver.getState()).toMatchObject({ status: "connected", account: { address: X } });
257
+
258
+ // A newer accountChanged wins over an older account answer.
259
+ host.ready();
260
+ await new Promise((resolve) => setTimeout(resolve, 0));
261
+ host.emit("sui", "accountChanged", { address: Y });
262
+ answers.shift()!({ address: X });
263
+ await new Promise((resolve) => setTimeout(resolve, 0));
264
+ expect(driver.getState()).toMatchObject({ account: { address: Y } });
265
+ });
266
+ });
267
+
268
+ describe("suiBridgeDriver", () => {
269
+ it("connects the page's Sui wallet and signs through it", async () => {
270
+ const { client, host } = page();
271
+ registerSuiHandler(host, createMockSuiSigner());
272
+ const driver = suiBridgeDriver(client);
273
+ expect(driver.connectors()).toEqual([{ id: "webViewSui", name: "Sui Wallet" }]);
274
+
275
+ const account = await driver.connect("webViewSui");
276
+ expect(account).toMatchObject({
277
+ address: expect.stringMatching(/^0x[0-9a-f]{64}$/),
278
+ chainId: "sui:mainnet",
279
+ });
280
+ const sui = await driver.client!(driver.getState());
281
+ await expect(sui!.signMessage("hello")).resolves.toMatch(/^[A-Za-z0-9+/]+=*$/);
282
+ });
283
+ });
@@ -0,0 +1,155 @@
1
+ import { solanaMessageClient, type SolanaChain } from "../clients/solanaMessage";
2
+ import { suiClient } from "../clients/sui";
3
+ import type { BridgeRequester } from "../core/family";
4
+ import { lightDriver, type LightWallet, type LightWalletAdapter } from "../core/lightDriver";
5
+ import type { ConnectionDriver } from "../core/types";
6
+ import { base64ToBytes, bytesToBase64 } from "./base64";
7
+ import { bytesToBase58 } from "./base58";
8
+
9
+ /** How one bridge namespace names its account and carries a signature. */
10
+ interface BridgeWalletSpec {
11
+ readonly namespace: string;
12
+ /** The field `connect`, `account` and `accountChanged` carry the address in. */
13
+ readonly key: string;
14
+ sign(bridge: BridgeRequester, message: string): Promise<string>;
15
+ }
16
+
17
+ export interface BridgeWalletOptions {
18
+ readonly id: string;
19
+ readonly name: string;
20
+ }
21
+
22
+ /**
23
+ * The hosted page's wallet on one bridge namespace, as the light driver drives
24
+ * a wallet. It reads the account from `connect`, `account` and the page's
25
+ * `accountChanged` events, and asks `account` again when a reloaded page
26
+ * announces itself, since the new document may hold no session or another.
27
+ */
28
+ function bridgeWallet(
29
+ bridge: BridgeRequester,
30
+ spec: BridgeWalletSpec,
31
+ { id, name }: BridgeWalletOptions,
32
+ ): LightWallet {
33
+ const read = (value: unknown): string | null => {
34
+ const address = (value as Record<string, unknown> | null | undefined)?.[spec.key];
35
+ return typeof address === "string" && address ? address : null;
36
+ };
37
+ const adapter: LightWalletAdapter & { address: string | null } = {
38
+ address: null,
39
+ async connect() {
40
+ const address = read(await bridge.request(spec.namespace, "connect"));
41
+ if (!address) throw new Error(`${name} connected no account`);
42
+ adapter.address = address;
43
+ },
44
+ async disconnect() {
45
+ adapter.address = null;
46
+ await bridge.request(spec.namespace, "disconnect");
47
+ },
48
+ // A page older than the account method answers it with an error, which
49
+ // the store reads as "cannot tell yet" and keeps the connection to restore.
50
+ async restore() {
51
+ adapter.address = read(await bridge.request(spec.namespace, "account"));
52
+ return adapter.address !== null;
53
+ },
54
+ subscribe(listener) {
55
+ // An answer to `account` counts only while this connection is open and
56
+ // nothing newer has said which account it is.
57
+ let live = true;
58
+ let latest = 0;
59
+ const off = bridge.on((ns, method, params) => {
60
+ if (ns === spec.namespace && method === "accountChanged") {
61
+ latest += 1;
62
+ adapter.address = read(params);
63
+ listener();
64
+ } else if (ns === "sys" && method === "ready") {
65
+ const asked = ++latest;
66
+ bridge.request(spec.namespace, "account").then(
67
+ (answer) => {
68
+ if (!live || asked !== latest) return;
69
+ adapter.address = read(answer);
70
+ listener();
71
+ },
72
+ // A page older than the account method: its own events have to say.
73
+ () => undefined,
74
+ );
75
+ }
76
+ });
77
+ return () => {
78
+ live = false;
79
+ off();
80
+ };
81
+ },
82
+ signMessage: (message) => spec.sign(bridge, message),
83
+ };
84
+ return { id, name, adapter };
85
+ }
86
+
87
+ const solana: BridgeWalletSpec = {
88
+ namespace: "solana",
89
+ key: "publicKey",
90
+ async sign(bridge, message) {
91
+ const answer = (await bridge.request("solana", "signMessage", {
92
+ message: bytesToBase64(new TextEncoder().encode(message)),
93
+ })) as { signature: string };
94
+ return bytesToBase58(base64ToBytes(answer.signature));
95
+ },
96
+ };
97
+
98
+ const sui: BridgeWalletSpec = {
99
+ namespace: "sui",
100
+ key: "address",
101
+ async sign(bridge, message) {
102
+ const answer = (await bridge.request("sui", "signMessage", { message })) as {
103
+ signature: string;
104
+ };
105
+ return answer.signature;
106
+ },
107
+ };
108
+
109
+ export interface SolanaBridgeDriverOptions {
110
+ /** The cluster accounts are on. Defaults to `solana:mainnet`. */
111
+ chain?: SolanaChain;
112
+ }
113
+
114
+ /**
115
+ * The hosted page's Solana wallet, driven from a React Native app across the
116
+ * bridge's `solana` namespace. Signatures come back base58, as on web.
117
+ */
118
+ export function solanaBridgeDriver(
119
+ bridge: BridgeRequester,
120
+ options: SolanaBridgeDriverOptions = {},
121
+ ): ConnectionDriver {
122
+ const chain = options.chain ?? "solana:mainnet";
123
+ const wallets = [solanaBridgeWallet(bridge)];
124
+ return lightDriver({
125
+ wallets: () => wallets,
126
+ chainId: chain,
127
+ client: (wallet) => solanaMessageClient(wallet.adapter, chain),
128
+ });
129
+ }
130
+
131
+ /** The hosted page's Sui wallet across the bridge's `sui` namespace. */
132
+ export function suiBridgeDriver(bridge: BridgeRequester): ConnectionDriver {
133
+ const wallets = [suiBridgeWallet(bridge)];
134
+ return lightDriver({
135
+ wallets: () => wallets,
136
+ chainId: "sui:mainnet",
137
+ client: (wallet) => suiClient(wallet.adapter),
138
+ });
139
+ }
140
+
141
+ /** One Solana wallet on the page, for a driver of several (tests, a page per wallet). */
142
+ export function solanaBridgeWallet(
143
+ bridge: BridgeRequester,
144
+ options: BridgeWalletOptions = { id: "webViewSolana", name: "Solana Wallet" },
145
+ ): LightWallet {
146
+ return bridgeWallet(bridge, solana, options);
147
+ }
148
+
149
+ /** One Sui wallet on the page. */
150
+ export function suiBridgeWallet(
151
+ bridge: BridgeRequester,
152
+ options: BridgeWalletOptions = { id: "webViewSui", name: "Sui Wallet" },
153
+ ): LightWallet {
154
+ return bridgeWallet(bridge, sui, options);
155
+ }
@@ -6,5 +6,8 @@ describe("bridge barrel", () => {
6
6
  expect(typeof bridge.BridgeClient).toBe("function");
7
7
  expect(typeof bridge.createMemoryTransportPair).toBe("function");
8
8
  expect(typeof bridge.isBridgeMessage).toBe("function");
9
+ expect(bridge.NativeBridgeErrorCode.pageStranded).toBe(-33002);
10
+ expect(typeof bridge.solanaBridgeDriver).toBe("function");
11
+ expect(typeof bridge.suiBridgeDriver).toBe("function");
9
12
  });
10
13
  });