-
Notifications
You must be signed in to change notification settings - Fork 368
/
server.ts
42 lines (34 loc) · 1.16 KB
/
server.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
import { initTRPC } from '@trpc/server';
import { createHTTPServer } from '@trpc/server/adapters/standalone';
import superjson from 'superjson';
import { z } from 'zod';
import { suspendRunner } from './runner/runner.js';
import { getLogger } from '@nangohq/utils/dist/logger.js';
const logger = getLogger('Jobs');
export const t = initTRPC.create({
transformer: superjson
});
const router = t.router;
const publicProcedure = t.procedure;
// TODO: add logging middleware
const appRouter = router({
health: healthProcedure(),
idle: idleProcedure()
});
export type AppRouter = typeof appRouter;
export const server = createHTTPServer({
router: appRouter
});
function healthProcedure() {
return publicProcedure.query(() => {
return { status: 'ok' };
});
}
function idleProcedure() {
return publicProcedure.input(z.object({ runnerId: z.string().nonempty(), idleTimeMs: z.number() })).mutation(async ({ input }) => {
const { runnerId, idleTimeMs } = input;
logger.info(`[IDLE]: runner '${runnerId}' has been idle for ${idleTimeMs}ms. Suspending...`);
await suspendRunner(runnerId);
return { status: 'ok' };
});
}