@dynamic-labs-sdk/evm 1.12.2 → 1.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (182) hide show
  1. package/dist/{addEIP6963Extension-fUqpmLPg.cjs → addEIP6963Extension-CVWgGDEP.cjs} +6 -6
  2. package/dist/addEIP6963Extension-CVWgGDEP.cjs.map +1 -0
  3. package/dist/{addEIP6963Extension-7nSllrSL.esm.js → addEIP6963Extension-CeJG9hJH.esm.js} +6 -6
  4. package/dist/addEIP6963Extension-CeJG9hJH.esm.js.map +1 -0
  5. package/dist/{addEIP6963Extension-CrpzqtkA.native.esm.js → addEIP6963Extension-DCVlKLtl.native.esm.js} +2 -2
  6. package/dist/{addEIP6963Extension-CrpzqtkA.native.esm.js.map → addEIP6963Extension-DCVlKLtl.native.esm.js.map} +1 -1
  7. package/dist/addEvmExtension/addEvmExtension.d.ts +1 -1
  8. package/dist/{addWaasEvmExtension-CrLafMzM.native.esm.js → addWaasEvmExtension-B1W9hBoO.native.esm.js} +8 -8
  9. package/dist/addWaasEvmExtension-B1W9hBoO.native.esm.js.map +1 -0
  10. package/dist/{addWaasEvmExtension-CREH1sIW.esm.js → addWaasEvmExtension-BBV5efH_.esm.js} +8 -8
  11. package/dist/addWaasEvmExtension-BBV5efH_.esm.js.map +1 -0
  12. package/dist/{addWaasEvmExtension-6z779Y92.cjs → addWaasEvmExtension-NkXUcFBx.cjs} +8 -8
  13. package/dist/addWaasEvmExtension-NkXUcFBx.cjs.map +1 -0
  14. package/dist/baseAccount/addBaseAccountEvmExtension/addBaseAccountEvmExtension.d.ts +1 -1
  15. package/dist/baseAccount/createBaseAccountEvmWalletProvider/createBaseAccountEvmWalletProvider.d.ts +1 -1
  16. package/dist/baseAccount.cjs +6 -6
  17. package/dist/baseAccount.cjs.map +1 -1
  18. package/dist/baseAccount.esm.js +6 -6
  19. package/dist/baseAccount.esm.js.map +1 -1
  20. package/dist/baseAccount.native.esm.js +7 -7
  21. package/dist/baseAccount.native.esm.js.map +1 -1
  22. package/dist/{createWalletClientForWalletAccount-CuakQYYA.native.esm.js → createWalletClientForWalletAccount-BNb9shKs.native.esm.js} +7 -7
  23. package/dist/createWalletClientForWalletAccount-BNb9shKs.native.esm.js.map +1 -0
  24. package/dist/{createWalletClientForWalletAccount-DqfylJR6.cjs → createWalletClientForWalletAccount-BO0XMuIl.cjs} +8 -8
  25. package/dist/createWalletClientForWalletAccount-BO0XMuIl.cjs.map +1 -0
  26. package/dist/{createWalletClientForWalletAccount-BfsmDgUZ.esm.js → createWalletClientForWalletAccount-Cs1cCKrt.esm.js} +8 -8
  27. package/dist/createWalletClientForWalletAccount-Cs1cCKrt.esm.js.map +1 -0
  28. package/dist/{createWalletProviderFromEIP1193Provider-DlYySIYZ.esm.js → createWalletProviderFromEIP1193Provider-5QOYfUP4.esm.js} +7 -7
  29. package/dist/createWalletProviderFromEIP1193Provider-5QOYfUP4.esm.js.map +1 -0
  30. package/dist/{createWalletProviderFromEIP1193Provider-BtnVTsF7.cjs → createWalletProviderFromEIP1193Provider-CVPmT46o.cjs} +7 -7
  31. package/dist/createWalletProviderFromEIP1193Provider-CVPmT46o.cjs.map +1 -0
  32. package/dist/{createWalletProviderFromEIP1193Provider-B8doAYSi.native.esm.js → createWalletProviderFromEIP1193Provider-DZ0ciUd0.native.esm.js} +7 -7
  33. package/dist/createWalletProviderFromEIP1193Provider-DZ0ciUd0.native.esm.js.map +1 -0
  34. package/dist/eip6963/addEIP6963Extension/addEIP6963Extension.d.ts +1 -1
  35. package/dist/eip6963/utils/isEip6963Event/isEip6963Event.d.ts +1 -1
  36. package/dist/eip6963/utils/isEip6963Event/isEip6963Event.d.ts.map +1 -1
  37. package/dist/eip6963/utils/listenForEIP6963ProviderAnnouncement/listenForEIP6963ProviderAnnouncement.d.ts +1 -1
  38. package/dist/eip6963/utils/listenForEIP6963ProviderAnnouncement/listenForEIP6963ProviderAnnouncement.d.ts.map +1 -1
  39. package/dist/eip6963.cjs +4 -4
  40. package/dist/eip6963.esm.js +4 -4
  41. package/dist/eip6963.native.esm.js +2 -2
  42. package/dist/{evmTransferAmount-BEKzmQoH.esm.js → evmTransferAmount-Bfn3RYq7.native.esm.js} +29 -29
  43. package/dist/evmTransferAmount-Bfn3RYq7.native.esm.js.map +1 -0
  44. package/dist/{evmTransferAmount-CAvraOzi.cjs → evmTransferAmount-DwPPkeWK.cjs} +29 -29
  45. package/dist/evmTransferAmount-DwPPkeWK.cjs.map +1 -0
  46. package/dist/{evmTransferAmount-BQDSXSva.native.esm.js → evmTransferAmount-j0G3UjkD.esm.js} +29 -29
  47. package/dist/evmTransferAmount-j0G3UjkD.esm.js.map +1 -0
  48. package/dist/gasless/activate7702Delegation/activate7702Delegation.d.ts +1 -1
  49. package/dist/gasless/create7702DelegationRegistry/create7702DelegationRegistry.d.ts +1 -1
  50. package/dist/gasless/generateIntentNonce/generateIntentNonce.d.ts +1 -1
  51. package/dist/gasless/generateRandomNonce/generateRandomNonce.d.ts +1 -1
  52. package/dist/gasless/get7702DelegationRegistry/get7702DelegationRegistry.d.ts +1 -1
  53. package/dist/gasless/getAvailableEvmGaslessRelayer/getAvailableEvmGaslessRelayer.d.ts +1 -1
  54. package/dist/gasless/getEVMSponsoredTransactionStatus/getEVMSponsoredTransactionStatus.d.ts +1 -1
  55. package/dist/gasless/is7702DelegationActive/is7702DelegationActive.d.ts +1 -1
  56. package/dist/gasless/isEvmGasSponsorshipEnabled/isEvmGasSponsorshipEnabled.d.ts +1 -1
  57. package/dist/gasless/relaySponsoredTransaction/relaySponsoredTransaction.d.ts +1 -1
  58. package/dist/gasless/resolveAuthorization/resolveAuthorization.d.ts +1 -1
  59. package/dist/gasless/resolveChainId/resolveChainId.d.ts +1 -1
  60. package/dist/gasless/sendSponsoredTransaction/sendSponsoredTransaction.d.ts +1 -1
  61. package/dist/gasless/sign7702Authorization/sign7702Authorization.d.ts +1 -1
  62. package/dist/gasless/signSponsoredTransaction/signSponsoredTransaction.d.ts +1 -1
  63. package/dist/gasless/toSerializedAuthorization/toSerializedAuthorization.d.ts +1 -1
  64. package/dist/gasless/waitForSponsoredTransaction/waitForSponsoredTransaction.d.ts +1 -1
  65. package/dist/index.cjs +10 -10
  66. package/dist/index.cjs.map +1 -1
  67. package/dist/index.esm.js +10 -10
  68. package/dist/index.esm.js.map +1 -1
  69. package/dist/index.native.esm.js +10 -10
  70. package/dist/index.native.esm.js.map +1 -1
  71. package/dist/isEvmNetworkProvider/isEvmNetworkProvider.d.ts +1 -1
  72. package/dist/isEvmWalletProvider/isEvmWalletProvider.d.ts +1 -1
  73. package/dist/isEvmWalletProvider/isEvmWalletProvider.d.ts.map +1 -1
  74. package/dist/metamask/connectAndVerifyWithMetaMaskUriEvm/connectAndVerifyWithMetaMaskUriEvm.d.ts +1 -1
  75. package/dist/metamask/connectWithMetaMaskUriEvm/connectWithMetaMaskUriEvm.d.ts +1 -1
  76. package/dist/metamask/createMetaMaskEvmWalletProvider/createMetaMaskEvmWalletProvider.d.ts +1 -1
  77. package/dist/metamask/getMetaMaskEvmExtensionWalletProviderKey/getMetaMaskEvmExtensionWalletProviderKey.d.ts +1 -1
  78. package/dist/metamask/utils/createMetaMaskEvmController/createMetaMaskEvmController.d.ts +1 -1
  79. package/dist/metamask/utils/getOrCreateMetaMaskEvmController/getOrCreateMetaMaskEvmController.d.ts +1 -1
  80. package/dist/metamask/utils/getSupportedNetworks/getSupportedNetworks.d.ts +1 -1
  81. package/dist/metamask/utils/getSupportedNetworks/getSupportedNetworks.d.ts.map +1 -1
  82. package/dist/metamask/utils/subscribeMetaMaskEvmFacadeListener/subscribeMetaMaskEvmFacadeListener.d.ts +1 -1
  83. package/dist/metamask.cjs +12 -12
  84. package/dist/metamask.cjs.map +1 -1
  85. package/dist/metamask.esm.js +12 -12
  86. package/dist/metamask.esm.js.map +1 -1
  87. package/dist/metamask.native.esm.js +13 -13
  88. package/dist/metamask.native.esm.js.map +1 -1
  89. package/dist/{package-DjqTHfEa.native.esm.js → package-x2e-NQ78.native.esm.js} +2 -2
  90. package/dist/package-x2e-NQ78.native.esm.js.map +1 -0
  91. package/dist/registerEvmNetworkProviderBuilder/registerEvmNetworkProviderBuilder.d.ts +1 -1
  92. package/dist/registerEvmNetworkProviderBuilder/registerEvmNetworkProviderBuilder.d.ts.map +1 -1
  93. package/dist/simulateEvmTransaction/simulateEvmTransaction.d.ts +1 -1
  94. package/dist/tempo/utils/tempoChainIds/tempoChainIds.d.ts +1 -1
  95. package/dist/tsconfig.lib.tsbuildinfo +1 -1
  96. package/dist/utils/approveErc20/approveErc20.d.ts +1 -1
  97. package/dist/utils/approveErc20IfRequiredAndWaitReceipt/approveErc20IfRequiredAndWaitReceipt.d.ts +1 -1
  98. package/dist/utils/calculateEvmTransactionFee/calculateEvmTransactionFee.d.ts +1 -1
  99. package/dist/utils/createEvmNetworkProvider/createEvmNetworkProvider.d.ts +1 -1
  100. package/dist/utils/createEvmNetworkProvider/createEvmNetworkProvider.d.ts.map +1 -1
  101. package/dist/utils/createWalletProviderFromEIP1193Provider/addNetwork/addNetwork.d.ts +1 -1
  102. package/dist/utils/createWalletProviderFromEIP1193Provider/createWalletProviderFromEIP1193Provider.d.ts +1 -1
  103. package/dist/utils/createWalletProviderFromEIP1193Provider/createWalletProviderFromEIP1193Provider.d.ts.map +1 -1
  104. package/dist/utils/createWalletProviderFromEIP1193Provider/getActiveNetworkId/getActiveNetworkId.d.ts +1 -1
  105. package/dist/utils/createWalletProviderFromEIP1193Provider/getActiveNetworkId/getActiveNetworkId.d.ts.map +1 -1
  106. package/dist/utils/createWalletProviderFromEIP1193Provider/isUnrecognizedChainError/isUnrecognizedChainError.d.ts +1 -1
  107. package/dist/utils/createWalletProviderFromEIP1193Provider/isUnrecognizedChainError/isUnrecognizedChainError.d.ts.map +1 -1
  108. package/dist/utils/createWalletProviderFromEIP1193Provider/switchActiveNetwork/switchActiveNetwork.d.ts +1 -1
  109. package/dist/utils/createWalletProviderFromEIP1193Provider/switchActiveNetwork/switchActiveNetwork.d.ts.map +1 -1
  110. package/dist/utils/evmConfirmTransaction/evmConfirmTransaction.d.ts +1 -1
  111. package/dist/utils/evmExecuteSponsoredSwapTransaction/evmExecuteSponsoredSwapTransaction.d.ts +1 -1
  112. package/dist/utils/evmExecuteSwapTransaction/evmExecuteSwapTransaction.d.ts +1 -1
  113. package/dist/utils/evmTransferAmount/evmTransferAmount.d.ts +1 -1
  114. package/dist/utils/evmTransferAmount/evmTransferAmount.d.ts.map +1 -1
  115. package/dist/utils/fetchEvmBalance/fetchEvmBalance.d.ts +1 -1
  116. package/dist/utils/fetchEvmBalance/fetchEvmBalance.d.ts.map +1 -1
  117. package/dist/utils/getErc20Allowance/getErc20Allowance.d.ts +1 -1
  118. package/dist/utils/getEvmNetworkIds/getEvmNetworkIds.d.ts +1 -1
  119. package/dist/utils/getEvmNetworksData/getEvmNetworksData.d.ts +1 -1
  120. package/dist/utils/isEIP1193Provider/isEIP1193Provider.d.ts +1 -1
  121. package/dist/utils/isEIP1193Provider/isEIP1193Provider.d.ts.map +1 -1
  122. package/dist/utils/isEvmWalletAccount/isEvmWalletAccount.d.ts +1 -1
  123. package/dist/viem/createPublicClientFromNetworkData/createPublicClientFromNetworkData.d.ts +1 -1
  124. package/dist/viem/createWalletClientForWalletAccount/createWalletClientForWalletAccount.d.ts +1 -1
  125. package/dist/viem/utils/mapNetworkDataToViemChain/mapNetworkDataToViemChain.d.ts +1 -1
  126. package/dist/viem/utils/walletProviderHasCustomWalletClient/isEvmWalletProviderWithCustomViemClient.d.ts +1 -1
  127. package/dist/viem/utils/walletProviderHasCustomWalletClient/isEvmWalletProviderWithCustomViemClient.d.ts.map +1 -1
  128. package/dist/viem.cjs +1 -1
  129. package/dist/viem.esm.js +1 -1
  130. package/dist/viem.native.esm.js +2 -2
  131. package/dist/waas/addWaasEvmExtension/addWaasEvmExtension.d.ts +1 -1
  132. package/dist/waas/utils/createWalletProviderForWaasEvm/createViemWalletClientForWaas/createViemWalletClientForWaas.d.ts +1 -1
  133. package/dist/waas/utils/createWalletProviderForWaasEvm/createViemWalletClientForWaas/createViemWalletClientForWaas.d.ts.map +1 -1
  134. package/dist/waas/utils/createWalletProviderForWaasEvm/createWalletProviderForWaasEvm.d.ts +1 -1
  135. package/dist/waas/utils/createWalletProviderForWaasEvm/createWalletProviderForWaasEvm.d.ts.map +1 -1
  136. package/dist/waas/utils/createWalletProviderForWaasEvm/signAuthorization/signAuthorization.d.ts +1 -1
  137. package/dist/waas/utils/createWalletProviderForWaasEvm/signAuthorization/signAuthorization.d.ts.map +1 -1
  138. package/dist/waas/utils/createWalletProviderForWaasEvm/signTypedData/signTypedData.d.ts +1 -1
  139. package/dist/waas/utils/createWalletProviderForWaasEvm/signTypedData/signTypedData.d.ts.map +1 -1
  140. package/dist/waas.cjs +3 -3
  141. package/dist/waas.esm.js +3 -3
  142. package/dist/waas.native.esm.js +4 -4
  143. package/dist/walletConnect/addWalletConnectEvmExtension/addWalletConnectEvmExtension.d.ts +1 -1
  144. package/dist/walletConnect/addWalletConnectEvmExtension/addWalletConnectEvmExtension.d.ts.map +1 -1
  145. package/dist/walletConnect/connectAndVerifyWithWalletConnectEvm/connectAndVerifyWithWalletConnectEvm.d.ts +1 -1
  146. package/dist/walletConnect/connectWithWalletConnectEvm/connectWithWalletConnectEvm.d.ts +1 -1
  147. package/dist/walletConnect/connectWithWalletConnectEvm/connectWithWalletConnectEvm.d.ts.map +1 -1
  148. package/dist/walletConnect/createWalletProviderFromEIP155Session/createWalletProviderFromEIP155Session.d.ts +1 -1
  149. package/dist/walletConnect/createWalletProviderFromEIP155Session/createWalletProviderFromEIP155Session.d.ts.map +1 -1
  150. package/dist/walletConnect/recoverEvmWalletConnectWalletProviders/recoverEvmWalletConnectWalletProviders.d.ts +1 -1
  151. package/dist/walletConnect/recoverEvmWalletConnectWalletProviders/recoverEvmWalletConnectWalletProviders.d.ts.map +1 -1
  152. package/dist/walletConnect.cjs +7 -7
  153. package/dist/walletConnect.cjs.map +1 -1
  154. package/dist/walletConnect.esm.js +7 -7
  155. package/dist/walletConnect.esm.js.map +1 -1
  156. package/dist/walletConnect.native.esm.js +8 -8
  157. package/dist/walletConnect.native.esm.js.map +1 -1
  158. package/dist/windowInjected/addEvmWindowInjectedExtension/addEvmWindowInjectedExtension.d.ts +1 -1
  159. package/dist/windowInjected/utils/detectEvmWalletFromProvider/detectEvmWalletFromProvider.d.ts +1 -1
  160. package/dist/windowInjected/utils/getEvmInjectedProviders/getEvmInjectedProviders.d.ts +1 -1
  161. package/dist/windowInjected.cjs +6 -6
  162. package/dist/windowInjected.cjs.map +1 -1
  163. package/dist/windowInjected.esm.js +6 -6
  164. package/dist/windowInjected.esm.js.map +1 -1
  165. package/dist/windowInjected.native.esm.js +7 -7
  166. package/dist/windowInjected.native.esm.js.map +1 -1
  167. package/package.json +5 -5
  168. package/dist/addEIP6963Extension-7nSllrSL.esm.js.map +0 -1
  169. package/dist/addEIP6963Extension-fUqpmLPg.cjs.map +0 -1
  170. package/dist/addWaasEvmExtension-6z779Y92.cjs.map +0 -1
  171. package/dist/addWaasEvmExtension-CREH1sIW.esm.js.map +0 -1
  172. package/dist/addWaasEvmExtension-CrLafMzM.native.esm.js.map +0 -1
  173. package/dist/createWalletClientForWalletAccount-BfsmDgUZ.esm.js.map +0 -1
  174. package/dist/createWalletClientForWalletAccount-CuakQYYA.native.esm.js.map +0 -1
  175. package/dist/createWalletClientForWalletAccount-DqfylJR6.cjs.map +0 -1
  176. package/dist/createWalletProviderFromEIP1193Provider-B8doAYSi.native.esm.js.map +0 -1
  177. package/dist/createWalletProviderFromEIP1193Provider-BtnVTsF7.cjs.map +0 -1
  178. package/dist/createWalletProviderFromEIP1193Provider-DlYySIYZ.esm.js.map +0 -1
  179. package/dist/evmTransferAmount-BEKzmQoH.esm.js.map +0 -1
  180. package/dist/evmTransferAmount-BQDSXSva.native.esm.js.map +0 -1
  181. package/dist/evmTransferAmount-CAvraOzi.cjs.map +0 -1
  182. package/dist/package-DjqTHfEa.native.esm.js.map +0 -1
package/dist/metamask.cjs CHANGED
@@ -1,6 +1,6 @@
1
- const require_createWalletClientForWalletAccount = require('./createWalletClientForWalletAccount-DqfylJR6.cjs');
2
- const require_evmTransferAmount = require('./evmTransferAmount-CAvraOzi.cjs');
3
- const require_createWalletProviderFromEIP1193Provider = require('./createWalletProviderFromEIP1193Provider-BtnVTsF7.cjs');
1
+ const require_createWalletClientForWalletAccount = require('./createWalletClientForWalletAccount-BO0XMuIl.cjs');
2
+ const require_evmTransferAmount = require('./evmTransferAmount-DwPPkeWK.cjs');
3
+ const require_createWalletProviderFromEIP1193Provider = require('./createWalletProviderFromEIP1193Provider-CVPmT46o.cjs');
4
4
  let _dynamic_labs_sdk_assert_package_version = require("@dynamic-labs-sdk/assert-package-version");
5
5
  let _dynamic_labs_sdk_client = require("@dynamic-labs-sdk/client");
6
6
  let _dynamic_labs_sdk_client_core = require("@dynamic-labs-sdk/client/core");
@@ -17,13 +17,13 @@ let _metamask_connect_evm = require("@metamask/connect-evm");
17
17
  * map required by third-party SDKs such as MetaMask or Base Account.
18
18
  *
19
19
  * @param client - The Dynamic client whose project settings drive the result.
20
- * @not-instrumented
20
+ * @notInstrumented
21
21
  */
22
22
  const getEvmNetworksData = (client) => (0, _dynamic_labs_sdk_client.getNetworksData)(client).filter((network) => network.chain === "EVM");
23
23
 
24
24
  //#endregion
25
25
  //#region src/metamask/utils/getSupportedNetworks/getSupportedNetworks.ts
26
- /** @not-instrumented */
26
+ /** @notInstrumented */
27
27
  const getSupportedNetworks = (client) => {
28
28
  const evmNetworks = getEvmNetworksData(client).sort((a, b) => {
29
29
  if (a.networkId === "1") return -1;
@@ -49,7 +49,7 @@ const getSupportedNetworks = (client) => {
49
49
  * cannot be lost to a subscription race. Dapp metadata is sourced from the
50
50
  * client's `getAppMetadata`. Browser-only.
51
51
  *
52
- * @not-instrumented
52
+ * @notInstrumented
53
53
  */
54
54
  const createMetaMaskEvmController = async (client) => {
55
55
  const supportedNetworks = getSupportedNetworks(client);
@@ -146,7 +146,7 @@ const RUNTIME_SERVICE_KEY = "metaMaskEvmController";
146
146
  * `display_uri` cache and listener registry per Dynamic client, which
147
147
  * the SDK itself does not expose.
148
148
  *
149
- * @not-instrumented
149
+ * @notInstrumented
150
150
  */
151
151
  const getOrCreateMetaMaskEvmController = (0, _dynamic_labs_sdk_client_core.createRuntimeServiceAccessKey)(RUNTIME_SERVICE_KEY, (client) => createMetaMaskEvmController(client));
152
152
 
@@ -168,7 +168,7 @@ const NOOP_UNSUBSCRIBE = () => void 0;
168
168
  * caller can clean it up later (for example, when the facade's
169
169
  * `removeAllListeners` is invoked).
170
170
  *
171
- * @not-instrumented
171
+ * @notInstrumented
172
172
  */
173
173
  const subscribeMetaMaskEvmFacadeListener = ({ client, pending, provider }) => {
174
174
  if (pending.event === "accountsChanged") return provider.on("accountsChanged", (addresses) => pending.listener([...addresses]));
@@ -191,7 +191,7 @@ const METAMASK_ICON = `${_dynamic_labs_sdk_client_core.DYNAMIC_ICONIC_SPRITE_URL
191
191
  * wallet picker by `getAvailableWalletProvidersData` — mirroring how
192
192
  * WalletConnect URI sessions register a signing-only provider.
193
193
  *
194
- * @not-instrumented
194
+ * @notInstrumented
195
195
  */
196
196
  const createMetaMaskEvmWalletProvider = async (client) => {
197
197
  const controller = await getOrCreateMetaMaskEvmController(client);
@@ -244,7 +244,7 @@ const createMetaMaskEvmWalletProvider = async (client) => {
244
244
  * the Dynamic client as a verified credential (not as an unverified
245
245
  * account).
246
246
  *
247
- * @not-instrumented
247
+ * @notInstrumented
248
248
  */
249
249
  const connectAndVerifyWithMetaMaskUriEvm = async (client = (0, _dynamic_labs_sdk_client.getDefaultClient)()) => {
250
250
  require_evmTransferAmount.registerEvmNetworkProviderBuilder(client);
@@ -276,7 +276,7 @@ const connectAndVerifyWithMetaMaskUriEvm = async (client = (0, _dynamic_labs_sdk
276
276
  * through for the best UX. The resulting wallet provider registers for signing
277
277
  * only and is never surfaced in the wallet picker.
278
278
  *
279
- * @not-instrumented
279
+ * @notInstrumented
280
280
  */
281
281
  const connectWithMetaMaskUriEvm = ({ addToDynamicWalletAccounts = true } = {}, client = (0, _dynamic_labs_sdk_client.getDefaultClient)()) => {
282
282
  require_evmTransferAmount.registerEvmNetworkProviderBuilder(client);
@@ -296,7 +296,7 @@ const connectWithMetaMaskUriEvm = ({ addToDynamicWalletAccounts = true } = {}, c
296
296
  * `connectWithWalletProvider` to route through the announced provider; fall
297
297
  * back to `connectWithMetaMaskUriEvm` when `undefined`.
298
298
  *
299
- * @not-instrumented
299
+ * @notInstrumented
300
300
  */
301
301
  const getMetaMaskEvmExtensionWalletProviderKey = (client = (0, _dynamic_labs_sdk_client.getDefaultClient)()) => (0, _dynamic_labs_sdk_metamask.getMetaMaskExtensionWalletProviderKey)({ chain: "EVM" }, client);
302
302
 
@@ -1 +1 @@
1
- {"version":3,"file":"metamask.cjs","names":["supportedNetworks: MetaMaskSupportedNetworks","latestDisplayUri: string | undefined","inFlightConnect: Promise<void> | null","exhaustiveCheck: never","DYNAMIC_ICONIC_SPRITE_URL","MetaMaskWalletNotConnectedError","createWalletProviderFromEIP1193Provider","WalletProviderEnum","packageName","packageVersion"],"sources":["../src/utils/getEvmNetworksData/getEvmNetworksData.ts","../src/metamask/utils/getSupportedNetworks/getSupportedNetworks.ts","../src/metamask/utils/createMetaMaskEvmController/createMetaMaskEvmController.ts","../src/metamask/utils/getOrCreateMetaMaskEvmController/getOrCreateMetaMaskEvmController.ts","../src/metamask/utils/subscribeMetaMaskEvmFacadeListener/subscribeMetaMaskEvmFacadeListener.ts","../src/metamask/createMetaMaskEvmWalletProvider/createMetaMaskEvmWalletProvider.ts","../src/metamask/connectAndVerifyWithMetaMaskUriEvm/connectAndVerifyWithMetaMaskUriEvm.ts","../src/metamask/connectWithMetaMaskUriEvm/connectWithMetaMaskUriEvm.ts","../src/metamask/getMetaMaskEvmExtensionWalletProviderKey/getMetaMaskEvmExtensionWalletProviderKey.ts","../src/exports/metamask.ts"],"sourcesContent":["import {\n type DynamicClient,\n type NetworkData,\n getNetworksData,\n} from '@dynamic-labs-sdk/client';\n\n/**\n * Returns the network configuration objects for the EVM networks configured\n * on the Dynamic client. Generic helper available to any EVM extension that\n * needs the full network metadata (RPC URLs, native currency, etc.) for the\n * configured EVM chain set — for instance, to build the `supportedNetworks`\n * map required by third-party SDKs such as MetaMask or Base Account.\n *\n * @param client - The Dynamic client whose project settings drive the result.\n * @not-instrumented\n */\nexport const getEvmNetworksData = (client: DynamicClient): NetworkData[] =>\n getNetworksData(client).filter((network) => network.chain === 'EVM');\n","import type { DynamicClient } from '@dynamic-labs-sdk/client';\nimport { assertNonEmptyArray } from '@dynamic-labs-sdk/client/core';\n\nimport { getEvmNetworksData } from '../../../utils/getEvmNetworksData';\n\ntype MetaMaskSupportedNetworks = Record<`0x${string}`, string>;\n\n/** @not-instrumented */\nexport const getSupportedNetworks = (\n client: DynamicClient\n): MetaMaskSupportedNetworks => {\n // Customer enabled networks, with mainnet first if available.\n const evmNetworks = getEvmNetworksData(client).sort((a, b) => {\n if (a.networkId === '1') return -1;\n if (b.networkId === '1') return 1;\n\n return 0;\n });\n\n assertNonEmptyArray(\n evmNetworks,\n 'No EVM networks have been configured. Make sure to add at least one EVM network to your project settings in the Dynamic Dashboard.'\n );\n\n const supportedNetworks: MetaMaskSupportedNetworks = {};\n\n for (const network of evmNetworks) {\n const numericChainId = Number.parseInt(network.networkId, 10);\n const hexChainId = `0x${numericChainId.toString(16)}` as `0x${string}`;\n supportedNetworks[hexChainId] = network.rpcUrls.http[0];\n }\n\n return supportedNetworks;\n};\n","import type { DynamicClient } from '@dynamic-labs-sdk/client';\nimport {\n getAppMetadata,\n getCore,\n getNativeLinkScheme,\n} from '@dynamic-labs-sdk/client/core';\nimport { clearMetaMaskSessionStorage } from '@dynamic-labs-sdk/metamask';\nimport type { DisplayUriListener } from '@dynamic-labs-sdk/metamask';\nimport { createEVMClient } from '@metamask/connect-evm';\nimport type { Hex } from '@metamask/connect-evm';\n\nimport type { MetaMaskEvmController } from '../../metamask.types';\nimport { getSupportedNetworks } from '../getSupportedNetworks';\n\n/**\n * Builds a fully-initialised `MetaMaskEvmController` for the given Dynamic\n * client. Runs the SDK in headless mode so consumers render their own QR /\n * deep-link surface, and registers `display_uri` handling as an\n * `eventHandlers` callback at construction time so the first URI emission\n * cannot be lost to a subscription race. Dapp metadata is sourced from the\n * client's `getAppMetadata`. Browser-only.\n *\n * @not-instrumented\n */\nexport const createMetaMaskEvmController = async (\n client: DynamicClient\n): Promise<MetaMaskEvmController> => {\n const supportedNetworks = getSupportedNetworks(client);\n const { appName, appLogoUrl, appUniversalLink, appNativeLink } =\n getAppMetadata(client);\n\n // Drop any IndexedDB session state left behind by a previous tab,\n // page reload, or abandoned pairing before the SDK initialises. The\n // SDK's auto-recovery path otherwise picks up a stale transport\n // descriptor and spends its (non-configurable) 10-second resume\n // timeout on every controller construction trying to revive a relay\n // session that no longer exists, surfacing as a long QR skeleton\n // delay on every page reload that follows an abandoned pairing.\n await clearMetaMaskSessionStorage();\n\n const listeners = new Set<DisplayUriListener>();\n let latestDisplayUri: string | undefined;\n\n const sdk = await createEVMClient({\n api: { supportedNetworks },\n dapp: {\n iconUrl: appLogoUrl,\n name: appName,\n nativeScheme: getNativeLinkScheme({ nativeLink: appNativeLink }),\n url: appUniversalLink ?? '',\n },\n debug: false,\n eventHandlers: {\n connect: () => {\n latestDisplayUri = undefined;\n },\n disconnect: () => {\n latestDisplayUri = undefined;\n },\n displayUri: (uri) => {\n latestDisplayUri = uri;\n for (const listener of listeners) {\n listener(uri);\n }\n },\n },\n ui: {\n headless: true,\n preferExtension: true,\n },\n });\n\n // Defensive cleanup: even though we cleared IndexedDB before\n // constructing the SDK, an in-flight `display_uri` emission could\n // theoretically race the storage delete on slow devices. Clearing\n // the cache here guarantees late subscribers cannot replay an URI\n // that originated from any pairing attempt prior to this\n // construction.\n latestDisplayUri = undefined;\n\n const onDisplayUri = (listener: DisplayUriListener): (() => void) => {\n listeners.add(listener);\n if (latestDisplayUri !== undefined) {\n listener(latestDisplayUri);\n }\n return () => {\n listeners.delete(listener);\n };\n };\n\n const chainIds = Object.keys(supportedNetworks) as Hex[];\n\n // Tracks an in-flight `connect` call so that overlapping invocations (most\n // commonly React's StrictMode double-invocation of effects, or a hook that\n // re-runs while the user is still scanning) await the same underlying\n // pairing instead of racing two `sdk.connect` calls against each other.\n // Without this, the second invocation tears down the first via\n // `sdk.disconnect()` and the SDK throws \"Cannot connect when state is\n // CONNECTING\".\n let inFlightConnect: Promise<void> | null = null;\n\n const connect = (): Promise<void> => {\n if (inFlightConnect) {\n return inFlightConnect;\n }\n\n inFlightConnect = (async () => {\n try {\n // If a previous pairing was cancelled mid-flight the SDK can be left\n // in `connecting` state with a dead transport descriptor; tear it\n // down so the next `connect` issues a fresh URI synchronously\n // instead of waiting for the SDK's (non-configurable) 10-second\n // resume timeout.\n if (sdk.status === 'connecting') {\n try {\n await sdk.disconnect();\n } catch (error) {\n getCore(client).logger.debug(\n '[metamask] pre-connect disconnect rejected (expected when aborting a pairing the wallet never accepted)',\n error\n );\n }\n }\n\n await sdk.connect({ chainIds });\n } finally {\n inFlightConnect = null;\n }\n })();\n\n return inFlightConnect;\n };\n\n return {\n clearCachedDisplayUri: () => {\n latestDisplayUri = undefined;\n },\n connect,\n getLatestDisplayUri: () => latestDisplayUri,\n onDisplayUri,\n sdk,\n };\n};\n","import { createRuntimeServiceAccessKey } from '@dynamic-labs-sdk/client/core';\n\nimport { createMetaMaskEvmController } from '../createMetaMaskEvmController';\n\nconst RUNTIME_SERVICE_KEY = 'metaMaskEvmController';\n\n/**\n * Per-`DynamicClient` accessor for the lazily-constructed MetaMask EVM\n * controller. Wraps `createMetaMaskEvmController` with the standard\n * `runtimeServices` cache so every caller — the EIP-1193 wallet-provider\n * façade, the `display_uri` subscription helper, and the\n * `connectWithMetaMaskEvm` URI-returning helper — shares the same\n * controller (and therefore the same SDK instance, display-URI cache, and\n * listener registry) per Dynamic client.\n *\n * This matches the pattern used by the WalletConnect `getSignClient`\n * accessor: the first call triggers construction; subsequent calls\n * (within the same client) return the cached promise without re-running\n * the builder.\n *\n * The cache is **per-Dynamic-client, not per-SDK-instance**:\n * `@metamask/connect-evm`'s `createEVMClient` is itself a singleton —\n * a second call returns the same underlying SDK — so when multiple\n * Dynamic clients coexist they end up sharing the same MetaMask SDK\n * instance (and therefore the same active pairing session) regardless\n * of this cache. The wrapper exists to own the controller's\n * `display_uri` cache and listener registry per Dynamic client, which\n * the SDK itself does not expose.\n *\n * @not-instrumented\n */\nexport const getOrCreateMetaMaskEvmController = createRuntimeServiceAccessKey(\n RUNTIME_SERVICE_KEY,\n (client) => createMetaMaskEvmController(client)\n);\n","import type { DynamicClient } from '@dynamic-labs-sdk/client';\nimport { getCore } from '@dynamic-labs-sdk/client/core';\nimport type {\n Address,\n Hex,\n EIP1193Provider as SdkEip1193Provider,\n} from '@metamask/connect-evm';\n\nimport type { EIP1193ProviderEvents } from '../../../EvmWalletProvider.types';\n\nconst NOOP_UNSUBSCRIBE = (): void => undefined;\n\n/**\n * A facade listener captured by the MetaMask EVM wallet-provider facade.\n *\n * The discriminated-union shape (rather than `{ event: string; listener:\n * (...args: unknown[]) => void }`) is what lets\n * `subscribeMetaMaskEvmFacadeListener` narrow the listener type per\n * event, so the per-event adapters stay type-safe without casts.\n */\nexport type PendingMetaMaskEvmFacadeListener = {\n [E in keyof EIP1193ProviderEvents]: {\n event: E;\n listener: EIP1193ProviderEvents[E];\n };\n}[keyof EIP1193ProviderEvents];\n\n/**\n * Subscribes a facade listener to the underlying MetaMask SDK provider,\n * forwarding events through per-event adapters:\n *\n * - `accountsChanged` — clones the readonly addresses array\n * `@metamask/connect-evm` hands the listener, since the Dynamic SDK\n * facade contract emits a mutable `Address[]`.\n * - `chainChanged` — passes the chain id through verbatim.\n * - `disconnected` — bridged to the SDK's canonical `disconnect`\n * event, which the SDK actually emits.\n *\n * Returns the unsubscribe function returned by the SDK provider so the\n * caller can clean it up later (for example, when the facade's\n * `removeAllListeners` is invoked).\n *\n * @not-instrumented\n */\nexport const subscribeMetaMaskEvmFacadeListener = ({\n client,\n pending,\n provider,\n}: {\n client: DynamicClient;\n pending: PendingMetaMaskEvmFacadeListener;\n provider: SdkEip1193Provider;\n}): (() => void) => {\n if (pending.event === 'accountsChanged') {\n return provider.on('accountsChanged', (addresses: readonly Address[]) =>\n pending.listener([...addresses])\n );\n }\n\n if (pending.event === 'chainChanged') {\n return provider.on('chainChanged', (chainId: Hex) =>\n pending.listener(chainId)\n );\n }\n\n if (pending.event === 'disconnected') {\n // The SDK emits its canonical `disconnect` event, which we bridge\n // to the facade's `disconnected` contract here.\n return provider.on('disconnect', () => pending.listener());\n }\n\n // Defensive fallthrough: a new entry was added to `EIP1193ProviderEvents`\n // but the per-event adapter list above was not updated. We log the\n // unhandled event and return a no-op unsubscribe so the consumer's\n // teardown loop still runs cleanly.\n const exhaustiveCheck: never = pending;\n getCore(client).logger.debug(\n '[metamask] subscribeMetaMaskEvmFacadeListener: unhandled event',\n (exhaustiveCheck as { event: unknown }).event\n );\n return NOOP_UNSUBSCRIBE;\n};\n","import type { DynamicClient } from '@dynamic-labs-sdk/client';\nimport {\n DYNAMIC_ICONIC_SPRITE_URL,\n getCore,\n} from '@dynamic-labs-sdk/client/core';\nimport { MetaMaskWalletNotConnectedError } from '@dynamic-labs-sdk/metamask';\nimport { WalletProviderEnum } from '@dynamic-labs/sdk-api-core';\n\nimport type {\n EIP1193Provider,\n EIP1193ProviderEvents,\n EIP1193ProviderRequest,\n EvmWalletProvider,\n} from '../../EvmWalletProvider.types';\nimport { createWalletProviderFromEIP1193Provider } from '../../utils/createWalletProviderFromEIP1193Provider';\nimport { getOrCreateMetaMaskEvmController } from '../utils/getOrCreateMetaMaskEvmController';\nimport type { PendingMetaMaskEvmFacadeListener } from '../utils/subscribeMetaMaskEvmFacadeListener';\nimport { subscribeMetaMaskEvmFacadeListener } from '../utils/subscribeMetaMaskEvmFacadeListener';\n\nconst METAMASK_DISPLAY_NAME = 'MetaMask';\nconst METAMASK_ICON = `${DYNAMIC_ICONIC_SPRITE_URL}#metamask`;\n\n/**\n * Builds the `EvmWalletProvider` registered AFTER a successful MetaMask\n * SDK URI pairing. Wraps the SDK's EIP-1193 provider behind the Dynamic\n * facade (`disconnect` → `disconnected` event bridge, `removeAllListeners`\n * shim) and drops `connect` so the provider is filtered out of the\n * wallet picker by `getAvailableWalletProvidersData` — mirroring how\n * WalletConnect URI sessions register a signing-only provider.\n *\n * @not-instrumented\n */\nexport const createMetaMaskEvmWalletProvider = async (\n client: DynamicClient\n): Promise<EvmWalletProvider> => {\n const controller = await getOrCreateMetaMaskEvmController(client);\n\n // The provider is only meaningful once the URI pairing has produced a\n // connected account; guard so a premature or out-of-order call raises a\n // readable error instead of building a provider around an unconnected SDK.\n if (controller.sdk.getAccount() === undefined) {\n throw new MetaMaskWalletNotConnectedError();\n }\n\n const provider = controller.sdk.getProvider();\n\n const subscriberCleanups = new Set<() => void>();\n\n const eip1193Provider: EIP1193Provider = {\n // eslint-disable-next-line custom-rules/require-single-object-param -- EIP-1193 `on` signature is fixed by the interface contract.\n on: <E extends keyof EIP1193ProviderEvents>(\n event: E,\n listener: EIP1193ProviderEvents[E]\n ) => {\n const pending = { event, listener } as PendingMetaMaskEvmFacadeListener;\n subscriberCleanups.add(\n subscribeMetaMaskEvmFacadeListener({ client, pending, provider })\n );\n },\n removeAllListeners: () => {\n for (const unsubscribe of subscriberCleanups) {\n try {\n unsubscribe();\n } catch (error) {\n getCore(client).logger.error(\n '[metamask] removeAllListeners: unsubscribe failed',\n error\n );\n }\n }\n subscriberCleanups.clear();\n },\n request: <T = unknown>(request: EIP1193ProviderRequest): Promise<T> =>\n provider.request(request) as Promise<T>,\n };\n\n const walletProvider = createWalletProviderFromEIP1193Provider(\n {\n displayName: METAMASK_DISPLAY_NAME,\n eip1193: eip1193Provider,\n icon: METAMASK_ICON,\n walletProviderType: WalletProviderEnum.QrCode,\n },\n client\n );\n\n return {\n ...walletProvider,\n connect: undefined,\n };\n};\n","import {\n type WalletAccount,\n type WalletProviderUriConnectionResult,\n getDefaultClient,\n verifyWalletAccount,\n} from '@dynamic-labs-sdk/client';\nimport { connectWithMetaMaskUri } from '@dynamic-labs-sdk/metamask';\n\nimport { registerEvmNetworkProviderBuilder } from '../../registerEvmNetworkProviderBuilder';\nimport { createMetaMaskEvmWalletProvider } from '../createMetaMaskEvmWalletProvider';\nimport { getOrCreateMetaMaskEvmController } from '../utils/getOrCreateMetaMaskEvmController';\n\n/**\n * Drives a MetaMask SDK URI pairing for EVM and verifies ownership of the\n * paired wallet account through message signing, returning `{ approval, uri }`\n * so consumers can render the QR / hand the URI to a deeplink.\n *\n * Unlike `connectAndVerifyWithWalletConnectEvm`, the MetaMask SDK does not\n * expose a single-round-trip authenticate primitive, so this drives two\n * sequential interactions on the wallet side: the user first approves the\n * pairing, then approves a sign-in message. The wallet account is added to\n * the Dynamic client as a verified credential (not as an unverified\n * account).\n *\n * @not-instrumented\n */\nexport const connectAndVerifyWithMetaMaskUriEvm = async (\n client = getDefaultClient()\n): Promise<WalletProviderUriConnectionResult> => {\n registerEvmNetworkProviderBuilder(client);\n\n const { approval, uri } = await connectWithMetaMaskUri(\n {\n addToDynamicWalletAccounts: false,\n chain: 'EVM',\n getController: getOrCreateMetaMaskEvmController,\n walletProviderBuilder: createMetaMaskEvmWalletProvider,\n },\n client\n );\n\n const verifiedApproval = async (): Promise<{\n walletAccounts: WalletAccount[];\n }> => {\n const { walletAccounts } = await approval();\n\n // MetaMask SDK exposes a single active address per pairing (same\n // model as EIP-1193 `eth_accounts`), mirroring how the underlying\n // `connectWithMetaMaskUri` materializes a single account from\n // `addresses[0]`. Verify it directly.\n const [walletAccount] = walletAccounts;\n\n if (walletAccount) {\n await verifyWalletAccount({ walletAccount }, client);\n }\n\n return { walletAccounts };\n };\n\n return { approval: verifiedApproval, uri };\n};\n","import { getDefaultClient } from '@dynamic-labs-sdk/client';\nimport type { WalletProviderUriConnectionResult } from '@dynamic-labs-sdk/client';\nimport { connectWithMetaMaskUri } from '@dynamic-labs-sdk/metamask';\n\nimport { registerEvmNetworkProviderBuilder } from '../../registerEvmNetworkProviderBuilder';\nimport { createMetaMaskEvmWalletProvider } from '../createMetaMaskEvmWalletProvider';\nimport { getOrCreateMetaMaskEvmController } from '../utils/getOrCreateMetaMaskEvmController';\n\nexport type ConnectWithMetaMaskUriEvmParams = {\n /** Whether to add the connected wallet account to the Dynamic client. Defaults to `true`. */\n addToDynamicWalletAccounts?: boolean;\n};\n\n/**\n * Drives a MetaMask SDK URI pairing for EVM and returns `{ approval, uri }` so\n * consumers can render the QR / hand the URI to a deeplink. Logs an advisory\n * warning when the MetaMask extension is announced via EIP-6963; pairing still\n * proceeds, but the consumer is told which announced provider key to route\n * through for the best UX. The resulting wallet provider registers for signing\n * only and is never surfaced in the wallet picker.\n *\n * @not-instrumented\n */\nexport const connectWithMetaMaskUriEvm = (\n { addToDynamicWalletAccounts = true }: ConnectWithMetaMaskUriEvmParams = {},\n client = getDefaultClient()\n): Promise<WalletProviderUriConnectionResult> => {\n registerEvmNetworkProviderBuilder(client);\n\n return connectWithMetaMaskUri(\n {\n addToDynamicWalletAccounts,\n chain: 'EVM',\n getController: getOrCreateMetaMaskEvmController,\n walletProviderBuilder: createMetaMaskEvmWalletProvider,\n },\n client\n );\n};\n","import { getDefaultClient } from '@dynamic-labs-sdk/client';\nimport { getMetaMaskExtensionWalletProviderKey } from '@dynamic-labs-sdk/metamask';\n\n/**\n * Returns the wallet provider key of the MetaMask browser extension announced\n * for EVM, or `undefined` when none is announced. Pass the returned key to\n * `connectWithWalletProvider` to route through the announced provider; fall\n * back to `connectWithMetaMaskUriEvm` when `undefined`.\n *\n * @not-instrumented\n */\nexport const getMetaMaskEvmExtensionWalletProviderKey = (\n client = getDefaultClient()\n): string | undefined =>\n getMetaMaskExtensionWalletProviderKey({ chain: 'EVM' }, client);\n","import { assertPackageVersion } from '@dynamic-labs-sdk/assert-package-version';\n\nimport {\n name as packageName,\n version as packageVersion,\n} from '../../package.json';\nassertPackageVersion(packageName, packageVersion);\n\nexport { connectAndVerifyWithMetaMaskUriEvm } from '../metamask/connectAndVerifyWithMetaMaskUriEvm';\nexport { connectWithMetaMaskUriEvm } from '../metamask/connectWithMetaMaskUriEvm';\nexport type { ConnectWithMetaMaskUriEvmParams } from '../metamask/connectWithMetaMaskUriEvm/connectWithMetaMaskUriEvm';\nexport { getMetaMaskEvmExtensionWalletProviderKey } from '../metamask/getMetaMaskEvmExtensionWalletProviderKey';\nexport { MetaMaskDisplayUriMissingError } from '@dynamic-labs-sdk/metamask';\n"],"mappings":"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"}
1
+ {"version":3,"file":"metamask.cjs","names":["supportedNetworks: MetaMaskSupportedNetworks","latestDisplayUri: string | undefined","inFlightConnect: Promise<void> | null","exhaustiveCheck: never","DYNAMIC_ICONIC_SPRITE_URL","MetaMaskWalletNotConnectedError","createWalletProviderFromEIP1193Provider","WalletProviderEnum","packageName","packageVersion"],"sources":["../src/utils/getEvmNetworksData/getEvmNetworksData.ts","../src/metamask/utils/getSupportedNetworks/getSupportedNetworks.ts","../src/metamask/utils/createMetaMaskEvmController/createMetaMaskEvmController.ts","../src/metamask/utils/getOrCreateMetaMaskEvmController/getOrCreateMetaMaskEvmController.ts","../src/metamask/utils/subscribeMetaMaskEvmFacadeListener/subscribeMetaMaskEvmFacadeListener.ts","../src/metamask/createMetaMaskEvmWalletProvider/createMetaMaskEvmWalletProvider.ts","../src/metamask/connectAndVerifyWithMetaMaskUriEvm/connectAndVerifyWithMetaMaskUriEvm.ts","../src/metamask/connectWithMetaMaskUriEvm/connectWithMetaMaskUriEvm.ts","../src/metamask/getMetaMaskEvmExtensionWalletProviderKey/getMetaMaskEvmExtensionWalletProviderKey.ts","../src/exports/metamask.ts"],"sourcesContent":["import {\n type DynamicClient,\n type NetworkData,\n getNetworksData,\n} from '@dynamic-labs-sdk/client';\n\n/**\n * Returns the network configuration objects for the EVM networks configured\n * on the Dynamic client. Generic helper available to any EVM extension that\n * needs the full network metadata (RPC URLs, native currency, etc.) for the\n * configured EVM chain set — for instance, to build the `supportedNetworks`\n * map required by third-party SDKs such as MetaMask or Base Account.\n *\n * @param client - The Dynamic client whose project settings drive the result.\n * @notInstrumented\n */\nexport const getEvmNetworksData = (client: DynamicClient): NetworkData[] =>\n getNetworksData(client).filter((network) => network.chain === 'EVM');\n","import type { DynamicClient } from '@dynamic-labs-sdk/client';\nimport { assertNonEmptyArray } from '@dynamic-labs-sdk/client/core';\n\nimport { getEvmNetworksData } from '../../../utils/getEvmNetworksData';\n\ntype MetaMaskSupportedNetworks = Record<`0x${string}`, string>;\n\n/** @notInstrumented */\nexport const getSupportedNetworks = (\n client: DynamicClient\n): MetaMaskSupportedNetworks => {\n // Customer enabled networks, with mainnet first if available.\n const evmNetworks = getEvmNetworksData(client).sort((a, b) => {\n if (a.networkId === '1') return -1;\n if (b.networkId === '1') return 1;\n\n return 0;\n });\n\n assertNonEmptyArray(\n evmNetworks,\n 'No EVM networks have been configured. Make sure to add at least one EVM network to your project settings in the Dynamic Dashboard.'\n );\n\n const supportedNetworks: MetaMaskSupportedNetworks = {};\n\n for (const network of evmNetworks) {\n const numericChainId = Number.parseInt(network.networkId, 10);\n const hexChainId = `0x${numericChainId.toString(16)}` as `0x${string}`;\n supportedNetworks[hexChainId] = network.rpcUrls.http[0];\n }\n\n return supportedNetworks;\n};\n","import type { DynamicClient } from '@dynamic-labs-sdk/client';\nimport {\n getAppMetadata,\n getCore,\n getNativeLinkScheme,\n} from '@dynamic-labs-sdk/client/core';\nimport { clearMetaMaskSessionStorage } from '@dynamic-labs-sdk/metamask';\nimport type { DisplayUriListener } from '@dynamic-labs-sdk/metamask';\nimport { createEVMClient } from '@metamask/connect-evm';\nimport type { Hex } from '@metamask/connect-evm';\n\nimport type { MetaMaskEvmController } from '../../metamask.types';\nimport { getSupportedNetworks } from '../getSupportedNetworks';\n\n/**\n * Builds a fully-initialised `MetaMaskEvmController` for the given Dynamic\n * client. Runs the SDK in headless mode so consumers render their own QR /\n * deep-link surface, and registers `display_uri` handling as an\n * `eventHandlers` callback at construction time so the first URI emission\n * cannot be lost to a subscription race. Dapp metadata is sourced from the\n * client's `getAppMetadata`. Browser-only.\n *\n * @notInstrumented\n */\nexport const createMetaMaskEvmController = async (\n client: DynamicClient\n): Promise<MetaMaskEvmController> => {\n const supportedNetworks = getSupportedNetworks(client);\n const { appName, appLogoUrl, appUniversalLink, appNativeLink } =\n getAppMetadata(client);\n\n // Drop any IndexedDB session state left behind by a previous tab,\n // page reload, or abandoned pairing before the SDK initialises. The\n // SDK's auto-recovery path otherwise picks up a stale transport\n // descriptor and spends its (non-configurable) 10-second resume\n // timeout on every controller construction trying to revive a relay\n // session that no longer exists, surfacing as a long QR skeleton\n // delay on every page reload that follows an abandoned pairing.\n await clearMetaMaskSessionStorage();\n\n const listeners = new Set<DisplayUriListener>();\n let latestDisplayUri: string | undefined;\n\n const sdk = await createEVMClient({\n api: { supportedNetworks },\n dapp: {\n iconUrl: appLogoUrl,\n name: appName,\n nativeScheme: getNativeLinkScheme({ nativeLink: appNativeLink }),\n url: appUniversalLink ?? '',\n },\n debug: false,\n eventHandlers: {\n connect: () => {\n latestDisplayUri = undefined;\n },\n disconnect: () => {\n latestDisplayUri = undefined;\n },\n displayUri: (uri) => {\n latestDisplayUri = uri;\n for (const listener of listeners) {\n listener(uri);\n }\n },\n },\n ui: {\n headless: true,\n preferExtension: true,\n },\n });\n\n // Defensive cleanup: even though we cleared IndexedDB before\n // constructing the SDK, an in-flight `display_uri` emission could\n // theoretically race the storage delete on slow devices. Clearing\n // the cache here guarantees late subscribers cannot replay an URI\n // that originated from any pairing attempt prior to this\n // construction.\n latestDisplayUri = undefined;\n\n const onDisplayUri = (listener: DisplayUriListener): (() => void) => {\n listeners.add(listener);\n if (latestDisplayUri !== undefined) {\n listener(latestDisplayUri);\n }\n return () => {\n listeners.delete(listener);\n };\n };\n\n const chainIds = Object.keys(supportedNetworks) as Hex[];\n\n // Tracks an in-flight `connect` call so that overlapping invocations (most\n // commonly React's StrictMode double-invocation of effects, or a hook that\n // re-runs while the user is still scanning) await the same underlying\n // pairing instead of racing two `sdk.connect` calls against each other.\n // Without this, the second invocation tears down the first via\n // `sdk.disconnect()` and the SDK throws \"Cannot connect when state is\n // CONNECTING\".\n let inFlightConnect: Promise<void> | null = null;\n\n const connect = (): Promise<void> => {\n if (inFlightConnect) {\n return inFlightConnect;\n }\n\n inFlightConnect = (async () => {\n try {\n // If a previous pairing was cancelled mid-flight the SDK can be left\n // in `connecting` state with a dead transport descriptor; tear it\n // down so the next `connect` issues a fresh URI synchronously\n // instead of waiting for the SDK's (non-configurable) 10-second\n // resume timeout.\n if (sdk.status === 'connecting') {\n try {\n await sdk.disconnect();\n } catch (error) {\n getCore(client).logger.debug(\n '[metamask] pre-connect disconnect rejected (expected when aborting a pairing the wallet never accepted)',\n error\n );\n }\n }\n\n await sdk.connect({ chainIds });\n } finally {\n inFlightConnect = null;\n }\n })();\n\n return inFlightConnect;\n };\n\n return {\n clearCachedDisplayUri: () => {\n latestDisplayUri = undefined;\n },\n connect,\n getLatestDisplayUri: () => latestDisplayUri,\n onDisplayUri,\n sdk,\n };\n};\n","import { createRuntimeServiceAccessKey } from '@dynamic-labs-sdk/client/core';\n\nimport { createMetaMaskEvmController } from '../createMetaMaskEvmController';\n\nconst RUNTIME_SERVICE_KEY = 'metaMaskEvmController';\n\n/**\n * Per-`DynamicClient` accessor for the lazily-constructed MetaMask EVM\n * controller. Wraps `createMetaMaskEvmController` with the standard\n * `runtimeServices` cache so every caller — the EIP-1193 wallet-provider\n * façade, the `display_uri` subscription helper, and the\n * `connectWithMetaMaskEvm` URI-returning helper — shares the same\n * controller (and therefore the same SDK instance, display-URI cache, and\n * listener registry) per Dynamic client.\n *\n * This matches the pattern used by the WalletConnect `getSignClient`\n * accessor: the first call triggers construction; subsequent calls\n * (within the same client) return the cached promise without re-running\n * the builder.\n *\n * The cache is **per-Dynamic-client, not per-SDK-instance**:\n * `@metamask/connect-evm`'s `createEVMClient` is itself a singleton —\n * a second call returns the same underlying SDK — so when multiple\n * Dynamic clients coexist they end up sharing the same MetaMask SDK\n * instance (and therefore the same active pairing session) regardless\n * of this cache. The wrapper exists to own the controller's\n * `display_uri` cache and listener registry per Dynamic client, which\n * the SDK itself does not expose.\n *\n * @notInstrumented\n */\nexport const getOrCreateMetaMaskEvmController = createRuntimeServiceAccessKey(\n RUNTIME_SERVICE_KEY,\n (client) => createMetaMaskEvmController(client)\n);\n","import type { DynamicClient } from '@dynamic-labs-sdk/client';\nimport { getCore } from '@dynamic-labs-sdk/client/core';\nimport type {\n Address,\n Hex,\n EIP1193Provider as SdkEip1193Provider,\n} from '@metamask/connect-evm';\n\nimport type { EIP1193ProviderEvents } from '../../../EvmWalletProvider.types';\n\nconst NOOP_UNSUBSCRIBE = (): void => undefined;\n\n/**\n * A facade listener captured by the MetaMask EVM wallet-provider facade.\n *\n * The discriminated-union shape (rather than `{ event: string; listener:\n * (...args: unknown[]) => void }`) is what lets\n * `subscribeMetaMaskEvmFacadeListener` narrow the listener type per\n * event, so the per-event adapters stay type-safe without casts.\n */\nexport type PendingMetaMaskEvmFacadeListener = {\n [E in keyof EIP1193ProviderEvents]: {\n event: E;\n listener: EIP1193ProviderEvents[E];\n };\n}[keyof EIP1193ProviderEvents];\n\n/**\n * Subscribes a facade listener to the underlying MetaMask SDK provider,\n * forwarding events through per-event adapters:\n *\n * - `accountsChanged` — clones the readonly addresses array\n * `@metamask/connect-evm` hands the listener, since the Dynamic SDK\n * facade contract emits a mutable `Address[]`.\n * - `chainChanged` — passes the chain id through verbatim.\n * - `disconnected` — bridged to the SDK's canonical `disconnect`\n * event, which the SDK actually emits.\n *\n * Returns the unsubscribe function returned by the SDK provider so the\n * caller can clean it up later (for example, when the facade's\n * `removeAllListeners` is invoked).\n *\n * @notInstrumented\n */\nexport const subscribeMetaMaskEvmFacadeListener = ({\n client,\n pending,\n provider,\n}: {\n client: DynamicClient;\n pending: PendingMetaMaskEvmFacadeListener;\n provider: SdkEip1193Provider;\n}): (() => void) => {\n if (pending.event === 'accountsChanged') {\n return provider.on('accountsChanged', (addresses: readonly Address[]) =>\n pending.listener([...addresses])\n );\n }\n\n if (pending.event === 'chainChanged') {\n return provider.on('chainChanged', (chainId: Hex) =>\n pending.listener(chainId)\n );\n }\n\n if (pending.event === 'disconnected') {\n // The SDK emits its canonical `disconnect` event, which we bridge\n // to the facade's `disconnected` contract here.\n return provider.on('disconnect', () => pending.listener());\n }\n\n // Defensive fallthrough: a new entry was added to `EIP1193ProviderEvents`\n // but the per-event adapter list above was not updated. We log the\n // unhandled event and return a no-op unsubscribe so the consumer's\n // teardown loop still runs cleanly.\n const exhaustiveCheck: never = pending;\n getCore(client).logger.debug(\n '[metamask] subscribeMetaMaskEvmFacadeListener: unhandled event',\n (exhaustiveCheck as { event: unknown }).event\n );\n return NOOP_UNSUBSCRIBE;\n};\n","import type { DynamicClient } from '@dynamic-labs-sdk/client';\nimport {\n DYNAMIC_ICONIC_SPRITE_URL,\n getCore,\n} from '@dynamic-labs-sdk/client/core';\nimport { MetaMaskWalletNotConnectedError } from '@dynamic-labs-sdk/metamask';\nimport { WalletProviderEnum } from '@dynamic-labs/sdk-api-core';\n\nimport type {\n EIP1193Provider,\n EIP1193ProviderEvents,\n EIP1193ProviderRequest,\n EvmWalletProvider,\n} from '../../EvmWalletProvider.types';\nimport { createWalletProviderFromEIP1193Provider } from '../../utils/createWalletProviderFromEIP1193Provider';\nimport { getOrCreateMetaMaskEvmController } from '../utils/getOrCreateMetaMaskEvmController';\nimport type { PendingMetaMaskEvmFacadeListener } from '../utils/subscribeMetaMaskEvmFacadeListener';\nimport { subscribeMetaMaskEvmFacadeListener } from '../utils/subscribeMetaMaskEvmFacadeListener';\n\nconst METAMASK_DISPLAY_NAME = 'MetaMask';\nconst METAMASK_ICON = `${DYNAMIC_ICONIC_SPRITE_URL}#metamask`;\n\n/**\n * Builds the `EvmWalletProvider` registered AFTER a successful MetaMask\n * SDK URI pairing. Wraps the SDK's EIP-1193 provider behind the Dynamic\n * facade (`disconnect` → `disconnected` event bridge, `removeAllListeners`\n * shim) and drops `connect` so the provider is filtered out of the\n * wallet picker by `getAvailableWalletProvidersData` — mirroring how\n * WalletConnect URI sessions register a signing-only provider.\n *\n * @notInstrumented\n */\nexport const createMetaMaskEvmWalletProvider = async (\n client: DynamicClient\n): Promise<EvmWalletProvider> => {\n const controller = await getOrCreateMetaMaskEvmController(client);\n\n // The provider is only meaningful once the URI pairing has produced a\n // connected account; guard so a premature or out-of-order call raises a\n // readable error instead of building a provider around an unconnected SDK.\n if (controller.sdk.getAccount() === undefined) {\n throw new MetaMaskWalletNotConnectedError();\n }\n\n const provider = controller.sdk.getProvider();\n\n const subscriberCleanups = new Set<() => void>();\n\n const eip1193Provider: EIP1193Provider = {\n // eslint-disable-next-line custom-rules/require-single-object-param -- EIP-1193 `on` signature is fixed by the interface contract.\n on: <E extends keyof EIP1193ProviderEvents>(\n event: E,\n listener: EIP1193ProviderEvents[E]\n ) => {\n const pending = { event, listener } as PendingMetaMaskEvmFacadeListener;\n subscriberCleanups.add(\n subscribeMetaMaskEvmFacadeListener({ client, pending, provider })\n );\n },\n removeAllListeners: () => {\n for (const unsubscribe of subscriberCleanups) {\n try {\n unsubscribe();\n } catch (error) {\n getCore(client).logger.error(\n '[metamask] removeAllListeners: unsubscribe failed',\n error\n );\n }\n }\n subscriberCleanups.clear();\n },\n request: <T = unknown>(request: EIP1193ProviderRequest): Promise<T> =>\n provider.request(request) as Promise<T>,\n };\n\n const walletProvider = createWalletProviderFromEIP1193Provider(\n {\n displayName: METAMASK_DISPLAY_NAME,\n eip1193: eip1193Provider,\n icon: METAMASK_ICON,\n walletProviderType: WalletProviderEnum.QrCode,\n },\n client\n );\n\n return {\n ...walletProvider,\n connect: undefined,\n };\n};\n","import {\n type WalletAccount,\n type WalletProviderUriConnectionResult,\n getDefaultClient,\n verifyWalletAccount,\n} from '@dynamic-labs-sdk/client';\nimport { connectWithMetaMaskUri } from '@dynamic-labs-sdk/metamask';\n\nimport { registerEvmNetworkProviderBuilder } from '../../registerEvmNetworkProviderBuilder';\nimport { createMetaMaskEvmWalletProvider } from '../createMetaMaskEvmWalletProvider';\nimport { getOrCreateMetaMaskEvmController } from '../utils/getOrCreateMetaMaskEvmController';\n\n/**\n * Drives a MetaMask SDK URI pairing for EVM and verifies ownership of the\n * paired wallet account through message signing, returning `{ approval, uri }`\n * so consumers can render the QR / hand the URI to a deeplink.\n *\n * Unlike `connectAndVerifyWithWalletConnectEvm`, the MetaMask SDK does not\n * expose a single-round-trip authenticate primitive, so this drives two\n * sequential interactions on the wallet side: the user first approves the\n * pairing, then approves a sign-in message. The wallet account is added to\n * the Dynamic client as a verified credential (not as an unverified\n * account).\n *\n * @notInstrumented\n */\nexport const connectAndVerifyWithMetaMaskUriEvm = async (\n client = getDefaultClient()\n): Promise<WalletProviderUriConnectionResult> => {\n registerEvmNetworkProviderBuilder(client);\n\n const { approval, uri } = await connectWithMetaMaskUri(\n {\n addToDynamicWalletAccounts: false,\n chain: 'EVM',\n getController: getOrCreateMetaMaskEvmController,\n walletProviderBuilder: createMetaMaskEvmWalletProvider,\n },\n client\n );\n\n const verifiedApproval = async (): Promise<{\n walletAccounts: WalletAccount[];\n }> => {\n const { walletAccounts } = await approval();\n\n // MetaMask SDK exposes a single active address per pairing (same\n // model as EIP-1193 `eth_accounts`), mirroring how the underlying\n // `connectWithMetaMaskUri` materializes a single account from\n // `addresses[0]`. Verify it directly.\n const [walletAccount] = walletAccounts;\n\n if (walletAccount) {\n await verifyWalletAccount({ walletAccount }, client);\n }\n\n return { walletAccounts };\n };\n\n return { approval: verifiedApproval, uri };\n};\n","import { getDefaultClient } from '@dynamic-labs-sdk/client';\nimport type { WalletProviderUriConnectionResult } from '@dynamic-labs-sdk/client';\nimport { connectWithMetaMaskUri } from '@dynamic-labs-sdk/metamask';\n\nimport { registerEvmNetworkProviderBuilder } from '../../registerEvmNetworkProviderBuilder';\nimport { createMetaMaskEvmWalletProvider } from '../createMetaMaskEvmWalletProvider';\nimport { getOrCreateMetaMaskEvmController } from '../utils/getOrCreateMetaMaskEvmController';\n\nexport type ConnectWithMetaMaskUriEvmParams = {\n /** Whether to add the connected wallet account to the Dynamic client. Defaults to `true`. */\n addToDynamicWalletAccounts?: boolean;\n};\n\n/**\n * Drives a MetaMask SDK URI pairing for EVM and returns `{ approval, uri }` so\n * consumers can render the QR / hand the URI to a deeplink. Logs an advisory\n * warning when the MetaMask extension is announced via EIP-6963; pairing still\n * proceeds, but the consumer is told which announced provider key to route\n * through for the best UX. The resulting wallet provider registers for signing\n * only and is never surfaced in the wallet picker.\n *\n * @notInstrumented\n */\nexport const connectWithMetaMaskUriEvm = (\n { addToDynamicWalletAccounts = true }: ConnectWithMetaMaskUriEvmParams = {},\n client = getDefaultClient()\n): Promise<WalletProviderUriConnectionResult> => {\n registerEvmNetworkProviderBuilder(client);\n\n return connectWithMetaMaskUri(\n {\n addToDynamicWalletAccounts,\n chain: 'EVM',\n getController: getOrCreateMetaMaskEvmController,\n walletProviderBuilder: createMetaMaskEvmWalletProvider,\n },\n client\n );\n};\n","import { getDefaultClient } from '@dynamic-labs-sdk/client';\nimport { getMetaMaskExtensionWalletProviderKey } from '@dynamic-labs-sdk/metamask';\n\n/**\n * Returns the wallet provider key of the MetaMask browser extension announced\n * for EVM, or `undefined` when none is announced. Pass the returned key to\n * `connectWithWalletProvider` to route through the announced provider; fall\n * back to `connectWithMetaMaskUriEvm` when `undefined`.\n *\n * @notInstrumented\n */\nexport const getMetaMaskEvmExtensionWalletProviderKey = (\n client = getDefaultClient()\n): string | undefined =>\n getMetaMaskExtensionWalletProviderKey({ chain: 'EVM' }, client);\n","import { assertPackageVersion } from '@dynamic-labs-sdk/assert-package-version';\n\nimport {\n name as packageName,\n version as packageVersion,\n} from '../../package.json';\nassertPackageVersion(packageName, packageVersion);\n\nexport { connectAndVerifyWithMetaMaskUriEvm } from '../metamask/connectAndVerifyWithMetaMaskUriEvm';\nexport { connectWithMetaMaskUriEvm } from '../metamask/connectWithMetaMaskUriEvm';\nexport type { ConnectWithMetaMaskUriEvmParams } from '../metamask/connectWithMetaMaskUriEvm/connectWithMetaMaskUriEvm';\nexport { getMetaMaskEvmExtensionWalletProviderKey } from '../metamask/getMetaMaskEvmExtensionWalletProviderKey';\nexport { MetaMaskDisplayUriMissingError } from '@dynamic-labs-sdk/metamask';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAgBA,MAAa,sBAAsB,yDACjB,OAAO,CAAC,QAAQ,YAAY,QAAQ,UAAU,MAAM;;;;;ACTtE,MAAa,wBACX,WAC8B;CAE9B,MAAM,cAAc,mBAAmB,OAAO,CAAC,MAAM,GAAG,MAAM;AAC5D,MAAI,EAAE,cAAc,IAAK,QAAO;AAChC,MAAI,EAAE,cAAc,IAAK,QAAO;AAEhC,SAAO;GACP;AAEF,wDACE,aACA,qIACD;CAED,MAAMA,oBAA+C,EAAE;AAEvD,MAAK,MAAM,WAAW,aAAa;EAEjC,MAAM,aAAa,KADI,OAAO,SAAS,QAAQ,WAAW,GAAG,CACtB,SAAS,GAAG;AACnD,oBAAkB,cAAc,QAAQ,QAAQ,KAAK;;AAGvD,QAAO;;;;;;;;;;;;;;;ACRT,MAAa,8BAA8B,OACzC,WACmC;CACnC,MAAM,oBAAoB,qBAAqB,OAAO;CACtD,MAAM,EAAE,SAAS,YAAY,kBAAkB,oEAC9B,OAAO;AASxB,oEAAmC;CAEnC,MAAM,4BAAY,IAAI,KAAyB;CAC/C,IAAIC;CAEJ,MAAM,MAAM,iDAAsB;EAChC,KAAK,EAAE,mBAAmB;EAC1B,MAAM;GACJ,SAAS;GACT,MAAM;GACN,qEAAkC,EAAE,YAAY,eAAe,CAAC;GAChE,KAAK,oBAAoB;GAC1B;EACD,OAAO;EACP,eAAe;GACb,eAAe;AACb,uBAAmB;;GAErB,kBAAkB;AAChB,uBAAmB;;GAErB,aAAa,QAAQ;AACnB,uBAAmB;AACnB,SAAK,MAAM,YAAY,UACrB,UAAS,IAAI;;GAGlB;EACD,IAAI;GACF,UAAU;GACV,iBAAiB;GAClB;EACF,CAAC;AAQF,oBAAmB;CAEnB,MAAM,gBAAgB,aAA+C;AACnE,YAAU,IAAI,SAAS;AACvB,MAAI,qBAAqB,OACvB,UAAS,iBAAiB;AAE5B,eAAa;AACX,aAAU,OAAO,SAAS;;;CAI9B,MAAM,WAAW,OAAO,KAAK,kBAAkB;CAS/C,IAAIC,kBAAwC;CAE5C,MAAM,gBAA+B;AACnC,MAAI,gBACF,QAAO;AAGT,qBAAmB,YAAY;AAC7B,OAAI;AAMF,QAAI,IAAI,WAAW,aACjB,KAAI;AACF,WAAM,IAAI,YAAY;aACf,OAAO;AACd,gDAAQ,OAAO,CAAC,OAAO,MACrB,2GACA,MACD;;AAIL,UAAM,IAAI,QAAQ,EAAE,UAAU,CAAC;aACvB;AACR,sBAAkB;;MAElB;AAEJ,SAAO;;AAGT,QAAO;EACL,6BAA6B;AAC3B,sBAAmB;;EAErB;EACA,2BAA2B;EAC3B;EACA;EACD;;;;;ACzIH,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;AA2B5B,MAAa,oGACX,sBACC,WAAW,4BAA4B,OAAO,CAChD;;;;ACxBD,MAAM,yBAA+B;;;;;;;;;;;;;;;;;;AAkCrC,MAAa,sCAAsC,EACjD,QACA,SACA,eAKkB;AAClB,KAAI,QAAQ,UAAU,kBACpB,QAAO,SAAS,GAAG,oBAAoB,cACrC,QAAQ,SAAS,CAAC,GAAG,UAAU,CAAC,CACjC;AAGH,KAAI,QAAQ,UAAU,eACpB,QAAO,SAAS,GAAG,iBAAiB,YAClC,QAAQ,SAAS,QAAQ,CAC1B;AAGH,KAAI,QAAQ,UAAU,eAGpB,QAAO,SAAS,GAAG,oBAAoB,QAAQ,UAAU,CAAC;CAO5D,MAAMC,kBAAyB;AAC/B,4CAAQ,OAAO,CAAC,OAAO,MACrB,kEACC,gBAAuC,MACzC;AACD,QAAO;;;;;AC7DT,MAAM,wBAAwB;AAC9B,MAAM,gBAAgB,GAAGC,wDAA0B;;;;;;;;;;;AAYnD,MAAa,kCAAkC,OAC7C,WAC+B;CAC/B,MAAM,aAAa,MAAM,iCAAiC,OAAO;AAKjE,KAAI,WAAW,IAAI,YAAY,KAAK,OAClC,OAAM,IAAIC,4DAAiC;CAG7C,MAAM,WAAW,WAAW,IAAI,aAAa;CAE7C,MAAM,qCAAqB,IAAI,KAAiB;AAwChD,QAAO;EACL,GAXqBC,wFACrB;GACE,aAAa;GACb,SA/BqC;IAEvC,KACE,OACA,aACG;KACH,MAAM,UAAU;MAAE;MAAO;MAAU;AACnC,wBAAmB,IACjB,mCAAmC;MAAE;MAAQ;MAAS;MAAU,CAAC,CAClE;;IAEH,0BAA0B;AACxB,UAAK,MAAM,eAAe,mBACxB,KAAI;AACF,mBAAa;cACN,OAAO;AACd,iDAAQ,OAAO,CAAC,OAAO,MACrB,qDACA,MACD;;AAGL,wBAAmB,OAAO;;IAE5B,UAAuB,YACrB,SAAS,QAAQ,QAAQ;IAC5B;GAMG,MAAM;GACN,oBAAoBC,8CAAmB;GACxC,EACD,OACD;EAIC,SAAS;EACV;;;;;;;;;;;;;;;;;;;AC/DH,MAAa,qCAAqC,OAChD,yDAA2B,KACoB;AAC/C,6DAAkC,OAAO;CAEzC,MAAM,EAAE,UAAU,QAAQ,6DACxB;EACE,4BAA4B;EAC5B,OAAO;EACP,eAAe;EACf,uBAAuB;EACxB,EACD,OACD;CAED,MAAM,mBAAmB,YAEnB;EACJ,MAAM,EAAE,mBAAmB,MAAM,UAAU;EAM3C,MAAM,CAAC,iBAAiB;AAExB,MAAI,cACF,yDAA0B,EAAE,eAAe,EAAE,OAAO;AAGtD,SAAO,EAAE,gBAAgB;;AAG3B,QAAO;EAAE,UAAU;EAAkB;EAAK;;;;;;;;;;;;;;;ACpC5C,MAAa,6BACX,EAAE,6BAA6B,SAA0C,EAAE,EAC3E,yDAA2B,KACoB;AAC/C,6DAAkC,OAAO;AAEzC,+DACE;EACE;EACA,OAAO;EACP,eAAe;EACf,uBAAuB;EACxB,EACD,OACD;;;;;;;;;;;;;AC1BH,MAAa,4CACX,yDAA2B,2EAEW,EAAE,OAAO,OAAO,EAAE,OAAO;;;;mECR5CC,iDAAaC,mDAAe"}
@@ -1,6 +1,6 @@
1
- import { a as name, o as version } from "./createWalletClientForWalletAccount-BfsmDgUZ.esm.js";
2
- import { o as registerEvmNetworkProviderBuilder } from "./evmTransferAmount-BEKzmQoH.esm.js";
3
- import { t as createWalletProviderFromEIP1193Provider } from "./createWalletProviderFromEIP1193Provider-DlYySIYZ.esm.js";
1
+ import { a as name, o as version } from "./createWalletClientForWalletAccount-Cs1cCKrt.esm.js";
2
+ import { o as registerEvmNetworkProviderBuilder } from "./evmTransferAmount-j0G3UjkD.esm.js";
3
+ import { t as createWalletProviderFromEIP1193Provider } from "./createWalletProviderFromEIP1193Provider-5QOYfUP4.esm.js";
4
4
  import { assertPackageVersion } from "@dynamic-labs-sdk/assert-package-version";
5
5
  import { getDefaultClient, getNetworksData, verifyWalletAccount } from "@dynamic-labs-sdk/client";
6
6
  import { DYNAMIC_ICONIC_SPRITE_URL, assertNonEmptyArray, createRuntimeServiceAccessKey, getAppMetadata, getCore, getNativeLinkScheme } from "@dynamic-labs-sdk/client/core";
@@ -17,13 +17,13 @@ import { createEVMClient } from "@metamask/connect-evm";
17
17
  * map required by third-party SDKs such as MetaMask or Base Account.
18
18
  *
19
19
  * @param client - The Dynamic client whose project settings drive the result.
20
- * @not-instrumented
20
+ * @notInstrumented
21
21
  */
22
22
  const getEvmNetworksData = (client) => getNetworksData(client).filter((network) => network.chain === "EVM");
23
23
 
24
24
  //#endregion
25
25
  //#region src/metamask/utils/getSupportedNetworks/getSupportedNetworks.ts
26
- /** @not-instrumented */
26
+ /** @notInstrumented */
27
27
  const getSupportedNetworks = (client) => {
28
28
  const evmNetworks = getEvmNetworksData(client).sort((a, b) => {
29
29
  if (a.networkId === "1") return -1;
@@ -49,7 +49,7 @@ const getSupportedNetworks = (client) => {
49
49
  * cannot be lost to a subscription race. Dapp metadata is sourced from the
50
50
  * client's `getAppMetadata`. Browser-only.
51
51
  *
52
- * @not-instrumented
52
+ * @notInstrumented
53
53
  */
54
54
  const createMetaMaskEvmController = async (client) => {
55
55
  const supportedNetworks = getSupportedNetworks(client);
@@ -146,7 +146,7 @@ const RUNTIME_SERVICE_KEY = "metaMaskEvmController";
146
146
  * `display_uri` cache and listener registry per Dynamic client, which
147
147
  * the SDK itself does not expose.
148
148
  *
149
- * @not-instrumented
149
+ * @notInstrumented
150
150
  */
151
151
  const getOrCreateMetaMaskEvmController = createRuntimeServiceAccessKey(RUNTIME_SERVICE_KEY, (client) => createMetaMaskEvmController(client));
152
152
 
@@ -168,7 +168,7 @@ const NOOP_UNSUBSCRIBE = () => void 0;
168
168
  * caller can clean it up later (for example, when the facade's
169
169
  * `removeAllListeners` is invoked).
170
170
  *
171
- * @not-instrumented
171
+ * @notInstrumented
172
172
  */
173
173
  const subscribeMetaMaskEvmFacadeListener = ({ client, pending, provider }) => {
174
174
  if (pending.event === "accountsChanged") return provider.on("accountsChanged", (addresses) => pending.listener([...addresses]));
@@ -191,7 +191,7 @@ const METAMASK_ICON = `${DYNAMIC_ICONIC_SPRITE_URL}#metamask`;
191
191
  * wallet picker by `getAvailableWalletProvidersData` — mirroring how
192
192
  * WalletConnect URI sessions register a signing-only provider.
193
193
  *
194
- * @not-instrumented
194
+ * @notInstrumented
195
195
  */
196
196
  const createMetaMaskEvmWalletProvider = async (client) => {
197
197
  const controller = await getOrCreateMetaMaskEvmController(client);
@@ -244,7 +244,7 @@ const createMetaMaskEvmWalletProvider = async (client) => {
244
244
  * the Dynamic client as a verified credential (not as an unverified
245
245
  * account).
246
246
  *
247
- * @not-instrumented
247
+ * @notInstrumented
248
248
  */
249
249
  const connectAndVerifyWithMetaMaskUriEvm = async (client = getDefaultClient()) => {
250
250
  registerEvmNetworkProviderBuilder(client);
@@ -276,7 +276,7 @@ const connectAndVerifyWithMetaMaskUriEvm = async (client = getDefaultClient()) =
276
276
  * through for the best UX. The resulting wallet provider registers for signing
277
277
  * only and is never surfaced in the wallet picker.
278
278
  *
279
- * @not-instrumented
279
+ * @notInstrumented
280
280
  */
281
281
  const connectWithMetaMaskUriEvm = ({ addToDynamicWalletAccounts = true } = {}, client = getDefaultClient()) => {
282
282
  registerEvmNetworkProviderBuilder(client);
@@ -296,7 +296,7 @@ const connectWithMetaMaskUriEvm = ({ addToDynamicWalletAccounts = true } = {}, c
296
296
  * `connectWithWalletProvider` to route through the announced provider; fall
297
297
  * back to `connectWithMetaMaskUriEvm` when `undefined`.
298
298
  *
299
- * @not-instrumented
299
+ * @notInstrumented
300
300
  */
301
301
  const getMetaMaskEvmExtensionWalletProviderKey = (client = getDefaultClient()) => getMetaMaskExtensionWalletProviderKey({ chain: "EVM" }, client);
302
302
 
@@ -1 +1 @@
1
- {"version":3,"file":"metamask.esm.js","names":["supportedNetworks: MetaMaskSupportedNetworks","latestDisplayUri: string | undefined","inFlightConnect: Promise<void> | null","exhaustiveCheck: never","packageName","packageVersion"],"sources":["../src/utils/getEvmNetworksData/getEvmNetworksData.ts","../src/metamask/utils/getSupportedNetworks/getSupportedNetworks.ts","../src/metamask/utils/createMetaMaskEvmController/createMetaMaskEvmController.ts","../src/metamask/utils/getOrCreateMetaMaskEvmController/getOrCreateMetaMaskEvmController.ts","../src/metamask/utils/subscribeMetaMaskEvmFacadeListener/subscribeMetaMaskEvmFacadeListener.ts","../src/metamask/createMetaMaskEvmWalletProvider/createMetaMaskEvmWalletProvider.ts","../src/metamask/connectAndVerifyWithMetaMaskUriEvm/connectAndVerifyWithMetaMaskUriEvm.ts","../src/metamask/connectWithMetaMaskUriEvm/connectWithMetaMaskUriEvm.ts","../src/metamask/getMetaMaskEvmExtensionWalletProviderKey/getMetaMaskEvmExtensionWalletProviderKey.ts","../src/exports/metamask.ts"],"sourcesContent":["import {\n type DynamicClient,\n type NetworkData,\n getNetworksData,\n} from '@dynamic-labs-sdk/client';\n\n/**\n * Returns the network configuration objects for the EVM networks configured\n * on the Dynamic client. Generic helper available to any EVM extension that\n * needs the full network metadata (RPC URLs, native currency, etc.) for the\n * configured EVM chain set — for instance, to build the `supportedNetworks`\n * map required by third-party SDKs such as MetaMask or Base Account.\n *\n * @param client - The Dynamic client whose project settings drive the result.\n * @not-instrumented\n */\nexport const getEvmNetworksData = (client: DynamicClient): NetworkData[] =>\n getNetworksData(client).filter((network) => network.chain === 'EVM');\n","import type { DynamicClient } from '@dynamic-labs-sdk/client';\nimport { assertNonEmptyArray } from '@dynamic-labs-sdk/client/core';\n\nimport { getEvmNetworksData } from '../../../utils/getEvmNetworksData';\n\ntype MetaMaskSupportedNetworks = Record<`0x${string}`, string>;\n\n/** @not-instrumented */\nexport const getSupportedNetworks = (\n client: DynamicClient\n): MetaMaskSupportedNetworks => {\n // Customer enabled networks, with mainnet first if available.\n const evmNetworks = getEvmNetworksData(client).sort((a, b) => {\n if (a.networkId === '1') return -1;\n if (b.networkId === '1') return 1;\n\n return 0;\n });\n\n assertNonEmptyArray(\n evmNetworks,\n 'No EVM networks have been configured. Make sure to add at least one EVM network to your project settings in the Dynamic Dashboard.'\n );\n\n const supportedNetworks: MetaMaskSupportedNetworks = {};\n\n for (const network of evmNetworks) {\n const numericChainId = Number.parseInt(network.networkId, 10);\n const hexChainId = `0x${numericChainId.toString(16)}` as `0x${string}`;\n supportedNetworks[hexChainId] = network.rpcUrls.http[0];\n }\n\n return supportedNetworks;\n};\n","import type { DynamicClient } from '@dynamic-labs-sdk/client';\nimport {\n getAppMetadata,\n getCore,\n getNativeLinkScheme,\n} from '@dynamic-labs-sdk/client/core';\nimport { clearMetaMaskSessionStorage } from '@dynamic-labs-sdk/metamask';\nimport type { DisplayUriListener } from '@dynamic-labs-sdk/metamask';\nimport { createEVMClient } from '@metamask/connect-evm';\nimport type { Hex } from '@metamask/connect-evm';\n\nimport type { MetaMaskEvmController } from '../../metamask.types';\nimport { getSupportedNetworks } from '../getSupportedNetworks';\n\n/**\n * Builds a fully-initialised `MetaMaskEvmController` for the given Dynamic\n * client. Runs the SDK in headless mode so consumers render their own QR /\n * deep-link surface, and registers `display_uri` handling as an\n * `eventHandlers` callback at construction time so the first URI emission\n * cannot be lost to a subscription race. Dapp metadata is sourced from the\n * client's `getAppMetadata`. Browser-only.\n *\n * @not-instrumented\n */\nexport const createMetaMaskEvmController = async (\n client: DynamicClient\n): Promise<MetaMaskEvmController> => {\n const supportedNetworks = getSupportedNetworks(client);\n const { appName, appLogoUrl, appUniversalLink, appNativeLink } =\n getAppMetadata(client);\n\n // Drop any IndexedDB session state left behind by a previous tab,\n // page reload, or abandoned pairing before the SDK initialises. The\n // SDK's auto-recovery path otherwise picks up a stale transport\n // descriptor and spends its (non-configurable) 10-second resume\n // timeout on every controller construction trying to revive a relay\n // session that no longer exists, surfacing as a long QR skeleton\n // delay on every page reload that follows an abandoned pairing.\n await clearMetaMaskSessionStorage();\n\n const listeners = new Set<DisplayUriListener>();\n let latestDisplayUri: string | undefined;\n\n const sdk = await createEVMClient({\n api: { supportedNetworks },\n dapp: {\n iconUrl: appLogoUrl,\n name: appName,\n nativeScheme: getNativeLinkScheme({ nativeLink: appNativeLink }),\n url: appUniversalLink ?? '',\n },\n debug: false,\n eventHandlers: {\n connect: () => {\n latestDisplayUri = undefined;\n },\n disconnect: () => {\n latestDisplayUri = undefined;\n },\n displayUri: (uri) => {\n latestDisplayUri = uri;\n for (const listener of listeners) {\n listener(uri);\n }\n },\n },\n ui: {\n headless: true,\n preferExtension: true,\n },\n });\n\n // Defensive cleanup: even though we cleared IndexedDB before\n // constructing the SDK, an in-flight `display_uri` emission could\n // theoretically race the storage delete on slow devices. Clearing\n // the cache here guarantees late subscribers cannot replay an URI\n // that originated from any pairing attempt prior to this\n // construction.\n latestDisplayUri = undefined;\n\n const onDisplayUri = (listener: DisplayUriListener): (() => void) => {\n listeners.add(listener);\n if (latestDisplayUri !== undefined) {\n listener(latestDisplayUri);\n }\n return () => {\n listeners.delete(listener);\n };\n };\n\n const chainIds = Object.keys(supportedNetworks) as Hex[];\n\n // Tracks an in-flight `connect` call so that overlapping invocations (most\n // commonly React's StrictMode double-invocation of effects, or a hook that\n // re-runs while the user is still scanning) await the same underlying\n // pairing instead of racing two `sdk.connect` calls against each other.\n // Without this, the second invocation tears down the first via\n // `sdk.disconnect()` and the SDK throws \"Cannot connect when state is\n // CONNECTING\".\n let inFlightConnect: Promise<void> | null = null;\n\n const connect = (): Promise<void> => {\n if (inFlightConnect) {\n return inFlightConnect;\n }\n\n inFlightConnect = (async () => {\n try {\n // If a previous pairing was cancelled mid-flight the SDK can be left\n // in `connecting` state with a dead transport descriptor; tear it\n // down so the next `connect` issues a fresh URI synchronously\n // instead of waiting for the SDK's (non-configurable) 10-second\n // resume timeout.\n if (sdk.status === 'connecting') {\n try {\n await sdk.disconnect();\n } catch (error) {\n getCore(client).logger.debug(\n '[metamask] pre-connect disconnect rejected (expected when aborting a pairing the wallet never accepted)',\n error\n );\n }\n }\n\n await sdk.connect({ chainIds });\n } finally {\n inFlightConnect = null;\n }\n })();\n\n return inFlightConnect;\n };\n\n return {\n clearCachedDisplayUri: () => {\n latestDisplayUri = undefined;\n },\n connect,\n getLatestDisplayUri: () => latestDisplayUri,\n onDisplayUri,\n sdk,\n };\n};\n","import { createRuntimeServiceAccessKey } from '@dynamic-labs-sdk/client/core';\n\nimport { createMetaMaskEvmController } from '../createMetaMaskEvmController';\n\nconst RUNTIME_SERVICE_KEY = 'metaMaskEvmController';\n\n/**\n * Per-`DynamicClient` accessor for the lazily-constructed MetaMask EVM\n * controller. Wraps `createMetaMaskEvmController` with the standard\n * `runtimeServices` cache so every caller — the EIP-1193 wallet-provider\n * façade, the `display_uri` subscription helper, and the\n * `connectWithMetaMaskEvm` URI-returning helper — shares the same\n * controller (and therefore the same SDK instance, display-URI cache, and\n * listener registry) per Dynamic client.\n *\n * This matches the pattern used by the WalletConnect `getSignClient`\n * accessor: the first call triggers construction; subsequent calls\n * (within the same client) return the cached promise without re-running\n * the builder.\n *\n * The cache is **per-Dynamic-client, not per-SDK-instance**:\n * `@metamask/connect-evm`'s `createEVMClient` is itself a singleton —\n * a second call returns the same underlying SDK — so when multiple\n * Dynamic clients coexist they end up sharing the same MetaMask SDK\n * instance (and therefore the same active pairing session) regardless\n * of this cache. The wrapper exists to own the controller's\n * `display_uri` cache and listener registry per Dynamic client, which\n * the SDK itself does not expose.\n *\n * @not-instrumented\n */\nexport const getOrCreateMetaMaskEvmController = createRuntimeServiceAccessKey(\n RUNTIME_SERVICE_KEY,\n (client) => createMetaMaskEvmController(client)\n);\n","import type { DynamicClient } from '@dynamic-labs-sdk/client';\nimport { getCore } from '@dynamic-labs-sdk/client/core';\nimport type {\n Address,\n Hex,\n EIP1193Provider as SdkEip1193Provider,\n} from '@metamask/connect-evm';\n\nimport type { EIP1193ProviderEvents } from '../../../EvmWalletProvider.types';\n\nconst NOOP_UNSUBSCRIBE = (): void => undefined;\n\n/**\n * A facade listener captured by the MetaMask EVM wallet-provider facade.\n *\n * The discriminated-union shape (rather than `{ event: string; listener:\n * (...args: unknown[]) => void }`) is what lets\n * `subscribeMetaMaskEvmFacadeListener` narrow the listener type per\n * event, so the per-event adapters stay type-safe without casts.\n */\nexport type PendingMetaMaskEvmFacadeListener = {\n [E in keyof EIP1193ProviderEvents]: {\n event: E;\n listener: EIP1193ProviderEvents[E];\n };\n}[keyof EIP1193ProviderEvents];\n\n/**\n * Subscribes a facade listener to the underlying MetaMask SDK provider,\n * forwarding events through per-event adapters:\n *\n * - `accountsChanged` — clones the readonly addresses array\n * `@metamask/connect-evm` hands the listener, since the Dynamic SDK\n * facade contract emits a mutable `Address[]`.\n * - `chainChanged` — passes the chain id through verbatim.\n * - `disconnected` — bridged to the SDK's canonical `disconnect`\n * event, which the SDK actually emits.\n *\n * Returns the unsubscribe function returned by the SDK provider so the\n * caller can clean it up later (for example, when the facade's\n * `removeAllListeners` is invoked).\n *\n * @not-instrumented\n */\nexport const subscribeMetaMaskEvmFacadeListener = ({\n client,\n pending,\n provider,\n}: {\n client: DynamicClient;\n pending: PendingMetaMaskEvmFacadeListener;\n provider: SdkEip1193Provider;\n}): (() => void) => {\n if (pending.event === 'accountsChanged') {\n return provider.on('accountsChanged', (addresses: readonly Address[]) =>\n pending.listener([...addresses])\n );\n }\n\n if (pending.event === 'chainChanged') {\n return provider.on('chainChanged', (chainId: Hex) =>\n pending.listener(chainId)\n );\n }\n\n if (pending.event === 'disconnected') {\n // The SDK emits its canonical `disconnect` event, which we bridge\n // to the facade's `disconnected` contract here.\n return provider.on('disconnect', () => pending.listener());\n }\n\n // Defensive fallthrough: a new entry was added to `EIP1193ProviderEvents`\n // but the per-event adapter list above was not updated. We log the\n // unhandled event and return a no-op unsubscribe so the consumer's\n // teardown loop still runs cleanly.\n const exhaustiveCheck: never = pending;\n getCore(client).logger.debug(\n '[metamask] subscribeMetaMaskEvmFacadeListener: unhandled event',\n (exhaustiveCheck as { event: unknown }).event\n );\n return NOOP_UNSUBSCRIBE;\n};\n","import type { DynamicClient } from '@dynamic-labs-sdk/client';\nimport {\n DYNAMIC_ICONIC_SPRITE_URL,\n getCore,\n} from '@dynamic-labs-sdk/client/core';\nimport { MetaMaskWalletNotConnectedError } from '@dynamic-labs-sdk/metamask';\nimport { WalletProviderEnum } from '@dynamic-labs/sdk-api-core';\n\nimport type {\n EIP1193Provider,\n EIP1193ProviderEvents,\n EIP1193ProviderRequest,\n EvmWalletProvider,\n} from '../../EvmWalletProvider.types';\nimport { createWalletProviderFromEIP1193Provider } from '../../utils/createWalletProviderFromEIP1193Provider';\nimport { getOrCreateMetaMaskEvmController } from '../utils/getOrCreateMetaMaskEvmController';\nimport type { PendingMetaMaskEvmFacadeListener } from '../utils/subscribeMetaMaskEvmFacadeListener';\nimport { subscribeMetaMaskEvmFacadeListener } from '../utils/subscribeMetaMaskEvmFacadeListener';\n\nconst METAMASK_DISPLAY_NAME = 'MetaMask';\nconst METAMASK_ICON = `${DYNAMIC_ICONIC_SPRITE_URL}#metamask`;\n\n/**\n * Builds the `EvmWalletProvider` registered AFTER a successful MetaMask\n * SDK URI pairing. Wraps the SDK's EIP-1193 provider behind the Dynamic\n * facade (`disconnect` → `disconnected` event bridge, `removeAllListeners`\n * shim) and drops `connect` so the provider is filtered out of the\n * wallet picker by `getAvailableWalletProvidersData` — mirroring how\n * WalletConnect URI sessions register a signing-only provider.\n *\n * @not-instrumented\n */\nexport const createMetaMaskEvmWalletProvider = async (\n client: DynamicClient\n): Promise<EvmWalletProvider> => {\n const controller = await getOrCreateMetaMaskEvmController(client);\n\n // The provider is only meaningful once the URI pairing has produced a\n // connected account; guard so a premature or out-of-order call raises a\n // readable error instead of building a provider around an unconnected SDK.\n if (controller.sdk.getAccount() === undefined) {\n throw new MetaMaskWalletNotConnectedError();\n }\n\n const provider = controller.sdk.getProvider();\n\n const subscriberCleanups = new Set<() => void>();\n\n const eip1193Provider: EIP1193Provider = {\n // eslint-disable-next-line custom-rules/require-single-object-param -- EIP-1193 `on` signature is fixed by the interface contract.\n on: <E extends keyof EIP1193ProviderEvents>(\n event: E,\n listener: EIP1193ProviderEvents[E]\n ) => {\n const pending = { event, listener } as PendingMetaMaskEvmFacadeListener;\n subscriberCleanups.add(\n subscribeMetaMaskEvmFacadeListener({ client, pending, provider })\n );\n },\n removeAllListeners: () => {\n for (const unsubscribe of subscriberCleanups) {\n try {\n unsubscribe();\n } catch (error) {\n getCore(client).logger.error(\n '[metamask] removeAllListeners: unsubscribe failed',\n error\n );\n }\n }\n subscriberCleanups.clear();\n },\n request: <T = unknown>(request: EIP1193ProviderRequest): Promise<T> =>\n provider.request(request) as Promise<T>,\n };\n\n const walletProvider = createWalletProviderFromEIP1193Provider(\n {\n displayName: METAMASK_DISPLAY_NAME,\n eip1193: eip1193Provider,\n icon: METAMASK_ICON,\n walletProviderType: WalletProviderEnum.QrCode,\n },\n client\n );\n\n return {\n ...walletProvider,\n connect: undefined,\n };\n};\n","import {\n type WalletAccount,\n type WalletProviderUriConnectionResult,\n getDefaultClient,\n verifyWalletAccount,\n} from '@dynamic-labs-sdk/client';\nimport { connectWithMetaMaskUri } from '@dynamic-labs-sdk/metamask';\n\nimport { registerEvmNetworkProviderBuilder } from '../../registerEvmNetworkProviderBuilder';\nimport { createMetaMaskEvmWalletProvider } from '../createMetaMaskEvmWalletProvider';\nimport { getOrCreateMetaMaskEvmController } from '../utils/getOrCreateMetaMaskEvmController';\n\n/**\n * Drives a MetaMask SDK URI pairing for EVM and verifies ownership of the\n * paired wallet account through message signing, returning `{ approval, uri }`\n * so consumers can render the QR / hand the URI to a deeplink.\n *\n * Unlike `connectAndVerifyWithWalletConnectEvm`, the MetaMask SDK does not\n * expose a single-round-trip authenticate primitive, so this drives two\n * sequential interactions on the wallet side: the user first approves the\n * pairing, then approves a sign-in message. The wallet account is added to\n * the Dynamic client as a verified credential (not as an unverified\n * account).\n *\n * @not-instrumented\n */\nexport const connectAndVerifyWithMetaMaskUriEvm = async (\n client = getDefaultClient()\n): Promise<WalletProviderUriConnectionResult> => {\n registerEvmNetworkProviderBuilder(client);\n\n const { approval, uri } = await connectWithMetaMaskUri(\n {\n addToDynamicWalletAccounts: false,\n chain: 'EVM',\n getController: getOrCreateMetaMaskEvmController,\n walletProviderBuilder: createMetaMaskEvmWalletProvider,\n },\n client\n );\n\n const verifiedApproval = async (): Promise<{\n walletAccounts: WalletAccount[];\n }> => {\n const { walletAccounts } = await approval();\n\n // MetaMask SDK exposes a single active address per pairing (same\n // model as EIP-1193 `eth_accounts`), mirroring how the underlying\n // `connectWithMetaMaskUri` materializes a single account from\n // `addresses[0]`. Verify it directly.\n const [walletAccount] = walletAccounts;\n\n if (walletAccount) {\n await verifyWalletAccount({ walletAccount }, client);\n }\n\n return { walletAccounts };\n };\n\n return { approval: verifiedApproval, uri };\n};\n","import { getDefaultClient } from '@dynamic-labs-sdk/client';\nimport type { WalletProviderUriConnectionResult } from '@dynamic-labs-sdk/client';\nimport { connectWithMetaMaskUri } from '@dynamic-labs-sdk/metamask';\n\nimport { registerEvmNetworkProviderBuilder } from '../../registerEvmNetworkProviderBuilder';\nimport { createMetaMaskEvmWalletProvider } from '../createMetaMaskEvmWalletProvider';\nimport { getOrCreateMetaMaskEvmController } from '../utils/getOrCreateMetaMaskEvmController';\n\nexport type ConnectWithMetaMaskUriEvmParams = {\n /** Whether to add the connected wallet account to the Dynamic client. Defaults to `true`. */\n addToDynamicWalletAccounts?: boolean;\n};\n\n/**\n * Drives a MetaMask SDK URI pairing for EVM and returns `{ approval, uri }` so\n * consumers can render the QR / hand the URI to a deeplink. Logs an advisory\n * warning when the MetaMask extension is announced via EIP-6963; pairing still\n * proceeds, but the consumer is told which announced provider key to route\n * through for the best UX. The resulting wallet provider registers for signing\n * only and is never surfaced in the wallet picker.\n *\n * @not-instrumented\n */\nexport const connectWithMetaMaskUriEvm = (\n { addToDynamicWalletAccounts = true }: ConnectWithMetaMaskUriEvmParams = {},\n client = getDefaultClient()\n): Promise<WalletProviderUriConnectionResult> => {\n registerEvmNetworkProviderBuilder(client);\n\n return connectWithMetaMaskUri(\n {\n addToDynamicWalletAccounts,\n chain: 'EVM',\n getController: getOrCreateMetaMaskEvmController,\n walletProviderBuilder: createMetaMaskEvmWalletProvider,\n },\n client\n );\n};\n","import { getDefaultClient } from '@dynamic-labs-sdk/client';\nimport { getMetaMaskExtensionWalletProviderKey } from '@dynamic-labs-sdk/metamask';\n\n/**\n * Returns the wallet provider key of the MetaMask browser extension announced\n * for EVM, or `undefined` when none is announced. Pass the returned key to\n * `connectWithWalletProvider` to route through the announced provider; fall\n * back to `connectWithMetaMaskUriEvm` when `undefined`.\n *\n * @not-instrumented\n */\nexport const getMetaMaskEvmExtensionWalletProviderKey = (\n client = getDefaultClient()\n): string | undefined =>\n getMetaMaskExtensionWalletProviderKey({ chain: 'EVM' }, client);\n","import { assertPackageVersion } from '@dynamic-labs-sdk/assert-package-version';\n\nimport {\n name as packageName,\n version as packageVersion,\n} from '../../package.json';\nassertPackageVersion(packageName, packageVersion);\n\nexport { connectAndVerifyWithMetaMaskUriEvm } from '../metamask/connectAndVerifyWithMetaMaskUriEvm';\nexport { connectWithMetaMaskUriEvm } from '../metamask/connectWithMetaMaskUriEvm';\nexport type { ConnectWithMetaMaskUriEvmParams } from '../metamask/connectWithMetaMaskUriEvm/connectWithMetaMaskUriEvm';\nexport { getMetaMaskEvmExtensionWalletProviderKey } from '../metamask/getMetaMaskEvmExtensionWalletProviderKey';\nexport { MetaMaskDisplayUriMissingError } from '@dynamic-labs-sdk/metamask';\n"],"mappings":"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"}
1
+ {"version":3,"file":"metamask.esm.js","names":["supportedNetworks: MetaMaskSupportedNetworks","latestDisplayUri: string | undefined","inFlightConnect: Promise<void> | null","exhaustiveCheck: never","packageName","packageVersion"],"sources":["../src/utils/getEvmNetworksData/getEvmNetworksData.ts","../src/metamask/utils/getSupportedNetworks/getSupportedNetworks.ts","../src/metamask/utils/createMetaMaskEvmController/createMetaMaskEvmController.ts","../src/metamask/utils/getOrCreateMetaMaskEvmController/getOrCreateMetaMaskEvmController.ts","../src/metamask/utils/subscribeMetaMaskEvmFacadeListener/subscribeMetaMaskEvmFacadeListener.ts","../src/metamask/createMetaMaskEvmWalletProvider/createMetaMaskEvmWalletProvider.ts","../src/metamask/connectAndVerifyWithMetaMaskUriEvm/connectAndVerifyWithMetaMaskUriEvm.ts","../src/metamask/connectWithMetaMaskUriEvm/connectWithMetaMaskUriEvm.ts","../src/metamask/getMetaMaskEvmExtensionWalletProviderKey/getMetaMaskEvmExtensionWalletProviderKey.ts","../src/exports/metamask.ts"],"sourcesContent":["import {\n type DynamicClient,\n type NetworkData,\n getNetworksData,\n} from '@dynamic-labs-sdk/client';\n\n/**\n * Returns the network configuration objects for the EVM networks configured\n * on the Dynamic client. Generic helper available to any EVM extension that\n * needs the full network metadata (RPC URLs, native currency, etc.) for the\n * configured EVM chain set — for instance, to build the `supportedNetworks`\n * map required by third-party SDKs such as MetaMask or Base Account.\n *\n * @param client - The Dynamic client whose project settings drive the result.\n * @notInstrumented\n */\nexport const getEvmNetworksData = (client: DynamicClient): NetworkData[] =>\n getNetworksData(client).filter((network) => network.chain === 'EVM');\n","import type { DynamicClient } from '@dynamic-labs-sdk/client';\nimport { assertNonEmptyArray } from '@dynamic-labs-sdk/client/core';\n\nimport { getEvmNetworksData } from '../../../utils/getEvmNetworksData';\n\ntype MetaMaskSupportedNetworks = Record<`0x${string}`, string>;\n\n/** @notInstrumented */\nexport const getSupportedNetworks = (\n client: DynamicClient\n): MetaMaskSupportedNetworks => {\n // Customer enabled networks, with mainnet first if available.\n const evmNetworks = getEvmNetworksData(client).sort((a, b) => {\n if (a.networkId === '1') return -1;\n if (b.networkId === '1') return 1;\n\n return 0;\n });\n\n assertNonEmptyArray(\n evmNetworks,\n 'No EVM networks have been configured. Make sure to add at least one EVM network to your project settings in the Dynamic Dashboard.'\n );\n\n const supportedNetworks: MetaMaskSupportedNetworks = {};\n\n for (const network of evmNetworks) {\n const numericChainId = Number.parseInt(network.networkId, 10);\n const hexChainId = `0x${numericChainId.toString(16)}` as `0x${string}`;\n supportedNetworks[hexChainId] = network.rpcUrls.http[0];\n }\n\n return supportedNetworks;\n};\n","import type { DynamicClient } from '@dynamic-labs-sdk/client';\nimport {\n getAppMetadata,\n getCore,\n getNativeLinkScheme,\n} from '@dynamic-labs-sdk/client/core';\nimport { clearMetaMaskSessionStorage } from '@dynamic-labs-sdk/metamask';\nimport type { DisplayUriListener } from '@dynamic-labs-sdk/metamask';\nimport { createEVMClient } from '@metamask/connect-evm';\nimport type { Hex } from '@metamask/connect-evm';\n\nimport type { MetaMaskEvmController } from '../../metamask.types';\nimport { getSupportedNetworks } from '../getSupportedNetworks';\n\n/**\n * Builds a fully-initialised `MetaMaskEvmController` for the given Dynamic\n * client. Runs the SDK in headless mode so consumers render their own QR /\n * deep-link surface, and registers `display_uri` handling as an\n * `eventHandlers` callback at construction time so the first URI emission\n * cannot be lost to a subscription race. Dapp metadata is sourced from the\n * client's `getAppMetadata`. Browser-only.\n *\n * @notInstrumented\n */\nexport const createMetaMaskEvmController = async (\n client: DynamicClient\n): Promise<MetaMaskEvmController> => {\n const supportedNetworks = getSupportedNetworks(client);\n const { appName, appLogoUrl, appUniversalLink, appNativeLink } =\n getAppMetadata(client);\n\n // Drop any IndexedDB session state left behind by a previous tab,\n // page reload, or abandoned pairing before the SDK initialises. The\n // SDK's auto-recovery path otherwise picks up a stale transport\n // descriptor and spends its (non-configurable) 10-second resume\n // timeout on every controller construction trying to revive a relay\n // session that no longer exists, surfacing as a long QR skeleton\n // delay on every page reload that follows an abandoned pairing.\n await clearMetaMaskSessionStorage();\n\n const listeners = new Set<DisplayUriListener>();\n let latestDisplayUri: string | undefined;\n\n const sdk = await createEVMClient({\n api: { supportedNetworks },\n dapp: {\n iconUrl: appLogoUrl,\n name: appName,\n nativeScheme: getNativeLinkScheme({ nativeLink: appNativeLink }),\n url: appUniversalLink ?? '',\n },\n debug: false,\n eventHandlers: {\n connect: () => {\n latestDisplayUri = undefined;\n },\n disconnect: () => {\n latestDisplayUri = undefined;\n },\n displayUri: (uri) => {\n latestDisplayUri = uri;\n for (const listener of listeners) {\n listener(uri);\n }\n },\n },\n ui: {\n headless: true,\n preferExtension: true,\n },\n });\n\n // Defensive cleanup: even though we cleared IndexedDB before\n // constructing the SDK, an in-flight `display_uri` emission could\n // theoretically race the storage delete on slow devices. Clearing\n // the cache here guarantees late subscribers cannot replay an URI\n // that originated from any pairing attempt prior to this\n // construction.\n latestDisplayUri = undefined;\n\n const onDisplayUri = (listener: DisplayUriListener): (() => void) => {\n listeners.add(listener);\n if (latestDisplayUri !== undefined) {\n listener(latestDisplayUri);\n }\n return () => {\n listeners.delete(listener);\n };\n };\n\n const chainIds = Object.keys(supportedNetworks) as Hex[];\n\n // Tracks an in-flight `connect` call so that overlapping invocations (most\n // commonly React's StrictMode double-invocation of effects, or a hook that\n // re-runs while the user is still scanning) await the same underlying\n // pairing instead of racing two `sdk.connect` calls against each other.\n // Without this, the second invocation tears down the first via\n // `sdk.disconnect()` and the SDK throws \"Cannot connect when state is\n // CONNECTING\".\n let inFlightConnect: Promise<void> | null = null;\n\n const connect = (): Promise<void> => {\n if (inFlightConnect) {\n return inFlightConnect;\n }\n\n inFlightConnect = (async () => {\n try {\n // If a previous pairing was cancelled mid-flight the SDK can be left\n // in `connecting` state with a dead transport descriptor; tear it\n // down so the next `connect` issues a fresh URI synchronously\n // instead of waiting for the SDK's (non-configurable) 10-second\n // resume timeout.\n if (sdk.status === 'connecting') {\n try {\n await sdk.disconnect();\n } catch (error) {\n getCore(client).logger.debug(\n '[metamask] pre-connect disconnect rejected (expected when aborting a pairing the wallet never accepted)',\n error\n );\n }\n }\n\n await sdk.connect({ chainIds });\n } finally {\n inFlightConnect = null;\n }\n })();\n\n return inFlightConnect;\n };\n\n return {\n clearCachedDisplayUri: () => {\n latestDisplayUri = undefined;\n },\n connect,\n getLatestDisplayUri: () => latestDisplayUri,\n onDisplayUri,\n sdk,\n };\n};\n","import { createRuntimeServiceAccessKey } from '@dynamic-labs-sdk/client/core';\n\nimport { createMetaMaskEvmController } from '../createMetaMaskEvmController';\n\nconst RUNTIME_SERVICE_KEY = 'metaMaskEvmController';\n\n/**\n * Per-`DynamicClient` accessor for the lazily-constructed MetaMask EVM\n * controller. Wraps `createMetaMaskEvmController` with the standard\n * `runtimeServices` cache so every caller — the EIP-1193 wallet-provider\n * façade, the `display_uri` subscription helper, and the\n * `connectWithMetaMaskEvm` URI-returning helper — shares the same\n * controller (and therefore the same SDK instance, display-URI cache, and\n * listener registry) per Dynamic client.\n *\n * This matches the pattern used by the WalletConnect `getSignClient`\n * accessor: the first call triggers construction; subsequent calls\n * (within the same client) return the cached promise without re-running\n * the builder.\n *\n * The cache is **per-Dynamic-client, not per-SDK-instance**:\n * `@metamask/connect-evm`'s `createEVMClient` is itself a singleton —\n * a second call returns the same underlying SDK — so when multiple\n * Dynamic clients coexist they end up sharing the same MetaMask SDK\n * instance (and therefore the same active pairing session) regardless\n * of this cache. The wrapper exists to own the controller's\n * `display_uri` cache and listener registry per Dynamic client, which\n * the SDK itself does not expose.\n *\n * @notInstrumented\n */\nexport const getOrCreateMetaMaskEvmController = createRuntimeServiceAccessKey(\n RUNTIME_SERVICE_KEY,\n (client) => createMetaMaskEvmController(client)\n);\n","import type { DynamicClient } from '@dynamic-labs-sdk/client';\nimport { getCore } from '@dynamic-labs-sdk/client/core';\nimport type {\n Address,\n Hex,\n EIP1193Provider as SdkEip1193Provider,\n} from '@metamask/connect-evm';\n\nimport type { EIP1193ProviderEvents } from '../../../EvmWalletProvider.types';\n\nconst NOOP_UNSUBSCRIBE = (): void => undefined;\n\n/**\n * A facade listener captured by the MetaMask EVM wallet-provider facade.\n *\n * The discriminated-union shape (rather than `{ event: string; listener:\n * (...args: unknown[]) => void }`) is what lets\n * `subscribeMetaMaskEvmFacadeListener` narrow the listener type per\n * event, so the per-event adapters stay type-safe without casts.\n */\nexport type PendingMetaMaskEvmFacadeListener = {\n [E in keyof EIP1193ProviderEvents]: {\n event: E;\n listener: EIP1193ProviderEvents[E];\n };\n}[keyof EIP1193ProviderEvents];\n\n/**\n * Subscribes a facade listener to the underlying MetaMask SDK provider,\n * forwarding events through per-event adapters:\n *\n * - `accountsChanged` — clones the readonly addresses array\n * `@metamask/connect-evm` hands the listener, since the Dynamic SDK\n * facade contract emits a mutable `Address[]`.\n * - `chainChanged` — passes the chain id through verbatim.\n * - `disconnected` — bridged to the SDK's canonical `disconnect`\n * event, which the SDK actually emits.\n *\n * Returns the unsubscribe function returned by the SDK provider so the\n * caller can clean it up later (for example, when the facade's\n * `removeAllListeners` is invoked).\n *\n * @notInstrumented\n */\nexport const subscribeMetaMaskEvmFacadeListener = ({\n client,\n pending,\n provider,\n}: {\n client: DynamicClient;\n pending: PendingMetaMaskEvmFacadeListener;\n provider: SdkEip1193Provider;\n}): (() => void) => {\n if (pending.event === 'accountsChanged') {\n return provider.on('accountsChanged', (addresses: readonly Address[]) =>\n pending.listener([...addresses])\n );\n }\n\n if (pending.event === 'chainChanged') {\n return provider.on('chainChanged', (chainId: Hex) =>\n pending.listener(chainId)\n );\n }\n\n if (pending.event === 'disconnected') {\n // The SDK emits its canonical `disconnect` event, which we bridge\n // to the facade's `disconnected` contract here.\n return provider.on('disconnect', () => pending.listener());\n }\n\n // Defensive fallthrough: a new entry was added to `EIP1193ProviderEvents`\n // but the per-event adapter list above was not updated. We log the\n // unhandled event and return a no-op unsubscribe so the consumer's\n // teardown loop still runs cleanly.\n const exhaustiveCheck: never = pending;\n getCore(client).logger.debug(\n '[metamask] subscribeMetaMaskEvmFacadeListener: unhandled event',\n (exhaustiveCheck as { event: unknown }).event\n );\n return NOOP_UNSUBSCRIBE;\n};\n","import type { DynamicClient } from '@dynamic-labs-sdk/client';\nimport {\n DYNAMIC_ICONIC_SPRITE_URL,\n getCore,\n} from '@dynamic-labs-sdk/client/core';\nimport { MetaMaskWalletNotConnectedError } from '@dynamic-labs-sdk/metamask';\nimport { WalletProviderEnum } from '@dynamic-labs/sdk-api-core';\n\nimport type {\n EIP1193Provider,\n EIP1193ProviderEvents,\n EIP1193ProviderRequest,\n EvmWalletProvider,\n} from '../../EvmWalletProvider.types';\nimport { createWalletProviderFromEIP1193Provider } from '../../utils/createWalletProviderFromEIP1193Provider';\nimport { getOrCreateMetaMaskEvmController } from '../utils/getOrCreateMetaMaskEvmController';\nimport type { PendingMetaMaskEvmFacadeListener } from '../utils/subscribeMetaMaskEvmFacadeListener';\nimport { subscribeMetaMaskEvmFacadeListener } from '../utils/subscribeMetaMaskEvmFacadeListener';\n\nconst METAMASK_DISPLAY_NAME = 'MetaMask';\nconst METAMASK_ICON = `${DYNAMIC_ICONIC_SPRITE_URL}#metamask`;\n\n/**\n * Builds the `EvmWalletProvider` registered AFTER a successful MetaMask\n * SDK URI pairing. Wraps the SDK's EIP-1193 provider behind the Dynamic\n * facade (`disconnect` → `disconnected` event bridge, `removeAllListeners`\n * shim) and drops `connect` so the provider is filtered out of the\n * wallet picker by `getAvailableWalletProvidersData` — mirroring how\n * WalletConnect URI sessions register a signing-only provider.\n *\n * @notInstrumented\n */\nexport const createMetaMaskEvmWalletProvider = async (\n client: DynamicClient\n): Promise<EvmWalletProvider> => {\n const controller = await getOrCreateMetaMaskEvmController(client);\n\n // The provider is only meaningful once the URI pairing has produced a\n // connected account; guard so a premature or out-of-order call raises a\n // readable error instead of building a provider around an unconnected SDK.\n if (controller.sdk.getAccount() === undefined) {\n throw new MetaMaskWalletNotConnectedError();\n }\n\n const provider = controller.sdk.getProvider();\n\n const subscriberCleanups = new Set<() => void>();\n\n const eip1193Provider: EIP1193Provider = {\n // eslint-disable-next-line custom-rules/require-single-object-param -- EIP-1193 `on` signature is fixed by the interface contract.\n on: <E extends keyof EIP1193ProviderEvents>(\n event: E,\n listener: EIP1193ProviderEvents[E]\n ) => {\n const pending = { event, listener } as PendingMetaMaskEvmFacadeListener;\n subscriberCleanups.add(\n subscribeMetaMaskEvmFacadeListener({ client, pending, provider })\n );\n },\n removeAllListeners: () => {\n for (const unsubscribe of subscriberCleanups) {\n try {\n unsubscribe();\n } catch (error) {\n getCore(client).logger.error(\n '[metamask] removeAllListeners: unsubscribe failed',\n error\n );\n }\n }\n subscriberCleanups.clear();\n },\n request: <T = unknown>(request: EIP1193ProviderRequest): Promise<T> =>\n provider.request(request) as Promise<T>,\n };\n\n const walletProvider = createWalletProviderFromEIP1193Provider(\n {\n displayName: METAMASK_DISPLAY_NAME,\n eip1193: eip1193Provider,\n icon: METAMASK_ICON,\n walletProviderType: WalletProviderEnum.QrCode,\n },\n client\n );\n\n return {\n ...walletProvider,\n connect: undefined,\n };\n};\n","import {\n type WalletAccount,\n type WalletProviderUriConnectionResult,\n getDefaultClient,\n verifyWalletAccount,\n} from '@dynamic-labs-sdk/client';\nimport { connectWithMetaMaskUri } from '@dynamic-labs-sdk/metamask';\n\nimport { registerEvmNetworkProviderBuilder } from '../../registerEvmNetworkProviderBuilder';\nimport { createMetaMaskEvmWalletProvider } from '../createMetaMaskEvmWalletProvider';\nimport { getOrCreateMetaMaskEvmController } from '../utils/getOrCreateMetaMaskEvmController';\n\n/**\n * Drives a MetaMask SDK URI pairing for EVM and verifies ownership of the\n * paired wallet account through message signing, returning `{ approval, uri }`\n * so consumers can render the QR / hand the URI to a deeplink.\n *\n * Unlike `connectAndVerifyWithWalletConnectEvm`, the MetaMask SDK does not\n * expose a single-round-trip authenticate primitive, so this drives two\n * sequential interactions on the wallet side: the user first approves the\n * pairing, then approves a sign-in message. The wallet account is added to\n * the Dynamic client as a verified credential (not as an unverified\n * account).\n *\n * @notInstrumented\n */\nexport const connectAndVerifyWithMetaMaskUriEvm = async (\n client = getDefaultClient()\n): Promise<WalletProviderUriConnectionResult> => {\n registerEvmNetworkProviderBuilder(client);\n\n const { approval, uri } = await connectWithMetaMaskUri(\n {\n addToDynamicWalletAccounts: false,\n chain: 'EVM',\n getController: getOrCreateMetaMaskEvmController,\n walletProviderBuilder: createMetaMaskEvmWalletProvider,\n },\n client\n );\n\n const verifiedApproval = async (): Promise<{\n walletAccounts: WalletAccount[];\n }> => {\n const { walletAccounts } = await approval();\n\n // MetaMask SDK exposes a single active address per pairing (same\n // model as EIP-1193 `eth_accounts`), mirroring how the underlying\n // `connectWithMetaMaskUri` materializes a single account from\n // `addresses[0]`. Verify it directly.\n const [walletAccount] = walletAccounts;\n\n if (walletAccount) {\n await verifyWalletAccount({ walletAccount }, client);\n }\n\n return { walletAccounts };\n };\n\n return { approval: verifiedApproval, uri };\n};\n","import { getDefaultClient } from '@dynamic-labs-sdk/client';\nimport type { WalletProviderUriConnectionResult } from '@dynamic-labs-sdk/client';\nimport { connectWithMetaMaskUri } from '@dynamic-labs-sdk/metamask';\n\nimport { registerEvmNetworkProviderBuilder } from '../../registerEvmNetworkProviderBuilder';\nimport { createMetaMaskEvmWalletProvider } from '../createMetaMaskEvmWalletProvider';\nimport { getOrCreateMetaMaskEvmController } from '../utils/getOrCreateMetaMaskEvmController';\n\nexport type ConnectWithMetaMaskUriEvmParams = {\n /** Whether to add the connected wallet account to the Dynamic client. Defaults to `true`. */\n addToDynamicWalletAccounts?: boolean;\n};\n\n/**\n * Drives a MetaMask SDK URI pairing for EVM and returns `{ approval, uri }` so\n * consumers can render the QR / hand the URI to a deeplink. Logs an advisory\n * warning when the MetaMask extension is announced via EIP-6963; pairing still\n * proceeds, but the consumer is told which announced provider key to route\n * through for the best UX. The resulting wallet provider registers for signing\n * only and is never surfaced in the wallet picker.\n *\n * @notInstrumented\n */\nexport const connectWithMetaMaskUriEvm = (\n { addToDynamicWalletAccounts = true }: ConnectWithMetaMaskUriEvmParams = {},\n client = getDefaultClient()\n): Promise<WalletProviderUriConnectionResult> => {\n registerEvmNetworkProviderBuilder(client);\n\n return connectWithMetaMaskUri(\n {\n addToDynamicWalletAccounts,\n chain: 'EVM',\n getController: getOrCreateMetaMaskEvmController,\n walletProviderBuilder: createMetaMaskEvmWalletProvider,\n },\n client\n );\n};\n","import { getDefaultClient } from '@dynamic-labs-sdk/client';\nimport { getMetaMaskExtensionWalletProviderKey } from '@dynamic-labs-sdk/metamask';\n\n/**\n * Returns the wallet provider key of the MetaMask browser extension announced\n * for EVM, or `undefined` when none is announced. Pass the returned key to\n * `connectWithWalletProvider` to route through the announced provider; fall\n * back to `connectWithMetaMaskUriEvm` when `undefined`.\n *\n * @notInstrumented\n */\nexport const getMetaMaskEvmExtensionWalletProviderKey = (\n client = getDefaultClient()\n): string | undefined =>\n getMetaMaskExtensionWalletProviderKey({ chain: 'EVM' }, client);\n","import { assertPackageVersion } from '@dynamic-labs-sdk/assert-package-version';\n\nimport {\n name as packageName,\n version as packageVersion,\n} from '../../package.json';\nassertPackageVersion(packageName, packageVersion);\n\nexport { connectAndVerifyWithMetaMaskUriEvm } from '../metamask/connectAndVerifyWithMetaMaskUriEvm';\nexport { connectWithMetaMaskUriEvm } from '../metamask/connectWithMetaMaskUriEvm';\nexport type { ConnectWithMetaMaskUriEvmParams } from '../metamask/connectWithMetaMaskUriEvm/connectWithMetaMaskUriEvm';\nexport { getMetaMaskEvmExtensionWalletProviderKey } from '../metamask/getMetaMaskEvmExtensionWalletProviderKey';\nexport { MetaMaskDisplayUriMissingError } from '@dynamic-labs-sdk/metamask';\n"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
- import { n as version, t as name } from "./package-DjqTHfEa.native.esm.js";
2
- import { o as registerEvmNetworkProviderBuilder } from "./evmTransferAmount-BQDSXSva.native.esm.js";
3
- import "./createWalletClientForWalletAccount-CuakQYYA.native.esm.js";
4
- import { t as createWalletProviderFromEIP1193Provider } from "./createWalletProviderFromEIP1193Provider-B8doAYSi.native.esm.js";
1
+ import { n as version, t as name } from "./package-x2e-NQ78.native.esm.js";
2
+ import { o as registerEvmNetworkProviderBuilder } from "./evmTransferAmount-Bfn3RYq7.native.esm.js";
3
+ import "./createWalletClientForWalletAccount-BNb9shKs.native.esm.js";
4
+ import { t as createWalletProviderFromEIP1193Provider } from "./createWalletProviderFromEIP1193Provider-DZ0ciUd0.native.esm.js";
5
5
  import { assertPackageVersion } from "@dynamic-labs-sdk/assert-package-version";
6
6
  import { getDefaultClient, getNetworksData, verifyWalletAccount } from "@dynamic-labs-sdk/client";
7
7
  import { DYNAMIC_ICONIC_SPRITE_URL, assertNonEmptyArray, createRuntimeServiceAccessKey, getAppMetadata, getCore, getNativeLinkScheme } from "@dynamic-labs-sdk/client/core";
@@ -18,13 +18,13 @@ import { createEVMClient } from "@metamask/connect-evm";
18
18
  * map required by third-party SDKs such as MetaMask or Base Account.
19
19
  *
20
20
  * @param client - The Dynamic client whose project settings drive the result.
21
- * @not-instrumented
21
+ * @notInstrumented
22
22
  */
23
23
  const getEvmNetworksData = (client) => getNetworksData(client).filter((network) => network.chain === "EVM");
24
24
 
25
25
  //#endregion
26
26
  //#region src/metamask/utils/getSupportedNetworks/getSupportedNetworks.ts
27
- /** @not-instrumented */
27
+ /** @notInstrumented */
28
28
  const getSupportedNetworks = (client) => {
29
29
  const evmNetworks = getEvmNetworksData(client).sort((a, b) => {
30
30
  if (a.networkId === "1") return -1;
@@ -50,7 +50,7 @@ const getSupportedNetworks = (client) => {
50
50
  * cannot be lost to a subscription race. Dapp metadata is sourced from the
51
51
  * client's `getAppMetadata`. Browser-only.
52
52
  *
53
- * @not-instrumented
53
+ * @notInstrumented
54
54
  */
55
55
  const createMetaMaskEvmController = async (client) => {
56
56
  const supportedNetworks = getSupportedNetworks(client);
@@ -147,7 +147,7 @@ const RUNTIME_SERVICE_KEY = "metaMaskEvmController";
147
147
  * `display_uri` cache and listener registry per Dynamic client, which
148
148
  * the SDK itself does not expose.
149
149
  *
150
- * @not-instrumented
150
+ * @notInstrumented
151
151
  */
152
152
  const getOrCreateMetaMaskEvmController = createRuntimeServiceAccessKey(RUNTIME_SERVICE_KEY, (client) => createMetaMaskEvmController(client));
153
153
 
@@ -169,7 +169,7 @@ const NOOP_UNSUBSCRIBE = () => void 0;
169
169
  * caller can clean it up later (for example, when the facade's
170
170
  * `removeAllListeners` is invoked).
171
171
  *
172
- * @not-instrumented
172
+ * @notInstrumented
173
173
  */
174
174
  const subscribeMetaMaskEvmFacadeListener = ({ client, pending, provider }) => {
175
175
  if (pending.event === "accountsChanged") return provider.on("accountsChanged", (addresses) => pending.listener([...addresses]));
@@ -192,7 +192,7 @@ const METAMASK_ICON = `${DYNAMIC_ICONIC_SPRITE_URL}#metamask`;
192
192
  * wallet picker by `getAvailableWalletProvidersData` — mirroring how
193
193
  * WalletConnect URI sessions register a signing-only provider.
194
194
  *
195
- * @not-instrumented
195
+ * @notInstrumented
196
196
  */
197
197
  const createMetaMaskEvmWalletProvider = async (client) => {
198
198
  const controller = await getOrCreateMetaMaskEvmController(client);
@@ -245,7 +245,7 @@ const createMetaMaskEvmWalletProvider = async (client) => {
245
245
  * the Dynamic client as a verified credential (not as an unverified
246
246
  * account).
247
247
  *
248
- * @not-instrumented
248
+ * @notInstrumented
249
249
  */
250
250
  const connectAndVerifyWithMetaMaskUriEvm = async (client = getDefaultClient()) => {
251
251
  registerEvmNetworkProviderBuilder(client);
@@ -277,7 +277,7 @@ const connectAndVerifyWithMetaMaskUriEvm = async (client = getDefaultClient()) =
277
277
  * through for the best UX. The resulting wallet provider registers for signing
278
278
  * only and is never surfaced in the wallet picker.
279
279
  *
280
- * @not-instrumented
280
+ * @notInstrumented
281
281
  */
282
282
  const connectWithMetaMaskUriEvm = ({ addToDynamicWalletAccounts = true } = {}, client = getDefaultClient()) => {
283
283
  registerEvmNetworkProviderBuilder(client);
@@ -297,7 +297,7 @@ const connectWithMetaMaskUriEvm = ({ addToDynamicWalletAccounts = true } = {}, c
297
297
  * `connectWithWalletProvider` to route through the announced provider; fall
298
298
  * back to `connectWithMetaMaskUriEvm` when `undefined`.
299
299
  *
300
- * @not-instrumented
300
+ * @notInstrumented
301
301
  */
302
302
  const getMetaMaskEvmExtensionWalletProviderKey = (client = getDefaultClient()) => getMetaMaskExtensionWalletProviderKey({ chain: "EVM" }, client);
303
303