@dotrino/vaultd 0.131.0 → 0.131.2

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 +2 -2
  2. package/src/daemon.js +27 -5
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dotrino/vaultd",
3
- "version": "0.131.0",
3
+ "version": "0.131.2",
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": {
@@ -28,7 +28,7 @@
28
28
  "@dotrino/proxy-client": "0.24.0",
29
29
  "@dotrino/roadmap": "0.3.7",
30
30
  "@dotrino/store": "0.11.0",
31
- "@dotrino/update": "0.2.1",
31
+ "@dotrino/update": "0.2.2",
32
32
  "ws": "^8.18.0"
33
33
  },
34
34
  "license": "MIT",
package/src/daemon.js CHANGED
@@ -1025,12 +1025,24 @@ export async function runDaemon () {
1025
1025
  * Lo que arregla es lo que de verdad dolió el 2026-09-19: el replicador llevaba quince
1026
1026
  * días atrás y las bóvedas dos versiones, y NADA lo decía en ninguna pantalla.
1027
1027
  *
1028
- * Si no se puede mirar, no se dice nada y ya está: no saber si hay versión nueva no es un
1029
- * problema del usuario, y llenarle el log de fallos de red tampoco ayuda.
1028
+ * SI NO SE PUEDE MIRAR, SE DICE — una vez por motivo, no en cada intento. Antes se callaba
1029
+ * («no saber si hay versión nueva no es un problema del usuario»), y eso choca con §15:
1030
+ * «no se pudo mirar» NUNCA es «estás al día». El 2026-09-24 una bóveda se quedó en la
1031
+ * 0.130.0 con la 0.131.0 publicada y el log no decía nada: no había forma de saber si
1032
+ * estaba al día o si no había podido preguntar.
1030
1033
  */
1034
+ let ultimoFallo = null
1031
1035
  const mirarRelease = async () => {
1032
- const r = await latestRelease()
1033
- if (!r.ok) return
1036
+ let r
1037
+ try { r = await latestRelease() } catch (e) { r = { ok: false, reason: e?.message || String(e) } }
1038
+ if (!r.ok) {
1039
+ if (r.reason !== ultimoFallo) console.log(`[vault] could not check for a new version: ${r.reason} · trying again in an hour`)
1040
+ ultimoFallo = r.reason
1041
+ // Un fallo al arrancar (la red todavía no está) no puede costar un día entero.
1042
+ setTimeout(mirarRelease, 60 * 60_000).unref?.()
1043
+ return
1044
+ }
1045
+ ultimoFallo = null
1034
1046
  ultimaPublicada = { version: r.version, checkedAt: Date.now() }
1035
1047
  writeState()
1036
1048
  if (!isNewer(r.version, daemonVersion)) return
@@ -1074,7 +1086,17 @@ export async function runDaemon () {
1074
1086
  console.log(`[vault] update to ${r.version} NOT installed: ${res.reason}${res.file ? ` (file left at ${res.file})` : ''}`)
1075
1087
  return
1076
1088
  }
1077
- console.log(`[vault] update: ${r.version} installed · the service restarts on its own`)
1089
+ // SE REINICIA YA, no cuando lo note el vigilante: este proceso sabe que acaba de cambiar
1090
+ // el binario. Esperar al vigilante (mira cada minuto y exige verlo dos veces) dejaba ~2
1091
+ // minutos con el CLI y la TUI nuevos hablando con el daemon viejo; el dueño abrió la
1092
+ // TUI justo ahí y no arrancó (2026-09-24). Solo bajo systemd, que es quien nos levanta:
1093
+ // sin él, irnos sería quedarnos apagados.
1094
+ if (vigia) {
1095
+ console.log(`[vault] update: ${r.version} installed · restarting now to run it`)
1096
+ shutdown(`updated to ${r.version}`)
1097
+ } else {
1098
+ console.log(`[vault] update: ${r.version} installed · restart the vault to run it`)
1099
+ }
1078
1100
  } catch (e) {
1079
1101
  console.log(`[vault] update to ${r.version} failed: ${e.message}`)
1080
1102
  } finally { actualizando = false }