@metamask/connect-evm 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -7,6 +7,16 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.3.0]
11
+
12
+ ### Added
13
+
14
+ - Add `ConnectEvm.status` property which exposes the current `ConnectionStatus` ([#136](https://github.com/MetaMask/connect-monorepo/pull/136))
15
+
16
+ ### Fixed
17
+
18
+ - Fix `eth_chainId` requests not being resolved from local cached state when using the EIP-1193 Provider `request()` method over the `MwpTransport` ([#124](https://github.com/MetaMask/connect-monorepo/pull/124))
19
+
10
20
  ## [0.2.0]
11
21
 
12
22
  ### Added
@@ -70,7 +80,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
70
80
 
71
81
  - Initial release ([#58](https://github.com/MetaMask/connect-monorepo/pull/58))
72
82
 
73
- [Unreleased]: https://github.com/MetaMask/connect-monorepo/compare/@metamask/connect-evm@0.2.0...HEAD
83
+ [Unreleased]: https://github.com/MetaMask/connect-monorepo/compare/@metamask/connect-evm@0.3.0...HEAD
84
+ [0.3.0]: https://github.com/MetaMask/connect-monorepo/compare/@metamask/connect-evm@0.2.0...@metamask/connect-evm@0.3.0
74
85
  [0.2.0]: https://github.com/MetaMask/connect-monorepo/compare/@metamask/connect-evm@0.1.2...@metamask/connect-evm@0.2.0
75
86
  [0.1.2]: https://github.com/MetaMask/connect-monorepo/compare/@metamask/connect-evm@0.1.1...@metamask/connect-evm@0.1.2
76
87
  [0.1.1]: https://github.com/MetaMask/connect-monorepo/compare/@metamask/connect-evm@0.1.0...@metamask/connect-evm@0.1.1
@@ -77,10 +77,12 @@ var CONNECT_METHODS = [
77
77
  "eth_requestAccounts"
78
78
  ];
79
79
  var ACCOUNTS_METHODS = ["eth_accounts", "eth_coinbase"];
80
+ var CHAIN_METHODS = ["eth_chainId"];
80
81
  var INTERCEPTABLE_METHODS = [
81
82
  ...ACCOUNTS_METHODS,
82
83
  ...IGNORED_METHODS,
83
84
  ...CONNECT_METHODS,
85
+ ...CHAIN_METHODS,
84
86
  // These have bespoke handlers
85
87
  "wallet_revokePermissions",
86
88
  "wallet_switchEthereumChain",
@@ -286,6 +288,9 @@ function isAddChainRequest(req) {
286
288
  function isAccountsRequest(req) {
287
289
  return req.method === "eth_accounts" || req.method === "eth_coinbase";
288
290
  }
291
+ function isChainIdRequest(req) {
292
+ return req.method === "eth_chainId";
293
+ }
289
294
  function validSupportedChainsUrls(record, recordName) {
290
295
  const invalidUrls = [];
291
296
  for (const [key, url] of Object.entries(record)) {
@@ -607,6 +612,14 @@ var MetamaskConnectEVM = class {
607
612
  get selectedChainId() {
608
613
  return __privateGet(this, _provider).selectedChainId;
609
614
  }
615
+ /**
616
+ * Gets the current connection status
617
+ *
618
+ * @returns The current connection status
619
+ */
620
+ get status() {
621
+ return __privateGet(this, _core2).status;
622
+ }
610
623
  };
611
624
  _core2 = new WeakMap();
612
625
  _provider = new WeakMap();
@@ -755,6 +768,9 @@ requestInterceptor_fn = function(request) {
755
768
  yield __privateMethod(this, _MetamaskConnectEVM_instances, trackWalletActionSucceeded_fn).call(this, method, scope, params);
756
769
  return __privateGet(this, _provider).accounts;
757
770
  }
771
+ if (isChainIdRequest(request)) {
772
+ return __privateGet(this, _provider).selectedChainId;
773
+ }
758
774
  logger("Request not intercepted, forwarding to default handler", request);
759
775
  return Promise.resolve();
760
776
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/index.ts","../../../src/connect.ts","../../../src/constants.ts","../../../src/logger.ts","../../../src/provider.ts","../../../src/utils/caip.ts","../../../src/utils/type-guards.ts"],"sourcesContent":["export { getInfuraRpcUrls } from '@metamask/connect-multichain';\nexport { createEVMClient, type MetamaskConnectEVM } from './connect';\nexport type { EIP1193Provider } from './provider';\n\nexport type * from './types';\n","import { analytics } from '@metamask/analytics';\nimport type { Caip25CaveatValue } from '@metamask/chain-agnostic-permission';\nimport type {\n MultichainCore,\n MultichainOptions,\n Scope,\n SessionData,\n} from '@metamask/connect-multichain';\nimport {\n createMultichainClient,\n getWalletActionAnalyticsProperties,\n isRejectionError,\n TransportType,\n} from '@metamask/connect-multichain';\nimport {\n numberToHex,\n hexToNumber,\n isHexString as isHex,\n} from '@metamask/utils';\n\nimport { IGNORED_METHODS } from './constants';\nimport { enableDebug, logger } from './logger';\nimport { EIP1193Provider } from './provider';\nimport type {\n AddEthereumChainParameter,\n Address,\n CaipAccountId,\n EventHandlers,\n Hex,\n MetamaskConnectEVMOptions,\n ProviderRequest,\n ProviderRequestInterceptor,\n} from './types';\nimport { getPermittedEthChainIds } from './utils/caip';\nimport {\n isAccountsRequest,\n isAddChainRequest,\n isConnectRequest,\n isSwitchChainRequest,\n validSupportedChainsUrls,\n} from './utils/type-guards';\n\nconst DEFAULT_CHAIN_ID = 1;\nconst CHAIN_STORE_KEY = 'cache_eth_chainId';\n\n/** The options for the connect method */\ntype ConnectOptions = {\n /** The account to connect to */\n account?: string | undefined;\n /** Whether to force a request regardless of an existing session */\n forceRequest?: boolean;\n /** All available chain IDs in the dapp */\n chainIds: number[];\n};\n\n/**\n * The MetamaskConnectEVM class provides an EIP-1193 compatible interface for connecting\n * to MetaMask and interacting with Ethereum Virtual Machine (EVM) networks.\n *\n * This class serves as a modern replacement for MetaMask SDK V1, offering enhanced\n * functionality and cross-platform compatibility. It wraps the Multichain SDK to provide\n * a simplified, EIP-1193 compliant API for dapp developers.\n *\n * Key features:\n * - EIP-1193 provider interface for seamless integration with existing dapp code\n * - Automatic session recovery when reloading or opening in new tabs\n * - Chain switching with automatic chain addition if not configured\n * - Event-driven architecture with support for connect, disconnect, accountsChanged, and chainChanged events\n * - Cross-platform support for browser extensions and mobile applications\n * - Built-in handling of common Ethereum methods (eth_accounts, wallet_switchEthereumChain, etc.)\n *\n * @example\n * ```typescript\n * const sdk = await createEVMClient({\n * dapp: { name: 'My DApp', url: 'https://mydapp.com' }\n * });\n *\n * await sdk.connect({ chainId: 1 });\n * const provider = await sdk.getProvider();\n * const accounts = await provider.request({ method: 'eth_accounts' });\n * ```\n */\nexport class MetamaskConnectEVM {\n /** The core instance of the Multichain SDK */\n readonly #core: MultichainCore;\n\n /** An instance of the EIP-1193 provider interface */\n readonly #provider: EIP1193Provider;\n\n /** The session scopes currently permitted */\n #sessionScopes: SessionData['sessionScopes'] = {};\n\n /** Optional event handlers for the EIP-1193 provider events. */\n readonly #eventHandlers?: Partial<EventHandlers> | undefined;\n\n /** The handler for the wallet_sessionChanged event */\n readonly #sessionChangedHandler: (session?: SessionData) => void;\n\n /** The handler for the display_uri event */\n readonly #displayUriHandler: (uri: string) => void;\n\n /** The clean-up function for the notification handler */\n #removeNotificationHandler?: () => void;\n\n /**\n * Creates a new MetamaskConnectEVM instance.\n *\n * @param options - The options for the MetamaskConnectEVM instance\n * @param options.core - The core instance of the Multichain SDK\n * @param options.eventHandlers - Optional event handlers for EIP-1193 provider events\n */\n constructor({ core, eventHandlers }: MetamaskConnectEVMOptions) {\n this.#core = core;\n\n this.#provider = new EIP1193Provider(\n core,\n this.#requestInterceptor.bind(this),\n );\n\n this.#eventHandlers = eventHandlers;\n\n /**\n * Handles the wallet_sessionChanged event.\n * Updates the internal connection state with the new session data.\n *\n * @param session - The session data\n */\n this.#sessionChangedHandler = (session): void => {\n logger('event: wallet_sessionChanged', session);\n this.#sessionScopes = session?.sessionScopes ?? {};\n };\n this.#core.on(\n 'wallet_sessionChanged',\n this.#sessionChangedHandler.bind(this),\n );\n\n /**\n * Handles the display_uri event.\n * Forwards the QR code URI to the provider for custom UI implementations.\n */\n this.#displayUriHandler = this.#onDisplayUri.bind(this);\n this.#core.on('display_uri', this.#displayUriHandler);\n\n // Attempt to set the permitted accounts if there's a valid previous session.\n // TODO (wenfix): does it make sense to catch here?\n this.#attemptSessionRecovery().catch((error) => {\n console.error('Error attempting session recovery', error);\n });\n\n logger('Connect/EVM constructor completed');\n }\n\n /**\n * Gets the core options for analytics checks.\n *\n * @returns The multichain options from the core instance\n */\n #getCoreOptions(): MultichainOptions {\n return (this.#core as any).options as MultichainOptions;\n }\n\n /**\n * Creates invoke options for analytics tracking.\n *\n * @param method - The RPC method name\n * @param scope - The CAIP chain ID scope\n * @param params - The method parameters\n * @returns Invoke options object for analytics\n */\n #createInvokeOptions(\n method: string,\n scope: Scope,\n params: unknown[],\n ): {\n scope: Scope;\n request: { method: string; params: unknown[] };\n } {\n return {\n scope,\n request: { method, params },\n };\n }\n\n /**\n * Tracks a wallet action requested event.\n *\n * @param method - The RPC method name\n * @param scope - The CAIP chain ID scope\n * @param params - The method parameters\n */\n async #trackWalletActionRequested(\n method: string,\n scope: Scope,\n params: unknown[],\n ): Promise<void> {\n const coreOptions = this.#getCoreOptions();\n try {\n const invokeOptions = this.#createInvokeOptions(method, scope, params);\n const props = await getWalletActionAnalyticsProperties(\n coreOptions,\n this.#core.storage,\n invokeOptions,\n );\n analytics.track('mmconnect_wallet_action_requested', props);\n } catch (error) {\n logger('Error tracking mmconnect_wallet_action_requested event', error);\n }\n }\n\n /**\n * Tracks a wallet action succeeded event.\n *\n * @param method - The RPC method name\n * @param scope - The CAIP chain ID scope\n * @param params - The method parameters\n */\n async #trackWalletActionSucceeded(\n method: string,\n scope: Scope,\n params: unknown[],\n ): Promise<void> {\n const coreOptions = this.#getCoreOptions();\n try {\n const invokeOptions = this.#createInvokeOptions(method, scope, params);\n const props = await getWalletActionAnalyticsProperties(\n coreOptions,\n this.#core.storage,\n invokeOptions,\n );\n analytics.track('mmconnect_wallet_action_succeeded', props);\n } catch (error) {\n logger('Error tracking mmconnect_wallet_action_succeeded event', error);\n }\n }\n\n /**\n * Tracks a wallet action failed or rejected event based on the error.\n *\n * @param method - The RPC method name\n * @param scope - The CAIP chain ID scope\n * @param params - The method parameters\n * @param error - The error that occurred\n */\n async #trackWalletActionFailed(\n method: string,\n scope: Scope,\n params: unknown[],\n error: unknown,\n ): Promise<void> {\n const coreOptions = this.#getCoreOptions();\n try {\n const invokeOptions = this.#createInvokeOptions(method, scope, params);\n const props = await getWalletActionAnalyticsProperties(\n coreOptions,\n this.#core.storage,\n invokeOptions,\n );\n const isRejection = isRejectionError(error);\n if (isRejection) {\n analytics.track('mmconnect_wallet_action_rejected', props);\n } else {\n analytics.track('mmconnect_wallet_action_failed', props);\n }\n } catch {\n logger('Error tracking wallet action rejected or failed event', error);\n }\n }\n\n /**\n * Gets the currently selected chainId from cache, or falls back to the first permitted chain.\n *\n * @param permittedChainIds - Array of permitted chain IDs in hex format\n * @returns The selected chainId (hex string)\n */\n async #getSelectedChainId(permittedChainIds: Hex[]): Promise<Hex> {\n try {\n const cachedChainId =\n await this.#core.storage.adapter.get(CHAIN_STORE_KEY);\n if (cachedChainId) {\n const chainId: Hex = JSON.parse(cachedChainId);\n\n // Validate that the cached chainId is in the permitted chains list\n if (permittedChainIds.includes(chainId)) {\n return chainId;\n }\n }\n } catch (error) {\n logger('Error retrieving cached chainId', error);\n }\n\n // Fallback to the first permitted chain if cache retrieval failed or returned an invalid chain\n return permittedChainIds[0];\n }\n\n /**\n * Connects to the wallet with the specified chain ID and optional account.\n *\n * @param options - The connection options\n * @param options.account - Optional specific account to connect to\n * @param options.forceRequest - Wwhether to force a request regardless of an existing session\n * @param options.chainIds - Array of chain IDs to connect to\n * @returns A promise that resolves with the connected accounts and chain ID\n */\n async connect(\n { account, forceRequest, chainIds }: ConnectOptions = {\n chainIds: [DEFAULT_CHAIN_ID],\n },\n ): Promise<{ accounts: Address[]; chainId: number }> {\n logger('request: connect', { account });\n\n if (!chainIds || chainIds.length === 0) {\n throw new Error('chainIds must be an array of at least one chain ID');\n }\n\n const caipChainIds = Array.from(\n new Set(chainIds.concat(DEFAULT_CHAIN_ID) ?? [DEFAULT_CHAIN_ID]),\n ).map((id) => `eip155:${id}`);\n\n const caipAccountIds = account\n ? caipChainIds.map((caipChainId) => `${caipChainId}:${account}`)\n : [];\n\n await this.#core.connect(\n caipChainIds as Scope[],\n caipAccountIds as CaipAccountId[],\n {},\n forceRequest,\n );\n\n const hexPermittedChainIds = getPermittedEthChainIds(this.#sessionScopes);\n\n const initialAccounts = await this.#core.transport.sendEip1193Message<\n { method: 'eth_accounts'; params: [] },\n { result: string[]; id: number; jsonrpc: '2.0' }\n >({ method: 'eth_accounts', params: [] });\n\n const chainId = await this.#getSelectedChainId(hexPermittedChainIds);\n\n this.#onConnect({\n chainId,\n accounts: initialAccounts.result as Address[],\n });\n\n // Remove previous notification handler if it exists\n this.#removeNotificationHandler?.();\n\n this.#removeNotificationHandler = this.#core.transport.onNotification(\n (notification) => {\n // @ts-expect-error TODO: address this\n if (notification?.method === 'metamask_accountsChanged') {\n // @ts-expect-error TODO: address this\n const accounts = notification?.params;\n logger('transport-event: accountsChanged', accounts);\n this.#onAccountsChanged(accounts);\n }\n\n // @ts-expect-error TODO: address this\n if (notification?.method === 'metamask_chainChanged') {\n // @ts-expect-error TODO: address this\n const notificationChainId = Number(notification?.params?.chainId);\n logger('transport-event: chainChanged', notificationChainId);\n // Cache the chainId for persistence across page refreshes\n this.#cacheChainId(notificationChainId).catch((error) => {\n logger('Error caching chainId in notification handler', error);\n });\n this.#onChainChanged(notificationChainId);\n }\n },\n );\n\n logger('fulfilled-request: connect', {\n chainId: chainIds[0],\n accounts: this.#provider.accounts,\n });\n\n // TODO: update required here since accounts and chainId are now promises\n return {\n accounts: this.#provider.accounts,\n chainId: hexToNumber(chainId),\n };\n }\n\n /**\n * Connects to the wallet and signs a message using personal_sign.\n *\n * @param options - The connection options\n * @param options.message - The message to sign after connecting\n * @param options.chainIds - Optional chain IDs to connect to (defaults to ethereum mainnet if not provided)\n * @returns A promise that resolves with the signature\n * @throws Error if the selected account is not available after timeout\n */\n async connectAndSign({\n message,\n chainIds,\n }: {\n message: string;\n chainIds?: number[];\n }): Promise<string> {\n const { accounts, chainId } = await this.connect({\n chainIds: chainIds ?? [DEFAULT_CHAIN_ID],\n });\n\n const result = (await this.#provider.request({\n method: 'personal_sign',\n params: [accounts[0], message],\n })) as string;\n\n this.#eventHandlers?.connectAndSign?.({\n accounts,\n chainId,\n signResponse: result,\n });\n\n return result;\n }\n\n /**\n * Connects to the wallet and invokes a method with specified parameters.\n *\n * @param options - The options for connecting and invoking the method\n * @param options.method - The method name to invoke\n * @param options.params - The parameters to pass to the method, or a function that receives the account and returns params\n * @param options.chainIds - Optional chain IDs to connect to (defaults to ethereum mainnet if not provided)\n * @param options.account - Optional specific account to connect to\n * @param options.forceRequest - Whether to force a request regardless of an existing session\n * @returns A promise that resolves with the result of the method invocation\n * @throws Error if the selected account is not available after timeout (for methods that require an account)\n */\n async connectWith({\n method,\n params,\n chainIds,\n account,\n forceRequest,\n }: {\n method: string;\n params: unknown[] | ((account: Address) => unknown[]);\n chainIds?: number[];\n account?: string | undefined;\n forceRequest?: boolean;\n }): Promise<unknown> {\n const { accounts: connectedAccounts, chainId: connectedChainId } =\n await this.connect({\n chainIds: chainIds ?? [DEFAULT_CHAIN_ID],\n account,\n forceRequest,\n });\n\n const resolvedParams =\n typeof params === 'function' ? params(connectedAccounts[0]) : params;\n\n const result = await this.#provider.request({\n method,\n params: resolvedParams,\n });\n\n this.#eventHandlers?.connectWith?.({\n accounts: connectedAccounts,\n chainId: connectedChainId,\n connectWithResponse: result,\n });\n\n return result;\n }\n\n /**\n * Disconnects from the wallet by revoking the session and cleaning up event listeners.\n *\n * @returns A promise that resolves when disconnection is complete\n */\n async disconnect(): Promise<void> {\n logger('request: disconnect');\n\n await this.#core.disconnect();\n this.#onDisconnect();\n this.#clearConnectionState();\n\n this.#core.off('wallet_sessionChanged', this.#sessionChangedHandler);\n this.#core.off('display_uri', this.#displayUriHandler);\n\n if (this.#removeNotificationHandler) {\n this.#removeNotificationHandler();\n this.#removeNotificationHandler = undefined;\n }\n\n logger('fulfilled-request: disconnect');\n }\n\n /**\n * Switches the Ethereum chain. Will track state internally whenever possible.\n *\n * @param options - The options for the switch chain request\n * @param options.chainId - The chain ID to switch to\n * @param options.chainConfiguration - The chain configuration to use in case the chain is not present by the wallet\n * @returns The result of the switch chain request\n */\n async switchChain({\n chainId,\n chainConfiguration,\n }: {\n chainId: number | Hex;\n chainConfiguration?: AddEthereumChainParameter;\n }): Promise<unknown> {\n const method = 'wallet_switchEthereumChain';\n const hexChainId = isHex(chainId) ? chainId : numberToHex(chainId);\n const scope: Scope = `eip155:${isHex(chainId) ? hexToNumber(chainId) : chainId}`;\n const params = [{ chainId: hexChainId }];\n\n await this.#trackWalletActionRequested(method, scope, params);\n\n // TODO (wenfix): better way to return here other than resolving.\n if (this.selectedChainId === hexChainId) {\n return Promise.resolve();\n }\n\n const permittedChainIds = getPermittedEthChainIds(this.#sessionScopes);\n\n if (\n permittedChainIds.includes(hexChainId) &&\n this.#core.transportType === TransportType.MWP\n ) {\n await this.#cacheChainId(hexChainId);\n this.#onChainChanged(hexChainId);\n await this.#trackWalletActionSucceeded(method, scope, params);\n return Promise.resolve();\n }\n\n try {\n const result = await this.#request({\n method: 'wallet_switchEthereumChain',\n params,\n });\n\n // When using the MWP transport, the error is returned instead of thrown,\n // so we force it into the catch block here.\n const resultWithError = result as { error?: { message: string } };\n if (resultWithError?.error) {\n throw new Error(resultWithError.error.message);\n }\n\n await this.#trackWalletActionSucceeded(method, scope, params);\n if ((result as { result: unknown }).result === null) {\n // result is successful we eagerly call onChainChanged to update the provider's selected chain ID.\n await this.#cacheChainId(hexChainId);\n this.#onChainChanged(hexChainId);\n }\n return result;\n } catch (error) {\n await this.#trackWalletActionFailed(method, scope, params, error);\n // Fallback to add the chain if its not configured in the wallet.\n if ((error as Error).message.includes('Unrecognized chain ID')) {\n return this.#addEthereumChain(chainConfiguration);\n }\n throw error;\n }\n }\n\n /**\n * Handles several EIP-1193 requests that require special handling\n * due the nature of the Multichain SDK.\n *\n * @param request - The request object containing the method and params\n * @returns The result of the request or undefined if the request is ignored\n */\n async #requestInterceptor(\n request: ProviderRequest,\n ): ReturnType<ProviderRequestInterceptor> {\n logger(`Intercepting request for method: ${request.method}`);\n\n if (IGNORED_METHODS.includes(request.method)) {\n // TODO: replace with correct method unsupported provider error\n return Promise.reject(\n new Error(\n `Method: ${request.method} is not supported by Metamask Connect/EVM`,\n ),\n );\n }\n\n if (request.method === 'wallet_revokePermissions') {\n return this.disconnect();\n }\n\n if (isConnectRequest(request)) {\n // When calling wallet_requestPermissions, we need to force a new session request to prompt\n // the user for accounts, because internally the Multichain SDK will check if\n // the user is already connected and skip the request if so, unless we\n // explicitly request a specific account. This is needed to workaround\n // wallet_requestPermissions not requesting specific accounts.\n const shouldForceConnectionRequest =\n request.method === 'wallet_requestPermissions';\n\n const { method, params } = request;\n const initiallySelectedChainId = DEFAULT_CHAIN_ID;\n const scope: Scope = `eip155:${initiallySelectedChainId}`;\n\n await this.#trackWalletActionRequested(method, scope, params);\n\n try {\n const result = await this.connect({\n chainIds: [initiallySelectedChainId],\n forceRequest: shouldForceConnectionRequest,\n });\n await this.#trackWalletActionSucceeded(method, scope, params);\n return result;\n } catch (error) {\n await this.#trackWalletActionFailed(method, scope, params, error);\n throw error;\n }\n }\n\n if (isSwitchChainRequest(request)) {\n return this.switchChain({\n chainId: parseInt(request.params[0].chainId, 16),\n });\n }\n\n if (isAddChainRequest(request)) {\n return this.#addEthereumChain(request.params[0]);\n }\n\n if (isAccountsRequest(request)) {\n const { method } = request;\n const chainId = this.#provider.selectedChainId\n ? hexToNumber(this.#provider.selectedChainId)\n : 1;\n const scope: Scope = `eip155:${chainId}`;\n const params: unknown[] = [];\n\n await this.#trackWalletActionRequested(method, scope, params);\n await this.#trackWalletActionSucceeded(method, scope, params);\n\n return this.#provider.accounts;\n }\n\n logger('Request not intercepted, forwarding to default handler', request);\n return Promise.resolve();\n }\n\n /**\n * Clears the internal connection state: accounts and chainId\n */\n #clearConnectionState(): void {\n this.#provider.accounts = [];\n this.#provider.selectedChainId = undefined as unknown as number;\n }\n\n /**\n * Adds an Ethereum chain using the latest chain configuration received from\n * a switchEthereumChain request\n *\n * @param chainConfiguration - The chain configuration to use in case the chain is not present by the wallet\n * @returns Nothing\n */\n async #addEthereumChain(\n chainConfiguration?: AddEthereumChainParameter,\n ): Promise<void> {\n logger('addEthereumChain called', { chainConfiguration });\n const method = 'wallet_addEthereumChain';\n\n if (!chainConfiguration) {\n throw new Error('No chain configuration found.');\n }\n\n // Get chain ID from config or use current chain\n const chainId = chainConfiguration.chainId\n ? parseInt(chainConfiguration.chainId, 16)\n : hexToNumber(this.#provider.selectedChainId ?? '0x1');\n const scope: Scope = `eip155:${chainId}`;\n const params = [chainConfiguration];\n\n await this.#trackWalletActionRequested(method, scope, params);\n\n try {\n const result = await this.#request({\n method: 'wallet_addEthereumChain',\n params,\n });\n\n if ((result as { result: unknown }).result === null) {\n // if result is successful we eagerly call onChainChanged to update the provider's selected chain ID.\n await this.#cacheChainId(chainId);\n this.#onChainChanged(chainId);\n }\n await this.#trackWalletActionSucceeded(method, scope, params);\n } catch (error) {\n await this.#trackWalletActionFailed(method, scope, params, error);\n throw error;\n }\n }\n\n /**\n * Submits a request to the EIP-1193 provider\n *\n * @param request - The request object containing the method and params\n * @param request.method - The method to request\n * @param request.params - The parameters to pass to the method\n * @returns The result of the request\n */\n async #request(request: {\n method: string;\n params: unknown[];\n }): Promise<unknown> {\n logger('direct request to metamask-provider called', request);\n const result = this.#core.transport.sendEip1193Message(request);\n if (\n request.method === 'wallet_addEthereumChain' ||\n request.method === 'wallet_switchEthereumChain'\n ) {\n this.#core.openDeeplinkIfNeeded();\n }\n return result;\n }\n\n /**\n * Caches the chainId to storage for persistence across page refreshes.\n *\n * @param chainId - The chain ID (can be hex string or number)\n */\n async #cacheChainId(chainId: Hex | number): Promise<void> {\n try {\n const hexChainId = isHex(chainId) ? chainId : numberToHex(chainId);\n await this.#core.storage.adapter.set(\n CHAIN_STORE_KEY,\n JSON.stringify(hexChainId),\n );\n } catch (error) {\n logger('Error caching chainId', error);\n }\n }\n\n /**\n * Handles chain change events and updates the provider's selected chain ID.\n *\n * @param chainId - The new chain ID (can be hex string or number)\n */\n #onChainChanged(chainId: Hex | number): void {\n const hexChainId = isHex(chainId) ? chainId : numberToHex(chainId);\n if (hexChainId === this.#provider.selectedChainId) {\n return;\n }\n logger('handler: chainChanged', { chainId });\n this.#provider.selectedChainId = chainId;\n this.#eventHandlers?.chainChanged?.(hexChainId);\n this.#provider.emit('chainChanged', hexChainId);\n }\n\n /**\n * Handles accounts change events and updates the provider's accounts list.\n *\n * @param accounts - The new list of permitted accounts\n */\n #onAccountsChanged(accounts: Address[]): void {\n logger('handler: accountsChanged', accounts);\n this.#provider.accounts = accounts;\n this.#provider.emit('accountsChanged', accounts);\n this.#eventHandlers?.accountsChanged?.(accounts);\n }\n\n /**\n * Handles connection events and emits the connect event to listeners.\n *\n * @param options - The connection options\n * @param options.chainId - The chain ID of the connection (can be hex string or number)\n * @param options.accounts - The accounts of the connection\n */\n #onConnect({\n chainId,\n accounts,\n }: {\n chainId: Hex | number;\n accounts: Address[];\n }): void {\n logger('handler: connect', { chainId, accounts });\n const data = {\n chainId: isHex(chainId) ? chainId : numberToHex(chainId),\n accounts,\n };\n\n this.#provider.emit('connect', data);\n this.#eventHandlers?.connect?.(data);\n\n this.#onChainChanged(chainId);\n this.#onAccountsChanged(accounts);\n }\n\n /**\n * Handles disconnection events and emits the disconnect event to listeners.\n * Also clears accounts by triggering an accountsChanged event with an empty array.\n */\n #onDisconnect(): void {\n logger('handler: disconnect');\n this.#provider.emit('disconnect');\n this.#eventHandlers?.disconnect?.();\n\n this.#onAccountsChanged([]);\n }\n\n /**\n * Handles display_uri events and emits them to the provider.\n * This allows consumers to display their own custom QR code UI.\n *\n * @param uri - The deeplink URI to be displayed as a QR code\n */\n #onDisplayUri(uri: string): void {\n logger('handler: display_uri', uri);\n this.#provider.emit('display_uri', uri);\n this.#eventHandlers?.displayUri?.(uri);\n }\n\n /**\n * Will trigger an accountsChanged event if there's a valid previous session.\n * This is needed because the accountsChanged event is not triggered when\n * revising, reloading or opening the app in a new tab.\n *\n * This works by checking by checking events received during MultichainCore initialization,\n * and if there's a wallet_sessionChanged event, it will add a 1-time listener for eth_accounts results\n * and trigger an accountsChanged event if the results are valid accounts.\n */\n async #attemptSessionRecovery(): Promise<void> {\n // Skip session recovery if transport is not initialized yet.\n // Transport is only initialized when there's a stored session or after connect() is called.\n // Only attempt recovery if we're in a state where transport should be available.\n if (this.#core.status !== 'connected' && this.#core.status !== 'connecting') {\n return;\n }\n try {\n const response = await this.#core.transport.request<\n { method: 'wallet_getSession' },\n {\n result: { sessionScopes: Caip25CaveatValue };\n id: number;\n jsonrpc: '2.0';\n }\n >({\n method: 'wallet_getSession',\n });\n\n const { sessionScopes } = response.result;\n\n this.#sessionScopes = sessionScopes;\n const permittedChainIds = getPermittedEthChainIds(sessionScopes);\n\n // Instead of using the accounts we get back from calling `wallet_getSession`\n // we get permitted accounts from `eth_accounts` to make sure we have them ordered by last selected account\n // and correctly set the currently selected account for the dapp\n const permittedAccounts = await this.#core.transport.sendEip1193Message<\n { method: 'eth_accounts'; params: [] },\n { result: Address[]; id: number; jsonrpc: '2.0' }\n >({ method: 'eth_accounts', params: [] });\n\n const chainId = await this.#getSelectedChainId(permittedChainIds);\n\n if (permittedChainIds.length && permittedAccounts.result) {\n this.#onConnect({\n chainId,\n accounts: permittedAccounts.result,\n });\n }\n } catch (error) {\n console.error('Error attempting session recovery', error);\n }\n }\n\n /**\n * Gets the EIP-1193 provider instance\n *\n * @returns The EIP-1193 provider instance\n */\n getProvider(): EIP1193Provider {\n return this.#provider;\n }\n\n /**\n * Gets the currently selected chain ID on the wallet\n *\n * @returns The currently selected chain ID or undefined if no chain is selected\n */\n getChainId(): Hex | undefined {\n return this.selectedChainId;\n }\n\n /**\n * Gets the currently selected account on the wallet\n *\n * @returns The currently selected account or undefined if no account is selected\n */\n getAccount(): Address | undefined {\n return this.#provider.selectedAccount;\n }\n\n // Convenience getters for the EIP-1193 provider\n /**\n * Gets the currently permitted accounts\n *\n * @returns The currently permitted accounts\n */\n get accounts(): Address[] {\n return this.#provider.accounts;\n }\n\n /**\n * Gets the currently selected account on the wallet\n *\n * @returns The currently selected account or undefined if no account is selected\n */\n get selectedAccount(): Address | undefined {\n return this.#provider.selectedAccount;\n }\n\n /**\n * Gets the currently selected chain ID on the wallet\n *\n * @returns The currently selected chain ID or undefined if no chain is selected\n */\n get selectedChainId(): Hex | undefined {\n return this.#provider.selectedChainId;\n }\n}\n\n/**\n * Creates a new Metamask Connect/EVM instance\n *\n * @param options - The options for the Metamask Connect/EVM layer\n * @param options.dapp - Dapp identification and branding settings\n * @param options.api - API configuration including read-only RPC map\n * @param options.api.supportedNetworks - A map of CAIP chain IDs to RPC URLs for read-only requests\n * @param options.eventEmitter - The event emitter to use for the Metamask Connect/EVM layer\n * @param options.eventHandlers - The event handlers to use for the Metamask Connect/EVM layer\n * @returns The Metamask Connect/EVM layer instance\n */\nexport async function createEVMClient(\n options: Pick<MultichainOptions, 'dapp' | 'api'> & {\n eventHandlers?: Partial<EventHandlers>;\n debug?: boolean;\n },\n): Promise<MetamaskConnectEVM> {\n enableDebug(options.debug);\n\n logger('Creating Metamask Connect/EVM with options:', options);\n\n // Validate that supportedNetworks is provided and not empty\n if (\n !options.api?.supportedNetworks ||\n Object.keys(options.api.supportedNetworks).length === 0\n ) {\n throw new Error(\n 'supportedNetworks is required and must contain at least one chain configuration',\n );\n }\n\n validSupportedChainsUrls(options.api.supportedNetworks, 'supportedNetworks');\n\n try {\n const core = await createMultichainClient({\n ...options,\n api: {\n supportedNetworks: options.api.supportedNetworks,\n },\n });\n\n return new MetamaskConnectEVM({\n core,\n eventHandlers: options.eventHandlers,\n supportedNetworks: options.api.supportedNetworks,\n });\n } catch (error) {\n console.error('Error creating Metamask Connect/EVM', error);\n throw error;\n }\n}\n","export const IGNORED_METHODS = [\n 'metamask_getProviderState',\n 'metamask_sendDomainMetadata',\n 'metamask_logWeb3ShimUsage',\n 'wallet_registerOnboarding',\n 'net_version',\n 'wallet_getPermissions',\n];\n\nexport const CONNECT_METHODS = [\n 'wallet_requestPermissions',\n 'eth_requestAccounts',\n];\n\nexport const ACCOUNTS_METHODS = ['eth_accounts', 'eth_coinbase'];\n\nexport const INTERCEPTABLE_METHODS = [\n ...ACCOUNTS_METHODS,\n ...IGNORED_METHODS,\n ...CONNECT_METHODS,\n // These have bespoke handlers\n 'wallet_revokePermissions',\n 'wallet_switchEthereumChain',\n 'wallet_addEthereumChain',\n];\n","import {\n createLogger,\n enableDebug as debug,\n} from '@metamask/connect-multichain';\n\nconst namespace = 'metamask-connect:evm';\n\n// @ts-expect-error logger needs to be typed properly\nexport const logger = createLogger(namespace, '63');\n\nexport const enableDebug = (debugEnabled: boolean = false): void => {\n if (debugEnabled) {\n // @ts-expect-error logger needs to be typed properly\n debug(namespace);\n }\n};\n","import type { MultichainCore, Scope } from '@metamask/connect-multichain';\nimport { EventEmitter } from '@metamask/connect-multichain';\nimport { hexToNumber, numberToHex } from '@metamask/utils';\n\nimport { INTERCEPTABLE_METHODS } from './constants';\nimport { logger } from './logger';\nimport type {\n Address,\n EIP1193ProviderEvents,\n Hex,\n JsonRpcCallback,\n JsonRpcRequest,\n JsonRpcResponse,\n ProviderRequest,\n ProviderRequestInterceptor,\n} from './types';\n\n/**\n * EIP-1193 Provider wrapper around the Multichain SDK.\n */\nexport class EIP1193Provider extends EventEmitter<EIP1193ProviderEvents> {\n /** The core instance of the Multichain SDK */\n readonly #core: MultichainCore;\n\n /** Interceptor function to handle specific methods */\n readonly #requestInterceptor: ProviderRequestInterceptor;\n\n /** The currently permitted accounts */\n #accounts: Address[] = [];\n\n /** The currently selected chain ID on the wallet */\n #selectedChainId?: Hex | undefined;\n\n constructor(core: MultichainCore, interceptor: ProviderRequestInterceptor) {\n super();\n this.#core = core;\n this.#requestInterceptor = interceptor;\n\n // Bind all public methods to ensure `this` context is preserved\n // when methods are extracted or passed as callbacks.\n // This eliminates the need for Proxy wrappers in consumers.\n this.request = this.request.bind(this);\n this.sendAsync = this.sendAsync.bind(this);\n this.send = this.send.bind(this);\n\n // Bind inherited EventEmitter methods\n this.on = this.on.bind(this);\n this.off = this.off.bind(this);\n this.emit = this.emit.bind(this);\n this.once = this.once.bind(this);\n this.removeListener = this.removeListener.bind(this);\n this.listenerCount = this.listenerCount.bind(this);\n }\n\n /**\n * Performs a EIP-1193 request.\n *\n * @param request - The request object containing the method and params\n * @returns The result of the request\n */\n async request(request: ProviderRequest): Promise<unknown> {\n logger(\n `request: ${request.method} - chainId: ${this.selectedChainId}`,\n request.params,\n );\n /* Some methods require special handling, so we intercept them here\n * and handle them in MetamaskConnectEVM.requestInterceptor method. */\n if (INTERCEPTABLE_METHODS.includes(request.method)) {\n return this.#requestInterceptor?.(request);\n }\n\n if (!this.#selectedChainId) {\n // TODO: replace with a better error\n throw new Error('No chain ID selected');\n }\n\n const chainId = hexToNumber(this.#selectedChainId);\n const scope: Scope = `eip155:${chainId}`;\n\n // Validate that the chain is configured in supportedNetworks\n // This check is performed here to provide better error messages\n // The RpcClient will also validate, but this gives us a chance to provide\n // a clearer error message before the request is routed\n const coreOptions = (this.#core as any).options; // TODO: options is `protected readonly` property, this needs to be refactored so `any` type assertion is not necessary\n const supportedNetworks = coreOptions?.api?.supportedNetworks ?? {};\n if (!supportedNetworks[scope]) {\n throw new Error(\n `Chain ${scope} is not configured in supportedNetworks. Requests cannot be made to chains not explicitly configured in supportedNetworks.`,\n );\n }\n\n return this.#core.invokeMethod({\n scope,\n request: {\n method: request.method,\n params: request.params,\n },\n });\n }\n\n // Getters and setters\n public get selectedAccount(): Address | undefined {\n return this.accounts[0];\n }\n\n public set accounts(accounts: Address[]) {\n this.#accounts = accounts;\n }\n\n public get accounts(): Address[] {\n return this.#accounts;\n }\n\n public get selectedChainId(): Hex | undefined {\n return this.#selectedChainId;\n }\n\n public set selectedChainId(chainId: Hex | number | undefined) {\n const hexChainId =\n chainId && typeof chainId === 'number' ? numberToHex(chainId) : chainId;\n\n // Don't overwrite the selected chain ID with an undefined value\n if (!hexChainId) {\n return;\n }\n\n this.#selectedChainId = hexChainId as Hex;\n }\n\n // ==========================================\n // Legacy compatibility methods\n // ==========================================\n\n /**\n * Alias for selectedChainId for legacy compatibility.\n * Many dApps expect a `chainId` property on the provider.\n */\n public get chainId(): Hex | undefined {\n return this.selectedChainId;\n }\n\n /**\n * Legacy method for sending JSON-RPC requests.\n * @deprecated Use `request` instead. This method is provided for backwards compatibility.\n * @param request - The JSON-RPC request object\n * @param callback - Optional callback function. If provided, the method returns void.\n * @returns A promise resolving to the JSON-RPC response, or void if a callback is provided.\n */\n async sendAsync<TParams = unknown, TResult = unknown>(\n request: JsonRpcRequest<TParams>,\n callback?: JsonRpcCallback<TResult>,\n ): Promise<JsonRpcResponse<TResult> | void> {\n const id = request.id ?? 1;\n\n const promise = this.request({\n method: request.method,\n params: request.params as unknown,\n })\n .then(\n (result): JsonRpcResponse<TResult> => ({\n id,\n jsonrpc: '2.0',\n result: result as TResult,\n }),\n )\n .catch(\n (error): JsonRpcResponse<TResult> => ({\n id,\n jsonrpc: '2.0',\n error: {\n code: error.code ?? -32603,\n message: error.message ?? 'Internal error',\n data: error.data,\n },\n }),\n );\n\n if (callback) {\n promise\n .then((response) => {\n if (response.error) {\n callback(new Error(response.error.message), response);\n } else {\n callback(null, response);\n }\n })\n .catch((error) => {\n callback(error, null);\n });\n return;\n }\n\n return promise;\n }\n\n /**\n * Legacy method for sending JSON-RPC requests synchronously (callback-based).\n * @deprecated Use `request` instead. This method is provided for backwards compatibility.\n * @param request - The JSON-RPC request object\n * @param callback - The callback function to receive the response\n */\n send<TParams = unknown, TResult = unknown>(\n request: JsonRpcRequest<TParams>,\n callback: JsonRpcCallback<TResult>,\n ): void {\n this.sendAsync(request, callback);\n }\n}\n","import type { InternalScopesObject } from '@metamask/chain-agnostic-permission';\nimport {\n getPermittedEthChainIds as _getPermittedEthChainIds,\n getEthAccounts as _getEthAccounts,\n} from '@metamask/chain-agnostic-permission';\nimport type { SessionData } from '@metamask/connect-multichain';\n\nimport type { Address, Hex } from '../types';\n\n/**\n * Get the Ethereum accounts from the session data\n *\n * @param sessionScopes - The session scopes\n * @returns The Ethereum accounts\n */\nexport const getEthAccounts = (\n sessionScopes: SessionData['sessionScopes'] | undefined,\n): Address[] => {\n if (!sessionScopes) {\n return [];\n }\n\n return _getEthAccounts({\n requiredScopes: sessionScopes as InternalScopesObject,\n optionalScopes: sessionScopes as InternalScopesObject,\n });\n};\n\n/**\n * Get the permitted Ethereum chain IDs from the session scopes.\n * Wrapper around getPermittedEthChainIds from @metamask/chain-agnostic-permission\n *\n * @param sessionScopes - The session scopes\n * @returns The permitted Ethereum chain IDs\n */\nexport const getPermittedEthChainIds = (\n sessionScopes: SessionData['sessionScopes'] | undefined,\n): Hex[] => {\n if (!sessionScopes) {\n return [];\n }\n\n return _getPermittedEthChainIds({\n requiredScopes: sessionScopes as InternalScopesObject,\n optionalScopes: sessionScopes as InternalScopesObject,\n });\n};\n","import type { ProviderRequest } from '../types';\n\n/**\n * Type guard for connect-like requests:\n * - wallet_requestPermissions\n * - eth_requestAccounts\n *\n * @param req - The request object to check\n * @returns True if the request is a connect-like request, false otherwise\n */\nexport function isConnectRequest(req: ProviderRequest): req is Extract<\n ProviderRequest,\n {\n method: 'wallet_requestPermissions' | 'eth_requestAccounts';\n }\n> {\n return (\n req.method === 'wallet_requestPermissions' ||\n req.method === 'eth_requestAccounts'\n );\n}\n\n/**\n * Type guard for wallet_switchEthereumChain request.\n *\n * @param req - The request object to check\n * @returns True if the request is a wallet_switchEthereumChain request, false otherwise\n */\nexport function isSwitchChainRequest(\n req: ProviderRequest,\n): req is Extract<ProviderRequest, { method: 'wallet_switchEthereumChain' }> {\n return req.method === 'wallet_switchEthereumChain';\n}\n\n/**\n * Type guard for wallet_addEthereumChain request.\n *\n * @param req - The request object to check\n * @returns True if the request is a wallet_addEthereumChain request, false otherwise\n */\nexport function isAddChainRequest(\n req: ProviderRequest,\n): req is Extract<ProviderRequest, { method: 'wallet_addEthereumChain' }> {\n return req.method === 'wallet_addEthereumChain';\n}\n\n/**\n * Type guard for generic accounts request:\n * - eth_accounts\n * - eth_coinbase\n *\n * @param req - The request object to check\n * @returns True if the request is a generic accounts request, false otherwise\n */\nexport function isAccountsRequest(\n req: ProviderRequest,\n): req is Extract<\n ProviderRequest,\n { method: 'eth_accounts' | 'eth_coinbase' }\n> {\n return req.method === 'eth_accounts' || req.method === 'eth_coinbase';\n}\n\n/**\n * Validates that all values in a Record are valid URLs.\n *\n * @param record - The record to validate (e.g., supportedNetworks)\n * @param recordName - The name of the record for error messages\n * @throws Error if any values are invalid URLs\n */\nexport function validSupportedChainsUrls(\n record: Record<string, string>,\n recordName: string,\n): void {\n const invalidUrls: string[] = [];\n for (const [key, url] of Object.entries(record)) {\n try {\n // eslint-disable-next-line no-new\n new URL(url);\n } catch {\n invalidUrls.push(`${key}: ${url}`);\n }\n }\n\n if (invalidUrls.length > 0) {\n throw new Error(\n `${recordName} contains invalid URLs:\\n${invalidUrls.join('\\n')}`,\n );\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,SAAS,wBAAwB;;;ACAjC,SAAS,iBAAiB;AAQ1B;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP;AAAA,EACE,eAAAA;AAAA,EACA,eAAAC;AAAA,EACA,eAAe;AAAA,OACV;;;AClBA,IAAM,kBAAkB;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,IAAM,kBAAkB;AAAA,EAC7B;AAAA,EACA;AACF;AAEO,IAAM,mBAAmB,CAAC,gBAAgB,cAAc;AAExD,IAAM,wBAAwB;AAAA,EACnC,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA;AAAA,EAEH;AAAA,EACA;AAAA,EACA;AACF;;;ACxBA;AAAA,EACE;AAAA,EACA,eAAe;AAAA,OACV;AAEP,IAAM,YAAY;AAGX,IAAM,SAAS,aAAa,WAAW,IAAI;AAE3C,IAAM,cAAc,CAAC,eAAwB,UAAgB;AAClE,MAAI,cAAc;AAEhB,UAAM,SAAS;AAAA,EACjB;AACF;;;ACdA,SAAS,oBAAoB;AAC7B,SAAS,aAAa,mBAAmB;AAFzC;AAoBO,IAAM,kBAAN,cAA8B,aAAoC;AAAA,EAavE,YAAY,MAAsB,aAAyC;AACzE,UAAM;AAZR;AAAA,uBAAS;AAGT;AAAA,uBAAS;AAGT;AAAA,kCAAuB,CAAC;AAGxB;AAAA;AAIE,uBAAK,OAAQ;AACb,uBAAK,qBAAsB;AAK3B,SAAK,UAAU,KAAK,QAAQ,KAAK,IAAI;AACrC,SAAK,YAAY,KAAK,UAAU,KAAK,IAAI;AACzC,SAAK,OAAO,KAAK,KAAK,KAAK,IAAI;AAG/B,SAAK,KAAK,KAAK,GAAG,KAAK,IAAI;AAC3B,SAAK,MAAM,KAAK,IAAI,KAAK,IAAI;AAC7B,SAAK,OAAO,KAAK,KAAK,KAAK,IAAI;AAC/B,SAAK,OAAO,KAAK,KAAK,KAAK,IAAI;AAC/B,SAAK,iBAAiB,KAAK,eAAe,KAAK,IAAI;AACnD,SAAK,gBAAgB,KAAK,cAAc,KAAK,IAAI;AAAA,EACnD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQM,QAAQ,SAA4C;AAAA;AA5D5D;AA6DI;AAAA,QACE,YAAY,QAAQ,MAAM,eAAe,KAAK,eAAe;AAAA,QAC7D,QAAQ;AAAA,MACV;AAGA,UAAI,sBAAsB,SAAS,QAAQ,MAAM,GAAG;AAClD,gBAAO,wBAAK,yBAAL,8BAA2B;AAAA,MACpC;AAEA,UAAI,CAAC,mBAAK,mBAAkB;AAE1B,cAAM,IAAI,MAAM,sBAAsB;AAAA,MACxC;AAEA,YAAM,UAAU,YAAY,mBAAK,iBAAgB;AACjD,YAAM,QAAe,UAAU,OAAO;AAMtC,YAAM,cAAe,mBAAK,OAAc;AACxC,YAAM,qBAAoB,sDAAa,QAAb,mBAAkB,sBAAlB,YAAuC,CAAC;AAClE,UAAI,CAAC,kBAAkB,KAAK,GAAG;AAC7B,cAAM,IAAI;AAAA,UACR,SAAS,KAAK;AAAA,QAChB;AAAA,MACF;AAEA,aAAO,mBAAK,OAAM,aAAa;AAAA,QAC7B;AAAA,QACA,SAAS;AAAA,UACP,QAAQ,QAAQ;AAAA,UAChB,QAAQ,QAAQ;AAAA,QAClB;AAAA,MACF,CAAC;AAAA,IACH;AAAA;AAAA;AAAA,EAGA,IAAW,kBAAuC;AAChD,WAAO,KAAK,SAAS,CAAC;AAAA,EACxB;AAAA,EAEA,IAAW,SAAS,UAAqB;AACvC,uBAAK,WAAY;AAAA,EACnB;AAAA,EAEA,IAAW,WAAsB;AAC/B,WAAO,mBAAK;AAAA,EACd;AAAA,EAEA,IAAW,kBAAmC;AAC5C,WAAO,mBAAK;AAAA,EACd;AAAA,EAEA,IAAW,gBAAgB,SAAmC;AAC5D,UAAM,aACJ,WAAW,OAAO,YAAY,WAAW,YAAY,OAAO,IAAI;AAGlE,QAAI,CAAC,YAAY;AACf;AAAA,IACF;AAEA,uBAAK,kBAAmB;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,IAAW,UAA2B;AACpC,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASM,UACJ,SACA,UAC0C;AAAA;AAvJ9C;AAwJI,YAAM,MAAK,aAAQ,OAAR,YAAc;AAEzB,YAAM,UAAU,KAAK,QAAQ;AAAA,QAC3B,QAAQ,QAAQ;AAAA,QAChB,QAAQ,QAAQ;AAAA,MAClB,CAAC,EACE;AAAA,QACC,CAAC,YAAsC;AAAA,UACrC;AAAA,UACA,SAAS;AAAA,UACT;AAAA,QACF;AAAA,MACF,EACC;AAAA,QACC,CAAC,UAAiC;AAtK1C,cAAAC,KAAA;AAsK8C;AAAA,YACpC;AAAA,YACA,SAAS;AAAA,YACT,OAAO;AAAA,cACL,OAAMA,MAAA,MAAM,SAAN,OAAAA,MAAc;AAAA,cACpB,UAAS,WAAM,YAAN,YAAiB;AAAA,cAC1B,MAAM,MAAM;AAAA,YACd;AAAA,UACF;AAAA;AAAA,MACF;AAEF,UAAI,UAAU;AACZ,gBACG,KAAK,CAAC,aAAa;AAClB,cAAI,SAAS,OAAO;AAClB,qBAAS,IAAI,MAAM,SAAS,MAAM,OAAO,GAAG,QAAQ;AAAA,UACtD,OAAO;AACL,qBAAS,MAAM,QAAQ;AAAA,UACzB;AAAA,QACF,CAAC,EACA,MAAM,CAAC,UAAU;AAChB,mBAAS,OAAO,IAAI;AAAA,QACtB,CAAC;AACH;AAAA,MACF;AAEA,aAAO;AAAA,IACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,KACE,SACA,UACM;AACN,SAAK,UAAU,SAAS,QAAQ;AAAA,EAClC;AACF;AAzLW;AAGA;AAGT;AAGA;;;AC9BF;AAAA,EACE,2BAA2B;AAAA,EAC3B,kBAAkB;AAAA,OACb;AA+BA,IAAM,0BAA0B,CACrC,kBACU;AACV,MAAI,CAAC,eAAe;AAClB,WAAO,CAAC;AAAA,EACV;AAEA,SAAO,yBAAyB;AAAA,IAC9B,gBAAgB;AAAA,IAChB,gBAAgB;AAAA,EAClB,CAAC;AACH;;;ACpCO,SAAS,iBAAiB,KAK/B;AACA,SACE,IAAI,WAAW,+BACf,IAAI,WAAW;AAEnB;AAQO,SAAS,qBACd,KAC2E;AAC3E,SAAO,IAAI,WAAW;AACxB;AAQO,SAAS,kBACd,KACwE;AACxE,SAAO,IAAI,WAAW;AACxB;AAUO,SAAS,kBACd,KAIA;AACA,SAAO,IAAI,WAAW,kBAAkB,IAAI,WAAW;AACzD;AASO,SAAS,yBACd,QACA,YACM;AACN,QAAM,cAAwB,CAAC;AAC/B,aAAW,CAAC,KAAK,GAAG,KAAK,OAAO,QAAQ,MAAM,GAAG;AAC/C,QAAI;AAEF,UAAI,IAAI,GAAG;AAAA,IACb,SAAQ;AACN,kBAAY,KAAK,GAAG,GAAG,KAAK,GAAG,EAAE;AAAA,IACnC;AAAA,EACF;AAEA,MAAI,YAAY,SAAS,GAAG;AAC1B,UAAM,IAAI;AAAA,MACR,GAAG,UAAU;AAAA,EAA4B,YAAY,KAAK,IAAI,CAAC;AAAA,IACjE;AAAA,EACF;AACF;;;AL/CA,IAAM,mBAAmB;AACzB,IAAM,kBAAkB;AA3CxB,IAAAC,QAAA;AAkFO,IAAM,qBAAN,MAAyB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA6B9B,YAAY,EAAE,MAAM,cAAc,GAA8B;AA7B3D;AAEL;AAAA,uBAASA;AAGT;AAAA,uBAAS;AAGT;AAAA,uCAA+C,CAAC;AAGhD;AAAA,uBAAS;AAGT;AAAA,uBAAS;AAGT;AAAA,uBAAS;AAGT;AAAA;AAUE,uBAAKA,QAAQ;AAEb,uBAAK,WAAY,IAAI;AAAA,MACnB;AAAA,MACA,sBAAK,sDAAoB,KAAK,IAAI;AAAA,IACpC;AAEA,uBAAK,gBAAiB;AAQtB,uBAAK,wBAAyB,CAAC,YAAkB;AA/HrD;AAgIM,aAAO,gCAAgC,OAAO;AAC9C,yBAAK,iBAAiB,wCAAS,kBAAT,YAA0B,CAAC;AAAA,IACnD;AACA,uBAAKA,QAAM;AAAA,MACT;AAAA,MACA,mBAAK,wBAAuB,KAAK,IAAI;AAAA,IACvC;AAMA,uBAAK,oBAAqB,sBAAK,gDAAc,KAAK,IAAI;AACtD,uBAAKA,QAAM,GAAG,eAAe,mBAAK,mBAAkB;AAIpD,0BAAK,0DAAL,WAA+B,MAAM,CAAC,UAAU;AAC9C,cAAQ,MAAM,qCAAqC,KAAK;AAAA,IAC1D,CAAC;AAED,WAAO,mCAAmC;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAyJM,UAI+C;AAAA,+CAHnD,EAAE,SAAS,cAAc,SAAS,IAAoB;AAAA,MACpD,UAAU,CAAC,gBAAgB;AAAA,IAC7B,GACmD;AAnTvD;AAoTI,aAAO,oBAAoB,EAAE,QAAQ,CAAC;AAEtC,UAAI,CAAC,YAAY,SAAS,WAAW,GAAG;AACtC,cAAM,IAAI,MAAM,oDAAoD;AAAA,MACtE;AAEA,YAAM,eAAe,MAAM;AAAA,QACzB,IAAI,KAAI,cAAS,OAAO,gBAAgB,MAAhC,YAAqC,CAAC,gBAAgB,CAAC;AAAA,MACjE,EAAE,IAAI,CAAC,OAAO,UAAU,EAAE,EAAE;AAE5B,YAAM,iBAAiB,UACnB,aAAa,IAAI,CAAC,gBAAgB,GAAG,WAAW,IAAI,OAAO,EAAE,IAC7D,CAAC;AAEL,YAAM,mBAAKA,QAAM;AAAA,QACf;AAAA,QACA;AAAA,QACA,CAAC;AAAA,QACD;AAAA,MACF;AAEA,YAAM,uBAAuB,wBAAwB,mBAAK,eAAc;AAExE,YAAM,kBAAkB,MAAM,mBAAKA,QAAM,UAAU,mBAGjD,EAAE,QAAQ,gBAAgB,QAAQ,CAAC,EAAE,CAAC;AAExC,YAAM,UAAU,MAAM,sBAAK,sDAAL,WAAyB;AAE/C,4BAAK,6CAAL,WAAgB;AAAA,QACd;AAAA,QACA,UAAU,gBAAgB;AAAA,MAC5B;AAGA,+BAAK,gCAAL;AAEA,yBAAK,4BAA6B,mBAAKA,QAAM,UAAU;AAAA,QACrD,CAAC,iBAAiB;AA3VxB,cAAAC;AA6VQ,eAAI,6CAAc,YAAW,4BAA4B;AAEvD,kBAAM,WAAW,6CAAc;AAC/B,mBAAO,oCAAoC,QAAQ;AACnD,kCAAK,qDAAL,WAAwB;AAAA,UAC1B;AAGA,eAAI,6CAAc,YAAW,yBAAyB;AAEpD,kBAAM,sBAAsB,QAAOA,MAAA,6CAAc,WAAd,gBAAAA,IAAsB,OAAO;AAChE,mBAAO,iCAAiC,mBAAmB;AAE3D,kCAAK,gDAAL,WAAmB,qBAAqB,MAAM,CAAC,UAAU;AACvD,qBAAO,iDAAiD,KAAK;AAAA,YAC/D,CAAC;AACD,kCAAK,kDAAL,WAAqB;AAAA,UACvB;AAAA,QACF;AAAA,MACF;AAEA,aAAO,8BAA8B;AAAA,QACnC,SAAS,SAAS,CAAC;AAAA,QACnB,UAAU,mBAAK,WAAU;AAAA,MAC3B,CAAC;AAGD,aAAO;AAAA,QACL,UAAU,mBAAK,WAAU;AAAA,QACzB,SAASC,aAAY,OAAO;AAAA,MAC9B;AAAA,IACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWM,eAAe,IAMD;AAAA,+CANC;AAAA,MACnB;AAAA,MACA;AAAA,IACF,GAGoB;AA7YtB;AA8YI,YAAM,EAAE,UAAU,QAAQ,IAAI,MAAM,KAAK,QAAQ;AAAA,QAC/C,UAAU,8BAAY,CAAC,gBAAgB;AAAA,MACzC,CAAC;AAED,YAAM,SAAU,MAAM,mBAAK,WAAU,QAAQ;AAAA,QAC3C,QAAQ;AAAA,QACR,QAAQ,CAAC,SAAS,CAAC,GAAG,OAAO;AAAA,MAC/B,CAAC;AAED,qCAAK,oBAAL,mBAAqB,mBAArB,4BAAsC;AAAA,QACpC;AAAA,QACA;AAAA,QACA,cAAc;AAAA,MAChB;AAEA,aAAO;AAAA,IACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAcM,YAAY,IAYG;AAAA,+CAZH;AAAA,MAChB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,GAMqB;AAxbvB;AAybI,YAAM,EAAE,UAAU,mBAAmB,SAAS,iBAAiB,IAC7D,MAAM,KAAK,QAAQ;AAAA,QACjB,UAAU,8BAAY,CAAC,gBAAgB;AAAA,QACvC;AAAA,QACA;AAAA,MACF,CAAC;AAEH,YAAM,iBACJ,OAAO,WAAW,aAAa,OAAO,kBAAkB,CAAC,CAAC,IAAI;AAEhE,YAAM,SAAS,MAAM,mBAAK,WAAU,QAAQ;AAAA,QAC1C;AAAA,QACA,QAAQ;AAAA,MACV,CAAC;AAED,qCAAK,oBAAL,mBAAqB,gBAArB,4BAAmC;AAAA,QACjC,UAAU;AAAA,QACV,SAAS;AAAA,QACT,qBAAqB;AAAA,MACvB;AAEA,aAAO;AAAA,IACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOM,aAA4B;AAAA;AAChC,aAAO,qBAAqB;AAE5B,YAAM,mBAAKF,QAAM,WAAW;AAC5B,4BAAK,gDAAL;AACA,4BAAK,wDAAL;AAEA,yBAAKA,QAAM,IAAI,yBAAyB,mBAAK,uBAAsB;AACnE,yBAAKA,QAAM,IAAI,eAAe,mBAAK,mBAAkB;AAErD,UAAI,mBAAK,6BAA4B;AACnC,2BAAK,4BAAL;AACA,2BAAK,4BAA6B;AAAA,MACpC;AAEA,aAAO,+BAA+B;AAAA,IACxC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUM,YAAY,IAMG;AAAA,+CANH;AAAA,MAChB;AAAA,MACA;AAAA,IACF,GAGqB;AACnB,YAAM,SAAS;AACf,YAAM,aAAa,MAAM,OAAO,IAAI,UAAUG,aAAY,OAAO;AACjE,YAAM,QAAe,UAAU,MAAM,OAAO,IAAID,aAAY,OAAO,IAAI,OAAO;AAC9E,YAAM,SAAS,CAAC,EAAE,SAAS,WAAW,CAAC;AAEvC,YAAM,sBAAK,8DAAL,WAAiC,QAAQ,OAAO;AAGtD,UAAI,KAAK,oBAAoB,YAAY;AACvC,eAAO,QAAQ,QAAQ;AAAA,MACzB;AAEA,YAAM,oBAAoB,wBAAwB,mBAAK,eAAc;AAErE,UACE,kBAAkB,SAAS,UAAU,KACrC,mBAAKF,QAAM,kBAAkB,cAAc,KAC3C;AACA,cAAM,sBAAK,gDAAL,WAAmB;AACzB,8BAAK,kDAAL,WAAqB;AACrB,cAAM,sBAAK,8DAAL,WAAiC,QAAQ,OAAO;AACtD,eAAO,QAAQ,QAAQ;AAAA,MACzB;AAEA,UAAI;AACF,cAAM,SAAS,MAAM,sBAAK,2CAAL,WAAc;AAAA,UACjC,QAAQ;AAAA,UACR;AAAA,QACF;AAIA,cAAM,kBAAkB;AACxB,YAAI,mDAAiB,OAAO;AAC1B,gBAAM,IAAI,MAAM,gBAAgB,MAAM,OAAO;AAAA,QAC/C;AAEA,cAAM,sBAAK,8DAAL,WAAiC,QAAQ,OAAO;AACtD,YAAK,OAA+B,WAAW,MAAM;AAEnD,gBAAM,sBAAK,gDAAL,WAAmB;AACzB,gCAAK,kDAAL,WAAqB;AAAA,QACvB;AACA,eAAO;AAAA,MACT,SAAS,OAAO;AACd,cAAM,sBAAK,2DAAL,WAA8B,QAAQ,OAAO,QAAQ;AAE3D,YAAK,MAAgB,QAAQ,SAAS,uBAAuB,GAAG;AAC9D,iBAAO,sBAAK,oDAAL,WAAuB;AAAA,QAChC;AACA,cAAM;AAAA,MACR;AAAA,IACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAyTA,cAA+B;AAC7B,WAAO,mBAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,aAA8B;AAC5B,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,aAAkC;AAChC,WAAO,mBAAK,WAAU;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,IAAI,WAAsB;AACxB,WAAO,mBAAK,WAAU;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,kBAAuC;AACzC,WAAO,mBAAK,WAAU;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,kBAAmC;AACrC,WAAO,mBAAK,WAAU;AAAA,EACxB;AACF;AAj0BWA,SAAA;AAGA;AAGT;AAGS;AAGA;AAGA;AAGT;AApBK;AAAA;AAAA;AAAA;AAAA;AAAA;AA2EL,oBAAe,WAAsB;AACnC,SAAQ,mBAAKA,QAAc;AAC7B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUA,yBAAoB,SAClB,QACA,OACA,QAIA;AACA,SAAO;AAAA,IACL;AAAA,IACA,SAAS,EAAE,QAAQ,OAAO;AAAA,EAC5B;AACF;AASM,gCAA2B,SAC/B,QACA,OACA,QACe;AAAA;AACf,UAAM,cAAc,sBAAK,kDAAL;AACpB,QAAI;AACF,YAAM,gBAAgB,sBAAK,uDAAL,WAA0B,QAAQ,OAAO;AAC/D,YAAM,QAAQ,MAAM;AAAA,QAClB;AAAA,QACA,mBAAKA,QAAM;AAAA,QACX;AAAA,MACF;AACA,gBAAU,MAAM,qCAAqC,KAAK;AAAA,IAC5D,SAAS,OAAO;AACd,aAAO,0DAA0D,KAAK;AAAA,IACxE;AAAA,EACF;AAAA;AASM,gCAA2B,SAC/B,QACA,OACA,QACe;AAAA;AACf,UAAM,cAAc,sBAAK,kDAAL;AACpB,QAAI;AACF,YAAM,gBAAgB,sBAAK,uDAAL,WAA0B,QAAQ,OAAO;AAC/D,YAAM,QAAQ,MAAM;AAAA,QAClB;AAAA,QACA,mBAAKA,QAAM;AAAA,QACX;AAAA,MACF;AACA,gBAAU,MAAM,qCAAqC,KAAK;AAAA,IAC5D,SAAS,OAAO;AACd,aAAO,0DAA0D,KAAK;AAAA,IACxE;AAAA,EACF;AAAA;AAUM,6BAAwB,SAC5B,QACA,OACA,QACA,OACe;AAAA;AACf,UAAM,cAAc,sBAAK,kDAAL;AACpB,QAAI;AACF,YAAM,gBAAgB,sBAAK,uDAAL,WAA0B,QAAQ,OAAO;AAC/D,YAAM,QAAQ,MAAM;AAAA,QAClB;AAAA,QACA,mBAAKA,QAAM;AAAA,QACX;AAAA,MACF;AACA,YAAM,cAAc,iBAAiB,KAAK;AAC1C,UAAI,aAAa;AACf,kBAAU,MAAM,oCAAoC,KAAK;AAAA,MAC3D,OAAO;AACL,kBAAU,MAAM,kCAAkC,KAAK;AAAA,MACzD;AAAA,IACF,SAAQ;AACN,aAAO,yDAAyD,KAAK;AAAA,IACvE;AAAA,EACF;AAAA;AAQM,wBAAmB,SAAC,mBAAwC;AAAA;AAChE,QAAI;AACF,YAAM,gBACJ,MAAM,mBAAKA,QAAM,QAAQ,QAAQ,IAAI,eAAe;AACtD,UAAI,eAAe;AACjB,cAAM,UAAe,KAAK,MAAM,aAAa;AAG7C,YAAI,kBAAkB,SAAS,OAAO,GAAG;AACvC,iBAAO;AAAA,QACT;AAAA,MACF;AAAA,IACF,SAAS,OAAO;AACd,aAAO,mCAAmC,KAAK;AAAA,IACjD;AAGA,WAAO,kBAAkB,CAAC;AAAA,EAC5B;AAAA;AAgRM,wBAAmB,SACvB,SACwC;AAAA;AACxC,WAAO,oCAAoC,QAAQ,MAAM,EAAE;AAE3D,QAAI,gBAAgB,SAAS,QAAQ,MAAM,GAAG;AAE5C,aAAO,QAAQ;AAAA,QACb,IAAI;AAAA,UACF,WAAW,QAAQ,MAAM;AAAA,QAC3B;AAAA,MACF;AAAA,IACF;AAEA,QAAI,QAAQ,WAAW,4BAA4B;AACjD,aAAO,KAAK,WAAW;AAAA,IACzB;AAEA,QAAI,iBAAiB,OAAO,GAAG;AAM7B,YAAM,+BACJ,QAAQ,WAAW;AAErB,YAAM,EAAE,QAAQ,OAAO,IAAI;AAC3B,YAAM,2BAA2B;AACjC,YAAM,QAAe,UAAU,wBAAwB;AAEvD,YAAM,sBAAK,8DAAL,WAAiC,QAAQ,OAAO;AAEtD,UAAI;AACF,cAAM,SAAS,MAAM,KAAK,QAAQ;AAAA,UAChC,UAAU,CAAC,wBAAwB;AAAA,UACnC,cAAc;AAAA,QAChB,CAAC;AACD,cAAM,sBAAK,8DAAL,WAAiC,QAAQ,OAAO;AACtD,eAAO;AAAA,MACT,SAAS,OAAO;AACd,cAAM,sBAAK,2DAAL,WAA8B,QAAQ,OAAO,QAAQ;AAC3D,cAAM;AAAA,MACR;AAAA,IACF;AAEA,QAAI,qBAAqB,OAAO,GAAG;AACjC,aAAO,KAAK,YAAY;AAAA,QACtB,SAAS,SAAS,QAAQ,OAAO,CAAC,EAAE,SAAS,EAAE;AAAA,MACjD,CAAC;AAAA,IACH;AAEA,QAAI,kBAAkB,OAAO,GAAG;AAC9B,aAAO,sBAAK,oDAAL,WAAuB,QAAQ,OAAO,CAAC;AAAA,IAChD;AAEA,QAAI,kBAAkB,OAAO,GAAG;AAC9B,YAAM,EAAE,OAAO,IAAI;AACnB,YAAM,UAAU,mBAAK,WAAU,kBAC3BE,aAAY,mBAAK,WAAU,eAAe,IAC1C;AACJ,YAAM,QAAe,UAAU,OAAO;AACtC,YAAM,SAAoB,CAAC;AAE3B,YAAM,sBAAK,8DAAL,WAAiC,QAAQ,OAAO;AACtD,YAAM,sBAAK,8DAAL,WAAiC,QAAQ,OAAO;AAEtD,aAAO,mBAAK,WAAU;AAAA,IACxB;AAEA,WAAO,0DAA0D,OAAO;AACxE,WAAO,QAAQ,QAAQ;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA;AAKA,0BAAqB,WAAS;AAC5B,qBAAK,WAAU,WAAW,CAAC;AAC3B,qBAAK,WAAU,kBAAkB;AACnC;AASM,sBAAiB,SACrB,oBACe;AAAA;AA/oBnB;AAgpBI,WAAO,2BAA2B,EAAE,mBAAmB,CAAC;AACxD,UAAM,SAAS;AAEf,QAAI,CAAC,oBAAoB;AACvB,YAAM,IAAI,MAAM,+BAA+B;AAAA,IACjD;AAGA,UAAM,UAAU,mBAAmB,UAC/B,SAAS,mBAAmB,SAAS,EAAE,IACvCA,cAAY,wBAAK,WAAU,oBAAf,YAAkC,KAAK;AACvD,UAAM,QAAe,UAAU,OAAO;AACtC,UAAM,SAAS,CAAC,kBAAkB;AAElC,UAAM,sBAAK,8DAAL,WAAiC,QAAQ,OAAO;AAEtD,QAAI;AACF,YAAM,SAAS,MAAM,sBAAK,2CAAL,WAAc;AAAA,QACjC,QAAQ;AAAA,QACR;AAAA,MACF;AAEA,UAAK,OAA+B,WAAW,MAAM;AAEnD,cAAM,sBAAK,gDAAL,WAAmB;AACzB,8BAAK,kDAAL,WAAqB;AAAA,MACvB;AACA,YAAM,sBAAK,8DAAL,WAAiC,QAAQ,OAAO;AAAA,IACxD,SAAS,OAAO;AACd,YAAM,sBAAK,2DAAL,WAA8B,QAAQ,OAAO,QAAQ;AAC3D,YAAM;AAAA,IACR;AAAA,EACF;AAAA;AAUM,aAAQ,SAAC,SAGM;AAAA;AACnB,WAAO,8CAA8C,OAAO;AAC5D,UAAM,SAAS,mBAAKF,QAAM,UAAU,mBAAmB,OAAO;AAC9D,QACE,QAAQ,WAAW,6BACnB,QAAQ,WAAW,8BACnB;AACA,yBAAKA,QAAM,qBAAqB;AAAA,IAClC;AACA,WAAO;AAAA,EACT;AAAA;AAOM,kBAAa,SAAC,SAAsC;AAAA;AACxD,QAAI;AACF,YAAM,aAAa,MAAM,OAAO,IAAI,UAAUG,aAAY,OAAO;AACjE,YAAM,mBAAKH,QAAM,QAAQ,QAAQ;AAAA,QAC/B;AAAA,QACA,KAAK,UAAU,UAAU;AAAA,MAC3B;AAAA,IACF,SAAS,OAAO;AACd,aAAO,yBAAyB,KAAK;AAAA,IACvC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA,oBAAe,SAAC,SAA6B;AA/tB/C;AAguBI,QAAM,aAAa,MAAM,OAAO,IAAI,UAAUG,aAAY,OAAO;AACjE,MAAI,eAAe,mBAAK,WAAU,iBAAiB;AACjD;AAAA,EACF;AACA,SAAO,yBAAyB,EAAE,QAAQ,CAAC;AAC3C,qBAAK,WAAU,kBAAkB;AACjC,iCAAK,oBAAL,mBAAqB,iBAArB,4BAAoC;AACpC,qBAAK,WAAU,KAAK,gBAAgB,UAAU;AAChD;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA,uBAAkB,SAAC,UAA2B;AA/uBhD;AAgvBI,SAAO,4BAA4B,QAAQ;AAC3C,qBAAK,WAAU,WAAW;AAC1B,qBAAK,WAAU,KAAK,mBAAmB,QAAQ;AAC/C,iCAAK,oBAAL,mBAAqB,oBAArB,4BAAuC;AACzC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASA,eAAU,SAAC;AAAA,EACT;AAAA,EACA;AACF,GAGS;AAnwBX;AAowBI,SAAO,oBAAoB,EAAE,SAAS,SAAS,CAAC;AAChD,QAAM,OAAO;AAAA,IACX,SAAS,MAAM,OAAO,IAAI,UAAUA,aAAY,OAAO;AAAA,IACvD;AAAA,EACF;AAEA,qBAAK,WAAU,KAAK,WAAW,IAAI;AACnC,iCAAK,oBAAL,mBAAqB,YAArB,4BAA+B;AAE/B,wBAAK,kDAAL,WAAqB;AACrB,wBAAK,qDAAL,WAAwB;AAC1B;AAAA;AAAA;AAAA;AAAA;AAMA,kBAAa,WAAS;AArxBxB;AAsxBI,SAAO,qBAAqB;AAC5B,qBAAK,WAAU,KAAK,YAAY;AAChC,iCAAK,oBAAL,mBAAqB,eAArB;AAEA,wBAAK,qDAAL,WAAwB,CAAC;AAC3B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQA,kBAAa,SAAC,KAAmB;AAnyBnC;AAoyBI,SAAO,wBAAwB,GAAG;AAClC,qBAAK,WAAU,KAAK,eAAe,GAAG;AACtC,iCAAK,oBAAL,mBAAqB,eAArB,4BAAkC;AACpC;AAWM,4BAAuB,WAAkB;AAAA;AAI7C,QAAI,mBAAKH,QAAM,WAAW,eAAe,mBAAKA,QAAM,WAAW,cAAc;AAC3E;AAAA,IACF;AACA,QAAI;AACF,YAAM,WAAW,MAAM,mBAAKA,QAAM,UAAU,QAO1C;AAAA,QACA,QAAQ;AAAA,MACV,CAAC;AAED,YAAM,EAAE,cAAc,IAAI,SAAS;AAEnC,yBAAK,gBAAiB;AACtB,YAAM,oBAAoB,wBAAwB,aAAa;AAK/D,YAAM,oBAAoB,MAAM,mBAAKA,QAAM,UAAU,mBAGnD,EAAE,QAAQ,gBAAgB,QAAQ,CAAC,EAAE,CAAC;AAExC,YAAM,UAAU,MAAM,sBAAK,sDAAL,WAAyB;AAE/C,UAAI,kBAAkB,UAAU,kBAAkB,QAAQ;AACxD,8BAAK,6CAAL,WAAgB;AAAA,UACd;AAAA,UACA,UAAU,kBAAkB;AAAA,QAC9B;AAAA,MACF;AAAA,IACF,SAAS,OAAO;AACd,cAAQ,MAAM,qCAAqC,KAAK;AAAA,IAC1D;AAAA,EACF;AAAA;AAqEF,SAAsB,gBACpB,SAI6B;AAAA;AAv6B/B;AAw6BE,gBAAY,QAAQ,KAAK;AAEzB,WAAO,+CAA+C,OAAO;AAG7D,QACE,GAAC,aAAQ,QAAR,mBAAa,sBACd,OAAO,KAAK,QAAQ,IAAI,iBAAiB,EAAE,WAAW,GACtD;AACA,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAEA,6BAAyB,QAAQ,IAAI,mBAAmB,mBAAmB;AAE3E,QAAI;AACF,YAAM,OAAO,MAAM,uBAAuB,iCACrC,UADqC;AAAA,QAExC,KAAK;AAAA,UACH,mBAAmB,QAAQ,IAAI;AAAA,QACjC;AAAA,MACF,EAAC;AAED,aAAO,IAAI,mBAAmB;AAAA,QAC5B;AAAA,QACA,eAAe,QAAQ;AAAA,QACvB,mBAAmB,QAAQ,IAAI;AAAA,MACjC,CAAC;AAAA,IACH,SAAS,OAAO;AACd,cAAQ,MAAM,uCAAuC,KAAK;AAC1D,YAAM;AAAA,IACR;AAAA,EACF;AAAA;","names":["numberToHex","hexToNumber","_a","_core","_a","hexToNumber","numberToHex"]}
1
+ {"version":3,"sources":["../../../src/index.ts","../../../src/connect.ts","../../../src/constants.ts","../../../src/logger.ts","../../../src/provider.ts","../../../src/utils/caip.ts","../../../src/utils/type-guards.ts"],"sourcesContent":["export { getInfuraRpcUrls } from '@metamask/connect-multichain';\nexport { createEVMClient, type MetamaskConnectEVM } from './connect';\nexport type { EIP1193Provider } from './provider';\n\nexport type * from './types';\n","import { analytics } from '@metamask/analytics';\nimport type { Caip25CaveatValue } from '@metamask/chain-agnostic-permission';\nimport type {\n ConnectionStatus,\n MultichainCore,\n MultichainOptions,\n Scope,\n SessionData,\n} from '@metamask/connect-multichain';\nimport {\n createMultichainClient,\n getWalletActionAnalyticsProperties,\n isRejectionError,\n TransportType,\n} from '@metamask/connect-multichain';\nimport {\n numberToHex,\n hexToNumber,\n isHexString as isHex,\n} from '@metamask/utils';\n\nimport { IGNORED_METHODS } from './constants';\nimport { enableDebug, logger } from './logger';\nimport { EIP1193Provider } from './provider';\nimport type {\n AddEthereumChainParameter,\n Address,\n CaipAccountId,\n EventHandlers,\n Hex,\n MetamaskConnectEVMOptions,\n ProviderRequest,\n ProviderRequestInterceptor,\n} from './types';\nimport { getPermittedEthChainIds } from './utils/caip';\nimport {\n isAccountsRequest,\n isAddChainRequest,\n isChainIdRequest,\n isConnectRequest,\n isSwitchChainRequest,\n validSupportedChainsUrls,\n} from './utils/type-guards';\n\nconst DEFAULT_CHAIN_ID = 1;\nconst CHAIN_STORE_KEY = 'cache_eth_chainId';\n\n/** The options for the connect method */\ntype ConnectOptions = {\n /** The account to connect to */\n account?: string | undefined;\n /** Whether to force a request regardless of an existing session */\n forceRequest?: boolean;\n /** All available chain IDs in the dapp */\n chainIds: number[];\n};\n\n/**\n * The MetamaskConnectEVM class provides an EIP-1193 compatible interface for connecting\n * to MetaMask and interacting with Ethereum Virtual Machine (EVM) networks.\n *\n * This class serves as a modern replacement for MetaMask SDK V1, offering enhanced\n * functionality and cross-platform compatibility. It wraps the Multichain SDK to provide\n * a simplified, EIP-1193 compliant API for dapp developers.\n *\n * Key features:\n * - EIP-1193 provider interface for seamless integration with existing dapp code\n * - Automatic session recovery when reloading or opening in new tabs\n * - Chain switching with automatic chain addition if not configured\n * - Event-driven architecture with support for connect, disconnect, accountsChanged, and chainChanged events\n * - Cross-platform support for browser extensions and mobile applications\n * - Built-in handling of common Ethereum methods (eth_accounts, wallet_switchEthereumChain, etc.)\n *\n * @example\n * ```typescript\n * const sdk = await createEVMClient({\n * dapp: { name: 'My DApp', url: 'https://mydapp.com' }\n * });\n *\n * await sdk.connect({ chainId: 1 });\n * const provider = await sdk.getProvider();\n * const accounts = await provider.request({ method: 'eth_accounts' });\n * ```\n */\nexport class MetamaskConnectEVM {\n /** The core instance of the Multichain SDK */\n readonly #core: MultichainCore;\n\n /** An instance of the EIP-1193 provider interface */\n readonly #provider: EIP1193Provider;\n\n /** The session scopes currently permitted */\n #sessionScopes: SessionData['sessionScopes'] = {};\n\n /** Optional event handlers for the EIP-1193 provider events. */\n readonly #eventHandlers?: Partial<EventHandlers> | undefined;\n\n /** The handler for the wallet_sessionChanged event */\n readonly #sessionChangedHandler: (session?: SessionData) => void;\n\n /** The handler for the display_uri event */\n readonly #displayUriHandler: (uri: string) => void;\n\n /** The clean-up function for the notification handler */\n #removeNotificationHandler?: () => void;\n\n /**\n * Creates a new MetamaskConnectEVM instance.\n *\n * @param options - The options for the MetamaskConnectEVM instance\n * @param options.core - The core instance of the Multichain SDK\n * @param options.eventHandlers - Optional event handlers for EIP-1193 provider events\n */\n constructor({ core, eventHandlers }: MetamaskConnectEVMOptions) {\n this.#core = core;\n\n this.#provider = new EIP1193Provider(\n core,\n this.#requestInterceptor.bind(this),\n );\n\n this.#eventHandlers = eventHandlers;\n\n /**\n * Handles the wallet_sessionChanged event.\n * Updates the internal connection state with the new session data.\n *\n * @param session - The session data\n */\n this.#sessionChangedHandler = (session): void => {\n logger('event: wallet_sessionChanged', session);\n this.#sessionScopes = session?.sessionScopes ?? {};\n };\n this.#core.on(\n 'wallet_sessionChanged',\n this.#sessionChangedHandler.bind(this),\n );\n\n /**\n * Handles the display_uri event.\n * Forwards the QR code URI to the provider for custom UI implementations.\n */\n this.#displayUriHandler = this.#onDisplayUri.bind(this);\n this.#core.on('display_uri', this.#displayUriHandler);\n\n // Attempt to set the permitted accounts if there's a valid previous session.\n // TODO (wenfix): does it make sense to catch here?\n this.#attemptSessionRecovery().catch((error) => {\n console.error('Error attempting session recovery', error);\n });\n\n logger('Connect/EVM constructor completed');\n }\n\n /**\n * Gets the core options for analytics checks.\n *\n * @returns The multichain options from the core instance\n */\n #getCoreOptions(): MultichainOptions {\n return (this.#core as any).options as MultichainOptions;\n }\n\n /**\n * Creates invoke options for analytics tracking.\n *\n * @param method - The RPC method name\n * @param scope - The CAIP chain ID scope\n * @param params - The method parameters\n * @returns Invoke options object for analytics\n */\n #createInvokeOptions(\n method: string,\n scope: Scope,\n params: unknown[],\n ): {\n scope: Scope;\n request: { method: string; params: unknown[] };\n } {\n return {\n scope,\n request: { method, params },\n };\n }\n\n /**\n * Tracks a wallet action requested event.\n *\n * @param method - The RPC method name\n * @param scope - The CAIP chain ID scope\n * @param params - The method parameters\n */\n async #trackWalletActionRequested(\n method: string,\n scope: Scope,\n params: unknown[],\n ): Promise<void> {\n const coreOptions = this.#getCoreOptions();\n try {\n const invokeOptions = this.#createInvokeOptions(method, scope, params);\n const props = await getWalletActionAnalyticsProperties(\n coreOptions,\n this.#core.storage,\n invokeOptions,\n );\n analytics.track('mmconnect_wallet_action_requested', props);\n } catch (error) {\n logger('Error tracking mmconnect_wallet_action_requested event', error);\n }\n }\n\n /**\n * Tracks a wallet action succeeded event.\n *\n * @param method - The RPC method name\n * @param scope - The CAIP chain ID scope\n * @param params - The method parameters\n */\n async #trackWalletActionSucceeded(\n method: string,\n scope: Scope,\n params: unknown[],\n ): Promise<void> {\n const coreOptions = this.#getCoreOptions();\n try {\n const invokeOptions = this.#createInvokeOptions(method, scope, params);\n const props = await getWalletActionAnalyticsProperties(\n coreOptions,\n this.#core.storage,\n invokeOptions,\n );\n analytics.track('mmconnect_wallet_action_succeeded', props);\n } catch (error) {\n logger('Error tracking mmconnect_wallet_action_succeeded event', error);\n }\n }\n\n /**\n * Tracks a wallet action failed or rejected event based on the error.\n *\n * @param method - The RPC method name\n * @param scope - The CAIP chain ID scope\n * @param params - The method parameters\n * @param error - The error that occurred\n */\n async #trackWalletActionFailed(\n method: string,\n scope: Scope,\n params: unknown[],\n error: unknown,\n ): Promise<void> {\n const coreOptions = this.#getCoreOptions();\n try {\n const invokeOptions = this.#createInvokeOptions(method, scope, params);\n const props = await getWalletActionAnalyticsProperties(\n coreOptions,\n this.#core.storage,\n invokeOptions,\n );\n const isRejection = isRejectionError(error);\n if (isRejection) {\n analytics.track('mmconnect_wallet_action_rejected', props);\n } else {\n analytics.track('mmconnect_wallet_action_failed', props);\n }\n } catch {\n logger('Error tracking wallet action rejected or failed event', error);\n }\n }\n\n /**\n * Gets the currently selected chainId from cache, or falls back to the first permitted chain.\n *\n * @param permittedChainIds - Array of permitted chain IDs in hex format\n * @returns The selected chainId (hex string)\n */\n async #getSelectedChainId(permittedChainIds: Hex[]): Promise<Hex> {\n try {\n const cachedChainId =\n await this.#core.storage.adapter.get(CHAIN_STORE_KEY);\n if (cachedChainId) {\n const chainId: Hex = JSON.parse(cachedChainId);\n\n // Validate that the cached chainId is in the permitted chains list\n if (permittedChainIds.includes(chainId)) {\n return chainId;\n }\n }\n } catch (error) {\n logger('Error retrieving cached chainId', error);\n }\n\n // Fallback to the first permitted chain if cache retrieval failed or returned an invalid chain\n return permittedChainIds[0];\n }\n\n /**\n * Connects to the wallet with the specified chain ID and optional account.\n *\n * @param options - The connection options\n * @param options.account - Optional specific account to connect to\n * @param options.forceRequest - Wwhether to force a request regardless of an existing session\n * @param options.chainIds - Array of chain IDs to connect to\n * @returns A promise that resolves with the connected accounts and chain ID\n */\n async connect(\n { account, forceRequest, chainIds }: ConnectOptions = {\n chainIds: [DEFAULT_CHAIN_ID],\n },\n ): Promise<{ accounts: Address[]; chainId: number }> {\n logger('request: connect', { account });\n\n if (!chainIds || chainIds.length === 0) {\n throw new Error('chainIds must be an array of at least one chain ID');\n }\n\n const caipChainIds = Array.from(\n new Set(chainIds.concat(DEFAULT_CHAIN_ID) ?? [DEFAULT_CHAIN_ID]),\n ).map((id) => `eip155:${id}`);\n\n const caipAccountIds = account\n ? caipChainIds.map((caipChainId) => `${caipChainId}:${account}`)\n : [];\n\n await this.#core.connect(\n caipChainIds as Scope[],\n caipAccountIds as CaipAccountId[],\n {},\n forceRequest,\n );\n\n const hexPermittedChainIds = getPermittedEthChainIds(this.#sessionScopes);\n\n const initialAccounts = await this.#core.transport.sendEip1193Message<\n { method: 'eth_accounts'; params: [] },\n { result: string[]; id: number; jsonrpc: '2.0' }\n >({ method: 'eth_accounts', params: [] });\n\n const chainId = await this.#getSelectedChainId(hexPermittedChainIds);\n\n this.#onConnect({\n chainId,\n accounts: initialAccounts.result as Address[],\n });\n\n // Remove previous notification handler if it exists\n this.#removeNotificationHandler?.();\n\n this.#removeNotificationHandler = this.#core.transport.onNotification(\n (notification) => {\n // @ts-expect-error TODO: address this\n if (notification?.method === 'metamask_accountsChanged') {\n // @ts-expect-error TODO: address this\n const accounts = notification?.params;\n logger('transport-event: accountsChanged', accounts);\n this.#onAccountsChanged(accounts);\n }\n\n // @ts-expect-error TODO: address this\n if (notification?.method === 'metamask_chainChanged') {\n // @ts-expect-error TODO: address this\n const notificationChainId = Number(notification?.params?.chainId);\n logger('transport-event: chainChanged', notificationChainId);\n // Cache the chainId for persistence across page refreshes\n this.#cacheChainId(notificationChainId).catch((error) => {\n logger('Error caching chainId in notification handler', error);\n });\n this.#onChainChanged(notificationChainId);\n }\n },\n );\n\n logger('fulfilled-request: connect', {\n chainId: chainIds[0],\n accounts: this.#provider.accounts,\n });\n\n // TODO: update required here since accounts and chainId are now promises\n return {\n accounts: this.#provider.accounts,\n chainId: hexToNumber(chainId),\n };\n }\n\n /**\n * Connects to the wallet and signs a message using personal_sign.\n *\n * @param options - The connection options\n * @param options.message - The message to sign after connecting\n * @param options.chainIds - Optional chain IDs to connect to (defaults to ethereum mainnet if not provided)\n * @returns A promise that resolves with the signature\n * @throws Error if the selected account is not available after timeout\n */\n async connectAndSign({\n message,\n chainIds,\n }: {\n message: string;\n chainIds?: number[];\n }): Promise<string> {\n const { accounts, chainId } = await this.connect({\n chainIds: chainIds ?? [DEFAULT_CHAIN_ID],\n });\n\n const result = (await this.#provider.request({\n method: 'personal_sign',\n params: [accounts[0], message],\n })) as string;\n\n this.#eventHandlers?.connectAndSign?.({\n accounts,\n chainId,\n signResponse: result,\n });\n\n return result;\n }\n\n /**\n * Connects to the wallet and invokes a method with specified parameters.\n *\n * @param options - The options for connecting and invoking the method\n * @param options.method - The method name to invoke\n * @param options.params - The parameters to pass to the method, or a function that receives the account and returns params\n * @param options.chainIds - Optional chain IDs to connect to (defaults to ethereum mainnet if not provided)\n * @param options.account - Optional specific account to connect to\n * @param options.forceRequest - Whether to force a request regardless of an existing session\n * @returns A promise that resolves with the result of the method invocation\n * @throws Error if the selected account is not available after timeout (for methods that require an account)\n */\n async connectWith({\n method,\n params,\n chainIds,\n account,\n forceRequest,\n }: {\n method: string;\n params: unknown[] | ((account: Address) => unknown[]);\n chainIds?: number[];\n account?: string | undefined;\n forceRequest?: boolean;\n }): Promise<unknown> {\n const { accounts: connectedAccounts, chainId: connectedChainId } =\n await this.connect({\n chainIds: chainIds ?? [DEFAULT_CHAIN_ID],\n account,\n forceRequest,\n });\n\n const resolvedParams =\n typeof params === 'function' ? params(connectedAccounts[0]) : params;\n\n const result = await this.#provider.request({\n method,\n params: resolvedParams,\n });\n\n this.#eventHandlers?.connectWith?.({\n accounts: connectedAccounts,\n chainId: connectedChainId,\n connectWithResponse: result,\n });\n\n return result;\n }\n\n /**\n * Disconnects from the wallet by revoking the session and cleaning up event listeners.\n *\n * @returns A promise that resolves when disconnection is complete\n */\n async disconnect(): Promise<void> {\n logger('request: disconnect');\n\n await this.#core.disconnect();\n this.#onDisconnect();\n this.#clearConnectionState();\n\n this.#core.off('wallet_sessionChanged', this.#sessionChangedHandler);\n this.#core.off('display_uri', this.#displayUriHandler);\n\n if (this.#removeNotificationHandler) {\n this.#removeNotificationHandler();\n this.#removeNotificationHandler = undefined;\n }\n\n logger('fulfilled-request: disconnect');\n }\n\n /**\n * Switches the Ethereum chain. Will track state internally whenever possible.\n *\n * @param options - The options for the switch chain request\n * @param options.chainId - The chain ID to switch to\n * @param options.chainConfiguration - The chain configuration to use in case the chain is not present by the wallet\n * @returns The result of the switch chain request\n */\n async switchChain({\n chainId,\n chainConfiguration,\n }: {\n chainId: number | Hex;\n chainConfiguration?: AddEthereumChainParameter;\n }): Promise<unknown> {\n const method = 'wallet_switchEthereumChain';\n const hexChainId = isHex(chainId) ? chainId : numberToHex(chainId);\n const scope: Scope = `eip155:${isHex(chainId) ? hexToNumber(chainId) : chainId}`;\n const params = [{ chainId: hexChainId }];\n\n await this.#trackWalletActionRequested(method, scope, params);\n\n // TODO (wenfix): better way to return here other than resolving.\n if (this.selectedChainId === hexChainId) {\n return Promise.resolve();\n }\n\n const permittedChainIds = getPermittedEthChainIds(this.#sessionScopes);\n\n if (\n permittedChainIds.includes(hexChainId) &&\n this.#core.transportType === TransportType.MWP\n ) {\n await this.#cacheChainId(hexChainId);\n this.#onChainChanged(hexChainId);\n await this.#trackWalletActionSucceeded(method, scope, params);\n return Promise.resolve();\n }\n\n try {\n const result = await this.#request({\n method: 'wallet_switchEthereumChain',\n params,\n });\n\n // When using the MWP transport, the error is returned instead of thrown,\n // so we force it into the catch block here.\n const resultWithError = result as { error?: { message: string } };\n if (resultWithError?.error) {\n throw new Error(resultWithError.error.message);\n }\n\n await this.#trackWalletActionSucceeded(method, scope, params);\n if ((result as { result: unknown }).result === null) {\n // result is successful we eagerly call onChainChanged to update the provider's selected chain ID.\n await this.#cacheChainId(hexChainId);\n this.#onChainChanged(hexChainId);\n }\n return result;\n } catch (error) {\n await this.#trackWalletActionFailed(method, scope, params, error);\n // Fallback to add the chain if its not configured in the wallet.\n if ((error as Error).message.includes('Unrecognized chain ID')) {\n return this.#addEthereumChain(chainConfiguration);\n }\n throw error;\n }\n }\n\n /**\n * Handles several EIP-1193 requests that require special handling\n * due the nature of the Multichain SDK.\n *\n * @param request - The request object containing the method and params\n * @returns The result of the request or undefined if the request is ignored\n */\n async #requestInterceptor(\n request: ProviderRequest,\n ): ReturnType<ProviderRequestInterceptor> {\n logger(`Intercepting request for method: ${request.method}`);\n\n if (IGNORED_METHODS.includes(request.method)) {\n // TODO: replace with correct method unsupported provider error\n return Promise.reject(\n new Error(\n `Method: ${request.method} is not supported by Metamask Connect/EVM`,\n ),\n );\n }\n\n if (request.method === 'wallet_revokePermissions') {\n return this.disconnect();\n }\n\n if (isConnectRequest(request)) {\n // When calling wallet_requestPermissions, we need to force a new session request to prompt\n // the user for accounts, because internally the Multichain SDK will check if\n // the user is already connected and skip the request if so, unless we\n // explicitly request a specific account. This is needed to workaround\n // wallet_requestPermissions not requesting specific accounts.\n const shouldForceConnectionRequest =\n request.method === 'wallet_requestPermissions';\n\n const { method, params } = request;\n const initiallySelectedChainId = DEFAULT_CHAIN_ID;\n const scope: Scope = `eip155:${initiallySelectedChainId}`;\n\n await this.#trackWalletActionRequested(method, scope, params);\n\n try {\n const result = await this.connect({\n chainIds: [initiallySelectedChainId],\n forceRequest: shouldForceConnectionRequest,\n });\n await this.#trackWalletActionSucceeded(method, scope, params);\n return result;\n } catch (error) {\n await this.#trackWalletActionFailed(method, scope, params, error);\n throw error;\n }\n }\n\n if (isSwitchChainRequest(request)) {\n return this.switchChain({\n chainId: parseInt(request.params[0].chainId, 16),\n });\n }\n\n if (isAddChainRequest(request)) {\n return this.#addEthereumChain(request.params[0]);\n }\n\n if (isAccountsRequest(request)) {\n const { method } = request;\n const chainId = this.#provider.selectedChainId\n ? hexToNumber(this.#provider.selectedChainId)\n : 1;\n const scope: Scope = `eip155:${chainId}`;\n const params: unknown[] = [];\n\n await this.#trackWalletActionRequested(method, scope, params);\n await this.#trackWalletActionSucceeded(method, scope, params);\n\n return this.#provider.accounts;\n }\n\n if (isChainIdRequest(request)) {\n return this.#provider.selectedChainId;\n }\n\n logger('Request not intercepted, forwarding to default handler', request);\n return Promise.resolve();\n }\n\n /**\n * Clears the internal connection state: accounts and chainId\n */\n #clearConnectionState(): void {\n this.#provider.accounts = [];\n this.#provider.selectedChainId = undefined as unknown as number;\n }\n\n /**\n * Adds an Ethereum chain using the latest chain configuration received from\n * a switchEthereumChain request\n *\n * @param chainConfiguration - The chain configuration to use in case the chain is not present by the wallet\n * @returns Nothing\n */\n async #addEthereumChain(\n chainConfiguration?: AddEthereumChainParameter,\n ): Promise<void> {\n logger('addEthereumChain called', { chainConfiguration });\n const method = 'wallet_addEthereumChain';\n\n if (!chainConfiguration) {\n throw new Error('No chain configuration found.');\n }\n\n // Get chain ID from config or use current chain\n const chainId = chainConfiguration.chainId\n ? parseInt(chainConfiguration.chainId, 16)\n : hexToNumber(this.#provider.selectedChainId ?? '0x1');\n const scope: Scope = `eip155:${chainId}`;\n const params = [chainConfiguration];\n\n await this.#trackWalletActionRequested(method, scope, params);\n\n try {\n const result = await this.#request({\n method: 'wallet_addEthereumChain',\n params,\n });\n\n if ((result as { result: unknown }).result === null) {\n // if result is successful we eagerly call onChainChanged to update the provider's selected chain ID.\n await this.#cacheChainId(chainId);\n this.#onChainChanged(chainId);\n }\n await this.#trackWalletActionSucceeded(method, scope, params);\n } catch (error) {\n await this.#trackWalletActionFailed(method, scope, params, error);\n throw error;\n }\n }\n\n /**\n * Submits a request to the EIP-1193 provider\n *\n * @param request - The request object containing the method and params\n * @param request.method - The method to request\n * @param request.params - The parameters to pass to the method\n * @returns The result of the request\n */\n async #request(request: {\n method: string;\n params: unknown[];\n }): Promise<unknown> {\n logger('direct request to metamask-provider called', request);\n const result = this.#core.transport.sendEip1193Message(request);\n if (\n request.method === 'wallet_addEthereumChain' ||\n request.method === 'wallet_switchEthereumChain'\n ) {\n this.#core.openDeeplinkIfNeeded();\n }\n return result;\n }\n\n /**\n * Caches the chainId to storage for persistence across page refreshes.\n *\n * @param chainId - The chain ID (can be hex string or number)\n */\n async #cacheChainId(chainId: Hex | number): Promise<void> {\n try {\n const hexChainId = isHex(chainId) ? chainId : numberToHex(chainId);\n await this.#core.storage.adapter.set(\n CHAIN_STORE_KEY,\n JSON.stringify(hexChainId),\n );\n } catch (error) {\n logger('Error caching chainId', error);\n }\n }\n\n /**\n * Handles chain change events and updates the provider's selected chain ID.\n *\n * @param chainId - The new chain ID (can be hex string or number)\n */\n #onChainChanged(chainId: Hex | number): void {\n const hexChainId = isHex(chainId) ? chainId : numberToHex(chainId);\n if (hexChainId === this.#provider.selectedChainId) {\n return;\n }\n logger('handler: chainChanged', { chainId });\n this.#provider.selectedChainId = chainId;\n this.#eventHandlers?.chainChanged?.(hexChainId);\n this.#provider.emit('chainChanged', hexChainId);\n }\n\n /**\n * Handles accounts change events and updates the provider's accounts list.\n *\n * @param accounts - The new list of permitted accounts\n */\n #onAccountsChanged(accounts: Address[]): void {\n logger('handler: accountsChanged', accounts);\n this.#provider.accounts = accounts;\n this.#provider.emit('accountsChanged', accounts);\n this.#eventHandlers?.accountsChanged?.(accounts);\n }\n\n /**\n * Handles connection events and emits the connect event to listeners.\n *\n * @param options - The connection options\n * @param options.chainId - The chain ID of the connection (can be hex string or number)\n * @param options.accounts - The accounts of the connection\n */\n #onConnect({\n chainId,\n accounts,\n }: {\n chainId: Hex | number;\n accounts: Address[];\n }): void {\n logger('handler: connect', { chainId, accounts });\n const data = {\n chainId: isHex(chainId) ? chainId : numberToHex(chainId),\n accounts,\n };\n\n this.#provider.emit('connect', data);\n this.#eventHandlers?.connect?.(data);\n\n this.#onChainChanged(chainId);\n this.#onAccountsChanged(accounts);\n }\n\n /**\n * Handles disconnection events and emits the disconnect event to listeners.\n * Also clears accounts by triggering an accountsChanged event with an empty array.\n */\n #onDisconnect(): void {\n logger('handler: disconnect');\n this.#provider.emit('disconnect');\n this.#eventHandlers?.disconnect?.();\n\n this.#onAccountsChanged([]);\n }\n\n /**\n * Handles display_uri events and emits them to the provider.\n * This allows consumers to display their own custom QR code UI.\n *\n * @param uri - The deeplink URI to be displayed as a QR code\n */\n #onDisplayUri(uri: string): void {\n logger('handler: display_uri', uri);\n this.#provider.emit('display_uri', uri);\n this.#eventHandlers?.displayUri?.(uri);\n }\n\n /**\n * Will trigger an accountsChanged event if there's a valid previous session.\n * This is needed because the accountsChanged event is not triggered when\n * revising, reloading or opening the app in a new tab.\n *\n * This works by checking by checking events received during MultichainCore initialization,\n * and if there's a wallet_sessionChanged event, it will add a 1-time listener for eth_accounts results\n * and trigger an accountsChanged event if the results are valid accounts.\n */\n async #attemptSessionRecovery(): Promise<void> {\n // Skip session recovery if transport is not initialized yet.\n // Transport is only initialized when there's a stored session or after connect() is called.\n // Only attempt recovery if we're in a state where transport should be available.\n if (this.#core.status !== 'connected' && this.#core.status !== 'connecting') {\n return;\n }\n try {\n const response = await this.#core.transport.request<\n { method: 'wallet_getSession' },\n {\n result: { sessionScopes: Caip25CaveatValue };\n id: number;\n jsonrpc: '2.0';\n }\n >({\n method: 'wallet_getSession',\n });\n\n const { sessionScopes } = response.result;\n\n this.#sessionScopes = sessionScopes;\n const permittedChainIds = getPermittedEthChainIds(sessionScopes);\n\n // Instead of using the accounts we get back from calling `wallet_getSession`\n // we get permitted accounts from `eth_accounts` to make sure we have them ordered by last selected account\n // and correctly set the currently selected account for the dapp\n const permittedAccounts = await this.#core.transport.sendEip1193Message<\n { method: 'eth_accounts'; params: [] },\n { result: Address[]; id: number; jsonrpc: '2.0' }\n >({ method: 'eth_accounts', params: [] });\n\n const chainId = await this.#getSelectedChainId(permittedChainIds);\n\n if (permittedChainIds.length && permittedAccounts.result) {\n this.#onConnect({\n chainId,\n accounts: permittedAccounts.result,\n });\n }\n } catch (error) {\n console.error('Error attempting session recovery', error);\n }\n }\n\n /**\n * Gets the EIP-1193 provider instance\n *\n * @returns The EIP-1193 provider instance\n */\n getProvider(): EIP1193Provider {\n return this.#provider;\n }\n\n /**\n * Gets the currently selected chain ID on the wallet\n *\n * @returns The currently selected chain ID or undefined if no chain is selected\n */\n getChainId(): Hex | undefined {\n return this.selectedChainId;\n }\n\n /**\n * Gets the currently selected account on the wallet\n *\n * @returns The currently selected account or undefined if no account is selected\n */\n getAccount(): Address | undefined {\n return this.#provider.selectedAccount;\n }\n\n // Convenience getters for the EIP-1193 provider\n /**\n * Gets the currently permitted accounts\n *\n * @returns The currently permitted accounts\n */\n get accounts(): Address[] {\n return this.#provider.accounts;\n }\n\n /**\n * Gets the currently selected account on the wallet\n *\n * @returns The currently selected account or undefined if no account is selected\n */\n get selectedAccount(): Address | undefined {\n return this.#provider.selectedAccount;\n }\n\n /**\n * Gets the currently selected chain ID on the wallet\n *\n * @returns The currently selected chain ID or undefined if no chain is selected\n */\n get selectedChainId(): Hex | undefined {\n return this.#provider.selectedChainId;\n }\n\n /**\n * Gets the current connection status\n *\n * @returns The current connection status\n */\n get status(): ConnectionStatus {\n return this.#core.status;\n }\n}\n\n/**\n * Creates a new Metamask Connect/EVM instance\n *\n * @param options - The options for the Metamask Connect/EVM layer\n * @param options.dapp - Dapp identification and branding settings\n * @param options.api - API configuration including read-only RPC map\n * @param options.api.supportedNetworks - A map of CAIP chain IDs to RPC URLs for read-only requests\n * @param options.eventEmitter - The event emitter to use for the Metamask Connect/EVM layer\n * @param options.eventHandlers - The event handlers to use for the Metamask Connect/EVM layer\n * @returns The Metamask Connect/EVM layer instance\n */\nexport async function createEVMClient(\n options: Pick<MultichainOptions, 'dapp' | 'api'> & {\n eventHandlers?: Partial<EventHandlers>;\n debug?: boolean;\n },\n): Promise<MetamaskConnectEVM> {\n enableDebug(options.debug);\n\n logger('Creating Metamask Connect/EVM with options:', options);\n\n // Validate that supportedNetworks is provided and not empty\n if (\n !options.api?.supportedNetworks ||\n Object.keys(options.api.supportedNetworks).length === 0\n ) {\n throw new Error(\n 'supportedNetworks is required and must contain at least one chain configuration',\n );\n }\n\n validSupportedChainsUrls(options.api.supportedNetworks, 'supportedNetworks');\n\n try {\n const core = await createMultichainClient({\n ...options,\n api: {\n supportedNetworks: options.api.supportedNetworks,\n },\n });\n\n return new MetamaskConnectEVM({\n core,\n eventHandlers: options.eventHandlers,\n supportedNetworks: options.api.supportedNetworks,\n });\n } catch (error) {\n console.error('Error creating Metamask Connect/EVM', error);\n throw error;\n }\n}\n","export const IGNORED_METHODS = [\n 'metamask_getProviderState',\n 'metamask_sendDomainMetadata',\n 'metamask_logWeb3ShimUsage',\n 'wallet_registerOnboarding',\n 'net_version',\n 'wallet_getPermissions',\n];\n\nexport const CONNECT_METHODS = [\n 'wallet_requestPermissions',\n 'eth_requestAccounts',\n];\n\nexport const ACCOUNTS_METHODS = ['eth_accounts', 'eth_coinbase'];\n\nexport const CHAIN_METHODS = ['eth_chainId'];\n\nexport const INTERCEPTABLE_METHODS = [\n ...ACCOUNTS_METHODS,\n ...IGNORED_METHODS,\n ...CONNECT_METHODS,\n ...CHAIN_METHODS,\n // These have bespoke handlers\n 'wallet_revokePermissions',\n 'wallet_switchEthereumChain',\n 'wallet_addEthereumChain',\n];\n","import {\n createLogger,\n enableDebug as debug,\n} from '@metamask/connect-multichain';\n\nconst namespace = 'metamask-connect:evm';\n\n// @ts-expect-error logger needs to be typed properly\nexport const logger = createLogger(namespace, '63');\n\nexport const enableDebug = (debugEnabled: boolean = false): void => {\n if (debugEnabled) {\n // @ts-expect-error logger needs to be typed properly\n debug(namespace);\n }\n};\n","import type { MultichainCore, Scope } from '@metamask/connect-multichain';\nimport { EventEmitter } from '@metamask/connect-multichain';\nimport { hexToNumber, numberToHex } from '@metamask/utils';\n\nimport { INTERCEPTABLE_METHODS } from './constants';\nimport { logger } from './logger';\nimport type {\n Address,\n EIP1193ProviderEvents,\n Hex,\n JsonRpcCallback,\n JsonRpcRequest,\n JsonRpcResponse,\n ProviderRequest,\n ProviderRequestInterceptor,\n} from './types';\n\n/**\n * EIP-1193 Provider wrapper around the Multichain SDK.\n */\nexport class EIP1193Provider extends EventEmitter<EIP1193ProviderEvents> {\n /** The core instance of the Multichain SDK */\n readonly #core: MultichainCore;\n\n /** Interceptor function to handle specific methods */\n readonly #requestInterceptor: ProviderRequestInterceptor;\n\n /** The currently permitted accounts */\n #accounts: Address[] = [];\n\n /** The currently selected chain ID on the wallet */\n #selectedChainId?: Hex | undefined;\n\n constructor(core: MultichainCore, interceptor: ProviderRequestInterceptor) {\n super();\n this.#core = core;\n this.#requestInterceptor = interceptor;\n\n // Bind all public methods to ensure `this` context is preserved\n // when methods are extracted or passed as callbacks.\n // This eliminates the need for Proxy wrappers in consumers.\n this.request = this.request.bind(this);\n this.sendAsync = this.sendAsync.bind(this);\n this.send = this.send.bind(this);\n\n // Bind inherited EventEmitter methods\n this.on = this.on.bind(this);\n this.off = this.off.bind(this);\n this.emit = this.emit.bind(this);\n this.once = this.once.bind(this);\n this.removeListener = this.removeListener.bind(this);\n this.listenerCount = this.listenerCount.bind(this);\n }\n\n /**\n * Performs a EIP-1193 request.\n *\n * @param request - The request object containing the method and params\n * @returns The result of the request\n */\n async request(request: ProviderRequest): Promise<unknown> {\n logger(\n `request: ${request.method} - chainId: ${this.selectedChainId}`,\n request.params,\n );\n /* Some methods require special handling, so we intercept them here\n * and handle them in MetamaskConnectEVM.requestInterceptor method. */\n if (INTERCEPTABLE_METHODS.includes(request.method)) {\n return this.#requestInterceptor?.(request);\n }\n\n if (!this.#selectedChainId) {\n // TODO: replace with a better error\n throw new Error('No chain ID selected');\n }\n\n const chainId = hexToNumber(this.#selectedChainId);\n const scope: Scope = `eip155:${chainId}`;\n\n // Validate that the chain is configured in supportedNetworks\n // This check is performed here to provide better error messages\n // The RpcClient will also validate, but this gives us a chance to provide\n // a clearer error message before the request is routed\n const coreOptions = (this.#core as any).options; // TODO: options is `protected readonly` property, this needs to be refactored so `any` type assertion is not necessary\n const supportedNetworks = coreOptions?.api?.supportedNetworks ?? {};\n if (!supportedNetworks[scope]) {\n throw new Error(\n `Chain ${scope} is not configured in supportedNetworks. Requests cannot be made to chains not explicitly configured in supportedNetworks.`,\n );\n }\n\n return this.#core.invokeMethod({\n scope,\n request: {\n method: request.method,\n params: request.params,\n },\n });\n }\n\n // Getters and setters\n public get selectedAccount(): Address | undefined {\n return this.accounts[0];\n }\n\n public set accounts(accounts: Address[]) {\n this.#accounts = accounts;\n }\n\n public get accounts(): Address[] {\n return this.#accounts;\n }\n\n public get selectedChainId(): Hex | undefined {\n return this.#selectedChainId;\n }\n\n public set selectedChainId(chainId: Hex | number | undefined) {\n const hexChainId =\n chainId && typeof chainId === 'number' ? numberToHex(chainId) : chainId;\n\n // Don't overwrite the selected chain ID with an undefined value\n if (!hexChainId) {\n return;\n }\n\n this.#selectedChainId = hexChainId as Hex;\n }\n\n // ==========================================\n // Legacy compatibility methods\n // ==========================================\n\n /**\n * Alias for selectedChainId for legacy compatibility.\n * Many dApps expect a `chainId` property on the provider.\n */\n public get chainId(): Hex | undefined {\n return this.selectedChainId;\n }\n\n /**\n * Legacy method for sending JSON-RPC requests.\n * @deprecated Use `request` instead. This method is provided for backwards compatibility.\n * @param request - The JSON-RPC request object\n * @param callback - Optional callback function. If provided, the method returns void.\n * @returns A promise resolving to the JSON-RPC response, or void if a callback is provided.\n */\n async sendAsync<TParams = unknown, TResult = unknown>(\n request: JsonRpcRequest<TParams>,\n callback?: JsonRpcCallback<TResult>,\n ): Promise<JsonRpcResponse<TResult> | void> {\n const id = request.id ?? 1;\n\n const promise = this.request({\n method: request.method,\n params: request.params as unknown,\n })\n .then(\n (result): JsonRpcResponse<TResult> => ({\n id,\n jsonrpc: '2.0',\n result: result as TResult,\n }),\n )\n .catch(\n (error): JsonRpcResponse<TResult> => ({\n id,\n jsonrpc: '2.0',\n error: {\n code: error.code ?? -32603,\n message: error.message ?? 'Internal error',\n data: error.data,\n },\n }),\n );\n\n if (callback) {\n promise\n .then((response) => {\n if (response.error) {\n callback(new Error(response.error.message), response);\n } else {\n callback(null, response);\n }\n })\n .catch((error) => {\n callback(error, null);\n });\n return;\n }\n\n return promise;\n }\n\n /**\n * Legacy method for sending JSON-RPC requests synchronously (callback-based).\n * @deprecated Use `request` instead. This method is provided for backwards compatibility.\n * @param request - The JSON-RPC request object\n * @param callback - The callback function to receive the response\n */\n send<TParams = unknown, TResult = unknown>(\n request: JsonRpcRequest<TParams>,\n callback: JsonRpcCallback<TResult>,\n ): void {\n this.sendAsync(request, callback);\n }\n}\n","import type { InternalScopesObject } from '@metamask/chain-agnostic-permission';\nimport {\n getPermittedEthChainIds as _getPermittedEthChainIds,\n getEthAccounts as _getEthAccounts,\n} from '@metamask/chain-agnostic-permission';\nimport type { SessionData } from '@metamask/connect-multichain';\n\nimport type { Address, Hex } from '../types';\n\n/**\n * Get the Ethereum accounts from the session data\n *\n * @param sessionScopes - The session scopes\n * @returns The Ethereum accounts\n */\nexport const getEthAccounts = (\n sessionScopes: SessionData['sessionScopes'] | undefined,\n): Address[] => {\n if (!sessionScopes) {\n return [];\n }\n\n return _getEthAccounts({\n requiredScopes: sessionScopes as InternalScopesObject,\n optionalScopes: sessionScopes as InternalScopesObject,\n });\n};\n\n/**\n * Get the permitted Ethereum chain IDs from the session scopes.\n * Wrapper around getPermittedEthChainIds from @metamask/chain-agnostic-permission\n *\n * @param sessionScopes - The session scopes\n * @returns The permitted Ethereum chain IDs\n */\nexport const getPermittedEthChainIds = (\n sessionScopes: SessionData['sessionScopes'] | undefined,\n): Hex[] => {\n if (!sessionScopes) {\n return [];\n }\n\n return _getPermittedEthChainIds({\n requiredScopes: sessionScopes as InternalScopesObject,\n optionalScopes: sessionScopes as InternalScopesObject,\n });\n};\n","import type { ProviderRequest } from '../types';\n\n/**\n * Type guard for connect-like requests:\n * - wallet_requestPermissions\n * - eth_requestAccounts\n *\n * @param req - The request object to check\n * @returns True if the request is a connect-like request, false otherwise\n */\nexport function isConnectRequest(req: ProviderRequest): req is Extract<\n ProviderRequest,\n {\n method: 'wallet_requestPermissions' | 'eth_requestAccounts';\n }\n> {\n return (\n req.method === 'wallet_requestPermissions' ||\n req.method === 'eth_requestAccounts'\n );\n}\n\n/**\n * Type guard for wallet_switchEthereumChain request.\n *\n * @param req - The request object to check\n * @returns True if the request is a wallet_switchEthereumChain request, false otherwise\n */\nexport function isSwitchChainRequest(\n req: ProviderRequest,\n): req is Extract<ProviderRequest, { method: 'wallet_switchEthereumChain' }> {\n return req.method === 'wallet_switchEthereumChain';\n}\n\n/**\n * Type guard for wallet_addEthereumChain request.\n *\n * @param req - The request object to check\n * @returns True if the request is a wallet_addEthereumChain request, false otherwise\n */\nexport function isAddChainRequest(\n req: ProviderRequest,\n): req is Extract<ProviderRequest, { method: 'wallet_addEthereumChain' }> {\n return req.method === 'wallet_addEthereumChain';\n}\n\n/**\n * Type guard for generic accounts request:\n * - eth_accounts\n * - eth_coinbase\n *\n * @param req - The request object to check\n * @returns True if the request is a generic accounts request, false otherwise\n */\nexport function isAccountsRequest(\n req: ProviderRequest,\n): req is Extract<\n ProviderRequest,\n { method: 'eth_accounts' | 'eth_coinbase' }\n> {\n return req.method === 'eth_accounts' || req.method === 'eth_coinbase';\n}\n\n/**\n * Type guard for generic eth_chainId request.\n *\n * @param req - The request object to check\n * @returns True if the request is a eth_chainId request, false otherwise\n */\nexport function isChainIdRequest(\n req: ProviderRequest,\n): req is Extract<ProviderRequest, { method: 'eth_chainId' }> {\n return req.method === 'eth_chainId';\n}\n\n/**\n * Validates that all values in a Record are valid URLs.\n *\n * @param record - The record to validate (e.g., supportedNetworks)\n * @param recordName - The name of the record for error messages\n * @throws Error if any values are invalid URLs\n */\nexport function validSupportedChainsUrls(\n record: Record<string, string>,\n recordName: string,\n): void {\n const invalidUrls: string[] = [];\n for (const [key, url] of Object.entries(record)) {\n try {\n // eslint-disable-next-line no-new\n new URL(url);\n } catch {\n invalidUrls.push(`${key}: ${url}`);\n }\n }\n\n if (invalidUrls.length > 0) {\n throw new Error(\n `${recordName} contains invalid URLs:\\n${invalidUrls.join('\\n')}`,\n );\n }\n}\n"],"mappings":"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","names":["numberToHex","hexToNumber","_a","_core","_a","hexToNumber","numberToHex"]}
@@ -1,4 +1,4 @@
1
- import type { MultichainOptions } from '@metamask/connect-multichain';
1
+ import type { ConnectionStatus, MultichainOptions } from '@metamask/connect-multichain';
2
2
  import { EIP1193Provider } from './provider';
3
3
  import type { AddEthereumChainParameter, Address, EventHandlers, Hex, MetamaskConnectEVMOptions } from './types';
4
4
  /** The options for the connect method */
@@ -146,6 +146,12 @@ export declare class MetamaskConnectEVM {
146
146
  * @returns The currently selected chain ID or undefined if no chain is selected
147
147
  */
148
148
  get selectedChainId(): Hex | undefined;
149
+ /**
150
+ * Gets the current connection status
151
+ *
152
+ * @returns The current connection status
153
+ */
154
+ get status(): ConnectionStatus;
149
155
  }
150
156
  /**
151
157
  * Creates a new Metamask Connect/EVM instance
@@ -1 +1 @@
1
- {"version":3,"file":"connect.d.ts","sourceRoot":"","sources":["../../src/connect.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAEV,iBAAiB,EAGlB,MAAM,8BAA8B,CAAC;AAetC,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,KAAK,EACV,yBAAyB,EACzB,OAAO,EAEP,aAAa,EACb,GAAG,EACH,yBAAyB,EAG1B,MAAM,SAAS,CAAC;AAajB,yCAAyC;AACzC,KAAK,cAAc,GAAG;IACpB,gCAAgC;IAChC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,mEAAmE;IACnE,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,0CAA0C;IAC1C,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,qBAAa,kBAAkB;;IAsB7B;;;;;;OAMG;gBACS,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE,yBAAyB;IAuL9D;;;;;;;;OAQG;IACG,OAAO,CACX,EAAE,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,GAAE,cAEpC,GACA,OAAO,CAAC;QAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IA2EpD;;;;;;;;OAQG;IACG,cAAc,CAAC,EACnB,OAAO,EACP,QAAQ,GACT,EAAE;QACD,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;KACrB,GAAG,OAAO,CAAC,MAAM,CAAC;IAmBnB;;;;;;;;;;;OAWG;IACG,WAAW,CAAC,EAChB,MAAM,EACN,MAAM,EACN,QAAQ,EACR,OAAO,EACP,YAAY,GACb,EAAE;QACD,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,EAAE,CAAC,CAAC;QACtD,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;QACpB,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAC7B,YAAY,CAAC,EAAE,OAAO,CAAC;KACxB,GAAG,OAAO,CAAC,OAAO,CAAC;IAyBpB;;;;OAIG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAkBjC;;;;;;;OAOG;IACG,WAAW,CAAC,EAChB,OAAO,EACP,kBAAkB,GACnB,EAAE;QACD,OAAO,EAAE,MAAM,GAAG,GAAG,CAAC;QACtB,kBAAkB,CAAC,EAAE,yBAAyB,CAAC;KAChD,GAAG,OAAO,CAAC,OAAO,CAAC;IAyWpB;;;;OAIG;IACH,WAAW,IAAI,eAAe;IAI9B;;;;OAIG;IACH,UAAU,IAAI,GAAG,GAAG,SAAS;IAI7B;;;;OAIG;IACH,UAAU,IAAI,OAAO,GAAG,SAAS;IAKjC;;;;OAIG;IACH,IAAI,QAAQ,IAAI,OAAO,EAAE,CAExB;IAED;;;;OAIG;IACH,IAAI,eAAe,IAAI,OAAO,GAAG,SAAS,CAEzC;IAED;;;;OAIG;IACH,IAAI,eAAe,IAAI,GAAG,GAAG,SAAS,CAErC;CACF;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,IAAI,CAAC,iBAAiB,EAAE,MAAM,GAAG,KAAK,CAAC,GAAG;IACjD,aAAa,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IACvC,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,GACA,OAAO,CAAC,kBAAkB,CAAC,CAkC7B"}
1
+ {"version":3,"file":"connect.d.ts","sourceRoot":"","sources":["../../src/connect.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,gBAAgB,EAEhB,iBAAiB,EAGlB,MAAM,8BAA8B,CAAC;AAetC,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,KAAK,EACV,yBAAyB,EACzB,OAAO,EAEP,aAAa,EACb,GAAG,EACH,yBAAyB,EAG1B,MAAM,SAAS,CAAC;AAcjB,yCAAyC;AACzC,KAAK,cAAc,GAAG;IACpB,gCAAgC;IAChC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,mEAAmE;IACnE,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,0CAA0C;IAC1C,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,qBAAa,kBAAkB;;IAsB7B;;;;;;OAMG;gBACS,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE,yBAAyB;IAuL9D;;;;;;;;OAQG;IACG,OAAO,CACX,EAAE,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,GAAE,cAEpC,GACA,OAAO,CAAC;QAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IA2EpD;;;;;;;;OAQG;IACG,cAAc,CAAC,EACnB,OAAO,EACP,QAAQ,GACT,EAAE;QACD,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;KACrB,GAAG,OAAO,CAAC,MAAM,CAAC;IAmBnB;;;;;;;;;;;OAWG;IACG,WAAW,CAAC,EAChB,MAAM,EACN,MAAM,EACN,QAAQ,EACR,OAAO,EACP,YAAY,GACb,EAAE;QACD,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,EAAE,CAAC,CAAC;QACtD,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;QACpB,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAC7B,YAAY,CAAC,EAAE,OAAO,CAAC;KACxB,GAAG,OAAO,CAAC,OAAO,CAAC;IAyBpB;;;;OAIG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAkBjC;;;;;;;OAOG;IACG,WAAW,CAAC,EAChB,OAAO,EACP,kBAAkB,GACnB,EAAE;QACD,OAAO,EAAE,MAAM,GAAG,GAAG,CAAC;QACtB,kBAAkB,CAAC,EAAE,yBAAyB,CAAC;KAChD,GAAG,OAAO,CAAC,OAAO,CAAC;IA6WpB;;;;OAIG;IACH,WAAW,IAAI,eAAe;IAI9B;;;;OAIG;IACH,UAAU,IAAI,GAAG,GAAG,SAAS;IAI7B;;;;OAIG;IACH,UAAU,IAAI,OAAO,GAAG,SAAS;IAKjC;;;;OAIG;IACH,IAAI,QAAQ,IAAI,OAAO,EAAE,CAExB;IAED;;;;OAIG;IACH,IAAI,eAAe,IAAI,OAAO,GAAG,SAAS,CAEzC;IAED;;;;OAIG;IACH,IAAI,eAAe,IAAI,GAAG,GAAG,SAAS,CAErC;IAED;;;;OAIG;IACH,IAAI,MAAM,IAAI,gBAAgB,CAE7B;CACF;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,IAAI,CAAC,iBAAiB,EAAE,MAAM,GAAG,KAAK,CAAC,GAAG;IACjD,aAAa,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IACvC,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,GACA,OAAO,CAAC,kBAAkB,CAAC,CAkC7B"}
@@ -26,7 +26,7 @@ import { IGNORED_METHODS } from './constants';
26
26
  import { enableDebug, logger } from './logger';
27
27
  import { EIP1193Provider } from './provider';
28
28
  import { getPermittedEthChainIds } from './utils/caip';
29
- import { isAccountsRequest, isAddChainRequest, isConnectRequest, isSwitchChainRequest, validSupportedChainsUrls, } from './utils/type-guards';
29
+ import { isAccountsRequest, isAddChainRequest, isChainIdRequest, isConnectRequest, isSwitchChainRequest, validSupportedChainsUrls, } from './utils/type-guards';
30
30
  const DEFAULT_CHAIN_ID = 1;
31
31
  const CHAIN_STORE_KEY = 'cache_eth_chainId';
32
32
  /**
@@ -357,6 +357,14 @@ export class MetamaskConnectEVM {
357
357
  get selectedChainId() {
358
358
  return __classPrivateFieldGet(this, _MetamaskConnectEVM_provider, "f").selectedChainId;
359
359
  }
360
+ /**
361
+ * Gets the current connection status
362
+ *
363
+ * @returns The current connection status
364
+ */
365
+ get status() {
366
+ return __classPrivateFieldGet(this, _MetamaskConnectEVM_core, "f").status;
367
+ }
360
368
  }
361
369
  _MetamaskConnectEVM_core = new WeakMap(), _MetamaskConnectEVM_provider = new WeakMap(), _MetamaskConnectEVM_sessionScopes = new WeakMap(), _MetamaskConnectEVM_eventHandlers = new WeakMap(), _MetamaskConnectEVM_sessionChangedHandler = new WeakMap(), _MetamaskConnectEVM_displayUriHandler = new WeakMap(), _MetamaskConnectEVM_removeNotificationHandler = new WeakMap(), _MetamaskConnectEVM_instances = new WeakSet(), _MetamaskConnectEVM_getCoreOptions = function _MetamaskConnectEVM_getCoreOptions() {
362
370
  return __classPrivateFieldGet(this, _MetamaskConnectEVM_core, "f").options;
@@ -478,6 +486,9 @@ _MetamaskConnectEVM_core = new WeakMap(), _MetamaskConnectEVM_provider = new Wea
478
486
  yield __classPrivateFieldGet(this, _MetamaskConnectEVM_instances, "m", _MetamaskConnectEVM_trackWalletActionSucceeded).call(this, method, scope, params);
479
487
  return __classPrivateFieldGet(this, _MetamaskConnectEVM_provider, "f").accounts;
480
488
  }
489
+ if (isChainIdRequest(request)) {
490
+ return __classPrivateFieldGet(this, _MetamaskConnectEVM_provider, "f").selectedChainId;
491
+ }
481
492
  logger('Request not intercepted, forwarding to default handler', request);
482
493
  return Promise.resolve();
483
494
  });
@@ -1 +1 @@
1
- {"version":3,"file":"connect.js","sourceRoot":"","sources":["../../src/connect.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"connect.js","sourceRoot":"","sources":["../../src/connect.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  export declare const IGNORED_METHODS: string[];
2
2
  export declare const CONNECT_METHODS: string[];
3
3
  export declare const ACCOUNTS_METHODS: string[];
4
+ export declare const CHAIN_METHODS: string[];
4
5
  export declare const INTERCEPTABLE_METHODS: string[];
5
6
  //# sourceMappingURL=constants.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,eAAe,UAO3B,CAAC;AAEF,eAAO,MAAM,eAAe,UAG3B,CAAC;AAEF,eAAO,MAAM,gBAAgB,UAAmC,CAAC;AAEjE,eAAO,MAAM,qBAAqB,UAQjC,CAAC"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,eAAe,UAO3B,CAAC;AAEF,eAAO,MAAM,eAAe,UAG3B,CAAC;AAEF,eAAO,MAAM,gBAAgB,UAAmC,CAAC;AAEjE,eAAO,MAAM,aAAa,UAAkB,CAAC;AAE7C,eAAO,MAAM,qBAAqB,UASjC,CAAC"}
@@ -11,10 +11,12 @@ export const CONNECT_METHODS = [
11
11
  'eth_requestAccounts',
12
12
  ];
13
13
  export const ACCOUNTS_METHODS = ['eth_accounts', 'eth_coinbase'];
14
+ export const CHAIN_METHODS = ['eth_chainId'];
14
15
  export const INTERCEPTABLE_METHODS = [
15
16
  ...ACCOUNTS_METHODS,
16
17
  ...IGNORED_METHODS,
17
18
  ...CONNECT_METHODS,
19
+ ...CHAIN_METHODS,
18
20
  // These have bespoke handlers
19
21
  'wallet_revokePermissions',
20
22
  'wallet_switchEthereumChain',
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,2BAA2B;IAC3B,6BAA6B;IAC7B,2BAA2B;IAC3B,2BAA2B;IAC3B,aAAa;IACb,uBAAuB;CACxB,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,2BAA2B;IAC3B,qBAAqB;CACtB,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC;AAEjE,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,GAAG,gBAAgB;IACnB,GAAG,eAAe;IAClB,GAAG,eAAe;IAClB,8BAA8B;IAC9B,0BAA0B;IAC1B,4BAA4B;IAC5B,yBAAyB;CAC1B,CAAC"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,2BAA2B;IAC3B,6BAA6B;IAC7B,2BAA2B;IAC3B,2BAA2B;IAC3B,aAAa;IACb,uBAAuB;CACxB,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,2BAA2B;IAC3B,qBAAqB;CACtB,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC;AAEjE,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,aAAa,CAAC,CAAC;AAE7C,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,GAAG,gBAAgB;IACnB,GAAG,eAAe;IAClB,GAAG,eAAe;IAClB,GAAG,aAAa;IAChB,8BAA8B;IAC9B,0BAA0B;IAC1B,4BAA4B;IAC5B,yBAAyB;CAC1B,CAAC"}
@@ -39,6 +39,15 @@ export declare function isAddChainRequest(req: ProviderRequest): req is Extract<
39
39
  export declare function isAccountsRequest(req: ProviderRequest): req is Extract<ProviderRequest, {
40
40
  method: 'eth_accounts' | 'eth_coinbase';
41
41
  }>;
42
+ /**
43
+ * Type guard for generic eth_chainId request.
44
+ *
45
+ * @param req - The request object to check
46
+ * @returns True if the request is a eth_chainId request, false otherwise
47
+ */
48
+ export declare function isChainIdRequest(req: ProviderRequest): req is Extract<ProviderRequest, {
49
+ method: 'eth_chainId';
50
+ }>;
42
51
  /**
43
52
  * Validates that all values in a Record are valid URLs.
44
53
  *
@@ -1 +1 @@
1
- {"version":3,"file":"type-guards.d.ts","sourceRoot":"","sources":["../../../src/utils/type-guards.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAEhD;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,eAAe,GAAG,GAAG,IAAI,OAAO,CACpE,eAAe,EACf;IACE,MAAM,EAAE,2BAA2B,GAAG,qBAAqB,CAAC;CAC7D,CACF,CAKA;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,eAAe,GACnB,GAAG,IAAI,OAAO,CAAC,eAAe,EAAE;IAAE,MAAM,EAAE,4BAA4B,CAAA;CAAE,CAAC,CAE3E;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,eAAe,GACnB,GAAG,IAAI,OAAO,CAAC,eAAe,EAAE;IAAE,MAAM,EAAE,yBAAyB,CAAA;CAAE,CAAC,CAExE;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,eAAe,GACnB,GAAG,IAAI,OAAO,CACf,eAAe,EACf;IAAE,MAAM,EAAE,cAAc,GAAG,cAAc,CAAA;CAAE,CAC5C,CAEA;AAED;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC9B,UAAU,EAAE,MAAM,GACjB,IAAI,CAgBN"}
1
+ {"version":3,"file":"type-guards.d.ts","sourceRoot":"","sources":["../../../src/utils/type-guards.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAEhD;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,eAAe,GAAG,GAAG,IAAI,OAAO,CACpE,eAAe,EACf;IACE,MAAM,EAAE,2BAA2B,GAAG,qBAAqB,CAAC;CAC7D,CACF,CAKA;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,eAAe,GACnB,GAAG,IAAI,OAAO,CAAC,eAAe,EAAE;IAAE,MAAM,EAAE,4BAA4B,CAAA;CAAE,CAAC,CAE3E;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,eAAe,GACnB,GAAG,IAAI,OAAO,CAAC,eAAe,EAAE;IAAE,MAAM,EAAE,yBAAyB,CAAA;CAAE,CAAC,CAExE;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,eAAe,GACnB,GAAG,IAAI,OAAO,CACf,eAAe,EACf;IAAE,MAAM,EAAE,cAAc,GAAG,cAAc,CAAA;CAAE,CAC5C,CAEA;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,eAAe,GACnB,GAAG,IAAI,OAAO,CAAC,eAAe,EAAE;IAAE,MAAM,EAAE,aAAa,CAAA;CAAE,CAAC,CAE5D;AAED;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC9B,UAAU,EAAE,MAAM,GACjB,IAAI,CAgBN"}
@@ -39,6 +39,15 @@ export function isAddChainRequest(req) {
39
39
  export function isAccountsRequest(req) {
40
40
  return req.method === 'eth_accounts' || req.method === 'eth_coinbase';
41
41
  }
42
+ /**
43
+ * Type guard for generic eth_chainId request.
44
+ *
45
+ * @param req - The request object to check
46
+ * @returns True if the request is a eth_chainId request, false otherwise
47
+ */
48
+ export function isChainIdRequest(req) {
49
+ return req.method === 'eth_chainId';
50
+ }
42
51
  /**
43
52
  * Validates that all values in a Record are valid URLs.
44
53
  *
@@ -1 +1 @@
1
- {"version":3,"file":"type-guards.js","sourceRoot":"","sources":["../../../src/utils/type-guards.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAoB;IAMnD,OAAO,CACL,GAAG,CAAC,MAAM,KAAK,2BAA2B;QAC1C,GAAG,CAAC,MAAM,KAAK,qBAAqB,CACrC,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAClC,GAAoB;IAEpB,OAAO,GAAG,CAAC,MAAM,KAAK,4BAA4B,CAAC;AACrD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAC/B,GAAoB;IAEpB,OAAO,GAAG,CAAC,MAAM,KAAK,yBAAyB,CAAC;AAClD,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,iBAAiB,CAC/B,GAAoB;IAKpB,OAAO,GAAG,CAAC,MAAM,KAAK,cAAc,IAAI,GAAG,CAAC,MAAM,KAAK,cAAc,CAAC;AACxE,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,wBAAwB,CACtC,MAA8B,EAC9B,UAAkB;IAElB,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAChD,IAAI,CAAC;YACH,kCAAkC;YAClC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QACf,CAAC;QAAC,WAAM,CAAC;YACP,WAAW,CAAC,IAAI,CAAC,GAAG,GAAG,KAAK,GAAG,EAAE,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IAED,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CACb,GAAG,UAAU,4BAA4B,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAClE,CAAC;IACJ,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"type-guards.js","sourceRoot":"","sources":["../../../src/utils/type-guards.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAoB;IAMnD,OAAO,CACL,GAAG,CAAC,MAAM,KAAK,2BAA2B;QAC1C,GAAG,CAAC,MAAM,KAAK,qBAAqB,CACrC,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAClC,GAAoB;IAEpB,OAAO,GAAG,CAAC,MAAM,KAAK,4BAA4B,CAAC;AACrD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAC/B,GAAoB;IAEpB,OAAO,GAAG,CAAC,MAAM,KAAK,yBAAyB,CAAC;AAClD,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,iBAAiB,CAC/B,GAAoB;IAKpB,OAAO,GAAG,CAAC,MAAM,KAAK,cAAc,IAAI,GAAG,CAAC,MAAM,KAAK,cAAc,CAAC;AACxE,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAC9B,GAAoB;IAEpB,OAAO,GAAG,CAAC,MAAM,KAAK,aAAa,CAAC;AACtC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,wBAAwB,CACtC,MAA8B,EAC9B,UAAkB;IAElB,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAChD,IAAI,CAAC;YACH,kCAAkC;YAClC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QACf,CAAC;QAAC,WAAM,CAAC;YACP,WAAW,CAAC,IAAI,CAAC,GAAG,GAAG,KAAK,GAAG,EAAE,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IAED,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CACb,GAAG,UAAU,4BAA4B,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAClE,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -1,4 +1,4 @@
1
- import { MultichainCore, EventEmitter, MultichainOptions } from '@metamask/connect-multichain';
1
+ import { MultichainCore, EventEmitter, MultichainOptions, ConnectionStatus } from '@metamask/connect-multichain';
2
2
  export { getInfuraRpcUrls } from '@metamask/connect-multichain';
3
3
 
4
4
  type Hex = `0x${string}`;
@@ -305,6 +305,12 @@ declare class MetamaskConnectEVM {
305
305
  * @returns The currently selected chain ID or undefined if no chain is selected
306
306
  */
307
307
  get selectedChainId(): Hex | undefined;
308
+ /**
309
+ * Gets the current connection status
310
+ *
311
+ * @returns The current connection status
312
+ */
313
+ get status(): ConnectionStatus;
308
314
  }
309
315
  /**
310
316
  * Creates a new Metamask Connect/EVM instance
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@metamask/connect-evm",
3
- "version": "0.2.0",
3
+ "version": "0.3.0",
4
4
  "description": "EVM Layer for MetaMask Connect",
5
5
  "keywords": [
6
6
  "MetaMask",
@@ -56,7 +56,7 @@
56
56
  "dependencies": {
57
57
  "@metamask/analytics": "^0.2.0",
58
58
  "@metamask/chain-agnostic-permission": "^1.2.2",
59
- "@metamask/connect-multichain": "^0.5.0",
59
+ "@metamask/connect-multichain": "^0.5.1",
60
60
  "@metamask/utils": "^11.8.1"
61
61
  },
62
62
  "devDependencies": {