@dotrino/vaultd 0.162.2 → 0.162.3

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.
@@ -5,4 +5,4 @@
5
5
  * si no coincide con la del paquete: una versión anunciada que no es la que corre es peor
6
6
  * que no anunciar ninguna.
7
7
  */
8
- export const LIB_VERSION = '0.90.2'
8
+ export const LIB_VERSION = '0.90.3'
@@ -14,12 +14,10 @@
14
14
  * Sirve cualquier enlace con la forma común `{ device: { publickey }, cert, iss, proxy }`
15
15
  * (el de remote-agent y el de un servicio de dotrino-env).
16
16
  */
17
- import { pubkeyId } from '@dotrino/identity/capabilities'
17
+ import { keyLabel } from '@dotrino/identity/capabilities'
18
18
 
19
19
  /** El id corto de una llave, como lo enseña la bóveda: `AB12-CD34`. */
20
- export async function shortId (publickey) {
21
- return (await pubkeyId(publickey)).slice(0, 8).toUpperCase().replace(/(.{4})(.{4})/, '$1-$2')
22
- }
20
+ export const shortId = keyLabel
23
21
 
24
22
  /**
25
23
  * La información del aparato a partir de su enlace.
@@ -23,7 +23,7 @@ import path from 'node:path'
23
23
  import { createHash } from 'node:crypto'
24
24
  import {
25
25
  makeDeviceKey, makeDeviceEncKey, importDeviceEncKey, signWithDevice,
26
- verifyDeviceSig, makePairingCode, commitCode, pubkeyId } from '@dotrino/identity/capabilities'
26
+ verifyDeviceSig, makePairingCode, commitCode, pubkeyId, keyLabel } from '@dotrino/identity/capabilities'
27
27
  import { openWrap, wrapForMember, decryptWithCek } from '@dotrino/identity/content'
28
28
  import { verifyActa, sealKeyAt, memberCan, checkVaultReply } from '@dotrino/identity/acta'
29
29
  import { MSG, secretsScope, isValidSecretsNs, VAULT_PROTOCOL, VAULT_SPEAKS } from './protocol.js'
@@ -373,7 +373,7 @@ export async function enrollWithVault ({ qr, label = 'agent', expectedScope = nu
373
373
  // aparato entra al acta pero no le llega ningún secreto, y no da error. Un replicador
374
374
  // entra así A PROPÓSITO (ver `withEncKey`): reparte sobres cerrados y no abre ninguno.
375
375
  const enc = withEncKey ? await makeDeviceEncKey() : null
376
- const deviceId = (await pubkeyId(device.publickey)).slice(0, 8).toUpperCase().replace(/(.{4})(.{4})/, '$1-$2')
376
+ const deviceId = await keyLabel(device.publickey)
377
377
  // Código de emparejamiento ALEATORIO: se muestra y NO se envía. La bóveda lo
378
378
  // aprende solo cuando un humano lo tipea → aprobar exige TENER esta máquina.
379
379
  const code = makePairingCode()
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dotrino/vaultd",
3
- "version": "0.162.2",
3
+ "version": "0.162.3",
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,10 +22,10 @@
22
22
  },
23
23
  "dependencies": {
24
24
  "@dotrino/compat": "0.4.0",
25
- "@dotrino/identity": "0.119.0",
25
+ "@dotrino/identity": "0.120.0",
26
26
  "@dotrino/opaque": "0.1.0",
27
27
  "@dotrino/passmanager": "0.18.4",
28
- "@dotrino/proxy-client": "0.36.1",
28
+ "@dotrino/proxy-client": "0.36.2",
29
29
  "@dotrino/roadmap": "0.4.30",
30
30
  "@dotrino/store": "0.12.3",
31
31
  "@dotrino/update": "0.9.0",
@@ -51,7 +51,7 @@
51
51
  "!lib/src/types.d.ts"
52
52
  ],
53
53
  "devDependencies": {
54
- "@dotrino/remote-agent": "0.20.1",
54
+ "@dotrino/remote-agent": "0.21.0",
55
55
  "@types/node": "^22.0.0",
56
56
  "typescript": "5.9.3"
57
57
  },
package/src/client.js CHANGED
@@ -11,7 +11,7 @@
11
11
  * estrictamente (firmado por la maestra que vio en el QR, y para SU clave) antes de
12
12
  * guardarlo. La maestra nunca sale del vault.
13
13
  */
14
- import { makeDeviceKey, makeDeviceEncKey, importDeviceEncKey, signWithDevice, verifyDeviceSig, makePairingCode, commitCode, pubkeyId } from '@dotrino/identity/capabilities'
14
+ import { makeDeviceKey, makeDeviceEncKey, importDeviceEncKey, signWithDevice, verifyDeviceSig, makePairingCode, commitCode, keyLabel } from '@dotrino/identity/capabilities'
15
15
  import { myContentKey, encryptWithCek, decryptWithKeyring } from '@dotrino/identity/content'
16
16
  // Con qué se juzga lo que devuelve la bóveda (papel + acta): la regla del pilar, una sola.
17
17
  import { checkVaultReply } from '@dotrino/identity/acta'
@@ -65,7 +65,7 @@ export async function enroll ({ qr, label = '', dir, onChallenge, approveTimeout
65
65
  // La llave de CIFRADO del aparato: con su pública en el acta, la bóveda le envuelve la
66
66
  // clave de contenido al admitirlo. Sin ella no podría usar el almacén, que solo entra cifrado.
67
67
  const enc = await makeDeviceEncKey()
68
- const myDeviceId = (await pubkeyId(device.publickey)).slice(0, 8).toUpperCase().replace(/(.{4})(.{4})/, '$1-$2')
68
+ const myDeviceId = await keyLabel(device.publickey)
69
69
  // ESTE dispositivo genera el código y lo MUESTRA; solo viaja su COMPROMISO. El vault
70
70
  // lo aprende cuando un humano lo tipea, y solo firma el cert si el compromiso coincide.
71
71
  const code = makePairingCode()
package/src/ctl.js CHANGED
@@ -26,7 +26,7 @@ import path from 'node:path'
26
26
  import { execFileSync } from 'node:child_process'
27
27
  import tty from 'node:tty'
28
28
  import crypto from 'node:crypto'
29
- import { pubkeyId } from '@dotrino/identity/capabilities'
29
+ import { pubkeyId, keyLabel } from '@dotrino/identity/capabilities'
30
30
  import { dataDir } from './paths.js'
31
31
  // EL CANAL LOCAL VA CIFRADO (ver `ipc.js`): por aquí salen la contraseña y los valores.
32
32
  import { ipcRead, ipcWrite } from './ipc.js'
@@ -133,10 +133,8 @@ function requireDaemon () {
133
133
  if (!alive(s.pid)) { console.error('El daemon no está corriendo. Arráncalo: %s', START_HINT); process.exit(1) }
134
134
  return s
135
135
  }
136
- function deviceIdOf (sub) {
137
- // mismo formato que el daemon: 8 hex agrupados AB12-CD34
138
- return pubkeyId(sub).then((id) => id.slice(0, 8).toUpperCase().replace(/(.{4})(.{4})/, '$1-$2'))
139
- }
136
+ // mismo formato que el daemon: AB12-CD34
137
+ const deviceIdOf = keyLabel
140
138
 
141
139
  /** Lo que dijo un aprobador sobre sus avisos, para enseñarlo. No decide nada. */
142
140
  function avisosTxt (notifiedAt) {
package/src/replica.js CHANGED
@@ -24,7 +24,7 @@ import fs from 'node:fs'
24
24
  import path from 'node:path'
25
25
  import os from 'node:os'
26
26
  import { WebSocketProxyClient } from '@dotrino/proxy-client'
27
- import { signWithDevice, verifyDeviceSig, verifyChain, pubkeyId } from '@dotrino/identity/capabilities'
27
+ import { signWithDevice, verifyDeviceSig, verifyChain, pubkeyId, keyLabel } from '@dotrino/identity/capabilities'
28
28
  import { verifyActa, memberCan, memberCanReadSecrets, sealKeyAt, sealersOf } from '@dotrino/identity/acta'
29
29
  import { MSG, secretsScope, isValidSecretsNs } from '../lib/src/protocol.js'
30
30
  import { FRESH_WINDOW_MS } from '../lib/src/enroll.js'
@@ -156,7 +156,7 @@ export async function runReplica ({ dir = replicaDir(), proxyUrl, log = console.
156
156
  { code: 'replica-not-enrolled' })
157
157
  }
158
158
  const url = proxyUrl || link.proxy || process.env.PROXY_URL || 'wss://proxy.dotrino.com'
159
- const id = (await pubkeyId(link.device.publickey)).slice(0, 8).toUpperCase().replace(/(.{4})(.{4})/, '$1-$2')
159
+ const id = await keyLabel(link.device.publickey)
160
160
 
161
161
  const firmar = (data) => signWithDevice({ privateJwk: link.device.privateJwk, data })
162
162
  // CONTESTAR es por la CONEXIÓN (`send`) y no por la llave (`sendByPubkey`): `from` es el