@abstraxn/signer-react 3.2.0 → 3.3.1

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
@@ -5,6 +5,18 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [3.3.0] - 2026-04-28
9
+
10
+ ### Added
11
+
12
+ - **Solana gasless relayer hooks** – Added `useSolanaGasless()` and `useSignAndSendSolanaGaslessTxn()` to support build/sign/send gasless flow from React apps.
13
+ - **Solana gasless provider config** – Added `solanaGasless` in `AbstraxnProviderConfig` for relayer settings (`enabled`, `relayerUrl`, and optional polling defaults).
14
+
15
+ ### Changed
16
+
17
+ - **Gasless signing path uses existing signer-react backend signing** – Gasless transaction signing now reuses `signSolanaTransactionViaAPI` (+ MFA step-up retry) so signatures continue to come from the existing Turnkey-backed signer flow instead of client-side signing.
18
+ - **Public exports extended** – Exported new Solana gasless hooks and related types from `@abstraxn/signer-react`.
19
+
8
20
  ## [3.2.0] - 2026-04-22
9
21
 
10
22
  ### Added
package/README.md CHANGED
@@ -27,6 +27,10 @@ import App from './App';
27
27
 
28
28
  const providerConfig: AbstraxnProviderConfig = {
29
29
  apiKey: 'your-api-key-here',
30
+ solanaGasless: {
31
+ enabled: true,
32
+ relayerUrl: 'https://dev-solana-relayer-api.abstraxn.com/api/v1/103?apikey=your-solana-relayer-api-key',
33
+ },
30
34
  };
31
35
 
32
36
  createRoot(document.getElementById('root')!).render(
@@ -105,6 +109,7 @@ function HookConnectButton() {
105
109
  - `useExportWallet()` - Export wallet (EVM or Solana, based on current chain)
106
110
  - `usePublicClient()` / `usePrepareRawTxn()` / `useSignTxn()` / `useSignAndSendTxn()` / `useWaitForTxnReceipt()` - EVM transaction flow (prepare → sign → send → confirm)
107
111
  - `useSolanaConnection()` / `useSolanaPublicKey()` / `usePrepareSolanaTxn()` / `useSignSolanaTxn()` / `useSignAndSendSolanaTxn()` / `useWaitForSolanaConfirmation()` - Solana transaction flow (prepare → sign → send → confirm)
112
+ - `useSolanaGasless()` / `useSignAndSendSolanaGaslessTxn()` - Solana gasless flow using relayer build/send with Turnkey signing through signer-react
108
113
  - `useSmartAccountOwner()` - Get an AA-compatible owner account for permissionless-style account abstraction flows
109
114
 
110
115
  ### Example: Account Abstraction owner (permissionless-compatible)
@@ -14,6 +14,9 @@ import { ConnectionProvider, WalletProvider } from "@solana/wallet-adapter-react
14
14
  import { PhantomWalletAdapter, SolflareWalletAdapter } from "@solana/wallet-adapter-wallets";
15
15
  export function AbstraxnProvider({ config, children }) {
16
16
  const externalWalletsEnabled = config.externalWallets?.enabled ?? false;
17
+ const solanaEndpoint = config.chains?.solanaEndpoint ??
18
+ config.solanaEndpoint ??
19
+ "https://api.mainnet-beta.solana.com";
17
20
  const externalSsr = config.externalWallets?.ssr ?? false;
18
21
  // Get or create QueryClient - tries to use existing one from context first
19
22
  // This ensures we use the app's QueryClient instance if it exists, preventing multiple instances
@@ -197,7 +200,7 @@ export function AbstraxnProvider({ config, children }) {
197
200
  }
198
201
  // Do NOT pass key to WagmiProvider. Remounting loses connection state and causes
199
202
  // "Connector not connected" in Next.js (e.g. when config loads after hydration).
200
- return (_jsx(QueryClientWrapper, { queryClient: queryClient, children: _jsx(ConnectionProvider, { endpoint: config.chains?.solanaEndpoint || "https://api.mainnet-beta.solana.com", children: _jsx(WalletProvider, { wallets: solanaWallets, autoConnect: true, children: _jsx(WagmiProvider, { config: wagmiConfig, initialState: config.initialState, children: _jsx(AbstraxnProviderWithWagmi, { config: config, children: children }) }) }) }) }));
203
+ return (_jsx(QueryClientWrapper, { queryClient: queryClient, children: _jsx(ConnectionProvider, { endpoint: solanaEndpoint, children: _jsx(WalletProvider, { wallets: solanaWallets, autoConnect: true, children: _jsx(WagmiProvider, { config: wagmiConfig, initialState: config.initialState, children: _jsx(AbstraxnProviderWithWagmi, { config: config, children: children }) }) }) }) }));
201
204
  }
202
205
  // If external wallets are disabled, use the provider without wagmi
203
206
  return (_jsx(AbstraxnProviderWithoutWagmi, { config: config, children: children }));
@@ -3686,6 +3686,7 @@ export function AbstraxnProviderInner({ config, children, base, wagmi, solana, }
3686
3686
  setEmailForOtp: setEmailForOtp,
3687
3687
  // Global config flags
3688
3688
  enableSolana: config.chains?.enableSolana,
3689
+ solanaGaslessConfig: config.solanaGasless,
3689
3690
  };
3690
3691
  // Ref to store latest value to avoid dependency issues (defined after value)
3691
3692
  const valueRef = useRef(value);
@@ -1,6 +1,8 @@
1
1
  import type { WhoamiResponse, TransactionRequest, EnableMfaResponse, VerifySetupMfaResponse, DisableMfaResponse, SupportedAuthMethod, LinkedAuthMethod } from '@abstraxn/signer-core';
2
2
  import type { Chain, PublicClient, Address, Abi, GetContractReturnType, TransactionReceipt } from 'viem';
3
3
  import { Connection as SolanaConnection, Transaction as SolanaTransaction, TransactionInstruction, type Commitment, type SendOptions } from '@solana/web3.js';
4
+ import { SolanaRelayer } from '@abstraxn/solana-relayer';
5
+ import type { BuildTxParams as SolanaGaslessBuildTxParams, BuildRelayTxResult as SolanaGaslessBuildTxResult, RelaySubmitResponse as SolanaGaslessRelaySubmitResponse, RelayStatusResponse as SolanaGaslessRelayStatusResponse } from '@abstraxn/solana-relayer';
4
6
  import type { TypedData, TypedDataDomain } from 'viem';
5
7
  import { type ConnectorType, type ConnectorMeta } from './connectors';
6
8
  /**
@@ -8614,6 +8616,44 @@ export declare function useSignAndSendSolanaTxn(connection: SolanaConnection): {
8614
8616
  isConnected: boolean;
8615
8617
  solanaAddress: string | null;
8616
8618
  };
8619
+ export type SolanaGaslessBuildParams = Omit<SolanaGaslessBuildTxParams, 'connection' | 'sender'> & {
8620
+ connection?: SolanaConnection;
8621
+ sender?: string;
8622
+ };
8623
+ export interface SolanaGaslessConfigResolved {
8624
+ enabled: boolean;
8625
+ relayerUrl: string;
8626
+ defaultPollMs?: number;
8627
+ defaultTimeoutMs?: number;
8628
+ }
8629
+ export declare function useSolanaGasless(): {
8630
+ isEnabled: boolean;
8631
+ config: SolanaGaslessConfigResolved | null;
8632
+ relayerClient: SolanaRelayer | null;
8633
+ buildGaslessTx: (params: SolanaGaslessBuildParams) => Promise<SolanaGaslessBuildTxResult>;
8634
+ signGaslessTx: (params: {
8635
+ transaction: SolanaTransaction;
8636
+ sender?: string;
8637
+ }) => Promise<{
8638
+ signedTransactionBase64: string;
8639
+ signedTransactionHex: string;
8640
+ }>;
8641
+ sendGaslessTx: (params: {
8642
+ signedTransactionBase64: string;
8643
+ lastValidBlockHeight: number;
8644
+ }) => Promise<SolanaGaslessRelaySubmitResponse>;
8645
+ getGaslessTxStatus: (txnId: string) => Promise<SolanaGaslessRelayStatusResponse>;
8646
+ };
8647
+ export declare function useSignAndSendSolanaGaslessTxn(): {
8648
+ signAndSendGaslessTx: (params: SolanaGaslessBuildParams) => Promise<{
8649
+ txnId: string;
8650
+ status: "pending" | "confirmed" | "processing" | "failed";
8651
+ preview: Record<string, unknown>;
8652
+ signedTransactionHex: string;
8653
+ signedTransactionBase64: string;
8654
+ lastValidBlockHeight: number;
8655
+ }>;
8656
+ };
8617
8657
  /**
8618
8658
  * Hook to wait for Solana transaction confirmation.
8619
8659
  */
package/dist/src/hooks.js CHANGED
@@ -7,6 +7,7 @@ import { InvalidDeviceIdError, SignMfaRequiredError } from '@abstraxn/signer-cor
7
7
  import { createPublicClient, createWalletClient, http, getContract, serializeTransaction, encodeFunctionData, hashTypedData, hashMessage, parseSignature } from 'viem';
8
8
  import { toAccount } from 'viem/accounts';
9
9
  import { Connection as SolanaConnection, Transaction as SolanaTransaction, SystemProgram, PublicKey, LAMPORTS_PER_SOL, TransactionInstruction, } from '@solana/web3.js';
10
+ import { SolanaRelayer } from '@abstraxn/solana-relayer';
10
11
  import { useWalletClient as useWagmiWalletClient, useAccount, useConfig, useChainId as useWagmiChainId, useSwitchChain as useWagmiSwitchChain, useSignMessage as useWagmiSignMessage, useReconnect as useWagmiReconnect } from 'wagmi';
11
12
  import { getWalletClient, switchChain } from '@wagmi/core';
12
13
  import { getConnectorMeta } from './connectors';
@@ -1517,6 +1518,124 @@ export function useSignAndSendSolanaTxn(connection) {
1517
1518
  }, [connection, isConnected, whoami, signSolanaTransactionViaAPI, verifySignMfa]);
1518
1519
  return { signAndSendSolanaTxn, isConnected, solanaAddress: whoami?.solanaAddress ?? null };
1519
1520
  }
1521
+ function hexToBase64SignedTransaction(signedHex) {
1522
+ const hex = signedHex.startsWith('0x') ? signedHex.slice(2) : signedHex;
1523
+ const bytes = new Uint8Array(hex.match(/.{1,2}/g)?.map((byte) => parseInt(byte, 16)) ?? []);
1524
+ if (typeof btoa === 'function') {
1525
+ let binary = '';
1526
+ for (let i = 0; i < bytes.length; i++)
1527
+ binary += String.fromCharCode(bytes[i]);
1528
+ return btoa(binary);
1529
+ }
1530
+ return Buffer.from(bytes).toString('base64');
1531
+ }
1532
+ export function useSolanaGasless() {
1533
+ const { isConnected, whoami, solanaConnection, signSolanaTransactionViaAPI, verifySignMfa, solanaGaslessConfig, } = useAbstraxnWallet();
1534
+ const providerConnection = solanaConnection?.connection ?? null;
1535
+ const resolvedConfig = useMemo(() => {
1536
+ if (!solanaGaslessConfig?.enabled)
1537
+ return null;
1538
+ const relayerUrl = solanaGaslessConfig.relayerUrl?.trim();
1539
+ if (!relayerUrl)
1540
+ return null;
1541
+ return {
1542
+ enabled: true,
1543
+ relayerUrl,
1544
+ defaultPollMs: solanaGaslessConfig.defaultPollMs,
1545
+ defaultTimeoutMs: solanaGaslessConfig.defaultTimeoutMs,
1546
+ };
1547
+ }, [solanaGaslessConfig]);
1548
+ const relayerClient = useMemo(() => {
1549
+ if (!resolvedConfig)
1550
+ return null;
1551
+ return new SolanaRelayer({
1552
+ relayerUrl: resolvedConfig.relayerUrl,
1553
+ defaultPollMs: resolvedConfig.defaultPollMs,
1554
+ defaultTimeoutMs: resolvedConfig.defaultTimeoutMs,
1555
+ });
1556
+ }, [resolvedConfig]);
1557
+ const ensureReady = useCallback(() => {
1558
+ if (!isConnected)
1559
+ throw new Error('Wallet is not connected');
1560
+ if (!resolvedConfig) {
1561
+ throw new Error('Solana gasless is not configured. Set config.solanaGasless with enabled and relayerUrl.');
1562
+ }
1563
+ if (!relayerClient)
1564
+ throw new Error('Failed to initialize Solana relayer client');
1565
+ if (!signSolanaTransactionViaAPI) {
1566
+ throw new Error('Solana transaction signing is not supported by this wallet');
1567
+ }
1568
+ const sender = whoami?.solanaAddress ?? null;
1569
+ if (!sender)
1570
+ throw new Error('Solana address is required for gasless flow');
1571
+ return { sender };
1572
+ }, [isConnected, relayerClient, resolvedConfig, signSolanaTransactionViaAPI, whoami]);
1573
+ const buildGaslessTx = useCallback(async (params) => {
1574
+ const { sender } = ensureReady();
1575
+ const connection = params.connection ?? providerConnection;
1576
+ if (!connection)
1577
+ throw new Error('Solana connection is required');
1578
+ const { connection: _connection, sender: _sender, ...rest } = params;
1579
+ return await relayerClient.buildTx({
1580
+ connection,
1581
+ sender: _sender ?? sender,
1582
+ ...rest,
1583
+ });
1584
+ }, [ensureReady, providerConnection, relayerClient]);
1585
+ const signGaslessTx = useCallback(async (params) => {
1586
+ const { sender } = ensureReady();
1587
+ const unsignedBytes = params.transaction.serialize({ requireAllSignatures: false });
1588
+ const unsignedHex = Array.from(unsignedBytes)
1589
+ .map((b) => b.toString(16).padStart(2, '0'))
1590
+ .join('');
1591
+ const signWith = params.sender ?? sender;
1592
+ const { signedTransaction } = await runWithSignStepUpRetry(() => signSolanaTransactionViaAPI(unsignedHex, signWith), verifySignMfa);
1593
+ return {
1594
+ signedTransactionHex: signedTransaction,
1595
+ signedTransactionBase64: hexToBase64SignedTransaction(signedTransaction),
1596
+ };
1597
+ }, [ensureReady, signSolanaTransactionViaAPI, verifySignMfa]);
1598
+ const sendGaslessTx = useCallback(async (params) => {
1599
+ ensureReady();
1600
+ return await relayerClient.sendTx({
1601
+ signedTransaction: params.signedTransactionBase64,
1602
+ lastValidBlockHeight: params.lastValidBlockHeight,
1603
+ });
1604
+ }, [ensureReady, relayerClient]);
1605
+ const getGaslessTxStatus = useCallback(async (txnId) => {
1606
+ ensureReady();
1607
+ return await relayerClient.getTxStatus({ txnId });
1608
+ }, [ensureReady, relayerClient]);
1609
+ return {
1610
+ isEnabled: !!resolvedConfig,
1611
+ config: resolvedConfig,
1612
+ relayerClient,
1613
+ buildGaslessTx,
1614
+ signGaslessTx,
1615
+ sendGaslessTx,
1616
+ getGaslessTxStatus,
1617
+ };
1618
+ }
1619
+ export function useSignAndSendSolanaGaslessTxn() {
1620
+ const { buildGaslessTx, signGaslessTx, sendGaslessTx } = useSolanaGasless();
1621
+ const signAndSendGaslessTx = useCallback(async (params) => {
1622
+ const built = await buildGaslessTx(params);
1623
+ const signed = await signGaslessTx({ transaction: built.tx, sender: params.sender });
1624
+ const relay = await sendGaslessTx({
1625
+ signedTransactionBase64: signed.signedTransactionBase64,
1626
+ lastValidBlockHeight: built.lastValidBlockHeight,
1627
+ });
1628
+ return {
1629
+ txnId: relay.txnId,
1630
+ status: relay.status,
1631
+ preview: built.preview,
1632
+ signedTransactionHex: signed.signedTransactionHex,
1633
+ signedTransactionBase64: signed.signedTransactionBase64,
1634
+ lastValidBlockHeight: built.lastValidBlockHeight,
1635
+ };
1636
+ }, [buildGaslessTx, sendGaslessTx, signGaslessTx]);
1637
+ return { signAndSendGaslessTx };
1638
+ }
1520
1639
  /**
1521
1640
  * Hook to wait for Solana transaction confirmation.
1522
1641
  */
@@ -4,14 +4,14 @@
4
4
  * when used in a React project
5
5
  */
6
6
  export { AbstraxnProvider, useAbstraxnWallet } from './AbstraxnProvider';
7
- export { useIsConnected, useAddress, useAuthContext, useChainId, useError, useEnableMfa, useDisableMfa, useAuthMethodLinking, useEmailForOtp, useWallet, useSmartAccountOwner, useExportWallet, useWhoami, useExternalWallet, useExternalWalletBalance, useExternalWalletChain, useExternalWalletInfo, usePublicClient, useWalletClient, useContract, usePrepareRawTxn, useSignTxn, useSignTypedTx, useSignAndSendTxn, useWaitForTxnReceipt, useReadContract, useExternalWalletClient, useWriteContract, useConnectionType, useSwitchChain, useSignMessage, useEstimateGas, useGetGasPrice, useSolanaConnection, useSolanaPublicKey, useSolanaBalance, usePrepareSolanaTxn, useSolanaExternalWallet, usePrepareSolanaProgramTxn, useSolanaProgramTransaction, useSignSolanaTxn, useSignAndSendSolanaTxn, useWaitForSolanaConfirmation, } from './hooks';
7
+ export { useIsConnected, useAddress, useAuthContext, useChainId, useError, useEnableMfa, useDisableMfa, useAuthMethodLinking, useEmailForOtp, useWallet, useSmartAccountOwner, useExportWallet, useWhoami, useExternalWallet, useExternalWalletBalance, useExternalWalletChain, useExternalWalletInfo, usePublicClient, useWalletClient, useContract, usePrepareRawTxn, useSignTxn, useSignTypedTx, useSignAndSendTxn, useWaitForTxnReceipt, useReadContract, useExternalWalletClient, useWriteContract, useConnectionType, useSwitchChain, useSignMessage, useEstimateGas, useGetGasPrice, useSolanaConnection, useSolanaPublicKey, useSolanaBalance, usePrepareSolanaTxn, useSolanaExternalWallet, usePrepareSolanaProgramTxn, useSolanaProgramTransaction, useSignSolanaTxn, useSignAndSendSolanaTxn, useSolanaGasless, useSignAndSendSolanaGaslessTxn, useWaitForSolanaConfirmation, } from './hooks';
8
8
  export { ConnectButton } from './ConnectButton';
9
9
  export type { ConnectButtonProps, ConnectButtonVariant, ConnectButtonSize } from './ConnectButton';
10
10
  export { WalletModal } from './WalletModal';
11
11
  export type { WalletModalProps } from './WalletModal';
12
12
  export { OnboardingUIComponent as OnboardingUI } from './OnboardingUI';
13
- export type { AbstraxnProviderConfig, AbstraxnUIConfig, AbstraxnContextValue, ChainConfig, } from './types';
14
- export type { PayloadEncoding, HashFunction, SignTypedTxParams, SmartAccountOwnerOptions, SmartAccountOwnerResult, SolanaAccountMetaInput, SolanaInstructionDataInput, } from './hooks';
13
+ export type { AbstraxnProviderConfig, AbstraxnUIConfig, AbstraxnContextValue, ChainConfig, SolanaGaslessConfig, } from './types';
14
+ export type { PayloadEncoding, HashFunction, SignTypedTxParams, SmartAccountOwnerOptions, SmartAccountOwnerResult, SolanaGaslessBuildParams, SolanaGaslessConfigResolved, SolanaAccountMetaInput, SolanaInstructionDataInput, } from './hooks';
15
15
  export type { OnboardingUIComponentProps, OnboardingUIComponentRef } from './OnboardingUI';
16
16
  export { ALL_CHAINS, EVM_CHAINS, SOLANA_CHAINS, getChainById, getChainsByType, getDefaultChains, toCoreChain, type ChainData, } from './chains';
17
17
  export { CONNECTORS, getConnectorMeta, isOAuthConnector, isWalletConnector, isAuthConnector, type ConnectorType, type ConnectorMeta, } from './connectors';
package/dist/src/index.js CHANGED
@@ -4,7 +4,7 @@
4
4
  * when used in a React project
5
5
  */
6
6
  export { AbstraxnProvider, useAbstraxnWallet } from './AbstraxnProvider';
7
- export { useIsConnected, useAddress, useAuthContext, useChainId, useError, useEnableMfa, useDisableMfa, useAuthMethodLinking, useEmailForOtp, useWallet, useSmartAccountOwner, useExportWallet, useWhoami, useExternalWallet, useExternalWalletBalance, useExternalWalletChain, useExternalWalletInfo, usePublicClient, useWalletClient, useContract, usePrepareRawTxn, useSignTxn, useSignTypedTx, useSignAndSendTxn, useWaitForTxnReceipt, useReadContract, useExternalWalletClient, useWriteContract, useConnectionType, useSwitchChain, useSignMessage, useEstimateGas, useGetGasPrice, useSolanaConnection, useSolanaPublicKey, useSolanaBalance, usePrepareSolanaTxn, useSolanaExternalWallet, usePrepareSolanaProgramTxn, useSolanaProgramTransaction, useSignSolanaTxn, useSignAndSendSolanaTxn, useWaitForSolanaConfirmation, } from './hooks';
7
+ export { useIsConnected, useAddress, useAuthContext, useChainId, useError, useEnableMfa, useDisableMfa, useAuthMethodLinking, useEmailForOtp, useWallet, useSmartAccountOwner, useExportWallet, useWhoami, useExternalWallet, useExternalWalletBalance, useExternalWalletChain, useExternalWalletInfo, usePublicClient, useWalletClient, useContract, usePrepareRawTxn, useSignTxn, useSignTypedTx, useSignAndSendTxn, useWaitForTxnReceipt, useReadContract, useExternalWalletClient, useWriteContract, useConnectionType, useSwitchChain, useSignMessage, useEstimateGas, useGetGasPrice, useSolanaConnection, useSolanaPublicKey, useSolanaBalance, usePrepareSolanaTxn, useSolanaExternalWallet, usePrepareSolanaProgramTxn, useSolanaProgramTransaction, useSignSolanaTxn, useSignAndSendSolanaTxn, useSolanaGasless, useSignAndSendSolanaGaslessTxn, useWaitForSolanaConfirmation, } from './hooks';
8
8
  export { ConnectButton } from './ConnectButton';
9
9
  export { WalletModal } from './WalletModal';
10
10
  export { OnboardingUIComponent as OnboardingUI } from './OnboardingUI';
@@ -146,6 +146,26 @@ export interface ChainConfig {
146
146
  */
147
147
  solanaEndpoint?: string;
148
148
  }
149
+ export interface SolanaGaslessConfig {
150
+ /**
151
+ * Enable Solana gasless relayer flow.
152
+ * @default false
153
+ */
154
+ enabled?: boolean;
155
+ /**
156
+ * Full relayer URL including chain id and apikey query param.
157
+ * Example: https://dev-solana-relayer-api.abstraxn.com/api/v1/103?apikey=your_api_key
158
+ */
159
+ relayerUrl?: string;
160
+ /**
161
+ * Optional default polling interval in ms for status checks.
162
+ */
163
+ defaultPollMs?: number;
164
+ /**
165
+ * Optional default timeout in ms for polling helpers.
166
+ */
167
+ defaultTimeoutMs?: number;
168
+ }
149
169
  /**
150
170
  * Complete configuration for AbstraxnProvider
151
171
  */
@@ -172,6 +192,15 @@ export interface AbstraxnProviderConfig extends AbstraxnWalletConfig {
172
192
  * Chain configuration
173
193
  */
174
194
  chains?: ChainConfig;
195
+ /**
196
+ * Top-level Solana RPC endpoint fallback.
197
+ * Useful when `chains` is passed as an array (viem chain format).
198
+ */
199
+ solanaEndpoint?: string;
200
+ /**
201
+ * Solana gasless relayer configuration.
202
+ */
203
+ solanaGasless?: SolanaGaslessConfig;
175
204
  /**
176
205
  * Optional custom wagmi config
177
206
  * If provided, this will be used instead of creating a new one
@@ -278,4 +307,5 @@ export interface AbstraxnContextValue {
278
307
  emailForOtp?: string;
279
308
  setEmailForOtp?: (email: string) => void;
280
309
  enableSolana?: boolean;
310
+ solanaGaslessConfig?: SolanaGaslessConfig;
281
311
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@abstraxn/signer-react",
3
- "version": "3.2.0",
3
+ "version": "3.3.1",
4
4
  "description": "React SDK for Abstraxn Wallet - React components, hooks, and providers for seamless Web3 wallet integration",
5
5
  "main": "./dist/src/index.js",
6
6
  "module": "./dist/src/index.js",
@@ -41,6 +41,7 @@
41
41
  },
42
42
  "dependencies": {
43
43
  "@abstraxn/signer-core": "2.1.2",
44
+ "@abstraxn/solana-relayer": "^1.0.0",
44
45
  "@solana/wallet-adapter-base": "^0.9.27",
45
46
  "@solana/wallet-adapter-react": "^0.15.39",
46
47
  "@solana/wallet-adapter-react-ui": "^0.9.39",