SPB Git forge

spb/spb-cloud

Public
10commits 1branches 0releases
3.2 MBsize
maindefault branch
1 h agolast push
JavaScript 56.7% TypeScript 42.6%
2.0 KB · 52 lines typescript
Raw Blame History
1import { createServer } from "http";2import next from "next";3import { handleWebDAV } from "./lib/webdav";4import { createDailySnapshotIfNeeded } from "./lib/snapshot";5import { purgeExpiredTrash, cleanupOrphanChunks } from "./lib/trash";67const dev = process.env.NODE_ENV !== "production";8const port = parseInt(process.env.PORT || "5001", 10);910const app = next({ dev });11const handle = app.getRequestHandler();1213app.prepare().then(() => {14  createServer(async (req, res) => {15    const parsedUrl = new URL(req.url!, `http://${req.headers.host || "localhost"}`);1617    if (parsedUrl.pathname?.startsWith("/dav")) {18      await handleWebDAV(req, res);19    } else {20      await handle(req, res);21    }22  }).listen(port, () => {23    console.log(`> SPB Cloud ready on http://localhost:${port}`);24    console.log(`> WebDAV endpoint: http://localhost:${port}/dav`);25    console.log(`> WebDAV public:   https://cloud.spboucher.ai/dav`);2627    // Daily snapshot: attempt immediately on startup, then check every hour28    const runSnapshot = () => {29      createDailySnapshotIfNeeded()30        .then((created) => { if (created) console.log("> [Snapshot] Snapshot quotidien créé"); })31        .catch((err) => console.error("> [Snapshot] Erreur:", err));32    };33    // Entretien horaire : purge de la corbeille (> 30 jours) + chunks d'upload orphelins34    const runMaintenance = () => {35      purgeExpiredTrash().then((n) => { if (n) console.log(`> [Corbeille] ${n} fichier(s) purgé(s) (> 30 j)`); }).catch((err) => console.error("> [Corbeille] Erreur:", err));36      cleanupOrphanChunks().catch((err) => console.error("> [Upload] Nettoyage chunks:", err));37    };38    setTimeout(runMaintenance, 60 * 1000);39    setInterval(runMaintenance, 60 * 60 * 1000);4041    if (process.env.SNAPSHOT_DISABLED === "1") {42      console.log("> [Snapshot] désactivé (SNAPSHOT_DISABLED=1)");43    } else {44      runSnapshot();45      setInterval(runSnapshot, 60 * 60 * 1000); // re-check every hour46    }47  });48}).catch((err) => {49  console.error("Failed to start server:", err);50  process.exit(1);51});52