import * as NodeCrypto from "node:crypto"; import type { RelayEnvironmentLinkProofPayload, RelayEnvironmentLinkRequest, } from "@t3tools/contracts/relay"; import { RELAY_LINK_PROOF_TYP } from "@t3tools/shared/relayJwt"; import { describe, expect, it } from "@effect/vitest"; import * as DateTime from "effect/DateTime"; import * as Effect from "effect/Effect"; import * as Layer from "effect/Layer"; import * as Redacted from "effect/Redacted"; import * as Result from "effect/Result"; import * as DpopProofs from "../auth/DpopProofs.ts"; import * as RelayTokens from "../auth/RelayTokens.ts"; import * as EnvironmentCredentials from "./EnvironmentCredentials.ts"; import * as EnvironmentLinks from "./EnvironmentLinks.ts"; import * as RelayConfiguration from "../Config.ts"; import * as EnvironmentLinker from "./EnvironmentLinker.ts"; import * as ManagedEndpointProvider from "./ManagedEndpointProvider.ts"; const relayKeyPair = NodeCrypto.generateKeyPairSync("ed25519", { privateKeyEncoding: { format: "pem", type: "pkcs8" }, publicKeyEncoding: { format: "pem", type: "spki" }, }); const environmentKeyPair = NodeCrypto.generateKeyPairSync("ed25519", { privateKeyEncoding: { format: "pem", type: "pkcs8" }, publicKeyEncoding: { format: "pem", type: "spki" }, }); const config = RelayConfiguration.RelayConfiguration.of({ relayIssuer: "https://relay.example.test", apns: { environment: "sandbox", teamId: "team-id", keyId: "key-id", privateKey: Redacted.make("private-key"), bundleId: "com.t3tools.t3code.dev", }, apnsDeliveryJobSigningSecret: Redacted.make("job-secret"), clerkSecretKey: Redacted.make("clerk-secret"), clerkPublishableKey: "pk_test_test", clerkJwtAudience: "t3-code-relay", cloudMintPrivateKey: Redacted.make(relayKeyPair.privateKey), cloudMintPublicKey: relayKeyPair.publicKey, managedEndpointBaseDomain: undefined, managedEndpointNamespace: undefined, }); function signTestJwt(payload: object, typ: string, privateKey: string): string { const header = Buffer.from(JSON.stringify({ alg: "EdDSA", typ })).toString("base64url"); const encodedPayload = Buffer.from(JSON.stringify(payload)).toString("base64url"); const signingInput = `${header}.${encodedPayload}`; return `${signingInput}.${NodeCrypto.sign(null, Buffer.from(signingInput), privateKey).toString("base64url")}`; } const makeRequest = Effect.gen(function* () { const now = yield* DateTime.now; const expiresAt = DateTime.add(now, { minutes: 5 }); const relayTokens = yield* RelayTokens.RelayTokens; const challenge = yield* relayTokens.issueLinkChallenge({ userId: "user_123", request: { notificationsEnabled: true, liveActivitiesEnabled: true, managedTunnelsEnabled: true, }, jti: "challenge-jti", issuedAtEpochSeconds: Math.floor(now.epochMilliseconds / 1_000), expiresAtEpochSeconds: Math.floor(expiresAt.epochMilliseconds / 1_000), }); const payload = { iss: "t3-env:env-link-test", aud: "https://relay.example.test", sub: "env-link-test", jti: "link-proof-jti", iat: Math.floor(now.epochMilliseconds / 1_000), exp: Math.floor(expiresAt.epochMilliseconds / 1_000), challenge, environmentId: "env-link-test" as RelayEnvironmentLinkProofPayload["environmentId"], descriptor: { environmentId: "env-link-test" as RelayEnvironmentLinkProofPayload["environmentId"], label: "Link Test Environment", platform: { os: "darwin", arch: "arm64" }, serverVersion: "0.0.0-test", capabilities: { repositoryIdentity: true }, }, environmentPublicKey: environmentKeyPair.publicKey.trim(), endpoint: { httpBaseUrl: "https://env.example.test/", wsBaseUrl: "wss://env.example.test/", providerKind: "manual", }, origin: { localHttpHost: "127.0.0.1", localHttpPort: 3773 }, scopes: ["agent_activity_notifications", "managed_tunnels"], } satisfies RelayEnvironmentLinkProofPayload; return { request: { proof: signTestJwt(payload, RELAY_LINK_PROOF_TYP, environmentKeyPair.privateKey), notificationsEnabled: true, liveActivitiesEnabled: true, managedTunnelsEnabled: false, } satisfies RelayEnvironmentLinkRequest, payload, }; }); function testLayer(input?: { readonly upsert?: EnvironmentLinks.EnvironmentLinks["Service"]["upsert"]; readonly consume?: DpopProofs.DpopProofReplay["Service"]["consume"]; }) { return EnvironmentLinker.layer.pipe( Layer.provideMerge(RelayTokens.layer), Layer.provide( Layer.mergeAll( RelayConfiguration.layer(config), Layer.succeed(DpopProofs.DpopProofReplay, { verifyAndConsume: () => Effect.die("unexpected DPoP proof verification"), consume: input?.consume ?? (() => Effect.succeed(true)), pruneExpired: Effect.void, }), Layer.succeed(EnvironmentLinks.EnvironmentLinks, { upsert: input?.upsert ?? (() => Effect.void), listUsersForEnvironment: () => Effect.succeed([]), listDeliveryUsersForEnvironment: () => Effect.succeed([]), listPublicKeysForEnvironment: () => Effect.succeed([]), listForUser: () => Effect.succeed([]), getForUser: () => Effect.succeed(null), revokeForUser: () => Effect.succeed(false), }), Layer.succeed(EnvironmentCredentials.EnvironmentCredentials, { create: () => Effect.succeed("t3env_credential_secret"), authenticate: () => Effect.succeedNone, revokeForEnvironmentPublicKey: () => Effect.succeed(false), }), Layer.succeed(ManagedEndpointProvider.ManagedEndpointProvider, { deprovision: () => Effect.void, provision: () => Effect.succeed({ endpoint: { httpBaseUrl: "https://managed.example.test/", wsBaseUrl: "wss://managed.example.test/ws", providerKind: "cloudflare_tunnel", }, runtime: { providerKind: "cloudflare_tunnel", connectorToken: "connector-token" }, }), }), ), ), ); } describe("EnvironmentLinker", () => { it.effect("uses verified JWT claims when linking an environment", () => { let persistedEnvironmentId: string | null = null; return Effect.gen(function* () { const { request, payload } = yield* makeRequest; const linker = yield* EnvironmentLinker.EnvironmentLinker; const result = yield* linker.link({ userId: "user_123", request }); expect(result.environmentId).toBe(payload.environmentId); expect(result.environmentCredential).toBe("t3env_credential_secret"); expect(persistedEnvironmentId).toBe(payload.environmentId); }).pipe( Effect.provide( testLayer({ upsert: (input) => Effect.sync(() => { persistedEnvironmentId = input.proof.environmentId; }), }), ), ); }); it.effect("rejects a tampered compact proof before persistence", () => { let persisted = false; return Effect.gen(function* () { const { request } = yield* makeRequest; const segments = request.proof.split("."); const signature = segments[2]!; segments[2] = `${signature.startsWith("A") ? "B" : "A"}${signature.slice(1)}`; const tampered = { ...request, proof: segments.join(".") }; const linker = yield* EnvironmentLinker.EnvironmentLinker; const result = yield* Effect.result(linker.link({ userId: "user_123", request: tampered })); expect(Result.isFailure(result)).toBe(true); expect(persisted).toBe(false); }).pipe( Effect.provide( testLayer({ upsert: () => Effect.sync(() => { persisted = true; }), }), ), ); }); it.effect("rejects replayed JWT ids", () => Effect.gen(function* () { const { request } = yield* makeRequest; const linker = yield* EnvironmentLinker.EnvironmentLinker; const result = yield* Effect.result(linker.link({ userId: "user_123", request })); expect(Result.isFailure(result)).toBe(true); }).pipe(Effect.provide(testLayer({ consume: () => Effect.succeed(false) }))), ); });