diff --git a/src/bundle/Server.ts b/src/bundle/Server.ts
index 520b7602..bcc567d7 100644
--- a/src/bundle/Server.ts
+++ b/src/bundle/Server.ts
@@ -41,41 +41,41 @@ const api = new Api.SpacebarServer({ server, port, production, app });
const cdn = new CDNServer({ server, port, production, app });
const gateway = new Gateway.Server({ server, port, production });
const webrtc = new Webrtc.Server({
- server: undefined,
- port: wrtcWsPort,
- production,
+ server: undefined,
+ port: wrtcWsPort,
+ production,
});
process.on("SIGTERM", async () => {
- console.log("Shutting down due to SIGTERM");
- await gateway.stop();
- await cdn.stop();
- await api.stop();
- await webrtc.stop();
- server.close();
+ console.log("Shutting down due to SIGTERM");
+ await gateway.stop();
+ await cdn.stop();
+ await api.stop();
+ await webrtc.stop();
+ server.close();
});
async function main() {
- await initDatabase();
- await Config.init();
+ await initDatabase();
+ await Config.init();
- const logRequests = process.env["LOG_REQUESTS"] != undefined;
- if (logRequests) {
- app.use(
- morgan("combined", {
- skip: (req, res) => {
- let skip = !(process.env["LOG_REQUESTS"]?.includes(res.statusCode.toString()) ?? false);
- if (process.env["LOG_REQUESTS"]?.charAt(0) == "-") skip = !skip;
- return skip;
- },
- }),
- );
- }
+ const logRequests = process.env["LOG_REQUESTS"] != undefined;
+ if (logRequests) {
+ app.use(
+ morgan("combined", {
+ skip: (req, res) => {
+ let skip = !(process.env["LOG_REQUESTS"]?.includes(res.statusCode.toString()) ?? false);
+ if (process.env["LOG_REQUESTS"]?.charAt(0) == "-") skip = !skip;
+ return skip;
+ },
+ }),
+ );
+ }
- await new Promise((resolve) => server.listen({ port }, () => resolve(undefined)));
- await Promise.all([api.start(), cdn.start(), gateway.start(), webrtc.start()]);
+ await new Promise((resolve) => server.listen({ port }, () => resolve(undefined)));
+ await Promise.all([api.start(), cdn.start(), gateway.start(), webrtc.start()]);
- console.log(`[Server] ${green(`Listening on port ${bold(port)}`)}`);
+ console.log(`[Server] ${green(`Listening on port ${bold(port)}`)}`);
}
main().catch(console.error);
diff --git a/src/bundle/start.ts b/src/bundle/start.ts
index 37c5b24c..af288f8e 100644
--- a/src/bundle/start.ts
+++ b/src/bundle/start.ts
@@ -36,85 +36,85 @@ import path from "path";
const cores = process.env.THREADS ? parseInt(process.env.THREADS) : 1;
function getRevInfoOrFail(): { rev: string | null; lastModified: number } {
- const rootDir = path.join(__dirname, "../../");
- // sanity check
- if (!fs.existsSync(path.join(rootDir, "package.json"))) {
- console.log(red("Error: Cannot find package.json in root directory. Are you running from the correct location?"));
- }
+ const rootDir = path.join(__dirname, "../../");
+ // sanity check
+ if (!fs.existsSync(path.join(rootDir, "package.json"))) {
+ console.log(red("Error: Cannot find package.json in root directory. Are you running from the correct location?"));
+ }
- // use .rev file if it exists
- if (fs.existsSync(path.join(__dirname, "../../.rev"))) {
- return JSON.parse(fs.readFileSync(path.join(rootDir, ".rev"), "utf-8"));
- }
+ // use .rev file if it exists
+ if (fs.existsSync(path.join(__dirname, "../../.rev"))) {
+ return JSON.parse(fs.readFileSync(path.join(rootDir, ".rev"), "utf-8"));
+ }
- // fall back to invoking git
- try {
- const rev = execSync(`git -C "${rootDir}" rev-parse HEAD`).toString().trim();
- const lastModified = Number(execSync(`git -C "${rootDir}" log -1 --format=%cd --date=unix`).toString().trim());
- return {
- rev,
- lastModified,
- };
- } catch (e) {
- return { rev: null, lastModified: 0 };
- }
+ // fall back to invoking git
+ try {
+ const rev = execSync(`git -C "${rootDir}" rev-parse HEAD`).toString().trim();
+ const lastModified = Number(execSync(`git -C "${rootDir}" log -1 --format=%cd --date=unix`).toString().trim());
+ return {
+ rev,
+ lastModified,
+ };
+ } catch (e) {
+ return { rev: null, lastModified: 0 };
+ }
}
if (cluster.isPrimary) {
- const revInfo = getRevInfoOrFail();
- Logo.printLogo().then(() => {
- const unformatted = `spacebar-server | !! Pre-release build !!`;
- const formatted = `${blueBright("spacebar-server")} | ${redBright("⚠️ Pre-release build ⚠️")}`;
- console.log(bold(centerString(unformatted, 86).replace(unformatted, formatted)));
+ const revInfo = getRevInfoOrFail();
+ Logo.printLogo().then(() => {
+ const unformatted = `spacebar-server | !! Pre-release build !!`;
+ const formatted = `${blueBright("spacebar-server")} | ${redBright("⚠️ Pre-release build ⚠️")}`;
+ console.log(bold(centerString(unformatted, 86).replace(unformatted, formatted)));
- const shortRev = revInfo.rev ? revInfo.rev.slice(0, 7) : "unknown";
- const unformattedRevisionHeader = `Commit Hash: ${revInfo.rev !== null ? `${revInfo.rev} (${shortRev})` : "Unknown"}`;
- const formattedRevisionHeader = `Commit Hash: ${revInfo.rev !== null ? `${cyan(revInfo.rev)} (${yellow(shortRev)})` : "Unknown"}`;
- console.log(bold(centerString(unformattedRevisionHeader, 86).replace(unformattedRevisionHeader, formattedRevisionHeader)));
+ const shortRev = revInfo.rev ? revInfo.rev.slice(0, 7) : "unknown";
+ const unformattedRevisionHeader = `Commit Hash: ${revInfo.rev !== null ? `${revInfo.rev} (${shortRev})` : "Unknown"}`;
+ const formattedRevisionHeader = `Commit Hash: ${revInfo.rev !== null ? `${cyan(revInfo.rev)} (${yellow(shortRev)})` : "Unknown"}`;
+ console.log(bold(centerString(unformattedRevisionHeader, 86).replace(unformattedRevisionHeader, formattedRevisionHeader)));
- const modifiedTime = new Date(revInfo.lastModified * 1000);
- const unformattedLastModified = `Last Updated: ${revInfo.lastModified !== 0 ? `${modifiedTime.toUTCString()}` : "Unknown"}`;
- const formattedLastModified = `Last Updated: ${revInfo.lastModified !== 0 ? `${cyan(modifiedTime.toUTCString())}` : "Unknown"}`;
- console.log(bold(centerString(unformattedLastModified, 86).replace(unformattedLastModified, formattedLastModified)));
+ const modifiedTime = new Date(revInfo.lastModified * 1000);
+ const unformattedLastModified = `Last Updated: ${revInfo.lastModified !== 0 ? `${modifiedTime.toUTCString()}` : "Unknown"}`;
+ const formattedLastModified = `Last Updated: ${revInfo.lastModified !== 0 ? `${cyan(modifiedTime.toUTCString())}` : "Unknown"}`;
+ console.log(bold(centerString(unformattedLastModified, 86).replace(unformattedLastModified, formattedLastModified)));
- if (revInfo.rev == null) {
- console.log(yellow(`Warning: Git is not installed or not in PATH, or the server is not running from a Git repository.`));
- }
+ if (revInfo.rev == null) {
+ console.log(yellow(`Warning: Git is not installed or not in PATH, or the server is not running from a Git repository.`));
+ }
- console.log(`Cores: ${cyan(os.cpus().length)} (Using ${cores} thread(s).)`);
- initStats();
+ console.log(`Cores: ${cyan(os.cpus().length)} (Using ${cores} thread(s).)`);
+ initStats();
- console.log(`[Process] Starting with ${cores} threads`);
+ console.log(`[Process] Starting with ${cores} threads`);
- if (cores === 1) {
- require("./Server");
- } else {
- process.env.EVENT_TRANSMISSION = "process";
+ if (cores === 1) {
+ require("./Server");
+ } else {
+ process.env.EVENT_TRANSMISSION = "process";
- // Fork workers.
- for (let i = 0; i < cores; i++) {
- // Delay each worker start if using sqlite database to prevent locking it
- const delay = process.env.DATABASE?.includes("://") ? 0 : i * 1000;
- setTimeout(() => {
- cluster.fork();
- console.log(`[Process] Worker ${cyan(i)} started.`);
- }, delay);
- }
+ // Fork workers.
+ for (let i = 0; i < cores; i++) {
+ // Delay each worker start if using sqlite database to prevent locking it
+ const delay = process.env.DATABASE?.includes("://") ? 0 : i * 1000;
+ setTimeout(() => {
+ cluster.fork();
+ console.log(`[Process] Worker ${cyan(i)} started.`);
+ }, delay);
+ }
- cluster.on("message", (sender: Worker, message) => {
- for (const id in cluster.workers) {
- const worker = cluster.workers[id];
- if (worker === sender || !worker) continue;
- worker.send(message);
- }
- });
+ cluster.on("message", (sender: Worker, message) => {
+ for (const id in cluster.workers) {
+ const worker = cluster.workers[id];
+ if (worker === sender || !worker) continue;
+ worker.send(message);
+ }
+ });
- cluster.on("exit", (worker) => {
- console.log(`[Worker] ${red(`PID ${worker.process.pid} died, restarting ...`)}`);
- cluster.fork();
- });
- }
- });
+ cluster.on("exit", (worker) => {
+ console.log(`[Worker] ${red(`PID ${worker.process.pid} died, restarting ...`)}`);
+ cluster.fork();
+ });
+ }
+ });
} else {
- require("./Server");
+ require("./Server");
}
diff --git a/src/bundle/stats.ts b/src/bundle/stats.ts
index dec5e2e3..d4ad8177 100644
--- a/src/bundle/stats.ts
+++ b/src/bundle/stats.ts
@@ -21,39 +21,39 @@ import { readFileSync } from "node:fs";
import { red } from "picocolors";
export function initStats() {
- console.log(`[Path] Running in ${process.cwd()}`);
- console.log(`[Path] Running from ${__dirname}`);
- try {
- console.log(`[CPU] ${os.cpus()[0].model} (x${os.cpus().length})`);
- } catch {
- console.log("[CPU] Failed to get CPU model!");
- }
+ console.log(`[Path] Running in ${process.cwd()}`);
+ console.log(`[Path] Running from ${__dirname}`);
+ try {
+ console.log(`[CPU] ${os.cpus()[0].model} (x${os.cpus().length})`);
+ } catch {
+ console.log("[CPU] Failed to get CPU model!");
+ }
- console.log(`[System] ${os.platform()} ${os.release()} ${os.arch()}`);
- if (os.platform() == "linux") {
- try {
- const osReleaseLines = readFileSync("/etc/os-release", "utf8").split("\n");
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
- //@ts-ignore
- const osRelease: { [key: string]: string } = {};
- for (const line of osReleaseLines) {
- if (!line) continue;
- const [key, value] = line.match(/(.*?)="?([^"]*)"?/)!.slice(1);
- osRelease[key] = value;
- }
- console.log(`[System]\x1b[${osRelease.ANSI_COLOR}m ${osRelease.NAME ?? "Unknown"} ${osRelease.VERSION ?? "Unknown"} (${osRelease.BUILD_ID ?? "No build ID"})\x1b[0m`);
- } catch (e) {
- console.log("[System] Unknown Linux distribution (missing /etc/os-release)");
- console.log(e);
- }
- }
- console.log(`[Process] Running with PID: ${process.pid}`);
- if (process.getuid && process.getuid() === 0) {
- console.warn(
- red(
- `[Process] Warning Spacebar is running as root, this highly discouraged and might expose your system vulnerable to attackers.` +
- `Please run Spacebar as a user without root privileges.`,
- ),
- );
- }
+ console.log(`[System] ${os.platform()} ${os.release()} ${os.arch()}`);
+ if (os.platform() == "linux") {
+ try {
+ const osReleaseLines = readFileSync("/etc/os-release", "utf8").split("\n");
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
+ //@ts-ignore
+ const osRelease: { [key: string]: string } = {};
+ for (const line of osReleaseLines) {
+ if (!line) continue;
+ const [key, value] = line.match(/(.*?)="?([^"]*)"?/)!.slice(1);
+ osRelease[key] = value;
+ }
+ console.log(`[System]\x1b[${osRelease.ANSI_COLOR}m ${osRelease.NAME ?? "Unknown"} ${osRelease.VERSION ?? "Unknown"} (${osRelease.BUILD_ID ?? "No build ID"})\x1b[0m`);
+ } catch (e) {
+ console.log("[System] Unknown Linux distribution (missing /etc/os-release)");
+ console.log(e);
+ }
+ }
+ console.log(`[Process] Running with PID: ${process.pid}`);
+ if (process.getuid && process.getuid() === 0) {
+ console.warn(
+ red(
+ `[Process] Warning Spacebar is running as root, this highly discouraged and might expose your system vulnerable to attackers.` +
+ `Please run Spacebar as a user without root privileges.`,
+ ),
+ );
+ }
}
|