@dynamic-labs-sdk/solana 1.12.2 → 1.13.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/dist/addSolanaExtension/addSolanaExtension.d.ts +1 -1
- package/dist/{addSolanaWalletStandardExtension-D0L0embm.cjs → addSolanaWalletStandardExtension-BzDR-mwZ.cjs} +5 -5
- package/dist/addSolanaWalletStandardExtension-BzDR-mwZ.cjs.map +1 -0
- package/dist/{addSolanaWalletStandardExtension-BppplF4g.esm.js → addSolanaWalletStandardExtension-muBD0CqA.esm.js} +5 -5
- package/dist/addSolanaWalletStandardExtension-muBD0CqA.esm.js.map +1 -0
- package/dist/{addWaasSolanaExtension-DvnScy5_.cjs → addWaasSolanaExtension-B3cnE1Do.cjs} +5 -5
- package/dist/addWaasSolanaExtension-B3cnE1Do.cjs.map +1 -0
- package/dist/{addWaasSolanaExtension-CkxAujBp.esm.js → addWaasSolanaExtension-CfpS9qA-.esm.js} +5 -5
- package/dist/addWaasSolanaExtension-CfpS9qA-.esm.js.map +1 -0
- package/dist/{assertBufferAvailable-D8lcGtyy.cjs → assertBufferAvailable-BPIt9Mmr.cjs} +2 -2
- package/dist/{assertBufferAvailable-D8lcGtyy.cjs.map → assertBufferAvailable-BPIt9Mmr.cjs.map} +1 -1
- package/dist/{assertBufferAvailable-DEfVz5ER.esm.js → assertBufferAvailable-b4xOlERy.esm.js} +2 -2
- package/dist/{assertBufferAvailable-DEfVz5ER.esm.js.map → assertBufferAvailable-b4xOlERy.esm.js.map} +1 -1
- package/dist/{createWalletProviderFromSolanaStandardWallet-_N2BYMk7.esm.js → createWalletProviderFromSolanaStandardWallet-C2uts_PR.esm.js} +5 -5
- package/dist/createWalletProviderFromSolanaStandardWallet-C2uts_PR.esm.js.map +1 -0
- package/dist/{createWalletProviderFromSolanaStandardWallet-lbccaY-g.cjs → createWalletProviderFromSolanaStandardWallet-CU-6Z8Sx.cjs} +5 -5
- package/dist/createWalletProviderFromSolanaStandardWallet-CU-6Z8Sx.cjs.map +1 -0
- package/dist/getSolanaConnection/getSolanaConnection.d.ts +1 -1
- package/dist/index.cjs +25 -25
- package/dist/index.cjs.map +1 -1
- package/dist/index.esm.js +25 -25
- package/dist/index.esm.js.map +1 -1
- package/dist/isSolanaGasSponsorshipEnabled/isSolanaGasSponsorshipEnabled.d.ts +1 -1
- package/dist/isSolanaNetworkProvider/isSolanaNetworkProvider.d.ts +1 -1
- package/dist/isSolanaWalletAccount/isSolanaWalletAccount.d.ts +1 -1
- package/dist/isSolanaWalletProvider/isSolanaWalletProvider.d.ts +1 -1
- package/dist/isSolanaWalletProvider/isSolanaWalletProvider.d.ts.map +1 -1
- package/dist/metamask/connectAndVerifyWithMetaMaskUriSolana/connectAndVerifyWithMetaMaskUriSolana.d.ts +1 -1
- package/dist/metamask/connectWithMetaMaskUriSolana/connectWithMetaMaskUriSolana.d.ts +1 -1
- package/dist/metamask/createMetaMaskSolanaWalletProvider/createMetaMaskSolanaWalletProvider.d.ts +1 -1
- package/dist/metamask/getMetaMaskSolanaExtensionWalletProviderKey/getMetaMaskSolanaExtensionWalletProviderKey.d.ts +1 -1
- package/dist/metamask/utils/createMetaMaskSolanaController/createMetaMaskSolanaController.d.ts +1 -1
- package/dist/metamask/utils/getOrCreateMetaMaskSolanaController/getOrCreateMetaMaskSolanaController.d.ts +1 -1
- package/dist/metamask/utils/getSolanaNetworkFromCluster/getSolanaNetworkFromCluster.d.ts +1 -1
- package/dist/metamask/utils/getSupportedNetworks/getSupportedNetworks.d.ts +1 -1
- package/dist/metamask.cjs +10 -10
- package/dist/metamask.cjs.map +1 -1
- package/dist/metamask.esm.js +10 -10
- package/dist/metamask.esm.js.map +1 -1
- package/dist/phantomRedirect/addPhantomRedirectSolanaExtension/addPhantomRedirectSolanaExtension.d.ts +1 -1
- package/dist/phantomRedirect/completePhantomRedirect/completePhantomRedirect.d.ts +1 -1
- package/dist/phantomRedirect/createPhantomRedirectWalletProvider/createPhantomRedirectWalletProvider.d.ts +1 -1
- package/dist/phantomRedirect/detectPhantomRedirect/detectPhantomRedirect.d.ts +1 -1
- package/dist/phantomRedirect/utils/broadcastPhantomEvent/broadcastPhantomEvent.d.ts +1 -1
- package/dist/phantomRedirect/utils/buildPhantomDeepLink/buildPhantomDeepLink.d.ts +1 -1
- package/dist/phantomRedirect/utils/cleanPhantomParamsFromUrl/cleanPhantomParamsFromUrl.d.ts +1 -1
- package/dist/phantomRedirect/utils/crypto/createNaClSharedSecret/createNaClSharedSecret.d.ts +1 -1
- package/dist/phantomRedirect/utils/crypto/decryptPayload/decryptPayload.d.ts +1 -1
- package/dist/phantomRedirect/utils/crypto/encryptPayload/encryptPayload.d.ts +1 -1
- package/dist/phantomRedirect/utils/crypto/generateNaClKeyPair/generateNaClKeyPair.d.ts +1 -1
- package/dist/phantomRedirect/utils/getPhantomCluster/getPhantomCluster.d.ts +1 -1
- package/dist/phantomRedirect/utils/listenForPhantomBroadcast/listenForPhantomBroadcast.d.ts +1 -1
- package/dist/phantomRedirect/utils/parsePhantomRedirectParams/parsePhantomRedirectParams.d.ts +1 -1
- package/dist/registerSolanaNetworkProviderBuilder/registerSolanaNetworkProviderBuilder.d.ts +1 -1
- package/dist/registerSolanaNetworkProviderBuilder/registerSolanaNetworkProviderBuilder.d.ts.map +1 -1
- package/dist/signAllTransactions/signAllTransactions.d.ts +1 -1
- package/dist/signAndSendSponsoredTransaction/signAndSendSponsoredTransaction.d.ts +1 -1
- package/dist/signAndSendTransaction/signAndSendTransaction.d.ts +1 -1
- package/dist/signTransaction/signTransaction.d.ts +1 -1
- package/dist/simulateSolanaTransaction/simulateSolanaTransaction.d.ts +1 -1
- package/dist/{solanaTransferAmount-Dfqvk7NH.cjs → solanaTransferAmount-ABi6gq_z.cjs} +14 -14
- package/dist/solanaTransferAmount-ABi6gq_z.cjs.map +1 -0
- package/dist/{solanaTransferAmount-BqExL4wh.esm.js → solanaTransferAmount-oEHHu9WL.esm.js} +14 -14
- package/dist/solanaTransferAmount-oEHHu9WL.esm.js.map +1 -0
- package/dist/tsconfig.lib.tsbuildinfo +1 -1
- package/dist/utils/assertBufferAvailable/assertBufferAvailable.d.ts +1 -1
- package/dist/utils/calculateSolanaTransactionFee/calculateSolanaTransactionFee.d.ts +1 -1
- package/dist/utils/createSolanaNetworkProvider/createSolanaNetworkProvider.d.ts +1 -1
- package/dist/utils/createSolanaNetworkProvider/createSolanaNetworkProvider.d.ts.map +1 -1
- package/dist/utils/fetchSolBalance/fetchSolBalance.d.ts +1 -1
- package/dist/utils/fetchSolBalance/fetchSolBalance.d.ts.map +1 -1
- package/dist/utils/isVersionedTransaction/isVersionedTransaction.d.ts +1 -1
- package/dist/utils/isVersionedTransaction/isVersionedTransaction.d.ts.map +1 -1
- package/dist/utils/solanaConfirmTransaction/solanaConfirmTransaction.d.ts +1 -1
- package/dist/utils/solanaExecuteSwapTransaction/solanaExecuteSwapTransaction.d.ts +1 -1
- package/dist/utils/solanaTransferAmount/solanaTransferAmount.d.ts +1 -1
- package/dist/waas/addWaasSolanaExtension/addWaasSolanaExtension.d.ts +1 -1
- package/dist/waas/utils/createWalletProviderForWaasSolana/createWalletProviderForWaasSolana.d.ts +1 -1
- package/dist/waas/utils/createWalletProviderForWaasSolana/createWalletProviderForWaasSolana.d.ts.map +1 -1
- package/dist/waas/utils/sponsorTransaction/sponsorTransaction.d.ts +1 -1
- package/dist/waas.cjs +2 -2
- package/dist/waas.esm.js +2 -2
- package/dist/walletConnect/addWalletConnectSolanaExtension/addWalletConnectSolanaExtension.d.ts +1 -1
- package/dist/walletConnect/addWalletConnectSolanaExtension/addWalletConnectSolanaExtension.d.ts.map +1 -1
- package/dist/walletConnect/connectAndVerifyWithWalletConnectSolana/connectAndVerifyWithWalletConnectSolana.d.ts +1 -1
- package/dist/walletConnect/connectWithWalletConnectSolana/connectWithWalletConnectSolana.d.ts +1 -1
- package/dist/walletConnect/connectWithWalletConnectSolana/connectWithWalletConnectSolana.d.ts.map +1 -1
- package/dist/walletConnect/createWalletProviderFromWalletConnectSolanaSession/createWalletProviderFromWalletConnectSolanaSession.d.ts +1 -1
- package/dist/walletConnect/createWalletProviderFromWalletConnectSolanaSession/createWalletProviderFromWalletConnectSolanaSession.d.ts.map +1 -1
- package/dist/walletConnect/recoverSolanaWalletConnectWalletProviders/recoverSolanaWalletConnectWalletProviders.d.ts +1 -1
- package/dist/walletConnect/recoverSolanaWalletConnectWalletProviders/recoverSolanaWalletConnectWalletProviders.d.ts.map +1 -1
- package/dist/walletConnect.cjs +7 -7
- package/dist/walletConnect.cjs.map +1 -1
- package/dist/walletConnect.esm.js +7 -7
- package/dist/walletConnect.esm.js.map +1 -1
- package/dist/walletStandard/addSolanaWalletStandardExtension/addSolanaWalletStandardExtension.d.ts +1 -1
- package/dist/walletStandard/utils/createWalletProviderFromSolanaStandardWallet/createWalletProviderFromSolanaStandardWallet.d.ts +1 -1
- package/dist/walletStandard/utils/createWalletProviderFromSolanaStandardWallet/createWalletProviderFromSolanaStandardWallet.d.ts.map +1 -1
- package/dist/walletStandard/utils/createWalletProviderFromSolanaStandardWallet/getActiveNetworkId/getActiveNetworkId.d.ts +1 -1
- package/dist/walletStandard/utils/createWalletProviderFromSolanaStandardWallet/getActiveNetworkId/getActiveNetworkId.d.ts.map +1 -1
- package/dist/walletStandard/utils/getActiveNetworkCluster/getActiveNetworkCluster.d.ts +1 -1
- package/dist/walletStandard/utils/getActiveNetworkCluster/getActiveNetworkCluster.d.ts.map +1 -1
- package/dist/walletStandard/utils/getFeaturesForSolanaStandardWallet/getFeaturesForSolanaStandardWallet.d.ts +1 -1
- package/dist/walletStandard/utils/getFeaturesForSolanaStandardWallet/getFeaturesForSolanaStandardWallet.d.ts.map +1 -1
- package/dist/walletStandard/utils/hasAllRequiredFeatures/hasAllRequiredFeatures.d.ts +1 -1
- package/dist/walletStandard/utils/hasAllRequiredFeatures/hasAllRequiredFeatures.d.ts.map +1 -1
- package/dist/walletStandard.cjs +3 -3
- package/dist/walletStandard.esm.js +3 -3
- package/package.json +5 -5
- package/dist/addSolanaWalletStandardExtension-BppplF4g.esm.js.map +0 -1
- package/dist/addSolanaWalletStandardExtension-D0L0embm.cjs.map +0 -1
- package/dist/addWaasSolanaExtension-CkxAujBp.esm.js.map +0 -1
- package/dist/addWaasSolanaExtension-DvnScy5_.cjs.map +0 -1
- package/dist/createWalletProviderFromSolanaStandardWallet-_N2BYMk7.esm.js.map +0 -1
- package/dist/createWalletProviderFromSolanaStandardWallet-lbccaY-g.cjs.map +0 -1
- package/dist/solanaTransferAmount-BqExL4wh.esm.js.map +0 -1
- package/dist/solanaTransferAmount-Dfqvk7NH.cjs.map +0 -1
|
@@ -6,11 +6,11 @@ let _solana_spl_token = require("@solana/spl-token");
|
|
|
6
6
|
|
|
7
7
|
//#region package.json
|
|
8
8
|
var name = "@dynamic-labs-sdk/solana";
|
|
9
|
-
var version = "1.
|
|
9
|
+
var version = "1.13.0";
|
|
10
10
|
|
|
11
11
|
//#endregion
|
|
12
12
|
//#region src/utils/fetchSolBalance/fetchSolBalance.ts
|
|
13
|
-
/** @
|
|
13
|
+
/** @notInstrumented */
|
|
14
14
|
const fetchSolBalance = async ({ address, networkData }) => {
|
|
15
15
|
const connection = new _solana_web3_js.Connection(networkData.rpcUrls.http[0]);
|
|
16
16
|
const publicKey = new _solana_web3_js.PublicKey(address);
|
|
@@ -19,7 +19,7 @@ const fetchSolBalance = async ({ address, networkData }) => {
|
|
|
19
19
|
|
|
20
20
|
//#endregion
|
|
21
21
|
//#region src/utils/createSolanaNetworkProvider/createSolanaNetworkProvider.ts
|
|
22
|
-
/** @
|
|
22
|
+
/** @notInstrumented */
|
|
23
23
|
const createSolanaNetworkProvider = (networkData) => ({
|
|
24
24
|
...(0, _dynamic_labs_sdk_client_core.createBaseNetworkProvider)("SOL", networkData),
|
|
25
25
|
cluster: networkData.cluster,
|
|
@@ -32,7 +32,7 @@ const createSolanaNetworkProvider = (networkData) => ({
|
|
|
32
32
|
|
|
33
33
|
//#endregion
|
|
34
34
|
//#region src/registerSolanaNetworkProviderBuilder/registerSolanaNetworkProviderBuilder.ts
|
|
35
|
-
/** @
|
|
35
|
+
/** @notInstrumented */
|
|
36
36
|
const registerSolanaNetworkProviderBuilder = (client) => {
|
|
37
37
|
const networkProviderBuilderRegistry = (0, _dynamic_labs_sdk_client_core.getNetworkProviderBuilderRegistry)(client);
|
|
38
38
|
/**
|
|
@@ -65,7 +65,7 @@ const registerSolanaNetworkProviderBuilder = (client) => {
|
|
|
65
65
|
* networkData,
|
|
66
66
|
* });
|
|
67
67
|
* ```
|
|
68
|
-
* @
|
|
68
|
+
* @notInstrumented
|
|
69
69
|
*/
|
|
70
70
|
const getSolanaConnection = ({ networkData, commitmentOrConfig }) => {
|
|
71
71
|
return new _solana_web3_js.Connection(networkData.rpcUrls.http[0], commitmentOrConfig);
|
|
@@ -73,7 +73,7 @@ const getSolanaConnection = ({ networkData, commitmentOrConfig }) => {
|
|
|
73
73
|
|
|
74
74
|
//#endregion
|
|
75
75
|
//#region src/utils/isVersionedTransaction/isVersionedTransaction.ts
|
|
76
|
-
/** @
|
|
76
|
+
/** @notInstrumented */
|
|
77
77
|
const isVersionedTransaction = (transaction) => !("instructions" in transaction);
|
|
78
78
|
|
|
79
79
|
//#endregion
|
|
@@ -83,7 +83,7 @@ const isVersionedTransaction = (transaction) => !("instructions" in transaction)
|
|
|
83
83
|
*
|
|
84
84
|
* @param walletAccount - The wallet account to check.
|
|
85
85
|
* @returns True if the wallet account is a Solana wallet account, false otherwise.
|
|
86
|
-
* @
|
|
86
|
+
* @notInstrumented
|
|
87
87
|
*/
|
|
88
88
|
const isSolanaWalletAccount = (walletAccount) => walletAccount.chain === "SOL";
|
|
89
89
|
|
|
@@ -95,7 +95,7 @@ const isSolanaWalletAccount = (walletAccount) => walletAccount.chain === "SOL";
|
|
|
95
95
|
* @param params.transactionHash - The transaction signature to wait for.
|
|
96
96
|
* @param params.walletAccount - The Solana wallet account used to resolve the active network.
|
|
97
97
|
* @param client - The Dynamic client instance.
|
|
98
|
-
* @
|
|
98
|
+
* @notInstrumented
|
|
99
99
|
*/
|
|
100
100
|
const solanaConfirmTransaction = async ({ transactionHash, walletAccount }, client) => {
|
|
101
101
|
if (!isSolanaWalletAccount(walletAccount)) throw new _dynamic_labs_sdk_client.InvalidParamError("Wallet account is not a Solana wallet account");
|
|
@@ -112,7 +112,7 @@ const solanaConfirmTransaction = async ({ transactionHash, walletAccount }, clie
|
|
|
112
112
|
|
|
113
113
|
//#endregion
|
|
114
114
|
//#region src/isSolanaWalletProvider/isSolanaWalletProvider.ts
|
|
115
|
-
/** @
|
|
115
|
+
/** @notInstrumented */
|
|
116
116
|
const isSolanaWalletProvider = (provider) => {
|
|
117
117
|
return provider.chain === "SOL";
|
|
118
118
|
};
|
|
@@ -140,7 +140,7 @@ var NotSolanaProviderError = class extends _dynamic_labs_sdk_client.BaseError {
|
|
|
140
140
|
*
|
|
141
141
|
* @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.
|
|
142
142
|
* @returns True if Solana gas sponsorship is enabled, false otherwise.
|
|
143
|
-
* @
|
|
143
|
+
* @notInstrumented
|
|
144
144
|
*/
|
|
145
145
|
const isSolanaGasSponsorshipEnabled = (client = (0, _dynamic_labs_sdk_client.getDefaultClient)()) => {
|
|
146
146
|
(0, _dynamic_labs_sdk_client_core.assertDefined)(client.projectSettings, "Project settings are not defined");
|
|
@@ -162,7 +162,7 @@ const isSolanaGasSponsorshipEnabled = (client = (0, _dynamic_labs_sdk_client.get
|
|
|
162
162
|
* @param params.walletAccount - The wallet account to sign and send the transaction with
|
|
163
163
|
* @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.
|
|
164
164
|
* @returns An object containing the signature
|
|
165
|
-
* @
|
|
165
|
+
* @notInstrumented
|
|
166
166
|
*/
|
|
167
167
|
const signAndSendTransaction = async ({ walletAccount, transaction, sponsorshipMode = "auto", options }, client = (0, _dynamic_labs_sdk_client.getDefaultClient)()) => {
|
|
168
168
|
const provider = (0, _dynamic_labs_sdk_client_core.getWalletProviderFromWalletAccount)({ walletAccount }, client);
|
|
@@ -197,7 +197,7 @@ const signAndSendTransaction = async ({ walletAccount, transaction, sponsorshipM
|
|
|
197
197
|
* @param params.sponsorshipMode - `'auto'` (default) sponsors when eligible; `'off'` never sponsors.
|
|
198
198
|
* @param client - The Dynamic client instance.
|
|
199
199
|
* @returns The transaction hash (signature).
|
|
200
|
-
* @
|
|
200
|
+
* @notInstrumented
|
|
201
201
|
*/
|
|
202
202
|
const solanaExecuteSwapTransaction = async ({ onStepChange, signingPayload, sponsorshipMode = "auto", walletAccount }, client) => {
|
|
203
203
|
const walletProvider = (0, _dynamic_labs_sdk_client_core.getWalletProviderFromWalletAccount)({ walletAccount }, client);
|
|
@@ -230,7 +230,7 @@ const DEFAULT_DECIMALS = 9;
|
|
|
230
230
|
* For SPL tokens, derives associated token accounts, creates the recipient
|
|
231
231
|
* ATA if needed, and builds a `transferChecked` instruction. Supports both
|
|
232
232
|
* standard SPL tokens and Token-2022 tokens by detecting the mint's program.
|
|
233
|
-
* @
|
|
233
|
+
* @notInstrumented
|
|
234
234
|
*/
|
|
235
235
|
const solanaTransferAmount = async ({ amount, recipient, token, walletAccount }, client) => {
|
|
236
236
|
if (!isSolanaWalletAccount(walletAccount)) throw new _dynamic_labs_sdk_client.InvalidParamError("Wallet account is not a Solana wallet account");
|
|
@@ -355,4 +355,4 @@ Object.defineProperty(exports, 'version', {
|
|
|
355
355
|
return version;
|
|
356
356
|
}
|
|
357
357
|
});
|
|
358
|
-
//# sourceMappingURL=solanaTransferAmount-
|
|
358
|
+
//# sourceMappingURL=solanaTransferAmount-ABi6gq_z.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"solanaTransferAmount-ABi6gq_z.cjs","names":["Connection","PublicKey","Connection","InvalidParamError","BaseError","InvalidParamError","transaction: Transaction | VersionedTransaction","VersionedTransaction","Transaction","InvalidParamError","PublicKey","instructions: TransactionInstruction[]","TOKEN_2022_PROGRAM_ID","TOKEN_PROGRAM_ID","SystemProgram","VersionedTransaction","TransactionMessage"],"sources":["../package.json","../src/utils/fetchSolBalance/fetchSolBalance.ts","../src/utils/createSolanaNetworkProvider/createSolanaNetworkProvider.ts","../src/registerSolanaNetworkProviderBuilder/registerSolanaNetworkProviderBuilder.ts","../src/getSolanaConnection/getSolanaConnection.ts","../src/utils/isVersionedTransaction/isVersionedTransaction.ts","../src/isSolanaWalletAccount/isSolanaWalletAccount.ts","../src/utils/solanaConfirmTransaction/solanaConfirmTransaction.ts","../src/isSolanaWalletProvider/isSolanaWalletProvider.ts","../src/errors/NotSolanaProviderError/NotSolanaProviderError.ts","../src/isSolanaGasSponsorshipEnabled/isSolanaGasSponsorshipEnabled.ts","../src/signAndSendTransaction/signAndSendTransaction.ts","../src/utils/solanaExecuteSwapTransaction/solanaExecuteSwapTransaction.ts","../src/utils/solanaTransferAmount/solanaTransferAmount.ts"],"sourcesContent":["","import type { NetworkData } from '@dynamic-labs-sdk/client';\nimport { Connection, PublicKey } from '@solana/web3.js';\n\n/** @notInstrumented */\nexport const fetchSolBalance = async ({\n address,\n networkData,\n}: {\n address: string;\n networkData: NetworkData;\n}): Promise<string | null> => {\n // Establish a connection to the Solana network using the provided RPC URL.\n const connection = new Connection(networkData.rpcUrls.http[0]);\n\n // Convert the string address into a PublicKey object.\n const publicKey = new PublicKey(address);\n\n // Fetch the balance of the public key. The balance is in lamports.\n const balanceInLamports = await connection.getBalance(publicKey);\n\n // The getBalance method returns the balance in lamports.\n // 1 SOL = 1,000,000,000 lamports.\n const balanceInSol = balanceInLamports / 1_000_000_000;\n\n // Return the balance in SOL as a string\n return balanceInSol.toString();\n};\n","import type { NetworkData } from '@dynamic-labs-sdk/client';\nimport { createBaseNetworkProvider } from '@dynamic-labs-sdk/client/core';\n\nimport type { SolanaNetworkProvider } from '../../SolanaNetworkProvider.types';\nimport { fetchSolBalance } from '../fetchSolBalance';\n\n/** @notInstrumented */\nexport const createSolanaNetworkProvider = (\n networkData: NetworkData\n): SolanaNetworkProvider => ({\n ...createBaseNetworkProvider('SOL', networkData),\n cluster: networkData.cluster,\n genesisHash: networkData.genesisHash,\n getBalance: async ({ address }) => ({\n balance: await fetchSolBalance({\n address,\n networkData,\n }),\n }),\n});\n","import type { DynamicClient } from '@dynamic-labs-sdk/client';\nimport { getNetworkProviderBuilderRegistry } from '@dynamic-labs-sdk/client/core';\n\nimport { createSolanaNetworkProvider } from '../utils/createSolanaNetworkProvider';\n\n/** @notInstrumented */\nexport const registerSolanaNetworkProviderBuilder = (\n client: DynamicClient\n): void => {\n const networkProviderBuilderRegistry =\n getNetworkProviderBuilderRegistry(client);\n\n /**\n * If the Solana network provider builder is already registered, return.\n */\n if (networkProviderBuilderRegistry.get().get('SOL')) {\n return;\n }\n\n networkProviderBuilderRegistry.register({\n builder: createSolanaNetworkProvider,\n chain: 'SOL',\n });\n};\n","import type { NetworkData } from '@dynamic-labs-sdk/client';\nimport type { Commitment, ConnectionConfig } from '@solana/web3.js';\nimport { Connection } from '@solana/web3.js';\n\ntype GetSolanaConnectionOptions = {\n commitmentOrConfig?: Commitment | ConnectionConfig;\n networkData: NetworkData;\n};\n\n/**\n * Returns a new Solana connection for the given network provider.\n *\n * @example\n * ```ts\n * import { getActiveNetworkData } from '@dynamic-labs-sdk/client';\n * import { isSolanaNetworkProvider, getSolanaConnection } from '@dynamic-labs-sdk/solana';\n *\n * const { networkData } = getActiveNetworkData({ walletAccount });\n *\n * if(!networkData) {\n * throw new Error('No network data found');\n * }\n *\n * const connection = getSolanaConnection({\n * networkData,\n * });\n * ```\n * @notInstrumented\n */\nexport const getSolanaConnection = ({\n networkData,\n commitmentOrConfig,\n}: GetSolanaConnectionOptions) => {\n return new Connection(networkData.rpcUrls.http[0], commitmentOrConfig);\n};\n","import type { Transaction, VersionedTransaction } from '@solana/web3.js';\n\n/** @notInstrumented */\nexport const isVersionedTransaction = (\n transaction: VersionedTransaction | Transaction\n): transaction is VersionedTransaction => !('instructions' in transaction);\n","import type { WalletAccount } from '@dynamic-labs-sdk/client';\n\nimport type { SolanaWalletAccount } from '../SolanaWalletAccount.types';\n\n/**\n * Type guard function to check if a wallet account is a Solana wallet account.\n *\n * @param walletAccount - The wallet account to check.\n * @returns True if the wallet account is a Solana wallet account, false otherwise.\n * @notInstrumented\n */\nexport const isSolanaWalletAccount = (\n walletAccount: WalletAccount\n): walletAccount is SolanaWalletAccount => walletAccount.chain === 'SOL';\n","import {\n type DynamicClient,\n InvalidParamError,\n getActiveNetworkData,\n} from '@dynamic-labs-sdk/client';\nimport type { ConfirmTransactionParams } from '@dynamic-labs-sdk/client/core';\nimport { assertDefined } from '@dynamic-labs-sdk/client/core';\n\nimport { getSolanaConnection } from '../../getSolanaConnection';\nimport { isSolanaWalletAccount } from '../../isSolanaWalletAccount';\n\n/**\n * Waits for a Solana transaction to be confirmed on-chain.\n *\n * @param params.transactionHash - The transaction signature to wait for.\n * @param params.walletAccount - The Solana wallet account used to resolve the active network.\n * @param client - The Dynamic client instance.\n * @notInstrumented\n */\nexport const solanaConfirmTransaction = async (\n { transactionHash, walletAccount }: ConfirmTransactionParams,\n client: DynamicClient\n): Promise<void> => {\n if (!isSolanaWalletAccount(walletAccount)) {\n throw new InvalidParamError(\n 'Wallet account is not a Solana wallet account'\n );\n }\n\n const { networkData } = await getActiveNetworkData({ walletAccount }, client);\n\n assertDefined(\n networkData,\n `No network data found for wallet account ${walletAccount.address}`\n );\n\n const connection = getSolanaConnection({ networkData });\n\n const { blockhash, lastValidBlockHeight } =\n await connection.getLatestBlockhash();\n\n await connection.confirmTransaction({\n blockhash,\n lastValidBlockHeight,\n signature: transactionHash,\n });\n};\n","import type { WalletProvider } from '@dynamic-labs-sdk/client/core';\n\nimport type { SolanaWalletProvider } from '../SolanaWalletProvider.types';\n\n/** @notInstrumented */\nexport const isSolanaWalletProvider = (\n provider: WalletProvider\n): provider is SolanaWalletProvider => {\n return provider.chain === 'SOL';\n};\n","import { BaseError } from '@dynamic-labs-sdk/client';\n\nexport class NotSolanaProviderError extends BaseError {\n public readonly providerKey: string;\n\n constructor(params: { providerKey: string }) {\n super({\n cause: null,\n code: 'not_solana_provider_error',\n docsUrl: null,\n name: 'NotSolanaProviderError',\n shortMessage: 'Provider is not a Solana wallet provider',\n });\n\n this.providerKey = params.providerKey;\n }\n}\n","import { getDefaultClient } from '@dynamic-labs-sdk/client';\nimport { assertDefined } from '@dynamic-labs-sdk/client/core';\n\n/**\n * Checks if Solana gas sponsorship is enabled for the current project.\n *\n * @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.\n * @returns True if Solana gas sponsorship is enabled, false otherwise.\n * @notInstrumented\n */\nexport const isSolanaGasSponsorshipEnabled = (\n client = getDefaultClient()\n): boolean => {\n assertDefined(client.projectSettings, 'Project settings are not defined');\n\n return (\n client.projectSettings.sdk.embeddedWallets?.svmGasSponsorshipEnabled ??\n false\n );\n};\n","import { getDefaultClient } from '@dynamic-labs-sdk/client';\nimport { getWalletProviderFromWalletAccount } from '@dynamic-labs-sdk/client/core';\nimport type {\n SendOptions,\n Transaction,\n VersionedTransaction,\n} from '@solana/web3.js';\n\nimport type { SolanaWalletAccount } from '../SolanaWalletAccount.types';\nimport { NotSolanaProviderError } from '../errors/NotSolanaProviderError';\nimport { isSolanaGasSponsorshipEnabled } from '../isSolanaGasSponsorshipEnabled';\nimport { isSolanaWalletProvider } from '../isSolanaWalletProvider';\n\ntype SignAndSendTransactionParams = {\n options?: SendOptions;\n /**\n * Controls whether Dynamic's gas sponsorship API is used to pay for this\n * transaction.\n *\n * - `'auto'` (default): the transaction is sponsored when Solana gas\n * sponsorship is enabled in project settings AND the walletAccount is a\n * Dynamic embedded wallet. Otherwise the user pays gas.\n * - `'off'`: the transaction is never sponsored, regardless of project\n * settings or provider capabilities. The user pays gas.\n *\n * To require sponsorship (and throw if unsupported), use\n * `signAndSendSponsoredTransaction` instead.\n *\n * @default 'auto'\n */\n sponsorshipMode?: 'auto' | 'off';\n transaction: Transaction | VersionedTransaction;\n walletAccount: SolanaWalletAccount;\n};\n\n/**\n * Signs and sends a Solana transaction, honoring the project's Solana gas\n * sponsorship setting.\n *\n * When solana gas sponsorship is enabled in project settings and sponsorship\n * is supported by the wallet provider, the transaction is routed through\n * Dynamic's gas sponsorship API.\n * Otherwise it falls back to the provider's standard `signAndSendTransaction`.\n *\n * @param params.transaction - The transaction to sign and send\n * @param params.walletAccount - The wallet account to sign and send the transaction with\n * @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.\n * @returns An object containing the signature\n * @notInstrumented\n */\nexport const signAndSendTransaction = async (\n {\n walletAccount,\n transaction,\n sponsorshipMode = 'auto',\n options,\n }: SignAndSendTransactionParams,\n client = getDefaultClient()\n): Promise<{ signature: string }> => {\n const provider = getWalletProviderFromWalletAccount(\n {\n walletAccount,\n },\n client\n );\n\n if (!isSolanaWalletProvider(provider)) {\n throw new NotSolanaProviderError({ providerKey: provider.key });\n }\n\n if (\n sponsorshipMode === 'auto' &&\n isSolanaGasSponsorshipEnabled(client) &&\n provider.signAndSendSponsoredTransaction\n ) {\n return provider.signAndSendSponsoredTransaction({\n options,\n transaction,\n walletAccount,\n });\n }\n\n return provider.signAndSendTransaction({\n options,\n transaction,\n walletAccount,\n });\n};\n","import {\n type DynamicClient,\n InvalidParamError,\n} from '@dynamic-labs-sdk/client';\nimport type {\n ExecuteSwapTransactionParams,\n ExecuteSwapTransactionResult,\n} from '@dynamic-labs-sdk/client/core';\nimport {\n getBuffer,\n getWalletProviderFromWalletAccount,\n} from '@dynamic-labs-sdk/client/core';\nimport { Transaction, VersionedTransaction } from '@solana/web3.js';\n\nimport { isSolanaWalletAccount } from '../../isSolanaWalletAccount';\nimport { isSolanaWalletProvider } from '../../isSolanaWalletProvider';\nimport { signAndSendTransaction } from '../../signAndSendTransaction';\n\n/**\n * Executes a Solana checkout transaction by deserializing the base64-encoded\n * transaction and routing it through `signAndSendTransaction`, which applies\n * the project's gas sponsorship setting when enabled.\n *\n * 1. Validates that the wallet account is a Solana wallet account\n * 2. Extracts and validates the serialized transaction from the signing payload\n * 3. Deserializes the transaction (tries VersionedTransaction first, falls back to Transaction)\n * 4. Signs and sends via `signAndSendTransaction` (sponsored when project settings opt in)\n *\n * @param params.signingPayload - The signing payload containing `serializedTransaction`.\n * @param params.walletAccount - The wallet account used to sign and send the transaction.\n * @param params.onStepChange - Optional callback invoked with `'transaction'` when the send step begins.\n * @param params.sponsorshipMode - `'auto'` (default) sponsors when eligible; `'off'` never sponsors.\n * @param client - The Dynamic client instance.\n * @returns The transaction hash (signature).\n * @notInstrumented\n */\nexport const solanaExecuteSwapTransaction = async (\n {\n onStepChange,\n signingPayload,\n sponsorshipMode = 'auto',\n walletAccount,\n }: ExecuteSwapTransactionParams,\n client: DynamicClient\n): Promise<ExecuteSwapTransactionResult> => {\n const walletProvider = getWalletProviderFromWalletAccount(\n { walletAccount },\n client\n );\n\n if (\n !isSolanaWalletAccount(walletAccount) ||\n !isSolanaWalletProvider(walletProvider)\n ) {\n throw new InvalidParamError(\n 'Wallet account is not a Solana wallet account'\n );\n }\n\n const serializedTransactionData = signingPayload.serializedTransaction;\n\n if (!serializedTransactionData) {\n throw new InvalidParamError(\n 'Signing payload is missing serialized transaction data'\n );\n }\n\n const bytes = new Uint8Array(\n getBuffer().from(serializedTransactionData, 'base64')\n );\n\n let transaction: Transaction | VersionedTransaction;\n\n // Try VersionedTransaction first, fall back to legacy Transaction\n try {\n transaction = VersionedTransaction.deserialize(bytes);\n } catch {\n transaction = Transaction.from(bytes);\n }\n\n onStepChange?.('transaction');\n\n const { signature } = await signAndSendTransaction(\n {\n sponsorshipMode,\n transaction,\n walletAccount,\n },\n client\n );\n\n return { transactionHash: signature };\n};\n","import {\n type DynamicClient,\n InvalidParamError,\n getActiveNetworkData,\n} from '@dynamic-labs-sdk/client';\nimport type { TransferAmountParams } from '@dynamic-labs-sdk/client/core';\nimport {\n assertDefined,\n getWalletProviderFromWalletAccount,\n parseAmountToSmallestUnit,\n} from '@dynamic-labs-sdk/client/core';\nimport {\n TOKEN_2022_PROGRAM_ID,\n TOKEN_PROGRAM_ID,\n createAssociatedTokenAccountInstruction,\n createTransferCheckedInstruction,\n getAssociatedTokenAddress,\n} from '@solana/spl-token';\nimport type { TransactionInstruction } from '@solana/web3.js';\nimport {\n PublicKey,\n SystemProgram,\n TransactionMessage,\n VersionedTransaction,\n} from '@solana/web3.js';\n\nimport { NotSolanaProviderError } from '../../errors/NotSolanaProviderError';\nimport { getSolanaConnection } from '../../getSolanaConnection';\nimport { isSolanaWalletAccount } from '../../isSolanaWalletAccount';\nimport { isSolanaWalletProvider } from '../../isSolanaWalletProvider';\nimport { signAndSendTransaction } from '../../signAndSendTransaction';\nconst DEFAULT_DECIMALS = 9;\n\n/**\n * Transfers native SOL or SPL tokens from one wallet to another.\n *\n * For native SOL, builds a `SystemProgram.transfer` instruction.\n * For SPL tokens, derives associated token accounts, creates the recipient\n * ATA if needed, and builds a `transferChecked` instruction. Supports both\n * standard SPL tokens and Token-2022 tokens by detecting the mint's program.\n * @notInstrumented\n */\nexport const solanaTransferAmount = async (\n { amount, recipient, token, walletAccount }: TransferAmountParams,\n client: DynamicClient\n): Promise<{ transactionHash: string }> => {\n if (!isSolanaWalletAccount(walletAccount)) {\n throw new InvalidParamError(\n 'Wallet account is not a Solana wallet account'\n );\n }\n\n const provider = getWalletProviderFromWalletAccount(\n { walletAccount },\n client\n );\n\n if (!isSolanaWalletProvider(provider)) {\n throw new NotSolanaProviderError({ providerKey: provider.key });\n }\n\n const { networkData } = await getActiveNetworkData({ walletAccount }, client);\n assertDefined(networkData, 'Network data is required');\n\n const connection = getSolanaConnection({ networkData });\n\n const fromPubkey = new PublicKey(walletAccount.address);\n const toPubkey = new PublicKey(recipient);\n\n let instructions: TransactionInstruction[];\n\n if (token) {\n const decimals = token.decimals ?? DEFAULT_DECIMALS;\n const mintPubkey = new PublicKey(token.address);\n\n // Detect Token-2022 vs standard SPL by checking mint account owner\n const mintAccountInfo = await connection.getAccountInfo(mintPubkey);\n const tokenProgramId = mintAccountInfo?.owner.equals(TOKEN_2022_PROGRAM_ID)\n ? TOKEN_2022_PROGRAM_ID\n : TOKEN_PROGRAM_ID;\n\n const senderAta = await getAssociatedTokenAddress(\n mintPubkey,\n fromPubkey,\n false,\n tokenProgramId\n );\n\n const recipientAta = await getAssociatedTokenAddress(\n mintPubkey,\n toPubkey,\n false,\n tokenProgramId\n );\n\n const recipientAccountInfo = await connection.getAccountInfo(recipientAta);\n\n const rawAmount = parseAmountToSmallestUnit({ amount, decimals });\n\n instructions = [];\n\n if (!recipientAccountInfo) {\n instructions.push(\n createAssociatedTokenAccountInstruction(\n fromPubkey,\n recipientAta,\n toPubkey,\n mintPubkey,\n tokenProgramId\n )\n );\n }\n\n instructions.push(\n createTransferCheckedInstruction(\n senderAta,\n mintPubkey,\n recipientAta,\n fromPubkey,\n rawAmount,\n decimals,\n [],\n tokenProgramId\n )\n );\n } else {\n instructions = [\n SystemProgram.transfer({\n fromPubkey,\n lamports: parseAmountToSmallestUnit({ amount, decimals: DEFAULT_DECIMALS }),\n toPubkey,\n }),\n ];\n }\n\n const { blockhash } = await connection.getLatestBlockhash('finalized');\n\n const message = new TransactionMessage({\n instructions,\n payerKey: fromPubkey,\n recentBlockhash: blockhash,\n }).compileToV0Message();\n\n const transaction = new VersionedTransaction(message);\n\n const { signature } = await signAndSendTransaction(\n { transaction, walletAccount },\n client\n );\n\n return { transactionHash: signature };\n};\n"],"mappings":"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"}
|
|
@@ -5,11 +5,11 @@ import { TOKEN_2022_PROGRAM_ID, TOKEN_PROGRAM_ID, createAssociatedTokenAccountIn
|
|
|
5
5
|
|
|
6
6
|
//#region package.json
|
|
7
7
|
var name = "@dynamic-labs-sdk/solana";
|
|
8
|
-
var version = "1.
|
|
8
|
+
var version = "1.13.0";
|
|
9
9
|
|
|
10
10
|
//#endregion
|
|
11
11
|
//#region src/utils/fetchSolBalance/fetchSolBalance.ts
|
|
12
|
-
/** @
|
|
12
|
+
/** @notInstrumented */
|
|
13
13
|
const fetchSolBalance = async ({ address, networkData }) => {
|
|
14
14
|
const connection = new Connection(networkData.rpcUrls.http[0]);
|
|
15
15
|
const publicKey = new PublicKey(address);
|
|
@@ -18,7 +18,7 @@ const fetchSolBalance = async ({ address, networkData }) => {
|
|
|
18
18
|
|
|
19
19
|
//#endregion
|
|
20
20
|
//#region src/utils/createSolanaNetworkProvider/createSolanaNetworkProvider.ts
|
|
21
|
-
/** @
|
|
21
|
+
/** @notInstrumented */
|
|
22
22
|
const createSolanaNetworkProvider = (networkData) => ({
|
|
23
23
|
...createBaseNetworkProvider("SOL", networkData),
|
|
24
24
|
cluster: networkData.cluster,
|
|
@@ -31,7 +31,7 @@ const createSolanaNetworkProvider = (networkData) => ({
|
|
|
31
31
|
|
|
32
32
|
//#endregion
|
|
33
33
|
//#region src/registerSolanaNetworkProviderBuilder/registerSolanaNetworkProviderBuilder.ts
|
|
34
|
-
/** @
|
|
34
|
+
/** @notInstrumented */
|
|
35
35
|
const registerSolanaNetworkProviderBuilder = (client) => {
|
|
36
36
|
const networkProviderBuilderRegistry = getNetworkProviderBuilderRegistry(client);
|
|
37
37
|
/**
|
|
@@ -64,7 +64,7 @@ const registerSolanaNetworkProviderBuilder = (client) => {
|
|
|
64
64
|
* networkData,
|
|
65
65
|
* });
|
|
66
66
|
* ```
|
|
67
|
-
* @
|
|
67
|
+
* @notInstrumented
|
|
68
68
|
*/
|
|
69
69
|
const getSolanaConnection = ({ networkData, commitmentOrConfig }) => {
|
|
70
70
|
return new Connection(networkData.rpcUrls.http[0], commitmentOrConfig);
|
|
@@ -72,7 +72,7 @@ const getSolanaConnection = ({ networkData, commitmentOrConfig }) => {
|
|
|
72
72
|
|
|
73
73
|
//#endregion
|
|
74
74
|
//#region src/utils/isVersionedTransaction/isVersionedTransaction.ts
|
|
75
|
-
/** @
|
|
75
|
+
/** @notInstrumented */
|
|
76
76
|
const isVersionedTransaction = (transaction) => !("instructions" in transaction);
|
|
77
77
|
|
|
78
78
|
//#endregion
|
|
@@ -82,7 +82,7 @@ const isVersionedTransaction = (transaction) => !("instructions" in transaction)
|
|
|
82
82
|
*
|
|
83
83
|
* @param walletAccount - The wallet account to check.
|
|
84
84
|
* @returns True if the wallet account is a Solana wallet account, false otherwise.
|
|
85
|
-
* @
|
|
85
|
+
* @notInstrumented
|
|
86
86
|
*/
|
|
87
87
|
const isSolanaWalletAccount = (walletAccount) => walletAccount.chain === "SOL";
|
|
88
88
|
|
|
@@ -94,7 +94,7 @@ const isSolanaWalletAccount = (walletAccount) => walletAccount.chain === "SOL";
|
|
|
94
94
|
* @param params.transactionHash - The transaction signature to wait for.
|
|
95
95
|
* @param params.walletAccount - The Solana wallet account used to resolve the active network.
|
|
96
96
|
* @param client - The Dynamic client instance.
|
|
97
|
-
* @
|
|
97
|
+
* @notInstrumented
|
|
98
98
|
*/
|
|
99
99
|
const solanaConfirmTransaction = async ({ transactionHash, walletAccount }, client) => {
|
|
100
100
|
if (!isSolanaWalletAccount(walletAccount)) throw new InvalidParamError("Wallet account is not a Solana wallet account");
|
|
@@ -111,7 +111,7 @@ const solanaConfirmTransaction = async ({ transactionHash, walletAccount }, clie
|
|
|
111
111
|
|
|
112
112
|
//#endregion
|
|
113
113
|
//#region src/isSolanaWalletProvider/isSolanaWalletProvider.ts
|
|
114
|
-
/** @
|
|
114
|
+
/** @notInstrumented */
|
|
115
115
|
const isSolanaWalletProvider = (provider) => {
|
|
116
116
|
return provider.chain === "SOL";
|
|
117
117
|
};
|
|
@@ -139,7 +139,7 @@ var NotSolanaProviderError = class extends BaseError {
|
|
|
139
139
|
*
|
|
140
140
|
* @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.
|
|
141
141
|
* @returns True if Solana gas sponsorship is enabled, false otherwise.
|
|
142
|
-
* @
|
|
142
|
+
* @notInstrumented
|
|
143
143
|
*/
|
|
144
144
|
const isSolanaGasSponsorshipEnabled = (client = getDefaultClient$1()) => {
|
|
145
145
|
assertDefined(client.projectSettings, "Project settings are not defined");
|
|
@@ -161,7 +161,7 @@ const isSolanaGasSponsorshipEnabled = (client = getDefaultClient$1()) => {
|
|
|
161
161
|
* @param params.walletAccount - The wallet account to sign and send the transaction with
|
|
162
162
|
* @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.
|
|
163
163
|
* @returns An object containing the signature
|
|
164
|
-
* @
|
|
164
|
+
* @notInstrumented
|
|
165
165
|
*/
|
|
166
166
|
const signAndSendTransaction = async ({ walletAccount, transaction, sponsorshipMode = "auto", options }, client = getDefaultClient$1()) => {
|
|
167
167
|
const provider = getWalletProviderFromWalletAccount({ walletAccount }, client);
|
|
@@ -196,7 +196,7 @@ const signAndSendTransaction = async ({ walletAccount, transaction, sponsorshipM
|
|
|
196
196
|
* @param params.sponsorshipMode - `'auto'` (default) sponsors when eligible; `'off'` never sponsors.
|
|
197
197
|
* @param client - The Dynamic client instance.
|
|
198
198
|
* @returns The transaction hash (signature).
|
|
199
|
-
* @
|
|
199
|
+
* @notInstrumented
|
|
200
200
|
*/
|
|
201
201
|
const solanaExecuteSwapTransaction = async ({ onStepChange, signingPayload, sponsorshipMode = "auto", walletAccount }, client) => {
|
|
202
202
|
const walletProvider = getWalletProviderFromWalletAccount({ walletAccount }, client);
|
|
@@ -229,7 +229,7 @@ const DEFAULT_DECIMALS = 9;
|
|
|
229
229
|
* For SPL tokens, derives associated token accounts, creates the recipient
|
|
230
230
|
* ATA if needed, and builds a `transferChecked` instruction. Supports both
|
|
231
231
|
* standard SPL tokens and Token-2022 tokens by detecting the mint's program.
|
|
232
|
-
* @
|
|
232
|
+
* @notInstrumented
|
|
233
233
|
*/
|
|
234
234
|
const solanaTransferAmount = async ({ amount, recipient, token, walletAccount }, client) => {
|
|
235
235
|
if (!isSolanaWalletAccount(walletAccount)) throw new InvalidParamError("Wallet account is not a Solana wallet account");
|
|
@@ -277,4 +277,4 @@ const solanaTransferAmount = async ({ amount, recipient, token, walletAccount },
|
|
|
277
277
|
|
|
278
278
|
//#endregion
|
|
279
279
|
export { NotSolanaProviderError as a, isSolanaWalletAccount as c, registerSolanaNetworkProviderBuilder as d, name as f, isSolanaGasSponsorshipEnabled as i, isVersionedTransaction as l, solanaExecuteSwapTransaction as n, isSolanaWalletProvider as o, version as p, signAndSendTransaction as r, solanaConfirmTransaction as s, solanaTransferAmount as t, getSolanaConnection as u };
|
|
280
|
-
//# sourceMappingURL=solanaTransferAmount-
|
|
280
|
+
//# sourceMappingURL=solanaTransferAmount-oEHHu9WL.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"solanaTransferAmount-oEHHu9WL.esm.js","names":["getDefaultClient","getDefaultClient","transaction: Transaction | VersionedTransaction","instructions: TransactionInstruction[]"],"sources":["../package.json","../src/utils/fetchSolBalance/fetchSolBalance.ts","../src/utils/createSolanaNetworkProvider/createSolanaNetworkProvider.ts","../src/registerSolanaNetworkProviderBuilder/registerSolanaNetworkProviderBuilder.ts","../src/getSolanaConnection/getSolanaConnection.ts","../src/utils/isVersionedTransaction/isVersionedTransaction.ts","../src/isSolanaWalletAccount/isSolanaWalletAccount.ts","../src/utils/solanaConfirmTransaction/solanaConfirmTransaction.ts","../src/isSolanaWalletProvider/isSolanaWalletProvider.ts","../src/errors/NotSolanaProviderError/NotSolanaProviderError.ts","../src/isSolanaGasSponsorshipEnabled/isSolanaGasSponsorshipEnabled.ts","../src/signAndSendTransaction/signAndSendTransaction.ts","../src/utils/solanaExecuteSwapTransaction/solanaExecuteSwapTransaction.ts","../src/utils/solanaTransferAmount/solanaTransferAmount.ts"],"sourcesContent":["","import type { NetworkData } from '@dynamic-labs-sdk/client';\nimport { Connection, PublicKey } from '@solana/web3.js';\n\n/** @notInstrumented */\nexport const fetchSolBalance = async ({\n address,\n networkData,\n}: {\n address: string;\n networkData: NetworkData;\n}): Promise<string | null> => {\n // Establish a connection to the Solana network using the provided RPC URL.\n const connection = new Connection(networkData.rpcUrls.http[0]);\n\n // Convert the string address into a PublicKey object.\n const publicKey = new PublicKey(address);\n\n // Fetch the balance of the public key. The balance is in lamports.\n const balanceInLamports = await connection.getBalance(publicKey);\n\n // The getBalance method returns the balance in lamports.\n // 1 SOL = 1,000,000,000 lamports.\n const balanceInSol = balanceInLamports / 1_000_000_000;\n\n // Return the balance in SOL as a string\n return balanceInSol.toString();\n};\n","import type { NetworkData } from '@dynamic-labs-sdk/client';\nimport { createBaseNetworkProvider } from '@dynamic-labs-sdk/client/core';\n\nimport type { SolanaNetworkProvider } from '../../SolanaNetworkProvider.types';\nimport { fetchSolBalance } from '../fetchSolBalance';\n\n/** @notInstrumented */\nexport const createSolanaNetworkProvider = (\n networkData: NetworkData\n): SolanaNetworkProvider => ({\n ...createBaseNetworkProvider('SOL', networkData),\n cluster: networkData.cluster,\n genesisHash: networkData.genesisHash,\n getBalance: async ({ address }) => ({\n balance: await fetchSolBalance({\n address,\n networkData,\n }),\n }),\n});\n","import type { DynamicClient } from '@dynamic-labs-sdk/client';\nimport { getNetworkProviderBuilderRegistry } from '@dynamic-labs-sdk/client/core';\n\nimport { createSolanaNetworkProvider } from '../utils/createSolanaNetworkProvider';\n\n/** @notInstrumented */\nexport const registerSolanaNetworkProviderBuilder = (\n client: DynamicClient\n): void => {\n const networkProviderBuilderRegistry =\n getNetworkProviderBuilderRegistry(client);\n\n /**\n * If the Solana network provider builder is already registered, return.\n */\n if (networkProviderBuilderRegistry.get().get('SOL')) {\n return;\n }\n\n networkProviderBuilderRegistry.register({\n builder: createSolanaNetworkProvider,\n chain: 'SOL',\n });\n};\n","import type { NetworkData } from '@dynamic-labs-sdk/client';\nimport type { Commitment, ConnectionConfig } from '@solana/web3.js';\nimport { Connection } from '@solana/web3.js';\n\ntype GetSolanaConnectionOptions = {\n commitmentOrConfig?: Commitment | ConnectionConfig;\n networkData: NetworkData;\n};\n\n/**\n * Returns a new Solana connection for the given network provider.\n *\n * @example\n * ```ts\n * import { getActiveNetworkData } from '@dynamic-labs-sdk/client';\n * import { isSolanaNetworkProvider, getSolanaConnection } from '@dynamic-labs-sdk/solana';\n *\n * const { networkData } = getActiveNetworkData({ walletAccount });\n *\n * if(!networkData) {\n * throw new Error('No network data found');\n * }\n *\n * const connection = getSolanaConnection({\n * networkData,\n * });\n * ```\n * @notInstrumented\n */\nexport const getSolanaConnection = ({\n networkData,\n commitmentOrConfig,\n}: GetSolanaConnectionOptions) => {\n return new Connection(networkData.rpcUrls.http[0], commitmentOrConfig);\n};\n","import type { Transaction, VersionedTransaction } from '@solana/web3.js';\n\n/** @notInstrumented */\nexport const isVersionedTransaction = (\n transaction: VersionedTransaction | Transaction\n): transaction is VersionedTransaction => !('instructions' in transaction);\n","import type { WalletAccount } from '@dynamic-labs-sdk/client';\n\nimport type { SolanaWalletAccount } from '../SolanaWalletAccount.types';\n\n/**\n * Type guard function to check if a wallet account is a Solana wallet account.\n *\n * @param walletAccount - The wallet account to check.\n * @returns True if the wallet account is a Solana wallet account, false otherwise.\n * @notInstrumented\n */\nexport const isSolanaWalletAccount = (\n walletAccount: WalletAccount\n): walletAccount is SolanaWalletAccount => walletAccount.chain === 'SOL';\n","import {\n type DynamicClient,\n InvalidParamError,\n getActiveNetworkData,\n} from '@dynamic-labs-sdk/client';\nimport type { ConfirmTransactionParams } from '@dynamic-labs-sdk/client/core';\nimport { assertDefined } from '@dynamic-labs-sdk/client/core';\n\nimport { getSolanaConnection } from '../../getSolanaConnection';\nimport { isSolanaWalletAccount } from '../../isSolanaWalletAccount';\n\n/**\n * Waits for a Solana transaction to be confirmed on-chain.\n *\n * @param params.transactionHash - The transaction signature to wait for.\n * @param params.walletAccount - The Solana wallet account used to resolve the active network.\n * @param client - The Dynamic client instance.\n * @notInstrumented\n */\nexport const solanaConfirmTransaction = async (\n { transactionHash, walletAccount }: ConfirmTransactionParams,\n client: DynamicClient\n): Promise<void> => {\n if (!isSolanaWalletAccount(walletAccount)) {\n throw new InvalidParamError(\n 'Wallet account is not a Solana wallet account'\n );\n }\n\n const { networkData } = await getActiveNetworkData({ walletAccount }, client);\n\n assertDefined(\n networkData,\n `No network data found for wallet account ${walletAccount.address}`\n );\n\n const connection = getSolanaConnection({ networkData });\n\n const { blockhash, lastValidBlockHeight } =\n await connection.getLatestBlockhash();\n\n await connection.confirmTransaction({\n blockhash,\n lastValidBlockHeight,\n signature: transactionHash,\n });\n};\n","import type { WalletProvider } from '@dynamic-labs-sdk/client/core';\n\nimport type { SolanaWalletProvider } from '../SolanaWalletProvider.types';\n\n/** @notInstrumented */\nexport const isSolanaWalletProvider = (\n provider: WalletProvider\n): provider is SolanaWalletProvider => {\n return provider.chain === 'SOL';\n};\n","import { BaseError } from '@dynamic-labs-sdk/client';\n\nexport class NotSolanaProviderError extends BaseError {\n public readonly providerKey: string;\n\n constructor(params: { providerKey: string }) {\n super({\n cause: null,\n code: 'not_solana_provider_error',\n docsUrl: null,\n name: 'NotSolanaProviderError',\n shortMessage: 'Provider is not a Solana wallet provider',\n });\n\n this.providerKey = params.providerKey;\n }\n}\n","import { getDefaultClient } from '@dynamic-labs-sdk/client';\nimport { assertDefined } from '@dynamic-labs-sdk/client/core';\n\n/**\n * Checks if Solana gas sponsorship is enabled for the current project.\n *\n * @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.\n * @returns True if Solana gas sponsorship is enabled, false otherwise.\n * @notInstrumented\n */\nexport const isSolanaGasSponsorshipEnabled = (\n client = getDefaultClient()\n): boolean => {\n assertDefined(client.projectSettings, 'Project settings are not defined');\n\n return (\n client.projectSettings.sdk.embeddedWallets?.svmGasSponsorshipEnabled ??\n false\n );\n};\n","import { getDefaultClient } from '@dynamic-labs-sdk/client';\nimport { getWalletProviderFromWalletAccount } from '@dynamic-labs-sdk/client/core';\nimport type {\n SendOptions,\n Transaction,\n VersionedTransaction,\n} from '@solana/web3.js';\n\nimport type { SolanaWalletAccount } from '../SolanaWalletAccount.types';\nimport { NotSolanaProviderError } from '../errors/NotSolanaProviderError';\nimport { isSolanaGasSponsorshipEnabled } from '../isSolanaGasSponsorshipEnabled';\nimport { isSolanaWalletProvider } from '../isSolanaWalletProvider';\n\ntype SignAndSendTransactionParams = {\n options?: SendOptions;\n /**\n * Controls whether Dynamic's gas sponsorship API is used to pay for this\n * transaction.\n *\n * - `'auto'` (default): the transaction is sponsored when Solana gas\n * sponsorship is enabled in project settings AND the walletAccount is a\n * Dynamic embedded wallet. Otherwise the user pays gas.\n * - `'off'`: the transaction is never sponsored, regardless of project\n * settings or provider capabilities. The user pays gas.\n *\n * To require sponsorship (and throw if unsupported), use\n * `signAndSendSponsoredTransaction` instead.\n *\n * @default 'auto'\n */\n sponsorshipMode?: 'auto' | 'off';\n transaction: Transaction | VersionedTransaction;\n walletAccount: SolanaWalletAccount;\n};\n\n/**\n * Signs and sends a Solana transaction, honoring the project's Solana gas\n * sponsorship setting.\n *\n * When solana gas sponsorship is enabled in project settings and sponsorship\n * is supported by the wallet provider, the transaction is routed through\n * Dynamic's gas sponsorship API.\n * Otherwise it falls back to the provider's standard `signAndSendTransaction`.\n *\n * @param params.transaction - The transaction to sign and send\n * @param params.walletAccount - The wallet account to sign and send the transaction with\n * @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.\n * @returns An object containing the signature\n * @notInstrumented\n */\nexport const signAndSendTransaction = async (\n {\n walletAccount,\n transaction,\n sponsorshipMode = 'auto',\n options,\n }: SignAndSendTransactionParams,\n client = getDefaultClient()\n): Promise<{ signature: string }> => {\n const provider = getWalletProviderFromWalletAccount(\n {\n walletAccount,\n },\n client\n );\n\n if (!isSolanaWalletProvider(provider)) {\n throw new NotSolanaProviderError({ providerKey: provider.key });\n }\n\n if (\n sponsorshipMode === 'auto' &&\n isSolanaGasSponsorshipEnabled(client) &&\n provider.signAndSendSponsoredTransaction\n ) {\n return provider.signAndSendSponsoredTransaction({\n options,\n transaction,\n walletAccount,\n });\n }\n\n return provider.signAndSendTransaction({\n options,\n transaction,\n walletAccount,\n });\n};\n","import {\n type DynamicClient,\n InvalidParamError,\n} from '@dynamic-labs-sdk/client';\nimport type {\n ExecuteSwapTransactionParams,\n ExecuteSwapTransactionResult,\n} from '@dynamic-labs-sdk/client/core';\nimport {\n getBuffer,\n getWalletProviderFromWalletAccount,\n} from '@dynamic-labs-sdk/client/core';\nimport { Transaction, VersionedTransaction } from '@solana/web3.js';\n\nimport { isSolanaWalletAccount } from '../../isSolanaWalletAccount';\nimport { isSolanaWalletProvider } from '../../isSolanaWalletProvider';\nimport { signAndSendTransaction } from '../../signAndSendTransaction';\n\n/**\n * Executes a Solana checkout transaction by deserializing the base64-encoded\n * transaction and routing it through `signAndSendTransaction`, which applies\n * the project's gas sponsorship setting when enabled.\n *\n * 1. Validates that the wallet account is a Solana wallet account\n * 2. Extracts and validates the serialized transaction from the signing payload\n * 3. Deserializes the transaction (tries VersionedTransaction first, falls back to Transaction)\n * 4. Signs and sends via `signAndSendTransaction` (sponsored when project settings opt in)\n *\n * @param params.signingPayload - The signing payload containing `serializedTransaction`.\n * @param params.walletAccount - The wallet account used to sign and send the transaction.\n * @param params.onStepChange - Optional callback invoked with `'transaction'` when the send step begins.\n * @param params.sponsorshipMode - `'auto'` (default) sponsors when eligible; `'off'` never sponsors.\n * @param client - The Dynamic client instance.\n * @returns The transaction hash (signature).\n * @notInstrumented\n */\nexport const solanaExecuteSwapTransaction = async (\n {\n onStepChange,\n signingPayload,\n sponsorshipMode = 'auto',\n walletAccount,\n }: ExecuteSwapTransactionParams,\n client: DynamicClient\n): Promise<ExecuteSwapTransactionResult> => {\n const walletProvider = getWalletProviderFromWalletAccount(\n { walletAccount },\n client\n );\n\n if (\n !isSolanaWalletAccount(walletAccount) ||\n !isSolanaWalletProvider(walletProvider)\n ) {\n throw new InvalidParamError(\n 'Wallet account is not a Solana wallet account'\n );\n }\n\n const serializedTransactionData = signingPayload.serializedTransaction;\n\n if (!serializedTransactionData) {\n throw new InvalidParamError(\n 'Signing payload is missing serialized transaction data'\n );\n }\n\n const bytes = new Uint8Array(\n getBuffer().from(serializedTransactionData, 'base64')\n );\n\n let transaction: Transaction | VersionedTransaction;\n\n // Try VersionedTransaction first, fall back to legacy Transaction\n try {\n transaction = VersionedTransaction.deserialize(bytes);\n } catch {\n transaction = Transaction.from(bytes);\n }\n\n onStepChange?.('transaction');\n\n const { signature } = await signAndSendTransaction(\n {\n sponsorshipMode,\n transaction,\n walletAccount,\n },\n client\n );\n\n return { transactionHash: signature };\n};\n","import {\n type DynamicClient,\n InvalidParamError,\n getActiveNetworkData,\n} from '@dynamic-labs-sdk/client';\nimport type { TransferAmountParams } from '@dynamic-labs-sdk/client/core';\nimport {\n assertDefined,\n getWalletProviderFromWalletAccount,\n parseAmountToSmallestUnit,\n} from '@dynamic-labs-sdk/client/core';\nimport {\n TOKEN_2022_PROGRAM_ID,\n TOKEN_PROGRAM_ID,\n createAssociatedTokenAccountInstruction,\n createTransferCheckedInstruction,\n getAssociatedTokenAddress,\n} from '@solana/spl-token';\nimport type { TransactionInstruction } from '@solana/web3.js';\nimport {\n PublicKey,\n SystemProgram,\n TransactionMessage,\n VersionedTransaction,\n} from '@solana/web3.js';\n\nimport { NotSolanaProviderError } from '../../errors/NotSolanaProviderError';\nimport { getSolanaConnection } from '../../getSolanaConnection';\nimport { isSolanaWalletAccount } from '../../isSolanaWalletAccount';\nimport { isSolanaWalletProvider } from '../../isSolanaWalletProvider';\nimport { signAndSendTransaction } from '../../signAndSendTransaction';\nconst DEFAULT_DECIMALS = 9;\n\n/**\n * Transfers native SOL or SPL tokens from one wallet to another.\n *\n * For native SOL, builds a `SystemProgram.transfer` instruction.\n * For SPL tokens, derives associated token accounts, creates the recipient\n * ATA if needed, and builds a `transferChecked` instruction. Supports both\n * standard SPL tokens and Token-2022 tokens by detecting the mint's program.\n * @notInstrumented\n */\nexport const solanaTransferAmount = async (\n { amount, recipient, token, walletAccount }: TransferAmountParams,\n client: DynamicClient\n): Promise<{ transactionHash: string }> => {\n if (!isSolanaWalletAccount(walletAccount)) {\n throw new InvalidParamError(\n 'Wallet account is not a Solana wallet account'\n );\n }\n\n const provider = getWalletProviderFromWalletAccount(\n { walletAccount },\n client\n );\n\n if (!isSolanaWalletProvider(provider)) {\n throw new NotSolanaProviderError({ providerKey: provider.key });\n }\n\n const { networkData } = await getActiveNetworkData({ walletAccount }, client);\n assertDefined(networkData, 'Network data is required');\n\n const connection = getSolanaConnection({ networkData });\n\n const fromPubkey = new PublicKey(walletAccount.address);\n const toPubkey = new PublicKey(recipient);\n\n let instructions: TransactionInstruction[];\n\n if (token) {\n const decimals = token.decimals ?? DEFAULT_DECIMALS;\n const mintPubkey = new PublicKey(token.address);\n\n // Detect Token-2022 vs standard SPL by checking mint account owner\n const mintAccountInfo = await connection.getAccountInfo(mintPubkey);\n const tokenProgramId = mintAccountInfo?.owner.equals(TOKEN_2022_PROGRAM_ID)\n ? TOKEN_2022_PROGRAM_ID\n : TOKEN_PROGRAM_ID;\n\n const senderAta = await getAssociatedTokenAddress(\n mintPubkey,\n fromPubkey,\n false,\n tokenProgramId\n );\n\n const recipientAta = await getAssociatedTokenAddress(\n mintPubkey,\n toPubkey,\n false,\n tokenProgramId\n );\n\n const recipientAccountInfo = await connection.getAccountInfo(recipientAta);\n\n const rawAmount = parseAmountToSmallestUnit({ amount, decimals });\n\n instructions = [];\n\n if (!recipientAccountInfo) {\n instructions.push(\n createAssociatedTokenAccountInstruction(\n fromPubkey,\n recipientAta,\n toPubkey,\n mintPubkey,\n tokenProgramId\n )\n );\n }\n\n instructions.push(\n createTransferCheckedInstruction(\n senderAta,\n mintPubkey,\n recipientAta,\n fromPubkey,\n rawAmount,\n decimals,\n [],\n tokenProgramId\n )\n );\n } else {\n instructions = [\n SystemProgram.transfer({\n fromPubkey,\n lamports: parseAmountToSmallestUnit({ amount, decimals: DEFAULT_DECIMALS }),\n toPubkey,\n }),\n ];\n }\n\n const { blockhash } = await connection.getLatestBlockhash('finalized');\n\n const message = new TransactionMessage({\n instructions,\n payerKey: fromPubkey,\n recentBlockhash: blockhash,\n }).compileToV0Message();\n\n const transaction = new VersionedTransaction(message);\n\n const { signature } = await signAndSendTransaction(\n { transaction, walletAccount },\n client\n );\n\n return { transactionHash: signature };\n};\n"],"mappings":"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"}
|