@metamask/connect-evm 0.5.0 → 0.7.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 +22 -1
- package/README.md +17 -17
- package/dist/browser/es/connect-evm.mjs +43 -30
- package/dist/browser/es/connect-evm.mjs.map +1 -1
- package/dist/src/connect.d.ts +3 -2
- package/dist/src/connect.d.ts.map +1 -1
- package/dist/src/connect.js +36 -19
- package/dist/src/connect.js.map +1 -1
- package/dist/types/index.d.ts +3 -2
- package/package.json +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,23 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.7.0]
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- Enable specifying the integration type for analytics. Defaults to `direct`. ([#213](https://github.com/MetaMask/connect-monorepo/pull/213))
|
|
15
|
+
- Pass `connect-evm` package version to `createMultichainClient` via the `versions` option so it appears in analytics events ([#206](https://github.com/MetaMask/connect-monorepo/pull/206))
|
|
16
|
+
|
|
17
|
+
### Fixed
|
|
18
|
+
|
|
19
|
+
- Fix an issue where `connect` would always return the default chain id regardless of other chains being specified. This also affected `connectWith` and `connectAndSign` ([#205](https://github.com/MetaMask/connect-monorepo/pull/205))
|
|
20
|
+
|
|
21
|
+
## [0.6.0]
|
|
22
|
+
|
|
23
|
+
### Added
|
|
24
|
+
|
|
25
|
+
- Bump `@metamask/connect-multichain` to `^0.8.0` ([#203](https://github.com/MetaMask/connect-monorepo/pull/203))
|
|
26
|
+
|
|
10
27
|
## [0.5.0]
|
|
11
28
|
|
|
12
29
|
### Changed
|
|
@@ -18,6 +35,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
18
35
|
- `createEVMClient()` param option `api.supportedNetworks` now expects hex chain IDs as keys (e.g., `'0x1'`) instead of CAIP chain IDs
|
|
19
36
|
- Event handler types for `connectAndSign` and `connectWith` now use `Hex` for `chainId`
|
|
20
37
|
- **BREAKING** `getInfuraRpcUrls` now returns a rpc url map keyed by hex chain ID rather than CAIP Chain ID ([#152](https://github.com/MetaMask/connect-monorepo/pull/152))
|
|
38
|
+
- **BREAKING** `disconnect()` now revokes only `eip155:*` scopes instead of revoking the entire multichain session. Non-EVM scopes (for example Solana) are preserved. ([#157](https://github.com/MetaMask/connect-monorepo/pull/157))
|
|
39
|
+
- **BREAKING** EIP-1193 `connect` event payload now includes accounts: `{ chainId: Hex; accounts: Address[] }` (previously `{ chainId: Hex }`). ([#157](https://github.com/MetaMask/connect-monorepo/pull/157))
|
|
21
40
|
- The `debug` option param used by `createEVMClient()` now enables console debug logs of the underlying `MultichainClient` instance ([#149](https://github.com/MetaMask/connect-monorepo/pull/149))
|
|
22
41
|
- update `connect()` and `createEVMClient()` typings to be more accurate ([#153](https://github.com/MetaMask/connect-monorepo/pull/153))
|
|
23
42
|
- update `switchChain()` to return `Promise<void>` ([#153](https://github.com/MetaMask/connect-monorepo/pull/153))
|
|
@@ -119,7 +138,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
119
138
|
|
|
120
139
|
- Initial release ([#58](https://github.com/MetaMask/connect-monorepo/pull/58))
|
|
121
140
|
|
|
122
|
-
[Unreleased]: https://github.com/MetaMask/connect-monorepo/compare/@metamask/connect-evm@0.
|
|
141
|
+
[Unreleased]: https://github.com/MetaMask/connect-monorepo/compare/@metamask/connect-evm@0.7.0...HEAD
|
|
142
|
+
[0.7.0]: https://github.com/MetaMask/connect-monorepo/compare/@metamask/connect-evm@0.6.0...@metamask/connect-evm@0.7.0
|
|
143
|
+
[0.6.0]: https://github.com/MetaMask/connect-monorepo/compare/@metamask/connect-evm@0.5.0...@metamask/connect-evm@0.6.0
|
|
123
144
|
[0.5.0]: https://github.com/MetaMask/connect-monorepo/compare/@metamask/connect-evm@0.4.1...@metamask/connect-evm@0.5.0
|
|
124
145
|
[0.4.1]: https://github.com/MetaMask/connect-monorepo/compare/@metamask/connect-evm@0.4.0...@metamask/connect-evm@0.4.1
|
|
125
146
|
[0.4.0]: https://github.com/MetaMask/connect-monorepo/compare/@metamask/connect-evm@0.3.1...@metamask/connect-evm@0.4.0
|
package/README.md
CHANGED
|
@@ -216,11 +216,11 @@ Connects to MetaMask wallet.
|
|
|
216
216
|
|
|
217
217
|
**Parameters**
|
|
218
218
|
|
|
219
|
-
| Name | Type | Required | Description
|
|
220
|
-
| ---------------------- | --------- | -------- |
|
|
221
|
-
| `options.chainIds` | `Hex[]` | No | Array of hex chain IDs to request permission for (defaults to `['0x1']` if not provided) |
|
|
222
|
-
| `options.account` | `string` | No | Specific account address to connect
|
|
223
|
-
| `options.forceRequest` | `boolean` | No | Force a new connection request even if already connected
|
|
219
|
+
| Name | Type | Required | Description |
|
|
220
|
+
| ---------------------- | --------- | -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
221
|
+
| `options.chainIds` | `Hex[]` | No | Array of hex chain IDs to request permission for (defaults to `['0x1']` if not provided). Note: Ethereum mainnet (`0x1`) is always included in the permission request regardless of what is passed. The **first** entry in the array becomes the active chain returned by the call. |
|
|
222
|
+
| `options.account` | `string` | No | Specific account address to connect |
|
|
223
|
+
| `options.forceRequest` | `boolean` | No | Force a new connection request even if already connected |
|
|
224
224
|
|
|
225
225
|
**Returns**
|
|
226
226
|
|
|
@@ -240,10 +240,10 @@ Connects and immediately signs a message using `personal_sign`.
|
|
|
240
240
|
|
|
241
241
|
**Parameters**
|
|
242
242
|
|
|
243
|
-
| Name | Type | Required | Description
|
|
244
|
-
| ------------------ | -------- | -------- |
|
|
245
|
-
| `options.message` | `string` | Yes | The message to sign after connecting
|
|
246
|
-
| `options.chainIds` | `Hex[]` | No | Hex chain IDs to
|
|
243
|
+
| Name | Type | Required | Description |
|
|
244
|
+
| ------------------ | -------- | -------- | --------------------------------------------------------------------------------------------------------------------------- |
|
|
245
|
+
| `options.message` | `string` | Yes | The message to sign after connecting |
|
|
246
|
+
| `options.chainIds` | `Hex[]` | No | Hex chain IDs to request permission for (defaults to `['0x1']`). The first entry becomes the active chain used for signing. |
|
|
247
247
|
|
|
248
248
|
**Returns**
|
|
249
249
|
|
|
@@ -262,13 +262,13 @@ Connects and immediately invokes a method with specified parameters.
|
|
|
262
262
|
|
|
263
263
|
**Parameters**
|
|
264
264
|
|
|
265
|
-
| Name | Type | Required | Description
|
|
266
|
-
| ---------------------- | ------------------------------------------------ | -------- |
|
|
267
|
-
| `options.method` | `string` | Yes | The RPC method name to invoke
|
|
268
|
-
| `options.params` | `unknown[] \| ((account: Address) => unknown[])` | Yes | Method parameters, or a function that receives the connected account and returns params
|
|
269
|
-
| `options.chainIds` | `Hex[]` | No | Hex chain IDs to
|
|
270
|
-
| `options.account` | `string` | No | Specific account to connect
|
|
271
|
-
| `options.forceRequest` | `boolean` | No | Force a new connection request
|
|
265
|
+
| Name | Type | Required | Description |
|
|
266
|
+
| ---------------------- | ------------------------------------------------ | -------- | ----------------------------------------------------------------------------------------------------------------------------------- |
|
|
267
|
+
| `options.method` | `string` | Yes | The RPC method name to invoke |
|
|
268
|
+
| `options.params` | `unknown[] \| ((account: Address) => unknown[])` | Yes | Method parameters, or a function that receives the connected account and returns params |
|
|
269
|
+
| `options.chainIds` | `Hex[]` | No | Hex chain IDs to request permission for (defaults to `['0x1']`). The first entry becomes the active chain used for the method call. |
|
|
270
|
+
| `options.account` | `string` | No | Specific account to connect |
|
|
271
|
+
| `options.forceRequest` | `boolean` | No | Force a new connection request |
|
|
272
272
|
|
|
273
273
|
**Returns**
|
|
274
274
|
|
|
@@ -290,7 +290,7 @@ const result = await client.connectWith({
|
|
|
290
290
|
|
|
291
291
|
##### `disconnect()`
|
|
292
292
|
|
|
293
|
-
Disconnects from
|
|
293
|
+
Disconnects all EVM (`eip155`) scopes from MetaMask and cleans up local state. This only revokes the EVM-specific scopes currently held in the session; it does not terminate the broader multichain session if non-EVM scopes are also active.
|
|
294
294
|
|
|
295
295
|
**Parameters**
|
|
296
296
|
|
|
@@ -334,7 +334,7 @@ ${invalidUrls.join("\n")}`
|
|
|
334
334
|
// src/connect.ts
|
|
335
335
|
var DEFAULT_CHAIN_ID = "0x1";
|
|
336
336
|
var CHAIN_STORE_KEY = "cache_eth_chainId";
|
|
337
|
-
var _core2, _provider, _sessionScopes, _eventHandlers, _sessionChangedHandler, _displayUriHandler, _removeNotificationHandler, _status, _MetamaskConnectEVM_instances, getCoreOptions_fn, createInvokeOptions_fn, trackWalletActionRequested_fn, trackWalletActionSucceeded_fn, trackWalletActionFailed_fn, getSelectedChainId_fn, requestInterceptor_fn, clearConnectionState_fn, addEthereumChain_fn, request_fn, cacheChainId_fn, onSessionChanged_fn, onChainChanged_fn, onAccountsChanged_fn, onConnect_fn, onDisconnect_fn, onDisplayUri_fn;
|
|
337
|
+
var _core2, _provider, _sessionScopes, _eventHandlers, _sessionChangedHandler, _displayUriHandler, _removeNotificationHandler, _status, _pendingPreferredChainId, _MetamaskConnectEVM_instances, getCoreOptions_fn, createInvokeOptions_fn, trackWalletActionRequested_fn, trackWalletActionSucceeded_fn, trackWalletActionFailed_fn, getSelectedChainId_fn, requestInterceptor_fn, clearConnectionState_fn, addEthereumChain_fn, request_fn, cacheChainId_fn, onSessionChanged_fn, onChainChanged_fn, onAccountsChanged_fn, onConnect_fn, onDisconnect_fn, onDisplayUri_fn;
|
|
338
338
|
var _MetamaskConnectEVM = class _MetamaskConnectEVM {
|
|
339
339
|
/**
|
|
340
340
|
* Creates a new MetamaskConnectEVM instance.
|
|
@@ -362,6 +362,13 @@ var _MetamaskConnectEVM = class _MetamaskConnectEVM {
|
|
|
362
362
|
__privateAdd(this, _removeNotificationHandler);
|
|
363
363
|
/** The current connection status */
|
|
364
364
|
__privateAdd(this, _status, "disconnected");
|
|
365
|
+
/**
|
|
366
|
+
* The preferred chain ID to use for the active connect() call.
|
|
367
|
+
* Set to the first explicit chainId passed by the caller, cleared once the
|
|
368
|
+
* connect event resolves. Takes priority over the cache in #getSelectedChainId
|
|
369
|
+
* so that an explicit chainIds request always wins over a prior cached value.
|
|
370
|
+
*/
|
|
371
|
+
__privateAdd(this, _pendingPreferredChainId);
|
|
365
372
|
__privateSet(this, _core2, core);
|
|
366
373
|
__privateSet(this, _provider, new EIP1193Provider(
|
|
367
374
|
core,
|
|
@@ -398,7 +405,7 @@ var _MetamaskConnectEVM = class _MetamaskConnectEVM {
|
|
|
398
405
|
* @param options - The connection options
|
|
399
406
|
* @param [options.account] - Optional param to specify an account to connect to
|
|
400
407
|
* @param [options.forceRequest] - Optional param to force a connection request regardless of whether there is a pre-existing session
|
|
401
|
-
* @param [options.chainIds] - Array of chain IDs to
|
|
408
|
+
* @param [options.chainIds] - Array of chain IDs to request permission for (defaults to ethereum mainnet). The first entry is used as the active chain returned by the call. Ethereum mainnet is always included in the permission request as a bootstrap fallback.
|
|
402
409
|
* @returns A promise that resolves with the connected accounts and chain ID
|
|
403
410
|
*/
|
|
404
411
|
connect() {
|
|
@@ -412,35 +419,40 @@ var _MetamaskConnectEVM = class _MetamaskConnectEVM {
|
|
|
412
419
|
if (!chainIds || chainIds.length === 0) {
|
|
413
420
|
throw new Error("chainIds must be an array of at least one chain ID");
|
|
414
421
|
}
|
|
422
|
+
__privateSet(this, _pendingPreferredChainId, chainIds[0]);
|
|
415
423
|
const caipChainIds = Array.from(
|
|
416
424
|
new Set((_a = chainIds.concat(DEFAULT_CHAIN_ID)) != null ? _a : [DEFAULT_CHAIN_ID])
|
|
417
425
|
).map((id) => `eip155:${hexToNumber2(id)}`);
|
|
418
426
|
const caipAccountIds = account ? caipChainIds.map((caipChainId) => `${caipChainId}:${account}`) : [];
|
|
419
427
|
__privateSet(this, _status, "connecting");
|
|
420
428
|
try {
|
|
421
|
-
const result = new Promise(
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
429
|
+
const result = new Promise(
|
|
430
|
+
(resolve) => {
|
|
431
|
+
__privateGet(this, _provider).once("connect", ({ chainId, accounts }) => {
|
|
432
|
+
logger("fulfilled-request: connect", {
|
|
433
|
+
chainId,
|
|
434
|
+
accounts
|
|
435
|
+
});
|
|
436
|
+
resolve({
|
|
437
|
+
accounts,
|
|
438
|
+
chainId
|
|
439
|
+
});
|
|
426
440
|
});
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
chainId
|
|
430
|
-
});
|
|
431
|
-
});
|
|
432
|
-
});
|
|
441
|
+
}
|
|
442
|
+
);
|
|
433
443
|
yield __privateGet(this, _core2).connect(
|
|
434
444
|
caipChainIds,
|
|
435
445
|
caipAccountIds,
|
|
436
446
|
void 0,
|
|
437
447
|
forceRequest
|
|
438
448
|
);
|
|
439
|
-
return result;
|
|
449
|
+
return yield result;
|
|
440
450
|
} catch (error) {
|
|
441
451
|
__privateSet(this, _status, "disconnected");
|
|
442
452
|
logger("Error connecting to wallet", error);
|
|
443
453
|
throw error;
|
|
454
|
+
} finally {
|
|
455
|
+
__privateSet(this, _pendingPreferredChainId, void 0);
|
|
444
456
|
}
|
|
445
457
|
});
|
|
446
458
|
}
|
|
@@ -551,7 +563,6 @@ var _MetamaskConnectEVM = class _MetamaskConnectEVM {
|
|
|
551
563
|
const method = "wallet_switchEthereumChain";
|
|
552
564
|
const scope = `eip155:${hexToNumber2(chainId)}`;
|
|
553
565
|
const params = [{ chainId }];
|
|
554
|
-
yield __privateMethod(this, _MetamaskConnectEVM_instances, trackWalletActionRequested_fn).call(this, method, scope, params);
|
|
555
566
|
if (this.selectedChainId === chainId) {
|
|
556
567
|
return Promise.resolve();
|
|
557
568
|
}
|
|
@@ -559,9 +570,9 @@ var _MetamaskConnectEVM = class _MetamaskConnectEVM {
|
|
|
559
570
|
if (permittedChainIds.includes(chainId) && __privateGet(this, _core2).transportType === TransportType.MWP) {
|
|
560
571
|
yield __privateMethod(this, _MetamaskConnectEVM_instances, cacheChainId_fn).call(this, chainId);
|
|
561
572
|
__privateMethod(this, _MetamaskConnectEVM_instances, onChainChanged_fn).call(this, chainId);
|
|
562
|
-
yield __privateMethod(this, _MetamaskConnectEVM_instances, trackWalletActionSucceeded_fn).call(this, method, scope, params);
|
|
563
573
|
return Promise.resolve();
|
|
564
574
|
}
|
|
575
|
+
yield __privateMethod(this, _MetamaskConnectEVM_instances, trackWalletActionRequested_fn).call(this, method, scope, params);
|
|
565
576
|
try {
|
|
566
577
|
const result = yield __privateMethod(this, _MetamaskConnectEVM_instances, request_fn).call(this, {
|
|
567
578
|
method: "wallet_switchEthereumChain",
|
|
@@ -652,6 +663,7 @@ _sessionChangedHandler = new WeakMap();
|
|
|
652
663
|
_displayUriHandler = new WeakMap();
|
|
653
664
|
_removeNotificationHandler = new WeakMap();
|
|
654
665
|
_status = new WeakMap();
|
|
666
|
+
_pendingPreferredChainId = new WeakMap();
|
|
655
667
|
_MetamaskConnectEVM_instances = new WeakSet();
|
|
656
668
|
/**
|
|
657
669
|
* Gets the core options for analytics checks.
|
|
@@ -683,7 +695,8 @@ trackWalletActionRequested_fn = function(method, scope, params) {
|
|
|
683
695
|
const props = yield getWalletActionAnalyticsProperties(
|
|
684
696
|
coreOptions,
|
|
685
697
|
__privateGet(this, _core2).storage,
|
|
686
|
-
invokeOptions
|
|
698
|
+
invokeOptions,
|
|
699
|
+
__privateGet(this, _core2).transportType
|
|
687
700
|
);
|
|
688
701
|
analytics.track("mmconnect_wallet_action_requested", props);
|
|
689
702
|
} catch (error) {
|
|
@@ -699,7 +712,8 @@ trackWalletActionSucceeded_fn = function(method, scope, params) {
|
|
|
699
712
|
const props = yield getWalletActionAnalyticsProperties(
|
|
700
713
|
coreOptions,
|
|
701
714
|
__privateGet(this, _core2).storage,
|
|
702
|
-
invokeOptions
|
|
715
|
+
invokeOptions,
|
|
716
|
+
__privateGet(this, _core2).transportType
|
|
703
717
|
);
|
|
704
718
|
analytics.track("mmconnect_wallet_action_succeeded", props);
|
|
705
719
|
} catch (error) {
|
|
@@ -715,7 +729,8 @@ trackWalletActionFailed_fn = function(method, scope, params, error) {
|
|
|
715
729
|
const props = yield getWalletActionAnalyticsProperties(
|
|
716
730
|
coreOptions,
|
|
717
731
|
__privateGet(this, _core2).storage,
|
|
718
|
-
invokeOptions
|
|
732
|
+
invokeOptions,
|
|
733
|
+
__privateGet(this, _core2).transportType
|
|
719
734
|
);
|
|
720
735
|
const isRejection = isRejectionError(error);
|
|
721
736
|
if (isRejection) {
|
|
@@ -730,6 +745,9 @@ trackWalletActionFailed_fn = function(method, scope, params, error) {
|
|
|
730
745
|
};
|
|
731
746
|
getSelectedChainId_fn = function(permittedChainIds) {
|
|
732
747
|
return __async(this, null, function* () {
|
|
748
|
+
if (__privateGet(this, _pendingPreferredChainId) && permittedChainIds.includes(__privateGet(this, _pendingPreferredChainId))) {
|
|
749
|
+
return __privateGet(this, _pendingPreferredChainId);
|
|
750
|
+
}
|
|
733
751
|
try {
|
|
734
752
|
const cachedChainId = yield __privateGet(this, _core2).storage.adapter.get(CHAIN_STORE_KEY);
|
|
735
753
|
if (cachedChainId) {
|
|
@@ -746,7 +764,6 @@ getSelectedChainId_fn = function(permittedChainIds) {
|
|
|
746
764
|
};
|
|
747
765
|
requestInterceptor_fn = function(request) {
|
|
748
766
|
return __async(this, null, function* () {
|
|
749
|
-
var _a;
|
|
750
767
|
logger(`Intercepting request for method: ${request.method}`);
|
|
751
768
|
if (IGNORED_METHODS.includes(request.method)) {
|
|
752
769
|
return Promise.reject(
|
|
@@ -785,14 +802,6 @@ requestInterceptor_fn = function(request) {
|
|
|
785
802
|
return __privateMethod(this, _MetamaskConnectEVM_instances, addEthereumChain_fn).call(this, request.params[0]);
|
|
786
803
|
}
|
|
787
804
|
if (isAccountsRequest(request)) {
|
|
788
|
-
const { method } = request;
|
|
789
|
-
const decimalChainId = hexToNumber2(
|
|
790
|
-
(_a = __privateGet(this, _provider).selectedChainId) != null ? _a : "0x1"
|
|
791
|
-
);
|
|
792
|
-
const scope = `eip155:${decimalChainId}`;
|
|
793
|
-
const params = [];
|
|
794
|
-
yield __privateMethod(this, _MetamaskConnectEVM_instances, trackWalletActionRequested_fn).call(this, method, scope, params);
|
|
795
|
-
yield __privateMethod(this, _MetamaskConnectEVM_instances, trackWalletActionSucceeded_fn).call(this, method, scope, params);
|
|
796
805
|
return __privateGet(this, _provider).accounts;
|
|
797
806
|
}
|
|
798
807
|
if (isChainIdRequest(request)) {
|
|
@@ -994,7 +1003,7 @@ onDisplayUri_fn = function(uri) {
|
|
|
994
1003
|
var MetamaskConnectEVM = _MetamaskConnectEVM;
|
|
995
1004
|
function createEVMClient(options) {
|
|
996
1005
|
return __async(this, null, function* () {
|
|
997
|
-
var _a;
|
|
1006
|
+
var _a, _b, _c;
|
|
998
1007
|
if (options.debug) {
|
|
999
1008
|
enableDebug();
|
|
1000
1009
|
}
|
|
@@ -1017,7 +1026,11 @@ function createEVMClient(options) {
|
|
|
1017
1026
|
const core = yield createMultichainClient(__spreadProps(__spreadValues({}, options), {
|
|
1018
1027
|
api: {
|
|
1019
1028
|
supportedNetworks: supportedNetworksCaipChainId
|
|
1020
|
-
}
|
|
1029
|
+
},
|
|
1030
|
+
analytics: {
|
|
1031
|
+
integrationType: (_c = (_b = options.analytics) == null ? void 0 : _b.integrationType) != null ? _c : "direct"
|
|
1032
|
+
},
|
|
1033
|
+
versions: { "connect-evm": "0.7.0" }
|
|
1021
1034
|
}));
|
|
1022
1035
|
return MetamaskConnectEVM.create({
|
|
1023
1036
|
core,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/utils/infura.ts","../../../src/connect.ts","../../../src/constants.ts","../../../src/logger.ts","../../../src/provider.ts","../../../src/utils/caip.ts","../../../src/utils/type-guards.ts"],"sourcesContent":["import type { RpcUrlsMap } from '@metamask/connect-multichain';\nimport { getInfuraRpcUrls as getInfuraRpcUrlsMultichain } from '@metamask/connect-multichain';\nimport type { CaipChainId, Hex } from '@metamask/utils';\nimport {\n KnownCaipNamespace,\n numberToHex,\n parseCaipChainId,\n} from '@metamask/utils';\n\nexport const getInfuraRpcUrls = (infuraAPIKey: string): RpcUrlsMap => {\n const caipMap = getInfuraRpcUrlsMultichain(infuraAPIKey);\n const hexMap = Object.entries(caipMap).reduce<Record<Hex, string>>(\n (acc, [key, url]) => {\n const { namespace, reference } = parseCaipChainId(key as CaipChainId);\n if (namespace !== KnownCaipNamespace.Eip155) {\n return acc;\n }\n const chainId = numberToHex(parseInt(reference, 10));\n acc[chainId] = url as string;\n return acc;\n },\n {},\n );\n return hexMap;\n};\n","/* eslint-disable no-restricted-syntax -- Private class properties use established patterns */\nimport { analytics } from '@metamask/analytics';\nimport { parseScopeString } 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 { hexToNumber } 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 { getEthAccounts, 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 = '0x1';\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 in hex format */\n chainIds?: Hex[];\n};\n\nexport type ConnectEvmStatus = 'disconnected' | 'connected' | 'connecting';\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 client = await createEVMClient({\n * dapp: { name: 'My DApp', url: 'https://mydapp.com' }\n * });\n *\n * const { accounts, chainId } = await client.connect({ chainIds: [1, 137] }); // Connect to Ethereum Mainnet, and Polygon\n *\n * const provider = client.getProvider();\n * const signedMessage = await provider.request({ method: 'personal_sign', params: ['0x0', accounts[0]] });\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 /** The current connection status */\n #status: ConnectEvmStatus = 'disconnected';\n\n /**\n * Creates a new MetamaskConnectEVM instance.\n * Use the static `create()` method instead to ensure proper async initialization.\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 private 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 // eslint-disable-next-line @typescript-eslint/no-misused-promises\n this.#sessionChangedHandler = this.#onSessionChanged.bind(this);\n this.#core.on('wallet_sessionChanged', this.#sessionChangedHandler);\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 logger('Connect/EVM constructor completed');\n }\n\n /**\n * Creates a fully initialized MetamaskConnectEVM instance.\n * This is the recommended way to instantiate the class, as it ensures\n * all async initialization (like session recovery) completes before\n * the instance is returned.\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 * @returns A promise that resolves with a fully initialized MetamaskConnectEVM instance\n */\n static async create(\n options: MetamaskConnectEVMOptions,\n ): Promise<MetamaskConnectEVM> {\n const instance = new MetamaskConnectEVM(options);\n await instance.#core.emitSessionChanged();\n return instance;\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 param to specify an account to connect to\n * @param [options.forceRequest] - Optional param to force a connection request regardless of whether there is a pre-existing session\n * @param [options.chainIds] - Array of chain IDs to connect to (defaults to ethereum mainnet if not provided)\n * @returns A promise that resolves with the connected accounts and chain ID\n */\n async connect({\n account,\n forceRequest,\n chainIds = [DEFAULT_CHAIN_ID],\n }: ConnectOptions = {}): Promise<{ accounts: Address[]; chainId: Hex }> {\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:${hexToNumber(id)}`);\n\n const caipAccountIds = account\n ? caipChainIds.map((caipChainId) => `${caipChainId}:${account}`)\n : [];\n\n this.#status = 'connecting';\n\n try {\n // Wait for the wallet_sessionChanged event to fire and set the provider properties\n const result = new Promise((resolve) => {\n this.#provider.once('connect', ({ chainId, accounts }) => {\n logger('fulfilled-request: connect', {\n chainId,\n accounts,\n });\n resolve({\n accounts,\n chainId: chainId as Hex,\n });\n });\n });\n\n await this.#core.connect(\n caipChainIds as Scope[],\n caipAccountIds as CaipAccountId[],\n undefined,\n forceRequest,\n );\n\n return result as Promise<{ accounts: Address[]; chainId: Hex }>;\n } catch (error) {\n this.#status = 'disconnected';\n logger('Error connecting to wallet', error);\n throw error;\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 hex 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?: Hex[];\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 hex 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?: Hex[];\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 const sessionScopes = this.#sessionScopes;\n const eip155Scopes = Object.keys(sessionScopes).filter((scope) => {\n const { namespace } = parseScopeString(scope as Scope);\n return namespace === 'eip155';\n });\n\n await this.#core.disconnect(eip155Scopes as Scope[]);\n this.#onDisconnect();\n this.#clearConnectionState();\n\n // Note: We intentionally do NOT remove the display_uri and wallet_sessionChanged\n // listeners here. These are instance-scoped listeners that should remain active\n // for the lifetime of the SDK instance, allowing reconnection to work properly.\n // Session-scoped listeners (like the notification handler below) are removed.\n\n this.#removeNotificationHandler?.();\n this.#removeNotificationHandler = undefined;\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 A promise that resolves when the chain has been switched\n */\n async switchChain({\n chainId,\n chainConfiguration,\n }: {\n chainId: Hex;\n chainConfiguration?: AddEthereumChainParameter;\n }): Promise<void> {\n const method = 'wallet_switchEthereumChain';\n const scope: Scope = `eip155:${hexToNumber(chainId)}`;\n const params = [{ chainId }];\n\n await this.#trackWalletActionRequested(method, scope, params);\n\n // TODO (wenfix): better way to return here other than resolving.\n if (this.selectedChainId === chainId) {\n return Promise.resolve();\n }\n\n const permittedChainIds = getPermittedEthChainIds(this.#sessionScopes);\n\n if (\n permittedChainIds.includes(chainId) &&\n this.#core.transportType === TransportType.MWP\n ) {\n await this.#cacheChainId(chainId);\n this.#onChainChanged(chainId);\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(chainId);\n this.#onChainChanged(chainId);\n }\n return Promise.resolve();\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: request.params[0].chainId as Hex,\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 decimalChainId = hexToNumber(\n this.#provider.selectedChainId ?? '0x1',\n );\n const scope: Scope = `eip155:${decimalChainId}`;\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;\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 =\n (chainConfiguration.chainId as Hex) ||\n this.#provider.selectedChainId ||\n '0x1';\n const decimalChainId = hexToNumber(chainId);\n const scope: Scope = `eip155:${decimalChainId}`;\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.openSimpleDeeplinkIfNeeded();\n }\n return result;\n }\n\n /**\n * Caches the chainId to storage for persistence across page refreshes.\n *\n * @param chainId - The hex chain ID\n */\n async #cacheChainId(chainId: Hex): Promise<void> {\n try {\n await this.#core.storage.adapter.set(\n CHAIN_STORE_KEY,\n JSON.stringify(chainId),\n );\n } catch (error) {\n logger('Error caching chainId', error);\n }\n }\n\n async #onSessionChanged(session?: SessionData): Promise<void> {\n logger('event: wallet_sessionChanged', session);\n this.#sessionScopes = session?.sessionScopes ?? {};\n const hexPermittedChainIds = getPermittedEthChainIds(this.#sessionScopes);\n if (hexPermittedChainIds.length === 0) {\n this.#onDisconnect();\n } else {\n let initialAccounts: Address[] = [];\n if (this.#core.status === 'connected') {\n const ethAccountsResponse =\n await this.#core.transport.sendEip1193Message({\n method: 'eth_accounts',\n params: [],\n });\n initialAccounts = ethAccountsResponse.result as Address[];\n } else {\n initialAccounts = getEthAccounts(this.#sessionScopes);\n }\n\n const chainId = await this.#getSelectedChainId(hexPermittedChainIds);\n\n this.#onConnect({\n chainId,\n accounts: initialAccounts,\n });\n }\n }\n\n /**\n * Handles chain change events and updates the provider's selected chain ID.\n *\n * @param chainId - The new hex chain ID\n */\n #onChainChanged(chainId: Hex): void {\n if (chainId === this.#provider.selectedChainId) {\n return;\n }\n logger('handler: chainChanged', { chainId });\n this.#provider.selectedChainId = chainId;\n this.#eventHandlers?.chainChanged?.(chainId);\n this.#provider.emit('chainChanged', chainId);\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 const accountsUnchanged =\n accounts.length === this.#provider.accounts.length &&\n accounts.every((acct, idx) => acct === this.#provider.accounts[idx]);\n if (accountsUnchanged) {\n return;\n }\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 hex chain ID of the connection\n * @param options.accounts - The accounts of the connection\n */\n #onConnect({\n chainId,\n accounts,\n }: {\n chainId: Hex;\n accounts: Address[];\n }): void {\n logger('handler: connect', { chainId, accounts });\n const data = {\n chainId,\n accounts,\n };\n\n if (this.#status !== 'connected') {\n this.#status = 'connected';\n this.#provider.emit('connect', data);\n this.#eventHandlers?.connect?.(data);\n\n this.#removeNotificationHandler?.();\n\n // TODO: Verify if #core.on('metamask_accountsChanged') and #core.on('metamask_chainChanged')\n // would work here instead\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 notificationAccounts = notification?.params;\n logger('transport-event: accountsChanged', notificationAccounts);\n // why are we not caching the accounts here?\n this.#onAccountsChanged(notificationAccounts);\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 = 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\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 if (this.#status === 'disconnected') {\n return;\n }\n this.#status = 'disconnected';\n\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 if (this.#status !== 'connecting') {\n return;\n }\n\n logger('handler: display_uri', uri);\n this.#provider.emit('display_uri', uri);\n this.#eventHandlers?.displayUri?.(uri);\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 hex chain IDs to RPC URLs for read-only requests\n * @param [options.ui] - UI configuration options\n * @param [options.ui.headless] - Whether to run without UI\n * @param [options.ui.preferExtension] - Whether to prefer browser extension\n * @param [options.ui.showInstallModal] - Whether to render installation modal for desktop extension\n * @param [options.mobile] - Mobile configuration options\n * @param [options.mobile.preferredOpenLink] - Custom handler for opening deeplinks (useful for React Native, etc.)\n * @param [options.mobile.useDeeplink] - Whether to use native deeplinks instead of universal links\n * @param [options.transport] - Transport configuration (e.g., extensionId, notification handler)\n * @param [options.transport.extensionId] - Extension ID for browser extension transport\n * @param [options.transport.onNotification] - Callback for receiving transport notifications\n * @param [options.eventHandlers] - Event handlers for the Metamask Connect/EVM layer\n * @param [options.debug] - Enable debug logging\n * @returns The Metamask-Connect EVM client instance\n */\nexport async function createEVMClient(\n options: Pick<MultichainOptions, 'dapp' | 'mobile' | 'transport'> & {\n ui?: Omit<MultichainOptions['ui'], 'factory'>;\n } & {\n eventHandlers?: Partial<EventHandlers>;\n debug?: boolean;\n api: {\n supportedNetworks: Record<Hex, string>;\n };\n },\n): Promise<MetamaskConnectEVM> {\n if (options.debug) {\n enableDebug();\n }\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 const supportedNetworksCaipChainId = Object.entries(\n options.api.supportedNetworks,\n ).reduce<Record<string, string>>((acc, [hexChainId, url]) => {\n const decimalChainId = parseInt(hexChainId, 16);\n const caip2ChainId = `eip155:${decimalChainId}`;\n acc[caip2ChainId] = url;\n return acc;\n }, {});\n\n try {\n const core = await createMultichainClient({\n ...options,\n api: {\n supportedNetworks: supportedNetworksCaipChainId,\n },\n });\n\n return MetamaskConnectEVM.create({\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 = (): void => {\n // @ts-expect-error logger needs to be typed properly\n debug(namespace);\n};\n","/* eslint-disable promise/always-return -- Legacy callback patterns */\n/* eslint-disable promise/no-callback-in-promise -- Legacy sendAsync/send API */\n/* eslint-disable consistent-return -- Legacy method returns void or Promise */\n/* eslint-disable @typescript-eslint/no-floating-promises -- Legacy fire-and-forget pattern */\n/* eslint-disable jsdoc/require-returns -- Inherited from abstract class */\nimport type { MultichainCore, Scope } from '@metamask/connect-multichain';\nimport { EventEmitter } from '@metamask/connect-multichain';\nimport { hexToNumber } 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 decimalChainId = hexToNumber(this.#selectedChainId);\n const scope: Scope = `eip155:${decimalChainId}`;\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 | undefined) {\n this.#selectedChainId = chainId;\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 *\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 *\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":["namespace","hexToNumber","_a","_core","hexToNumber","namespace","_a"]}
|
|
1
|
+
{"version":3,"sources":["../../../src/utils/infura.ts","../../../src/connect.ts","../../../src/constants.ts","../../../src/logger.ts","../../../src/provider.ts","../../../src/utils/caip.ts","../../../src/utils/type-guards.ts"],"sourcesContent":["import type { RpcUrlsMap } from '@metamask/connect-multichain';\nimport { getInfuraRpcUrls as getInfuraRpcUrlsMultichain } from '@metamask/connect-multichain';\nimport type { CaipChainId, Hex } from '@metamask/utils';\nimport {\n KnownCaipNamespace,\n numberToHex,\n parseCaipChainId,\n} from '@metamask/utils';\n\nexport const getInfuraRpcUrls = (infuraAPIKey: string): RpcUrlsMap => {\n const caipMap = getInfuraRpcUrlsMultichain(infuraAPIKey);\n const hexMap = Object.entries(caipMap).reduce<Record<Hex, string>>(\n (acc, [key, url]) => {\n const { namespace, reference } = parseCaipChainId(key as CaipChainId);\n if (namespace !== KnownCaipNamespace.Eip155) {\n return acc;\n }\n const chainId = numberToHex(parseInt(reference, 10));\n acc[chainId] = url as string;\n return acc;\n },\n {},\n );\n return hexMap;\n};\n","/* eslint-disable no-restricted-syntax -- Private class properties use established patterns */\n/* eslint-disable @typescript-eslint/naming-convention -- __PACKAGE_VERSION__ is an esbuild define convention */\nimport { analytics } from '@metamask/analytics';\nimport { parseScopeString } 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 { hexToNumber } 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 { getEthAccounts, getPermittedEthChainIds } from './utils/caip';\nimport {\n isAccountsRequest,\n isAddChainRequest,\n isChainIdRequest,\n isConnectRequest,\n isSwitchChainRequest,\n validSupportedChainsUrls,\n} from './utils/type-guards';\n\ndeclare const __PACKAGE_VERSION__: string;\n\nconst DEFAULT_CHAIN_ID = '0x1';\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 in hex format */\n chainIds?: Hex[];\n};\n\nexport type ConnectEvmStatus = 'disconnected' | 'connected' | 'connecting';\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 client = await createEVMClient({\n * dapp: { name: 'My DApp', url: 'https://mydapp.com' }\n * });\n *\n * const { accounts, chainId } = await client.connect({ chainIds: [1, 137] }); // Connect to Ethereum Mainnet, and Polygon\n *\n * const provider = client.getProvider();\n * const signedMessage = await provider.request({ method: 'personal_sign', params: ['0x0', accounts[0]] });\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 /** The current connection status */\n #status: ConnectEvmStatus = 'disconnected';\n\n /**\n * The preferred chain ID to use for the active connect() call.\n * Set to the first explicit chainId passed by the caller, cleared once the\n * connect event resolves. Takes priority over the cache in #getSelectedChainId\n * so that an explicit chainIds request always wins over a prior cached value.\n */\n #pendingPreferredChainId: Hex | undefined;\n\n /**\n * Creates a new MetamaskConnectEVM instance.\n * Use the static `create()` method instead to ensure proper async initialization.\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 private 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 // eslint-disable-next-line @typescript-eslint/no-misused-promises\n this.#sessionChangedHandler = this.#onSessionChanged.bind(this);\n this.#core.on('wallet_sessionChanged', this.#sessionChangedHandler);\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 logger('Connect/EVM constructor completed');\n }\n\n /**\n * Creates a fully initialized MetamaskConnectEVM instance.\n * This is the recommended way to instantiate the class, as it ensures\n * all async initialization (like session recovery) completes before\n * the instance is returned.\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 * @returns A promise that resolves with a fully initialized MetamaskConnectEVM instance\n */\n static async create(\n options: MetamaskConnectEVMOptions,\n ): Promise<MetamaskConnectEVM> {\n const instance = new MetamaskConnectEVM(options);\n await instance.#core.emitSessionChanged();\n return instance;\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 this.#core.transportType,\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 this.#core.transportType,\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 this.#core.transportType,\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. Priority order:\n * - Explicit caller preference from an active connect() call, if permitted.\n * - Cached chainId from storage, if permitted.\n * - First permitted chain as a fallback.\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 // Honour an explicit caller preference set during an active connect() call\n if (\n this.#pendingPreferredChainId &&\n permittedChainIds.includes(this.#pendingPreferredChainId)\n ) {\n return this.#pendingPreferredChainId;\n }\n\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 param to specify an account to connect to\n * @param [options.forceRequest] - Optional param to force a connection request regardless of whether there is a pre-existing session\n * @param [options.chainIds] - Array of chain IDs to request permission for (defaults to ethereum mainnet). The first entry is used as the active chain returned by the call. Ethereum mainnet is always included in the permission request as a bootstrap fallback.\n * @returns A promise that resolves with the connected accounts and chain ID\n */\n async connect({\n account,\n forceRequest,\n chainIds = [DEFAULT_CHAIN_ID],\n }: ConnectOptions = {}): Promise<{ accounts: Address[]; chainId: Hex }> {\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 // The first explicitly-requested chain is preferred for chain selection.\n // DEFAULT_CHAIN_ID is still included in the permission request as a bootstrap\n // fallback, but it must not win over an explicit caller request.\n this.#pendingPreferredChainId = chainIds[0];\n\n const caipChainIds = Array.from(\n new Set(chainIds.concat(DEFAULT_CHAIN_ID) ?? [DEFAULT_CHAIN_ID]),\n ).map((id) => `eip155:${hexToNumber(id)}`);\n\n const caipAccountIds = account\n ? caipChainIds.map((caipChainId) => `${caipChainId}:${account}`)\n : [];\n\n this.#status = 'connecting';\n\n try {\n // Wait for the wallet_sessionChanged event to fire and set the provider properties\n const result = new Promise<{ accounts: Address[]; chainId: Hex }>(\n (resolve) => {\n this.#provider.once('connect', ({ chainId, accounts }) => {\n logger('fulfilled-request: connect', {\n chainId,\n accounts,\n });\n resolve({\n accounts,\n chainId,\n });\n });\n },\n );\n\n await this.#core.connect(\n caipChainIds as Scope[],\n caipAccountIds as CaipAccountId[],\n undefined,\n forceRequest,\n );\n\n // Await here so the finally block always runs after #onSessionChanged\n // has consumed #pendingPreferredChainId, not before.\n return await result;\n } catch (error) {\n this.#status = 'disconnected';\n logger('Error connecting to wallet', error);\n throw error;\n } finally {\n this.#pendingPreferredChainId = undefined;\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 hex 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?: Hex[];\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 hex 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?: Hex[];\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 const sessionScopes = this.#sessionScopes;\n const eip155Scopes = Object.keys(sessionScopes).filter((scope) => {\n const { namespace } = parseScopeString(scope as Scope);\n return namespace === 'eip155';\n });\n\n await this.#core.disconnect(eip155Scopes as Scope[]);\n this.#onDisconnect();\n this.#clearConnectionState();\n\n // Note: We intentionally do NOT remove the display_uri and wallet_sessionChanged\n // listeners here. These are instance-scoped listeners that should remain active\n // for the lifetime of the SDK instance, allowing reconnection to work properly.\n // Session-scoped listeners (like the notification handler below) are removed.\n\n this.#removeNotificationHandler?.();\n this.#removeNotificationHandler = undefined;\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 A promise that resolves when the chain has been switched\n */\n async switchChain({\n chainId,\n chainConfiguration,\n }: {\n chainId: Hex;\n chainConfiguration?: AddEthereumChainParameter;\n }): Promise<void> {\n const method = 'wallet_switchEthereumChain';\n const scope: Scope = `eip155:${hexToNumber(chainId)}`;\n const params = [{ chainId }];\n\n // TODO (wenfix): better way to return here other than resolving.\n if (this.selectedChainId === chainId) {\n return Promise.resolve();\n }\n\n const permittedChainIds = getPermittedEthChainIds(this.#sessionScopes);\n\n if (\n permittedChainIds.includes(chainId) &&\n this.#core.transportType === TransportType.MWP\n ) {\n await this.#cacheChainId(chainId);\n this.#onChainChanged(chainId);\n return Promise.resolve();\n }\n\n await this.#trackWalletActionRequested(method, scope, params);\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(chainId);\n this.#onChainChanged(chainId);\n }\n return Promise.resolve();\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: request.params[0].chainId as Hex,\n });\n }\n\n if (isAddChainRequest(request)) {\n return this.#addEthereumChain(request.params[0]);\n }\n\n if (isAccountsRequest(request)) {\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;\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 =\n (chainConfiguration.chainId as Hex) ||\n this.#provider.selectedChainId ||\n '0x1';\n const decimalChainId = hexToNumber(chainId);\n const scope: Scope = `eip155:${decimalChainId}`;\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.openSimpleDeeplinkIfNeeded();\n }\n return result;\n }\n\n /**\n * Caches the chainId to storage for persistence across page refreshes.\n *\n * @param chainId - The hex chain ID\n */\n async #cacheChainId(chainId: Hex): Promise<void> {\n try {\n await this.#core.storage.adapter.set(\n CHAIN_STORE_KEY,\n JSON.stringify(chainId),\n );\n } catch (error) {\n logger('Error caching chainId', error);\n }\n }\n\n async #onSessionChanged(session?: SessionData): Promise<void> {\n logger('event: wallet_sessionChanged', session);\n this.#sessionScopes = session?.sessionScopes ?? {};\n const hexPermittedChainIds = getPermittedEthChainIds(this.#sessionScopes);\n if (hexPermittedChainIds.length === 0) {\n this.#onDisconnect();\n } else {\n let initialAccounts: Address[] = [];\n if (this.#core.status === 'connected') {\n const ethAccountsResponse =\n await this.#core.transport.sendEip1193Message({\n method: 'eth_accounts',\n params: [],\n });\n initialAccounts = ethAccountsResponse.result as Address[];\n } else {\n initialAccounts = getEthAccounts(this.#sessionScopes);\n }\n\n const chainId = await this.#getSelectedChainId(hexPermittedChainIds);\n\n this.#onConnect({\n chainId,\n accounts: initialAccounts,\n });\n }\n }\n\n /**\n * Handles chain change events and updates the provider's selected chain ID.\n *\n * @param chainId - The new hex chain ID\n */\n #onChainChanged(chainId: Hex): void {\n if (chainId === this.#provider.selectedChainId) {\n return;\n }\n logger('handler: chainChanged', { chainId });\n this.#provider.selectedChainId = chainId;\n this.#eventHandlers?.chainChanged?.(chainId);\n this.#provider.emit('chainChanged', chainId);\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 const accountsUnchanged =\n accounts.length === this.#provider.accounts.length &&\n accounts.every((acct, idx) => acct === this.#provider.accounts[idx]);\n if (accountsUnchanged) {\n return;\n }\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 hex chain ID of the connection\n * @param options.accounts - The accounts of the connection\n */\n #onConnect({\n chainId,\n accounts,\n }: {\n chainId: Hex;\n accounts: Address[];\n }): void {\n logger('handler: connect', { chainId, accounts });\n const data = {\n chainId,\n accounts,\n };\n\n if (this.#status !== 'connected') {\n this.#status = 'connected';\n this.#provider.emit('connect', data);\n this.#eventHandlers?.connect?.(data);\n\n this.#removeNotificationHandler?.();\n\n // TODO: Verify if #core.on('metamask_accountsChanged') and #core.on('metamask_chainChanged')\n // would work here instead\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 notificationAccounts = notification?.params;\n logger('transport-event: accountsChanged', notificationAccounts);\n // why are we not caching the accounts here?\n this.#onAccountsChanged(notificationAccounts);\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 = 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\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 if (this.#status === 'disconnected') {\n return;\n }\n this.#status = 'disconnected';\n\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 if (this.#status !== 'connecting') {\n return;\n }\n\n logger('handler: display_uri', uri);\n this.#provider.emit('display_uri', uri);\n this.#eventHandlers?.displayUri?.(uri);\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 hex chain IDs to RPC URLs for read-only requests\n * @param [options.analytics.integrationType] - Integration type for analytics\n * @param [options.ui] - UI configuration options\n * @param [options.ui.headless] - Whether to run without UI\n * @param [options.ui.preferExtension] - Whether to prefer browser extension\n * @param [options.ui.showInstallModal] - Whether to render installation modal for desktop extension\n * @param [options.mobile] - Mobile configuration options\n * @param [options.mobile.preferredOpenLink] - Custom handler for opening deeplinks (useful for React Native, etc.)\n * @param [options.mobile.useDeeplink] - Whether to use native deeplinks instead of universal links\n * @param [options.transport] - Transport configuration (e.g., extensionId, notification handler)\n * @param [options.transport.extensionId] - Extension ID for browser extension transport\n * @param [options.transport.onNotification] - Callback for receiving transport notifications\n * @param [options.eventHandlers] - Event handlers for the Metamask Connect/EVM layer\n * @param [options.debug] - Enable debug logging\n * @returns The Metamask-Connect EVM client instance\n */\nexport async function createEVMClient(\n options: Pick<\n MultichainOptions,\n 'dapp' | 'mobile' | 'transport' | 'analytics'\n > & {\n ui?: Omit<MultichainOptions['ui'], 'factory'>;\n } & {\n eventHandlers?: Partial<EventHandlers>;\n debug?: boolean;\n api: {\n supportedNetworks: Record<Hex, string>;\n };\n },\n): Promise<MetamaskConnectEVM> {\n if (options.debug) {\n enableDebug();\n }\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 const supportedNetworksCaipChainId = Object.entries(\n options.api.supportedNetworks,\n ).reduce<Record<string, string>>((acc, [hexChainId, url]) => {\n const decimalChainId = parseInt(hexChainId, 16);\n const caip2ChainId = `eip155:${decimalChainId}`;\n acc[caip2ChainId] = url;\n return acc;\n }, {});\n\n try {\n const core = await createMultichainClient({\n ...options,\n api: {\n supportedNetworks: supportedNetworksCaipChainId,\n },\n analytics: {\n integrationType: options.analytics?.integrationType ?? 'direct',\n },\n versions: { 'connect-evm': __PACKAGE_VERSION__ },\n });\n\n return MetamaskConnectEVM.create({\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 = (): void => {\n // @ts-expect-error logger needs to be typed properly\n debug(namespace);\n};\n","/* eslint-disable promise/always-return -- Legacy callback patterns */\n/* eslint-disable promise/no-callback-in-promise -- Legacy sendAsync/send API */\n/* eslint-disable consistent-return -- Legacy method returns void or Promise */\n/* eslint-disable @typescript-eslint/no-floating-promises -- Legacy fire-and-forget pattern */\n/* eslint-disable jsdoc/require-returns -- Inherited from abstract class */\nimport type { MultichainCore, Scope } from '@metamask/connect-multichain';\nimport { EventEmitter } from '@metamask/connect-multichain';\nimport { hexToNumber } 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 decimalChainId = hexToNumber(this.#selectedChainId);\n const scope: Scope = `eip155:${decimalChainId}`;\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 | undefined) {\n this.#selectedChainId = chainId;\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 *\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 *\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":["namespace","hexToNumber","_a","_core","hexToNumber","namespace","_a"]}
|
package/dist/src/connect.d.ts
CHANGED
|
@@ -68,7 +68,7 @@ export declare class MetamaskConnectEVM {
|
|
|
68
68
|
* @param options - The connection options
|
|
69
69
|
* @param [options.account] - Optional param to specify an account to connect to
|
|
70
70
|
* @param [options.forceRequest] - Optional param to force a connection request regardless of whether there is a pre-existing session
|
|
71
|
-
* @param [options.chainIds] - Array of chain IDs to
|
|
71
|
+
* @param [options.chainIds] - Array of chain IDs to request permission for (defaults to ethereum mainnet). The first entry is used as the active chain returned by the call. Ethereum mainnet is always included in the permission request as a bootstrap fallback.
|
|
72
72
|
* @returns A promise that resolves with the connected accounts and chain ID
|
|
73
73
|
*/
|
|
74
74
|
connect({ account, forceRequest, chainIds, }?: ConnectOptions): Promise<{
|
|
@@ -175,6 +175,7 @@ export declare class MetamaskConnectEVM {
|
|
|
175
175
|
* @param options.dapp - Dapp identification and branding settings
|
|
176
176
|
* @param options.api - API configuration including read-only RPC map
|
|
177
177
|
* @param options.api.supportedNetworks - A map of hex chain IDs to RPC URLs for read-only requests
|
|
178
|
+
* @param [options.analytics.integrationType] - Integration type for analytics
|
|
178
179
|
* @param [options.ui] - UI configuration options
|
|
179
180
|
* @param [options.ui.headless] - Whether to run without UI
|
|
180
181
|
* @param [options.ui.preferExtension] - Whether to prefer browser extension
|
|
@@ -189,7 +190,7 @@ export declare class MetamaskConnectEVM {
|
|
|
189
190
|
* @param [options.debug] - Enable debug logging
|
|
190
191
|
* @returns The Metamask-Connect EVM client instance
|
|
191
192
|
*/
|
|
192
|
-
export declare function createEVMClient(options: Pick<MultichainOptions, 'dapp' | 'mobile' | 'transport'> & {
|
|
193
|
+
export declare function createEVMClient(options: Pick<MultichainOptions, 'dapp' | 'mobile' | 'transport' | 'analytics'> & {
|
|
193
194
|
ui?: Omit<MultichainOptions['ui'], 'factory'>;
|
|
194
195
|
} & {
|
|
195
196
|
eventHandlers?: Partial<EventHandlers>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connect.d.ts","sourceRoot":"","sources":["../../src/connect.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"connect.d.ts","sourceRoot":"","sources":["../../src/connect.ts"],"names":[],"mappings":"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"}
|
package/dist/src/connect.js
CHANGED
|
@@ -18,8 +18,9 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
|
|
|
18
18
|
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
19
19
|
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
20
20
|
};
|
|
21
|
-
var _MetamaskConnectEVM_instances, _MetamaskConnectEVM_core, _MetamaskConnectEVM_provider, _MetamaskConnectEVM_sessionScopes, _MetamaskConnectEVM_eventHandlers, _MetamaskConnectEVM_sessionChangedHandler, _MetamaskConnectEVM_displayUriHandler, _MetamaskConnectEVM_removeNotificationHandler, _MetamaskConnectEVM_status, _MetamaskConnectEVM_getCoreOptions, _MetamaskConnectEVM_createInvokeOptions, _MetamaskConnectEVM_trackWalletActionRequested, _MetamaskConnectEVM_trackWalletActionSucceeded, _MetamaskConnectEVM_trackWalletActionFailed, _MetamaskConnectEVM_getSelectedChainId, _MetamaskConnectEVM_requestInterceptor, _MetamaskConnectEVM_clearConnectionState, _MetamaskConnectEVM_addEthereumChain, _MetamaskConnectEVM_request, _MetamaskConnectEVM_cacheChainId, _MetamaskConnectEVM_onSessionChanged, _MetamaskConnectEVM_onChainChanged, _MetamaskConnectEVM_onAccountsChanged, _MetamaskConnectEVM_onConnect, _MetamaskConnectEVM_onDisconnect, _MetamaskConnectEVM_onDisplayUri;
|
|
21
|
+
var _MetamaskConnectEVM_instances, _MetamaskConnectEVM_core, _MetamaskConnectEVM_provider, _MetamaskConnectEVM_sessionScopes, _MetamaskConnectEVM_eventHandlers, _MetamaskConnectEVM_sessionChangedHandler, _MetamaskConnectEVM_displayUriHandler, _MetamaskConnectEVM_removeNotificationHandler, _MetamaskConnectEVM_status, _MetamaskConnectEVM_pendingPreferredChainId, _MetamaskConnectEVM_getCoreOptions, _MetamaskConnectEVM_createInvokeOptions, _MetamaskConnectEVM_trackWalletActionRequested, _MetamaskConnectEVM_trackWalletActionSucceeded, _MetamaskConnectEVM_trackWalletActionFailed, _MetamaskConnectEVM_getSelectedChainId, _MetamaskConnectEVM_requestInterceptor, _MetamaskConnectEVM_clearConnectionState, _MetamaskConnectEVM_addEthereumChain, _MetamaskConnectEVM_request, _MetamaskConnectEVM_cacheChainId, _MetamaskConnectEVM_onSessionChanged, _MetamaskConnectEVM_onChainChanged, _MetamaskConnectEVM_onAccountsChanged, _MetamaskConnectEVM_onConnect, _MetamaskConnectEVM_onDisconnect, _MetamaskConnectEVM_onDisplayUri;
|
|
22
22
|
/* eslint-disable no-restricted-syntax -- Private class properties use established patterns */
|
|
23
|
+
/* eslint-disable @typescript-eslint/naming-convention -- __PACKAGE_VERSION__ is an esbuild define convention */
|
|
23
24
|
import { analytics } from '@metamask/analytics';
|
|
24
25
|
import { parseScopeString } from '@metamask/chain-agnostic-permission';
|
|
25
26
|
import { createMultichainClient, getWalletActionAnalyticsProperties, isRejectionError, TransportType, } from '@metamask/connect-multichain';
|
|
@@ -86,6 +87,13 @@ export class MetamaskConnectEVM {
|
|
|
86
87
|
_MetamaskConnectEVM_removeNotificationHandler.set(this, void 0);
|
|
87
88
|
/** The current connection status */
|
|
88
89
|
_MetamaskConnectEVM_status.set(this, 'disconnected');
|
|
90
|
+
/**
|
|
91
|
+
* The preferred chain ID to use for the active connect() call.
|
|
92
|
+
* Set to the first explicit chainId passed by the caller, cleared once the
|
|
93
|
+
* connect event resolves. Takes priority over the cache in #getSelectedChainId
|
|
94
|
+
* so that an explicit chainIds request always wins over a prior cached value.
|
|
95
|
+
*/
|
|
96
|
+
_MetamaskConnectEVM_pendingPreferredChainId.set(this, void 0);
|
|
89
97
|
__classPrivateFieldSet(this, _MetamaskConnectEVM_core, core, "f");
|
|
90
98
|
__classPrivateFieldSet(this, _MetamaskConnectEVM_provider, new EIP1193Provider(core, __classPrivateFieldGet(this, _MetamaskConnectEVM_instances, "m", _MetamaskConnectEVM_requestInterceptor).bind(this)), "f");
|
|
91
99
|
__classPrivateFieldSet(this, _MetamaskConnectEVM_eventHandlers, eventHandlers, "f");
|
|
@@ -130,7 +138,7 @@ export class MetamaskConnectEVM {
|
|
|
130
138
|
* @param options - The connection options
|
|
131
139
|
* @param [options.account] - Optional param to specify an account to connect to
|
|
132
140
|
* @param [options.forceRequest] - Optional param to force a connection request regardless of whether there is a pre-existing session
|
|
133
|
-
* @param [options.chainIds] - Array of chain IDs to
|
|
141
|
+
* @param [options.chainIds] - Array of chain IDs to request permission for (defaults to ethereum mainnet). The first entry is used as the active chain returned by the call. Ethereum mainnet is always included in the permission request as a bootstrap fallback.
|
|
134
142
|
* @returns A promise that resolves with the connected accounts and chain ID
|
|
135
143
|
*/
|
|
136
144
|
connect() {
|
|
@@ -140,6 +148,10 @@ export class MetamaskConnectEVM {
|
|
|
140
148
|
if (!chainIds || chainIds.length === 0) {
|
|
141
149
|
throw new Error('chainIds must be an array of at least one chain ID');
|
|
142
150
|
}
|
|
151
|
+
// The first explicitly-requested chain is preferred for chain selection.
|
|
152
|
+
// DEFAULT_CHAIN_ID is still included in the permission request as a bootstrap
|
|
153
|
+
// fallback, but it must not win over an explicit caller request.
|
|
154
|
+
__classPrivateFieldSet(this, _MetamaskConnectEVM_pendingPreferredChainId, chainIds[0], "f");
|
|
143
155
|
const caipChainIds = Array.from(new Set((_a = chainIds.concat(DEFAULT_CHAIN_ID)) !== null && _a !== void 0 ? _a : [DEFAULT_CHAIN_ID])).map((id) => `eip155:${hexToNumber(id)}`);
|
|
144
156
|
const caipAccountIds = account
|
|
145
157
|
? caipChainIds.map((caipChainId) => `${caipChainId}:${account}`)
|
|
@@ -155,18 +167,23 @@ export class MetamaskConnectEVM {
|
|
|
155
167
|
});
|
|
156
168
|
resolve({
|
|
157
169
|
accounts,
|
|
158
|
-
chainId
|
|
170
|
+
chainId,
|
|
159
171
|
});
|
|
160
172
|
});
|
|
161
173
|
});
|
|
162
174
|
yield __classPrivateFieldGet(this, _MetamaskConnectEVM_core, "f").connect(caipChainIds, caipAccountIds, undefined, forceRequest);
|
|
163
|
-
|
|
175
|
+
// Await here so the finally block always runs after #onSessionChanged
|
|
176
|
+
// has consumed #pendingPreferredChainId, not before.
|
|
177
|
+
return yield result;
|
|
164
178
|
}
|
|
165
179
|
catch (error) {
|
|
166
180
|
__classPrivateFieldSet(this, _MetamaskConnectEVM_status, 'disconnected', "f");
|
|
167
181
|
logger('Error connecting to wallet', error);
|
|
168
182
|
throw error;
|
|
169
183
|
}
|
|
184
|
+
finally {
|
|
185
|
+
__classPrivateFieldSet(this, _MetamaskConnectEVM_pendingPreferredChainId, undefined, "f");
|
|
186
|
+
}
|
|
170
187
|
});
|
|
171
188
|
}
|
|
172
189
|
/**
|
|
@@ -268,7 +285,6 @@ export class MetamaskConnectEVM {
|
|
|
268
285
|
const method = 'wallet_switchEthereumChain';
|
|
269
286
|
const scope = `eip155:${hexToNumber(chainId)}`;
|
|
270
287
|
const params = [{ chainId }];
|
|
271
|
-
yield __classPrivateFieldGet(this, _MetamaskConnectEVM_instances, "m", _MetamaskConnectEVM_trackWalletActionRequested).call(this, method, scope, params);
|
|
272
288
|
// TODO (wenfix): better way to return here other than resolving.
|
|
273
289
|
if (this.selectedChainId === chainId) {
|
|
274
290
|
return Promise.resolve();
|
|
@@ -278,9 +294,9 @@ export class MetamaskConnectEVM {
|
|
|
278
294
|
__classPrivateFieldGet(this, _MetamaskConnectEVM_core, "f").transportType === TransportType.MWP) {
|
|
279
295
|
yield __classPrivateFieldGet(this, _MetamaskConnectEVM_instances, "m", _MetamaskConnectEVM_cacheChainId).call(this, chainId);
|
|
280
296
|
__classPrivateFieldGet(this, _MetamaskConnectEVM_instances, "m", _MetamaskConnectEVM_onChainChanged).call(this, chainId);
|
|
281
|
-
yield __classPrivateFieldGet(this, _MetamaskConnectEVM_instances, "m", _MetamaskConnectEVM_trackWalletActionSucceeded).call(this, method, scope, params);
|
|
282
297
|
return Promise.resolve();
|
|
283
298
|
}
|
|
299
|
+
yield __classPrivateFieldGet(this, _MetamaskConnectEVM_instances, "m", _MetamaskConnectEVM_trackWalletActionRequested).call(this, method, scope, params);
|
|
284
300
|
try {
|
|
285
301
|
const result = yield __classPrivateFieldGet(this, _MetamaskConnectEVM_instances, "m", _MetamaskConnectEVM_request).call(this, {
|
|
286
302
|
method: 'wallet_switchEthereumChain',
|
|
@@ -368,7 +384,7 @@ export class MetamaskConnectEVM {
|
|
|
368
384
|
return __classPrivateFieldGet(this, _MetamaskConnectEVM_core, "f").status;
|
|
369
385
|
}
|
|
370
386
|
}
|
|
371
|
-
_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_status = new WeakMap(), _MetamaskConnectEVM_instances = new WeakSet(), _MetamaskConnectEVM_getCoreOptions = function _MetamaskConnectEVM_getCoreOptions() {
|
|
387
|
+
_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_status = new WeakMap(), _MetamaskConnectEVM_pendingPreferredChainId = new WeakMap(), _MetamaskConnectEVM_instances = new WeakSet(), _MetamaskConnectEVM_getCoreOptions = function _MetamaskConnectEVM_getCoreOptions() {
|
|
372
388
|
return __classPrivateFieldGet(this, _MetamaskConnectEVM_core, "f").options;
|
|
373
389
|
}, _MetamaskConnectEVM_createInvokeOptions = function _MetamaskConnectEVM_createInvokeOptions(method, scope, params) {
|
|
374
390
|
return {
|
|
@@ -380,7 +396,7 @@ _MetamaskConnectEVM_core = new WeakMap(), _MetamaskConnectEVM_provider = new Wea
|
|
|
380
396
|
const coreOptions = __classPrivateFieldGet(this, _MetamaskConnectEVM_instances, "m", _MetamaskConnectEVM_getCoreOptions).call(this);
|
|
381
397
|
try {
|
|
382
398
|
const invokeOptions = __classPrivateFieldGet(this, _MetamaskConnectEVM_instances, "m", _MetamaskConnectEVM_createInvokeOptions).call(this, method, scope, params);
|
|
383
|
-
const props = yield getWalletActionAnalyticsProperties(coreOptions, __classPrivateFieldGet(this, _MetamaskConnectEVM_core, "f").storage, invokeOptions);
|
|
399
|
+
const props = yield getWalletActionAnalyticsProperties(coreOptions, __classPrivateFieldGet(this, _MetamaskConnectEVM_core, "f").storage, invokeOptions, __classPrivateFieldGet(this, _MetamaskConnectEVM_core, "f").transportType);
|
|
384
400
|
analytics.track('mmconnect_wallet_action_requested', props);
|
|
385
401
|
}
|
|
386
402
|
catch (error) {
|
|
@@ -392,7 +408,7 @@ _MetamaskConnectEVM_core = new WeakMap(), _MetamaskConnectEVM_provider = new Wea
|
|
|
392
408
|
const coreOptions = __classPrivateFieldGet(this, _MetamaskConnectEVM_instances, "m", _MetamaskConnectEVM_getCoreOptions).call(this);
|
|
393
409
|
try {
|
|
394
410
|
const invokeOptions = __classPrivateFieldGet(this, _MetamaskConnectEVM_instances, "m", _MetamaskConnectEVM_createInvokeOptions).call(this, method, scope, params);
|
|
395
|
-
const props = yield getWalletActionAnalyticsProperties(coreOptions, __classPrivateFieldGet(this, _MetamaskConnectEVM_core, "f").storage, invokeOptions);
|
|
411
|
+
const props = yield getWalletActionAnalyticsProperties(coreOptions, __classPrivateFieldGet(this, _MetamaskConnectEVM_core, "f").storage, invokeOptions, __classPrivateFieldGet(this, _MetamaskConnectEVM_core, "f").transportType);
|
|
396
412
|
analytics.track('mmconnect_wallet_action_succeeded', props);
|
|
397
413
|
}
|
|
398
414
|
catch (error) {
|
|
@@ -404,7 +420,7 @@ _MetamaskConnectEVM_core = new WeakMap(), _MetamaskConnectEVM_provider = new Wea
|
|
|
404
420
|
const coreOptions = __classPrivateFieldGet(this, _MetamaskConnectEVM_instances, "m", _MetamaskConnectEVM_getCoreOptions).call(this);
|
|
405
421
|
try {
|
|
406
422
|
const invokeOptions = __classPrivateFieldGet(this, _MetamaskConnectEVM_instances, "m", _MetamaskConnectEVM_createInvokeOptions).call(this, method, scope, params);
|
|
407
|
-
const props = yield getWalletActionAnalyticsProperties(coreOptions, __classPrivateFieldGet(this, _MetamaskConnectEVM_core, "f").storage, invokeOptions);
|
|
423
|
+
const props = yield getWalletActionAnalyticsProperties(coreOptions, __classPrivateFieldGet(this, _MetamaskConnectEVM_core, "f").storage, invokeOptions, __classPrivateFieldGet(this, _MetamaskConnectEVM_core, "f").transportType);
|
|
408
424
|
const isRejection = isRejectionError(error);
|
|
409
425
|
if (isRejection) {
|
|
410
426
|
analytics.track('mmconnect_wallet_action_rejected', props);
|
|
@@ -419,6 +435,11 @@ _MetamaskConnectEVM_core = new WeakMap(), _MetamaskConnectEVM_provider = new Wea
|
|
|
419
435
|
});
|
|
420
436
|
}, _MetamaskConnectEVM_getSelectedChainId = function _MetamaskConnectEVM_getSelectedChainId(permittedChainIds) {
|
|
421
437
|
return __awaiter(this, void 0, void 0, function* () {
|
|
438
|
+
// Honour an explicit caller preference set during an active connect() call
|
|
439
|
+
if (__classPrivateFieldGet(this, _MetamaskConnectEVM_pendingPreferredChainId, "f") &&
|
|
440
|
+
permittedChainIds.includes(__classPrivateFieldGet(this, _MetamaskConnectEVM_pendingPreferredChainId, "f"))) {
|
|
441
|
+
return __classPrivateFieldGet(this, _MetamaskConnectEVM_pendingPreferredChainId, "f");
|
|
442
|
+
}
|
|
422
443
|
try {
|
|
423
444
|
const cachedChainId = yield __classPrivateFieldGet(this, _MetamaskConnectEVM_core, "f").storage.adapter.get(CHAIN_STORE_KEY);
|
|
424
445
|
if (cachedChainId) {
|
|
@@ -437,7 +458,6 @@ _MetamaskConnectEVM_core = new WeakMap(), _MetamaskConnectEVM_provider = new Wea
|
|
|
437
458
|
});
|
|
438
459
|
}, _MetamaskConnectEVM_requestInterceptor = function _MetamaskConnectEVM_requestInterceptor(request) {
|
|
439
460
|
return __awaiter(this, void 0, void 0, function* () {
|
|
440
|
-
var _a;
|
|
441
461
|
logger(`Intercepting request for method: ${request.method}`);
|
|
442
462
|
if (IGNORED_METHODS.includes(request.method)) {
|
|
443
463
|
// TODO: replace with correct method unsupported provider error
|
|
@@ -479,12 +499,6 @@ _MetamaskConnectEVM_core = new WeakMap(), _MetamaskConnectEVM_provider = new Wea
|
|
|
479
499
|
return __classPrivateFieldGet(this, _MetamaskConnectEVM_instances, "m", _MetamaskConnectEVM_addEthereumChain).call(this, request.params[0]);
|
|
480
500
|
}
|
|
481
501
|
if (isAccountsRequest(request)) {
|
|
482
|
-
const { method } = request;
|
|
483
|
-
const decimalChainId = hexToNumber((_a = __classPrivateFieldGet(this, _MetamaskConnectEVM_provider, "f").selectedChainId) !== null && _a !== void 0 ? _a : '0x1');
|
|
484
|
-
const scope = `eip155:${decimalChainId}`;
|
|
485
|
-
const params = [];
|
|
486
|
-
yield __classPrivateFieldGet(this, _MetamaskConnectEVM_instances, "m", _MetamaskConnectEVM_trackWalletActionRequested).call(this, method, scope, params);
|
|
487
|
-
yield __classPrivateFieldGet(this, _MetamaskConnectEVM_instances, "m", _MetamaskConnectEVM_trackWalletActionSucceeded).call(this, method, scope, params);
|
|
488
502
|
return __classPrivateFieldGet(this, _MetamaskConnectEVM_provider, "f").accounts;
|
|
489
503
|
}
|
|
490
504
|
if (isChainIdRequest(request)) {
|
|
@@ -660,6 +674,7 @@ _MetamaskConnectEVM_core = new WeakMap(), _MetamaskConnectEVM_provider = new Wea
|
|
|
660
674
|
* @param options.dapp - Dapp identification and branding settings
|
|
661
675
|
* @param options.api - API configuration including read-only RPC map
|
|
662
676
|
* @param options.api.supportedNetworks - A map of hex chain IDs to RPC URLs for read-only requests
|
|
677
|
+
* @param [options.analytics.integrationType] - Integration type for analytics
|
|
663
678
|
* @param [options.ui] - UI configuration options
|
|
664
679
|
* @param [options.ui.headless] - Whether to run without UI
|
|
665
680
|
* @param [options.ui.preferExtension] - Whether to prefer browser extension
|
|
@@ -676,7 +691,7 @@ _MetamaskConnectEVM_core = new WeakMap(), _MetamaskConnectEVM_provider = new Wea
|
|
|
676
691
|
*/
|
|
677
692
|
export function createEVMClient(options) {
|
|
678
693
|
return __awaiter(this, void 0, void 0, function* () {
|
|
679
|
-
var _a;
|
|
694
|
+
var _a, _b, _c;
|
|
680
695
|
if (options.debug) {
|
|
681
696
|
enableDebug();
|
|
682
697
|
}
|
|
@@ -696,7 +711,9 @@ export function createEVMClient(options) {
|
|
|
696
711
|
try {
|
|
697
712
|
const core = yield createMultichainClient(Object.assign(Object.assign({}, options), { api: {
|
|
698
713
|
supportedNetworks: supportedNetworksCaipChainId,
|
|
699
|
-
}
|
|
714
|
+
}, analytics: {
|
|
715
|
+
integrationType: (_c = (_b = options.analytics) === null || _b === void 0 ? void 0 : _b.integrationType) !== null && _c !== void 0 ? _c : 'direct',
|
|
716
|
+
}, versions: { 'connect-evm': __PACKAGE_VERSION__ } }));
|
|
700
717
|
return MetamaskConnectEVM.create({
|
|
701
718
|
core,
|
|
702
719
|
eventHandlers: options.eventHandlers,
|
package/dist/src/connect.js.map
CHANGED
|
@@ -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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"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -230,7 +230,7 @@ declare class MetamaskConnectEVM {
|
|
|
230
230
|
* @param options - The connection options
|
|
231
231
|
* @param [options.account] - Optional param to specify an account to connect to
|
|
232
232
|
* @param [options.forceRequest] - Optional param to force a connection request regardless of whether there is a pre-existing session
|
|
233
|
-
* @param [options.chainIds] - Array of chain IDs to
|
|
233
|
+
* @param [options.chainIds] - Array of chain IDs to request permission for (defaults to ethereum mainnet). The first entry is used as the active chain returned by the call. Ethereum mainnet is always included in the permission request as a bootstrap fallback.
|
|
234
234
|
* @returns A promise that resolves with the connected accounts and chain ID
|
|
235
235
|
*/
|
|
236
236
|
connect({ account, forceRequest, chainIds, }?: ConnectOptions): Promise<{
|
|
@@ -337,6 +337,7 @@ declare class MetamaskConnectEVM {
|
|
|
337
337
|
* @param options.dapp - Dapp identification and branding settings
|
|
338
338
|
* @param options.api - API configuration including read-only RPC map
|
|
339
339
|
* @param options.api.supportedNetworks - A map of hex chain IDs to RPC URLs for read-only requests
|
|
340
|
+
* @param [options.analytics.integrationType] - Integration type for analytics
|
|
340
341
|
* @param [options.ui] - UI configuration options
|
|
341
342
|
* @param [options.ui.headless] - Whether to run without UI
|
|
342
343
|
* @param [options.ui.preferExtension] - Whether to prefer browser extension
|
|
@@ -351,7 +352,7 @@ declare class MetamaskConnectEVM {
|
|
|
351
352
|
* @param [options.debug] - Enable debug logging
|
|
352
353
|
* @returns The Metamask-Connect EVM client instance
|
|
353
354
|
*/
|
|
354
|
-
declare function createEVMClient(options: Pick<MultichainOptions, 'dapp' | 'mobile' | 'transport'> & {
|
|
355
|
+
declare function createEVMClient(options: Pick<MultichainOptions, 'dapp' | 'mobile' | 'transport' | 'analytics'> & {
|
|
355
356
|
ui?: Omit<MultichainOptions['ui'], 'factory'>;
|
|
356
357
|
} & {
|
|
357
358
|
eventHandlers?: Partial<EventHandlers>;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@metamask/connect-evm",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.7.0",
|
|
4
4
|
"description": "EVM Layer for MetaMask Connect",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"MetaMask",
|
|
@@ -55,9 +55,9 @@
|
|
|
55
55
|
"test:watch": "vitest watch"
|
|
56
56
|
},
|
|
57
57
|
"dependencies": {
|
|
58
|
-
"@metamask/analytics": "^0.
|
|
58
|
+
"@metamask/analytics": "^0.3.0",
|
|
59
59
|
"@metamask/chain-agnostic-permission": "^1.2.2",
|
|
60
|
-
"@metamask/connect-multichain": "^0.
|
|
60
|
+
"@metamask/connect-multichain": "^0.9.0",
|
|
61
61
|
"@metamask/utils": "^11.8.1"
|
|
62
62
|
},
|
|
63
63
|
"devDependencies": {
|