@dynamic-labs-sdk/solana 1.4.0 → 1.6.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 (76) hide show
  1. package/dist/addSolanaWalletStandardExtension-3jMAB0Wd.esm.js +43 -0
  2. package/dist/addSolanaWalletStandardExtension-3jMAB0Wd.esm.js.map +1 -0
  3. package/dist/addSolanaWalletStandardExtension-B2JU5JBv.cjs +49 -0
  4. package/dist/addSolanaWalletStandardExtension-B2JU5JBv.cjs.map +1 -0
  5. package/dist/{addWaasSolanaExtension-pcTae1sJ.esm.js → addWaasSolanaExtension-CcyhYZPX.esm.js} +2 -2
  6. package/dist/{addWaasSolanaExtension-pcTae1sJ.esm.js.map → addWaasSolanaExtension-CcyhYZPX.esm.js.map} +1 -1
  7. package/dist/{addWaasSolanaExtension-CT_5glLu.cjs → addWaasSolanaExtension-DnDq18O6.cjs} +2 -2
  8. package/dist/{addWaasSolanaExtension-CT_5glLu.cjs.map → addWaasSolanaExtension-DnDq18O6.cjs.map} +1 -1
  9. package/dist/{addSolanaWalletStandardExtension-DF1E9p6Q.esm.js → createWalletProviderFromSolanaStandardWallet-BRoXRH5c.esm.js} +5 -43
  10. package/dist/createWalletProviderFromSolanaStandardWallet-BRoXRH5c.esm.js.map +1 -0
  11. package/dist/{addSolanaWalletStandardExtension-CjCWC3H8.cjs → createWalletProviderFromSolanaStandardWallet-C2jYF8pe.cjs} +11 -43
  12. package/dist/createWalletProviderFromSolanaStandardWallet-C2jYF8pe.cjs.map +1 -0
  13. package/dist/exports/metamask.d.ts +6 -0
  14. package/dist/exports/metamask.d.ts.map +1 -0
  15. package/dist/index.cjs +4 -3
  16. package/dist/index.cjs.map +1 -1
  17. package/dist/index.esm.js +4 -3
  18. package/dist/index.esm.js.map +1 -1
  19. package/dist/metamask/connectAndVerifyWithMetaMaskUriSolana/connectAndVerifyWithMetaMaskUriSolana.d.ts +20 -0
  20. package/dist/metamask/connectAndVerifyWithMetaMaskUriSolana/connectAndVerifyWithMetaMaskUriSolana.d.ts.map +1 -0
  21. package/dist/metamask/connectAndVerifyWithMetaMaskUriSolana/index.d.ts +2 -0
  22. package/dist/metamask/connectAndVerifyWithMetaMaskUriSolana/index.d.ts.map +1 -0
  23. package/dist/metamask/connectWithMetaMaskUriSolana/connectWithMetaMaskUriSolana.d.ts +16 -0
  24. package/dist/metamask/connectWithMetaMaskUriSolana/connectWithMetaMaskUriSolana.d.ts.map +1 -0
  25. package/dist/metamask/connectWithMetaMaskUriSolana/index.d.ts +3 -0
  26. package/dist/metamask/connectWithMetaMaskUriSolana/index.d.ts.map +1 -0
  27. package/dist/metamask/createMetaMaskSolanaWalletProvider/createMetaMaskSolanaWalletProvider.d.ts +16 -0
  28. package/dist/metamask/createMetaMaskSolanaWalletProvider/createMetaMaskSolanaWalletProvider.d.ts.map +1 -0
  29. package/dist/metamask/createMetaMaskSolanaWalletProvider/index.d.ts +2 -0
  30. package/dist/metamask/createMetaMaskSolanaWalletProvider/index.d.ts.map +1 -0
  31. package/dist/metamask/getMetaMaskSolanaExtensionWalletProviderKey/getMetaMaskSolanaExtensionWalletProviderKey.d.ts +11 -0
  32. package/dist/metamask/getMetaMaskSolanaExtensionWalletProviderKey/getMetaMaskSolanaExtensionWalletProviderKey.d.ts.map +1 -0
  33. package/dist/metamask/getMetaMaskSolanaExtensionWalletProviderKey/index.d.ts +2 -0
  34. package/dist/metamask/getMetaMaskSolanaExtensionWalletProviderKey/index.d.ts.map +1 -0
  35. package/dist/metamask/metamask.types.d.ts +14 -0
  36. package/dist/metamask/metamask.types.d.ts.map +1 -0
  37. package/dist/metamask/utils/createMetaMaskSolanaController/createMetaMaskSolanaController.d.ts +17 -0
  38. package/dist/metamask/utils/createMetaMaskSolanaController/createMetaMaskSolanaController.d.ts.map +1 -0
  39. package/dist/metamask/utils/createMetaMaskSolanaController/index.d.ts +2 -0
  40. package/dist/metamask/utils/createMetaMaskSolanaController/index.d.ts.map +1 -0
  41. package/dist/metamask/utils/getOrCreateMetaMaskSolanaController/getOrCreateMetaMaskSolanaController.d.ts +20 -0
  42. package/dist/metamask/utils/getOrCreateMetaMaskSolanaController/getOrCreateMetaMaskSolanaController.d.ts.map +1 -0
  43. package/dist/metamask/utils/getOrCreateMetaMaskSolanaController/index.d.ts +2 -0
  44. package/dist/metamask/utils/getOrCreateMetaMaskSolanaController/index.d.ts.map +1 -0
  45. package/dist/metamask/utils/getSolanaNetworkFromCluster/getSolanaNetworkFromCluster.d.ts +18 -0
  46. package/dist/metamask/utils/getSolanaNetworkFromCluster/getSolanaNetworkFromCluster.d.ts.map +1 -0
  47. package/dist/metamask/utils/getSolanaNetworkFromCluster/index.d.ts +3 -0
  48. package/dist/metamask/utils/getSolanaNetworkFromCluster/index.d.ts.map +1 -0
  49. package/dist/metamask/utils/getSupportedNetworks/getSupportedNetworks.d.ts +16 -0
  50. package/dist/metamask/utils/getSupportedNetworks/getSupportedNetworks.d.ts.map +1 -0
  51. package/dist/metamask/utils/getSupportedNetworks/index.d.ts +2 -0
  52. package/dist/metamask/utils/getSupportedNetworks/index.d.ts.map +1 -0
  53. package/dist/metamask.cjs +258 -0
  54. package/dist/metamask.cjs.map +1 -0
  55. package/dist/metamask.esm.js +249 -0
  56. package/dist/metamask.esm.js.map +1 -0
  57. package/dist/{solanaTransferAmount-o7WCDn3_.esm.js → solanaTransferAmount-5kShqIK5.esm.js} +5 -3
  58. package/dist/{solanaTransferAmount-o7WCDn3_.esm.js.map → solanaTransferAmount-5kShqIK5.esm.js.map} +1 -1
  59. package/dist/{solanaTransferAmount-EDWQa9x1.cjs → solanaTransferAmount-Cxww7vl9.cjs} +5 -3
  60. package/dist/{solanaTransferAmount-EDWQa9x1.cjs.map → solanaTransferAmount-Cxww7vl9.cjs.map} +1 -1
  61. package/dist/tsconfig.lib.tsbuildinfo +1 -1
  62. package/dist/utils/solanaExecuteSwapTransaction/solanaExecuteSwapTransaction.d.ts +2 -1
  63. package/dist/utils/solanaExecuteSwapTransaction/solanaExecuteSwapTransaction.d.ts.map +1 -1
  64. package/dist/waas.cjs +2 -2
  65. package/dist/waas.esm.js +2 -2
  66. package/dist/walletConnect.cjs +1 -1
  67. package/dist/walletConnect.esm.js +1 -1
  68. package/dist/walletStandard/utils/createWalletProviderFromSolanaStandardWallet/createWalletProviderFromSolanaStandardWallet.d.ts +10 -1
  69. package/dist/walletStandard/utils/createWalletProviderFromSolanaStandardWallet/createWalletProviderFromSolanaStandardWallet.d.ts.map +1 -1
  70. package/dist/walletStandard.cjs +3 -2
  71. package/dist/walletStandard.cjs.map +1 -1
  72. package/dist/walletStandard.esm.js +3 -2
  73. package/dist/walletStandard.esm.js.map +1 -1
  74. package/package.json +15 -8
  75. package/dist/addSolanaWalletStandardExtension-CjCWC3H8.cjs.map +0 -1
  76. package/dist/addSolanaWalletStandardExtension-DF1E9p6Q.esm.js.map +0 -1
@@ -0,0 +1,14 @@
1
+ import type { MetaMaskController } from '@dynamic-labs-sdk/metamask';
2
+ import type { SolanaClient } from '@metamask/connect-solana';
3
+ /**
4
+ * Per-Dynamic-client Solana-flavoured `MetaMaskController`. Extends the
5
+ * chain-agnostic surface with the typed `@metamask/connect-solana` SDK
6
+ * handle so the Wallet Standard provider builder can reach the paired
7
+ * wallet directly for signing. Returned by `createMetaMaskSolanaController`
8
+ * and cached per Dynamic client by `getOrCreateMetaMaskSolanaController`.
9
+ */
10
+ export type MetaMaskSolanaController = MetaMaskController & {
11
+ /** The underlying `@metamask/connect-solana` SDK instance. */
12
+ sdk: SolanaClient;
13
+ };
14
+ //# sourceMappingURL=metamask.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metamask.types.d.ts","sourceRoot":"","sources":["../../src/metamask/metamask.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAE7D;;;;;;GAMG;AACH,MAAM,MAAM,wBAAwB,GAAG,kBAAkB,GAAG;IAC1D,8DAA8D;IAC9D,GAAG,EAAE,YAAY,CAAC;CACnB,CAAC"}
@@ -0,0 +1,17 @@
1
+ import type { DynamicClient } from '@dynamic-labs-sdk/client';
2
+ import type { MetaMaskSolanaController } from '../../metamask.types';
3
+ /**
4
+ * Builds a fully-initialised `MetaMaskSolanaController` for the given Dynamic
5
+ * client. Drives the `@metamask/connect-solana` SDK through its Wallet
6
+ * Standard surface so consumers render their own QR / deep-link UI, and
7
+ * subscribes to the SDK core's `display_uri` event at construction time so
8
+ * the first URI emission cannot be lost to a subscription race. The wallet
9
+ * is created with `skipAutoRegister` so this URI-pairing client does not
10
+ * register itself into the global Wallet Standard registry — an announced
11
+ * MetaMask extension is discovered independently. Dapp metadata is sourced
12
+ * from the client's `getAppMetadata`. Browser-only.
13
+ *
14
+ * @not-instrumented
15
+ */
16
+ export declare const createMetaMaskSolanaController: (client: DynamicClient) => Promise<MetaMaskSolanaController>;
17
+ //# sourceMappingURL=createMetaMaskSolanaController.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createMetaMaskSolanaController.d.ts","sourceRoot":"","sources":["../../../../src/metamask/utils/createMetaMaskSolanaController/createMetaMaskSolanaController.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAW9D,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAGrE;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,8BAA8B,WACjC,aAAa,KACpB,OAAO,CAAC,wBAAwB,CA+GlC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { createMetaMaskSolanaController } from './createMetaMaskSolanaController';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/metamask/utils/createMetaMaskSolanaController/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,8BAA8B,EAAE,MAAM,kCAAkC,CAAC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Per-`DynamicClient` accessor for the lazily-constructed MetaMask Solana
3
+ * controller. Wraps `createMetaMaskSolanaController` with the standard
4
+ * `runtimeServices` cache so every caller — the Wallet Standard
5
+ * wallet-provider builder, the `display_uri` subscription helper, and the
6
+ * `connectWithMetaMaskUriSolana` URI-returning helper — shares the same
7
+ * controller (and therefore the same SDK instance, display-URI cache, and
8
+ * listener registry) per Dynamic client.
9
+ *
10
+ * The cache is **per-Dynamic-client, not per-SDK-instance**:
11
+ * `@metamask/connect-solana`'s `createSolanaClient` builds on the shared
12
+ * MultichainCore singleton, so when multiple Dynamic clients coexist they
13
+ * end up sharing the same MetaMask session regardless of this cache. The
14
+ * wrapper exists to own the controller's `display_uri` cache and listener
15
+ * registry per Dynamic client, which the SDK itself does not expose.
16
+ *
17
+ * @not-instrumented
18
+ */
19
+ export declare const getOrCreateMetaMaskSolanaController: (client: import("@dynamic-labs-sdk/client").DynamicClient) => Promise<import("../../metamask.types").MetaMaskSolanaController>;
20
+ //# sourceMappingURL=getOrCreateMetaMaskSolanaController.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getOrCreateMetaMaskSolanaController.d.ts","sourceRoot":"","sources":["../../../../src/metamask/utils/getOrCreateMetaMaskSolanaController/getOrCreateMetaMaskSolanaController.ts"],"names":[],"mappings":"AAMA;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,mCAAmC,gIAG/C,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { getOrCreateMetaMaskSolanaController } from './getOrCreateMetaMaskSolanaController';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/metamask/utils/getOrCreateMetaMaskSolanaController/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mCAAmC,EAAE,MAAM,uCAAuC,CAAC"}
@@ -0,0 +1,18 @@
1
+ import type { SolanaNetwork } from '@metamask/connect-solana';
2
+ /** Parameters for {@link getSolanaNetworkFromCluster}. */
3
+ export type GetSolanaNetworkFromClusterParams = {
4
+ /** The Dynamic network `cluster` (e.g. `mainnet-beta`, `devnet`, `testnet`). */
5
+ cluster: string | undefined;
6
+ };
7
+ /**
8
+ * Maps a Dynamic network `cluster` (e.g. `mainnet-beta`, `devnet`,
9
+ * `testnet`) to the `mainnet | devnet | testnet` key shape expected by
10
+ * `@metamask/connect-solana`'s `createSolanaClient`. Returns `undefined` for
11
+ * clusters that do not correspond to one of MetaMask's supported Solana
12
+ * networks so callers can skip them. Used by `getSupportedNetworks` to build
13
+ * the SDK's `supportedNetworks` map.
14
+ *
15
+ * @not-instrumented
16
+ */
17
+ export declare const getSolanaNetworkFromCluster: ({ cluster, }: GetSolanaNetworkFromClusterParams) => SolanaNetwork | undefined;
18
+ //# sourceMappingURL=getSolanaNetworkFromCluster.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getSolanaNetworkFromCluster.d.ts","sourceRoot":"","sources":["../../../../src/metamask/utils/getSolanaNetworkFromCluster/getSolanaNetworkFromCluster.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAE9D,0DAA0D;AAC1D,MAAM,MAAM,iCAAiC,GAAG;IAC9C,gFAAgF;IAChF,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;CAC7B,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,2BAA2B,iBAErC,iCAAiC,KAAG,aAAa,GAAG,SAkBtD,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { getSolanaNetworkFromCluster } from './getSolanaNetworkFromCluster';
2
+ export type { GetSolanaNetworkFromClusterParams } from './getSolanaNetworkFromCluster';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/metamask/utils/getSolanaNetworkFromCluster/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAC5E,YAAY,EAAE,iCAAiC,EAAE,MAAM,+BAA+B,CAAC"}
@@ -0,0 +1,16 @@
1
+ import type { DynamicClient } from '@dynamic-labs-sdk/client';
2
+ import type { SolanaNetwork } from '@metamask/connect-solana';
3
+ type MetaMaskSupportedNetworks = Partial<Record<SolanaNetwork, string>>;
4
+ /**
5
+ * Builds the `supportedNetworks` map required by
6
+ * `@metamask/connect-solana`'s `createSolanaClient`, keyed by the SDK's
7
+ * `mainnet | devnet | testnet` network names and valued with the first
8
+ * configured RPC URL for each. Sources the configured SOL networks from the
9
+ * Dynamic client's project settings. Throws when no SOL network is
10
+ * configured, mirroring the EVM `getSupportedNetworks` contract.
11
+ *
12
+ * @not-instrumented
13
+ */
14
+ export declare const getSupportedNetworks: (client: DynamicClient) => MetaMaskSupportedNetworks;
15
+ export {};
16
+ //# sourceMappingURL=getSupportedNetworks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getSupportedNetworks.d.ts","sourceRoot":"","sources":["../../../../src/metamask/utils/getSupportedNetworks/getSupportedNetworks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAG9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAI9D,KAAK,yBAAyB,GAAG,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC;AAExE;;;;;;;;;GASG;AACH,eAAO,MAAM,oBAAoB,WACvB,aAAa,KACpB,yBA4BF,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { getSupportedNetworks } from './getSupportedNetworks';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/metamask/utils/getSupportedNetworks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,258 @@
1
+ const require_chunk = require('./chunk-CbDLau6x.cjs');
2
+ const require_solanaTransferAmount = require('./solanaTransferAmount-Cxww7vl9.cjs');
3
+ const require_createWalletProviderFromSolanaStandardWallet = require('./createWalletProviderFromSolanaStandardWallet-C2jYF8pe.cjs');
4
+ let _dynamic_labs_sdk_assert_package_version = require("@dynamic-labs-sdk/assert-package-version");
5
+ let _dynamic_labs_sdk_client_core = require("@dynamic-labs-sdk/client/core");
6
+ let _dynamic_labs_sdk_client = require("@dynamic-labs-sdk/client");
7
+ let _dynamic_labs_sdk_api_core = require("@dynamic-labs/sdk-api-core");
8
+ let _dynamic_labs_sdk_metamask = require("@dynamic-labs-sdk/metamask");
9
+ let _metamask_connect_solana = require("@metamask/connect-solana");
10
+
11
+ //#region src/metamask/utils/getSolanaNetworkFromCluster/getSolanaNetworkFromCluster.ts
12
+ /**
13
+ * Maps a Dynamic network `cluster` (e.g. `mainnet-beta`, `devnet`,
14
+ * `testnet`) to the `mainnet | devnet | testnet` key shape expected by
15
+ * `@metamask/connect-solana`'s `createSolanaClient`. Returns `undefined` for
16
+ * clusters that do not correspond to one of MetaMask's supported Solana
17
+ * networks so callers can skip them. Used by `getSupportedNetworks` to build
18
+ * the SDK's `supportedNetworks` map.
19
+ *
20
+ * @not-instrumented
21
+ */
22
+ const getSolanaNetworkFromCluster = ({ cluster }) => {
23
+ if (cluster === void 0) return;
24
+ if (cluster.includes("mainnet")) return "mainnet";
25
+ if (cluster.includes("devnet")) return "devnet";
26
+ if (cluster.includes("testnet")) return "testnet";
27
+ };
28
+
29
+ //#endregion
30
+ //#region src/metamask/utils/getSupportedNetworks/getSupportedNetworks.ts
31
+ /**
32
+ * Builds the `supportedNetworks` map required by
33
+ * `@metamask/connect-solana`'s `createSolanaClient`, keyed by the SDK's
34
+ * `mainnet | devnet | testnet` network names and valued with the first
35
+ * configured RPC URL for each. Sources the configured SOL networks from the
36
+ * Dynamic client's project settings. Throws when no SOL network is
37
+ * configured, mirroring the EVM `getSupportedNetworks` contract.
38
+ *
39
+ * @not-instrumented
40
+ */
41
+ const getSupportedNetworks = (client) => {
42
+ const solanaNetworks = (0, _dynamic_labs_sdk_client.getNetworksData)(client).filter((network) => network.chain === "SOL");
43
+ (0, _dynamic_labs_sdk_client_core.assertNonEmptyArray)(solanaNetworks, "No SOL networks have been configured. Make sure to add at least one Solana network to your project settings in the Dynamic Dashboard.");
44
+ const supportedNetworks = {};
45
+ for (const network of solanaNetworks) {
46
+ const solanaNetwork = getSolanaNetworkFromCluster({ cluster: network.cluster });
47
+ if (solanaNetwork !== void 0 && supportedNetworks[solanaNetwork] === void 0) supportedNetworks[solanaNetwork] = network.rpcUrls.http[0];
48
+ }
49
+ return supportedNetworks;
50
+ };
51
+
52
+ //#endregion
53
+ //#region src/metamask/utils/createMetaMaskSolanaController/createMetaMaskSolanaController.ts
54
+ /**
55
+ * Builds a fully-initialised `MetaMaskSolanaController` for the given Dynamic
56
+ * client. Drives the `@metamask/connect-solana` SDK through its Wallet
57
+ * Standard surface so consumers render their own QR / deep-link UI, and
58
+ * subscribes to the SDK core's `display_uri` event at construction time so
59
+ * the first URI emission cannot be lost to a subscription race. The wallet
60
+ * is created with `skipAutoRegister` so this URI-pairing client does not
61
+ * register itself into the global Wallet Standard registry — an announced
62
+ * MetaMask extension is discovered independently. Dapp metadata is sourced
63
+ * from the client's `getAppMetadata`. Browser-only.
64
+ *
65
+ * @not-instrumented
66
+ */
67
+ const createMetaMaskSolanaController = async (client) => {
68
+ const supportedNetworks = getSupportedNetworks(client);
69
+ const { appName, appLogoUrl, appUniversalLink, appNativeLink } = (0, _dynamic_labs_sdk_client_core.getAppMetadata)(client);
70
+ await (0, _dynamic_labs_sdk_metamask.clearMetaMaskSessionStorage)();
71
+ const listeners = /* @__PURE__ */ new Set();
72
+ let latestDisplayUri;
73
+ const sdk = await (0, _metamask_connect_solana.createSolanaClient)({
74
+ api: { supportedNetworks },
75
+ dapp: {
76
+ iconUrl: appLogoUrl,
77
+ name: appName,
78
+ nativeScheme: (0, _dynamic_labs_sdk_client_core.getNativeLinkScheme)({ nativeLink: appNativeLink }),
79
+ url: appUniversalLink ?? ""
80
+ },
81
+ debug: false,
82
+ skipAutoRegister: true
83
+ });
84
+ sdk.core.on("display_uri", (uri) => {
85
+ latestDisplayUri = uri;
86
+ for (const listener of listeners) listener(uri);
87
+ });
88
+ sdk.core.on("stateChanged", (status) => {
89
+ if (status === "connected" || status === "disconnected") latestDisplayUri = void 0;
90
+ });
91
+ latestDisplayUri = void 0;
92
+ const onDisplayUri = (listener) => {
93
+ listeners.add(listener);
94
+ if (latestDisplayUri !== void 0) listener(latestDisplayUri);
95
+ return () => {
96
+ listeners.delete(listener);
97
+ };
98
+ };
99
+ let inFlightConnect = null;
100
+ const connect = () => {
101
+ if (inFlightConnect) return inFlightConnect;
102
+ inFlightConnect = (async () => {
103
+ try {
104
+ if (sdk.core.status === "connecting") try {
105
+ await sdk.disconnect();
106
+ } catch (error) {
107
+ (0, _dynamic_labs_sdk_client_core.getCore)(client).logger.debug("[metamask] pre-connect disconnect rejected (expected when aborting a pairing the wallet never accepted)", error);
108
+ }
109
+ await require_createWalletProviderFromSolanaStandardWallet.getFeaturesForSolanaStandardWallet(sdk.getWallet())["standard:connect"].connect();
110
+ } finally {
111
+ inFlightConnect = null;
112
+ }
113
+ })();
114
+ return inFlightConnect;
115
+ };
116
+ return {
117
+ clearCachedDisplayUri: () => {
118
+ latestDisplayUri = void 0;
119
+ },
120
+ connect,
121
+ getLatestDisplayUri: () => latestDisplayUri,
122
+ onDisplayUri,
123
+ sdk
124
+ };
125
+ };
126
+
127
+ //#endregion
128
+ //#region src/metamask/utils/getOrCreateMetaMaskSolanaController/getOrCreateMetaMaskSolanaController.ts
129
+ const RUNTIME_SERVICE_KEY = "metaMaskSolanaController";
130
+ /**
131
+ * Per-`DynamicClient` accessor for the lazily-constructed MetaMask Solana
132
+ * controller. Wraps `createMetaMaskSolanaController` with the standard
133
+ * `runtimeServices` cache so every caller — the Wallet Standard
134
+ * wallet-provider builder, the `display_uri` subscription helper, and the
135
+ * `connectWithMetaMaskUriSolana` URI-returning helper — shares the same
136
+ * controller (and therefore the same SDK instance, display-URI cache, and
137
+ * listener registry) per Dynamic client.
138
+ *
139
+ * The cache is **per-Dynamic-client, not per-SDK-instance**:
140
+ * `@metamask/connect-solana`'s `createSolanaClient` builds on the shared
141
+ * MultichainCore singleton, so when multiple Dynamic clients coexist they
142
+ * end up sharing the same MetaMask session regardless of this cache. The
143
+ * wrapper exists to own the controller's `display_uri` cache and listener
144
+ * registry per Dynamic client, which the SDK itself does not expose.
145
+ *
146
+ * @not-instrumented
147
+ */
148
+ const getOrCreateMetaMaskSolanaController = (0, _dynamic_labs_sdk_client_core.createRuntimeServiceAccessKey)(RUNTIME_SERVICE_KEY, (client) => createMetaMaskSolanaController(client));
149
+
150
+ //#endregion
151
+ //#region src/metamask/createMetaMaskSolanaWalletProvider/createMetaMaskSolanaWalletProvider.ts
152
+ /**
153
+ * Builds the `SolanaWalletProvider` registered AFTER a successful MetaMask
154
+ * SDK URI pairing. Wraps the paired Wallet Standard wallet exposed by
155
+ * `@metamask/connect-solana` behind the Dynamic Solana provider facade and
156
+ * classifies it as `QrCode` so its key does not collide with an announced
157
+ * MetaMask browser-extension provider for the same wallet name. Drops
158
+ * `connect` so the provider is filtered out of the wallet picker by
159
+ * `getAvailableWalletProvidersData` — mirroring how WalletConnect URI
160
+ * sessions register a signing-only provider.
161
+ *
162
+ * @not-instrumented
163
+ */
164
+ const createMetaMaskSolanaWalletProvider = async (client) => {
165
+ const walletStandardWallet = (await getOrCreateMetaMaskSolanaController(client)).sdk.getWallet();
166
+ if (walletStandardWallet.accounts.length === 0) throw new _dynamic_labs_sdk_metamask.MetaMaskWalletNotConnectedError();
167
+ return {
168
+ ...require_createWalletProviderFromSolanaStandardWallet.createWalletProviderFromSolanaStandardWallet({
169
+ dynamicClient: client,
170
+ walletProviderType: _dynamic_labs_sdk_api_core.WalletProviderEnum.QrCode,
171
+ walletStandardWallet
172
+ }),
173
+ connect: void 0
174
+ };
175
+ };
176
+
177
+ //#endregion
178
+ //#region src/metamask/connectWithMetaMaskUriSolana/connectWithMetaMaskUriSolana.ts
179
+ /**
180
+ * Drives a MetaMask SDK URI pairing for Solana and returns `{ approval, uri }`
181
+ * so consumers can render the QR / hand the URI to a deeplink. The resulting
182
+ * wallet provider registers for signing only and is never surfaced in the
183
+ * wallet picker. When the MetaMask extension is announced via Wallet Standard,
184
+ * prefer routing through `getMetaMaskSolanaExtensionWalletProviderKey` instead.
185
+ *
186
+ * @not-instrumented
187
+ */
188
+ const connectWithMetaMaskUriSolana = ({ addToDynamicWalletAccounts = true } = {}, client = (0, _dynamic_labs_sdk_client.getDefaultClient)()) => {
189
+ require_solanaTransferAmount.registerSolanaNetworkProviderBuilder(client);
190
+ return (0, _dynamic_labs_sdk_metamask.connectWithMetaMaskUri)({
191
+ addToDynamicWalletAccounts,
192
+ chain: "SOL",
193
+ getController: getOrCreateMetaMaskSolanaController,
194
+ walletProviderBuilder: createMetaMaskSolanaWalletProvider
195
+ }, client);
196
+ };
197
+
198
+ //#endregion
199
+ //#region src/metamask/connectAndVerifyWithMetaMaskUriSolana/connectAndVerifyWithMetaMaskUriSolana.ts
200
+ /**
201
+ * Drives a MetaMask SDK URI pairing for Solana and verifies ownership of the
202
+ * paired wallet account through message signing, returning `{ approval, uri }`
203
+ * so consumers can render the QR / hand the URI to a deeplink.
204
+ *
205
+ * Builds on `connectWithMetaMaskUriSolana` (rather than the chain-agnostic
206
+ * connector directly) so the Solana-specific wiring stays defined in one
207
+ * place, then wraps its `approval` to add the verification round-trip. The
208
+ * pairing is driven with `addToDynamicWalletAccounts: false` so the account
209
+ * lands as a verified credential instead of an unverified entry.
210
+ *
211
+ * The MetaMask SDK does not expose a single-round-trip authenticate
212
+ * primitive, so this drives two sequential interactions on the wallet side:
213
+ * the user first approves the pairing, then approves a sign-in message.
214
+ *
215
+ * @not-instrumented
216
+ */
217
+ const connectAndVerifyWithMetaMaskUriSolana = async (client = (0, _dynamic_labs_sdk_client.getDefaultClient)()) => {
218
+ const { approval, uri } = await connectWithMetaMaskUriSolana({ addToDynamicWalletAccounts: false }, client);
219
+ const verifiedApproval = async () => {
220
+ const { walletAccounts } = await approval();
221
+ const [walletAccount] = walletAccounts;
222
+ if (walletAccount) await (0, _dynamic_labs_sdk_client.verifyWalletAccount)({ walletAccount }, client);
223
+ return { walletAccounts };
224
+ };
225
+ return {
226
+ approval: verifiedApproval,
227
+ uri
228
+ };
229
+ };
230
+
231
+ //#endregion
232
+ //#region src/metamask/getMetaMaskSolanaExtensionWalletProviderKey/getMetaMaskSolanaExtensionWalletProviderKey.ts
233
+ /**
234
+ * Returns the wallet provider key of the MetaMask browser extension announced
235
+ * for Solana via Wallet Standard, or `undefined` when none is announced. Pass
236
+ * the returned key to `connectWithWalletProvider` to route through the
237
+ * announced provider; fall back to `connectWithMetaMaskUriSolana` when
238
+ * `undefined`.
239
+ *
240
+ * @not-instrumented
241
+ */
242
+ const getMetaMaskSolanaExtensionWalletProviderKey = (client = (0, _dynamic_labs_sdk_client.getDefaultClient)()) => (0, _dynamic_labs_sdk_metamask.getMetaMaskExtensionWalletProviderKey)({ chain: "SOL" }, client);
243
+
244
+ //#endregion
245
+ //#region src/exports/metamask.ts
246
+ (0, _dynamic_labs_sdk_assert_package_version.assertPackageVersion)(require_solanaTransferAmount.name, require_solanaTransferAmount.version);
247
+
248
+ //#endregion
249
+ Object.defineProperty(exports, 'MetaMaskDisplayUriMissingError', {
250
+ enumerable: true,
251
+ get: function () {
252
+ return _dynamic_labs_sdk_metamask.MetaMaskDisplayUriMissingError;
253
+ }
254
+ });
255
+ exports.connectAndVerifyWithMetaMaskUriSolana = connectAndVerifyWithMetaMaskUriSolana;
256
+ exports.connectWithMetaMaskUriSolana = connectWithMetaMaskUriSolana;
257
+ exports.getMetaMaskSolanaExtensionWalletProviderKey = getMetaMaskSolanaExtensionWalletProviderKey;
258
+ //# sourceMappingURL=metamask.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metamask.cjs","names":["supportedNetworks: MetaMaskSupportedNetworks","latestDisplayUri: string | undefined","inFlightConnect: Promise<void> | null","getFeaturesForSolanaStandardWallet","MetaMaskWalletNotConnectedError","createWalletProviderFromSolanaStandardWallet","WalletProviderEnum","packageName","packageVersion"],"sources":["../src/metamask/utils/getSolanaNetworkFromCluster/getSolanaNetworkFromCluster.ts","../src/metamask/utils/getSupportedNetworks/getSupportedNetworks.ts","../src/metamask/utils/createMetaMaskSolanaController/createMetaMaskSolanaController.ts","../src/metamask/utils/getOrCreateMetaMaskSolanaController/getOrCreateMetaMaskSolanaController.ts","../src/metamask/createMetaMaskSolanaWalletProvider/createMetaMaskSolanaWalletProvider.ts","../src/metamask/connectWithMetaMaskUriSolana/connectWithMetaMaskUriSolana.ts","../src/metamask/connectAndVerifyWithMetaMaskUriSolana/connectAndVerifyWithMetaMaskUriSolana.ts","../src/metamask/getMetaMaskSolanaExtensionWalletProviderKey/getMetaMaskSolanaExtensionWalletProviderKey.ts","../src/exports/metamask.ts"],"sourcesContent":["import type { SolanaNetwork } from '@metamask/connect-solana';\n\n/** Parameters for {@link getSolanaNetworkFromCluster}. */\nexport type GetSolanaNetworkFromClusterParams = {\n /** The Dynamic network `cluster` (e.g. `mainnet-beta`, `devnet`, `testnet`). */\n cluster: string | undefined;\n};\n\n/**\n * Maps a Dynamic network `cluster` (e.g. `mainnet-beta`, `devnet`,\n * `testnet`) to the `mainnet | devnet | testnet` key shape expected by\n * `@metamask/connect-solana`'s `createSolanaClient`. Returns `undefined` for\n * clusters that do not correspond to one of MetaMask's supported Solana\n * networks so callers can skip them. Used by `getSupportedNetworks` to build\n * the SDK's `supportedNetworks` map.\n *\n * @not-instrumented\n */\nexport const getSolanaNetworkFromCluster = ({\n cluster,\n}: GetSolanaNetworkFromClusterParams): SolanaNetwork | undefined => {\n if (cluster === undefined) {\n return undefined;\n }\n\n if (cluster.includes('mainnet')) {\n return 'mainnet';\n }\n\n if (cluster.includes('devnet')) {\n return 'devnet';\n }\n\n if (cluster.includes('testnet')) {\n return 'testnet';\n }\n\n return undefined;\n};\n","import type { DynamicClient } from '@dynamic-labs-sdk/client';\nimport { getNetworksData } from '@dynamic-labs-sdk/client';\nimport { assertNonEmptyArray } from '@dynamic-labs-sdk/client/core';\nimport type { SolanaNetwork } from '@metamask/connect-solana';\n\nimport { getSolanaNetworkFromCluster } from '../getSolanaNetworkFromCluster';\n\ntype MetaMaskSupportedNetworks = Partial<Record<SolanaNetwork, string>>;\n\n/**\n * Builds the `supportedNetworks` map required by\n * `@metamask/connect-solana`'s `createSolanaClient`, keyed by the SDK's\n * `mainnet | devnet | testnet` network names and valued with the first\n * configured RPC URL for each. Sources the configured SOL networks from the\n * Dynamic client's project settings. Throws when no SOL network is\n * configured, mirroring the EVM `getSupportedNetworks` contract.\n *\n * @not-instrumented\n */\nexport const getSupportedNetworks = (\n client: DynamicClient\n): MetaMaskSupportedNetworks => {\n const solanaNetworks = getNetworksData(client).filter(\n (network) => network.chain === 'SOL'\n );\n\n assertNonEmptyArray(\n solanaNetworks,\n 'No SOL networks have been configured. Make sure to add at least one Solana network to your project settings in the Dynamic Dashboard.'\n );\n\n const supportedNetworks: MetaMaskSupportedNetworks = {};\n\n for (const network of solanaNetworks) {\n const solanaNetwork = getSolanaNetworkFromCluster({\n cluster: network.cluster,\n });\n\n // Skip clusters MetaMask does not recognise, and keep the first RPC URL\n // seen for a given network so earlier-configured networks take priority.\n if (\n solanaNetwork !== undefined &&\n supportedNetworks[solanaNetwork] === undefined\n ) {\n supportedNetworks[solanaNetwork] = network.rpcUrls.http[0];\n }\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 { createSolanaClient } from '@metamask/connect-solana';\n\nimport { getFeaturesForSolanaStandardWallet } from '../../../walletStandard/utils/getFeaturesForSolanaStandardWallet';\nimport type { MetaMaskSolanaController } from '../../metamask.types';\nimport { getSupportedNetworks } from '../getSupportedNetworks';\n\n/**\n * Builds a fully-initialised `MetaMaskSolanaController` for the given Dynamic\n * client. Drives the `@metamask/connect-solana` SDK through its Wallet\n * Standard surface so consumers render their own QR / deep-link UI, and\n * subscribes to the SDK core's `display_uri` event at construction time so\n * the first URI emission cannot be lost to a subscription race. The wallet\n * is created with `skipAutoRegister` so this URI-pairing client does not\n * register itself into the global Wallet Standard registry — an announced\n * MetaMask extension is discovered independently. Dapp metadata is sourced\n * from the client's `getAppMetadata`. Browser-only.\n *\n * @not-instrumented\n */\nexport const createMetaMaskSolanaController = async (\n client: DynamicClient\n): Promise<MetaMaskSolanaController> => {\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, page\n // reload, or abandoned pairing before the SDK initialises. The SDK's\n // auto-recovery path otherwise picks up a stale transport descriptor and\n // spends its (non-configurable) 10-second resume timeout on every\n // controller construction trying to revive a relay session that no longer\n // exists, surfacing as a long QR skeleton delay on every page reload that\n // follows an abandoned pairing.\n await clearMetaMaskSessionStorage();\n\n const listeners = new Set<DisplayUriListener>();\n let latestDisplayUri: string | undefined;\n\n const sdk = await createSolanaClient({\n api: { supportedNetworks },\n dapp: {\n iconUrl: appLogoUrl,\n name: appName,\n nativeScheme: getNativeLinkScheme({ nativeLink: appNativeLink }),\n url: appUniversalLink ?? '',\n },\n debug: false,\n skipAutoRegister: true,\n });\n\n sdk.core.on('display_uri', (uri) => {\n latestDisplayUri = uri;\n for (const listener of listeners) {\n listener(uri);\n }\n });\n\n // A terminal connection state means any cached URI is for a pairing that is\n // either complete or torn down, so it must not be replayed to late\n // subscribers.\n sdk.core.on('stateChanged', (status) => {\n if (status === 'connected' || status === 'disconnected') {\n latestDisplayUri = undefined;\n }\n });\n\n // Defensive cleanup: even though we cleared IndexedDB before constructing\n // the SDK, an in-flight `display_uri` emission could theoretically race the\n // storage delete on slow devices. Clearing the cache here guarantees late\n // subscribers cannot replay an URI that originated from any pairing attempt\n // prior to this 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 // 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 connect calls against each other.\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 instead\n // of waiting for the SDK's (non-configurable) 10-second resume\n // timeout.\n if (sdk.core.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 const features = getFeaturesForSolanaStandardWallet(sdk.getWallet());\n\n await features['standard:connect'].connect();\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 { createMetaMaskSolanaController } from '../createMetaMaskSolanaController';\n\nconst RUNTIME_SERVICE_KEY = 'metaMaskSolanaController';\n\n/**\n * Per-`DynamicClient` accessor for the lazily-constructed MetaMask Solana\n * controller. Wraps `createMetaMaskSolanaController` with the standard\n * `runtimeServices` cache so every caller — the Wallet Standard\n * wallet-provider builder, the `display_uri` subscription helper, and the\n * `connectWithMetaMaskUriSolana` 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 * The cache is **per-Dynamic-client, not per-SDK-instance**:\n * `@metamask/connect-solana`'s `createSolanaClient` builds on the shared\n * MultichainCore singleton, so when multiple Dynamic clients coexist they\n * end up sharing the same MetaMask session regardless of this cache. The\n * wrapper exists to own the controller's `display_uri` cache and listener\n * registry per Dynamic client, which the SDK itself does not expose.\n *\n * @not-instrumented\n */\nexport const getOrCreateMetaMaskSolanaController = createRuntimeServiceAccessKey(\n RUNTIME_SERVICE_KEY,\n (client) => createMetaMaskSolanaController(client)\n);\n","import type { DynamicClient } from '@dynamic-labs-sdk/client';\nimport { MetaMaskWalletNotConnectedError } from '@dynamic-labs-sdk/metamask';\nimport { WalletProviderEnum } from '@dynamic-labs/sdk-api-core';\n\nimport type { SolanaWalletProvider } from '../../SolanaWalletProvider.types';\nimport { createWalletProviderFromSolanaStandardWallet } from '../../walletStandard/utils/createWalletProviderFromSolanaStandardWallet';\nimport { getOrCreateMetaMaskSolanaController } from '../utils/getOrCreateMetaMaskSolanaController';\n\n/**\n * Builds the `SolanaWalletProvider` registered AFTER a successful MetaMask\n * SDK URI pairing. Wraps the paired Wallet Standard wallet exposed by\n * `@metamask/connect-solana` behind the Dynamic Solana provider facade and\n * classifies it as `QrCode` so its key does not collide with an announced\n * MetaMask browser-extension provider for the same wallet name. Drops\n * `connect` so the provider is filtered out of the wallet picker by\n * `getAvailableWalletProvidersData` — mirroring how WalletConnect URI\n * sessions register a signing-only provider.\n *\n * @not-instrumented\n */\nexport const createMetaMaskSolanaWalletProvider = async (\n client: DynamicClient\n): Promise<SolanaWalletProvider> => {\n const controller = await getOrCreateMetaMaskSolanaController(client);\n\n const walletStandardWallet = controller.sdk.getWallet();\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 empty wallet.\n if (walletStandardWallet.accounts.length === 0) {\n throw new MetaMaskWalletNotConnectedError();\n }\n\n const walletProvider = createWalletProviderFromSolanaStandardWallet({\n dynamicClient: client,\n walletProviderType: WalletProviderEnum.QrCode,\n walletStandardWallet,\n });\n\n return {\n ...walletProvider,\n connect: undefined,\n };\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 { registerSolanaNetworkProviderBuilder } from '../../registerSolanaNetworkProviderBuilder';\nimport { createMetaMaskSolanaWalletProvider } from '../createMetaMaskSolanaWalletProvider';\nimport { getOrCreateMetaMaskSolanaController } from '../utils/getOrCreateMetaMaskSolanaController';\n\nexport type ConnectWithMetaMaskUriSolanaParams = {\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 Solana and returns `{ approval, uri }`\n * so consumers can render the QR / hand the URI to a deeplink. The resulting\n * wallet provider registers for signing only and is never surfaced in the\n * wallet picker. When the MetaMask extension is announced via Wallet Standard,\n * prefer routing through `getMetaMaskSolanaExtensionWalletProviderKey` instead.\n *\n * @not-instrumented\n */\nexport const connectWithMetaMaskUriSolana = (\n { addToDynamicWalletAccounts = true }: ConnectWithMetaMaskUriSolanaParams = {},\n client = getDefaultClient()\n): Promise<WalletProviderUriConnectionResult> => {\n registerSolanaNetworkProviderBuilder(client);\n\n return connectWithMetaMaskUri(\n {\n addToDynamicWalletAccounts,\n chain: 'SOL',\n getController: getOrCreateMetaMaskSolanaController,\n walletProviderBuilder: createMetaMaskSolanaWalletProvider,\n },\n client\n );\n};\n","import {\n type WalletAccount,\n type WalletProviderUriConnectionResult,\n getDefaultClient,\n verifyWalletAccount,\n} from '@dynamic-labs-sdk/client';\n\nimport { connectWithMetaMaskUriSolana } from '../connectWithMetaMaskUriSolana';\n\n/**\n * Drives a MetaMask SDK URI pairing for Solana 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 * Builds on `connectWithMetaMaskUriSolana` (rather than the chain-agnostic\n * connector directly) so the Solana-specific wiring stays defined in one\n * place, then wraps its `approval` to add the verification round-trip. The\n * pairing is driven with `addToDynamicWalletAccounts: false` so the account\n * lands as a verified credential instead of an unverified entry.\n *\n * The MetaMask SDK does not expose a single-round-trip authenticate\n * primitive, so this drives two sequential interactions on the wallet side:\n * the user first approves the pairing, then approves a sign-in message.\n *\n * @not-instrumented\n */\nexport const connectAndVerifyWithMetaMaskUriSolana = async (\n client = getDefaultClient()\n): Promise<WalletProviderUriConnectionResult> => {\n const { approval, uri } = await connectWithMetaMaskUriSolana(\n { addToDynamicWalletAccounts: false },\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, mirroring how\n // the underlying connect helper 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 { getMetaMaskExtensionWalletProviderKey } from '@dynamic-labs-sdk/metamask';\n\n/**\n * Returns the wallet provider key of the MetaMask browser extension announced\n * for Solana via Wallet Standard, or `undefined` when none is announced. Pass\n * the returned key to `connectWithWalletProvider` to route through the\n * announced provider; fall back to `connectWithMetaMaskUriSolana` when\n * `undefined`.\n *\n * @not-instrumented\n */\nexport const getMetaMaskSolanaExtensionWalletProviderKey = (\n client = getDefaultClient()\n): string | undefined =>\n getMetaMaskExtensionWalletProviderKey({ chain: 'SOL' }, 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 { connectAndVerifyWithMetaMaskUriSolana } from '../metamask/connectAndVerifyWithMetaMaskUriSolana';\nexport { connectWithMetaMaskUriSolana } from '../metamask/connectWithMetaMaskUriSolana';\nexport type { ConnectWithMetaMaskUriSolanaParams } from '../metamask/connectWithMetaMaskUriSolana/connectWithMetaMaskUriSolana';\nexport { getMetaMaskSolanaExtensionWalletProviderKey } from '../metamask/getMetaMaskSolanaExtensionWalletProviderKey';\nexport { MetaMaskDisplayUriMissingError } from '@dynamic-labs-sdk/metamask';\n"],"mappings":"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"}