@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.
- package/README.md +157 -8
- package/dist/cjs/bridge/base58.cjs +48 -0
- package/dist/cjs/bridge/base58.native.js +51 -0
- package/dist/cjs/bridge/base58.native.js.map +1 -0
- package/dist/cjs/bridge/core.cjs +5 -1
- package/dist/cjs/bridge/core.native.js +5 -1
- package/dist/cjs/bridge/core.native.js.map +1 -1
- package/dist/cjs/bridge/drivers.cjs +141 -0
- package/dist/cjs/bridge/drivers.native.js +161 -0
- package/dist/cjs/bridge/drivers.native.js.map +1 -0
- package/dist/cjs/bridge/nativeHost.cjs +49 -9
- package/dist/cjs/bridge/nativeHost.native.js +56 -9
- package/dist/cjs/bridge/nativeHost.native.js.map +1 -1
- package/dist/cjs/clients/adapter.native.js.map +1 -1
- package/dist/cjs/clients/connector.native.js.map +1 -1
- package/dist/cjs/clients/evm.cjs +1 -0
- package/dist/cjs/clients/evm.native.js +1 -0
- package/dist/cjs/clients/evm.native.js.map +1 -1
- package/dist/cjs/clients/evmRead.cjs +104 -0
- package/dist/cjs/clients/evmRead.native.js +124 -0
- package/dist/cjs/clients/evmRead.native.js.map +1 -0
- package/dist/cjs/clients/hooks.cjs +37 -7
- package/dist/cjs/clients/hooks.native.js +43 -5
- package/dist/cjs/clients/hooks.native.js.map +1 -1
- package/dist/cjs/clients/index.cjs +5 -0
- package/dist/cjs/clients/index.native.js +5 -0
- package/dist/cjs/clients/index.native.js.map +1 -1
- package/dist/cjs/clients/types.cjs +7 -0
- package/dist/cjs/clients/types.native.js +14 -0
- package/dist/cjs/clients/types.native.js.map +1 -1
- package/dist/cjs/connectkit/adapters/BitcoinAdapter.cjs +44 -2
- package/dist/cjs/connectkit/adapters/BitcoinAdapter.native.js +73 -5
- package/dist/cjs/connectkit/adapters/BitcoinAdapter.native.js.map +1 -1
- package/dist/cjs/connectkit/adapters/SolanaAdapter.cjs +46 -0
- package/dist/cjs/connectkit/adapters/SolanaAdapter.native.js +55 -0
- package/dist/cjs/connectkit/adapters/SolanaAdapter.native.js.map +1 -1
- package/dist/cjs/connectkit/adapters/SuiAdapter.cjs +40 -0
- package/dist/cjs/connectkit/adapters/SuiAdapter.native.js +50 -0
- package/dist/cjs/connectkit/adapters/SuiAdapter.native.js.map +1 -1
- package/dist/cjs/connectkit/connectors/ensureWalletConnectors.cjs +4 -1
- package/dist/cjs/connectkit/connectors/ensureWalletConnectors.native.js +8 -1
- package/dist/cjs/connectkit/connectors/ensureWalletConnectors.native.js.map +1 -1
- package/dist/cjs/connectkit/connectors/getWalletConnectors.native.js.map +1 -1
- package/dist/cjs/connectkit/connectors/syntheticChains.native.js.map +1 -1
- package/dist/cjs/connectkit/connectors/walletAdapterConnector.native.js.map +1 -1
- package/dist/cjs/connectkit/defaultConfig.cjs +5 -2
- package/dist/cjs/connectkit/defaultConfig.native.js +9 -2
- package/dist/cjs/connectkit/defaultConfig.native.js.map +1 -1
- package/dist/cjs/connectkit/siwe/SIWEContext.native.js.map +1 -1
- package/dist/cjs/connectkit/siwe/SIWEProvider.cjs +6 -4
- package/dist/cjs/connectkit/siwe/SIWEProvider.native.js +8 -4
- package/dist/cjs/connectkit/siwe/SIWEProvider.native.js.map +1 -1
- package/dist/cjs/connectkit/siwe/connectIntent.cjs +56 -16
- package/dist/cjs/connectkit/siwe/connectIntent.native.js +100 -16
- package/dist/cjs/connectkit/siwe/connectIntent.native.js.map +1 -1
- package/dist/cjs/connectkit/siwe/useSIWE.native.js.map +1 -1
- package/dist/cjs/connectkit/web3Bridge.cjs +58 -12
- package/dist/cjs/connectkit/web3Bridge.native.js +64 -14
- package/dist/cjs/connectkit/web3Bridge.native.js.map +1 -1
- package/dist/cjs/core/family.cjs +17 -0
- package/dist/cjs/core/family.native.js +17 -0
- package/dist/cjs/core/family.native.js.map +1 -1
- package/dist/cjs/core/index.cjs +10 -1
- package/dist/cjs/core/index.native.js +10 -1
- package/dist/cjs/core/index.native.js.map +1 -1
- package/dist/cjs/core/lightDriver.cjs +182 -0
- package/dist/cjs/core/lightDriver.native.js +260 -0
- package/dist/cjs/core/lightDriver.native.js.map +1 -0
- package/dist/cjs/core/react.cjs +12 -1
- package/dist/cjs/core/react.native.js +16 -1
- package/dist/cjs/core/react.native.js.map +1 -1
- package/dist/cjs/core/signIn.cjs +201 -0
- package/dist/cjs/core/signIn.native.js +240 -0
- package/dist/cjs/core/signIn.native.js.map +1 -0
- package/dist/cjs/core/store.cjs +47 -2
- package/dist/cjs/core/store.native.js +49 -2
- package/dist/cjs/core/store.native.js.map +1 -1
- package/dist/cjs/families/btc.cjs +44 -0
- package/dist/cjs/families/btc.native.js +49 -0
- package/dist/cjs/families/btc.native.js.map +1 -0
- package/dist/cjs/families/eth.cjs +57 -0
- package/dist/cjs/families/eth.native.js +61 -0
- package/dist/cjs/families/eth.native.js.map +1 -0
- package/dist/cjs/families/gpg.cjs +40 -0
- package/dist/cjs/families/gpg.native.js +43 -0
- package/dist/cjs/families/gpg.native.js.map +1 -0
- package/dist/cjs/families/host.cjs +38 -0
- package/dist/cjs/families/host.native.js +41 -0
- package/dist/cjs/families/host.native.js.map +1 -0
- package/dist/cjs/families/index.cjs +53 -0
- package/dist/cjs/families/index.native.js +56 -0
- package/dist/cjs/families/index.native.js.map +1 -0
- package/dist/cjs/families/messages.cjs +61 -0
- package/dist/cjs/families/messages.native.js +66 -0
- package/dist/cjs/families/messages.native.js.map +1 -0
- package/dist/cjs/families/sol.cjs +55 -0
- package/dist/cjs/families/sol.native.js +64 -0
- package/dist/cjs/families/sol.native.js.map +1 -0
- package/dist/cjs/families/sui.cjs +48 -0
- package/dist/cjs/families/sui.native.js +53 -0
- package/dist/cjs/families/sui.native.js.map +1 -0
- package/dist/cjs/index.cjs +22 -2
- package/dist/cjs/index.native.js +21 -1
- package/dist/cjs/index.native.js.map +1 -1
- package/dist/cjs/keycloak/keycloakWallet.cjs +13 -0
- package/dist/cjs/keycloak/keycloakWallet.native.js +15 -0
- package/dist/cjs/keycloak/keycloakWallet.native.js.map +1 -1
- package/dist/cjs/keycloak/useDirectLogin.cjs +10 -5
- package/dist/cjs/keycloak/useDirectLogin.native.js +12 -5
- package/dist/cjs/keycloak/useDirectLogin.native.js.map +1 -1
- package/dist/cjs/keycloak/useWalletLogin.cjs +16 -8
- package/dist/cjs/light/drivers.cjs +73 -0
- package/dist/cjs/light/drivers.native.js +97 -0
- package/dist/cjs/light/drivers.native.js.map +1 -0
- package/dist/cjs/light/index.cjs +30 -0
- package/dist/cjs/light/index.native.js +33 -0
- package/dist/cjs/light/index.native.js.map +1 -0
- package/dist/cjs/providers/WalletProvider.cjs +59 -17
- package/dist/cjs/providers/WalletProvider.native.js +99 -56
- package/dist/cjs/providers/WalletProvider.native.js.map +1 -1
- package/dist/cjs/providers/families.cjs +53 -0
- package/dist/cjs/providers/families.native.js +59 -0
- package/dist/cjs/providers/families.native.js.map +1 -0
- package/dist/cjs/providers/index.cjs +1 -0
- package/dist/cjs/providers/index.native.js +1 -0
- package/dist/cjs/providers/index.native.js.map +1 -1
- package/dist/cjs/providers/walletConfig.cjs +41 -0
- package/dist/cjs/providers/walletConfig.native.js +68 -0
- package/dist/cjs/providers/walletConfig.native.js.map +1 -1
- package/dist/cjs/wagmi/driver.cjs +257 -0
- package/dist/cjs/wagmi/driver.native.js +331 -0
- package/dist/cjs/wagmi/driver.native.js.map +1 -0
- package/dist/cjs/wagmi/host.cjs +239 -0
- package/dist/cjs/wagmi/host.native.js +320 -0
- package/dist/cjs/wagmi/host.native.js.map +1 -0
- package/dist/cjs/wagmi/index.cjs +28 -0
- package/dist/cjs/wagmi/index.native.js +31 -0
- package/dist/cjs/wagmi/index.native.js.map +1 -0
- package/dist/cjs/web.cjs +84 -0
- package/dist/esm/bridge/base58.mjs +23 -0
- package/dist/esm/bridge/base58.mjs.map +1 -0
- package/dist/esm/bridge/base58.native.js +23 -0
- package/dist/esm/bridge/base58.native.js.map +1 -0
- package/dist/esm/bridge/core.mjs +3 -2
- package/dist/esm/bridge/core.mjs.map +1 -1
- package/dist/esm/bridge/core.native.js +3 -2
- package/dist/esm/bridge/core.native.js.map +1 -1
- package/dist/esm/bridge/drivers.mjs +113 -0
- package/dist/esm/bridge/drivers.mjs.map +1 -0
- package/dist/esm/bridge/drivers.native.js +130 -0
- package/dist/esm/bridge/drivers.native.js.map +1 -0
- package/dist/esm/bridge/nativeHost.mjs +50 -11
- package/dist/esm/bridge/nativeHost.mjs.map +1 -1
- package/dist/esm/bridge/nativeHost.native.js +57 -11
- package/dist/esm/bridge/nativeHost.native.js.map +1 -1
- package/dist/esm/clients/adapter.mjs.map +1 -1
- package/dist/esm/clients/adapter.native.js.map +1 -1
- package/dist/esm/clients/connector.mjs.map +1 -1
- package/dist/esm/clients/connector.native.js.map +1 -1
- package/dist/esm/clients/evm.mjs +1 -0
- package/dist/esm/clients/evm.mjs.map +1 -1
- package/dist/esm/clients/evm.native.js +1 -0
- package/dist/esm/clients/evm.native.js.map +1 -1
- package/dist/esm/clients/evmRead.mjs +78 -0
- package/dist/esm/clients/evmRead.mjs.map +1 -0
- package/dist/esm/clients/evmRead.native.js +95 -0
- package/dist/esm/clients/evmRead.native.js.map +1 -0
- package/dist/esm/clients/hooks.mjs +38 -9
- package/dist/esm/clients/hooks.mjs.map +1 -1
- package/dist/esm/clients/hooks.native.js +44 -7
- package/dist/esm/clients/hooks.native.js.map +1 -1
- package/dist/esm/clients/index.mjs +4 -3
- package/dist/esm/clients/index.mjs.map +1 -1
- package/dist/esm/clients/index.native.js +4 -3
- package/dist/esm/clients/index.native.js.map +1 -1
- package/dist/esm/clients/types.mjs +7 -1
- package/dist/esm/clients/types.mjs.map +1 -1
- package/dist/esm/clients/types.native.js +14 -1
- package/dist/esm/clients/types.native.js.map +1 -1
- package/dist/esm/connectkit/adapters/BitcoinAdapter.mjs +44 -2
- package/dist/esm/connectkit/adapters/BitcoinAdapter.mjs.map +1 -1
- package/dist/esm/connectkit/adapters/BitcoinAdapter.native.js +73 -5
- package/dist/esm/connectkit/adapters/BitcoinAdapter.native.js.map +1 -1
- package/dist/esm/connectkit/adapters/SolanaAdapter.mjs +46 -0
- package/dist/esm/connectkit/adapters/SolanaAdapter.mjs.map +1 -1
- package/dist/esm/connectkit/adapters/SolanaAdapter.native.js +55 -0
- package/dist/esm/connectkit/adapters/SolanaAdapter.native.js.map +1 -1
- package/dist/esm/connectkit/adapters/SuiAdapter.mjs +40 -0
- package/dist/esm/connectkit/adapters/SuiAdapter.mjs.map +1 -1
- package/dist/esm/connectkit/adapters/SuiAdapter.native.js +50 -0
- package/dist/esm/connectkit/adapters/SuiAdapter.native.js.map +1 -1
- package/dist/esm/connectkit/connectors/ensureWalletConnectors.mjs +4 -1
- package/dist/esm/connectkit/connectors/ensureWalletConnectors.mjs.map +1 -1
- package/dist/esm/connectkit/connectors/ensureWalletConnectors.native.js +8 -1
- package/dist/esm/connectkit/connectors/ensureWalletConnectors.native.js.map +1 -1
- package/dist/esm/connectkit/connectors/getWalletConnectors.mjs.map +1 -1
- package/dist/esm/connectkit/connectors/getWalletConnectors.native.js.map +1 -1
- package/dist/esm/connectkit/connectors/syntheticChains.mjs.map +1 -1
- package/dist/esm/connectkit/connectors/syntheticChains.native.js.map +1 -1
- package/dist/esm/connectkit/connectors/walletAdapterConnector.mjs.map +1 -1
- package/dist/esm/connectkit/connectors/walletAdapterConnector.native.js.map +1 -1
- package/dist/esm/connectkit/defaultConfig.mjs +6 -3
- package/dist/esm/connectkit/defaultConfig.mjs.map +1 -1
- package/dist/esm/connectkit/defaultConfig.native.js +10 -3
- package/dist/esm/connectkit/defaultConfig.native.js.map +1 -1
- package/dist/esm/connectkit/siwe/SIWEContext.mjs.map +1 -1
- package/dist/esm/connectkit/siwe/SIWEContext.native.js.map +1 -1
- package/dist/esm/connectkit/siwe/SIWEProvider.mjs +6 -4
- package/dist/esm/connectkit/siwe/SIWEProvider.mjs.map +1 -1
- package/dist/esm/connectkit/siwe/SIWEProvider.native.js +8 -4
- package/dist/esm/connectkit/siwe/SIWEProvider.native.js.map +1 -1
- package/dist/esm/connectkit/siwe/connectIntent.mjs +54 -16
- package/dist/esm/connectkit/siwe/connectIntent.mjs.map +1 -1
- package/dist/esm/connectkit/siwe/connectIntent.native.js +98 -16
- package/dist/esm/connectkit/siwe/connectIntent.native.js.map +1 -1
- package/dist/esm/connectkit/siwe/useSIWE.mjs.map +1 -1
- package/dist/esm/connectkit/siwe/useSIWE.native.js.map +1 -1
- package/dist/esm/connectkit/web3Bridge.mjs +61 -16
- package/dist/esm/connectkit/web3Bridge.mjs.map +1 -1
- package/dist/esm/connectkit/web3Bridge.native.js +67 -18
- package/dist/esm/connectkit/web3Bridge.native.js.map +1 -1
- package/dist/esm/core/family.mjs +17 -0
- package/dist/esm/core/family.mjs.map +1 -1
- package/dist/esm/core/family.native.js +17 -0
- package/dist/esm/core/family.native.js.map +1 -1
- package/dist/esm/core/index.mjs +5 -3
- package/dist/esm/core/index.mjs.map +1 -1
- package/dist/esm/core/index.native.js +5 -3
- package/dist/esm/core/index.native.js.map +1 -1
- package/dist/esm/core/lightDriver.mjs +157 -0
- package/dist/esm/core/lightDriver.mjs.map +1 -0
- package/dist/esm/core/lightDriver.native.js +232 -0
- package/dist/esm/core/lightDriver.native.js.map +1 -0
- package/dist/esm/core/react.mjs +10 -1
- package/dist/esm/core/react.mjs.map +1 -1
- package/dist/esm/core/react.native.js +14 -1
- package/dist/esm/core/react.native.js.map +1 -1
- package/dist/esm/core/signIn.mjs +173 -0
- package/dist/esm/core/signIn.mjs.map +1 -0
- package/dist/esm/core/signIn.native.js +209 -0
- package/dist/esm/core/signIn.native.js.map +1 -0
- package/dist/esm/core/store.mjs +47 -2
- package/dist/esm/core/store.mjs.map +1 -1
- package/dist/esm/core/store.native.js +49 -2
- package/dist/esm/core/store.native.js.map +1 -1
- package/dist/esm/families/btc.mjs +19 -0
- package/dist/esm/families/btc.mjs.map +1 -0
- package/dist/esm/families/btc.native.js +21 -0
- package/dist/esm/families/btc.native.js.map +1 -0
- package/dist/esm/families/eth.mjs +32 -0
- package/dist/esm/families/eth.mjs.map +1 -0
- package/dist/esm/families/eth.native.js +33 -0
- package/dist/esm/families/eth.native.js.map +1 -0
- package/dist/esm/families/gpg.mjs +15 -0
- package/dist/esm/families/gpg.mjs.map +1 -0
- package/dist/esm/families/gpg.native.js +15 -0
- package/dist/esm/families/gpg.native.js.map +1 -0
- package/dist/esm/families/host.mjs +12 -0
- package/dist/esm/families/host.mjs.map +1 -0
- package/dist/esm/families/host.native.js +12 -0
- package/dist/esm/families/host.native.js.map +1 -0
- package/dist/esm/families/index.mjs +23 -0
- package/dist/esm/families/index.mjs.map +1 -0
- package/dist/esm/families/index.native.js +23 -0
- package/dist/esm/families/index.native.js.map +1 -0
- package/dist/esm/families/messages.mjs +32 -0
- package/dist/esm/families/messages.mjs.map +1 -0
- package/dist/esm/families/messages.native.js +34 -0
- package/dist/esm/families/messages.native.js.map +1 -0
- package/dist/esm/families/sol.mjs +30 -0
- package/dist/esm/families/sol.mjs.map +1 -0
- package/dist/esm/families/sol.native.js +36 -0
- package/dist/esm/families/sol.native.js.map +1 -0
- package/dist/esm/families/sui.mjs +23 -0
- package/dist/esm/families/sui.mjs.map +1 -0
- package/dist/esm/families/sui.native.js +25 -0
- package/dist/esm/families/sui.native.js.map +1 -0
- package/dist/esm/index.mjs +6 -3
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm/index.native.js +6 -3
- package/dist/esm/index.native.js.map +1 -1
- package/dist/esm/keycloak/keycloakWallet.mjs +13 -0
- package/dist/esm/keycloak/keycloakWallet.mjs.map +1 -1
- package/dist/esm/keycloak/keycloakWallet.native.js +15 -0
- package/dist/esm/keycloak/keycloakWallet.native.js.map +1 -1
- package/dist/esm/keycloak/useDirectLogin.mjs +10 -5
- package/dist/esm/keycloak/useDirectLogin.mjs.map +1 -1
- package/dist/esm/keycloak/useDirectLogin.native.js +12 -5
- package/dist/esm/keycloak/useDirectLogin.native.js.map +1 -1
- package/dist/esm/keycloak/useWalletLogin.mjs +16 -8
- package/dist/esm/keycloak/useWalletLogin.mjs.map +1 -1
- package/dist/esm/light/drivers.mjs +46 -0
- package/dist/esm/light/drivers.mjs.map +1 -0
- package/dist/esm/light/drivers.native.js +67 -0
- package/dist/esm/light/drivers.native.js.map +1 -0
- package/dist/esm/light/index.mjs +3 -0
- package/dist/esm/light/index.mjs.map +1 -0
- package/dist/esm/light/index.native.js +3 -0
- package/dist/esm/light/index.native.js.map +1 -0
- package/dist/esm/providers/WalletProvider.mjs +60 -19
- package/dist/esm/providers/WalletProvider.mjs.map +1 -1
- package/dist/esm/providers/WalletProvider.native.js +101 -59
- package/dist/esm/providers/WalletProvider.native.js.map +1 -1
- package/dist/esm/providers/families.mjs +27 -0
- package/dist/esm/providers/families.mjs.map +1 -0
- package/dist/esm/providers/families.native.js +30 -0
- package/dist/esm/providers/families.native.js.map +1 -0
- package/dist/esm/providers/index.mjs +2 -2
- package/dist/esm/providers/index.mjs.map +1 -1
- package/dist/esm/providers/index.native.js +2 -2
- package/dist/esm/providers/index.native.js.map +1 -1
- package/dist/esm/providers/walletConfig.mjs +40 -1
- package/dist/esm/providers/walletConfig.mjs.map +1 -1
- package/dist/esm/providers/walletConfig.native.js +67 -1
- package/dist/esm/providers/walletConfig.native.js.map +1 -1
- package/dist/esm/wagmi/driver.mjs +232 -0
- package/dist/esm/wagmi/driver.mjs.map +1 -0
- package/dist/esm/wagmi/driver.native.js +303 -0
- package/dist/esm/wagmi/driver.native.js.map +1 -0
- package/dist/esm/wagmi/host.mjs +213 -0
- package/dist/esm/wagmi/host.mjs.map +1 -0
- package/dist/esm/wagmi/host.native.js +291 -0
- package/dist/esm/wagmi/host.native.js.map +1 -0
- package/dist/esm/wagmi/index.mjs +3 -0
- package/dist/esm/wagmi/index.mjs.map +1 -0
- package/dist/esm/wagmi/index.native.js +3 -0
- package/dist/esm/wagmi/index.native.js.map +1 -0
- package/dist/esm/web.mjs +13 -0
- package/dist/esm/web.mjs.map +1 -0
- package/dist/jsx/bridge/base58.mjs +23 -0
- package/dist/jsx/bridge/base58.mjs.map +1 -0
- package/dist/jsx/bridge/base58.native.js +51 -0
- package/dist/jsx/bridge/base58.native.js.map +1 -0
- package/dist/jsx/bridge/core.mjs +3 -2
- package/dist/jsx/bridge/core.mjs.map +1 -1
- package/dist/jsx/bridge/core.native.js +5 -1
- package/dist/jsx/bridge/core.native.js.map +1 -1
- package/dist/jsx/bridge/drivers.mjs +113 -0
- package/dist/jsx/bridge/drivers.mjs.map +1 -0
- package/dist/jsx/bridge/drivers.native.js +161 -0
- package/dist/jsx/bridge/drivers.native.js.map +1 -0
- package/dist/jsx/bridge/nativeHost.mjs +50 -11
- package/dist/jsx/bridge/nativeHost.mjs.map +1 -1
- package/dist/jsx/bridge/nativeHost.native.js +56 -9
- package/dist/jsx/bridge/nativeHost.native.js.map +1 -1
- package/dist/jsx/clients/adapter.mjs.map +1 -1
- package/dist/jsx/clients/adapter.native.js.map +1 -1
- package/dist/jsx/clients/connector.mjs.map +1 -1
- package/dist/jsx/clients/connector.native.js.map +1 -1
- package/dist/jsx/clients/evm.mjs +1 -0
- package/dist/jsx/clients/evm.mjs.map +1 -1
- package/dist/jsx/clients/evm.native.js +1 -0
- package/dist/jsx/clients/evm.native.js.map +1 -1
- package/dist/jsx/clients/evmRead.mjs +78 -0
- package/dist/jsx/clients/evmRead.mjs.map +1 -0
- package/dist/jsx/clients/evmRead.native.js +124 -0
- package/dist/jsx/clients/evmRead.native.js.map +1 -0
- package/dist/jsx/clients/hooks.mjs +38 -9
- package/dist/jsx/clients/hooks.mjs.map +1 -1
- package/dist/jsx/clients/hooks.native.js +43 -5
- package/dist/jsx/clients/hooks.native.js.map +1 -1
- package/dist/jsx/clients/index.mjs +4 -3
- package/dist/jsx/clients/index.mjs.map +1 -1
- package/dist/jsx/clients/index.native.js +5 -0
- package/dist/jsx/clients/index.native.js.map +1 -1
- package/dist/jsx/clients/types.mjs +7 -1
- package/dist/jsx/clients/types.mjs.map +1 -1
- package/dist/jsx/clients/types.native.js +14 -0
- package/dist/jsx/clients/types.native.js.map +1 -1
- package/dist/jsx/connectkit/adapters/BitcoinAdapter.mjs +44 -2
- package/dist/jsx/connectkit/adapters/BitcoinAdapter.mjs.map +1 -1
- package/dist/jsx/connectkit/adapters/BitcoinAdapter.native.js +73 -5
- package/dist/jsx/connectkit/adapters/BitcoinAdapter.native.js.map +1 -1
- package/dist/jsx/connectkit/adapters/SolanaAdapter.mjs +46 -0
- package/dist/jsx/connectkit/adapters/SolanaAdapter.mjs.map +1 -1
- package/dist/jsx/connectkit/adapters/SolanaAdapter.native.js +55 -0
- package/dist/jsx/connectkit/adapters/SolanaAdapter.native.js.map +1 -1
- package/dist/jsx/connectkit/adapters/SuiAdapter.mjs +40 -0
- package/dist/jsx/connectkit/adapters/SuiAdapter.mjs.map +1 -1
- package/dist/jsx/connectkit/adapters/SuiAdapter.native.js +50 -0
- package/dist/jsx/connectkit/adapters/SuiAdapter.native.js.map +1 -1
- package/dist/jsx/connectkit/connectors/ensureWalletConnectors.mjs +4 -1
- package/dist/jsx/connectkit/connectors/ensureWalletConnectors.mjs.map +1 -1
- package/dist/jsx/connectkit/connectors/ensureWalletConnectors.native.js +8 -1
- package/dist/jsx/connectkit/connectors/ensureWalletConnectors.native.js.map +1 -1
- package/dist/jsx/connectkit/connectors/getWalletConnectors.mjs.map +1 -1
- package/dist/jsx/connectkit/connectors/getWalletConnectors.native.js.map +1 -1
- package/dist/jsx/connectkit/connectors/syntheticChains.mjs.map +1 -1
- package/dist/jsx/connectkit/connectors/syntheticChains.native.js.map +1 -1
- package/dist/jsx/connectkit/connectors/walletAdapterConnector.mjs.map +1 -1
- package/dist/jsx/connectkit/connectors/walletAdapterConnector.native.js.map +1 -1
- package/dist/jsx/connectkit/defaultConfig.mjs +6 -3
- package/dist/jsx/connectkit/defaultConfig.mjs.map +1 -1
- package/dist/jsx/connectkit/defaultConfig.native.js +9 -2
- package/dist/jsx/connectkit/defaultConfig.native.js.map +1 -1
- package/dist/jsx/connectkit/siwe/SIWEContext.mjs.map +1 -1
- package/dist/jsx/connectkit/siwe/SIWEContext.native.js.map +1 -1
- package/dist/jsx/connectkit/siwe/SIWEProvider.mjs +6 -4
- package/dist/jsx/connectkit/siwe/SIWEProvider.mjs.map +1 -1
- package/dist/jsx/connectkit/siwe/SIWEProvider.native.js +8 -4
- package/dist/jsx/connectkit/siwe/SIWEProvider.native.js.map +1 -1
- package/dist/jsx/connectkit/siwe/connectIntent.mjs +54 -16
- package/dist/jsx/connectkit/siwe/connectIntent.mjs.map +1 -1
- package/dist/jsx/connectkit/siwe/connectIntent.native.js +100 -16
- package/dist/jsx/connectkit/siwe/connectIntent.native.js.map +1 -1
- package/dist/jsx/connectkit/siwe/useSIWE.mjs.map +1 -1
- package/dist/jsx/connectkit/siwe/useSIWE.native.js.map +1 -1
- package/dist/jsx/connectkit/web3Bridge.mjs +61 -16
- package/dist/jsx/connectkit/web3Bridge.mjs.map +1 -1
- package/dist/jsx/connectkit/web3Bridge.native.js +64 -14
- package/dist/jsx/connectkit/web3Bridge.native.js.map +1 -1
- package/dist/jsx/core/family.mjs +17 -0
- package/dist/jsx/core/family.mjs.map +1 -1
- package/dist/jsx/core/family.native.js +17 -0
- package/dist/jsx/core/family.native.js.map +1 -1
- package/dist/jsx/core/index.mjs +5 -3
- package/dist/jsx/core/index.mjs.map +1 -1
- package/dist/jsx/core/index.native.js +10 -1
- package/dist/jsx/core/index.native.js.map +1 -1
- package/dist/jsx/core/lightDriver.mjs +157 -0
- package/dist/jsx/core/lightDriver.mjs.map +1 -0
- package/dist/jsx/core/lightDriver.native.js +260 -0
- package/dist/jsx/core/lightDriver.native.js.map +1 -0
- package/dist/jsx/core/react.mjs +10 -1
- package/dist/jsx/core/react.mjs.map +1 -1
- package/dist/jsx/core/react.native.js +16 -1
- package/dist/jsx/core/react.native.js.map +1 -1
- package/dist/jsx/core/signIn.mjs +173 -0
- package/dist/jsx/core/signIn.mjs.map +1 -0
- package/dist/jsx/core/signIn.native.js +240 -0
- package/dist/jsx/core/signIn.native.js.map +1 -0
- package/dist/jsx/core/store.mjs +47 -2
- package/dist/jsx/core/store.mjs.map +1 -1
- package/dist/jsx/core/store.native.js +49 -2
- package/dist/jsx/core/store.native.js.map +1 -1
- package/dist/jsx/families/btc.mjs +19 -0
- package/dist/jsx/families/btc.mjs.map +1 -0
- package/dist/jsx/families/btc.native.js +49 -0
- package/dist/jsx/families/btc.native.js.map +1 -0
- package/dist/jsx/families/eth.mjs +32 -0
- package/dist/jsx/families/eth.mjs.map +1 -0
- package/dist/jsx/families/eth.native.js +61 -0
- package/dist/jsx/families/eth.native.js.map +1 -0
- package/dist/jsx/families/gpg.mjs +15 -0
- package/dist/jsx/families/gpg.mjs.map +1 -0
- package/dist/jsx/families/gpg.native.js +43 -0
- package/dist/jsx/families/gpg.native.js.map +1 -0
- package/dist/jsx/families/host.mjs +12 -0
- package/dist/jsx/families/host.mjs.map +1 -0
- package/dist/jsx/families/host.native.js +41 -0
- package/dist/jsx/families/host.native.js.map +1 -0
- package/dist/jsx/families/index.mjs +23 -0
- package/dist/jsx/families/index.mjs.map +1 -0
- package/dist/jsx/families/index.native.js +56 -0
- package/dist/jsx/families/index.native.js.map +1 -0
- package/dist/jsx/families/messages.mjs +32 -0
- package/dist/jsx/families/messages.mjs.map +1 -0
- package/dist/jsx/families/messages.native.js +66 -0
- package/dist/jsx/families/messages.native.js.map +1 -0
- package/dist/jsx/families/sol.mjs +30 -0
- package/dist/jsx/families/sol.mjs.map +1 -0
- package/dist/jsx/families/sol.native.js +64 -0
- package/dist/jsx/families/sol.native.js.map +1 -0
- package/dist/jsx/families/sui.mjs +23 -0
- package/dist/jsx/families/sui.mjs.map +1 -0
- package/dist/jsx/families/sui.native.js +53 -0
- package/dist/jsx/families/sui.native.js.map +1 -0
- package/dist/jsx/index.js +6 -3
- package/dist/jsx/index.js.map +1 -1
- package/dist/jsx/index.mjs +6 -3
- package/dist/jsx/index.mjs.map +1 -1
- package/dist/jsx/index.native.js +21 -1
- package/dist/jsx/index.native.js.map +1 -1
- package/dist/jsx/keycloak/keycloakWallet.mjs +13 -0
- package/dist/jsx/keycloak/keycloakWallet.mjs.map +1 -1
- package/dist/jsx/keycloak/keycloakWallet.native.js +15 -0
- package/dist/jsx/keycloak/keycloakWallet.native.js.map +1 -1
- package/dist/jsx/keycloak/useDirectLogin.mjs +10 -5
- package/dist/jsx/keycloak/useDirectLogin.mjs.map +1 -1
- package/dist/jsx/keycloak/useDirectLogin.native.js +12 -5
- package/dist/jsx/keycloak/useDirectLogin.native.js.map +1 -1
- package/dist/jsx/keycloak/useWalletLogin.mjs +16 -8
- package/dist/jsx/keycloak/useWalletLogin.mjs.map +1 -1
- package/dist/jsx/light/drivers.mjs +46 -0
- package/dist/jsx/light/drivers.mjs.map +1 -0
- package/dist/jsx/light/drivers.native.js +97 -0
- package/dist/jsx/light/drivers.native.js.map +1 -0
- package/dist/jsx/light/index.mjs +3 -0
- package/dist/jsx/light/index.mjs.map +1 -0
- package/dist/jsx/light/index.native.js +33 -0
- package/dist/jsx/light/index.native.js.map +1 -0
- package/dist/jsx/providers/WalletProvider.mjs +60 -19
- package/dist/jsx/providers/WalletProvider.mjs.map +1 -1
- package/dist/jsx/providers/WalletProvider.native.js +99 -56
- package/dist/jsx/providers/WalletProvider.native.js.map +1 -1
- package/dist/jsx/providers/families.mjs +27 -0
- package/dist/jsx/providers/families.mjs.map +1 -0
- package/dist/jsx/providers/families.native.js +59 -0
- package/dist/jsx/providers/families.native.js.map +1 -0
- package/dist/jsx/providers/index.mjs +2 -2
- package/dist/jsx/providers/index.mjs.map +1 -1
- package/dist/jsx/providers/index.native.js +1 -0
- package/dist/jsx/providers/index.native.js.map +1 -1
- package/dist/jsx/providers/walletConfig.mjs +40 -1
- package/dist/jsx/providers/walletConfig.mjs.map +1 -1
- package/dist/jsx/providers/walletConfig.native.js +68 -0
- package/dist/jsx/providers/walletConfig.native.js.map +1 -1
- package/dist/jsx/wagmi/driver.mjs +232 -0
- package/dist/jsx/wagmi/driver.mjs.map +1 -0
- package/dist/jsx/wagmi/driver.native.js +331 -0
- package/dist/jsx/wagmi/driver.native.js.map +1 -0
- package/dist/jsx/wagmi/host.mjs +213 -0
- package/dist/jsx/wagmi/host.mjs.map +1 -0
- package/dist/jsx/wagmi/host.native.js +320 -0
- package/dist/jsx/wagmi/host.native.js.map +1 -0
- package/dist/jsx/wagmi/index.mjs +3 -0
- package/dist/jsx/wagmi/index.mjs.map +1 -0
- package/dist/jsx/wagmi/index.native.js +31 -0
- package/dist/jsx/wagmi/index.native.js.map +1 -0
- package/dist/jsx/web.mjs +13 -0
- package/dist/jsx/web.mjs.map +1 -0
- package/dist/keycloak/login.iife.js +449 -443
- package/docs/bridge-protocol.md +41 -14
- package/package.json +13 -6
- package/src/bridge/base58.spec.ts +18 -0
- package/src/bridge/base58.ts +25 -0
- package/src/bridge/core.ts +2 -0
- package/src/bridge/drivers.spec.ts +283 -0
- package/src/bridge/drivers.ts +155 -0
- package/src/bridge/index.spec.ts +3 -0
- package/src/bridge/nativeHost.spec.ts +139 -15
- package/src/bridge/nativeHost.ts +84 -14
- package/src/bundler/metaMaskConnectTimeouts.spec.ts +3 -0
- package/src/clients/adapter.ts +5 -1
- package/src/clients/connector.ts +2 -0
- package/src/clients/evm.spec.ts +8 -0
- package/src/clients/evm.ts +3 -0
- package/src/clients/evmRead.spec.ts +180 -0
- package/src/clients/evmRead.ts +140 -0
- package/src/clients/hooks.spec.tsx +58 -0
- package/src/clients/hooks.ts +73 -14
- package/src/clients/index.ts +11 -1
- package/src/clients/types.ts +15 -1
- package/src/clients/useEvmReadClient.spec.tsx +93 -0
- package/src/connectkit/adapters/BitcoinAdapter.ts +64 -4
- package/src/connectkit/adapters/SolanaAdapter.ts +49 -0
- package/src/connectkit/adapters/SuiAdapter.ts +47 -1
- package/src/connectkit/connectors/ensureWalletConnectors.ts +10 -1
- package/src/connectkit/connectors/getWalletConnectors.ts +2 -0
- package/src/connectkit/connectors/syntheticChains.ts +8 -0
- package/src/connectkit/connectors/walletAdapterConnector.ts +2 -0
- package/src/connectkit/defaultConfig.ts +21 -7
- package/src/connectkit/siwe/SIWEContext.tsx +3 -0
- package/src/connectkit/siwe/SIWEProvider.spec.tsx +109 -0
- package/src/connectkit/siwe/SIWEProvider.tsx +16 -7
- package/src/connectkit/siwe/connectIntent.spec.ts +100 -30
- package/src/connectkit/siwe/connectIntent.ts +99 -25
- package/src/connectkit/siwe/useSIWE.ts +4 -1
- package/src/connectkit/web3Bridge.tsx +75 -15
- package/src/core/family.spec.ts +19 -0
- package/src/core/family.ts +43 -0
- package/src/core/imports.spec.ts +1 -1
- package/src/core/index.ts +23 -0
- package/src/core/lightDriver.spec.ts +284 -0
- package/src/core/lightDriver.ts +235 -0
- package/src/core/react.ts +18 -0
- package/src/core/signIn.spec.tsx +305 -0
- package/src/core/signIn.ts +282 -0
- package/src/core/store.spec.ts +83 -0
- package/src/core/store.ts +60 -9
- package/src/core/types.ts +15 -1
- package/src/families/btc.ts +16 -0
- package/src/families/eth.ts +35 -0
- package/src/families/families.spec.ts +180 -0
- package/src/families/gpg.ts +13 -0
- package/src/families/host.ts +34 -0
- package/src/families/index.ts +32 -0
- package/src/families/messages.ts +39 -0
- package/src/families/sol.ts +25 -0
- package/src/families/sui.ts +17 -0
- package/src/index.ts +38 -1
- package/src/keycloak/KeycloakWalletLogin.spec.tsx +211 -4
- package/src/keycloak/keycloakWallet.spec.ts +81 -1
- package/src/keycloak/keycloakWallet.ts +24 -2
- package/src/keycloak/useDirectLogin.spec.tsx +77 -4
- package/src/keycloak/useDirectLogin.ts +23 -11
- package/src/keycloak/useWalletLogin.spec.tsx +52 -0
- package/src/keycloak/useWalletLogin.ts +24 -6
- package/src/light/drivers.spec.ts +330 -0
- package/src/light/drivers.ts +54 -0
- package/src/light/index.ts +1 -0
- package/src/light/native.spec.ts +22 -0
- package/src/providers/WalletProvider.native.spec.tsx +288 -0
- package/src/providers/WalletProvider.native.tsx +132 -59
- package/src/providers/WalletProvider.spec.tsx +521 -0
- package/src/providers/WalletProvider.tsx +90 -19
- package/src/providers/families.tsx +39 -0
- package/src/providers/index.ts +3 -0
- package/src/providers/walletConfig.spec.ts +19 -1
- package/src/providers/walletConfig.ts +80 -2
- package/src/wagmi/driver.spec.ts +407 -0
- package/src/wagmi/driver.ts +303 -0
- package/src/wagmi/host.spec.tsx +416 -0
- package/src/wagmi/host.tsx +260 -0
- package/src/wagmi/index.ts +1 -0
- package/src/web.spec.ts +58 -0
- package/src/web.ts +82 -0
- package/types/bridge/base58.d.ts +2 -0
- package/types/bridge/base58.d.ts.map +1 -0
- package/types/bridge/core.d.ts +2 -1
- package/types/bridge/core.d.ts.map +1 -1
- package/types/bridge/drivers.d.ts +24 -0
- package/types/bridge/drivers.d.ts.map +1 -0
- package/types/bridge/nativeHost.d.ts +34 -4
- package/types/bridge/nativeHost.d.ts.map +1 -1
- package/types/clients/adapter.d.ts +5 -1
- package/types/clients/adapter.d.ts.map +1 -1
- package/types/clients/connector.d.ts +2 -0
- package/types/clients/connector.d.ts.map +1 -1
- package/types/clients/evm.d.ts +2 -0
- package/types/clients/evm.d.ts.map +1 -1
- package/types/clients/evmRead.d.ts +54 -0
- package/types/clients/evmRead.d.ts.map +1 -0
- package/types/clients/hooks.d.ts +23 -3
- package/types/clients/hooks.d.ts.map +1 -1
- package/types/clients/index.d.ts +4 -2
- package/types/clients/index.d.ts.map +1 -1
- package/types/clients/types.d.ts +11 -1
- package/types/clients/types.d.ts.map +1 -1
- package/types/connectkit/adapters/BitcoinAdapter.d.ts +9 -0
- package/types/connectkit/adapters/BitcoinAdapter.d.ts.map +1 -1
- package/types/connectkit/adapters/SolanaAdapter.d.ts +12 -0
- package/types/connectkit/adapters/SolanaAdapter.d.ts.map +1 -1
- package/types/connectkit/adapters/SuiAdapter.d.ts +8 -0
- package/types/connectkit/adapters/SuiAdapter.d.ts.map +1 -1
- package/types/connectkit/connectors/ensureWalletConnectors.d.ts +3 -0
- package/types/connectkit/connectors/ensureWalletConnectors.d.ts.map +1 -1
- package/types/connectkit/connectors/getWalletConnectors.d.ts +2 -0
- package/types/connectkit/connectors/getWalletConnectors.d.ts.map +1 -1
- package/types/connectkit/connectors/syntheticChains.d.ts +8 -0
- package/types/connectkit/connectors/syntheticChains.d.ts.map +1 -1
- package/types/connectkit/connectors/walletAdapterConnector.d.ts +2 -0
- package/types/connectkit/connectors/walletAdapterConnector.d.ts.map +1 -1
- package/types/connectkit/defaultConfig.d.ts +2 -1
- package/types/connectkit/defaultConfig.d.ts.map +1 -1
- package/types/connectkit/siwe/SIWEContext.d.ts.map +1 -1
- package/types/connectkit/siwe/SIWEProvider.d.ts +6 -0
- package/types/connectkit/siwe/SIWEProvider.d.ts.map +1 -1
- package/types/connectkit/siwe/connectIntent.d.ts +16 -5
- package/types/connectkit/siwe/connectIntent.d.ts.map +1 -1
- package/types/connectkit/siwe/useSIWE.d.ts +4 -0
- package/types/connectkit/siwe/useSIWE.d.ts.map +1 -1
- package/types/connectkit/web3Bridge.d.ts +2 -0
- package/types/connectkit/web3Bridge.d.ts.map +1 -1
- package/types/core/family.d.ts +26 -0
- package/types/core/family.d.ts.map +1 -1
- package/types/core/index.d.ts +6 -4
- package/types/core/index.d.ts.map +1 -1
- package/types/core/lightDriver.d.ts +52 -0
- package/types/core/lightDriver.d.ts.map +1 -0
- package/types/core/react.d.ts +4 -0
- package/types/core/react.d.ts.map +1 -1
- package/types/core/signIn.d.ts +85 -0
- package/types/core/signIn.d.ts.map +1 -0
- package/types/core/store.d.ts +12 -3
- package/types/core/store.d.ts.map +1 -1
- package/types/core/types.d.ts +14 -1
- package/types/core/types.d.ts.map +1 -1
- package/types/families/btc.d.ts +4 -0
- package/types/families/btc.d.ts.map +1 -0
- package/types/families/eth.d.ts +13 -0
- package/types/families/eth.d.ts.map +1 -0
- package/types/families/gpg.d.ts +4 -0
- package/types/families/gpg.d.ts.map +1 -0
- package/types/families/host.d.ts +24 -0
- package/types/families/host.d.ts.map +1 -0
- package/types/families/index.d.ts +14 -0
- package/types/families/index.d.ts.map +1 -0
- package/types/families/messages.d.ts +7 -0
- package/types/families/messages.d.ts.map +1 -0
- package/types/families/sol.d.ts +9 -0
- package/types/families/sol.d.ts.map +1 -0
- package/types/families/sui.d.ts +4 -0
- package/types/families/sui.d.ts.map +1 -0
- package/types/index.d.ts +5 -2
- package/types/index.d.ts.map +1 -1
- package/types/keycloak/keycloakWallet.d.ts +15 -2
- package/types/keycloak/keycloakWallet.d.ts.map +1 -1
- package/types/keycloak/useDirectLogin.d.ts +11 -6
- package/types/keycloak/useDirectLogin.d.ts.map +1 -1
- package/types/keycloak/useWalletLogin.d.ts +8 -1
- package/types/keycloak/useWalletLogin.d.ts.map +1 -1
- package/types/light/drivers.d.ts +13 -0
- package/types/light/drivers.d.ts.map +1 -0
- package/types/light/index.d.ts +2 -0
- package/types/light/index.d.ts.map +1 -0
- package/types/providers/WalletProvider.d.ts +37 -6
- package/types/providers/WalletProvider.d.ts.map +1 -1
- package/types/providers/WalletProvider.native.d.ts +32 -3
- package/types/providers/WalletProvider.native.d.ts.map +1 -1
- package/types/providers/families.d.ts +12 -0
- package/types/providers/families.d.ts.map +1 -0
- package/types/providers/index.d.ts +1 -1
- package/types/providers/index.d.ts.map +1 -1
- package/types/providers/walletConfig.d.ts +32 -2
- package/types/providers/walletConfig.d.ts.map +1 -1
- package/types/wagmi/driver.d.ts +44 -0
- package/types/wagmi/driver.d.ts.map +1 -0
- package/types/wagmi/host.d.ts +31 -0
- package/types/wagmi/host.d.ts.map +1 -0
- package/types/wagmi/index.d.ts +2 -0
- package/types/wagmi/index.d.ts.map +1 -0
- package/types/web.d.ts +13 -0
- package/types/web.d.ts.map +1 -0
|
@@ -21,7 +21,15 @@ interface StandardWallet {
|
|
|
21
21
|
}
|
|
22
22
|
|
|
23
23
|
interface ConnectFeature {
|
|
24
|
-
connect: (
|
|
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
|
-
|
|
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
|
-
|
|
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"] =
|
|
87
|
-
? [
|
|
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
|
-
//
|
|
134
|
-
//
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
33
|
-
expect(CONNECT_INTENT_TTL_MS).toBe(
|
|
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(
|
|
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(
|
|
54
|
+
expect(hasConnectIntent(1_000 + 600_000, true)).toBe(false);
|
|
44
55
|
expect(storage.getItem(KEY)).toBeNull();
|
|
45
56
|
});
|
|
46
57
|
|
|
47
|
-
it("is
|
|
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
|
-
|
|
50
|
-
expect(
|
|
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(
|
|
56
|
-
|
|
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(
|
|
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(
|
|
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(
|
|
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
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
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(
|
|
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
|
});
|