This repository has been archived on 2026-03-19. You can view files and clone it, but cannot push or open issues or pull requests.
Files
galvanic-corrosion/src/config.ts
zombieb 3b6d905180 Still figuring out initial matchmaking hang (FROSTBITE). Lots of other changes.
- Added missing room images
- Removed internal rooms and disallow cloning some rooms
- License fixes
- Switched target to 20200306
- Socket header fixes
- Sockets are closed upon shutdown
    * Sockets persist after being destroyed, fix
- Config changes for 20200306
- Settings initialized
- Name generation words cannot be longer than 9 characters
- Dorm generation changes and fixes
- Added some settings keys
- Matchmaking additions
    * Instances are not yet updated to be or not to be in-progress
- Instance fixes and logging
- Image operation fixes
- DisplayName route start
- Challenge route start
- Default Amplitude key (i can see althe Amplitude requests are ignored
- Rate limiting ease
- GameConfigs properly queried and sent
- Many 'bulk' endpoints were added in or around 20200306
- Objective routes started
- DormRoom redirection in v2/name
- Client doesn't care if it gets 200 when setting prefs
- Balance/storefronts started
- Matchmaking goto/room timer and fixes
- Selfhosted Photon addition on the client sends matchmaking /photonregionpings, ignore since Photon is only one server in one region
2025-04-13 01:06:23 -04:00

159 lines
4.0 KiB
TypeScript

/* Galvanic Corrosion - Rec Room custom server for communities.
<https://gitea.proxnet.dev/zombieb/galvanic-corrosion>
Copyright (C) 2025 @zombieb (Discord / proxnet Gitea)
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published
by the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
import Logging from "@proxnet/undead-logging";
import * as fs from "node:fs";
import { PhotonRegionCodeNumber, PhotonRegionCodeString } from "./data/live/types.ts";
const log = new Logging("Config");
type RedisConfiguration = {
host: string;
port: number;
username: string;
password: string;
db: number;
};
type WebConfiguration = {
port: number;
host: string;
publichost: string;
securepublichost: boolean;
}
type WebRootConfiguration = {
api: WebConfiguration,
socket: WebConfiguration
};
type PublicConfiguration = {
serverName: string;
serverId: string;
owner: string;
motd: string;
levelScale: number;
maxLevels: number;
patches: string[];
photonRegionId: PhotonRegionCodeString | PhotonRegionCodeNumber;
};
type LoggingConfiguration = {
notfound: boolean;
debug: boolean;
network: boolean;
};
type DiscordConfiguration = {
token: string;
clientId: string;
guildId: string;
};
type AuthConfiguration = {
secret: string;
/**
* In Hours
*/
timeout: number;
};
export type GalvanicConfiguration = {
redis: RedisConfiguration;
web: WebRootConfiguration;
public: PublicConfiguration;
logging: LoggingConfiguration;
discord: DiscordConfiguration | null;
auth: AuthConfiguration;
};
export const defaultConfig: GalvanicConfiguration = {
redis: {
host: "127.0.0.1",
port: 6379,
username: "",
password: "",
db: 0,
},
web: {
api: {
port: 13370,
host: "127.0.0.1",
publichost: "127.0.0.1:13370",
securepublichost: false,
},
socket: {
port: 13371,
host: "127.0.0.1",
publichost: "127.0.0.1:13371",
securepublichost: false,
}
},
public: {
serverName: "Galvanic Corrosion",
serverId: "galvanic-corrosion-default",
owner: "John Doe",
motd: "A Galvanic Corrosion server.",
levelScale: 1,
maxLevels: 30,
patches: [],
photonRegionId: PhotonRegionCodeNumber.us,
},
logging: {
notfound: false,
debug: false,
network: false,
},
discord: null,
auth: {
secret: "CHANGE-ME-PLEASE",
timeout: 3,
},
};
/** The current configuration. Read and parsed only during startup. */
let config: GalvanicConfiguration;
try {
if (!configurationExists()) generateDefaultConfig();
config = JSON.parse(fs.readFileSync("./config.json").toString());
} catch (err) {
log.e(`Could not get config: ${err}`);
Deno.exit(1);
}
/** Does the configuration file exist on the disk? */
export function configurationExists() {
return fs.existsSync("./config.json");
}
/** Place [or overwrite] the [existing] default configuration in the current directory */
export function generateDefaultConfig() {
fs.writeFileSync(
"./config.json",
JSON.stringify(defaultConfig, undefined, " "),
);
}
/** Get current server configuration */
export function getConfig() {
return config;
}
export const devMode = Deno.args.includes("--dev");
export * as Config from "./config.ts";