File size: 1,044 Bytes
423c2fb
 
 
 
8ac85ba
423c2fb
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4a98d55
423c2fb
 
 
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
import { createServer } from "http";
import app, { bares, wispHandler } from "./app";
import { logger } from "./lib/logger";

const rawPort = process.env["PORT"] ?? "3000";
const port = Number(rawPort);
if (Number.isNaN(port) || port <= 0) throw new Error(`Invalid PORT: "${rawPort}"`);

const server = createServer((req, res) => {
  for (const bare of bares) {
    if (bare.shouldRoute(req)) { bare.routeRequest(req, res); return; }
  }
  app(req, res);
});

server.on("upgrade", (req, socket, head) => {
  const url = req.url ?? "";

  // Wisp protocol (optional — needs wisp-server-node installed)
  if (url.startsWith("/api/wisp") && wispHandler) {
    wispHandler(req, socket, head);
    return;
  }

  // Bare servers
  for (const bare of bares) {
    if (bare.shouldRoute(req)) { bare.routeUpgrade(req, socket, head); return; }
  }

  socket.end();
});

server.listen(port, '0.0.0.0', (err?: Error) => {
  if (err) { logger.error({ err }, "Error listening on port"); process.exit(1); }
  logger.info({ port }, "Server listening");
});