@pythnetwork/hermes-client 1.0.3 → 1.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -20,11 +20,16 @@ export type HermesClientConfig = {
20
20
  * it will timeout regardless of the retries at the configured `timeout` time.
21
21
  */
22
22
  httpRetries?: number;
23
+ /**
24
+ * Optional headers to be included in every request.
25
+ */
26
+ headers?: HeadersInit;
23
27
  };
24
28
  export declare class HermesClient {
25
29
  private baseURL;
26
30
  private timeout;
27
31
  private httpRetries;
32
+ private headers;
28
33
  /**
29
34
  * Constructs a new Connection.
30
35
  *
@@ -1 +1 @@
1
- {"version":3,"file":"HermesClient.d.ts","sourceRoot":"","sources":["../src/HermesClient.ts"],"names":[],"mappings":"AAAA,OAAO,WAAW,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,OAAO,CAAC,SAAS,CAAC,CAAC;AAC1D,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAC1E,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,OAAO,CAAC,YAAY,CAAC,CAAC;AAChE,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAC1E,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,OAAO,CAAC,YAAY,CAAC,CAAC;AAChE,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,OAAO,CAAC,WAAW,CAAC,CAAC;AAK9D,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC;AACnC,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAC;AACvC,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC;AAC/B,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC;AAElC,MAAM,MAAM,kBAAkB,GAAG;IAE/B,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,qBAAa,YAAY;IACvB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,OAAO,CAAe;IAC9B,OAAO,CAAC,WAAW,CAAS;IAE5B;;;;;OAKG;gBACS,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,kBAAkB;YAM3C,WAAW;IAqCzB;;;;;;;;;;OAUG;IACG,aAAa,CAAC,OAAO,CAAC,EAAE;QAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAWhC;;;;;;;;;;;OAWG;IACG,qBAAqB,CACzB,GAAG,EAAE,SAAS,EAAE,EAChB,OAAO,CAAC,EAAE;QACR,QAAQ,CAAC,EAAE,YAAY,CAAC;QACxB,MAAM,CAAC,EAAE,OAAO,CAAC;KAClB,GACA,OAAO,CAAC,WAAW,CAAC;IAavB;;;;;;;;;;;;OAYG;IACG,0BAA0B,CAC9B,WAAW,EAAE,aAAa,EAC1B,GAAG,EAAE,SAAS,EAAE,EAChB,OAAO,CAAC,EAAE;QACR,QAAQ,CAAC,EAAE,YAAY,CAAC;QACxB,MAAM,CAAC,EAAE,OAAO,CAAC;KAClB,GACA,OAAO,CAAC,WAAW,CAAC;IAavB;;;;;;;;;;;;;;OAcG;IACG,qBAAqB,CACzB,GAAG,EAAE,SAAS,EAAE,EAChB,OAAO,CAAC,EAAE;QACR,QAAQ,CAAC,EAAE,YAAY,CAAC;QACxB,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,cAAc,CAAC,EAAE,OAAO,CAAC;QACzB,cAAc,CAAC,EAAE,OAAO,CAAC;KAC1B,GACA,OAAO,CAAC,WAAW,CAAC;IAcvB,OAAO,CAAC,qBAAqB;CAU9B"}
1
+ {"version":3,"file":"HermesClient.d.ts","sourceRoot":"","sources":["../src/HermesClient.ts"],"names":[],"mappings":"AAAA,OAAO,WAAW,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,OAAO,CAAC,SAAS,CAAC,CAAC;AAC1D,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAC1E,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,OAAO,CAAC,YAAY,CAAC,CAAC;AAChE,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAC1E,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,OAAO,CAAC,YAAY,CAAC,CAAC;AAChE,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,OAAO,CAAC,WAAW,CAAC,CAAC;AAK9D,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC;AACnC,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAC;AACvC,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC;AAC/B,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC;AAElC,MAAM,MAAM,kBAAkB,GAAG;IAE/B,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;OAEG;IACH,OAAO,CAAC,EAAE,WAAW,CAAC;CACvB,CAAC;AAEF,qBAAa,YAAY;IACvB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,OAAO,CAAe;IAC9B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,OAAO,CAAc;IAE7B;;;;;OAKG;gBACS,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,kBAAkB;YAO3C,WAAW;IAyCzB;;;;;;;;;;OAUG;IACG,aAAa,CAAC,OAAO,CAAC,EAAE;QAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAWhC;;;;;;;;;;;OAWG;IACG,qBAAqB,CACzB,GAAG,EAAE,SAAS,EAAE,EAChB,OAAO,CAAC,EAAE;QACR,QAAQ,CAAC,EAAE,YAAY,CAAC;QACxB,MAAM,CAAC,EAAE,OAAO,CAAC;KAClB,GACA,OAAO,CAAC,WAAW,CAAC;IAavB;;;;;;;;;;;;OAYG;IACG,0BAA0B,CAC9B,WAAW,EAAE,aAAa,EAC1B,GAAG,EAAE,SAAS,EAAE,EAChB,OAAO,CAAC,EAAE;QACR,QAAQ,CAAC,EAAE,YAAY,CAAC;QACxB,MAAM,CAAC,EAAE,OAAO,CAAC;KAClB,GACA,OAAO,CAAC,WAAW,CAAC;IAavB;;;;;;;;;;;;;;OAcG;IACG,qBAAqB,CACzB,GAAG,EAAE,SAAS,EAAE,EAChB,OAAO,CAAC,EAAE;QACR,QAAQ,CAAC,EAAE,YAAY,CAAC;QACxB,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,cAAc,CAAC,EAAE,OAAO,CAAC;QACzB,cAAc,CAAC,EAAE,OAAO,CAAC;KAC1B,GACA,OAAO,CAAC,WAAW,CAAC;IAcvB,OAAO,CAAC,qBAAqB;CAU9B"}
@@ -13,6 +13,7 @@ class HermesClient {
13
13
  baseURL;
14
14
  timeout;
15
15
  httpRetries;
16
+ headers;
16
17
  /**
17
18
  * Constructs a new Connection.
18
19
  *
@@ -23,12 +24,17 @@ class HermesClient {
23
24
  this.baseURL = endpoint;
24
25
  this.timeout = config?.timeout ?? DEFAULT_TIMEOUT;
25
26
  this.httpRetries = config?.httpRetries ?? DEFAULT_HTTP_RETRIES;
27
+ this.headers = config?.headers ?? {};
26
28
  }
27
29
  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
28
30
  externalAbortController) {
29
31
  const controller = externalAbortController ?? new AbortController();
30
32
  const { signal } = controller;
31
- options = { ...options, signal }; // Merge any existing options with the signal
33
+ options = {
34
+ ...options,
35
+ signal,
36
+ headers: { ...this.headers, ...options?.headers },
37
+ }; // Merge any existing options with the signal and headers
32
38
  // Set a timeout to abort the request if it takes too long
33
39
  const timeout = setTimeout(() => controller.abort(), this.timeout);
34
40
  try {
@@ -82,7 +88,7 @@ class HermesClient {
82
88
  * @returns PriceUpdate object containing the latest updates.
83
89
  */
84
90
  async getLatestPriceUpdates(ids, options) {
85
- const url = new URL(`v2/updates/price/latest`, this.baseURL);
91
+ const url = new URL("v2/updates/price/latest", this.baseURL);
86
92
  for (const id of ids) {
87
93
  url.searchParams.append("ids[]", id);
88
94
  }
@@ -138,7 +144,7 @@ class HermesClient {
138
144
  const transformedOptions = (0, utils_1.camelToSnakeCaseObject)(options);
139
145
  this.appendUrlSearchParams(url, transformedOptions);
140
146
  }
141
- return new eventsource_1.default(url.toString());
147
+ return new eventsource_1.default(url.toString(), { headers: this.headers });
142
148
  }
143
149
  appendUrlSearchParams(url, params) {
144
150
  Object.entries(params).forEach(([key, value]) => {
@@ -27,8 +27,25 @@ const argv = (0, yargs_1.default)((0, helpers_1.hideBin)(process.argv))
27
27
  "parse-numbers": false,
28
28
  })
29
29
  .parseSync();
30
+ /**
31
+ * Extracts the endpoint and basic authorization headers from a given URL string.
32
+ *
33
+ * @param {string} urlString - The URL string containing the endpoint and optional basic auth credentials.
34
+ * @returns {{ endpoint: string; headers: HeadersInit }} An object containing the endpoint URL and headers.
35
+ */
36
+ function extractBasicAuthorizationHeadersFromUrl(urlString) {
37
+ const url = new URL(urlString);
38
+ const headers = {};
39
+ if (url.username && url.password) {
40
+ headers["Authorization"] = `Basic ${btoa(`${url.username}:${url.password}`)}`;
41
+ url.username = "";
42
+ url.password = "";
43
+ }
44
+ return { endpoint: url.toString(), headers };
45
+ }
30
46
  async function run() {
31
- const connection = new HermesClient_1.HermesClient(argv.endpoint);
47
+ const { endpoint, headers } = extractBasicAuthorizationHeadersFromUrl(argv.endpoint);
48
+ const connection = new HermesClient_1.HermesClient(endpoint, { headers });
32
49
  const priceIds = argv.priceIds;
33
50
  // Get price feeds
34
51
  const priceFeeds = await connection.getPriceFeeds({
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pythnetwork/hermes-client",
3
- "version": "1.0.3",
3
+ "version": "1.0.4",
4
4
  "description": "Pyth Hermes Client",
5
5
  "author": {
6
6
  "name": "Pyth Data Association"
@@ -57,5 +57,5 @@
57
57
  "eventsource": "^2.0.2",
58
58
  "zod": "^3.23.8"
59
59
  },
60
- "gitHead": "dcf7a318e23ca38793d22b2adb7d4b902097f179"
60
+ "gitHead": "07a7767ca5718c839f55702439af08a6889f682b"
61
61
  }