@geohar/un-bien 0.7.0 → 0.8.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.
@@ -1,9 +1,10 @@
1
1
  import { writeFileSync } from "node:fs";
2
2
  import { mkdir, readFile, writeFile, chmod, unlink } from "node:fs/promises";
3
3
  import { dirname, join } from "node:path";
4
- import { generateEd25519Keypair } from "./crypto.js";
4
+ import { generateEd25519Keypair, ed25519KeypairFromSeed, } from "./crypto.js";
5
5
  import { canonicalizeEd25519PublicKey } from "../mesh/encoding.js";
6
6
  import { unbienStateHome } from "../paths.js";
7
+ import { loadConfig } from "../config.js";
7
8
  /**
8
9
  * Pi-secret storage (plan/27 Wave E1).
9
10
  *
@@ -44,8 +45,9 @@ export class KeyringUnavailableError extends Error {
44
45
  constructor(cause) {
45
46
  super("Platform keyring is unreadable and no file-backed identity exists. " +
46
47
  "Refusing to generate a NEW identity (that would break existing " +
47
- "pairing). Unlock your keychain / start your secret service and retry. " +
48
- "Set UNBIEN_ALLOW_FILE_IDENTITY=1 to force a file-backed identity. " +
48
+ "pairing). Unlock your keychain / start your secret service and retry, " +
49
+ 'or select the file backend with `"identity": { "storage": "file" }` ' +
50
+ "in un-bien.json for a headless host. " +
49
51
  `Cause: ${String(cause)}`);
50
52
  this.name = "KeyringUnavailableError";
51
53
  }
@@ -66,6 +68,20 @@ export class PairedIdentityMissingError extends Error {
66
68
  this.name = "PairedIdentityMissingError";
67
69
  }
68
70
  }
71
+ /** Raised when the file-backend identity EXISTS but cannot be read or parsed
72
+ * (bad permissions, corruption). Treating that as "no identity" would let the
73
+ * resolver mint a fresh seed over a real one — the file-side version of the
74
+ * flop — so we FAIL LOUD instead of minting. */
75
+ export class FileIdentityUnreadableError extends Error {
76
+ constructor(path, cause) {
77
+ super(`The identity file at ${path} exists but could not be read/parsed. ` +
78
+ "Refusing to generate a NEW identity (that would break existing " +
79
+ "pairing). Fix the file's permissions/contents and retry, or point " +
80
+ "`identity.path` at the correct file. " +
81
+ `Cause: ${String(cause)}`);
82
+ this.name = "FileIdentityUnreadableError";
83
+ }
84
+ }
69
85
  const PI_DIR = unbienStateHome();
70
86
  const IDENTITY_FILE = join(PI_DIR, "identity.json");
71
87
  const PEERS_PATH = join(PI_DIR, "peers.json");
@@ -218,178 +234,366 @@ function _serialize(kp) {
218
234
  return JSON.stringify(payload);
219
235
  }
220
236
  function _deserialize(stored) {
221
- const parsed = JSON.parse(stored);
222
- return {
223
- publicKey: Buffer.from(parsed.pk, "base64"),
224
- secretKey: Buffer.from(parsed.sk, "base64"),
225
- };
237
+ let parsed;
238
+ try {
239
+ parsed = JSON.parse(stored);
240
+ }
241
+ catch (err) {
242
+ throw new Error(`identity is not valid JSON: ${err instanceof Error ? err.message : String(err)}`);
243
+ }
244
+ if (typeof parsed !== "object" ||
245
+ parsed === null ||
246
+ typeof parsed.pk !== "string" ||
247
+ typeof parsed.sk !== "string") {
248
+ throw new Error("identity JSON must be an object with base64 `pk` and `sk` strings");
249
+ }
250
+ const { pk, sk } = parsed;
251
+ const publicKey = Buffer.from(pk, "base64");
252
+ const secretKey = Buffer.from(sk, "base64");
253
+ if (publicKey.length !== 32) {
254
+ throw new Error(`identity public key must decode to 32 bytes (got ${publicKey.length})`);
255
+ }
256
+ return { publicKey, secretKey };
226
257
  }
227
- // ── File fallback (headless Linux) ──────────────────────────────────────────
228
- async function _readKeypairFromFile() {
258
+ /**
259
+ * The operator-selected PRIMARY store (`identity.storage` in un-bien.json),
260
+ * default keychain. Forced to `"file"` when this process has no usable keyring
261
+ * (Bun-built pi / native binding failed to load) — there is no keychain to
262
+ * select. Note the config may still say `"keychain"` on headless Linux; the
263
+ * read simply throws there and the genuine-first-run mint falls to a file
264
+ * identity exactly as before.
265
+ */
266
+ function _selectedStorageBackend() {
267
+ if (_nativeBindingUnavailable())
268
+ return "file";
269
+ return loadConfig().identity?.storage === "file" ? "file" : "keychain";
270
+ }
271
+ /** Resolved file-backend path (`identity.path` in un-bien.json), default
272
+ * `~/.pi/un-bien/identity.json`. */
273
+ function _identityFilePath() {
274
+ const p = loadConfig().identity?.path;
275
+ return p && p.length > 0 ? p : IDENTITY_FILE;
276
+ }
277
+ function _isENOENT(err) {
278
+ return (typeof err === "object" &&
279
+ err !== null &&
280
+ "code" in err &&
281
+ err.code === "ENOENT");
282
+ }
283
+ // ── env override ────────────────────────────────────────────────────────────
284
+ /**
285
+ * `UNBIEN_IDENTITY_SEED` — a read-only override that always WINS when set. The
286
+ * operator populates it themselves (e.g. `cat` the identity file into it, or a
287
+ * base64 32-byte seed); un-bien NEVER writes it. Accepts either the identity
288
+ * JSON (`{pk,sk}`, i.e. the file's contents) or a bare base64 32-byte Ed25519
289
+ * seed. A malformed value THROWS rather than being silently ignored — a
290
+ * supplied-but-broken override is an operator error worth surfacing.
291
+ */
292
+ function _keypairFromEnvOverride() {
293
+ const raw = process.env["UNBIEN_IDENTITY_SEED"];
294
+ if (!raw)
295
+ return null;
296
+ const trimmed = raw.trim();
297
+ if (trimmed.length === 0)
298
+ return null;
299
+ if (trimmed.startsWith("{"))
300
+ return _deserialize(trimmed);
301
+ const seed = Buffer.from(trimmed, "base64");
302
+ if (seed.length !== 32) {
303
+ throw new Error("UNBIEN_IDENTITY_SEED must be the identity JSON ({pk,sk}) or a base64 " +
304
+ `32-byte Ed25519 seed (decoded to ${seed.length} bytes).`);
305
+ }
306
+ return ed25519KeypairFromSeed(seed);
307
+ }
308
+ // ── File backend ────────────────────────────────────────────────────────────
309
+ /**
310
+ * Reads a file-backed identity, distinguishing "genuinely absent" (ENOENT →
311
+ * `null`, a safe first-run signal) from "present but unreadable/corrupt" (→
312
+ * `FileIdentityUnreadableError`). The distinction is load-bearing: treating a
313
+ * corrupt or permission-denied file as "no identity" would let the resolver
314
+ * MINT over an identity that is really there.
315
+ */
316
+ async function _readKeypairFromFile(path) {
317
+ let raw;
318
+ try {
319
+ raw = await readFile(path, "utf8");
320
+ }
321
+ catch (err) {
322
+ if (_isENOENT(err))
323
+ return null;
324
+ throw new FileIdentityUnreadableError(path, err);
325
+ }
229
326
  try {
230
- const raw = await readFile(IDENTITY_FILE, "utf8");
231
327
  return _deserialize(raw);
232
328
  }
233
- catch {
234
- return null;
329
+ catch (err) {
330
+ throw new FileIdentityUnreadableError(path, err);
235
331
  }
236
332
  }
237
- async function _writeKeypairToFile(kp) {
238
- await mkdir(PI_DIR, { recursive: true, mode: 0o700 });
239
- // Best-effort tighten of the dir in case it pre-existed with looser
240
- // permissions (mkdir's mode is only applied to NEW dirs).
333
+ async function _writeKeypairToFile(kp, path) {
334
+ const dir = dirname(path);
335
+ await mkdir(dir, { recursive: true, mode: 0o700 });
336
+ // Best-effort tighten in case the dir pre-existed with looser permissions
337
+ // (mkdir's mode is only applied to NEW dirs).
241
338
  try {
242
- await chmod(PI_DIR, 0o700);
339
+ await chmod(dir, 0o700);
243
340
  }
244
341
  catch {
245
342
  /* not fatal */
246
343
  }
247
- await writeFile(IDENTITY_FILE, _serialize(kp), { mode: 0o600 });
344
+ await writeFile(path, _serialize(kp), { mode: 0o600 });
248
345
  try {
249
- await chmod(IDENTITY_FILE, 0o600);
346
+ await chmod(path, 0o600);
250
347
  }
251
348
  catch {
252
349
  /* not fatal */
253
350
  }
254
351
  }
255
- // ── Public API ──────────────────────────────────────────────────────────────
256
352
  /**
257
- * Returns the Pi-secret Ed25519 keypair, generating + persisting one on
258
- * first call. Resolution order:
259
- * 1. Existing file `~/.pi/un-bien/identity.json`, if present it WINS over
260
- * the keyring. A file identity is only ever written by the headless/
261
- * degraded fallback (step 4) or an explicit `UNBIEN_ALLOW_FILE_IDENTITY`
262
- * opt-in, so its mere presence means this machine established its identity
263
- * as a file and the mobile device paired against THAT pubkey. If the
264
- * platform keyring later becomes readable (D-Bus/libsecret installed, a
265
- * desktop session, or a stale/other entry from another install), reading
266
- * it first would mask the file identity — returning a DIFFERENT key, or
267
- * (when the keyring is empty) minting a fresh one and persisting it —
268
- * silently breaking the existing pairing. So when both exist, file wins.
269
- * 2. New keyring service `dev.unbien.pi` (read retried — a transiently
270
- * locked Keychain throws; we don't treat that as "no key")
271
- * 3. Old keyring service `dev.unbien.mac` (migrate → step 2, delete old)
272
- * 4. Generate a fresh keypair, BUT only when it's safe to: either both
273
- * keyring reads succeeded and returned nothing (genuine first run), or
274
- * the keyring is genuinely unavailable on a platform without a core one
275
- * (headless Linux → a file identity is minted here). On macOS/Windows a
276
- * persistent read failure with no file identity throws
277
- * `KeyringUnavailableError` instead of minting a new key — generating
278
- * there silently breaks existing pairing (the "lost pairing after idle"
279
- * bug). `UNBIEN_ALLOW_FILE_IDENTITY=1` opts back into a file identity
280
- * for headless macOS/Windows hosts.
281
- *
282
- * Idempotent: subsequent calls return the same identity. The migration
283
- * runs at most once per machine (the old entry is deleted after copy).
353
+ * Retried read of the keychain: the new service, then the legacy service
354
+ * (`dev.unbien.mac`, promoted to the new one + deleted — a same-identity
355
+ * service rename, not a mint). `ok:true` with `kp:null` means both reads
356
+ * SUCCEEDED and found nothing (a genuine empty keychain). `ok:false` means the
357
+ * read threw on every attempt (locked/denied/unavailable) the caller must
358
+ * NOT treat that as empty, or it mints over a possibly-present identity.
284
359
  */
285
- export async function getOrCreateEd25519Keypair() {
286
- const backend = _getBackend();
287
- // ── Path 0: an existing file-backed identity wins ──────────────────────
288
- // `~/.pi/un-bien/identity.json` is only ever written by the headless/degraded
289
- // fallback below (or an operator who set UNBIEN_ALLOW_FILE_IDENTITY=1) —
290
- // never on a keyring-backed install. So its presence means THIS machine
291
- // paired against the file key, and the keyring (readable or not, matching or
292
- // not) must not be allowed to mask it. Short-circuit before touching the
293
- // keyring so a keyring that later comes online can't return a different key,
294
- // nor mint a fresh one over the file identity. No file → normal keyring
295
- // resolution below; a headless first run still reaches Path B and mints one.
296
- const existingFile = await _readKeypairFromFile();
297
- if (existingFile)
298
- return existingFile;
299
- // ── Path A: keyring (retried) ──────────────────────────────────────────
300
- // A throw here means the keyring op FAILED — but on macOS/Windows that is
301
- // almost always a transiently locked Keychain (idle/just-woke machine), not
302
- // a missing backend. `read` returns `undefined` for "no such entry" (the
303
- // genuine first-run signal). So we retry on throw, and only a throw that
304
- // SURVIVES every attempt drops us to Path B.
305
- let keyringError;
360
+ async function _readKeychain(backend, promote = true) {
361
+ let lastError;
306
362
  for (let attempt = 0; attempt < _keyringReadAttempts; attempt++) {
307
363
  try {
308
364
  const existing = await backend.read(NEW_SERVICE, ACCOUNT);
309
365
  if (existing)
310
- return _deserialize(existing);
366
+ return { ok: true, kp: _deserialize(existing) };
311
367
  const legacy = await backend.read(OLD_SERVICE, ACCOUNT);
312
368
  if (legacy) {
313
369
  const kp = _deserialize(legacy);
314
- await backend.write(NEW_SERVICE, ACCOUNT, legacy);
315
- await backend.delete(OLD_SERVICE, ACCOUNT);
316
- // Silent migration: writing the chat surface would be premature
317
- // (Pi SDK isn't bound yet at this point in boot) and console
318
- // output bleeds outside the TUI. The presence of an entry under
319
- // NEW_SERVICE is itself the audit signal — re-running migration
320
- // is idempotent and harmless.
321
- return kp;
370
+ // `promote=false` keeps the read side-effect-free (e.g. describeIdentity
371
+ // for `show`); the resolver promotes the legacy entry once.
372
+ if (promote) {
373
+ await backend.write(NEW_SERVICE, ACCOUNT, legacy);
374
+ await backend.delete(OLD_SERVICE, ACCOUNT);
375
+ }
376
+ return { ok: true, kp };
322
377
  }
323
- // Both reads SUCCEEDED and returned nothing → genuine first run on a
324
- // working keyring. Generate and save to the new service.
325
- const fresh = generateEd25519Keypair();
326
- await backend.write(NEW_SERVICE, ACCOUNT, _serialize(fresh));
327
- return fresh;
378
+ return { ok: true, kp: null };
328
379
  }
329
380
  catch (err) {
330
- keyringError = err;
381
+ lastError = err;
331
382
  if (attempt < _keyringReadAttempts - 1) {
332
383
  // Linear backoff — a locked Keychain usually frees within seconds.
333
384
  await _sleep(_keyringRetryDelayMs * (attempt + 1));
334
385
  }
335
386
  }
336
387
  }
337
- // ── Path B: keyring threw on every attempt ─────────────────────────────
338
- // Path 0 already returned any pre-existing file identity; this defensive
339
- // re-check catches a file written concurrently by another Pi process during
340
- // the keyring-retry window (still: use it, never regenerate).
341
- const fromFile = await _readKeypairFromFile();
342
- if (fromFile)
343
- return fromFile;
344
- // No file identity AND the keyring is unreadable. CRITICAL FORK:
345
- //
346
- // - On a platform without a guaranteed keyring (headless Linux, no D-Bus),
347
- // minting a file-backed identity is the documented, correct first-run
348
- // behavior.
349
- // - On macOS/Windows the keyring is a core OS service, so a persistent read
350
- // failure means it's LOCKED/denied — NOT that we're a fresh install.
351
- // Generating a new key here is exactly what silently broke pairing after
352
- // a week idle, and the new key then masks the real Keychain identity via
353
- // the file. So we FAIL LOUD instead, unless the operator explicitly
354
- // opts into a file identity.
355
- const forceFile = process.env.UNBIEN_ALLOW_FILE_IDENTITY === "1";
356
- if (_keyringExpectedAvailable() && !forceFile) {
357
- throw new KeyringUnavailableError(keyringError);
358
- }
359
- // Issues #95 / #69 — minting a NEW identity when devices are already paired
360
- // is destructive, on every platform.
361
- //
362
- // A daemon started by `systemd --user` resolves a different secret-service
363
- // store than the desktop session that ran the pairing, so the keyring read
364
- // fails, this path mints a fresh Ed25519 key, and the SelfRevoke poller then
365
- // finds that key absent from the relay-side owner envelope, concludes it was
366
- // revoked, and wipes `peers.json` the phone silently goes offline a few
367
- // seconds after every `daemon start`. `peers.json` being non-empty is proof
368
- // that a working identity existed, so "no key found" here is a broken
369
- // environment, not a first run. Fail loud and keep the pairing intact; the
370
- // operator can pin the identity to a file (the confirmed workaround) or fix
371
- // the service's keyring access.
372
- if (!forceFile) {
373
- const paired = await listPeers();
374
- if (paired.length > 0) {
375
- throw new PairedIdentityMissingError(paired.length, keyringError);
388
+ return { ok: false, error: lastError };
389
+ }
390
+ // ── Public API ──────────────────────────────────────────────────────────────
391
+ /**
392
+ * Returns this Pi's long-term Ed25519 identity, minting one only on a genuine
393
+ * first run. The seed is portable and its public key (epk) is what the relay
394
+ * routes on and what devices pair against — so this resolver's ONE job is to
395
+ * never change the identity out from under an existing pairing (the "flop").
396
+ *
397
+ * Resolution (operator-selectable backend see design):
398
+ * 0. `UNBIEN_IDENTITY_SEED` env override always wins, read-only.
399
+ * 1. The SELECTED backend (`identity.storage`, default keychain): keychain
400
+ * (retried a locked Keychain throws, which is NOT "empty") or the 0600
401
+ * file at `identity.path`.
402
+ * 2. Migration READ-IN-PLACE of the OTHER backend recovers an existing
403
+ * identity (a keychain key when file is selected, or a file when keychain
404
+ * is selected) WITHOUT writing it through.
405
+ * 3. Generate + persist to the selected backend, but ONLY when every
406
+ * consulted source was genuinely empty. A keychain that THREW on a
407
+ * core-OS-keyring platform (macOS/Windows) is possibly-present
408
+ * `KeyringUnavailableError`, never minted over. Existing pairings →
409
+ * `PairedIdentityMissingError`. A present-but-unreadable file →
410
+ * `FileIdentityUnreadableError`. This is write-only-if-nonexistent: the
411
+ * resolver's only mutation is a genuine-first-run mint.
412
+ *
413
+ * Idempotent. On headless Linux / a Bun-built pi (no usable keyring) the file
414
+ * backend is used automatically.
415
+ */
416
+ export async function getOrCreateEd25519Keypair() {
417
+ // ── Override: an env-supplied seed always wins (read-only) ──────────────
418
+ const override = _keypairFromEnvOverride();
419
+ if (override)
420
+ return override;
421
+ const backend = _getBackend();
422
+ const selected = _selectedStorageBackend();
423
+ const filePath = _identityFilePath();
424
+ let keychain = null;
425
+ if (selected === "keychain") {
426
+ keychain = await _readKeychain(backend);
427
+ if (keychain.ok && keychain.kp)
428
+ return keychain.kp;
429
+ // Migration read-in-place of the file backend (never written through).
430
+ const fromFile = await _readKeypairFromFile(filePath);
431
+ if (fromFile)
432
+ return fromFile;
433
+ }
434
+ else {
435
+ const fromFile = await _readKeypairFromFile(filePath);
436
+ if (fromFile)
437
+ return fromFile;
438
+ // Migration read-in-place of the keychain — only where one could exist.
439
+ if (_keyringExpectedAvailable()) {
440
+ keychain = await _readKeychain(backend);
441
+ if (keychain.ok && keychain.kp)
442
+ return keychain.kp;
376
443
  }
377
444
  }
378
- console.warn(_nativeBindingUnavailable()
379
- ? // Issue #113: the @napi-rs/keyring native binding could not be loaded at
380
- // all (typically a Bun-compiled pi). Name it explicitly the error the
381
- // loader prints blames npm's optional-dependency bug and sends people off
382
- // to delete node_modules, which takes their other pi packages with it.
383
- "[un-bien] @napi-rs/keyring native binding could not be loaded in this " +
384
- `runtime; using file-backed identity at ${IDENTITY_FILE} (0600) instead. ` +
385
- "This is expected on a Bun-built pi. Paired devices keyed to a previous " +
386
- `keyring identity must be re-paired. ${String(keyringError)}`
387
- : "[un-bien] keyring unavailable; using file-backed identity at " +
388
- `${IDENTITY_FILE}. ${String(keyringError)}`);
445
+ // ── Nothing found. Mint — but only when it is SAFE to. ──────────────────
446
+ const keychainThrew = keychain !== null && keychain.ok === false;
447
+ const keychainError = keychain !== null && keychain.ok === false ? keychain.error : null;
448
+ // A keychain that THREW on a platform where it's a core OS service isn't
449
+ // "empty" it's locked/denied and may hold the real identity. Minting now
450
+ // is exactly the flop. Fail loud so the operator unlocks and retries.
451
+ if (keychainThrew && _keyringExpectedAvailable()) {
452
+ throw new KeyringUnavailableError(keychainError);
453
+ }
454
+ // Devices already paired an identity provably existed; "not found" here is
455
+ // a broken environment (classically a systemd --user daemon that can't reach
456
+ // the desktop keyring), not a first run. Minting would let SelfRevoke wipe
457
+ // the pairings (issues #95/#69). Fail loud on every platform.
458
+ const paired = await listPeers();
459
+ if (paired.length > 0) {
460
+ throw new PairedIdentityMissingError(paired.length, keychainError);
461
+ }
462
+ // ── Genuine first run: mint once into the selected backend ──────────────
389
463
  const fresh = generateEd25519Keypair();
390
- await _writeKeypairToFile(fresh);
464
+ const keychainUsable = !_nativeBindingUnavailable() && !keychainThrew;
465
+ if (selected === "keychain" && keychainUsable) {
466
+ await backend.write(NEW_SERVICE, ACCOUNT, _serialize(fresh));
467
+ return fresh;
468
+ }
469
+ // File backend — either selected, or keychain selected but unusable in this
470
+ // process (headless Linux / Bun-built pi), which degrades to a file identity.
471
+ if (selected === "keychain") {
472
+ console.warn(_nativeBindingUnavailable()
473
+ ? "[un-bien] @napi-rs/keyring native binding could not be loaded in " +
474
+ `this runtime; using file-backed identity at ${filePath} (0600) ` +
475
+ "instead. Expected on a Bun-built pi. Paired devices keyed to a " +
476
+ `previous keyring identity must be re-paired. ${String(keychainError)}`
477
+ : "[un-bien] keyring unavailable; using file-backed identity at " +
478
+ `${filePath}. ${String(keychainError)}`);
479
+ }
480
+ await _writeKeypairToFile(fresh, filePath);
391
481
  return fresh;
392
482
  }
483
+ /**
484
+ * Reports the CURRENT identity state WITHOUT minting or mutating anything — the
485
+ * read-only backing for `unbien identity show`. Returns only NON-SECRET fields
486
+ * (epk is public); the private seed is NEVER included, since command output is
487
+ * LLM-visible. Read errors are surfaced as `source:"error"` with a `detail`,
488
+ * not thrown — this is a diagnostic.
489
+ */
490
+ export async function describeIdentity() {
491
+ const backend = _selectedStorageBackend();
492
+ const filePath = _identityFilePath();
493
+ const epkOf = (kp) => Buffer.from(kp.publicKey).toString("base64");
494
+ try {
495
+ const override = _keypairFromEnvOverride();
496
+ if (override)
497
+ return {
498
+ epk: epkOf(override),
499
+ backend,
500
+ source: "env-override",
501
+ filePath,
502
+ };
503
+ }
504
+ catch (err) {
505
+ return {
506
+ epk: null,
507
+ backend,
508
+ source: "error",
509
+ filePath,
510
+ detail: `env override invalid: ${String(err)}`,
511
+ };
512
+ }
513
+ const store = _getBackend();
514
+ const readFileSafe = async () => {
515
+ try {
516
+ const kp = await _readKeypairFromFile(filePath);
517
+ return kp ? { kp } : {};
518
+ }
519
+ catch (err) {
520
+ return { err };
521
+ }
522
+ };
523
+ const readKcSafe = async () => {
524
+ const r = await _readKeychain(store, false);
525
+ return r.ok ? (r.kp ? { kp: r.kp } : {}) : { err: r.error };
526
+ };
527
+ if (backend === "keychain") {
528
+ const kc = await readKcSafe();
529
+ if (kc.kp)
530
+ return { epk: epkOf(kc.kp), backend, source: "keychain", filePath };
531
+ const f = await readFileSafe();
532
+ if (f.kp)
533
+ return {
534
+ epk: epkOf(f.kp),
535
+ backend,
536
+ source: "file",
537
+ filePath,
538
+ detail: "recovered from the file backend (migration read)",
539
+ };
540
+ if (kc.err)
541
+ return {
542
+ epk: null,
543
+ backend,
544
+ source: "error",
545
+ filePath,
546
+ detail: `keychain unreadable: ${String(kc.err)}`,
547
+ };
548
+ if (f.err)
549
+ return {
550
+ epk: null,
551
+ backend,
552
+ source: "error",
553
+ filePath,
554
+ detail: `file unreadable: ${String(f.err)}`,
555
+ };
556
+ }
557
+ else {
558
+ const f = await readFileSafe();
559
+ if (f.kp)
560
+ return { epk: epkOf(f.kp), backend, source: "file", filePath };
561
+ if (f.err)
562
+ return {
563
+ epk: null,
564
+ backend,
565
+ source: "error",
566
+ filePath,
567
+ detail: `file unreadable: ${String(f.err)}`,
568
+ };
569
+ if (_keyringExpectedAvailable()) {
570
+ const kc = await readKcSafe();
571
+ if (kc.kp)
572
+ return {
573
+ epk: epkOf(kc.kp),
574
+ backend,
575
+ source: "keychain",
576
+ filePath,
577
+ detail: "recovered from the keychain (migration read)",
578
+ };
579
+ if (kc.err)
580
+ return {
581
+ epk: null,
582
+ backend,
583
+ source: "error",
584
+ filePath,
585
+ detail: `keychain unreadable: ${String(kc.err)}`,
586
+ };
587
+ }
588
+ }
589
+ return {
590
+ epk: null,
591
+ backend,
592
+ source: "none",
593
+ filePath,
594
+ detail: "no identity yet — one is minted on first use",
595
+ };
596
+ }
393
597
  export async function listPeers() {
394
598
  try {
395
599
  const raw = await readFile(PEERS_PATH, "utf8");
@@ -419,7 +623,13 @@ async function _readPeerContainerStrict() {
419
623
  }
420
624
  throw error;
421
625
  }
422
- const parsed = JSON.parse(raw);
626
+ let parsed;
627
+ try {
628
+ parsed = JSON.parse(raw);
629
+ }
630
+ catch (err) {
631
+ throw new Error(`peers.json is not valid JSON: ${err instanceof Error ? err.message : String(err)}`);
632
+ }
423
633
  if (!Array.isArray(parsed.peers)) {
424
634
  throw new Error("Invalid peers.json container");
425
635
  }
@@ -1 +1 @@
1
- {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/pairing/storage.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/pairing/storage.ts"],"names":[],"mappings":"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"}