@dynamic-labs/solana-core 4.100.3 → 4.100.4

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,14 @@
1
1
 
2
+ ### [4.100.4](https://github.com/dynamic-labs/dynamic-auth/compare/v4.100.3...v4.100.4) (2026-10-08)
3
+
4
+
5
+ ### Bug Fixes
6
+
7
+ * **embedded-webview:** connect Coinbase Wallet via a real popup window [V4 backport] ([#12429](https://github.com/dynamic-labs/dynamic-auth/issues/12429)) ([82368fd](https://github.com/dynamic-labs/dynamic-auth/commit/82368fd41791e3a6e2ffec4dc6a0b401a7bec82f))
8
+ * **rpc-providers:** skip networks without an RPC URL instead of throwing [v4 backport] ([#12431](https://github.com/dynamic-labs/dynamic-auth/issues/12431)) ([95f05c5](https://github.com/dynamic-labs/dynamic-auth/commit/95f05c5c0c5195cc02f4dbc9969e90fc2e41eae0))
9
+ * unblock v4 CI (Playwright password/sign-message tests, shell-quote critical advisory) [V4 backport] ([#12475](https://github.com/dynamic-labs/dynamic-auth/issues/12475)) ([c4ad2ba](https://github.com/dynamic-labs/dynamic-auth/commit/c4ad2ba52a5d329a6b324b27c4ccfb3b48970223)), closes [#12468](https://github.com/dynamic-labs/dynamic-auth/issues/12468) [#1936](https://github.com/dynamic-labs/dynamic-auth/issues/1936) [#12476](https://github.com/dynamic-labs/dynamic-auth/issues/12476)
10
+ * **waas:** fall back when crypto.randomUUID is unavailable (v4 backport) ([#12436](https://github.com/dynamic-labs/dynamic-auth/issues/12436)) ([c72781e](https://github.com/dynamic-labs/dynamic-auth/commit/c72781ebf4269b356a98f3fc167bbd643a601bfd))
11
+
2
12
  ### [4.100.3](https://github.com/dynamic-labs/dynamic-auth/compare/v4.100.2...v4.100.3) (2026-09-18)
3
13
 
4
14
 
package/package.cjs CHANGED
@@ -3,6 +3,6 @@
3
3
 
4
4
  Object.defineProperty(exports, '__esModule', { value: true });
5
5
 
6
- var version = "4.100.3";
6
+ var version = "4.100.4";
7
7
 
8
8
  exports.version = version;
package/package.js CHANGED
@@ -1,4 +1,4 @@
1
1
  'use client'
2
- var version = "4.100.3";
2
+ var version = "4.100.4";
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.100.3",
3
+ "version": "4.100.4",
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.40.0",
22
- "@dynamic-labs/utils": "4.100.3",
22
+ "@dynamic-labs/utils": "4.100.4",
23
23
  "@solana/web3.js": "1.98.1",
24
24
  "@solana/spl-token": "0.4.14",
25
- "@dynamic-labs/assert-package-version": "4.100.3",
26
- "@dynamic-labs/rpc-providers": "4.100.3",
27
- "@dynamic-labs/types": "4.100.3",
28
- "@dynamic-labs/wallet-book": "4.100.3",
29
- "@dynamic-labs/wallet-connector-core": "4.100.3",
25
+ "@dynamic-labs/assert-package-version": "4.100.4",
26
+ "@dynamic-labs/rpc-providers": "4.100.4",
27
+ "@dynamic-labs/types": "4.100.4",
28
+ "@dynamic-labs/wallet-book": "4.100.4",
29
+ "@dynamic-labs/wallet-connector-core": "4.100.4",
30
30
  "eventemitter3": "5.0.1"
31
31
  },
32
32
  "peerDependencies": {}
@@ -25,6 +25,9 @@ class SolanaWalletConnector extends walletConnectorCore.WalletConnectorBase {
25
25
  this.ChainWallet = SolanaWallet.SolanaWallet;
26
26
  this.supportedChains = ['SOL'];
27
27
  this.connectedChain = 'SOL';
28
+ // Whether the connector can sponsor Solana transactions (overridden by
29
+ // connectors with a sponsorship implementation, e.g. WaaS SVM)
30
+ this.supportsSvmGasSponsorship = false;
28
31
  this.solNetworks = getBackwardsCompatibleSolNetworks.getBackwardsCompatibleSolNetworks(opts.solNetworks, opts.connectionConfig);
29
32
  this.chainRpcProviders = opts.chainRpcProviders;
30
33
  this.connectionConfig = opts.connectionConfig;
@@ -106,6 +109,9 @@ class SolanaWalletConnector extends walletConnectorCore.WalletConnectorBase {
106
109
  throw new utils.DynamicError('No enabled networks', 'no_enabled_networks');
107
110
  }
108
111
  const rpcUrl = getOverrideRpcUrlForNetwork.getOverrideRpcUrlForNetwork(this.connectionConfig, network);
112
+ if (!rpcUrl) {
113
+ throw new utils.DynamicError('Provider not found', 'provider_not_found');
114
+ }
109
115
  return new web3_js.Connection(rpcUrl, (_a = this.connectionConfig) !== null && _a !== void 0 ? _a : 'confirmed');
110
116
  }
111
117
  getPublicClient() {
@@ -23,6 +23,7 @@ export declare abstract class SolanaWalletConnector extends WalletConnectorBase<
23
23
  ChainWallet: typeof SolanaWallet;
24
24
  supportedChains: Chain[];
25
25
  connectedChain: Chain;
26
+ readonly supportsSvmGasSponsorship: boolean;
26
27
  protected connectionConfig: SolanaConnectionConfig | undefined;
27
28
  constructor(opts: SolanaWalletConnectorOpts);
28
29
  getNetworkId(): string;
@@ -21,6 +21,9 @@ class SolanaWalletConnector extends WalletConnectorBase {
21
21
  this.ChainWallet = SolanaWallet;
22
22
  this.supportedChains = ['SOL'];
23
23
  this.connectedChain = 'SOL';
24
+ // Whether the connector can sponsor Solana transactions (overridden by
25
+ // connectors with a sponsorship implementation, e.g. WaaS SVM)
26
+ this.supportsSvmGasSponsorship = false;
24
27
  this.solNetworks = getBackwardsCompatibleSolNetworks(opts.solNetworks, opts.connectionConfig);
25
28
  this.chainRpcProviders = opts.chainRpcProviders;
26
29
  this.connectionConfig = opts.connectionConfig;
@@ -102,6 +105,9 @@ class SolanaWalletConnector extends WalletConnectorBase {
102
105
  throw new DynamicError('No enabled networks', 'no_enabled_networks');
103
106
  }
104
107
  const rpcUrl = getOverrideRpcUrlForNetwork(this.connectionConfig, network);
108
+ if (!rpcUrl) {
109
+ throw new DynamicError('Provider not found', 'provider_not_found');
110
+ }
105
111
  return new Connection(rpcUrl, (_a = this.connectionConfig) !== null && _a !== void 0 ? _a : 'confirmed');
106
112
  }
107
113
  getPublicClient() {
package/src/index.d.ts CHANGED
@@ -3,4 +3,4 @@ export * from './rpc';
3
3
  export * from './utils';
4
4
  export * from './wallet';
5
5
  export { SOLANA_GENESIS_HASH, DYNAMIC_SVM_NETWORK_ID_LS_KEY, } from './constants';
6
- export type { ConnectionResult, ExtensionLocator, ISolana, IBackpackSolanaSigner, SignedMessage, ISolanaSigner, SolanaConnectionConfig, ISolanaEvents, } from './types';
6
+ export type { ConnectionResult, ExtensionLocator, ISolana, IBackpackSolanaSigner, SignedMessage, ISolanaSigner, GasSponsorshipMode, SolanaSendOptions, SolanaTransactionOptions, SolanaConnectionConfig, ISolanaEvents, } from './types';
@@ -3,12 +3,12 @@
3
3
 
4
4
  var web3_js = require('@solana/web3.js');
5
5
  var rpcProviders = require('@dynamic-labs/rpc-providers');
6
+ var walletConnectorCore = require('@dynamic-labs/wallet-connector-core');
6
7
  require('../../../_virtual/_tslib.cjs');
7
8
  require('@solana/spl-token');
8
9
  require('@dynamic-labs/utils');
9
10
  var getOverrideRpcUrlForNetwork = require('../../utils/getOverrideRpcUrlForNetwork/getOverrideRpcUrlForNetwork.cjs');
10
11
  require('@dynamic-labs/types');
11
- require('@dynamic-labs/wallet-connector-core');
12
12
 
13
13
  rpcProviders.ChainRpcProviders.getSolanaProviderByChainId = (rpcProviders, chainId) => {
14
14
  var _a;
@@ -19,15 +19,21 @@ rpcProviders.ChainRpcProviders.registerSolanaProviders = (connectionConfig) => {
19
19
  rpcProviders.ChainRpcProviders.registerChainProviders(rpcProviders.ProviderChain.SOLANA, (config) => {
20
20
  const rpcProviders = {};
21
21
  if (config === null || config === void 0 ? void 0 : config.solana) {
22
- rpcProviders.solana = config.solana.map((network) => {
22
+ rpcProviders.solana = config.solana
23
+ .map((network) => {
23
24
  const rpcUrl = getOverrideRpcUrlForNetwork.getOverrideRpcUrlForNetwork(connectionConfig, network);
25
+ if (!rpcUrl) {
26
+ walletConnectorCore.logger.warn(`Skipping Solana provider registration for chain ${network.chainId}: no RPC URL configured`);
27
+ return undefined;
28
+ }
24
29
  const provider = new web3_js.Connection(rpcUrl, connectionConfig);
25
30
  return {
26
31
  chainId: network.chainId.toString(),
27
32
  chainName: network.name,
28
33
  provider,
29
34
  };
30
- });
35
+ })
36
+ .filter((rpcProvider) => rpcProvider !== undefined);
31
37
  }
32
38
  return rpcProviders.solana;
33
39
  });
@@ -1,12 +1,12 @@
1
1
  'use client'
2
2
  import { Connection } from '@solana/web3.js';
3
3
  import { ChainRpcProviders, ProviderChain } from '@dynamic-labs/rpc-providers';
4
+ import { logger } from '@dynamic-labs/wallet-connector-core';
4
5
  import '../../../_virtual/_tslib.js';
5
6
  import '@solana/spl-token';
6
7
  import '@dynamic-labs/utils';
7
8
  import { getOverrideRpcUrlForNetwork } from '../../utils/getOverrideRpcUrlForNetwork/getOverrideRpcUrlForNetwork.js';
8
9
  import '@dynamic-labs/types';
9
- import '@dynamic-labs/wallet-connector-core';
10
10
 
11
11
  ChainRpcProviders.getSolanaProviderByChainId = (rpcProviders, chainId) => {
12
12
  var _a;
@@ -17,15 +17,21 @@ ChainRpcProviders.registerSolanaProviders = (connectionConfig) => {
17
17
  ChainRpcProviders.registerChainProviders(ProviderChain.SOLANA, (config) => {
18
18
  const rpcProviders = {};
19
19
  if (config === null || config === void 0 ? void 0 : config.solana) {
20
- rpcProviders.solana = config.solana.map((network) => {
20
+ rpcProviders.solana = config.solana
21
+ .map((network) => {
21
22
  const rpcUrl = getOverrideRpcUrlForNetwork(connectionConfig, network);
23
+ if (!rpcUrl) {
24
+ logger.warn(`Skipping Solana provider registration for chain ${network.chainId}: no RPC URL configured`);
25
+ return undefined;
26
+ }
22
27
  const provider = new Connection(rpcUrl, connectionConfig);
23
28
  return {
24
29
  chainId: network.chainId.toString(),
25
30
  chainName: network.name,
26
31
  provider,
27
32
  };
28
- });
33
+ })
34
+ .filter((rpcProvider) => rpcProvider !== undefined);
29
35
  }
30
36
  return rpcProviders.solana;
31
37
  });
package/src/types.d.ts CHANGED
@@ -32,6 +32,11 @@ export interface ISolanaEvents {
32
32
  export type SignedMessage = {
33
33
  signature: Uint8Array;
34
34
  };
35
+ export type GasSponsorshipMode = 'auto' | 'off' | 'required';
36
+ export type SolanaTransactionOptions = {
37
+ sponsorshipMode?: GasSponsorshipMode;
38
+ };
39
+ export type SolanaSendOptions = SendOptions & SolanaTransactionOptions;
35
40
  type ExtensionLocators = {
36
41
  [key in ExtensionLocator]: boolean;
37
42
  };
@@ -41,9 +46,9 @@ export type ISolanaSigner = ExtensionLocators & EventEmitter<ISolanaEvents> & {
41
46
  };
42
47
  isConnected: boolean;
43
48
  providers: ISolanaSigner[];
44
- signTransaction<T extends Transaction | VersionedTransaction>(transaction: T): Promise<T>;
45
- signAllTransactions<T extends Transaction | VersionedTransaction>(transactions: T[]): Promise<T[]>;
46
- signAndSendTransaction<T extends Transaction | VersionedTransaction>(transaction: T, options?: SendOptions): Promise<{
49
+ signTransaction<T extends Transaction | VersionedTransaction>(transaction: T, options?: SolanaTransactionOptions): Promise<T>;
50
+ signAllTransactions<T extends Transaction | VersionedTransaction>(transactions: T[], options?: SolanaTransactionOptions): Promise<T[]>;
51
+ signAndSendTransaction<T extends Transaction | VersionedTransaction>(transaction: T, options?: SolanaSendOptions): Promise<{
47
52
  signature: TransactionSignature;
48
53
  }>;
49
54
  signMessage(message: Uint8Array, encoding?: string): Promise<SignedMessage>;
@@ -10,7 +10,7 @@ var utils = require('@dynamic-labs/utils');
10
10
 
11
11
  const LAMPORTS_PER_SOL = 1000000000;
12
12
  class SolanaUiTransaction {
13
- constructor({ onSubmit, from, connection, multipleTransactions, }) {
13
+ constructor({ onSubmit, from, connection, multipleTransactions, sponsorshipMode, }) {
14
14
  this.chain = 'SOL';
15
15
  this.data = undefined;
16
16
  this.fee = { gas: undefined };
@@ -19,6 +19,7 @@ class SolanaUiTransaction {
19
19
  this.onSubmit = onSubmit;
20
20
  this.connection = connection;
21
21
  this.multipleTransactions = multipleTransactions;
22
+ this.sponsorshipMode = sponsorshipMode;
22
23
  }
23
24
  fetchFee() {
24
25
  return _tslib.__awaiter(this, void 0, void 0, function* () {
@@ -1,11 +1,13 @@
1
1
  import { Connection, Transaction, VersionedTransaction } from '@solana/web3.js';
2
2
  import { IUITransaction, IUITransactionFormatOptions } from '@dynamic-labs/types';
3
+ import { GasSponsorshipMode } from '../../types';
3
4
  export declare const LAMPORTS_PER_SOL = 1000000000;
4
5
  type SolanaUiTransactionProps = {
5
6
  from: string;
6
7
  connection: Connection;
7
8
  onSubmit: (transaction?: Transaction | VersionedTransaction) => Promise<any>;
8
9
  multipleTransactions?: (Transaction | VersionedTransaction)[];
10
+ sponsorshipMode?: GasSponsorshipMode;
9
11
  };
10
12
  export declare class SolanaUiTransaction implements IUITransaction {
11
13
  to: string | undefined;
@@ -21,9 +23,10 @@ export declare class SolanaUiTransaction implements IUITransaction {
21
23
  nonNativeAddress?: string;
22
24
  nonNativeDecimal?: number;
23
25
  nonNativeValue?: bigint;
26
+ sponsorshipMode?: GasSponsorshipMode;
24
27
  private onSubmit;
25
28
  private connection;
26
- constructor({ onSubmit, from, connection, multipleTransactions, }: SolanaUiTransactionProps);
29
+ constructor({ onSubmit, from, connection, multipleTransactions, sponsorshipMode, }: SolanaUiTransactionProps);
27
30
  nativePrice?: number | undefined;
28
31
  fetchFee(): Promise<void>;
29
32
  isGasSponsored(): boolean;
@@ -6,7 +6,7 @@ import { formatNumberText } from '@dynamic-labs/utils';
6
6
 
7
7
  const LAMPORTS_PER_SOL = 1000000000;
8
8
  class SolanaUiTransaction {
9
- constructor({ onSubmit, from, connection, multipleTransactions, }) {
9
+ constructor({ onSubmit, from, connection, multipleTransactions, sponsorshipMode, }) {
10
10
  this.chain = 'SOL';
11
11
  this.data = undefined;
12
12
  this.fee = { gas: undefined };
@@ -15,6 +15,7 @@ class SolanaUiTransaction {
15
15
  this.onSubmit = onSubmit;
16
16
  this.connection = connection;
17
17
  this.multipleTransactions = multipleTransactions;
18
+ this.sponsorshipMode = sponsorshipMode;
18
19
  }
19
20
  fetchFee() {
20
21
  return __awaiter(this, void 0, void 0, function* () {
@@ -77,6 +77,9 @@ const getBackwardsCompatibleSolNetworks = (originalSolNetworks, connectionConfig
77
77
  // customer would just pass in testnet/devnet rpc urls to the mainnet network
78
78
  // so we need to check the rpc and return the correct/expected network data
79
79
  const rpcUrl = getOverrideRpcUrlForNetwork.getOverrideRpcUrlForNetwork(connectionConfig, originalSolNetworks[0]);
80
+ if (!rpcUrl) {
81
+ return originalSolNetworks;
82
+ }
80
83
  if (rpcUrl.includes('testnet')) {
81
84
  return [
82
85
  Object.assign(Object.assign({}, SOLANA_TESTNET_NETWORK), { privateCustomerRpcUrls: [rpcUrl] }),
@@ -73,6 +73,9 @@ const getBackwardsCompatibleSolNetworks = (originalSolNetworks, connectionConfig
73
73
  // customer would just pass in testnet/devnet rpc urls to the mainnet network
74
74
  // so we need to check the rpc and return the correct/expected network data
75
75
  const rpcUrl = getOverrideRpcUrlForNetwork(connectionConfig, originalSolNetworks[0]);
76
+ if (!rpcUrl) {
77
+ return originalSolNetworks;
78
+ }
76
79
  if (rpcUrl.includes('testnet')) {
77
80
  return [
78
81
  Object.assign(Object.assign({}, SOLANA_TESTNET_NETWORK), { privateCustomerRpcUrls: [rpcUrl] }),
@@ -4,7 +4,7 @@
4
4
  Object.defineProperty(exports, '__esModule', { value: true });
5
5
 
6
6
  const getOverrideRpcUrlForNetwork = (connectionConfig, network) => {
7
- var _a, _b, _c, _d, _e;
7
+ var _a, _b, _c, _d, _e, _f;
8
8
  const isSolanaNetwork = network.name.toLowerCase().includes('solana');
9
9
  const isEclipseNetwork = network.name.toLowerCase().includes('eclipse');
10
10
  let overrideRpcUrl;
@@ -14,7 +14,9 @@ const getOverrideRpcUrlForNetwork = (connectionConfig, network) => {
14
14
  if (isEclipseNetwork) {
15
15
  overrideRpcUrl = (_d = (_c = connectionConfig === null || connectionConfig === void 0 ? void 0 : connectionConfig.customRpcUrls) === null || _c === void 0 ? void 0 : _c.eclipse) === null || _d === void 0 ? void 0 : _d[0];
16
16
  }
17
- return (overrideRpcUrl || ((_e = network.privateCustomerRpcUrls) === null || _e === void 0 ? void 0 : _e[0]) || network.rpcUrls[0]);
17
+ return (overrideRpcUrl ||
18
+ ((_e = network.privateCustomerRpcUrls) === null || _e === void 0 ? void 0 : _e[0]) ||
19
+ ((_f = network.rpcUrls) === null || _f === void 0 ? void 0 : _f[0]));
18
20
  };
19
21
 
20
22
  exports.getOverrideRpcUrlForNetwork = getOverrideRpcUrlForNetwork;
@@ -1,6 +1,6 @@
1
1
  'use client'
2
2
  const getOverrideRpcUrlForNetwork = (connectionConfig, network) => {
3
- var _a, _b, _c, _d, _e;
3
+ var _a, _b, _c, _d, _e, _f;
4
4
  const isSolanaNetwork = network.name.toLowerCase().includes('solana');
5
5
  const isEclipseNetwork = network.name.toLowerCase().includes('eclipse');
6
6
  let overrideRpcUrl;
@@ -10,7 +10,9 @@ const getOverrideRpcUrlForNetwork = (connectionConfig, network) => {
10
10
  if (isEclipseNetwork) {
11
11
  overrideRpcUrl = (_d = (_c = connectionConfig === null || connectionConfig === void 0 ? void 0 : connectionConfig.customRpcUrls) === null || _c === void 0 ? void 0 : _c.eclipse) === null || _d === void 0 ? void 0 : _d[0];
12
12
  }
13
- return (overrideRpcUrl || ((_e = network.privateCustomerRpcUrls) === null || _e === void 0 ? void 0 : _e[0]) || network.rpcUrls[0]);
13
+ return (overrideRpcUrl ||
14
+ ((_e = network.privateCustomerRpcUrls) === null || _e === void 0 ? void 0 : _e[0]) ||
15
+ ((_f = network.rpcUrls) === null || _f === void 0 ? void 0 : _f[0]));
14
16
  };
15
17
 
16
18
  export { getOverrideRpcUrlForNetwork };
@@ -78,6 +78,12 @@ class SolanaWallet extends walletConnectorCore.Wallet {
78
78
  return signature;
79
79
  });
80
80
  }
81
+ assertSponsorshipSupported(options) {
82
+ if ((options === null || options === void 0 ? void 0 : options.sponsorshipMode) === 'required' &&
83
+ !this._connector.supportsSvmGasSponsorship) {
84
+ throw new utils.DynamicError('This wallet does not support gas sponsorship', 'sponsorship_not_supported');
85
+ }
86
+ }
81
87
  /**
82
88
  * Retrieves the RPC connection
83
89
  * @returns A promise that resolves to the RPC connection
@@ -100,16 +106,18 @@ class SolanaWallet extends walletConnectorCore.Wallet {
100
106
  }
101
107
  try {
102
108
  return utils.cloneObjectWithOverrides(signer, {
103
- signAllTransactions: (transactions) => _tslib.__awaiter(this, void 0, void 0, function* () {
109
+ signAllTransactions: (transactions, ...args) => _tslib.__awaiter(this, void 0, void 0, function* () {
110
+ this.assertSponsorshipSupported(args[0]);
104
111
  yield this.sync();
105
112
  yield screenSolanaTransactions.screenSolanaTransactions({
106
113
  senderAddress: this.address,
107
114
  transactionScreening: this._connector.transactionScreening,
108
115
  transactions,
109
116
  });
110
- return signer.signAllTransactions(transactions);
117
+ return signer.signAllTransactions(transactions, ...args);
111
118
  }),
112
119
  signAndSendTransaction: (transaction, ...args) => _tslib.__awaiter(this, void 0, void 0, function* () {
120
+ this.assertSponsorshipSupported(args[0]);
113
121
  yield this.sync();
114
122
  yield screenSolanaTransactions.screenSolanaTransactions({
115
123
  senderAddress: this.address,
@@ -122,14 +130,15 @@ class SolanaWallet extends walletConnectorCore.Wallet {
122
130
  yield this.sync();
123
131
  return signer.signMessage(message, ...args);
124
132
  }),
125
- signTransaction: (transaction) => _tslib.__awaiter(this, void 0, void 0, function* () {
133
+ signTransaction: (transaction, ...args) => _tslib.__awaiter(this, void 0, void 0, function* () {
134
+ this.assertSponsorshipSupported(args[0]);
126
135
  yield this.sync();
127
136
  yield screenSolanaTransactions.screenSolanaTransactions({
128
137
  senderAddress: this.address,
129
138
  transactionScreening: this._connector.transactionScreening,
130
139
  transactions: [transaction],
131
140
  });
132
- return signer.signTransaction(transaction);
141
+ return signer.signTransaction(transaction, ...args);
133
142
  }),
134
143
  });
135
144
  }
@@ -29,6 +29,7 @@ export declare class SolanaWallet extends Wallet<SolanaWalletConnector> {
29
29
  createAssociatedTokenAccount({ tokenAddress, }: {
30
30
  tokenAddress: string;
31
31
  }): Promise<string | undefined>;
32
+ private assertSponsorshipSupported;
32
33
  /**
33
34
  * Retrieves the RPC connection
34
35
  * @returns A promise that resolves to the RPC connection
@@ -1,7 +1,7 @@
1
1
  'use client'
2
2
  import { __awaiter } from '../../_virtual/_tslib.js';
3
3
  import { Wallet, logger } from '@dynamic-labs/wallet-connector-core';
4
- import { cloneObjectWithOverrides } from '@dynamic-labs/utils';
4
+ import { DynamicError, cloneObjectWithOverrides } from '@dynamic-labs/utils';
5
5
  import '@solana/web3.js';
6
6
  import '@solana/spl-token';
7
7
  import { createNonNativeTokenTransfer } from '../utils/createNonNativeTokenTransfer/createNonNativeTokenTransfer.js';
@@ -74,6 +74,12 @@ class SolanaWallet extends Wallet {
74
74
  return signature;
75
75
  });
76
76
  }
77
+ assertSponsorshipSupported(options) {
78
+ if ((options === null || options === void 0 ? void 0 : options.sponsorshipMode) === 'required' &&
79
+ !this._connector.supportsSvmGasSponsorship) {
80
+ throw new DynamicError('This wallet does not support gas sponsorship', 'sponsorship_not_supported');
81
+ }
82
+ }
77
83
  /**
78
84
  * Retrieves the RPC connection
79
85
  * @returns A promise that resolves to the RPC connection
@@ -96,16 +102,18 @@ class SolanaWallet extends Wallet {
96
102
  }
97
103
  try {
98
104
  return cloneObjectWithOverrides(signer, {
99
- signAllTransactions: (transactions) => __awaiter(this, void 0, void 0, function* () {
105
+ signAllTransactions: (transactions, ...args) => __awaiter(this, void 0, void 0, function* () {
106
+ this.assertSponsorshipSupported(args[0]);
100
107
  yield this.sync();
101
108
  yield screenSolanaTransactions({
102
109
  senderAddress: this.address,
103
110
  transactionScreening: this._connector.transactionScreening,
104
111
  transactions,
105
112
  });
106
- return signer.signAllTransactions(transactions);
113
+ return signer.signAllTransactions(transactions, ...args);
107
114
  }),
108
115
  signAndSendTransaction: (transaction, ...args) => __awaiter(this, void 0, void 0, function* () {
116
+ this.assertSponsorshipSupported(args[0]);
109
117
  yield this.sync();
110
118
  yield screenSolanaTransactions({
111
119
  senderAddress: this.address,
@@ -118,14 +126,15 @@ class SolanaWallet extends Wallet {
118
126
  yield this.sync();
119
127
  return signer.signMessage(message, ...args);
120
128
  }),
121
- signTransaction: (transaction) => __awaiter(this, void 0, void 0, function* () {
129
+ signTransaction: (transaction, ...args) => __awaiter(this, void 0, void 0, function* () {
130
+ this.assertSponsorshipSupported(args[0]);
122
131
  yield this.sync();
123
132
  yield screenSolanaTransactions({
124
133
  senderAddress: this.address,
125
134
  transactionScreening: this._connector.transactionScreening,
126
135
  transactions: [transaction],
127
136
  });
128
- return signer.signTransaction(transaction);
137
+ return signer.signTransaction(transaction, ...args);
129
138
  }),
130
139
  });
131
140
  }