@@ -26,6 +26,9 @@ pnpm add @solana/keychain-dfns # Dfns
2626pnpm add @solana/keychain-openfort # Openfort
2727pnpm add @solana/keychain-para # Para
2828pnpm add @solana/keychain-utila # Utila
29+
30+ # Kit client plugins (keychainSigner / keychainPayer / keychainIdentity)
31+ pnpm add @solana/keychain-kit-plugin
2932```
3033
3134## Basic Usage
@@ -96,14 +99,74 @@ async function signWithKeychain(signer: SolanaSigner) {
9699}
97100```
98101
102+ ### Using with a Kit Client (keychainSigner plugin)
103+
104+ ` @solana/keychain-kit-plugin ` installs a keychain signer directly on a
105+ [ Kit client] ( https://github.com/anza-xyz/kit ) , wiring it up as the ` payer ` and
106+ ` identity ` so you skip the manual ` pipe ` setup shown above:
107+
108+ ``` typescript
109+ import { createClient } from " @solana/kit" ;
110+ import { keychainSigner } from " @solana/keychain-kit-plugin" ;
111+
112+ const client = await createClient ().use (
113+ keychainSigner ({
114+ backend: " privy" ,
115+ appId: process .env .PRIVY_APP_ID ! ,
116+ appSecret: process .env .PRIVY_APP_SECRET ! ,
117+ walletId: process .env .PRIVY_WALLET_ID !
118+ })
119+ );
120+
121+ client .payer ; // SolanaSigner — also a Kit TransactionSigner
122+ client .identity ; // same signer instance
123+ ```
124+
125+ The plugin accepts the same backend-tagged config as ` createKeychainSigner ` , and
126+ only the backend it dispatches to is bundled (backend packages load via dynamic
127+ ` import() ` ).
128+
129+ Use ` keychainPayer ` or ` keychainIdentity ` to set just one role, and mix backends
130+ on a single client:
131+
132+ ``` typescript
133+ import { createClient } from " @solana/kit" ;
134+ import { keychainIdentity , keychainPayer } from " @solana/keychain-kit-plugin" ;
135+
136+ const client = await createClient ()
137+ .use (
138+ keychainPayer ({
139+ backend: " memory" ,
140+ privateKeyPath: " ~/.config/solana/id.json"
141+ })
142+ )
143+ .use (keychainIdentity ({ backend: " turnkey" , ... turnkeyConfig }));
144+ ```
145+
146+ Already have a ` SolanaSigner ` ? Every keychain signer is a valid Kit
147+ ` TransactionSigner ` , so you can install an existing one with
148+ [ ` @solana/kit-plugin-signer ` ] ( https://github.com/anza-xyz/kit-plugins/tree/main/packages/kit-plugin-signer )
149+ instead (` pnpm add @solana/kit-plugin-signer ` ):
150+
151+ ``` typescript
152+ import { signer } from " @solana/kit-plugin-signer" ;
153+ import { createKeychainSigner } from " @solana/keychain" ;
154+
155+ const mySigner = await createKeychainSigner ({
156+ backend: " vault" ,
157+ ... vaultConfig
158+ });
159+ const client = createClient ().use (signer (mySigner ));
160+ ```
161+
99162## Backend Configuration
100163
101164### HashiCorp Vault
102165
103166``` typescript
104- import { VaultSigner } from " @solana/keychain-vault" ;
167+ import { createVaultSigner } from " @solana/keychain-vault" ;
105168
106- const signer = new VaultSigner ({
169+ const signer = createVaultSigner ({
107170 vaultAddr: " https://vault.example.com:8200" ,
108171 vaultToken: " hvs.xxxxx" ,
109172 keyName: " my-solana-key" ,
@@ -114,9 +177,9 @@ const signer = new VaultSigner({
114177### AWS KMS
115178
116179``` typescript
117- import { AwsKmsSigner } from " @solana/keychain-aws-kms" ;
180+ import { createAwsKmsSigner } from " @solana/keychain-aws-kms" ;
118181
119- const signer = new AwsKmsSigner ({
182+ const signer = createAwsKmsSigner ({
120183 keyId: " alias/my-solana-key" ,
121184 publicKey: " base58_public_key" ,
122185 region: " us-east-1" // optional
@@ -126,9 +189,9 @@ const signer = new AwsKmsSigner({
126189### Privy
127190
128191``` typescript
129- import { PrivySigner } from " @solana/keychain-privy" ;
192+ import { createPrivySigner } from " @solana/keychain-privy" ;
130193
131- const signer = await PrivySigner . create ({
194+ const signer = await createPrivySigner ({
132195 appId: " app_id" ,
133196 appSecret: " app_secret" ,
134197 walletId: " wallet_id"
@@ -138,9 +201,9 @@ const signer = await PrivySigner.create({
138201### Turnkey
139202
140203``` typescript
141- import { TurnkeySigner } from " @solana/keychain-turnkey" ;
204+ import { createTurnkeySigner } from " @solana/keychain-turnkey" ;
142205
143- const signer = new TurnkeySigner ({
206+ const signer = createTurnkeySigner ({
144207 apiPublicKey: " api_public_key" ,
145208 apiPrivateKey: " api_private_key" ,
146209 organizationId: " org_id" ,
@@ -152,15 +215,14 @@ const signer = new TurnkeySigner({
152215### Fireblocks
153216
154217``` typescript
155- import { FireblocksSigner } from " @solana/keychain-fireblocks" ;
218+ import { createFireblocksSigner } from " @solana/keychain-fireblocks" ;
156219
157- const signer = new FireblocksSigner ({
220+ const signer = await createFireblocksSigner ({
158221 apiKey: " api_key" ,
159222 privateKeyPem: " -----BEGIN RSA PRIVATE KEY-----\n ..." ,
160223 vaultAccountId: " 0" ,
161224 assetId: " SOL" // or "SOL_TEST" for devnet
162225});
163- await signer .init ();
164226```
165227
166228### CDP (Coinbase Developer Platform)
0 commit comments