@dotrino/vaultd 0.125.0 → 0.126.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.
Files changed (2) hide show
  1. package/package.json +3 -3
  2. package/src/vault.js +13 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dotrino/vaultd",
3
- "version": "0.125.0",
3
+ "version": "0.126.0",
4
4
  "type": "module",
5
5
  "description": "Certificador personal de Dotrino: daemon headless que custodia la clave maestra y delega capacidades a tus dispositivos por el proxy. Tu CA propia.",
6
6
  "bin": {
@@ -22,11 +22,11 @@
22
22
  },
23
23
  "dependencies": {
24
24
  "@dotrino/compat": "0.4.0",
25
- "@dotrino/identity": "0.92.0",
25
+ "@dotrino/identity": "0.101.0",
26
26
  "@dotrino/opaque": "0.1.0",
27
27
  "@dotrino/passmanager": "0.17.0",
28
28
  "@dotrino/proxy-client": "0.23.1",
29
- "@dotrino/roadmap": "0.3.3",
29
+ "@dotrino/roadmap": "0.3.7",
30
30
  "@dotrino/store": "0.11.0",
31
31
  "@dotrino/update": "0.1.1",
32
32
  "ws": "^8.18.0"
package/src/vault.js CHANGED
@@ -3540,6 +3540,19 @@ export async function startVault ({ dir = dataDir(), proxyUrl, log = console.log
3540
3540
  // el acta y lo respeta toda la cuenta. Si falla no se arrastra: abrir el perfil no
3541
3541
  // puede depender de esto, y lo pendiente sigue surtiendo efecto igual.
3542
3542
  if (r?.locked === false) { try { await absorberSubacta('unlock') } catch (_) {} }
3543
+ // Y LOS APARATOS MUERTOS FUERA DEL ACTA, en una sola (dueño, 2026-09-22). Es el mismo
3544
+ // momento: la maestra está en memoria y cambiar el acta es uno de sus dos trabajos.
3545
+ // Si falla no se arrastra —abrir no depende de esto—, pero se dice.
3546
+ if (r?.locked === false) {
3547
+ try {
3548
+ const { removed = [], seq } = await identity.pruneExpiredDevices?.() || {}
3549
+ for (const d of removed) {
3550
+ const id = await deviceIdOf(d.pub).catch(() => null)
3551
+ audit('pruned', { device: id, label: d.label || '', reason: 'expired', seq })
3552
+ log(`[vault] unlock: removed ${id || '????-????'} ${d.label ? `(${d.label}) ` : ''}from the record: its certificate expired and cannot be renewed · record #${seq}`)
3553
+ }
3554
+ } catch (e) { log(`[vault] unlock: could not remove expired devices: ${e.message}`) }
3555
+ }
3543
3556
  return { locked: r?.locked !== false }
3544
3557
  },
3545
3558
  // Forzar un empujón: lo usa `replica push` de la CLI y el smoke, para no depender