@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
@@ -21,7 +21,15 @@ interface StandardWallet {
21
21
  }
22
22
 
23
23
  interface ConnectFeature {
24
- connect: () => Promise<{ accounts?: ReadonlyArray<{ address: string }> }>;
24
+ connect: (input?: {
25
+ silent?: boolean;
26
+ }) => Promise<{ accounts?: ReadonlyArray<{ address: string }> }>;
27
+ }
28
+ interface EventsFeature {
29
+ on: (
30
+ event: "change",
31
+ listener: (properties: { accounts?: ReadonlyArray<{ address: string }> }) => void,
32
+ ) => () => void;
25
33
  }
26
34
  interface DisconnectFeature {
27
35
  disconnect: () => Promise<void>;
@@ -35,6 +43,7 @@ interface SignPersonalMessageFeature {
35
43
 
36
44
  /** Minimal Wallet-Standard discovery: returns wallets exposing the Sui sign feature. */
37
45
  export function discoverSuiWallets(): StandardWallet[] {
46
+ if (typeof window === "undefined" || typeof window.addEventListener !== "function") return [];
38
47
  const wallets: StandardWallet[] = [];
39
48
  const api = {
40
49
  register: (...ws: StandardWallet[]) => {
@@ -84,6 +93,43 @@ export class SuiAdapter implements WalletAdapter {
84
93
  this.isConnected = true;
85
94
  }
86
95
 
96
+ /**
97
+ * Reconnects without a prompt (`standard:connect` with `silent`). Resolves
98
+ * false when the wallet answers with no account or refuses (4001); throws
99
+ * on any other failure, and when no Sui wallet has registered yet.
100
+ */
101
+ async restore(): Promise<boolean> {
102
+ const wallets = discoverSuiWallets();
103
+ if (!wallets.length) throw new Error("No Sui wallet has registered yet.");
104
+ const wallet = wallets[0];
105
+ const connectFeature = wallet.features["standard:connect"] as ConnectFeature;
106
+ const res = await connectFeature.connect({ silent: true }).catch((error: unknown) => {
107
+ if ((error as { code?: unknown } | null)?.code === 4001) return undefined;
108
+ throw error;
109
+ });
110
+ const account = res?.accounts?.[0];
111
+ if (!account) return false;
112
+ this.wallet = wallet;
113
+ this.account = account;
114
+ this.address = account.address;
115
+ this.isConnected = true;
116
+ return true;
117
+ }
118
+
119
+ /** The wallet's account changes (`standard:events`); no accounts means it disconnected. */
120
+ subscribe(listener: () => void): () => void {
121
+ const events = this.wallet?.features?.["standard:events"] as EventsFeature | undefined;
122
+ if (!events) return () => {};
123
+ return events.on("change", ({ accounts }) => {
124
+ if (!accounts) return;
125
+ const account = accounts[0] ?? null;
126
+ this.account = account;
127
+ this.address = account?.address ?? null;
128
+ this.isConnected = account !== null;
129
+ listener();
130
+ });
131
+ }
132
+
87
133
  async disconnect(): Promise<void> {
88
134
  try {
89
135
  const f = this.wallet?.features?.["standard:disconnect"] as DisconnectFeature | undefined;
@@ -1,6 +1,8 @@
1
1
  import type { Config, Connector, CreateConnectorFn } from "wagmi";
2
2
 
3
+ import { getConnectorEcosystem } from "@multiplatform.one/connectkit";
3
4
  import { discoverWallets } from "../adapters/discover";
5
+ import { ecosystemBySyntheticChainId } from "./syntheticChains";
4
6
  import { walletAdapterConnector } from "./walletAdapterConnector";
5
7
 
6
8
  /**
@@ -11,6 +13,9 @@ import { walletAdapterConnector } from "./walletAdapterConnector";
11
13
  * `window.unisat` AFTER config creation, so a one-shot discovery misses it and Bitcoin never
12
14
  * appears in the modal. This adds the missing connectors to the live config (mirroring how wagmi
13
15
  * registers EIP-6963 connectors as wallets announce). Idempotent — skips ids already registered.
16
+ * Only ecosystems the config already lists, through a synthetic chain or a wallet connector,
17
+ * are added, so a config built with `enableWallet: false`, or a list of ecosystems, keeps to
18
+ * what it asked for.
14
19
  *
15
20
  * @returns the number of connectors added (0 when nothing new was found).
16
21
  */
@@ -27,10 +32,14 @@ export function ensureWalletConnectors(config: Config): number {
27
32
  )._internal;
28
33
  if (!internal) return 0;
29
34
 
35
+ const listed = new Set([
36
+ ...config.chains.map((chain) => ecosystemBySyntheticChainId[chain.id]),
37
+ ...config.connectors.map((connector) => getConnectorEcosystem(connector)),
38
+ ]);
30
39
  const existing = new Set(config.connectors.map((c) => c.id));
31
40
  let added = 0;
32
41
  for (const entry of discoverWallets()) {
33
- if (existing.has(entry.id)) continue;
42
+ if (existing.has(entry.id) || !listed.has(entry.ecosystem)) continue;
34
43
  const fn = walletAdapterConnector({
35
44
  id: entry.id,
36
45
  name: entry.name,
@@ -6,6 +6,8 @@ import { walletAdapterConnector } from "./walletAdapterConnector";
6
6
  * Map wallet `discoverWallets()` output → wagmi `CreateConnectorFn[]`, ready to spread
7
7
  * into `createConfig({ connectors: [...evmConnectors, ...getWalletConnectors()] })`.
8
8
  * Defaults to probing the page; pass a curated list to override.
9
+ *
10
+ * @deprecated The wagmi shim for Solana, Sui and Bitcoin wallets, which goes in 8.0.0 when the connect modal reads the connection store (MPO-385). Use the `sol()`, `sui()` and `btc()` families and `useConnection()`.
9
11
  */
10
12
  export function getWalletConnectors(
11
13
  entries: WalletEntry[] = discoverWallets(),
@@ -10,8 +10,11 @@ import type { Ecosystem } from "@multiplatform.one/connectkit";
10
10
 
11
11
  // 0x534f4c="SOL", 0x535549="SUI", 0x425443="BTC" — reserved, collision-free vs
12
12
  // real EVM chainIds.
13
+ /** @deprecated The wagmi shim for Solana, Sui and Bitcoin wallets, which goes in 8.0.0 when the connect modal reads the connection store (MPO-385). Use the `sol()`, `sui()` and `btc()` families and `useConnection()`. */
13
14
  export const SOLANA_CHAIN_ID = 0x534f4c; // 5_459_788
15
+ /** @deprecated The wagmi shim for Solana, Sui and Bitcoin wallets, which goes in 8.0.0 when the connect modal reads the connection store (MPO-385). Use the `sol()`, `sui()` and `btc()` families and `useConnection()`. */
14
16
  export const SUI_CHAIN_ID = 0x535549; // 5_461_321
17
+ /** @deprecated The wagmi shim for Solana, Sui and Bitcoin wallets, which goes in 8.0.0 when the connect modal reads the connection store (MPO-385). Use the `sol()`, `sui()` and `btc()` families and `useConnection()`. */
15
18
  export const BITCOIN_CHAIN_ID = 0x425443; // 4_347_459
16
19
 
17
20
  export const syntheticChainIdByEcosystem: Record<Exclude<Ecosystem, "evm">, number> = {
@@ -26,6 +29,7 @@ export const ecosystemBySyntheticChainId: Record<number, Ecosystem> = {
26
29
  [BITCOIN_CHAIN_ID]: "bitcoin",
27
30
  };
28
31
 
32
+ /** @deprecated The wagmi shim for Solana, Sui and Bitcoin wallets, which goes in 8.0.0 when the connect modal reads the connection store (MPO-385). Use the `sol()`, `sui()` and `btc()` families and `useConnection()`. */
29
33
  export const isSyntheticChainId = (chainId?: number): boolean =>
30
34
  chainId != null && chainId in ecosystemBySyntheticChainId;
31
35
 
@@ -46,8 +50,12 @@ const makeChain = (id: number, name: string, symbol: string, decimals: number):
46
50
  rpcUrls: { default: { http: [placeholderRpcUrl] } },
47
51
  });
48
52
 
53
+ /** @deprecated The wagmi shim for Solana, Sui and Bitcoin wallets, which goes in 8.0.0 when the connect modal reads the connection store (MPO-385). Use the `sol()`, `sui()` and `btc()` families and `useConnection()`. */
49
54
  export const solanaChain = makeChain(SOLANA_CHAIN_ID, "Solana", "SOL", 9);
55
+ /** @deprecated The wagmi shim for Solana, Sui and Bitcoin wallets, which goes in 8.0.0 when the connect modal reads the connection store (MPO-385). Use the `sol()`, `sui()` and `btc()` families and `useConnection()`. */
50
56
  export const suiChain = makeChain(SUI_CHAIN_ID, "Sui", "SUI", 9);
57
+ /** @deprecated The wagmi shim for Solana, Sui and Bitcoin wallets, which goes in 8.0.0 when the connect modal reads the connection store (MPO-385). Use the `sol()`, `sui()` and `btc()` families and `useConnection()`. */
51
58
  export const bitcoinChain = makeChain(BITCOIN_CHAIN_ID, "Bitcoin", "BTC", 8);
52
59
 
60
+ /** @deprecated The wagmi shim for Solana, Sui and Bitcoin wallets, which goes in 8.0.0 when the connect modal reads the connection store (MPO-385). Use the `sol()`, `sui()` and `btc()` families and `useConnection()`. */
53
61
  export const syntheticChains: Chain[] = [solanaChain, suiChain, bitcoinChain];
@@ -27,6 +27,8 @@ type ProviderListener = (payload?: unknown) => void;
27
27
  * satisfy wagmi's types — it is NEVER used as a real EVM address (only displayed,
28
28
  * and handed to Keycloak as the signed message's account). Modeled on
29
29
  * createBridgeConnector (see ../../bridge/bridgeConnector.ts).
30
+ *
31
+ * @deprecated The wagmi shim for Solana, Sui and Bitcoin wallets, which goes in 8.0.0 when the connect modal reads the connection store (MPO-385). Use the `sol()`, `sui()` and `btc()` families and `useConnection()`.
30
32
  */
31
33
  export function walletAdapterConnector(entry: WalletConnectorEntry) {
32
34
  const chainId = syntheticChainIdByEcosystem[entry.ecosystem];
@@ -6,8 +6,9 @@ import { EthereumProviderOptions as AaveAccountOptions } from "@aave/account";
6
6
 
7
7
  import { setAppMeta } from "@multiplatform.one/connectkit";
8
8
  import defaultConnectors from "./defaultConnectors";
9
+ import { discoverWallets, type WalletEcosystem } from "./adapters/discover";
9
10
  import { getWalletConnectors } from "./connectors/getWalletConnectors";
10
- import { syntheticChains } from "./connectors/syntheticChains";
11
+ import { ecosystemBySyntheticChainId, syntheticChains } from "./connectors/syntheticChains";
11
12
 
12
13
  // App name/icon now live in connectkit's agnostic appMeta module; re-exported here
13
14
  // for back-compat.
@@ -27,8 +28,9 @@ type DefaultConfigProps = {
27
28
  enableAaveAccount?: boolean;
28
29
  aaveAccountOptions?: AaveAccountOptions;
29
30
  // wallet: append shim-connectors for any detected non-EVM wallet (Solana/Sui/
30
- // Bitcoin) alongside the EVM connectors. No-op when none are installed.
31
- enableWallet?: boolean;
31
+ // Bitcoin) alongside the EVM connectors. No-op when none are installed. A list
32
+ // limits it to those ecosystems.
33
+ enableWallet?: boolean | readonly WalletEcosystem[];
32
34
  } & Partial<CreateConfigParameters>;
33
35
 
34
36
  let warnedProjectId = false;
@@ -57,11 +59,18 @@ const defaultConfig = ({
57
59
  setAppMeta(appName, appIcon);
58
60
  if (walletConnectProjectId) warnIgnoredProjectId();
59
61
 
62
+ const ecosystems: readonly WalletEcosystem[] =
63
+ enableWallet === true ? ["solana", "sui", "bitcoin"] : enableWallet || [];
64
+
60
65
  // Register the wallet synthetic chains so wagmi can resolve a `chain` object for a
61
66
  // connected non-EVM account — ConnectKit's SIWE signIn reads `chain.id`, which is
62
67
  // undefined otherwise ("No chainId found"). They carry no real RPC and are never
63
- // used for transactions.
64
- const allChains = (enableWallet ? [...chains, ...syntheticChains] : chains) as typeof chains;
68
+ // used for transactions. They also tell ensureWalletConnectors which ecosystems
69
+ // this config lists.
70
+ const walletChains = syntheticChains.filter((chain) =>
71
+ ecosystems.includes(ecosystemBySyntheticChainId[chain.id] as WalletEcosystem),
72
+ );
73
+ const allChains = [...chains, ...walletChains] as unknown as typeof chains;
65
74
 
66
75
  // TODO: nice to have, automate transports based on chains, but for now just provide public if not provided
67
76
  const transports: CreateConfigParameters["transports"] =
@@ -83,8 +92,13 @@ const defaultConfig = ({
83
92
 
84
93
  // Append wallet shim-connectors for detected non-EVM wallets. discoverWallets()
85
94
  // returns [] under SSR / when none are installed, so this is a safe no-op there.
86
- const connectors: CreateConfigParameters["connectors"] = enableWallet
87
- ? [...(baseConnectors ?? []), ...getWalletConnectors()]
95
+ const connectors: CreateConfigParameters["connectors"] = ecosystems.length
96
+ ? [
97
+ ...(baseConnectors ?? []),
98
+ ...getWalletConnectors(
99
+ discoverWallets().filter((entry) => ecosystems.includes(entry.ecosystem)),
100
+ ),
101
+ ]
88
102
  : baseConnectors;
89
103
 
90
104
  const config: CreateConfigParameters<any, any> = {
@@ -17,6 +17,9 @@ export type SIWESession = {
17
17
 
18
18
  export type SIWEConfig = {
19
19
  // Required
20
+ // Called at mount and again for every sign-in. A GpgProvider that shows a
21
+ // challenge built on the same server nonce needs a getNonce that returns the
22
+ // same nonce until it is spent, as keycloakWallet's does.
20
23
  getNonce: () => Promise<string>;
21
24
  createMessage: (args: {
22
25
  nonce: string;
@@ -178,3 +178,112 @@ describe("SIWEProvider signing", () => {
178
178
  expect(onSign).toHaveBeenCalledWith(expect.objectContaining({ username: "0xevmsig" }));
179
179
  });
180
180
  });
181
+
182
+ describe("SIWEProvider nonce", () => {
183
+ beforeEach(() => vi.clearAllMocks());
184
+
185
+ // A server that replaces its nonce on every fetch and consumes it on verify,
186
+ // like Keycloak's /siww/nonce and /siww/register.
187
+ function nonceServer(fail?: (n: number) => boolean) {
188
+ let issued = 0;
189
+ let live: string | undefined;
190
+ const verified: string[] = [];
191
+ return {
192
+ verified,
193
+ getNonce: async () => {
194
+ issued += 1;
195
+ if (fail?.(issued)) throw new Error(`nonce ${issued} failed`);
196
+ live = `nonce-${issued}`;
197
+ return live;
198
+ },
199
+ verifyMessage: async ({ message }: { message: string }) => {
200
+ const nonce = message.split(" ").pop();
201
+ if (!nonce || nonce !== live) return false;
202
+ live = undefined;
203
+ verified.push(nonce);
204
+ return true;
205
+ },
206
+ };
207
+ }
208
+
209
+ function mount(server: ReturnType<typeof nonceServer>) {
210
+ mockUseAccount.mockReturnValue({
211
+ address: evmAddress,
212
+ chain: { id: 1 },
213
+ chainId: 1,
214
+ connector: { id: "metaMask", type: "injected" },
215
+ });
216
+ const createMessage = vi.fn(
217
+ ({ address, nonce }: { address: string; nonce: string }) =>
218
+ `example.com login ${address} ${nonce}`,
219
+ );
220
+ let ctx: SIWEContextValue | null = null;
221
+ const Probe = () => {
222
+ ctx = useContext(SIWEContext);
223
+ return null;
224
+ };
225
+ // staleTime Infinity as an app default must not keep the mount's nonce alive.
226
+ const client = new QueryClient({
227
+ defaultOptions: { queries: { staleTime: Infinity, retry: false } },
228
+ });
229
+ render(
230
+ <QueryClientProvider client={client}>
231
+ <SIWEProvider
232
+ getNonce={server.getNonce}
233
+ createMessage={createMessage}
234
+ verifyMessage={server.verifyMessage}
235
+ getSession={async () => null}
236
+ signOut={async () => true}
237
+ >
238
+ <Probe />
239
+ </SIWEProvider>
240
+ </QueryClientProvider>,
241
+ );
242
+ return { createMessage, ctx: () => ctx! };
243
+ }
244
+
245
+ it("signs each sign-in with a nonce fetched for it, so a second one verifies against a server that consumes nonces", async () => {
246
+ const server = nonceServer();
247
+ const { ctx } = mount(server);
248
+ await waitFor(() => expect(ctx().nonce.data).toBe("nonce-1"));
249
+
250
+ const results: unknown[] = [];
251
+ for (let round = 0; round < 2; round += 1) {
252
+ await act(async () => {
253
+ results.push(await ctx().signIn());
254
+ });
255
+ }
256
+
257
+ expect(results).not.toContain(false);
258
+ expect(server.verified).toEqual(["nonce-2", "nonce-3"]);
259
+ });
260
+
261
+ it("retries a failed nonce fetch once", async () => {
262
+ const server = nonceServer((n) => n === 2);
263
+ const { ctx } = mount(server);
264
+ await waitFor(() => expect(ctx().nonce.data).toBe("nonce-1"));
265
+
266
+ let result: unknown;
267
+ await act(async () => {
268
+ result = await ctx().signIn();
269
+ });
270
+
271
+ expect(result).not.toBe(false);
272
+ expect(server.verified).toEqual(["nonce-3"]);
273
+ });
274
+
275
+ it("fails the sign-in when its nonce fetch keeps failing, instead of signing the cached one", async () => {
276
+ const server = nonceServer((n) => n >= 2);
277
+ const { createMessage, ctx } = mount(server);
278
+ await waitFor(() => expect(ctx().nonce.data).toBe("nonce-1"));
279
+
280
+ let result: unknown;
281
+ await act(async () => {
282
+ result = await ctx().signIn();
283
+ });
284
+
285
+ expect(result).toBe(false);
286
+ expect(createMessage).not.toHaveBeenCalled();
287
+ expect(ctx().status).toBe("error");
288
+ });
289
+ });
@@ -20,6 +20,12 @@ export const SIWE_SESSION_QUERY_KEY = "ckSiweSession";
20
20
  // UTF-8-safe base64 — the keycloak SPI decodes the submitted message as UTF-8.
21
21
  const b64 = (s: string) => window.btoa(unescape(encodeURIComponent(s)));
22
22
 
23
+ /**
24
+ * Sign-in over wagmi's account, mounted outside ConnectKitProvider.
25
+ * @deprecated Goes in 8.0.0. `SignInProvider` signs with whichever family the
26
+ * connection store holds: `<SignInProvider {...kc.signInConfig(onSign)}>`,
27
+ * or Web3Provider's `signIn` prop.
28
+ */
23
29
  export const SIWEProvider = ({
24
30
  children,
25
31
  enabled = true,
@@ -130,13 +136,16 @@ export const SIWEProvider = ({
130
136
 
131
137
  setStatus(StatusState.LOADING);
132
138
 
133
- // Read the query live, not this render's `nonce`: right after a reset
134
- // its data is the nonce the server just dropped, so wait for the refetch.
135
- const nonceState = queryClient.getQueryState<string>([SIWE_NONCE_QUERY_KEY]);
136
- const nonceValue =
137
- nonceState?.fetchStatus === "fetching"
138
- ? (await nonce.refetch({ cancelRefetch: false })).data
139
- : nonceState?.data;
139
+ // Fetch this sign-in's own nonce. A server that consumes its nonce on
140
+ // verify refuses the one cached at mount the second time, so a cached
141
+ // value is never reused. A fetch already in flight, such as a reset's
142
+ // refetch, is joined rather than repeated.
143
+ const nonceValue = await queryClient.fetchQuery({
144
+ queryKey: [SIWE_NONCE_QUERY_KEY],
145
+ queryFn: () => siweConfig.getNonce(),
146
+ staleTime: 0,
147
+ retry: 1,
148
+ });
140
149
  if (!nonceValue) {
141
150
  throw new Error("Could not fetch nonce");
142
151
  }
@@ -3,7 +3,9 @@ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
3
3
  import {
4
4
  CONNECT_INTENT_TTL_MS,
5
5
  clearConnectIntent,
6
- consumeConnectIntent,
6
+ hasConnectIntent,
7
+ isRestoredPage,
8
+ resetConnectIntentPage,
7
9
  setConnectIntent,
8
10
  } from "./connectIntent";
9
11
 
@@ -20,71 +22,139 @@ function memoryStorage() {
20
22
 
21
23
  describe("connectIntent", () => {
22
24
  let storage: ReturnType<typeof memoryStorage>;
25
+ let session: ReturnType<typeof memoryStorage>;
26
+
27
+ /** A new document: sessionStorage survives only a same-tab reload, and a browser kill loses it. */
28
+ const newPage = (keepsSession: boolean) => {
29
+ resetConnectIntentPage();
30
+ if (!keepsSession) session.removeItem(KEY);
31
+ };
23
32
 
24
33
  beforeEach(() => {
25
34
  storage = memoryStorage();
26
- vi.stubGlobal("window", { sessionStorage: storage });
35
+ session = memoryStorage();
36
+ vi.stubGlobal("window", { localStorage: storage, sessionStorage: session });
27
37
  });
28
38
  afterEach(() => {
29
39
  vi.unstubAllGlobals();
40
+ resetConnectIntentPage();
30
41
  });
31
42
 
32
- it("defaults the TTL to 90 s", () => {
33
- expect(CONNECT_INTENT_TTL_MS).toBe(90_000);
43
+ it("defaults the TTL to 10 min, the MetaMask Connect request budget", () => {
44
+ expect(CONNECT_INTENT_TTL_MS).toBe(600_000);
34
45
  });
35
46
 
36
- it("is honoured within the TTL", () => {
47
+ it("is honoured within the TTL on the page that set it", () => {
37
48
  setConnectIntent(undefined, 1_000);
38
- expect(consumeConnectIntent(1_000 + 89_999)).toBe(true);
49
+ expect(hasConnectIntent(1_000 + 599_999, false)).toBe(true);
39
50
  });
40
51
 
41
52
  it("expires after the TTL, so a cold load never fires an unsolicited signature", () => {
42
53
  setConnectIntent(undefined, 1_000);
43
- expect(consumeConnectIntent(1_000 + 90_000)).toBe(false);
54
+ expect(hasConnectIntent(1_000 + 600_000, true)).toBe(false);
44
55
  expect(storage.getItem(KEY)).toBeNull();
45
56
  });
46
57
 
47
- it("is consumed once", () => {
58
+ it("is read without being used up, so a page lost after reading it leaves it for the next", () => {
59
+ setConnectIntent(undefined, 1_000);
60
+ expect(hasConnectIntent(2_000, false)).toBe(true);
61
+ expect(hasConnectIntent(3_000, false)).toBe(true);
62
+ expect(storage.getItem(KEY)).toBe(String(601_000));
63
+ });
64
+
65
+ it("after a browser kill, carries over to a page the browser brought back, not to one opened fresh", () => {
66
+ setConnectIntent(undefined, 1_000);
67
+ newPage(false);
68
+ expect(hasConnectIntent(2_000, false)).toBe(false);
69
+ expect(hasConnectIntent(2_000, true)).toBe(true);
70
+ expect(storage.getItem(KEY)).toBe(String(601_000));
71
+ });
72
+
73
+ it("carries over a same-tab reload whatever the browser reports about it", () => {
48
74
  setConnectIntent(undefined, 1_000);
49
- expect(consumeConnectIntent(2_000)).toBe(true);
50
- expect(consumeConnectIntent(2_000)).toBe(false);
75
+ newPage(true);
76
+ expect(hasConnectIntent(2_000, false)).toBe(true);
51
77
  });
52
78
 
53
79
  it("takes a custom TTL", () => {
54
80
  setConnectIntent(5_000, 1_000);
55
- expect(consumeConnectIntent(5_999)).toBe(true);
56
- setConnectIntent(5_000, 1_000);
57
- expect(consumeConnectIntent(6_000)).toBe(false);
81
+ expect(hasConnectIntent(5_999, false)).toBe(true);
82
+ expect(hasConnectIntent(6_000, false)).toBe(false);
58
83
  });
59
84
 
60
85
  it("treats the old '1' flag as expired", () => {
61
86
  storage.setItem(KEY, "1");
62
- expect(consumeConnectIntent()).toBe(false);
87
+ expect(hasConnectIntent(Date.now(), true)).toBe(false);
63
88
  expect(storage.getItem(KEY)).toBeNull();
64
89
  });
65
90
 
66
- it("is false with nothing stored and after a clear", () => {
67
- expect(consumeConnectIntent()).toBe(false);
91
+ it("is false with nothing stored and after a clear, even on a restored page", () => {
92
+ expect(hasConnectIntent(Date.now(), true)).toBe(false);
68
93
  setConnectIntent();
69
94
  clearConnectIntent();
70
- expect(consumeConnectIntent()).toBe(false);
95
+ expect(hasConnectIntent(Date.now(), true)).toBe(false);
96
+ });
97
+
98
+ it("lives in localStorage, which a browser kill keeps, and in sessionStorage", () => {
99
+ setConnectIntent(undefined, 1_000);
100
+ expect(storage.getItem(KEY)).toBe(String(601_000));
101
+ expect(session.getItem(KEY)).toBe(String(601_000));
102
+ clearConnectIntent();
103
+ expect(storage.getItem(KEY)).toBeNull();
104
+ expect(session.getItem(KEY)).toBeNull();
105
+ });
106
+
107
+ it("falls back to sessionStorage where localStorage is missing or has no methods", () => {
108
+ vi.stubGlobal("window", { localStorage: {}, sessionStorage: session });
109
+ setConnectIntent(undefined, 1_000);
110
+ expect(session.getItem(KEY)).toBe(String(601_000));
111
+ expect(hasConnectIntent(2_000, false)).toBe(true);
71
112
  });
72
113
 
73
114
  it("degrades to false when storage throws", () => {
74
- vi.stubGlobal("window", {
75
- sessionStorage: {
76
- getItem: () => {
77
- throw new Error("SecurityError");
78
- },
79
- setItem: () => {
80
- throw new Error("SecurityError");
81
- },
82
- removeItem: () => {
83
- throw new Error("SecurityError");
84
- },
115
+ const throwing = {
116
+ getItem: () => {
117
+ throw new Error("SecurityError");
118
+ },
119
+ setItem: () => {
120
+ throw new Error("SecurityError");
85
121
  },
86
- });
122
+ removeItem: () => {
123
+ throw new Error("SecurityError");
124
+ },
125
+ };
126
+ vi.stubGlobal("window", { localStorage: throwing, sessionStorage: throwing });
87
127
  expect(() => setConnectIntent()).not.toThrow();
88
- expect(consumeConnectIntent()).toBe(false);
128
+ expect(hasConnectIntent(Date.now(), true)).toBe(false);
129
+ });
130
+ });
131
+
132
+ describe("isRestoredPage", () => {
133
+ afterEach(() => {
134
+ vi.unstubAllGlobals();
135
+ });
136
+
137
+ const page = (type: string, wasDiscarded = false) => {
138
+ vi.stubGlobal("document", { wasDiscarded });
139
+ vi.stubGlobal("performance", { getEntriesByType: () => [{ type }] });
140
+ };
141
+
142
+ it("is true for a reload and for the history restore of a killed tab", () => {
143
+ page("reload");
144
+ expect(isRestoredPage()).toBe(true);
145
+ page("back_forward");
146
+ expect(isRestoredPage()).toBe(true);
147
+ });
148
+
149
+ it("is true for a discarded tab", () => {
150
+ page("navigate", true);
151
+ expect(isRestoredPage()).toBe(true);
152
+ });
153
+
154
+ it("is false for a page opened fresh or where the browser says nothing", () => {
155
+ page("navigate");
156
+ expect(isRestoredPage()).toBe(false);
157
+ vi.stubGlobal("performance", undefined);
158
+ expect(isRestoredPage()).toBe(false);
89
159
  });
90
160
  });