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
15 changes: 14 additions & 1 deletion rpc.ts
Original file line number Diff line number Diff line change
@@ -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 {
Expand Down Expand Up @@ -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 {
Expand Down
62 changes: 62 additions & 0 deletions rpc_types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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}`;
},
];
}

//