diff --git a/src/config.ts b/src/config.ts index 2a407e9..281d02a 100644 --- a/src/config.ts +++ b/src/config.ts @@ -1,4 +1,37 @@ // Configuration for the bot -export const config = { - verbose: process.argv.includes("-v") || process.argv.includes("--verbose"), -}; +export interface AppConfig { + verbose: boolean; + recordingsDir: string; + recordingSegmentMs: number; + decoderRotateMs: number; + decoderCooldownMs: number; +} + +export function parseBoolean( + value: string | undefined, + fallback: boolean, +): boolean { + if (value === "true") return true; + if (value === "false") return false; + return fallback; +} + +export function parsePositiveNumber( + value: string | undefined, + fallback: number, +): number { + const parsed = Number(value); + return Number.isFinite(parsed) && parsed > 0 ? parsed : fallback; +} + +export function loadConfig(env: NodeJS.ProcessEnv = process.env): AppConfig { + return { + verbose: parseBoolean(env.VERBOSE, false), + recordingsDir: env.RECORDINGS_DIR ?? "./recordings", + recordingSegmentMs: parsePositiveNumber(env.RECORDING_SEGMENT_MS, 5_000), + decoderRotateMs: parsePositiveNumber(env.DECODER_ROTATE_MS, 5_000), + decoderCooldownMs: 30_000, + }; +} + +export const config = loadConfig(); diff --git a/tests/config.test.ts b/tests/config.test.ts new file mode 100644 index 0000000..a6d7241 --- /dev/null +++ b/tests/config.test.ts @@ -0,0 +1,17 @@ +import { describe, expect, it } from "vitest"; +import { parseBoolean, parsePositiveNumber } from "../src/config"; + +describe("config parsers", () => { + it("parses boolean values", () => { + expect(parseBoolean("true", false)).toBe(true); + expect(parseBoolean("false", true)).toBe(false); + expect(parseBoolean(undefined, true)).toBe(true); + }); + + it("parses positive numbers", () => { + expect(parsePositiveNumber("5000", 0)).toBe(5000); + expect(parsePositiveNumber("0", 123)).toBe(123); + expect(parsePositiveNumber("bad", 123)).toBe(123); + expect(parsePositiveNumber(undefined, 123)).toBe(123); + }); +});