@solana/keychain-kit-plugin
v1.4.0
Published
Kit client plugins that install keychain signers as payer and identity
Maintainers
Readme
@solana/keychain-kit-plugin
Kit client plugins that create a keychain signer from any supported backend and install it on the client as the payer and/or identity.
Installation
pnpm add @solana/keychain-kit-plugin @solana/kitUsage
Each plugin accepts the same backend-tagged configuration as createKeychainSigner from @solana/keychain:
import { createClient } from '@solana/kit';
import { keychainSigner } from '@solana/keychain-kit-plugin';
const client = await createClient().use(
keychainSigner({
backend: 'privy',
appId: process.env.PRIVY_APP_ID!,
appSecret: process.env.PRIVY_APP_SECRET!,
walletId: process.env.PRIVY_WALLET_ID!,
}),
);
client.payer; // SolanaSigner — also a Kit TransactionSigner
client.identity; // same signer instanceOnly the backend a configuration dispatches to is bundled — backend packages are loaded with dynamic import().
Plugin variants
| Plugin | Sets |
| ------------------------- | --------------------------------------------- |
| keychainSigner(config) | Both payer and identity (same signer) |
| keychainPayer(config) | Only payer |
| keychainIdentity(config) | Only identity |
Mix backends on one client:
import { createClient } from '@solana/kit';
import { keychainIdentity, keychainPayer } from '@solana/keychain-kit-plugin';
const client = await createClient()
.use(keychainPayer({ backend: 'memory', privateKeyPath: '~/.config/solana/id.json' }))
.use(keychainIdentity({ backend: 'turnkey', ...turnkeyConfig }));Already have a signer?
If you've already constructed a SolanaSigner (or want to share one across clients), you don't need this package — every keychain signer is a valid Kit TransactionSigner, so @solana/kit-plugin-signer works directly:
import { signer } from '@solana/kit-plugin-signer';
import { createKeychainSigner } from '@solana/keychain';
const mySigner = await createKeychainSigner({ backend: 'vault', ...vaultConfig });
const client = createClient().use(signer(mySigner));