/
postgres-frontend.ts
64 lines (53 loc) · 1.55 KB
/
postgres-frontend.ts
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
#!/usr/bin/env node
import "dotenv/config";
import { z } from "zod";
import Koa from "koa";
import cors from "@koa/cors";
import Router from "@koa/router";
import { createKoaMiddleware } from "trpc-koa-adapter";
import { createAppRouter } from "@latticexyz/store-sync/trpc-indexer";
import { drizzle } from "drizzle-orm/postgres-js";
import postgres from "postgres";
import { frontendEnvSchema, parseEnv } from "./parseEnv";
import { createQueryAdapter } from "../src/postgres/deprecated/createQueryAdapter";
import { apiRoutes } from "../src/postgres/apiRoutes";
import { registerSentryMiddlewares } from "../src/sentry";
const env = parseEnv(
z.intersection(
frontendEnvSchema,
z.object({
DATABASE_URL: z.string(),
})
)
);
const database = postgres(env.DATABASE_URL);
const server = new Koa();
if (process.env.SENTRY_DSN) {
registerSentryMiddlewares(server);
}
server.use(cors());
server.use(apiRoutes(database));
const router = new Router();
router.get("/", (ctx) => {
ctx.body = "emit HelloWorld();";
});
// k8s healthchecks
router.get("/healthz", (ctx) => {
ctx.status = 200;
});
router.get("/readyz", (ctx) => {
ctx.status = 200;
});
server.use(router.routes());
server.use(router.allowedMethods());
server.use(
createKoaMiddleware({
prefix: "/trpc",
router: createAppRouter(),
createContext: async () => ({
queryAdapter: await createQueryAdapter(drizzle(database)),
}),
})
);
server.listen({ host: env.HOST, port: env.PORT });
console.log(`postgres indexer frontend listening on http://${env.HOST}:${env.PORT}`);