import { EnvironmentId } from "@t3tools/contracts"; import { describe, expect, it } from "@effect/vitest"; import * as Schema from "effect/Schema"; import * as TokenStore from "../authorization/tokenStore.ts"; import { BearerConnectionCredential, BearerConnectionProfile, BearerConnectionRegistration, RelayConnectionRegistration, SshConnectionProfile, SshConnectionRegistration, } from "../connection/catalog.ts"; import { BearerConnectionTarget, RelayConnectionTarget, SshConnectionTarget, } from "../connection/model.ts"; import { ConnectionCatalogDocument, EMPTY_CONNECTION_CATALOG_DOCUMENT, putRemoteDpopTokenInCatalog, registerConnectionInCatalog, removeConnectionFromCatalog, } from "./storageDocument.ts"; const ENVIRONMENT_ID = EnvironmentId.make("environment-1"); const RELAY_TARGET = new RelayConnectionTarget({ environmentId: ENVIRONMENT_ID, label: "Remote", }); const BEARER_TARGET = new BearerConnectionTarget({ environmentId: ENVIRONMENT_ID, label: "Remote", connectionId: "bearer-1", }); const BEARER_PROFILE = new BearerConnectionProfile({ connectionId: BEARER_TARGET.connectionId, environmentId: ENVIRONMENT_ID, label: BEARER_TARGET.label, httpBaseUrl: "https://remote.example.test", wsBaseUrl: "wss://remote.example.test", }); const BEARER_CREDENTIAL = new BearerConnectionCredential({ token: "bearer-token", }); const REMOTE_TOKEN = new TokenStore.RemoteDpopAccessToken({ environmentId: ENVIRONMENT_ID, label: "Remote", endpoint: { httpBaseUrl: "https://remote.example.test", wsBaseUrl: "wss://remote.example.test", providerKind: "cloudflare_tunnel", }, accessToken: "dpop-token", expiresAtEpochMs: 1_000_000, dpopThumbprint: "thumbprint", }); describe("ConnectionCatalogDocument", () => { it.each([ { name: "legacy", accountId: undefined }, { name: "account-bound", accountId: "account-1" }, ])("round-trips a catalog containing a $name DPoP token", ({ accountId }) => { const token = new TokenStore.RemoteDpopAccessToken({ ...REMOTE_TOKEN, ...(accountId === undefined ? {} : { accountId }), }); const document = { ...EMPTY_CONNECTION_CATALOG_DOCUMENT, targets: [RELAY_TARGET], remoteDpopTokens: [token], }; const schema = Schema.fromJsonString(ConnectionCatalogDocument); const restored = Schema.decodeUnknownSync(schema)(Schema.encodeSync(schema)(document)); expect(restored).toEqual(document); expect(restored.remoteDpopTokens[0]?.accountId).toBe(accountId); }); it("registers a bearer connection as one catalog mutation", () => { const document = registerConnectionInCatalog( EMPTY_CONNECTION_CATALOG_DOCUMENT, new BearerConnectionRegistration({ target: BEARER_TARGET, profile: BEARER_PROFILE, credential: BEARER_CREDENTIAL, }), ); expect(document.targets).toEqual([BEARER_TARGET]); expect(document.profiles).toEqual([BEARER_PROFILE]); expect(document.credentials).toEqual([ { connectionId: BEARER_TARGET.connectionId, credential: BEARER_CREDENTIAL, }, ]); }); it("replaces obsolete connection metadata without discarding a reusable DPoP token", () => { const bearer = registerConnectionInCatalog( { ...EMPTY_CONNECTION_CATALOG_DOCUMENT, remoteDpopTokens: [REMOTE_TOKEN], }, new BearerConnectionRegistration({ target: BEARER_TARGET, profile: BEARER_PROFILE, credential: BEARER_CREDENTIAL, }), ); const relayTarget = new RelayConnectionTarget({ environmentId: ENVIRONMENT_ID, label: "Remote", }); const relay = registerConnectionInCatalog( bearer, new RelayConnectionRegistration({ target: relayTarget }), ); expect(relay.targets).toEqual([relayTarget]); expect(relay.profiles).toEqual([]); expect(relay.credentials).toEqual([]); expect(relay.remoteDpopTokens).toEqual([REMOTE_TOKEN]); }); it("removes every catalog record owned by an explicit disconnect", () => { const registered = registerConnectionInCatalog( { ...EMPTY_CONNECTION_CATALOG_DOCUMENT, remoteDpopTokens: [REMOTE_TOKEN], }, new BearerConnectionRegistration({ target: BEARER_TARGET, profile: BEARER_PROFILE, credential: BEARER_CREDENTIAL, }), ); expect(removeConnectionFromCatalog(registered, BEARER_TARGET)).toEqual( EMPTY_CONNECTION_CATALOG_DOCUMENT, ); }); it("stores a DPoP token for a registered relay environment", () => { const registered = registerConnectionInCatalog( EMPTY_CONNECTION_CATALOG_DOCUMENT, new RelayConnectionRegistration({ target: RELAY_TARGET }), ); expect(putRemoteDpopTokenInCatalog(registered, REMOTE_TOKEN)).toEqual({ ...registered, remoteDpopTokens: [REMOTE_TOKEN], }); }); it("ignores a late DPoP token after the environment is removed", () => { const registered = registerConnectionInCatalog( EMPTY_CONNECTION_CATALOG_DOCUMENT, new RelayConnectionRegistration({ target: RELAY_TARGET }), ); const removed = removeConnectionFromCatalog(registered, RELAY_TARGET); expect(putRemoteDpopTokenInCatalog(removed, REMOTE_TOKEN)).toEqual( EMPTY_CONNECTION_CATALOG_DOCUMENT, ); }); it("removes a DPoP token stored before the environment is removed", () => { const registered = registerConnectionInCatalog( EMPTY_CONNECTION_CATALOG_DOCUMENT, new RelayConnectionRegistration({ target: RELAY_TARGET }), ); const refreshed = putRemoteDpopTokenInCatalog(registered, REMOTE_TOKEN); expect(removeConnectionFromCatalog(refreshed, RELAY_TARGET)).toEqual( EMPTY_CONNECTION_CATALOG_DOCUMENT, ); }); it("does not store DPoP tokens for a different environment or connection kind", () => { const bearer = registerConnectionInCatalog( EMPTY_CONNECTION_CATALOG_DOCUMENT, new BearerConnectionRegistration({ target: BEARER_TARGET, profile: BEARER_PROFILE, credential: BEARER_CREDENTIAL, }), ); const otherRelay = registerConnectionInCatalog( EMPTY_CONNECTION_CATALOG_DOCUMENT, new RelayConnectionRegistration({ target: new RelayConnectionTarget({ environmentId: EnvironmentId.make("environment-2"), label: "Other relay", }), }), ); expect(putRemoteDpopTokenInCatalog(bearer, REMOTE_TOKEN)).toBe(bearer); expect(putRemoteDpopTokenInCatalog(otherRelay, REMOTE_TOKEN)).toBe(otherRelay); }); it("persists the normalized SSH profile beside its target", () => { const target = new SshConnectionTarget({ environmentId: ENVIRONMENT_ID, label: "SSH", connectionId: "ssh-1", }); const profile = new SshConnectionProfile({ connectionId: target.connectionId, environmentId: target.environmentId, label: target.label, target: { alias: "devbox", hostname: "devbox.example.test", username: "developer", port: 22, }, }); const document = registerConnectionInCatalog( EMPTY_CONNECTION_CATALOG_DOCUMENT, new SshConnectionRegistration({ target, profile }), ); expect(document.targets).toEqual([target]); expect(document.profiles).toEqual([profile]); expect(document.credentials).toEqual([]); }); });