@dynamic-labs/solana-core 4.96.3 → 4.97.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,4 +1,26 @@
1
1
 
2
+ ## [4.97.0](https://github.com/dynamic-labs/dynamic-auth/compare/v4.96.4...v4.97.0) (2026-08-27)
3
+
4
+
5
+ ### Features
6
+
7
+ * **screening:** connected-wallet transaction screening [v4 backport] (DYNT-1663) ([#12284](https://github.com/dynamic-labs/dynamic-auth/issues/12284)) ([294adba](https://github.com/dynamic-labs/dynamic-auth/commit/294adba7dba8f321f3b1e8413f73545701e51252)), closes [#12160](https://github.com/dynamic-labs/dynamic-auth/issues/12160) [#12167](https://github.com/dynamic-labs/dynamic-auth/issues/12167) [#12168](https://github.com/dynamic-labs/dynamic-auth/issues/12168) [#12169](https://github.com/dynamic-labs/dynamic-auth/issues/12169) [#12172](https://github.com/dynamic-labs/dynamic-auth/issues/12172)
8
+
9
+
10
+ ### Bug Fixes
11
+
12
+ * **screening:** wire connected-wallet screening into the Send Balance UI (DYNT-1663) ([#12289](https://github.com/dynamic-labs/dynamic-auth/issues/12289)) ([1587cd8](https://github.com/dynamic-labs/dynamic-auth/commit/1587cd833370e18fa383f942521500e4c1576390))
13
+
14
+ ### [4.96.4](https://github.com/dynamic-labs/dynamic-auth/compare/v4.96.3...v4.96.4) (2026-08-26)
15
+
16
+
17
+ ### Bug Fixes
18
+
19
+ * remediate high-severity tar, nanoid and js-yaml vulnerabilities (v4) ([#12269](https://github.com/dynamic-labs/dynamic-auth/issues/12269)) ([15a32fe](https://github.com/dynamic-labs/dynamic-auth/commit/15a32fe023038efaa3298d6792997a86b5f0cb0b))
20
+ * **transaction-card:** use walletConnector prop for network/fee instead of primaryWallet [v4 backport] ([#12065](https://github.com/dynamic-labs/dynamic-auth/issues/12065)) ([699c42b](https://github.com/dynamic-labs/dynamic-auth/commit/699c42b876eba7e1b0129eda27fa096ba7e567fc)), closes [#12063](https://github.com/dynamic-labs/dynamic-auth/issues/12063)
21
+ * **waas-svm:** instrument sponsorship retry attempts [v4 backport] ([#12282](https://github.com/dynamic-labs/dynamic-auth/issues/12282)) ([b2f2392](https://github.com/dynamic-labs/dynamic-auth/commit/b2f23929093ebb48214c1ddb65b3e56a58e9f8da))
22
+ * **wallet-connect:** reopen WalletConnect IndexedDB when the browser closes the connection (v4 backport) ([#12263](https://github.com/dynamic-labs/dynamic-auth/issues/12263)) ([4d0105d](https://github.com/dynamic-labs/dynamic-auth/commit/4d0105d2343c5bf75f89382e4be01b75413569e7))
23
+
2
24
  ### [4.96.3](https://github.com/dynamic-labs/dynamic-auth/compare/v4.96.2...v4.96.3) (2026-08-19)
3
25
 
4
26
 
package/package.cjs CHANGED
@@ -3,6 +3,6 @@
3
3
 
4
4
  Object.defineProperty(exports, '__esModule', { value: true });
5
5
 
6
- var version = "4.96.3";
6
+ var version = "4.97.0";
7
7
 
8
8
  exports.version = version;
package/package.js CHANGED
@@ -1,4 +1,4 @@
1
1
  'use client'
2
- var version = "4.96.3";
2
+ var version = "4.97.0";
3
3
 
4
4
  export { version };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dynamic-labs/solana-core",
3
- "version": "4.96.3",
3
+ "version": "4.97.0",
4
4
  "description": "Core package for utilities and types for solana",
5
5
  "author": "Dynamic Labs, Inc.",
6
6
  "license": "MIT",
@@ -19,14 +19,14 @@
19
19
  "homepage": "https://www.dynamic.xyz/",
20
20
  "dependencies": {
21
21
  "@dynamic-labs/sdk-api-core": "0.12.0",
22
- "@dynamic-labs/utils": "4.96.3",
22
+ "@dynamic-labs/utils": "4.97.0",
23
23
  "@solana/web3.js": "1.98.1",
24
24
  "@solana/spl-token": "0.4.14",
25
- "@dynamic-labs/assert-package-version": "4.96.3",
26
- "@dynamic-labs/rpc-providers": "4.96.3",
27
- "@dynamic-labs/types": "4.96.3",
28
- "@dynamic-labs/wallet-book": "4.96.3",
29
- "@dynamic-labs/wallet-connector-core": "4.96.3",
25
+ "@dynamic-labs/assert-package-version": "4.97.0",
26
+ "@dynamic-labs/rpc-providers": "4.97.0",
27
+ "@dynamic-labs/types": "4.97.0",
28
+ "@dynamic-labs/wallet-book": "4.97.0",
29
+ "@dynamic-labs/wallet-connector-core": "4.97.0",
30
30
  "eventemitter3": "5.0.1"
31
31
  },
32
32
  "peerDependencies": {}
@@ -13,6 +13,7 @@ var getOverrideRpcUrlForNetwork = require('../utils/getOverrideRpcUrlForNetwork/
13
13
  require('@solana/spl-token');
14
14
  var constants = require('../constants.cjs');
15
15
  var getBackwardsCompatibleSolNetworks = require('../utils/getBackwardsCompatibleSolNetworks/getBackwardsCompatibleSolNetworks.cjs');
16
+ require('@dynamic-labs/types');
16
17
 
17
18
  const MEMO_PROGRAM_ID = new web3_js.PublicKey('MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr');
18
19
  class SolanaWalletConnector extends walletConnectorCore.WalletConnectorBase {
@@ -9,6 +9,7 @@ import { getOverrideRpcUrlForNetwork } from '../utils/getOverrideRpcUrlForNetwor
9
9
  import '@solana/spl-token';
10
10
  import { DYNAMIC_SVM_NETWORK_ID_LS_KEY } from '../constants.js';
11
11
  import { getBackwardsCompatibleSolNetworks } from '../utils/getBackwardsCompatibleSolNetworks/getBackwardsCompatibleSolNetworks.js';
12
+ import '@dynamic-labs/types';
12
13
 
13
14
  const MEMO_PROGRAM_ID = new PublicKey('MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr');
14
15
  class SolanaWalletConnector extends WalletConnectorBase {
package/src/index.cjs CHANGED
@@ -19,6 +19,8 @@ var getOverrideRpcUrlForNetwork = require('./utils/getOverrideRpcUrlForNetwork/g
19
19
  var createNonNativeTokenTransfer = require('./utils/createNonNativeTokenTransfer/createNonNativeTokenTransfer.cjs');
20
20
  var createSolTransfer = require('./utils/createSolTransfer/createSolTransfer.cjs');
21
21
  var getBackwardsCompatibleSolNetworks = require('./utils/getBackwardsCompatibleSolNetworks/getBackwardsCompatibleSolNetworks.cjs');
22
+ var serializeTransactionForScreening = require('./utils/serializeTransactionForScreening/serializeTransactionForScreening.cjs');
23
+ var screenSolanaTransactions = require('./utils/screenSolanaTransactions/screenSolanaTransactions.cjs');
22
24
  var SolanaWallet = require('./wallet/SolanaWallet.cjs');
23
25
  var isSolanaWallet = require('./wallet/isSolanaWallet/isSolanaWallet.cjs');
24
26
  var isLedgerSolanaWallet = require('./wallet/isLedgerSolanaWallet/isLedgerSolanaWallet.cjs');
@@ -38,6 +40,8 @@ exports.getOverrideRpcUrlForNetwork = getOverrideRpcUrlForNetwork.getOverrideRpc
38
40
  exports.createNonNativeTokenTransfer = createNonNativeTokenTransfer.createNonNativeTokenTransfer;
39
41
  exports.createSolTransfer = createSolTransfer.createSolTransfer;
40
42
  exports.getBackwardsCompatibleSolNetworks = getBackwardsCompatibleSolNetworks.getBackwardsCompatibleSolNetworks;
43
+ exports.serializeTransactionForScreening = serializeTransactionForScreening.serializeTransactionForScreening;
44
+ exports.screenSolanaTransactions = screenSolanaTransactions.screenSolanaTransactions;
41
45
  exports.SolanaWallet = SolanaWallet.SolanaWallet;
42
46
  exports.isSolanaWallet = isSolanaWallet.isSolanaWallet;
43
47
  exports.isLedgerSolanaWallet = isLedgerSolanaWallet.isLedgerSolanaWallet;
package/src/index.js CHANGED
@@ -15,6 +15,8 @@ export { getOverrideRpcUrlForNetwork } from './utils/getOverrideRpcUrlForNetwork
15
15
  export { createNonNativeTokenTransfer } from './utils/createNonNativeTokenTransfer/createNonNativeTokenTransfer.js';
16
16
  export { createSolTransfer } from './utils/createSolTransfer/createSolTransfer.js';
17
17
  export { getBackwardsCompatibleSolNetworks } from './utils/getBackwardsCompatibleSolNetworks/getBackwardsCompatibleSolNetworks.js';
18
+ export { serializeTransactionForScreening } from './utils/serializeTransactionForScreening/serializeTransactionForScreening.js';
19
+ export { screenSolanaTransactions } from './utils/screenSolanaTransactions/screenSolanaTransactions.js';
18
20
  export { SolanaWallet } from './wallet/SolanaWallet.js';
19
21
  export { isSolanaWallet } from './wallet/isSolanaWallet/isSolanaWallet.js';
20
22
  export { isLedgerSolanaWallet } from './wallet/isLedgerSolanaWallet/isLedgerSolanaWallet.js';
@@ -7,6 +7,8 @@ require('../../../_virtual/_tslib.cjs');
7
7
  require('@solana/spl-token');
8
8
  require('@dynamic-labs/utils');
9
9
  var getOverrideRpcUrlForNetwork = require('../../utils/getOverrideRpcUrlForNetwork/getOverrideRpcUrlForNetwork.cjs');
10
+ require('@dynamic-labs/types');
11
+ require('@dynamic-labs/wallet-connector-core');
10
12
 
11
13
  rpcProviders.ChainRpcProviders.getSolanaProviderByChainId = (rpcProviders, chainId) => {
12
14
  var _a;
@@ -5,6 +5,8 @@ import '../../../_virtual/_tslib.js';
5
5
  import '@solana/spl-token';
6
6
  import '@dynamic-labs/utils';
7
7
  import { getOverrideRpcUrlForNetwork } from '../../utils/getOverrideRpcUrlForNetwork/getOverrideRpcUrlForNetwork.js';
8
+ import '@dynamic-labs/types';
9
+ import '@dynamic-labs/wallet-connector-core';
8
10
 
9
11
  ChainRpcProviders.getSolanaProviderByChainId = (rpcProviders, chainId) => {
10
12
  var _a;
@@ -8,3 +8,5 @@ export { getOverrideRpcUrlForNetwork } from './getOverrideRpcUrlForNetwork';
8
8
  export { createNonNativeTokenTransfer } from './createNonNativeTokenTransfer';
9
9
  export { createSolTransfer } from './createSolTransfer';
10
10
  export { getBackwardsCompatibleSolNetworks } from './getBackwardsCompatibleSolNetworks';
11
+ export { serializeTransactionForScreening } from './serializeTransactionForScreening';
12
+ export { screenSolanaTransactions } from './screenSolanaTransactions';
@@ -0,0 +1 @@
1
+ export { screenSolanaTransactions } from './screenSolanaTransactions';
@@ -0,0 +1,42 @@
1
+ 'use client'
2
+ 'use strict';
3
+
4
+ Object.defineProperty(exports, '__esModule', { value: true });
5
+
6
+ var _tslib = require('../../../_virtual/_tslib.cjs');
7
+ var types = require('@dynamic-labs/types');
8
+ var walletConnectorCore = require('@dynamic-labs/wallet-connector-core');
9
+ var serializeTransactionForScreening = require('../serializeTransactionForScreening/serializeTransactionForScreening.cjs');
10
+
11
+ /**
12
+ * Screens the transactions' destinations before the wallet is prompted to
13
+ * sign. Rejects only on an explicit block; a transaction that cannot be
14
+ * serialized is skipped (fail-open) so screening never breaks signing.
15
+ */
16
+ const screenSolanaTransactions = (_a) => _tslib.__awaiter(void 0, [_a], void 0, function* ({ transactionScreening, transactions, senderAddress, }) {
17
+ if (!transactionScreening)
18
+ return;
19
+ // Serialized one at a time: legacy transactions still compile their
20
+ // message on serialize, so an unprepared one throws, and mapping the batch
21
+ // as a unit would drop screening for its siblings too.
22
+ const serializedTransactions = transactions.flatMap((transaction) => {
23
+ try {
24
+ return [serializeTransactionForScreening.serializeTransactionForScreening(transaction)];
25
+ }
26
+ catch (error) {
27
+ walletConnectorCore.logger.warn('Failed to serialize transaction for screening', {
28
+ message: error instanceof Error ? error.message : 'unknown error',
29
+ });
30
+ return [];
31
+ }
32
+ });
33
+ if (serializedTransactions.length === 0)
34
+ return;
35
+ yield transactionScreening.screenTransaction({
36
+ chain: types.TransactionScreeningChain.SOL,
37
+ context: { svmTransaction: { serializedTransactions } },
38
+ senderAddress,
39
+ });
40
+ });
41
+
42
+ exports.screenSolanaTransactions = screenSolanaTransactions;
@@ -0,0 +1,13 @@
1
+ import { Transaction, VersionedTransaction } from '@solana/web3.js';
2
+ import { TransactionScreeningService } from '@dynamic-labs/types';
3
+ export type ScreenSolanaTransactionsParams = {
4
+ transactionScreening: TransactionScreeningService | undefined;
5
+ transactions: (Transaction | VersionedTransaction)[];
6
+ senderAddress: string;
7
+ };
8
+ /**
9
+ * Screens the transactions' destinations before the wallet is prompted to
10
+ * sign. Rejects only on an explicit block; a transaction that cannot be
11
+ * serialized is skipped (fail-open) so screening never breaks signing.
12
+ */
13
+ export declare const screenSolanaTransactions: ({ transactionScreening, transactions, senderAddress, }: ScreenSolanaTransactionsParams) => Promise<void>;
@@ -0,0 +1,38 @@
1
+ 'use client'
2
+ import { __awaiter } from '../../../_virtual/_tslib.js';
3
+ import { TransactionScreeningChain } from '@dynamic-labs/types';
4
+ import { logger } from '@dynamic-labs/wallet-connector-core';
5
+ import { serializeTransactionForScreening } from '../serializeTransactionForScreening/serializeTransactionForScreening.js';
6
+
7
+ /**
8
+ * Screens the transactions' destinations before the wallet is prompted to
9
+ * sign. Rejects only on an explicit block; a transaction that cannot be
10
+ * serialized is skipped (fail-open) so screening never breaks signing.
11
+ */
12
+ const screenSolanaTransactions = (_a) => __awaiter(void 0, [_a], void 0, function* ({ transactionScreening, transactions, senderAddress, }) {
13
+ if (!transactionScreening)
14
+ return;
15
+ // Serialized one at a time: legacy transactions still compile their
16
+ // message on serialize, so an unprepared one throws, and mapping the batch
17
+ // as a unit would drop screening for its siblings too.
18
+ const serializedTransactions = transactions.flatMap((transaction) => {
19
+ try {
20
+ return [serializeTransactionForScreening(transaction)];
21
+ }
22
+ catch (error) {
23
+ logger.warn('Failed to serialize transaction for screening', {
24
+ message: error instanceof Error ? error.message : 'unknown error',
25
+ });
26
+ return [];
27
+ }
28
+ });
29
+ if (serializedTransactions.length === 0)
30
+ return;
31
+ yield transactionScreening.screenTransaction({
32
+ chain: TransactionScreeningChain.SOL,
33
+ context: { svmTransaction: { serializedTransactions } },
34
+ senderAddress,
35
+ });
36
+ });
37
+
38
+ export { screenSolanaTransactions };
@@ -0,0 +1 @@
1
+ export { serializeTransactionForScreening } from './serializeTransactionForScreening';
@@ -0,0 +1,20 @@
1
+ 'use client'
2
+ 'use strict';
3
+
4
+ Object.defineProperty(exports, '__esModule', { value: true });
5
+
6
+ var isVersionedTransaction = require('../isVersionedTransaction/isVersionedTransaction.cjs');
7
+
8
+ /**
9
+ * Serializes an unsigned transaction to base64 for the sanctions screening
10
+ * API. Unlike encodeTransactionToBase64, this must not require signatures —
11
+ * screening runs before the wallet is prompted to sign.
12
+ */
13
+ const serializeTransactionForScreening = (transaction) => Buffer.from(isVersionedTransaction.isVersionedTransaction(transaction)
14
+ ? transaction.serialize()
15
+ : transaction.serialize({
16
+ requireAllSignatures: false,
17
+ verifySignatures: false,
18
+ })).toString('base64');
19
+
20
+ exports.serializeTransactionForScreening = serializeTransactionForScreening;
@@ -0,0 +1,7 @@
1
+ import { Transaction, VersionedTransaction } from '@solana/web3.js';
2
+ /**
3
+ * Serializes an unsigned transaction to base64 for the sanctions screening
4
+ * API. Unlike encodeTransactionToBase64, this must not require signatures —
5
+ * screening runs before the wallet is prompted to sign.
6
+ */
7
+ export declare const serializeTransactionForScreening: (transaction: Transaction | VersionedTransaction) => string;
@@ -0,0 +1,16 @@
1
+ 'use client'
2
+ import { isVersionedTransaction } from '../isVersionedTransaction/isVersionedTransaction.js';
3
+
4
+ /**
5
+ * Serializes an unsigned transaction to base64 for the sanctions screening
6
+ * API. Unlike encodeTransactionToBase64, this must not require signatures —
7
+ * screening runs before the wallet is prompted to sign.
8
+ */
9
+ const serializeTransactionForScreening = (transaction) => Buffer.from(isVersionedTransaction(transaction)
10
+ ? transaction.serialize()
11
+ : transaction.serialize({
12
+ requireAllSignatures: false,
13
+ verifySignatures: false,
14
+ })).toString('base64');
15
+
16
+ export { serializeTransactionForScreening };
@@ -10,6 +10,7 @@ require('@solana/web3.js');
10
10
  require('@solana/spl-token');
11
11
  var createNonNativeTokenTransfer = require('../utils/createNonNativeTokenTransfer/createNonNativeTokenTransfer.cjs');
12
12
  var createSolTransfer = require('../utils/createSolTransfer/createSolTransfer.cjs');
13
+ var screenSolanaTransactions = require('../utils/screenSolanaTransactions/screenSolanaTransactions.cjs');
13
14
 
14
15
  class SolanaWallet extends walletConnectorCore.Wallet {
15
16
  /**
@@ -72,10 +73,20 @@ class SolanaWallet extends walletConnectorCore.Wallet {
72
73
  return utils.cloneObjectWithOverrides(signer, {
73
74
  signAllTransactions: (transactions) => _tslib.__awaiter(this, void 0, void 0, function* () {
74
75
  yield this.sync();
76
+ yield screenSolanaTransactions.screenSolanaTransactions({
77
+ senderAddress: this.address,
78
+ transactionScreening: this._connector.transactionScreening,
79
+ transactions,
80
+ });
75
81
  return signer.signAllTransactions(transactions);
76
82
  }),
77
83
  signAndSendTransaction: (transaction, ...args) => _tslib.__awaiter(this, void 0, void 0, function* () {
78
84
  yield this.sync();
85
+ yield screenSolanaTransactions.screenSolanaTransactions({
86
+ senderAddress: this.address,
87
+ transactionScreening: this._connector.transactionScreening,
88
+ transactions: [transaction],
89
+ });
79
90
  return signer.signAndSendTransaction(transaction, ...args);
80
91
  }),
81
92
  signMessage: (message, ...args) => _tslib.__awaiter(this, void 0, void 0, function* () {
@@ -84,6 +95,11 @@ class SolanaWallet extends walletConnectorCore.Wallet {
84
95
  }),
85
96
  signTransaction: (transaction) => _tslib.__awaiter(this, void 0, void 0, function* () {
86
97
  yield this.sync();
98
+ yield screenSolanaTransactions.screenSolanaTransactions({
99
+ senderAddress: this.address,
100
+ transactionScreening: this._connector.transactionScreening,
101
+ transactions: [transaction],
102
+ });
87
103
  return signer.signTransaction(transaction);
88
104
  }),
89
105
  });
@@ -6,6 +6,7 @@ import '@solana/web3.js';
6
6
  import '@solana/spl-token';
7
7
  import { createNonNativeTokenTransfer } from '../utils/createNonNativeTokenTransfer/createNonNativeTokenTransfer.js';
8
8
  import { createSolTransfer } from '../utils/createSolTransfer/createSolTransfer.js';
9
+ import { screenSolanaTransactions } from '../utils/screenSolanaTransactions/screenSolanaTransactions.js';
9
10
 
10
11
  class SolanaWallet extends Wallet {
11
12
  /**
@@ -68,10 +69,20 @@ class SolanaWallet extends Wallet {
68
69
  return cloneObjectWithOverrides(signer, {
69
70
  signAllTransactions: (transactions) => __awaiter(this, void 0, void 0, function* () {
70
71
  yield this.sync();
72
+ yield screenSolanaTransactions({
73
+ senderAddress: this.address,
74
+ transactionScreening: this._connector.transactionScreening,
75
+ transactions,
76
+ });
71
77
  return signer.signAllTransactions(transactions);
72
78
  }),
73
79
  signAndSendTransaction: (transaction, ...args) => __awaiter(this, void 0, void 0, function* () {
74
80
  yield this.sync();
81
+ yield screenSolanaTransactions({
82
+ senderAddress: this.address,
83
+ transactionScreening: this._connector.transactionScreening,
84
+ transactions: [transaction],
85
+ });
75
86
  return signer.signAndSendTransaction(transaction, ...args);
76
87
  }),
77
88
  signMessage: (message, ...args) => __awaiter(this, void 0, void 0, function* () {
@@ -80,6 +91,11 @@ class SolanaWallet extends Wallet {
80
91
  }),
81
92
  signTransaction: (transaction) => __awaiter(this, void 0, void 0, function* () {
82
93
  yield this.sync();
94
+ yield screenSolanaTransactions({
95
+ senderAddress: this.address,
96
+ transactionScreening: this._connector.transactionScreening,
97
+ transactions: [transaction],
98
+ });
83
99
  return signer.signTransaction(transaction);
84
100
  }),
85
101
  });