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), }), }); export type Config = z.infer; export const Config = z.discriminatedUnion('strategy', [ LeadingZeroesSchema, TargetNumberSchema, ]); 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); }