@dotrino/vault 0.69.0 → 0.70.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/bin/dotrino-env.js +39 -2
  2. package/package.json +3 -2
@@ -24,8 +24,38 @@ import { loadEnv, serviceDir, serviceRoot, listEnrolled, resolveNs, resolveVault
24
24
  // proxy) lo hizo con su propio `enroll-vault.js` en vez de con esta CLI.
25
25
  import { parseInvite as sharedParseInvite } from '../src/invite.js'
26
26
  import { selfContext, commandLine } from '../src/proc.js'
27
+ import { updateNotice } from '@dotrino/update/notice'
28
+ import { PKG_VERSION as VERSION } from '../src/version.js'
27
29
 
28
30
  const argv = process.argv.slice(2)
31
+
32
+ /**
33
+ * ¿HAY UN dotrino-env MÁS NUEVO? (CONVENCIONES §15)
34
+ *
35
+ * La regla que manda en un comando: **avisar no puede hacer lenta la orden**. Por eso la
36
+ * consulta ARRANCA aquí, antes de hacer nada, y se recoge al terminar: mientras corre lo que
37
+ * el usuario pidió —un `run` dura lo que dure su programa— la pregunta ya está contestada, y
38
+ * lo normal es que no cueste ni un milisegundo. Una vez al día; el resto sale de caché.
39
+ *
40
+ * Se compara contra `@dotrino/env`, que es lo que la gente instala, con la versión del
41
+ * código que corre: son la misma por construcción (`packaging/release-env.mjs` las fija
42
+ * iguales al publicar).
43
+ *
44
+ * La línea va por STDERR: `dotrino-env run` le cede stdout a otro programa, y colarle ahí
45
+ * una cortesía es romperle la tubería a quien lo esté canalizando.
46
+ */
47
+ const avisoVersion = updateNotice({
48
+ current: VERSION, source: 'npm', pkg: '@dotrino/env', product: 'dotrino-env'
49
+ }).catch(() => null)
50
+
51
+ /** Lo dice, si hay algo que decir, con un tope: nunca retiene la salida más de 1,5 s. */
52
+ let avisoDicho = false
53
+ async function decirAvisoVersion () {
54
+ if (avisoDicho) return
55
+ avisoDicho = true
56
+ const linea = await Promise.race([avisoVersion, new Promise((resolve) => setTimeout(() => resolve(null), 1500).unref())])
57
+ if (linea) process.stderr.write(`\n[dotrino-env] ${linea} · actualiza con: npm i -g @dotrino/env\n`)
58
+ }
29
59
  const flag = (name) => { const i = argv.indexOf('--' + name); return i >= 0 ? argv[i + 1] : undefined }
30
60
 
31
61
  /**
@@ -275,7 +305,8 @@ async function cmdRun () {
275
305
  console.error('[dotrino-env] %d valor(es) en el entorno de %s%s', injected.length, cmd[0],
276
306
  overridden.length ? ` (pisados: ${overridden.join(', ')})` : '')
277
307
  const child = spawn(cmd[0], cmd.slice(1), { stdio: 'inherit', env: process.env })
278
- child.on('exit', (code, signal) => process.exit(signal ? 1 : (code ?? 0)))
308
+ // Al terminar el programa, no antes: mientras corría, la consulta ya se contestó.
309
+ child.on('exit', async (code, signal) => { await decirAvisoVersion(); process.exit(signal ? 1 : (code ?? 0)) })
279
310
  }
280
311
 
281
312
  /**
@@ -329,4 +360,10 @@ const run = async () => {
329
360
  }
330
361
  }
331
362
 
332
- run().catch((e) => { console.error('\n[dotrino-env] ' + e.message); process.exit(1) })
363
+ run()
364
+ // `run` y `ssh-agent` NO avisan aquí, y hay que hacerlo cumplir, no solo decirlo: `cmdRun`
365
+ // termina en cuanto LANZA el programa, así que este `.then` lo diría mientras el programa
366
+ // aún corre, mezclado con su salida. `run` avisa cuando su hijo sale; `ssh-agent` no
367
+ // termina nunca. Aquí llegan las órdenes cortas.
368
+ .then(() => (['run', 'ssh-agent'].includes(argv[0]) ? null : decirAvisoVersion()))
369
+ .catch((e) => { console.error('\n[dotrino-env] ' + e.message); process.exit(1) })
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dotrino/vault",
3
- "version": "0.69.0",
3
+ "version": "0.70.0",
4
4
  "description": "Usa ESTE dispositivo (navegador) como bóveda/CA del ecosistema Dotrino: atiende enrolamientos por el proxy y firma certificados de delegación a tus máquinas. Incluye el cliente de SERVICIO (Node): un proyecto se enrola una vez y jala sus credenciales del vault en vez del .env (`import '@dotrino/vault/config'`).",
5
5
  "type": "module",
6
6
  "main": "src/index.js",
@@ -73,6 +73,7 @@
73
73
  "type-check": "tsc --noEmit"
74
74
  },
75
75
  "dependencies": {
76
- "@dotrino/opaque": "0.1.0"
76
+ "@dotrino/opaque": "0.1.0",
77
+ "@dotrino/update": "0.1.1"
77
78
  }
78
79
  }