@fairfox/polly 0.77.2 → 0.78.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -11,12 +11,12 @@
11
11
  "var endianness=function(){return\"LE\"},hostname=function(){if(typeof location<\"u\")return location.hostname;else return\"\"},loadavg=function(){return[]},uptime=function(){return 0},freemem=function(){return Number.MAX_VALUE},totalmem=function(){return Number.MAX_VALUE},cpus=function(){return[]},type=function(){return\"Browser\"},release=function(){if(typeof navigator<\"u\")return navigator.appVersion;return\"\"},getNetworkInterfaces=function(){return{}},networkInterfaces=getNetworkInterfaces,arch=function(){return\"javascript\"},platform=function(){return\"browser\"},tmpdir=function(){return\"/tmp\"},tmpDir=tmpdir,EOL=`\n`,homedir=function(){return\"/\"};export{uptime,type,totalmem,tmpdir,tmpDir,release,platform,networkInterfaces,loadavg,hostname,homedir,getNetworkInterfaces,freemem,endianness,cpus,arch,EOL};",
12
12
  "/**\n * mesh-diagnostics — typed event stream for observable mesh failures and\n * state transitions.\n *\n * The mesh network adapter's incoming path has seven branches that drop a\n * message and return undefined: a malformed signed envelope, a revoked\n * peer, an unknown peer, a bad signature, a malformed encrypted envelope,\n * a missing document key, and a bad decryption. Each branch is correct —\n * the adapter must not surface tampered or unidentifiable bytes to the\n * Repo — but the drop is invisible to anything observing the application.\n * The classic symptom is \"the other peer typed something and nothing\n * arrived\" with no error anywhere.\n *\n * This module exposes a typed emit-and-subscribe stream that the adapter\n * (and the pairing and revocation paths) write to. Tests subscribe to\n * assert that exactly the expected diagnostics fired and no others;\n * production code can attach an observability sink that turns the stream\n * into telemetry or a user-visible diagnostic surface.\n *\n * The stream is module-level. Listeners are deduplicated by reference;\n * subscribe returns an unsubscribe function. Listener exceptions are\n * caught and dropped so a buggy observer cannot tear the network path.\n */\n\n/** All diagnostic event kinds, discriminated by the `kind` field. */\nexport type MeshDiagnostic =\n // Incoming-message silent drops in MeshNetworkAdapter.tryUnwrap.\n | { kind: \"drop:malformed-signed-envelope\"; reason?: string }\n | { kind: \"drop:revoked-peer\"; senderId: string }\n | { kind: \"drop:unknown-peer\"; senderId: string }\n | { kind: \"drop:bad-signature\"; senderId: string; reason?: string }\n | {\n kind: \"drop:malformed-encrypted-envelope\";\n senderId: string;\n reason?: string;\n }\n | {\n kind: \"drop:missing-doc-key\";\n senderId: string;\n documentId: string;\n }\n | {\n kind: \"drop:bad-decryption\";\n senderId: string;\n documentId: string;\n reason?: string;\n }\n // Control-message dispatch (RFC-043). After signature verification\n // and decryption, every plaintext payload begins with a one-byte\n // type tag; the adapter dispatches on it. Tags whose handlers are\n // not yet wired (revocation, revocation-summary) emit a\n // `ctrl:*-received` diagnostic and the message is dropped at this\n // layer until the next RFC-043 PR lands the apply path. Unknown\n // tags emit `drop:unknown-control-type`. An empty payload (no tag\n // byte at all) emits `drop:empty-control-payload`.\n | { kind: \"drop:unknown-control-type\"; senderId: string; tag: number }\n | { kind: \"drop:empty-control-payload\"; senderId: string }\n | { kind: \"drop:control-handler-threw\"; senderId: string; tag: number; reason: string }\n | { kind: \"ctrl:revocation-received\"; senderId: string }\n | { kind: \"ctrl:revocation-summary-received\"; senderId: string }\n // Revocation lifecycle (RFC-043). `revoke:applied` fires when a\n // remote revocation lands in the local keyring; `revoke:duplicate`\n // fires when an already-known revocation arrives again;\n // `revoke:rejected` fires when verification fails and carries the\n // RevocationError.code; `revoke:self-targeted` fires when the\n // local peer is the revocation's target and is the signal that\n // wakes the application's \"you have been revoked\" UX.\n | { kind: \"revoke:duplicate\"; revokedPeerId: string; issuerId: string }\n | {\n kind: \"revoke:rejected\";\n senderId: string;\n reason: string;\n }\n | {\n kind: \"revoke:self-targeted\";\n issuerId: string;\n reason?: string;\n issuedAt: number;\n }\n // Pairing-flow transitions.\n | { kind: \"pair:invite-issued\"; peerId: string }\n | { kind: \"pair:invite-accepted\"; peerId: string; issuerId: string }\n // Revocation-flow transitions.\n | { kind: \"revoke:issued\"; revokedPeerId: string; issuerId: string }\n | { kind: \"revoke:applied\"; revokedPeerId: string };\n\n/** A diagnostic event with the wall-clock timestamp the emitter stamped. */\nexport type MeshDiagnosticEvent = MeshDiagnostic & { timestamp: number };\n\n/** Callback shape for subscribers. */\nexport type MeshDiagnosticListener = (event: MeshDiagnosticEvent) => void;\n\nconst listeners = new Set<MeshDiagnosticListener>();\n\n/**\n * Emit a diagnostic to every active subscriber. Synchronous. Listener\n * exceptions are swallowed.\n */\nexport function emitMeshDiagnostic(diagnostic: MeshDiagnostic): void {\n const event: MeshDiagnosticEvent = { ...diagnostic, timestamp: Date.now() };\n for (const listener of listeners) {\n try {\n listener(event);\n } catch {\n // A buggy listener must not break the network path. The diagnostic\n // is intentionally a side-channel; if telemetry collapses, the mesh\n // keeps moving messages.\n }\n }\n}\n\n/**\n * Subscribe a listener. Returns an unsubscribe function. Idempotent on\n * the same listener reference — subscribing the same function twice\n * registers it once.\n */\nexport function subscribeToMeshDiagnostics(listener: MeshDiagnosticListener): () => void {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n}\n\n/**\n * Convenience for tests and trace recorders: subscribe, collect every\n * event into an array, return the array and a stop function that\n * unsubscribes. The returned array is the live capture buffer — reads\n * see new events the moment they fire.\n */\nexport function recordMeshDiagnostics(): {\n events: ReadonlyArray<MeshDiagnosticEvent>;\n stop: () => void;\n} {\n const captured: MeshDiagnosticEvent[] = [];\n const stop = subscribeToMeshDiagnostics((event) => {\n captured.push(event);\n });\n return { events: captured, stop };\n}\n\n/**\n * Test-only: drop every subscriber. Use in `afterEach` to guarantee\n * isolation between tests when a stop function was missed. Not exported\n * from the mesh subpath in production builds — tests reach in directly.\n */\nexport function clearMeshDiagnosticListeners(): void {\n listeners.clear();\n}\n",
13
13
  "/**\n * @fairfox/polly/test/e2e-mesh — assertions over the mesh-diagnostics\n * stream.\n *\n * Every e2e script that drives the mesh subscribes to the diagnostic\n * stream before it starts and runs the assertions in `assertNoSilentDrops`\n * before exiting. The default is \"no unexpected diagnostics fired\"; a\n * script that legitimately exercises a drop branch (e.g. a revocation\n * test) supplies an allowlist of expected kinds so the gate stays loud\n * about everything else.\n *\n * This is the test-kit half of the diagnostic-obligation move: the lint\n * half (forbidding new silent-drop branches that do not emit) lands\n * separately as `scripts/check-mesh-diagnostics.ts`.\n */\n\nimport {\n type MeshDiagnostic,\n type MeshDiagnosticEvent,\n recordMeshDiagnostics,\n} from \"../../../../src/shared/lib/mesh-diagnostics\";\n\nexport interface MeshAssertionFailure extends Error {\n readonly kind: \"mesh-assertion-failure\";\n readonly unexpected: ReadonlyArray<MeshDiagnosticEvent>;\n}\n\nexport class MeshAssertionError extends Error implements MeshAssertionFailure {\n readonly kind = \"mesh-assertion-failure\";\n readonly unexpected: ReadonlyArray<MeshDiagnosticEvent>;\n constructor(message: string, unexpected: ReadonlyArray<MeshDiagnosticEvent>) {\n super(message);\n this.name = \"MeshAssertionError\";\n this.unexpected = unexpected;\n }\n}\n\nexport interface DiagnosticRecorder {\n /** Live capture buffer — reads see new events the moment they fire. */\n events: ReadonlyArray<MeshDiagnosticEvent>;\n /** Stop subscribing. Idempotent. */\n stop: () => void;\n /**\n * Run the no-silent-drops assertion against the captured buffer.\n * Throws {@link MeshAssertionError} if any unexpected diagnostic fired.\n * Pass `allow` with the kinds the script legitimately expected — the\n * gate fails on anything else.\n */\n assertNoSilentDrops: (allow?: ReadonlyArray<MeshDiagnostic[\"kind\"]>) => void;\n}\n\n/**\n * Begin capturing diagnostics for the duration of a script.\n *\n * @example\n * ```typescript\n * const diag = startDiagnosticRecorder();\n * try {\n * await driveTheScenario();\n * diag.assertNoSilentDrops();\n * } finally {\n * diag.stop();\n * }\n * ```\n */\nexport function startDiagnosticRecorder(): DiagnosticRecorder {\n const { events, stop } = recordMeshDiagnostics();\n\n function assertNoSilentDrops(allow: ReadonlyArray<MeshDiagnostic[\"kind\"]> = []): void {\n const allowed = new Set(allow);\n const unexpected = events.filter(\n (event) => event.kind.startsWith(\"drop:\") && !allowed.has(event.kind)\n );\n if (unexpected.length === 0) return;\n const summary = unexpected\n .map((event) => ` ${event.kind} ${JSON.stringify(eventDetails(event))}`)\n .join(\"\\n\");\n throw new MeshAssertionError(\n `Unexpected silent-drop diagnostics fired during the e2e run.\\n${summary}\\n` +\n `If a drop kind is legitimately expected for this scenario, pass it ` +\n `to assertNoSilentDrops({ allow: [...] }).`,\n unexpected\n );\n }\n\n return { events, stop, assertNoSilentDrops };\n}\n\nfunction eventDetails(event: MeshDiagnosticEvent): Record<string, unknown> {\n // Strip kind + timestamp; keep the rest as context.\n const { kind: _kind, timestamp: _ts, ...rest } = event;\n return rest;\n}\n",
14
- "/**\n * @fairfox/polly/test/e2e-mesh — bundle and serve the e2e consumer.\n *\n * Bun.build compiles `examples/e2e-consumer/main.ts` for the browser\n * target with the Automerge base64 fix (same plugin the existing browser\n * runner uses). Bun.serve then hands the HTML on \"/\" with a bootstrap\n * shim injected, and the JS on \"/main.js\". Puppeteer points at the\n * returned URL.\n *\n * The kit owns this so every e2e script gets the same boot path: build\n * the in-tree consumer, serve from a fresh ephemeral port, inject the\n * peer-specific bootstrap. No script should call Bun.build directly —\n * keeping it in one place means the Automerge plugin and the bootstrap\n * shape stay coherent across the suite.\n */\n\nimport { readFileSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport type { BunPlugin } from \"bun\";\n\n// __dirname here is packages/polly/tools/test/src/e2e-mesh. The consumer\n// lives at packages/polly/examples/e2e-consumer so it inherits polly's\n// node_modules at bundle time; placing it at the monorepo root would\n// require it to declare its own workspace entry plus polly's runtime\n// dependencies, which is more coupling than the test deserves.\nconst pollyRoot = resolve(__dirname, \"../../../..\");\nconst consumerEntry = resolve(pollyRoot, \"examples/e2e-consumer/main.ts\");\nconst consumerHtml = resolve(pollyRoot, \"examples/e2e-consumer/index.html\");\nconst automergeBase64Path = resolve(\n pollyRoot,\n \"node_modules/@automerge/automerge/dist/mjs/entrypoints/fullfat_base64.js\"\n);\n\nconst automergeBase64Plugin: BunPlugin = {\n name: \"automerge-base64\",\n setup(build) {\n build.onResolve({ filter: /^@automerge\\/automerge(\\/slim)?$/ }, () => ({\n path: automergeBase64Path,\n }));\n },\n};\n\nexport interface ServeConsumerOptions {\n /** The bootstrap object that the page reads from window.__pollyE2eBootstrap. */\n bootstrap: Record<string, unknown>;\n}\n\nexport interface ServeConsumerResult {\n /** http://127.0.0.1:<port>/ — pass to puppeteer page.goto. */\n url: string;\n /** Stop the server. Idempotent. */\n close: () => Promise<void>;\n}\n\n/**\n * Bundle the consumer and serve it on an ephemeral port. The HTML's\n * `<script type=\"module\" src=\"./main.js\">` resolves to the freshly built\n * bundle; the bootstrap shim is inserted right before it so the global\n * is set by the time `main.ts` reads it.\n */\nexport async function serveConsumer(options: ServeConsumerOptions): Promise<ServeConsumerResult> {\n const buildResult = await Bun.build({\n entrypoints: [consumerEntry],\n target: \"browser\",\n format: \"esm\",\n minify: false,\n sourcemap: \"inline\",\n plugins: [automergeBase64Plugin],\n });\n if (!buildResult.success) {\n const logs = buildResult.logs.map((log) => String(log)).join(\"\\n\");\n throw new Error(`serveConsumer: build failed:\\n${logs}`);\n }\n const jsText = await buildResult.outputs[0]?.text();\n if (!jsText) {\n throw new Error(\"serveConsumer: build produced no output\");\n }\n\n const rawHtml = readFileSync(consumerHtml, \"utf-8\");\n const bootstrapJson = JSON.stringify(options.bootstrap);\n const bootstrapShim = `<script>window.__pollyE2eBootstrap = ${bootstrapJson};</script>`;\n const html = rawHtml.replace(\n /<script type=\"module\" src=\"\\.\\/main\\.js\"><\\/script>/,\n `${bootstrapShim}\\n <script type=\"module\" src=\"./main.js\"></script>`\n );\n\n const server = Bun.serve({\n port: 0,\n fetch(req) {\n const url = new URL(req.url);\n if (url.pathname === \"/\" || url.pathname === \"/index.html\") {\n return new Response(html, { headers: { \"Content-Type\": \"text/html\" } });\n }\n if (url.pathname === \"/main.js\") {\n return new Response(jsText, {\n headers: { \"Content-Type\": \"application/javascript\" },\n });\n }\n return new Response(\"not found\", { status: 404 });\n },\n });\n\n return {\n url: `http://127.0.0.1:${server.port}/`,\n close: async () => {\n server.stop();\n },\n };\n}\n",
14
+ "/**\n * @fairfox/polly/test/e2e-mesh — bundle and serve the e2e consumer.\n *\n * Bun.build compiles `examples/e2e-consumer/main.ts` for the browser\n * target with the Automerge base64 fix (same plugin the existing browser\n * runner uses). Bun.serve then hands the HTML on \"/\" with a bootstrap\n * shim injected, and the JS on \"/main.js\". Puppeteer points at the\n * returned URL.\n *\n * The kit owns this so every e2e script gets the same boot path: build\n * the in-tree consumer, serve from a fresh ephemeral port, inject the\n * peer-specific bootstrap. No script should call Bun.build directly —\n * keeping it in one place means the Automerge plugin and the bootstrap\n * shape stay coherent across the suite.\n */\n\nimport { readFileSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport type { BunPlugin } from \"bun\";\n\n// __dirname here is packages/polly/tools/test/src/e2e-mesh. The consumer\n// lives at packages/polly/examples/e2e-consumer so it inherits polly's\n// node_modules at bundle time; placing it at the monorepo root would\n// require it to declare its own workspace entry plus polly's runtime\n// dependencies, which is more coupling than the test deserves.\nconst pollyRoot = resolve(__dirname, \"../../../..\");\nconst consumerEntry = resolve(pollyRoot, \"examples/e2e-consumer/main.ts\");\nconst consumerHtml = resolve(pollyRoot, \"examples/e2e-consumer/index.html\");\nconst automergeBase64Path = resolve(\n pollyRoot,\n \"node_modules/@automerge/automerge/dist/mjs/entrypoints/fullfat_base64.js\"\n);\n\nconst automergeBase64Plugin: BunPlugin = {\n name: \"automerge-base64\",\n setup(build) {\n build.onResolve({ filter: /^@automerge\\/automerge(\\/slim)?$/ }, () => ({\n path: automergeBase64Path,\n }));\n },\n};\n\nexport interface ServeConsumerOptions {\n /** The bootstrap object that the page reads from window.__pollyE2eBootstrap. */\n bootstrap: Record<string, unknown>;\n}\n\nexport interface ServeConsumerResult {\n /** http://127.0.0.1:<port>/ — pass to puppeteer page.goto. */\n url: string;\n /** Stop the server. Idempotent. */\n close: () => Promise<void>;\n}\n\n/**\n * Bundle the consumer and serve it on an ephemeral port. The HTML's\n * `<script type=\"module\" src=\"./main.js\">` resolves to the freshly built\n * bundle; the bootstrap shim is inserted right before it so the global\n * is set by the time `main.ts` reads it.\n */\nexport async function serveConsumer(options: ServeConsumerOptions): Promise<ServeConsumerResult> {\n const buildResult = await Bun.build({\n entrypoints: [consumerEntry],\n target: \"browser\",\n format: \"esm\",\n minify: false,\n sourcemap: \"inline\",\n plugins: [automergeBase64Plugin],\n });\n if (!buildResult.success) {\n const logs = buildResult.logs.map((log) => String(log)).join(\"\\n\");\n throw new Error(`serveConsumer: build failed:\\n${logs}`);\n }\n const jsText = await buildResult.outputs[0]?.text();\n if (!jsText) {\n throw new Error(\"serveConsumer: build produced no output\");\n }\n\n const rawHtml = readFileSync(consumerHtml, \"utf-8\");\n const bootstrapJson = JSON.stringify(options.bootstrap);\n const bootstrapShim = `<script>window.__pollyE2eBootstrap = ${bootstrapJson};</script>`;\n const html = rawHtml.replace(\n /<script type=\"module\" src=\"\\.\\/main\\.js\"><\\/script>/,\n `${bootstrapShim}\\n <script type=\"module\" src=\"./main.js\"></script>`\n );\n\n const server = Bun.serve({\n port: 0,\n fetch(req) {\n const url = new URL(req.url);\n if (url.pathname === \"/\" || url.pathname === \"/index.html\") {\n return new Response(html, {\n headers: { \"Content-Type\": \"text/html; charset=utf-8\" },\n });\n }\n if (url.pathname === \"/main.js\") {\n return new Response(jsText, {\n headers: { \"Content-Type\": \"application/javascript; charset=utf-8\" },\n });\n }\n return new Response(\"not found\", { status: 404 });\n },\n });\n\n return {\n url: `http://127.0.0.1:${server.port}/`,\n close: async () => {\n server.stop();\n },\n };\n}\n",
15
15
  "/**\n * @fairfox/polly/test/e2e-mesh — waitForConvergence.\n *\n * Polls a consumer-supplied predicate against every launched peer until\n * the predicate returns true on all of them, or the timeout expires.\n * The predicate runs in the *node* side (the script) and is handed a\n * snapshot reader function that reads from the peer's page DOM.\n *\n * Typical use: assert every peer's `[data-e2e='items']` UL contains the\n * expected set of values.\n */\n\nimport type { LaunchedPeer } from \"./launch-peer\";\n\nexport interface PeerSnapshot {\n peerId: string;\n /** Items currently rendered in the consumer's [data-e2e='items'] list. */\n items: string[];\n /** Connected peer count reported by the consumer. */\n peerCount: number;\n /** Status text the consumer currently displays. */\n status: string;\n}\n\nexport type ConvergencePredicate = (snapshot: PeerSnapshot) => boolean;\n\nexport interface WaitForConvergenceOptions {\n /** Cap wait time before throwing. Defaults to 20s. */\n timeoutMs?: number;\n /** Poll interval. Defaults to 200ms. */\n pollMs?: number;\n}\n\nasync function readPeerSnapshot(peer: LaunchedPeer): Promise<PeerSnapshot> {\n return peer.page\n .evaluate(() => {\n const itemEls = Array.from(document.querySelectorAll(\"[data-e2e-item]\"));\n const items = itemEls.map((el) => el.textContent ?? \"\");\n const peerCountText = document.querySelector(\"[data-e2e='peer-count']\")?.textContent ?? \"0\";\n const status = document.querySelector(\"[data-e2e='status']\")?.textContent ?? \"\";\n return { items, peerCount: Number(peerCountText) || 0, status };\n })\n .then((data) => ({ peerId: peer.peerId, ...data }));\n}\n\n/**\n * Block until the predicate is true for every peer, or throw.\n */\nexport async function waitForConvergence(\n peers: ReadonlyArray<LaunchedPeer>,\n predicate: ConvergencePredicate,\n options: WaitForConvergenceOptions = {}\n): Promise<void> {\n const { timeoutMs = 20_000, pollMs = 200 } = options;\n const deadline = Date.now() + timeoutMs;\n let lastSnapshots: PeerSnapshot[] = [];\n\n while (Date.now() < deadline) {\n const snapshots = await Promise.all(peers.map(readPeerSnapshot));\n lastSnapshots = snapshots;\n if (snapshots.every(predicate)) return;\n await new Promise((r) => setTimeout(r, pollMs));\n }\n\n const summary = lastSnapshots\n .map(\n (s) =>\n ` ${s.peerId}: status=\"${s.status}\" peerCount=${s.peerCount} items=${JSON.stringify(s.items)}`\n )\n .join(\"\\n\");\n throw new Error(\n `waitForConvergence: predicate did not hold for every peer within ${timeoutMs}ms.\\n${summary}`\n );\n}\n\n/**\n * Convenience: wait until every peer reports it sees at least N connected\n * peers. Used right after launching to confirm the WebRTC handshake\n * completed before driving any user-facing flow.\n */\nexport async function waitForMeshConnected(\n peers: ReadonlyArray<LaunchedPeer>,\n options: WaitForConvergenceOptions = {}\n): Promise<void> {\n const minPeers = peers.length - 1;\n await waitForConvergence(peers, (snapshot) => snapshot.peerCount >= minPeers, options);\n}\n",
16
16
  "/**\n * @fairfox/polly/test/e2e-mesh — withRelay helper.\n *\n * Boots a polly signalling relay on an ephemeral port for e2e scripts.\n * The relay is the same Elysia plugin polly ships at runtime, so a script\n * driving the relay through `withRelay` exercises the production protocol\n * with no shimming. Two modes:\n *\n * - \"embedded\" (default): start an Elysia app on a random port and return\n * its URL plus a close callback. The hermetic mode the suite runs in\n * by default; depending on a staging relay would couple CI reliability\n * to a network service we do not control.\n *\n * - \"env\": read SIGNALING_URL from the environment and return that\n * alongside a no-op close. The override the nightly cron uses to smoke\n * the production protocol against the live relay.\n *\n * Lift source: tests/integration/signaling-server.test.ts is the existing\n * recipe; this helper centralises it so every e2e script wires the relay\n * the same way.\n */\n\nimport { Elysia } from \"elysia\";\nimport { signalingServer } from \"../../../../src/elysia/signaling-server-plugin\";\n\nexport interface WithRelayResult {\n /** WebSocket URL of the signalling endpoint, ready to be passed to\n * `createMeshClient({ signaling: { url, peerId } })`. */\n url: string;\n /** Stop the relay. Idempotent; safe to call after a failed boot. */\n close: () => Promise<void>;\n}\n\nexport interface WithRelayOptions {\n /**\n * \"embedded\" boots a fresh relay on an ephemeral port and returns its\n * URL. \"env\" reads SIGNALING_URL from the environment and returns it\n * without booting anything. Defaults to \"embedded\".\n */\n mode?: \"embedded\" | \"env\";\n /** Path under which the signalling endpoint is mounted. Defaults to\n * \"/polly/signaling\" — the same default the SPA wiring uses. */\n path?: string;\n}\n\nfunction pickPort(): number {\n // Same window the integration suite uses. Random port collision is\n // possible but rare; e2e scripts run sequentially by default so the\n // failure surface is small.\n return 30000 + Math.floor(Math.random() * 10000);\n}\n\n/**\n * Start a signalling relay for the duration of an e2e script.\n *\n * @example\n * ```typescript\n * const relay = await withRelay();\n * try {\n * // boot peers pointing signaling.url at relay.url ...\n * } finally {\n * await relay.close();\n * }\n * ```\n */\nexport async function withRelay(options: WithRelayOptions = {}): Promise<WithRelayResult> {\n const mode = options.mode ?? \"embedded\";\n const path = options.path ?? \"/polly/signaling\";\n\n if (mode === \"env\") {\n const url = process.env[\"SIGNALING_URL\"];\n if (!url) {\n throw new Error(\n \"withRelay({ mode: 'env' }) requires SIGNALING_URL to be set in the environment.\"\n );\n }\n return {\n url,\n close: async () => {\n // env mode doesn't own a server, so close is a no-op.\n },\n };\n }\n\n const port = pickPort();\n const app = new Elysia().use(signalingServer({ path })).listen(port);\n const url = `ws://127.0.0.1:${port}${path}`;\n\n return {\n url,\n close: async () => {\n // Elysia exposes the underlying Bun server here. The .stop(true)\n // force-closes any open connections so a hung peer cannot keep the\n // server alive past the script's intended lifetime.\n (\n app as unknown as {\n server?: { stop?: (force?: boolean) => void };\n }\n ).server?.stop?.(true);\n },\n };\n}\n",
17
17
  "// @ts-nocheck - Optional peer dependencies (elysia, @elysiajs/eden)\n/**\n * signalingServer — Phase 2 Elysia plugin that exposes a stateless\n * WebSocket route for SDP/ICE relay between $meshState peers.\n *\n * The mesh transport is a star-of-data-channels: peers establish direct\n * WebRTC connections to each other and exchange document operations\n * peer-to-peer once those channels are open. WebRTC connection setup\n * needs an out-of-band channel for SDP offer/answer and ICE candidate\n * exchange, and that channel is what this plugin provides. The plugin\n * does not own any document state, does not hold any encryption keys,\n * and never inspects the contents of the messages it relays. It is a\n * pure pub-sub by peer id.\n *\n * Once two peers have completed the SDP exchange and opened a direct\n * data channel, the signalling server is no longer on the critical\n * path — the peers talk directly. The signalling server's role is\n * therefore intermittent: peers connect to it only during the brief\n * windows when they are establishing or re-establishing connections.\n *\n * Wire protocol:\n *\n * Client → server (join):\n * { type: \"join\", peerId: \"peer-alice\" }\n *\n * Client → server (signal to another peer):\n * { type: \"signal\", peerId: \"peer-alice\", targetPeerId: \"peer-bob\",\n * payload: { ... } }\n *\n * Server → client (delivered signal):\n * { type: \"signal\", peerId: \"peer-alice\", targetPeerId: \"peer-bob\",\n * payload: { ... } }\n *\n * Server → client (notification of unknown target):\n * { type: \"error\", reason: \"unknown-target\", targetPeerId: \"...\" }\n *\n * The `payload` is opaque to the signalling server — typically it\n * carries an SDP offer, SDP answer, or ICE candidate. Applications can\n * also use the relay for any other peer-to-peer message that needs an\n * intermediary, such as the initial handshake of a pairing flow.\n *\n * @example\n * ```ts\n * import { Elysia } from \"elysia\";\n * import { signalingServer } from \"@fairfox/polly/elysia\";\n *\n * const app = new Elysia()\n * .use(signalingServer({ path: \"/polly/signaling\" }))\n * .listen(8080);\n * ```\n */\n\nimport { Elysia } from \"elysia\";\n\n/** A signalling message. The `type` discriminates between client-to-server\n * requests (join, signal), the error envelope, and the server-to-client\n * discovery frames (peers-present, peer-joined, peer-left) that let\n * peers learn about each other without polling. */\nexport type SignalingMessage =\n | {\n type: \"join\";\n /** The peer registering itself with the signalling server. */\n peerId: string;\n }\n | {\n type: \"signal\";\n /** The peer sending the signal. */\n peerId: string;\n /** The peer the signal is being relayed to. */\n targetPeerId: string;\n /** Opaque payload, typically SDP or ICE. */\n payload: unknown;\n }\n | {\n type: \"error\";\n reason: \"unknown-target\" | \"not-joined\" | \"malformed\";\n targetPeerId?: string;\n }\n | {\n /** Sent to a newcomer immediately after it joins, listing every\n * peer that was already joined at that moment. Empty for a lone\n * newcomer. */\n type: \"peers-present\";\n peerIds: string[];\n }\n | {\n /** Broadcast to every incumbent when a new peer joins. */\n type: \"peer-joined\";\n peerId: string;\n }\n | {\n /** Broadcast to every remaining incumbent when a joined peer\n * closes its socket. Never emitted for a connection that never\n * sent a join frame. */\n type: \"peer-left\";\n peerId: string;\n };\n\n/** A frame whose `type` is outside the built-in signalling vocabulary.\n * Consumers who pass an {@link SignalingServerOptions.onCustomFrame}\n * handler receive these on the server side; everything else — including\n * routing them to a specific peer, storing a session, or rejecting the\n * frame — is the consumer's call. Polly does not touch the body. */\nexport interface CustomSignalingFrame {\n type: string;\n [key: string]: unknown;\n}\n\n/** Minimal surface the custom-frame handler receives in place of the\n * Elysia-specific `ws` object so the plugin stays portable. Exposes the\n * `data` bag (used to stash the authenticated peerId under the existing\n * join handshake) and a `send` method. */\nexport interface CustomFrameSocket {\n data: Record<string, unknown>;\n send: (msg: unknown) => void;\n}\n\nexport interface SignalingServerOptions {\n /** WebSocket route path. Defaults to \"/polly/signaling\". */\n path?: string;\n /** Optional hook for frames whose `type` is outside the built-in\n * vocabulary. The plugin invokes it in place of returning a\n * `malformed` error, so consumers can layer their own application\n * protocol (pairing return tokens, presence pings, etc.) on the\n * existing socket. The `peerId` argument is the sender's\n * authenticated peer id from their prior `join` frame, or\n * `undefined` if they haven't joined yet. */\n onCustomFrame?: (\n socket: CustomFrameSocket,\n frame: CustomSignalingFrame,\n peerId: string | undefined\n ) => void;\n}\n\n/**\n * Construct the signalling-server Elysia plugin. The plugin keeps a\n * per-instance map of peer id → WebSocket connection so that incoming\n * \"signal\" messages can be routed to the right target socket. The map\n * is local to the plugin instance, not shared across processes; for\n * multi-instance deployments behind a load balancer, applications need\n * sticky connection routing or a shared backplane (Redis pub-sub or\n * similar). That is a follow-up.\n */\nexport function signalingServer(options: SignalingServerOptions = {}) {\n const path = options.path ?? \"/polly/signaling\";\n const onCustomFrame = options.onCustomFrame;\n // Per-peer-id map of joined sockets. The inverse mapping is stored\n // directly on ws.data (a mutable property bag that Elysia preserves\n // across message callbacks for a given connection); the webrtc-p2p-chat\n // example in examples/ confirms this pattern is stable under Bun.\n const peerSockets = new Map<string, { send: (msg: unknown) => void }>();\n\n // Intentionally unnamed — Elysia deduplicates plugins by name, and each\n // signalingServer() call needs its own closure-captured peer map.\n const parseMessage = (raw: unknown): SignalingMessage | undefined => {\n try {\n return typeof raw === \"string\" ? JSON.parse(raw) : (raw as unknown as SignalingMessage);\n } catch {\n return undefined;\n }\n };\n\n const handleJoin = (ws: unknown, peerId: string): void => {\n const newcomer = ws as unknown as { send: (m: unknown) => void };\n // Collect the peers that were already joined so we can (a) tell the\n // newcomer who is present and (b) tell each of them about the\n // newcomer. A rejoin with the same peerId replaces the prior entry\n // but is otherwise treated as a fresh arrival.\n const incumbents: Array<{ peerId: string; socket: { send: (m: unknown) => void } }> = [];\n for (const [existingPeerId, existingSocket] of peerSockets) {\n if (existingPeerId === peerId) continue;\n incumbents.push({ peerId: existingPeerId, socket: existingSocket });\n }\n peerSockets.set(peerId, newcomer);\n const wsWithData = ws as unknown as { data: Record<string, unknown> };\n wsWithData.data.peerId = peerId;\n\n newcomer.send({\n type: \"peers-present\",\n peerIds: incumbents.map((i) => i.peerId),\n } as unknown as SignalingMessage);\n\n for (const incumbent of incumbents) {\n try {\n incumbent.socket.send({ type: \"peer-joined\", peerId } as unknown as SignalingMessage);\n } catch {\n // If a send fails we leave the stale socket to its own close\n // handler to evict. Dropping here would open a window where\n // the next signal to this peer still thinks it's alive.\n }\n }\n };\n\n const sendUnknownTarget = (ws: unknown, targetPeerId: string): void => {\n (ws as unknown as { send: (m: unknown) => void }).send({\n type: \"error\",\n reason: \"unknown-target\",\n targetPeerId,\n } as unknown as SignalingMessage);\n };\n\n /** Look up a target socket and confirm it is still open. */\n const findOpenTarget = (targetPeerId: string): { send: (msg: unknown) => void } | undefined => {\n const target = peerSockets.get(targetPeerId);\n if (!target) return undefined;\n const readyState = (target as unknown as { readyState?: number }).readyState;\n const OPEN = 1;\n if (readyState !== undefined && readyState !== OPEN) {\n peerSockets.delete(targetPeerId);\n return undefined;\n }\n return target;\n };\n\n const handleSignal = (ws: unknown, msg: Extract<SignalingMessage, { type: \"signal\" }>): void => {\n const wsWithData = ws as unknown as {\n data: Record<string, unknown>;\n send: (m: unknown) => void;\n };\n const senderId = wsWithData.data.peerId as unknown as string | undefined;\n if (!senderId) {\n wsWithData.send({ type: \"error\", reason: \"not-joined\" } as unknown as SignalingMessage);\n return;\n }\n const target = findOpenTarget(msg.targetPeerId);\n if (!target) {\n sendUnknownTarget(ws, msg.targetPeerId);\n return;\n }\n const relayed: SignalingMessage = {\n type: \"signal\",\n peerId: senderId,\n targetPeerId: msg.targetPeerId,\n payload: msg.payload,\n };\n try {\n target.send(relayed);\n } catch {\n peerSockets.delete(msg.targetPeerId);\n sendUnknownTarget(ws, msg.targetPeerId);\n }\n };\n\n return new Elysia().ws(path, {\n message(ws, raw) {\n const msg = parseMessage(raw);\n if (!msg) {\n ws.send({ type: \"error\", reason: \"malformed\" } as unknown as SignalingMessage);\n return;\n }\n if (msg.type === \"join\") {\n handleJoin(ws, msg.peerId);\n return;\n }\n if (msg.type === \"signal\") {\n handleSignal(ws, msg);\n return;\n }\n // Unknown types route to the consumer's custom-frame hook when\n // one is configured. Without a hook they still fall through to\n // the `malformed` error — same behaviour as before this branch\n // existed.\n if (onCustomFrame !== undefined) {\n const wsWithData = ws as unknown as CustomFrameSocket;\n const senderId = wsWithData.data[\"peerId\"];\n const peerId = typeof senderId === \"string\" ? senderId : undefined;\n onCustomFrame(wsWithData, msg as unknown as CustomSignalingFrame, peerId);\n return;\n }\n ws.send({ type: \"error\", reason: \"malformed\" } as unknown as SignalingMessage);\n },\n\n close(ws) {\n const peerId = (ws.data as unknown as Record<string, unknown>).peerId as unknown as\n | string\n | undefined;\n if (!peerId) {\n // Connection that never sent a join — nothing to broadcast and\n // nothing to evict. A bystander coming and going leaves no trace.\n return;\n }\n // Only evict if the map still points at *this* socket. A stale\n // close after the same peerId rejoined on a new socket should not\n // take the fresh entry with it. The comparison uses the `data` bag\n // Elysia attaches to each connection because it is preserved across\n // message and close callbacks, unlike the `ws` wrapper object which\n // Elysia may or may not reuse.\n const mapped = peerSockets.get(peerId);\n const wsData = (ws as unknown as { data: Record<string, unknown> }).data;\n const mappedData = (mapped as unknown as { data?: Record<string, unknown> } | undefined)\n ?.data;\n if (mapped === undefined || mappedData !== wsData) {\n return;\n }\n peerSockets.delete(peerId);\n for (const [_incumbentId, incumbentSocket] of peerSockets) {\n try {\n incumbentSocket.send({ type: \"peer-left\", peerId } as unknown as SignalingMessage);\n } catch {\n // Incumbent socket is gone; its own close handler will tidy.\n }\n }\n },\n });\n}\n"
18
18
  ],
19
- "mappings": "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",
20
- "debugId": "5450AD59549265DC64756E2164756E21",
19
+ "mappings": "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",
20
+ "debugId": "F20C694C7E05006764756E2164756E21",
21
21
  "names": []
22
22
  }
@@ -249,6 +249,50 @@ var init_expression_validator = __esm(() => {
249
249
  WEAK_NEGATION = /([a-zA-Z_][\w.]*(?:\.value\.[\w.]+|\.value\b|))?\s*!==?\s*("[^"]*"|'[^']*'|\d+|true|false|null)/;
250
250
  });
251
251
 
252
+ // tools/verify/src/analysis/coupled-fields.ts
253
+ var exports_coupled_fields = {};
254
+ __export(exports_coupled_fields, {
255
+ checkCoupledFields: () => checkCoupledFields
256
+ });
257
+ function norm(field) {
258
+ return field.replace(/_/g, ".");
259
+ }
260
+ function checkCoupledFields(coupledFields, handlers) {
261
+ const violations = [];
262
+ for (const rawGroup of coupledFields) {
263
+ const group = rawGroup.map(norm);
264
+ const groupSet = new Set(group);
265
+ if (groupSet.size < 2)
266
+ continue;
267
+ for (const handler of handlers) {
268
+ const violation = subsetViolation(group, groupSet, handler);
269
+ if (violation)
270
+ violations.push(violation);
271
+ }
272
+ }
273
+ return { valid: violations.length === 0, violations };
274
+ }
275
+ function writtenFields(group, handler) {
276
+ const written = new Set;
277
+ for (const assignment of handler.assignments) {
278
+ const field = norm(assignment.field);
279
+ if (group.has(field))
280
+ written.add(field);
281
+ }
282
+ return written;
283
+ }
284
+ function subsetViolation(group, groupSet, handler) {
285
+ const written = writtenFields(groupSet, handler);
286
+ if (written.size === 0 || written.size === groupSet.size)
287
+ return null;
288
+ return {
289
+ group,
290
+ handler: handler.messageType,
291
+ written: group.filter((f) => written.has(f)),
292
+ missing: group.filter((f) => !written.has(f))
293
+ };
294
+ }
295
+
252
296
  // tools/verify/src/analysis/non-interference.ts
253
297
  var exports_non_interference = {};
254
298
  __export(exports_non_interference, {
@@ -2678,6 +2722,9 @@ var init_tla = __esm(() => {
2678
2722
  this.indent--;
2679
2723
  this.indent--;
2680
2724
  this.line("");
2725
+ if (config.capabilities && config.capabilities.length > 0) {
2726
+ this.addCapabilityInvariants(config.capabilities);
2727
+ }
2681
2728
  if (this.extractedInvariants.length > 0) {
2682
2729
  this.line("\\* Extracted invariants from code annotations");
2683
2730
  this.line("");
@@ -2694,6 +2741,15 @@ var init_tla = __esm(() => {
2694
2741
  this.line("\\* State constraint to bound state space");
2695
2742
  this.addStateConstraint(config, _analysis);
2696
2743
  }
2744
+ addCapabilityInvariants(capabilities) {
2745
+ for (const cap of capabilities) {
2746
+ this.extractedInvariants.push({
2747
+ name: `Capability_${cap.name}`,
2748
+ description: cap.message ? `polly#160 capability: ${cap.message}` : `polly#160 capability: ${cap.name} requires its precondition`,
2749
+ expression: `(!(${cap.enabledBy})) || (${cap.requires})`
2750
+ });
2751
+ }
2752
+ }
2697
2753
  addTemporalConstraints(constraints) {
2698
2754
  this.line("\\* Tier 2: Temporal constraint invariants");
2699
2755
  this.line("\\* Enforce ordering requirements between message types");
@@ -3083,7 +3139,9 @@ class DockerRunner {
3083
3139
  "tlc",
3084
3140
  "-workers",
3085
3141
  `${options?.workers || 1}`,
3086
- "-cleanup"
3142
+ "-cleanup",
3143
+ "-metadir",
3144
+ "/tmp/states"
3087
3145
  ];
3088
3146
  if (options?.maxDepth !== undefined && options.maxDepth > 0) {
3089
3147
  args.push("-depth", `${options.maxDepth}`);
@@ -3145,6 +3203,9 @@ class DockerRunner {
3145
3203
  return trace;
3146
3204
  }
3147
3205
  extractError(output) {
3206
+ if (/StatePool\w*\.run/.test(output) && /states\/.*No such file or directory/.test(output)) {
3207
+ return "TLC state-pool IO failure (states/.../<n>: No such file or directory). This is a Docker filesystem flake, not a spec error — re-run the verification. See issue #152.";
3208
+ }
3148
3209
  const errorMatch = output.match(/Error: (.*?)(?:\n|$)/);
3149
3210
  if (errorMatch?.[1]) {
3150
3211
  return errorMatch[1];
@@ -3905,6 +3966,85 @@ function generateConfig(analysis, projectType = "chrome-extension") {
3905
3966
  // tools/verify/src/config/parser.ts
3906
3967
  import * as fs from "node:fs";
3907
3968
  import * as path from "node:path";
3969
+
3970
+ // tools/verify/src/config/capability-validation.ts
3971
+ init_expression_validator();
3972
+ function validateCapabilities(capabilities, stateConfig) {
3973
+ if (!capabilities || capabilities.length === 0)
3974
+ return [];
3975
+ const issues = [];
3976
+ const configKeys = new Set(Object.keys(stateConfig));
3977
+ for (const cap of capabilities) {
3978
+ const name = cap.name?.trim();
3979
+ if (!name) {
3980
+ issues.push({
3981
+ type: "invalid_value",
3982
+ severity: "error",
3983
+ field: "capabilities",
3984
+ message: "Capability is missing a name.",
3985
+ suggestion: "Give each capability a unique name; it becomes the TLA+ invariant identifier."
3986
+ });
3987
+ continue;
3988
+ }
3989
+ issues.push(...validateExpression(name, "enabledBy", cap.enabledBy, configKeys, stateConfig), ...validateExpression(name, "requires", cap.requires, configKeys, stateConfig));
3990
+ }
3991
+ return issues;
3992
+ }
3993
+ function validateExpression(name, slot, expr, configKeys, stateConfig) {
3994
+ const field = `capabilities.${name}.${slot}`;
3995
+ if (!expr?.trim()) {
3996
+ return [
3997
+ {
3998
+ type: "capability_empty_expression",
3999
+ severity: "error",
4000
+ field,
4001
+ message: `Capability "${name}" has an empty ${slot} expression.`,
4002
+ suggestion: `Provide a state expression for ${slot}, e.g. "state.authenticated".`
4003
+ }
4004
+ ];
4005
+ }
4006
+ const refs = extractFieldRefs(expr);
4007
+ if (refs.length === 0) {
4008
+ return [
4009
+ {
4010
+ type: "capability_empty_expression",
4011
+ severity: "error",
4012
+ field,
4013
+ message: `Capability "${name}" ${slot} expression "${expr}" references no state field.`,
4014
+ suggestion: 'Reference state via the state./.value form (e.g. "state.authReady"); a bare identifier produces a silently-vacuous invariant.'
4015
+ }
4016
+ ];
4017
+ }
4018
+ return refs.filter((ref) => !fieldInConfig(ref, configKeys, stateConfig)).map((ref) => ({
4019
+ type: "capability_unknown_field",
4020
+ severity: "error",
4021
+ field,
4022
+ message: `Capability "${name}" ${slot} references "${ref}", which is not in the state config.`,
4023
+ suggestion: `Add "${ref}" to state, or correct the expression. Known fields: ${[...configKeys].join(", ")}`
4024
+ }));
4025
+ }
4026
+ function validateCoupledFields(coupledFields, stateConfig) {
4027
+ if (!coupledFields || coupledFields.length === 0)
4028
+ return [];
4029
+ const issues = [];
4030
+ const configKeys = new Set(Object.keys(stateConfig));
4031
+ coupledFields.forEach((group, i) => {
4032
+ for (const field of group) {
4033
+ if (!fieldInConfig(field, configKeys, stateConfig)) {
4034
+ issues.push({
4035
+ type: "coupled_unknown_field",
4036
+ severity: "error",
4037
+ field: `coupledFields[${i}]`,
4038
+ message: `Coupled field "${field}" is not in the state config.`,
4039
+ suggestion: `Use a declared state field. Known fields: ${[...configKeys].join(", ")}`
4040
+ });
4041
+ }
4042
+ }
4043
+ });
4044
+ return issues;
4045
+ }
4046
+
4047
+ // tools/verify/src/config/parser.ts
3908
4048
  class ConfigValidator {
3909
4049
  issues = [];
3910
4050
  validate(configPath) {
@@ -4027,6 +4167,8 @@ class ConfigValidator {
4027
4167
  if (config.subsystems) {
4028
4168
  this.validateSubsystems(config.subsystems, config.state, config.messages);
4029
4169
  }
4170
+ this.issues.push(...validateCapabilities(config.capabilities, config.state));
4171
+ this.issues.push(...validateCoupledFields(config.coupledFields, config.state));
4030
4172
  }
4031
4173
  findNullPlaceholders(obj, path2) {
4032
4174
  if (obj === null || obj === undefined) {
@@ -7936,6 +8078,28 @@ function getMaxDepth(config) {
7936
8078
  }
7937
8079
  return;
7938
8080
  }
8081
+ async function runCoupledFieldsLint(config, analysis) {
8082
+ const groups = config.coupledFields ?? [];
8083
+ if (groups.length === 0)
8084
+ return;
8085
+ const { checkCoupledFields: checkCoupledFields2 } = await Promise.resolve().then(() => exports_coupled_fields);
8086
+ const result = checkCoupledFields2(groups, analysis.handlers);
8087
+ if (result.valid) {
8088
+ console.log(color("✓ Coupled fields: verified (no partial-subset writes)", COLORS.green));
8089
+ console.log();
8090
+ return;
8091
+ }
8092
+ console.log(color(`⚠️ Coupled-field violations detected:
8093
+ `, COLORS.yellow));
8094
+ for (const v of result.violations) {
8095
+ console.log(color(` • Handler "${v.handler}" writes {${v.written.join(", ")}} but not {${v.missing.join(", ")}} of coupled group {${v.group.join(", ")}}`, COLORS.yellow));
8096
+ }
8097
+ console.log();
8098
+ console.log(color(" These fields are declared to move together; a capability granted without its", COLORS.yellow));
8099
+ console.log(color(" precondition is a likely cause. Co-write the full group in each handler, or model", COLORS.yellow));
8100
+ console.log(color(" the relationship with a `capabilities` invariant.", COLORS.yellow));
8101
+ console.log();
8102
+ }
7939
8103
  async function runFullVerification(configPath) {
7940
8104
  const config = await loadVerificationConfig(configPath);
7941
8105
  const analysis = await runCodebaseAnalysis();
@@ -7948,6 +8112,7 @@ async function runFullVerification(configPath) {
7948
8112
  }
7949
8113
  const declaredMeshDocs = new Set(Object.keys(typedConfig.mesh ?? {}));
7950
8114
  displayMeshOrPeerSignalWarnings(typedAnalysis, declaredMeshDocs);
8115
+ await runCoupledFieldsLint(typedConfig, typedAnalysis);
7951
8116
  if (typedConfig.subsystems && Object.keys(typedConfig.subsystems).length > 0) {
7952
8117
  await runSubsystemVerification(typedConfig, typedAnalysis);
7953
8118
  return;
@@ -8388,4 +8553,4 @@ main().catch((error) => {
8388
8553
  process.exit(1);
8389
8554
  });
8390
8555
 
8391
- //# debugId=2F2FDDDA92F1E27664756E2164756E21
8556
+ //# debugId=43F6AECD3B4E1E6264756E2164756E21