@dotrino/identity 0.57.0 → 0.58.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.57.0",
3
+ "version": "0.58.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
@@ -53,10 +53,15 @@ const ACTA_LEIBLES = Object.freeze([1, 2])
53
53
  * el rol de master, que no se delega. Así un dispositivo con `admin` robado hace daño
54
54
  * acotado y **reversible** (se le revoca), en vez de poder dejarte fuera de tu cuenta.
55
55
  */
56
- export const CAPS = Object.freeze(['sign', 'store', 'read', 'secrets', 'admin'])
56
+ export const CAPS = Object.freeze(['sign', 'store', 'read', 'secrets', 'admin', 'approve'])
57
57
 
58
58
  /** Capacidades de un DISPOSITIVO (sin CN): acceso a todo lo del usuario. */
59
- export const DEVICE_CAPS = Object.freeze(['sign', 'store', 'read', 'admin'])
59
+ /**
60
+ * `approve` es el aparato que APRUEBA: cuando un cajón exige aprobación por uso, el
61
+ * vault le avisa y solo su firma libera los secretos (normalmente el teléfono). Como
62
+ * `admin`, no viaja en un QR: se concede a mano (`dotrino-vault caps <ID> +approve`).
63
+ */
64
+ export const DEVICE_CAPS = Object.freeze(['sign', 'store', 'read', 'admin', 'approve'])
60
65
 
61
66
  /**
62
67
  * Lo que recibe un dispositivo recién emparejado. `admin` **no está**: no se
@@ -87,12 +92,13 @@ export function capScope (cap, cn = null) {
87
92
  if (cap === 'store') return 'vault:store'
88
93
  if (cap === 'read') return 'vault:read'
89
94
  if (cap === 'admin') return 'vault:admin'
95
+ if (cap === 'approve') return 'vault:approve'
90
96
  if (cap === 'secrets') return isValidCn(cn) ? 'vault:secrets:' + cn : null
91
97
  return null
92
98
  }
93
99
 
94
100
  /** Compat: el mapa directo, para las capacidades de dispositivo. */
95
- export const CAP_SCOPE = Object.freeze({ sign: 'vault:sign', store: 'vault:store', read: 'vault:read', admin: 'vault:admin' })
101
+ export const CAP_SCOPE = Object.freeze({ sign: 'vault:sign', store: 'vault:store', read: 'vault:read', admin: 'vault:admin', approve: 'vault:approve' })
96
102
 
97
103
  const enc = (s) => new TextEncoder().encode(s)
98
104
  const hex = (buf) => [...new Uint8Array(buf)].map((b) => b.toString(16).padStart(2, '0')).join('')
@@ -87,7 +87,8 @@ export const SCOPE = Object.freeze({
87
87
  // Consola remota (docs/consola-remota.md): admitir y expulsar miembros a distancia.
88
88
  // NO incluye cambiar permisos, traspasar el mando ni conceder `admin`: eso es el rol
89
89
  // de master y sigue siendo local. No se empareja — se concede desde el PC.
90
- ADMIN: 'vault:admin'
90
+ ADMIN: 'vault:admin',
91
+ APPROVE: 'vault:approve' // aprobar pedidos de secretos (cajones con `approval`); se concede a mano, como admin
91
92
  })
92
93
 
93
94
  /**