test/endpoint.mjs
Alle Dateien · Rohdatei öffnen
// Copyright 2026 Richard Andresik. SPDX-License-Identifier: Apache-2.0
import { webcrypto } from "node:crypto";
import "../src/e2ee.js";
const E2EE = globalThis.IcyZipE2EE;
export { E2EE, webcrypto };
export function memoryStorage()
{
const values = new Map();
return { values, getItem: key => values.get(key) ?? null,
setItem: (key, value) => values.set(key, String(value)), removeItem: key => values.delete(key) };
}
export function client({ pairId = "synthetic-v3-pair", role = "primary",
secret = E2EE.generateSecret(webcrypto), storage = memoryStorage(), crypto = webcrypto } = {})
{
return { pairId, role, secret, storage, session: E2EE.createSession({ pairId, role, secret, storage, crypto }) };
}
export async function connect(primary, secondary)
{
const [first, second] = await Promise.all([primary.session.publicMessage(), secondary.session.publicMessage()]);
await Promise.all([primary.session.acceptPublicMessage(second), secondary.session.acceptPublicMessage(first)]);
}
export async function paired(options = {})
{
const primary = client(options);
const secondary = client({ ...options, role: "secondary", secret: primary.secret, storage: memoryStorage() });
await connect(primary, secondary);
return { primary, secondary };
}