import { AuthStandardClientScopes, EnvironmentId } from "@t3tools/contracts";import { describe, expect, it } from "@effect/vitest";import * as Effect from "effect/Effect";import * as Layer from "effect/Layer";import * as Option from "effect/Option"; import { remoteHttpClientLayer } from "../rpc/http.ts";import { ClientPresentation, SshEnvironmentGateway } from "../platform/capabilities.ts";import { BearerConnectionCredential, BearerConnectionProfile } from "./catalog.ts";import { BearerConnectionTarget } from "./model.ts";import { prepareBearerConnectionUpdate, preparePairingRegistration, prepareSshRegistration,} from "./onboarding.ts"; const CLIENT_PRESENTATION_LAYER = Layer.succeed( ClientPresentation, ClientPresentation.of({ metadata: { label: "T3 Code Test", deviceType: "desktop", os: "Test OS", }, scopes: AuthStandardClientScopes, }),); function pairingHttpLayer( calls: Array<{ readonly url: string; readonly init: RequestInit }>, options?: { readonly failDescriptor?: boolean },) { const fetchFn = ((input, init = {}) => { const url = String(input); calls.push({ url, init }); if (url.endsWith("/.well-known/t3/environment")) { if (options?.failDescriptor === true) { return Promise.resolve( Response.json({ message: "descriptor unavailable" }, { status: 503 }), ); } return Promise.resolve( Response.json({ environmentId: "environment-paired", label: "Paired environment", platform: { os: "linux", arch: "x64", }, serverVersion: "0.0.0-test", capabilities: { repositoryIdentity: true, }, }), ); } if (url.endsWith("/oauth/token")) { return Promise.resolve( Response.json({ access_token: "bearer-token", issued_token_type: "urn:ietf:params:oauth:token-type:access_token", token_type: "Bearer", expires_in: 3600, scope: AuthStandardClientScopes.join(" "), }), ); } return Promise.reject(new Error(`Unexpected request: ${url}`)); }) satisfies typeof fetch; return remoteHttpClientLayer(fetchFn);} describe("connection onboarding", () => { it.effect("prepares a persisted bearer registration from pairing details", () => Effect.gen(function* () { const calls: Array<{ readonly url: string; readonly init: RequestInit }> = []; const registration = yield* preparePairingRegistration({ host: "remote.example.test", pairingCode: "pairing-token", }).pipe(Effect.provide(Layer.mergeAll(CLIENT_PRESENTATION_LAYER, pairingHttpLayer(calls)))); expect(registration).toMatchObject({ _tag: "BearerConnectionRegistration", target: { environmentId: "environment-paired", label: "Paired environment", connectionId: "bearer:environment-paired", }, profile: { environmentId: "environment-paired", label: "Paired environment", connectionId: "bearer:environment-paired", httpBaseUrl: "https://remote.example.test/", wsBaseUrl: "wss://remote.example.test/", }, credential: { token: "bearer-token", }, }); expect(calls.map((call) => call.url)).toEqual([ "https://remote.example.test/.well-known/t3/environment", "https://remote.example.test/oauth/token", ]); const tokenRequest = calls.find((call) => call.url.endsWith("/oauth/token")); const tokenBody = tokenRequest?.init.body instanceof Uint8Array ? new TextDecoder().decode(tokenRequest.init.body) : String(tokenRequest?.init.body); const tokenParams = new URLSearchParams(tokenBody); expect(tokenParams.get("subject_token")).toBe("pairing-token"); expect(tokenParams.get("scope")).toBe(AuthStandardClientScopes.join(" ")); expect(tokenParams.get("client_label")).toBe("T3 Code Test"); }), ); it.effect("does not consume a pairing credential when descriptor discovery fails", () => Effect.gen(function* () { const calls: Array<{ readonly url: string; readonly init: RequestInit }> = []; yield* preparePairingRegistration({ host: "remote.example.test", pairingCode: "pairing-token", }).pipe( Effect.provide( Layer.mergeAll( CLIENT_PRESENTATION_LAYER, pairingHttpLayer(calls, { failDescriptor: true }), ), ), Effect.flip, ); expect(calls.map((call) => call.url)).toEqual([ "https://remote.example.test/.well-known/t3/environment", ]); }), ); it.effect("rejects invalid pairing details before making a request", () => Effect.gen(function* () { const calls: Array<{ readonly url: string; readonly init: RequestInit }> = []; const error = yield* preparePairingRegistration({ host: "", pairingCode: "", }).pipe( Effect.provide(Layer.mergeAll(CLIENT_PRESENTATION_LAYER, pairingHttpLayer(calls))), Effect.flip, ); expect(error).toMatchObject({ _tag: "ConnectionBlockedError", reason: "configuration", message: "Enter a backend URL.", }); expect(calls).toEqual([]); }), ); it.effect("updates bearer metadata while preserving the credential and identity", () => Effect.gen(function* () { const environmentId = EnvironmentId.make("environment-paired"); const registration = yield* prepareBearerConnectionUpdate({ input: { environmentId, label: " Renamed environment ", httpBaseUrl: "http://100.65.180.100:3773/path", }, entry: Option.some({ target: new BearerConnectionTarget({ environmentId, label: "Old label", connectionId: "bearer:environment-paired", }), profile: Option.some( new BearerConnectionProfile({ connectionId: "bearer:environment-paired", environmentId, label: "Old label", httpBaseUrl: "http://old.example.test/", wsBaseUrl: "ws://old.example.test/", }), ), }), credential: Option.some(new BearerConnectionCredential({ token: "bearer-token" })), }); expect(registration).toMatchObject({ target: { environmentId, label: "Renamed environment", connectionId: "bearer:environment-paired", }, profile: { environmentId, label: "Renamed environment", httpBaseUrl: "http://100.65.180.100:3773/", wsBaseUrl: "ws://100.65.180.100:3773/", }, credential: { token: "bearer-token" }, }); }), ); it.effect("prepares an SSH registration from the provisioned platform environment", () => Effect.gen(function* () { const target = { alias: "devbox", hostname: "devbox.example.test", username: "developer", port: 22, }; const registration = yield* prepareSshRegistration({ target, }).pipe( Effect.provideService( SshEnvironmentGateway, SshEnvironmentGateway.of({ provision: () => Effect.succeed({ environmentId: EnvironmentId.make("environment-ssh"), label: "Remote development box", bootstrap: { target, httpBaseUrl: "http://127.0.0.1:3201", wsBaseUrl: "ws://127.0.0.1:3201", pairingToken: "pairing-token", }, bearerToken: "bearer-token", }), prepare: () => Effect.die("unused"), disconnect: () => Effect.die("unused"), }), ), ); expect(registration).toMatchObject({ _tag: "SshConnectionRegistration", target: { environmentId: "environment-ssh", label: "Remote development box", connectionId: "ssh:environment-ssh", }, profile: { environmentId: "environment-ssh", label: "Remote development box", connectionId: "ssh:environment-ssh", target, }, }); }), );});
import { AuthStandardClientScopes, EnvironmentId } from "@t3tools/contracts";
import { describe, expect, it } from "@effect/vitest";
import * as Effect from "effect/Effect";
import * as Layer from "effect/Layer";
import * as Option from "effect/Option";
import { remoteHttpClientLayer } from "../rpc/http.ts";
import { ClientPresentation, SshEnvironmentGateway } from "../platform/capabilities.ts";
import { BearerConnectionCredential, BearerConnectionProfile } from "./catalog.ts";
import { BearerConnectionTarget } from "./model.ts";
import {
prepareBearerConnectionUpdate,
preparePairingRegistration,
prepareSshRegistration,
} from "./onboarding.ts";
const CLIENT_PRESENTATION_LAYER = Layer.succeed(
ClientPresentation,
ClientPresentation.of({
metadata: {
label: "T3 Code Test",
deviceType: "desktop",
os: "Test OS",
},
scopes: AuthStandardClientScopes,
}),
);
function pairingHttpLayer(
calls: Array<{ readonly url: string; readonly init: RequestInit }>,
options?: { readonly failDescriptor?: boolean },
) {
const fetchFn = ((input, init = {}) => {
const url = String(input);
calls.push({ url, init });
if (url.endsWith("/.well-known/t3/environment")) {
if (options?.failDescriptor === true) {
return Promise.resolve(
Response.json({ message: "descriptor unavailable" }, { status: 503 }),
);
}
return Promise.resolve(
Response.json({
environmentId: "environment-paired",
label: "Paired environment",
platform: {
os: "linux",
arch: "x64",
},
serverVersion: "0.0.0-test",
capabilities: {
repositoryIdentity: true,
},
}),
);
}
if (url.endsWith("/oauth/token")) {
return Promise.resolve(
Response.json({
access_token: "bearer-token",
issued_token_type: "urn:ietf:params:oauth:token-type:access_token",
token_type: "Bearer",
expires_in: 3600,
scope: AuthStandardClientScopes.join(" "),
}),
);
}
return Promise.reject(new Error(`Unexpected request: ${url}`));
}) satisfies typeof fetch;
return remoteHttpClientLayer(fetchFn);
}
describe("connection onboarding", () => {
it.effect("prepares a persisted bearer registration from pairing details", () =>
Effect.gen(function* () {
const calls: Array<{ readonly url: string; readonly init: RequestInit }> = [];
const registration = yield* preparePairingRegistration({
host: "remote.example.test",
pairingCode: "pairing-token",
}).pipe(Effect.provide(Layer.mergeAll(CLIENT_PRESENTATION_LAYER, pairingHttpLayer(calls))));
expect(registration).toMatchObject({
_tag: "BearerConnectionRegistration",
target: {
environmentId: "environment-paired",
label: "Paired environment",
connectionId: "bearer:environment-paired",
},
profile: {
environmentId: "environment-paired",
label: "Paired environment",
connectionId: "bearer:environment-paired",
httpBaseUrl: "https://remote.example.test/",
wsBaseUrl: "wss://remote.example.test/",
},
credential: {
token: "bearer-token",
},
});
expect(calls.map((call) => call.url)).toEqual([
"https://remote.example.test/.well-known/t3/environment",
"https://remote.example.test/oauth/token",
]);
const tokenRequest = calls.find((call) => call.url.endsWith("/oauth/token"));
const tokenBody =
tokenRequest?.init.body instanceof Uint8Array
? new TextDecoder().decode(tokenRequest.init.body)
: String(tokenRequest?.init.body);
const tokenParams = new URLSearchParams(tokenBody);
expect(tokenParams.get("subject_token")).toBe("pairing-token");
expect(tokenParams.get("scope")).toBe(AuthStandardClientScopes.join(" "));
expect(tokenParams.get("client_label")).toBe("T3 Code Test");
}),
);
it.effect("does not consume a pairing credential when descriptor discovery fails", () =>
Effect.gen(function* () {
const calls: Array<{ readonly url: string; readonly init: RequestInit }> = [];
yield* preparePairingRegistration({
host: "remote.example.test",
pairingCode: "pairing-token",
}).pipe(
Effect.provide(
Layer.mergeAll(
CLIENT_PRESENTATION_LAYER,
pairingHttpLayer(calls, { failDescriptor: true }),
),
),
Effect.flip,
);
expect(calls.map((call) => call.url)).toEqual([
"https://remote.example.test/.well-known/t3/environment",
]);
}),
);
it.effect("rejects invalid pairing details before making a request", () =>
Effect.gen(function* () {
const calls: Array<{ readonly url: string; readonly init: RequestInit }> = [];
const error = yield* preparePairingRegistration({
host: "",
pairingCode: "",
}).pipe(
Effect.provide(Layer.mergeAll(CLIENT_PRESENTATION_LAYER, pairingHttpLayer(calls))),
Effect.flip,
);
expect(error).toMatchObject({
_tag: "ConnectionBlockedError",
reason: "configuration",
message: "Enter a backend URL.",
});
expect(calls).toEqual([]);
}),
);
it.effect("updates bearer metadata while preserving the credential and identity", () =>
Effect.gen(function* () {
const environmentId = EnvironmentId.make("environment-paired");
const registration = yield* prepareBearerConnectionUpdate({
input: {
environmentId,
label: " Renamed environment ",
httpBaseUrl: "http://100.65.180.100:3773/path",
},
entry: Option.some({
target: new BearerConnectionTarget({
environmentId,
label: "Old label",
connectionId: "bearer:environment-paired",
}),
profile: Option.some(
new BearerConnectionProfile({
connectionId: "bearer:environment-paired",
environmentId,
label: "Old label",
httpBaseUrl: "http://old.example.test/",
wsBaseUrl: "ws://old.example.test/",
}),
),
}),
credential: Option.some(new BearerConnectionCredential({ token: "bearer-token" })),
});
expect(registration).toMatchObject({
target: {
environmentId,
label: "Renamed environment",
connectionId: "bearer:environment-paired",
},
profile: {
environmentId,
label: "Renamed environment",
httpBaseUrl: "http://100.65.180.100:3773/",
wsBaseUrl: "ws://100.65.180.100:3773/",
},
credential: { token: "bearer-token" },
});
}),
);
it.effect("prepares an SSH registration from the provisioned platform environment", () =>
Effect.gen(function* () {
const target = {
alias: "devbox",
hostname: "devbox.example.test",
username: "developer",
port: 22,
};
const registration = yield* prepareSshRegistration({
target,
}).pipe(
Effect.provideService(
SshEnvironmentGateway,
SshEnvironmentGateway.of({
provision: () =>
Effect.succeed({
environmentId: EnvironmentId.make("environment-ssh"),
label: "Remote development box",
bootstrap: {
target,
httpBaseUrl: "http://127.0.0.1:3201",
wsBaseUrl: "ws://127.0.0.1:3201",
pairingToken: "pairing-token",
},
bearerToken: "bearer-token",
}),
prepare: () => Effect.die("unused"),
disconnect: () => Effect.die("unused"),
}),
),
);
expect(registration).toMatchObject({
_tag: "SshConnectionRegistration",
target: {
environmentId: "environment-ssh",
label: "Remote development box",
connectionId: "ssh:environment-ssh",
},
profile: {
environmentId: "environment-ssh",
label: "Remote development box",
connectionId: "ssh:environment-ssh",
target,
},
});
}),
);
});