@dynamic-labs-sdk/metamask 1.31.0 → 1.31.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (127) hide show
  1. package/dist/assertMetaMaskNetworkIsGranted/assertMetaMaskNetworkIsGranted.d.ts +37 -0
  2. package/dist/assertMetaMaskNetworkIsGranted/assertMetaMaskNetworkIsGranted.d.ts.map +1 -0
  3. package/dist/assertMetaMaskNetworkIsGranted/index.d.ts +2 -0
  4. package/dist/assertMetaMaskNetworkIsGranted/index.d.ts.map +1 -0
  5. package/dist/clearMetaMaskSessionStorage/clearMetaMaskSessionStorage.d.ts +6 -6
  6. package/dist/clearMetaMaskSessionStorage/clearMetaMaskSessionStorage.d.ts.map +1 -1
  7. package/dist/connectWithMetaMaskUri/connectWithMetaMaskUri.d.ts +3 -8
  8. package/dist/connectWithMetaMaskUri/connectWithMetaMaskUri.d.ts.map +1 -1
  9. package/dist/constants.d.ts +8 -0
  10. package/dist/constants.d.ts.map +1 -0
  11. package/dist/core.cjs +465 -0
  12. package/dist/core.cjs.map +1 -0
  13. package/dist/core.esm.js +459 -0
  14. package/dist/core.esm.js.map +1 -0
  15. package/dist/core.native.esm.js +459 -0
  16. package/dist/core.native.esm.js.map +1 -0
  17. package/dist/createMetaMaskWalletProviderEventEmitter/createMetaMaskWalletProviderEventEmitter.d.ts +44 -0
  18. package/dist/createMetaMaskWalletProviderEventEmitter/createMetaMaskWalletProviderEventEmitter.d.ts.map +1 -0
  19. package/dist/createMetaMaskWalletProviderEventEmitter/index.d.ts +3 -0
  20. package/dist/createMetaMaskWalletProviderEventEmitter/index.d.ts.map +1 -0
  21. package/dist/disconnectMetaMaskWalletProvider/disconnectMetaMaskWalletProvider.d.ts +56 -0
  22. package/dist/disconnectMetaMaskWalletProvider/disconnectMetaMaskWalletProvider.d.ts.map +1 -0
  23. package/dist/disconnectMetaMaskWalletProvider/index.d.ts +3 -0
  24. package/dist/disconnectMetaMaskWalletProvider/index.d.ts.map +1 -0
  25. package/dist/errors/MetaMaskClientNotInitializedError/MetaMaskClientNotInitializedError.d.ts +12 -0
  26. package/dist/errors/MetaMaskClientNotInitializedError/MetaMaskClientNotInitializedError.d.ts.map +1 -0
  27. package/dist/errors/MetaMaskClientNotInitializedError/index.d.ts +2 -0
  28. package/dist/errors/MetaMaskClientNotInitializedError/index.d.ts.map +1 -0
  29. package/dist/errors/MetaMaskDisplayUriMissingError/MetaMaskDisplayUriMissingError.d.ts +21 -0
  30. package/dist/errors/MetaMaskDisplayUriMissingError/MetaMaskDisplayUriMissingError.d.ts.map +1 -1
  31. package/dist/errors/MetaMaskStorageError/MetaMaskStorageError.d.ts +12 -0
  32. package/dist/errors/MetaMaskStorageError/MetaMaskStorageError.d.ts.map +1 -0
  33. package/dist/errors/MetaMaskStorageError/index.d.ts +2 -0
  34. package/dist/errors/MetaMaskStorageError/index.d.ts.map +1 -0
  35. package/dist/errors/MetaMaskUnscopedNetworkError/MetaMaskUnscopedNetworkError.d.ts +29 -0
  36. package/dist/errors/MetaMaskUnscopedNetworkError/MetaMaskUnscopedNetworkError.d.ts.map +1 -0
  37. package/dist/errors/MetaMaskUnscopedNetworkError/index.d.ts +2 -0
  38. package/dist/errors/MetaMaskUnscopedNetworkError/index.d.ts.map +1 -0
  39. package/dist/errors/UnsupportedMetaMaskChainError/UnsupportedMetaMaskChainError.d.ts +9 -0
  40. package/dist/errors/UnsupportedMetaMaskChainError/UnsupportedMetaMaskChainError.d.ts.map +1 -0
  41. package/dist/errors/UnsupportedMetaMaskChainError/index.d.ts +2 -0
  42. package/dist/errors/UnsupportedMetaMaskChainError/index.d.ts.map +1 -0
  43. package/dist/exports/core.d.ts +21 -0
  44. package/dist/exports/core.d.ts.map +1 -0
  45. package/dist/exports/index.d.ts +2 -2
  46. package/dist/exports/index.d.ts.map +1 -1
  47. package/dist/getGrantedMetaMaskScopes/getGrantedMetaMaskScopes.d.ts +40 -0
  48. package/dist/getGrantedMetaMaskScopes/getGrantedMetaMaskScopes.d.ts.map +1 -0
  49. package/dist/getGrantedMetaMaskScopes/index.d.ts +3 -0
  50. package/dist/getGrantedMetaMaskScopes/index.d.ts.map +1 -0
  51. package/dist/getMetaMaskExtensionWalletProviderKey/getMetaMaskExtensionWalletProviderKey.d.ts +1 -1
  52. package/dist/getMetaMaskScopeForNetworkId/getMetaMaskScopeForNetworkId.d.ts +39 -0
  53. package/dist/getMetaMaskScopeForNetworkId/getMetaMaskScopeForNetworkId.d.ts.map +1 -0
  54. package/dist/getMetaMaskScopeForNetworkId/index.d.ts +2 -0
  55. package/dist/getMetaMaskScopeForNetworkId/index.d.ts.map +1 -0
  56. package/dist/getMetaMaskScopes/getMetaMaskScopes.d.ts +28 -0
  57. package/dist/getMetaMaskScopes/getMetaMaskScopes.d.ts.map +1 -0
  58. package/dist/getMetaMaskScopes/index.d.ts +2 -0
  59. package/dist/getMetaMaskScopes/index.d.ts.map +1 -0
  60. package/dist/getMetaMaskSupportedNetworks/getMetaMaskSupportedNetworks.d.ts +23 -0
  61. package/dist/getMetaMaskSupportedNetworks/getMetaMaskSupportedNetworks.d.ts.map +1 -0
  62. package/dist/getMetaMaskSupportedNetworks/index.d.ts +2 -0
  63. package/dist/getMetaMaskSupportedNetworks/index.d.ts.map +1 -0
  64. package/dist/getNetworkIdFromMetaMaskScope/getNetworkIdFromMetaMaskScope.d.ts +35 -0
  65. package/dist/getNetworkIdFromMetaMaskScope/getNetworkIdFromMetaMaskScope.d.ts.map +1 -0
  66. package/dist/getNetworkIdFromMetaMaskScope/index.d.ts +2 -0
  67. package/dist/getNetworkIdFromMetaMaskScope/index.d.ts.map +1 -0
  68. package/dist/getOrCreateMetaMaskClientInstanceManager-BLrtpngZ.esm.js +621 -0
  69. package/dist/getOrCreateMetaMaskClientInstanceManager-BLrtpngZ.esm.js.map +1 -0
  70. package/dist/getOrCreateMetaMaskClientInstanceManager-C2FCB8yy.cjs +708 -0
  71. package/dist/getOrCreateMetaMaskClientInstanceManager-C2FCB8yy.cjs.map +1 -0
  72. package/dist/getOrCreateMetaMaskClientInstanceManager-DbH0IJjn.native.esm.js +621 -0
  73. package/dist/getOrCreateMetaMaskClientInstanceManager-DbH0IJjn.native.esm.js.map +1 -0
  74. package/dist/getScopeAccountsFromMetaMaskClient/getScopeAccountsFromMetaMaskClient.d.ts +38 -0
  75. package/dist/getScopeAccountsFromMetaMaskClient/getScopeAccountsFromMetaMaskClient.d.ts.map +1 -0
  76. package/dist/getScopeAccountsFromMetaMaskClient/index.d.ts +2 -0
  77. package/dist/getScopeAccountsFromMetaMaskClient/index.d.ts.map +1 -0
  78. package/dist/index.cjs +57 -57
  79. package/dist/index.cjs.map +1 -1
  80. package/dist/index.esm.js +56 -56
  81. package/dist/index.esm.js.map +1 -1
  82. package/dist/index.native.esm.js +56 -78
  83. package/dist/index.native.esm.js.map +1 -1
  84. package/dist/metaMaskClientInstanceManager/createMetaMaskClientInstanceManager/createMetaMaskClientInstanceManager.d.ts +45 -0
  85. package/dist/metaMaskClientInstanceManager/createMetaMaskClientInstanceManager/createMetaMaskClientInstanceManager.d.ts.map +1 -0
  86. package/dist/metaMaskClientInstanceManager/createMetaMaskClientInstanceManager/index.d.ts +2 -0
  87. package/dist/metaMaskClientInstanceManager/createMetaMaskClientInstanceManager/index.d.ts.map +1 -0
  88. package/dist/metaMaskClientInstanceManager/getOrCreateMetaMaskClientInstanceManager/getOrCreateMetaMaskClientInstanceManager.d.ts +18 -0
  89. package/dist/metaMaskClientInstanceManager/getOrCreateMetaMaskClientInstanceManager/getOrCreateMetaMaskClientInstanceManager.d.ts.map +1 -0
  90. package/dist/metaMaskClientInstanceManager/getOrCreateMetaMaskClientInstanceManager/index.d.ts +2 -0
  91. package/dist/metaMaskClientInstanceManager/getOrCreateMetaMaskClientInstanceManager/index.d.ts.map +1 -0
  92. package/dist/metaMaskStorage/clearMetaMaskStorage/clearMetaMaskStorage.d.ts +23 -0
  93. package/dist/metaMaskStorage/clearMetaMaskStorage/clearMetaMaskStorage.d.ts.map +1 -0
  94. package/dist/metaMaskStorage/clearMetaMaskStorage/index.d.ts +2 -0
  95. package/dist/metaMaskStorage/clearMetaMaskStorage/index.d.ts.map +1 -0
  96. package/dist/metaMaskStorage/createInitialMetaMaskStoreValue/createInitialMetaMaskStoreValue.d.ts +19 -0
  97. package/dist/metaMaskStorage/createInitialMetaMaskStoreValue/createInitialMetaMaskStoreValue.d.ts.map +1 -0
  98. package/dist/metaMaskStorage/createMetaMaskStorageClient/createMetaMaskStorageClient.d.ts +30 -0
  99. package/dist/metaMaskStorage/createMetaMaskStorageClient/createMetaMaskStorageClient.d.ts.map +1 -0
  100. package/dist/metaMaskStorage/createMetaMaskStorageClient/index.d.ts +2 -0
  101. package/dist/metaMaskStorage/createMetaMaskStorageClient/index.d.ts.map +1 -0
  102. package/dist/metaMaskStorage/metaMaskStorage.schema.d.ts +30 -0
  103. package/dist/metaMaskStorage/metaMaskStorage.schema.d.ts.map +1 -0
  104. package/dist/metaMaskStorage/queueMetaMaskStorageWrite/queueMetaMaskStorageWrite.d.ts +20 -0
  105. package/dist/metaMaskStorage/queueMetaMaskStorageWrite/queueMetaMaskStorageWrite.d.ts.map +1 -0
  106. package/dist/metamask.types.d.ts +0 -20
  107. package/dist/metamask.types.d.ts.map +1 -1
  108. package/dist/reconcileMetaMaskWalletProvider/index.d.ts +3 -0
  109. package/dist/reconcileMetaMaskWalletProvider/index.d.ts.map +1 -0
  110. package/dist/reconcileMetaMaskWalletProvider/reconcileMetaMaskWalletProvider.d.ts +60 -0
  111. package/dist/reconcileMetaMaskWalletProvider/reconcileMetaMaskWalletProvider.d.ts.map +1 -0
  112. package/dist/resolveActiveMetaMaskScope/index.d.ts +3 -0
  113. package/dist/resolveActiveMetaMaskScope/index.d.ts.map +1 -0
  114. package/dist/resolveActiveMetaMaskScope/resolveActiveMetaMaskScope.d.ts +67 -0
  115. package/dist/resolveActiveMetaMaskScope/resolveActiveMetaMaskScope.d.ts.map +1 -0
  116. package/dist/tsconfig.lib.tsbuildinfo +1 -1
  117. package/dist/utils/clearMetaMaskSdkSingleton/clearMetaMaskSdkSingleton.d.ts +23 -0
  118. package/dist/utils/clearMetaMaskSdkSingleton/clearMetaMaskSdkSingleton.d.ts.map +1 -0
  119. package/dist/utils/createMetaMaskPreferredOpenLink/createMetaMaskPreferredOpenLink.d.ts +21 -0
  120. package/dist/utils/createMetaMaskPreferredOpenLink/createMetaMaskPreferredOpenLink.d.ts.map +1 -0
  121. package/dist/utils/createMetaMaskPreferredOpenLink/index.d.ts +2 -0
  122. package/dist/utils/createMetaMaskPreferredOpenLink/index.d.ts.map +1 -0
  123. package/package.json +11 -3
  124. package/dist/errors/MetaMaskWalletNotConnectedError/MetaMaskWalletNotConnectedError.d.ts +0 -5
  125. package/dist/errors/MetaMaskWalletNotConnectedError/MetaMaskWalletNotConnectedError.d.ts.map +0 -1
  126. package/dist/errors/MetaMaskWalletNotConnectedError/index.d.ts +0 -2
  127. package/dist/errors/MetaMaskWalletNotConnectedError/index.d.ts.map +0 -1
@@ -0,0 +1,37 @@
1
+ import type { Chain, DynamicClient } from '@dynamic-labs-sdk/client';
2
+ import type { MultichainCore } from '@metamask/connect-multichain';
3
+ export type AssertMetaMaskNetworkIsGrantedParams = {
4
+ chain: Chain;
5
+ metaMaskClient: MultichainCore;
6
+ networkId: string;
7
+ };
8
+ /**
9
+ * Guards a MetaMask wallet provider's `switchActiveNetwork` against ever
10
+ * pointing at a network MetaMask didn't actually grant an account for.
11
+ * Every configured network is requested as an *optional* CAIP-25 scope (see
12
+ * `getMetaMaskScopes`), so MetaMask may silently approve only a subset --
13
+ * switching the active network to one outside that subset would leave every
14
+ * subsequent signing/sending call targeting a scope the wallet will reject.
15
+ *
16
+ * @example
17
+ * ```ts
18
+ * await assertMetaMaskNetworkIsGranted(
19
+ * { chain: 'SOL', metaMaskClient, networkId: '103' },
20
+ * client
21
+ * );
22
+ * // Throws MetaMaskUnscopedNetworkError if MetaMask never granted an
23
+ * // account for network "103" in the current session.
24
+ * ```
25
+ *
26
+ * @param client - The Dynamic client instance whose logger this reports
27
+ * against.
28
+ * @returns A promise that resolves once the target network is confirmed granted.
29
+ * @throws {MetaMaskUnscopedNetworkError} If `networkId` has no granted
30
+ * account in the current session (including when it has no configured
31
+ * MetaMask scope at all).
32
+ * @see resolveActiveMetaMaskScope
33
+ * @see MetaMaskUnscopedNetworkError
34
+ * @notInstrumented
35
+ */
36
+ export declare const assertMetaMaskNetworkIsGranted: ({ chain, metaMaskClient, networkId }: AssertMetaMaskNetworkIsGrantedParams, client: DynamicClient) => Promise<void>;
37
+ //# sourceMappingURL=assertMetaMaskNetworkIsGranted.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assertMetaMaskNetworkIsGranted.d.ts","sourceRoot":"","sources":["../../src/assertMetaMaskNetworkIsGranted/assertMetaMaskNetworkIsGranted.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAErE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAMnE,MAAM,MAAM,oCAAoC,GAAG;IACjD,KAAK,EAAE,KAAK,CAAC;IACb,cAAc,EAAE,cAAc,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,eAAO,MAAM,8BAA8B,yCACH,oCAAoC,UAClE,aAAa,KACpB,OAAO,CAAC,IAAI,CA6Bd,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { assertMetaMaskNetworkIsGranted } from './assertMetaMaskNetworkIsGranted';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/assertMetaMaskNetworkIsGranted/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,8BAA8B,EAAE,MAAM,kCAAkC,CAAC"}
@@ -1,9 +1,9 @@
1
1
  import type { DynamicClient } from '@dynamic-labs-sdk/client';
2
2
  /**
3
- * Deletes the MetaMask SDK's IndexedDB session storage so the next connect call
4
- * emits a fresh `display_uri` synchronously instead of spending the SDK's
5
- * 10-second resume timeout reviving a dead pairing. Safe in SSR (no-op) and
6
- * when the DB is held open by another tab (resolves on `blocked`).
3
+ * Resets the MetaMask SDK's persisted session so the next connect call
4
+ * emits a fresh `display_uri` instead of resuming a stale pairing.
5
+ *
6
+ * @deprecated The clearMetaMaskSessionStorage is not needed anymore since the SDK itself will handle the storage
7
7
  *
8
8
  * @example
9
9
  * ```ts
@@ -14,9 +14,9 @@ import type { DynamicClient } from '@dynamic-labs-sdk/client';
14
14
  * @param client - The Dynamic client instance. Required (rather than
15
15
  * defaulting to the last-initialized client) so a storage-clear failure is
16
16
  * always logged against the client that actually requested it.
17
- * @returns A promise that resolves once the database is deleted (or immediately in SSR).
17
+ * @returns A promise that resolves once the persisted session is reset.
18
18
  * @see connectWithMetaMaskUri
19
- * @see getMetaMaskExtensionWalletProviderKey
19
+ * @see createMetaMaskClientInstanceManager
20
20
  * @notInstrumented
21
21
  */
22
22
  export declare const clearMetaMaskSessionStorage: (client: DynamicClient) => Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"clearMetaMaskSessionStorage.d.ts","sourceRoot":"","sources":["../../src/clearMetaMaskSessionStorage/clearMetaMaskSessionStorage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAY9D;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,2BAA2B,WAG9B,aAAa,KACpB,OAAO,CAAC,IAAI,CA2Bd,CAAC"}
1
+ {"version":3,"file":"clearMetaMaskSessionStorage.d.ts","sourceRoot":"","sources":["../../src/clearMetaMaskSessionStorage/clearMetaMaskSessionStorage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAI9D;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,2BAA2B,WAE9B,aAAa,KACpB,OAAO,CAAC,IAAI,CAAiC,CAAC"}
@@ -1,19 +1,16 @@
1
1
  import type { Chain, DynamicClient, WalletProviderUriConnectionResult } from '@dynamic-labs-sdk/client';
2
2
  import type { WalletProvider } from '@dynamic-labs-sdk/client/core';
3
- import type { MetaMaskController } from '../metamask.types';
4
3
  export type ConnectWithMetaMaskUriParams = {
5
4
  /** Whether to add the connected wallet account to the Dynamic client. Defaults to `true`. */
6
5
  addToDynamicWalletAccounts?: boolean;
7
6
  /** Chain being connected; used to scope the extension-installed lookup. */
8
7
  chain: Chain;
9
- /** Returns the chain-specific `MetaMaskController` that drives the pairing. */
10
- getController: (client: DynamicClient) => Promise<MetaMaskController>;
11
8
  /**
12
9
  * Builds the chain-specific `WalletProvider` AFTER the pairing has been
13
10
  * approved. Must NOT include a `connect` method — the provider is registered
14
11
  * purely for signing routing and would otherwise leak into the wallet picker.
15
12
  */
16
- walletProviderBuilder: (client: DynamicClient) => Promise<WalletProvider>;
13
+ walletProviderBuilder: (client: DynamicClient) => WalletProvider;
17
14
  };
18
15
  /**
19
16
  * Drives a MetaMask SDK pairing for any chain and returns `{ approval, uri }`
@@ -28,23 +25,21 @@ export type ConnectWithMetaMaskUriParams = {
28
25
  * ```ts
29
26
  * const { uri, approval } = await connectWithMetaMaskUri({
30
27
  * chain: 'EVM',
31
- * getController: (client) => getEvmMetaMaskController(client),
32
28
  * walletProviderBuilder: (client) => buildEvmWalletProvider(client),
33
29
  * });
34
30
  * // Render QR code with `uri`, then await approval()
35
31
  * ```
36
32
  *
37
33
  * @param params.chain - Chain being connected; used to scope the extension-installed lookup.
38
- * @param params.getController - Returns the chain-specific MetaMaskController for the pairing.
39
34
  * @param params.walletProviderBuilder - Builds the chain-specific WalletProvider after pairing approval.
40
35
  * @param [params.addToDynamicWalletAccounts] - Whether to add the wallet to the client. Defaults to `true`.
41
36
  * @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.
42
37
  * @returns An object with `uri` (the pairing URI) and `approval` (async function resolving to wallet accounts).
43
38
  * @throws {MetaMaskDisplayUriMissingError} If `connect` settles before a display_uri is emitted.
44
39
  * @throws {NoAddressFoundError} If no address is returned after pairing approval.
45
- * @see clearMetaMaskSessionStorage
40
+ * @see clearMetaMaskStorage
46
41
  * @see getMetaMaskExtensionWalletProviderKey
47
42
  * @notInstrumented
48
43
  */
49
- export declare const connectWithMetaMaskUri: ({ addToDynamicWalletAccounts, chain, getController, walletProviderBuilder, }: ConnectWithMetaMaskUriParams, client?: DynamicClient) => Promise<WalletProviderUriConnectionResult>;
44
+ export declare const connectWithMetaMaskUri: ({ addToDynamicWalletAccounts, chain, walletProviderBuilder, }: ConnectWithMetaMaskUriParams, client?: DynamicClient) => Promise<WalletProviderUriConnectionResult>;
50
45
  //# sourceMappingURL=connectWithMetaMaskUri.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"connectWithMetaMaskUri.d.ts","sourceRoot":"","sources":["../../src/connectWithMetaMaskUri/connectWithMetaMaskUri.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,KAAK,EACL,aAAa,EAEb,iCAAiC,EAClC,MAAM,0BAA0B,CAAC;AAElC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAapE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAE5D,MAAM,MAAM,4BAA4B,GAAG;IACzC,6FAA6F;IAC7F,0BAA0B,CAAC,EAAE,OAAO,CAAC;IACrC,2EAA2E;IAC3E,KAAK,EAAE,KAAK,CAAC;IACb,+EAA+E;IAC/E,aAAa,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACtE;;;;OAIG;IACH,qBAAqB,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;CAC3E,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,eAAO,MAAM,sBAAsB,iFAM9B,4BAA4B,WACvB,aAAa,KACpB,OAAO,CAAC,iCAAiC,CAmF3C,CAAC"}
1
+ {"version":3,"file":"connectWithMetaMaskUri.d.ts","sourceRoot":"","sources":["../../src/connectWithMetaMaskUri/connectWithMetaMaskUri.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,KAAK,EACL,aAAa,EAEb,iCAAiC,EAClC,MAAM,0BAA0B,CAAC;AAElC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAgBpE,MAAM,MAAM,4BAA4B,GAAG;IACzC,6FAA6F;IAC7F,0BAA0B,CAAC,EAAE,OAAO,CAAC;IACrC,2EAA2E;IAC3E,KAAK,EAAE,KAAK,CAAC;IACb;;;;OAIG;IACH,qBAAqB,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,cAAc,CAAC;CAClE,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,eAAO,MAAM,sBAAsB,kEAK9B,4BAA4B,WACvB,aAAa,KACpB,OAAO,CAAC,iCAAiC,CA8G3C,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { Chain } from '@dynamic-labs-sdk/client';
2
+ /**
3
+ * Chains MetaMask's multichain client can build a CAIP-2 scope for. Shared by
4
+ * every scope/network-mapping helper so the supported set only needs to
5
+ * change in one place.
6
+ */
7
+ export declare const SUPPORTED_METAMASK_CHAINS: Chain[];
8
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC;AAEtD;;;;GAIG;AACH,eAAO,MAAM,yBAAyB,EAAqB,KAAK,EAAE,CAAC"}
package/dist/core.cjs ADDED
@@ -0,0 +1,465 @@
1
+ const require_getOrCreateMetaMaskClientInstanceManager = require('./getOrCreateMetaMaskClientInstanceManager-C2FCB8yy.cjs');
2
+ let _dynamic_labs_sdk_assert_package_version = require("@dynamic-labs-sdk/assert-package-version");
3
+ let _dynamic_labs_sdk_client_core = require("@dynamic-labs-sdk/client/core");
4
+ let _dynamic_labs_sdk_client = require("@dynamic-labs-sdk/client");
5
+
6
+ //#region src/getScopeAccountsFromMetaMaskClient/getScopeAccountsFromMetaMaskClient.ts
7
+ /**
8
+ * Reads the accounts MetaMask granted for a single CAIP-2 scope out of the
9
+ * current session, replacing direct `provider.getSession()` access so chain
10
+ * packages never touch the raw session shape. Empty when there's no session
11
+ * or the scope wasn't granted.
12
+ *
13
+ * @example
14
+ * ```ts
15
+ * const accounts = await getScopeAccountsFromMetaMaskClient(
16
+ * { metaMaskClient, scope: 'eip155:1' },
17
+ * client
18
+ * );
19
+ * // ['eip155:1:0x...']
20
+ * ```
21
+ *
22
+ * @param client - The Dynamic client instance whose logger this reports
23
+ * against. Required (rather than defaulting to the last-initialized client)
24
+ * so a missing/empty-scope result is always traceable to the client that
25
+ * requested it.
26
+ * @returns The accounts granted for `scope`, or an empty array if there's no
27
+ * session or the scope wasn't granted.
28
+ * @see createMetaMaskMultichainClient
29
+ * @see getGrantedMetaMaskScopes
30
+ * @notInstrumented
31
+ */
32
+ const getScopeAccountsFromMetaMaskClient = async ({ metaMaskClient, scope }, client) => {
33
+ const session = await metaMaskClient.provider.getSession();
34
+ const accounts = session?.sessionScopes[scope]?.accounts ?? [];
35
+ (0, _dynamic_labs_sdk_client_core.getCore)(client).logger.debug("[MetaMask:Scopes] Resolved scope accounts", {
36
+ accountCount: accounts.length,
37
+ hasSession: session != null,
38
+ scope
39
+ });
40
+ return accounts;
41
+ };
42
+
43
+ //#endregion
44
+ //#region src/assertMetaMaskNetworkIsGranted/assertMetaMaskNetworkIsGranted.ts
45
+ /**
46
+ * Guards a MetaMask wallet provider's `switchActiveNetwork` against ever
47
+ * pointing at a network MetaMask didn't actually grant an account for.
48
+ * Every configured network is requested as an *optional* CAIP-25 scope (see
49
+ * `getMetaMaskScopes`), so MetaMask may silently approve only a subset --
50
+ * switching the active network to one outside that subset would leave every
51
+ * subsequent signing/sending call targeting a scope the wallet will reject.
52
+ *
53
+ * @example
54
+ * ```ts
55
+ * await assertMetaMaskNetworkIsGranted(
56
+ * { chain: 'SOL', metaMaskClient, networkId: '103' },
57
+ * client
58
+ * );
59
+ * // Throws MetaMaskUnscopedNetworkError if MetaMask never granted an
60
+ * // account for network "103" in the current session.
61
+ * ```
62
+ *
63
+ * @param client - The Dynamic client instance whose logger this reports
64
+ * against.
65
+ * @returns A promise that resolves once the target network is confirmed granted.
66
+ * @throws {MetaMaskUnscopedNetworkError} If `networkId` has no granted
67
+ * account in the current session (including when it has no configured
68
+ * MetaMask scope at all).
69
+ * @see resolveActiveMetaMaskScope
70
+ * @see MetaMaskUnscopedNetworkError
71
+ * @notInstrumented
72
+ */
73
+ const assertMetaMaskNetworkIsGranted = async ({ chain, metaMaskClient, networkId }, client) => {
74
+ const { logger } = (0, _dynamic_labs_sdk_client_core.getCore)(client);
75
+ const scope = require_getOrCreateMetaMaskClientInstanceManager.getMetaMaskScopeForNetworkId({
76
+ chain,
77
+ networkId
78
+ }, client);
79
+ const accounts = scope ? await getScopeAccountsFromMetaMaskClient({
80
+ metaMaskClient,
81
+ scope
82
+ }, client) : [];
83
+ logger.debug("[MetaMask:Scopes] Checked whether target network is granted", {
84
+ accountCount: accounts.length,
85
+ chain,
86
+ networkId,
87
+ scope
88
+ });
89
+ if (accounts.length === 0) {
90
+ logger.warn("[MetaMask:Scopes] Rejected switch to an unscoped network", {
91
+ chain,
92
+ networkId,
93
+ scope
94
+ });
95
+ throw new require_getOrCreateMetaMaskClientInstanceManager.MetaMaskUnscopedNetworkError({
96
+ networkId,
97
+ scope: scope ?? "unknown"
98
+ });
99
+ }
100
+ };
101
+
102
+ //#endregion
103
+ //#region src/createMetaMaskWalletProviderEventEmitter/createMetaMaskWalletProviderEventEmitter.ts
104
+ /**
105
+ * MetaMask's multichain session never triggers `createWalletProviderEventEmitter`'s
106
+ * usual external-listener flow -- there is no live wallet event to bridge, only our
107
+ * own local actions (e.g. `switchActiveNetwork`) that need to notify subscribers
108
+ * themselves. `setupEventListeners` here just captures the handler references so
109
+ * they can be invoked directly, instead of from a real event source.
110
+ *
111
+ * @example
112
+ * ```ts
113
+ * const metaMaskEvents = createMetaMaskWalletProviderEventEmitter();
114
+ * metaMaskEvents.getEventEmitter().on('networkChanged', ({ networkId }) => {});
115
+ * metaMaskEvents.emitNetworkChanged({ networkId: '137' });
116
+ * ```
117
+ * @returns A `MetaMaskWalletProviderEventEmitter` ready to emit synthetic
118
+ * `networkChanged`/`disconnected` events.
119
+ * @see MetaMaskWalletProviderEventEmitter
120
+ * @see createWalletProviderEventEmitter
121
+ * @notInstrumented
122
+ */
123
+ const createMetaMaskWalletProviderEventEmitter = () => {
124
+ let handleDisconnected;
125
+ let handleNetworkChanged;
126
+ const emitter = (0, _dynamic_labs_sdk_client_core.createWalletProviderEventEmitter)({
127
+ removeEventListeners: () => {},
128
+ setupEventListeners: (handlers) => {
129
+ handleDisconnected = handlers.handleDisconnected;
130
+ handleNetworkChanged = handlers.handleNetworkChanged;
131
+ },
132
+ supportedEvents: ["disconnected", "networkChanged"]
133
+ });
134
+ emitter.getEventEmitter();
135
+ return {
136
+ ...emitter,
137
+ emitDisconnected: () => handleDisconnected(),
138
+ emitNetworkChanged: (params) => handleNetworkChanged(params)
139
+ };
140
+ };
141
+
142
+ //#endregion
143
+ //#region src/disconnectMetaMaskWalletProvider/disconnectMetaMaskWalletProvider.ts
144
+ /**
145
+ * Shared `disconnectWalletAccount` for every chain's MetaMask wallet provider
146
+ * (EVM, Solana, ...). `getOrCreateMetaMaskClientInstanceManager` hands every chain
147
+ * the SAME client instance -- one multichain session shared across chains --
148
+ * so this only asks MetaMask to drop this chain's own scopes rather than
149
+ * tearing the whole session down under a still-connected chain.
150
+ *
151
+ * `disconnect`'s teardown in `@metamask/connect-multichain` is itself
152
+ * scope-aware: it only actually ends the shared session once every chain's
153
+ * scopes are gone, reflected by `metaMaskClient.status` flipping to
154
+ * `'disconnected'`. Only then do we clear the persisted session and evict
155
+ * the cached client, so a chain that's still connected is left untouched.
156
+ *
157
+ * @example
158
+ * ```ts
159
+ * await disconnectMetaMaskWalletProvider(
160
+ * { chain: 'EVM', walletProviderKey: 'metamask-evm' },
161
+ * client
162
+ * );
163
+ * ```
164
+ * @param params.chain - Chain of the wallet account being disconnected.
165
+ * @param params.walletProviderKey - Key of the chain-specific wallet provider to unregister.
166
+ * @param client - The Dynamic client instance. Required (rather than
167
+ * defaulting to the last-initialized client) since this always runs from
168
+ * inside an already-resolved chain wallet provider, which already has one.
169
+ * @returns A promise that resolves once local cleanup is done. Never rejects
170
+ * on the remote signal failing -- that's logged, not surfaced, since the
171
+ * wallet account is being removed either way.
172
+ * @see clearMetaMaskStorage
173
+ * @see getMetaMaskScopes
174
+ * @notInstrumented
175
+ */
176
+ const disconnectMetaMaskWalletProvider = async ({ chain, walletProviderKey }, client) => {
177
+ const { logger } = (0, _dynamic_labs_sdk_client_core.getCore)(client);
178
+ const metaMaskClient = await require_getOrCreateMetaMaskClientInstanceManager.getOrCreateMetaMaskClientInstanceManager(client).getMetaMaskClient();
179
+ const scopes = require_getOrCreateMetaMaskClientInstanceManager.getMetaMaskScopes({ chain }, client);
180
+ logger.debug("[MetaMask:Disconnect] Disconnecting wallet account", {
181
+ chain,
182
+ scopes,
183
+ walletProviderKey
184
+ });
185
+ try {
186
+ await metaMaskClient.disconnect(scopes);
187
+ } catch (error) {
188
+ logger.error("[MetaMask:Disconnect] Remote signal failed", {
189
+ error,
190
+ walletProviderKey
191
+ });
192
+ }
193
+ (0, _dynamic_labs_sdk_client_core.getWalletProviderRegistry)(client).unregister(walletProviderKey);
194
+ logger.debug("[MetaMask:Disconnect] Shared session status after disconnect", {
195
+ status: metaMaskClient.status,
196
+ walletProviderKey
197
+ });
198
+ if (metaMaskClient.status === "disconnected") await require_getOrCreateMetaMaskClientInstanceManager.clearMetaMaskStorage(client);
199
+ };
200
+
201
+ //#endregion
202
+ //#region src/reconcileMetaMaskWalletProvider/reconcileMetaMaskWalletProvider.ts
203
+ /**
204
+ * Keeps a chain's MetaMask SDK wallet provider registered for as
205
+ * long as the user has a wallet account under its exact key, and
206
+ * unregisters it once that wallet account disappears (e.g. on disconnect).
207
+ * This is needed because always adding the MetaMask SDK wallet provider
208
+ * would conflict with the browser extension wallet provider, so we only add
209
+ * it once the user has a wallet account that was connected via QR code.
210
+ * The placeholder is only built (via `walletProviderBuilder`) the first time
211
+ * it must be registered, mirroring how WalletConnect only builds a wallet
212
+ * provider for a session that actually exists.
213
+ *
214
+ * @example
215
+ * ```ts
216
+ * reconcileMetaMaskWalletProvider(
217
+ * {
218
+ * walletProviderBuilder: createMetaMaskEvmWalletProvider,
219
+ * walletProviderKey: getMetaMaskEvmSdkWalletProviderKey(),
220
+ * },
221
+ * client
222
+ * );
223
+ * ```
224
+ * @param params.walletProviderBuilder - Builds the SDK placeholder wallet provider once it must be registered.
225
+ * @param params.walletProviderKey - The placeholder's deterministic wallet provider key.
226
+ * @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.
227
+ * @returns void
228
+ * @see connectWithMetaMaskUri
229
+ * @see WalletProviderPriority
230
+ * @notInstrumented
231
+ */
232
+ const reconcileMetaMaskWalletProvider = ({ walletProviderBuilder, walletProviderKey }, client = (0, _dynamic_labs_sdk_client_core.getDefaultClient)()) => {
233
+ const walletProviderRegistry = (0, _dynamic_labs_sdk_client_core.getWalletProviderRegistry)(client);
234
+ const reconcile = () => {
235
+ const isSdkPlaceholderRegistered = walletProviderRegistry.getByKey(walletProviderKey) !== void 0;
236
+ const shouldBeRegistered = (0, _dynamic_labs_sdk_client.getWalletAccounts)(client).some((walletAccount) => walletAccount.walletProviderKey === walletProviderKey);
237
+ if (isSdkPlaceholderRegistered && !shouldBeRegistered) {
238
+ walletProviderRegistry.unregister(walletProviderKey);
239
+ return;
240
+ }
241
+ if (!isSdkPlaceholderRegistered && shouldBeRegistered) walletProviderRegistry.register({
242
+ priority: _dynamic_labs_sdk_client_core.WalletProviderPriority.WALLET_SDK,
243
+ walletProvider: walletProviderBuilder(client)
244
+ });
245
+ };
246
+ (0, _dynamic_labs_sdk_client.onEvent)({
247
+ event: "walletAccountsChanged",
248
+ listener: () => reconcile()
249
+ }, client);
250
+ reconcile();
251
+ };
252
+
253
+ //#endregion
254
+ //#region src/getGrantedMetaMaskScopes/getGrantedMetaMaskScopes.ts
255
+ /**
256
+ * Enumerates every CAIP-2 scope in the current session that MetaMask
257
+ * actually granted at least one account for. Every scope requested at
258
+ * `connect()` time (see `getMetaMaskScopes`) is sent as an *optional*
259
+ * CAIP-25 scope, never a required one, so MetaMask is free to approve only a
260
+ * subset -- `session.sessionScopes` still has a key for every requested
261
+ * scope, just with an empty `accounts` array for the ones that weren't
262
+ * granted. This filters those out, replacing direct `provider.getSession()`
263
+ * access so chain packages never touch the raw session shape.
264
+ *
265
+ * @example
266
+ * ```ts
267
+ * const granted = await getGrantedMetaMaskScopes({ metaMaskClient }, client);
268
+ * // [{ scope: 'eip155:1', accounts: ['eip155:1:0x...'] }]
269
+ * ```
270
+ *
271
+ * @param client - The Dynamic client instance whose logger this reports
272
+ * against. Required (rather than defaulting to the last-initialized client)
273
+ * so an empty result is always traceable to the client that requested it.
274
+ * @returns The scopes with at least one granted account, and their accounts.
275
+ * @see createMetaMaskMultichainClient
276
+ * @see resolveActiveMetaMaskScope
277
+ * @notInstrumented
278
+ */
279
+ const getGrantedMetaMaskScopes = async ({ metaMaskClient }, client) => {
280
+ const session = await metaMaskClient.provider.getSession();
281
+ const sessionScopes = session?.sessionScopes ?? {};
282
+ const grantedScopes = Object.entries(sessionScopes).filter(([, scopeData]) => (scopeData.accounts ?? []).length > 0).map(([scope, scopeData]) => ({
283
+ accounts: scopeData.accounts ?? [],
284
+ scope
285
+ }));
286
+ (0, _dynamic_labs_sdk_client_core.getCore)(client).logger.debug("[MetaMask:Scopes] Resolved granted scopes", {
287
+ grantedScopeCount: grantedScopes.length,
288
+ hasSession: session != null
289
+ });
290
+ return grantedScopes;
291
+ };
292
+
293
+ //#endregion
294
+ //#region src/getNetworkIdFromMetaMaskScope/getNetworkIdFromMetaMaskScope.ts
295
+ /**
296
+ * Reverse of `getMetaMaskScopeForNetworkId`: maps a granted CAIP-2 scope
297
+ * back to the Dynamic `networkId` it came from, for the given chain.
298
+ *
299
+ * Returns `undefined` -- not a throw -- when `scope` doesn't belong to
300
+ * `chain` (e.g. an `eip155:` scope while scanning for `SOL`). For `SOL`,
301
+ * this also covers a `solana:` scope matching no configured network. This
302
+ * is the normal, expected outcome when scanning a session's granted scopes
303
+ * for a single chain: a MetaMask multichain session is shared across every
304
+ * connected chain
305
+ *
306
+ * @example
307
+ * ```ts
308
+ * const networkId = getNetworkIdFromMetaMaskScope(
309
+ * { chain: 'EVM', scope: 'eip155:1' },
310
+ * client
311
+ * );
312
+ * // '1'
313
+ * ```
314
+ *
315
+ * @returns The matching Dynamic `networkId`, or `undefined` if `scope`
316
+ * doesn't belong to `chain` (or, for `SOL`, matches no configured network).
317
+ * @see getMetaMaskScopeForNetworkId
318
+ * @see resolveActiveMetaMaskScope
319
+ * @throws {UnsupportedMetaMaskChainError} If `chain` isn't a chain MetaMask
320
+ * scopes can be built for.
321
+ * @notInstrumented
322
+ */
323
+ const getNetworkIdFromMetaMaskScope = ({ chain, scope }, client) => {
324
+ const [namespace, reference] = scope.split(":");
325
+ if (chain === "EVM") return namespace === "eip155" ? reference : void 0;
326
+ if (chain === "SOL") {
327
+ if (namespace !== "solana") return;
328
+ return (0, _dynamic_labs_sdk_client.getNetworksData)(client).find((candidate) => candidate.chain === "SOL" && candidate.genesisHash === reference)?.networkId;
329
+ }
330
+ throw new require_getOrCreateMetaMaskClientInstanceManager.UnsupportedMetaMaskChainError({
331
+ chain,
332
+ supportedChains: require_getOrCreateMetaMaskClientInstanceManager.SUPPORTED_METAMASK_CHAINS
333
+ });
334
+ };
335
+
336
+ //#endregion
337
+ //#region src/resolveActiveMetaMaskScope/resolveActiveMetaMaskScope.ts
338
+ /**
339
+ * Resolves the network a MetaMask wallet provider should treat as active,
340
+ * self-healing when the last-known-active network (see
341
+ * `getActiveNetworkIdFromLastKnownRegistry`) turns out to have no granted
342
+ * account.
343
+ *
344
+ * Every configured network is requested as an *optional* CAIP-25 scope (see
345
+ * `getMetaMaskScopes`), so MetaMask is free to grant an account for only a
346
+ * subset -- and the registry's own default (the first configured network for
347
+ * the chain) has no awareness of which subset that was. If the active
348
+ * network's scope is empty, this scans every OTHER scope this chain
349
+ * requested, restricted to the ones MetaMask actually granted, and adopts
350
+ * whichever is found (preferring a non-testnet network) as the new active
351
+ * network -- persisting the correction so future calls don't repeat the
352
+ * scan. If nothing was granted for this chain at all, the original
353
+ * (accounts: []) result is returned unchanged, preserving the existing
354
+ * "no address found" behavior when there's truly nothing to fall back to.
355
+ *
356
+ * @example
357
+ * ```ts
358
+ * const { accounts } = await resolveActiveMetaMaskScope(
359
+ * { chain: 'SOL', metaMaskClient, walletProviderKey },
360
+ * client
361
+ * );
362
+ * // accounts is non-empty even if the registry's default network wasn't
363
+ * // the one MetaMask actually granted.
364
+ * ```
365
+ *
366
+ * @param [client] - The Dynamic client instance whose logger this reports
367
+ * against. Required (rather than defaulting to the last-initialized client)
368
+ * so a fallback decision is always traceable to the client that requested it.
369
+ * @returns The resolved active network's id, CAIP-2 scope, and granted accounts.
370
+ * @see assertMetaMaskNetworkIsGranted
371
+ * @see getGrantedMetaMaskScopes
372
+ * @notInstrumented
373
+ */
374
+ const resolveActiveMetaMaskScope = async ({ chain, metaMaskClient, walletProviderKey }, client = (0, _dynamic_labs_sdk_client_core.getDefaultClient)()) => {
375
+ const { logger } = (0, _dynamic_labs_sdk_client_core.getCore)(client);
376
+ const { networkId: activeNetworkId } = await (0, _dynamic_labs_sdk_client_core.getActiveNetworkIdFromLastKnownRegistry)({
377
+ client,
378
+ walletProviderKey
379
+ });
380
+ const activeScope = require_getOrCreateMetaMaskClientInstanceManager.getMetaMaskScopeForNetworkId({
381
+ chain,
382
+ networkId: activeNetworkId
383
+ }, client);
384
+ const activeAccounts = activeScope ? await getScopeAccountsFromMetaMaskClient({
385
+ metaMaskClient,
386
+ scope: activeScope
387
+ }, client) : [];
388
+ if (activeAccounts.length > 0) {
389
+ logger.debug("[MetaMask:Scopes] Active network scope already has granted accounts", {
390
+ activeNetworkId,
391
+ chain,
392
+ scope: activeScope
393
+ });
394
+ return {
395
+ accounts: activeAccounts,
396
+ networkId: activeNetworkId,
397
+ scope: activeScope
398
+ };
399
+ }
400
+ logger.debug("[MetaMask:Scopes] Active network scope has no granted accounts, scanning other requested scopes for this chain", {
401
+ activeNetworkId,
402
+ chain,
403
+ scope: activeScope
404
+ });
405
+ const requestedScopes = new Set(require_getOrCreateMetaMaskClientInstanceManager.getMetaMaskScopes({ chain }, client));
406
+ const grantedScopes = await getGrantedMetaMaskScopes({ metaMaskClient }, client);
407
+ const configuredNetworks = (0, _dynamic_labs_sdk_client.getNetworksData)(client).filter((network) => network.chain === chain);
408
+ const testnetByNetworkId = new Map(configuredNetworks.map((network) => [network.networkId, network.testnet]));
409
+ const configuredOrderByNetworkId = new Map(configuredNetworks.map((network, index) => [network.networkId, index]));
410
+ const candidates = grantedScopes.filter(({ scope }) => requestedScopes.has(scope)).flatMap(({ accounts, scope }) => {
411
+ const networkId = getNetworkIdFromMetaMaskScope({
412
+ chain,
413
+ scope
414
+ }, client);
415
+ return networkId ? [{
416
+ accounts,
417
+ networkId,
418
+ scope
419
+ }] : [];
420
+ }).sort((a, b) => (configuredOrderByNetworkId.get(a.networkId) ?? 0) - (configuredOrderByNetworkId.get(b.networkId) ?? 0));
421
+ const fallback = candidates.find(({ networkId }) => !testnetByNetworkId.get(networkId)) ?? candidates[0];
422
+ if (fallback === void 0) {
423
+ logger.debug("[MetaMask:Scopes] No granted scope with accounts found for chain", {
424
+ activeNetworkId,
425
+ chain,
426
+ requestedScopes: [...requestedScopes]
427
+ });
428
+ return {
429
+ accounts: activeAccounts,
430
+ networkId: activeNetworkId,
431
+ scope: activeScope
432
+ };
433
+ }
434
+ logger.debug("[MetaMask:Scopes] Falling back to a granted scope after the active scope had no accounts", {
435
+ activeNetworkId,
436
+ activeScope,
437
+ chain,
438
+ fallbackNetworkId: fallback.networkId,
439
+ fallbackScope: fallback.scope
440
+ });
441
+ await (0, _dynamic_labs_sdk_client_core.switchActiveNetworkInLastKnownRegistry)({
442
+ client,
443
+ networkId: fallback.networkId,
444
+ walletProviderKey
445
+ });
446
+ return {
447
+ accounts: fallback.accounts,
448
+ networkId: fallback.networkId,
449
+ scope: fallback.scope
450
+ };
451
+ };
452
+
453
+ //#endregion
454
+ //#region src/exports/core.ts
455
+ (0, _dynamic_labs_sdk_assert_package_version.assertPackageVersion)(require_getOrCreateMetaMaskClientInstanceManager.name, require_getOrCreateMetaMaskClientInstanceManager.version);
456
+
457
+ //#endregion
458
+ exports.assertMetaMaskNetworkIsGranted = assertMetaMaskNetworkIsGranted;
459
+ exports.clearMetaMaskStorage = require_getOrCreateMetaMaskClientInstanceManager.clearMetaMaskStorage;
460
+ exports.createMetaMaskWalletProviderEventEmitter = createMetaMaskWalletProviderEventEmitter;
461
+ exports.disconnectMetaMaskWalletProvider = disconnectMetaMaskWalletProvider;
462
+ exports.getOrCreateMetaMaskClientInstanceManager = require_getOrCreateMetaMaskClientInstanceManager.getOrCreateMetaMaskClientInstanceManager;
463
+ exports.reconcileMetaMaskWalletProvider = reconcileMetaMaskWalletProvider;
464
+ exports.resolveActiveMetaMaskScope = resolveActiveMetaMaskScope;
465
+ //# sourceMappingURL=core.cjs.map