Relay pairing: prove direct + iOS deeplink smoke

This commit is contained in:
Mohamed Boudra
2026-02-05 01:26:39 +07:00
parent 9b8f1e348d
commit dc5336660b
11 changed files with 121 additions and 27 deletions
+1 -1
View File
@@ -149,7 +149,7 @@ describe("crypto", () => {
const daemonKeyPair = await generateKeyPair();
const daemonPubKeyB64 = await exportPublicKey(daemonKeyPair.publicKey);
// QR code would contain: { s: sessionId, k: daemonPubKeyB64, c: [...urls] }
// QR code would contain: { serverId, daemonPubKeyB64, relay: { endpoint } }
// === CLIENT SIDE (scans QR) ===
const clientKeyPair = await generateKeyPair();
+8 -8
View File
@@ -25,18 +25,18 @@ describe("E2E Relay with E2EE", () => {
});
it("full flow: daemon and client exchange encrypted messages through relay", async () => {
const sessionId = "test-session-" + Date.now();
const serverId = "test-session-" + Date.now();
// === DAEMON SIDE ===
// Generate keypair (public key goes in QR)
const daemonKeyPair = await generateKeyPair();
const daemonPubKeyB64 = await exportPublicKey(daemonKeyPair.publicKey);
// QR would contain: { s: sessionId, k: daemonPubKeyB64, c: [...urls] }
// QR would contain: { serverId, daemonPubKeyB64, relay: { endpoint } }
// Daemon connects to relay as "server" role
const daemonWs = new WebSocket(
`ws://127.0.0.1:${TEST_PORT}/ws?serverId=${sessionId}&role=server`
`ws://127.0.0.1:${TEST_PORT}/ws?serverId=${serverId}&role=server`
);
await new Promise<void>((resolve, reject) => {
@@ -59,7 +59,7 @@ describe("E2E Relay with E2EE", () => {
// Client connects to relay as "client" role
const clientWs = new WebSocket(
`ws://127.0.0.1:${TEST_PORT}/ws?serverId=${sessionId}&role=client`
`ws://127.0.0.1:${TEST_PORT}/ws?serverId=${serverId}&role=client`
);
await new Promise<void>((resolve, reject) => {
@@ -149,7 +149,7 @@ describe("E2E Relay with E2EE", () => {
});
it("relay only sees opaque bytes after handshake", async () => {
const sessionId = "opaque-test-" + Date.now();
const serverId = "opaque-test-" + Date.now();
// Setup keys
const daemonKeyPair = await generateKeyPair();
@@ -172,10 +172,10 @@ describe("E2E Relay with E2EE", () => {
// Connect both
const daemonWs = new WebSocket(
`ws://127.0.0.1:${TEST_PORT}/ws?serverId=${sessionId}&role=server`
`ws://127.0.0.1:${TEST_PORT}/ws?serverId=${serverId}&role=server`
);
const clientWs = new WebSocket(
`ws://127.0.0.1:${TEST_PORT}/ws?serverId=${sessionId}&role=client`
`ws://127.0.0.1:${TEST_PORT}/ws?serverId=${serverId}&role=client`
);
await Promise.all([
@@ -212,7 +212,7 @@ describe("E2E Relay with E2EE", () => {
});
it("wrong key cannot decrypt", async () => {
const sessionId = "wrong-key-test-" + Date.now();
const serverId = "wrong-key-test-" + Date.now();
// Setup - daemon and client with correct keys
const daemonKeyPair = await generateKeyPair();
+3 -3
View File
@@ -35,9 +35,9 @@ describe("Live relay (relay.paseo.sh) E2E", () => {
liveIt("bridges encrypted traffic end-to-end", { timeout: 45_000 }, async () => {
await withRetry(
async () => {
const sessionId = `live-${Date.now()}-${Math.random().toString(16).slice(2)}`;
const serverUrl = `${RELAY_BASE_URL}/ws?serverId=${encodeURIComponent(sessionId)}&role=server`;
const clientUrl = `${RELAY_BASE_URL}/ws?serverId=${encodeURIComponent(sessionId)}&role=client`;
const serverId = `live-${Date.now()}-${Math.random().toString(16).slice(2)}`;
const serverUrl = `${RELAY_BASE_URL}/ws?serverId=${encodeURIComponent(serverId)}&role=server`;
const clientUrl = `${RELAY_BASE_URL}/ws?serverId=${encodeURIComponent(serverId)}&role=client`;
// === Key setup ===
const daemonKeyPair = await generateKeyPair();