@web3auth/no-modal 10.0.0-alpha.2 → 10.0.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/dist/lib.cjs/base/chain/config.js +2 -1
  2. package/dist/lib.cjs/base/connector/constants.js +5 -0
  3. package/dist/lib.cjs/base/utils.js +3 -2
  4. package/dist/lib.cjs/base/wallet/index.js +2 -1
  5. package/dist/lib.cjs/connectors/auth-connector/authConnector.js +67 -19
  6. package/dist/lib.cjs/connectors/injected-solana-connector/walletStandardConnector.js +0 -1
  7. package/dist/lib.cjs/connectors/metamask-connector/metamaskConnector.js +197 -0
  8. package/dist/lib.cjs/connectors/utils.js +61 -0
  9. package/dist/lib.cjs/connectors/wallet-connect-v2-connector/WalletConnectV2Provider.js +0 -1
  10. package/dist/lib.cjs/connectors/wallet-connect-v2-connector/config.js +3 -58
  11. package/dist/lib.cjs/connectors/wallet-connect-v2-connector/walletConnectV2Connector.js +6 -16
  12. package/dist/lib.cjs/index.js +1 -2
  13. package/dist/lib.cjs/noModal.js +119 -29
  14. package/dist/lib.cjs/plugins/wallet-services-plugin/plugin.js +1 -1
  15. package/dist/lib.cjs/providers/account-abstraction-provider/providers/AccountAbstractionProvider.js +18 -12
  16. package/dist/lib.cjs/providers/solana-provider/rpc/solanaRpcMiddlewares.js +1 -1
  17. package/dist/lib.cjs/types/base/chain/IChainInterface.d.ts +3 -45
  18. package/dist/lib.cjs/types/base/connector/constants.d.ts +4 -0
  19. package/dist/lib.cjs/types/base/connector/interfaces.d.ts +7 -3
  20. package/dist/lib.cjs/types/base/core/IWeb3Auth.d.ts +10 -4
  21. package/dist/lib.cjs/types/base/interfaces.d.ts +66 -9
  22. package/dist/lib.cjs/types/base/utils.d.ts +2 -2
  23. package/dist/lib.cjs/types/base/wallet/index.d.ts +2 -0
  24. package/dist/lib.cjs/types/connectors/auth-connector/authConnector.d.ts +5 -2
  25. package/dist/lib.cjs/types/connectors/auth-connector/interface.d.ts +4 -2
  26. package/dist/lib.cjs/types/connectors/metamask-connector/index.d.ts +1 -0
  27. package/dist/lib.cjs/types/connectors/metamask-connector/metamaskConnector.d.ts +6 -0
  28. package/dist/lib.cjs/types/connectors/utils.d.ts +8 -0
  29. package/dist/lib.cjs/types/noModal.d.ts +5 -3
  30. package/dist/lib.cjs/types/providers/account-abstraction-provider/providers/AccountAbstractionProvider.d.ts +4 -5
  31. package/dist/lib.cjs/types/providers/solana-provider/providers/index.d.ts +0 -1
  32. package/dist/lib.esm/base/chain/config.js +2 -1
  33. package/dist/lib.esm/base/connector/constants.js +5 -1
  34. package/dist/lib.esm/base/utils.js +3 -2
  35. package/dist/lib.esm/base/wallet/index.js +2 -1
  36. package/dist/lib.esm/connectors/auth-connector/authConnector.js +67 -19
  37. package/dist/lib.esm/connectors/injected-solana-connector/walletStandardConnector.js +0 -1
  38. package/dist/lib.esm/connectors/metamask-connector/metamaskConnector.js +195 -0
  39. package/dist/lib.esm/connectors/utils.js +58 -0
  40. package/dist/lib.esm/connectors/wallet-connect-v2-connector/WalletConnectV2Provider.js +1 -2
  41. package/dist/lib.esm/connectors/wallet-connect-v2-connector/config.js +1 -56
  42. package/dist/lib.esm/connectors/wallet-connect-v2-connector/walletConnectV2Connector.js +6 -16
  43. package/dist/lib.esm/connectors/wallet-connect-v2-connector/walletConnectV2Utils.js +1 -1
  44. package/dist/lib.esm/index.js +1 -2
  45. package/dist/lib.esm/noModal.js +121 -31
  46. package/dist/lib.esm/plugins/wallet-services-plugin/plugin.js +1 -1
  47. package/dist/lib.esm/providers/account-abstraction-provider/providers/AccountAbstractionProvider.js +18 -12
  48. package/dist/lib.esm/providers/solana-provider/rpc/solanaRpcMiddlewares.js +1 -1
  49. package/dist/noModal.umd.min.js +1 -1
  50. package/package.json +5 -4
  51. package/dist/lib.cjs/connectors/auth-connector/config/authConnectionConfig.js +0 -216
  52. package/dist/lib.cjs/connectors/auth-connector/config/config-build.js +0 -54
  53. package/dist/lib.cjs/connectors/auth-connector/config/config-env.js +0 -361
  54. package/dist/lib.cjs/providers/solana-provider/providers/privateKeyProvider/solanaPrivateKeyProvider.js +0 -161
  55. package/dist/lib.cjs/providers/solana-provider/providers/privateKeyProvider/solanaPrivateKeyUtils.js +0 -104
  56. package/dist/lib.cjs/types/connectors/auth-connector/config/authConnectionConfig.d.ts +0 -2
  57. package/dist/lib.cjs/types/connectors/auth-connector/config/config-build.d.ts +0 -18
  58. package/dist/lib.cjs/types/connectors/auth-connector/config/config-env.d.ts +0 -60
  59. package/dist/lib.cjs/types/providers/solana-provider/providers/privateKeyProvider/index.d.ts +0 -1
  60. package/dist/lib.cjs/types/providers/solana-provider/providers/privateKeyProvider/solanaPrivateKeyProvider.d.ts +0 -30
  61. package/dist/lib.cjs/types/providers/solana-provider/providers/privateKeyProvider/solanaPrivateKeyUtils.d.ts +0 -7
  62. package/dist/lib.esm/connectors/auth-connector/config/authConnectionConfig.js +0 -214
  63. package/dist/lib.esm/connectors/auth-connector/config/config-build.js +0 -48
  64. package/dist/lib.esm/connectors/auth-connector/config/config-env.js +0 -359
  65. package/dist/lib.esm/providers/solana-provider/providers/privateKeyProvider/solanaPrivateKeyProvider.js +0 -159
  66. package/dist/lib.esm/providers/solana-provider/providers/privateKeyProvider/solanaPrivateKeyUtils.js +0 -102
@@ -70,8 +70,7 @@ class WalletConnectV2Connector extends BaseConnector {
70
70
  super.checkInitializationRequirements({
71
71
  chainConfig
72
72
  });
73
- // use a global wc project id if not provided
74
- const projectId = ((_this$connectorOption6 = this.connectorOptions.connectorSettings) === null || _this$connectorOption6 === void 0 || (_this$connectorOption6 = _this$connectorOption6.walletConnectInitOptions) === null || _this$connectorOption6 === void 0 ? void 0 : _this$connectorOption6.projectId) || "d3c63f19f9582f8ba48e982057eb096b";
73
+ const projectId = (_this$connectorOption6 = this.connectorOptions.connectorSettings) === null || _this$connectorOption6 === void 0 || (_this$connectorOption6 = _this$connectorOption6.walletConnectInitOptions) === null || _this$connectorOption6 === void 0 ? void 0 : _this$connectorOption6.projectId;
75
74
  const wc2Settings = await getWalletConnectV2Settings(this.coreOptions.chains, projectId);
76
75
  if (!this.connectorOptions.loginSettings || Object.keys(this.connectorOptions.loginSettings).length === 0) {
77
76
  this.connectorOptions.loginSettings = wc2Settings.loginSettings;
@@ -387,23 +386,14 @@ class WalletConnectV2Connector extends BaseConnector {
387
386
  }
388
387
  const walletConnectV2Connector = params => {
389
388
  return ({
390
- projectConfig,
391
- coreOptions
389
+ coreOptions,
390
+ projectConfig
392
391
  }) => {
393
- let {
394
- projectId
395
- } = (params === null || params === void 0 ? void 0 : params.walletConnectInitOptions) || {};
396
- // use project config if projectId is not set
397
- if (projectConfig) {
398
- const {
399
- wallet_connect_enabled: walletConnectEnabled,
400
- wallet_connect_project_id: walletConnectProjectId
401
- } = projectConfig;
402
- if (walletConnectEnabled && walletConnectProjectId && !projectId) projectId = walletConnectProjectId;
403
- }
392
+ var _params$walletConnect;
393
+ const projectId = (params === null || params === void 0 || (_params$walletConnect = params.walletConnectInitOptions) === null || _params$walletConnect === void 0 ? void 0 : _params$walletConnect.projectId) || (projectConfig === null || projectConfig === void 0 ? void 0 : projectConfig.walletConnectProjectId);
404
394
  const connectorSettings = _objectSpread(_objectSpread({}, params), {}, {
405
395
  walletConnectInitOptions: _objectSpread(_objectSpread({}, params === null || params === void 0 ? void 0 : params.walletConnectInitOptions), {}, {
406
- projectId
396
+ projectId: projectId
407
397
  })
408
398
  });
409
399
  return new WalletConnectV2Connector({
@@ -2,7 +2,7 @@ import _objectSpread from '@babel/runtime/helpers/objectSpread2';
2
2
  import { bs58 } from '@toruslabs/bs58';
3
3
  import { getAccountsFromNamespaces, parseAccountId } from '@walletconnect/utils';
4
4
  import { providerErrors, rpcErrors } from '@web3auth/auth';
5
- import { SOLANA_METHOD_TYPES, EVM_METHOD_TYPES } from '@web3auth/ws-embed';
5
+ import { EVM_METHOD_TYPES, SOLANA_METHOD_TYPES } from '@web3auth/ws-embed';
6
6
  import { WalletLoginError } from '../../base/errors/index.js';
7
7
  import '@toruslabs/base-controllers';
8
8
  import '@babel/runtime/helpers/defineProperty';
@@ -2,7 +2,7 @@ export { getChainConfig, getEvmChainConfig, getSolanaChainConfig, getXrplChainCo
2
2
  export { CONNECTOR_NAMESPACES } from './base/chain/IChainInterface.js';
3
3
  export { Web3AuthContextKey } from './base/composables/index.js';
4
4
  export { BaseConnector } from './base/connector/baseConnector.js';
5
- export { CONNECTOR_CATEGORY, CONNECTOR_EVENTS, CONNECTOR_STATUS } from './base/connector/constants.js';
5
+ export { CONNECTOR_CATEGORY, CONNECTOR_EVENTS, CONNECTOR_STATUS, SMART_ACCOUNT_WALLET_SCOPE } from './base/connector/constants.js';
6
6
  export { AUTH_CONNECTION, UX_MODE, WEB3AUTH_NETWORK, getED25519Key } from '@web3auth/auth';
7
7
  export { checkIfTokenIsExpired, clearToken, getSavedToken, saveToken, storageAvailable } from './base/connector/utils.js';
8
8
  export { WalletInitializationError, WalletLoginError, WalletOperationsError, WalletProviderError, Web3AuthError, serializeError } from './base/errors/index.js';
@@ -42,7 +42,6 @@ export { createEthChainIdMiddleware, createEthJsonRpcClient, createEthProviderCo
42
42
  export { createWalletMiddleware } from './providers/ethereum-provider/rpc/walletMidddleware.js';
43
43
  export { getSolanaChainByChainConfig } from './providers/solana-provider/providers/injectedProviders/utils.js';
44
44
  export { WalletStandardProvider } from './providers/solana-provider/providers/injectedProviders/walletStandardProvider.js';
45
- export { SolanaPrivateKeyProvider } from './providers/solana-provider/providers/privateKeyProvider/solanaPrivateKeyProvider.js';
46
45
  export { createConfigMiddleware, createSolanaChainIdMiddleware, createSolanaJsonRpcClient, createSolanaProviderConfigMiddleware } from './providers/solana-provider/rpc/JrpcClient.js';
47
46
  export { createGenericJRPCMiddleware, createGetAccountsMiddleware, createGetPublicKeyMiddleware, createRequestAccountsMiddleware, createSolanaAccountMiddleware, createSolanaChainSwitchMiddleware, createSolanaMiddleware } from './providers/solana-provider/rpc/solanaRpcMiddlewares.js';
48
47
  export { SolanaWallet } from './providers/solana-provider/solanaWallet.js';
@@ -1,22 +1,25 @@
1
+ import _objectWithoutProperties from '@babel/runtime/helpers/objectWithoutProperties';
1
2
  import _objectSpread from '@babel/runtime/helpers/objectSpread2';
2
3
  import _defineProperty from '@babel/runtime/helpers/defineProperty';
3
4
  import { SafeEventEmitter } from '@web3auth/auth';
5
+ import deepmerge from 'deepmerge';
4
6
  import { authConnector } from './connectors/auth-connector/authConnector.js';
5
- import { getChainConfig } from './base/chain/config.js';
6
- import { CONNECTOR_NAMESPACES } from './base/chain/IChainInterface.js';
7
7
  import { WalletInitializationError, WalletLoginError } from './base/errors/index.js';
8
+ import { CONNECTOR_NAMESPACES } from './base/chain/IChainInterface.js';
8
9
  import { WALLET_CONNECTORS } from './base/wallet/index.js';
9
- import { CONNECTOR_STATUS, CONNECTOR_EVENTS } from './base/connector/constants.js';
10
+ import { CONNECTOR_STATUS, CONNECTOR_EVENTS, SMART_ACCOUNT_WALLET_SCOPE } from './base/connector/constants.js';
10
11
  import { storageAvailable } from './base/connector/utils.js';
11
12
  import { log } from './base/loglevel.js';
12
13
  import './base/plugin/errors.js';
13
14
  import { PLUGIN_STATUS, PLUGIN_NAMESPACES } from './base/plugin/IPlugin.js';
14
- import { fetchProjectConfig } from './base/utils.js';
15
+ import { fetchProjectConfig, isHexStrict } from './base/utils.js';
15
16
  import { CHAIN_NAMESPACES } from '@toruslabs/base-controllers';
16
17
  import './providers/base-provider/utils.js';
17
18
  import { CommonJRPCProvider } from './providers/base-provider/CommonJRPCProvider.js';
18
19
  import './providers/base-provider/commonPrivateKeyProvider.js';
20
+ import { metaMaskConnector } from './connectors/metamask-connector/metamaskConnector.js';
19
21
 
22
+ const _excluded = ["walletScope"];
20
23
  const CONNECTOR_CACHE_KEY = "Web3Auth-cachedConnector";
21
24
  const CURRENT_CHAIN_CACHE_KEY = "Web3Auth-currentChain";
22
25
  class Web3AuthNoModal extends SafeEventEmitter {
@@ -33,25 +36,13 @@ class Web3AuthNoModal extends SafeEventEmitter {
33
36
  _defineProperty(this, "storage", "localStorage");
34
37
  if (!options.clientId) throw WalletInitializationError.invalidParams("Please provide a valid clientId in constructor");
35
38
  if (options.enableLogging) log.enableAll();else log.setLevel("error");
36
- // TODO: This is fine. we get chains from project config. we can throw in init instead
37
- if (!options.chains || options.chains.length === 0) {
38
- throw WalletInitializationError.invalidParams("Please provide chains");
39
- }
40
- const {
41
- chains
42
- } = options;
43
- // validate chain namespace of each chain config
44
- for (const chain of chains) {
45
- if (!chain.chainNamespace || !Object.values(CHAIN_NAMESPACES).includes(chain.chainNamespace)) throw WalletInitializationError.invalidParams("Please provide a valid chainNamespace in chains");
46
- }
47
39
  if (options.storageType === "session") this.storage = "sessionStorage";
48
- this.coreOptions = _objectSpread(_objectSpread({}, options), {}, {
49
- chains: chains.map(chain => _objectSpread(_objectSpread({}, getChainConfig(chain === null || chain === void 0 ? void 0 : chain.chainNamespace, chain === null || chain === void 0 ? void 0 : chain.chainId, options.clientId) || {}), chain))
50
- });
51
- this.currentChainId = options.defaultChainId || chains[0].chainId;
40
+ this.coreOptions = options;
41
+ this.currentChainId = options.defaultChainId;
52
42
  }
53
43
  get currentChain() {
54
- return this.coreOptions.chains.find(chain => chain.chainId === this.currentChainId);
44
+ var _this$coreOptions$cha;
45
+ return (_this$coreOptions$cha = this.coreOptions.chains) === null || _this$coreOptions$cha === void 0 ? void 0 : _this$coreOptions$cha.find(chain => chain.chainId === this.currentChainId);
55
46
  }
56
47
  get connected() {
57
48
  return Boolean(this.connectedConnector);
@@ -70,7 +61,6 @@ class Web3AuthNoModal extends SafeEventEmitter {
70
61
  throw new Error("Not implemented");
71
62
  }
72
63
  async init() {
73
- this.initCachedConnectorAndChainId();
74
64
  // get project config
75
65
  let projectConfig;
76
66
  try {
@@ -80,6 +70,10 @@ class Web3AuthNoModal extends SafeEventEmitter {
80
70
  log.error("Failed to fetch project configurations", e);
81
71
  throw WalletInitializationError.notReady("failed to fetch project configurations", e);
82
72
  }
73
+ // init config
74
+ this.initAccountAbstractionConfig(projectConfig);
75
+ this.initChainsConfig(projectConfig);
76
+ this.initCachedConnectorAndChainId();
83
77
  // setup common JRPC provider
84
78
  await this.setupCommonJRPCProvider();
85
79
  // initialize connectors
@@ -116,7 +110,8 @@ class Web3AuthNoModal extends SafeEventEmitter {
116
110
  this.cachedConnector = null;
117
111
  }
118
112
  async switchChain(params) {
119
- if (params.chainId === this.currentChain.chainId) return;
113
+ var _this$currentChain2;
114
+ if (params.chainId === ((_this$currentChain2 = this.currentChain) === null || _this$currentChain2 === void 0 ? void 0 : _this$currentChain2.chainId)) return;
120
115
  const newChainConfig = this.coreOptions.chains.find(x => x.chainId === params.chainId);
121
116
  if (!newChainConfig) throw WalletInitializationError.invalidParams("Invalid chainId");
122
117
  if (this.status === CONNECTOR_STATUS.CONNECTED && this.connectedConnector) {
@@ -182,6 +177,89 @@ class Web3AuthNoModal extends SafeEventEmitter {
182
177
  getPlugin(name) {
183
178
  return this.plugins[name] || null;
184
179
  }
180
+ initChainsConfig(projectConfig) {
181
+ // merge chains from project config with core options, core options chains will take precedence over project config chains
182
+ const chainMap = new Map();
183
+ const allChains = [...(projectConfig.chains || []), ...(this.coreOptions.chains || [])];
184
+ for (const chain of allChains) {
185
+ const existingChain = chainMap.get(chain.chainId);
186
+ if (!existingChain) chainMap.set(chain.chainId, chain);else chainMap.set(chain.chainId, _objectSpread(_objectSpread({}, existingChain), chain));
187
+ }
188
+ this.coreOptions.chains = Array.from(chainMap.values());
189
+ // validate chains and namespaces
190
+ if (this.coreOptions.chains.length === 0) {
191
+ log.error("chain info not found. Please configure chains on dashboard at https://dashboard.web3auth.io");
192
+ throw WalletInitializationError.invalidParams("Please configure chains on dashboard at https://dashboard.web3auth.io");
193
+ }
194
+ const validChainNamespaces = new Set(Object.values(CHAIN_NAMESPACES));
195
+ for (const chain of this.coreOptions.chains) {
196
+ if (!chain.chainNamespace || !validChainNamespaces.has(chain.chainNamespace)) {
197
+ log.error(`Please provide a valid chainNamespace in chains for chain ${chain.chainId}`);
198
+ throw WalletInitializationError.invalidParams(`Please provide a valid chainNamespace in chains for chain ${chain.chainId}`);
199
+ }
200
+ if (chain.chainNamespace !== CHAIN_NAMESPACES.OTHER && !isHexStrict(chain.chainId)) {
201
+ log.error(`Please provide a valid chainId in chains for chain ${chain.chainId}`);
202
+ throw WalletInitializationError.invalidParams(`Please provide a valid chainId as hex string in chains for chain ${chain.chainId}`);
203
+ }
204
+ if (chain.chainNamespace !== CHAIN_NAMESPACES.OTHER) {
205
+ try {
206
+ new URL(chain.rpcTarget);
207
+ } catch (error) {
208
+ // TODO: add support for chain.wsTarget
209
+ log.error(`Please provide a valid rpcTarget in chains for chain ${chain.chainId}`, error);
210
+ throw WalletInitializationError.invalidParams(`Please provide a valid rpcTarget in chains for chain ${chain.chainId}`);
211
+ }
212
+ }
213
+ }
214
+ // if AA is enabled, filter out chains that are not AA-supported
215
+ if (this.coreOptions.accountAbstractionConfig) {
216
+ // write a for loop over accountAbstractionConfig.chains and check if the chainId is valid
217
+ for (const chain of this.coreOptions.accountAbstractionConfig.chains) {
218
+ if (!isHexStrict(chain.chainId)) {
219
+ log.error(`Please provide a valid chainId in accountAbstractionConfig.chains for chain ${chain.chainId}`);
220
+ throw WalletInitializationError.invalidParams(`Please provide a valid chainId in accountAbstractionConfig.chains for chain ${chain.chainId}`);
221
+ }
222
+ try {
223
+ var _chain$bundlerConfig;
224
+ new URL((_chain$bundlerConfig = chain.bundlerConfig) === null || _chain$bundlerConfig === void 0 ? void 0 : _chain$bundlerConfig.url);
225
+ } catch (error) {
226
+ log.error(`Please provide a valid bundlerConfig.url in accountAbstractionConfig.chains for chain ${chain.chainId}`, error);
227
+ throw WalletInitializationError.invalidParams(`Please provide a valid bundlerConfig.url in accountAbstractionConfig.chains for chain ${chain.chainId}`);
228
+ }
229
+ if (!chainMap.has(chain.chainId)) {
230
+ log.error(`Please provide chain config for AA chain in accountAbstractionConfig.chains for chain ${chain.chainId}`);
231
+ throw WalletInitializationError.invalidParams(`Please provide chain config for AA chain in accountAbstractionConfig.chains for chain ${chain.chainId}`);
232
+ }
233
+ }
234
+ // const aaSupportedChainIds = new Set(
235
+ // this.coreOptions.accountAbstractionConfig?.chains
236
+ // ?.filter((chain) => chain.chainId && chain.bundlerConfig?.url)
237
+ // .map((chain) => chain.chainId) || []
238
+ // );
239
+ // this.coreOptions.chains = this.coreOptions.chains.filter(
240
+ // (chain) => chain.chainNamespace !== CHAIN_NAMESPACES.EIP155 || aaSupportedChainIds.has(chain.chainId)
241
+ // );
242
+ // if (this.coreOptions.chains.length === 0) {
243
+ // log.error("Account Abstraction is enabled but no supported chains found");
244
+ // throw WalletInitializationError.invalidParams("Account Abstraction is enabled but no supported chains found");
245
+ // }
246
+ }
247
+ }
248
+ initAccountAbstractionConfig(projectConfig) {
249
+ const isAAEnabled = Boolean(this.coreOptions.accountAbstractionConfig || (projectConfig === null || projectConfig === void 0 ? void 0 : projectConfig.smartAccounts));
250
+ if (!isAAEnabled) return;
251
+ // merge project config with core options, code config take precedence over project config
252
+ const _ref = (projectConfig === null || projectConfig === void 0 ? void 0 : projectConfig.smartAccounts) || {},
253
+ {
254
+ walletScope
255
+ } = _ref,
256
+ configWithoutWalletScope = _objectWithoutProperties(_ref, _excluded);
257
+ this.coreOptions.accountAbstractionConfig = deepmerge(configWithoutWalletScope || {}, this.coreOptions.accountAbstractionConfig || {});
258
+ // determine if we should use AA with external wallet
259
+ if (this.coreOptions.useAAWithExternalWallet === undefined) {
260
+ this.coreOptions.useAAWithExternalWallet = walletScope === SMART_ACCOUNT_WALLET_SCOPE.ALL;
261
+ }
262
+ }
185
263
  initCachedConnectorAndChainId() {
186
264
  this.cachedConnector = storageAvailable(this.storage) ? window[this.storage].getItem(CONNECTOR_CACHE_KEY) : null;
187
265
  // init chainId using cached chainId if it exists and is valid, otherwise use the defaultChainId or the first chain
@@ -220,7 +298,8 @@ class Web3AuthNoModal extends SafeEventEmitter {
220
298
  coreOptions: this.coreOptions
221
299
  };
222
300
  // add injected connectors
223
- const isMipdEnabled = (_this$coreOptions$mul = this.coreOptions.multiInjectedProviderDiscovery) !== null && _this$coreOptions$mul !== void 0 ? _this$coreOptions$mul : true;
301
+ const isExternalWalletEnabled = Boolean(projectConfig.externalWalletAuth);
302
+ const isMipdEnabled = isExternalWalletEnabled && ((_this$coreOptions$mul = this.coreOptions.multiInjectedProviderDiscovery) !== null && _this$coreOptions$mul !== void 0 ? _this$coreOptions$mul : true);
224
303
  const chainNamespaces = new Set(this.coreOptions.chains.map(chain => chain.chainNamespace));
225
304
  if (isMipdEnabled) {
226
305
  // Solana chains
@@ -253,8 +332,10 @@ class Web3AuthNoModal extends SafeEventEmitter {
253
332
  connectorFns.push(...evmMipd.getProviders().map(injectedEvmConnector));
254
333
  }
255
334
  }
256
- // add WalletConnectV2 connector if enabled
257
- if (projectConfig.wallet_connect_enabled && projectConfig.wallet_connect_project_id && (chainNamespaces.has(CHAIN_NAMESPACES.SOLANA) || chainNamespaces.has(CHAIN_NAMESPACES.EIP155))) {
335
+ // it's safe to add it here as if there is a MetaMask injected provider, this won't override it
336
+ connectorFns.push(metaMaskConnector());
337
+ // add WalletConnectV2 connector if external wallets are enabled
338
+ if (isExternalWalletEnabled && (chainNamespaces.has(CHAIN_NAMESPACES.SOLANA) || chainNamespaces.has(CHAIN_NAMESPACES.EIP155))) {
258
339
  const {
259
340
  walletConnectV2Connector
260
341
  } = await import('./connectors/wallet-connect-v2-connector/index.js');
@@ -289,16 +370,24 @@ class Web3AuthNoModal extends SafeEventEmitter {
289
370
  }
290
371
  subscribeToConnectorEvents(connector) {
291
372
  connector.on(CONNECTOR_EVENTS.CONNECTED, async data => {
373
+ var _this$currentChain3, _accountAbstractionCo;
292
374
  if (!this.commonJRPCProvider) throw WalletInitializationError.notFound(`CommonJrpcProvider not found`);
293
375
  const {
294
376
  provider
295
377
  } = data;
296
378
  let finalProvider = provider.provider || provider;
297
- // setup aa provider for external wallets on EVM chains, for in app wallet, it uses WS provider which already supports AA
379
+ // setup AA provider for external wallets on EVM chains, no need for app wallet as it uses WS provider which already supports AA
298
380
  const {
299
381
  accountAbstractionConfig
300
382
  } = this.coreOptions;
301
- if (this.currentChain.chainNamespace === CHAIN_NAMESPACES.EIP155 && accountAbstractionConfig && data.connector !== WALLET_CONNECTORS.AUTH && this.coreOptions.useAAWithExternalWallet) {
383
+ const doesAASupportCurrentChain = ((_this$currentChain3 = this.currentChain) === null || _this$currentChain3 === void 0 ? void 0 : _this$currentChain3.chainNamespace) === CHAIN_NAMESPACES.EIP155 && (accountAbstractionConfig === null || accountAbstractionConfig === void 0 || (_accountAbstractionCo = accountAbstractionConfig.chains) === null || _accountAbstractionCo === void 0 ? void 0 : _accountAbstractionCo.some(chain => {
384
+ var _this$currentChain4;
385
+ return chain.chainId === ((_this$currentChain4 = this.currentChain) === null || _this$currentChain4 === void 0 ? void 0 : _this$currentChain4.chainId);
386
+ }));
387
+ const isExternalWalletAndAAEnabled = data.connector !== WALLET_CONNECTORS.AUTH && this.coreOptions.useAAWithExternalWallet;
388
+ if (isExternalWalletAndAAEnabled && doesAASupportCurrentChain) {
389
+ var _accountAbstractionCo2;
390
+ const aaChainIds = new Set((accountAbstractionConfig === null || accountAbstractionConfig === void 0 || (_accountAbstractionCo2 = accountAbstractionConfig.chains) === null || _accountAbstractionCo2 === void 0 ? void 0 : _accountAbstractionCo2.map(chain => chain.chainId)) || []);
302
391
  const {
303
392
  accountAbstractionProvider
304
393
  } = await import('./providers/account-abstraction-provider/index.js');
@@ -306,10 +395,9 @@ class Web3AuthNoModal extends SafeEventEmitter {
306
395
  accountAbstractionConfig,
307
396
  provider,
308
397
  chain: this.currentChain,
309
- chains: this.coreOptions.chains
398
+ chains: this.coreOptions.chains.filter(chain => aaChainIds.has(chain.chainId))
310
399
  });
311
400
  finalProvider = aaProvider;
312
- // TODO: when switching chains to Solana or other chains, we need to switch to the non-AA provider
313
401
  }
314
402
  this.commonJRPCProvider.updateProviderEngineProxy(finalProvider);
315
403
  this.connectedConnectorName = data.connector;
@@ -376,8 +464,9 @@ class Web3AuthNoModal extends SafeEventEmitter {
376
464
  * @throws WalletInitializationError If no chain is found for the connector's namespace
377
465
  */
378
466
  getInitialChainIdForConnector(connector) {
467
+ var _initialChain;
379
468
  let initialChain = this.currentChain;
380
- if (initialChain.chainNamespace !== connector.connectorNamespace && connector.connectorNamespace !== CONNECTOR_NAMESPACES.MULTICHAIN) {
469
+ if (((_initialChain = initialChain) === null || _initialChain === void 0 ? void 0 : _initialChain.chainNamespace) !== connector.connectorNamespace && connector.connectorNamespace !== CONNECTOR_NAMESPACES.MULTICHAIN) {
381
470
  initialChain = this.coreOptions.chains.find(x => x.chainNamespace === connector.connectorNamespace);
382
471
  if (!initialChain) throw WalletInitializationError.invalidParams(`No chain found for ${connector.connectorNamespace}`);
383
472
  }
@@ -403,10 +492,11 @@ class Web3AuthNoModal extends SafeEventEmitter {
403
492
  connectToPlugins(data) {
404
493
  Object.values(this.plugins).map(async plugin => {
405
494
  try {
495
+ var _this$currentChain5;
406
496
  // skip if it's not compatible with the connector
407
497
  if (!plugin.SUPPORTED_CONNECTORS.includes("all") && !plugin.SUPPORTED_CONNECTORS.includes(data.connector)) return;
408
498
  // skip if it's not compatible with the current chain
409
- if (plugin.pluginNamespace !== PLUGIN_NAMESPACES.MULTICHAIN && plugin.pluginNamespace !== this.currentChain.chainNamespace) return;
499
+ if (plugin.pluginNamespace !== PLUGIN_NAMESPACES.MULTICHAIN && plugin.pluginNamespace !== ((_this$currentChain5 = this.currentChain) === null || _this$currentChain5 === void 0 ? void 0 : _this$currentChain5.chainNamespace)) return;
410
500
  // skip if it's already connected
411
501
  if (plugin.status === PLUGIN_STATUS.CONNECTED) return;
412
502
  await plugin.initWithWeb3Auth(this, this.coreOptions.uiConfig);
@@ -34,7 +34,7 @@ class WalletServicesPlugin extends SafeEventEmitter {
34
34
  if (!web3auth) throw WalletServicesPluginError.web3authRequired();
35
35
  if (web3auth.provider && !this.SUPPORTED_CONNECTORS.includes(web3auth.connectedConnectorName)) throw WalletServicesPluginError.notInitialized();
36
36
  const currentChainConfig = web3auth.currentChain;
37
- if (![CHAIN_NAMESPACES.EIP155, CHAIN_NAMESPACES.SOLANA].includes(currentChainConfig.chainNamespace)) throw WalletServicesPluginError.unsupportedChainNamespace();
37
+ if (![CHAIN_NAMESPACES.EIP155, CHAIN_NAMESPACES.SOLANA].includes(currentChainConfig === null || currentChainConfig === void 0 ? void 0 : currentChainConfig.chainNamespace)) throw WalletServicesPluginError.unsupportedChainNamespace();
38
38
  // Not connected yet to auth
39
39
  if (web3auth.provider) {
40
40
  this.provider = web3auth.provider;
@@ -64,7 +64,7 @@ class AccountAbstractionProvider extends BaseProvider {
64
64
  });
65
65
  }
66
66
  async setupProvider(eoaProvider) {
67
- var _this$config$bundlerC;
67
+ var _bundlerConfig$transp;
68
68
  const {
69
69
  currentChain
70
70
  } = this;
@@ -72,6 +72,12 @@ class AccountAbstractionProvider extends BaseProvider {
72
72
  chainNamespace
73
73
  } = currentChain;
74
74
  if (chainNamespace !== this.PROVIDER_CHAIN_NAMESPACE) throw WalletInitializationError.incompatibleChainNameSpace("Invalid chain namespace");
75
+ const bundlerAndPaymasterConfig = this.config.smartAccountChainsConfig.find(config => config.chainId === currentChain.chainId);
76
+ if (!bundlerAndPaymasterConfig) throw WalletInitializationError.invalidProviderConfigError(`Bundler and paymaster config not found for chain ${currentChain.chainId}`);
77
+ const {
78
+ bundlerConfig,
79
+ paymasterConfig
80
+ } = bundlerAndPaymasterConfig;
75
81
  const chain = defineChain({
76
82
  id: Number.parseInt(currentChain.chainId, 16),
77
83
  // id in number form
@@ -105,16 +111,16 @@ class AccountAbstractionProvider extends BaseProvider {
105
111
  client: this._publicClient
106
112
  });
107
113
  // setup bundler and paymaster
108
- if (this.config.paymasterConfig) {
109
- var _this$config$paymaste;
110
- this._paymasterClient = createPaymasterClient(_objectSpread(_objectSpread({}, this.config.paymasterConfig), {}, {
111
- transport: (_this$config$paymaste = this.config.paymasterConfig.transport) !== null && _this$config$paymaste !== void 0 ? _this$config$paymaste : http(this.config.paymasterConfig.url)
114
+ if (paymasterConfig) {
115
+ var _paymasterConfig$tran;
116
+ this._paymasterClient = createPaymasterClient(_objectSpread(_objectSpread({}, paymasterConfig), {}, {
117
+ transport: (_paymasterConfig$tran = paymasterConfig.transport) !== null && _paymasterConfig$tran !== void 0 ? _paymasterConfig$tran : http(paymasterConfig.url)
112
118
  }));
113
119
  }
114
- this._bundlerClient = createBundlerClient(_objectSpread(_objectSpread({}, this.config.bundlerConfig), {}, {
120
+ this._bundlerClient = createBundlerClient(_objectSpread(_objectSpread({}, bundlerConfig), {}, {
115
121
  account: this.smartAccount,
116
122
  client: this._publicClient,
117
- transport: (_this$config$bundlerC = this.config.bundlerConfig.transport) !== null && _this$config$bundlerC !== void 0 ? _this$config$bundlerC : http(this.config.bundlerConfig.url),
123
+ transport: (_bundlerConfig$transp = bundlerConfig.transport) !== null && _bundlerConfig$transp !== void 0 ? _bundlerConfig$transp : http(bundlerConfig.url),
118
124
  paymaster: this._paymasterClient
119
125
  }));
120
126
  const providerHandlers = getProviderHandlers({
@@ -175,10 +181,11 @@ const accountAbstractionProvider = async ({
175
181
  let smartAccountInit;
176
182
  const {
177
183
  smartAccountType,
178
- smartAccountConfig,
179
- bundlerConfig,
180
- paymasterConfig
184
+ chains: smartAccountChainsConfig
181
185
  } = accountAbstractionConfig;
186
+ const {
187
+ smartAccountConfig
188
+ } = smartAccountChainsConfig.find(config => config.chainId === chain.chainId) || {};
182
189
  switch (smartAccountType) {
183
190
  case SMART_ACCOUNT.BICONOMY:
184
191
  {
@@ -228,8 +235,7 @@ const accountAbstractionProvider = async ({
228
235
  smartAccountInit,
229
236
  chain,
230
237
  chains,
231
- bundlerConfig,
232
- paymasterConfig
238
+ smartAccountChainsConfig
233
239
  });
234
240
  };
235
241
 
@@ -73,7 +73,7 @@ function createSolanaMiddleware(providerHandlers) {
73
73
  requestAccounts
74
74
  }), createGetAccountsMiddleware({
75
75
  getAccounts
76
- }), createGenericJRPCMiddleware(SOLANA_METHOD_TYPES.SIGN_TRANSACTION, signTransaction), createGenericJRPCMiddleware(SOLANA_METHOD_TYPES.SEND_TRANSACTION, signAndSendTransaction), createGenericJRPCMiddleware(SOLANA_METHOD_TYPES.SIGN_ALL_TRANSACTIONS, signAllTransactions), createGenericJRPCMiddleware(SOLANA_METHOD_TYPES.SIGN_MESSAGE, signMessage), createGenericJRPCMiddleware("solanaPrivateKey", getPrivateKey), createGenericJRPCMiddleware("private_key", getPrivateKey), createGenericJRPCMiddleware("public_key", getPublicKey), createGenericJRPCMiddleware("solanaPublicKey", getPublicKey), createGenericJRPCMiddleware("solanaSecretKey", getSecretKey)]);
76
+ }), createGenericJRPCMiddleware(SOLANA_METHOD_TYPES.SIGN_TRANSACTION, signTransaction), createGenericJRPCMiddleware(SOLANA_METHOD_TYPES.SEND_TRANSACTION, signAndSendTransaction), createGenericJRPCMiddleware(SOLANA_METHOD_TYPES.SIGN_ALL_TRANSACTIONS, signAllTransactions), createGenericJRPCMiddleware(SOLANA_METHOD_TYPES.SIGN_MESSAGE, signMessage), createGenericJRPCMiddleware(SOLANA_METHOD_TYPES.SOLANA_PRIVATE_KEY, getPrivateKey), createGenericJRPCMiddleware(SOLANA_METHOD_TYPES.PRIVATE_KEY, getPrivateKey), createGenericJRPCMiddleware("public_key", getPublicKey), createGenericJRPCMiddleware("solanaPublicKey", getPublicKey), createGenericJRPCMiddleware("solanaSecretKey", getSecretKey)]);
77
77
  }
78
78
  function createSolanaChainSwitchMiddleware({
79
79
  switchSolanaChain