@rpc-bastion/cli
v0.4.1
Published
bastion diagnostics CLI: doctor, monitor, watch-tx, simulate (bin: `bastion`).
Downloads
291
Readme
@rpc-bastion/cli
The bastion diagnostics CLI — inspect endpoints, watch transactions, and run
chaos scenarios, all on the same resilient pool/sender the SDK uses. Ships under
the @rpc-bastion/* scope; the executable is bastion.
npx @rpc-bastion/cli doctor --endpoints https://api.devnet.solana.com --json
# or install it:
npm i -g @rpc-bastion/cli && bastion doctor --endpoints <urls>From a checkout of this repo, before publication, run the built bin directly:
npm install && npm run build # from the repo root
node packages/cli/dist/bin.cjs <command> # e.g. doctor --jsonCommands
| Command | What it does |
|---|---|
| bastion doctor --endpoints <urls\|--config file> [--probes N] [--json] | One-shot diagnostics per endpoint: p50 latency, getHealth, slot vs cluster max, version. Pretty table or --json. |
| bastion monitor --endpoints <urls\|--config file> [--interval ms] | Live endpoint health table (status dot, latency sparkline, error rate, slot lag, breaker) refreshing on an interval. |
| bastion watch-tx <signature> --endpoints <urls> | Watch a transaction to a terminal state (confirmed / failed / expired), reusing the confirmation engine. |
| bastion simulate --scenario <name> \| --list | Run a built-in testkit chaos scenario against a local mock pool and render it live. |
Config file (bastion.config.json): { "endpoints": ["..."], "jito": { "region": "..." } }.
Examples
bastion doctor --endpoints https://api.devnet.solana.com --json
bastion simulate --list
bastion simulate --scenario flaky-endpoint
bastion monitor --config bastion.config.json --interval 1000Architecture (why it's testable)
All data-fetching and aggregation lives in pure functions under
src/data/ — endpoint probing (runDoctor), health projection
(summarizeSnapshot), scenario simulation (runSimulation), and the config/arg
parsers. These are exported from the package and fully unit-tested (against the
testkit mock RPC, with injected clocks — no real network in tests).
The rendering + live-I/O layer lives under src/ui/ (ANSI
tables/sparklines, the command orchestrators, the bastion executable) and is
excluded from coverage — the data it renders is what's verified.
// programmatic use of the data layer
import { runDoctor, doctorReportToJson } from '@rpc-bastion/cli';
const report = await runDoctor(urls, { rpcFactory });
console.log(doctorReportToJson(report));