added rpc calls get_stats and get_confirmation_history (#14)

* add get_stats method and StatsType definitions

* add get_confirmation_history method and ConfirmationHistoryRPC definitions

* added documentation comment for get_confirmation_history method
This commit is contained in:
Eulentier
2025-12-11 01:34:35 +01:00
committed by GitHub
parent 4c693965f8
commit dab988f1f5
2 changed files with 76 additions and 1 deletions

15
rpc.ts
View File

@@ -1,4 +1,4 @@
import type { Address, BlockHash, BlockCountRPC, BlockInfoRPC, BlocksRPC, BlocksInfoRPC, RepresentativesRPC, RepresentativesOnlineRPC, RepresentativesOnlineWeightRPC, AccountHistoryRPC, AccountHistoryRawRPC, AccountInfoRPC, AccountBalanceRPC, AccountsBalancesRPC, AccountRepresentativeRPC, AccountsRepresentativesRPC, AccountWeightRPC, AccountReceivableRPC, AccountReceivableThresholdRPC, AccountReceivableSourceRPC, DelegatorsRPC, DelegatorsCountRPC, TelemetryRPC, TelemetryRawRPC, TelemetryAddressRPC, VersionRPC } from "./rpc_types";
import type { Address, BlockHash, BlockCountRPC, BlockInfoRPC, BlocksRPC, BlocksInfoRPC, RepresentativesRPC, RepresentativesOnlineRPC, RepresentativesOnlineWeightRPC, AccountHistoryRPC, AccountHistoryRawRPC, AccountInfoRPC, AccountBalanceRPC, AccountsBalancesRPC, AccountRepresentativeRPC, AccountsRepresentativesRPC, AccountWeightRPC, AccountReceivableRPC, AccountReceivableThresholdRPC, AccountReceivableSourceRPC, DelegatorsRPC, DelegatorsCountRPC, TelemetryRPC, TelemetryRawRPC, TelemetryAddressRPC, VersionRPC, StatsType, StatsRPC, ConfirmationHistoryRPC } from "./rpc_types";
/** Implement this interface if the built-in RPC class does not fit your needs. The easiest way to do this is by just extending the built-in RPC class */
export interface RPCInterface {
@@ -197,6 +197,19 @@ export class RPC implements RPCInterface {
action: "version",
})) as VersionRPC;
}
/** https://docs.nano.org/commands/rpc-protocol/#stats */
async get_stats<T extends StatsType>(type: T): Promise<StatsRPC<T>> {
return (await this.call({
action: "stats",
type,
})) as StatsRPC<T>;
}
/** https://docs.nano.org/commands/rpc-protocol/#confirmation_history */
async get_confirmation_history(hash?: string): Promise<ConfirmationHistoryRPC> {
return (await this.call({ action: "confirmation_history" })) as ConfirmationHistoryRPC;
}
}
export class RPCWithBackup extends RPC {

View File

@@ -10,6 +10,8 @@ export type BlockSubtype = BlockBasicTypes | "epoch";
export type BlockLegacyTypes = BlockBasicTypes | "open";
export type BlockAllTypes = BlockLegacyTypes | "state";
export type StatsType = "counters" | "samples" | "objects" | "database";
export interface BlockNoSignature {
type: BlockAllTypes;
account: Address;
@@ -218,4 +220,64 @@ export interface VersionRPC {
build_info: string;
}
export interface StatsCountersRPC {
type: "counters";
created: string;
entries: {
time: string;
type: string;
detail: string;
dir: "in" | "out";
value: `${number}`;
}[];
}
export interface StatsSamplesRPC {
type: "samples";
created: string;
entries:
| ""
| {
time: string;
type: string;
detail: string;
dir: string;
value: string;
}[];
stat_duration_seconds: `${number}`;
}
export interface StatsUnstableRPC {
[key: string]: string | StatsUnstableRPC;
}
export type StatsRPC<T extends StatsType> = T extends "counters" ? StatsCountersRPC : T extends "samples" ? StatsSamplesRPC : T extends "objects" | "database" ? StatsUnstableRPC : never;
export interface ConfirmationHistoryRPC {
confirmation_stats: {
count: `${number}`;
average: `${number}`;
};
confirmations:
| ""
| [
{
hash: BlockHash;
duration: `${number}`;
time: `${number}`;
tally: `${number}`;
blocks: `${number}`;
voters: `${number}`;
request_count: `${number}`;
},
{
hash: BlockHash;
duration: `${number}`;
time: `${number}`;
tally: `${number}`;
blocks: `${number}`;
voters: `${number}`;
request_count: `${number}`;
},
];
}
//