@dotrino/vault 0.39.0 → 0.41.0

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.
Files changed (2) hide show
  1. package/package.json +2 -2
  2. package/src/index.js +12 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dotrino/vault",
3
- "version": "0.39.0",
3
+ "version": "0.41.0",
4
4
  "description": "Usa ESTE dispositivo (navegador) como bóveda/CA del ecosistema Dotrino: atiende enrolamientos por el proxy y firma certificados de delegación a tus máquinas. Incluye el cliente de SERVICIO (Node): un proyecto se enrola una vez y jala sus credenciales del vault en vez del .env (`import '@dotrino/vault/config'`).",
5
5
  "type": "module",
6
6
  "main": "src/index.js",
@@ -47,7 +47,7 @@
47
47
  "pairing"
48
48
  ],
49
49
  "peerDependencies": {
50
- "@dotrino/identity": ">=0.64.0",
50
+ "@dotrino/identity": ">=0.66.0",
51
51
  "@dotrino/proxy-client": ">=0.13.0"
52
52
  },
53
53
  "license": "MIT",
package/src/index.js CHANGED
@@ -26,6 +26,7 @@
26
26
  * No reimplementa nada del ecosistema.
27
27
  */
28
28
  import { verifyChain, verifyDeviceSig } from '@dotrino/identity/capabilities'
29
+ import { memberCanScope } from '@dotrino/identity/acta'
29
30
  import { createEnrollDesk, deviceIdOf, DEVICE_TTL_MS, FRESH_WINDOW_MS } from './enroll.js'
30
31
  // Las constantes del protocolo salen del MISMO módulo que usa el daemon: si la lista
31
32
  // local se queda corta, el dispositivo deja de handle mensajes sin que nadie lo note.
@@ -194,6 +195,17 @@ export async function startDeviceVault (identity, { proxyUrl, client: injectedCl
194
195
  send(from, { type: MSG.ERROR, error: 'unauthorized: ' + chk.reason })
195
196
  return null
196
197
  }
198
+ // EL ACTA MANDA, EL PAPEL SOLO ACOMPAÑA. Aquí y no en cada mostrador: el certificado
199
+ // dice a qué se comprometió esta bóveda al conectar el aparato, y el acta lo que puede
200
+ // HOY. Quitarle un permiso sella el acta pero no le retira el papel, que vive hasta 30
201
+ // días, así que sin esto seguiría entrando hasta que lo renovara.
202
+ if (expectedScope) {
203
+ const record = (await identity.profileActa?.().catch(() => null))?.acta || null
204
+ if (record && !memberCanScope(record, chk.device, expectedScope)) {
205
+ send(from, { type: MSG.ERROR, error: 'unauthorized: acta — this member no longer has that permission' })
206
+ return null
207
+ }
208
+ }
197
209
  return chk
198
210
  }
199
211