import { readFileSync } from 'fs'; import { load } from 'js-toml'; import z from 'zod'; import { ChallengeStrategy } from "@impost/lib"; // const LeadingZeroesSchema = z.object({ // strategy: z.literal(ChallengeStrategy.LeadingZeroes), // leading_zeroes: z.object({ // difficulty: z.number().int().min(1).max(64), // }), // }); // const TargetNumberSchema = z.object({ // strategy: z.literal(ChallengeStrategy.TargetNumber), // target_number: z.object({ // max_number: z.number().int().min(1).max(100_000), // }), // }); const kCTFSchema = z.object({ strategy: z.literal(ChallengeStrategy.kCTF), kctf: z.object({ difficulty: z.number().int().min(1), }), }); export type Config = z.infer; export const Config = z.discriminatedUnion('strategy', [ kCTFSchema, ]); export let config: Config; try { config = Config.parse(load(readFileSync('./config.toml', 'utf-8'))); } catch (error: any) { if (error instanceof z.ZodError) { console.error("Failed to parse config:"); for (const issue of error.issues) { console.error(issue.message, issue.path); } } else { console.error("Failed to parse config:", error); } process.exit(1); }