solana_kit_rpc_transformers

pub package docs website CI coverage

Request and response transformers for the Solana Kit Dart SDK.

Transformers sit between the transport and the typed RPC layer. They inject default commitments into requests, upcast large integers to BigInt in responses, and throw structured SolanaErrors for RPC failures. solana_kit_rpc and solana_kit_rpc_subscriptions use these internally.

Installation

Install the package directly:

dependencies:
  "solana_kit_rpc_transformers": ^0.9.1

If your app uses several Solana Kit packages together, you can also depend on the umbrella package instead:

dart pub add solana_kit

Inside this monorepo, Dart workspace resolution uses the local package automatically.

Documentation

For architecture notes, getting-started guides, and cross-package examples, start with the workspace docs site and then drill down into the package README and API reference.

Usage

Default request transformer

getDefaultRequestTransformerForSolanaRpc injects a default commitment into requests that accept one.

import 'package:solana_kit_rpc_spec_types/solana_kit_rpc_spec_types.dart';
import 'package:solana_kit_rpc_transformers/solana_kit_rpc_transformers.dart';
import 'package:solana_kit_rpc_types/solana_kit_rpc_types.dart';

void main() {
  final transformer = getDefaultRequestTransformerForSolanaRpc(
    const RequestTransformerConfig(defaultCommitment: Commitment.confirmed),
  );

  final transformed = transformer(
    RpcRequest<Object?>(
      methodName: 'getBalance',
      params: <Object?>[
        '11111111111111111111111111111111',
        <String, Object?>{'minContextSlot': BigInt.from(123)},
      ],
    ),
  );

  print('Transformed params: ${transformed.params}');
}

Default response transformer

getDefaultResponseTransformerForSolanaRpc composes error throwing, result extraction, and BigInt upcast.

import 'package:solana_kit_rpc_spec_types/solana_kit_rpc_spec_types.dart';
import 'package:solana_kit_rpc_transformers/solana_kit_rpc_transformers.dart';

void main() {
  final transformer = getDefaultResponseTransformerForSolanaRpc();

  final request = RpcRequest<Object?>(
    methodName: 'getSlot',
    params: [],
  );
  final response = <String, Object?>{
    'jsonrpc': '2.0',
    'id': 1,
    'result': 42,
  };

  final result = transformer(response, request);
  print(result);
}

Tree walker transformers

getTreeWalkerRequestTransformer and getTreeWalkerResponseTransformer walk request or response payloads node by node, applying visitor functions. Use KEYPATH_WILDCARD to match any key at a given position.

import 'package:solana_kit_rpc_spec_types/solana_kit_rpc_spec_types.dart';
import 'package:solana_kit_rpc_transformers/solana_kit_rpc_transformers.dart';

void main() {
  NodeVisitor uppercaseVisitor = (value, state) {
    if (value is String) return value.toUpperCase();
    return value;
  };

  final transformer = getTreeWalkerRequestTransformer(
    [uppercaseVisitor],
    const TraversalState(keyPath: []),
  );

  final request = RpcRequest<Object?>(
    methodName: 'test',
    params: ['hello', {'name': 'world'}],
  );

  final result = transformer(request);
  print(result.params); // ['HELLO', {'name': 'WORLD'}]
}

Key APIs

  • getDefaultRequestTransformerForSolanaRpc, getDefaultResponseTransformerForSolanaRpc.
  • getTreeWalkerRequestTransformer, getTreeWalkerResponseTransformer, NodeVisitor, TraversalState, KEYPATH_WILDCARD.
  • parseJsonWithBigInts, stringifyJsonWithBigInts.

Example

Use example/main.dart as a runnable starting point for solana_kit_rpc_transformers.

  • Import path: package:solana_kit_rpc_transformers/solana_kit_rpc_transformers.dart
  • This section is centrally maintained with mdt to keep package guidance aligned.
  • After updating shared docs templates, run docs:update from the repo root.

Maintenance

  • Validate docs in CI and locally with docs:check.
  • Keep examples focused on one workflow and reference package README sections for deeper API details.

Libraries

solana_kit_rpc_transformers
Request and response transformers for the Solana JSON-RPC API.