Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
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
2 changes: 1 addition & 1 deletion apps/hermes/client/js/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@pythnetwork/hermes-client",
"version": "1.0.4",
"version": "1.1.0",
"description": "Pyth Hermes Client",
"author": {
"name": "Pyth Data Association"
Expand Down
25 changes: 24 additions & 1 deletion apps/hermes/client/js/src/HermesClient.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,12 @@ import { camelToSnakeCaseObject } from "./utils";

// Accessing schema objects
export type AssetType = z.infer<typeof schemas.AssetType>;
export type BinaryPriceUpdate = z.infer<typeof schemas.BinaryPriceUpdate>;
export type BinaryPriceUpdate = z.infer<typeof schemas.BinaryUpdate>;
export type EncodingType = z.infer<typeof schemas.EncodingType>;
export type PriceFeedMetadata = z.infer<typeof schemas.PriceFeedMetadata>;
export type PriceIdInput = z.infer<typeof schemas.PriceIdInput>;
export type PriceUpdate = z.infer<typeof schemas.PriceUpdate>;
export type PublisherCaps = z.infer<typeof schemas.PublisherCaps>;

const DEFAULT_TIMEOUT: DurationInMs = 5000;
const DEFAULT_HTTP_RETRIES = 3;
Expand Down Expand Up @@ -120,6 +121,28 @@ export class HermesClient {
);
}

/**
* Fetch the latest publisher stake caps.
* This endpoint can be customized by specifying the encoding type and whether the results should also return the parsed publisher caps.
* This will throw an error if there is a network problem or the price service returns a non-ok response.
*
* @param options Optional parameters:
* - encoding: Encoding type. If specified, return the price update in the encoding specified by the encoding parameter. Default is hex.
* - parsed: Boolean to specify if the parsed price update should be included in the response. Default is false.
*
* @returns PublisherCaps object containing the latest publisher stake caps.
*/
async getLatestPublisherCaps(options?: {
encoding?: EncodingType;
parsed?: boolean;
}): Promise<PublisherCaps> {
const url = new URL("v2/updates/publisher_stake_caps/latest", this.baseURL);
if (options) {
this.appendUrlSearchParams(url, options);
}
return await this.httpRequest(url.toString(), schemas.PublisherCaps);
}

/**
* Fetch the latest price updates for a set of price feed IDs.
* This endpoint can be customized by specifying the encoding type and whether the results should also return the parsed price update using the options object.
Expand Down
41 changes: 38 additions & 3 deletions apps/hermes/client/js/src/zodSchemas.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ const PriceFeedMetadata = z
.passthrough();
const PriceIdInput = z.string();
const EncodingType = z.enum(["hex", "base64"]);
const BinaryPriceUpdate = z
const BinaryUpdate = z
.object({ data: z.array(z.string()), encoding: EncodingType })
.passthrough();
const RpcPrice = z
Expand Down Expand Up @@ -38,10 +38,24 @@ const ParsedPriceUpdate = z
.passthrough();
const PriceUpdate = z
.object({
binary: BinaryPriceUpdate,
binary: BinaryUpdate,
parsed: z.array(ParsedPriceUpdate).nullish(),
})
.passthrough();
const ParsedPublisherCap = z.object({
publisher: z.string(),
cap: z.number().int(),
});

const PublisherCaps = z.object({
binary: BinaryUpdate,
parsed: z
.object({
publisher_stake_caps: z.array(ParsedPublisherCap),
})
.array()
.nullish(),
});

export const schemas = {
AssetType,
Expand All @@ -50,11 +64,12 @@ export const schemas = {
PriceFeedMetadata,
PriceIdInput,
EncodingType,
BinaryPriceUpdate,
BinaryUpdate,
RpcPrice,
RpcPriceFeedMetadataV2,
ParsedPriceUpdate,
PriceUpdate,
PublisherCaps,
};

const endpoints = makeApi([
Expand Down Expand Up @@ -196,6 +211,26 @@ Given a collection of price feed ids, retrieve the latest Pyth price for each pr
},
],
},
{
method: "get",
path: "/v2/updates/publisher_stake_caps/latest",
alias: "latest_publisher_stake_caps",
description: `Get the most recent publisher stake caps update data.`,
requestFormat: "json",
parameters: [
{
name: "encoding",
type: "Query",
schema: z.enum(["hex", "base64"]).optional(),
},
{
name: "parsed",
type: "Query",
schema: z.boolean().optional(),
},
],
response: z.array(PublisherCaps),
},
]);

export const api = new Zodios(endpoints);
Expand Down
Loading