@pythnetwork/hermes-client
Advanced tools
@@ -1,2 +0,2 @@ | ||
| import EventSource from "eventsource"; | ||
| import { EventSource } from "eventsource"; | ||
| import { schemas } from "./zodSchemas"; | ||
@@ -54,5 +54,6 @@ import { z } from "zod"; | ||
| */ | ||
| getPriceFeeds(options?: { | ||
| getPriceFeeds({ fetchOptions, ...options }?: { | ||
| query?: string; | ||
| filter?: string; | ||
| fetchOptions?: RequestInit; | ||
| }): Promise<PriceFeedMetadata[]>; | ||
@@ -70,5 +71,6 @@ /** | ||
| */ | ||
| getLatestPublisherCaps(options?: { | ||
| getLatestPublisherCaps({ fetchOptions, ...options }?: { | ||
| encoding?: EncodingType; | ||
| parsed?: boolean; | ||
| fetchOptions?: RequestInit; | ||
| }): Promise<PublisherCaps>; | ||
@@ -92,3 +94,3 @@ /** | ||
| ignoreInvalidPriceIds?: boolean; | ||
| }): Promise<PriceUpdate>; | ||
| }, fetchOptions?: RequestInit): Promise<PriceUpdate>; | ||
| /** | ||
@@ -112,3 +114,3 @@ * Fetch the price updates for a set of price feed IDs at a given timestamp. | ||
| ignoreInvalidPriceIds?: boolean; | ||
| }): Promise<PriceUpdate>; | ||
| }, fetchOptions?: RequestInit): Promise<PriceUpdate>; | ||
| /** | ||
@@ -157,3 +159,3 @@ * Fetch streaming price updates for a set of price feed IDs. | ||
| ignoreInvalidPriceIds?: boolean; | ||
| }): Promise<TwapsResponse>; | ||
| }, fetchOptions?: RequestInit): Promise<TwapsResponse>; | ||
| private appendUrlSearchParams; | ||
@@ -160,0 +162,0 @@ private buildURL; |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"HermesClient.d.ts","sourceRoot":"","sources":["../src/HermesClient.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"HermesClient.d.ts","sourceRoot":"","sources":["../src/HermesClient.ts"],"names":[],"mappings":"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"} |
+30
-29
| "use strict"; | ||
| var __importDefault = (this && this.__importDefault) || function (mod) { | ||
| return (mod && mod.__esModule) ? mod : { "default": mod }; | ||
| }; | ||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||
| exports.HermesClient = void 0; | ||
| const eventsource_1 = __importDefault(require("eventsource")); | ||
| const eventsource_1 = require("eventsource"); | ||
| const zodSchemas_1 = require("./zodSchemas"); | ||
@@ -29,16 +26,13 @@ const utils_1 = require("./utils"); | ||
| } | ||
| async httpRequest(url, schema, options, retries = this.httpRetries, backoff = 100 + Math.floor(Math.random() * 100), // Adding randomness to the initial backoff to avoid "thundering herd" scenario where a lot of clients that get kicked off all at the same time (say some script or something) and fail to connect all retry at exactly the same time too | ||
| externalAbortController) { | ||
| const controller = externalAbortController ?? new AbortController(); | ||
| const { signal } = controller; | ||
| options = { | ||
| ...options, | ||
| signal, | ||
| headers: { ...this.headers, ...options?.headers }, | ||
| }; // Merge any existing options with the signal and headers | ||
| // Set a timeout to abort the request if it takes too long | ||
| const timeout = setTimeout(() => controller.abort(), this.timeout); | ||
| async httpRequest(url, schema, options, retries = this.httpRetries, backoff = 100 + Math.floor(Math.random() * 100) // Adding randomness to the initial backoff to avoid "thundering herd" scenario where a lot of clients that get kicked off all at the same time (say some script or something) and fail to connect all retry at exactly the same time too | ||
| ) { | ||
| try { | ||
| const response = await fetch(url, options); | ||
| clearTimeout(timeout); // Clear the timeout if the request completes in time | ||
| const response = await fetch(url, { | ||
| ...options, | ||
| signal: AbortSignal.any([ | ||
| ...(options?.signal ? [options.signal] : []), | ||
| AbortSignal.timeout(this.timeout), | ||
| ]), | ||
| headers: { ...this.headers, ...options?.headers }, | ||
| }); | ||
| if (!response.ok) { | ||
@@ -52,3 +46,2 @@ const errorBody = await response.text(); | ||
| catch (error) { | ||
| clearTimeout(timeout); | ||
| if (retries > 0 && | ||
@@ -74,3 +67,3 @@ !(error instanceof Error && error.name === "AbortError")) { | ||
| */ | ||
| async getPriceFeeds(options) { | ||
| async getPriceFeeds({ fetchOptions, ...options } = {}) { | ||
| const url = this.buildURL("price_feeds"); | ||
@@ -80,3 +73,3 @@ if (options) { | ||
| } | ||
| return await this.httpRequest(url.toString(), zodSchemas_1.schemas.PriceFeedMetadata.array()); | ||
| return await this.httpRequest(url.toString(), zodSchemas_1.schemas.PriceFeedMetadata.array(), fetchOptions); | ||
| } | ||
@@ -94,3 +87,3 @@ /** | ||
| */ | ||
| async getLatestPublisherCaps(options) { | ||
| async getLatestPublisherCaps({ fetchOptions, ...options } = {}) { | ||
| const url = this.buildURL("updates/publisher_stake_caps/latest"); | ||
@@ -100,3 +93,3 @@ if (options) { | ||
| } | ||
| return await this.httpRequest(url.toString(), zodSchemas_1.schemas.LatestPublisherStakeCapsUpdateDataResponse); | ||
| return await this.httpRequest(url.toString(), zodSchemas_1.schemas.LatestPublisherStakeCapsUpdateDataResponse, fetchOptions); | ||
| } | ||
@@ -116,3 +109,3 @@ /** | ||
| */ | ||
| async getLatestPriceUpdates(ids, options) { | ||
| async getLatestPriceUpdates(ids, options, fetchOptions) { | ||
| const url = this.buildURL("updates/price/latest"); | ||
@@ -126,3 +119,3 @@ for (const id of ids) { | ||
| } | ||
| return this.httpRequest(url.toString(), zodSchemas_1.schemas.PriceUpdate); | ||
| return this.httpRequest(url.toString(), zodSchemas_1.schemas.PriceUpdate, fetchOptions); | ||
| } | ||
@@ -143,3 +136,3 @@ /** | ||
| */ | ||
| async getPriceUpdatesAtTimestamp(publishTime, ids, options) { | ||
| async getPriceUpdatesAtTimestamp(publishTime, ids, options, fetchOptions) { | ||
| const url = this.buildURL(`updates/price/${publishTime}`); | ||
@@ -153,3 +146,3 @@ for (const id of ids) { | ||
| } | ||
| return this.httpRequest(url.toString(), zodSchemas_1.schemas.PriceUpdate); | ||
| return this.httpRequest(url.toString(), zodSchemas_1.schemas.PriceUpdate, fetchOptions); | ||
| } | ||
@@ -182,3 +175,11 @@ /** | ||
| } | ||
| return new eventsource_1.default(url.toString(), { headers: this.headers }); | ||
| return new eventsource_1.EventSource(url.toString(), { | ||
| fetch: (input, init) => fetch(input, { | ||
| ...init, | ||
| headers: { | ||
| ...init?.headers, | ||
| ...this.headers, | ||
| }, | ||
| }), | ||
| }); | ||
| } | ||
@@ -200,3 +201,3 @@ /** | ||
| */ | ||
| async getLatestTwaps(ids, window_seconds, options) { | ||
| async getLatestTwaps(ids, window_seconds, options, fetchOptions) { | ||
| const url = this.buildURL(`updates/twap/${window_seconds}/latest`); | ||
@@ -210,3 +211,3 @@ for (const id of ids) { | ||
| } | ||
| return this.httpRequest(url.toString(), zodSchemas_1.schemas.TwapsResponse); | ||
| return this.httpRequest(url.toString(), zodSchemas_1.schemas.TwapsResponse, fetchOptions); | ||
| } | ||
@@ -213,0 +214,0 @@ appendUrlSearchParams(url, params) { |
+1
-2
| "use strict"; | ||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||
| exports.camelToSnakeCaseObject = void 0; | ||
| exports.camelToSnakeCaseObject = camelToSnakeCaseObject; | ||
| function camelToSnakeCase(str) { | ||
@@ -14,2 +14,1 @@ return str.replace(/[A-Z]/g, (letter) => `_${letter.toLowerCase()}`); | ||
| } | ||
| exports.camelToSnakeCaseObject = camelToSnakeCaseObject; |
| "use strict"; | ||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||
| exports.createApiClient = exports.api = exports.schemas = void 0; | ||
| exports.api = exports.schemas = void 0; | ||
| exports.createApiClient = createApiClient; | ||
| const core_1 = require("@zodios/core"); | ||
@@ -322,2 +323,1 @@ const zod_1 = require("zod"); | ||
| } | ||
| exports.createApiClient = createApiClient; |
+4
-5
| { | ||
| "name": "@pythnetwork/hermes-client", | ||
| "version": "1.3.1", | ||
| "version": "1.4.0", | ||
| "description": "Pyth Hermes Client", | ||
@@ -39,3 +39,2 @@ "author": { | ||
| "devDependencies": { | ||
| "@types/eventsource": "^1.1.15", | ||
| "@types/jest": "^29.4.0", | ||
@@ -51,3 +50,3 @@ "@types/node": "^20.14.2", | ||
| "ts-jest": "^29.0.5", | ||
| "typescript": "^4.6.3", | ||
| "typescript": "catalog:", | ||
| "yargs": "^17.4.1" | ||
@@ -57,6 +56,6 @@ }, | ||
| "@zodios/core": "^10.9.6", | ||
| "eventsource": "^2.0.2", | ||
| "eventsource": "^3.0.5", | ||
| "zod": "^3.23.8" | ||
| }, | ||
| "gitHead": "cdaf99e8629cd6af655a5f1c2c5750de9bc485dd" | ||
| "gitHead": "f5c4b3df87829b926d59a5058be74917eec05b90" | ||
| } |
278899
0.07%12
-7.69%5745
0.03%3
200%+ Added
+ Added
- Removed
Updated