scripts/authorize-web-app.mjs
Rama main · réplica de lectura del repositorio original.
import { createLocalAgentClient } from "./local-agent-client.mjs";
import { readFile } from "node:fs/promises";
import { parseAutostartArgs, windowsAutostartPaths } from "./autostart-core.mjs";
import { configPathFromEnvironment, loadConfig, exposureOrigins } from "../packages/config/dist/index.js";
import { loadEnvironmentFile } from "../apps/agent/dist/environment-file.js";
async function main() {
const [id, ...options] = process.argv.slice(2);
if (!["vscodeWeb", "harness"].includes(id)) throw new Error("pnpm app:authorize <vscodeWeb|harness> [--config <path>] [--env-file <path>]");
if (!process.stdin.isTTY || !process.stdout.isTTY) throw new Error("Private sign-in URLs may only be displayed in an explicitly invoked interactive terminal.");
let args = options;
if (!args.length && process.platform === "win32") {
const manifest = JSON.parse(await readFile(windowsAutostartPaths().installation, "utf8"));
args = ["--config", manifest.configPath, ...(manifest.envFile ? ["--env-file", manifest.envFile] : [])];
}
const parsed = parseAutostartArgs(["install", ...args]);
if (parsed.envFile) await loadEnvironmentFile(parsed.envFile);
const config = await loadConfig(parsed.configPath ?? configPathFromEnvironment());
const request = await createLocalAgentClient(config), origin = exposureOrigins(config)[0];
const login = await request("/api/v1/auth/login", { method: "POST", headers: { origin, "content-type": "application/json" }, body: JSON.stringify({ token: process.env[config.auth.tokenEnv] }), signal: AbortSignal.timeout(5000) });
if (!login.ok) throw new Error("Local operator authentication failed.");
const cookie = login.headers.get("set-cookie")?.split(";")[0];
if (!cookie) throw new Error("Authenticated session unavailable.");
try {
const result = await request(`/api/v1/integrations/${id}/authorize`, { method: "POST", headers: { origin, cookie }, signal: AbortSignal.timeout(5000) });
if (!result.ok) throw new Error("Application is not ready for authorization.");
const { url } = await result.json();
console.log("Private upstream sign-in URL (open locally; do not share or save):\n" + url);
} finally {
await request("/api/v1/auth/logout", { method: "POST", headers: { origin, cookie }, signal: AbortSignal.timeout(3000) }).catch(() => undefined);
}
}
main().catch((error) => { console.error("[PalmTTY] " + error.message); process.exitCode = 1; });