Relay pairing offer v2 (E2EE) + host connections

This commit is contained in:
Mohamed Boudra
2026-02-04 22:53:00 +07:00
parent 9ce4ad9758
commit 0218729316
59 changed files with 2022 additions and 1547 deletions
+23 -3
View File
@@ -51,17 +51,24 @@ describe("EncryptedChannel", () => {
const daemonKeyPair = await generateKeyPair();
const daemonPubKeyB64 = await exportPublicKey(daemonKeyPair.publicKey);
let clientOpenedResolve: (() => void) | null = null;
const clientOpened = new Promise<void>((resolve) => {
clientOpenedResolve = resolve;
});
// Start daemon waiting for client
const daemonChannelPromise = createDaemonChannel(daemonTransport, daemonKeyPair);
// Client connects (scanned QR, got daemon's public key)
const clientChannel = await createClientChannel(
clientTransport,
daemonPubKeyB64
daemonPubKeyB64,
{ onopen: () => clientOpenedResolve?.() }
);
// Daemon receives hello and completes handshake
const daemonChannel = await daemonChannelPromise;
await clientOpened;
expect(clientChannel.isOpen()).toBe(true);
expect(daemonChannel.isOpen()).toBe(true);
@@ -76,6 +83,11 @@ describe("EncryptedChannel", () => {
const daemonMessages: (string | ArrayBuffer)[] = [];
const clientMessages: (string | ArrayBuffer)[] = [];
let clientOpenedResolve: (() => void) | null = null;
const clientOpened = new Promise<void>((resolve) => {
clientOpenedResolve = resolve;
});
const daemonChannelPromise = createDaemonChannel(
daemonTransport,
daemonKeyPair,
@@ -85,10 +97,11 @@ describe("EncryptedChannel", () => {
const clientChannel = await createClientChannel(
clientTransport,
daemonPubKeyB64,
{ onmessage: (data) => clientMessages.push(data) }
{ onmessage: (data) => clientMessages.push(data), onopen: () => clientOpenedResolve?.() }
);
const daemonChannel = await daemonChannelPromise;
await clientOpened;
// Send messages both directions
await clientChannel.send("Hello from client");
@@ -111,12 +124,19 @@ describe("EncryptedChannel", () => {
const daemonKeyPair = await generateKeyPair();
const daemonPubKeyB64 = await exportPublicKey(daemonKeyPair.publicKey);
let clientOpenedResolve: (() => void) | null = null;
const clientOpened = new Promise<void>((resolve) => {
clientOpenedResolve = resolve;
});
const daemonChannelPromise = createDaemonChannel(daemonTransport, daemonKeyPair);
const clientChannel = await createClientChannel(
clientTransport,
daemonPubKeyB64
daemonPubKeyB64,
{ onopen: () => clientOpenedResolve?.() }
);
await daemonChannelPromise;
await clientOpened;
// Clear mock call history
(clientTransport.send as ReturnType<typeof vi.fn>).mockClear();