@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 +1 -1
- package/vault/acta.js +16 -2
- package/vault/remote.js +6 -2
package/package.json
CHANGED
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
|
|
370
|
-
|
|
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
|
/**
|