UNPKG

@kitten-science/kitten-analysts

Version:
40 lines 2.02 kB
import { readFile } from "node:fs/promises"; import { join } from "node:path"; import { redirectErrorsToStream } from "@oliversalzburg/js-utils/errors/stream.js"; import { JSDOM } from "jsdom"; import { decompressFromUTF16 } from "lz-string"; import { LOCAL_STORAGE_PATH } from "./globals.js"; const HOSTNAME_KG = process.env.HOSTNAME_KG ?? "localhost"; const PORT_HTTP_KG = process.env.PORT_HTTP_KG ? Number(process.env.PORT_HTTP_KG) : 8080; const main = async () => { const dom = await JSDOM.fromURL(`http://${HOSTNAME_KG}:${PORT_HTTP_KG}/headless.html`, { pretendToBeVisual: true, resources: "usable", runScripts: "dangerously", }); const ephemeralPath = join(LOCAL_STORAGE_PATH, "ka-internal-savestate.json"); try { const lsEntry = "com.nuclearunicorn.kittengame.savedata"; process.stderr.write(`Reading '${ephemeralPath}'...\n`); const value = await readFile(ephemeralPath, "utf-8"); process.stderr.write(`File contents: '${value.substring(0, 30).replaceAll("\n", "")}'\n`); const cloudSave = JSON.parse(value); process.stderr.write(`Cloud save is typeof: '${typeof cloudSave}'\n`); process.stderr.write(`Cloud save save data is typeof: '${typeof cloudSave.saveData}'\n`); const saveDataString = decompressFromUTF16(cloudSave.saveData); process.stderr.write(`Decompressed data string: '${saveDataString.substring(0, 30).replaceAll("\n", "")}'\n`); process.stderr.write(`Setting '${lsEntry}' to save game from '${ephemeralPath}'...\n`); dom.window.localStorage.setItem(lsEntry, saveDataString); } catch (_error) { process.stderr.write(`Unable to read save state from '${ephemeralPath}'.\n`); } process.stderr.write("Successfully initialized.\n"); }; for (const signal of ["SIGINT", "SIGTERM", "SIGQUIT"]) { process.on(signal, () => { process.exit(); }); } main().catch(redirectErrorsToStream(process.stderr)); //# sourceMappingURL=entrypoint-ui.js.map