Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions .changeset/sunny-squids-juggle.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
---
'@solana/kit-client-litesvm': minor
'@solana/kit-client-rpc': minor
'@solana/kit-plugin-airdrop': minor
'@solana/kit-plugin-instruction-plan': minor
'@solana/kit-plugin-litesvm': minor
'@solana/kit-plugin-payer': minor
'@solana/kit-plugin-rpc': minor
'@solana/kit-plugins': minor
---

Bump `@solana/kit` peer dependency to ^6.8.0.
20 changes: 10 additions & 10 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -88,12 +88,12 @@ await client.sendTransaction([myInstruction]);
None of the ready-to-use clients fit your needs? No worries! You can **build your own custom clients** by combining individual plugins like so.

```ts
import { createEmptyClient } from '@solana/kit';
import { createClient } from '@solana/kit';
import { rpc, rpcAirdrop, rpcTransactionPlanner, rpcTransactionPlanExecutor } from '@solana/kit-plugin-rpc';
import { payerFromFile } from '@solana/kit-plugin-payer';
import { planAndSendTransactions } from '@solana/kit-plugin-instruction-plan';

const client = await createEmptyClient() // An empty client with a `use` method to install plugins.
const client = await createClient() // An empty client with a `use` method to install plugins.
.use(rpc('https://api.devnet.solana.com')) // Adds `client.rpc` and `client.rpcSubscriptions`.
.use(payerFromFile('path/to/keypair.json')) // Adds `client.payer` using a local keypair file.
.use(rpcAirdrop()) // Adds `client.airdrop` to request SOL from faucets.
Expand All @@ -119,12 +119,12 @@ _Do you know any? Please open a PR to add them here!_

This repo provides the following individual plugin packages. You can learn more about each package by following the links to their READMEs below.

| Package | Version | Description | Plugins |
| ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------- | ------------------------------------------------------------------------------------------ |
| [`@solana/kit-plugin-rpc`](./packages/kit-plugin-rpc) | [![npm](https://img.shields.io/npm/v/@solana/kit-plugin-rpc.svg?style=flat)](https://www.npmjs.com/package/@solana/kit-plugin-rpc) | Connect to Solana clusters | `rpc`, `localhostRpc`, `rpcAirdrop`, `rpcGetMinimumBalance`, `rpcTransactionPlanner`, `rpcTransactionPlanExecutor` |
| [`@solana/kit-plugin-payer`](./packages/kit-plugin-payer) | [![npm](https://img.shields.io/npm/v/@solana/kit-plugin-payer.svg?style=flat)](https://www.npmjs.com/package/@solana/kit-plugin-payer) | Manage transaction fee payers | `payer`, `payerFromFile`, `generatedPayer`, `generatedPayerWithSol` |
| Package | Version | Description | Plugins |
| ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------- | ---------------------------------------------------------------------------------------------------------------------- |
| [`@solana/kit-plugin-rpc`](./packages/kit-plugin-rpc) | [![npm](https://img.shields.io/npm/v/@solana/kit-plugin-rpc.svg?style=flat)](https://www.npmjs.com/package/@solana/kit-plugin-rpc) | Connect to Solana clusters | `rpc`, `localhostRpc`, `rpcAirdrop`, `rpcGetMinimumBalance`, `rpcTransactionPlanner`, `rpcTransactionPlanExecutor` |
| [`@solana/kit-plugin-payer`](./packages/kit-plugin-payer) | [![npm](https://img.shields.io/npm/v/@solana/kit-plugin-payer.svg?style=flat)](https://www.npmjs.com/package/@solana/kit-plugin-payer) | Manage transaction fee payers | `payer`, `payerFromFile`, `generatedPayer`, `generatedPayerWithSol` |
| [`@solana/kit-plugin-litesvm`](./packages/kit-plugin-litesvm) | [![npm](https://img.shields.io/npm/v/@solana/kit-plugin-litesvm.svg?style=flat)](https://www.npmjs.com/package/@solana/kit-plugin-litesvm) | LiteSVM support | `litesvm`, `litesvmAirdrop`, `litesvmGetMinimumBalance`, `litesvmTransactionPlanner`, `litesvmTransactionPlanExecutor` |
| [`@solana/kit-plugin-instruction-plan`](./packages/kit-plugin-instruction-plan) | [![npm](https://img.shields.io/npm/v/@solana/kit-plugin-instruction-plan.svg?style=flat)](https://www.npmjs.com/package/@solana/kit-plugin-instruction-plan) | Transaction planning and execution | `transactionPlanner`, `transactionPlanExecutor`, `planAndSendTransactions` |
| [`@solana/kit-plugin-instruction-plan`](./packages/kit-plugin-instruction-plan) | [![npm](https://img.shields.io/npm/v/@solana/kit-plugin-instruction-plan.svg?style=flat)](https://www.npmjs.com/package/@solana/kit-plugin-instruction-plan) | Transaction planning and execution | `transactionPlanner`, `transactionPlanExecutor`, `planAndSendTransactions` |

## Community Plugins

Expand Down Expand Up @@ -169,8 +169,8 @@ function appleTart() {
return <T extends { fruit: 'apple' }>(client: T) => extendClient(client, { dessert: 'appleTart' as const });
}

createEmptyClient().use(apple()).use(appleTart()); // Ok
createEmptyClient().use(appleTart()); // TypeScript error
createClient().use(apple()).use(appleTart()); // Ok
createClient().use(appleTart()); // TypeScript error
```

Plugins can also be asynchronous if required and return promises that resolve to clients.
Expand All @@ -187,5 +187,5 @@ function magicFruit() {
The `use` function on the client takes care of awaiting asynchronous plugins automatically, so you can use them seamlessly alongside synchronous ones and simply await the final client when required.

```ts
const client = await createEmptyClient().use(magicFruit()).use(apple());
const client = await createClient().use(magicFruit()).use(apple());
```
2 changes: 1 addition & 1 deletion examples/token-airdrop/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
"dependencies": {
"@solana-program/system": "^0.12.0",
"@solana-program/token": "^0.13.0",
"@solana/kit": "^6.7.0",
"@solana/kit": "^6.8.0",
"@solana/kit-client-rpc": "workspace:*"
},
"type": "module",
Expand Down
2 changes: 1 addition & 1 deletion examples/transfer-lamports/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
"private": true,
"dependencies": {
"@solana-program/system": "^0.12.0",
"@solana/kit": "^6.7.0",
"@solana/kit": "^6.8.0",
"@solana/kit-client-rpc": "workspace:*"
},
"type": "module",
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
"@changesets/changelog-github": "^0.6.0",
"@changesets/cli": "^2.30.0",
"@solana/eslint-config-solana": "^6.0.0",
"@solana/kit": "^6.7.0",
"@solana/kit": "^6.8.0",
"@solana/prettier-config-solana": "0.0.6",
"@types/node": "^25",
"agadoo": "^3.0.0",
Expand Down
2 changes: 1 addition & 1 deletion packages/kit-client-litesvm/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@
"test:unit": "vitest run"
},
"peerDependencies": {
"@solana/kit": "^6.5.0"
"@solana/kit": "^6.8.0"
},
"dependencies": {
"@solana/kit-plugin-instruction-plan": "workspace:*",
Expand Down
2 changes: 1 addition & 1 deletion packages/kit-client-litesvm/src/index.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { createEmptyClient, TransactionSigner } from '@solana/kit';
import { createClient as createEmptyClient, TransactionSigner } from '@solana/kit';
import { planAndSendTransactions } from '@solana/kit-plugin-instruction-plan';
import {
litesvm,
Expand Down
2 changes: 1 addition & 1 deletion packages/kit-client-rpc/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@
"test:unit": "vitest run"
},
"peerDependencies": {
"@solana/kit": "^6.5.0"
"@solana/kit": "^6.8.0"
},
"dependencies": {
"@solana/kit-plugin-instruction-plan": "workspace:*",
Expand Down
2 changes: 1 addition & 1 deletion packages/kit-client-rpc/src/index.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import {
ClusterUrl,
createEmptyClient,
createClient as createEmptyClient,
DefaultRpcSubscriptionsChannelConfig,
MicroLamports,
TransactionSigner,
Expand Down
8 changes: 4 additions & 4 deletions packages/kit-plugin-airdrop/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,11 @@
### RPC-based airdrop

```diff
import { createEmptyClient } from '@solana/kit';
import { createClient } from '@solana/kit';
- import { airdrop, localhostRpc } from '@solana/kit-plugins';
+ import { localhostRpc, rpcAirdrop } from '@solana/kit-plugin-rpc';

const client = createEmptyClient()
const client = createClient()
.use(localhostRpc())
- .use(airdrop());
+ .use(rpcAirdrop());
Expand All @@ -28,11 +28,11 @@
### LiteSVM-based airdrop

```diff
import { createEmptyClient } from '@solana/kit';
import { createClient } from '@solana/kit';
- import { airdrop, litesvm } from '@solana/kit-plugins';
+ import { litesvm, litesvmAirdrop } from '@solana/kit-plugin-litesvm';

const client = createEmptyClient()
const client = createClient()
.use(litesvm())
- .use(airdrop());
+ .use(litesvmAirdrop());
Expand Down
2 changes: 1 addition & 1 deletion packages/kit-plugin-airdrop/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@
"test:unit": "vitest run"
},
"peerDependencies": {
"@solana/kit": "^6.5.0"
"@solana/kit": "^6.8.0"
},
"devDependencies": {
"@solana/kit-plugin-litesvm": "workspace:*",
Expand Down
8 changes: 4 additions & 4 deletions packages/kit-plugin-airdrop/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,21 +21,21 @@ type RpcClient = {
* @example
* RPC-based airdrop.
* ```ts
* import { createEmptyClient } from '@solana/kit';
* import { createClient } from '@solana/kit';
* import { localhostRpc, rpcAirdrop } from '@solana/kit-plugin-rpc';
*
* const client = createEmptyClient()
* const client = createClient()
* .use(localhostRpc())
* .use(rpcAirdrop());
* ```
*
* @example
* LiteSVM-based airdrop.
* ```ts
* import { createEmptyClient } from '@solana/kit';
* import { createClient } from '@solana/kit';
* import { litesvm, litesvmAirdrop } from '@solana/kit-plugin-litesvm';
*
* const client = createEmptyClient()
* const client = createClient()
* .use(litesvm())
* .use(litesvmAirdrop());
* ```
Expand Down
14 changes: 7 additions & 7 deletions packages/kit-plugin-airdrop/test/index.test.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { address, createEmptyClient, lamports, mainnet } from '@solana/kit';
import { address, createClient, lamports, mainnet } from '@solana/kit';
import { litesvm } from '@solana/kit-plugin-litesvm';
import { localhostRpc, rpc } from '@solana/kit-plugin-rpc';
import { describe, expect, it, vi } from 'vitest';
Expand All @@ -10,7 +10,7 @@ describe('airdrop', () => {
const getSignatureStatuses = vi.fn();
const requestAirdrop = vi.fn();
const signatureNotifications = vi.fn();
const client = createEmptyClient()
const client = createClient()
.use(() => ({
rpc: { getSignatureStatuses, requestAirdrop },
rpcSubscriptions: { signatureNotifications },
Expand All @@ -22,7 +22,7 @@ describe('airdrop', () => {

it('provides an airdrop function that relies on a LiteSVM instance', async () => {
const svm = { airdrop: vi.fn() };
const client = createEmptyClient()
const client = createClient()
.use(() => ({ svm }))
.use(airdrop());
expect(client).toHaveProperty('airdrop');
Expand All @@ -35,17 +35,17 @@ describe('airdrop', () => {
});

it('works with an arbitrary RPC', () => {
const client = createEmptyClient().use(rpc('https://my-rpc.com')).use(airdrop());
const client = createClient().use(rpc('https://my-rpc.com')).use(airdrop());
expect(client).toHaveProperty('airdrop');
});

it('works with a localhost RPC', () => {
const client = createEmptyClient().use(localhostRpc()).use(airdrop());
const client = createClient().use(localhostRpc()).use(airdrop());
expect(client).toHaveProperty('airdrop');
});

it('throws a TypeScript error with a mainnet RPC', () => {
const client = createEmptyClient()
const client = createClient()
.use(rpc(mainnet('https://my-rpc.com')))
// @ts-expect-error Airdrop RPC methods are not available on mainnet.
.use(airdrop());
Expand All @@ -54,7 +54,7 @@ describe('airdrop', () => {

if (__NODEJS__) {
it('works with a LiteSVM instance', () => {
const client = createEmptyClient().use(litesvm()).use(airdrop());
const client = createClient().use(litesvm()).use(airdrop());
expect(client).toHaveProperty('airdrop');
});
}
Expand Down
12 changes: 6 additions & 6 deletions packages/kit-plugin-instruction-plan/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,11 @@ The `transactionPlanner` plugin sets a custom transaction planner on the client.
### Installation

```ts
import { createEmptyClient, createTransactionPlanner } from '@solana/kit';
import { createClient, createTransactionPlanner } from '@solana/kit';
import { transactionPlanner } from '@solana/kit-plugin-instruction-plan';

const myTransactionPlanner = createTransactionPlanner(/* ... */);
const client = createEmptyClient().use(transactionPlanner(myTransactionPlanner));
const client = createClient().use(transactionPlanner(myTransactionPlanner));
```

### Features
Expand All @@ -43,11 +43,11 @@ The `transactionPlanExecutor` plugin sets a custom transaction plan executor on
### Installation

```ts
import { createEmptyClient, createTransactionPlanExecutor } from '@solana/kit';
import { createClient, createTransactionPlanExecutor } from '@solana/kit';
import { transactionPlanExecutor } from '@solana/kit-plugin-instruction-plan';

const myTransactionPlanExecutor = createTransactionPlanExecutor(/* ... */);
const client = createEmptyClient().use(transactionPlanExecutor(myTransactionPlanExecutor));
const client = createClient().use(transactionPlanExecutor(myTransactionPlanExecutor));
```

### Features
Expand All @@ -66,14 +66,14 @@ The `planAndSendTransactions` plugin adds helper functions for planning and send
This plugin requires both `transactionPlanner` and `transactionPlanExecutor` to be installed on the client.

```ts
import { createEmptyClient } from '@solana/kit';
import { createClient } from '@solana/kit';
import {
transactionPlanner,
transactionPlanExecutor,
planAndSendTransactions,
} from '@solana/kit-plugin-instruction-plan';

const client = createEmptyClient()
const client = createClient()
.use(transactionPlanner(myTransactionPlanner))
.use(transactionPlanExecutor(myTransactionPlanExecutor))
.use(planAndSendTransactions());
Expand Down
2 changes: 1 addition & 1 deletion packages/kit-plugin-instruction-plan/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@
"test:unit": "vitest run"
},
"peerDependencies": {
"@solana/kit": "^6.5.0"
"@solana/kit": "^6.8.0"
},
"license": "MIT",
"repository": {
Expand Down
12 changes: 6 additions & 6 deletions packages/kit-plugin-instruction-plan/src/core.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,11 +25,11 @@ import {
*
* @example
* ```ts
* import { createEmptyClient, createTransactionPlanner } from '@solana/kit';
* import { createClient, createTransactionPlanner } from '@solana/kit';
* import { transactionPlanner } from '@solana/kit-plugin-instruction-plan';
*
* // Install the transactionPlanner plugin using a custom transaction planner.
* const client = createEmptyClient()
* const client = createClient()
* .use(transactionPlanner(createTransactionPlanner(...)));
*
* // Use the transaction planner.
Expand All @@ -45,11 +45,11 @@ export function transactionPlanner(transactionPlanner: TransactionPlanner) {
*
* @example
* ```ts
* import { createEmptyClient, createTransactionPlanExecutor } from '@solana/kit';
* import { createClient, createTransactionPlanExecutor } from '@solana/kit';
* import { transactionPlanExecutor } from '@solana/kit-plugin-instruction-plan';
*
* // Install the transactionPlanExecutor plugin using a custom transaction plan executor.
* const client = createEmptyClient()
* const client = createClient()
* .use(transactionPlanExecutor(createTransactionPlanExecutor(...)));
*
* // Use the transaction plan executor.
Expand Down Expand Up @@ -79,11 +79,11 @@ export function transactionPlanExecutor(transactionPlanExecutor: TransactionPlan
*
* @example
* ```ts
* import { createEmptyClient } from '@solana/kit';
* import { createClient } from '@solana/kit';
* import { transactionPlanner, transactionPlanExecutor, planAndSendTransactions } from '@solana/kit-plugin-instruction-plan';
*
* // Install the planAndSendTransactions plugin and its requirements.
* const client = createEmptyClient()
* const client = createClient()
* .use(transactionPlanner(myTransactionPlanner))
* .use(transactionPlanExecutor(myTransactionPlanExecutor))
* .use(planAndSendTransactions());
Expand Down
Loading
Loading