CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/npm-solana--wallet-adapter-wallets

Comprehensive collection of Solana wallet adapters for TypeScript applications with tree-shaking support

Pending
Overview
Eval results
Files

specialized-wallets.mddocs/

Specialized Wallets

Wallet adapters with unique features like social login integration, QR-code signing, Sign-in with Solana support, and development/testing capabilities.

Capabilities

Particle Wallet (Social Login)

Web3 wallet with social login integration and SDK access.

/**
 * Particle wallet adapter with social login integration
 */
class ParticleAdapter extends BaseMessageSignerWalletAdapter {
  name: WalletName<'Particle'>;
  url: string;
  icon: string;
  supportedTransactionVersions: ReadonlySet<'legacy'>;
  
  constructor(config?: ParticleAdapterConfig);
  
  /** Access to underlying ParticleNetwork SDK instance */
  get particle(): ParticleNetwork;
  
  connect(): Promise<void>;
  disconnect(): Promise<void>;
  sendTransaction<T extends Transaction | VersionedTransaction>(
    transaction: T,
    connection: Connection,
    options?: SendTransactionOptions
  ): Promise<TransactionSignature>;
  signTransaction<T extends Transaction | VersionedTransaction>(transaction: T): Promise<T>;
  signAllTransactions<T extends Transaction | VersionedTransaction>(transactions: T[]): Promise<T[]>;
  signMessage(message: Uint8Array): Promise<Uint8Array>;
}

const ParticleName: WalletName<'Particle'>;

interface ParticleAdapterConfig {
  /** ParticleNetwork configuration options */
  config?: ConstructorParameters<typeof ParticleNetwork>[0];
  
  /** Login configuration for social authentication */
  login?: Parameters<SolanaWallet['connect']>[0];
}

Usage Example:

import { ParticleAdapter, ParticleName } from "@solana/wallet-adapter-wallets";

const adapter = new ParticleAdapter({
  config: {
    projectId: "your-project-id",
    clientKey: "your-client-key",
    appId: "your-app-id",
    chainName: "solana",
    chainId: 103, // Solana mainnet
  },
  login: {
    loginType: "email", // or 'phone', 'google', 'facebook', etc.
  }
});

await adapter.connect();

// Access Particle SDK directly
const userInfo = await adapter.particle.auth.getUserInfo();
console.log("User:", userInfo);

Keystone Wallet (QR-Code)

Air-gapped wallet using QR-code based transaction signing.

/**
 * Keystone wallet adapter with QR-code based signing
 */
class KeystoneWalletAdapter extends BaseMessageSignerWalletAdapter {
  name: WalletName<'Keystone'>;
  url: string;
  icon: string;
  supportedTransactionVersions: ReadonlySet<TransactionVersion>;
  
  constructor(config?: KeystoneWalletAdapterConfig);
  
  connect(): Promise<void>;
  disconnect(): Promise<void>;
  sendTransaction<T extends Transaction | VersionedTransaction>(
    transaction: T,
    connection: Connection,
    options?: SendTransactionOptions
  ): Promise<TransactionSignature>;
  signTransaction<T extends Transaction | VersionedTransaction>(transaction: T): Promise<T>;
  signAllTransactions<T extends Transaction | VersionedTransaction>(transactions: T[]): Promise<T[]>;
  signMessage(message: Uint8Array): Promise<Uint8Array>;
}

const KeystoneWalletName: WalletName<'Keystone'>;

interface KeystoneWalletAdapterConfig {}

Usage Example:

import { KeystoneWalletAdapter, KeystoneWalletName } from "@solana/wallet-adapter-wallets";

const adapter = new KeystoneWalletAdapter();

// Connect triggers QR code display for wallet connection
await adapter.connect();

// Transaction signing shows QR code for user to scan with Keystone device
const signedTx = await adapter.signTransaction(transaction);

Unsafe Burner Wallet (Development)

Development and testing wallet with Sign-in with Solana support and in-memory keypair.

/**
 * Unsafe burner wallet for development and testing with SIWS support
 * WARNING: Not for production use - private keys are stored in memory
 */
class UnsafeBurnerWalletAdapter extends BaseSignInMessageSignerWalletAdapter {
  name: WalletName<'Burner Wallet'>;
  url: string;
  icon: string;
  supportedTransactionVersions: ReadonlySet<TransactionVersion>;
  
  /** No configuration required - generates keypair automatically */
  constructor();
  
  connect(): Promise<void>;
  disconnect(): Promise<void>;
  sendTransaction<T extends Transaction | VersionedTransaction>(
    transaction: T,
    connection: Connection,
    options?: SendTransactionOptions
  ): Promise<TransactionSignature>;
  signTransaction<T extends Transaction | VersionedTransaction>(transaction: T): Promise<T>;
  signAllTransactions<T extends Transaction | VersionedTransaction>(transactions: T[]): Promise<T[]>;
  signMessage(message: Uint8Array): Promise<Uint8Array>;
  
  /** Sign-in with Solana (SIWS) support */
  signIn(input?: SolanaSignInInput): Promise<SolanaSignInOutput>;
}

const UnsafeBurnerWalletName: WalletName<'Burner Wallet'>;

// No configuration interface - constructor takes no parameters

Usage Example:

import { UnsafeBurnerWalletAdapter, UnsafeBurnerWalletName } from "@solana/wallet-adapter-wallets";

// No configuration needed - generates random keypair
const adapter = new UnsafeBurnerWalletAdapter();

await adapter.connect();
console.log("Generated address:", adapter.publicKey?.toString());

// Sign-in with Solana
const signInResult = await adapter.signIn({
  domain: "example.com",
  statement: "Sign in to My App"
});

console.log("Signed in:", signInResult.account.address);

WalletConnect Integration

Proxy adapter that delegates to external WalletConnect Solana adapter.

/**
 * WalletConnect integration - re-exports from @walletconnect/solana-adapter
 * This is a proxy package that delegates to the external WalletConnect library
 */

// All exports are re-exported from '@walletconnect/solana-adapter'
// Exact API depends on the WalletConnect Solana adapter version

Usage Example:

import * as WalletConnect from "@solana/wallet-adapter-wallets";

// Usage depends on WalletConnect Solana adapter implementation
// Refer to @walletconnect/solana-adapter documentation

Specialized Features

Sign-in with Solana (SIWS)

import { UnsafeBurnerWalletAdapter } from "@solana/wallet-adapter-wallets";

const adapter = new UnsafeBurnerWalletAdapter();
await adapter.connect();

// Create sign-in message
const signInData = await adapter.signIn({
  domain: window.location.host,
  address: adapter.publicKey!.toString(),
  statement: "Welcome to My Solana App!",
  uri: window.location.origin,
  version: "1",
  chainId: "mainnet",
  nonce: generateNonce(),
  issuedAt: new Date().toISOString(),
});

// Verify sign-in (server-side verification recommended)
const message = createSignInMessage(signInData);
const isValid = nacl.sign.detached.verify(
  new TextEncoder().encode(message),
  signInData.signature,
  signInData.account.publicKey
);

Social Login Integration

import { ParticleAdapter } from "@solana/wallet-adapter-wallets";

const adapter = new ParticleAdapter({
  config: {
    projectId: process.env.PARTICLE_PROJECT_ID,
    clientKey: process.env.PARTICLE_CLIENT_KEY,
    appId: process.env.PARTICLE_APP_ID,
    chainName: "solana",
    chainId: 103,
  },
  login: {
    loginType: "google", // Social login provider
    account: "user@example.com" // Optional pre-fill
  }
});

// Connect triggers social login flow
await adapter.connect();

// Access user information
const userInfo = await adapter.particle.auth.getUserInfo();
console.log("Social login user:", {
  uuid: userInfo.uuid,
  email: userInfo.email,
  name: userInfo.name,
  avatar: userInfo.avatar
});

QR-Code Signing Workflow

import { KeystoneWalletAdapter } from "@solana/wallet-adapter-wallets";

const adapter = new KeystoneWalletAdapter();

// Connect shows QR code for pairing
await adapter.connect();

// Signing shows QR code with transaction data
// User scans with Keystone device, signs, and shows result QR code
const signedTransaction = await adapter.signTransaction(transaction);

// Implementation handles QR code display/scanning automatically

Development Testing

import { UnsafeBurnerWalletAdapter } from "@solana/wallet-adapter-wallets";

// Create multiple test wallets
const testWallets = Array.from({ length: 3 }, () => new UnsafeBurnerWalletAdapter());

await Promise.all(testWallets.map(wallet => wallet.connect()));

console.log("Test wallet addresses:", 
  testWallets.map(wallet => wallet.publicKey?.toString())
);

// Use for automated testing, development, demos
// WARNING: Never use in production - keys are not secure

Configuration Patterns

Environment-Based Configuration

// Production vs development wallet selection
const createWallet = () => {
  if (process.env.NODE_ENV === 'development') {
    return new UnsafeBurnerWalletAdapter();
  }
  
  return new PhantomWalletAdapter();
};

const adapter = createWallet();

Feature Detection

// Check for specialized capabilities
const hasSignIn = 'signIn' in adapter; // SIWS support
const hasParticleSDK = 'particle' in adapter; // Social login
const isHardware = adapter instanceof BaseSignerWalletAdapter; // Hardware wallet

Install with Tessl CLI

npx tessl i tessl/npm-solana--wallet-adapter-wallets

docs

browser-mobile-wallets.md

hardware-wallets.md

index.md

specialized-wallets.md

wallet-list.md

tile.json