@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.
- package/README.md +74 -74
- package/dist/config.d.ts +13 -0
- package/dist/config.js.map +1 -1
- package/dist/index.js +36 -2
- package/dist/index.js.map +1 -1
- package/dist/pairing/crypto.d.ts +4 -0
- package/dist/pairing/crypto.js +10 -0
- package/dist/pairing/crypto.js.map +1 -1
- package/dist/pairing/storage.d.ts +51 -26
- package/dist/pairing/storage.js +346 -136
- package/dist/pairing/storage.js.map +1 -1
- package/package.json +1 -1
package/dist/pairing/storage.js
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
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
|
-
|
|
228
|
-
|
|
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
|
-
|
|
329
|
+
catch (err) {
|
|
330
|
+
throw new FileIdentityUnreadableError(path, err);
|
|
235
331
|
}
|
|
236
332
|
}
|
|
237
|
-
async function _writeKeypairToFile(kp) {
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
//
|
|
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(
|
|
339
|
+
await chmod(dir, 0o700);
|
|
243
340
|
}
|
|
244
341
|
catch {
|
|
245
342
|
/* not fatal */
|
|
246
343
|
}
|
|
247
|
-
await writeFile(
|
|
344
|
+
await writeFile(path, _serialize(kp), { mode: 0o600 });
|
|
248
345
|
try {
|
|
249
|
-
await chmod(
|
|
346
|
+
await chmod(path, 0o600);
|
|
250
347
|
}
|
|
251
348
|
catch {
|
|
252
349
|
/* not fatal */
|
|
253
350
|
}
|
|
254
351
|
}
|
|
255
|
-
// ── Public API ──────────────────────────────────────────────────────────────
|
|
256
352
|
/**
|
|
257
|
-
*
|
|
258
|
-
*
|
|
259
|
-
*
|
|
260
|
-
*
|
|
261
|
-
*
|
|
262
|
-
*
|
|
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
|
-
|
|
286
|
-
|
|
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
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
//
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
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
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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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"}
|