import assert from "node:assert/strict"; import test from "node:test"; import { buildLocalMulticaCallbackUrl, buildManagedMulticaLoginUrl, parseMulticaLoginOutput } from "./multica-oauth.js"; const output = `Waiting for authentication...\nhttps://mul.example/login?cli_callback=http%3A%2F%2Flocalhost%3A43239%2Fcallback&cli_state=nonce`; test("parses Multica login output", () => { const parsed = parseMulticaLoginOutput(output); assert.equal(parsed.callbackUrl.port, "43239"); assert.equal(parsed.state, "nonce"); }); test("rewrites Multica login to the managed callback endpoint", () => { const loginUrl = new URL(buildManagedMulticaLoginUrl(output, "https://agent.example", "session-id")); assert.equal(loginUrl.searchParams.get("cli_callback"), "https://agent.example/api/integrations/multica/oauth/callback/session-id"); }); test("builds the local callback only when state matches", () => { assert.equal( buildLocalMulticaCallbackUrl(output, { token: "secret", state: "nonce" }), "http://localhost:43239/callback?token=secret&state=nonce", ); assert.throws(() => buildLocalMulticaCallbackUrl(output, { token: "secret", state: "wrong" }), /校验失败/); });