@dotrino/vault 0.21.0 → 0.22.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/README.md CHANGED
@@ -50,7 +50,7 @@ si la máquina se compromete, revocas el cert y no había nada que robar.
50
50
  ```bash
51
51
  # en el VAULT (tu PC): abres el emparejamiento del servicio y cargas sus secretos
52
52
  dotrino-vault pair --service miapp # invitación con scope SOLO vault:secrets:miapp
53
- dotrino-vault secret set miapp API_KEY sk-…
53
+ dotrino-vault secret set miapp API_KEY sk-… # la comparten TODAS las máquinas del ns
54
54
 
55
55
  # en el PROYECTO/servidor: enrola esta máquina (pega la invitación)
56
56
  npx dotrino-env enroll --ns miapp
@@ -60,6 +60,17 @@ npx dotrino-env enroll --ns miapp
60
60
  dotrino-vault approve 7K3F-92Q1
61
61
  ```
62
62
 
63
+ Si la misma app corre en **varias máquinas**, lo que cambia de una a otra (el puerto,
64
+ la URL pública) va en el cajón **por aparato**, sin partir el `ns`:
65
+
66
+ ```bash
67
+ dotrino-vault devices # el ID del aparato: AB12-CD34
68
+ dotrino-vault secret device set AB12-CD34 PORT 8443 # solo la lee ESA máquina
69
+ ```
70
+
71
+ Llegan **mezcladas en el mismo bundle** —y por lo tanto en el mismo `process.env`—:
72
+ las del scope, con las del aparato **encima** si se llaman igual.
73
+
63
74
  El código lo **genera el servicio** y **no viaja** por la red: el vault solo puede
64
75
  echarlo de vuelta si un humano lo tipeó. Así, un vault falso no puede enrolarte y
65
76
  aprobar a ciegas no enrola a nadie. Queda `~/.dotrino/service/<ns>/service-identity.json`
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dotrino/vault",
3
- "version": "0.21.0",
3
+ "version": "0.22.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",
package/src/enroll.js CHANGED
@@ -104,13 +104,16 @@ export async function deviceIdOf (pub) {
104
104
  * @param {(...a:any[])=>void} [opts.log]
105
105
  * @param {(c:{deviceId:string, scope:any, label:string})=>void} [opts.onChallenge] un dispositivo espera aprobación.
106
106
  * @param {()=>void} [opts.onPendingChange]
107
+ * @param {(sub:string)=>void} [opts.onDeviceRemoved] se quitó un aparato (fuera del acta y sin papeles):
108
+ * para que quien guarde algo indexado por esa llave lo suelte. Se avisa desde AQUÍ y no desde
109
+ * quien llama porque a `revokeDevice` se entra por dos puertas (el PC y la consola remota).
107
110
  * @param {string[]} [opts.defaultScope]
108
111
  * @param {number} [opts.defaultTtlMs]
109
112
  */
110
113
  export function createEnrollDesk ({
111
114
  identity, iss, proxy, send, sendByPubkey,
112
115
  audit = () => {}, log = () => {},
113
- onChallenge = () => {}, onPendingChange = () => {}, onAdopted = () => {},
116
+ onChallenge = () => {}, onPendingChange = () => {}, onAdopted = () => {}, onDeviceRemoved = () => {},
114
117
  defaultScope = ['vault:sign'], defaultTtlMs = DEVICE_TTL_MS,
115
118
  // Camino A: lo que ESTA bóveda le manda al aparato para que la meta en su acta. `encPub`
116
119
  // es su llave de CIFRADO — sin ella entra mandando pero sin poder leer el contenido.
@@ -461,6 +464,7 @@ export function createEnrollDesk ({
461
464
  return done
462
465
  })() }
463
466
  await emitRevoke(sub, mine[0]?.nonce || null)
467
+ fire(onDeviceRemoved, sub)
464
468
  return res
465
469
  }
466
470