@dotrino/vaultd 0.107.2 → 0.108.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dotrino/vaultd",
3
- "version": "0.107.2",
3
+ "version": "0.108.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": {
package/src/tui/app.js CHANGED
@@ -134,7 +134,10 @@ function mergeMembersAndCerts (members, issued) {
134
134
  addedAt: m.addedAt || null,
135
135
  // El master es la propia bóveda: no tiene (ni necesita) certificado. Un servicio
136
136
  // tampoco lleva uno de dispositivo. Marcarlos «sin acceso» sería una alarma falsa.
137
- noAccess: !cert && !m.isMaster && !m.cn
137
+ noAccess: !cert && !m.isMaster && !m.cn,
138
+ // QUÉ CORRE ESE APARATO (CONVENCIONES §14). Lo apunta la bóveda cuando le habla, así
139
+ // que aquí solo hay que dejarlo pasar — que es justo lo que le faltaba a `addedAt`.
140
+ running: m.running || null
138
141
  }
139
142
  })
140
143
  }
@@ -266,8 +269,23 @@ function deviceRows (st, t) {
266
269
  const vars = devVarsOf(st, d.sub).length
267
270
  const debt = debtOf(st, d.sub)
268
271
  const desde = d.addedAt ? t.muted(` ${i.deviceSince}:${fmtExp(d.addedAt)}`) : ''
272
+ // QUÉ VERSIÓN CORRE, y en color de aviso si no cuadra con la nuestra.
273
+ //
274
+ // Sin esto una incompatibilidad de versiones se ve como que ese aparato «no responde»,
275
+ // que es el fallo más caro que ha tenido el ecosistema: el apagón del 1-2 de septiembre
276
+ // fueron tres servicios reintentando cada 60 s contra una bóveda que ya no les
277
+ // entendía, un día entero y sin una sola línea que lo dijera.
278
+ //
279
+ // Un aparato que todavía no ha hablado desde que arrancamos no sale: `null` es «no lo
280
+ // sé», y escribir «desconocido» en cada fila sería ruido, no información.
281
+ const corre = d.running
282
+ ? (d.running.compatible
283
+ ? t.muted(` ${i.runs}:${d.running.version}`)
284
+ : t.warn(` ${i.mismatch(d.running.product, d.running.version)}`))
285
+ : ''
269
286
  const extra = (d.certCount > 1 ? t.muted(` certs:${d.certCount}`) : '') +
270
287
  (vars ? t.muted(` vars:${vars}`) : '') +
288
+ corre +
271
289
  // EN DEUDA: en el acta y sin poder abrir lo suyo. Va en color de aviso al lado de
272
290
  // sus variables, que es donde se mira cuando algo no arranca.
273
291
  (debt ? t.warn(` ${i.deviceDebt(debt)}`) : '')
package/src/tui/i18n.js CHANGED
@@ -166,6 +166,11 @@ const es = {
166
166
  // Está en el acta y no puede entrar: o le retiraron el certificado, o se le venció.
167
167
  deviceNoAccess: 'SIN ACCESO — está en el perfil pero no puede entrar',
168
168
  deviceDebt: (n) => `no abre ${n}`,
169
+ // QUÉ CORRE CADA APARATO (CONVENCIONES §14). `runs` va en gris —es un dato— y el aviso
170
+ // en color, porque una versión que no cuadra es lo que hace que ese aparato parezca
171
+ // apagado cuando en realidad no os entendéis.
172
+ runs: 'corre',
173
+ mismatch: (producto, version) => `⚠ ${producto} ${version} no cuadra`,
169
174
  thisVault: 'esta bóveda (manda ella)',
170
175
  cantRemoveMaster: 'Esta bóveda es la que manda: no se quita a sí misma.',
171
176
  revokedCount: (n) => ` Revocados: ${n}`,
@@ -489,6 +494,8 @@ const en = {
489
494
  noLabel: '(no label)',
490
495
  deviceNoAccess: 'NO ACCESS — it is on the record but cannot get in',
491
496
  deviceDebt: (n) => `cannot open ${n}`,
497
+ runs: 'runs',
498
+ mismatch: (product, version) => `⚠ ${product} ${version} does not match`,
492
499
  thisVault: 'this vault (it is the Master)',
493
500
  cantRemoveMaster: 'This vault is the Master: it does not remove itself.',
494
501
  revokedCount: (n) => ` Revoked: ${n}`,