diff --git a/packages/api/src/beacon/client/debug.ts b/packages/api/src/beacon/client/debug.ts index 3e6a8addbd9a..5e54ffa7c0b4 100644 --- a/packages/api/src/beacon/client/debug.ts +++ b/packages/api/src/beacon/client/debug.ts @@ -4,7 +4,7 @@ import {HttpStatusCode} from "../../utils/client/httpStatusCode.js"; import {generateGenericJsonClient, getFetchOptsSerializers, IHttpClient} from "../../utils/client/index.js"; import {ReturnTypes} from "../../utils/types.js"; import {StateId} from "../routes/beacon/state.js"; -import {Api, getReqSerializers, getReturnTypes, ReqTypes, routesData, StateFormat} from "../routes/debug.js"; +import {Api, getReqSerializers, getReturnTypes, ReqTypes, routesData, EncodingFormat} from "../routes/debug.js"; // As Jul 2022, it takes up to 3 mins to download states so make this 5 mins for reservation const GET_STATE_TIMEOUT_MS = 5 * 60 * 1000; @@ -31,7 +31,7 @@ export function getClient(_config: ChainForkConfig, httpClient: IHttpClient): Ap // TODO: Debug the type issue // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-expect-error - async getState(stateId: string, format?: StateFormat) { + async getState(stateId: string, format?: EncodingFormat) { if (format === "ssz") { const res = await httpClient.arrayBuffer({ ...fetchOptsSerializers.getState(stateId, format), @@ -49,7 +49,7 @@ export function getClient(_config: ChainForkConfig, httpClient: IHttpClient): Ap // TODO: Debug the type issue // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-expect-error - async getStateV2(stateId: StateId, format?: StateFormat) { + async getStateV2(stateId: StateId, format?: EncodingFormat) { if (format === "ssz") { const res = await httpClient.arrayBuffer({ ...fetchOptsSerializers.getStateV2(stateId, format), diff --git a/packages/api/src/beacon/routes/debug.ts b/packages/api/src/beacon/routes/debug.ts index bedea5b793ef..de28be931a07 100644 --- a/packages/api/src/beacon/routes/debug.ts +++ b/packages/api/src/beacon/routes/debug.ts @@ -22,7 +22,7 @@ import {ExecutionOptimistic, StateId} from "./beacon/state.js"; // See /packages/api/src/routes/index.ts for reasoning and instructions to add new routes -export type StateFormat = "json" | "ssz"; +export type EncodingFormat = "json" | "ssz"; export const mimeTypeSSZ = "application/octet-stream"; const stringType = new StringType(); @@ -56,22 +56,55 @@ type ProtoNodeApiType = ValueOf; export type Api = { /** * Retrieves all possible chain heads (leaves of fork choice tree). + * Depending on `Accept` header it can be returned either as json or as bytes serialized by SSZ */ - getDebugChainHeads(): Promise>; + getDebugChainHeads( + format?: "json" + ): Promise>; + getDebugChainHeads(format: "ssz"): Promise>; + getDebugChainHeads( + format?: EncodingFormat + ): Promise< + | ApiClientResponse<{[HttpStatusCode.OK]: Uint8Array | {data: {slot: Slot; root: RootHex}[]}}> + | ApiClientResponse<{[HttpStatusCode.OK]: {data: {slot: Slot; root: RootHex}[]}}> + | ApiClientResponse<{[HttpStatusCode.OK]: Uint8Array}> + >; /** * Retrieves all possible chain heads (leaves of fork choice tree). + * Depending on `Accept` header it can be returned either as json or as bytes serialized by SSZ */ - getDebugChainHeadsV2(): Promise< + getDebugChainHeadsV2( + format?: "json" + ): Promise< ApiClientResponse<{ [HttpStatusCode.OK]: {data: {slot: Slot; root: RootHex; executionOptimistic: ExecutionOptimistic}[]}; }> >; + getDebugChainHeadsV2( + format: "ssz" + ): Promise< + ApiClientResponse<{ + [HttpStatusCode.OK]: Uint8Array; + }> + >; + getDebugChainHeadsV2( + format?: EncodingFormat + ): Promise< + ApiClientResponse<{ + [HttpStatusCode.OK]: Uint8Array | {data: {slot: Slot; root: RootHex; executionOptimistic: ExecutionOptimistic}[]}; + }> + >; /** * Dump all ProtoArray's nodes to debug + * Depending on `Accept` header it can be returned either as json or as bytes serialized by SSZ */ - getProtoArrayNodes(): Promise>; + getProtoArrayNodes(format?: "json"): Promise>; + getProtoArrayNodes(format: "ssz"): Promise>; + getProtoArrayNodes( + format?: EncodingFormat + ): Promise>; /** * Get full BeaconState object @@ -90,7 +123,7 @@ export type Api = { getState(stateId: StateId, format: "ssz"): Promise>; getState( stateId: StateId, - format?: StateFormat + format?: EncodingFormat ): Promise< ApiClientResponse<{ [HttpStatusCode.OK]: Uint8Array | {data: allForks.BeaconState; executionOptimistic: ExecutionOptimistic}; @@ -116,7 +149,7 @@ export type Api = { getStateV2(stateId: StateId, format: "ssz"): Promise>; getStateV2( stateId: StateId, - format?: StateFormat + format?: EncodingFormat ): Promise< ApiClientResponse<{ [HttpStatusCode.OK]: diff --git a/packages/api/src/utils/client/client.ts b/packages/api/src/utils/client/client.ts index 0a8cd95204b1..b835da1a242f 100644 --- a/packages/api/src/utils/client/client.ts +++ b/packages/api/src/utils/client/client.ts @@ -10,7 +10,7 @@ import {FetchOpts, HttpError, IHttpClient} from "./httpClient.js"; /** * Format FetchFn opts from Fn arguments given a route definition and request serializer. - * For routes that return only JSOn use @see getGenericJsonClient + * For routes that return only JSON see {@link generateGenericJsonClient} */ // eslint-disable-next-line @typescript-eslint/explicit-function-return-type export function getFetchOptsSerializer any, ReqType extends ReqGeneric>( @@ -34,7 +34,7 @@ export function getFetchOptsSerializer any, ReqType } /** - * Generate `getFetchOptsSerializer()` functions for all routes in `Api` + * Generate {@link getFetchOptsSerializer()} functions for all routes in `Api` */ // eslint-disable-next-line @typescript-eslint/explicit-function-return-type export function getFetchOptsSerializers<