Files
Zoe 570531fe32 Implement kCTF strategy
This implementation is pretty scuffed, but its more exploratory than anything else.
2025-11-21 16:20:07 +00:00

48 lines
1.2 KiB
TypeScript

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<typeof Config>;
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);
}