59 lines
1.6 KiB
TypeScript
59 lines
1.6 KiB
TypeScript
import { file } from "bun";
|
|
import { join, resolve } from "path";
|
|
|
|
export interface YtdlpConfig {
|
|
enabled: boolean;
|
|
command: string;
|
|
ffmpegCommand: string;
|
|
updateCommand: string | null;
|
|
fastQueueConcurrent: number;
|
|
slowQueueInterval: number;
|
|
allowPlaylists: boolean;
|
|
autoUpdate: boolean;
|
|
updateCheckInterval: number;
|
|
}
|
|
|
|
export interface Config {
|
|
port: number;
|
|
musicDir: string;
|
|
allowGuests: boolean;
|
|
defaultPermissions: string[];
|
|
ytdlp?: YtdlpConfig;
|
|
}
|
|
|
|
const CONFIG_PATH = join(import.meta.dir, "config.json");
|
|
|
|
export const DEFAULT_CONFIG: Config = {
|
|
port: 3001,
|
|
musicDir: "./music",
|
|
allowGuests: true,
|
|
defaultPermissions: ["listen", "control"],
|
|
ytdlp: {
|
|
enabled: false,
|
|
command: "yt-dlp",
|
|
ffmpegCommand: "ffmpeg",
|
|
updateCommand: "yt-dlp -U",
|
|
fastQueueConcurrent: 2,
|
|
slowQueueInterval: 180,
|
|
allowPlaylists: true,
|
|
autoUpdate: true,
|
|
updateCheckInterval: 86400
|
|
}
|
|
};
|
|
|
|
// Create default config if missing
|
|
const configFile = file(CONFIG_PATH);
|
|
if (!(await configFile.exists())) {
|
|
console.log("[Config] Creating default config.json...");
|
|
await Bun.write(CONFIG_PATH, JSON.stringify(DEFAULT_CONFIG, null, 2));
|
|
console.log("Config created at config.json. Have a look at it then restart the server. Bye!");
|
|
process.exit();
|
|
}
|
|
|
|
export const config: Config = await configFile.json();
|
|
|
|
export const MUSIC_DIR = resolve(import.meta.dir, config.musicDir);
|
|
export const PUBLIC_DIR = join(import.meta.dir, "public");
|
|
|
|
console.log(`Config loaded: port=${config.port}, musicDir=${MUSIC_DIR}, allowGuests=${config.allowGuests}`);
|