@dotrino/identity 0.54.0 → 0.54.2
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/node.js +12 -0
- package/vault/acta.js +5 -2
- package/vault/core.js +15 -3
package/package.json
CHANGED
package/src/node.js
CHANGED
|
@@ -170,6 +170,18 @@ export class Identity {
|
|
|
170
170
|
// Acta de perfil (qué llaves son del perfil y qué puede cada una; ver acta-de-perfil.md)
|
|
171
171
|
profileActa () { return this._h('profileActa') }
|
|
172
172
|
profileMembers () { return this._h('profileMembers') }
|
|
173
|
+
/**
|
|
174
|
+
* Quien SELLA SOBRES (la bóveda) registra aquí cómo estrenar su llave de sellado: se
|
|
175
|
+
* llama al sellar cada acta, porque esa llave rota con el acta (§8.9 de
|
|
176
|
+
* `dotrino-vault/docs/secretos-sellados.md`). Va por aquí y no por el iframe porque
|
|
177
|
+
* este puente es en-proceso: al navegador no se le puede pasar una función, y tampoco
|
|
178
|
+
* la necesita — no sella secretos de nadie.
|
|
179
|
+
*/
|
|
180
|
+
setSealKeyProvider (provider) { return this._h('setSealKeyProvider', { provider }) }
|
|
181
|
+
/** Estrena la llave de sellado en un acta nueva, sin tocar a ningún miembro. */
|
|
182
|
+
rotateSealKey () { return this._h('rotateSealKey') }
|
|
183
|
+
/** Con qué llave se comprueban los sobres que se firmaron con el acta `seq`. */
|
|
184
|
+
sealKeyAt (seq) { return this._h('sealKeyAt', { seq }) }
|
|
173
185
|
myMembership () { return this._h('myMembership') }
|
|
174
186
|
/**
|
|
175
187
|
* La CADENA de actas desde `sinceSeq` (para que un dispositivo que estuvo apagado
|
package/vault/acta.js
CHANGED
|
@@ -253,8 +253,11 @@ export async function applyChanges (acta, changes, { by, now = Date.now(), sealP
|
|
|
253
253
|
if (!by) throw new Error('applyChanges: missing `by` (who seals)')
|
|
254
254
|
if (by !== acta.sealer) throw new Error('only the master can change the record; this device is not the master')
|
|
255
255
|
|
|
256
|
-
const list = Array.isArray(changes) ? changes : [changes]
|
|
257
|
-
|
|
256
|
+
const list = (Array.isArray(changes) ? changes : [changes]).filter(Boolean)
|
|
257
|
+
// Estrenar la llave de sellado ES un cambio del acta, aunque no toque a ningún miembro:
|
|
258
|
+
// rota con el acta (§8.9) y el acta es lo que le da autoridad. Por eso una lista vacía
|
|
259
|
+
// se acepta si viene con llave nueva, y solo entonces.
|
|
260
|
+
if (list.length === 0 && !sealPub) throw new Error('applyChanges: no hay cambios')
|
|
258
261
|
|
|
259
262
|
const next = {
|
|
260
263
|
...acta,
|
package/vault/core.js
CHANGED
|
@@ -1470,12 +1470,24 @@ export async function createIdentityCore ({ kv: rawKv, peers, makeSync = null, k
|
|
|
1470
1470
|
* Es opt-in a propósito: una identidad de navegador no sella nada, y un acta sin llave
|
|
1471
1471
|
* de sellado es perfectamente válida.
|
|
1472
1472
|
*/
|
|
1473
|
-
setSealKeyProvider (
|
|
1474
|
-
sealKeyProvider = typeof
|
|
1473
|
+
setSealKeyProvider ({ provider } = {}) {
|
|
1474
|
+
sealKeyProvider = typeof provider === 'function' ? provider : null
|
|
1475
|
+
return { ok: true, set: !!sealKeyProvider }
|
|
1476
|
+
},
|
|
1477
|
+
|
|
1478
|
+
/**
|
|
1479
|
+
* Estrena la llave de sellado sin tocar a nadie más: pide una al proveedor y la nombra
|
|
1480
|
+
* en un acta nueva. Es lo que hace la bóveda al arrancar si el acta no tiene llave, o
|
|
1481
|
+
* si la que nombra no es suya (el disco se restauró, otro master la puso…).
|
|
1482
|
+
*/
|
|
1483
|
+
async rotateSealKey () {
|
|
1484
|
+
if (!sealKeyProvider) throw new Error('this identity does not seal envelopes')
|
|
1485
|
+
const acta = await sealChanges([])
|
|
1486
|
+
return { ok: true, seq: acta.seq, sealPub: acta.sealPub }
|
|
1475
1487
|
},
|
|
1476
1488
|
|
|
1477
1489
|
/** La llave con la que se firmaron los sobres de un acta dada. Para VERIFICARLOS. */
|
|
1478
|
-
sealKeyAt (seq) {
|
|
1490
|
+
sealKeyAt ({ seq } = {}) {
|
|
1479
1491
|
return Acta.sealKeyAt(loadActa(), seq)
|
|
1480
1492
|
},
|
|
1481
1493
|
|