-
Notifications
You must be signed in to change notification settings - Fork 16
Expand file tree
/
Copy pathensanalytics-api.routes.ts
More file actions
77 lines (70 loc) · 2.3 KB
/
ensanalytics-api.routes.ts
File metadata and controls
77 lines (70 loc) · 2.3 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
import { createRoute, z } from "@hono/zod-openapi";
import { REFERRERS_PER_LEADERBOARD_PAGE_MAX } from "@namehash/ens-referrals";
import { makeLowercaseAddressSchema } from "@ensnode/ensnode-sdk/internal";
export const basePath = "/ensanalytics";
// Pagination query parameters schema (mirrors ReferrerLeaderboardPageRequest)
const paginationQuerySchema = z.object({
page: z
.optional(z.coerce.number().int().min(1, "Page must be a positive integer"))
.openapi({ type: "integer", minimum: 1 })
.describe("Page number for pagination"),
recordsPerPage: z
.optional(
z.coerce
.number()
.int()
.min(1, "Records per page must be at least 1")
.max(
REFERRERS_PER_LEADERBOARD_PAGE_MAX,
`Records per page must not exceed ${REFERRERS_PER_LEADERBOARD_PAGE_MAX}`,
),
)
.openapi({ type: "integer", minimum: 1, maximum: REFERRERS_PER_LEADERBOARD_PAGE_MAX })
.describe("Number of referrers per page"),
});
// Referrer address parameter schema
const referrerAddressSchema = z.object({
referrer: makeLowercaseAddressSchema("Referrer address").describe("Referrer Ethereum address"),
});
export const getReferrerLeaderboardRoute = createRoute({
method: "get",
path: "/referrers",
operationId: "getReferrerLeaderboard",
tags: ["ENSAwards"],
summary: "Get Referrer Leaderboard",
description: "Returns a paginated page from the referrer leaderboard",
request: {
query: paginationQuerySchema,
},
responses: {
200: {
description: "Successfully retrieved referrer leaderboard page",
},
500: {
description: "Internal server error",
},
},
});
export const getReferrerDetailRoute = createRoute({
method: "get",
path: "/referrers/{referrer}",
operationId: "getReferrerDetail",
tags: ["ENSAwards"],
summary: "Get Referrer Detail",
description: "Returns detailed information for a specific referrer by address",
request: {
params: referrerAddressSchema,
},
responses: {
200: {
description: "Successfully retrieved referrer detail",
},
500: {
description: "Internal server error",
},
503: {
description: "Service unavailable - referrer leaderboard data not yet cached",
},
},
});
export const routes = [getReferrerLeaderboardRoute, getReferrerDetailRoute];