@dotrino/identity 0.74.0 → 0.75.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/identity",
3
- "version": "0.74.0",
3
+ "version": "0.75.0",
4
4
  "description": "Identidad y rating de usuarios compartidos entre apps de Dotrino (vault iframe + postMessage)",
5
5
  "type": "module",
6
6
  "main": "src/index.js",
package/vault/acta.js CHANGED
@@ -103,7 +103,7 @@ const conCampoSellador = (acta) => Number(acta?.v) < V_SIN_CAMPO_SELLADOR
103
103
  * el rol de master, que no se delega. Así un dispositivo con `admin` robado hace daño
104
104
  * acotado y **reversible** (se le revoca), en vez de poder dejarte fuera de tu cuenta.
105
105
  */
106
- export const CAPS = Object.freeze(['sign', 'store', 'read', 'secrets', 'admin', 'approve', 'passwords', 'sealer'])
106
+ export const CAPS = Object.freeze(['sign', 'store', 'read', 'secrets', 'admin', 'approve', 'passwords', 'sealer', 'unattended'])
107
107
 
108
108
  /** Capacidades de un DISPOSITIVO (sin CN): acceso a todo lo del usuario. */
109
109
  /**
@@ -116,8 +116,22 @@ export const CAPS = Object.freeze(['sign', 'store', 'read', 'secrets', 'admin',
116
116
  * dominio; nunca lista la bóveda. Va aquí y no en una lista aparte porque quién puede
117
117
  * pedirle algo a la bóveda es exactamente lo que decide el acta — tener dos registros
118
118
  * de lo mismo obliga a acordarse de los dos al quitar un aparato.
119
+ *
120
+ * `unattended` es RECIBIR CLAVES PRIVADAS SIN QUE NADIE APRUEBE. Sin él, la bóveda no
121
+ * entrega nada hasta que un aparato con `approve` lo firme — una vez por arranque del
122
+ * servicio, no por petición.
123
+ *
124
+ * El defecto es al revés que antes, y esa es la gracia (dueño, 2026-09-01): antes había
125
+ * que marcar a mano quién NECESITA aprobación, así que un aparato nuevo nacía pudiendo
126
+ * llevarse las claves y nadie se enteraba de que esa era la elección. Ahora hay que
127
+ * conceder a propósito quién puede llevárselas SOLO — y si el dato falta, se pide permiso,
128
+ * que es lo que hay que hacer cuando no se sabe.
129
+ *
130
+ * Y va EN EL ACTA, no en una marca local de una máquina: así lo respeta cualquier bóveda
131
+ * de la cuenta, se ve en la pantalla de permisos como los demás, y se quita quitándolo —
132
+ * sin acordarse de un segundo registro escondido.
119
133
  */
120
- export const DEVICE_CAPS = Object.freeze(['sign', 'store', 'read', 'admin', 'approve', 'passwords', 'sealer'])
134
+ export const DEVICE_CAPS = Object.freeze(['sign', 'store', 'read', 'admin', 'approve', 'passwords', 'sealer', 'unattended'])
121
135
 
122
136
  /**
123
137
  * Lo que recibe un dispositivo recién emparejado. `admin` **no está**: no se
package/vault/remote.js CHANGED
@@ -366,8 +366,12 @@ export async function requestDevices ({ master, proxy, device, cert, sinceSeq, o
366
366
  */
367
367
  export async function requestRenew ({ master, proxy, device, cert, onRevoked } = {}) {
368
368
  const res = await vaultRpc({ master, proxy, device, cert, onRevoked, sendType: 'vault.renew', okType: 'vault.renewed', data: { op: 'renew' } })
369
- if (!res.cert || res.cert.sub !== device.publickey || res.cert.iss !== master) throw new Error('invalid renewed cert')
370
- return { cert: res.cert }
369
+ if (!res.cert || res.cert.sub !== device.publickey) throw new Error('invalid renewed cert')
370
+ // EL ACTA VIAJA CON EL PAPEL y hay que dejarla pasar: quien lo recibe la necesita para
371
+ // comprobar que lo firmó una SELLADORA de este perfil. Aquí se comparaba `cert.iss` con
372
+ // la maestra y se tiraba el acta, así que arriba no había con qué juzgar y la renovación
373
+ // fallaba con «the vault did not send its record» — con el papel correcto en la mano.
374
+ return { cert: res.cert, acta: res.acta || null }
371
375
  }
372
376
 
373
377
  /**