@dotrino/vaultd 0.139.0 → 0.139.1

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/vaultd",
3
- "version": "0.139.0",
3
+ "version": "0.139.1",
4
4
  "type": "module",
5
5
  "description": "Certificador personal de Dotrino: daemon headless que custodia la clave maestra y delega capacidades a tus dispositivos por el proxy. Tu CA propia.",
6
6
  "bin": {
@@ -22,7 +22,7 @@
22
22
  },
23
23
  "dependencies": {
24
24
  "@dotrino/compat": "0.4.0",
25
- "@dotrino/identity": "^0.107.0",
25
+ "@dotrino/identity": "^0.107.1",
26
26
  "@dotrino/opaque": "0.1.0",
27
27
  "@dotrino/passmanager": "0.17.0",
28
28
  "@dotrino/proxy-client": "0.27.1",
@@ -220,15 +220,19 @@ export function openThreadStore (dir) {
220
220
  * sirve nada cerrado con ella (dueño, 2026-09-30). Cada entrada que cambia estrena `ts`,
221
221
  * para que los aparatos la bajen en su siguiente sincronización.
222
222
  *
223
+ * También MIGRA los sobres de la cuenta anteriores a la marca (`{ gen, iv, ct }` a secas,
224
+ * identity < 0.107): si abren con la llave de la cuenta se vuelven a cerrar marcados; si no,
225
+ * no eran de la cuenta y se cuentan en `skipped` sin tocarlos.
226
+ *
223
227
  * La versión anterior NO se tira: queda en `resealed` con la fecha, por si algo sale mal
224
228
  * (lo pidió el dueño: «podría retenerlos… pero no los envía»), y se guarda AL MENOS un
225
229
  * año (`RESEALED_KEEP_MS`). No se sirve por ningún método.
226
230
  *
227
231
  * @param {{ gen: number, reseal: (env: object) => Promise<object> }} o
228
- * @returns {Promise<{ changed: number, entries: number }>}
232
+ * @returns {Promise<{ changed: number, entries: number, skipped: number }>}
229
233
  */
230
234
  async function resealStaleEnvelopes ({ gen, reseal }) {
231
- let changed = 0; let entries = 0
235
+ let changed = 0; let entries = 0; let skipped = 0
232
236
  const now = Date.now()
233
237
  if (!data.resealed) data.resealed = []
234
238
  // Solo sale lo que ya cumplió su año de respaldo.
@@ -238,6 +242,7 @@ export function openThreadStore (dir) {
238
242
  for (const [key, arr] of Object.entries(data.threads)) {
239
243
  for (let i = 0; i < arr.length; i++) {
240
244
  const r = await resealStale(arr[i], { gen, reseal })
245
+ skipped += r.skipped || 0
241
246
  if (!r.changed) continue
242
247
  data.resealed.push({ threadKey: key, at: now, gen, before: arr[i] })
243
248
  arr[i] = { ...r.value, ts: Math.max(now, (arr[i].ts || 0) + 1) }
@@ -245,7 +250,7 @@ export function openThreadStore (dir) {
245
250
  }
246
251
  }
247
252
  if (entries || podados) save()
248
- return { changed, entries }
253
+ return { changed, entries, skipped }
249
254
  }
250
255
 
251
256
  return { methods, raw: () => data, resealStaleEnvelopes }
package/src/vault.js CHANGED
@@ -134,6 +134,7 @@ export async function startVault ({ dir = dataDir(), proxyUrl, log = console.log
134
134
  audit('resealed', { envelopes: r.changed, entries: r.entries, gen: mine.gen })
135
135
  log(`[vault] ${why}: resealed ${r.changed} envelope(s) in ${r.entries} entr${r.entries === 1 ? 'y' : 'ies'} with content key generation ${mine.gen}`)
136
136
  }
137
+ if (r.skipped) log(`[vault] ${why}: ${r.skipped} unmarked envelope(s) that the account key does not open were left as they are`)
137
138
  return r
138
139
  }
139
140
  const approvals = createApprovals()