JSPM

@solana/rpc-transport

2.0.0-experimental.91c8b54
  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 4307
  • Score
    100M100P100Q110120F
  • License MIT

Network transports for accessing the Solana JSON RPC API

Package Exports

  • @solana/rpc-transport

Readme

npm npm-downloads semantic-release
code-style-prettier

@solana/rpc-transport

This package implements a JSON-RPC client with which you can interact with the Solana network. It can be used standalone, in combination with an RPC specification such as @solana/rpc-core, but it is also exported as part of the Solana JavaScript SDK @solana/web3.js@experimental.

Configuration

A new transport created with createJsonRpc() can be configured as follows:

api (required)

An object that conforms to IRpcApi<TMethods>, where TMethods is an interface that specifies the type of every RPC function.

interface ExampleApi {
    getBlocks(startSlot: number, endSlot: number): ReadonlyArray<number>;
}

With no concrete implementation

Crucially, this object does not need to provide implementations of those methods. This allows an infinite number of JSON-RPC methods to be added to the API without affecting the size of the client bundle.

Absent a concrete implementation, @solana/rpc-transport will simply send the function name and its arguments to the RPC as the JSON-RPC method and params. For example, if no concrete implementation for getBlocks is provided in api, the following call:

rpc.getBlocks(1, 20).send();

…will result in an RPC call whose method is getBlocks and whose params are [1, 20].

With an optional concrete implementation

If you would like to modify the inputs to a given method call before they are sent, or would like to post-process the response from the JSON-RPC server, you may supply a concrete implementation for one or more methods of api.

const api = {
    getBlocks(startSlot: number, endSlot: number): ReadonlyArray<number> {
        return {
            // Optionally pre-process the method name,
            methodName: 'getBlocksInRange',
            // Pre-process the inputs any way you like.
            params: [assertIsInteger(startSlot), assertIsInteger(endSlot)],
            // Provide an optional function to modify the response.
            responseProcessor: response => ({
                confirmedBlocks: response,
                queryRange: [startSlot, endSlot],
            }),
        };
    },
};

transport (required)

A function that implements a wire transport.

type RpcTransportConfig = Readonly<{
    payload: unknown;
    signal?: AbortSignal;
}>;

export interface IRpcTransport {
    <TResponse>(config: RpcTransportConfig): Promise<TResponse>;
}

An HTTP wire transport is supplied with this package, but you can supply any wire transport that conforms to IRpcTransport.