@dotrino/vaultd 0.7.0 → 0.7.1

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.
@@ -33,8 +33,21 @@ if (process.argv.includes('--tui')) {
33
33
  if (!process.stdout.isTTY) {
34
34
  console.error('--tui necesita un terminal interactivo (TTY). La bóveda sigue corriendo sin él.')
35
35
  } else {
36
+ // La TUI se adueña de la pantalla (pantalla alterna + modo crudo). Si el daemon sigue
37
+ // escribiendo sus logs en stdout, se los pinta ENCIMA y la deja ilegible. Se guardan
38
+ // y se sueltan al salir, para no perder un error por el camino.
39
+ const real = { log: console.log, error: console.error, warn: console.warn }
40
+ const guardados = []
41
+ const capturar = (nivel) => (...a) => { guardados.push([nivel, a]) }
42
+ console.log = capturar('log'); console.error = capturar('error'); console.warn = capturar('warn')
43
+
36
44
  const { runTui } = await import('../src/tui/app.js')
37
- await runTui() // al salir de la TUI, se para todo: es la misma ventana
45
+ try {
46
+ await runTui() // al salir de la TUI, se para todo: es la misma ventana
47
+ } finally {
48
+ Object.assign(console, real)
49
+ for (const [nivel, a] of guardados) real[nivel](...a)
50
+ }
38
51
  process.exit(0)
39
52
  }
40
53
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dotrino/vaultd",
3
- "version": "0.7.0",
3
+ "version": "0.7.1",
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": {
@@ -88,10 +88,21 @@ function writeReq (name, obj, profile) {
88
88
  try { fs.chmodSync(p(name), 0o600) } catch (_) {}
89
89
  }
90
90
 
91
+ /**
92
+ * Campanita para que el daemon lea la petición YA.
93
+ *
94
+ * Es best-effort A PROPÓSITO: SIGUSR1/SIGUSR2 **no existen en Windows** y ahí
95
+ * `process.kill` con ellas revienta — antes eso tumbaba la TUI entera (el CLI ya se había
96
+ * arreglado; este camino, que es el que usa la TUI, no). El daemon vigila su directorio de
97
+ * datos, así que la petición se atiende igual en cuanto el archivo está escrito; la señal
98
+ * solo ahorra la latencia del vigilante.
99
+ *
100
+ * Lo que SÍ sigue siendo un error es que el daemon no esté: sin él no hay quien atienda.
101
+ */
91
102
  function signal (sig) {
92
103
  const s = readState()
93
104
  if (!s || !pidAlive(s.pid)) throw new DaemonDownError()
94
- process.kill(s.pid, sig)
105
+ try { process.kill(s.pid, sig) } catch (_) { /* Windows: no hay señales; lo verá el vigilante */ }
95
106
  }
96
107
 
97
108
  /**