@solana/keychain-privy
v0.4.0
Published
Privy-based signer for Solana transactions
Maintainers
Readme
@solana/keychain-privy
Privy-based signer for Solana transactions using Privy's wallet API.
Installation
pnpm add @solana/keychain-privyUsage
Create and Initialize
import { PrivySigner } from '@solana/keychain-privy';
// Create and initialize the signer (fetches public key from Privy API)
const signer = await PrivySigner.create({
appId: 'your-privy-app-id',
appSecret: 'your-privy-app-secret',
walletId: 'user-wallet-id',
});
console.log('Signer address:', signer.address);Sign Messages
import { createSignableMessage } from '@solana/signers';
const message = createSignableMessage('Hello, Privy!');
const [signatures] = await signer.signMessages([message]);Sign Transactions
// Sign transactions using Privy's API
const [signatures] = await signer.signTransactions([transaction]);Check Availability
const available = await signer.isAvailable();
console.log('Privy API available:', available);API Reference
PrivySigner.create(config)
Creates and initializes a new PrivySigner instance.
Config options:
appId(string, required): Your Privy application IDappSecret(string, required): Your Privy application secretwalletId(string, required): The Privy wallet ID to use for signingapiBaseUrl(string, optional): Custom API base URL (defaults tohttps://api.privy.io/v1)requestDelayMs(number, optional): Delay in ms between concurrent signing requests to avoid rate limits (default: 0)
Example:
Returns: Promise<PrivySigner>
Methods
signMessages(messages): Signs one or more messagessignTransactions(transactions): Signs one or more transactionsisAvailable(): Checks if the Privy API is reachableaddress: Read-only property containing the signer's Solana address
How It Works
- Initialization: Fetches the wallet's public key from Privy API during creation
- Signing: Sends transactions/messages to Privy's signing API endpoint
- Extraction: Uses
extractSignatureFromWireTransactionto extract signatures from Privy's response
Security Notes
- Store your
appSecretsecurely (use environment variables) - Never expose your
appSecretin client-side code - This signer is intended for server-side use or secure environments
- Privy handles key management - your private keys never leave Privy's infrastructure
