112 lines · 3.5 KB · TypeScript
RawDownload
import { describe, expect, it } from "vite-plus/test"; import {  RemoteBackendUrlInvalidError,  RemoteBackendUrlMissingError,  RemotePairingTokenMissingError,  RemotePairingUrlInvalidError,  resolveRemotePairingTarget,} from "./remote.ts"; describe("remote", () => {  it("derives backend urls and token from a pairing url", () => {    expect(      resolveRemotePairingTarget({        pairingUrl: "https://remote.example.com/pair#token=pairing-token",      }),    ).toEqual({      credential: "pairing-token",      httpBaseUrl: "https://remote.example.com/",      wsBaseUrl: "wss://remote.example.com/",    });  });   it("accepts pairing urls that still use a query token", () => {    expect(      resolveRemotePairingTarget({        pairingUrl: "https://remote.example.com/pair?token=pairing-token",      }),    ).toEqual({      credential: "pairing-token",      httpBaseUrl: "https://remote.example.com/",      wsBaseUrl: "wss://remote.example.com/",    });  });   it("derives backend urls from hosted app pairing links", () => {    expect(      resolveRemotePairingTarget({        pairingUrl:          "https://app.t3.codes/pair?host=https%3A%2F%2Fdesktop.tailnet.ts.net%3A44342%2F#token=pairing-token",      }),    ).toEqual({      credential: "pairing-token",      httpBaseUrl: "https://desktop.tailnet.ts.net:44342/",      wsBaseUrl: "wss://desktop.tailnet.ts.net:44342/",    });  });   it("derives backend urls from a host and pairing code", () => {    expect(      resolveRemotePairingTarget({        host: "https://remote.example.com",        pairingCode: "pairing-token",      }),    ).toEqual({      credential: "pairing-token",      httpBaseUrl: "https://remote.example.com/",      wsBaseUrl: "wss://remote.example.com/",    });  });   it("preserves host ports when normalizing a bare host input", () => {    expect(      resolveRemotePairingTarget({        host: "myserver.com:3000",        pairingCode: "pairing-token",      }),    ).toEqual({      credential: "pairing-token",      httpBaseUrl: "https://myserver.com:3000/",      wsBaseUrl: "wss://myserver.com:3000/",    });  });   it("uses distinct structural errors for missing pairing inputs", () => {    expect(() => resolveRemotePairingTarget({})).toThrowError(RemoteBackendUrlMissingError);    expect(() =>      resolveRemotePairingTarget({ pairingUrl: "https://remote.example.com/pair" }),    ).toThrowError(RemotePairingTokenMissingError);    expect(() =>      resolveRemotePairingTarget({        host: "https://user:secret@remote.example.com/path?token=sensitive#fragment",      }),    ).toThrowError(      expect.objectContaining({        _tag: "RemotePairingCodeMissingError",        host: "remote.example.com",      }),    );  });   it("preserves URL parsing causes with their input source", () => {    let pairingUrlError: unknown;    try {      resolveRemotePairingTarget({ pairingUrl: "not a url" });    } catch (cause) {      pairingUrlError = cause;    }    expect(pairingUrlError).toBeInstanceOf(RemotePairingUrlInvalidError);    expect((pairingUrlError as RemotePairingUrlInvalidError).cause).toBeInstanceOf(TypeError);     let hostError: unknown;    try {      resolveRemotePairingTarget({ host: "https://[invalid", pairingCode: "pairing-token" });    } catch (cause) {      hostError = cause;    }    expect(hostError).toBeInstanceOf(RemoteBackendUrlInvalidError);    expect(hostError).toMatchObject({ source: "direct-host" });    expect((hostError as RemoteBackendUrlInvalidError).cause).toBeInstanceOf(TypeError);  });});