@dotrino/identity 0.76.0 → 0.78.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/src/index.js +17 -1
- package/vault/core.js +18 -3
package/package.json
CHANGED
package/src/index.js
CHANGED
|
@@ -343,6 +343,15 @@ export class Identity {
|
|
|
343
343
|
async openContent (envelope) { return this._call('openContent', { envelope }) }
|
|
344
344
|
/** Rota la clave de contenido (corta el acceso al contenido FUTURO de quien ya no está). */
|
|
345
345
|
async rotateContentKey () { return this._call('rotateContentKey') }
|
|
346
|
+
/**
|
|
347
|
+
* Abre un sobre de un CAJÓN DE SECRETOS con la envoltura dirigida a este aparato.
|
|
348
|
+
*
|
|
349
|
+
* Distinto de `openContent`, que usa el llavero del perfil: aquí la envoltura llega suelta
|
|
350
|
+
* y la privada de cifrado de este dispositivo —que nunca sale del iframe— la abre. Es lo
|
|
351
|
+
* que le permite a quien administra LEER una variable pública sin teclear ninguna
|
|
352
|
+
* contraseña, y solo las que la bóveda le haya envuelto.
|
|
353
|
+
*/
|
|
354
|
+
async openSealedValue ({ wrap, envelope } = {}) { return this._call('openSealedValue', { wrap, envelope }) }
|
|
346
355
|
|
|
347
356
|
// ----- Emparejar ESTE navegador/dispositivo con el vault del usuario (Fase 1) -----
|
|
348
357
|
|
|
@@ -489,7 +498,14 @@ export class Identity {
|
|
|
489
498
|
// Podés tener varios perfiles (identidades) en el mismo navegador, cada uno conectado o no
|
|
490
499
|
// a su propio vault. Crear/cambiar setea el perfil activo; la app RECARGA la página y toma
|
|
491
500
|
// el nuevo (no reactivo: las apps abiertas conservan el perfil con el que cargaron).
|
|
492
|
-
/**
|
|
501
|
+
/**
|
|
502
|
+
* Lista de perfiles: `[{ id, name, pubkey, avatar, current, pendingJoin, vault, approve }]`.
|
|
503
|
+
*
|
|
504
|
+
* `vault` = ese perfil está conectado a una bóveda · `approve` = además su certificado
|
|
505
|
+
* le deja aprobar pedidos. Los dos salen de leer el cert guardado de cada perfil, sin
|
|
506
|
+
* cambiar el activo ni firmar nada — es lo que necesita la pantalla de Pedidos para
|
|
507
|
+
* saber a QUÉ perfil pertenece lo que timbró el teléfono.
|
|
508
|
+
*/
|
|
493
509
|
async listProfiles () { return this._call('listProfiles') }
|
|
494
510
|
/** El perfil activo: { id, name, pubkey }. */
|
|
495
511
|
async currentProfile () { return this._call('currentProfile') }
|
package/vault/core.js
CHANGED
|
@@ -1524,9 +1524,24 @@ export async function createIdentityCore ({ kv: rawKv, peers, makeSync = null, k
|
|
|
1524
1524
|
const m = raw ? JSON.parse(raw) : null
|
|
1525
1525
|
if (m && typeof m.avatar === 'string') avatar = m.avatar
|
|
1526
1526
|
} catch (_) {}
|
|
1527
|
-
//
|
|
1528
|
-
//
|
|
1529
|
-
|
|
1527
|
+
// QUÉ PERFIL ESTÁ CONECTADO A UNA BÓVEDA, Y CUÁL APRUEBA.
|
|
1528
|
+
//
|
|
1529
|
+
// Con varios perfiles en el mismo aparato, el pedido que timbra el teléfono es de
|
|
1530
|
+
// UNO de ellos, y puede no ser el activo. Sin esto la pantalla de Pedidos abría con
|
|
1531
|
+
// el que hubiera y decía «este aparato no aprueba pedidos» — falso: el que aprueba
|
|
1532
|
+
// era otro perfil, y no había forma de saber cuál.
|
|
1533
|
+
//
|
|
1534
|
+
// Se lee el CERT de cada perfil, que está en claro en el kv (no es un secreto: dice
|
|
1535
|
+
// qué puede hacer este aparato, no cómo). Es solo lectura y no hace falta la llave
|
|
1536
|
+
// del otro perfil, así que no se cambia el activo ni se firma nada.
|
|
1537
|
+
let vault = false; let approve = false
|
|
1538
|
+
try {
|
|
1539
|
+
const raw = p.id === currentPid ? kv.getItem(VAULT_CERT_STORAGE) : rawKv.getItem(`dotrino.identity.p.${p.id}.vault.cert`)
|
|
1540
|
+
const v = raw ? JSON.parse(raw) : null
|
|
1541
|
+
vault = !!v?.cert
|
|
1542
|
+
approve = vault && (v.cert.scope || []).includes('vault:approve')
|
|
1543
|
+
} catch (_) {}
|
|
1544
|
+
return { id: p.id, name: p.name || '', pubkey: p.pubkey || null, avatar, current: p.id === currentPid, pendingJoin: !!p.pendingJoin, vault, approve }
|
|
1530
1545
|
})
|
|
1531
1546
|
},
|
|
1532
1547
|
async currentProfile () {
|