OverviewFilesCommitsIssuesDocsReleasesPeers

hyper-proto-peer commits / fcaaf5a

device-node: hand back the local control socket path
serveDeviceUds opens <storage>/dids/<roomId>/control.sock and bootSwarmDevice kept the path to itself, so a co-located consumer could only reach the device by rebuilding that private layout by hand in another repo. favela-web needs to NAME the socket to enable writes; when it cannot, it refuses them, and the symptom ("writes are DISABLED") surfaces nowhere near the cause. Additive: one field, null when the UDS surface failed to come up. No caller changes. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
fcaaf5ae11e850101fec394f031420696648877d
by plankatron <fleeky@gmail.com> · 2026-08-11T20:50:29.000Z

Changed files (1) +6 -1

lib/device-node.js +6 -1
……@@ -592,7 +592,12 @@ export async function bootSwarmDevice ({ storage, deviceMnemonic, did, signingKe
592592 // `blobs` is exposed because an IN-PROCESS consumer needs it: favela-android runs this daemon inside
593593 // the app, so its UI reaches blobs through the object rather than the `upload-blob`/`get-blob` RPCs the
594594 // co-located (favela-web over UDS) and remote (bridge over swarm) consumers use. Same store, no surface.
595 return { device, sb, did, self, blobs: blobStore, control: serving, membrane: membraneServing, controlSwarm, overlay: recordOverlay, repoRoot, reconcile, close, _sideStore: resyncStore, _statebaseStore: keepLocalStatebase ? sb.store : null }
595 // `uds` is the LOCAL control socket path (or null if that surface failed to come up). Exposed because
596 // the co-located consumer needs to NAME it: favela-web reaches this device over that socket, and the
597 // only alternative is for the caller to re-derive `<storage>/dids/<roomId>/control.sock` from hpp's
598 // internal directory layout — a private path rebuilt by hand in another repo, which breaks the day this
599 // moves and surfaces as "writes are disabled" nowhere near the cause. hpp knows the path; hpp says it.
600 return { device, sb, did, self, blobs: blobStore, control: serving, membrane: membraneServing, controlSwarm, overlay: recordOverlay, repoRoot, reconcile, close, uds: udsServing ? udsServing.uds : null, _sideStore: resyncStore, _statebaseStore: keepLocalStatebase ? sb.store : null }
596601}
597602
598603// ── RESYNC (fresh-corestore re-join) index ────────────────────────────────────────────────────────