@metamask/connect-solana 0.7.0 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +15 -1
- package/LICENSE +18 -21
- package/dist/browser/es/connect-solana.mjs +6 -2
- package/dist/browser/es/connect-solana.mjs.map +1 -1
- package/dist/node/cjs/connect-solana.js +6 -2
- package/dist/node/cjs/connect-solana.js.map +1 -1
- package/dist/node/es/connect-solana.mjs +6 -2
- package/dist/node/es/connect-solana.mjs.map +1 -1
- package/dist/types/index.d.ts +3 -1
- package/package.json +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,18 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.8.0]
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- Add optional `analytics.integrationType` param to `createSolanaClient()` ([#260](https://github.com/MetaMask/connect-monorepo/pull/260))
|
|
15
|
+
|
|
16
|
+
## [0.7.1]
|
|
17
|
+
|
|
18
|
+
### Changed
|
|
19
|
+
|
|
20
|
+
- chore: align sub-package licenses with root ConsenSys 2022 license ([#241](https://github.com/MetaMask/connect-monorepo/pull/241))
|
|
21
|
+
|
|
10
22
|
## [0.7.0]
|
|
11
23
|
|
|
12
24
|
### Added
|
|
@@ -61,7 +73,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
61
73
|
|
|
62
74
|
- Initial release
|
|
63
75
|
|
|
64
|
-
[Unreleased]: https://github.com/MetaMask/connect-monorepo/compare/@metamask/connect-solana@0.
|
|
76
|
+
[Unreleased]: https://github.com/MetaMask/connect-monorepo/compare/@metamask/connect-solana@0.8.0...HEAD
|
|
77
|
+
[0.8.0]: https://github.com/MetaMask/connect-monorepo/compare/@metamask/connect-solana@0.7.1...@metamask/connect-solana@0.8.0
|
|
78
|
+
[0.7.1]: https://github.com/MetaMask/connect-monorepo/compare/@metamask/connect-solana@0.7.0...@metamask/connect-solana@0.7.1
|
|
65
79
|
[0.7.0]: https://github.com/MetaMask/connect-monorepo/compare/@metamask/connect-solana@0.6.0...@metamask/connect-solana@0.7.0
|
|
66
80
|
[0.6.0]: https://github.com/MetaMask/connect-monorepo/compare/@metamask/connect-solana@0.5.0...@metamask/connect-solana@0.6.0
|
|
67
81
|
[0.5.0]: https://github.com/MetaMask/connect-monorepo/compare/@metamask/connect-solana@0.4.0...@metamask/connect-solana@0.5.0
|
package/LICENSE
CHANGED
|
@@ -1,21 +1,18 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
-
SOFTWARE.
|
|
1
|
+
Copyright ConsenSys Software Inc. 2022. All rights reserved.
|
|
2
|
+
|
|
3
|
+
You acknowledge and agree that ConsenSys Software Inc. ("ConsenSys") (or ConsenSys's licensors) own all legal right, title and interest in and to the work, software, application, source code, documentation and any other documents in this repository (collectively, the "Program"), including any intellectual property rights which subsist in the Program (whether those rights happen to be registered or not, and wherever in the world those rights may exist), whether in source code or any other form.
|
|
4
|
+
|
|
5
|
+
Subject to the limited license below, you may not (and you may not permit anyone else to) distribute, publish, copy, modify, merge, combine with another program, create derivative works of, reverse engineer, decompile or otherwise attempt to extract the source code of, the Program or any part thereof, except that you may contribute to this repository.
|
|
6
|
+
|
|
7
|
+
You are granted a non-exclusive, non-transferable, non-sublicensable license to distribute, publish, copy, modify, merge, combine with another program or create derivative works of the Program (such resulting program, collectively, the "Resulting Program") solely for Non-Commercial Use as long as you:
|
|
8
|
+
1. give prominent notice ("Notice") with each copy of the Resulting Program that the Program is used in the Resulting Program and that the Program is the copyright of ConsenSys; and
|
|
9
|
+
2. subject the Resulting Program and any distribution, publication, copy, modification, merger therewith, combination with another program or derivative works thereof to the same Notice requirement and Non-Commercial Use restriction set forth herein.
|
|
10
|
+
|
|
11
|
+
"Non-Commercial Use" means each use as described in clauses (1)-(3) below, as reasonably determined by ConsenSys in its sole discretion:
|
|
12
|
+
1. personal use for research, personal study, private entertainment, hobby projects or amateur pursuits, in each case without any anticipated commercial application;
|
|
13
|
+
2. use by any charitable organization, educational institution, public research organization, public safety or health organization, environmental protection organization or government institution; or
|
|
14
|
+
3. the number of monthly active users of the Resulting Program across all versions thereof and platforms globally do not exceed 10,000 at any time.
|
|
15
|
+
|
|
16
|
+
You will not use any trade mark, service mark, trade name, logo of ConsenSys or any other company or organization in a way that is likely or intended to cause confusion about the owner or authorized user of such marks, names or logos.
|
|
17
|
+
|
|
18
|
+
If you have any questions, comments or interest in pursuing any other use cases, please reach out to us at metamask.license@consensys.net.
|
|
@@ -74,7 +74,7 @@ import {
|
|
|
74
74
|
} from "@metamask/solana-wallet-standard";
|
|
75
75
|
function createSolanaClient(options) {
|
|
76
76
|
return __async(this, null, function* () {
|
|
77
|
-
var _a, _b, _c;
|
|
77
|
+
var _a, _b, _c, _d;
|
|
78
78
|
const defaultNetworks = {
|
|
79
79
|
mainnet: "https://api.mainnet-beta.solana.com"
|
|
80
80
|
};
|
|
@@ -87,10 +87,14 @@ function createSolanaClient(options) {
|
|
|
87
87
|
api: {
|
|
88
88
|
supportedNetworks
|
|
89
89
|
},
|
|
90
|
+
analytics: {
|
|
91
|
+
// eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing
|
|
92
|
+
integrationType: ((_d = options.analytics) == null ? void 0 : _d.integrationType) || "direct"
|
|
93
|
+
},
|
|
90
94
|
versions: {
|
|
91
95
|
// typeof guard needed: Metro (React Native) bundles TS source directly,
|
|
92
96
|
// bypassing the tsup build that substitutes __PACKAGE_VERSION__.
|
|
93
|
-
"connect-solana": false ? "unknown" : "0.
|
|
97
|
+
"connect-solana": false ? "unknown" : "0.8.0"
|
|
94
98
|
}
|
|
95
99
|
});
|
|
96
100
|
const client = core.provider;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/infura.ts","../../../src/networks.ts","../../../src/connect.ts"],"sourcesContent":["import { getInfuraRpcUrls as getInfuraRpcUrlsMultichain } from '@metamask/connect-multichain';\nimport type { CaipChainId } from '@metamask/utils';\n\nimport { SOLANA_CAIP_IDS } from './networks';\nimport type { SolanaNetwork, SolanaSupportedNetworks } from './types';\n\n/**\n * Generates Infura RPC URLs for Solana networks keyed by Solana network name.\n *\n * The returned map is intended for `createSolanaClient({ api: { supportedNetworks } })`.\n *\n * @param options - The options for generating Solana Infura RPC URLs\n * @param options.infuraApiKey - The Infura API key\n * @param options.networks - Solana networks to include in the returned map\n * @returns A map of Solana network names to Infura RPC URLs\n */\nexport const getInfuraRpcUrls = ({\n infuraApiKey,\n networks,\n}: {\n infuraApiKey: string;\n networks: SolanaNetwork[];\n}): SolanaSupportedNetworks => {\n const caipChainIds = networks.map(\n (network) => SOLANA_CAIP_IDS[network] as CaipChainId,\n );\n const caipMap = getInfuraRpcUrlsMultichain({\n infuraApiKey,\n caipChainIds,\n });\n\n return networks.reduce<SolanaSupportedNetworks>((acc, network) => {\n const caipId = SOLANA_CAIP_IDS[network] as CaipChainId;\n const rpcUrl = caipMap[caipId];\n if (rpcUrl) {\n acc[network] = rpcUrl;\n }\n return acc;\n }, {});\n};\n","import type { SolanaNetwork, SolanaSupportedNetworks } from './types';\n\n/**\n * CAIP-2 chain IDs for Solana networks.\n * The reference is the first 32 characters of the Base58-encoded genesis hash.\n */\nexport const SOLANA_CAIP_IDS: Record<SolanaNetwork, string> = {\n mainnet: 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp',\n devnet: 'solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1',\n testnet: 'solana:4uhcVJyU9pJkvQyS88uRDiswHXSCkY3z',\n};\n\n/**\n * Converts a record of network names to RPC URLs into a record of CAIP IDs to RPC URLs.\n *\n * @param networks - A record of network names to RPC URLs\n * @returns A record of CAIP IDs to RPC URLs\n */\nexport function convertNetworksToCAIP(\n networks: SolanaSupportedNetworks,\n): Record<string, string> {\n return Object.entries(networks).reduce<Record<string, string>>(\n (acc, [network, rpcUrl]) => {\n const caipId = SOLANA_CAIP_IDS[network as SolanaNetwork];\n if (caipId && rpcUrl) {\n acc[caipId] = rpcUrl;\n }\n return acc;\n },\n {},\n );\n}\n","/* eslint-disable @typescript-eslint/naming-convention -- __PACKAGE_VERSION__ is an esbuild define convention */\nimport {\n createMultichainClient,\n type Scope,\n} from '@metamask/connect-multichain';\nimport {\n getWalletStandard,\n registerSolanaWalletStandard,\n} from '@metamask/solana-wallet-standard';\n\nimport { convertNetworksToCAIP, SOLANA_CAIP_IDS } from './networks';\nimport type {\n SolanaClient,\n SolanaConnectOptions,\n SolanaSupportedNetworks,\n} from './types';\n\n// Value substitued by tsup at build time\ndeclare const __PACKAGE_VERSION__: string | undefined;\n\n/**\n * Creates a new Solana client for connecting to MetaMask via wallet-standard.\n *\n * This function initializes the MultichainSDK and provides methods to get or register\n * a wallet-standard compatible wallet. The wallet handles session creation internally\n * when users connect through the Solana wallet adapter UI.\n *\n * @param options - Configuration options for the Solana client\n * @param options.dapp - Dapp identification and branding settings\n * @param options.api - Optional API configuration with supported networks\n * @param options.api.supportedNetworks - Record mapping network names (mainnet, devnet, testnet) to RPC URLs\n * @param options.debug - Enable debug logging\n * @param options.skipAutoRegister - Skip auto-registering the wallet during creation (defaults to false)\n * @returns A promise that resolves to the Solana client instance\n *\n * @example\n * ```typescript\n * import { createSolanaClient } from '@metamask/connect-solana';\n *\n * // Wallet is auto-registered and ready to use\n * const client = await createSolanaClient({\n * dapp: {\n * name: 'My Solana DApp',\n * url: 'https://mydapp.com',\n * },\n * api: {\n * supportedNetworks: {\n * mainnet: 'https://api.mainnet-beta.solana.com',\n * devnet: 'https://api.devnet.solana.com',\n * },\n * },\n * });\n *\n * // Get the wallet instance directly\n * const wallet = client.getWallet();\n * ```\n */\nexport async function createSolanaClient(\n options: SolanaConnectOptions,\n): Promise<SolanaClient> {\n const defaultNetworks: SolanaSupportedNetworks = {\n mainnet: 'https://api.mainnet-beta.solana.com',\n };\n\n const skipAutoRegister = options.skipAutoRegister ?? false;\n\n const supportedNetworks = convertNetworksToCAIP(\n options.api?.supportedNetworks ?? defaultNetworks,\n );\n\n const core = await createMultichainClient({\n dapp: options.dapp,\n api: {\n supportedNetworks,\n },\n versions: {\n // typeof guard needed: Metro (React Native) bundles TS source directly,\n // bypassing the tsup build that substitutes __PACKAGE_VERSION__.\n 'connect-solana':\n typeof __PACKAGE_VERSION__ === 'undefined'\n ? 'unknown'\n : __PACKAGE_VERSION__,\n },\n });\n\n const client = core.provider;\n\n const walletName = 'MetaMask Connect';\n\n if (!skipAutoRegister) {\n await registerSolanaWalletStandard({ client, walletName });\n }\n\n return {\n core,\n getWallet: () => getWalletStandard({ client, walletName }),\n registerWallet: async (): Promise<void> => {\n if (!skipAutoRegister) {\n return;\n }\n await registerSolanaWalletStandard({ client, walletName });\n },\n disconnect: async () =>\n await core.disconnect(Object.values(SOLANA_CAIP_IDS) as Scope[]),\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA,SAAS,oBAAoB,kCAAkC;;;ACMxD,IAAM,kBAAiD;AAAA,EAC5D,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,SAAS;AACX;AAQO,SAAS,sBACd,UACwB;AACxB,SAAO,OAAO,QAAQ,QAAQ,EAAE;AAAA,IAC9B,CAAC,KAAK,CAAC,SAAS,MAAM,MAAM;AAC1B,YAAM,SAAS,gBAAgB,OAAwB;AACvD,UAAI,UAAU,QAAQ;AACpB,YAAI,MAAM,IAAI;AAAA,MAChB;AACA,aAAO;AAAA,IACT;AAAA,IACA,CAAC;AAAA,EACH;AACF;;;ADfO,IAAM,mBAAmB,CAAC;AAAA,EAC/B;AAAA,EACA;AACF,MAG+B;AAC7B,QAAM,eAAe,SAAS;AAAA,IAC5B,CAAC,YAAY,gBAAgB,OAAO;AAAA,EACtC;AACA,QAAM,UAAU,2BAA2B;AAAA,IACzC;AAAA,IACA;AAAA,EACF,CAAC;AAED,SAAO,SAAS,OAAgC,CAAC,KAAK,YAAY;AAChE,UAAM,SAAS,gBAAgB,OAAO;AACtC,UAAM,SAAS,QAAQ,MAAM;AAC7B,QAAI,QAAQ;AACV,UAAI,OAAO,IAAI;AAAA,IACjB;AACA,WAAO;AAAA,EACT,GAAG,CAAC,CAAC;AACP;;;AEtCA;AAAA,EACE;AAAA,OAEK;AACP;AAAA,EACE;AAAA,EACA;AAAA,OACK;
|
|
1
|
+
{"version":3,"sources":["../../../src/infura.ts","../../../src/networks.ts","../../../src/connect.ts"],"sourcesContent":["import { getInfuraRpcUrls as getInfuraRpcUrlsMultichain } from '@metamask/connect-multichain';\nimport type { CaipChainId } from '@metamask/utils';\n\nimport { SOLANA_CAIP_IDS } from './networks';\nimport type { SolanaNetwork, SolanaSupportedNetworks } from './types';\n\n/**\n * Generates Infura RPC URLs for Solana networks keyed by Solana network name.\n *\n * The returned map is intended for `createSolanaClient({ api: { supportedNetworks } })`.\n *\n * @param options - The options for generating Solana Infura RPC URLs\n * @param options.infuraApiKey - The Infura API key\n * @param options.networks - Solana networks to include in the returned map\n * @returns A map of Solana network names to Infura RPC URLs\n */\nexport const getInfuraRpcUrls = ({\n infuraApiKey,\n networks,\n}: {\n infuraApiKey: string;\n networks: SolanaNetwork[];\n}): SolanaSupportedNetworks => {\n const caipChainIds = networks.map(\n (network) => SOLANA_CAIP_IDS[network] as CaipChainId,\n );\n const caipMap = getInfuraRpcUrlsMultichain({\n infuraApiKey,\n caipChainIds,\n });\n\n return networks.reduce<SolanaSupportedNetworks>((acc, network) => {\n const caipId = SOLANA_CAIP_IDS[network] as CaipChainId;\n const rpcUrl = caipMap[caipId];\n if (rpcUrl) {\n acc[network] = rpcUrl;\n }\n return acc;\n }, {});\n};\n","import type { SolanaNetwork, SolanaSupportedNetworks } from './types';\n\n/**\n * CAIP-2 chain IDs for Solana networks.\n * The reference is the first 32 characters of the Base58-encoded genesis hash.\n */\nexport const SOLANA_CAIP_IDS: Record<SolanaNetwork, string> = {\n mainnet: 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp',\n devnet: 'solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1',\n testnet: 'solana:4uhcVJyU9pJkvQyS88uRDiswHXSCkY3z',\n};\n\n/**\n * Converts a record of network names to RPC URLs into a record of CAIP IDs to RPC URLs.\n *\n * @param networks - A record of network names to RPC URLs\n * @returns A record of CAIP IDs to RPC URLs\n */\nexport function convertNetworksToCAIP(\n networks: SolanaSupportedNetworks,\n): Record<string, string> {\n return Object.entries(networks).reduce<Record<string, string>>(\n (acc, [network, rpcUrl]) => {\n const caipId = SOLANA_CAIP_IDS[network as SolanaNetwork];\n if (caipId && rpcUrl) {\n acc[caipId] = rpcUrl;\n }\n return acc;\n },\n {},\n );\n}\n","/* eslint-disable @typescript-eslint/naming-convention -- __PACKAGE_VERSION__ is an esbuild define convention */\nimport {\n createMultichainClient,\n type Scope,\n} from '@metamask/connect-multichain';\nimport {\n getWalletStandard,\n registerSolanaWalletStandard,\n} from '@metamask/solana-wallet-standard';\n\nimport { convertNetworksToCAIP, SOLANA_CAIP_IDS } from './networks';\nimport type {\n SolanaClient,\n SolanaConnectOptions,\n SolanaSupportedNetworks,\n} from './types';\n\n// Value substitued by tsup at build time\ndeclare const __PACKAGE_VERSION__: string | undefined;\n\n/**\n * Creates a new Solana client for connecting to MetaMask via wallet-standard.\n *\n * This function initializes the MultichainSDK and provides methods to get or register\n * a wallet-standard compatible wallet. The wallet handles session creation internally\n * when users connect through the Solana wallet adapter UI.\n *\n * @param options - Configuration options for the Solana client\n * @param options.dapp - Dapp identification and branding settings\n * @param options.api - Optional API configuration with supported networks\n * @param options.api.supportedNetworks - Record mapping network names (mainnet, devnet, testnet) to RPC URLs\n * @param [options.analytics] - Analytics configuration\n * @param [options.analytics.integrationType] - Integration type for analytics (defaults to 'direct')\n * @param options.debug - Enable debug logging\n * @param options.skipAutoRegister - Skip auto-registering the wallet during creation (defaults to false)\n * @returns A promise that resolves to the Solana client instance\n *\n * @example\n * ```typescript\n * import { createSolanaClient } from '@metamask/connect-solana';\n *\n * // Wallet is auto-registered and ready to use\n * const client = await createSolanaClient({\n * dapp: {\n * name: 'My Solana DApp',\n * url: 'https://mydapp.com',\n * },\n * api: {\n * supportedNetworks: {\n * mainnet: 'https://api.mainnet-beta.solana.com',\n * devnet: 'https://api.devnet.solana.com',\n * },\n * },\n * });\n *\n * // Get the wallet instance directly\n * const wallet = client.getWallet();\n * ```\n */\nexport async function createSolanaClient(\n options: SolanaConnectOptions,\n): Promise<SolanaClient> {\n const defaultNetworks: SolanaSupportedNetworks = {\n mainnet: 'https://api.mainnet-beta.solana.com',\n };\n\n const skipAutoRegister = options.skipAutoRegister ?? false;\n\n const supportedNetworks = convertNetworksToCAIP(\n options.api?.supportedNetworks ?? defaultNetworks,\n );\n\n const core = await createMultichainClient({\n dapp: options.dapp,\n api: {\n supportedNetworks,\n },\n analytics: {\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n integrationType: options.analytics?.integrationType || 'direct',\n },\n versions: {\n // typeof guard needed: Metro (React Native) bundles TS source directly,\n // bypassing the tsup build that substitutes __PACKAGE_VERSION__.\n 'connect-solana':\n typeof __PACKAGE_VERSION__ === 'undefined'\n ? 'unknown'\n : __PACKAGE_VERSION__,\n },\n });\n\n const client = core.provider;\n\n const walletName = 'MetaMask Connect';\n\n if (!skipAutoRegister) {\n await registerSolanaWalletStandard({ client, walletName });\n }\n\n return {\n core,\n getWallet: () => getWalletStandard({ client, walletName }),\n registerWallet: async (): Promise<void> => {\n if (!skipAutoRegister) {\n return;\n }\n await registerSolanaWalletStandard({ client, walletName });\n },\n disconnect: async () =>\n await core.disconnect(Object.values(SOLANA_CAIP_IDS) as Scope[]),\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA,SAAS,oBAAoB,kCAAkC;;;ACMxD,IAAM,kBAAiD;AAAA,EAC5D,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,SAAS;AACX;AAQO,SAAS,sBACd,UACwB;AACxB,SAAO,OAAO,QAAQ,QAAQ,EAAE;AAAA,IAC9B,CAAC,KAAK,CAAC,SAAS,MAAM,MAAM;AAC1B,YAAM,SAAS,gBAAgB,OAAwB;AACvD,UAAI,UAAU,QAAQ;AACpB,YAAI,MAAM,IAAI;AAAA,MAChB;AACA,aAAO;AAAA,IACT;AAAA,IACA,CAAC;AAAA,EACH;AACF;;;ADfO,IAAM,mBAAmB,CAAC;AAAA,EAC/B;AAAA,EACA;AACF,MAG+B;AAC7B,QAAM,eAAe,SAAS;AAAA,IAC5B,CAAC,YAAY,gBAAgB,OAAO;AAAA,EACtC;AACA,QAAM,UAAU,2BAA2B;AAAA,IACzC;AAAA,IACA;AAAA,EACF,CAAC;AAED,SAAO,SAAS,OAAgC,CAAC,KAAK,YAAY;AAChE,UAAM,SAAS,gBAAgB,OAAO;AACtC,UAAM,SAAS,QAAQ,MAAM;AAC7B,QAAI,QAAQ;AACV,UAAI,OAAO,IAAI;AAAA,IACjB;AACA,WAAO;AAAA,EACT,GAAG,CAAC,CAAC;AACP;;;AEtCA;AAAA,EACE;AAAA,OAEK;AACP;AAAA,EACE;AAAA,EACA;AAAA,OACK;AAmDP,SAAsB,mBACpB,SACuB;AAAA;AA7DzB;AA8DE,UAAM,kBAA2C;AAAA,MAC/C,SAAS;AAAA,IACX;AAEA,UAAM,oBAAmB,aAAQ,qBAAR,YAA4B;AAErD,UAAM,oBAAoB;AAAA,OACxB,mBAAQ,QAAR,mBAAa,sBAAb,YAAkC;AAAA,IACpC;AAEA,UAAM,OAAO,MAAM,uBAAuB;AAAA,MACxC,MAAM,QAAQ;AAAA,MACd,KAAK;AAAA,QACH;AAAA,MACF;AAAA,MACA,WAAW;AAAA;AAAA,QAET,mBAAiB,aAAQ,cAAR,mBAAmB,oBAAmB;AAAA,MACzD;AAAA,MACA,UAAU;AAAA;AAAA;AAAA,QAGR,kBACE,QACI,YACA;AAAA,MACR;AAAA,IACF,CAAC;AAED,UAAM,SAAS,KAAK;AAEpB,UAAM,aAAa;AAEnB,QAAI,CAAC,kBAAkB;AACrB,YAAM,6BAA6B,EAAE,QAAQ,WAAW,CAAC;AAAA,IAC3D;AAEA,WAAO;AAAA,MACL;AAAA,MACA,WAAW,MAAM,kBAAkB,EAAE,QAAQ,WAAW,CAAC;AAAA,MACzD,gBAAgB,MAA2B;AACzC,YAAI,CAAC,kBAAkB;AACrB;AAAA,QACF;AACA,cAAM,6BAA6B,EAAE,QAAQ,WAAW,CAAC;AAAA,MAC3D;AAAA,MACA,YAAY,MAAS;AACnB,qBAAM,KAAK,WAAW,OAAO,OAAO,eAAe,CAAY;AAAA;AAAA,IACnE;AAAA,EACF;AAAA;","names":[]}
|
|
@@ -95,7 +95,7 @@ var import_connect_multichain2 = require("@metamask/connect-multichain");
|
|
|
95
95
|
var import_solana_wallet_standard = require("@metamask/solana-wallet-standard");
|
|
96
96
|
function createSolanaClient(options) {
|
|
97
97
|
return __async(this, null, function* () {
|
|
98
|
-
var _a, _b, _c;
|
|
98
|
+
var _a, _b, _c, _d;
|
|
99
99
|
const defaultNetworks = {
|
|
100
100
|
mainnet: "https://api.mainnet-beta.solana.com"
|
|
101
101
|
};
|
|
@@ -108,10 +108,14 @@ function createSolanaClient(options) {
|
|
|
108
108
|
api: {
|
|
109
109
|
supportedNetworks
|
|
110
110
|
},
|
|
111
|
+
analytics: {
|
|
112
|
+
// eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing
|
|
113
|
+
integrationType: ((_d = options.analytics) == null ? void 0 : _d.integrationType) || "direct"
|
|
114
|
+
},
|
|
111
115
|
versions: {
|
|
112
116
|
// typeof guard needed: Metro (React Native) bundles TS source directly,
|
|
113
117
|
// bypassing the tsup build that substitutes __PACKAGE_VERSION__.
|
|
114
|
-
"connect-solana": false ? "unknown" : "0.
|
|
118
|
+
"connect-solana": false ? "unknown" : "0.8.0"
|
|
115
119
|
}
|
|
116
120
|
});
|
|
117
121
|
const client = core.provider;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/index.ts","../../../src/infura.ts","../../../src/networks.ts","../../../src/connect.ts"],"sourcesContent":["export { getInfuraRpcUrls } from './infura';\nexport { createSolanaClient } from './connect';\nexport type {\n SolanaClient,\n SolanaConnectOptions,\n SolanaNetwork,\n SolanaSupportedNetworks,\n} from './types';\n","import { getInfuraRpcUrls as getInfuraRpcUrlsMultichain } from '@metamask/connect-multichain';\nimport type { CaipChainId } from '@metamask/utils';\n\nimport { SOLANA_CAIP_IDS } from './networks';\nimport type { SolanaNetwork, SolanaSupportedNetworks } from './types';\n\n/**\n * Generates Infura RPC URLs for Solana networks keyed by Solana network name.\n *\n * The returned map is intended for `createSolanaClient({ api: { supportedNetworks } })`.\n *\n * @param options - The options for generating Solana Infura RPC URLs\n * @param options.infuraApiKey - The Infura API key\n * @param options.networks - Solana networks to include in the returned map\n * @returns A map of Solana network names to Infura RPC URLs\n */\nexport const getInfuraRpcUrls = ({\n infuraApiKey,\n networks,\n}: {\n infuraApiKey: string;\n networks: SolanaNetwork[];\n}): SolanaSupportedNetworks => {\n const caipChainIds = networks.map(\n (network) => SOLANA_CAIP_IDS[network] as CaipChainId,\n );\n const caipMap = getInfuraRpcUrlsMultichain({\n infuraApiKey,\n caipChainIds,\n });\n\n return networks.reduce<SolanaSupportedNetworks>((acc, network) => {\n const caipId = SOLANA_CAIP_IDS[network] as CaipChainId;\n const rpcUrl = caipMap[caipId];\n if (rpcUrl) {\n acc[network] = rpcUrl;\n }\n return acc;\n }, {});\n};\n","import type { SolanaNetwork, SolanaSupportedNetworks } from './types';\n\n/**\n * CAIP-2 chain IDs for Solana networks.\n * The reference is the first 32 characters of the Base58-encoded genesis hash.\n */\nexport const SOLANA_CAIP_IDS: Record<SolanaNetwork, string> = {\n mainnet: 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp',\n devnet: 'solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1',\n testnet: 'solana:4uhcVJyU9pJkvQyS88uRDiswHXSCkY3z',\n};\n\n/**\n * Converts a record of network names to RPC URLs into a record of CAIP IDs to RPC URLs.\n *\n * @param networks - A record of network names to RPC URLs\n * @returns A record of CAIP IDs to RPC URLs\n */\nexport function convertNetworksToCAIP(\n networks: SolanaSupportedNetworks,\n): Record<string, string> {\n return Object.entries(networks).reduce<Record<string, string>>(\n (acc, [network, rpcUrl]) => {\n const caipId = SOLANA_CAIP_IDS[network as SolanaNetwork];\n if (caipId && rpcUrl) {\n acc[caipId] = rpcUrl;\n }\n return acc;\n },\n {},\n );\n}\n","/* eslint-disable @typescript-eslint/naming-convention -- __PACKAGE_VERSION__ is an esbuild define convention */\nimport {\n createMultichainClient,\n type Scope,\n} from '@metamask/connect-multichain';\nimport {\n getWalletStandard,\n registerSolanaWalletStandard,\n} from '@metamask/solana-wallet-standard';\n\nimport { convertNetworksToCAIP, SOLANA_CAIP_IDS } from './networks';\nimport type {\n SolanaClient,\n SolanaConnectOptions,\n SolanaSupportedNetworks,\n} from './types';\n\n// Value substitued by tsup at build time\ndeclare const __PACKAGE_VERSION__: string | undefined;\n\n/**\n * Creates a new Solana client for connecting to MetaMask via wallet-standard.\n *\n * This function initializes the MultichainSDK and provides methods to get or register\n * a wallet-standard compatible wallet. The wallet handles session creation internally\n * when users connect through the Solana wallet adapter UI.\n *\n * @param options - Configuration options for the Solana client\n * @param options.dapp - Dapp identification and branding settings\n * @param options.api - Optional API configuration with supported networks\n * @param options.api.supportedNetworks - Record mapping network names (mainnet, devnet, testnet) to RPC URLs\n * @param options.debug - Enable debug logging\n * @param options.skipAutoRegister - Skip auto-registering the wallet during creation (defaults to false)\n * @returns A promise that resolves to the Solana client instance\n *\n * @example\n * ```typescript\n * import { createSolanaClient } from '@metamask/connect-solana';\n *\n * // Wallet is auto-registered and ready to use\n * const client = await createSolanaClient({\n * dapp: {\n * name: 'My Solana DApp',\n * url: 'https://mydapp.com',\n * },\n * api: {\n * supportedNetworks: {\n * mainnet: 'https://api.mainnet-beta.solana.com',\n * devnet: 'https://api.devnet.solana.com',\n * },\n * },\n * });\n *\n * // Get the wallet instance directly\n * const wallet = client.getWallet();\n * ```\n */\nexport async function createSolanaClient(\n options: SolanaConnectOptions,\n): Promise<SolanaClient> {\n const defaultNetworks: SolanaSupportedNetworks = {\n mainnet: 'https://api.mainnet-beta.solana.com',\n };\n\n const skipAutoRegister = options.skipAutoRegister ?? false;\n\n const supportedNetworks = convertNetworksToCAIP(\n options.api?.supportedNetworks ?? defaultNetworks,\n );\n\n const core = await createMultichainClient({\n dapp: options.dapp,\n api: {\n supportedNetworks,\n },\n versions: {\n // typeof guard needed: Metro (React Native) bundles TS source directly,\n // bypassing the tsup build that substitutes __PACKAGE_VERSION__.\n 'connect-solana':\n typeof __PACKAGE_VERSION__ === 'undefined'\n ? 'unknown'\n : __PACKAGE_VERSION__,\n },\n });\n\n const client = core.provider;\n\n const walletName = 'MetaMask Connect';\n\n if (!skipAutoRegister) {\n await registerSolanaWalletStandard({ client, walletName });\n }\n\n return {\n core,\n getWallet: () => getWalletStandard({ client, walletName }),\n registerWallet: async (): Promise<void> => {\n if (!skipAutoRegister) {\n return;\n }\n await registerSolanaWalletStandard({ client, walletName });\n },\n disconnect: async () =>\n await core.disconnect(Object.values(SOLANA_CAIP_IDS) as Scope[]),\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,gCAA+D;;;ACMxD,IAAM,kBAAiD;AAAA,EAC5D,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,SAAS;AACX;AAQO,SAAS,sBACd,UACwB;AACxB,SAAO,OAAO,QAAQ,QAAQ,EAAE;AAAA,IAC9B,CAAC,KAAK,CAAC,SAAS,MAAM,MAAM;AAC1B,YAAM,SAAS,gBAAgB,OAAwB;AACvD,UAAI,UAAU,QAAQ;AACpB,YAAI,MAAM,IAAI;AAAA,MAChB;AACA,aAAO;AAAA,IACT;AAAA,IACA,CAAC;AAAA,EACH;AACF;;;ADfO,IAAM,mBAAmB,CAAC;AAAA,EAC/B;AAAA,EACA;AACF,MAG+B;AAC7B,QAAM,eAAe,SAAS;AAAA,IAC5B,CAAC,YAAY,gBAAgB,OAAO;AAAA,EACtC;AACA,QAAM,cAAU,0BAAAA,kBAA2B;AAAA,IACzC;AAAA,IACA;AAAA,EACF,CAAC;AAED,SAAO,SAAS,OAAgC,CAAC,KAAK,YAAY;AAChE,UAAM,SAAS,gBAAgB,OAAO;AACtC,UAAM,SAAS,QAAQ,MAAM;AAC7B,QAAI,QAAQ;AACV,UAAI,OAAO,IAAI;AAAA,IACjB;AACA,WAAO;AAAA,EACT,GAAG,CAAC,CAAC;AACP;;;AEtCA,IAAAC,6BAGO;AACP,oCAGO;
|
|
1
|
+
{"version":3,"sources":["../../../src/index.ts","../../../src/infura.ts","../../../src/networks.ts","../../../src/connect.ts"],"sourcesContent":["export { getInfuraRpcUrls } from './infura';\nexport { createSolanaClient } from './connect';\nexport type {\n SolanaClient,\n SolanaConnectOptions,\n SolanaNetwork,\n SolanaSupportedNetworks,\n} from './types';\n","import { getInfuraRpcUrls as getInfuraRpcUrlsMultichain } from '@metamask/connect-multichain';\nimport type { CaipChainId } from '@metamask/utils';\n\nimport { SOLANA_CAIP_IDS } from './networks';\nimport type { SolanaNetwork, SolanaSupportedNetworks } from './types';\n\n/**\n * Generates Infura RPC URLs for Solana networks keyed by Solana network name.\n *\n * The returned map is intended for `createSolanaClient({ api: { supportedNetworks } })`.\n *\n * @param options - The options for generating Solana Infura RPC URLs\n * @param options.infuraApiKey - The Infura API key\n * @param options.networks - Solana networks to include in the returned map\n * @returns A map of Solana network names to Infura RPC URLs\n */\nexport const getInfuraRpcUrls = ({\n infuraApiKey,\n networks,\n}: {\n infuraApiKey: string;\n networks: SolanaNetwork[];\n}): SolanaSupportedNetworks => {\n const caipChainIds = networks.map(\n (network) => SOLANA_CAIP_IDS[network] as CaipChainId,\n );\n const caipMap = getInfuraRpcUrlsMultichain({\n infuraApiKey,\n caipChainIds,\n });\n\n return networks.reduce<SolanaSupportedNetworks>((acc, network) => {\n const caipId = SOLANA_CAIP_IDS[network] as CaipChainId;\n const rpcUrl = caipMap[caipId];\n if (rpcUrl) {\n acc[network] = rpcUrl;\n }\n return acc;\n }, {});\n};\n","import type { SolanaNetwork, SolanaSupportedNetworks } from './types';\n\n/**\n * CAIP-2 chain IDs for Solana networks.\n * The reference is the first 32 characters of the Base58-encoded genesis hash.\n */\nexport const SOLANA_CAIP_IDS: Record<SolanaNetwork, string> = {\n mainnet: 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp',\n devnet: 'solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1',\n testnet: 'solana:4uhcVJyU9pJkvQyS88uRDiswHXSCkY3z',\n};\n\n/**\n * Converts a record of network names to RPC URLs into a record of CAIP IDs to RPC URLs.\n *\n * @param networks - A record of network names to RPC URLs\n * @returns A record of CAIP IDs to RPC URLs\n */\nexport function convertNetworksToCAIP(\n networks: SolanaSupportedNetworks,\n): Record<string, string> {\n return Object.entries(networks).reduce<Record<string, string>>(\n (acc, [network, rpcUrl]) => {\n const caipId = SOLANA_CAIP_IDS[network as SolanaNetwork];\n if (caipId && rpcUrl) {\n acc[caipId] = rpcUrl;\n }\n return acc;\n },\n {},\n );\n}\n","/* eslint-disable @typescript-eslint/naming-convention -- __PACKAGE_VERSION__ is an esbuild define convention */\nimport {\n createMultichainClient,\n type Scope,\n} from '@metamask/connect-multichain';\nimport {\n getWalletStandard,\n registerSolanaWalletStandard,\n} from '@metamask/solana-wallet-standard';\n\nimport { convertNetworksToCAIP, SOLANA_CAIP_IDS } from './networks';\nimport type {\n SolanaClient,\n SolanaConnectOptions,\n SolanaSupportedNetworks,\n} from './types';\n\n// Value substitued by tsup at build time\ndeclare const __PACKAGE_VERSION__: string | undefined;\n\n/**\n * Creates a new Solana client for connecting to MetaMask via wallet-standard.\n *\n * This function initializes the MultichainSDK and provides methods to get or register\n * a wallet-standard compatible wallet. The wallet handles session creation internally\n * when users connect through the Solana wallet adapter UI.\n *\n * @param options - Configuration options for the Solana client\n * @param options.dapp - Dapp identification and branding settings\n * @param options.api - Optional API configuration with supported networks\n * @param options.api.supportedNetworks - Record mapping network names (mainnet, devnet, testnet) to RPC URLs\n * @param [options.analytics] - Analytics configuration\n * @param [options.analytics.integrationType] - Integration type for analytics (defaults to 'direct')\n * @param options.debug - Enable debug logging\n * @param options.skipAutoRegister - Skip auto-registering the wallet during creation (defaults to false)\n * @returns A promise that resolves to the Solana client instance\n *\n * @example\n * ```typescript\n * import { createSolanaClient } from '@metamask/connect-solana';\n *\n * // Wallet is auto-registered and ready to use\n * const client = await createSolanaClient({\n * dapp: {\n * name: 'My Solana DApp',\n * url: 'https://mydapp.com',\n * },\n * api: {\n * supportedNetworks: {\n * mainnet: 'https://api.mainnet-beta.solana.com',\n * devnet: 'https://api.devnet.solana.com',\n * },\n * },\n * });\n *\n * // Get the wallet instance directly\n * const wallet = client.getWallet();\n * ```\n */\nexport async function createSolanaClient(\n options: SolanaConnectOptions,\n): Promise<SolanaClient> {\n const defaultNetworks: SolanaSupportedNetworks = {\n mainnet: 'https://api.mainnet-beta.solana.com',\n };\n\n const skipAutoRegister = options.skipAutoRegister ?? false;\n\n const supportedNetworks = convertNetworksToCAIP(\n options.api?.supportedNetworks ?? defaultNetworks,\n );\n\n const core = await createMultichainClient({\n dapp: options.dapp,\n api: {\n supportedNetworks,\n },\n analytics: {\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n integrationType: options.analytics?.integrationType || 'direct',\n },\n versions: {\n // typeof guard needed: Metro (React Native) bundles TS source directly,\n // bypassing the tsup build that substitutes __PACKAGE_VERSION__.\n 'connect-solana':\n typeof __PACKAGE_VERSION__ === 'undefined'\n ? 'unknown'\n : __PACKAGE_VERSION__,\n },\n });\n\n const client = core.provider;\n\n const walletName = 'MetaMask Connect';\n\n if (!skipAutoRegister) {\n await registerSolanaWalletStandard({ client, walletName });\n }\n\n return {\n core,\n getWallet: () => getWalletStandard({ client, walletName }),\n registerWallet: async (): Promise<void> => {\n if (!skipAutoRegister) {\n return;\n }\n await registerSolanaWalletStandard({ client, walletName });\n },\n disconnect: async () =>\n await core.disconnect(Object.values(SOLANA_CAIP_IDS) as Scope[]),\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,gCAA+D;;;ACMxD,IAAM,kBAAiD;AAAA,EAC5D,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,SAAS;AACX;AAQO,SAAS,sBACd,UACwB;AACxB,SAAO,OAAO,QAAQ,QAAQ,EAAE;AAAA,IAC9B,CAAC,KAAK,CAAC,SAAS,MAAM,MAAM;AAC1B,YAAM,SAAS,gBAAgB,OAAwB;AACvD,UAAI,UAAU,QAAQ;AACpB,YAAI,MAAM,IAAI;AAAA,MAChB;AACA,aAAO;AAAA,IACT;AAAA,IACA,CAAC;AAAA,EACH;AACF;;;ADfO,IAAM,mBAAmB,CAAC;AAAA,EAC/B;AAAA,EACA;AACF,MAG+B;AAC7B,QAAM,eAAe,SAAS;AAAA,IAC5B,CAAC,YAAY,gBAAgB,OAAO;AAAA,EACtC;AACA,QAAM,cAAU,0BAAAA,kBAA2B;AAAA,IACzC;AAAA,IACA;AAAA,EACF,CAAC;AAED,SAAO,SAAS,OAAgC,CAAC,KAAK,YAAY;AAChE,UAAM,SAAS,gBAAgB,OAAO;AACtC,UAAM,SAAS,QAAQ,MAAM;AAC7B,QAAI,QAAQ;AACV,UAAI,OAAO,IAAI;AAAA,IACjB;AACA,WAAO;AAAA,EACT,GAAG,CAAC,CAAC;AACP;;;AEtCA,IAAAC,6BAGO;AACP,oCAGO;AAmDP,SAAsB,mBACpB,SACuB;AAAA;AA7DzB;AA8DE,UAAM,kBAA2C;AAAA,MAC/C,SAAS;AAAA,IACX;AAEA,UAAM,oBAAmB,aAAQ,qBAAR,YAA4B;AAErD,UAAM,oBAAoB;AAAA,OACxB,mBAAQ,QAAR,mBAAa,sBAAb,YAAkC;AAAA,IACpC;AAEA,UAAM,OAAO,UAAM,mDAAuB;AAAA,MACxC,MAAM,QAAQ;AAAA,MACd,KAAK;AAAA,QACH;AAAA,MACF;AAAA,MACA,WAAW;AAAA;AAAA,QAET,mBAAiB,aAAQ,cAAR,mBAAmB,oBAAmB;AAAA,MACzD;AAAA,MACA,UAAU;AAAA;AAAA;AAAA,QAGR,kBACE,QACI,YACA;AAAA,MACR;AAAA,IACF,CAAC;AAED,UAAM,SAAS,KAAK;AAEpB,UAAM,aAAa;AAEnB,QAAI,CAAC,kBAAkB;AACrB,gBAAM,4DAA6B,EAAE,QAAQ,WAAW,CAAC;AAAA,IAC3D;AAEA,WAAO;AAAA,MACL;AAAA,MACA,WAAW,UAAM,iDAAkB,EAAE,QAAQ,WAAW,CAAC;AAAA,MACzD,gBAAgB,MAA2B;AACzC,YAAI,CAAC,kBAAkB;AACrB;AAAA,QACF;AACA,kBAAM,4DAA6B,EAAE,QAAQ,WAAW,CAAC;AAAA,MAC3D;AAAA,MACA,YAAY,MAAS;AACnB,qBAAM,KAAK,WAAW,OAAO,OAAO,eAAe,CAAY;AAAA;AAAA,IACnE;AAAA,EACF;AAAA;","names":["getInfuraRpcUrlsMultichain","import_connect_multichain"]}
|
|
@@ -74,7 +74,7 @@ import {
|
|
|
74
74
|
} from "@metamask/solana-wallet-standard";
|
|
75
75
|
function createSolanaClient(options) {
|
|
76
76
|
return __async(this, null, function* () {
|
|
77
|
-
var _a, _b, _c;
|
|
77
|
+
var _a, _b, _c, _d;
|
|
78
78
|
const defaultNetworks = {
|
|
79
79
|
mainnet: "https://api.mainnet-beta.solana.com"
|
|
80
80
|
};
|
|
@@ -87,10 +87,14 @@ function createSolanaClient(options) {
|
|
|
87
87
|
api: {
|
|
88
88
|
supportedNetworks
|
|
89
89
|
},
|
|
90
|
+
analytics: {
|
|
91
|
+
// eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing
|
|
92
|
+
integrationType: ((_d = options.analytics) == null ? void 0 : _d.integrationType) || "direct"
|
|
93
|
+
},
|
|
90
94
|
versions: {
|
|
91
95
|
// typeof guard needed: Metro (React Native) bundles TS source directly,
|
|
92
96
|
// bypassing the tsup build that substitutes __PACKAGE_VERSION__.
|
|
93
|
-
"connect-solana": false ? "unknown" : "0.
|
|
97
|
+
"connect-solana": false ? "unknown" : "0.8.0"
|
|
94
98
|
}
|
|
95
99
|
});
|
|
96
100
|
const client = core.provider;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/infura.ts","../../../src/networks.ts","../../../src/connect.ts"],"sourcesContent":["import { getInfuraRpcUrls as getInfuraRpcUrlsMultichain } from '@metamask/connect-multichain';\nimport type { CaipChainId } from '@metamask/utils';\n\nimport { SOLANA_CAIP_IDS } from './networks';\nimport type { SolanaNetwork, SolanaSupportedNetworks } from './types';\n\n/**\n * Generates Infura RPC URLs for Solana networks keyed by Solana network name.\n *\n * The returned map is intended for `createSolanaClient({ api: { supportedNetworks } })`.\n *\n * @param options - The options for generating Solana Infura RPC URLs\n * @param options.infuraApiKey - The Infura API key\n * @param options.networks - Solana networks to include in the returned map\n * @returns A map of Solana network names to Infura RPC URLs\n */\nexport const getInfuraRpcUrls = ({\n infuraApiKey,\n networks,\n}: {\n infuraApiKey: string;\n networks: SolanaNetwork[];\n}): SolanaSupportedNetworks => {\n const caipChainIds = networks.map(\n (network) => SOLANA_CAIP_IDS[network] as CaipChainId,\n );\n const caipMap = getInfuraRpcUrlsMultichain({\n infuraApiKey,\n caipChainIds,\n });\n\n return networks.reduce<SolanaSupportedNetworks>((acc, network) => {\n const caipId = SOLANA_CAIP_IDS[network] as CaipChainId;\n const rpcUrl = caipMap[caipId];\n if (rpcUrl) {\n acc[network] = rpcUrl;\n }\n return acc;\n }, {});\n};\n","import type { SolanaNetwork, SolanaSupportedNetworks } from './types';\n\n/**\n * CAIP-2 chain IDs for Solana networks.\n * The reference is the first 32 characters of the Base58-encoded genesis hash.\n */\nexport const SOLANA_CAIP_IDS: Record<SolanaNetwork, string> = {\n mainnet: 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp',\n devnet: 'solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1',\n testnet: 'solana:4uhcVJyU9pJkvQyS88uRDiswHXSCkY3z',\n};\n\n/**\n * Converts a record of network names to RPC URLs into a record of CAIP IDs to RPC URLs.\n *\n * @param networks - A record of network names to RPC URLs\n * @returns A record of CAIP IDs to RPC URLs\n */\nexport function convertNetworksToCAIP(\n networks: SolanaSupportedNetworks,\n): Record<string, string> {\n return Object.entries(networks).reduce<Record<string, string>>(\n (acc, [network, rpcUrl]) => {\n const caipId = SOLANA_CAIP_IDS[network as SolanaNetwork];\n if (caipId && rpcUrl) {\n acc[caipId] = rpcUrl;\n }\n return acc;\n },\n {},\n );\n}\n","/* eslint-disable @typescript-eslint/naming-convention -- __PACKAGE_VERSION__ is an esbuild define convention */\nimport {\n createMultichainClient,\n type Scope,\n} from '@metamask/connect-multichain';\nimport {\n getWalletStandard,\n registerSolanaWalletStandard,\n} from '@metamask/solana-wallet-standard';\n\nimport { convertNetworksToCAIP, SOLANA_CAIP_IDS } from './networks';\nimport type {\n SolanaClient,\n SolanaConnectOptions,\n SolanaSupportedNetworks,\n} from './types';\n\n// Value substitued by tsup at build time\ndeclare const __PACKAGE_VERSION__: string | undefined;\n\n/**\n * Creates a new Solana client for connecting to MetaMask via wallet-standard.\n *\n * This function initializes the MultichainSDK and provides methods to get or register\n * a wallet-standard compatible wallet. The wallet handles session creation internally\n * when users connect through the Solana wallet adapter UI.\n *\n * @param options - Configuration options for the Solana client\n * @param options.dapp - Dapp identification and branding settings\n * @param options.api - Optional API configuration with supported networks\n * @param options.api.supportedNetworks - Record mapping network names (mainnet, devnet, testnet) to RPC URLs\n * @param options.debug - Enable debug logging\n * @param options.skipAutoRegister - Skip auto-registering the wallet during creation (defaults to false)\n * @returns A promise that resolves to the Solana client instance\n *\n * @example\n * ```typescript\n * import { createSolanaClient } from '@metamask/connect-solana';\n *\n * // Wallet is auto-registered and ready to use\n * const client = await createSolanaClient({\n * dapp: {\n * name: 'My Solana DApp',\n * url: 'https://mydapp.com',\n * },\n * api: {\n * supportedNetworks: {\n * mainnet: 'https://api.mainnet-beta.solana.com',\n * devnet: 'https://api.devnet.solana.com',\n * },\n * },\n * });\n *\n * // Get the wallet instance directly\n * const wallet = client.getWallet();\n * ```\n */\nexport async function createSolanaClient(\n options: SolanaConnectOptions,\n): Promise<SolanaClient> {\n const defaultNetworks: SolanaSupportedNetworks = {\n mainnet: 'https://api.mainnet-beta.solana.com',\n };\n\n const skipAutoRegister = options.skipAutoRegister ?? false;\n\n const supportedNetworks = convertNetworksToCAIP(\n options.api?.supportedNetworks ?? defaultNetworks,\n );\n\n const core = await createMultichainClient({\n dapp: options.dapp,\n api: {\n supportedNetworks,\n },\n versions: {\n // typeof guard needed: Metro (React Native) bundles TS source directly,\n // bypassing the tsup build that substitutes __PACKAGE_VERSION__.\n 'connect-solana':\n typeof __PACKAGE_VERSION__ === 'undefined'\n ? 'unknown'\n : __PACKAGE_VERSION__,\n },\n });\n\n const client = core.provider;\n\n const walletName = 'MetaMask Connect';\n\n if (!skipAutoRegister) {\n await registerSolanaWalletStandard({ client, walletName });\n }\n\n return {\n core,\n getWallet: () => getWalletStandard({ client, walletName }),\n registerWallet: async (): Promise<void> => {\n if (!skipAutoRegister) {\n return;\n }\n await registerSolanaWalletStandard({ client, walletName });\n },\n disconnect: async () =>\n await core.disconnect(Object.values(SOLANA_CAIP_IDS) as Scope[]),\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA,SAAS,oBAAoB,kCAAkC;;;ACMxD,IAAM,kBAAiD;AAAA,EAC5D,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,SAAS;AACX;AAQO,SAAS,sBACd,UACwB;AACxB,SAAO,OAAO,QAAQ,QAAQ,EAAE;AAAA,IAC9B,CAAC,KAAK,CAAC,SAAS,MAAM,MAAM;AAC1B,YAAM,SAAS,gBAAgB,OAAwB;AACvD,UAAI,UAAU,QAAQ;AACpB,YAAI,MAAM,IAAI;AAAA,MAChB;AACA,aAAO;AAAA,IACT;AAAA,IACA,CAAC;AAAA,EACH;AACF;;;ADfO,IAAM,mBAAmB,CAAC;AAAA,EAC/B;AAAA,EACA;AACF,MAG+B;AAC7B,QAAM,eAAe,SAAS;AAAA,IAC5B,CAAC,YAAY,gBAAgB,OAAO;AAAA,EACtC;AACA,QAAM,UAAU,2BAA2B;AAAA,IACzC;AAAA,IACA;AAAA,EACF,CAAC;AAED,SAAO,SAAS,OAAgC,CAAC,KAAK,YAAY;AAChE,UAAM,SAAS,gBAAgB,OAAO;AACtC,UAAM,SAAS,QAAQ,MAAM;AAC7B,QAAI,QAAQ;AACV,UAAI,OAAO,IAAI;AAAA,IACjB;AACA,WAAO;AAAA,EACT,GAAG,CAAC,CAAC;AACP;;;AEtCA;AAAA,EACE;AAAA,OAEK;AACP;AAAA,EACE;AAAA,EACA;AAAA,OACK;
|
|
1
|
+
{"version":3,"sources":["../../../src/infura.ts","../../../src/networks.ts","../../../src/connect.ts"],"sourcesContent":["import { getInfuraRpcUrls as getInfuraRpcUrlsMultichain } from '@metamask/connect-multichain';\nimport type { CaipChainId } from '@metamask/utils';\n\nimport { SOLANA_CAIP_IDS } from './networks';\nimport type { SolanaNetwork, SolanaSupportedNetworks } from './types';\n\n/**\n * Generates Infura RPC URLs for Solana networks keyed by Solana network name.\n *\n * The returned map is intended for `createSolanaClient({ api: { supportedNetworks } })`.\n *\n * @param options - The options for generating Solana Infura RPC URLs\n * @param options.infuraApiKey - The Infura API key\n * @param options.networks - Solana networks to include in the returned map\n * @returns A map of Solana network names to Infura RPC URLs\n */\nexport const getInfuraRpcUrls = ({\n infuraApiKey,\n networks,\n}: {\n infuraApiKey: string;\n networks: SolanaNetwork[];\n}): SolanaSupportedNetworks => {\n const caipChainIds = networks.map(\n (network) => SOLANA_CAIP_IDS[network] as CaipChainId,\n );\n const caipMap = getInfuraRpcUrlsMultichain({\n infuraApiKey,\n caipChainIds,\n });\n\n return networks.reduce<SolanaSupportedNetworks>((acc, network) => {\n const caipId = SOLANA_CAIP_IDS[network] as CaipChainId;\n const rpcUrl = caipMap[caipId];\n if (rpcUrl) {\n acc[network] = rpcUrl;\n }\n return acc;\n }, {});\n};\n","import type { SolanaNetwork, SolanaSupportedNetworks } from './types';\n\n/**\n * CAIP-2 chain IDs for Solana networks.\n * The reference is the first 32 characters of the Base58-encoded genesis hash.\n */\nexport const SOLANA_CAIP_IDS: Record<SolanaNetwork, string> = {\n mainnet: 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp',\n devnet: 'solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1',\n testnet: 'solana:4uhcVJyU9pJkvQyS88uRDiswHXSCkY3z',\n};\n\n/**\n * Converts a record of network names to RPC URLs into a record of CAIP IDs to RPC URLs.\n *\n * @param networks - A record of network names to RPC URLs\n * @returns A record of CAIP IDs to RPC URLs\n */\nexport function convertNetworksToCAIP(\n networks: SolanaSupportedNetworks,\n): Record<string, string> {\n return Object.entries(networks).reduce<Record<string, string>>(\n (acc, [network, rpcUrl]) => {\n const caipId = SOLANA_CAIP_IDS[network as SolanaNetwork];\n if (caipId && rpcUrl) {\n acc[caipId] = rpcUrl;\n }\n return acc;\n },\n {},\n );\n}\n","/* eslint-disable @typescript-eslint/naming-convention -- __PACKAGE_VERSION__ is an esbuild define convention */\nimport {\n createMultichainClient,\n type Scope,\n} from '@metamask/connect-multichain';\nimport {\n getWalletStandard,\n registerSolanaWalletStandard,\n} from '@metamask/solana-wallet-standard';\n\nimport { convertNetworksToCAIP, SOLANA_CAIP_IDS } from './networks';\nimport type {\n SolanaClient,\n SolanaConnectOptions,\n SolanaSupportedNetworks,\n} from './types';\n\n// Value substitued by tsup at build time\ndeclare const __PACKAGE_VERSION__: string | undefined;\n\n/**\n * Creates a new Solana client for connecting to MetaMask via wallet-standard.\n *\n * This function initializes the MultichainSDK and provides methods to get or register\n * a wallet-standard compatible wallet. The wallet handles session creation internally\n * when users connect through the Solana wallet adapter UI.\n *\n * @param options - Configuration options for the Solana client\n * @param options.dapp - Dapp identification and branding settings\n * @param options.api - Optional API configuration with supported networks\n * @param options.api.supportedNetworks - Record mapping network names (mainnet, devnet, testnet) to RPC URLs\n * @param [options.analytics] - Analytics configuration\n * @param [options.analytics.integrationType] - Integration type for analytics (defaults to 'direct')\n * @param options.debug - Enable debug logging\n * @param options.skipAutoRegister - Skip auto-registering the wallet during creation (defaults to false)\n * @returns A promise that resolves to the Solana client instance\n *\n * @example\n * ```typescript\n * import { createSolanaClient } from '@metamask/connect-solana';\n *\n * // Wallet is auto-registered and ready to use\n * const client = await createSolanaClient({\n * dapp: {\n * name: 'My Solana DApp',\n * url: 'https://mydapp.com',\n * },\n * api: {\n * supportedNetworks: {\n * mainnet: 'https://api.mainnet-beta.solana.com',\n * devnet: 'https://api.devnet.solana.com',\n * },\n * },\n * });\n *\n * // Get the wallet instance directly\n * const wallet = client.getWallet();\n * ```\n */\nexport async function createSolanaClient(\n options: SolanaConnectOptions,\n): Promise<SolanaClient> {\n const defaultNetworks: SolanaSupportedNetworks = {\n mainnet: 'https://api.mainnet-beta.solana.com',\n };\n\n const skipAutoRegister = options.skipAutoRegister ?? false;\n\n const supportedNetworks = convertNetworksToCAIP(\n options.api?.supportedNetworks ?? defaultNetworks,\n );\n\n const core = await createMultichainClient({\n dapp: options.dapp,\n api: {\n supportedNetworks,\n },\n analytics: {\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n integrationType: options.analytics?.integrationType || 'direct',\n },\n versions: {\n // typeof guard needed: Metro (React Native) bundles TS source directly,\n // bypassing the tsup build that substitutes __PACKAGE_VERSION__.\n 'connect-solana':\n typeof __PACKAGE_VERSION__ === 'undefined'\n ? 'unknown'\n : __PACKAGE_VERSION__,\n },\n });\n\n const client = core.provider;\n\n const walletName = 'MetaMask Connect';\n\n if (!skipAutoRegister) {\n await registerSolanaWalletStandard({ client, walletName });\n }\n\n return {\n core,\n getWallet: () => getWalletStandard({ client, walletName }),\n registerWallet: async (): Promise<void> => {\n if (!skipAutoRegister) {\n return;\n }\n await registerSolanaWalletStandard({ client, walletName });\n },\n disconnect: async () =>\n await core.disconnect(Object.values(SOLANA_CAIP_IDS) as Scope[]),\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA,SAAS,oBAAoB,kCAAkC;;;ACMxD,IAAM,kBAAiD;AAAA,EAC5D,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,SAAS;AACX;AAQO,SAAS,sBACd,UACwB;AACxB,SAAO,OAAO,QAAQ,QAAQ,EAAE;AAAA,IAC9B,CAAC,KAAK,CAAC,SAAS,MAAM,MAAM;AAC1B,YAAM,SAAS,gBAAgB,OAAwB;AACvD,UAAI,UAAU,QAAQ;AACpB,YAAI,MAAM,IAAI;AAAA,MAChB;AACA,aAAO;AAAA,IACT;AAAA,IACA,CAAC;AAAA,EACH;AACF;;;ADfO,IAAM,mBAAmB,CAAC;AAAA,EAC/B;AAAA,EACA;AACF,MAG+B;AAC7B,QAAM,eAAe,SAAS;AAAA,IAC5B,CAAC,YAAY,gBAAgB,OAAO;AAAA,EACtC;AACA,QAAM,UAAU,2BAA2B;AAAA,IACzC;AAAA,IACA;AAAA,EACF,CAAC;AAED,SAAO,SAAS,OAAgC,CAAC,KAAK,YAAY;AAChE,UAAM,SAAS,gBAAgB,OAAO;AACtC,UAAM,SAAS,QAAQ,MAAM;AAC7B,QAAI,QAAQ;AACV,UAAI,OAAO,IAAI;AAAA,IACjB;AACA,WAAO;AAAA,EACT,GAAG,CAAC,CAAC;AACP;;;AEtCA;AAAA,EACE;AAAA,OAEK;AACP;AAAA,EACE;AAAA,EACA;AAAA,OACK;AAmDP,SAAsB,mBACpB,SACuB;AAAA;AA7DzB;AA8DE,UAAM,kBAA2C;AAAA,MAC/C,SAAS;AAAA,IACX;AAEA,UAAM,oBAAmB,aAAQ,qBAAR,YAA4B;AAErD,UAAM,oBAAoB;AAAA,OACxB,mBAAQ,QAAR,mBAAa,sBAAb,YAAkC;AAAA,IACpC;AAEA,UAAM,OAAO,MAAM,uBAAuB;AAAA,MACxC,MAAM,QAAQ;AAAA,MACd,KAAK;AAAA,QACH;AAAA,MACF;AAAA,MACA,WAAW;AAAA;AAAA,QAET,mBAAiB,aAAQ,cAAR,mBAAmB,oBAAmB;AAAA,MACzD;AAAA,MACA,UAAU;AAAA;AAAA;AAAA,QAGR,kBACE,QACI,YACA;AAAA,MACR;AAAA,IACF,CAAC;AAED,UAAM,SAAS,KAAK;AAEpB,UAAM,aAAa;AAEnB,QAAI,CAAC,kBAAkB;AACrB,YAAM,6BAA6B,EAAE,QAAQ,WAAW,CAAC;AAAA,IAC3D;AAEA,WAAO;AAAA,MACL;AAAA,MACA,WAAW,MAAM,kBAAkB,EAAE,QAAQ,WAAW,CAAC;AAAA,MACzD,gBAAgB,MAA2B;AACzC,YAAI,CAAC,kBAAkB;AACrB;AAAA,QACF;AACA,cAAM,6BAA6B,EAAE,QAAQ,WAAW,CAAC;AAAA,MAC3D;AAAA,MACA,YAAY,MAAS;AACnB,qBAAM,KAAK,WAAW,OAAO,OAAO,eAAe,CAAY;AAAA;AAAA,IACnE;AAAA,EACF;AAAA;","names":[]}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -22,7 +22,7 @@ type SolanaSupportedNetworks = Partial<Record<SolanaNetwork, string>>;
|
|
|
22
22
|
*
|
|
23
23
|
* Derived from MultichainOptions to ensure consistency with the core SDK.
|
|
24
24
|
*/
|
|
25
|
-
type SolanaConnectOptions = Pick<MultichainOptions, 'dapp'> & {
|
|
25
|
+
type SolanaConnectOptions = Pick<MultichainOptions, 'dapp' | 'analytics'> & {
|
|
26
26
|
/**
|
|
27
27
|
* Optional API configuration.
|
|
28
28
|
* Maps network names (mainnet, devnet, testnet) to RPC URLs.
|
|
@@ -84,6 +84,8 @@ declare const getInfuraRpcUrls: ({ infuraApiKey, networks, }: {
|
|
|
84
84
|
* @param options.dapp - Dapp identification and branding settings
|
|
85
85
|
* @param options.api - Optional API configuration with supported networks
|
|
86
86
|
* @param options.api.supportedNetworks - Record mapping network names (mainnet, devnet, testnet) to RPC URLs
|
|
87
|
+
* @param [options.analytics] - Analytics configuration
|
|
88
|
+
* @param [options.analytics.integrationType] - Integration type for analytics (defaults to 'direct')
|
|
87
89
|
* @param options.debug - Enable debug logging
|
|
88
90
|
* @param options.skipAutoRegister - Skip auto-registering the wallet during creation (defaults to false)
|
|
89
91
|
* @returns A promise that resolves to the Solana client instance
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@metamask/connect-solana",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.8.0",
|
|
4
4
|
"description": "Solana Layer for MetaMask Connect",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"MetaMask",
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
"type": "git",
|
|
15
15
|
"url": "https://github.com/MetaMask/connect-monorepo.git"
|
|
16
16
|
},
|
|
17
|
-
"license": "
|
|
17
|
+
"license": "SEE LICENSE IN LICENSE",
|
|
18
18
|
"sideEffects": false,
|
|
19
19
|
"exports": {
|
|
20
20
|
".": {
|
|
@@ -58,7 +58,7 @@
|
|
|
58
58
|
"test:watch": "vitest watch"
|
|
59
59
|
},
|
|
60
60
|
"dependencies": {
|
|
61
|
-
"@metamask/connect-multichain": "^0.
|
|
61
|
+
"@metamask/connect-multichain": "^0.12.0",
|
|
62
62
|
"@metamask/solana-wallet-standard": "^0.6.0",
|
|
63
63
|
"@wallet-standard/base": "^1.1.0"
|
|
64
64
|
},
|