-
Notifications
You must be signed in to change notification settings - Fork 16
Expand file tree
/
Copy pathensnode-api.ts
More file actions
64 lines (51 loc) · 1.93 KB
/
ensnode-api.ts
File metadata and controls
64 lines (51 loc) · 1.93 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
import config from "@/config";
import {
EnsApiIndexingStatusResponseCodes,
type EnsApiIndexingStatusResponseError,
type EnsApiIndexingStatusResponseOk,
serializeENSApiPublicConfig,
serializeEnsApiIndexingStatusResponse,
} from "@ensnode/ensnode-sdk";
import { buildEnsApiPublicConfig } from "@/config/config.schema";
import { createApp } from "@/lib/hono-factory";
import { getConfigRoute, getIndexingStatusRoute } from "./ensnode-api.routes";
import ensnodeGraphQLApi from "./ensnode-graphql-api";
import nameTokensApi from "./name-tokens-api";
import registrarActionsApi from "./registrar-actions-api";
import resolutionApi from "./resolution-api";
const app = createApp();
app.openapi(getConfigRoute, async (c) => {
const ensApiPublicConfig = buildEnsApiPublicConfig(config);
return c.json(serializeENSApiPublicConfig(ensApiPublicConfig));
});
app.openapi(getIndexingStatusRoute, async (c) => {
// context must be set by the required middleware
if (c.var.indexingStatus === undefined) {
throw new Error(`Invariant(indexing-status): indexingStatusMiddleware required`);
}
if (c.var.indexingStatus instanceof Error) {
return c.json(
serializeEnsApiIndexingStatusResponse({
responseCode: EnsApiIndexingStatusResponseCodes.Error,
} satisfies EnsApiIndexingStatusResponseError),
503,
);
}
// return successful response using the indexing status projection from the middleware context
return c.json(
serializeEnsApiIndexingStatusResponse({
responseCode: EnsApiIndexingStatusResponseCodes.Ok,
realtimeProjection: c.var.indexingStatus,
} satisfies EnsApiIndexingStatusResponseOk),
200,
);
});
// Name Tokens API
app.route("/name-tokens", nameTokensApi);
// Registrar Actions API
app.route("/registrar-actions", registrarActionsApi);
// Resolution API
app.route("/resolve", resolutionApi);
// ENSNode GraphQL API
app.route("/graphql", ensnodeGraphQLApi);
export default app;