File size: 1,716 Bytes
561e6f0
f6678ab
 
 
561e6f0
 
 
34f4083
561e6f0
34f4083
 
561e6f0
34f4083
561e6f0
 
 
b3d2294
 
 
 
 
 
 
f6678ab
561e6f0
d2072ce
561e6f0
e371833
ded4123
561e6f0
 
e371833
 
561e6f0
e371833
 
 
 
 
 
 
 
 
561e6f0
e371833
 
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
import "dotenv/config";
import { isHfStorageEnabled, getDatasetId, flushAll } from "./hf-storage.js";
import { isOAuthEnabled } from "./auth.js";
import { createApp } from "./create-app.js";

const PORT = parseInt(process.env.PORT || "8080", 10);

if (isHfStorageEnabled()) {
  console.log("[server] HF Dataset persistence enabled");
} else if (getDatasetId()) {
  console.log("[server] HF Dataset ID ready, waiting for first user login to activate persistence");
} else {
  console.log("[server] HF Dataset persistence disabled (no SPACE_ID or HF_DATASET_ID)");
  console.log("[server] falling back to local file persistence");
}

const oauthEnabled = isOAuthEnabled();
if (oauthEnabled) {
  console.log("[server] HF OAuth enabled (SPACE_ID set)");
} else {
  console.log("[server] HF OAuth disabled (no SPACE_ID), all users can edit");
}

const { httpServer } = createApp();

const server = httpServer.listen(PORT, async () => {
  console.log(`[server] running on http://localhost:${PORT}`);
  console.log(`[server] collab websocket at ws://localhost:${PORT}/collab`);
  console.log(`[server] SPACE_ID=${process.env.SPACE_ID || "(not set)"} HF_DATASET_ID=${getDatasetId() || "(empty)"} HF_TOKEN=${process.env.HF_TOKEN ? "set" : "not set"}`);
});

async function gracefulShutdown(signal: string) {
  console.log(`[server] ${signal} received, flushing to HF...`);
  await flushAll();
  await new Promise<void>((resolve) => {
    server.close(() => resolve());
    setTimeout(() => {
      console.warn("[server] force-closing after timeout");
      resolve();
    }, 5000);
  });
  process.exit(0);
}

process.on("SIGTERM", () => gracefulShutdown("SIGTERM"));
process.on("SIGINT", () => gracefulShutdown("SIGINT"));