@multiplatform.one/web3 7.18.0 → 7.20.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +109 -4
- package/dist/cjs/bridge/BridgeClient.native.js.map +1 -1
- package/dist/cjs/bridge/BridgeHost.native.js.map +1 -1
- package/dist/cjs/bridge/SolanaBridge.native.js.map +1 -1
- package/dist/cjs/bridge/base64.native.js.map +1 -1
- package/dist/cjs/bridge/bridgeConnector.native.js.map +1 -1
- package/dist/cjs/bridge/eip1193.native.js.map +1 -1
- package/dist/cjs/bridge/index.native.js.map +1 -1
- package/dist/cjs/bridge/postMessageTransport.native.js.map +1 -1
- package/dist/cjs/bridge/protocol.native.js.map +1 -1
- package/dist/cjs/bridge/transport.native.js.map +1 -1
- package/dist/cjs/bundler/metaMaskConnectTimeouts.cjs +92 -0
- package/dist/cjs/bundler/metaMaskConnectTimeouts.native.js +123 -0
- package/dist/cjs/bundler/metaMaskConnectTimeouts.native.js.map +1 -0
- package/dist/cjs/clients/adapter.cjs +33 -0
- package/dist/cjs/clients/adapter.native.js +36 -0
- package/dist/cjs/clients/adapter.native.js.map +1 -0
- package/dist/cjs/clients/bitcoin.cjs +46 -0
- package/dist/cjs/clients/bitcoin.native.js +51 -0
- package/dist/cjs/clients/bitcoin.native.js.map +1 -0
- package/dist/cjs/clients/connector.cjs +45 -0
- package/dist/cjs/clients/connector.native.js +49 -0
- package/dist/cjs/clients/connector.native.js.map +1 -0
- package/dist/cjs/clients/evm.cjs +171 -0
- package/dist/cjs/clients/evm.native.js +198 -0
- package/dist/cjs/clients/evm.native.js.map +1 -0
- package/dist/cjs/clients/gpg.cjs +31 -0
- package/dist/cjs/clients/gpg.native.js +34 -0
- package/dist/cjs/clients/gpg.native.js.map +1 -0
- package/dist/cjs/clients/hooks.cjs +78 -0
- package/dist/cjs/clients/hooks.native.js +85 -0
- package/dist/cjs/clients/hooks.native.js.map +1 -0
- package/dist/cjs/clients/index.cjs +49 -0
- package/dist/cjs/clients/index.native.js +52 -0
- package/dist/cjs/clients/index.native.js.map +1 -0
- package/dist/cjs/clients/solana.cjs +322 -0
- package/dist/cjs/clients/solana.native.js +511 -0
- package/dist/cjs/clients/solana.native.js.map +1 -0
- package/dist/cjs/clients/solanaMessage.cjs +38 -0
- package/dist/cjs/clients/solanaMessage.native.js +44 -0
- package/dist/cjs/clients/solanaMessage.native.js.map +1 -0
- package/dist/cjs/clients/sui.cjs +46 -0
- package/dist/cjs/clients/sui.native.js +51 -0
- package/dist/cjs/clients/sui.native.js.map +1 -0
- package/dist/cjs/clients/types.cjs +37 -0
- package/dist/cjs/clients/types.native.js +160 -0
- package/dist/cjs/clients/types.native.js.map +1 -0
- package/dist/cjs/clients/useSolanaClient.cjs +50 -0
- package/dist/cjs/clients/useSolanaClient.native.js +57 -0
- package/dist/cjs/clients/useSolanaClient.native.js.map +1 -0
- package/dist/cjs/clients/walletStandard.cjs +63 -0
- package/dist/cjs/clients/walletStandard.native.js +71 -0
- package/dist/cjs/clients/walletStandard.native.js.map +1 -0
- package/dist/cjs/components/NetworkSwitcher.native.js.map +1 -1
- package/dist/cjs/components/TransactionStatus.native.js.map +1 -1
- package/dist/cjs/components/index.native.js.map +1 -1
- package/dist/cjs/connectkit/adapters/BitcoinAdapter.native.js.map +1 -1
- package/dist/cjs/connectkit/adapters/EthereumAdapter.native.js.map +1 -1
- package/dist/cjs/connectkit/adapters/SolanaAdapter.native.js.map +1 -1
- package/dist/cjs/connectkit/adapters/SuiAdapter.native.js.map +1 -1
- package/dist/cjs/connectkit/adapters/discover.native.js.map +1 -1
- package/dist/cjs/connectkit/adapters/index.native.js.map +1 -1
- package/dist/cjs/connectkit/adapters/messages.native.js.map +1 -1
- package/dist/cjs/connectkit/adapters/types.native.js.map +1 -1
- package/dist/cjs/connectkit/assets/chains.native.js.map +1 -1
- package/dist/cjs/connectkit/components/BalanceButton/index.native.js +1 -1
- package/dist/cjs/connectkit/components/BalanceButton/index.native.js.map +1 -1
- package/dist/cjs/connectkit/components/Common/Avatar/index.native.js.map +1 -1
- package/dist/cjs/connectkit/components/Common/Avatar/styles.native.js.map +1 -1
- package/dist/cjs/connectkit/components/Common/Chain/index.native.js.map +1 -1
- package/dist/cjs/connectkit/components/Common/Chain/styles.native.js.map +1 -1
- package/dist/cjs/connectkit/components/Common/ChainSelect/index.native.js +2 -2
- package/dist/cjs/connectkit/components/Common/ChainSelect/index.native.js.map +1 -1
- package/dist/cjs/connectkit/components/Common/ChainSelectDropdown/index.native.js +1 -1
- package/dist/cjs/connectkit/components/Common/ChainSelectDropdown/index.native.js.map +1 -1
- package/dist/cjs/connectkit/components/Common/ChainSelectDropdown/styles.native.js.map +1 -1
- package/dist/cjs/connectkit/components/Common/ChainSelectList/index.native.js.map +1 -1
- package/dist/cjs/connectkit/components/Common/ChainSelectList/styles.native.js.map +1 -1
- package/dist/cjs/connectkit/components/Common/ConnectorList/index.cjs +10 -29
- package/dist/cjs/connectkit/components/Common/ConnectorList/index.native.js +11 -32
- package/dist/cjs/connectkit/components/Common/ConnectorList/index.native.js.map +1 -1
- package/dist/cjs/connectkit/components/Common/ConnectorList/styles.native.js.map +1 -1
- package/dist/cjs/connectkit/components/ConnectButton/index.native.js +4 -4
- package/dist/cjs/connectkit/components/ConnectButton/index.native.js.map +1 -1
- package/dist/cjs/connectkit/components/ConnectButton/styles.native.js.map +1 -1
- package/dist/cjs/connectkit/components/ConnectModal/ConnectUsing.cjs +4 -38
- package/dist/cjs/connectkit/components/ConnectModal/ConnectUsing.native.js +5 -43
- package/dist/cjs/connectkit/components/ConnectModal/ConnectUsing.native.js.map +1 -1
- package/dist/cjs/connectkit/components/ConnectModal/ConnectWithInjector/CircleSpinner/index.native.js.map +1 -1
- package/dist/cjs/connectkit/components/ConnectModal/ConnectWithInjector/CircleSpinner/styles.native.js.map +1 -1
- package/dist/cjs/connectkit/components/ConnectModal/ConnectWithInjector/SquircleSpinner/index.native.js.map +1 -1
- package/dist/cjs/connectkit/components/ConnectModal/ConnectWithInjector/SquircleSpinner/styles.native.js.map +1 -1
- package/dist/cjs/connectkit/components/ConnectModal/ConnectWithInjector/index.cjs +0 -14
- package/dist/cjs/connectkit/components/ConnectModal/ConnectWithInjector/index.native.js +10 -65
- package/dist/cjs/connectkit/components/ConnectModal/ConnectWithInjector/index.native.js.map +1 -1
- package/dist/cjs/connectkit/components/ConnectModal/ConnectWithInjector/styles.native.js.map +1 -1
- package/dist/cjs/connectkit/components/ConnectModal/demo.cjs +0 -15
- package/dist/cjs/connectkit/components/ConnectModal/demo.native.js +9 -24
- package/dist/cjs/connectkit/components/ConnectModal/demo.native.js.map +1 -1
- package/dist/cjs/connectkit/components/NetworkButton/index.native.js +2 -2
- package/dist/cjs/connectkit/components/NetworkButton/index.native.js.map +1 -1
- package/dist/cjs/connectkit/components/Pages/About/graphics.native.js.map +1 -1
- package/dist/cjs/connectkit/components/Pages/About/index.native.js.map +1 -1
- package/dist/cjs/connectkit/components/Pages/About/styles.native.js.map +1 -1
- package/dist/cjs/connectkit/components/Pages/Connectors/index.native.js +1 -1
- package/dist/cjs/connectkit/components/Pages/Connectors/index.native.js.map +1 -1
- package/dist/cjs/connectkit/components/Pages/Connectors/styles.native.js.map +1 -1
- package/dist/cjs/connectkit/components/Pages/DownloadApp/index.native.js.map +1 -1
- package/dist/cjs/connectkit/components/Pages/Onboarding/index.native.js.map +1 -1
- package/dist/cjs/connectkit/components/Pages/Onboarding/styles.native.js.map +1 -1
- package/dist/cjs/connectkit/components/Pages/Profile/index.native.js +2 -2
- package/dist/cjs/connectkit/components/Pages/Profile/index.native.js.map +1 -1
- package/dist/cjs/connectkit/components/Pages/Profile/styles.native.js.map +1 -1
- package/dist/cjs/connectkit/components/Pages/SignInWithEthereum/index.native.js +3 -3
- package/dist/cjs/connectkit/components/Pages/SignInWithEthereum/index.native.js.map +1 -1
- package/dist/cjs/connectkit/components/Pages/SignInWithEthereum/styles.native.js.map +1 -1
- package/dist/cjs/connectkit/components/Pages/SwitchNetworks/index.native.js +1 -1
- package/dist/cjs/connectkit/components/Pages/SwitchNetworks/index.native.js.map +1 -1
- package/dist/cjs/connectkit/components/Standard/SIWE/index.native.js +1 -1
- package/dist/cjs/connectkit/components/Standard/SIWE/index.native.js.map +1 -1
- package/dist/cjs/connectkit/components/Standard/SIWE/styles.native.js.map +1 -1
- package/dist/cjs/connectkit/components/contexts/web3/index.cjs +0 -15
- package/dist/cjs/connectkit/components/contexts/web3/index.native.js +0 -17
- package/dist/cjs/connectkit/components/contexts/web3/index.native.js.map +1 -1
- package/dist/cjs/connectkit/connectors/aaveAccountConnector.cjs +57 -0
- package/dist/cjs/connectkit/connectors/aaveAccountConnector.native.js +67 -0
- package/dist/cjs/connectkit/connectors/aaveAccountConnector.native.js.map +1 -0
- package/dist/cjs/connectkit/connectors/createWalletMessage.native.js.map +1 -1
- package/dist/cjs/connectkit/connectors/embeddedDesktop.cjs +1 -1
- package/dist/cjs/connectkit/connectors/embeddedDesktop.native.js +1 -1
- package/dist/cjs/connectkit/connectors/embeddedDesktop.native.js.map +1 -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/metaMaskConnectConnector.cjs +255 -0
- package/dist/cjs/connectkit/connectors/metaMaskConnectConnector.native.js +315 -0
- package/dist/cjs/connectkit/connectors/metaMaskConnectConnector.native.js.map +1 -0
- package/dist/cjs/connectkit/connectors/syntheticChains.native.js.map +1 -1
- package/dist/cjs/connectkit/connectors/walletAdapterConnector.cjs +2 -0
- package/dist/cjs/connectkit/connectors/walletAdapterConnector.native.js +2 -0
- package/dist/cjs/connectkit/connectors/walletAdapterConnector.native.js.map +1 -1
- package/dist/cjs/connectkit/constants/chainConfigs.native.js.map +1 -1
- package/dist/cjs/connectkit/defaultConfig.cjs +8 -2
- package/dist/cjs/connectkit/defaultConfig.native.js +8 -2
- package/dist/cjs/connectkit/defaultConfig.native.js.map +1 -1
- package/dist/cjs/connectkit/defaultConnectors.cjs +19 -37
- package/dist/cjs/connectkit/defaultConnectors.native.js +19 -37
- package/dist/cjs/connectkit/defaultConnectors.native.js.map +1 -1
- package/dist/cjs/connectkit/defaultTransports.native.js.map +1 -1
- package/dist/cjs/connectkit/hooks/useChainIsSupported.native.js.map +1 -1
- package/dist/cjs/connectkit/hooks/useChains.native.js.map +1 -1
- package/dist/cjs/connectkit/hooks/useConnect.native.js.map +1 -1
- package/dist/cjs/connectkit/hooks/useConnectCallback.native.js.map +1 -1
- package/dist/cjs/connectkit/hooks/useConnectors.cjs +1 -5
- package/dist/cjs/connectkit/hooks/useConnectors.native.js +1 -5
- package/dist/cjs/connectkit/hooks/useConnectors.native.js.map +1 -1
- package/dist/cjs/connectkit/hooks/useEnsFallbackConfig.native.js.map +1 -1
- package/dist/cjs/connectkit/hooks/useLastConnector.native.js.map +1 -1
- package/dist/cjs/connectkit/index.cjs +2 -0
- package/dist/cjs/connectkit/index.native.js +10 -8
- package/dist/cjs/connectkit/index.native.js.map +1 -1
- package/dist/cjs/connectkit/openConnector/context.native.js.map +1 -1
- package/dist/cjs/connectkit/openConnector/device.native.js.map +1 -1
- package/dist/cjs/connectkit/openConnector/index.native.js.map +1 -1
- package/dist/cjs/connectkit/openConnector/launcher.native.js.map +1 -1
- package/dist/cjs/connectkit/profileHeaderAction.native.js +1 -1
- package/dist/cjs/connectkit/profileHeaderAction.native.js.map +1 -1
- package/dist/cjs/connectkit/screens.cjs +1 -14
- package/dist/cjs/connectkit/screens.native.js +23 -40
- package/dist/cjs/connectkit/screens.native.js.map +1 -1
- package/dist/cjs/connectkit/siwe/SIWEContext.native.js.map +1 -1
- package/dist/cjs/connectkit/siwe/SIWEProvider.cjs +7 -7
- package/dist/cjs/connectkit/siwe/SIWEProvider.native.js +10 -9
- package/dist/cjs/connectkit/siwe/SIWEProvider.native.js.map +1 -1
- package/dist/cjs/connectkit/siwe/connectIntent.native.js.map +1 -1
- package/dist/cjs/connectkit/siwe/index.native.js.map +1 -1
- package/dist/cjs/connectkit/siwe/useSIWE.native.js.map +1 -1
- package/dist/cjs/connectkit/useWeb3Modal.native.js +2 -2
- package/dist/cjs/connectkit/useWeb3Modal.native.js.map +1 -1
- package/dist/cjs/connectkit/wallets/index.cjs +4 -3
- package/dist/cjs/connectkit/wallets/index.native.js +4 -3
- package/dist/cjs/connectkit/wallets/index.native.js.map +1 -1
- package/dist/cjs/connectkit/wallets/useWallets.cjs +7 -22
- package/dist/cjs/connectkit/wallets/useWallets.native.js +6 -22
- package/dist/cjs/connectkit/wallets/useWallets.native.js.map +1 -1
- package/dist/cjs/connectkit/wallets/walletConfigs.cjs +3 -62
- package/dist/cjs/connectkit/wallets/walletConfigs.native.js +2 -65
- package/dist/cjs/connectkit/wallets/walletConfigs.native.js.map +1 -1
- package/dist/cjs/connectkit/web3Bridge.cjs +2 -6
- package/dist/cjs/connectkit/web3Bridge.native.js +4 -9
- package/dist/cjs/connectkit/web3Bridge.native.js.map +1 -1
- package/dist/cjs/connectkit/web3Provider.native.js.map +1 -1
- package/dist/cjs/esbuild.cjs +54 -0
- package/dist/cjs/esbuild.native.js +57 -0
- package/dist/cjs/esbuild.native.js.map +1 -0
- package/dist/cjs/examples/LockContract.native.js.map +1 -1
- package/dist/cjs/examples/index.native.js.map +1 -1
- package/dist/cjs/hooks/index.native.js.map +1 -1
- package/dist/cjs/hooks/useContractRead.native.js.map +1 -1
- package/dist/cjs/hooks/useContractWrite.native.js.map +1 -1
- package/dist/cjs/hooks/useWallet.cjs +1 -2
- package/dist/cjs/hooks/useWallet.native.js +1 -4
- package/dist/cjs/hooks/useWallet.native.js.map +1 -1
- package/dist/cjs/index.cjs +2 -1
- package/dist/cjs/index.native.js +6 -5
- package/dist/cjs/index.native.js.map +1 -1
- package/dist/cjs/providers/WalletProvider.cjs +1 -2
- package/dist/cjs/providers/index.native.js.map +1 -1
- package/dist/cjs/providers/mockConnector.native.js.map +1 -1
- package/dist/cjs/providers/native/deepLink.cjs +1 -1
- package/dist/cjs/providers/native/deepLink.native.js +1 -1
- package/dist/cjs/providers/native/deepLink.native.js.map +1 -1
- package/dist/cjs/providers/native/inject.native.js.map +1 -1
- package/dist/cjs/providers/native/visibility.native.js.map +1 -1
- package/dist/cjs/providers/walletConfig.native.js.map +1 -1
- package/dist/cjs/siws/index.native.js.map +1 -1
- package/dist/cjs/siws/message.native.js.map +1 -1
- package/dist/cjs/siws/signWithBridge.native.js.map +1 -1
- package/dist/cjs/siws/verify.native.js.map +1 -1
- package/dist/cjs/solana.cjs +41 -0
- package/dist/cjs/solana.native.js +44 -0
- package/dist/cjs/solana.native.js.map +1 -0
- package/dist/cjs/vite.cjs +76 -0
- package/dist/cjs/vite.native.js +79 -0
- package/dist/cjs/vite.native.js.map +1 -0
- package/dist/esm/bundler/metaMaskConnectTimeouts.mjs +64 -0
- package/dist/esm/bundler/metaMaskConnectTimeouts.mjs.map +1 -0
- package/dist/esm/bundler/metaMaskConnectTimeouts.native.js +92 -0
- package/dist/esm/bundler/metaMaskConnectTimeouts.native.js.map +1 -0
- package/dist/esm/clients/adapter.mjs +8 -0
- package/dist/esm/clients/adapter.mjs.map +1 -0
- package/dist/esm/clients/adapter.native.js +8 -0
- package/dist/esm/clients/adapter.native.js.map +1 -0
- package/dist/esm/clients/bitcoin.mjs +21 -0
- package/dist/esm/clients/bitcoin.mjs.map +1 -0
- package/dist/esm/clients/bitcoin.native.js +23 -0
- package/dist/esm/clients/bitcoin.native.js.map +1 -0
- package/dist/esm/clients/connector.mjs +20 -0
- package/dist/esm/clients/connector.mjs.map +1 -0
- package/dist/esm/clients/connector.native.js +21 -0
- package/dist/esm/clients/connector.native.js.map +1 -0
- package/dist/esm/clients/evm.mjs +146 -0
- package/dist/esm/clients/evm.mjs.map +1 -0
- package/dist/esm/clients/evm.native.js +170 -0
- package/dist/esm/clients/evm.native.js.map +1 -0
- package/dist/esm/clients/gpg.mjs +3 -0
- package/dist/esm/clients/gpg.mjs.map +1 -0
- package/dist/esm/clients/gpg.native.js +3 -0
- package/dist/esm/clients/gpg.native.js.map +1 -0
- package/dist/esm/clients/hooks.mjs +51 -0
- package/dist/esm/clients/hooks.mjs.map +1 -0
- package/dist/esm/clients/hooks.native.js +55 -0
- package/dist/esm/clients/hooks.native.js.map +1 -0
- package/dist/esm/clients/index.mjs +11 -0
- package/dist/esm/clients/index.mjs.map +1 -0
- package/dist/esm/clients/index.native.js +11 -0
- package/dist/esm/clients/index.native.js.map +1 -0
- package/dist/esm/clients/solana.mjs +289 -0
- package/dist/esm/clients/solana.mjs.map +1 -0
- package/dist/esm/clients/solana.native.js +475 -0
- package/dist/esm/clients/solana.native.js.map +1 -0
- package/dist/esm/clients/solanaMessage.mjs +13 -0
- package/dist/esm/clients/solanaMessage.mjs.map +1 -0
- package/dist/esm/clients/solanaMessage.native.js +16 -0
- package/dist/esm/clients/solanaMessage.native.js.map +1 -0
- package/dist/esm/clients/sui.mjs +21 -0
- package/dist/esm/clients/sui.mjs.map +1 -0
- package/dist/esm/clients/sui.native.js +23 -0
- package/dist/esm/clients/sui.native.js.map +1 -0
- package/dist/esm/clients/types.mjs +12 -0
- package/dist/esm/clients/types.mjs.map +1 -0
- package/dist/esm/clients/types.native.js +132 -0
- package/dist/esm/clients/types.native.js.map +1 -0
- package/dist/esm/clients/useSolanaClient.mjs +25 -0
- package/dist/esm/clients/useSolanaClient.mjs.map +1 -0
- package/dist/esm/clients/useSolanaClient.native.js +29 -0
- package/dist/esm/clients/useSolanaClient.native.js.map +1 -0
- package/dist/esm/clients/walletStandard.mjs +33 -0
- package/dist/esm/clients/walletStandard.mjs.map +1 -0
- package/dist/esm/clients/walletStandard.native.js +38 -0
- package/dist/esm/clients/walletStandard.native.js.map +1 -0
- package/dist/esm/connectkit/components/Common/ConnectorList/index.mjs +11 -30
- package/dist/esm/connectkit/components/Common/ConnectorList/index.mjs.map +1 -1
- package/dist/esm/connectkit/components/Common/ConnectorList/index.native.js +12 -33
- package/dist/esm/connectkit/components/Common/ConnectorList/index.native.js.map +1 -1
- package/dist/esm/connectkit/components/ConnectModal/ConnectUsing.mjs +4 -38
- package/dist/esm/connectkit/components/ConnectModal/ConnectUsing.mjs.map +1 -1
- package/dist/esm/connectkit/components/ConnectModal/ConnectUsing.native.js +4 -42
- package/dist/esm/connectkit/components/ConnectModal/ConnectUsing.native.js.map +1 -1
- package/dist/esm/connectkit/components/ConnectModal/ConnectWithInjector/index.mjs +1 -15
- package/dist/esm/connectkit/components/ConnectModal/ConnectWithInjector/index.mjs.map +1 -1
- package/dist/esm/connectkit/components/ConnectModal/ConnectWithInjector/index.native.js +8 -63
- package/dist/esm/connectkit/components/ConnectModal/ConnectWithInjector/index.native.js.map +1 -1
- package/dist/esm/connectkit/components/ConnectModal/demo.mjs +0 -15
- package/dist/esm/connectkit/components/ConnectModal/demo.mjs.map +1 -1
- package/dist/esm/connectkit/components/ConnectModal/demo.native.js +0 -15
- package/dist/esm/connectkit/components/ConnectModal/demo.native.js.map +1 -1
- package/dist/esm/connectkit/components/contexts/web3/index.mjs +0 -15
- package/dist/esm/connectkit/components/contexts/web3/index.mjs.map +1 -1
- package/dist/esm/connectkit/components/contexts/web3/index.native.js +0 -17
- package/dist/esm/connectkit/components/contexts/web3/index.native.js.map +1 -1
- package/dist/esm/connectkit/connectors/aaveAccountConnector.mjs +31 -0
- package/dist/esm/connectkit/connectors/aaveAccountConnector.mjs.map +1 -0
- package/dist/esm/connectkit/connectors/aaveAccountConnector.native.js +38 -0
- package/dist/esm/connectkit/connectors/aaveAccountConnector.native.js.map +1 -0
- package/dist/esm/connectkit/connectors/embeddedDesktop.mjs +1 -1
- package/dist/esm/connectkit/connectors/embeddedDesktop.mjs.map +1 -1
- package/dist/esm/connectkit/connectors/embeddedDesktop.native.js +1 -1
- package/dist/esm/connectkit/connectors/embeddedDesktop.native.js.map +1 -1
- package/dist/esm/connectkit/connectors/metaMaskConnectConnector.mjs +216 -0
- package/dist/esm/connectkit/connectors/metaMaskConnectConnector.mjs.map +1 -0
- package/dist/esm/connectkit/connectors/metaMaskConnectConnector.native.js +273 -0
- package/dist/esm/connectkit/connectors/metaMaskConnectConnector.native.js.map +1 -0
- package/dist/esm/connectkit/connectors/walletAdapterConnector.mjs +2 -0
- package/dist/esm/connectkit/connectors/walletAdapterConnector.mjs.map +1 -1
- package/dist/esm/connectkit/connectors/walletAdapterConnector.native.js +2 -0
- package/dist/esm/connectkit/connectors/walletAdapterConnector.native.js.map +1 -1
- package/dist/esm/connectkit/defaultConfig.mjs +8 -2
- package/dist/esm/connectkit/defaultConfig.mjs.map +1 -1
- package/dist/esm/connectkit/defaultConfig.native.js +8 -2
- package/dist/esm/connectkit/defaultConfig.native.js.map +1 -1
- package/dist/esm/connectkit/defaultConnectors.mjs +16 -34
- package/dist/esm/connectkit/defaultConnectors.mjs.map +1 -1
- package/dist/esm/connectkit/defaultConnectors.native.js +16 -34
- package/dist/esm/connectkit/defaultConnectors.native.js.map +1 -1
- package/dist/esm/connectkit/hooks/useConnectors.mjs +1 -4
- package/dist/esm/connectkit/hooks/useConnectors.mjs.map +1 -1
- package/dist/esm/connectkit/hooks/useConnectors.native.js +1 -4
- package/dist/esm/connectkit/hooks/useConnectors.native.js.map +1 -1
- package/dist/esm/connectkit/index.mjs +2 -1
- package/dist/esm/connectkit/index.mjs.map +1 -1
- package/dist/esm/connectkit/index.native.js +2 -1
- package/dist/esm/connectkit/index.native.js.map +1 -1
- package/dist/esm/connectkit/screens.mjs +1 -14
- package/dist/esm/connectkit/screens.mjs.map +1 -1
- package/dist/esm/connectkit/screens.native.js +16 -33
- package/dist/esm/connectkit/screens.native.js.map +1 -1
- package/dist/esm/connectkit/siwe/SIWEProvider.mjs +7 -7
- package/dist/esm/connectkit/siwe/SIWEProvider.mjs.map +1 -1
- package/dist/esm/connectkit/siwe/SIWEProvider.native.js +10 -9
- package/dist/esm/connectkit/siwe/SIWEProvider.native.js.map +1 -1
- package/dist/esm/connectkit/wallets/index.mjs +3 -2
- package/dist/esm/connectkit/wallets/index.mjs.map +1 -1
- package/dist/esm/connectkit/wallets/index.native.js +3 -2
- package/dist/esm/connectkit/wallets/index.native.js.map +1 -1
- package/dist/esm/connectkit/wallets/useWallets.mjs +2 -17
- package/dist/esm/connectkit/wallets/useWallets.mjs.map +1 -1
- package/dist/esm/connectkit/wallets/useWallets.native.js +1 -17
- package/dist/esm/connectkit/wallets/useWallets.native.js.map +1 -1
- package/dist/esm/connectkit/wallets/walletConfigs.mjs +4 -63
- package/dist/esm/connectkit/wallets/walletConfigs.mjs.map +1 -1
- package/dist/esm/connectkit/wallets/walletConfigs.native.js +3 -66
- package/dist/esm/connectkit/wallets/walletConfigs.native.js.map +1 -1
- package/dist/esm/connectkit/web3Bridge.mjs +3 -7
- package/dist/esm/connectkit/web3Bridge.mjs.map +1 -1
- package/dist/esm/connectkit/web3Bridge.native.js +3 -8
- package/dist/esm/connectkit/web3Bridge.native.js.map +1 -1
- package/dist/esm/esbuild.mjs +29 -0
- package/dist/esm/esbuild.mjs.map +1 -0
- package/dist/esm/esbuild.native.js +29 -0
- package/dist/esm/esbuild.native.js.map +1 -0
- package/dist/esm/hooks/useWallet.mjs +1 -2
- package/dist/esm/hooks/useWallet.mjs.map +1 -1
- package/dist/esm/hooks/useWallet.native.js +1 -4
- package/dist/esm/hooks/useWallet.native.js.map +1 -1
- package/dist/esm/index.mjs +1 -0
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm/index.native.js +1 -0
- package/dist/esm/index.native.js.map +1 -1
- package/dist/esm/providers/WalletProvider.mjs +1 -2
- package/dist/esm/providers/WalletProvider.mjs.map +1 -1
- package/dist/esm/providers/native/deepLink.mjs +1 -1
- package/dist/esm/providers/native/deepLink.mjs.map +1 -1
- package/dist/esm/providers/native/deepLink.native.js +1 -1
- package/dist/esm/providers/native/deepLink.native.js.map +1 -1
- package/dist/esm/providers/walletConfig.mjs.map +1 -1
- package/dist/esm/providers/walletConfig.native.js.map +1 -1
- package/dist/esm/solana.mjs +5 -0
- package/dist/esm/solana.mjs.map +1 -0
- package/dist/esm/solana.native.js +5 -0
- package/dist/esm/solana.native.js.map +1 -0
- package/dist/esm/vite.mjs +51 -0
- package/dist/esm/vite.mjs.map +1 -0
- package/dist/esm/vite.native.js +51 -0
- package/dist/esm/vite.native.js.map +1 -0
- package/dist/jsx/bundler/metaMaskConnectTimeouts.mjs +64 -0
- package/dist/jsx/bundler/metaMaskConnectTimeouts.mjs.map +1 -0
- package/dist/jsx/bundler/metaMaskConnectTimeouts.native.js +123 -0
- package/dist/jsx/bundler/metaMaskConnectTimeouts.native.js.map +1 -0
- package/dist/jsx/clients/adapter.mjs +8 -0
- package/dist/jsx/clients/adapter.mjs.map +1 -0
- package/dist/jsx/clients/adapter.native.js +36 -0
- package/dist/jsx/clients/adapter.native.js.map +1 -0
- package/dist/jsx/clients/bitcoin.mjs +21 -0
- package/dist/jsx/clients/bitcoin.mjs.map +1 -0
- package/dist/jsx/clients/bitcoin.native.js +51 -0
- package/dist/jsx/clients/bitcoin.native.js.map +1 -0
- package/dist/jsx/clients/connector.mjs +20 -0
- package/dist/jsx/clients/connector.mjs.map +1 -0
- package/dist/jsx/clients/connector.native.js +49 -0
- package/dist/jsx/clients/connector.native.js.map +1 -0
- package/dist/jsx/clients/evm.mjs +146 -0
- package/dist/jsx/clients/evm.mjs.map +1 -0
- package/dist/jsx/clients/evm.native.js +198 -0
- package/dist/jsx/clients/evm.native.js.map +1 -0
- package/dist/jsx/clients/gpg.mjs +3 -0
- package/dist/jsx/clients/gpg.mjs.map +1 -0
- package/dist/jsx/clients/gpg.native.js +34 -0
- package/dist/jsx/clients/gpg.native.js.map +1 -0
- package/dist/jsx/clients/hooks.mjs +51 -0
- package/dist/jsx/clients/hooks.mjs.map +1 -0
- package/dist/jsx/clients/hooks.native.js +85 -0
- package/dist/jsx/clients/hooks.native.js.map +1 -0
- package/dist/jsx/clients/index.mjs +11 -0
- package/dist/jsx/clients/index.mjs.map +1 -0
- package/dist/jsx/clients/index.native.js +52 -0
- package/dist/jsx/clients/index.native.js.map +1 -0
- package/dist/jsx/clients/solana.mjs +289 -0
- package/dist/jsx/clients/solana.mjs.map +1 -0
- package/dist/jsx/clients/solana.native.js +511 -0
- package/dist/jsx/clients/solana.native.js.map +1 -0
- package/dist/jsx/clients/solanaMessage.mjs +13 -0
- package/dist/jsx/clients/solanaMessage.mjs.map +1 -0
- package/dist/jsx/clients/solanaMessage.native.js +44 -0
- package/dist/jsx/clients/solanaMessage.native.js.map +1 -0
- package/dist/jsx/clients/sui.mjs +21 -0
- package/dist/jsx/clients/sui.mjs.map +1 -0
- package/dist/jsx/clients/sui.native.js +51 -0
- package/dist/jsx/clients/sui.native.js.map +1 -0
- package/dist/jsx/clients/types.mjs +12 -0
- package/dist/jsx/clients/types.mjs.map +1 -0
- package/dist/jsx/clients/types.native.js +160 -0
- package/dist/jsx/clients/types.native.js.map +1 -0
- package/dist/jsx/clients/useSolanaClient.mjs +25 -0
- package/dist/jsx/clients/useSolanaClient.mjs.map +1 -0
- package/dist/jsx/clients/useSolanaClient.native.js +57 -0
- package/dist/jsx/clients/useSolanaClient.native.js.map +1 -0
- package/dist/jsx/clients/walletStandard.mjs +33 -0
- package/dist/jsx/clients/walletStandard.mjs.map +1 -0
- package/dist/jsx/clients/walletStandard.native.js +71 -0
- package/dist/jsx/clients/walletStandard.native.js.map +1 -0
- package/dist/jsx/connectkit/components/Common/ConnectorList/index.mjs +11 -30
- package/dist/jsx/connectkit/components/Common/ConnectorList/index.mjs.map +1 -1
- package/dist/jsx/connectkit/components/Common/ConnectorList/index.native.js +11 -32
- package/dist/jsx/connectkit/components/Common/ConnectorList/index.native.js.map +1 -1
- package/dist/jsx/connectkit/components/ConnectModal/ConnectUsing.mjs +4 -38
- package/dist/jsx/connectkit/components/ConnectModal/ConnectUsing.mjs.map +1 -1
- package/dist/jsx/connectkit/components/ConnectModal/ConnectUsing.native.js +4 -42
- package/dist/jsx/connectkit/components/ConnectModal/ConnectUsing.native.js.map +1 -1
- package/dist/jsx/connectkit/components/ConnectModal/ConnectWithInjector/index.mjs +1 -15
- package/dist/jsx/connectkit/components/ConnectModal/ConnectWithInjector/index.mjs.map +1 -1
- package/dist/jsx/connectkit/components/ConnectModal/ConnectWithInjector/index.native.js +7 -62
- package/dist/jsx/connectkit/components/ConnectModal/ConnectWithInjector/index.native.js.map +1 -1
- package/dist/jsx/connectkit/components/ConnectModal/demo.mjs +0 -15
- package/dist/jsx/connectkit/components/ConnectModal/demo.mjs.map +1 -1
- package/dist/jsx/connectkit/components/ConnectModal/demo.native.js +0 -15
- package/dist/jsx/connectkit/components/ConnectModal/demo.native.js.map +1 -1
- package/dist/jsx/connectkit/components/contexts/web3/index.mjs +0 -15
- package/dist/jsx/connectkit/components/contexts/web3/index.mjs.map +1 -1
- package/dist/jsx/connectkit/components/contexts/web3/index.native.js +0 -17
- package/dist/jsx/connectkit/components/contexts/web3/index.native.js.map +1 -1
- package/dist/jsx/connectkit/connectors/aaveAccountConnector.mjs +31 -0
- package/dist/jsx/connectkit/connectors/aaveAccountConnector.mjs.map +1 -0
- package/dist/jsx/connectkit/connectors/aaveAccountConnector.native.js +67 -0
- package/dist/jsx/connectkit/connectors/aaveAccountConnector.native.js.map +1 -0
- package/dist/jsx/connectkit/connectors/embeddedDesktop.mjs +1 -1
- package/dist/jsx/connectkit/connectors/embeddedDesktop.mjs.map +1 -1
- package/dist/jsx/connectkit/connectors/embeddedDesktop.native.js +1 -1
- package/dist/jsx/connectkit/connectors/metaMaskConnectConnector.mjs +216 -0
- package/dist/jsx/connectkit/connectors/metaMaskConnectConnector.mjs.map +1 -0
- package/dist/jsx/connectkit/connectors/metaMaskConnectConnector.native.js +315 -0
- package/dist/jsx/connectkit/connectors/metaMaskConnectConnector.native.js.map +1 -0
- package/dist/jsx/connectkit/connectors/walletAdapterConnector.mjs +2 -0
- package/dist/jsx/connectkit/connectors/walletAdapterConnector.mjs.map +1 -1
- package/dist/jsx/connectkit/connectors/walletAdapterConnector.native.js +2 -0
- package/dist/jsx/connectkit/connectors/walletAdapterConnector.native.js.map +1 -1
- package/dist/jsx/connectkit/defaultConfig.mjs +8 -2
- package/dist/jsx/connectkit/defaultConfig.mjs.map +1 -1
- package/dist/jsx/connectkit/defaultConfig.native.js +8 -2
- package/dist/jsx/connectkit/defaultConfig.native.js.map +1 -1
- package/dist/jsx/connectkit/defaultConnectors.mjs +16 -34
- package/dist/jsx/connectkit/defaultConnectors.mjs.map +1 -1
- package/dist/jsx/connectkit/defaultConnectors.native.js +19 -37
- package/dist/jsx/connectkit/defaultConnectors.native.js.map +1 -1
- package/dist/jsx/connectkit/hooks/useConnectors.mjs +1 -4
- package/dist/jsx/connectkit/hooks/useConnectors.mjs.map +1 -1
- package/dist/jsx/connectkit/hooks/useConnectors.native.js +1 -5
- package/dist/jsx/connectkit/hooks/useConnectors.native.js.map +1 -1
- package/dist/jsx/connectkit/index.mjs +2 -1
- package/dist/jsx/connectkit/index.mjs.map +1 -1
- package/dist/jsx/connectkit/index.native.js +2 -0
- package/dist/jsx/connectkit/index.native.js.map +1 -1
- package/dist/jsx/connectkit/screens.mjs +1 -14
- package/dist/jsx/connectkit/screens.mjs.map +1 -1
- package/dist/jsx/connectkit/screens.native.js +16 -33
- package/dist/jsx/connectkit/screens.native.js.map +1 -1
- package/dist/jsx/connectkit/siwe/SIWEProvider.mjs +7 -7
- package/dist/jsx/connectkit/siwe/SIWEProvider.mjs.map +1 -1
- package/dist/jsx/connectkit/siwe/SIWEProvider.native.js +10 -9
- package/dist/jsx/connectkit/siwe/SIWEProvider.native.js.map +1 -1
- package/dist/jsx/connectkit/wallets/index.mjs +3 -2
- package/dist/jsx/connectkit/wallets/index.mjs.map +1 -1
- package/dist/jsx/connectkit/wallets/index.native.js +4 -3
- package/dist/jsx/connectkit/wallets/index.native.js.map +1 -1
- package/dist/jsx/connectkit/wallets/useWallets.mjs +2 -17
- package/dist/jsx/connectkit/wallets/useWallets.mjs.map +1 -1
- package/dist/jsx/connectkit/wallets/useWallets.native.js +6 -22
- package/dist/jsx/connectkit/wallets/useWallets.native.js.map +1 -1
- package/dist/jsx/connectkit/wallets/walletConfigs.mjs +4 -63
- package/dist/jsx/connectkit/wallets/walletConfigs.mjs.map +1 -1
- package/dist/jsx/connectkit/wallets/walletConfigs.native.js +2 -65
- package/dist/jsx/connectkit/wallets/walletConfigs.native.js.map +1 -1
- package/dist/jsx/connectkit/web3Bridge.mjs +3 -7
- package/dist/jsx/connectkit/web3Bridge.mjs.map +1 -1
- package/dist/jsx/connectkit/web3Bridge.native.js +2 -7
- package/dist/jsx/connectkit/web3Bridge.native.js.map +1 -1
- package/dist/jsx/esbuild.mjs +29 -0
- package/dist/jsx/esbuild.mjs.map +1 -0
- package/dist/jsx/esbuild.native.js +57 -0
- package/dist/jsx/esbuild.native.js.map +1 -0
- package/dist/jsx/hooks/useWallet.mjs +1 -2
- package/dist/jsx/hooks/useWallet.mjs.map +1 -1
- package/dist/jsx/hooks/useWallet.native.js +1 -4
- package/dist/jsx/hooks/useWallet.native.js.map +1 -1
- package/dist/jsx/index.js +1 -0
- package/dist/jsx/index.js.map +1 -1
- package/dist/jsx/index.mjs +1 -0
- package/dist/jsx/index.mjs.map +1 -1
- package/dist/jsx/index.native.js +1 -0
- package/dist/jsx/index.native.js.map +1 -1
- package/dist/jsx/providers/WalletProvider.mjs +1 -2
- package/dist/jsx/providers/WalletProvider.mjs.map +1 -1
- package/dist/jsx/providers/native/deepLink.mjs +1 -1
- package/dist/jsx/providers/native/deepLink.mjs.map +1 -1
- package/dist/jsx/providers/native/deepLink.native.js +1 -1
- package/dist/jsx/providers/native/deepLink.native.js.map +1 -1
- package/dist/jsx/providers/walletConfig.mjs.map +1 -1
- package/dist/jsx/providers/walletConfig.native.js.map +1 -1
- package/dist/jsx/solana.mjs +5 -0
- package/dist/jsx/solana.mjs.map +1 -0
- package/dist/jsx/solana.native.js +44 -0
- package/dist/jsx/solana.native.js.map +1 -0
- package/dist/jsx/vite.mjs +51 -0
- package/dist/jsx/vite.mjs.map +1 -0
- package/dist/jsx/vite.native.js +79 -0
- package/dist/jsx/vite.native.js.map +1 -0
- package/package.json +29 -10
- package/src/bundler/metaMaskConnectTimeouts.spec.ts +390 -0
- package/src/bundler/metaMaskConnectTimeouts.ts +126 -0
- package/src/clients/adapter.ts +13 -0
- package/src/clients/bitcoin.ts +42 -0
- package/src/clients/connector.spec.ts +78 -0
- package/src/clients/connector.ts +36 -0
- package/src/clients/evm.spec.ts +265 -0
- package/src/clients/evm.ts +223 -0
- package/src/clients/gpg.spec.ts +169 -0
- package/src/clients/gpg.ts +8 -0
- package/src/clients/hooks.spec.tsx +113 -0
- package/src/clients/hooks.ts +51 -0
- package/src/clients/index.ts +40 -0
- package/src/clients/solana.spec.ts +444 -0
- package/src/clients/solana.ts +465 -0
- package/src/clients/solanaMessage.ts +34 -0
- package/src/clients/sui.ts +42 -0
- package/src/clients/types.ts +40 -0
- package/src/clients/useSolanaClient.ts +31 -0
- package/src/clients/walletStandard.ts +87 -0
- package/src/connectkit/adapters/SolanaAdapter.ts +1 -1
- package/src/connectkit/adapters/discover.ts +1 -1
- package/src/connectkit/components/Common/ConnectorList/index.tsx +20 -50
- package/src/connectkit/components/ConnectModal/ConnectUsing.tsx +11 -62
- package/src/connectkit/components/ConnectModal/ConnectWithInjector/index.tsx +10 -70
- package/src/connectkit/components/ConnectModal/demo.tsx +1 -19
- package/src/connectkit/components/contexts/web3/index.tsx +1 -23
- package/src/connectkit/connectors/aaveAccountConnector.spec.ts +87 -0
- package/src/connectkit/connectors/aaveAccountConnector.ts +43 -0
- package/src/connectkit/connectors/embeddedDesktop.spec.ts +5 -5
- package/src/connectkit/connectors/embeddedDesktop.ts +5 -5
- package/src/connectkit/connectors/metaMaskConnectConnector.spec.ts +230 -0
- package/src/connectkit/connectors/metaMaskConnectConnector.ts +272 -0
- package/src/connectkit/connectors/walletAdapterConnector.ts +2 -0
- package/src/connectkit/defaultConfig.ts +16 -7
- package/src/connectkit/defaultConnectors.ts +19 -40
- package/src/connectkit/hooks/useConnectors.ts +0 -10
- package/src/connectkit/index.ts +4 -0
- package/src/connectkit/screens.tsx +1 -21
- package/src/connectkit/siwe/SIWEProvider.spec.tsx +180 -0
- package/src/connectkit/siwe/SIWEProvider.tsx +11 -13
- package/src/connectkit/wallets/index.ts +5 -2
- package/src/connectkit/wallets/useWallets.tsx +1 -20
- package/src/connectkit/wallets/walletConfigs.tsx +2 -64
- package/src/connectkit/web3Bridge.tsx +4 -21
- package/src/esbuild.ts +42 -0
- package/src/hooks/useWallet.spec.ts +6 -15
- package/src/hooks/useWallet.ts +1 -2
- package/src/index.ts +4 -0
- package/src/providers/WalletProvider.native.tsx +1 -1
- package/src/providers/WalletProvider.tsx +5 -7
- package/src/providers/mockConnector.ts +2 -2
- package/src/providers/native/deepLink.spec.ts +3 -4
- package/src/providers/native/deepLink.ts +1 -2
- package/src/providers/native/inject.spec.ts +1 -1
- package/src/providers/walletConfig.spec.ts +1 -1
- package/src/providers/walletConfig.ts +2 -1
- package/src/solana.ts +30 -0
- package/src/vite.ts +60 -0
- package/types/bundler/metaMaskConnectTimeouts.d.ts +36 -0
- package/types/bundler/metaMaskConnectTimeouts.d.ts.map +1 -0
- package/types/clients/adapter.d.ts +5 -0
- package/types/clients/adapter.d.ts.map +1 -0
- package/types/clients/bitcoin.d.ts +21 -0
- package/types/clients/bitcoin.d.ts.map +1 -0
- package/types/clients/connector.d.ts +14 -0
- package/types/clients/connector.d.ts.map +1 -0
- package/types/clients/evm.d.ts +68 -0
- package/types/clients/evm.d.ts.map +1 -0
- package/types/clients/gpg.d.ts +2 -0
- package/types/clients/gpg.d.ts.map +1 -0
- package/types/clients/hooks.d.ts +16 -0
- package/types/clients/hooks.d.ts.map +1 -0
- package/types/clients/index.d.ts +10 -0
- package/types/clients/index.d.ts.map +1 -0
- package/types/clients/solana.d.ts +111 -0
- package/types/clients/solana.d.ts.map +1 -0
- package/types/clients/solanaMessage.d.ts +18 -0
- package/types/clients/solanaMessage.d.ts.map +1 -0
- package/types/clients/sui.d.ts +21 -0
- package/types/clients/sui.d.ts.map +1 -0
- package/types/clients/types.d.ts +27 -0
- package/types/clients/types.d.ts.map +1 -0
- package/types/clients/useSolanaClient.d.ts +11 -0
- package/types/clients/useSolanaClient.d.ts.map +1 -0
- package/types/clients/walletStandard.d.ts +63 -0
- package/types/clients/walletStandard.d.ts.map +1 -0
- package/types/connectkit/adapters/discover.d.ts +1 -1
- package/types/connectkit/components/Common/ConnectorList/index.d.ts.map +1 -1
- package/types/connectkit/components/ConnectModal/ConnectUsing.d.ts.map +1 -1
- package/types/connectkit/components/ConnectModal/ConnectWithInjector/index.d.ts +0 -1
- package/types/connectkit/components/ConnectModal/ConnectWithInjector/index.d.ts.map +1 -1
- package/types/connectkit/components/ConnectModal/demo.d.ts.map +1 -1
- package/types/connectkit/components/contexts/web3/index.d.ts +1 -5
- package/types/connectkit/components/contexts/web3/index.d.ts.map +1 -1
- package/types/connectkit/connectors/aaveAccountConnector.d.ts +5 -0
- package/types/connectkit/connectors/aaveAccountConnector.d.ts.map +1 -0
- package/types/connectkit/connectors/embeddedDesktop.d.ts +4 -4
- package/types/connectkit/connectors/embeddedDesktop.d.ts.map +1 -1
- package/types/connectkit/connectors/metaMaskConnectConnector.d.ts +35 -0
- package/types/connectkit/connectors/metaMaskConnectConnector.d.ts.map +1 -0
- package/types/connectkit/connectors/walletAdapterConnector.d.ts.map +1 -1
- package/types/connectkit/defaultConfig.d.ts +3 -2
- package/types/connectkit/defaultConfig.d.ts.map +1 -1
- package/types/connectkit/defaultConnectors.d.ts +3 -4
- package/types/connectkit/defaultConnectors.d.ts.map +1 -1
- package/types/connectkit/hooks/useConnectors.d.ts +0 -1
- package/types/connectkit/hooks/useConnectors.d.ts.map +1 -1
- package/types/connectkit/index.d.ts +1 -0
- package/types/connectkit/index.d.ts.map +1 -1
- package/types/connectkit/screens.d.ts +0 -4
- package/types/connectkit/screens.d.ts.map +1 -1
- package/types/connectkit/siwe/SIWEProvider.d.ts.map +1 -1
- package/types/connectkit/wallets/index.d.ts.map +1 -1
- package/types/connectkit/wallets/useWallets.d.ts.map +1 -1
- package/types/connectkit/wallets/walletConfigs.d.ts +0 -2
- package/types/connectkit/wallets/walletConfigs.d.ts.map +1 -1
- package/types/connectkit/web3Bridge.d.ts.map +1 -1
- package/types/esbuild.d.ts +31 -0
- package/types/esbuild.d.ts.map +1 -0
- package/types/hooks/useWallet.d.ts.map +1 -1
- package/types/index.d.ts +1 -0
- package/types/index.d.ts.map +1 -1
- package/types/providers/WalletProvider.d.ts.map +1 -1
- package/types/providers/mockConnector.d.ts +2 -2
- package/types/providers/native/deepLink.d.ts +1 -1
- package/types/providers/native/deepLink.d.ts.map +1 -1
- package/types/providers/walletConfig.d.ts +2 -1
- package/types/providers/walletConfig.d.ts.map +1 -1
- package/types/solana.d.ts +4 -0
- package/types/solana.d.ts.map +1 -0
- package/types/vite.d.ts +12 -0
- package/types/vite.d.ts.map +1 -0
- package/dist/cjs/connectkit/components/ConnectModal/ConnectWithQRCode.cjs +0 -133
- package/dist/cjs/connectkit/components/ConnectModal/ConnectWithQRCode.native.js +0 -179
- package/dist/cjs/connectkit/components/ConnectModal/ConnectWithQRCode.native.js.map +0 -1
- package/dist/cjs/connectkit/components/Pages/MobileConnectors/index.cjs +0 -158
- package/dist/cjs/connectkit/components/Pages/MobileConnectors/index.native.js +0 -183
- package/dist/cjs/connectkit/components/Pages/MobileConnectors/index.native.js.map +0 -1
- package/dist/cjs/connectkit/components/Pages/MobileConnectors/styles.cjs +0 -90
- package/dist/cjs/connectkit/components/Pages/MobileConnectors/styles.native.js +0 -99
- package/dist/cjs/connectkit/components/Pages/MobileConnectors/styles.native.js.map +0 -1
- package/dist/cjs/connectkit/connectors/metaMaskSdkConnector.cjs +0 -398
- package/dist/cjs/connectkit/connectors/metaMaskSdkConnector.native.js +0 -453
- package/dist/cjs/connectkit/connectors/metaMaskSdkConnector.native.js.map +0 -1
- package/dist/cjs/connectkit/hooks/connectors/useCoinbaseWalletUri.cjs +0 -0
- package/dist/cjs/connectkit/hooks/connectors/useCoinbaseWalletUri.native.js +0 -2
- package/dist/cjs/connectkit/hooks/connectors/useCoinbaseWalletUri.native.js.map +0 -1
- package/dist/cjs/connectkit/hooks/connectors/useWalletConnectUri.cjs +0 -113
- package/dist/cjs/connectkit/hooks/connectors/useWalletConnectUri.native.js +0 -117
- package/dist/cjs/connectkit/hooks/connectors/useWalletConnectUri.native.js.map +0 -1
- package/dist/cjs/connectkit/hooks/useWalletConnectModal.cjs +0 -74
- package/dist/cjs/connectkit/hooks/useWalletConnectModal.native.js +0 -79
- package/dist/cjs/connectkit/hooks/useWalletConnectModal.native.js.map +0 -1
- package/dist/esm/connectkit/components/ConnectModal/ConnectWithQRCode.mjs +0 -108
- package/dist/esm/connectkit/components/ConnectModal/ConnectWithQRCode.mjs.map +0 -1
- package/dist/esm/connectkit/components/ConnectModal/ConnectWithQRCode.native.js +0 -140
- package/dist/esm/connectkit/components/ConnectModal/ConnectWithQRCode.native.js.map +0 -1
- package/dist/esm/connectkit/components/Pages/MobileConnectors/index.mjs +0 -133
- package/dist/esm/connectkit/components/Pages/MobileConnectors/index.mjs.map +0 -1
- package/dist/esm/connectkit/components/Pages/MobileConnectors/index.native.js +0 -144
- package/dist/esm/connectkit/components/Pages/MobileConnectors/index.native.js.map +0 -1
- package/dist/esm/connectkit/components/Pages/MobileConnectors/styles.mjs +0 -61
- package/dist/esm/connectkit/components/Pages/MobileConnectors/styles.mjs.map +0 -1
- package/dist/esm/connectkit/components/Pages/MobileConnectors/styles.native.js +0 -67
- package/dist/esm/connectkit/components/Pages/MobileConnectors/styles.native.js.map +0 -1
- package/dist/esm/connectkit/connectors/metaMaskSdkConnector.mjs +0 -362
- package/dist/esm/connectkit/connectors/metaMaskSdkConnector.mjs.map +0 -1
- package/dist/esm/connectkit/connectors/metaMaskSdkConnector.native.js +0 -414
- package/dist/esm/connectkit/connectors/metaMaskSdkConnector.native.js.map +0 -1
- package/dist/esm/connectkit/hooks/connectors/useCoinbaseWalletUri.mjs +0 -2
- package/dist/esm/connectkit/hooks/connectors/useCoinbaseWalletUri.mjs.map +0 -1
- package/dist/esm/connectkit/hooks/connectors/useCoinbaseWalletUri.native.js +0 -2
- package/dist/esm/connectkit/hooks/connectors/useCoinbaseWalletUri.native.js.map +0 -1
- package/dist/esm/connectkit/hooks/connectors/useWalletConnectUri.mjs +0 -88
- package/dist/esm/connectkit/hooks/connectors/useWalletConnectUri.mjs.map +0 -1
- package/dist/esm/connectkit/hooks/connectors/useWalletConnectUri.native.js +0 -89
- package/dist/esm/connectkit/hooks/connectors/useWalletConnectUri.native.js.map +0 -1
- package/dist/esm/connectkit/hooks/useWalletConnectModal.mjs +0 -49
- package/dist/esm/connectkit/hooks/useWalletConnectModal.mjs.map +0 -1
- package/dist/esm/connectkit/hooks/useWalletConnectModal.native.js +0 -51
- package/dist/esm/connectkit/hooks/useWalletConnectModal.native.js.map +0 -1
- package/dist/jsx/connectkit/components/ConnectModal/ConnectWithQRCode.mjs +0 -108
- package/dist/jsx/connectkit/components/ConnectModal/ConnectWithQRCode.mjs.map +0 -1
- package/dist/jsx/connectkit/components/ConnectModal/ConnectWithQRCode.native.js +0 -179
- package/dist/jsx/connectkit/components/ConnectModal/ConnectWithQRCode.native.js.map +0 -1
- package/dist/jsx/connectkit/components/Pages/MobileConnectors/index.mjs +0 -133
- package/dist/jsx/connectkit/components/Pages/MobileConnectors/index.mjs.map +0 -1
- package/dist/jsx/connectkit/components/Pages/MobileConnectors/index.native.js +0 -183
- package/dist/jsx/connectkit/components/Pages/MobileConnectors/index.native.js.map +0 -1
- package/dist/jsx/connectkit/components/Pages/MobileConnectors/styles.mjs +0 -61
- package/dist/jsx/connectkit/components/Pages/MobileConnectors/styles.mjs.map +0 -1
- package/dist/jsx/connectkit/components/Pages/MobileConnectors/styles.native.js +0 -99
- package/dist/jsx/connectkit/components/Pages/MobileConnectors/styles.native.js.map +0 -1
- package/dist/jsx/connectkit/connectors/metaMaskSdkConnector.mjs +0 -362
- package/dist/jsx/connectkit/connectors/metaMaskSdkConnector.mjs.map +0 -1
- package/dist/jsx/connectkit/connectors/metaMaskSdkConnector.native.js +0 -453
- package/dist/jsx/connectkit/connectors/metaMaskSdkConnector.native.js.map +0 -1
- package/dist/jsx/connectkit/hooks/connectors/useCoinbaseWalletUri.mjs +0 -2
- package/dist/jsx/connectkit/hooks/connectors/useCoinbaseWalletUri.mjs.map +0 -1
- package/dist/jsx/connectkit/hooks/connectors/useCoinbaseWalletUri.native.js +0 -2
- package/dist/jsx/connectkit/hooks/connectors/useCoinbaseWalletUri.native.js.map +0 -1
- package/dist/jsx/connectkit/hooks/connectors/useWalletConnectUri.mjs +0 -88
- package/dist/jsx/connectkit/hooks/connectors/useWalletConnectUri.mjs.map +0 -1
- package/dist/jsx/connectkit/hooks/connectors/useWalletConnectUri.native.js +0 -117
- package/dist/jsx/connectkit/hooks/connectors/useWalletConnectUri.native.js.map +0 -1
- package/dist/jsx/connectkit/hooks/useWalletConnectModal.mjs +0 -49
- package/dist/jsx/connectkit/hooks/useWalletConnectModal.mjs.map +0 -1
- package/dist/jsx/connectkit/hooks/useWalletConnectModal.native.js +0 -79
- package/dist/jsx/connectkit/hooks/useWalletConnectModal.native.js.map +0 -1
- package/src/connectkit/components/ConnectModal/ConnectWithQRCode.tsx +0 -188
- package/src/connectkit/components/Pages/MobileConnectors/index.tsx +0 -142
- package/src/connectkit/components/Pages/MobileConnectors/styles.ts +0 -66
- package/src/connectkit/connectors/metaMaskSdkConnector.ts +0 -505
- package/src/connectkit/hooks/connectors/useCoinbaseWalletUri.tsx +0 -101
- package/src/connectkit/hooks/connectors/useWalletConnectUri.ts +0 -99
- package/src/connectkit/hooks/useWalletConnectModal.tsx +0 -52
- package/types/connectkit/components/ConnectModal/ConnectWithQRCode.d.ts +0 -6
- package/types/connectkit/components/ConnectModal/ConnectWithQRCode.d.ts.map +0 -1
- package/types/connectkit/components/Pages/MobileConnectors/index.d.ts +0 -4
- package/types/connectkit/components/Pages/MobileConnectors/index.d.ts.map +0 -1
- package/types/connectkit/components/Pages/MobileConnectors/styles.d.ts +0 -6
- package/types/connectkit/components/Pages/MobileConnectors/styles.d.ts.map +0 -1
- package/types/connectkit/connectors/metaMaskSdkConnector.d.ts +0 -30
- package/types/connectkit/connectors/metaMaskSdkConnector.d.ts.map +0 -1
- package/types/connectkit/hooks/connectors/useCoinbaseWalletUri.d.ts +0 -1
- package/types/connectkit/hooks/connectors/useCoinbaseWalletUri.d.ts.map +0 -1
- package/types/connectkit/hooks/connectors/useWalletConnectUri.d.ts +0 -8
- package/types/connectkit/hooks/connectors/useWalletConnectUri.d.ts.map +0 -1
- package/types/connectkit/hooks/useWalletConnectModal.d.ts +0 -5
- package/types/connectkit/hooks/useWalletConnectModal.d.ts.map +0 -1
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
import { beforeEach, describe, expect, it } from "vitest";
|
|
2
|
+
import {
|
|
3
|
+
createPublicClient,
|
|
4
|
+
custom,
|
|
5
|
+
decodeFunctionData,
|
|
6
|
+
encodeAbiParameters,
|
|
7
|
+
erc20Abi,
|
|
8
|
+
toHex,
|
|
9
|
+
type Address,
|
|
10
|
+
type Hex,
|
|
11
|
+
} from "viem";
|
|
12
|
+
import { mainnet } from "viem/chains";
|
|
13
|
+
import { evmClient } from "./evm";
|
|
14
|
+
|
|
15
|
+
const account = "0x1111111111111111111111111111111111111111" as Address;
|
|
16
|
+
const token = "0x2222222222222222222222222222222222222222" as Address;
|
|
17
|
+
const spender = "0x3333333333333333333333333333333333333333" as Address;
|
|
18
|
+
const txHash = `0x${"ab".repeat(32)}` as Hex;
|
|
19
|
+
const hashFor = (n: number) => `0x${n.toString(16).padStart(64, "0")}` as Hex;
|
|
20
|
+
|
|
21
|
+
interface Call {
|
|
22
|
+
method: string;
|
|
23
|
+
params?: unknown;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
interface ChainState {
|
|
27
|
+
allowance: bigint;
|
|
28
|
+
balance: bigint;
|
|
29
|
+
/** USDT: transfer/approve return no data, and approve reverts non-zero to non-zero. */
|
|
30
|
+
usdt?: boolean;
|
|
31
|
+
/** Hashes whose receipt comes back reverted. */
|
|
32
|
+
reverted?: Set<Hex>;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
const revert = () => Object.assign(new Error("execution reverted"), { code: 3, data: "0x" as Hex });
|
|
36
|
+
|
|
37
|
+
function mockProvider(state: ChainState) {
|
|
38
|
+
const calls: Call[] = [];
|
|
39
|
+
const sent: Hex[] = [];
|
|
40
|
+
const provider = {
|
|
41
|
+
async request({ method, params }: Call) {
|
|
42
|
+
calls.push({ method, params });
|
|
43
|
+
switch (method) {
|
|
44
|
+
case "eth_chainId":
|
|
45
|
+
return toHex(mainnet.id);
|
|
46
|
+
case "personal_sign":
|
|
47
|
+
return "0xsigned";
|
|
48
|
+
case "eth_sendTransaction": {
|
|
49
|
+
const [{ data }] = params as [{ data?: Hex }];
|
|
50
|
+
const hash = sent.length === 0 ? txHash : hashFor(sent.length + 1);
|
|
51
|
+
sent.push(hash);
|
|
52
|
+
if (data) {
|
|
53
|
+
const { functionName, args } = decodeFunctionData({ abi: erc20Abi, data });
|
|
54
|
+
if (functionName === "approve" && !state.reverted?.has(hash)) {
|
|
55
|
+
state.allowance = (args as [Address, bigint])[1];
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return hash;
|
|
59
|
+
}
|
|
60
|
+
case "eth_getTransactionReceipt": {
|
|
61
|
+
const [hash] = params as [Hex];
|
|
62
|
+
if (!sent.includes(hash)) return null;
|
|
63
|
+
return {
|
|
64
|
+
transactionHash: hash,
|
|
65
|
+
transactionIndex: "0x0",
|
|
66
|
+
blockHash: `0x${"cd".repeat(32)}`,
|
|
67
|
+
blockNumber: "0x10",
|
|
68
|
+
from: account,
|
|
69
|
+
to: token,
|
|
70
|
+
cumulativeGasUsed: "0x5208",
|
|
71
|
+
gasUsed: "0x5208",
|
|
72
|
+
effectiveGasPrice: "0x1",
|
|
73
|
+
contractAddress: null,
|
|
74
|
+
logs: [],
|
|
75
|
+
logsBloom: `0x${"00".repeat(256)}`,
|
|
76
|
+
status: state.reverted?.has(hash) ? "0x0" : "0x1",
|
|
77
|
+
type: "0x2",
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
case "eth_estimateGas":
|
|
81
|
+
return "0x5208";
|
|
82
|
+
case "eth_blockNumber":
|
|
83
|
+
return "0x10";
|
|
84
|
+
case "eth_call": {
|
|
85
|
+
const [{ data }] = params as [{ data: Hex }];
|
|
86
|
+
const { functionName, args } = decodeFunctionData({ abi: erc20Abi, data });
|
|
87
|
+
if (functionName === "allowance")
|
|
88
|
+
return encodeAbiParameters([{ type: "uint256" }], [state.allowance]);
|
|
89
|
+
if (functionName === "balanceOf")
|
|
90
|
+
return encodeAbiParameters([{ type: "uint256" }], [state.balance]);
|
|
91
|
+
if (functionName === "decimals") return encodeAbiParameters([{ type: "uint8" }], [18]);
|
|
92
|
+
if (!state.usdt) return encodeAbiParameters([{ type: "bool" }], [true]);
|
|
93
|
+
if (
|
|
94
|
+
functionName === "approve" &&
|
|
95
|
+
state.allowance > 0n &&
|
|
96
|
+
(args as [Address, bigint])[1] > 0n
|
|
97
|
+
) {
|
|
98
|
+
throw revert();
|
|
99
|
+
}
|
|
100
|
+
return "0x";
|
|
101
|
+
}
|
|
102
|
+
default:
|
|
103
|
+
throw new Error(`unmocked ${method}`);
|
|
104
|
+
}
|
|
105
|
+
},
|
|
106
|
+
};
|
|
107
|
+
const sentTransaction = <T>() => {
|
|
108
|
+
const call = calls.find((c) => c.method === "eth_sendTransaction");
|
|
109
|
+
if (!call) throw new Error("no eth_sendTransaction");
|
|
110
|
+
return (call.params as [T])[0];
|
|
111
|
+
};
|
|
112
|
+
/** Each ERC-20 approve amount sent, in order. */
|
|
113
|
+
const approvals = () =>
|
|
114
|
+
calls
|
|
115
|
+
.filter((c) => c.method === "eth_sendTransaction")
|
|
116
|
+
.map((c) =>
|
|
117
|
+
decodeFunctionData({ abi: erc20Abi, data: (c.params as [{ data: Hex }])[0].data }),
|
|
118
|
+
)
|
|
119
|
+
.filter((d) => d.functionName === "approve")
|
|
120
|
+
.map((d) => (d.args as [Address, bigint])[1]);
|
|
121
|
+
return { provider, calls, sent, sentTransaction, approvals };
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
describe("evmClient", () => {
|
|
125
|
+
let state: ChainState;
|
|
126
|
+
let mock: ReturnType<typeof mockProvider>;
|
|
127
|
+
let client: ReturnType<typeof evmClient>;
|
|
128
|
+
|
|
129
|
+
beforeEach(() => {
|
|
130
|
+
state = { allowance: 0n, balance: 5n * 10n ** 18n };
|
|
131
|
+
mock = mockProvider(state);
|
|
132
|
+
client = evmClient({
|
|
133
|
+
provider: mock.provider as never,
|
|
134
|
+
account,
|
|
135
|
+
chain: mainnet,
|
|
136
|
+
publicClient: createPublicClient({
|
|
137
|
+
chain: mainnet,
|
|
138
|
+
pollingInterval: 1,
|
|
139
|
+
transport: custom(mock.provider),
|
|
140
|
+
}),
|
|
141
|
+
});
|
|
142
|
+
});
|
|
143
|
+
|
|
144
|
+
it("shares the common client shape", () => {
|
|
145
|
+
expect(client.family).toBe("evm");
|
|
146
|
+
expect(client.address).toBe(account);
|
|
147
|
+
expect(client.chainId).toBe(1);
|
|
148
|
+
expect(client.capabilities).toEqual(["signMessage", "sendTransaction", "writeContract"]);
|
|
149
|
+
});
|
|
150
|
+
|
|
151
|
+
it("signs with personal_sign on the connected account", async () => {
|
|
152
|
+
await expect(client.signMessage("hello")).resolves.toBe("0xsigned");
|
|
153
|
+
const call = mock.calls.find((c) => c.method === "personal_sign");
|
|
154
|
+
expect(call?.params).toEqual([toHex("hello"), account]);
|
|
155
|
+
});
|
|
156
|
+
|
|
157
|
+
it("sends a transaction from the connected account", async () => {
|
|
158
|
+
await expect(client.sendTransaction({ to: spender, value: 1n })).resolves.toBe(txHash);
|
|
159
|
+
const tx = mock.sentTransaction<{ from: Address; to: Address; value: Hex }>();
|
|
160
|
+
expect(tx.from.toLowerCase()).toBe(account.toLowerCase());
|
|
161
|
+
expect(tx.to).toBe(spender);
|
|
162
|
+
expect(tx.value).toBe("0x1");
|
|
163
|
+
});
|
|
164
|
+
|
|
165
|
+
it("writes a contract call", async () => {
|
|
166
|
+
await client.writeContract({
|
|
167
|
+
address: token,
|
|
168
|
+
abi: erc20Abi,
|
|
169
|
+
functionName: "transfer",
|
|
170
|
+
args: [spender, 7n],
|
|
171
|
+
});
|
|
172
|
+
const tx = mock.sentTransaction<{ to: Address; data: Hex }>();
|
|
173
|
+
expect(tx.to).toBe(token);
|
|
174
|
+
expect(decodeFunctionData({ abi: erc20Abi, data: tx.data })).toEqual({
|
|
175
|
+
functionName: "transfer",
|
|
176
|
+
args: [spender, 7n],
|
|
177
|
+
});
|
|
178
|
+
});
|
|
179
|
+
|
|
180
|
+
it("simulates an ERC-20 transfer before sending it", async () => {
|
|
181
|
+
await expect(client.erc20.transfer({ token, to: spender, amount: 3n })).resolves.toBe(txHash);
|
|
182
|
+
const methods = mock.calls.map((c) => c.method);
|
|
183
|
+
expect(methods.indexOf("eth_call")).toBeLessThan(methods.indexOf("eth_sendTransaction"));
|
|
184
|
+
const tx = mock.sentTransaction<{ data: Hex }>();
|
|
185
|
+
expect(decodeFunctionData({ abi: erc20Abi, data: tx.data })).toEqual({
|
|
186
|
+
functionName: "transfer",
|
|
187
|
+
args: [spender, 3n],
|
|
188
|
+
});
|
|
189
|
+
});
|
|
190
|
+
|
|
191
|
+
it("approves a spender", async () => {
|
|
192
|
+
await client.erc20.approve({ token, spender, amount: 9n });
|
|
193
|
+
const tx = mock.sentTransaction<{ data: Hex }>();
|
|
194
|
+
expect(decodeFunctionData({ abi: erc20Abi, data: tx.data })).toEqual({
|
|
195
|
+
functionName: "approve",
|
|
196
|
+
args: [spender, 9n],
|
|
197
|
+
});
|
|
198
|
+
});
|
|
199
|
+
|
|
200
|
+
it("reads balance, allowance and decimals", async () => {
|
|
201
|
+
state.allowance = 4n;
|
|
202
|
+
await expect(client.erc20.balanceOf(token)).resolves.toBe(5n * 10n ** 18n);
|
|
203
|
+
await expect(client.erc20.allowance(token, spender)).resolves.toBe(4n);
|
|
204
|
+
await expect(client.erc20.decimals(token)).resolves.toBe(18);
|
|
205
|
+
});
|
|
206
|
+
|
|
207
|
+
it("skips the approval when the allowance already covers the amount", async () => {
|
|
208
|
+
state.allowance = 100n;
|
|
209
|
+
await expect(client.erc20.ensureAllowance({ token, spender, amount: 50n })).resolves.toBeNull();
|
|
210
|
+
expect(mock.calls.some((c) => c.method === "eth_sendTransaction")).toBe(false);
|
|
211
|
+
});
|
|
212
|
+
|
|
213
|
+
it("sends transfer and approve to a token that returns nothing, as USDT does", async () => {
|
|
214
|
+
state.usdt = true;
|
|
215
|
+
await expect(client.erc20.transfer({ token, to: spender, amount: 3n })).resolves.toBe(txHash);
|
|
216
|
+
await expect(client.erc20.approve({ token, spender, amount: 9n })).resolves.toBe(hashFor(2));
|
|
217
|
+
});
|
|
218
|
+
|
|
219
|
+
it("approves from a zero allowance and waits for the approval to be mined", async () => {
|
|
220
|
+
await expect(client.erc20.ensureAllowance({ token, spender, amount: 50n })).resolves.toBe(
|
|
221
|
+
txHash,
|
|
222
|
+
);
|
|
223
|
+
expect(mock.approvals()).toEqual([50n]);
|
|
224
|
+
const methods = mock.calls.map((c) => c.method);
|
|
225
|
+
expect(methods.indexOf("eth_getTransactionReceipt")).toBeGreaterThan(
|
|
226
|
+
methods.indexOf("eth_sendTransaction"),
|
|
227
|
+
);
|
|
228
|
+
});
|
|
229
|
+
|
|
230
|
+
it("resets a non-zero allowance to 0 before raising it, which USDT requires", async () => {
|
|
231
|
+
state.usdt = true;
|
|
232
|
+
state.allowance = 5n;
|
|
233
|
+
await expect(client.erc20.ensureAllowance({ token, spender, amount: 50n })).resolves.toBe(
|
|
234
|
+
hashFor(2),
|
|
235
|
+
);
|
|
236
|
+
expect(mock.approvals()).toEqual([0n, 50n]);
|
|
237
|
+
expect(state.allowance).toBe(50n);
|
|
238
|
+
const receipts = mock.calls.filter((c) => c.method === "eth_getTransactionReceipt");
|
|
239
|
+
expect(receipts.map((c) => (c.params as [Hex])[0])).toContain(txHash);
|
|
240
|
+
});
|
|
241
|
+
|
|
242
|
+
it("throws when the approval reverts", async () => {
|
|
243
|
+
state.reverted = new Set([txHash]);
|
|
244
|
+
await expect(client.erc20.ensureAllowance({ token, spender, amount: 50n })).rejects.toThrow(
|
|
245
|
+
`approve ${txHash} reverted`,
|
|
246
|
+
);
|
|
247
|
+
expect(state.allowance).toBe(0n);
|
|
248
|
+
});
|
|
249
|
+
|
|
250
|
+
it("stops at a reverted reset and never sends the second approval", async () => {
|
|
251
|
+
state.usdt = true;
|
|
252
|
+
state.allowance = 5n;
|
|
253
|
+
state.reverted = new Set([txHash]);
|
|
254
|
+
await expect(client.erc20.ensureAllowance({ token, spender, amount: 50n })).rejects.toThrow(
|
|
255
|
+
/reverted/,
|
|
256
|
+
);
|
|
257
|
+
expect(mock.approvals()).toEqual([0n]);
|
|
258
|
+
});
|
|
259
|
+
|
|
260
|
+
it("wraps an existing viem wallet client", () => {
|
|
261
|
+
const wrapped = evmClient({ walletClient: client.walletClient });
|
|
262
|
+
expect(wrapped.address).toBe(account);
|
|
263
|
+
expect(wrapped.chain.id).toBe(1);
|
|
264
|
+
});
|
|
265
|
+
});
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
import {
|
|
2
|
+
createPublicClient,
|
|
3
|
+
createWalletClient,
|
|
4
|
+
custom,
|
|
5
|
+
erc20Abi,
|
|
6
|
+
http,
|
|
7
|
+
type Abi,
|
|
8
|
+
type Account,
|
|
9
|
+
type Address,
|
|
10
|
+
type Chain,
|
|
11
|
+
type ContractFunctionArgs,
|
|
12
|
+
type ContractFunctionName,
|
|
13
|
+
type EIP1193Provider,
|
|
14
|
+
type Hash,
|
|
15
|
+
type Hex,
|
|
16
|
+
type PublicClient,
|
|
17
|
+
type SendTransactionParameters,
|
|
18
|
+
type TransactionReceipt,
|
|
19
|
+
type Transport,
|
|
20
|
+
type WalletClient,
|
|
21
|
+
type WriteContractParameters,
|
|
22
|
+
} from "viem";
|
|
23
|
+
import type { ChainClient, ClientCapability } from "./types";
|
|
24
|
+
|
|
25
|
+
/** A viem wallet client with its account and chain hoisted, the shape wagmi's getWalletClient returns. */
|
|
26
|
+
export type EvmWalletClient = WalletClient<Transport, Chain, Account>;
|
|
27
|
+
|
|
28
|
+
type WritableFunctionName<abi extends Abi | readonly unknown[]> = ContractFunctionName<
|
|
29
|
+
abi,
|
|
30
|
+
"nonpayable" | "payable"
|
|
31
|
+
>;
|
|
32
|
+
|
|
33
|
+
export type EvmWriteContractParameters<
|
|
34
|
+
abi extends Abi | readonly unknown[] = Abi,
|
|
35
|
+
functionName extends WritableFunctionName<abi> = WritableFunctionName<abi>,
|
|
36
|
+
args extends ContractFunctionArgs<abi, "nonpayable" | "payable", functionName> =
|
|
37
|
+
ContractFunctionArgs<abi, "nonpayable" | "payable", functionName>,
|
|
38
|
+
> = WriteContractParameters<abi, functionName, args, Chain, Account>;
|
|
39
|
+
|
|
40
|
+
export type EvmSendTransactionParameters = SendTransactionParameters<Chain, Account>;
|
|
41
|
+
|
|
42
|
+
export interface Erc20Actions {
|
|
43
|
+
balanceOf(token: Address, owner?: Address): Promise<bigint>;
|
|
44
|
+
allowance(token: Address, spender: Address, owner?: Address): Promise<bigint>;
|
|
45
|
+
decimals(token: Address): Promise<number>;
|
|
46
|
+
/** Simulates, then sends `transfer(to, amount)`. `amount` is in the token's base units. */
|
|
47
|
+
transfer(args: { token: Address; to: Address; amount: bigint }): Promise<Hash>;
|
|
48
|
+
/** Simulates, then sends `approve(spender, amount)`. */
|
|
49
|
+
approve(args: { token: Address; spender: Address; amount: bigint }): Promise<Hash>;
|
|
50
|
+
/**
|
|
51
|
+
* Approves `amount` only when the allowance is below it, and waits for that
|
|
52
|
+
* approval to be mined so a purchase call right after it sees the allowance.
|
|
53
|
+
* A non-zero allowance is reset to 0 first, since USDT refuses to move one
|
|
54
|
+
* non-zero allowance to another. Returns the final approval hash, or null
|
|
55
|
+
* when the allowance already covered it. Throws if an approval reverts.
|
|
56
|
+
*/
|
|
57
|
+
ensureAllowance(args: { token: Address; spender: Address; amount: bigint }): Promise<Hash | null>;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
export interface EvmClient extends ChainClient<"evm"> {
|
|
61
|
+
readonly address: Address;
|
|
62
|
+
readonly chainId: number;
|
|
63
|
+
readonly chain: Chain;
|
|
64
|
+
/** The wallet side: anything viem's wallet actions can do. */
|
|
65
|
+
readonly walletClient: EvmWalletClient;
|
|
66
|
+
/** Reads, simulation and receipts. */
|
|
67
|
+
readonly publicClient: PublicClient;
|
|
68
|
+
/** personal_sign; returns the 0x signature. */
|
|
69
|
+
signMessage(message: string): Promise<Hex>;
|
|
70
|
+
sendTransaction(parameters: EvmSendTransactionParameters): Promise<Hash>;
|
|
71
|
+
writeContract<
|
|
72
|
+
const abi extends Abi | readonly unknown[],
|
|
73
|
+
functionName extends WritableFunctionName<abi>,
|
|
74
|
+
args extends ContractFunctionArgs<abi, "nonpayable" | "payable", functionName>,
|
|
75
|
+
>(
|
|
76
|
+
parameters: EvmWriteContractParameters<abi, functionName, args>,
|
|
77
|
+
): Promise<Hash>;
|
|
78
|
+
waitForTransactionReceipt(hash: Hash): Promise<TransactionReceipt>;
|
|
79
|
+
readonly erc20: Erc20Actions;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
export type EvmClientConfig = (
|
|
83
|
+
| {
|
|
84
|
+
/** A viem wallet client, e.g. wagmi's `getWalletClient(config)`. */
|
|
85
|
+
walletClient: EvmWalletClient;
|
|
86
|
+
}
|
|
87
|
+
| {
|
|
88
|
+
/** An EIP-1193 provider: injected, MetaMask Connect, or the native WebView bridge. */
|
|
89
|
+
provider: EIP1193Provider;
|
|
90
|
+
account: Address;
|
|
91
|
+
chain: Chain;
|
|
92
|
+
}
|
|
93
|
+
) & {
|
|
94
|
+
/** Reads go here. Defaults to an http client on `rpcUrl`, else the chain's default RPC. */
|
|
95
|
+
publicClient?: PublicClient;
|
|
96
|
+
rpcUrl?: string;
|
|
97
|
+
};
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* transfer and approve with no outputs. USDT and other pre-standard tokens
|
|
101
|
+
* return nothing, and simulating them against erc20Abi's `returns (bool)`
|
|
102
|
+
* fails to decode the empty result, so the helpers simulate against this.
|
|
103
|
+
*/
|
|
104
|
+
const erc20WriteAbi = [
|
|
105
|
+
{
|
|
106
|
+
type: "function",
|
|
107
|
+
name: "transfer",
|
|
108
|
+
stateMutability: "nonpayable",
|
|
109
|
+
inputs: [
|
|
110
|
+
{ name: "to", type: "address" },
|
|
111
|
+
{ name: "amount", type: "uint256" },
|
|
112
|
+
],
|
|
113
|
+
outputs: [],
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
type: "function",
|
|
117
|
+
name: "approve",
|
|
118
|
+
stateMutability: "nonpayable",
|
|
119
|
+
inputs: [
|
|
120
|
+
{ name: "spender", type: "address" },
|
|
121
|
+
{ name: "amount", type: "uint256" },
|
|
122
|
+
],
|
|
123
|
+
outputs: [],
|
|
124
|
+
},
|
|
125
|
+
] as const;
|
|
126
|
+
|
|
127
|
+
const capabilities: readonly ClientCapability[] = [
|
|
128
|
+
"signMessage",
|
|
129
|
+
"sendTransaction",
|
|
130
|
+
"writeContract",
|
|
131
|
+
];
|
|
132
|
+
|
|
133
|
+
/** Bind a viem WalletClient and PublicClient into the mpo EVM client. */
|
|
134
|
+
export function evmClient(config: EvmClientConfig): EvmClient {
|
|
135
|
+
const walletClient: EvmWalletClient =
|
|
136
|
+
"walletClient" in config
|
|
137
|
+
? config.walletClient
|
|
138
|
+
: createWalletClient({
|
|
139
|
+
account: config.account,
|
|
140
|
+
chain: config.chain,
|
|
141
|
+
transport: custom(config.provider),
|
|
142
|
+
});
|
|
143
|
+
const chain = walletClient.chain;
|
|
144
|
+
if (!chain) throw new Error("evmClient: the wallet client has no chain");
|
|
145
|
+
const publicClient =
|
|
146
|
+
config.publicClient ??
|
|
147
|
+
(createPublicClient({ chain, transport: http(config.rpcUrl) }) as PublicClient);
|
|
148
|
+
const account = walletClient.account;
|
|
149
|
+
|
|
150
|
+
const writeContract = (parameters: EvmWriteContractParameters) =>
|
|
151
|
+
walletClient.writeContract({ account, chain, ...parameters } as EvmWriteContractParameters);
|
|
152
|
+
|
|
153
|
+
const simulateAndWrite = async (parameters: {
|
|
154
|
+
address: Address;
|
|
155
|
+
functionName: "transfer" | "approve";
|
|
156
|
+
args: readonly [Address, bigint];
|
|
157
|
+
}): Promise<Hash> => {
|
|
158
|
+
const { request } = await publicClient.simulateContract({
|
|
159
|
+
account,
|
|
160
|
+
address: parameters.address,
|
|
161
|
+
abi: erc20WriteAbi,
|
|
162
|
+
functionName: parameters.functionName,
|
|
163
|
+
args: parameters.args,
|
|
164
|
+
});
|
|
165
|
+
return walletClient.writeContract({ ...request, account, chain } as EvmWriteContractParameters);
|
|
166
|
+
};
|
|
167
|
+
|
|
168
|
+
const approveAndWait = async (token: Address, spender: Address, amount: bigint) => {
|
|
169
|
+
const hash = await erc20.approve({ token, spender, amount });
|
|
170
|
+
const receipt = await publicClient.waitForTransactionReceipt({ hash });
|
|
171
|
+
if (receipt.status !== "success") throw new Error(`approve ${hash} reverted`);
|
|
172
|
+
return hash;
|
|
173
|
+
};
|
|
174
|
+
|
|
175
|
+
const erc20: Erc20Actions = {
|
|
176
|
+
balanceOf: (token, owner = account.address) =>
|
|
177
|
+
publicClient.readContract({
|
|
178
|
+
address: token,
|
|
179
|
+
abi: erc20Abi,
|
|
180
|
+
functionName: "balanceOf",
|
|
181
|
+
args: [owner],
|
|
182
|
+
}),
|
|
183
|
+
allowance: (token, spender, owner = account.address) =>
|
|
184
|
+
publicClient.readContract({
|
|
185
|
+
address: token,
|
|
186
|
+
abi: erc20Abi,
|
|
187
|
+
functionName: "allowance",
|
|
188
|
+
args: [owner, spender],
|
|
189
|
+
}),
|
|
190
|
+
decimals: (token) =>
|
|
191
|
+
publicClient.readContract({ address: token, abi: erc20Abi, functionName: "decimals" }),
|
|
192
|
+
transfer: ({ token, to, amount }) =>
|
|
193
|
+
simulateAndWrite({ address: token, functionName: "transfer", args: [to, amount] }),
|
|
194
|
+
approve: ({ token, spender, amount }) =>
|
|
195
|
+
simulateAndWrite({ address: token, functionName: "approve", args: [spender, amount] }),
|
|
196
|
+
async ensureAllowance({ token, spender, amount }) {
|
|
197
|
+
const current = await erc20.allowance(token, spender);
|
|
198
|
+
if (current >= amount) return null;
|
|
199
|
+
if (current > 0n) await approveAndWait(token, spender, 0n);
|
|
200
|
+
return approveAndWait(token, spender, amount);
|
|
201
|
+
},
|
|
202
|
+
};
|
|
203
|
+
|
|
204
|
+
return {
|
|
205
|
+
family: "evm",
|
|
206
|
+
address: account.address,
|
|
207
|
+
chainId: chain.id,
|
|
208
|
+
chain,
|
|
209
|
+
capabilities,
|
|
210
|
+
walletClient,
|
|
211
|
+
publicClient,
|
|
212
|
+
signMessage: (message) => walletClient.signMessage({ account, message }),
|
|
213
|
+
sendTransaction: (parameters) =>
|
|
214
|
+
walletClient.sendTransaction({
|
|
215
|
+
account,
|
|
216
|
+
chain,
|
|
217
|
+
...parameters,
|
|
218
|
+
} as EvmSendTransactionParameters),
|
|
219
|
+
writeContract: writeContract as EvmClient["writeContract"],
|
|
220
|
+
waitForTransactionReceipt: (hash) => publicClient.waitForTransactionReceipt({ hash }),
|
|
221
|
+
erc20,
|
|
222
|
+
};
|
|
223
|
+
}
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
// @vitest-environment happy-dom
|
|
2
|
+
import { act, renderHook } from "@testing-library/react";
|
|
3
|
+
import { describe, expect, it } from "vitest";
|
|
4
|
+
import { gpgSignatureCovers } from "@multiplatform.one/gpg/signer";
|
|
5
|
+
import {
|
|
6
|
+
assertGpgSignature,
|
|
7
|
+
createGpgSigner,
|
|
8
|
+
gpgSignCommand,
|
|
9
|
+
useGpgSigner,
|
|
10
|
+
type GpgSignRequest,
|
|
11
|
+
} from "./gpg";
|
|
12
|
+
|
|
13
|
+
// Real `gpg --detach-sign --armor` output from a throwaway key (GnuPG 2.2.40):
|
|
14
|
+
// ed25519 over "sign me" with SHA-256 and SHA-512, ed25519 --textmode over
|
|
15
|
+
// "line one\nline two", RSA-2048 over "sign me".
|
|
16
|
+
const signature = [
|
|
17
|
+
"-----BEGIN PGP SIGNATURE-----",
|
|
18
|
+
"",
|
|
19
|
+
"iHUEABYIAB0WIQSTkGTQEc3oIZuZ2HdhXGslcfiVLQUCarhXCwAKCRBhXGslcfiV",
|
|
20
|
+
"LQ0LAQCXGCKwc0BQsbKZLC3dGO8G+JcugVvc8pXoLwVEhzHg5gEA9ymdo09WgZpg",
|
|
21
|
+
"ucbH3UOfZUAeoo8/udpgkA8x6FJQPQQ=",
|
|
22
|
+
"=ORhi",
|
|
23
|
+
"-----END PGP SIGNATURE-----",
|
|
24
|
+
].join("\n");
|
|
25
|
+
const signatureSha512 = [
|
|
26
|
+
"-----BEGIN PGP SIGNATURE-----",
|
|
27
|
+
"",
|
|
28
|
+
"iHUEABYKAB0WIQSTkGTQEc3oIZuZ2HdhXGslcfiVLQUCarhXCwAKCRBhXGslcfiV",
|
|
29
|
+
"LRKTAQD9KN/ePxTrwxYDVP1Vtv+xWw/ADZTMOBIfM5mG662+UwEAjqKNIAR77Qtd",
|
|
30
|
+
"Yz5lxQdmvudeeATH/0mGrq7h+JHSxwA=",
|
|
31
|
+
"=lq5g",
|
|
32
|
+
"-----END PGP SIGNATURE-----",
|
|
33
|
+
].join("\n");
|
|
34
|
+
const textSignature = [
|
|
35
|
+
"-----BEGIN PGP SIGNATURE-----",
|
|
36
|
+
"",
|
|
37
|
+
"iHUEARYIAB0WIQSTkGTQEc3oIZuZ2HdhXGslcfiVLQUCarhXCwAKCRBhXGslcfiV",
|
|
38
|
+
"LV9cAPwML2fE5cLHDhKjgnHpGjyBJqluiVRkkKwdA8UT64knWgEA9yLAavBGXwOR",
|
|
39
|
+
"VJ6lQNJ4dEUzc4PcrhSY/XoXchB2/wI=",
|
|
40
|
+
"=3t6i",
|
|
41
|
+
"-----END PGP SIGNATURE-----",
|
|
42
|
+
].join("\n");
|
|
43
|
+
const rsaSignature = [
|
|
44
|
+
"-----BEGIN PGP SIGNATURE-----",
|
|
45
|
+
"",
|
|
46
|
+
"iQFIBAABCgAyFiEE5BSx1a7VdcvuJBKxk/hBDWJyGKcFAmq4VwsUHHJzYUBleGFt",
|
|
47
|
+
"cGxlLmludmFsaWQACgkQk/hBDWJyGKfxuAf/RpMSEstfkVr+LSVbqdqvUwb+eFvS",
|
|
48
|
+
"g257dJ/p75cyySijNHMJiKz/Eg++CxGslryotHAse8cDhhaVNdvhsyWdXgeZAlMw",
|
|
49
|
+
"Yb+PN/Hyr185HXMzVGEm5mbyHOZoh1e68K+BZRRW7g8mu32GxuMPlCfSEJ8Ca+cH",
|
|
50
|
+
"JRRm3gdIXejJzYL8+ECHB1ZA/5rrjMRoluCpzIaO/JuOrUka488bEpZa0SM5R/E0",
|
|
51
|
+
"oxgNj/5h9WV99mIBTKP6uPhsduwLOmETKSzJ53wMqND7DUyVhehMcFh0jR39QQWj",
|
|
52
|
+
"/pFp7YB8/krLA03SRbLuuwSJ0tX9Pjb8pXxTUUnnht9+WuxQSIMYFCvtEg==",
|
|
53
|
+
"=TLuY",
|
|
54
|
+
"-----END PGP SIGNATURE-----",
|
|
55
|
+
].join("\n");
|
|
56
|
+
const publicKey = [
|
|
57
|
+
"-----BEGIN PGP PUBLIC KEY BLOCK-----",
|
|
58
|
+
"",
|
|
59
|
+
"mDMEarhXCxYJKwYBBAHaRw8BAQdAMFGusqeWs1dEHGDmMnoDwOBl5noKtQUIGORr",
|
|
60
|
+
"ONGF5GC0JW1wbyBmaXh0dXJlIDxmaXh0dXJlQGV4YW1wbGUuaW52YWxpZD6IkAQT",
|
|
61
|
+
"FggAOBYhBJOQZNARzeghm5nYd2FcayVx+JUtBQJquFcLAhsDBQsJCAcCBhUKCQgL",
|
|
62
|
+
"AgQWAgMBAh4BAheAAAoJEGFcayVx+JUt4OoA/1D+/ZAGt3HeS8d7oLydIaRK2s8h",
|
|
63
|
+
"Ew8OhTBk7hzPJKHAAQD7T5AOlLH3r+MzFkqawLdlWy1FnUiVrwyqIrLDvmniCA==",
|
|
64
|
+
"=yro2",
|
|
65
|
+
"-----END PGP PUBLIC KEY BLOCK-----",
|
|
66
|
+
].join("\n");
|
|
67
|
+
const blob = `${signature}\n${publicKey}`;
|
|
68
|
+
|
|
69
|
+
const pendingOf = (signer: ReturnType<typeof createGpgSigner>) => signer.pending as GpgSignRequest;
|
|
70
|
+
|
|
71
|
+
describe("GPG signer", () => {
|
|
72
|
+
it("parks a request with the terminal command and resolves with the pasted blob", async () => {
|
|
73
|
+
const signer = createGpgSigner();
|
|
74
|
+
expect(signer.family).toBe("gpg");
|
|
75
|
+
expect(signer.address).toBeNull();
|
|
76
|
+
const signed = signer.signMessage("sign me");
|
|
77
|
+
expect(signer.pending).toEqual({ message: "sign me", command: gpgSignCommand("sign me") });
|
|
78
|
+
signer.submit(`\n ${blob}\n`, pendingOf(signer));
|
|
79
|
+
await expect(signed).resolves.toBe(blob);
|
|
80
|
+
expect(signer.pending).toBeNull();
|
|
81
|
+
});
|
|
82
|
+
|
|
83
|
+
it("keeps the request pending when the paste is missing a block", async () => {
|
|
84
|
+
const signer = createGpgSigner();
|
|
85
|
+
const signed = signer.signMessage("sign me");
|
|
86
|
+
expect(() => signer.submit(signature, pendingOf(signer))).toThrow(/PUBLIC KEY/);
|
|
87
|
+
expect(signer.pending?.message).toBe("sign me");
|
|
88
|
+
signer.submit(blob, pendingOf(signer));
|
|
89
|
+
await expect(signed).resolves.toBe(blob);
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
it("refuses a paste for a superseded request, even one for the same message", async () => {
|
|
93
|
+
const signer = createGpgSigner();
|
|
94
|
+
const first = signer.signMessage("sign me");
|
|
95
|
+
const stale = pendingOf(signer);
|
|
96
|
+
const second = signer.signMessage("sign me");
|
|
97
|
+
await expect(first).rejects.toThrow(/superseded/);
|
|
98
|
+
expect(() => signer.submit(blob, stale)).toThrow(/superseded/);
|
|
99
|
+
expect(signer.pending).not.toBe(stale);
|
|
100
|
+
signer.submit(blob, pendingOf(signer));
|
|
101
|
+
await expect(second).resolves.toBe(blob);
|
|
102
|
+
});
|
|
103
|
+
|
|
104
|
+
it("refuses a signature over a different message and keeps the request", async () => {
|
|
105
|
+
const signer = createGpgSigner();
|
|
106
|
+
const signed = signer.signMessage("sign me, nonce 2");
|
|
107
|
+
const request = pendingOf(signer);
|
|
108
|
+
expect(() => signer.submit(blob, request)).toThrow(/different message/);
|
|
109
|
+
expect(signer.pending).toBe(request);
|
|
110
|
+
signer.cancel();
|
|
111
|
+
await expect(signed).rejects.toThrow(/cancelled/);
|
|
112
|
+
});
|
|
113
|
+
|
|
114
|
+
it("rejects on cancel and when a newer request replaces it", async () => {
|
|
115
|
+
const signer = createGpgSigner();
|
|
116
|
+
const first = signer.signMessage("one");
|
|
117
|
+
const second = signer.signMessage("two");
|
|
118
|
+
await expect(first).rejects.toThrow(/superseded/);
|
|
119
|
+
expect(signer.pending?.message).toBe("two");
|
|
120
|
+
const request = pendingOf(signer);
|
|
121
|
+
signer.cancel();
|
|
122
|
+
await expect(second).rejects.toThrow(/cancelled/);
|
|
123
|
+
expect(() => signer.submit(blob, request)).toThrow(/No GPG signature was requested/);
|
|
124
|
+
});
|
|
125
|
+
|
|
126
|
+
it("escapes single quotes so a message cannot break out of the command", () => {
|
|
127
|
+
expect(gpgSignCommand("it's")).toBe(
|
|
128
|
+
`{ printf %s 'it'\\''s' | gpg --detach-sign --armor; gpg --armor --export; }`,
|
|
129
|
+
);
|
|
130
|
+
});
|
|
131
|
+
|
|
132
|
+
it("tells which message a real gpg signature covers", () => {
|
|
133
|
+
expect(gpgSignatureCovers(blob, "sign me")).toBe(true);
|
|
134
|
+
expect(gpgSignatureCovers(blob, "sign me!")).toBe(false);
|
|
135
|
+
expect(gpgSignatureCovers(signatureSha512, "sign me")).toBe(true);
|
|
136
|
+
expect(gpgSignatureCovers(rsaSignature, "sign me")).toBe(true);
|
|
137
|
+
expect(gpgSignatureCovers(rsaSignature, "sign you")).toBe(false);
|
|
138
|
+
// --textmode hashes CRLF line endings, so both spellings of the message match.
|
|
139
|
+
expect(gpgSignatureCovers(textSignature, "line one\nline two")).toBe(true);
|
|
140
|
+
expect(gpgSignatureCovers(textSignature, "line one\r\nline two")).toBe(true);
|
|
141
|
+
expect(gpgSignatureCovers(textSignature, "line one\nline 2")).toBe(false);
|
|
142
|
+
expect(() => gpgSignatureCovers(publicKey, "sign me")).toThrow(/No PGP SIGNATURE/);
|
|
143
|
+
});
|
|
144
|
+
|
|
145
|
+
it("trims a complete paste and rejects an incomplete one", () => {
|
|
146
|
+
expect(assertGpgSignature(` ${blob} `)).toBe(blob);
|
|
147
|
+
expect(() => assertGpgSignature("nope")).toThrow(/FULL output/);
|
|
148
|
+
});
|
|
149
|
+
|
|
150
|
+
it("re-renders a subscribed component as requests come and go", async () => {
|
|
151
|
+
const signer = createGpgSigner();
|
|
152
|
+
const { result } = renderHook(() => useGpgSigner(signer).pending);
|
|
153
|
+
expect(result.current).toBeNull();
|
|
154
|
+
let signed!: Promise<string>;
|
|
155
|
+
act(() => {
|
|
156
|
+
signed = signer.signMessage("sign me");
|
|
157
|
+
});
|
|
158
|
+
expect(result.current?.message).toBe("sign me");
|
|
159
|
+
act(() => signer.submit(blob, pendingOf(signer)));
|
|
160
|
+
expect(result.current).toBeNull();
|
|
161
|
+
await expect(signed).resolves.toBe(blob);
|
|
162
|
+
});
|
|
163
|
+
|
|
164
|
+
it("shares one app-wide signer when none is passed", () => {
|
|
165
|
+
const a = renderHook(() => useGpgSigner());
|
|
166
|
+
const b = renderHook(() => useGpgSigner());
|
|
167
|
+
expect(a.result.current).toBe(b.result.current);
|
|
168
|
+
});
|
|
169
|
+
});
|