@dotrino/vaultd 0.149.0 → 0.150.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/README.md CHANGED
@@ -141,16 +141,22 @@ clic, o en la terminal:
141
141
  sudo apt install ./dotrino-vault_*.deb
142
142
  ```
143
143
 
144
- Deja los binarios en `/usr/bin` e instala la unidad `systemd --user` en
145
- `/usr/lib/systemd/user`, habilitada para **todos** los usuarios de la máquina (cada
146
- uno con su propia bóveda en su `$HOME`): te arranca sola en tu **próximo inicio de
147
- sesión**. Para levantarla ya, `systemctl --user start dotrino-vault`; si estabas
144
+ Instala la unidad `systemd --user` en `/usr/lib/systemd/user`, habilitada para
145
+ **todos** los usuarios de la máquina (cada uno con su propia bóveda en su `$HOME`): te
146
+ arranca sola en tu **próximo inicio de sesión**.
147
+
148
+ **El paquete no deja la bóveda en `/usr/bin`: deja un lanzador** (desde la 0.150.0,
149
+ `packaging/pkg-launcher.sh`). El binario viene en `/usr/lib/dotrino-vault` y el lanzador lo
150
+ copia a `~/.local/share/dotrino/bin` de cada usuario la primera vez, y lo corre desde ahí.
151
+ Es la misma instalación de usuario del tarball, así que **se actualiza sola, sin `sudo`**
152
+ (CONVENCIONES §15). Un paquete más nuevo repone esa copia; uno más viejo que la copia no la
153
+ toca. Quitar el paquete no borra ni esa copia ni tus datos. Para levantarla ya, `systemctl --user start dotrino-vault`; si estabas
148
154
  **actualizando**, el servicio viejo sigue corriendo y hay que reiniciarlo con
149
155
  `systemctl --user restart dotrino-vault`.
150
156
 
151
157
  **Fedora / RHEL / openSUSE — `.rpm`:** el mismo instalador, para las distribuciones que
152
- usan `rpm`. Deja exactamente lo mismo que el `.deb` (binarios en `/usr/bin` y la unidad
153
- `systemd --user` para todos los usuarios):
158
+ usan `rpm`. Deja exactamente lo mismo que el `.deb` (el lanzador, la copia en tu carpeta
159
+ que se actualiza sola, y la unidad `systemd --user` para todos los usuarios):
154
160
 
155
161
  ```sh
156
162
  sudo dnf install ./dotrino-vault-*.x86_64.rpm # Fedora, RHEL y derivadas
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dotrino/vaultd",
3
- "version": "0.149.0",
3
+ "version": "0.150.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": {
package/src/transport.js CHANGED
@@ -36,7 +36,7 @@ export async function masterPubkeyOf (identity) {
36
36
  * @param {string} [opts.url] URL del proxy (default wss://proxy.dotrino.com).
37
37
  * @returns {Promise<{ client, token:string, identify():Promise<void> }>}
38
38
  */
39
- export async function createTransport ({ identity, dir, url = DEFAULT_PROXY, commKey = null, log = () => {}, makeClient = null, announce = null }) {
39
+ export async function createTransport ({ identity, dir, url = DEFAULT_PROXY, commKey = null, log = () => {}, makeClient = null, announce = null, recheckMs = 60_000, reannounceMs = 10 * 60_000 }) {
40
40
  installNodeGlobals(dir)
41
41
  // Import dinámico DESPUÉS de instalar los globals que el paquete usa.
42
42
  // `WebSocketProxyClient` (la clase) y NO el helper `getWebSocketProxyClient`:
@@ -174,8 +174,10 @@ export async function createTransport ({ identity, dir, url = DEFAULT_PROXY, com
174
174
  * existe». Si el anuncio falla, la bóveda sigue sirviendo a todo lo demás y se dice en voz
175
175
  * alta: lo que se pierde es que la encuentren por su dirección, no que deje de funcionar.
176
176
  */
177
+ let announcedAt = 0
177
178
  const announceAccount = async () => {
178
179
  if (!announce || !identificado) return
180
+ announcedAt = Date.now()
179
181
  try { await client.publish(announce) } catch (e) {
180
182
  log(`[vault] could not announce this account on the proxy (${e.message}) — a borrowed machine will not find this vault by its address`)
181
183
  }
@@ -219,8 +221,9 @@ export async function createTransport ({ identity, dir, url = DEFAULT_PROXY, com
219
221
  * `connect()` es seguro de repetir: si ya está conectado devuelve el token y no abre
220
222
  * nada.
221
223
  */
222
- const RECHECK_MS = 60_000
224
+ const RECHECK_MS = recheckMs
223
225
  const PATIENCE_MS = 5 * 60_000
226
+ const REANNOUNCE_MS = reannounceMs // la mitad de lo que el proxio guarda una entrada
224
227
  let downSince = 0
225
228
  let saidDown = false
226
229
  client.on('disconnect', ({ code, reason } = {}) => {
@@ -236,6 +239,11 @@ export async function createTransport ({ identity, dir, url = DEFAULT_PROXY, com
236
239
  if (identificado && client.token) {
237
240
  if (downSince) log(`[vault] back on the proxy after ${Math.round((Date.now() - downSince) / 1000)}s`)
238
241
  downSince = 0; saidDown = false
242
+ // EL ANUNCIO CADUCA: el proxio borra una entrada de canal a los 20 minutos de publicada.
243
+ // Sin renovarlo, entrar con usuario y contraseña solo funcionaba los primeros 20 minutos
244
+ // tras identificarse, y desde fuera se veía como «no hay ninguna bóveda en esa dirección»
245
+ // con la bóveda encendida (2026-10-12, la demo de los revisores).
246
+ if (announce && Date.now() - announcedAt >= REANNOUNCE_MS) await announceAccount()
239
247
  return
240
248
  }
241
249
  if (!downSince) downSince = Date.now()