@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.
Files changed (356) hide show
  1. package/dist/lib.cjs/account-linking/index.js +8 -0
  2. package/dist/lib.cjs/account-linking/react.js +95 -0
  3. package/dist/lib.cjs/account-linking/rest.js +54 -0
  4. package/dist/lib.cjs/account-linking/vue.js +98 -0
  5. package/dist/lib.cjs/base/analytics.js +13 -1
  6. package/dist/lib.cjs/base/connector/baseConnector.js +104 -2
  7. package/dist/lib.cjs/base/connector/connectorStatus.js +2 -0
  8. package/dist/lib.cjs/base/connector/constants.js +6 -2
  9. package/dist/lib.cjs/base/connector/utils.js +0 -21
  10. package/dist/lib.cjs/base/constants.js +4 -0
  11. package/dist/lib.cjs/base/cookie.js +6 -20
  12. package/dist/lib.cjs/base/errors/index.js +84 -12
  13. package/dist/lib.cjs/base/utils.js +22 -11
  14. package/dist/lib.cjs/base/wallet/index.js +7 -0
  15. package/dist/lib.cjs/base/wallet/solana.js +83 -0
  16. package/dist/lib.cjs/connectors/auth-connector/authConnector.js +566 -93
  17. package/dist/lib.cjs/connectors/auth-connector/authSolanaWallet.js +187 -0
  18. package/dist/lib.cjs/connectors/base-evm-connector/baseEvmConnector.js +55 -58
  19. package/dist/lib.cjs/connectors/base-solana-connector/baseSolanaConnector.js +57 -66
  20. package/dist/lib.cjs/connectors/coinbase-connector/coinbaseConnector.js +19 -14
  21. package/dist/lib.cjs/connectors/injected-evm-connector/injectedEvmConnector.js +18 -13
  22. package/dist/lib.cjs/connectors/injected-solana-connector/walletStandardConnector.js +24 -36
  23. package/dist/lib.cjs/connectors/metamask-connector/metamaskConnector.js +350 -131
  24. package/dist/lib.cjs/connectors/utils.js +8 -2
  25. package/dist/lib.cjs/connectors/wallet-connect-v2-connector/WalletConnectV2Provider.js +12 -38
  26. package/dist/lib.cjs/connectors/wallet-connect-v2-connector/config.js +4 -3
  27. package/dist/lib.cjs/connectors/wallet-connect-v2-connector/walletConnectV2Connector.js +111 -73
  28. package/dist/lib.cjs/connectors/wallet-connect-v2-connector/walletConnectV2Utils.js +24 -51
  29. package/dist/lib.cjs/connectors/wallet-connect-v2-connector/wcSolanaWallet.js +144 -0
  30. package/dist/lib.cjs/index.js +55 -83
  31. package/dist/lib.cjs/noModal.js +957 -169
  32. package/dist/lib.cjs/plugins/wallet-services-plugin/plugin.js +23 -39
  33. package/dist/lib.cjs/providers/account-abstraction-provider/providers/AccountAbstractionProvider.js +12 -10
  34. package/dist/lib.cjs/providers/account-abstraction-provider/providers/utils.js +8 -6
  35. package/dist/lib.cjs/providers/account-abstraction-provider/rpc/ethRpcMiddlewares.js +47 -44
  36. package/dist/lib.cjs/providers/base-provider/CommonJRPCProvider.js +1 -3
  37. package/dist/lib.cjs/providers/base-provider/baseProvider.js +69 -35
  38. package/dist/lib.cjs/providers/base-provider/commonPrivateKeyProvider.js +8 -11
  39. package/dist/lib.cjs/providers/base-provider/index.js +0 -1
  40. package/dist/lib.cjs/providers/base-provider/jrpcClient.js +18 -19
  41. package/dist/lib.cjs/providers/base-provider/utils.js +0 -3
  42. package/dist/lib.cjs/providers/ethereum-provider/rpc/ethRpcMiddlewares.js +22 -43
  43. package/dist/lib.cjs/providers/ethereum-provider/rpc/jrpcClient.js +18 -19
  44. package/dist/lib.cjs/providers/ethereum-provider/rpc/walletMiddleware.js +200 -0
  45. package/dist/lib.cjs/providers/xrpl-provider/providers/privateKeyProviders/xrplPrivateKeyProvider.js +9 -18
  46. package/dist/lib.cjs/providers/xrpl-provider/providers/privateKeyProviders/xrplWalletUtils.js +2 -1
  47. package/dist/lib.cjs/providers/xrpl-provider/rpc/JrpcClient.js +19 -26
  48. package/dist/lib.cjs/providers/xrpl-provider/rpc/xrplRpcMiddlewares.js +46 -37
  49. package/dist/lib.cjs/react/context/WalletServicesInnerContext.js +2 -69
  50. package/dist/lib.cjs/react/context/Web3AuthInnerContext.js +6 -161
  51. package/dist/lib.cjs/react/context/useWalletServicesContextValue.js +76 -0
  52. package/dist/lib.cjs/react/context/useWeb3AuthInnerContextValue.js +216 -0
  53. package/dist/lib.cjs/react/hooks/{useIdentityToken.js → useAuthTokenInfo.js} +6 -7
  54. package/dist/lib.cjs/react/hooks/useCheckout.js +4 -2
  55. package/dist/lib.cjs/react/hooks/useFunding.js +4 -2
  56. package/dist/lib.cjs/react/hooks/useReceive.js +4 -2
  57. package/dist/lib.cjs/react/hooks/useSwap.js +4 -2
  58. package/dist/lib.cjs/react/hooks/useWalletConnectScanner.js +4 -2
  59. package/dist/lib.cjs/react/hooks/useWalletServicesPlugin.js +3 -10
  60. package/dist/lib.cjs/react/hooks/useWalletUI.js +4 -2
  61. package/dist/lib.cjs/react/hooks/useWallets.js +51 -0
  62. package/dist/lib.cjs/react/hooks/useWeb3Auth.js +1 -22
  63. package/dist/lib.cjs/react/hooks/useWeb3AuthConnect.js +2 -2
  64. package/dist/lib.cjs/react/hooks/useWeb3AuthInner.js +4 -2
  65. package/dist/lib.cjs/react/index.js +12 -2
  66. package/dist/lib.cjs/react/solana/hooks/useSignAndSendTransaction.js +22 -4
  67. package/dist/lib.cjs/react/solana/hooks/useSignMessage.js +20 -2
  68. package/dist/lib.cjs/react/solana/hooks/useSignTransaction.js +22 -3
  69. package/dist/lib.cjs/react/solana/hooks/useSolanaWallet.js +34 -51
  70. package/dist/lib.cjs/react/solana/index.js +2 -0
  71. package/dist/lib.cjs/react/solana/provider.js +169 -0
  72. package/dist/lib.cjs/react/wagmi/provider.js +10 -8
  73. package/dist/lib.cjs/types/account-linking/index.d.ts +2 -0
  74. package/dist/lib.cjs/types/account-linking/interfaces.d.ts +90 -0
  75. package/dist/lib.cjs/types/account-linking/react.d.ts +19 -0
  76. package/dist/lib.cjs/types/account-linking/rest.d.ts +9 -0
  77. package/dist/lib.cjs/types/account-linking/vue.d.ts +20 -0
  78. package/dist/lib.cjs/types/base/analytics.d.ts +9 -0
  79. package/dist/lib.cjs/types/base/connector/baseConnector.d.ts +26 -5
  80. package/dist/lib.cjs/types/base/connector/connectorStatus.d.ts +1 -0
  81. package/dist/lib.cjs/types/base/connector/constants.d.ts +5 -0
  82. package/dist/lib.cjs/types/base/connector/interfaces.d.ts +72 -16
  83. package/dist/lib.cjs/types/base/connector/utils.d.ts +0 -3
  84. package/dist/lib.cjs/types/base/constants.d.ts +1 -0
  85. package/dist/lib.cjs/types/base/cookie.d.ts +0 -7
  86. package/dist/lib.cjs/types/base/core/IWeb3Auth.d.ts +57 -13
  87. package/dist/lib.cjs/types/base/errors/index.d.ts +15 -3
  88. package/dist/lib.cjs/types/base/hooks/index.d.ts +2 -2
  89. package/dist/lib.cjs/types/base/interfaces.d.ts +8 -2
  90. package/dist/lib.cjs/types/base/utils.d.ts +9 -2
  91. package/dist/lib.cjs/types/base/wallet/index.d.ts +3 -0
  92. package/dist/lib.cjs/types/base/wallet/solana.d.ts +19 -0
  93. package/dist/lib.cjs/types/connectors/auth-connector/authConnector.d.ts +37 -8
  94. package/dist/lib.cjs/types/connectors/auth-connector/authSolanaWallet.d.ts +35 -0
  95. package/dist/lib.cjs/types/connectors/auth-connector/interface.d.ts +77 -2
  96. package/dist/lib.cjs/types/connectors/base-evm-connector/baseEvmConnector.d.ts +8 -2
  97. package/dist/lib.cjs/types/connectors/base-solana-connector/baseSolanaConnector.d.ts +8 -2
  98. package/dist/lib.cjs/types/connectors/injected-evm-connector/injectedEvmConnector.d.ts +2 -2
  99. package/dist/lib.cjs/types/connectors/injected-solana-connector/walletStandardConnector.d.ts +10 -7
  100. package/dist/lib.cjs/types/connectors/metamask-connector/metamaskConnector.d.ts +35 -3
  101. package/dist/lib.cjs/types/connectors/utils.d.ts +2 -0
  102. package/dist/lib.cjs/types/connectors/wallet-connect-v2-connector/WalletConnectV2Provider.d.ts +0 -1
  103. package/dist/lib.cjs/types/connectors/wallet-connect-v2-connector/walletConnectV2Utils.d.ts +1 -5
  104. package/dist/lib.cjs/types/connectors/wallet-connect-v2-connector/wcSolanaWallet.d.ts +26 -0
  105. package/dist/lib.cjs/types/index.d.ts +1 -0
  106. package/dist/lib.cjs/types/noModal.d.ts +113 -10
  107. package/dist/lib.cjs/types/plugins/wallet-services-plugin/plugin.d.ts +1 -4
  108. package/dist/lib.cjs/types/providers/account-abstraction-provider/rpc/ethRpcMiddlewares.d.ts +4 -4
  109. package/dist/lib.cjs/types/providers/base-provider/baseProvider.d.ts +7 -0
  110. package/dist/lib.cjs/types/providers/base-provider/jrpcClient.d.ts +2 -5
  111. package/dist/lib.cjs/types/providers/base-provider/utils.d.ts +0 -1
  112. package/dist/lib.cjs/types/providers/ethereum-provider/index.d.ts +0 -1
  113. package/dist/lib.cjs/types/providers/ethereum-provider/rpc/ethRpcMiddlewares.d.ts +4 -4
  114. package/dist/lib.cjs/types/providers/ethereum-provider/rpc/index.d.ts +1 -1
  115. package/dist/lib.cjs/types/providers/ethereum-provider/rpc/jrpcClient.d.ts +2 -5
  116. package/dist/lib.cjs/types/providers/ethereum-provider/rpc/walletMiddleware.d.ts +3 -0
  117. package/dist/lib.cjs/types/providers/index.d.ts +0 -1
  118. package/dist/lib.cjs/types/providers/xrpl-provider/providers/privateKeyProviders/xrplPrivateKeyProvider.d.ts +0 -1
  119. package/dist/lib.cjs/types/providers/xrpl-provider/rpc/JrpcClient.d.ts +3 -7
  120. package/dist/lib.cjs/types/providers/xrpl-provider/rpc/xrplRpcMiddlewares.d.ts +5 -12
  121. package/dist/lib.cjs/types/react/context/index.d.ts +4 -0
  122. package/dist/lib.cjs/types/react/context/useWalletServicesContextValue.d.ts +12 -0
  123. package/dist/lib.cjs/types/react/context/useWeb3AuthInnerContextValue.d.ts +26 -0
  124. package/dist/lib.cjs/types/react/hooks/index.d.ts +2 -1
  125. package/dist/lib.cjs/types/react/hooks/{useIdentityToken.d.ts → useAuthTokenInfo.d.ts} +4 -4
  126. package/dist/lib.cjs/types/react/hooks/useWallets.d.ts +8 -0
  127. package/dist/lib.cjs/types/react/hooks/useWeb3Auth.d.ts +1 -2
  128. package/dist/lib.cjs/types/react/hooks/useWeb3AuthConnect.d.ts +2 -2
  129. package/dist/lib.cjs/types/react/index.d.ts +1 -0
  130. package/dist/lib.cjs/types/react/solana/hooks/useSignAndSendTransaction.d.ts +7 -2
  131. package/dist/lib.cjs/types/react/solana/hooks/useSignTransaction.d.ts +8 -3
  132. package/dist/lib.cjs/types/react/solana/hooks/useSolanaWallet.d.ts +17 -4
  133. package/dist/lib.cjs/types/react/solana/index.d.ts +1 -0
  134. package/dist/lib.cjs/types/react/solana/provider.d.ts +26 -0
  135. package/dist/lib.cjs/types/vue/composables/index.d.ts +3 -1
  136. package/dist/lib.cjs/types/vue/composables/{useIdentityToken.d.ts → useAuthTokenInfo.d.ts} +3 -3
  137. package/dist/lib.cjs/types/vue/composables/useInjectedWeb3AuthInnerContext.d.ts +1 -0
  138. package/dist/lib.cjs/types/vue/composables/useWallets.d.ts +9 -0
  139. package/dist/lib.cjs/types/vue/composables/useWeb3Auth.d.ts +1 -2
  140. package/dist/lib.cjs/types/vue/composables/useWeb3AuthConnect.d.ts +2 -2
  141. package/dist/lib.cjs/types/vue/index.d.ts +2 -0
  142. package/dist/lib.cjs/types/vue/interfaces.d.ts +2 -2
  143. package/dist/lib.cjs/types/vue/solana/composables/index.d.ts +1 -0
  144. package/dist/lib.cjs/types/vue/solana/composables/useSignAndSendTransaction.d.ts +7 -2
  145. package/dist/lib.cjs/types/vue/solana/composables/useSignTransaction.d.ts +8 -3
  146. package/dist/lib.cjs/types/vue/solana/composables/useSolanaClient.d.ts +7 -0
  147. package/dist/lib.cjs/types/vue/solana/composables/useSolanaWallet.d.ts +17 -4
  148. package/dist/lib.cjs/types/vue/solana/constants.d.ts +3 -0
  149. package/dist/lib.cjs/types/vue/solana/index.d.ts +2 -0
  150. package/dist/lib.cjs/types/vue/solana/provider.d.ts +8 -0
  151. package/dist/lib.cjs/types/vue/useWalletServicesInnerContextValue.d.ts +13 -0
  152. package/dist/lib.cjs/types/vue/useWeb3AuthInnerContextValue.d.ts +26 -0
  153. package/dist/lib.cjs/types/x402/index.d.ts +43 -0
  154. package/dist/lib.cjs/types/x402/interfaces.d.ts +11 -0
  155. package/dist/lib.cjs/types/x402/react.d.ts +17 -0
  156. package/dist/lib.cjs/types/x402/vue.d.ts +18 -0
  157. package/dist/lib.cjs/vue/WalletServicesInnerProvider.js +9 -54
  158. package/dist/lib.cjs/vue/Web3AuthProvider.js +16 -177
  159. package/dist/lib.cjs/vue/composables/{useIdentityToken.js → useAuthTokenInfo.js} +10 -8
  160. package/dist/lib.cjs/vue/composables/useCheckout.js +4 -2
  161. package/dist/lib.cjs/vue/composables/useEnableMFA.js +4 -2
  162. package/dist/lib.cjs/vue/composables/useFunding.js +4 -2
  163. package/dist/lib.cjs/vue/composables/useInjectedWeb3AuthInnerContext.js +29 -0
  164. package/dist/lib.cjs/vue/composables/useManageMFA.js +4 -2
  165. package/dist/lib.cjs/vue/composables/useReceive.js +4 -2
  166. package/dist/lib.cjs/vue/composables/useSwap.js +4 -2
  167. package/dist/lib.cjs/vue/composables/useSwitchChain.js +4 -2
  168. package/dist/lib.cjs/vue/composables/useWalletConnectScanner.js +4 -2
  169. package/dist/lib.cjs/vue/composables/useWalletUI.js +4 -2
  170. package/dist/lib.cjs/vue/composables/useWallets.js +52 -0
  171. package/dist/lib.cjs/vue/composables/useWeb3Auth.js +1 -26
  172. package/dist/lib.cjs/vue/composables/useWeb3AuthConnect.js +6 -4
  173. package/dist/lib.cjs/vue/composables/useWeb3AuthDisconnect.js +4 -2
  174. package/dist/lib.cjs/vue/composables/useWeb3AuthInner.js +2 -20
  175. package/dist/lib.cjs/vue/composables/useWeb3AuthUser.js +4 -2
  176. package/dist/lib.cjs/vue/index.js +10 -2
  177. package/dist/lib.cjs/vue/solana/composables/useSignAndSendTransaction.js +6 -3
  178. package/dist/lib.cjs/vue/solana/composables/useSignMessage.js +6 -3
  179. package/dist/lib.cjs/vue/solana/composables/useSignTransaction.js +6 -3
  180. package/dist/lib.cjs/vue/solana/composables/useSolanaClient.js +14 -0
  181. package/dist/lib.cjs/vue/solana/composables/useSolanaWallet.js +60 -41
  182. package/dist/lib.cjs/vue/solana/constants.js +5 -0
  183. package/dist/lib.cjs/vue/solana/index.js +6 -0
  184. package/dist/lib.cjs/vue/solana/provider.js +110 -0
  185. package/dist/lib.cjs/vue/useWalletServicesInnerContextValue.js +75 -0
  186. package/dist/lib.cjs/vue/useWeb3AuthInnerContextValue.js +226 -0
  187. package/dist/lib.cjs/vue/wagmi/provider.js +28 -12
  188. package/dist/lib.cjs/x402/index.js +175 -0
  189. package/dist/lib.cjs/x402/interfaces.js +5 -0
  190. package/dist/lib.cjs/x402/react.js +64 -0
  191. package/dist/lib.cjs/x402/vue.js +58 -0
  192. package/dist/lib.esm/account-linking/index.js +1 -0
  193. package/dist/lib.esm/account-linking/react.js +74 -0
  194. package/dist/lib.esm/account-linking/rest.js +51 -0
  195. package/dist/lib.esm/account-linking/vue.js +78 -0
  196. package/dist/lib.esm/base/analytics.js +13 -1
  197. package/dist/lib.esm/base/connector/baseConnector.js +104 -2
  198. package/dist/lib.esm/base/connector/connectorStatus.js +2 -1
  199. package/dist/lib.esm/base/connector/constants.js +6 -2
  200. package/dist/lib.esm/base/connector/utils.js +1 -19
  201. package/dist/lib.esm/base/constants.js +4 -1
  202. package/dist/lib.esm/base/cookie.js +7 -20
  203. package/dist/lib.esm/base/errors/index.js +84 -13
  204. package/dist/lib.esm/base/utils.js +22 -7
  205. package/dist/lib.esm/base/wallet/index.js +2 -1
  206. package/dist/lib.esm/base/wallet/solana.js +81 -0
  207. package/dist/lib.esm/connectors/auth-connector/authConnector.js +527 -57
  208. package/dist/lib.esm/connectors/auth-connector/authSolanaWallet.js +175 -0
  209. package/dist/lib.esm/connectors/base-evm-connector/baseEvmConnector.js +55 -58
  210. package/dist/lib.esm/connectors/base-solana-connector/baseSolanaConnector.js +57 -66
  211. package/dist/lib.esm/connectors/coinbase-connector/coinbaseConnector.js +16 -13
  212. package/dist/lib.esm/connectors/injected-evm-connector/injectedEvmConnector.js +16 -13
  213. package/dist/lib.esm/connectors/injected-solana-connector/walletStandardConnector.js +22 -34
  214. package/dist/lib.esm/connectors/metamask-connector/metamaskConnector.js +366 -132
  215. package/dist/lib.esm/connectors/utils.js +9 -4
  216. package/dist/lib.esm/connectors/wallet-connect-v2-connector/WalletConnectV2Provider.js +12 -31
  217. package/dist/lib.esm/connectors/wallet-connect-v2-connector/config.js +1 -1
  218. package/dist/lib.esm/connectors/wallet-connect-v2-connector/walletConnectV2Connector.js +110 -73
  219. package/dist/lib.esm/connectors/wallet-connect-v2-connector/walletConnectV2Utils.js +21 -49
  220. package/dist/lib.esm/connectors/wallet-connect-v2-connector/wcSolanaWallet.js +130 -0
  221. package/dist/lib.esm/index.js +12 -19
  222. package/dist/lib.esm/noModal.js +975 -177
  223. package/dist/lib.esm/plugins/wallet-services-plugin/plugin.js +20 -39
  224. package/dist/lib.esm/providers/account-abstraction-provider/providers/AccountAbstractionProvider.js +9 -9
  225. package/dist/lib.esm/providers/account-abstraction-provider/providers/utils.js +3 -3
  226. package/dist/lib.esm/providers/account-abstraction-provider/rpc/ethRpcMiddlewares.js +48 -45
  227. package/dist/lib.esm/providers/base-provider/CommonJRPCProvider.js +2 -4
  228. package/dist/lib.esm/providers/base-provider/baseProvider.js +68 -38
  229. package/dist/lib.esm/providers/base-provider/commonPrivateKeyProvider.js +9 -12
  230. package/dist/lib.esm/providers/base-provider/index.js +1 -1
  231. package/dist/lib.esm/providers/base-provider/jrpcClient.js +20 -19
  232. package/dist/lib.esm/providers/base-provider/utils.js +1 -3
  233. package/dist/lib.esm/providers/ethereum-provider/rpc/ethRpcMiddlewares.js +23 -44
  234. package/dist/lib.esm/providers/ethereum-provider/rpc/jrpcClient.js +20 -19
  235. package/dist/lib.esm/providers/ethereum-provider/rpc/walletMiddleware.js +201 -0
  236. package/dist/lib.esm/providers/xrpl-provider/providers/privateKeyProviders/xrplPrivateKeyProvider.js +6 -17
  237. package/dist/lib.esm/providers/xrpl-provider/providers/privateKeyProviders/xrplWalletUtils.js +2 -1
  238. package/dist/lib.esm/providers/xrpl-provider/rpc/JrpcClient.js +21 -25
  239. package/dist/lib.esm/providers/xrpl-provider/rpc/xrplRpcMiddlewares.js +48 -38
  240. package/dist/lib.esm/react/context/WalletServicesInnerContext.js +3 -57
  241. package/dist/lib.esm/react/context/Web3AuthInnerContext.js +7 -152
  242. package/dist/lib.esm/react/context/useWalletServicesContextValue.js +59 -0
  243. package/dist/lib.esm/react/context/useWeb3AuthInnerContextValue.js +203 -0
  244. package/dist/lib.esm/react/hooks/{useIdentityToken.js → useAuthTokenInfo.js} +6 -7
  245. package/dist/lib.esm/react/hooks/useWalletServicesPlugin.js +3 -10
  246. package/dist/lib.esm/react/hooks/useWallets.js +33 -0
  247. package/dist/lib.esm/react/hooks/useWeb3Auth.js +1 -22
  248. package/dist/lib.esm/react/hooks/useWeb3AuthConnect.js +2 -2
  249. package/dist/lib.esm/react/index.js +6 -1
  250. package/dist/lib.esm/react/solana/hooks/useSignAndSendTransaction.js +6 -4
  251. package/dist/lib.esm/react/solana/hooks/useSignMessage.js +4 -2
  252. package/dist/lib.esm/react/solana/hooks/useSignTransaction.js +6 -3
  253. package/dist/lib.esm/react/solana/hooks/useSolanaWallet.js +33 -28
  254. package/dist/lib.esm/react/solana/index.js +1 -0
  255. package/dist/lib.esm/react/solana/provider.js +153 -0
  256. package/dist/lib.esm/react/wagmi/provider.js +8 -8
  257. package/dist/lib.esm/vue/WalletServicesInnerProvider.js +4 -54
  258. package/dist/lib.esm/vue/Web3AuthProvider.js +7 -179
  259. package/dist/lib.esm/vue/composables/{useIdentityToken.js → useAuthTokenInfo.js} +6 -6
  260. package/dist/lib.esm/vue/composables/useCheckout.js +1 -1
  261. package/dist/lib.esm/vue/composables/useFunding.js +1 -1
  262. package/dist/lib.esm/vue/composables/useInjectedWeb3AuthInnerContext.js +11 -0
  263. package/dist/lib.esm/vue/composables/useReceive.js +1 -1
  264. package/dist/lib.esm/vue/composables/useSwap.js +1 -1
  265. package/dist/lib.esm/vue/composables/useWalletConnectScanner.js +1 -1
  266. package/dist/lib.esm/vue/composables/useWalletUI.js +1 -1
  267. package/dist/lib.esm/vue/composables/useWallets.js +35 -0
  268. package/dist/lib.esm/vue/composables/useWeb3Auth.js +1 -26
  269. package/dist/lib.esm/vue/composables/useWeb3AuthConnect.js +2 -2
  270. package/dist/lib.esm/vue/composables/useWeb3AuthInner.js +2 -6
  271. package/dist/lib.esm/vue/index.js +5 -1
  272. package/dist/lib.esm/vue/solana/composables/useSignAndSendTransaction.js +2 -1
  273. package/dist/lib.esm/vue/solana/composables/useSignMessage.js +2 -1
  274. package/dist/lib.esm/vue/solana/composables/useSignTransaction.js +3 -2
  275. package/dist/lib.esm/vue/solana/composables/useSolanaClient.js +12 -0
  276. package/dist/lib.esm/vue/solana/composables/useSolanaWallet.js +53 -35
  277. package/dist/lib.esm/vue/solana/constants.js +3 -0
  278. package/dist/lib.esm/vue/solana/index.js +3 -0
  279. package/dist/lib.esm/vue/solana/provider.js +99 -0
  280. package/dist/lib.esm/vue/useWalletServicesInnerContextValue.js +58 -0
  281. package/dist/lib.esm/vue/useWeb3AuthInnerContextValue.js +213 -0
  282. package/dist/lib.esm/vue/wagmi/provider.js +26 -12
  283. package/dist/lib.esm/x402/index.js +170 -0
  284. package/dist/lib.esm/x402/interfaces.js +3 -0
  285. package/dist/lib.esm/x402/react.js +59 -0
  286. package/dist/lib.esm/x402/vue.js +54 -0
  287. package/package.json +102 -53
  288. package/dist/lib.cjs/providers/ethereum-mpc-provider/index.js +0 -7
  289. package/dist/lib.cjs/providers/ethereum-mpc-provider/providers/signingProviders/EthereumSigningProvider.js +0 -224
  290. package/dist/lib.cjs/providers/ethereum-mpc-provider/providers/signingProviders/signingUtils.js +0 -177
  291. package/dist/lib.cjs/providers/ethereum-mpc-provider/rpc/ethRpcMiddlewares.js +0 -21
  292. package/dist/lib.cjs/providers/ethereum-provider/providers/converter.js +0 -88
  293. package/dist/lib.cjs/providers/ethereum-provider/providers/privateKeyProviders/TransactionFormatter/constants.js +0 -27
  294. package/dist/lib.cjs/providers/ethereum-provider/providers/privateKeyProviders/TransactionFormatter/formatter.js +0 -383
  295. package/dist/lib.cjs/providers/ethereum-provider/providers/privateKeyProviders/TransactionFormatter/interfaces.js +0 -8
  296. package/dist/lib.cjs/providers/ethereum-provider/providers/privateKeyProviders/TransactionFormatter/utils.js +0 -93
  297. package/dist/lib.cjs/providers/ethereum-provider/providers/utils.js +0 -29
  298. package/dist/lib.cjs/providers/ethereum-provider/rpc/walletMidddleware.js +0 -251
  299. package/dist/lib.cjs/providers/solana-provider/providers/injectedProviders/base/baseInjectedProvider.js +0 -65
  300. package/dist/lib.cjs/providers/solana-provider/providers/injectedProviders/base/providerHandlers.js +0 -45
  301. package/dist/lib.cjs/providers/solana-provider/providers/injectedProviders/utils.js +0 -16
  302. package/dist/lib.cjs/providers/solana-provider/providers/injectedProviders/walletStandardProvider.js +0 -103
  303. package/dist/lib.cjs/providers/solana-provider/rpc/JrpcClient.js +0 -47
  304. package/dist/lib.cjs/providers/solana-provider/rpc/solanaRpcMiddlewares.js +0 -97
  305. package/dist/lib.cjs/providers/solana-provider/solanaWallet.js +0 -91
  306. package/dist/lib.cjs/types/connectors/injected-solana-connector/utils.d.ts +0 -3
  307. package/dist/lib.cjs/types/providers/ethereum-mpc-provider/index.d.ts +0 -1
  308. package/dist/lib.cjs/types/providers/ethereum-mpc-provider/providers/index.d.ts +0 -1
  309. package/dist/lib.cjs/types/providers/ethereum-mpc-provider/providers/signingProviders/EthereumSigningProvider.d.ts +0 -74
  310. package/dist/lib.cjs/types/providers/ethereum-mpc-provider/providers/signingProviders/index.d.ts +0 -1
  311. package/dist/lib.cjs/types/providers/ethereum-mpc-provider/providers/signingProviders/signingUtils.d.ts +0 -12
  312. package/dist/lib.cjs/types/providers/ethereum-mpc-provider/rpc/ethRpcMiddlewares.d.ts +0 -3
  313. package/dist/lib.cjs/types/providers/ethereum-mpc-provider/rpc/interfaces.d.ts +0 -15
  314. package/dist/lib.cjs/types/providers/ethereum-provider/providers/converter.d.ts +0 -14
  315. package/dist/lib.cjs/types/providers/ethereum-provider/providers/index.d.ts +0 -1
  316. package/dist/lib.cjs/types/providers/ethereum-provider/providers/privateKeyProviders/TransactionFormatter/constants.d.ts +0 -16
  317. package/dist/lib.cjs/types/providers/ethereum-provider/providers/privateKeyProviders/TransactionFormatter/formatter.d.ts +0 -28
  318. package/dist/lib.cjs/types/providers/ethereum-provider/providers/privateKeyProviders/TransactionFormatter/index.d.ts +0 -4
  319. package/dist/lib.cjs/types/providers/ethereum-provider/providers/privateKeyProviders/TransactionFormatter/interfaces.d.ts +0 -46
  320. package/dist/lib.cjs/types/providers/ethereum-provider/providers/privateKeyProviders/TransactionFormatter/utils.d.ts +0 -11
  321. package/dist/lib.cjs/types/providers/ethereum-provider/providers/privateKeyProviders/index.d.ts +0 -1
  322. package/dist/lib.cjs/types/providers/ethereum-provider/providers/utils.d.ts +0 -5
  323. package/dist/lib.cjs/types/providers/ethereum-provider/rpc/walletMidddleware.d.ts +0 -3
  324. package/dist/lib.cjs/types/providers/solana-provider/index.d.ts +0 -4
  325. package/dist/lib.cjs/types/providers/solana-provider/interface.d.ts +0 -22
  326. package/dist/lib.cjs/types/providers/solana-provider/providers/index.d.ts +0 -1
  327. package/dist/lib.cjs/types/providers/solana-provider/providers/injectedProviders/base/baseInjectedProvider.d.ts +0 -16
  328. package/dist/lib.cjs/types/providers/solana-provider/providers/injectedProviders/base/providerHandlers.d.ts +0 -3
  329. package/dist/lib.cjs/types/providers/solana-provider/providers/injectedProviders/index.d.ts +0 -2
  330. package/dist/lib.cjs/types/providers/solana-provider/providers/injectedProviders/utils.d.ts +0 -3
  331. package/dist/lib.cjs/types/providers/solana-provider/providers/injectedProviders/walletStandardProvider.d.ts +0 -9
  332. package/dist/lib.cjs/types/providers/solana-provider/rpc/JrpcClient.d.ts +0 -9
  333. package/dist/lib.cjs/types/providers/solana-provider/rpc/index.d.ts +0 -3
  334. package/dist/lib.cjs/types/providers/solana-provider/rpc/interfaces.d.ts +0 -27
  335. package/dist/lib.cjs/types/providers/solana-provider/rpc/solanaRpcMiddlewares.d.ts +0 -20
  336. package/dist/lib.cjs/types/providers/solana-provider/solanaWallet.d.ts +0 -29
  337. package/dist/lib.esm/providers/ethereum-mpc-provider/index.js +0 -1
  338. package/dist/lib.esm/providers/ethereum-mpc-provider/providers/signingProviders/EthereumSigningProvider.js +0 -206
  339. package/dist/lib.esm/providers/ethereum-mpc-provider/providers/signingProviders/signingUtils.js +0 -163
  340. package/dist/lib.esm/providers/ethereum-mpc-provider/rpc/ethRpcMiddlewares.js +0 -20
  341. package/dist/lib.esm/providers/ethereum-provider/providers/converter.js +0 -85
  342. package/dist/lib.esm/providers/ethereum-provider/providers/privateKeyProviders/TransactionFormatter/constants.js +0 -21
  343. package/dist/lib.esm/providers/ethereum-provider/providers/privateKeyProviders/TransactionFormatter/formatter.js +0 -378
  344. package/dist/lib.esm/providers/ethereum-provider/providers/privateKeyProviders/TransactionFormatter/interfaces.js +0 -8
  345. package/dist/lib.esm/providers/ethereum-provider/providers/privateKeyProviders/TransactionFormatter/utils.js +0 -88
  346. package/dist/lib.esm/providers/ethereum-provider/providers/utils.js +0 -24
  347. package/dist/lib.esm/providers/ethereum-provider/rpc/walletMidddleware.js +0 -258
  348. package/dist/lib.esm/providers/solana-provider/providers/injectedProviders/base/baseInjectedProvider.js +0 -47
  349. package/dist/lib.esm/providers/solana-provider/providers/injectedProviders/base/providerHandlers.js +0 -43
  350. package/dist/lib.esm/providers/solana-provider/providers/injectedProviders/utils.js +0 -14
  351. package/dist/lib.esm/providers/solana-provider/providers/injectedProviders/walletStandardProvider.js +0 -91
  352. package/dist/lib.esm/providers/solana-provider/rpc/JrpcClient.js +0 -42
  353. package/dist/lib.esm/providers/solana-provider/rpc/solanaRpcMiddlewares.js +0 -89
  354. package/dist/lib.esm/providers/solana-provider/solanaWallet.js +0 -92
  355. package/dist/noModal.umd.min.js +0 -2
  356. package/dist/noModal.umd.min.js.LICENSE.txt +0 -46
@@ -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 cookie = require('./base/cookie.js');
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
- connectedConnectorName: null,
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.storageType) options.storageType = "local";
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
- if (this.state.idToken && this.coreOptions.ssr) {
63
- // connect-only is the default authentication mode, so we need to set the status to connected if the idToken is present and ssr is enabled
64
- this.status = this.coreOptions.initialAuthenticationMode === constants.CONNECTOR_INITIAL_AUTHENTICATION_MODE.CONNECT_AND_SIGN ? constants.CONNECTOR_STATUS.AUTHORIZED : constants.CONNECTOR_STATUS.CONNECTED;
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.connectedConnector);
85
+ return Boolean(this.primaryConnector);
74
86
  }
75
- get provider() {
76
- if (this.status !== constants.CONNECTOR_STATUS.NOT_READY && this.commonJRPCProvider) {
77
- return this.commonJRPCProvider;
78
- }
79
- return null;
87
+ get connection() {
88
+ return this.getConnectedWalletConnectionByKey(this.activeWalletConnectorKey);
80
89
  }
81
- get connectedConnectorName() {
82
- return this.state.connectedConnectorName;
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
- get connectedConnector() {
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.connectedConnectorName, (_this$currentChain = this.currentChain) === null || _this$currentChain === void 0 ? void 0 : _this$currentChain.chainNamespace);
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.setState({
208
- connectedConnectorName: null,
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) && this.connectedConnector) {
225
- await this.connectedConnector.switchChain(params);
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
- getIdentityToken: this.coreOptions.initialAuthenticationMode === constants.CONNECTOR_INITIAL_AUTHENTICATION_MODE.CONNECT_AND_SIGN
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.getIdentityToken) {
348
+ if (finalLoginParams.getAuthTokenInfo) {
300
349
  if (connectedEventCompleted && authorizedEventReceived) {
301
350
  await completeConnection();
302
351
  }
303
- } else {
304
- // In CONNECT_ONLY mode, just wait for connected event
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 connector.getUserInfo();
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.provider);
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.getIdentityToken) {
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.CONNECTED_STATUSES.includes(this.status) || !this.connectedConnector) throw index.WalletLoginError.notConnectedError(`No wallet is connected`);
354
- if (this.connectedConnector.status === constants.CONNECTOR_STATUS.DISCONNECTING) return;
355
- await this.connectedConnector.disconnect(options);
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$connectedConnec;
359
- loglevel.log.debug("Getting user info", this.status, (_this$connectedConnec = this.connectedConnector) === null || _this$connectedConnec === void 0 ? void 0 : _this$connectedConnec.name);
360
- if (!connectorStatus.CAN_AUTHORIZE_STATUSES.includes(this.status) || !this.connectedConnector) throw index.WalletLoginError.notConnectedError(`No wallet is connected`);
361
- return this.connectedConnector.getUserInfo();
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.connectedConnector) throw index.WalletLoginError.notConnectedError(`No wallet is connected`);
366
- if (this.connectedConnector.name !== index$1.WALLET_CONNECTORS.AUTH) throw index.WalletLoginError.unsupportedOperation(`EnableMFA is not supported for this connector.`);
367
- const authConnector = this.connectedConnector;
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.connectedConnector.name,
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.connectedConnector.enableMFA(loginParams);
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.connectedConnector) throw index.WalletLoginError.notConnectedError(`No wallet is connected`);
383
- if (this.connectedConnector.name !== index$1.WALLET_CONNECTORS.AUTH) throw index.WalletLoginError.unsupportedOperation(`ManageMFA is not supported for this connector.`);
384
- const authConnector = this.connectedConnector;
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.connectedConnector.name,
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.connectedConnector.manageMFA(loginParams);
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 getIdentityToken() {
398
- if (!connectorStatus.CAN_AUTHORIZE_STATUSES.includes(this.status) || !this.connectedConnector) throw index.WalletLoginError.notConnectedError(`No wallet is connected`);
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.connectedConnector.name
478
+ connector: this.primaryConnector.name
401
479
  };
402
480
  try {
403
481
  this.analytics.track(analytics.ANALYTICS_EVENTS.IDENTITY_TOKEN_STARTED, trackData);
404
- const identityToken = await this.connectedConnector.getIdentityToken();
482
+ const authTokenInfo = await this.primaryConnector.getAuthTokenInfo();
405
483
  this.analytics.track(analytics.ANALYTICS_EVENTS.IDENTITY_TOKEN_COMPLETED, trackData);
406
- return identityToken;
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
- if (this.coreOptions.accountAbstractionConfig) {
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$acc2;
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$acc2 = this.coreOptions.accountAbstractionConfig) === null || _this$coreOptions$acc2 === void 0 ? void 0 : _this$coreOptions$acc2.chains) || [])];
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({}, deepmerge(configWithoutWalletScope || {}, this.coreOptions.accountAbstractionConfig || {})), {}, {
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
- storage_type: this.coreOptions.storageType,
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
- getIdentityToken: this.coreOptions.initialAuthenticationMode === constants.CONNECTOR_INITIAL_AUTHENTICATION_MODE.CONNECT_AND_SIGN
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
- headless: true
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
- var _this$currentChain3, _accountAbstractionCo;
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
- provider,
731
- identityTokenInfo
898
+ ethereumProvider,
899
+ solanaWallet
732
900
  } = data;
733
- if (identityTokenInfo) {
734
- this.setState({
735
- idToken: identityTokenInfo.idToken
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
- const data = await connector.getIdentityToken();
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
- let finalProvider = provider.provider || provider;
754
- // setup AA provider if AA is enabled
932
+ // The following block only hits during rehydration
755
933
  const {
756
- accountAbstractionConfig
757
- } = this.coreOptions;
758
- const isAaSupportedForCurrentChain = ((_this$currentChain3 = this.currentChain) === null || _this$currentChain3 === void 0 ? void 0 : _this$currentChain3.chainNamespace) === baseControllers.CHAIN_NAMESPACES.EIP155 && (accountAbstractionConfig === null || accountAbstractionConfig === void 0 || (_accountAbstractionCo = accountAbstractionConfig.chains) === null || _accountAbstractionCo === void 0 ? void 0 : _accountAbstractionCo.some(chain => {
759
- var _this$currentChain4;
760
- return chain.chainId === ((_this$currentChain4 = this.currentChain) === null || _this$currentChain4 === void 0 ? void 0 : _this$currentChain4.chainId);
761
- }));
762
- if (isAaSupportedForCurrentChain && (data.connector === index$1.WALLET_CONNECTORS.AUTH || this.coreOptions.useAAWithExternalWallet)) {
763
- var _accountAbstractionCo2;
764
- const {
765
- accountAbstractionProvider,
766
- toEoaProvider
767
- } = await Promise.resolve().then(function () { return require('./providers/account-abstraction-provider/index.js'); });
768
- // for embedded wallets, we use ws-embed provider which is AA provider, need to derive EOA provider
769
- const eoaProvider = data.connector === index$1.WALLET_CONNECTORS.AUTH ? await toEoaProvider(provider) : provider;
770
- const aaChainIds = new Set((accountAbstractionConfig === null || accountAbstractionConfig === void 0 || (_accountAbstractionCo2 = accountAbstractionConfig.chains) === null || _accountAbstractionCo2 === void 0 ? void 0 : _accountAbstractionCo2.map(chain => chain.chainId)) || []);
771
- const aaProvider = await accountAbstractionProvider({
772
- accountAbstractionConfig,
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.commonJRPCProvider.updateProviderEngineProxy(finalProvider);
786
- this.setState({
787
- connectedConnectorName: data.connector
965
+ const primaryConnectedWalletState = await this.resolveConnectedWalletConnectorState({
966
+ connector,
967
+ ethereumProvider,
968
+ solanaWallet,
969
+ usePrimaryProxy: true
788
970
  });
789
- this.cacheWallet(data.connector);
790
- this.status = constants.CONNECTOR_STATUS.CONNECTED;
791
- loglevel.log.debug("connected", this.status, this.connectedConnectorName);
792
- this.connectToPlugins(_objectSpread(_objectSpread({}, data), {}, {
793
- connector: data.connector
794
- }));
795
- this.emit(constants.CONNECTOR_EVENTS.CONNECTED, _objectSpread(_objectSpread({}, data), {}, {
796
- loginMode: this.loginMode
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.connectedConnectorName === cachedConnector) {
807
- this.clearCache();
1029
+ if (this.primaryConnectorName === cachedConnector) {
1030
+ await this.clearCache();
808
1031
  }
809
- loglevel.log.debug("disconnected", this.status, this.connectedConnectorName);
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
- connectedConnectorName: null
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.connectedConnectorName);
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.connectedConnectorName);
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.connectedConnector;
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.connectedConnector.name,
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.connectedConnectorName);
1107
+ loglevel.log.debug("authorizing", this.status, this.primaryConnectorName);
868
1108
  });
869
- connector.on(constants.CONNECTOR_EVENTS.AUTHORIZED, data => {
870
- this.status = constants.CONNECTOR_STATUS.AUTHORIZED;
871
- this.setState({
872
- idToken: data.identityTokenInfo.idToken
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
- this.emit(constants.CONNECTOR_EVENTS.AUTHORIZED, data);
875
- loglevel.log.debug("authorized", this.status, this.connectedConnectorName);
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$currentChain5;
1132
+ var _this$currentChain3;
883
1133
  let autoConnect = this.cachedConnector === connector.name;
884
- if (autoConnect && (_this$currentChain5 = this.currentChain) !== null && _this$currentChain5 !== void 0 && _this$currentChain5.chainNamespace) {
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
- cacheWallet(walletName) {
903
- this.setState({
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$currentChain6;
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$currentChain6 = this.currentChain) === null || _this$currentChain6 === void 0 ? void 0 : _this$currentChain6.chainNamespace)) return;
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
- setState(newState) {
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.setItem(constants$1.WEB3AUTH_STATE_STORAGE_KEY, JSON.stringify(this.state));
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.getItem(constants$1.WEB3AUTH_STATE_STORAGE_KEY);
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
- if (this.coreOptions.ssr || this.coreOptions.storageType === "cookies") return cookie.cookieStorage({
951
- expiry: this.coreOptions.sessionTime
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 (this.coreOptions.storageType === "session" && utils$1.storageAvailable("sessionStorage")) return window.sessionStorage;
954
- if (this.coreOptions.storageType === "local" && utils$1.storageAvailable("localStorage")) return window.localStorage;
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