-
Notifications
You must be signed in to change notification settings - Fork 16
Expand file tree
/
Copy pathname-tokens-api.routes.ts
More file actions
86 lines (80 loc) · 2.32 KB
/
name-tokens-api.routes.ts
File metadata and controls
86 lines (80 loc) · 2.32 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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
import { createRoute, z } from "@hono/zod-openapi";
import {
ErrorResponseSchema,
makeNameTokensResponseSchema,
makeNodeSchema,
nameTokensResponseOkExample,
} from "@ensnode/ensnode-sdk/internal";
import { params } from "@/lib/handlers/params.schema";
export const basePath = "/api/name-tokens";
/**
* Request Query Schema
*
* Name Tokens API can be requested by either `name` or `domainId`, and
* can never be requested by both, or neither.
*/
export const nameTokensQuerySchema = z
.object({
domainId: makeNodeSchema("request.domainId").optional().describe("Domain node hash identifier"),
name: params.name.optional().describe("ENS name to look up tokens for"),
})
.refine((data) => (data.domainId !== undefined) !== (data.name !== undefined), {
message: "Exactly one of 'domainId' or 'name' must be provided",
});
export type NameTokensQuery = z.output<typeof nameTokensQuerySchema>;
export const getNameTokensRoute = createRoute({
method: "get",
path: "/",
operationId: "getNameTokens",
tags: ["Explore"],
summary: "Get Name Tokens",
description: "Returns name tokens for the requested identifier (domainId or name)",
request: {
query: nameTokensQuerySchema,
},
responses: {
200: {
description: "Name tokens known",
content: {
"application/json": {
schema: makeNameTokensResponseSchema("Name Tokens Response", true).openapi({
example: nameTokensResponseOkExample,
}),
},
},
},
400: {
description: "Invalid input",
content: {
"application/json": {
schema: ErrorResponseSchema,
},
},
},
404: {
description: "Name tokens not indexed",
content: {
"application/json": {
schema: makeNameTokensResponseSchema("Name Tokens Response", true),
},
},
},
500: {
description: "Internal server error",
content: {
"application/json": {
schema: ErrorResponseSchema,
},
},
},
503: {
description:
"Service unavailable - Name Tokens API prerequisites not met (indexing status not ready or required plugins not activated)",
content: {
"application/json": {
schema: makeNameTokensResponseSchema("Name Tokens Response", true),
},
},
},
},
});