import { describe, expect, it } from "@effect/vitest"; import { apiBaseUrlForServerOrigin, getExecutorServerAuthorizationHeader, normalizeExecutorServerConnection, normalizeExecutorServerOrigin, originFromApiBaseUrl, parseExecutorLocalServerManifest, serializeExecutorLocalServerManifest,} from "./server-connection"; describe("Executor server connection", () => { it("normalizes server origins and API base URLs", () => { expect(normalizeExecutorServerOrigin("localhost:4788/")).toBe("http://localhost:4788"); expect(normalizeExecutorServerOrigin("http://localhost:4788/api")).toBe( "http://localhost:4788", ); expect(apiBaseUrlForServerOrigin("http://localhost:4788")).toBe("http://localhost:4788/api"); expect(originFromApiBaseUrl("http://localhost:4788/api")).toBe("http://localhost:4788"); }); it("builds a stable connection from an explicit server origin", () => { const connection = normalizeExecutorServerConnection({ origin: "https://executor.example", displayName: "Remote Executor", }); expect(connection).toMatchObject({ kind: "http", key: "http:https://executor.example", origin: "https://executor.example", apiBaseUrl: "https://executor.example/api", displayName: "Remote Executor", }); }); it("builds authorization headers from server auth", () => { expect( getExecutorServerAuthorizationHeader( normalizeExecutorServerConnection({ origin: "http://127.0.0.1:4789", auth: { kind: "basic", username: "executor", password: "secret", }, }), ), ).toBe("Basic ZXhlY3V0b3I6c2VjcmV0"); expect( getExecutorServerAuthorizationHeader( normalizeExecutorServerConnection({ origin: "https://executor.example", auth: { kind: "bearer", token: "remote-token", }, }), ), ).toBe("Bearer remote-token"); }); it("round-trips local server owner manifests", () => { const manifest = { version: 1 as const, kind: "desktop-sidecar" as const, pid: 1234, startedAt: "2026-05-28T00:00:00.000Z", dataDir: "/Users/rhys/.executor", scopeDir: "/Users/rhys/.executor", connection: normalizeExecutorServerConnection({ kind: "desktop-sidecar", key: "desktop-sidecar", origin: "http://127.0.0.1:4789", auth: { kind: "basic", username: "executor", password: "secret" }, }), owner: { client: "desktop" as const, version: "1.2.3", executablePath: "/Applications/Executor.app/Contents/MacOS/Executor", }, }; expect( parseExecutorLocalServerManifest(serializeExecutorLocalServerManifest(manifest)), ).toEqual(manifest); expect(parseExecutorLocalServerManifest("{")).toBeNull(); expect(parseExecutorLocalServerManifest(JSON.stringify({ ...manifest, pid: -1 }))).toBeNull(); });});
import { describe, expect, it } from "@effect/vitest";
import {
apiBaseUrlForServerOrigin,
getExecutorServerAuthorizationHeader,
normalizeExecutorServerConnection,
normalizeExecutorServerOrigin,
originFromApiBaseUrl,
parseExecutorLocalServerManifest,
serializeExecutorLocalServerManifest,
} from "./server-connection";
describe("Executor server connection", () => {
it("normalizes server origins and API base URLs", () => {
expect(normalizeExecutorServerOrigin("localhost:4788/")).toBe("http://localhost:4788");
expect(normalizeExecutorServerOrigin("http://localhost:4788/api")).toBe(
"http://localhost:4788",
);
expect(apiBaseUrlForServerOrigin("http://localhost:4788")).toBe("http://localhost:4788/api");
expect(originFromApiBaseUrl("http://localhost:4788/api")).toBe("http://localhost:4788");
});
it("builds a stable connection from an explicit server origin", () => {
const connection = normalizeExecutorServerConnection({
origin: "https://executor.example",
displayName: "Remote Executor",
});
expect(connection).toMatchObject({
kind: "http",
key: "http:https://executor.example",
origin: "https://executor.example",
apiBaseUrl: "https://executor.example/api",
displayName: "Remote Executor",
});
});
it("builds authorization headers from server auth", () => {
expect(
getExecutorServerAuthorizationHeader(
normalizeExecutorServerConnection({
origin: "http://127.0.0.1:4789",
auth: {
kind: "basic",
username: "executor",
password: "secret",
},
}),
),
).toBe("Basic ZXhlY3V0b3I6c2VjcmV0");
expect(
getExecutorServerAuthorizationHeader(
normalizeExecutorServerConnection({
origin: "https://executor.example",
auth: {
kind: "bearer",
token: "remote-token",
},
}),
),
).toBe("Bearer remote-token");
});
it("round-trips local server owner manifests", () => {
const manifest = {
version: 1 as const,
kind: "desktop-sidecar" as const,
pid: 1234,
startedAt: "2026-05-28T00:00:00.000Z",
dataDir: "/Users/rhys/.executor",
scopeDir: "/Users/rhys/.executor",
connection: normalizeExecutorServerConnection({
kind: "desktop-sidecar",
key: "desktop-sidecar",
origin: "http://127.0.0.1:4789",
auth: { kind: "basic", username: "executor", password: "secret" },
}),
owner: {
client: "desktop" as const,
version: "1.2.3",
executablePath: "/Applications/Executor.app/Contents/MacOS/Executor",
},
};
expect(
parseExecutorLocalServerManifest(serializeExecutorLocalServerManifest(manifest)),
).toEqual(manifest);
expect(parseExecutorLocalServerManifest("{")).toBeNull();
expect(parseExecutorLocalServerManifest(JSON.stringify({ ...manifest, pid: -1 }))).toBeNull();
});
});