import { mkdir, copyFile, writeFile, readFile, cp } from "node:fs/promises"; import { createRequire } from "node:module"; import path from "node:path"; const require = createRequire(import.meta.url); const root = path.resolve(import.meta.dirname, ".."); const copies = { "@mercuryworkshop/scramjet": ["scramjet.js", "scramjet.wasm"], "@mercuryworkshop/scramjet-controller": ["controller.api.js", "controller.inject.js", "controller.sw.js"], "@mercuryworkshop/bare-transport": ["index.mjs"], }; for (const [name, files] of Object.entries(copies)) { const dist = path.dirname(require.resolve(name)); const folder = name.endsWith("scramjet-controller") ? "controller" : name.endsWith("bare-transport") ? "bare" : "scramjet"; const destination = path.join(root, "public", "vendor", folder); await mkdir(destination, { recursive: true }); for (const file of files) await copyFile(path.join(dist, file), path.join(destination, file)); if (folder === "bare") await copyFile(path.join(dist,"..","LICENSE"),path.join(destination,"LICENSE.txt")); } await cp(path.dirname(require.resolve("@mercuryworkshop/libcurl-transport")),path.join(root,"public","vendor","libcurl"),{recursive:true,force:true}); await writeFile(path.join(root, "public", "vendor", "README.txt"), "Unmodified upstream browser distributions.\nScramjet 2.0.67-alpha.2: https://github.com/MercuryWorkshop/scramjet (AGPL-3.0-only)\nController 0.0.14: https://github.com/MercuryWorkshop/scramjet\nBare transport 1.0.0: https://github.com/MercuryWorkshop/bare-transport\nExact versions, integrity hashes and source repositories are in package-lock.json.\n"); console.log("Prepared version-pinned proxy engine assets."); const diagnostics = `(() => { const report = parent.postMessage.bind(parent); addEventListener("error", event => report({relayDiagnostic: String(event.message || "A proxied script failed")}, "*")); addEventListener("unhandledrejection", event => report({relayDiagnostic: String(event.reason)}, "*")); })();\n`; await writeFile(path.join(root,"public","inject.js"),diagnostics+ await readFile(path.join(root,"public","vendor","controller","controller.inject.js"),"utf8")); const sources = ["README.md","UI_REVIEW.md","RENDER_INTEGRATION.md","THIRD_PARTY.md","VALIDATION.md","LICENSE","package.json","package-lock.json", "wrangler.jsonc","tsconfig.json","vitest.config.ts","launcher.html", "src/index.ts","src/render.ts","src/wisp.ts","src/relay-wake.ts","src/jimmy.ts","src/policy.ts","src/relay.ts","src/session.ts", "public/index.html","public/transport-lab.html","public/transport-diagnostics.js","public/transport-fixtures.js","public/style.css","public/personality.css","public/ui-refinement.css","public/navigation.css","public/app.js","public/body.js","public/hub.js","public/hub-model.js","public/sw.js","public/about.html", "scripts/prepare-assets.mjs","scripts/build-single.mjs","scripts/check-single.mjs","scripts/package-project.py","test/relay.test.ts","test/wisp.test.ts","test/relay-wake.test.ts","test/hub.test.ts","test/http-stream-timeout.test.ts","test/transport-diagnostics.test.ts","test/transport-fixtures.test.ts"]; const sourceDirectory=path.join(root,"public","source"); await mkdir(sourceDirectory,{recursive:true}); for(const file of sources){ const destination=path.join(sourceDirectory,file+".txt"); await mkdir(path.dirname(destination),{recursive:true}); await copyFile(path.join(root,file),destination); } await writeFile(path.join(sourceDirectory,"index.html"), 'Relay source

Relay source

AGPL-3.0-only. Secrets and generated dependency files are excluded.

Scramjet source (build c26bfc6)

'); await import("./build-single.mjs");