@dynamic-labs-sdk/solana 1.17.1 → 1.19.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 +10 -1
- package/dist/addSolanaExtension/addSolanaExtension.d.ts.map +1 -1
- package/dist/{addSolanaWalletStandardExtension-D_WVyVEx.esm.js → addSolanaWalletStandardExtension-CbR1BbPB.esm.js} +3 -3
- package/dist/{addSolanaWalletStandardExtension-D_WVyVEx.esm.js.map → addSolanaWalletStandardExtension-CbR1BbPB.esm.js.map} +1 -1
- package/dist/{addSolanaWalletStandardExtension-Dtf-b3fq.cjs → addSolanaWalletStandardExtension-CyYa03dG.cjs} +3 -3
- package/dist/{addSolanaWalletStandardExtension-Dtf-b3fq.cjs.map → addSolanaWalletStandardExtension-CyYa03dG.cjs.map} +1 -1
- package/dist/{addWaasSolanaExtension-BwdvB_-W.esm.js → addWaasSolanaExtension-DVuz2ISz.esm.js} +2 -2
- package/dist/{addWaasSolanaExtension-BwdvB_-W.esm.js.map → addWaasSolanaExtension-DVuz2ISz.esm.js.map} +1 -1
- package/dist/{addWaasSolanaExtension-av0ucGCH.cjs → addWaasSolanaExtension-wH_cvxuL.cjs} +2 -2
- package/dist/{addWaasSolanaExtension-av0ucGCH.cjs.map → addWaasSolanaExtension-wH_cvxuL.cjs.map} +1 -1
- package/dist/{createWalletProviderFromSolanaStandardWallet-Dtio4xHn.esm.js → createWalletProviderFromSolanaStandardWallet-B7jh3I6k.esm.js} +2 -2
- package/dist/{createWalletProviderFromSolanaStandardWallet-Dtio4xHn.esm.js.map → createWalletProviderFromSolanaStandardWallet-B7jh3I6k.esm.js.map} +1 -1
- package/dist/{createWalletProviderFromSolanaStandardWallet-CN-opURQ.cjs → createWalletProviderFromSolanaStandardWallet-Bt5TP7Lt.cjs} +2 -2
- package/dist/{createWalletProviderFromSolanaStandardWallet-CN-opURQ.cjs.map → createWalletProviderFromSolanaStandardWallet-Bt5TP7Lt.cjs.map} +1 -1
- package/dist/getSolanaConnection/getSolanaConnection.d.ts +7 -1
- package/dist/getSolanaConnection/getSolanaConnection.d.ts.map +1 -1
- package/dist/index.cjs +466 -18
- package/dist/index.cjs.map +1 -1
- package/dist/index.esm.js +466 -18
- package/dist/index.esm.js.map +1 -1
- package/dist/isSolanaGasSponsorshipEnabled/isSolanaGasSponsorshipEnabled.d.ts +10 -1
- package/dist/isSolanaGasSponsorshipEnabled/isSolanaGasSponsorshipEnabled.d.ts.map +1 -1
- package/dist/isSolanaNetworkProvider/isSolanaNetworkProvider.d.ts +10 -1
- package/dist/isSolanaNetworkProvider/isSolanaNetworkProvider.d.ts.map +1 -1
- package/dist/isSolanaWalletAccount/isSolanaWalletAccount.d.ts +9 -1
- package/dist/isSolanaWalletAccount/isSolanaWalletAccount.d.ts.map +1 -1
- package/dist/metamask.cjs +2 -2
- package/dist/metamask.esm.js +2 -2
- package/dist/phantomRedirect/addPhantomRedirectSolanaExtension/addPhantomRedirectSolanaExtension.d.ts +11 -0
- package/dist/phantomRedirect/addPhantomRedirectSolanaExtension/addPhantomRedirectSolanaExtension.d.ts.map +1 -1
- package/dist/phantomRedirect/completePhantomRedirect/completePhantomRedirect.d.ts +14 -0
- package/dist/phantomRedirect/completePhantomRedirect/completePhantomRedirect.d.ts.map +1 -1
- package/dist/phantomRedirect/detectPhantomRedirect/detectPhantomRedirect.d.ts +9 -1
- package/dist/phantomRedirect/detectPhantomRedirect/detectPhantomRedirect.d.ts.map +1 -1
- package/dist/phantomRedirect/errors/PhantomInvalidEncryptionPublicKeyError.d.ts +5 -0
- package/dist/phantomRedirect/errors/PhantomInvalidEncryptionPublicKeyError.d.ts.map +1 -0
- package/dist/phantomRedirect/utils/crypto/createNaClSharedSecret/createNaClSharedSecret.d.ts +6 -1
- package/dist/phantomRedirect/utils/crypto/createNaClSharedSecret/createNaClSharedSecret.d.ts.map +1 -1
- package/dist/signAllTransactions/signAllTransactions.d.ts +17 -5
- package/dist/signAllTransactions/signAllTransactions.d.ts.map +1 -1
- package/dist/signAndSendSponsoredTransaction/signAndSendSponsoredTransaction.d.ts +16 -6
- package/dist/signAndSendSponsoredTransaction/signAndSendSponsoredTransaction.d.ts.map +1 -1
- package/dist/signAndSendTransaction/signAndSendTransaction.d.ts +15 -3
- package/dist/signAndSendTransaction/signAndSendTransaction.d.ts.map +1 -1
- package/dist/signTransaction/signTransaction.d.ts +17 -5
- package/dist/signTransaction/signTransaction.d.ts.map +1 -1
- package/dist/simulateSolanaTransaction/simulateSolanaTransaction.d.ts +3 -1
- package/dist/simulateSolanaTransaction/simulateSolanaTransaction.d.ts.map +1 -1
- package/dist/{solanaTransferAmount-CgovN61n.cjs → solanaTransferAmount-B4keau5s.cjs} +40 -5
- package/dist/solanaTransferAmount-B4keau5s.cjs.map +1 -0
- package/dist/{solanaTransferAmount-BSu_bMZ6.esm.js → solanaTransferAmount-CdkPbAES.esm.js} +40 -5
- package/dist/solanaTransferAmount-CdkPbAES.esm.js.map +1 -0
- package/dist/tsconfig.lib.tsbuildinfo +1 -1
- package/dist/utils/calculateSolanaTransactionFee/calculateSolanaTransactionFee.d.ts +12 -1
- package/dist/utils/calculateSolanaTransactionFee/calculateSolanaTransactionFee.d.ts.map +1 -1
- package/dist/waas.cjs +2 -2
- package/dist/waas.esm.js +2 -2
- package/dist/walletConnect.cjs +1 -1
- package/dist/walletConnect.esm.js +1 -1
- package/dist/walletStandard.cjs +3 -3
- package/dist/walletStandard.esm.js +3 -3
- package/package.json +6 -6
- package/dist/solanaTransferAmount-BSu_bMZ6.esm.js.map +0 -1
- package/dist/solanaTransferAmount-CgovN61n.cjs.map +0 -1
|
@@ -106,10 +106,21 @@ export type AddPhantomRedirectSolanaExtensionParams = {
|
|
|
106
106
|
* marker written during request initiation and does **not** emit
|
|
107
107
|
* `phantomRedirectCloseTab`.
|
|
108
108
|
*
|
|
109
|
+
* @example
|
|
110
|
+
* ```ts
|
|
111
|
+
* addPhantomRedirectSolanaExtension({
|
|
112
|
+
* url: new URL(window.location.href),
|
|
113
|
+
* onCloseTab: () => window.close(),
|
|
114
|
+
* });
|
|
115
|
+
* ```
|
|
116
|
+
*
|
|
109
117
|
* @param params.url - The current page URL
|
|
110
118
|
* @param params.onCloseTab - Callback invoked when the clone tab should close
|
|
111
119
|
* @param params.disableAutoRedirectCompletion - Skip auto detection/completion
|
|
112
120
|
* @param [client] - The Dynamic client. Only required for multiple clients.
|
|
121
|
+
* @returns void
|
|
122
|
+
* @see completePhantomRedirect
|
|
123
|
+
* @see detectPhantomRedirect
|
|
113
124
|
* @notInstrumented
|
|
114
125
|
*/
|
|
115
126
|
export declare const addPhantomRedirectSolanaExtension: ({ disableAutoRedirectCompletion, onCloseTab, url, }: AddPhantomRedirectSolanaExtensionParams, client?: DynamicClient) => Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"addPhantomRedirectSolanaExtension.d.ts","sourceRoot":"","sources":["../../../src/phantomRedirect/addPhantomRedirectSolanaExtension/addPhantomRedirectSolanaExtension.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAgB9D,eAAO,MAAM,qCAAqC,0BAA0B,CAAC;AAE7E,MAAM,MAAM,uCAAuC,GAAG;IACpD;;;;;;;;;OASG;IACH,6BAA6B,CAAC,EAAE,OAAO,CAAC;IAExC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAgDG;IACH,UAAU,EAAE,MAAM,IAAI,CAAC;IAEvB;;;OAGG;IACH,GAAG,EAAE,GAAG,CAAC;CACV,CAAC;AAEF
|
|
1
|
+
{"version":3,"file":"addPhantomRedirectSolanaExtension.d.ts","sourceRoot":"","sources":["../../../src/phantomRedirect/addPhantomRedirectSolanaExtension/addPhantomRedirectSolanaExtension.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAgB9D,eAAO,MAAM,qCAAqC,0BAA0B,CAAC;AAE7E,MAAM,MAAM,uCAAuC,GAAG;IACpD;;;;;;;;;OASG;IACH,6BAA6B,CAAC,EAAE,OAAO,CAAC;IAExC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAgDG;IACH,UAAU,EAAE,MAAM,IAAI,CAAC;IAEvB;;;OAGG;IACH,GAAG,EAAE,GAAG,CAAC;CACV,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsDG;AACH,eAAO,MAAM,iCAAiC,wDAKzC,uCAAuC,WAClC,aAAa,KACpB,OAAO,CAAC,IAAI,CAgGd,CAAC"}
|
|
@@ -20,6 +20,17 @@ export type CompletePhantomRedirectParams = {
|
|
|
20
20
|
* is returned to the originating tab. See the `phantomRedirectCloseTab` event
|
|
21
21
|
* JSDoc for details on how to handle tab closing.
|
|
22
22
|
*
|
|
23
|
+
* @example
|
|
24
|
+
* ```ts
|
|
25
|
+
* const url = new URL(window.location.href);
|
|
26
|
+
* if (await detectPhantomRedirect({ url })) {
|
|
27
|
+
* await completePhantomRedirect({ url });
|
|
28
|
+
* // Close this clone tab; the originating tab already received the result
|
|
29
|
+
* // via BroadcastChannel and will resolve its pending promise.
|
|
30
|
+
* window.close();
|
|
31
|
+
* }
|
|
32
|
+
* ```
|
|
33
|
+
*
|
|
23
34
|
* @param params.url - The callback URL received from Phantom
|
|
24
35
|
* @param client - The Dynamic client instance
|
|
25
36
|
* @throws {NoPendingPhantomRequestError} If no pending request is found in storage
|
|
@@ -27,6 +38,9 @@ export type CompletePhantomRedirectParams = {
|
|
|
27
38
|
* required encryption parameters (`phantom_encryption_public_key`, `data`,
|
|
28
39
|
* `nonce`) and does not carry an error code either
|
|
29
40
|
* @throws {PhantomRedirectRejectedError} If the user rejected the request in Phantom
|
|
41
|
+
* @returns void
|
|
42
|
+
* @see detectPhantomRedirect
|
|
43
|
+
* @see addPhantomRedirectSolanaExtension
|
|
30
44
|
* @notInstrumented
|
|
31
45
|
*/
|
|
32
46
|
export declare const completePhantomRedirect: ({ url }: CompletePhantomRedirectParams, client?: DynamicClient) => Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"completePhantomRedirect.d.ts","sourceRoot":"","sources":["../../../src/phantomRedirect/completePhantomRedirect/completePhantomRedirect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAmC9D,MAAM,MAAM,6BAA6B,GAAG;IAC1C,GAAG,EAAE,GAAG,CAAC;CACV,CAAC;AAsDF
|
|
1
|
+
{"version":3,"file":"completePhantomRedirect.d.ts","sourceRoot":"","sources":["../../../src/phantomRedirect/completePhantomRedirect/completePhantomRedirect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAmC9D,MAAM,MAAM,6BAA6B,GAAG;IAC1C,GAAG,EAAE,GAAG,CAAC;CACV,CAAC;AAsDF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AAEH,eAAO,MAAM,uBAAuB,YACzB,6BAA6B,WAC9B,aAAa,KACpB,OAAO,CAAC,IAAI,CA4Id,CAAC"}
|
|
@@ -19,10 +19,18 @@ export type DetectPhantomRedirectParams = {
|
|
|
19
19
|
* we fall back to checking whether a pending disconnect request exists in
|
|
20
20
|
* storage.
|
|
21
21
|
*
|
|
22
|
+
* @example
|
|
23
|
+
* ```ts
|
|
24
|
+
* const url = new URL(window.location.href);
|
|
25
|
+
* const isPhantomRedirect = await detectPhantomRedirect({ url });
|
|
26
|
+
* ```
|
|
27
|
+
*
|
|
22
28
|
* @param params.url - The URL to check for Phantom redirect parameters
|
|
23
29
|
* @param client - The Dynamic client instance
|
|
24
30
|
* @returns A promise that resolves to true if the URL is a valid Phantom redirect, false otherwise
|
|
25
|
-
|
|
31
|
+
* @see completePhantomRedirect
|
|
32
|
+
* @see addPhantomRedirectSolanaExtension
|
|
33
|
+
* @notInstrumented
|
|
26
34
|
*/
|
|
27
35
|
export declare const detectPhantomRedirect: ({ url }: DetectPhantomRedirectParams, client?: DynamicClient) => Promise<boolean>;
|
|
28
36
|
//# sourceMappingURL=detectPhantomRedirect.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"detectPhantomRedirect.d.ts","sourceRoot":"","sources":["../../../src/phantomRedirect/detectPhantomRedirect/detectPhantomRedirect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAK9D,MAAM,MAAM,2BAA2B,GAAG;IACxC,GAAG,EAAE,GAAG,CAAC;CACV,CAAC;AAEF
|
|
1
|
+
{"version":3,"file":"detectPhantomRedirect.d.ts","sourceRoot":"","sources":["../../../src/phantomRedirect/detectPhantomRedirect/detectPhantomRedirect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAK9D,MAAM,MAAM,2BAA2B,GAAG;IACxC,GAAG,EAAE,GAAG,CAAC;CACV,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,eAAO,MAAM,qBAAqB,YACvB,2BAA2B,WAC5B,aAAa,KACpB,OAAO,CAAC,OAAO,CAgCjB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PhantomInvalidEncryptionPublicKeyError.d.ts","sourceRoot":"","sources":["../../../src/phantomRedirect/errors/PhantomInvalidEncryptionPublicKeyError.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAErD,qBAAa,sCAAuC,SAAQ,SAAS;;CAWpE"}
|
package/dist/phantomRedirect/utils/crypto/createNaClSharedSecret/createNaClSharedSecret.d.ts
CHANGED
|
@@ -5,10 +5,15 @@ export type CreateNaClSharedSecretParams = {
|
|
|
5
5
|
/**
|
|
6
6
|
* Creates a shared secret for NaCl box encryption using our secret key and their public key.
|
|
7
7
|
*
|
|
8
|
+
* Rejects low-order / invalid Curve25519 public keys before deriving the shared
|
|
9
|
+
* secret, preventing an attacker from forcing the X25519 output to a known
|
|
10
|
+
* constant via a malicious `phantom_encryption_public_key`.
|
|
11
|
+
*
|
|
8
12
|
* @param params.ourSecretKey - Our base58-encoded secret key
|
|
9
13
|
* @param params.theirPublicKey - Their base58-encoded public key
|
|
10
14
|
* @returns The base58-encoded shared secret
|
|
11
|
-
|
|
15
|
+
* @throws {PhantomInvalidEncryptionPublicKeyError} If their public key is invalid or a low-order point
|
|
16
|
+
* @notInstrumented
|
|
12
17
|
*/
|
|
13
18
|
export declare const createNaClSharedSecret: ({ ourSecretKey, theirPublicKey, }: CreateNaClSharedSecretParams) => string;
|
|
14
19
|
//# sourceMappingURL=createNaClSharedSecret.d.ts.map
|
package/dist/phantomRedirect/utils/crypto/createNaClSharedSecret/createNaClSharedSecret.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createNaClSharedSecret.d.ts","sourceRoot":"","sources":["../../../../../src/phantomRedirect/utils/crypto/createNaClSharedSecret/createNaClSharedSecret.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"createNaClSharedSecret.d.ts","sourceRoot":"","sources":["../../../../../src/phantomRedirect/utils/crypto/createNaClSharedSecret/createNaClSharedSecret.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,4BAA4B,GAAG;IACzC,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC;AA2HF;;;;;;;;;;;;GAYG;AAEH,eAAO,MAAM,sBAAsB,sCAGhC,4BAA4B,KAAG,MAYjC,CAAC"}
|
|
@@ -5,12 +5,24 @@ type SignAllTransactionsParams = {
|
|
|
5
5
|
walletAccount: SolanaWalletAccount;
|
|
6
6
|
};
|
|
7
7
|
/**
|
|
8
|
-
* Signs multiple Solana transactions
|
|
9
|
-
*
|
|
10
|
-
* @
|
|
8
|
+
* Signs multiple Solana transactions in a single call.
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```ts
|
|
12
|
+
* const { signedTransactions } = await signAllTransactions({
|
|
13
|
+
* walletAccount: solAccount,
|
|
14
|
+
* transactions: [tx1, tx2, tx3],
|
|
15
|
+
* });
|
|
16
|
+
* ```
|
|
17
|
+
*
|
|
18
|
+
* @param params.transactions - The transactions to sign.
|
|
19
|
+
* @param params.walletAccount - The wallet account to sign the transactions with.
|
|
11
20
|
* @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.
|
|
12
|
-
* @returns An object containing the signed transactions
|
|
13
|
-
|
|
21
|
+
* @returns An object containing the signed transactions.
|
|
22
|
+
* @throws {NotSolanaProviderError} If the wallet provider is not a Solana provider.
|
|
23
|
+
* @see signTransaction
|
|
24
|
+
* @see signAndSendTransaction
|
|
25
|
+
* @notInstrumented
|
|
14
26
|
*/
|
|
15
27
|
export declare const signAllTransactions: ({ walletAccount, transactions }: SignAllTransactionsParams, client?: import("@dynamic-labs-sdk/client").DynamicClient) => Promise<{
|
|
16
28
|
signedTransactions: (Transaction | VersionedTransaction)[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signAllTransactions.d.ts","sourceRoot":"","sources":["../../src/signAllTransactions/signAllTransactions.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAEzE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAIxE,KAAK,yBAAyB,GAAG;IAC/B,YAAY,EAAE,CAAC,WAAW,GAAG,oBAAoB,CAAC,EAAE,CAAC;IACrD,aAAa,EAAE,mBAAmB,CAAC;CACpC,CAAC;AAEF
|
|
1
|
+
{"version":3,"file":"signAllTransactions.d.ts","sourceRoot":"","sources":["../../src/signAllTransactions/signAllTransactions.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAEzE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAIxE,KAAK,yBAAyB,GAAG;IAC/B,YAAY,EAAE,CAAC,WAAW,GAAG,oBAAoB,CAAC,EAAE,CAAC;IACrD,aAAa,EAAE,mBAAmB,CAAC;CACpC,CAAC;AAEF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,mBAAmB,oCACG,yBAAyB,gEAEzD,OAAO,CAAC;IAAE,kBAAkB,EAAE,CAAC,WAAW,GAAG,oBAAoB,CAAC,EAAE,CAAA;CAAE,CAaxE,CAAC"}
|
|
@@ -9,13 +9,23 @@ type SignAndSendSponsoredTransactionParams = {
|
|
|
9
9
|
* Signs and sends a sponsored Solana transaction.
|
|
10
10
|
* The transaction will be sponsored via Dynamic's gas sponsorship API.
|
|
11
11
|
*
|
|
12
|
-
* @
|
|
13
|
-
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```ts
|
|
14
|
+
* const { signature } = await signAndSendSponsoredTransaction({
|
|
15
|
+
* walletAccount: solAccount,
|
|
16
|
+
* transaction,
|
|
17
|
+
* });
|
|
18
|
+
* ```
|
|
19
|
+
*
|
|
20
|
+
* @param params.transaction - The transaction to sponsor, sign, and send.
|
|
21
|
+
* @param params.walletAccount - The wallet account to sign and send the transaction with.
|
|
14
22
|
* @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.
|
|
15
|
-
* @returns An object containing the signature
|
|
16
|
-
* @throws {NotSolanaProviderError} If the wallet provider is not a Solana provider
|
|
17
|
-
* @throws {MethodNotImplementedError} If the wallet provider does not implement signAndSendSponsoredTransaction
|
|
18
|
-
|
|
23
|
+
* @returns An object containing the signature.
|
|
24
|
+
* @throws {NotSolanaProviderError} If the wallet provider is not a Solana provider.
|
|
25
|
+
* @throws {MethodNotImplementedError} If the wallet provider does not implement signAndSendSponsoredTransaction.
|
|
26
|
+
* @see signAndSendTransaction
|
|
27
|
+
* @see isSolanaGasSponsorshipEnabled
|
|
28
|
+
* @notInstrumented
|
|
19
29
|
*/
|
|
20
30
|
export declare const signAndSendSponsoredTransaction: ({ walletAccount, transaction, options, }: SignAndSendSponsoredTransactionParams, client?: import("@dynamic-labs-sdk/client").DynamicClient) => Promise<{
|
|
21
31
|
signature: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signAndSendSponsoredTransaction.d.ts","sourceRoot":"","sources":["../../src/signAndSendSponsoredTransaction/signAndSendSponsoredTransaction.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,WAAW,EACX,WAAW,EACX,oBAAoB,EACrB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAIxE,KAAK,qCAAqC,GAAG;IAC3C,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,WAAW,EAAE,WAAW,GAAG,oBAAoB,CAAC;IAChD,aAAa,EAAE,mBAAmB,CAAC;CACpC,CAAC;AAEF
|
|
1
|
+
{"version":3,"file":"signAndSendSponsoredTransaction.d.ts","sourceRoot":"","sources":["../../src/signAndSendSponsoredTransaction/signAndSendSponsoredTransaction.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,WAAW,EACX,WAAW,EACX,oBAAoB,EACrB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAIxE,KAAK,qCAAqC,GAAG;IAC3C,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,WAAW,EAAE,WAAW,GAAG,oBAAoB,CAAC;IAChD,aAAa,EAAE,mBAAmB,CAAC;CACpC,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,+BAA+B,6CAKvC,qCAAqC,gEAEvC,OAAO,CAAC;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,CAqB/B,CAAC"}
|
|
@@ -30,10 +30,22 @@ type SignAndSendTransactionParams = {
|
|
|
30
30
|
* Dynamic's gas sponsorship API.
|
|
31
31
|
* Otherwise it falls back to the provider's standard `signAndSendTransaction`.
|
|
32
32
|
*
|
|
33
|
-
* @
|
|
34
|
-
*
|
|
33
|
+
* @example
|
|
34
|
+
* ```ts
|
|
35
|
+
* const { signature } = await signAndSendTransaction({
|
|
36
|
+
* walletAccount: solAccount,
|
|
37
|
+
* transaction,
|
|
38
|
+
* });
|
|
39
|
+
* ```
|
|
40
|
+
*
|
|
41
|
+
* @param params.transaction - The transaction to sign and send.
|
|
42
|
+
* @param params.walletAccount - The wallet account to sign and send the transaction with.
|
|
43
|
+
* @param [params.sponsorshipMode] - Controls gas sponsorship: 'auto' (default) or 'off'.
|
|
35
44
|
* @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.
|
|
36
|
-
* @returns An object containing the signature
|
|
45
|
+
* @returns An object containing the signature.
|
|
46
|
+
* @throws {NotSolanaProviderError} If the wallet provider is not a Solana provider.
|
|
47
|
+
* @see signAndSendSponsoredTransaction
|
|
48
|
+
* @see signTransaction
|
|
37
49
|
* @notInstrumented
|
|
38
50
|
*/
|
|
39
51
|
export declare const signAndSendTransaction: ({ walletAccount, transaction, sponsorshipMode, options, }: SignAndSendTransactionParams, client?: import("@dynamic-labs-sdk/client").DynamicClient) => Promise<{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signAndSendTransaction.d.ts","sourceRoot":"","sources":["../../src/signAndSendTransaction/signAndSendTransaction.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,WAAW,EACX,WAAW,EACX,oBAAoB,EACrB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAKxE,KAAK,4BAA4B,GAAG;IAClC,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB;;;;;;;;;;;;;;OAcG;IACH,eAAe,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IACjC,WAAW,EAAE,WAAW,GAAG,oBAAoB,CAAC;IAChD,aAAa,EAAE,mBAAmB,CAAC;CACpC,CAAC;AAEF
|
|
1
|
+
{"version":3,"file":"signAndSendTransaction.d.ts","sourceRoot":"","sources":["../../src/signAndSendTransaction/signAndSendTransaction.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,WAAW,EACX,WAAW,EACX,oBAAoB,EACrB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAKxE,KAAK,4BAA4B,GAAG;IAClC,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB;;;;;;;;;;;;;;OAcG;IACH,eAAe,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IACjC,WAAW,EAAE,WAAW,GAAG,oBAAoB,CAAC;IAChD,aAAa,EAAE,mBAAmB,CAAC;CACpC,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,eAAO,MAAM,sBAAsB,8DAM9B,4BAA4B,gEAE9B,OAAO,CAAC;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,CA6B/B,CAAC"}
|
|
@@ -5,12 +5,24 @@ type SignTransactionParams = {
|
|
|
5
5
|
walletAccount: SolanaWalletAccount;
|
|
6
6
|
};
|
|
7
7
|
/**
|
|
8
|
-
* Signs a Solana transaction
|
|
9
|
-
*
|
|
10
|
-
* @
|
|
8
|
+
* Signs a Solana transaction without sending it.
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```ts
|
|
12
|
+
* const { signedTransaction } = await signTransaction({
|
|
13
|
+
* walletAccount: solAccount,
|
|
14
|
+
* transaction,
|
|
15
|
+
* });
|
|
16
|
+
* ```
|
|
17
|
+
*
|
|
18
|
+
* @param params.transaction - The transaction to sign.
|
|
19
|
+
* @param params.walletAccount - The wallet account to sign the transaction with.
|
|
11
20
|
* @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.
|
|
12
|
-
* @returns An object containing the signed transaction
|
|
13
|
-
|
|
21
|
+
* @returns An object containing the signed transaction.
|
|
22
|
+
* @throws {NotSolanaProviderError} If the wallet provider is not a Solana provider.
|
|
23
|
+
* @see signAndSendTransaction
|
|
24
|
+
* @see signAllTransactions
|
|
25
|
+
* @notInstrumented
|
|
14
26
|
*/
|
|
15
27
|
export declare const signTransaction: ({ walletAccount, transaction }: SignTransactionParams, client?: import("@dynamic-labs-sdk/client").DynamicClient) => Promise<{
|
|
16
28
|
signedTransaction: Transaction | VersionedTransaction;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signTransaction.d.ts","sourceRoot":"","sources":["../../src/signTransaction/signTransaction.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAEzE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAIxE,KAAK,qBAAqB,GAAG;IAC3B,WAAW,EAAE,WAAW,GAAG,oBAAoB,CAAC;IAChD,aAAa,EAAE,mBAAmB,CAAC;CACpC,CAAC;AAEF
|
|
1
|
+
{"version":3,"file":"signTransaction.d.ts","sourceRoot":"","sources":["../../src/signTransaction/signTransaction.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAEzE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAIxE,KAAK,qBAAqB,GAAG;IAC3B,WAAW,EAAE,WAAW,GAAG,oBAAoB,CAAC;IAChD,aAAa,EAAE,mBAAmB,CAAC;CACpC,CAAC;AAEF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,eAAe,mCACM,qBAAqB,gEAEpD,OAAO,CAAC;IAAE,iBAAiB,EAAE,WAAW,GAAG,oBAAoB,CAAA;CAAE,CAanE,CAAC"}
|
|
@@ -40,7 +40,9 @@ type SimulateSolanaTransactionParams = {
|
|
|
40
40
|
* @throws {InvalidParamError} If wallet account is not a Solana account.
|
|
41
41
|
* @throws {SimulationFailedError} If the simulation API call fails.
|
|
42
42
|
* @throws {FeeEstimationFailedError} If includeFees is true and fee calculation fails.
|
|
43
|
-
|
|
43
|
+
* @see calculateSolanaTransactionFee
|
|
44
|
+
* @see isSolanaWalletAccount
|
|
45
|
+
* @notInstrumented
|
|
44
46
|
*/
|
|
45
47
|
export declare const simulateSolanaTransaction: ({ walletAccount, transaction, includeFees, }: SimulateSolanaTransactionParams, client?: import("@dynamic-labs-sdk/client").DynamicClient) => Promise<SolanaSimulationResult>;
|
|
46
48
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"simulateSolanaTransaction.d.ts","sourceRoot":"","sources":["../../src/simulateSolanaTransaction/simulateSolanaTransaction.ts"],"names":[],"mappings":"AAQA,OAAO,EAEL,KAAK,WAAW,EAChB,KAAK,oBAAoB,EAC1B,MAAM,iBAAiB,CAAC;AAGzB,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAExE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAI7E,KAAK,+BAA+B,GAAG;IACrC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,WAAW,EAAE,WAAW,GAAG,oBAAoB,CAAC;IAChD,aAAa,EAAE,mBAAmB,CAAC;CACpC,CAAC;AAEF
|
|
1
|
+
{"version":3,"file":"simulateSolanaTransaction.d.ts","sourceRoot":"","sources":["../../src/simulateSolanaTransaction/simulateSolanaTransaction.ts"],"names":[],"mappings":"AAQA,OAAO,EAEL,KAAK,WAAW,EAChB,KAAK,oBAAoB,EAC1B,MAAM,iBAAiB,CAAC;AAGzB,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAExE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAI7E,KAAK,+BAA+B,GAAG;IACrC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,WAAW,EAAE,WAAW,GAAG,oBAAoB,CAAC;IAChD,aAAa,EAAE,mBAAmB,CAAC;CACpC,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,eAAO,MAAM,yBAAyB,iDAKjC,+BAA+B,gEAEjC,OAAO,CAAC,sBAAsB,CAiHhC,CAAC"}
|
|
@@ -6,7 +6,7 @@ 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.19.0";
|
|
10
10
|
|
|
11
11
|
//#endregion
|
|
12
12
|
//#region src/utils/fetchSolBalance/fetchSolBalance.ts
|
|
@@ -65,6 +65,12 @@ const registerSolanaNetworkProviderBuilder = (client) => {
|
|
|
65
65
|
* networkData,
|
|
66
66
|
* });
|
|
67
67
|
* ```
|
|
68
|
+
*
|
|
69
|
+
* @param params.networkData - Network configuration containing the RPC URL.
|
|
70
|
+
* @param [params.commitmentOrConfig] - Optional Solana commitment level or connection config.
|
|
71
|
+
* @returns A Solana Connection instance.
|
|
72
|
+
* @see isSolanaNetworkProvider
|
|
73
|
+
* @see calculateSolanaTransactionFee
|
|
68
74
|
* @notInstrumented
|
|
69
75
|
*/
|
|
70
76
|
const getSolanaConnection = ({ networkData, commitmentOrConfig }) => {
|
|
@@ -81,8 +87,16 @@ const isVersionedTransaction = (transaction) => !("instructions" in transaction)
|
|
|
81
87
|
/**
|
|
82
88
|
* Type guard function to check if a wallet account is a Solana wallet account.
|
|
83
89
|
*
|
|
90
|
+
* @example
|
|
91
|
+
* ```ts
|
|
92
|
+
* const accounts = getWalletAccounts();
|
|
93
|
+
* const solAccounts = accounts.filter(isSolanaWalletAccount);
|
|
94
|
+
* ```
|
|
95
|
+
*
|
|
84
96
|
* @param walletAccount - The wallet account to check.
|
|
85
97
|
* @returns True if the wallet account is a Solana wallet account, false otherwise.
|
|
98
|
+
* @see isSolanaNetworkProvider
|
|
99
|
+
* @see addSolanaExtension
|
|
86
100
|
* @notInstrumented
|
|
87
101
|
*/
|
|
88
102
|
const isSolanaWalletAccount = (walletAccount) => walletAccount.chain === "SOL";
|
|
@@ -138,8 +152,17 @@ var NotSolanaProviderError = class extends _dynamic_labs_sdk_client.BaseError {
|
|
|
138
152
|
/**
|
|
139
153
|
* Checks if Solana gas sponsorship is enabled for the current project.
|
|
140
154
|
*
|
|
155
|
+
* @example
|
|
156
|
+
* ```ts
|
|
157
|
+
* if (isSolanaGasSponsorshipEnabled()) {
|
|
158
|
+
* await signAndSendSponsoredTransaction({ walletAccount, transaction });
|
|
159
|
+
* }
|
|
160
|
+
* ```
|
|
161
|
+
*
|
|
141
162
|
* @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.
|
|
142
163
|
* @returns True if Solana gas sponsorship is enabled, false otherwise.
|
|
164
|
+
* @see signAndSendSponsoredTransaction
|
|
165
|
+
* @see signAndSendTransaction
|
|
143
166
|
* @notInstrumented
|
|
144
167
|
*/
|
|
145
168
|
const isSolanaGasSponsorshipEnabled = (client = (0, _dynamic_labs_sdk_client.getDefaultClient)()) => {
|
|
@@ -158,10 +181,22 @@ const isSolanaGasSponsorshipEnabled = (client = (0, _dynamic_labs_sdk_client.get
|
|
|
158
181
|
* Dynamic's gas sponsorship API.
|
|
159
182
|
* Otherwise it falls back to the provider's standard `signAndSendTransaction`.
|
|
160
183
|
*
|
|
161
|
-
* @
|
|
162
|
-
*
|
|
184
|
+
* @example
|
|
185
|
+
* ```ts
|
|
186
|
+
* const { signature } = await signAndSendTransaction({
|
|
187
|
+
* walletAccount: solAccount,
|
|
188
|
+
* transaction,
|
|
189
|
+
* });
|
|
190
|
+
* ```
|
|
191
|
+
*
|
|
192
|
+
* @param params.transaction - The transaction to sign and send.
|
|
193
|
+
* @param params.walletAccount - The wallet account to sign and send the transaction with.
|
|
194
|
+
* @param [params.sponsorshipMode] - Controls gas sponsorship: 'auto' (default) or 'off'.
|
|
163
195
|
* @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.
|
|
164
|
-
* @returns An object containing the signature
|
|
196
|
+
* @returns An object containing the signature.
|
|
197
|
+
* @throws {NotSolanaProviderError} If the wallet provider is not a Solana provider.
|
|
198
|
+
* @see signAndSendSponsoredTransaction
|
|
199
|
+
* @see signTransaction
|
|
165
200
|
* @notInstrumented
|
|
166
201
|
*/
|
|
167
202
|
const signAndSendTransaction = async ({ walletAccount, transaction, sponsorshipMode = "auto", options }, client = (0, _dynamic_labs_sdk_client.getDefaultClient)()) => {
|
|
@@ -355,4 +390,4 @@ Object.defineProperty(exports, 'version', {
|
|
|
355
390
|
return version;
|
|
356
391
|
}
|
|
357
392
|
});
|
|
358
|
-
//# sourceMappingURL=solanaTransferAmount-
|
|
393
|
+
//# sourceMappingURL=solanaTransferAmount-B4keau5s.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"solanaTransferAmount-B4keau5s.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 *\n * @param params.networkData - Network configuration containing the RPC URL.\n * @param [params.commitmentOrConfig] - Optional Solana commitment level or connection config.\n * @returns A Solana Connection instance.\n * @see isSolanaNetworkProvider\n * @see calculateSolanaTransactionFee\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 * @example\n * ```ts\n * const accounts = getWalletAccounts();\n * const solAccounts = accounts.filter(isSolanaWalletAccount);\n * ```\n *\n * @param walletAccount - The wallet account to check.\n * @returns True if the wallet account is a Solana wallet account, false otherwise.\n * @see isSolanaNetworkProvider\n * @see addSolanaExtension\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 * @example\n * ```ts\n * if (isSolanaGasSponsorshipEnabled()) {\n * await signAndSendSponsoredTransaction({ walletAccount, transaction });\n * }\n * ```\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 * @see signAndSendSponsoredTransaction\n * @see signAndSendTransaction\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 * @example\n * ```ts\n * const { signature } = await signAndSendTransaction({\n * walletAccount: solAccount,\n * transaction,\n * });\n * ```\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 [params.sponsorshipMode] - Controls gas sponsorship: 'auto' (default) or 'off'.\n * @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.\n * @returns An object containing the signature.\n * @throws {NotSolanaProviderError} If the wallet provider is not a Solana provider.\n * @see signAndSendSponsoredTransaction\n * @see signTransaction\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,7 +5,7 @@ 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.19.0";
|
|
9
9
|
|
|
10
10
|
//#endregion
|
|
11
11
|
//#region src/utils/fetchSolBalance/fetchSolBalance.ts
|
|
@@ -64,6 +64,12 @@ const registerSolanaNetworkProviderBuilder = (client) => {
|
|
|
64
64
|
* networkData,
|
|
65
65
|
* });
|
|
66
66
|
* ```
|
|
67
|
+
*
|
|
68
|
+
* @param params.networkData - Network configuration containing the RPC URL.
|
|
69
|
+
* @param [params.commitmentOrConfig] - Optional Solana commitment level or connection config.
|
|
70
|
+
* @returns A Solana Connection instance.
|
|
71
|
+
* @see isSolanaNetworkProvider
|
|
72
|
+
* @see calculateSolanaTransactionFee
|
|
67
73
|
* @notInstrumented
|
|
68
74
|
*/
|
|
69
75
|
const getSolanaConnection = ({ networkData, commitmentOrConfig }) => {
|
|
@@ -80,8 +86,16 @@ const isVersionedTransaction = (transaction) => !("instructions" in transaction)
|
|
|
80
86
|
/**
|
|
81
87
|
* Type guard function to check if a wallet account is a Solana wallet account.
|
|
82
88
|
*
|
|
89
|
+
* @example
|
|
90
|
+
* ```ts
|
|
91
|
+
* const accounts = getWalletAccounts();
|
|
92
|
+
* const solAccounts = accounts.filter(isSolanaWalletAccount);
|
|
93
|
+
* ```
|
|
94
|
+
*
|
|
83
95
|
* @param walletAccount - The wallet account to check.
|
|
84
96
|
* @returns True if the wallet account is a Solana wallet account, false otherwise.
|
|
97
|
+
* @see isSolanaNetworkProvider
|
|
98
|
+
* @see addSolanaExtension
|
|
85
99
|
* @notInstrumented
|
|
86
100
|
*/
|
|
87
101
|
const isSolanaWalletAccount = (walletAccount) => walletAccount.chain === "SOL";
|
|
@@ -137,8 +151,17 @@ var NotSolanaProviderError = class extends BaseError {
|
|
|
137
151
|
/**
|
|
138
152
|
* Checks if Solana gas sponsorship is enabled for the current project.
|
|
139
153
|
*
|
|
154
|
+
* @example
|
|
155
|
+
* ```ts
|
|
156
|
+
* if (isSolanaGasSponsorshipEnabled()) {
|
|
157
|
+
* await signAndSendSponsoredTransaction({ walletAccount, transaction });
|
|
158
|
+
* }
|
|
159
|
+
* ```
|
|
160
|
+
*
|
|
140
161
|
* @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.
|
|
141
162
|
* @returns True if Solana gas sponsorship is enabled, false otherwise.
|
|
163
|
+
* @see signAndSendSponsoredTransaction
|
|
164
|
+
* @see signAndSendTransaction
|
|
142
165
|
* @notInstrumented
|
|
143
166
|
*/
|
|
144
167
|
const isSolanaGasSponsorshipEnabled = (client = getDefaultClient$1()) => {
|
|
@@ -157,10 +180,22 @@ const isSolanaGasSponsorshipEnabled = (client = getDefaultClient$1()) => {
|
|
|
157
180
|
* Dynamic's gas sponsorship API.
|
|
158
181
|
* Otherwise it falls back to the provider's standard `signAndSendTransaction`.
|
|
159
182
|
*
|
|
160
|
-
* @
|
|
161
|
-
*
|
|
183
|
+
* @example
|
|
184
|
+
* ```ts
|
|
185
|
+
* const { signature } = await signAndSendTransaction({
|
|
186
|
+
* walletAccount: solAccount,
|
|
187
|
+
* transaction,
|
|
188
|
+
* });
|
|
189
|
+
* ```
|
|
190
|
+
*
|
|
191
|
+
* @param params.transaction - The transaction to sign and send.
|
|
192
|
+
* @param params.walletAccount - The wallet account to sign and send the transaction with.
|
|
193
|
+
* @param [params.sponsorshipMode] - Controls gas sponsorship: 'auto' (default) or 'off'.
|
|
162
194
|
* @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.
|
|
163
|
-
* @returns An object containing the signature
|
|
195
|
+
* @returns An object containing the signature.
|
|
196
|
+
* @throws {NotSolanaProviderError} If the wallet provider is not a Solana provider.
|
|
197
|
+
* @see signAndSendSponsoredTransaction
|
|
198
|
+
* @see signTransaction
|
|
164
199
|
* @notInstrumented
|
|
165
200
|
*/
|
|
166
201
|
const signAndSendTransaction = async ({ walletAccount, transaction, sponsorshipMode = "auto", options }, client = getDefaultClient$1()) => {
|
|
@@ -277,4 +312,4 @@ const solanaTransferAmount = async ({ amount, recipient, token, walletAccount },
|
|
|
277
312
|
|
|
278
313
|
//#endregion
|
|
279
314
|
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-
|
|
315
|
+
//# sourceMappingURL=solanaTransferAmount-CdkPbAES.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"solanaTransferAmount-CdkPbAES.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 *\n * @param params.networkData - Network configuration containing the RPC URL.\n * @param [params.commitmentOrConfig] - Optional Solana commitment level or connection config.\n * @returns A Solana Connection instance.\n * @see isSolanaNetworkProvider\n * @see calculateSolanaTransactionFee\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 * @example\n * ```ts\n * const accounts = getWalletAccounts();\n * const solAccounts = accounts.filter(isSolanaWalletAccount);\n * ```\n *\n * @param walletAccount - The wallet account to check.\n * @returns True if the wallet account is a Solana wallet account, false otherwise.\n * @see isSolanaNetworkProvider\n * @see addSolanaExtension\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 * @example\n * ```ts\n * if (isSolanaGasSponsorshipEnabled()) {\n * await signAndSendSponsoredTransaction({ walletAccount, transaction });\n * }\n * ```\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 * @see signAndSendSponsoredTransaction\n * @see signAndSendTransaction\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 * @example\n * ```ts\n * const { signature } = await signAndSendTransaction({\n * walletAccount: solAccount,\n * transaction,\n * });\n * ```\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 [params.sponsorshipMode] - Controls gas sponsorship: 'auto' (default) or 'off'.\n * @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.\n * @returns An object containing the signature.\n * @throws {NotSolanaProviderError} If the wallet provider is not a Solana provider.\n * @see signAndSendSponsoredTransaction\n * @see signTransaction\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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"}
|