1import { existsSync, rmSync, writeFileSync } from "node:fs";
2import http from "node:http";
3
4const machineId = process.env.FLY_MACHINE_ID;
5const token = process.env[process.env.READINESS_CONTROL_SECRET];
6if (!machineId || !token) throw new Error("Missing readiness control identity");
7
8writeFileSync("/tmp/ready", "ready");
9http
10 .createServer((request, response) => {
11 response.setHeader("content-type", "application/json");
12 response.setHeader("cache-control", "no-store");
13 if (request.method === "GET" && request.url === "/ready") {
14 const ready = existsSync("/tmp/ready");
15 response.writeHead(ready ? 200 : 503);
16 response.end(JSON.stringify({ machineId, ready }));
17 return;
18 }
19 if (request.method === "POST" && request.url === "/readiness/off") {
20 if (request.headers.authorization !== `Bearer ${token}`) {
21 response.writeHead(401).end();
22 return;
23 }
24 if (request.headers["x-readiness-machine-id"] !== machineId) {
25 response.writeHead(409).end();
26 return;
27 }
28 try {
29 rmSync("/tmp/ready", { force: true });
30 response.end(JSON.stringify({ machineId, ready: false }));
31 } catch {
32 response.writeHead(500).end();
33 }
34 return;
35 }
36 response.writeHead(404).end();
37 })
38 .listen(3000, "::");