@web3auth/no-modal 10.16.0 → 11.0.0-beta.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/dist/lib.cjs/account-linking/index.js +8 -0
- package/dist/lib.cjs/account-linking/react.js +95 -0
- package/dist/lib.cjs/account-linking/rest.js +54 -0
- package/dist/lib.cjs/account-linking/vue.js +98 -0
- package/dist/lib.cjs/base/analytics.js +13 -1
- package/dist/lib.cjs/base/connector/baseConnector.js +104 -2
- package/dist/lib.cjs/base/connector/connectorStatus.js +2 -0
- package/dist/lib.cjs/base/connector/constants.js +6 -2
- package/dist/lib.cjs/base/connector/utils.js +0 -21
- package/dist/lib.cjs/base/constants.js +4 -0
- package/dist/lib.cjs/base/cookie.js +6 -20
- package/dist/lib.cjs/base/errors/index.js +84 -12
- package/dist/lib.cjs/base/utils.js +22 -11
- package/dist/lib.cjs/base/wallet/index.js +7 -0
- package/dist/lib.cjs/base/wallet/solana.js +83 -0
- package/dist/lib.cjs/connectors/auth-connector/authConnector.js +566 -93
- package/dist/lib.cjs/connectors/auth-connector/authSolanaWallet.js +187 -0
- package/dist/lib.cjs/connectors/base-evm-connector/baseEvmConnector.js +55 -58
- package/dist/lib.cjs/connectors/base-solana-connector/baseSolanaConnector.js +57 -66
- package/dist/lib.cjs/connectors/coinbase-connector/coinbaseConnector.js +19 -14
- package/dist/lib.cjs/connectors/injected-evm-connector/injectedEvmConnector.js +18 -13
- package/dist/lib.cjs/connectors/injected-solana-connector/walletStandardConnector.js +24 -36
- package/dist/lib.cjs/connectors/metamask-connector/metamaskConnector.js +350 -131
- package/dist/lib.cjs/connectors/utils.js +8 -2
- package/dist/lib.cjs/connectors/wallet-connect-v2-connector/WalletConnectV2Provider.js +12 -38
- package/dist/lib.cjs/connectors/wallet-connect-v2-connector/config.js +4 -3
- package/dist/lib.cjs/connectors/wallet-connect-v2-connector/walletConnectV2Connector.js +111 -73
- package/dist/lib.cjs/connectors/wallet-connect-v2-connector/walletConnectV2Utils.js +24 -51
- package/dist/lib.cjs/connectors/wallet-connect-v2-connector/wcSolanaWallet.js +144 -0
- package/dist/lib.cjs/index.js +55 -83
- package/dist/lib.cjs/noModal.js +957 -169
- package/dist/lib.cjs/plugins/wallet-services-plugin/plugin.js +23 -39
- package/dist/lib.cjs/providers/account-abstraction-provider/providers/AccountAbstractionProvider.js +12 -10
- package/dist/lib.cjs/providers/account-abstraction-provider/providers/utils.js +8 -6
- package/dist/lib.cjs/providers/account-abstraction-provider/rpc/ethRpcMiddlewares.js +47 -44
- package/dist/lib.cjs/providers/base-provider/CommonJRPCProvider.js +1 -3
- package/dist/lib.cjs/providers/base-provider/baseProvider.js +69 -35
- package/dist/lib.cjs/providers/base-provider/commonPrivateKeyProvider.js +8 -11
- package/dist/lib.cjs/providers/base-provider/index.js +0 -1
- package/dist/lib.cjs/providers/base-provider/jrpcClient.js +18 -19
- package/dist/lib.cjs/providers/base-provider/utils.js +0 -3
- package/dist/lib.cjs/providers/ethereum-provider/rpc/ethRpcMiddlewares.js +22 -43
- package/dist/lib.cjs/providers/ethereum-provider/rpc/jrpcClient.js +18 -19
- package/dist/lib.cjs/providers/ethereum-provider/rpc/walletMiddleware.js +200 -0
- package/dist/lib.cjs/providers/xrpl-provider/providers/privateKeyProviders/xrplPrivateKeyProvider.js +9 -18
- package/dist/lib.cjs/providers/xrpl-provider/providers/privateKeyProviders/xrplWalletUtils.js +2 -1
- package/dist/lib.cjs/providers/xrpl-provider/rpc/JrpcClient.js +19 -26
- package/dist/lib.cjs/providers/xrpl-provider/rpc/xrplRpcMiddlewares.js +46 -37
- package/dist/lib.cjs/react/context/WalletServicesInnerContext.js +2 -69
- package/dist/lib.cjs/react/context/Web3AuthInnerContext.js +6 -161
- package/dist/lib.cjs/react/context/useWalletServicesContextValue.js +76 -0
- package/dist/lib.cjs/react/context/useWeb3AuthInnerContextValue.js +216 -0
- package/dist/lib.cjs/react/hooks/{useIdentityToken.js → useAuthTokenInfo.js} +6 -7
- package/dist/lib.cjs/react/hooks/useCheckout.js +4 -2
- package/dist/lib.cjs/react/hooks/useFunding.js +4 -2
- package/dist/lib.cjs/react/hooks/useReceive.js +4 -2
- package/dist/lib.cjs/react/hooks/useSwap.js +4 -2
- package/dist/lib.cjs/react/hooks/useWalletConnectScanner.js +4 -2
- package/dist/lib.cjs/react/hooks/useWalletServicesPlugin.js +3 -10
- package/dist/lib.cjs/react/hooks/useWalletUI.js +4 -2
- package/dist/lib.cjs/react/hooks/useWallets.js +51 -0
- package/dist/lib.cjs/react/hooks/useWeb3Auth.js +1 -22
- package/dist/lib.cjs/react/hooks/useWeb3AuthConnect.js +2 -2
- package/dist/lib.cjs/react/hooks/useWeb3AuthInner.js +4 -2
- package/dist/lib.cjs/react/index.js +12 -2
- package/dist/lib.cjs/react/solana/hooks/useSignAndSendTransaction.js +22 -4
- package/dist/lib.cjs/react/solana/hooks/useSignMessage.js +20 -2
- package/dist/lib.cjs/react/solana/hooks/useSignTransaction.js +22 -3
- package/dist/lib.cjs/react/solana/hooks/useSolanaWallet.js +34 -51
- package/dist/lib.cjs/react/solana/index.js +2 -0
- package/dist/lib.cjs/react/solana/provider.js +169 -0
- package/dist/lib.cjs/react/wagmi/provider.js +10 -8
- package/dist/lib.cjs/types/account-linking/index.d.ts +2 -0
- package/dist/lib.cjs/types/account-linking/interfaces.d.ts +90 -0
- package/dist/lib.cjs/types/account-linking/react.d.ts +19 -0
- package/dist/lib.cjs/types/account-linking/rest.d.ts +9 -0
- package/dist/lib.cjs/types/account-linking/vue.d.ts +20 -0
- package/dist/lib.cjs/types/base/analytics.d.ts +9 -0
- package/dist/lib.cjs/types/base/connector/baseConnector.d.ts +26 -5
- package/dist/lib.cjs/types/base/connector/connectorStatus.d.ts +1 -0
- package/dist/lib.cjs/types/base/connector/constants.d.ts +5 -0
- package/dist/lib.cjs/types/base/connector/interfaces.d.ts +72 -16
- package/dist/lib.cjs/types/base/connector/utils.d.ts +0 -3
- package/dist/lib.cjs/types/base/constants.d.ts +1 -0
- package/dist/lib.cjs/types/base/cookie.d.ts +0 -7
- package/dist/lib.cjs/types/base/core/IWeb3Auth.d.ts +57 -13
- package/dist/lib.cjs/types/base/errors/index.d.ts +15 -3
- package/dist/lib.cjs/types/base/hooks/index.d.ts +2 -2
- package/dist/lib.cjs/types/base/interfaces.d.ts +8 -2
- package/dist/lib.cjs/types/base/utils.d.ts +9 -2
- package/dist/lib.cjs/types/base/wallet/index.d.ts +3 -0
- package/dist/lib.cjs/types/base/wallet/solana.d.ts +19 -0
- package/dist/lib.cjs/types/connectors/auth-connector/authConnector.d.ts +37 -8
- package/dist/lib.cjs/types/connectors/auth-connector/authSolanaWallet.d.ts +35 -0
- package/dist/lib.cjs/types/connectors/auth-connector/interface.d.ts +77 -2
- package/dist/lib.cjs/types/connectors/base-evm-connector/baseEvmConnector.d.ts +8 -2
- package/dist/lib.cjs/types/connectors/base-solana-connector/baseSolanaConnector.d.ts +8 -2
- package/dist/lib.cjs/types/connectors/injected-evm-connector/injectedEvmConnector.d.ts +2 -2
- package/dist/lib.cjs/types/connectors/injected-solana-connector/walletStandardConnector.d.ts +10 -7
- package/dist/lib.cjs/types/connectors/metamask-connector/metamaskConnector.d.ts +35 -3
- package/dist/lib.cjs/types/connectors/utils.d.ts +2 -0
- package/dist/lib.cjs/types/connectors/wallet-connect-v2-connector/WalletConnectV2Provider.d.ts +0 -1
- package/dist/lib.cjs/types/connectors/wallet-connect-v2-connector/walletConnectV2Utils.d.ts +1 -5
- package/dist/lib.cjs/types/connectors/wallet-connect-v2-connector/wcSolanaWallet.d.ts +26 -0
- package/dist/lib.cjs/types/index.d.ts +1 -0
- package/dist/lib.cjs/types/noModal.d.ts +113 -10
- package/dist/lib.cjs/types/plugins/wallet-services-plugin/plugin.d.ts +1 -4
- package/dist/lib.cjs/types/providers/account-abstraction-provider/rpc/ethRpcMiddlewares.d.ts +4 -4
- package/dist/lib.cjs/types/providers/base-provider/baseProvider.d.ts +7 -0
- package/dist/lib.cjs/types/providers/base-provider/jrpcClient.d.ts +2 -5
- package/dist/lib.cjs/types/providers/base-provider/utils.d.ts +0 -1
- package/dist/lib.cjs/types/providers/ethereum-provider/index.d.ts +0 -1
- package/dist/lib.cjs/types/providers/ethereum-provider/rpc/ethRpcMiddlewares.d.ts +4 -4
- package/dist/lib.cjs/types/providers/ethereum-provider/rpc/index.d.ts +1 -1
- package/dist/lib.cjs/types/providers/ethereum-provider/rpc/jrpcClient.d.ts +2 -5
- package/dist/lib.cjs/types/providers/ethereum-provider/rpc/walletMiddleware.d.ts +3 -0
- package/dist/lib.cjs/types/providers/index.d.ts +0 -1
- package/dist/lib.cjs/types/providers/xrpl-provider/providers/privateKeyProviders/xrplPrivateKeyProvider.d.ts +0 -1
- package/dist/lib.cjs/types/providers/xrpl-provider/rpc/JrpcClient.d.ts +3 -7
- package/dist/lib.cjs/types/providers/xrpl-provider/rpc/xrplRpcMiddlewares.d.ts +5 -12
- package/dist/lib.cjs/types/react/context/index.d.ts +4 -0
- package/dist/lib.cjs/types/react/context/useWalletServicesContextValue.d.ts +12 -0
- package/dist/lib.cjs/types/react/context/useWeb3AuthInnerContextValue.d.ts +26 -0
- package/dist/lib.cjs/types/react/hooks/index.d.ts +2 -1
- package/dist/lib.cjs/types/react/hooks/{useIdentityToken.d.ts → useAuthTokenInfo.d.ts} +4 -4
- package/dist/lib.cjs/types/react/hooks/useWallets.d.ts +8 -0
- package/dist/lib.cjs/types/react/hooks/useWeb3Auth.d.ts +1 -2
- package/dist/lib.cjs/types/react/hooks/useWeb3AuthConnect.d.ts +2 -2
- package/dist/lib.cjs/types/react/index.d.ts +1 -0
- package/dist/lib.cjs/types/react/solana/hooks/useSignAndSendTransaction.d.ts +7 -2
- package/dist/lib.cjs/types/react/solana/hooks/useSignTransaction.d.ts +8 -3
- package/dist/lib.cjs/types/react/solana/hooks/useSolanaWallet.d.ts +17 -4
- package/dist/lib.cjs/types/react/solana/index.d.ts +1 -0
- package/dist/lib.cjs/types/react/solana/provider.d.ts +26 -0
- package/dist/lib.cjs/types/vue/composables/index.d.ts +3 -1
- package/dist/lib.cjs/types/vue/composables/{useIdentityToken.d.ts → useAuthTokenInfo.d.ts} +3 -3
- package/dist/lib.cjs/types/vue/composables/useInjectedWeb3AuthInnerContext.d.ts +1 -0
- package/dist/lib.cjs/types/vue/composables/useWallets.d.ts +9 -0
- package/dist/lib.cjs/types/vue/composables/useWeb3Auth.d.ts +1 -2
- package/dist/lib.cjs/types/vue/composables/useWeb3AuthConnect.d.ts +2 -2
- package/dist/lib.cjs/types/vue/index.d.ts +2 -0
- package/dist/lib.cjs/types/vue/interfaces.d.ts +2 -2
- package/dist/lib.cjs/types/vue/solana/composables/index.d.ts +1 -0
- package/dist/lib.cjs/types/vue/solana/composables/useSignAndSendTransaction.d.ts +7 -2
- package/dist/lib.cjs/types/vue/solana/composables/useSignTransaction.d.ts +8 -3
- package/dist/lib.cjs/types/vue/solana/composables/useSolanaClient.d.ts +7 -0
- package/dist/lib.cjs/types/vue/solana/composables/useSolanaWallet.d.ts +17 -4
- package/dist/lib.cjs/types/vue/solana/constants.d.ts +3 -0
- package/dist/lib.cjs/types/vue/solana/index.d.ts +2 -0
- package/dist/lib.cjs/types/vue/solana/provider.d.ts +8 -0
- package/dist/lib.cjs/types/vue/useWalletServicesInnerContextValue.d.ts +13 -0
- package/dist/lib.cjs/types/vue/useWeb3AuthInnerContextValue.d.ts +26 -0
- package/dist/lib.cjs/types/x402/index.d.ts +43 -0
- package/dist/lib.cjs/types/x402/interfaces.d.ts +11 -0
- package/dist/lib.cjs/types/x402/react.d.ts +17 -0
- package/dist/lib.cjs/types/x402/vue.d.ts +18 -0
- package/dist/lib.cjs/vue/WalletServicesInnerProvider.js +9 -54
- package/dist/lib.cjs/vue/Web3AuthProvider.js +16 -177
- package/dist/lib.cjs/vue/composables/{useIdentityToken.js → useAuthTokenInfo.js} +10 -8
- package/dist/lib.cjs/vue/composables/useCheckout.js +4 -2
- package/dist/lib.cjs/vue/composables/useEnableMFA.js +4 -2
- package/dist/lib.cjs/vue/composables/useFunding.js +4 -2
- package/dist/lib.cjs/vue/composables/useInjectedWeb3AuthInnerContext.js +29 -0
- package/dist/lib.cjs/vue/composables/useManageMFA.js +4 -2
- package/dist/lib.cjs/vue/composables/useReceive.js +4 -2
- package/dist/lib.cjs/vue/composables/useSwap.js +4 -2
- package/dist/lib.cjs/vue/composables/useSwitchChain.js +4 -2
- package/dist/lib.cjs/vue/composables/useWalletConnectScanner.js +4 -2
- package/dist/lib.cjs/vue/composables/useWalletUI.js +4 -2
- package/dist/lib.cjs/vue/composables/useWallets.js +52 -0
- package/dist/lib.cjs/vue/composables/useWeb3Auth.js +1 -26
- package/dist/lib.cjs/vue/composables/useWeb3AuthConnect.js +6 -4
- package/dist/lib.cjs/vue/composables/useWeb3AuthDisconnect.js +4 -2
- package/dist/lib.cjs/vue/composables/useWeb3AuthInner.js +2 -20
- package/dist/lib.cjs/vue/composables/useWeb3AuthUser.js +4 -2
- package/dist/lib.cjs/vue/index.js +10 -2
- package/dist/lib.cjs/vue/solana/composables/useSignAndSendTransaction.js +6 -3
- package/dist/lib.cjs/vue/solana/composables/useSignMessage.js +6 -3
- package/dist/lib.cjs/vue/solana/composables/useSignTransaction.js +6 -3
- package/dist/lib.cjs/vue/solana/composables/useSolanaClient.js +14 -0
- package/dist/lib.cjs/vue/solana/composables/useSolanaWallet.js +60 -41
- package/dist/lib.cjs/vue/solana/constants.js +5 -0
- package/dist/lib.cjs/vue/solana/index.js +6 -0
- package/dist/lib.cjs/vue/solana/provider.js +110 -0
- package/dist/lib.cjs/vue/useWalletServicesInnerContextValue.js +75 -0
- package/dist/lib.cjs/vue/useWeb3AuthInnerContextValue.js +226 -0
- package/dist/lib.cjs/vue/wagmi/provider.js +28 -12
- package/dist/lib.cjs/x402/index.js +175 -0
- package/dist/lib.cjs/x402/interfaces.js +5 -0
- package/dist/lib.cjs/x402/react.js +64 -0
- package/dist/lib.cjs/x402/vue.js +58 -0
- package/dist/lib.esm/account-linking/index.js +1 -0
- package/dist/lib.esm/account-linking/react.js +74 -0
- package/dist/lib.esm/account-linking/rest.js +51 -0
- package/dist/lib.esm/account-linking/vue.js +78 -0
- package/dist/lib.esm/base/analytics.js +13 -1
- package/dist/lib.esm/base/connector/baseConnector.js +104 -2
- package/dist/lib.esm/base/connector/connectorStatus.js +2 -1
- package/dist/lib.esm/base/connector/constants.js +6 -2
- package/dist/lib.esm/base/connector/utils.js +1 -19
- package/dist/lib.esm/base/constants.js +4 -1
- package/dist/lib.esm/base/cookie.js +7 -20
- package/dist/lib.esm/base/errors/index.js +84 -13
- package/dist/lib.esm/base/utils.js +22 -7
- package/dist/lib.esm/base/wallet/index.js +2 -1
- package/dist/lib.esm/base/wallet/solana.js +81 -0
- package/dist/lib.esm/connectors/auth-connector/authConnector.js +527 -57
- package/dist/lib.esm/connectors/auth-connector/authSolanaWallet.js +175 -0
- package/dist/lib.esm/connectors/base-evm-connector/baseEvmConnector.js +55 -58
- package/dist/lib.esm/connectors/base-solana-connector/baseSolanaConnector.js +57 -66
- package/dist/lib.esm/connectors/coinbase-connector/coinbaseConnector.js +16 -13
- package/dist/lib.esm/connectors/injected-evm-connector/injectedEvmConnector.js +16 -13
- package/dist/lib.esm/connectors/injected-solana-connector/walletStandardConnector.js +22 -34
- package/dist/lib.esm/connectors/metamask-connector/metamaskConnector.js +366 -132
- package/dist/lib.esm/connectors/utils.js +9 -4
- package/dist/lib.esm/connectors/wallet-connect-v2-connector/WalletConnectV2Provider.js +12 -31
- package/dist/lib.esm/connectors/wallet-connect-v2-connector/config.js +1 -1
- package/dist/lib.esm/connectors/wallet-connect-v2-connector/walletConnectV2Connector.js +110 -73
- package/dist/lib.esm/connectors/wallet-connect-v2-connector/walletConnectV2Utils.js +21 -49
- package/dist/lib.esm/connectors/wallet-connect-v2-connector/wcSolanaWallet.js +130 -0
- package/dist/lib.esm/index.js +12 -19
- package/dist/lib.esm/noModal.js +975 -177
- package/dist/lib.esm/plugins/wallet-services-plugin/plugin.js +20 -39
- package/dist/lib.esm/providers/account-abstraction-provider/providers/AccountAbstractionProvider.js +9 -9
- package/dist/lib.esm/providers/account-abstraction-provider/providers/utils.js +3 -3
- package/dist/lib.esm/providers/account-abstraction-provider/rpc/ethRpcMiddlewares.js +48 -45
- package/dist/lib.esm/providers/base-provider/CommonJRPCProvider.js +2 -4
- package/dist/lib.esm/providers/base-provider/baseProvider.js +68 -38
- package/dist/lib.esm/providers/base-provider/commonPrivateKeyProvider.js +9 -12
- package/dist/lib.esm/providers/base-provider/index.js +1 -1
- package/dist/lib.esm/providers/base-provider/jrpcClient.js +20 -19
- package/dist/lib.esm/providers/base-provider/utils.js +1 -3
- package/dist/lib.esm/providers/ethereum-provider/rpc/ethRpcMiddlewares.js +23 -44
- package/dist/lib.esm/providers/ethereum-provider/rpc/jrpcClient.js +20 -19
- package/dist/lib.esm/providers/ethereum-provider/rpc/walletMiddleware.js +201 -0
- package/dist/lib.esm/providers/xrpl-provider/providers/privateKeyProviders/xrplPrivateKeyProvider.js +6 -17
- package/dist/lib.esm/providers/xrpl-provider/providers/privateKeyProviders/xrplWalletUtils.js +2 -1
- package/dist/lib.esm/providers/xrpl-provider/rpc/JrpcClient.js +21 -25
- package/dist/lib.esm/providers/xrpl-provider/rpc/xrplRpcMiddlewares.js +48 -38
- package/dist/lib.esm/react/context/WalletServicesInnerContext.js +3 -57
- package/dist/lib.esm/react/context/Web3AuthInnerContext.js +7 -152
- package/dist/lib.esm/react/context/useWalletServicesContextValue.js +59 -0
- package/dist/lib.esm/react/context/useWeb3AuthInnerContextValue.js +203 -0
- package/dist/lib.esm/react/hooks/{useIdentityToken.js → useAuthTokenInfo.js} +6 -7
- package/dist/lib.esm/react/hooks/useWalletServicesPlugin.js +3 -10
- package/dist/lib.esm/react/hooks/useWallets.js +33 -0
- package/dist/lib.esm/react/hooks/useWeb3Auth.js +1 -22
- package/dist/lib.esm/react/hooks/useWeb3AuthConnect.js +2 -2
- package/dist/lib.esm/react/index.js +6 -1
- package/dist/lib.esm/react/solana/hooks/useSignAndSendTransaction.js +6 -4
- package/dist/lib.esm/react/solana/hooks/useSignMessage.js +4 -2
- package/dist/lib.esm/react/solana/hooks/useSignTransaction.js +6 -3
- package/dist/lib.esm/react/solana/hooks/useSolanaWallet.js +33 -28
- package/dist/lib.esm/react/solana/index.js +1 -0
- package/dist/lib.esm/react/solana/provider.js +153 -0
- package/dist/lib.esm/react/wagmi/provider.js +8 -8
- package/dist/lib.esm/vue/WalletServicesInnerProvider.js +4 -54
- package/dist/lib.esm/vue/Web3AuthProvider.js +7 -179
- package/dist/lib.esm/vue/composables/{useIdentityToken.js → useAuthTokenInfo.js} +6 -6
- package/dist/lib.esm/vue/composables/useCheckout.js +1 -1
- package/dist/lib.esm/vue/composables/useFunding.js +1 -1
- package/dist/lib.esm/vue/composables/useInjectedWeb3AuthInnerContext.js +11 -0
- package/dist/lib.esm/vue/composables/useReceive.js +1 -1
- package/dist/lib.esm/vue/composables/useSwap.js +1 -1
- package/dist/lib.esm/vue/composables/useWalletConnectScanner.js +1 -1
- package/dist/lib.esm/vue/composables/useWalletUI.js +1 -1
- package/dist/lib.esm/vue/composables/useWallets.js +35 -0
- package/dist/lib.esm/vue/composables/useWeb3Auth.js +1 -26
- package/dist/lib.esm/vue/composables/useWeb3AuthConnect.js +2 -2
- package/dist/lib.esm/vue/composables/useWeb3AuthInner.js +2 -6
- package/dist/lib.esm/vue/index.js +5 -1
- package/dist/lib.esm/vue/solana/composables/useSignAndSendTransaction.js +2 -1
- package/dist/lib.esm/vue/solana/composables/useSignMessage.js +2 -1
- package/dist/lib.esm/vue/solana/composables/useSignTransaction.js +3 -2
- package/dist/lib.esm/vue/solana/composables/useSolanaClient.js +12 -0
- package/dist/lib.esm/vue/solana/composables/useSolanaWallet.js +53 -35
- package/dist/lib.esm/vue/solana/constants.js +3 -0
- package/dist/lib.esm/vue/solana/index.js +3 -0
- package/dist/lib.esm/vue/solana/provider.js +99 -0
- package/dist/lib.esm/vue/useWalletServicesInnerContextValue.js +58 -0
- package/dist/lib.esm/vue/useWeb3AuthInnerContextValue.js +213 -0
- package/dist/lib.esm/vue/wagmi/provider.js +26 -12
- package/dist/lib.esm/x402/index.js +170 -0
- package/dist/lib.esm/x402/interfaces.js +3 -0
- package/dist/lib.esm/x402/react.js +59 -0
- package/dist/lib.esm/x402/vue.js +54 -0
- package/package.json +102 -53
- package/dist/lib.cjs/providers/ethereum-mpc-provider/index.js +0 -7
- package/dist/lib.cjs/providers/ethereum-mpc-provider/providers/signingProviders/EthereumSigningProvider.js +0 -224
- package/dist/lib.cjs/providers/ethereum-mpc-provider/providers/signingProviders/signingUtils.js +0 -177
- package/dist/lib.cjs/providers/ethereum-mpc-provider/rpc/ethRpcMiddlewares.js +0 -21
- package/dist/lib.cjs/providers/ethereum-provider/providers/converter.js +0 -88
- package/dist/lib.cjs/providers/ethereum-provider/providers/privateKeyProviders/TransactionFormatter/constants.js +0 -27
- package/dist/lib.cjs/providers/ethereum-provider/providers/privateKeyProviders/TransactionFormatter/formatter.js +0 -383
- package/dist/lib.cjs/providers/ethereum-provider/providers/privateKeyProviders/TransactionFormatter/interfaces.js +0 -8
- package/dist/lib.cjs/providers/ethereum-provider/providers/privateKeyProviders/TransactionFormatter/utils.js +0 -93
- package/dist/lib.cjs/providers/ethereum-provider/providers/utils.js +0 -29
- package/dist/lib.cjs/providers/ethereum-provider/rpc/walletMidddleware.js +0 -251
- package/dist/lib.cjs/providers/solana-provider/providers/injectedProviders/base/baseInjectedProvider.js +0 -65
- package/dist/lib.cjs/providers/solana-provider/providers/injectedProviders/base/providerHandlers.js +0 -45
- package/dist/lib.cjs/providers/solana-provider/providers/injectedProviders/utils.js +0 -16
- package/dist/lib.cjs/providers/solana-provider/providers/injectedProviders/walletStandardProvider.js +0 -103
- package/dist/lib.cjs/providers/solana-provider/rpc/JrpcClient.js +0 -47
- package/dist/lib.cjs/providers/solana-provider/rpc/solanaRpcMiddlewares.js +0 -97
- package/dist/lib.cjs/providers/solana-provider/solanaWallet.js +0 -91
- package/dist/lib.cjs/types/connectors/injected-solana-connector/utils.d.ts +0 -3
- package/dist/lib.cjs/types/providers/ethereum-mpc-provider/index.d.ts +0 -1
- package/dist/lib.cjs/types/providers/ethereum-mpc-provider/providers/index.d.ts +0 -1
- package/dist/lib.cjs/types/providers/ethereum-mpc-provider/providers/signingProviders/EthereumSigningProvider.d.ts +0 -74
- package/dist/lib.cjs/types/providers/ethereum-mpc-provider/providers/signingProviders/index.d.ts +0 -1
- package/dist/lib.cjs/types/providers/ethereum-mpc-provider/providers/signingProviders/signingUtils.d.ts +0 -12
- package/dist/lib.cjs/types/providers/ethereum-mpc-provider/rpc/ethRpcMiddlewares.d.ts +0 -3
- package/dist/lib.cjs/types/providers/ethereum-mpc-provider/rpc/interfaces.d.ts +0 -15
- package/dist/lib.cjs/types/providers/ethereum-provider/providers/converter.d.ts +0 -14
- package/dist/lib.cjs/types/providers/ethereum-provider/providers/index.d.ts +0 -1
- package/dist/lib.cjs/types/providers/ethereum-provider/providers/privateKeyProviders/TransactionFormatter/constants.d.ts +0 -16
- package/dist/lib.cjs/types/providers/ethereum-provider/providers/privateKeyProviders/TransactionFormatter/formatter.d.ts +0 -28
- package/dist/lib.cjs/types/providers/ethereum-provider/providers/privateKeyProviders/TransactionFormatter/index.d.ts +0 -4
- package/dist/lib.cjs/types/providers/ethereum-provider/providers/privateKeyProviders/TransactionFormatter/interfaces.d.ts +0 -46
- package/dist/lib.cjs/types/providers/ethereum-provider/providers/privateKeyProviders/TransactionFormatter/utils.d.ts +0 -11
- package/dist/lib.cjs/types/providers/ethereum-provider/providers/privateKeyProviders/index.d.ts +0 -1
- package/dist/lib.cjs/types/providers/ethereum-provider/providers/utils.d.ts +0 -5
- package/dist/lib.cjs/types/providers/ethereum-provider/rpc/walletMidddleware.d.ts +0 -3
- package/dist/lib.cjs/types/providers/solana-provider/index.d.ts +0 -4
- package/dist/lib.cjs/types/providers/solana-provider/interface.d.ts +0 -22
- package/dist/lib.cjs/types/providers/solana-provider/providers/index.d.ts +0 -1
- package/dist/lib.cjs/types/providers/solana-provider/providers/injectedProviders/base/baseInjectedProvider.d.ts +0 -16
- package/dist/lib.cjs/types/providers/solana-provider/providers/injectedProviders/base/providerHandlers.d.ts +0 -3
- package/dist/lib.cjs/types/providers/solana-provider/providers/injectedProviders/index.d.ts +0 -2
- package/dist/lib.cjs/types/providers/solana-provider/providers/injectedProviders/utils.d.ts +0 -3
- package/dist/lib.cjs/types/providers/solana-provider/providers/injectedProviders/walletStandardProvider.d.ts +0 -9
- package/dist/lib.cjs/types/providers/solana-provider/rpc/JrpcClient.d.ts +0 -9
- package/dist/lib.cjs/types/providers/solana-provider/rpc/index.d.ts +0 -3
- package/dist/lib.cjs/types/providers/solana-provider/rpc/interfaces.d.ts +0 -27
- package/dist/lib.cjs/types/providers/solana-provider/rpc/solanaRpcMiddlewares.d.ts +0 -20
- package/dist/lib.cjs/types/providers/solana-provider/solanaWallet.d.ts +0 -29
- package/dist/lib.esm/providers/ethereum-mpc-provider/index.js +0 -1
- package/dist/lib.esm/providers/ethereum-mpc-provider/providers/signingProviders/EthereumSigningProvider.js +0 -206
- package/dist/lib.esm/providers/ethereum-mpc-provider/providers/signingProviders/signingUtils.js +0 -163
- package/dist/lib.esm/providers/ethereum-mpc-provider/rpc/ethRpcMiddlewares.js +0 -20
- package/dist/lib.esm/providers/ethereum-provider/providers/converter.js +0 -85
- package/dist/lib.esm/providers/ethereum-provider/providers/privateKeyProviders/TransactionFormatter/constants.js +0 -21
- package/dist/lib.esm/providers/ethereum-provider/providers/privateKeyProviders/TransactionFormatter/formatter.js +0 -378
- package/dist/lib.esm/providers/ethereum-provider/providers/privateKeyProviders/TransactionFormatter/interfaces.js +0 -8
- package/dist/lib.esm/providers/ethereum-provider/providers/privateKeyProviders/TransactionFormatter/utils.js +0 -88
- package/dist/lib.esm/providers/ethereum-provider/providers/utils.js +0 -24
- package/dist/lib.esm/providers/ethereum-provider/rpc/walletMidddleware.js +0 -258
- package/dist/lib.esm/providers/solana-provider/providers/injectedProviders/base/baseInjectedProvider.js +0 -47
- package/dist/lib.esm/providers/solana-provider/providers/injectedProviders/base/providerHandlers.js +0 -43
- package/dist/lib.esm/providers/solana-provider/providers/injectedProviders/utils.js +0 -14
- package/dist/lib.esm/providers/solana-provider/providers/injectedProviders/walletStandardProvider.js +0 -91
- package/dist/lib.esm/providers/solana-provider/rpc/JrpcClient.js +0 -42
- package/dist/lib.esm/providers/solana-provider/rpc/solanaRpcMiddlewares.js +0 -89
- package/dist/lib.esm/providers/solana-provider/solanaWallet.js +0 -92
- package/dist/noModal.umd.min.js +0 -2
- package/dist/noModal.umd.min.js.LICENSE.txt +0 -46
package/dist/lib.cjs/noModal.js
CHANGED
|
@@ -4,22 +4,23 @@ var _objectWithoutProperties = require('@babel/runtime/helpers/objectWithoutProp
|
|
|
4
4
|
var _objectSpread = require('@babel/runtime/helpers/objectSpread2');
|
|
5
5
|
var _defineProperty = require('@babel/runtime/helpers/defineProperty');
|
|
6
6
|
var baseControllers = require('@toruslabs/base-controllers');
|
|
7
|
+
var ethereumControllers = require('@toruslabs/ethereum-controllers');
|
|
7
8
|
var auth = require('@web3auth/auth');
|
|
8
9
|
var deepmerge = require('deepmerge');
|
|
9
10
|
var analytics = require('./base/analytics.js');
|
|
10
11
|
var IChainInterface = require('./base/chain/IChainInterface.js');
|
|
12
|
+
require('@toruslabs/session-manager');
|
|
11
13
|
var index = require('./base/errors/index.js');
|
|
14
|
+
var loglevel = require('./base/loglevel.js');
|
|
15
|
+
var utils = require('./base/utils.js');
|
|
12
16
|
var index$1 = require('./base/wallet/index.js');
|
|
13
17
|
var connectorStatus = require('./base/connector/connectorStatus.js');
|
|
14
18
|
var constants = require('./base/connector/constants.js');
|
|
15
19
|
var utils$1 = require('./base/connector/utils.js');
|
|
16
20
|
var constants$1 = require('./base/constants.js');
|
|
17
|
-
var
|
|
18
|
-
var loglevel = require('./base/loglevel.js');
|
|
21
|
+
var deserialize = require('./base/deserialize.js');
|
|
19
22
|
require('./base/plugin/errors.js');
|
|
20
23
|
var IPlugin = require('./base/plugin/IPlugin.js');
|
|
21
|
-
var utils = require('./base/utils.js');
|
|
22
|
-
var deserialize = require('./base/deserialize.js');
|
|
23
24
|
var authConnector = require('./connectors/auth-connector/authConnector.js');
|
|
24
25
|
var metamaskConnector = require('./connectors/metamask-connector/metamaskConnector.js');
|
|
25
26
|
var plugin = require('./plugins/wallet-services-plugin/plugin.js');
|
|
@@ -27,28 +28,38 @@ require('./providers/base-provider/utils.js');
|
|
|
27
28
|
var CommonJRPCProvider = require('./providers/base-provider/CommonJRPCProvider.js');
|
|
28
29
|
require('./providers/base-provider/commonPrivateKeyProvider.js');
|
|
29
30
|
|
|
30
|
-
const _excluded = ["walletScope"];
|
|
31
|
+
const _excluded = ["walletScope", "eipStandard"];
|
|
32
|
+
const PRIMARY_CONNECTED_WALLET_KEY = "__primary__";
|
|
31
33
|
class Web3AuthNoModal extends auth.SafeEventEmitter {
|
|
32
34
|
constructor(options, initialState) {
|
|
33
35
|
super();
|
|
34
36
|
_defineProperty(this, "coreOptions", void 0);
|
|
35
37
|
_defineProperty(this, "status", constants.CONNECTOR_STATUS.NOT_READY);
|
|
38
|
+
_defineProperty(this, "loginMode", constants$1.LOGIN_MODE.NO_MODAL);
|
|
36
39
|
_defineProperty(this, "aaProvider", null);
|
|
37
40
|
_defineProperty(this, "connectors", []);
|
|
38
41
|
_defineProperty(this, "commonJRPCProvider", null);
|
|
39
42
|
_defineProperty(this, "analytics", void 0);
|
|
40
43
|
_defineProperty(this, "plugins", {});
|
|
44
|
+
_defineProperty(this, "consentRequired", false);
|
|
45
|
+
_defineProperty(this, "projectConfig", null);
|
|
41
46
|
_defineProperty(this, "storage", void 0);
|
|
47
|
+
_defineProperty(this, "connectionReconnected", false);
|
|
48
|
+
/** Connected wallet state keyed by linked account id; the primary session uses a reserved key. */
|
|
49
|
+
_defineProperty(this, "connectedWalletConnectorMap", new Map());
|
|
50
|
+
_defineProperty(this, "activeWalletConnectorKey", PRIMARY_CONNECTED_WALLET_KEY);
|
|
42
51
|
_defineProperty(this, "state", {
|
|
43
|
-
|
|
52
|
+
primaryConnectorName: null,
|
|
44
53
|
cachedConnector: null,
|
|
45
54
|
currentChainId: null,
|
|
46
|
-
idToken: null
|
|
55
|
+
idToken: null,
|
|
56
|
+
accessToken: null,
|
|
57
|
+
refreshToken: null,
|
|
58
|
+
activeAccount: null
|
|
47
59
|
});
|
|
48
|
-
_defineProperty(this, "loginMode", constants$1.LOGIN_MODE.NO_MODAL);
|
|
49
60
|
if (!options.clientId) throw index.WalletInitializationError.invalidParams("Please provide a valid clientId in constructor");
|
|
50
61
|
if (options.enableLogging) loglevel.log.enableAll();else loglevel.log.setLevel("error");
|
|
51
|
-
if (!options.
|
|
62
|
+
if (!options.initialAuthenticationMode) options.initialAuthenticationMode = constants.CONNECTOR_INITIAL_AUTHENTICATION_MODE.CONNECT_AND_SIGN;
|
|
52
63
|
this.coreOptions = options;
|
|
53
64
|
this.storage = this.getStorageMethod();
|
|
54
65
|
this.analytics = new analytics.Analytics();
|
|
@@ -58,11 +69,12 @@ class Web3AuthNoModal extends auth.SafeEventEmitter {
|
|
|
58
69
|
this.analytics.setGlobalProperties({
|
|
59
70
|
integration_type: analytics.ANALYTICS_INTEGRATION_TYPE.NATIVE_SDK
|
|
60
71
|
});
|
|
61
|
-
this.loadState(initialState)
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
72
|
+
this.loadState(initialState).then(() => {
|
|
73
|
+
if (this.state.idToken && this.coreOptions.ssr && !this.consentRequired) {
|
|
74
|
+
this.status = this.coreOptions.initialAuthenticationMode === constants.CONNECTOR_INITIAL_AUTHENTICATION_MODE.CONNECT_AND_SIGN ? constants.CONNECTOR_STATUS.AUTHORIZED : constants.CONNECTOR_STATUS.CONNECTED;
|
|
75
|
+
}
|
|
76
|
+
return undefined;
|
|
77
|
+
}).catch(() => {});
|
|
66
78
|
}
|
|
67
79
|
get currentChain() {
|
|
68
80
|
var _this$coreOptions$cha;
|
|
@@ -70,16 +82,13 @@ class Web3AuthNoModal extends auth.SafeEventEmitter {
|
|
|
70
82
|
return (_this$coreOptions$cha = this.coreOptions.chains) === null || _this$coreOptions$cha === void 0 ? void 0 : _this$coreOptions$cha.find(chain => chain.chainId === this.currentChainId);
|
|
71
83
|
}
|
|
72
84
|
get connected() {
|
|
73
|
-
return Boolean(this.
|
|
85
|
+
return Boolean(this.primaryConnector);
|
|
74
86
|
}
|
|
75
|
-
get
|
|
76
|
-
|
|
77
|
-
return this.commonJRPCProvider;
|
|
78
|
-
}
|
|
79
|
-
return null;
|
|
87
|
+
get connection() {
|
|
88
|
+
return this.getConnectedWalletConnectionByKey(this.activeWalletConnectorKey);
|
|
80
89
|
}
|
|
81
|
-
get
|
|
82
|
-
return this.state.
|
|
90
|
+
get primaryConnectorName() {
|
|
91
|
+
return this.state.primaryConnectorName;
|
|
83
92
|
}
|
|
84
93
|
get cachedConnector() {
|
|
85
94
|
return this.state.cachedConnector;
|
|
@@ -88,9 +97,12 @@ class Web3AuthNoModal extends auth.SafeEventEmitter {
|
|
|
88
97
|
var _this$coreOptions$cha2;
|
|
89
98
|
return this.state.currentChainId || this.coreOptions.defaultChainId || ((_this$coreOptions$cha2 = this.coreOptions.chains) === null || _this$coreOptions$cha2 === void 0 || (_this$coreOptions$cha2 = _this$coreOptions$cha2[0]) === null || _this$coreOptions$cha2 === void 0 ? void 0 : _this$coreOptions$cha2.chainId) || null;
|
|
90
99
|
}
|
|
91
|
-
|
|
100
|
+
/**
|
|
101
|
+
* This is always the primary connector that is connected to the user.
|
|
102
|
+
*/
|
|
103
|
+
get primaryConnector() {
|
|
92
104
|
var _this$currentChain;
|
|
93
|
-
return this.getConnector(this.
|
|
105
|
+
return this.getConnector(this.primaryConnectorName, (_this$currentChain = this.currentChain) === null || _this$currentChain === void 0 ? void 0 : _this$currentChain.chainNamespace);
|
|
94
106
|
}
|
|
95
107
|
get accountAbstractionProvider() {
|
|
96
108
|
return this.aaProvider;
|
|
@@ -98,6 +110,28 @@ class Web3AuthNoModal extends auth.SafeEventEmitter {
|
|
|
98
110
|
get idToken() {
|
|
99
111
|
return this.state.idToken || null;
|
|
100
112
|
}
|
|
113
|
+
get accessToken() {
|
|
114
|
+
return this.state.accessToken || null;
|
|
115
|
+
}
|
|
116
|
+
get refreshToken() {
|
|
117
|
+
return this.state.refreshToken || null;
|
|
118
|
+
}
|
|
119
|
+
get activeAccount() {
|
|
120
|
+
return this.state.activeAccount;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* This is the current active connector.
|
|
124
|
+
*/
|
|
125
|
+
get activeConnector() {
|
|
126
|
+
const activeConnectedWallet = this.getConnectedWalletConnectorStateByKey(this.activeWalletConnectorKey);
|
|
127
|
+
if (activeConnectedWallet) {
|
|
128
|
+
return activeConnectedWallet.connector;
|
|
129
|
+
}
|
|
130
|
+
if (this.activeWalletConnectorKey !== PRIMARY_CONNECTED_WALLET_KEY) {
|
|
131
|
+
throw new Error(`Signing connector not found for account "${this.activeWalletConnectorKey}".`);
|
|
132
|
+
}
|
|
133
|
+
return this.primaryConnector;
|
|
134
|
+
}
|
|
101
135
|
set provider(_) {
|
|
102
136
|
throw new Error("Not implemented");
|
|
103
137
|
}
|
|
@@ -139,9 +173,10 @@ class Web3AuthNoModal extends auth.SafeEventEmitter {
|
|
|
139
173
|
throw index.WalletInitializationError.notReady("failed to fetch project configurations", error);
|
|
140
174
|
}
|
|
141
175
|
// init config
|
|
176
|
+
this.projectConfig = projectConfig;
|
|
142
177
|
this.initAccountAbstractionConfig(projectConfig);
|
|
143
178
|
this.initChainsConfig(projectConfig);
|
|
144
|
-
this.initCachedConnectorAndChainId();
|
|
179
|
+
await this.initCachedConnectorAndChainId();
|
|
145
180
|
this.initUIConfig(projectConfig);
|
|
146
181
|
this.initWalletServicesConfig(projectConfig);
|
|
147
182
|
this.initSessionTimeConfig(projectConfig);
|
|
@@ -203,12 +238,19 @@ class Web3AuthNoModal extends auth.SafeEventEmitter {
|
|
|
203
238
|
return true;
|
|
204
239
|
}) || null;
|
|
205
240
|
}
|
|
206
|
-
clearCache() {
|
|
207
|
-
this.
|
|
208
|
-
|
|
241
|
+
async clearCache() {
|
|
242
|
+
this.connectedWalletConnectorMap.clear();
|
|
243
|
+
this.activeWalletConnectorKey = PRIMARY_CONNECTED_WALLET_KEY;
|
|
244
|
+
this.connectionReconnected = false;
|
|
245
|
+
await this.setState({
|
|
246
|
+
primaryConnectorName: null,
|
|
209
247
|
cachedConnector: null,
|
|
210
248
|
currentChainId: null,
|
|
211
|
-
idToken: null
|
|
249
|
+
idToken: null,
|
|
250
|
+
accessToken: null,
|
|
251
|
+
refreshToken: null,
|
|
252
|
+
activeAccount: null,
|
|
253
|
+
hasUserConsent: undefined
|
|
212
254
|
});
|
|
213
255
|
}
|
|
214
256
|
async cleanup() {
|
|
@@ -221,8 +263,15 @@ class Web3AuthNoModal extends auth.SafeEventEmitter {
|
|
|
221
263
|
if (params.chainId === ((_this$currentChain2 = this.currentChain) === null || _this$currentChain2 === void 0 ? void 0 : _this$currentChain2.chainId)) return;
|
|
222
264
|
const newChainConfig = this.coreOptions.chains.find(x => x.chainId === params.chainId);
|
|
223
265
|
if (!newChainConfig) throw index.WalletInitializationError.invalidParams("Invalid chainId");
|
|
224
|
-
if (connectorStatus.CONNECTED_STATUSES.includes(this.status)
|
|
225
|
-
|
|
266
|
+
if (connectorStatus.CONNECTED_STATUSES.includes(this.status)) {
|
|
267
|
+
const activeConnector = this.activeConnector;
|
|
268
|
+
if (!activeConnector) throw index.WalletInitializationError.notReady("Active signing connector is not ready");
|
|
269
|
+
// Single-namespace connectors cannot cross namespace boundaries — MULTICHAIN connectors
|
|
270
|
+
// (Auth, WC) enforce their own switchChain policy internally.
|
|
271
|
+
if (activeConnector.connectorNamespace !== IChainInterface.CONNECTOR_NAMESPACES.MULTICHAIN && activeConnector.connectorNamespace !== newChainConfig.chainNamespace) {
|
|
272
|
+
throw index.WalletLoginError.connectionError(`Cannot switch between chain namespaces with ${activeConnector.name}. Disconnect and reconnect with the target chain.`);
|
|
273
|
+
}
|
|
274
|
+
await activeConnector.switchChain(params);
|
|
226
275
|
return;
|
|
227
276
|
}
|
|
228
277
|
if (this.commonJRPCProvider) {
|
|
@@ -242,7 +291,7 @@ class Web3AuthNoModal extends auth.SafeEventEmitter {
|
|
|
242
291
|
const initialChain = this.getInitialChainIdForConnector(connector);
|
|
243
292
|
const finalLoginParams = _objectSpread(_objectSpread({}, loginParams), {}, {
|
|
244
293
|
chainId: initialChain.chainId,
|
|
245
|
-
|
|
294
|
+
getAuthTokenInfo: this.coreOptions.initialAuthenticationMode === constants.CONNECTOR_INITIAL_AUTHENTICATION_MODE.CONNECT_AND_SIGN
|
|
246
295
|
});
|
|
247
296
|
// track connection started event
|
|
248
297
|
const startTime = Date.now();
|
|
@@ -296,27 +345,24 @@ class Web3AuthNoModal extends auth.SafeEventEmitter {
|
|
|
296
345
|
};
|
|
297
346
|
const checkCompletion = async () => {
|
|
298
347
|
// In CONNECT_AND_SIGN mode, wait for both connected event and authorized event
|
|
299
|
-
if (finalLoginParams.
|
|
348
|
+
if (finalLoginParams.getAuthTokenInfo) {
|
|
300
349
|
if (connectedEventCompleted && authorizedEventReceived) {
|
|
301
350
|
await completeConnection();
|
|
302
351
|
}
|
|
303
|
-
} else {
|
|
304
|
-
|
|
305
|
-
if (connectedEventCompleted) {
|
|
306
|
-
await completeConnection();
|
|
307
|
-
}
|
|
352
|
+
} else if (connectedEventCompleted) {
|
|
353
|
+
await completeConnection();
|
|
308
354
|
}
|
|
309
355
|
};
|
|
310
356
|
const completeConnection = async () => {
|
|
311
357
|
try {
|
|
312
358
|
// track connection completed event
|
|
313
|
-
const userInfo = await
|
|
359
|
+
const userInfo = await this.getUserInfo();
|
|
314
360
|
this.analytics.track(analytics.ANALYTICS_EVENTS.CONNECTION_COMPLETED, _objectSpread(_objectSpread({}, eventData), {}, {
|
|
315
361
|
is_mfa_enabled: userInfo === null || userInfo === void 0 ? void 0 : userInfo.isMfaEnabled,
|
|
316
362
|
duration: Date.now() - startTime
|
|
317
363
|
}));
|
|
318
364
|
cleanup();
|
|
319
|
-
resolve(this.
|
|
365
|
+
resolve(this.connection);
|
|
320
366
|
} catch (error) {
|
|
321
367
|
cleanup();
|
|
322
368
|
reject(error);
|
|
@@ -339,7 +385,7 @@ class Web3AuthNoModal extends auth.SafeEventEmitter {
|
|
|
339
385
|
reject(err);
|
|
340
386
|
};
|
|
341
387
|
this.once(constants.CONNECTOR_EVENTS.CONNECTED, onConnected);
|
|
342
|
-
if (finalLoginParams.
|
|
388
|
+
if (finalLoginParams.getAuthTokenInfo) {
|
|
343
389
|
this.once(constants.CONNECTOR_EVENTS.AUTHORIZED, onAuthorized);
|
|
344
390
|
}
|
|
345
391
|
this.once(constants.CONNECTOR_EVENTS.ERRORED, onErrored);
|
|
@@ -350,28 +396,60 @@ class Web3AuthNoModal extends auth.SafeEventEmitter {
|
|
|
350
396
|
async logout(options = {
|
|
351
397
|
cleanup: false
|
|
352
398
|
}) {
|
|
353
|
-
if (!connectorStatus.
|
|
354
|
-
if (this.
|
|
355
|
-
await this.
|
|
399
|
+
if (!connectorStatus.CAN_LOGOUT_STATUSES.includes(this.status) || !this.primaryConnector) throw index.WalletLoginError.notConnectedError(`No wallet is connected`);
|
|
400
|
+
if (this.primaryConnector.status === constants.CONNECTOR_STATUS.DISCONNECTING) return;
|
|
401
|
+
await this.primaryConnector.disconnect(options);
|
|
356
402
|
}
|
|
357
403
|
async getUserInfo() {
|
|
358
|
-
var _this$
|
|
359
|
-
loglevel.log.debug("Getting user info", this.status, (_this$
|
|
360
|
-
if (!connectorStatus.CAN_AUTHORIZE_STATUSES.includes(this.status) || !this.
|
|
361
|
-
|
|
404
|
+
var _this$primaryConnecto, _userInfo$linkedAccou, _userInfo$linkedAccou2;
|
|
405
|
+
loglevel.log.debug("Getting user info", this.status, (_this$primaryConnecto = this.primaryConnector) === null || _this$primaryConnecto === void 0 ? void 0 : _this$primaryConnecto.name);
|
|
406
|
+
if (!connectorStatus.CAN_AUTHORIZE_STATUSES.includes(this.status) || !this.primaryConnector) throw index.WalletLoginError.notConnectedError(`No wallet is connected`);
|
|
407
|
+
const userInfo = await this.primaryConnector.getUserInfo();
|
|
408
|
+
const linkedAccounts = (_userInfo$linkedAccou = (_userInfo$linkedAccou2 = userInfo.linkedAccounts) === null || _userInfo$linkedAccou2 === void 0 ? void 0 : _userInfo$linkedAccou2.map(account => _objectSpread(_objectSpread({}, account), {}, {
|
|
409
|
+
active: this.state.activeAccount ? account.id === this.state.activeAccount.id : account.isPrimary
|
|
410
|
+
}))) !== null && _userInfo$linkedAccou !== void 0 ? _userInfo$linkedAccou : [];
|
|
411
|
+
this.syncConnectedWalletLinkedAccounts(linkedAccounts);
|
|
412
|
+
return _objectSpread(_objectSpread({}, userInfo), {}, {
|
|
413
|
+
linkedAccounts
|
|
414
|
+
});
|
|
415
|
+
}
|
|
416
|
+
async getLinkedAccounts() {
|
|
417
|
+
if (!connectorStatus.CAN_AUTHORIZE_STATUSES.includes(this.status) || !this.primaryConnector) throw index.WalletLoginError.notConnectedError(`No wallet is connected`);
|
|
418
|
+
authConnector.assertAuthConnector(this.primaryConnector, "Linked accounts can only be fetched when connected with the AUTH connector.");
|
|
419
|
+
const linkedAccounts = await this.primaryConnector.getLinkedAccounts();
|
|
420
|
+
const resolvedLinkedAccounts = linkedAccounts.map(account => _objectSpread(_objectSpread({}, account), {}, {
|
|
421
|
+
active: this.state.activeAccount ? account.id === this.state.activeAccount.id : account.isPrimary
|
|
422
|
+
}));
|
|
423
|
+
this.syncConnectedWalletLinkedAccounts(resolvedLinkedAccounts);
|
|
424
|
+
return resolvedLinkedAccounts;
|
|
425
|
+
}
|
|
426
|
+
getConnectedAccountsWithProviders() {
|
|
427
|
+
if (!connectorStatus.CONNECTED_STATUSES.includes(this.status) || !this.primaryConnector) throw index.WalletLoginError.notConnectedError(`No wallet is connected`);
|
|
428
|
+
if (this.status !== constants.CONNECTOR_STATUS.AUTHORIZED) {
|
|
429
|
+
// before the wallet is authorized, we don't have the user info, so we return an empty array
|
|
430
|
+
return [];
|
|
431
|
+
}
|
|
432
|
+
const connectedAccounts = [];
|
|
433
|
+
for (const [, value] of this.connectedWalletConnectorMap.entries()) {
|
|
434
|
+
const hasWalletProvider = Boolean(value.signingProvider || value.solanaWallet);
|
|
435
|
+
if (hasWalletProvider && this.hasUsableConnectedSwitchConnector(value.connector)) {
|
|
436
|
+
connectedAccounts.push(value);
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
return connectedAccounts;
|
|
362
440
|
}
|
|
363
441
|
async enableMFA(loginParams) {
|
|
364
442
|
var _authConnector$authIn2;
|
|
365
|
-
if (!connectorStatus.CONNECTED_STATUSES.includes(this.status) || !this.
|
|
366
|
-
if (this.
|
|
367
|
-
const authConnector = this.
|
|
443
|
+
if (!connectorStatus.CONNECTED_STATUSES.includes(this.status) || !this.primaryConnector) throw index.WalletLoginError.notConnectedError(`No wallet is connected`);
|
|
444
|
+
if (this.primaryConnector.name !== index$1.WALLET_CONNECTORS.AUTH) throw index.WalletLoginError.unsupportedOperation(`EnableMFA is not supported for this connector.`);
|
|
445
|
+
const authConnector = this.primaryConnector;
|
|
368
446
|
const trackData = {
|
|
369
|
-
connector: this.
|
|
447
|
+
connector: this.primaryConnector.name,
|
|
370
448
|
auth_ux_mode: (_authConnector$authIn2 = authConnector.authInstance) === null || _authConnector$authIn2 === void 0 || (_authConnector$authIn2 = _authConnector$authIn2.options) === null || _authConnector$authIn2 === void 0 ? void 0 : _authConnector$authIn2.uxMode
|
|
371
449
|
};
|
|
372
450
|
try {
|
|
373
451
|
this.analytics.track(analytics.ANALYTICS_EVENTS.MFA_ENABLEMENT_STARTED, trackData);
|
|
374
|
-
await this.
|
|
452
|
+
await this.primaryConnector.enableMFA(loginParams);
|
|
375
453
|
} catch (error) {
|
|
376
454
|
this.analytics.track(analytics.ANALYTICS_EVENTS.MFA_ENABLEMENT_FAILED, _objectSpread(_objectSpread({}, trackData), utils.getErrorAnalyticsProperties(error)));
|
|
377
455
|
throw error;
|
|
@@ -379,31 +457,33 @@ class Web3AuthNoModal extends auth.SafeEventEmitter {
|
|
|
379
457
|
}
|
|
380
458
|
async manageMFA(loginParams) {
|
|
381
459
|
var _authConnector$authIn3;
|
|
382
|
-
if (!connectorStatus.CONNECTED_STATUSES.includes(this.status) || !this.
|
|
383
|
-
if (this.
|
|
384
|
-
const authConnector = this.
|
|
460
|
+
if (!connectorStatus.CONNECTED_STATUSES.includes(this.status) || !this.primaryConnector) throw index.WalletLoginError.notConnectedError(`No wallet is connected`);
|
|
461
|
+
if (this.primaryConnector.name !== index$1.WALLET_CONNECTORS.AUTH) throw index.WalletLoginError.unsupportedOperation(`ManageMFA is not supported for this connector.`);
|
|
462
|
+
const authConnector = this.primaryConnector;
|
|
385
463
|
const trackData = {
|
|
386
|
-
connector: this.
|
|
464
|
+
connector: this.primaryConnector.name,
|
|
387
465
|
auth_ux_mode: (_authConnector$authIn3 = authConnector.authInstance) === null || _authConnector$authIn3 === void 0 || (_authConnector$authIn3 = _authConnector$authIn3.options) === null || _authConnector$authIn3 === void 0 ? void 0 : _authConnector$authIn3.uxMode
|
|
388
466
|
};
|
|
389
467
|
try {
|
|
390
468
|
this.analytics.track(analytics.ANALYTICS_EVENTS.MFA_MANAGEMENT_SELECTED, trackData);
|
|
391
|
-
await this.
|
|
469
|
+
await this.primaryConnector.manageMFA(loginParams);
|
|
392
470
|
} catch (error) {
|
|
393
471
|
this.analytics.track(analytics.ANALYTICS_EVENTS.MFA_MANAGEMENT_FAILED, _objectSpread(_objectSpread({}, trackData), utils.getErrorAnalyticsProperties(error)));
|
|
394
472
|
throw error;
|
|
395
473
|
}
|
|
396
474
|
}
|
|
397
|
-
async
|
|
398
|
-
if (!connectorStatus.CAN_AUTHORIZE_STATUSES.includes(this.status) || !this.
|
|
475
|
+
async getAuthTokenInfo() {
|
|
476
|
+
if (!connectorStatus.CAN_AUTHORIZE_STATUSES.includes(this.status) || !this.primaryConnector) throw index.WalletLoginError.notConnectedError(`No wallet is connected`);
|
|
399
477
|
const trackData = {
|
|
400
|
-
connector: this.
|
|
478
|
+
connector: this.primaryConnector.name
|
|
401
479
|
};
|
|
402
480
|
try {
|
|
403
481
|
this.analytics.track(analytics.ANALYTICS_EVENTS.IDENTITY_TOKEN_STARTED, trackData);
|
|
404
|
-
const
|
|
482
|
+
const authTokenInfo = await this.primaryConnector.getAuthTokenInfo();
|
|
405
483
|
this.analytics.track(analytics.ANALYTICS_EVENTS.IDENTITY_TOKEN_COMPLETED, trackData);
|
|
406
|
-
return
|
|
484
|
+
return {
|
|
485
|
+
idToken: authTokenInfo.idToken
|
|
486
|
+
};
|
|
407
487
|
} catch (error) {
|
|
408
488
|
this.analytics.track(analytics.ANALYTICS_EVENTS.IDENTITY_TOKEN_FAILED, _objectSpread(_objectSpread({}, trackData), utils.getErrorAnalyticsProperties(error)));
|
|
409
489
|
throw error;
|
|
@@ -412,10 +492,80 @@ class Web3AuthNoModal extends auth.SafeEventEmitter {
|
|
|
412
492
|
getPlugin(name) {
|
|
413
493
|
return this.plugins[name] || null;
|
|
414
494
|
}
|
|
495
|
+
async switchAccount(account) {
|
|
496
|
+
const authConnector = this.getMainAuthConnector();
|
|
497
|
+
const switchResult = await authConnector.switchAccount(account, {
|
|
498
|
+
activeAccount: this.state.activeAccount,
|
|
499
|
+
currentChainId: this.currentChainId
|
|
500
|
+
});
|
|
501
|
+
if (!switchResult) {
|
|
502
|
+
return;
|
|
503
|
+
}
|
|
504
|
+
try {
|
|
505
|
+
var _this$projectConfig;
|
|
506
|
+
await this.processSwitchAccountResult(authConnector, switchResult, {
|
|
507
|
+
projectConfig: (_this$projectConfig = this.projectConfig) !== null && _this$projectConfig !== void 0 ? _this$projectConfig : undefined
|
|
508
|
+
});
|
|
509
|
+
await authConnector.trackSwitchAccountCompleted(switchResult.targetAccount);
|
|
510
|
+
} catch (error) {
|
|
511
|
+
await authConnector.trackSwitchAccountFailed(switchResult.targetAccount, error);
|
|
512
|
+
throw error;
|
|
513
|
+
}
|
|
514
|
+
}
|
|
515
|
+
async linkAccount(params) {
|
|
516
|
+
if (!(params !== null && params !== void 0 && params.connectorName)) {
|
|
517
|
+
throw index.WalletInitializationError.invalidParams("connectorName is required when calling linkAccount on the no-modal SDK");
|
|
518
|
+
}
|
|
519
|
+
const chainId = this.resolveLinkAccountChainId(params.chainId);
|
|
520
|
+
const isolatedConnector = await this.createLinkingWalletConnector(params.connectorName, chainId);
|
|
521
|
+
return this.linkAccountWithConnector(params.connectorName, chainId, isolatedConnector);
|
|
522
|
+
}
|
|
523
|
+
async unlinkAccount(address) {
|
|
524
|
+
var _await$authConnector$, _this$state$activeAcc;
|
|
525
|
+
const authConnector = this.getMainAuthConnector();
|
|
526
|
+
const linkedAccounts = (_await$authConnector$ = (await authConnector.getUserInfo()).linkedAccounts) !== null && _await$authConnector$ !== void 0 ? _await$authConnector$ : [];
|
|
527
|
+
const targetAccount = this.findLinkedAccountByAddress(linkedAccounts, address);
|
|
528
|
+
if (!targetAccount) {
|
|
529
|
+
throw index.AccountLinkingError.accountNotLinked(`Account with address "${address}" is not linked`);
|
|
530
|
+
}
|
|
531
|
+
if (targetAccount.connector === index$1.WALLET_CONNECTORS.AUTH || targetAccount.isPrimary) {
|
|
532
|
+
throw index.AccountLinkingError.cannotUnlinkPrimaryAccount();
|
|
533
|
+
}
|
|
534
|
+
if (((_this$state$activeAcc = this.state.activeAccount) === null || _this$state$activeAcc === void 0 ? void 0 : _this$state$activeAcc.id) === targetAccount.id) {
|
|
535
|
+
throw index.AccountLinkingError.cannotUnlinkActiveAccount();
|
|
536
|
+
}
|
|
537
|
+
const result = await authConnector.unlinkAccount({
|
|
538
|
+
address,
|
|
539
|
+
authSessionTokens: {
|
|
540
|
+
accessToken: this.accessToken,
|
|
541
|
+
idToken: this.idToken
|
|
542
|
+
}
|
|
543
|
+
});
|
|
544
|
+
await this.setState({
|
|
545
|
+
idToken: result.idToken
|
|
546
|
+
});
|
|
547
|
+
// disconnect the connector for unlinked account
|
|
548
|
+
const connectorToDisconnect = this.getConnectedWalletConnector(targetAccount);
|
|
549
|
+
if (connectorToDisconnect) {
|
|
550
|
+
try {
|
|
551
|
+
if (connectorToDisconnect.connected) {
|
|
552
|
+
await connectorToDisconnect.disconnect({
|
|
553
|
+
cleanup: true
|
|
554
|
+
});
|
|
555
|
+
}
|
|
556
|
+
} catch (error) {
|
|
557
|
+
loglevel.log.debug(`Failed to disconnect linked account "${targetAccount.id}" during unlink`, error);
|
|
558
|
+
} finally {
|
|
559
|
+
this.deleteConnectedWalletConnector(targetAccount);
|
|
560
|
+
}
|
|
561
|
+
}
|
|
562
|
+
return result;
|
|
563
|
+
}
|
|
415
564
|
setAnalyticsProperties(properties) {
|
|
416
565
|
this.analytics.setGlobalProperties(properties);
|
|
417
566
|
}
|
|
418
567
|
initChainsConfig(projectConfig) {
|
|
568
|
+
var _this$coreOptions$acc2;
|
|
419
569
|
// merge chains from project config with core options, core options chains will take precedence over project config chains
|
|
420
570
|
const chainMap = new Map();
|
|
421
571
|
const allChains = [...(projectConfig.chains || []), ...(this.coreOptions.chains || [])];
|
|
@@ -449,8 +599,9 @@ class Web3AuthNoModal extends auth.SafeEventEmitter {
|
|
|
449
599
|
}
|
|
450
600
|
}
|
|
451
601
|
}
|
|
452
|
-
// if AA is enabled, filter out chains that are not AA-supported
|
|
453
|
-
|
|
602
|
+
// if AA is enabled and smart account is not 7702, filter out chains that are not AA-supported
|
|
603
|
+
const is7702SmartAccount = ((_this$coreOptions$acc2 = this.coreOptions.accountAbstractionConfig) === null || _this$coreOptions$acc2 === void 0 ? void 0 : _this$coreOptions$acc2.smartAccountEipStandard) === ethereumControllers.SMART_ACCOUNT_EIP_STANDARD.EIP_7702;
|
|
604
|
+
if (this.coreOptions.accountAbstractionConfig && !is7702SmartAccount) {
|
|
454
605
|
// write a for loop over accountAbstractionConfig.chains and check if the chainId is valid
|
|
455
606
|
if (this.coreOptions.accountAbstractionConfig.chains.length === 0) {
|
|
456
607
|
loglevel.log.error("Please configure chains for smart accounts on dashboard at https://dashboard.web3auth.io");
|
|
@@ -488,24 +639,36 @@ class Web3AuthNoModal extends auth.SafeEventEmitter {
|
|
|
488
639
|
}
|
|
489
640
|
}
|
|
490
641
|
initAccountAbstractionConfig(projectConfig) {
|
|
491
|
-
var _this$coreOptions$
|
|
642
|
+
var _this$coreOptions$acc3;
|
|
492
643
|
const isAAEnabled = Boolean(this.coreOptions.accountAbstractionConfig || (projectConfig === null || projectConfig === void 0 ? void 0 : projectConfig.smartAccounts));
|
|
493
644
|
if (!isAAEnabled) return;
|
|
494
645
|
// merge smart account config from project config with core options, core options will take precedence over project config
|
|
495
646
|
const _ref = (projectConfig === null || projectConfig === void 0 ? void 0 : projectConfig.smartAccounts) || {},
|
|
496
647
|
{
|
|
497
|
-
walletScope
|
|
648
|
+
walletScope,
|
|
649
|
+
eipStandard
|
|
498
650
|
} = _ref,
|
|
499
651
|
configWithoutWalletScope = _objectWithoutProperties(_ref, _excluded);
|
|
500
652
|
const aaChainMap = new Map();
|
|
501
|
-
const allAaChains = [...((configWithoutWalletScope === null || configWithoutWalletScope === void 0 ? void 0 : configWithoutWalletScope.chains) || []), ...(((_this$coreOptions$
|
|
653
|
+
const allAaChains = [...((configWithoutWalletScope === null || configWithoutWalletScope === void 0 ? void 0 : configWithoutWalletScope.chains) || []), ...(((_this$coreOptions$acc3 = this.coreOptions.accountAbstractionConfig) === null || _this$coreOptions$acc3 === void 0 ? void 0 : _this$coreOptions$acc3.chains) || [])];
|
|
502
654
|
for (const chain of allAaChains) {
|
|
503
655
|
const existingChain = aaChainMap.get(chain.chainId);
|
|
504
656
|
if (!existingChain) aaChainMap.set(chain.chainId, chain);else aaChainMap.set(chain.chainId, _objectSpread(_objectSpread({}, existingChain), chain));
|
|
505
657
|
}
|
|
506
|
-
this.coreOptions.accountAbstractionConfig = _objectSpread(_objectSpread({
|
|
658
|
+
this.coreOptions.accountAbstractionConfig = _objectSpread(_objectSpread({
|
|
659
|
+
smartAccountEipStandard: eipStandard
|
|
660
|
+
}, deepmerge(configWithoutWalletScope || {}, this.coreOptions.accountAbstractionConfig || {})), {}, {
|
|
507
661
|
chains: Array.from(aaChainMap.values())
|
|
508
662
|
});
|
|
663
|
+
// if eipStandard is 7702, validate smart account type
|
|
664
|
+
const {
|
|
665
|
+
smartAccountEipStandard,
|
|
666
|
+
smartAccountType
|
|
667
|
+
} = this.coreOptions.accountAbstractionConfig;
|
|
668
|
+
const is7702SmartAccount = smartAccountEipStandard === ethereumControllers.SMART_ACCOUNT_EIP_STANDARD.EIP_7702;
|
|
669
|
+
if (is7702SmartAccount && smartAccountType && !ethereumControllers.EIP7702_SUPPORTED_SMART_ACCOUNT_TYPES.includes(smartAccountType)) {
|
|
670
|
+
throw index.WalletInitializationError.invalidParams(`Smart account type "${smartAccountType}" does not support EIP-7702. Supported: ${ethereumControllers.EIP7702_SUPPORTED_SMART_ACCOUNT_TYPES.join(", ")}`);
|
|
671
|
+
}
|
|
509
672
|
// determine if we should use AA with external wallet
|
|
510
673
|
if (this.coreOptions.useAAWithExternalWallet === undefined) {
|
|
511
674
|
this.coreOptions.useAAWithExternalWallet = walletScope === constants$1.SMART_ACCOUNT_WALLET_SCOPE.ALL;
|
|
@@ -521,13 +684,13 @@ class Web3AuthNoModal extends auth.SafeEventEmitter {
|
|
|
521
684
|
if (this.coreOptions.sessionTime) return;
|
|
522
685
|
if (projectConfig.sessionTime) this.coreOptions.sessionTime = projectConfig.sessionTime;
|
|
523
686
|
}
|
|
524
|
-
initCachedConnectorAndChainId() {
|
|
687
|
+
async initCachedConnectorAndChainId() {
|
|
525
688
|
// init chainId using cached chainId if it exists and is valid, otherwise use the defaultChainId or the first chain
|
|
526
689
|
const cachedChainId = this.state.currentChainId;
|
|
527
690
|
const isCachedChainIdValid = cachedChainId && this.coreOptions.chains.some(chain => chain.chainId === cachedChainId);
|
|
528
691
|
if (this.coreOptions.defaultChainId && !utils.isHexStrict(this.coreOptions.defaultChainId)) throw index.WalletInitializationError.invalidParams("Please provide a valid defaultChainId in constructor");
|
|
529
692
|
const currentChainId = isCachedChainIdValid ? cachedChainId : this.coreOptions.defaultChainId || this.coreOptions.chains[0].chainId;
|
|
530
|
-
this.setState({
|
|
693
|
+
await this.setState({
|
|
531
694
|
currentChainId
|
|
532
695
|
});
|
|
533
696
|
}
|
|
@@ -587,7 +750,7 @@ class Web3AuthNoModal extends auth.SafeEventEmitter {
|
|
|
587
750
|
default_chain_id: defaultChain ? utils.getCaipChainId(defaultChain) : undefined,
|
|
588
751
|
default_chain_name: defaultChain === null || defaultChain === void 0 ? void 0 : defaultChain.displayName,
|
|
589
752
|
logging_enabled: this.coreOptions.enableLogging,
|
|
590
|
-
|
|
753
|
+
custom_storage: Boolean(this.coreOptions.storage),
|
|
591
754
|
session_time: this.coreOptions.sessionTime,
|
|
592
755
|
sfa_key_enabled: this.coreOptions.useSFAKey,
|
|
593
756
|
mipd_enabled: this.coreOptions.multiInjectedProviderDiscovery,
|
|
@@ -610,7 +773,7 @@ class Web3AuthNoModal extends auth.SafeEventEmitter {
|
|
|
610
773
|
chains: this.coreOptions.chains
|
|
611
774
|
});
|
|
612
775
|
// sync chainId
|
|
613
|
-
this.commonJRPCProvider.on("chainChanged", chainId => this.setCurrentChain(chainId));
|
|
776
|
+
this.commonJRPCProvider.on("chainChanged", async chainId => this.setCurrentChain(chainId));
|
|
614
777
|
}
|
|
615
778
|
async setupConnector(connector) {
|
|
616
779
|
this.subscribeToConnectorEvents(connector);
|
|
@@ -620,7 +783,7 @@ class Web3AuthNoModal extends auth.SafeEventEmitter {
|
|
|
620
783
|
await connector.init({
|
|
621
784
|
autoConnect,
|
|
622
785
|
chainId: initialChain.chainId,
|
|
623
|
-
|
|
786
|
+
getAuthTokenInfo: this.coreOptions.initialAuthenticationMode === constants.CONNECTOR_INITIAL_AUTHENTICATION_MODE.CONNECT_AND_SIGN
|
|
624
787
|
});
|
|
625
788
|
} catch (e) {
|
|
626
789
|
loglevel.log.error(e, connector.name);
|
|
@@ -646,7 +809,9 @@ class Web3AuthNoModal extends auth.SafeEventEmitter {
|
|
|
646
809
|
if (utils.isBrowser() && chainNamespaces.has(baseControllers.CHAIN_NAMESPACES.EIP155)) {
|
|
647
810
|
// only set headless to true if modal SDK is used, otherwise just use the modal from native Metamask SDK
|
|
648
811
|
connectorFns.push(metamaskConnector.metaMaskConnector(modalMode ? {
|
|
649
|
-
|
|
812
|
+
ui: {
|
|
813
|
+
headless: true
|
|
814
|
+
}
|
|
650
815
|
} : undefined));
|
|
651
816
|
}
|
|
652
817
|
if (isMipdEnabled && utils.isBrowser()) {
|
|
@@ -724,89 +889,147 @@ class Web3AuthNoModal extends auth.SafeEventEmitter {
|
|
|
724
889
|
}
|
|
725
890
|
subscribeToConnectorEvents(connector) {
|
|
726
891
|
connector.on(constants.CONNECTOR_EVENTS.CONNECTED, async data => {
|
|
727
|
-
|
|
892
|
+
if (this.primaryConnectorName && this.primaryConnectorName !== data.connectorName) {
|
|
893
|
+
// Ignore registered connectors that are not the active primary session connector.
|
|
894
|
+
return;
|
|
895
|
+
}
|
|
728
896
|
if (!this.commonJRPCProvider) throw index.WalletInitializationError.notFound(`CommonJrpcProvider not found`);
|
|
729
897
|
const {
|
|
730
|
-
|
|
731
|
-
|
|
898
|
+
ethereumProvider,
|
|
899
|
+
solanaWallet
|
|
732
900
|
} = data;
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
901
|
+
// Seed the primary connector synchronously so AUTHORIZED can resolve a connection
|
|
902
|
+
// even while we are still restoring a previously active linked wallet.
|
|
903
|
+
this.setConnectedWalletConnectorState(this.buildImmediateConnectedWalletConnectorState({
|
|
904
|
+
connector,
|
|
905
|
+
ethereumProvider,
|
|
906
|
+
solanaWallet,
|
|
907
|
+
usePrimaryProxy: true
|
|
908
|
+
}));
|
|
909
|
+
this.setActiveWalletConnectorKey();
|
|
910
|
+
this.connectionReconnected = data.reconnected;
|
|
911
|
+
const connectedChainId = ethereumProvider === null || ethereumProvider === void 0 ? void 0 : ethereumProvider.chainId;
|
|
738
912
|
// when ssr is enabled, we need to get the idToken from the connector.
|
|
739
913
|
if (this.coreOptions.ssr) {
|
|
740
914
|
try {
|
|
741
|
-
|
|
915
|
+
var _data$accessToken, _data$refreshToken;
|
|
916
|
+
const data = await connector.getAuthTokenInfo();
|
|
742
917
|
if (!data.idToken) throw index.WalletLoginError.connectionError("No idToken found");
|
|
743
|
-
this.setState({
|
|
744
|
-
idToken: data.idToken
|
|
918
|
+
await this.setState({
|
|
919
|
+
idToken: data.idToken,
|
|
920
|
+
accessToken: (_data$accessToken = data.accessToken) !== null && _data$accessToken !== void 0 ? _data$accessToken : null,
|
|
921
|
+
refreshToken: (_data$refreshToken = data.refreshToken) !== null && _data$refreshToken !== void 0 ? _data$refreshToken : null
|
|
745
922
|
});
|
|
746
923
|
} catch (error) {
|
|
747
924
|
loglevel.log.error(error);
|
|
925
|
+
this.deleteConnectedWalletConnector();
|
|
926
|
+
this.setActiveWalletConnectorKey();
|
|
748
927
|
this.status = constants.CONNECTOR_STATUS.ERRORED;
|
|
749
928
|
this.emit(constants.CONNECTOR_EVENTS.ERRORED, error, this.loginMode);
|
|
750
929
|
return;
|
|
751
930
|
}
|
|
752
931
|
}
|
|
753
|
-
|
|
754
|
-
// setup AA provider if AA is enabled
|
|
932
|
+
// The following block only hits during rehydration
|
|
755
933
|
const {
|
|
756
|
-
|
|
757
|
-
} = this.
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
const
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
provider: eoaProvider,
|
|
774
|
-
chain: this.currentChain,
|
|
775
|
-
chains: this.coreOptions.chains.filter(chain => aaChainIds.has(chain.chainId)),
|
|
776
|
-
useProviderAsTransport: data.connector === index$1.WALLET_CONNECTORS.AUTH
|
|
777
|
-
});
|
|
778
|
-
this.aaProvider = aaProvider;
|
|
779
|
-
// if external wallet is used and AA is enabled for external wallets, use AA provider
|
|
780
|
-
// for embedded wallets, we use ws-embed provider which already supports AA
|
|
781
|
-
if (data.connector !== index$1.WALLET_CONNECTORS.AUTH && this.coreOptions.useAAWithExternalWallet) {
|
|
782
|
-
finalProvider = this.aaProvider;
|
|
934
|
+
activeAccount
|
|
935
|
+
} = this.state;
|
|
936
|
+
// if the active account is not the primary account, i.e. not `null`, create an isolated connector and connect to the chain
|
|
937
|
+
if (activeAccount && !activeAccount.isPrimary && activeAccount.connector !== index$1.WALLET_CONNECTORS.AUTH) {
|
|
938
|
+
var _ref3, _walletConnector$prov, _linkedAccountConnect, _ref4, _walletConnector$sola, _linkedAccountConnect2;
|
|
939
|
+
const accountLinkingConnector = authConnector.isAuthConnector(connector) ? connector : this.getConnector(index$1.WALLET_CONNECTORS.AUTH);
|
|
940
|
+
authConnector.assertAuthConnector(accountLinkingConnector, "Account switching requires the AUTH connector to be available.");
|
|
941
|
+
const targetChainId = accountLinkingConnector.getChainIdForLinkedAccount(activeAccount, connectedChainId);
|
|
942
|
+
const walletConnector = await this.createIsolatedWalletConnector(activeAccount.connector, targetChainId);
|
|
943
|
+
let linkedAccountConnection = null;
|
|
944
|
+
if (!this.hasUsableConnectedSwitchConnector(walletConnector)) {
|
|
945
|
+
linkedAccountConnection = await walletConnector.connect({
|
|
946
|
+
chainId: targetChainId
|
|
947
|
+
});
|
|
948
|
+
if (!linkedAccountConnection) {
|
|
949
|
+
throw index.AccountLinkingError.requestFailed(`Failed to connect isolated connector "${activeAccount.connector}" for account switch.`);
|
|
950
|
+
}
|
|
783
951
|
}
|
|
952
|
+
const connectedWalletState = await this.resolveConnectedWalletConnectorState({
|
|
953
|
+
connector: walletConnector,
|
|
954
|
+
ethereumProvider: (_ref3 = (_walletConnector$prov = walletConnector.provider) !== null && _walletConnector$prov !== void 0 ? _walletConnector$prov : (_linkedAccountConnect = linkedAccountConnection) === null || _linkedAccountConnect === void 0 ? void 0 : _linkedAccountConnect.ethereumProvider) !== null && _ref3 !== void 0 ? _ref3 : null,
|
|
955
|
+
solanaWallet: (_ref4 = (_walletConnector$sola = walletConnector.solanaWallet) !== null && _walletConnector$sola !== void 0 ? _walletConnector$sola : (_linkedAccountConnect2 = linkedAccountConnection) === null || _linkedAccountConnect2 === void 0 ? void 0 : _linkedAccountConnect2.solanaWallet) !== null && _ref4 !== void 0 ? _ref4 : null,
|
|
956
|
+
usePrimaryProxy: false,
|
|
957
|
+
account: activeAccount
|
|
958
|
+
});
|
|
959
|
+
this.setConnectedWalletConnectorState(connectedWalletState, activeAccount);
|
|
960
|
+
this.setActiveWalletConnectorKey(activeAccount);
|
|
961
|
+
}
|
|
962
|
+
if (ethereumProvider) {
|
|
963
|
+
await this.bindPrimaryEthereumSigningProxy(ethereumProvider, data.connectorName);
|
|
784
964
|
}
|
|
785
|
-
this.
|
|
786
|
-
|
|
787
|
-
|
|
965
|
+
const primaryConnectedWalletState = await this.resolveConnectedWalletConnectorState({
|
|
966
|
+
connector,
|
|
967
|
+
ethereumProvider,
|
|
968
|
+
solanaWallet,
|
|
969
|
+
usePrimaryProxy: true
|
|
788
970
|
});
|
|
789
|
-
this.
|
|
790
|
-
this.
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
this.
|
|
796
|
-
|
|
797
|
-
|
|
971
|
+
this.setConnectedWalletConnectorState(primaryConnectedWalletState);
|
|
972
|
+
await this.setState({
|
|
973
|
+
primaryConnectorName: data.connectorName,
|
|
974
|
+
currentChainId: connectedChainId
|
|
975
|
+
});
|
|
976
|
+
this.cacheWallet(data.connectorName);
|
|
977
|
+
const isConnectAndSign = this.coreOptions.initialAuthenticationMode === constants.CONNECTOR_INITIAL_AUTHENTICATION_MODE.CONNECT_AND_SIGN;
|
|
978
|
+
if (this.consentRequired && !isConnectAndSign && !this.state.hasUserConsent) {
|
|
979
|
+
this.status = constants.CONNECTOR_STATUS.CONSENT_REQUIRING;
|
|
980
|
+
this.emit(constants.CONNECTOR_EVENTS.CONSENT_REQUIRING);
|
|
981
|
+
loglevel.log.debug("consent_requiring", this.status, this.primaryConnectorName);
|
|
982
|
+
} else {
|
|
983
|
+
this.status = constants.CONNECTOR_STATUS.CONNECTED;
|
|
984
|
+
loglevel.log.debug("connected", this.status, this.primaryConnectorName);
|
|
985
|
+
this.connectToPlugins(_objectSpread(_objectSpread({}, data), {}, {
|
|
986
|
+
connector: data.connectorName
|
|
987
|
+
}));
|
|
988
|
+
this.emit(constants.CONNECTOR_EVENTS.CONNECTED, _objectSpread(_objectSpread({}, data), {}, {
|
|
989
|
+
loginMode: this.loginMode
|
|
990
|
+
}));
|
|
991
|
+
}
|
|
798
992
|
});
|
|
799
|
-
connector.on(constants.CONNECTOR_EVENTS.DISCONNECTED, async
|
|
993
|
+
connector.on(constants.CONNECTOR_EVENTS.DISCONNECTED, async data => {
|
|
994
|
+
if (this.shouldIgnoreInactiveConnectorEvent(connector, constants.CONNECTOR_EVENTS.DISCONNECTED)) return;
|
|
995
|
+
const disconnectedConnector = data === null || data === void 0 ? void 0 : data.connector;
|
|
996
|
+
const {
|
|
997
|
+
activeAccount
|
|
998
|
+
} = this.state;
|
|
999
|
+
if (!activeAccount || activeAccount && activeAccount.isPrimary || disconnectedConnector === index$1.WALLET_CONNECTORS.AUTH) {
|
|
1000
|
+
// If the primary session disconnects, tear down every other connected wallet connector
|
|
1001
|
+
// and clear the entire map.
|
|
1002
|
+
await Promise.all(Array.from(this.connectedWalletConnectorMap.entries()).map(async ([accountId, connectedWallet]) => {
|
|
1003
|
+
if (connectedWallet.connector === connector) {
|
|
1004
|
+
this.connectedWalletConnectorMap.delete(accountId);
|
|
1005
|
+
return;
|
|
1006
|
+
}
|
|
1007
|
+
try {
|
|
1008
|
+
if (connectedWallet.connected && connectedWallet.connector.connected) {
|
|
1009
|
+
await connectedWallet.connector.disconnect({
|
|
1010
|
+
cleanup: true
|
|
1011
|
+
});
|
|
1012
|
+
}
|
|
1013
|
+
} catch (error) {
|
|
1014
|
+
loglevel.log.debug("Connected wallet connector disconnect on primary disconnect", error);
|
|
1015
|
+
} finally {
|
|
1016
|
+
this.connectedWalletConnectorMap.delete(accountId);
|
|
1017
|
+
}
|
|
1018
|
+
}));
|
|
1019
|
+
}
|
|
1020
|
+
this.connectedWalletConnectorMap.clear();
|
|
1021
|
+
this.activeWalletConnectorKey = PRIMARY_CONNECTED_WALLET_KEY;
|
|
1022
|
+
this.connectionReconnected = false;
|
|
800
1023
|
// re-setup commonJRPCProvider
|
|
801
1024
|
this.commonJRPCProvider.removeAllListeners();
|
|
802
1025
|
this.setupCommonJRPCProvider();
|
|
803
1026
|
// get back to ready state for rehydrating.
|
|
804
1027
|
this.status = constants.CONNECTOR_STATUS.READY;
|
|
805
1028
|
const cachedConnector = this.state.cachedConnector;
|
|
806
|
-
if (this.
|
|
807
|
-
this.clearCache();
|
|
1029
|
+
if (this.primaryConnectorName === cachedConnector) {
|
|
1030
|
+
await this.clearCache();
|
|
808
1031
|
}
|
|
809
|
-
loglevel.log.debug("disconnected", this.status, this.
|
|
1032
|
+
loglevel.log.debug("disconnected", this.status, this.primaryConnectorName);
|
|
810
1033
|
await Promise.all(Object.values(this.plugins).map(async plugin => {
|
|
811
1034
|
if (!plugin.SUPPORTED_CONNECTORS.includes(connector.name)) return;
|
|
812
1035
|
if (plugin.status !== IPlugin.PLUGIN_STATUS.CONNECTED) return;
|
|
@@ -819,43 +1042,60 @@ class Web3AuthNoModal extends auth.SafeEventEmitter {
|
|
|
819
1042
|
loglevel.log.error(error);
|
|
820
1043
|
});
|
|
821
1044
|
}));
|
|
822
|
-
this.setState({
|
|
823
|
-
|
|
1045
|
+
await this.setState({
|
|
1046
|
+
primaryConnectorName: null,
|
|
1047
|
+
hasUserConsent: undefined,
|
|
1048
|
+
activeAccount: null
|
|
824
1049
|
});
|
|
825
1050
|
this.emit(constants.CONNECTOR_EVENTS.DISCONNECTED);
|
|
826
1051
|
});
|
|
827
1052
|
connector.on(constants.CONNECTOR_EVENTS.CONNECTING, data => {
|
|
828
1053
|
this.status = constants.CONNECTOR_STATUS.CONNECTING;
|
|
829
1054
|
this.emit(constants.CONNECTOR_EVENTS.CONNECTING, data);
|
|
830
|
-
loglevel.log.debug("connecting", this.status, this.
|
|
1055
|
+
loglevel.log.debug("connecting", this.status, this.primaryConnectorName);
|
|
831
1056
|
});
|
|
832
|
-
connector.on(constants.CONNECTOR_EVENTS.ERRORED, data => {
|
|
1057
|
+
connector.on(constants.CONNECTOR_EVENTS.ERRORED, async data => {
|
|
1058
|
+
if (this.shouldIgnoreInactiveConnectorEvent(connector, constants.CONNECTOR_EVENTS.ERRORED)) {
|
|
1059
|
+
loglevel.log.error("Inactive connector emitted errored event", {
|
|
1060
|
+
connector: connector.name,
|
|
1061
|
+
error: data
|
|
1062
|
+
});
|
|
1063
|
+
return;
|
|
1064
|
+
}
|
|
833
1065
|
this.status = constants.CONNECTOR_STATUS.ERRORED;
|
|
834
|
-
this.clearCache();
|
|
1066
|
+
await this.clearCache();
|
|
835
1067
|
this.emit(constants.CONNECTOR_EVENTS.ERRORED, data, this.loginMode);
|
|
836
|
-
loglevel.log.debug("errored", this.status, this.
|
|
1068
|
+
loglevel.log.debug("errored", this.status, this.primaryConnectorName);
|
|
837
1069
|
});
|
|
838
|
-
connector.on(constants.CONNECTOR_EVENTS.REHYDRATION_ERROR, error => {
|
|
1070
|
+
connector.on(constants.CONNECTOR_EVENTS.REHYDRATION_ERROR, async error => {
|
|
1071
|
+
if (this.shouldIgnoreInactiveConnectorEvent(connector, constants.CONNECTOR_EVENTS.REHYDRATION_ERROR)) {
|
|
1072
|
+
loglevel.log.error("Inactive connector emitted rehydration error", {
|
|
1073
|
+
connector: connector.name,
|
|
1074
|
+
error
|
|
1075
|
+
});
|
|
1076
|
+
return;
|
|
1077
|
+
}
|
|
839
1078
|
this.status = constants.CONNECTOR_STATUS.READY;
|
|
840
|
-
this.clearCache();
|
|
1079
|
+
await this.clearCache();
|
|
841
1080
|
this.emit(constants.CONNECTOR_EVENTS.REHYDRATION_ERROR, error);
|
|
842
1081
|
});
|
|
843
1082
|
connector.on(constants.CONNECTOR_EVENTS.CONNECTOR_DATA_UPDATED, data => {
|
|
844
1083
|
loglevel.log.debug("connector data updated", data);
|
|
845
1084
|
this.emit(constants.CONNECTOR_EVENTS.CONNECTOR_DATA_UPDATED, data);
|
|
846
1085
|
});
|
|
847
|
-
connector.on(constants.CONNECTOR_EVENTS.CACHE_CLEAR, data => {
|
|
1086
|
+
connector.on(constants.CONNECTOR_EVENTS.CACHE_CLEAR, async data => {
|
|
1087
|
+
if (this.shouldIgnoreInactiveConnectorEvent(connector, constants.CONNECTOR_EVENTS.CACHE_CLEAR)) return;
|
|
848
1088
|
loglevel.log.debug("connector cache clear", data);
|
|
849
|
-
this.clearCache();
|
|
1089
|
+
await this.clearCache();
|
|
850
1090
|
});
|
|
851
1091
|
connector.on(constants.CONNECTOR_EVENTS.MFA_ENABLED, isMFAEnabled => {
|
|
852
1092
|
var _authConnector$authIn4;
|
|
853
1093
|
loglevel.log.debug("mfa enabled", isMFAEnabled);
|
|
854
|
-
const authConnector = this.
|
|
1094
|
+
const authConnector = this.primaryConnector;
|
|
855
1095
|
// mfa_enabled event is only emitted when using "popup" ux_mode
|
|
856
1096
|
// TODO: handle mfa_enabled event when using "redirect" ux_mode
|
|
857
1097
|
this.analytics.track(analytics.ANALYTICS_EVENTS.MFA_ENABLEMENT_COMPLETED, {
|
|
858
|
-
connector: this.
|
|
1098
|
+
connector: this.primaryConnector.name,
|
|
859
1099
|
auth_ux_mode: (_authConnector$authIn4 = authConnector.authInstance) === null || _authConnector$authIn4 === void 0 || (_authConnector$authIn4 = _authConnector$authIn4.options) === null || _authConnector$authIn4 === void 0 ? void 0 : _authConnector$authIn4.uxMode,
|
|
860
1100
|
is_mfa_enabled: isMFAEnabled
|
|
861
1101
|
});
|
|
@@ -864,24 +1104,34 @@ class Web3AuthNoModal extends auth.SafeEventEmitter {
|
|
|
864
1104
|
connector.on(constants.CONNECTOR_EVENTS.AUTHORIZING, data => {
|
|
865
1105
|
this.status = constants.CONNECTOR_STATUS.AUTHORIZING;
|
|
866
1106
|
this.emit(constants.CONNECTOR_EVENTS.AUTHORIZING, data);
|
|
867
|
-
loglevel.log.debug("authorizing", this.status, this.
|
|
1107
|
+
loglevel.log.debug("authorizing", this.status, this.primaryConnectorName);
|
|
868
1108
|
});
|
|
869
|
-
connector.on(constants.CONNECTOR_EVENTS.AUTHORIZED, data => {
|
|
870
|
-
|
|
871
|
-
this.setState({
|
|
872
|
-
idToken: data.
|
|
1109
|
+
connector.on(constants.CONNECTOR_EVENTS.AUTHORIZED, async data => {
|
|
1110
|
+
var _data$authTokenInfo$a, _data$authTokenInfo$r;
|
|
1111
|
+
await this.setState({
|
|
1112
|
+
idToken: data.authTokenInfo.idToken,
|
|
1113
|
+
accessToken: (_data$authTokenInfo$a = data.authTokenInfo.accessToken) !== null && _data$authTokenInfo$a !== void 0 ? _data$authTokenInfo$a : null,
|
|
1114
|
+
refreshToken: (_data$authTokenInfo$r = data.authTokenInfo.refreshToken) !== null && _data$authTokenInfo$r !== void 0 ? _data$authTokenInfo$r : null
|
|
873
1115
|
});
|
|
874
|
-
|
|
875
|
-
|
|
1116
|
+
// if the user has not consented yet, we will ask for consent
|
|
1117
|
+
if (this.consentRequired && this.connection && !this.state.hasUserConsent) {
|
|
1118
|
+
this.status = constants.CONNECTOR_STATUS.CONSENT_REQUIRING;
|
|
1119
|
+
this.emit(constants.CONNECTOR_EVENTS.CONSENT_REQUIRING);
|
|
1120
|
+
loglevel.log.debug("consent_requiring", this.status, this.primaryConnectorName);
|
|
1121
|
+
} else {
|
|
1122
|
+
this.status = constants.CONNECTOR_STATUS.AUTHORIZED;
|
|
1123
|
+
this.emit(constants.CONNECTOR_EVENTS.AUTHORIZED, data);
|
|
1124
|
+
loglevel.log.debug("authorized", this.status, this.primaryConnectorName);
|
|
1125
|
+
}
|
|
876
1126
|
});
|
|
877
1127
|
}
|
|
878
1128
|
checkInitRequirements() {
|
|
879
1129
|
if (this.status === constants.CONNECTOR_STATUS.READY) throw index.WalletInitializationError.notReady("Connector is already initialized");
|
|
880
1130
|
}
|
|
881
1131
|
checkIfAutoConnect(connector) {
|
|
882
|
-
var _this$
|
|
1132
|
+
var _this$currentChain3;
|
|
883
1133
|
let autoConnect = this.cachedConnector === connector.name;
|
|
884
|
-
if (autoConnect && (_this$
|
|
1134
|
+
if (autoConnect && (_this$currentChain3 = this.currentChain) !== null && _this$currentChain3 !== void 0 && _this$currentChain3.chainNamespace) {
|
|
885
1135
|
if (connector.connectorNamespace === IChainInterface.CONNECTOR_NAMESPACES.MULTICHAIN) autoConnect = true;else autoConnect = connector.connectorNamespace === this.currentChain.chainNamespace;
|
|
886
1136
|
}
|
|
887
1137
|
return autoConnect;
|
|
@@ -899,27 +1149,422 @@ class Web3AuthNoModal extends auth.SafeEventEmitter {
|
|
|
899
1149
|
}
|
|
900
1150
|
return initialChain;
|
|
901
1151
|
}
|
|
902
|
-
|
|
903
|
-
this.
|
|
1152
|
+
async completeConsentAcceptance() {
|
|
1153
|
+
const connection = this.connection;
|
|
1154
|
+
if (!connection) {
|
|
1155
|
+
throw index.WalletLoginError.connectionError("Cannot accept consent: no active connection");
|
|
1156
|
+
}
|
|
1157
|
+
if (this.status !== constants.CONNECTOR_STATUS.CONSENT_REQUIRING) {
|
|
1158
|
+
throw index.WalletLoginError.connectionError("Cannot accept consent: not in consent_requiring state");
|
|
1159
|
+
}
|
|
1160
|
+
await this.setState({
|
|
1161
|
+
hasUserConsent: true
|
|
1162
|
+
});
|
|
1163
|
+
const isConnectAndSign = this.coreOptions.initialAuthenticationMode === constants.CONNECTOR_INITIAL_AUTHENTICATION_MODE.CONNECT_AND_SIGN;
|
|
1164
|
+
if (isConnectAndSign && this.state.idToken) {
|
|
1165
|
+
this.status = constants.CONNECTOR_STATUS.AUTHORIZED;
|
|
1166
|
+
loglevel.log.debug("consent accepted, authorized", this.status, this.primaryConnectorName);
|
|
1167
|
+
} else {
|
|
1168
|
+
this.status = constants.CONNECTOR_STATUS.CONNECTED;
|
|
1169
|
+
loglevel.log.debug("consent accepted, connected", this.status, this.primaryConnectorName);
|
|
1170
|
+
}
|
|
1171
|
+
// connect to wallet-service plugin
|
|
1172
|
+
if (this.primaryConnectorName === index$1.WALLET_CONNECTORS.AUTH) {
|
|
1173
|
+
this.connectToPlugins({
|
|
1174
|
+
connector: this.primaryConnectorName
|
|
1175
|
+
});
|
|
1176
|
+
}
|
|
1177
|
+
this.emit(constants.CONNECTOR_EVENTS.CONSENT_ACCEPTED, {
|
|
1178
|
+
reconnected: this.connectionReconnected
|
|
1179
|
+
});
|
|
1180
|
+
}
|
|
1181
|
+
resolveLinkAccountChainId(chainId) {
|
|
1182
|
+
const finalChainId = chainId || this.state.currentChainId;
|
|
1183
|
+
if (!finalChainId) {
|
|
1184
|
+
throw index.AccountLinkingError.walletProofFailed("No chainId is available. Please specify chainId in LinkAccountParams or ensure the SDK has an active chain.");
|
|
1185
|
+
}
|
|
1186
|
+
return finalChainId;
|
|
1187
|
+
}
|
|
1188
|
+
/**
|
|
1189
|
+
* Resolves the chain ID for a switch account operation.
|
|
1190
|
+
* If the account's chain namespace is the same as the current chain namespace, return the current chain ID.
|
|
1191
|
+
* If the account's chain namespace is different from the current chain namespace, return the chainId the account was linked in.
|
|
1192
|
+
*
|
|
1193
|
+
* @param account - The account to switch to.
|
|
1194
|
+
* @param activeChainId - The current active chain ID.
|
|
1195
|
+
* @returns The resolved chain ID.
|
|
1196
|
+
*/
|
|
1197
|
+
resolveSwitchAccountChainId(account, activeChainId) {
|
|
1198
|
+
const targetChainNamespace = account.chainNamespace ? utils.parseChainNamespaceFromCitadelResponse(account.chainNamespace) : null;
|
|
1199
|
+
if (targetChainNamespace && this.currentChain.chainNamespace === targetChainNamespace) {
|
|
1200
|
+
return this.currentChain.chainId;
|
|
1201
|
+
}
|
|
1202
|
+
return activeChainId;
|
|
1203
|
+
}
|
|
1204
|
+
async createLinkingWalletConnector(connectorName, chainId, config) {
|
|
1205
|
+
return this.createIsolatedWalletConnector(connectorName, chainId, config);
|
|
1206
|
+
}
|
|
1207
|
+
async createSwitchingWalletConnector(connectorName, chainId, config) {
|
|
1208
|
+
return this.createIsolatedWalletConnector(connectorName, chainId, config);
|
|
1209
|
+
}
|
|
1210
|
+
getConnectedWalletConnector(account) {
|
|
1211
|
+
var _this$getConnectedWal, _this$getConnectedWal2;
|
|
1212
|
+
return (_this$getConnectedWal = (_this$getConnectedWal2 = this.getConnectedWalletConnectorState(account)) === null || _this$getConnectedWal2 === void 0 ? void 0 : _this$getConnectedWal2.connector) !== null && _this$getConnectedWal !== void 0 ? _this$getConnectedWal : null;
|
|
1213
|
+
}
|
|
1214
|
+
getConnectedWalletConnectorState(account) {
|
|
1215
|
+
return this.getConnectedWalletConnectorStateByKey(this.getConnectedWalletConnectorKey(account));
|
|
1216
|
+
}
|
|
1217
|
+
setConnectedWalletConnectorState(connectedWallet, account) {
|
|
1218
|
+
this.connectedWalletConnectorMap.set(this.getConnectedWalletConnectorKey(account), connectedWallet);
|
|
1219
|
+
}
|
|
1220
|
+
setConnectedWalletConnector(connector, account) {
|
|
1221
|
+
var _connector$solanaWall;
|
|
1222
|
+
this.setConnectedWalletConnectorState(_objectSpread(_objectSpread({}, this.getConnectedWalletLinkedAccountInfo(account)), {}, {
|
|
1223
|
+
connector,
|
|
1224
|
+
signingProvider: connector.provider,
|
|
1225
|
+
solanaWallet: (_connector$solanaWall = connector.solanaWallet) !== null && _connector$solanaWall !== void 0 ? _connector$solanaWall : null,
|
|
1226
|
+
connected: connector.connected || connector.status === constants.CONNECTOR_STATUS.CONNECTED
|
|
1227
|
+
}), account);
|
|
1228
|
+
}
|
|
1229
|
+
deleteConnectedWalletConnector(account) {
|
|
1230
|
+
this.connectedWalletConnectorMap.delete(this.getConnectedWalletConnectorKey(account));
|
|
1231
|
+
}
|
|
1232
|
+
getConnectedWalletConnection(account) {
|
|
1233
|
+
return this.getConnectedWalletConnectionByKey(this.getConnectedWalletConnectorKey(account));
|
|
1234
|
+
}
|
|
1235
|
+
hasUsableConnectedSwitchConnector(connector) {
|
|
1236
|
+
if (!connector) return false;
|
|
1237
|
+
const isConnected = connector.connected || connector.status === constants.CONNECTOR_STATUS.CONNECTED;
|
|
1238
|
+
return Boolean(isConnected && (connector.provider || connector.solanaWallet));
|
|
1239
|
+
}
|
|
1240
|
+
setActiveWalletConnectorKey(account) {
|
|
1241
|
+
this.activeWalletConnectorKey = this.getConnectedWalletConnectorKey(account);
|
|
1242
|
+
}
|
|
1243
|
+
getConnectedWalletConnectorKey(account) {
|
|
1244
|
+
return !account || account.isPrimary ? PRIMARY_CONNECTED_WALLET_KEY : account.id;
|
|
1245
|
+
}
|
|
1246
|
+
getConnectedWalletConnectorStateByKey(accountKey) {
|
|
1247
|
+
var _this$connectedWallet;
|
|
1248
|
+
return (_this$connectedWallet = this.connectedWalletConnectorMap.get(accountKey)) !== null && _this$connectedWallet !== void 0 ? _this$connectedWallet : null;
|
|
1249
|
+
}
|
|
1250
|
+
isLinkedAccountInfo(account) {
|
|
1251
|
+
return Boolean(account && "connector" in account);
|
|
1252
|
+
}
|
|
1253
|
+
toConnectedWalletLinkedAccountInfo(account) {
|
|
1254
|
+
return {
|
|
1255
|
+
id: account.id,
|
|
1256
|
+
isPrimary: account.isPrimary,
|
|
1257
|
+
eoaAddress: account.eoaAddress,
|
|
1258
|
+
aaAddress: account.aaAddress,
|
|
1259
|
+
aaProvider: account.aaProvider,
|
|
1260
|
+
active: account.active,
|
|
1261
|
+
accountType: account.accountType,
|
|
1262
|
+
address: account.address,
|
|
1263
|
+
authConnectionId: account.authConnectionId,
|
|
1264
|
+
groupedAuthConnectionId: account.groupedAuthConnectionId,
|
|
1265
|
+
chainNamespace: account.chainNamespace
|
|
1266
|
+
};
|
|
1267
|
+
}
|
|
1268
|
+
getConnectedWalletLinkedAccountInfo(account) {
|
|
1269
|
+
const existingConnectedWallet = this.getConnectedWalletConnectorState(account);
|
|
1270
|
+
const resolvedAccount = this.isLinkedAccountInfo(account) ? account : existingConnectedWallet;
|
|
1271
|
+
if (resolvedAccount) {
|
|
1272
|
+
return this.toConnectedWalletLinkedAccountInfo(resolvedAccount);
|
|
1273
|
+
}
|
|
1274
|
+
const isPrimaryAccount = !account || account.isPrimary;
|
|
1275
|
+
const accountId = account && !account.isPrimary ? account.id : PRIMARY_CONNECTED_WALLET_KEY;
|
|
1276
|
+
return {
|
|
1277
|
+
id: accountId,
|
|
1278
|
+
isPrimary: isPrimaryAccount,
|
|
1279
|
+
eoaAddress: "",
|
|
1280
|
+
aaAddress: undefined,
|
|
1281
|
+
aaProvider: undefined,
|
|
1282
|
+
active: this.state.activeAccount ? this.state.activeAccount.id === accountId : isPrimaryAccount,
|
|
1283
|
+
accountType: "",
|
|
1284
|
+
address: null,
|
|
1285
|
+
authConnectionId: null,
|
|
1286
|
+
groupedAuthConnectionId: null,
|
|
1287
|
+
chainNamespace: null
|
|
1288
|
+
};
|
|
1289
|
+
}
|
|
1290
|
+
syncConnectedWalletLinkedAccounts(linkedAccounts) {
|
|
1291
|
+
for (const linkedAccount of linkedAccounts) {
|
|
1292
|
+
const accountKey = this.getConnectedWalletConnectorKey(linkedAccount);
|
|
1293
|
+
const connectedWallet = this.connectedWalletConnectorMap.get(accountKey);
|
|
1294
|
+
if (!connectedWallet) {
|
|
1295
|
+
continue;
|
|
1296
|
+
}
|
|
1297
|
+
this.connectedWalletConnectorMap.set(accountKey, _objectSpread(_objectSpread({}, connectedWallet), this.toConnectedWalletLinkedAccountInfo(linkedAccount)));
|
|
1298
|
+
}
|
|
1299
|
+
}
|
|
1300
|
+
refreshConnectedWalletActiveStates(activeAccount) {
|
|
1301
|
+
for (const [accountKey, connectedWallet] of this.connectedWalletConnectorMap.entries()) {
|
|
1302
|
+
const isPrimaryAccount = accountKey === PRIMARY_CONNECTED_WALLET_KEY || connectedWallet.isPrimary;
|
|
1303
|
+
this.connectedWalletConnectorMap.set(accountKey, _objectSpread(_objectSpread({}, connectedWallet), {}, {
|
|
1304
|
+
active: activeAccount ? connectedWallet.id === activeAccount.id : isPrimaryAccount
|
|
1305
|
+
}));
|
|
1306
|
+
}
|
|
1307
|
+
}
|
|
1308
|
+
getConnectedWalletConnectionByKey(accountKey) {
|
|
1309
|
+
const connectedWallet = this.getConnectedWalletConnectorStateByKey(accountKey);
|
|
1310
|
+
if (!connectedWallet) {
|
|
1311
|
+
return null;
|
|
1312
|
+
}
|
|
1313
|
+
if (!connectedWallet.signingProvider && !connectedWallet.solanaWallet) {
|
|
1314
|
+
throw new Error(`Connected connector "${connectedWallet.connector.name}" is not ready.`);
|
|
1315
|
+
}
|
|
1316
|
+
return this.buildConnectionFromConnectedWalletConnectorState(connectedWallet);
|
|
1317
|
+
}
|
|
1318
|
+
buildConnectionFromConnectedWalletConnectorState(connectedWallet) {
|
|
1319
|
+
var _connectedWallet$sola;
|
|
1320
|
+
return {
|
|
1321
|
+
ethereumProvider: connectedWallet.signingProvider,
|
|
1322
|
+
solanaWallet: (_connectedWallet$sola = connectedWallet.solanaWallet) !== null && _connectedWallet$sola !== void 0 ? _connectedWallet$sola : null,
|
|
1323
|
+
connectorName: connectedWallet.connector.name
|
|
1324
|
+
};
|
|
1325
|
+
}
|
|
1326
|
+
buildImmediateConnectedWalletConnectorState(params) {
|
|
1327
|
+
var _this$commonJRPCProvi;
|
|
1328
|
+
const {
|
|
1329
|
+
connector,
|
|
1330
|
+
ethereumProvider,
|
|
1331
|
+
solanaWallet,
|
|
1332
|
+
usePrimaryProxy,
|
|
1333
|
+
account
|
|
1334
|
+
} = params;
|
|
1335
|
+
const isSolanaOnly = connector.connectorNamespace === baseControllers.CHAIN_NAMESPACES.SOLANA;
|
|
1336
|
+
const connectedWallet = _objectSpread(_objectSpread({}, this.getConnectedWalletLinkedAccountInfo(account)), {}, {
|
|
1337
|
+
connector,
|
|
1338
|
+
signingProvider: isSolanaOnly ? null : ethereumProvider ? usePrimaryProxy ? (_this$commonJRPCProvi = this.commonJRPCProvider) !== null && _this$commonJRPCProvi !== void 0 ? _this$commonJRPCProvi : ethereumProvider : ethereumProvider : null,
|
|
1339
|
+
solanaWallet: solanaWallet !== null && solanaWallet !== void 0 ? solanaWallet : null,
|
|
1340
|
+
connected: connector.connected || connector.status === constants.CONNECTOR_STATUS.CONNECTED || connector.status === constants.CONNECTOR_STATUS.AUTHORIZED
|
|
1341
|
+
});
|
|
1342
|
+
return connectedWallet;
|
|
1343
|
+
}
|
|
1344
|
+
async resolveConnectedWalletConnectorState(params) {
|
|
1345
|
+
const {
|
|
1346
|
+
connector,
|
|
1347
|
+
ethereumProvider,
|
|
1348
|
+
solanaWallet,
|
|
1349
|
+
usePrimaryProxy,
|
|
1350
|
+
account
|
|
1351
|
+
} = params;
|
|
1352
|
+
return this.buildImmediateConnectedWalletConnectorState({
|
|
1353
|
+
connector,
|
|
1354
|
+
ethereumProvider,
|
|
1355
|
+
solanaWallet,
|
|
1356
|
+
usePrimaryProxy,
|
|
1357
|
+
account
|
|
1358
|
+
});
|
|
1359
|
+
}
|
|
1360
|
+
async linkAccountWithConnector(connectorName, chainId, walletConnector) {
|
|
1361
|
+
const authConnector = this.getMainAuthConnector();
|
|
1362
|
+
const result = await authConnector.linkAccount({
|
|
1363
|
+
connectorName,
|
|
1364
|
+
chainId,
|
|
1365
|
+
walletConnector,
|
|
1366
|
+
authSessionTokens: {
|
|
1367
|
+
accessToken: this.accessToken,
|
|
1368
|
+
idToken: this.idToken
|
|
1369
|
+
}
|
|
1370
|
+
});
|
|
1371
|
+
await this.setState({
|
|
1372
|
+
idToken: result.idToken
|
|
1373
|
+
});
|
|
1374
|
+
await this.cacheConnectedLinkedWalletConnector(authConnector, walletConnector);
|
|
1375
|
+
return result;
|
|
1376
|
+
}
|
|
1377
|
+
getMainAuthConnector() {
|
|
1378
|
+
if (!connectorStatus.CONNECTED_STATUSES.includes(this.status) || !this.primaryConnector) {
|
|
1379
|
+
throw index.WalletLoginError.notConnectedError("No wallet is connected. Connect with AUTH before unlinking an account.");
|
|
1380
|
+
}
|
|
1381
|
+
const mainConnector = this.primaryConnector;
|
|
1382
|
+
authConnector.assertAuthConnector(mainConnector, "Account linking is only supported when connected with the AUTH connector.");
|
|
1383
|
+
return mainConnector;
|
|
1384
|
+
}
|
|
1385
|
+
/**
|
|
1386
|
+
* Processes the result of a switch account operation.
|
|
1387
|
+
*
|
|
1388
|
+
* - If the target account is a primary account, we will switch back to the primary account.
|
|
1389
|
+
* - If the target account is an external account and already connected (i.e. connector is available with connected state), we will just switch to it without re-connecting again.
|
|
1390
|
+
* - If the target account is an external account and not connected (i.e. connector is not available with connected state), we will create a new isolated connector and connect to it.
|
|
1391
|
+
* @param authConnector - The main auth connector to use.
|
|
1392
|
+
* @param switchResult - The result of the switch account operation.
|
|
1393
|
+
* @param options - The options for the switch account operation.
|
|
1394
|
+
* @returns A promise that resolves when the switch account operation is complete.
|
|
1395
|
+
*/
|
|
1396
|
+
async processSwitchAccountResult(authConnector, switchResult, options = {}) {
|
|
1397
|
+
const resolvedSwitchChainId = this.resolveSwitchAccountChainId(switchResult.targetAccount, switchResult.activeChainId);
|
|
1398
|
+
if (switchResult.kind === "primary") {
|
|
1399
|
+
var _primaryConnectedWall, _this$commonJRPCProvi2, _switchResult$solanaW;
|
|
1400
|
+
const existingPrimaryConnectedWalletState = this.getConnectedWalletConnectorState();
|
|
1401
|
+
const primaryConnectedWalletState = existingPrimaryConnectedWalletState !== null && existingPrimaryConnectedWalletState !== void 0 ? existingPrimaryConnectedWalletState : await this.resolveConnectedWalletConnectorState({
|
|
1402
|
+
connector: authConnector,
|
|
1403
|
+
ethereumProvider: switchResult.ethereumProvider,
|
|
1404
|
+
solanaWallet: switchResult.solanaWallet,
|
|
1405
|
+
usePrimaryProxy: true,
|
|
1406
|
+
account: switchResult.targetAccount
|
|
1407
|
+
});
|
|
1408
|
+
this.setConnectedWalletConnectorState(_objectSpread(_objectSpread({}, primaryConnectedWalletState), {}, {
|
|
1409
|
+
connector: authConnector,
|
|
1410
|
+
signingProvider: (_primaryConnectedWall = primaryConnectedWalletState.signingProvider) !== null && _primaryConnectedWall !== void 0 ? _primaryConnectedWall : switchResult.ethereumProvider ? (_this$commonJRPCProvi2 = this.commonJRPCProvider) !== null && _this$commonJRPCProvi2 !== void 0 ? _this$commonJRPCProvi2 : switchResult.ethereumProvider : null,
|
|
1411
|
+
solanaWallet: (_switchResult$solanaW = switchResult.solanaWallet) !== null && _switchResult$solanaW !== void 0 ? _switchResult$solanaW : primaryConnectedWalletState.solanaWallet,
|
|
1412
|
+
connected: authConnector.connected || authConnector.status === constants.CONNECTOR_STATUS.CONNECTED
|
|
1413
|
+
}));
|
|
1414
|
+
this.setActiveWalletConnectorKey();
|
|
1415
|
+
} else {
|
|
1416
|
+
var _ref5, _options$walletConnec;
|
|
1417
|
+
const walletConnector = (_ref5 = (_options$walletConnec = options.walletConnector) !== null && _options$walletConnec !== void 0 ? _options$walletConnec : this.getConnectedWalletConnector(switchResult.targetAccount)) !== null && _ref5 !== void 0 ? _ref5 : await this.createSwitchingWalletConnector(switchResult.targetAccount.connector, resolvedSwitchChainId, options.projectConfig);
|
|
1418
|
+
let linkedAccountConnection = null;
|
|
1419
|
+
try {
|
|
1420
|
+
var _ref6, _walletConnector$prov2, _linkedAccountConnect3, _ref7, _walletConnector$sola2, _linkedAccountConnect4;
|
|
1421
|
+
if (!this.hasUsableConnectedSwitchConnector(walletConnector)) {
|
|
1422
|
+
const switchChainConfig = this.coreOptions.chains.find(c => c.chainId === resolvedSwitchChainId);
|
|
1423
|
+
if (!switchChainConfig) {
|
|
1424
|
+
throw index.WalletLoginError.connectionError(`Chain config is not available for chain ${resolvedSwitchChainId}`);
|
|
1425
|
+
}
|
|
1426
|
+
const caipChainId = utils.getCaipChainId(switchChainConfig);
|
|
1427
|
+
const caipAccountId = `${caipChainId}:${switchResult.targetAccount.eoaAddress}`;
|
|
1428
|
+
linkedAccountConnection = await walletConnector.connect({
|
|
1429
|
+
chainId: resolvedSwitchChainId,
|
|
1430
|
+
caipAccountIds: [caipAccountId]
|
|
1431
|
+
});
|
|
1432
|
+
if (!linkedAccountConnection) {
|
|
1433
|
+
throw index.AccountLinkingError.requestFailed(`Failed to connect isolated connector "${switchResult.targetAccount.connector}" for account switch.`);
|
|
1434
|
+
}
|
|
1435
|
+
}
|
|
1436
|
+
await authConnector.assertSwitchAccountConnectorMatchesTarget(walletConnector, switchResult.targetAccount);
|
|
1437
|
+
const connectedWalletState = await this.resolveConnectedWalletConnectorState({
|
|
1438
|
+
connector: walletConnector,
|
|
1439
|
+
ethereumProvider: (_ref6 = (_walletConnector$prov2 = walletConnector.provider) !== null && _walletConnector$prov2 !== void 0 ? _walletConnector$prov2 : (_linkedAccountConnect3 = linkedAccountConnection) === null || _linkedAccountConnect3 === void 0 ? void 0 : _linkedAccountConnect3.ethereumProvider) !== null && _ref6 !== void 0 ? _ref6 : null,
|
|
1440
|
+
solanaWallet: (_ref7 = (_walletConnector$sola2 = walletConnector.solanaWallet) !== null && _walletConnector$sola2 !== void 0 ? _walletConnector$sola2 : (_linkedAccountConnect4 = linkedAccountConnection) === null || _linkedAccountConnect4 === void 0 ? void 0 : _linkedAccountConnect4.solanaWallet) !== null && _ref7 !== void 0 ? _ref7 : null,
|
|
1441
|
+
usePrimaryProxy: false,
|
|
1442
|
+
account: switchResult.targetAccount
|
|
1443
|
+
});
|
|
1444
|
+
this.setConnectedWalletConnectorState(connectedWalletState, switchResult.targetAccount);
|
|
1445
|
+
this.setActiveWalletConnectorKey(switchResult.targetAccount);
|
|
1446
|
+
} catch (error) {
|
|
1447
|
+
throw authConnector.toSwitchAccountConnectorError(switchResult.targetAccount, error);
|
|
1448
|
+
}
|
|
1449
|
+
}
|
|
1450
|
+
await this.setCurrentChain(resolvedSwitchChainId);
|
|
1451
|
+
await this.setState({
|
|
1452
|
+
activeAccount: switchResult.activeAccount
|
|
1453
|
+
});
|
|
1454
|
+
this.syncConnectedWalletLinkedAccounts([switchResult.targetAccount]);
|
|
1455
|
+
this.refreshConnectedWalletActiveStates(switchResult.activeAccount);
|
|
1456
|
+
const connection = this.connection;
|
|
1457
|
+
if (!connection) {
|
|
1458
|
+
throw index.WalletLoginError.connectionError("Failed to resolve the active connection after switching accounts.");
|
|
1459
|
+
}
|
|
1460
|
+
this.emit(constants.CONNECTOR_EVENTS.CONNECTION_UPDATED, {
|
|
1461
|
+
ethereumProvider: connection.ethereumProvider,
|
|
1462
|
+
solanaWallet: connection.solanaWallet,
|
|
1463
|
+
connectorName: connection.connectorName
|
|
1464
|
+
});
|
|
1465
|
+
}
|
|
1466
|
+
isActiveConnectorEventSource(connector) {
|
|
1467
|
+
if (!this.primaryConnectorName) return true;
|
|
1468
|
+
const activeConnector = this.primaryConnector;
|
|
1469
|
+
if (activeConnector) return activeConnector === connector;
|
|
1470
|
+
return connector.name === this.primaryConnectorName;
|
|
1471
|
+
}
|
|
1472
|
+
shouldIgnoreInactiveConnectorEvent(connector, event) {
|
|
1473
|
+
if (this.isActiveConnectorEventSource(connector)) return false;
|
|
1474
|
+
loglevel.log.debug("Ignoring connector lifecycle event from inactive connector", {
|
|
1475
|
+
event,
|
|
1476
|
+
sourceConnector: connector.name,
|
|
1477
|
+
activeConnector: this.primaryConnectorName
|
|
1478
|
+
});
|
|
1479
|
+
return true;
|
|
1480
|
+
}
|
|
1481
|
+
findLinkedAccountByAddress(linkedAccounts, address) {
|
|
1482
|
+
var _linkedAccounts$find;
|
|
1483
|
+
const normalizedAddress = address.toLowerCase();
|
|
1484
|
+
return (_linkedAccounts$find = linkedAccounts.find(account => {
|
|
1485
|
+
var _account$address, _account$eoaAddress;
|
|
1486
|
+
if (!account.chainNamespace || utils.parseChainNamespaceFromCitadelResponse(account.chainNamespace) !== baseControllers.CHAIN_NAMESPACES.EIP155) {
|
|
1487
|
+
return false;
|
|
1488
|
+
}
|
|
1489
|
+
return ((_account$address = account.address) === null || _account$address === void 0 ? void 0 : _account$address.toLowerCase()) === normalizedAddress || ((_account$eoaAddress = account.eoaAddress) === null || _account$eoaAddress === void 0 ? void 0 : _account$eoaAddress.toLowerCase()) === normalizedAddress;
|
|
1490
|
+
})) !== null && _linkedAccounts$find !== void 0 ? _linkedAccounts$find : null;
|
|
1491
|
+
}
|
|
1492
|
+
findLinkedAccountByWalletAddress(linkedAccounts, address) {
|
|
1493
|
+
var _linkedAccounts$find2;
|
|
1494
|
+
return (_linkedAccounts$find2 = linkedAccounts.find(account => {
|
|
1495
|
+
if (!account.chainNamespace) {
|
|
1496
|
+
return false;
|
|
1497
|
+
}
|
|
1498
|
+
const chainNamespace = utils.parseChainNamespaceFromCitadelResponse(account.chainNamespace);
|
|
1499
|
+
if (chainNamespace === baseControllers.CHAIN_NAMESPACES.EIP155) {
|
|
1500
|
+
var _account$address2, _account$eoaAddress2;
|
|
1501
|
+
const normalizedAddress = address.toLowerCase();
|
|
1502
|
+
return ((_account$address2 = account.address) === null || _account$address2 === void 0 ? void 0 : _account$address2.toLowerCase()) === normalizedAddress || ((_account$eoaAddress2 = account.eoaAddress) === null || _account$eoaAddress2 === void 0 ? void 0 : _account$eoaAddress2.toLowerCase()) === normalizedAddress;
|
|
1503
|
+
}
|
|
1504
|
+
if (chainNamespace === baseControllers.CHAIN_NAMESPACES.SOLANA) {
|
|
1505
|
+
return account.address === address || account.eoaAddress === address;
|
|
1506
|
+
}
|
|
1507
|
+
return false;
|
|
1508
|
+
})) !== null && _linkedAccounts$find2 !== void 0 ? _linkedAccounts$find2 : null;
|
|
1509
|
+
}
|
|
1510
|
+
async getConnectedWalletAddress(connector) {
|
|
1511
|
+
var _connector$solanaWall2, _accounts$;
|
|
1512
|
+
const solanaAddress = (_connector$solanaWall2 = connector.solanaWallet) === null || _connector$solanaWall2 === void 0 || (_connector$solanaWall2 = _connector$solanaWall2.accounts) === null || _connector$solanaWall2 === void 0 || (_connector$solanaWall2 = _connector$solanaWall2[0]) === null || _connector$solanaWall2 === void 0 ? void 0 : _connector$solanaWall2.address;
|
|
1513
|
+
if (solanaAddress) {
|
|
1514
|
+
return solanaAddress;
|
|
1515
|
+
}
|
|
1516
|
+
if (!connector.provider) {
|
|
1517
|
+
return null;
|
|
1518
|
+
}
|
|
1519
|
+
const accounts = await connector.provider.request({
|
|
1520
|
+
method: "eth_accounts"
|
|
1521
|
+
});
|
|
1522
|
+
return (_accounts$ = accounts === null || accounts === void 0 ? void 0 : accounts[0]) !== null && _accounts$ !== void 0 ? _accounts$ : null;
|
|
1523
|
+
}
|
|
1524
|
+
async cacheConnectedLinkedWalletConnector(authConnector, walletConnector) {
|
|
1525
|
+
try {
|
|
1526
|
+
var _await$authConnector$2;
|
|
1527
|
+
const connectedWalletAddress = await this.getConnectedWalletAddress(walletConnector);
|
|
1528
|
+
if (!connectedWalletAddress) {
|
|
1529
|
+
return;
|
|
1530
|
+
}
|
|
1531
|
+
const linkedAccounts = (_await$authConnector$2 = await authConnector.getLinkedAccounts()) !== null && _await$authConnector$2 !== void 0 ? _await$authConnector$2 : [];
|
|
1532
|
+
const linkedAccount = this.findLinkedAccountByWalletAddress(linkedAccounts, connectedWalletAddress);
|
|
1533
|
+
if (linkedAccount && !linkedAccount.isPrimary) {
|
|
1534
|
+
const connectedWalletState = await this.resolveConnectedWalletConnectorState({
|
|
1535
|
+
connector: walletConnector,
|
|
1536
|
+
ethereumProvider: walletConnector.provider,
|
|
1537
|
+
solanaWallet: walletConnector.solanaWallet,
|
|
1538
|
+
usePrimaryProxy: false,
|
|
1539
|
+
account: linkedAccount
|
|
1540
|
+
});
|
|
1541
|
+
this.setConnectedWalletConnectorState(connectedWalletState, linkedAccount);
|
|
1542
|
+
}
|
|
1543
|
+
} catch (error) {
|
|
1544
|
+
loglevel.log.debug("Failed to cache connected linked wallet connector", error);
|
|
1545
|
+
}
|
|
1546
|
+
}
|
|
1547
|
+
async cacheWallet(walletName) {
|
|
1548
|
+
await this.setState({
|
|
904
1549
|
cachedConnector: walletName
|
|
905
1550
|
});
|
|
906
1551
|
}
|
|
907
|
-
setCurrentChain(chainId) {
|
|
1552
|
+
async setCurrentChain(chainId) {
|
|
908
1553
|
if (chainId === this.currentChainId) return;
|
|
909
1554
|
const newChain = this.coreOptions.chains.find(chain => chain.chainId === chainId);
|
|
910
1555
|
if (!newChain) throw index.WalletInitializationError.invalidParams(`Invalid chainId: ${chainId}`);
|
|
911
|
-
this.setState({
|
|
1556
|
+
await this.setState({
|
|
912
1557
|
currentChainId: chainId
|
|
913
1558
|
});
|
|
914
1559
|
}
|
|
915
1560
|
connectToPlugins(data) {
|
|
916
1561
|
Object.values(this.plugins).map(async plugin => {
|
|
917
1562
|
try {
|
|
918
|
-
var _this$
|
|
1563
|
+
var _this$currentChain4;
|
|
919
1564
|
// skip if it's not compatible with the connector
|
|
920
1565
|
if (!plugin.SUPPORTED_CONNECTORS.includes(data.connector)) return;
|
|
921
1566
|
// skip if it's not compatible with the current chain
|
|
922
|
-
if (plugin.pluginNamespace !== IPlugin.PLUGIN_NAMESPACES.MULTICHAIN && plugin.pluginNamespace !== ((_this$
|
|
1567
|
+
if (plugin.pluginNamespace !== IPlugin.PLUGIN_NAMESPACES.MULTICHAIN && plugin.pluginNamespace !== ((_this$currentChain4 = this.currentChain) === null || _this$currentChain4 === void 0 ? void 0 : _this$currentChain4.chainNamespace)) return;
|
|
923
1568
|
// skip if it's already connected
|
|
924
1569
|
if (plugin.status === IPlugin.PLUGIN_STATUS.CONNECTED) return;
|
|
925
1570
|
await plugin.initWithWeb3Auth(this, this.coreOptions.uiConfig, this.analytics);
|
|
@@ -933,27 +1578,170 @@ class Web3AuthNoModal extends auth.SafeEventEmitter {
|
|
|
933
1578
|
}
|
|
934
1579
|
});
|
|
935
1580
|
}
|
|
936
|
-
|
|
1581
|
+
async bindPrimaryEthereumSigningProxy(ethereumProvider, connectorName) {
|
|
1582
|
+
var _this$currentChain5, _accountAbstractionCo;
|
|
1583
|
+
if (!this.commonJRPCProvider) throw index.WalletInitializationError.notFound(`CommonJrpcProvider not found`);
|
|
1584
|
+
let finalProvider = (ethereumProvider === null || ethereumProvider === void 0 ? void 0 : ethereumProvider.provider) || ethereumProvider;
|
|
1585
|
+
const {
|
|
1586
|
+
accountAbstractionConfig
|
|
1587
|
+
} = this.coreOptions;
|
|
1588
|
+
const is7702 = (accountAbstractionConfig === null || accountAbstractionConfig === void 0 ? void 0 : accountAbstractionConfig.smartAccountEipStandard) === ethereumControllers.SMART_ACCOUNT_EIP_STANDARD["EIP_7702"];
|
|
1589
|
+
const isAaSupportedForCurrentChain = ((_this$currentChain5 = this.currentChain) === null || _this$currentChain5 === void 0 ? void 0 : _this$currentChain5.chainNamespace) === baseControllers.CHAIN_NAMESPACES.EIP155 && (accountAbstractionConfig === null || accountAbstractionConfig === void 0 || (_accountAbstractionCo = accountAbstractionConfig.chains) === null || _accountAbstractionCo === void 0 ? void 0 : _accountAbstractionCo.some(chain => {
|
|
1590
|
+
var _this$currentChain6;
|
|
1591
|
+
return chain.chainId === ((_this$currentChain6 = this.currentChain) === null || _this$currentChain6 === void 0 ? void 0 : _this$currentChain6.chainId);
|
|
1592
|
+
}));
|
|
1593
|
+
// setup AA provider if AA is enabled (skip for EIP-7702; 7702 uses EOA + 5792/7702 RPC only)
|
|
1594
|
+
if (!is7702 && isAaSupportedForCurrentChain && (connectorName === index$1.WALLET_CONNECTORS.AUTH || this.coreOptions.useAAWithExternalWallet)) {
|
|
1595
|
+
var _accountAbstractionCo2;
|
|
1596
|
+
const {
|
|
1597
|
+
accountAbstractionProvider,
|
|
1598
|
+
toEoaProvider
|
|
1599
|
+
} = await Promise.resolve().then(function () { return require('./providers/account-abstraction-provider/index.js'); });
|
|
1600
|
+
const eoaProvider = connectorName === index$1.WALLET_CONNECTORS.AUTH ? await toEoaProvider(ethereumProvider) : ethereumProvider;
|
|
1601
|
+
const aaChainIds = new Set((accountAbstractionConfig === null || accountAbstractionConfig === void 0 || (_accountAbstractionCo2 = accountAbstractionConfig.chains) === null || _accountAbstractionCo2 === void 0 ? void 0 : _accountAbstractionCo2.map(chain => chain.chainId)) || []);
|
|
1602
|
+
const aaProvider = await accountAbstractionProvider({
|
|
1603
|
+
accountAbstractionConfig,
|
|
1604
|
+
provider: eoaProvider,
|
|
1605
|
+
chain: this.currentChain,
|
|
1606
|
+
chains: this.coreOptions.chains.filter(chain => aaChainIds.has(chain.chainId)),
|
|
1607
|
+
useProviderAsTransport: connectorName === index$1.WALLET_CONNECTORS.AUTH
|
|
1608
|
+
});
|
|
1609
|
+
this.aaProvider = aaProvider;
|
|
1610
|
+
if (connectorName !== index$1.WALLET_CONNECTORS.AUTH && this.coreOptions.useAAWithExternalWallet) {
|
|
1611
|
+
finalProvider = this.aaProvider;
|
|
1612
|
+
}
|
|
1613
|
+
}
|
|
1614
|
+
this.commonJRPCProvider.updateProviderEngineProxy(finalProvider);
|
|
1615
|
+
}
|
|
1616
|
+
getChainConfigForIsolatedConnector(chainId) {
|
|
1617
|
+
const chainConfig = this.coreOptions.chains.find(chain => chain.chainId === chainId);
|
|
1618
|
+
if (!chainConfig) {
|
|
1619
|
+
throw index.WalletInitializationError.invalidParams(`Chain config is not available for chain ${chainId}`);
|
|
1620
|
+
}
|
|
1621
|
+
return chainConfig;
|
|
1622
|
+
}
|
|
1623
|
+
async resolveInstalledDiscoveredWalletConnector(params) {
|
|
1624
|
+
const {
|
|
1625
|
+
connectorName,
|
|
1626
|
+
chainConfig,
|
|
1627
|
+
config,
|
|
1628
|
+
isMipdEnabled
|
|
1629
|
+
} = params;
|
|
1630
|
+
if (!utils.isBrowser() || !isMipdEnabled) return null;
|
|
1631
|
+
if (chainConfig.chainNamespace === baseControllers.CHAIN_NAMESPACES.EIP155) {
|
|
1632
|
+
const {
|
|
1633
|
+
createMipd,
|
|
1634
|
+
injectedEvmConnector
|
|
1635
|
+
} = await Promise.resolve().then(function () { return require('./connectors/injected-evm-connector/index.js'); });
|
|
1636
|
+
const providerDetail = createMipd().getProviders().find(detail => utils.normalizeWalletName(detail.info.name) === connectorName);
|
|
1637
|
+
if (providerDetail) {
|
|
1638
|
+
return injectedEvmConnector(providerDetail)(config);
|
|
1639
|
+
}
|
|
1640
|
+
return null;
|
|
1641
|
+
}
|
|
1642
|
+
if (chainConfig.chainNamespace === baseControllers.CHAIN_NAMESPACES.SOLANA) {
|
|
1643
|
+
const {
|
|
1644
|
+
createSolanaMipd,
|
|
1645
|
+
hasSolanaWalletStandardFeatures,
|
|
1646
|
+
walletStandardConnector
|
|
1647
|
+
} = await Promise.resolve().then(function () { return require('./connectors/injected-solana-connector/index.js'); });
|
|
1648
|
+
const wallet = createSolanaMipd().get().find(candidate => hasSolanaWalletStandardFeatures(candidate) && utils.normalizeWalletName(candidate.name) === connectorName);
|
|
1649
|
+
if (wallet) {
|
|
1650
|
+
return walletStandardConnector(wallet)(config);
|
|
1651
|
+
}
|
|
1652
|
+
}
|
|
1653
|
+
return null;
|
|
1654
|
+
}
|
|
1655
|
+
async resolveDiscoveredWalletConnector(connectorName, chainId, config, effectiveProjectConfig) {
|
|
1656
|
+
var _this$coreOptions$mul2;
|
|
1657
|
+
const chainConfig = this.getChainConfigForIsolatedConnector(chainId);
|
|
1658
|
+
const isExternalWalletEnabled = Boolean(effectiveProjectConfig === null || effectiveProjectConfig === void 0 ? void 0 : effectiveProjectConfig.externalWalletAuth);
|
|
1659
|
+
const isMipdEnabled = isExternalWalletEnabled && ((_this$coreOptions$mul2 = this.coreOptions.multiInjectedProviderDiscovery) !== null && _this$coreOptions$mul2 !== void 0 ? _this$coreOptions$mul2 : true);
|
|
1660
|
+
const installedConnector = await this.resolveInstalledDiscoveredWalletConnector({
|
|
1661
|
+
connectorName,
|
|
1662
|
+
chainConfig,
|
|
1663
|
+
config,
|
|
1664
|
+
isMipdEnabled
|
|
1665
|
+
});
|
|
1666
|
+
if (installedConnector) {
|
|
1667
|
+
return installedConnector;
|
|
1668
|
+
}
|
|
1669
|
+
const isBuiltInConnectorName = Object.values(index$1.WALLET_CONNECTORS).includes(connectorName);
|
|
1670
|
+
const supportsWalletConnectFallback = chainConfig.chainNamespace === baseControllers.CHAIN_NAMESPACES.EIP155 || chainConfig.chainNamespace === baseControllers.CHAIN_NAMESPACES.SOLANA;
|
|
1671
|
+
// Named discovered wallets (for example Phantom) can reuse WalletConnect as a transport fallback
|
|
1672
|
+
// when an injected connector for the target chain namespace is unavailable.
|
|
1673
|
+
if (!isBuiltInConnectorName && isExternalWalletEnabled && supportsWalletConnectFallback) {
|
|
1674
|
+
const {
|
|
1675
|
+
walletConnectV2Connector
|
|
1676
|
+
} = await Promise.resolve().then(function () { return require('./connectors/wallet-connect-v2-connector/index.js'); });
|
|
1677
|
+
return walletConnectV2Connector()(config);
|
|
1678
|
+
}
|
|
1679
|
+
throw index.AccountLinkingError.unsupportedConnector(`Connector "${connectorName}" does not support automatic wallet linking. ` + `Use ${index$1.WALLET_CONNECTORS.METAMASK}, ${index$1.WALLET_CONNECTORS.WALLET_CONNECT_V2}, or an installed compatible wallet.`);
|
|
1680
|
+
}
|
|
1681
|
+
/**
|
|
1682
|
+
* Create a new connector instance that is NOT registered in this.connectors and NOT
|
|
1683
|
+
* subscribed to the main SDK event loop. Its lifecycle events are therefore isolated
|
|
1684
|
+
* and will not mutate any global SDK state (connectedConnectorName, connection, idToken).
|
|
1685
|
+
*/
|
|
1686
|
+
async createIsolatedWalletConnector(connectorName, chainId, projectConfig) {
|
|
1687
|
+
var _ref8;
|
|
1688
|
+
const effectiveProjectConfig = (_ref8 = projectConfig !== null && projectConfig !== void 0 ? projectConfig : this.projectConfig) !== null && _ref8 !== void 0 ? _ref8 : undefined;
|
|
1689
|
+
const config = {
|
|
1690
|
+
projectConfig: effectiveProjectConfig,
|
|
1691
|
+
coreOptions: this.coreOptions,
|
|
1692
|
+
analytics: this.analytics
|
|
1693
|
+
};
|
|
1694
|
+
let connector;
|
|
1695
|
+
switch (connectorName) {
|
|
1696
|
+
case index$1.WALLET_CONNECTORS.METAMASK:
|
|
1697
|
+
connector = metamaskConnector.metaMaskConnector()(config);
|
|
1698
|
+
break;
|
|
1699
|
+
case index$1.WALLET_CONNECTORS.WALLET_CONNECT_V2:
|
|
1700
|
+
{
|
|
1701
|
+
const {
|
|
1702
|
+
walletConnectV2Connector
|
|
1703
|
+
} = await Promise.resolve().then(function () { return require('./connectors/wallet-connect-v2-connector/index.js'); });
|
|
1704
|
+
connector = walletConnectV2Connector()(config);
|
|
1705
|
+
break;
|
|
1706
|
+
}
|
|
1707
|
+
case index$1.WALLET_CONNECTORS.AUTH:
|
|
1708
|
+
throw index.AccountLinkingError.unsupportedConnector(`Connector "${connectorName}" does not support automatic wallet linking.`);
|
|
1709
|
+
default:
|
|
1710
|
+
{
|
|
1711
|
+
connector = await this.resolveDiscoveredWalletConnector(connectorName, chainId, config, effectiveProjectConfig);
|
|
1712
|
+
break;
|
|
1713
|
+
}
|
|
1714
|
+
}
|
|
1715
|
+
// Init the isolated connector WITHOUT subscribing to the main event loop.
|
|
1716
|
+
// This is the key difference from setupConnector(), which calls subscribeToConnectorEvents().
|
|
1717
|
+
// autoConnect: false ensures the connector does not attempt to rehydrate a previous session.
|
|
1718
|
+
await connector.init({
|
|
1719
|
+
chainId,
|
|
1720
|
+
autoConnect: false
|
|
1721
|
+
});
|
|
1722
|
+
return connector;
|
|
1723
|
+
}
|
|
1724
|
+
async setState(newState) {
|
|
937
1725
|
this.state = _objectSpread(_objectSpread({}, this.state), newState);
|
|
938
|
-
this.storage.
|
|
1726
|
+
await this.storage.set(constants$1.WEB3AUTH_STATE_STORAGE_KEY, JSON.stringify(this.state));
|
|
939
1727
|
}
|
|
940
|
-
loadState(initialState) {
|
|
1728
|
+
async loadState(initialState) {
|
|
941
1729
|
if (initialState) {
|
|
942
|
-
this.state = initialState;
|
|
1730
|
+
this.state = _objectSpread(_objectSpread({}, this.state), initialState);
|
|
943
1731
|
return;
|
|
944
1732
|
}
|
|
945
|
-
const state = this.storage.
|
|
1733
|
+
const state = await this.storage.get(constants$1.WEB3AUTH_STATE_STORAGE_KEY);
|
|
946
1734
|
if (!state) return;
|
|
947
1735
|
this.state = deserialize.deserialize(state);
|
|
948
1736
|
}
|
|
949
1737
|
getStorageMethod() {
|
|
950
|
-
|
|
951
|
-
|
|
1738
|
+
var _this$coreOptions$sto;
|
|
1739
|
+
if ((_this$coreOptions$sto = this.coreOptions.storage) !== null && _this$coreOptions$sto !== void 0 && _this$coreOptions$sto.sessionId) return this.coreOptions.storage.sessionId;
|
|
1740
|
+
if (this.coreOptions.ssr) return new auth.CookieStorage({
|
|
1741
|
+
maxAge: this.coreOptions.sessionTime
|
|
952
1742
|
});
|
|
953
|
-
if (
|
|
954
|
-
|
|
955
|
-
// If no storage is available, use a memory store.
|
|
956
|
-
return new auth.MemoryStore();
|
|
1743
|
+
if (utils$1.storageAvailable("localStorage")) return new auth.LocalStorageAdapter();
|
|
1744
|
+
return new auth.MemoryStorage();
|
|
957
1745
|
}
|
|
958
1746
|
}
|
|
959
1747
|
|