@dotrino/vaultd 0.135.0 → 0.136.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/package.json +1 -1
  2. package/src/vault.js +12 -2
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dotrino/vaultd",
3
- "version": "0.135.0",
3
+ "version": "0.136.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/vault.js CHANGED
@@ -2080,10 +2080,20 @@ export async function startVault ({ dir = dataDir(), proxyUrl, log = console.log
2080
2080
  needsApproval: async (pub) => needsApproval(pub, await refreshActa()),
2081
2081
  // El teléfono: se apunta el pedido, se le avisa y esta promesa espera su firma.
2082
2082
  // Es el mismo camino que ya recorren los cajones de secretos.
2083
- approve: async ({ pubkey, op }) => {
2083
+ // EL PEDIDO DICE QUÉ SE QUIERE LEER (dueño, 2026-09-30: «es importante que se sepa el
2084
+ // porqué»). Antes salía como `read` sin contexto, y el teléfono enseñaba «pide tus claves
2085
+ // de passwords · no dice qué está ejecutando», que parece un servicio desconocido cuando
2086
+ // es tu extensión pidiendo una contraseña. Ahora es `kind: 'passwords'` con la operación y
2087
+ // los CAMPOS (`password`, `totp`…) — nunca la entrada ni el sitio, que no se ven aquí.
2088
+ // Va sellado al que aprueba, como el comando de un pedido de claves.
2089
+ approve: async ({ pubkey, op, payload }) => {
2084
2090
  let resolve
2085
2091
  const espera = new Promise((r) => { resolve = r })
2086
- await awaitApproval({ device: pubkey, ns: 'passwords', kind: 'read', what: 'passwords', op, onAnswer: resolve })
2092
+ const fields = Array.isArray(payload?.keys) ? payload.keys.slice(0, 12).map((k) => String(k).slice(0, 40)) : null
2093
+ await awaitApproval({
2094
+ device: pubkey, ns: 'passwords', kind: 'passwords', what: 'passwords', op,
2095
+ ctx: { op: String(op || '').replace(/^pm2\./, ''), fields }, onAnswer: resolve
2096
+ })
2087
2097
  return espera
2088
2098
  },
2089
2099
  audit,