import { describe, expect, it } from "vitest"; import { resolveDesktopServerExposure, resolveLanAdvertisedHost } from "./serverExposure.ts"; describe("resolveLanAdvertisedHost", () => { it("prefers an explicit host override", () => { expect( resolveLanAdvertisedHost( { en0: [ { address: "192.168.1.44", family: "IPv4", internal: false, netmask: "255.255.255.0", cidr: "192.168.1.44/24", mac: "00:00:00:00:00:00", }, ], }, "10.0.0.9", ), ).toBe("10.0.0.9"); }); it("returns the first usable non-internal IPv4 address", () => { expect( resolveLanAdvertisedHost( { lo0: [ { address: "127.0.0.1", family: "IPv4", internal: true, netmask: "255.0.0.0", cidr: "127.0.0.1/8", mac: "00:00:00:00:00:00", }, ], en0: [ { address: "192.168.1.44", family: "IPv4", internal: false, netmask: "255.255.255.0", cidr: "192.168.1.44/24", mac: "00:00:00:00:00:00", }, ], }, undefined, ), ).toBe("192.168.1.44"); }); it("returns null when no usable network address is available", () => { expect( resolveLanAdvertisedHost( { lo0: [ { address: "127.0.0.1", family: "IPv4", internal: true, netmask: "255.0.0.0", cidr: "127.0.0.1/8", mac: "00:00:00:00:00:00", }, ], }, undefined, ), ).toBeNull(); }); }); describe("resolveDesktopServerExposure", () => { it("keeps the desktop server loopback-only when local-only mode is selected", () => { expect( resolveDesktopServerExposure({ mode: "local-only", port: 3773, networkInterfaces: {}, }), ).toEqual({ mode: "local-only", bindHost: "127.0.0.1", localHttpUrl: "http://127.0.0.1:3773", localWsUrl: "ws://127.0.0.1:3773", endpointUrl: null, advertisedHost: null, }); }); it("binds to all interfaces in network-accessible mode", () => { expect( resolveDesktopServerExposure({ mode: "network-accessible", port: 3773, networkInterfaces: { en0: [ { address: "192.168.1.44", family: "IPv4", internal: false, netmask: "255.255.255.0", cidr: "192.168.1.44/24", mac: "00:00:00:00:00:00", }, ], }, }), ).toEqual({ mode: "network-accessible", bindHost: "0.0.0.0", localHttpUrl: "http://127.0.0.1:3773", localWsUrl: "ws://127.0.0.1:3773", endpointUrl: "http://192.168.1.44:3773", advertisedHost: "192.168.1.44", }); }); it("stays network-accessible even when no LAN address is currently detectable", () => { expect( resolveDesktopServerExposure({ mode: "network-accessible", port: 3773, networkInterfaces: {}, }), ).toEqual({ mode: "network-accessible", bindHost: "0.0.0.0", localHttpUrl: "http://127.0.0.1:3773", localWsUrl: "ws://127.0.0.1:3773", endpointUrl: null, advertisedHost: null, }); }); });