@lodestar/api 1.35.0-dev.b42a298a7c → 1.35.0-dev.ba92bd8a88

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.
Files changed (143) hide show
  1. package/lib/beacon/client/beacon.d.ts.map +1 -0
  2. package/lib/beacon/client/config.d.ts.map +1 -0
  3. package/lib/beacon/client/debug.d.ts.map +1 -0
  4. package/lib/beacon/client/events.d.ts.map +1 -0
  5. package/lib/beacon/client/index.d.ts.map +1 -0
  6. package/lib/beacon/client/lightclient.d.ts.map +1 -0
  7. package/lib/beacon/client/lodestar.d.ts.map +1 -0
  8. package/lib/beacon/client/node.d.ts.map +1 -0
  9. package/lib/beacon/client/proof.d.ts.map +1 -0
  10. package/lib/beacon/client/validator.d.ts.map +1 -0
  11. package/lib/beacon/index.d.ts.map +1 -0
  12. package/lib/beacon/routes/beacon/block.d.ts.map +1 -0
  13. package/lib/beacon/routes/beacon/index.d.ts.map +1 -0
  14. package/lib/beacon/routes/beacon/pool.d.ts.map +1 -0
  15. package/lib/beacon/routes/beacon/rewards.d.ts.map +1 -0
  16. package/lib/beacon/routes/beacon/state.d.ts.map +1 -0
  17. package/lib/beacon/routes/config.d.ts.map +1 -0
  18. package/lib/beacon/routes/debug.d.ts.map +1 -0
  19. package/lib/beacon/routes/events.d.ts.map +1 -0
  20. package/lib/beacon/routes/index.d.ts.map +1 -0
  21. package/lib/beacon/routes/lightclient.d.ts.map +1 -0
  22. package/lib/beacon/routes/lodestar.d.ts.map +1 -0
  23. package/lib/beacon/routes/node.d.ts.map +1 -0
  24. package/lib/beacon/routes/proof.d.ts.map +1 -0
  25. package/lib/beacon/routes/validator.d.ts.map +1 -0
  26. package/lib/beacon/server/beacon.d.ts.map +1 -0
  27. package/lib/beacon/server/config.d.ts.map +1 -0
  28. package/lib/beacon/server/debug.d.ts.map +1 -0
  29. package/lib/beacon/server/events.d.ts.map +1 -0
  30. package/lib/beacon/server/index.d.ts.map +1 -0
  31. package/lib/beacon/server/lightclient.d.ts.map +1 -0
  32. package/lib/beacon/server/lodestar.d.ts.map +1 -0
  33. package/lib/beacon/server/node.d.ts.map +1 -0
  34. package/lib/beacon/server/proof.d.ts.map +1 -0
  35. package/lib/beacon/server/validator.d.ts.map +1 -0
  36. package/lib/builder/client.d.ts.map +1 -0
  37. package/lib/builder/index.d.ts.map +1 -0
  38. package/lib/builder/routes.d.ts.map +1 -0
  39. package/lib/builder/server/index.d.ts.map +1 -0
  40. package/lib/index.d.ts.map +1 -0
  41. package/lib/keymanager/client.d.ts.map +1 -0
  42. package/lib/keymanager/index.d.ts.map +1 -0
  43. package/lib/keymanager/routes.d.ts.map +1 -0
  44. package/lib/keymanager/server/index.d.ts.map +1 -0
  45. package/lib/server/index.d.ts.map +1 -0
  46. package/lib/utils/client/error.d.ts.map +1 -0
  47. package/lib/utils/client/eventSource.d.ts.map +1 -0
  48. package/lib/utils/client/format.d.ts.map +1 -0
  49. package/lib/utils/client/httpClient.d.ts.map +1 -0
  50. package/lib/utils/client/index.d.ts.map +1 -0
  51. package/lib/utils/client/method.d.ts.map +1 -0
  52. package/lib/utils/client/metrics.d.ts.map +1 -0
  53. package/lib/utils/client/request.d.ts.map +1 -0
  54. package/lib/utils/client/response.d.ts.map +1 -0
  55. package/lib/utils/codecs.d.ts.map +1 -0
  56. package/lib/utils/fork.d.ts.map +1 -0
  57. package/lib/utils/headers.d.ts.map +1 -0
  58. package/lib/utils/httpStatusCode.d.ts.map +1 -0
  59. package/lib/utils/index.d.ts.map +1 -0
  60. package/lib/utils/metadata.d.ts.map +1 -0
  61. package/lib/utils/schema.d.ts.map +1 -0
  62. package/lib/utils/serdes.d.ts.map +1 -0
  63. package/lib/utils/server/error.d.ts.map +1 -0
  64. package/lib/utils/server/handler.d.ts.map +1 -0
  65. package/lib/utils/server/index.d.ts.map +1 -0
  66. package/lib/utils/server/method.d.ts.map +1 -0
  67. package/lib/utils/server/parser.d.ts.map +1 -0
  68. package/lib/utils/server/route.d.ts.map +1 -0
  69. package/lib/utils/types.d.ts.map +1 -0
  70. package/lib/utils/urlFormat.d.ts.map +1 -0
  71. package/lib/utils/wireFormat.d.ts.map +1 -0
  72. package/package.json +9 -11
  73. package/src/beacon/client/beacon.ts +12 -0
  74. package/src/beacon/client/config.ts +12 -0
  75. package/src/beacon/client/debug.ts +12 -0
  76. package/src/beacon/client/events.ts +69 -0
  77. package/src/beacon/client/index.ts +46 -0
  78. package/src/beacon/client/lightclient.ts +12 -0
  79. package/src/beacon/client/lodestar.ts +12 -0
  80. package/src/beacon/client/node.ts +12 -0
  81. package/src/beacon/client/proof.ts +12 -0
  82. package/src/beacon/client/validator.ts +12 -0
  83. package/src/beacon/index.ts +24 -0
  84. package/src/beacon/routes/beacon/block.ts +602 -0
  85. package/src/beacon/routes/beacon/index.ts +66 -0
  86. package/src/beacon/routes/beacon/pool.ts +503 -0
  87. package/src/beacon/routes/beacon/rewards.ts +216 -0
  88. package/src/beacon/routes/beacon/state.ts +588 -0
  89. package/src/beacon/routes/config.ts +114 -0
  90. package/src/beacon/routes/debug.ts +231 -0
  91. package/src/beacon/routes/events.ts +337 -0
  92. package/src/beacon/routes/index.ts +33 -0
  93. package/src/beacon/routes/lightclient.ts +241 -0
  94. package/src/beacon/routes/lodestar.ts +456 -0
  95. package/src/beacon/routes/node.ts +286 -0
  96. package/src/beacon/routes/proof.ts +79 -0
  97. package/src/beacon/routes/validator.ts +1014 -0
  98. package/src/beacon/server/beacon.ts +7 -0
  99. package/src/beacon/server/config.ts +7 -0
  100. package/src/beacon/server/debug.ts +7 -0
  101. package/src/beacon/server/events.ts +73 -0
  102. package/src/beacon/server/index.ts +55 -0
  103. package/src/beacon/server/lightclient.ts +7 -0
  104. package/src/beacon/server/lodestar.ts +7 -0
  105. package/src/beacon/server/node.ts +7 -0
  106. package/src/beacon/server/proof.ts +7 -0
  107. package/src/beacon/server/validator.ts +7 -0
  108. package/src/builder/client.ts +9 -0
  109. package/src/builder/index.ts +26 -0
  110. package/src/builder/routes.ts +227 -0
  111. package/src/builder/server/index.ts +19 -0
  112. package/src/index.ts +19 -0
  113. package/src/keymanager/client.ts +9 -0
  114. package/src/keymanager/index.ts +39 -0
  115. package/src/keymanager/routes.ts +699 -0
  116. package/src/keymanager/server/index.ts +19 -0
  117. package/src/server/index.ts +2 -0
  118. package/src/utils/client/error.ts +10 -0
  119. package/src/utils/client/eventSource.ts +7 -0
  120. package/src/utils/client/format.ts +22 -0
  121. package/src/utils/client/httpClient.ts +444 -0
  122. package/src/utils/client/index.ts +6 -0
  123. package/src/utils/client/method.ts +50 -0
  124. package/src/utils/client/metrics.ts +9 -0
  125. package/src/utils/client/request.ts +113 -0
  126. package/src/utils/client/response.ts +205 -0
  127. package/src/utils/codecs.ts +143 -0
  128. package/src/utils/fork.ts +44 -0
  129. package/src/utils/headers.ts +173 -0
  130. package/src/utils/httpStatusCode.ts +392 -0
  131. package/src/utils/index.ts +3 -0
  132. package/src/utils/metadata.ts +170 -0
  133. package/src/utils/schema.ts +141 -0
  134. package/src/utils/serdes.ts +120 -0
  135. package/src/utils/server/error.ts +9 -0
  136. package/src/utils/server/handler.ts +149 -0
  137. package/src/utils/server/index.ts +5 -0
  138. package/src/utils/server/method.ts +38 -0
  139. package/src/utils/server/parser.ts +15 -0
  140. package/src/utils/server/route.ts +45 -0
  141. package/src/utils/types.ts +161 -0
  142. package/src/utils/urlFormat.ts +112 -0
  143. package/src/utils/wireFormat.ts +24 -0
@@ -0,0 +1,69 @@
1
+ import {ChainForkConfig} from "@lodestar/config";
2
+ import {getEventSource} from "../../utils/client/eventSource.js";
3
+ import {stringifyQuery, urlJoin} from "../../utils/client/format.js";
4
+ import {ApiClientMethods} from "../../utils/client/method.js";
5
+ import {RouteDefinitionExtra} from "../../utils/client/request.js";
6
+ import {ApiResponse} from "../../utils/client/response.js";
7
+ import {BeaconEvent, Endpoints, getDefinitions, getEventSerdes} from "../routes/events.js";
8
+
9
+ export type ApiClient = ApiClientMethods<Endpoints>;
10
+
11
+ /**
12
+ * REST HTTP client for events routes
13
+ */
14
+ export function getClient(config: ChainForkConfig, baseUrl: string): ApiClient {
15
+ const definitions = getDefinitions(config);
16
+ const eventSerdes = getEventSerdes(config);
17
+
18
+ return {
19
+ eventstream: async ({
20
+ topics,
21
+ signal,
22
+ onEvent,
23
+ onError,
24
+ onClose,
25
+ }): Promise<ApiResponse<Endpoints["eventstream"]>> => {
26
+ const query = stringifyQuery({topics});
27
+ const url = `${urlJoin(baseUrl, definitions.eventstream.url)}?${query}`;
28
+ const EventSource = await getEventSource();
29
+ const eventSource = new EventSource(url);
30
+
31
+ const close = (): void => {
32
+ eventSource.close();
33
+ onClose?.();
34
+ signal.removeEventListener("abort", close);
35
+ };
36
+ signal.addEventListener("abort", close, {once: true});
37
+
38
+ for (const topic of topics) {
39
+ eventSource.addEventListener(topic, (event: MessageEvent) => {
40
+ const message = eventSerdes.fromJson(topic, JSON.parse(event.data));
41
+ onEvent({type: topic, message} as BeaconEvent);
42
+ });
43
+ }
44
+
45
+ // EventSource will try to reconnect always on all errors
46
+ // `eventSource.onerror` events are informative but don't indicate the EventSource closed
47
+ // The only way to abort the connection from the client is via eventSource.close()
48
+ eventSource.onerror = function onerror(err): void {
49
+ const errEs = err as unknown as EventSourceError;
50
+
51
+ // Ignore noisy errors due to beacon node being offline
52
+ if (!/ECONNREFUSED|EAI_AGAIN/.test(errEs.message ?? "")) {
53
+ // If there is no message it likely indicates that the server closed the connection
54
+ onError?.(new Error(errEs.message ?? "Server closed connection"));
55
+ }
56
+
57
+ // Consider 400 and 500 status errors unrecoverable, close the eventsource
58
+ if (errEs.status === 400 || errEs.status === 500) {
59
+ close();
60
+ }
61
+ };
62
+
63
+ return new ApiResponse(definitions.eventstream as RouteDefinitionExtra<Endpoints["eventstream"]>);
64
+ },
65
+ };
66
+ }
67
+
68
+ // https://github.com/EventSource/eventsource/blob/82e034389bd2c08d532c63172b8e858c5b185338/lib/eventsource.js#L143
69
+ type EventSourceError = {status?: number; message?: string};
@@ -0,0 +1,46 @@
1
+ import {ChainForkConfig} from "@lodestar/config";
2
+ import {
3
+ ApiClientMethods,
4
+ HttpClient,
5
+ HttpClientModules,
6
+ HttpClientOptions,
7
+ IHttpClient,
8
+ } from "../../utils/client/index.js";
9
+ import {Endpoints} from "../routes/index.js";
10
+ import * as beacon from "./beacon.js";
11
+ import * as configApi from "./config.js";
12
+ import * as debug from "./debug.js";
13
+ import * as events from "./events.js";
14
+ import * as lightclient from "./lightclient.js";
15
+ import * as lodestar from "./lodestar.js";
16
+ import * as node from "./node.js";
17
+ import * as proof from "./proof.js";
18
+ import * as validator from "./validator.js";
19
+
20
+ type ClientModules = HttpClientModules & {
21
+ config: ChainForkConfig;
22
+ httpClient?: IHttpClient;
23
+ };
24
+
25
+ export type ApiClient = {[K in keyof Endpoints]: ApiClientMethods<Endpoints[K]>} & {httpClient: IHttpClient};
26
+
27
+ /**
28
+ * REST HTTP client for all routes
29
+ */
30
+ export function getClient(opts: HttpClientOptions, modules: ClientModules): ApiClient {
31
+ const {config} = modules;
32
+ const httpClient = modules.httpClient ?? new HttpClient(opts, modules);
33
+
34
+ return {
35
+ beacon: beacon.getClient(config, httpClient),
36
+ config: configApi.getClient(config, httpClient),
37
+ debug: debug.getClient(config, httpClient),
38
+ events: events.getClient(config, httpClient.baseUrl),
39
+ lightclient: lightclient.getClient(config, httpClient),
40
+ lodestar: lodestar.getClient(config, httpClient),
41
+ node: node.getClient(config, httpClient),
42
+ proof: proof.getClient(config, httpClient),
43
+ validator: validator.getClient(config, httpClient),
44
+ httpClient,
45
+ };
46
+ }
@@ -0,0 +1,12 @@
1
+ import {ChainForkConfig} from "@lodestar/config";
2
+ import {ApiClientMethods, IHttpClient, createApiClientMethods} from "../../utils/client/index.js";
3
+ import {Endpoints, getDefinitions} from "../routes/lightclient.js";
4
+
5
+ export type ApiClient = ApiClientMethods<Endpoints>;
6
+
7
+ /**
8
+ * REST HTTP client for lightclient routes
9
+ */
10
+ export function getClient(config: ChainForkConfig, httpClient: IHttpClient): ApiClient {
11
+ return createApiClientMethods(getDefinitions(config), httpClient);
12
+ }
@@ -0,0 +1,12 @@
1
+ import {ChainForkConfig} from "@lodestar/config";
2
+ import {ApiClientMethods, IHttpClient, createApiClientMethods} from "../../utils/client/index.js";
3
+ import {Endpoints, getDefinitions} from "../routes/lodestar.js";
4
+
5
+ export type ApiClient = ApiClientMethods<Endpoints>;
6
+
7
+ /**
8
+ * REST HTTP client for lodestar routes
9
+ */
10
+ export function getClient(config: ChainForkConfig, httpClient: IHttpClient): ApiClient {
11
+ return createApiClientMethods(getDefinitions(config), httpClient);
12
+ }
@@ -0,0 +1,12 @@
1
+ import {ChainForkConfig} from "@lodestar/config";
2
+ import {ApiClientMethods, IHttpClient, createApiClientMethods} from "../../utils/client/index.js";
3
+ import {Endpoints, getDefinitions} from "../routes/node.js";
4
+
5
+ export type ApiClient = ApiClientMethods<Endpoints>;
6
+
7
+ /**
8
+ * REST HTTP client for beacon routes
9
+ */
10
+ export function getClient(config: ChainForkConfig, httpClient: IHttpClient): ApiClient {
11
+ return createApiClientMethods(getDefinitions(config), httpClient);
12
+ }
@@ -0,0 +1,12 @@
1
+ import {ChainForkConfig} from "@lodestar/config";
2
+ import {ApiClientMethods, IHttpClient, createApiClientMethods} from "../../utils/client/index.js";
3
+ import {Endpoints, getDefinitions} from "../routes/proof.js";
4
+
5
+ export type ApiClient = ApiClientMethods<Endpoints>;
6
+
7
+ /**
8
+ * REST HTTP client for proof routes
9
+ */
10
+ export function getClient(config: ChainForkConfig, httpClient: IHttpClient): ApiClient {
11
+ return createApiClientMethods(getDefinitions(config), httpClient);
12
+ }
@@ -0,0 +1,12 @@
1
+ import {ChainForkConfig} from "@lodestar/config";
2
+ import {ApiClientMethods, IHttpClient, createApiClientMethods} from "../../utils/client/index.js";
3
+ import {Endpoints, getDefinitions} from "../routes/validator.js";
4
+
5
+ export type ApiClient = ApiClientMethods<Endpoints>;
6
+
7
+ /**
8
+ * REST HTTP client for validator routes
9
+ */
10
+ export function getClient(config: ChainForkConfig, httpClient: IHttpClient): ApiClient {
11
+ return createApiClientMethods(getDefinitions(config), httpClient);
12
+ }
@@ -0,0 +1,24 @@
1
+ import type {Endpoints} from "./routes/index.js";
2
+
3
+ // NOTE: Don't export server here so it's not bundled to all consumers
4
+
5
+ import * as routes from "./routes/index.js";
6
+ export {routes};
7
+
8
+ export {type ApiClient, getClient} from "./client/index.js";
9
+ export type {Endpoints};
10
+
11
+ // Declare namespaces for CLI options
12
+ export type ApiNamespace = keyof Endpoints;
13
+ const allNamespacesObj: {[K in keyof Endpoints]: true} = {
14
+ beacon: true,
15
+ config: true,
16
+ debug: true,
17
+ events: true,
18
+ lightclient: true,
19
+ lodestar: true,
20
+ node: true,
21
+ proof: true,
22
+ validator: true,
23
+ };
24
+ export const allNamespaces = Object.keys(allNamespacesObj) as ApiNamespace[];