@pythnetwork/hermes-client 2.0.0 → 2.1.0

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.
@@ -1,85 +1,75 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.api = exports.schemas = void 0;
4
- exports.createApiClient = createApiClient;
5
- const core_1 = require("@zodios/core");
6
- const zod_1 = require("zod");
7
- const AssetType = zod_1.z.enum([
1
+ import { makeApi, Zodios } from "@zodios/core";
2
+ import { z } from "zod";
3
+ const AssetType = z.enum([
8
4
  "crypto",
9
5
  "fx",
10
6
  "equity",
11
7
  "metal",
12
8
  "rates",
13
9
  "crypto_redemption_rate",
10
+ "commodities",
11
+ "crypto_index",
12
+ "crypto_nav"
14
13
  ]);
15
14
  const asset_type = AssetType.nullish();
16
- const RpcPriceIdentifier = zod_1.z.string();
17
- const PriceFeedMetadata = zod_1.z
18
- .object({ attributes: zod_1.z.record(zod_1.z.string()), id: RpcPriceIdentifier })
19
- .passthrough();
20
- const PriceIdInput = zod_1.z.string();
21
- const EncodingType = zod_1.z.enum(["hex", "base64"]);
22
- const BinaryUpdate = zod_1.z
23
- .object({ data: zod_1.z.array(zod_1.z.string()), encoding: EncodingType })
24
- .passthrough();
25
- const RpcPrice = zod_1.z
26
- .object({
27
- conf: zod_1.z.string(),
28
- expo: zod_1.z.number().int(),
29
- price: zod_1.z.string(),
30
- publish_time: zod_1.z.number().int(),
31
- })
32
- .passthrough();
33
- const RpcPriceFeedMetadataV2 = zod_1.z
34
- .object({
35
- prev_publish_time: zod_1.z.number().int().nullable(),
36
- proof_available_time: zod_1.z.number().int().nullable(),
37
- slot: zod_1.z.number().int().gte(0).nullable(),
38
- })
39
- .partial()
40
- .passthrough();
41
- const ParsedPriceUpdate = zod_1.z
42
- .object({
15
+ const RpcPriceIdentifier = z.string();
16
+ const PriceFeedMetadata = z.object({
17
+ attributes: z.record(z.string()),
18
+ id: RpcPriceIdentifier
19
+ }).passthrough();
20
+ const PriceIdInput = z.string();
21
+ const EncodingType = z.enum([
22
+ "hex",
23
+ "base64"
24
+ ]);
25
+ const BinaryUpdate = z.object({
26
+ data: z.array(z.string()),
27
+ encoding: EncodingType
28
+ }).passthrough();
29
+ const RpcPrice = z.object({
30
+ conf: z.string(),
31
+ expo: z.number().int(),
32
+ price: z.string(),
33
+ publish_time: z.number().int()
34
+ }).passthrough();
35
+ const RpcPriceFeedMetadataV2 = z.object({
36
+ prev_publish_time: z.number().int().nullable(),
37
+ proof_available_time: z.number().int().nullable(),
38
+ slot: z.number().int().gte(0).nullable()
39
+ }).partial().passthrough();
40
+ const ParsedPriceUpdate = z.object({
43
41
  ema_price: RpcPrice,
44
42
  id: RpcPriceIdentifier,
45
43
  metadata: RpcPriceFeedMetadataV2,
46
- price: RpcPrice,
47
- })
48
- .passthrough();
49
- const PriceUpdate = zod_1.z
50
- .object({
44
+ price: RpcPrice
45
+ }).passthrough();
46
+ const PriceUpdate = z.object({
51
47
  binary: BinaryUpdate,
52
- parsed: zod_1.z.array(ParsedPriceUpdate).nullish(),
53
- })
54
- .passthrough();
55
- const ParsedPublisherStakeCap = zod_1.z
56
- .object({ cap: zod_1.z.number().int().gte(0), publisher: zod_1.z.string() })
57
- .passthrough();
58
- const ParsedPublisherStakeCapsUpdate = zod_1.z
59
- .object({ publisher_stake_caps: zod_1.z.array(ParsedPublisherStakeCap) })
60
- .passthrough();
61
- const LatestPublisherStakeCapsUpdateDataResponse = zod_1.z
62
- .object({
48
+ parsed: z.array(ParsedPriceUpdate).nullish()
49
+ }).passthrough();
50
+ const ParsedPublisherStakeCap = z.object({
51
+ cap: z.number().int().gte(0),
52
+ publisher: z.string()
53
+ }).passthrough();
54
+ const ParsedPublisherStakeCapsUpdate = z.object({
55
+ publisher_stake_caps: z.array(ParsedPublisherStakeCap)
56
+ }).passthrough();
57
+ const LatestPublisherStakeCapsUpdateDataResponse = z.object({
63
58
  binary: BinaryUpdate,
64
- parsed: zod_1.z.array(ParsedPublisherStakeCapsUpdate).nullish(),
65
- })
66
- .passthrough();
67
- const ParsedPriceFeedTwap = zod_1.z
68
- .object({
69
- down_slots_ratio: zod_1.z.string(),
70
- end_timestamp: zod_1.z.number().int(),
59
+ parsed: z.array(ParsedPublisherStakeCapsUpdate).nullish()
60
+ }).passthrough();
61
+ const ParsedPriceFeedTwap = z.object({
62
+ down_slots_ratio: z.string(),
63
+ end_timestamp: z.number().int(),
71
64
  id: RpcPriceIdentifier,
72
- start_timestamp: zod_1.z.number().int(),
73
- twap: RpcPrice,
74
- })
75
- .passthrough();
76
- const TwapsResponse = zod_1.z
77
- .object({
65
+ start_timestamp: z.number().int(),
66
+ twap: RpcPrice
67
+ }).passthrough();
68
+ const TwapsResponse = z.object({
78
69
  binary: BinaryUpdate,
79
- parsed: zod_1.z.array(ParsedPriceFeedTwap).nullish(),
80
- })
81
- .passthrough();
82
- exports.schemas = {
70
+ parsed: z.array(ParsedPriceFeedTwap).nullish()
71
+ }).passthrough();
72
+ export const schemas = {
83
73
  AssetType,
84
74
  asset_type,
85
75
  RpcPriceIdentifier,
@@ -95,9 +85,9 @@ exports.schemas = {
95
85
  ParsedPublisherStakeCapsUpdate,
96
86
  LatestPublisherStakeCapsUpdateDataResponse,
97
87
  ParsedPriceFeedTwap,
98
- TwapsResponse,
88
+ TwapsResponse
99
89
  };
100
- const endpoints = (0, core_1.makeApi)([
90
+ const endpoints = makeApi([
101
91
  {
102
92
  method: "get",
103
93
  path: "/v2/price_feeds",
@@ -111,15 +101,15 @@ and query string.`,
111
101
  {
112
102
  name: "query",
113
103
  type: "Query",
114
- schema: zod_1.z.string().nullish(),
104
+ schema: z.string().nullish()
115
105
  },
116
106
  {
117
107
  name: "asset_type",
118
108
  type: "Query",
119
- schema: asset_type,
120
- },
109
+ schema: asset_type
110
+ }
121
111
  ],
122
- response: zod_1.z.array(PriceFeedMetadata),
112
+ response: z.array(PriceFeedMetadata)
123
113
  },
124
114
  {
125
115
  method: "get",
@@ -133,37 +123,40 @@ Given a collection of price feed ids, retrieve the latest Pyth price for each pr
133
123
  {
134
124
  name: "publish_time",
135
125
  type: "Path",
136
- schema: zod_1.z.number().int(),
126
+ schema: z.number().int()
137
127
  },
138
128
  {
139
129
  name: "ids[]",
140
130
  type: "Query",
141
- schema: zod_1.z.array(PriceIdInput),
131
+ schema: z.array(PriceIdInput)
142
132
  },
143
133
  {
144
134
  name: "encoding",
145
135
  type: "Query",
146
- schema: zod_1.z.enum(["hex", "base64"]).optional(),
136
+ schema: z.enum([
137
+ "hex",
138
+ "base64"
139
+ ]).optional()
147
140
  },
148
141
  {
149
142
  name: "parsed",
150
143
  type: "Query",
151
- schema: zod_1.z.boolean().optional(),
144
+ schema: z.boolean().optional()
152
145
  },
153
146
  {
154
147
  name: "ignore_invalid_price_ids",
155
148
  type: "Query",
156
- schema: zod_1.z.boolean().optional(),
157
- },
149
+ schema: z.boolean().optional()
150
+ }
158
151
  ],
159
152
  response: PriceUpdate,
160
153
  errors: [
161
154
  {
162
155
  status: 404,
163
156
  description: `Price ids not found`,
164
- schema: zod_1.z.void(),
165
- },
166
- ],
157
+ schema: z.void()
158
+ }
159
+ ]
167
160
  },
168
161
  {
169
162
  method: "get",
@@ -177,79 +170,88 @@ Given a collection of price feed ids, retrieve the latest Pyth price for each pr
177
170
  {
178
171
  name: "ids[]",
179
172
  type: "Query",
180
- schema: zod_1.z.array(PriceIdInput),
173
+ schema: z.array(PriceIdInput)
181
174
  },
182
175
  {
183
176
  name: "encoding",
184
177
  type: "Query",
185
- schema: zod_1.z.enum(["hex", "base64"]).optional(),
178
+ schema: z.enum([
179
+ "hex",
180
+ "base64"
181
+ ]).optional()
186
182
  },
187
183
  {
188
184
  name: "parsed",
189
185
  type: "Query",
190
- schema: zod_1.z.boolean().optional(),
186
+ schema: z.boolean().optional()
191
187
  },
192
188
  {
193
189
  name: "ignore_invalid_price_ids",
194
190
  type: "Query",
195
- schema: zod_1.z.boolean().optional(),
196
- },
191
+ schema: z.boolean().optional()
192
+ }
197
193
  ],
198
194
  response: PriceUpdate,
199
195
  errors: [
200
196
  {
201
197
  status: 404,
202
198
  description: `Price ids not found`,
203
- schema: zod_1.z.void(),
204
- },
205
- ],
199
+ schema: z.void()
200
+ }
201
+ ]
206
202
  },
207
203
  {
208
204
  method: "get",
209
205
  path: "/v2/updates/price/stream",
210
206
  alias: "price_stream_sse_handler",
211
- description: `SSE route handler for streaming price updates.`,
207
+ description: `SSE route handler for streaming price updates.
208
+
209
+ The connection will automatically close after 24 hours to prevent resource leaks.
210
+ Clients should implement reconnection logic to maintain continuous price updates.`,
212
211
  requestFormat: "json",
213
212
  parameters: [
214
213
  {
215
214
  name: "ids[]",
216
215
  type: "Query",
217
- schema: zod_1.z.array(PriceIdInput),
216
+ schema: z.array(PriceIdInput)
218
217
  },
219
218
  {
220
219
  name: "encoding",
221
220
  type: "Query",
222
- schema: zod_1.z.enum(["hex", "base64"]).optional(),
221
+ schema: z.enum([
222
+ "hex",
223
+ "base64"
224
+ ]).optional()
223
225
  },
224
226
  {
225
227
  name: "parsed",
226
228
  type: "Query",
227
- schema: zod_1.z.boolean().optional(),
229
+ schema: z.boolean().optional()
228
230
  },
229
231
  {
230
232
  name: "allow_unordered",
231
233
  type: "Query",
232
- schema: zod_1.z.boolean().optional(),
234
+ schema: z.boolean().optional()
233
235
  },
234
236
  {
235
237
  name: "benchmarks_only",
236
238
  type: "Query",
237
- schema: zod_1.z.boolean().optional(),
239
+ schema: z.boolean().optional()
238
240
  },
239
241
  {
240
242
  name: "ignore_invalid_price_ids",
241
243
  type: "Query",
242
- schema: zod_1.z.boolean().optional(),
243
- },
244
+ schema: z.boolean().optional()
245
+ }
244
246
  ],
245
247
  response: PriceUpdate,
246
248
  errors: [
247
249
  {
248
250
  status: 404,
249
251
  description: `Price ids not found`,
250
- schema: zod_1.z.void(),
251
- },
252
- ],
252
+ schema: z.void()
253
+ }
254
+ ]
253
255
  },
254
256
  {
255
257
  method: "get",
@@ -261,15 +263,18 @@ Given a collection of price feed ids, retrieve the latest Pyth price for each pr
261
263
  {
262
264
  name: "encoding",
263
265
  type: "Query",
264
- schema: zod_1.z.enum(["hex", "base64"]).optional(),
266
+ schema: z.enum([
267
+ "hex",
268
+ "base64"
269
+ ]).optional()
265
270
  },
266
271
  {
267
272
  name: "parsed",
268
273
  type: "Query",
269
- schema: zod_1.z.boolean().optional(),
270
- },
274
+ schema: z.boolean().optional()
275
+ }
271
276
  ],
272
- response: LatestPublisherStakeCapsUpdateDataResponse,
277
+ response: LatestPublisherStakeCapsUpdateDataResponse
273
278
  },
274
279
  {
275
280
  method: "get",
@@ -283,40 +288,43 @@ Given a collection of price feed ids, retrieve the latest Pyth TWAP price for ea
283
288
  {
284
289
  name: "window_seconds",
285
290
  type: "Path",
286
- schema: zod_1.z.number().int().gte(0),
291
+ schema: z.number().int().gte(0)
287
292
  },
288
293
  {
289
294
  name: "ids[]",
290
295
  type: "Query",
291
- schema: zod_1.z.array(PriceIdInput),
296
+ schema: z.array(PriceIdInput)
292
297
  },
293
298
  {
294
299
  name: "encoding",
295
300
  type: "Query",
296
- schema: zod_1.z.enum(["hex", "base64"]).optional(),
301
+ schema: z.enum([
302
+ "hex",
303
+ "base64"
304
+ ]).optional()
297
305
  },
298
306
  {
299
307
  name: "parsed",
300
308
  type: "Query",
301
- schema: zod_1.z.boolean().optional(),
309
+ schema: z.boolean().optional()
302
310
  },
303
311
  {
304
312
  name: "ignore_invalid_price_ids",
305
313
  type: "Query",
306
- schema: zod_1.z.boolean().optional(),
307
- },
314
+ schema: z.boolean().optional()
315
+ }
308
316
  ],
309
317
  response: TwapsResponse,
310
318
  errors: [
311
319
  {
312
320
  status: 404,
313
321
  description: `Price ids not found`,
314
- schema: zod_1.z.void(),
315
- },
316
- ],
317
- },
322
+ schema: z.void()
323
+ }
324
+ ]
325
+ }
318
326
  ]);
319
- exports.api = new core_1.Zodios(endpoints);
320
- function createApiClient(baseUrl, options) {
321
- return new core_1.Zodios(baseUrl, endpoints, options);
327
+ export const api = new Zodios(endpoints);
328
+ export function createApiClient(baseUrl, options) {
329
+ return new Zodios(baseUrl, endpoints, options);
322
330
  }
package/package.json CHANGED
@@ -1,15 +1,13 @@
1
1
  {
2
2
  "name": "@pythnetwork/hermes-client",
3
- "version": "2.0.0",
3
+ "version": "2.1.0",
4
4
  "description": "Pyth Hermes Client",
5
5
  "author": {
6
6
  "name": "Pyth Data Association"
7
7
  },
8
8
  "homepage": "https://pyth.network",
9
- "main": "lib/HermesClient.js",
10
- "types": "lib/HermesClient.d.ts",
11
9
  "files": [
12
- "lib/**/*"
10
+ "dist/**/*"
13
11
  ],
14
12
  "repository": {
15
13
  "type": "git",
@@ -19,34 +17,21 @@
19
17
  "publishConfig": {
20
18
  "access": "public"
21
19
  },
22
- "scripts": {
23
- "build:typescript": "tsc",
24
- "build:schemas": "openapi-zod-client ./schema.json --output src/zodSchemas.ts",
25
- "pull:schema": "curl -o schema.json -z schema.json https://hermes.pyth.network/docs/openapi.json",
26
- "example": "node lib/examples/HermesClient.js",
27
- "format": "prettier --write \"src/**/*.ts\"",
28
- "test:lint": "eslint src/",
29
- "prepublishOnly": "pnpm run build:typescript && pnpm run test:lint",
30
- "preversion": "pnpm run test:lint",
31
- "version": "pnpm run format && git add -A src"
32
- },
33
20
  "keywords": [
34
21
  "pyth",
35
22
  "oracle"
36
23
  ],
37
24
  "license": "Apache-2.0",
38
25
  "devDependencies": {
26
+ "@cprussin/eslint-config": "^4.0.2",
27
+ "@pythnetwork/jest-config": "",
39
28
  "@types/jest": "^29.4.0",
40
29
  "@types/node": "^20.14.2",
41
30
  "@types/yargs": "^17.0.10",
42
- "@typescript-eslint/eslint-plugin": "^5.21.0",
43
- "@typescript-eslint/parser": "^5.21.0",
44
- "eslint": "^8.14.0",
31
+ "eslint": "^9.23.0",
45
32
  "jest": "^29.4.0",
46
33
  "openapi-zod-client": "^1.18.1",
47
- "prettier": "^2.6.2",
48
- "ts-jest": "^29.0.5",
49
- "typescript": "catalog:",
34
+ "prettier": "^3.5.3",
50
35
  "yargs": "^17.4.1"
51
36
  },
52
37
  "dependencies": {
@@ -54,5 +39,67 @@
54
39
  "eventsource": "^3.0.5",
55
40
  "zod": "^3.23.8"
56
41
  },
57
- "gitHead": "a691e18cf32192d4d1a3bb393d1ead08b4012989"
58
- }
42
+ "engines": {
43
+ "node": ">=22.14.0"
44
+ },
45
+ "type": "module",
46
+ "exports": {
47
+ "./hermes-client": {
48
+ "require": {
49
+ "types": "./dist/cjs/hermes-client.d.ts",
50
+ "default": "./dist/cjs/hermes-client.cjs"
51
+ },
52
+ "import": {
53
+ "types": "./dist/esm/hermes-client.d.ts",
54
+ "default": "./dist/esm/hermes-client.mjs"
55
+ }
56
+ },
57
+ ".": {
58
+ "require": {
59
+ "types": "./dist/cjs/index.d.ts",
60
+ "default": "./dist/cjs/index.cjs"
61
+ },
62
+ "import": {
63
+ "types": "./dist/esm/index.d.ts",
64
+ "default": "./dist/esm/index.mjs"
65
+ }
66
+ },
67
+ "./utils": {
68
+ "require": {
69
+ "types": "./dist/cjs/utils.d.ts",
70
+ "default": "./dist/cjs/utils.cjs"
71
+ },
72
+ "import": {
73
+ "types": "./dist/esm/utils.d.ts",
74
+ "default": "./dist/esm/utils.mjs"
75
+ }
76
+ },
77
+ "./zodSchemas": {
78
+ "require": {
79
+ "types": "./dist/cjs/zodSchemas.d.ts",
80
+ "default": "./dist/cjs/zodSchemas.cjs"
81
+ },
82
+ "import": {
83
+ "types": "./dist/esm/zodSchemas.d.ts",
84
+ "default": "./dist/esm/zodSchemas.mjs"
85
+ }
86
+ },
87
+ "./package.json": "./package.json"
88
+ },
89
+ "module": "./dist/esm/index.mjs",
90
+ "types": "./dist/cjs/index.d.ts",
91
+ "main": "./dist/cjs/index.cjs",
92
+ "scripts": {
93
+ "build": "ts-duality",
94
+ "build:schemas": "openapi-zod-client ./schema.json --output src/zodSchemas.ts",
95
+ "pull:schema": "curl -o schema.json -z schema.json https://hermes.pyth.network/docs/openapi.json",
96
+ "example": "node lib/examples/HermesClient.js",
97
+ "fix:lint": "eslint src/ --fix --max-warnings 0",
98
+ "fix:format": "prettier --write \"src/**/*.ts\"",
99
+ "test:lint": "eslint src/ --max-warnings 0",
100
+ "test:format": "prettier --check \"src/**/*.ts\"",
101
+ "preversion": "pnpm run test:lint",
102
+ "version": "pnpm run format && git add -A src",
103
+ "clean": "rm -rf ./dist"
104
+ }
105
+ }
@@ -1 +0,0 @@
1
- {"version":3,"file":"HermesClient.d.ts","sourceRoot":"","sources":["../src/HermesClient.ts"],"names":[],"mappings":"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"}