@dotrino/vaultd 0.7.8 → 0.7.9

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.
@@ -14,7 +14,7 @@
14
14
  */
15
15
  import { runDaemon } from '../src/daemon.js'
16
16
  import { qrToString } from '../src/qr.js'
17
- import { daemonAlive } from '../src/vaultControl.js'
17
+ import { daemonAlive, pairUrl } from '../src/vaultControl.js'
18
18
 
19
19
  // `--tui` con una bóveda YA CORRIENDO en otra ventana: se engancha a ella y abre solo la
20
20
  // interfaz. Antes intentaba levantar una segunda bóveda sobre los mismos datos, chocaba
@@ -37,9 +37,11 @@ const mgr = await runDaemon()
37
37
  // Empareja contra el perfil ACTIVO.
38
38
  if (process.argv.includes('--pair')) {
39
39
  const { qr, expiresInMs } = mgr.current().startPairing({ label: 'cli' })
40
+ const { url, b64 } = pairUrl(qr)
40
41
  console.log(`\nEmparejá un dispositivo (válido ${expiresInMs / 60000} min):\n`)
41
- console.log(qrToString(JSON.stringify(qr), 2))
42
- console.log(JSON.stringify(qr))
42
+ console.log(qrToString(url, 2))
43
+ console.log(url)
44
+ console.log('\nO pegá este código:\n ' + b64)
43
45
  }
44
46
 
45
47
  // --tui: la bóveda Y su interfaz en la MISMA ventana. Donde no queda como servicio
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dotrino/vaultd",
3
- "version": "0.7.8",
3
+ "version": "0.7.9",
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": {
package/src/ctl.js CHANGED
@@ -186,7 +186,7 @@ async function cmdPair (args = []) {
186
186
  const acct = pair.profileName || pair.profile
187
187
  if (acct) console.log('\nCuenta que se comparte: %s%s', acct, pair.profileName && pair.profile ? ` (${pair.profile})` : '')
188
188
  console.log('\nEscanea este QR con el dispositivo que quieres conectar (válido %d min):\n', mins)
189
- console.log(qrToString(payload, 2)) // QR con el JSON crudo (menos datos) y zona de silencio reducida
189
+ console.log(qrToString(url, 2)) // QR con URL+JSON crudo (menos datos) y zona de silencio reducida
190
190
  console.log(`${R}${B}⚠ Este código deja LEER tus datos y FIRMAR con tu identidad.${Z}`)
191
191
  console.log(`${R} NO lo compartas con nadie, ni con "soporte". Solo escanéalo en TU dispositivo.${Z}`)
192
192
  console.log('\nO abre esta dirección en el dispositivo:\n ' + url)
package/src/tui/app.js CHANGED
@@ -701,7 +701,7 @@ function pairingBody (st, t, cols, height) {
701
701
  // QR: se dibuja siempre que quepa de ancho; si es más alto que la pantalla se
702
702
  // puede hacer scroll hacia arriba/abajo para verlo completo.
703
703
  let qr = ''
704
- try { qr = qrToString(info.payload, 2) } catch (_) {}
704
+ try { qr = qrToString(info.url, 2) } catch (_) {}
705
705
  const qrLines = qr ? qr.replace(/\n$/, '').split('\n') : []
706
706
  const qrWidth = qrLines.length ? Math.max(...qrLines.map((l) => l.replace(/\x1b\[[0-9;]*m/g, '').length)) : 0
707
707
  if (qrLines.length && qrWidth <= cols) {
@@ -257,12 +257,16 @@ export async function deleteScope (ns, profile) {
257
257
 
258
258
  const PROFILE_URL = 'https://vault.dotrino.com/dispositivos#vault='
259
259
 
260
- /** Codifica el QR crudo como URL de la consola de vault.dotrino.com (base64url del payload). */
260
+ /**
261
+ * Codifica el QR crudo como URL de la consola de vault.dotrino.com.
262
+ * El QR codifica la URL con el JSON crudo en el fragmento (menos datos que base64);
263
+ * el código que el usuario COPIA Y PEGA sigue siendo base64url.
264
+ */
261
265
  export function pairUrl (qr) {
262
266
  const payload = JSON.stringify(qr)
263
267
  const b64 = Buffer.from(payload, 'utf8').toString('base64')
264
268
  .replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '')
265
- return { url: PROFILE_URL + b64, payload, b64 }
269
+ return { url: PROFILE_URL + payload, payload, b64 }
266
270
  }
267
271
 
268
272
  /**