import solve from "./solve"; import { getPasswordFor, savePassword } from "./util"; async function main() { let prevPassword = "natas0"; for (let i = 0; ; i++) { console.log(`Solving level ${i}`); const savedPassword = await getPasswordFor(i); if (savedPassword) { console.log("saved"); prevPassword = savedPassword; continue; } const user = `natas${i}`; const fetchReplacement = async (url: string, init?: RequestInit) => { const newUrl = new URL( url, `http://natas${i}.natas.labs.overthewire.org/` ); const headers = new Headers(init?.headers); const authorization = btoa(`${user}:${prevPassword}`); headers.set("Authorization", `Basic ${authorization}`); const newInit = { ...init, headers }; console.log(newUrl, user, prevPassword, newInit); return await fetch(newUrl, newInit); }; const solveFn = solve[i]; if (!solveFn) throw new Error(`No solution for natas${i} yet.`); try { const password = await solveFn({ username: user, prevPassword, fetch: fetchReplacement, }); if (typeof password !== "string") throw new Error("non-string output"); prevPassword = password; savePassword(i, password); } catch (e) { console.log("sad"); console.trace(e); break; } } } main();