@dynamic-labs/solana-core 5.1.0 → 5.3.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,30 @@
1
1
 
2
+ ## [5.3.0](https://github.com/dynamic-labs/dynamic-auth/compare/v5.2.0...v5.3.0) (2026-08-12)
3
+
4
+
5
+ ### Features
6
+
7
+ * **screening:** add transaction-screening service, types, and connector wiring (DYNT-1663) ([#12160](https://github.com/dynamic-labs/dynamic-auth/issues/12160)) ([d8df6a1](https://github.com/dynamic-labs/dynamic-auth/commit/d8df6a1fccbb6370c140454d9297eabd97699e35)), closes [#12172](https://github.com/dynamic-labs/dynamic-auth/issues/12172) [#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)
8
+ * **screening:** screen Bitcoin connected-wallet transactions (DYNT-1663) ([#12169](https://github.com/dynamic-labs/dynamic-auth/issues/12169)) ([f34d1c3](https://github.com/dynamic-labs/dynamic-auth/commit/f34d1c31fe10d0cb02b4f7462dd4900d0256604a))
9
+ * **screening:** screen EVM connected-wallet sends (DYNT-1663) ([#12167](https://github.com/dynamic-labs/dynamic-auth/issues/12167)) ([1b72b24](https://github.com/dynamic-labs/dynamic-auth/commit/1b72b24393a49153d74ce715a44d262e8e48ddc7))
10
+ * **screening:** screen Solana connected-wallet transactions (DYNT-1663) ([#12168](https://github.com/dynamic-labs/dynamic-auth/issues/12168)) ([000eb18](https://github.com/dynamic-labs/dynamic-auth/commit/000eb180aca8349804953ff7738c0ba984a2fa21))
11
+
12
+
13
+ ### Bug Fixes
14
+
15
+ * add PhoneNumberAlreadyLinkedError and map duplicate-phone backend code ([#12145](https://github.com/dynamic-labs/dynamic-auth/issues/12145)) ([9d13b5f](https://github.com/dynamic-labs/dynamic-auth/commit/9d13b5f8b22716b4c9ce206ee870aab5bd745b8b))
16
+ * **react-native-extension:** throw clear error when react-native-keychain native module is missing ([#12197](https://github.com/dynamic-labs/dynamic-auth/issues/12197)) ([b9983e1](https://github.com/dynamic-labs/dynamic-auth/commit/b9983e1f1aefa9a9bbdc1435f706a05e64f34f1c))
17
+ * security updates ([#12187](https://github.com/dynamic-labs/dynamic-auth/issues/12187)) ([d3a31e2](https://github.com/dynamic-labs/dynamic-auth/commit/d3a31e23533b6b7739851a3b747d62ba13d318b2))
18
+ * security updates ([#12208](https://github.com/dynamic-labs/dynamic-auth/issues/12208)) ([9e9472a](https://github.com/dynamic-labs/dynamic-auth/commit/9e9472acfbe01f7ac9e160829cc10e53c65f91e7))
19
+ * **sdk-react-core:** avoid spurious WaaS client rebuild on transient user sessionId churn ([#12182](https://github.com/dynamic-labs/dynamic-auth/issues/12182)) ([480b2ec](https://github.com/dynamic-labs/dynamic-auth/commit/480b2ecc87486a852e75e8814a76fb59ffe40c5d))
20
+
21
+ ## [5.2.0](https://github.com/dynamic-labs/dynamic-auth/compare/v5.1.0...v5.2.0) (2026-08-06)
22
+
23
+
24
+ ### Features
25
+
26
+ * **webview-controller:** validate native SDK locale override before applying ([#12155](https://github.com/dynamic-labs/dynamic-auth/issues/12155)) ([4a9e1da](https://github.com/dynamic-labs/dynamic-auth/commit/4a9e1dafb59099c47d3678cc24f8475164c3db59))
27
+
2
28
  ## [5.1.0](https://github.com/dynamic-labs/dynamic-auth/compare/v5.0.0...v5.1.0) (2026-08-04)
3
29
 
4
30
 
package/package.cjs CHANGED
@@ -3,6 +3,6 @@
3
3
 
4
4
  Object.defineProperty(exports, '__esModule', { value: true });
5
5
 
6
- var version = "5.1.0";
6
+ var version = "5.3.0";
7
7
 
8
8
  exports.version = version;
package/package.js CHANGED
@@ -1,4 +1,4 @@
1
1
  'use client'
2
- var version = "5.1.0";
2
+ var version = "5.3.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": "5.1.0",
3
+ "version": "5.3.0",
4
4
  "description": "Core package for utilities and types for solana",
5
5
  "author": "Dynamic Labs, Inc.",
6
6
  "license": "MIT",
@@ -18,15 +18,15 @@
18
18
  },
19
19
  "homepage": "https://www.dynamic.xyz/",
20
20
  "dependencies": {
21
- "@dynamic-labs/sdk-api-core": "0.0.1093",
22
- "@dynamic-labs/utils": "5.1.0",
21
+ "@dynamic-labs/sdk-api-core": "0.0.1118",
22
+ "@dynamic-labs/utils": "5.3.0",
23
23
  "@solana/web3.js": "1.98.1",
24
24
  "@solana/spl-token": "0.4.14",
25
- "@dynamic-labs/assert-package-version": "5.1.0",
26
- "@dynamic-labs/rpc-providers": "5.1.0",
27
- "@dynamic-labs/types": "5.1.0",
28
- "@dynamic-labs/wallet-book": "5.1.0",
29
- "@dynamic-labs/wallet-connector-core": "5.1.0",
25
+ "@dynamic-labs/assert-package-version": "5.3.0",
26
+ "@dynamic-labs/rpc-providers": "5.3.0",
27
+ "@dynamic-labs/types": "5.3.0",
28
+ "@dynamic-labs/wallet-book": "5.3.0",
29
+ "@dynamic-labs/wallet-connector-core": "5.3.0",
30
30
  "eventemitter3": "5.0.1"
31
31
  },
32
32
  "peerDependencies": {}
package/src/index.cjs CHANGED
@@ -19,6 +19,7 @@ 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');
22
23
  var SolanaWallet = require('./wallet/SolanaWallet.cjs');
23
24
  var isSolanaWallet = require('./wallet/isSolanaWallet/isSolanaWallet.cjs');
24
25
  var isLedgerSolanaWallet = require('./wallet/isLedgerSolanaWallet/isLedgerSolanaWallet.cjs');
@@ -38,6 +39,7 @@ exports.getOverrideRpcUrlForNetwork = getOverrideRpcUrlForNetwork.getOverrideRpc
38
39
  exports.createNonNativeTokenTransfer = createNonNativeTokenTransfer.createNonNativeTokenTransfer;
39
40
  exports.createSolTransfer = createSolTransfer.createSolTransfer;
40
41
  exports.getBackwardsCompatibleSolNetworks = getBackwardsCompatibleSolNetworks.getBackwardsCompatibleSolNetworks;
42
+ exports.serializeTransactionForScreening = serializeTransactionForScreening.serializeTransactionForScreening;
41
43
  exports.SolanaWallet = SolanaWallet.SolanaWallet;
42
44
  exports.isSolanaWallet = isSolanaWallet.isSolanaWallet;
43
45
  exports.isLedgerSolanaWallet = isLedgerSolanaWallet.isLedgerSolanaWallet;
package/src/index.js CHANGED
@@ -15,6 +15,7 @@ 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';
18
19
  export { SolanaWallet } from './wallet/SolanaWallet.js';
19
20
  export { isSolanaWallet } from './wallet/isSolanaWallet/isSolanaWallet.js';
20
21
  export { isLedgerSolanaWallet } from './wallet/isLedgerSolanaWallet/isLedgerSolanaWallet.js';
@@ -8,3 +8,4 @@ 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';
@@ -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 };
@@ -4,12 +4,14 @@
4
4
  Object.defineProperty(exports, '__esModule', { value: true });
5
5
 
6
6
  var _tslib = require('../../_virtual/_tslib.cjs');
7
+ var types = require('@dynamic-labs/types');
7
8
  var walletConnectorCore = require('@dynamic-labs/wallet-connector-core');
8
9
  var utils = require('@dynamic-labs/utils');
9
10
  require('@solana/web3.js');
10
11
  require('@solana/spl-token');
11
12
  var createNonNativeTokenTransfer = require('../utils/createNonNativeTokenTransfer/createNonNativeTokenTransfer.cjs');
12
13
  var createSolTransfer = require('../utils/createSolTransfer/createSolTransfer.cjs');
14
+ var serializeTransactionForScreening = require('../utils/serializeTransactionForScreening/serializeTransactionForScreening.cjs');
13
15
 
14
16
  class SolanaWallet extends walletConnectorCore.Wallet {
15
17
  /**
@@ -72,10 +74,16 @@ class SolanaWallet extends walletConnectorCore.Wallet {
72
74
  return utils.cloneObjectWithOverrides(signer, {
73
75
  signAllTransactions: (transactions) => _tslib.__awaiter(this, void 0, void 0, function* () {
74
76
  yield this.sync();
77
+ if (this._connector.transactionScreening) {
78
+ yield this.screenTransactions(transactions);
79
+ }
75
80
  return signer.signAllTransactions(transactions);
76
81
  }),
77
82
  signAndSendTransaction: (transaction, ...args) => _tslib.__awaiter(this, void 0, void 0, function* () {
78
83
  yield this.sync();
84
+ if (this._connector.transactionScreening) {
85
+ yield this.screenTransactions([transaction]);
86
+ }
79
87
  return signer.signAndSendTransaction(transaction, ...args);
80
88
  }),
81
89
  signMessage: (message, ...args) => _tslib.__awaiter(this, void 0, void 0, function* () {
@@ -84,6 +92,9 @@ class SolanaWallet extends walletConnectorCore.Wallet {
84
92
  }),
85
93
  signTransaction: (transaction) => _tslib.__awaiter(this, void 0, void 0, function* () {
86
94
  yield this.sync();
95
+ if (this._connector.transactionScreening) {
96
+ yield this.screenTransactions([transaction]);
97
+ }
87
98
  return signer.signTransaction(transaction);
88
99
  }),
89
100
  });
@@ -94,6 +105,37 @@ class SolanaWallet extends walletConnectorCore.Wallet {
94
105
  }
95
106
  });
96
107
  }
108
+ /**
109
+ * Screens the transactions' destinations before the wallet is prompted to
110
+ * sign. Rejects only on an explicit block; a transaction that cannot be
111
+ * serialized is skipped (fail-open) so screening never breaks signing.
112
+ */
113
+ screenTransactions(transactions) {
114
+ return _tslib.__awaiter(this, void 0, void 0, function* () {
115
+ var _a;
116
+ // Serialized one at a time: legacy transactions still compile their
117
+ // message on serialize, so an unprepared one throws, and mapping the batch
118
+ // as a unit would drop screening for its siblings too.
119
+ const serializedTransactions = transactions.flatMap((transaction) => {
120
+ try {
121
+ return [serializeTransactionForScreening.serializeTransactionForScreening(transaction)];
122
+ }
123
+ catch (error) {
124
+ walletConnectorCore.logger.warn('Failed to serialize transaction for screening', {
125
+ message: error instanceof Error ? error.message : 'unknown error',
126
+ });
127
+ return [];
128
+ }
129
+ });
130
+ if (serializedTransactions.length === 0)
131
+ return;
132
+ yield ((_a = this._connector.transactionScreening) === null || _a === void 0 ? void 0 : _a.screenTransaction({
133
+ chain: types.TransactionScreeningChain.SOL,
134
+ context: { svmTransaction: { serializedTransactions } },
135
+ senderAddress: this.address,
136
+ }));
137
+ });
138
+ }
97
139
  }
98
140
 
99
141
  exports.SolanaWallet = SolanaWallet;
@@ -28,4 +28,10 @@ export declare class SolanaWallet extends Wallet<SolanaWalletConnector> {
28
28
  * or throws an error if the signer cannot be retrieved.
29
29
  */
30
30
  getSigner(): Promise<ISolana>;
31
+ /**
32
+ * Screens the transactions' destinations before the wallet is prompted to
33
+ * sign. Rejects only on an explicit block; a transaction that cannot be
34
+ * serialized is skipped (fail-open) so screening never breaks signing.
35
+ */
36
+ private screenTransactions;
31
37
  }
@@ -1,11 +1,13 @@
1
1
  'use client'
2
2
  import { __awaiter } from '../../_virtual/_tslib.js';
3
+ import { TransactionScreeningChain } from '@dynamic-labs/types';
3
4
  import { Wallet, logger } from '@dynamic-labs/wallet-connector-core';
4
5
  import { cloneObjectWithOverrides } from '@dynamic-labs/utils';
5
6
  import '@solana/web3.js';
6
7
  import '@solana/spl-token';
7
8
  import { createNonNativeTokenTransfer } from '../utils/createNonNativeTokenTransfer/createNonNativeTokenTransfer.js';
8
9
  import { createSolTransfer } from '../utils/createSolTransfer/createSolTransfer.js';
10
+ import { serializeTransactionForScreening } from '../utils/serializeTransactionForScreening/serializeTransactionForScreening.js';
9
11
 
10
12
  class SolanaWallet extends Wallet {
11
13
  /**
@@ -68,10 +70,16 @@ class SolanaWallet extends Wallet {
68
70
  return cloneObjectWithOverrides(signer, {
69
71
  signAllTransactions: (transactions) => __awaiter(this, void 0, void 0, function* () {
70
72
  yield this.sync();
73
+ if (this._connector.transactionScreening) {
74
+ yield this.screenTransactions(transactions);
75
+ }
71
76
  return signer.signAllTransactions(transactions);
72
77
  }),
73
78
  signAndSendTransaction: (transaction, ...args) => __awaiter(this, void 0, void 0, function* () {
74
79
  yield this.sync();
80
+ if (this._connector.transactionScreening) {
81
+ yield this.screenTransactions([transaction]);
82
+ }
75
83
  return signer.signAndSendTransaction(transaction, ...args);
76
84
  }),
77
85
  signMessage: (message, ...args) => __awaiter(this, void 0, void 0, function* () {
@@ -80,6 +88,9 @@ class SolanaWallet extends Wallet {
80
88
  }),
81
89
  signTransaction: (transaction) => __awaiter(this, void 0, void 0, function* () {
82
90
  yield this.sync();
91
+ if (this._connector.transactionScreening) {
92
+ yield this.screenTransactions([transaction]);
93
+ }
83
94
  return signer.signTransaction(transaction);
84
95
  }),
85
96
  });
@@ -90,6 +101,37 @@ class SolanaWallet extends Wallet {
90
101
  }
91
102
  });
92
103
  }
104
+ /**
105
+ * Screens the transactions' destinations before the wallet is prompted to
106
+ * sign. Rejects only on an explicit block; a transaction that cannot be
107
+ * serialized is skipped (fail-open) so screening never breaks signing.
108
+ */
109
+ screenTransactions(transactions) {
110
+ return __awaiter(this, void 0, void 0, function* () {
111
+ var _a;
112
+ // Serialized one at a time: legacy transactions still compile their
113
+ // message on serialize, so an unprepared one throws, and mapping the batch
114
+ // as a unit would drop screening for its siblings too.
115
+ const serializedTransactions = transactions.flatMap((transaction) => {
116
+ try {
117
+ return [serializeTransactionForScreening(transaction)];
118
+ }
119
+ catch (error) {
120
+ logger.warn('Failed to serialize transaction for screening', {
121
+ message: error instanceof Error ? error.message : 'unknown error',
122
+ });
123
+ return [];
124
+ }
125
+ });
126
+ if (serializedTransactions.length === 0)
127
+ return;
128
+ yield ((_a = this._connector.transactionScreening) === null || _a === void 0 ? void 0 : _a.screenTransaction({
129
+ chain: TransactionScreeningChain.SOL,
130
+ context: { svmTransaction: { serializedTransactions } },
131
+ senderAddress: this.address,
132
+ }));
133
+ });
134
+ }
93
135
  }
94
136
 
95
137
  export { SolanaWallet };