@dotrino/identity 0.80.0 → 0.81.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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dotrino/identity",
3
- "version": "0.80.0",
3
+ "version": "0.81.0",
4
4
  "description": "Identidad y rating de usuarios compartidos entre apps de Dotrino (vault iframe + postMessage)",
5
5
  "type": "module",
6
6
  "main": "src/index.js",
package/vault/acta.js CHANGED
@@ -968,8 +968,8 @@ export function effectiveCaps (acta, pub, extraRenounces = []) {
968
968
  * `ns` es opcional y es para lo que va atado a un cajón: un servicio (miembro con `cn`)
969
969
  * solo firma dentro del suyo. Sin `ns`, se pregunta por la capacidad a secas.
970
970
  */
971
- export function memberCanSign (acta, pub, ns = null) {
972
- if (!memberCan(acta, pub, 'sign')) return false
971
+ export function memberCanSign (acta, pub, ns = null, extraRenounces = []) {
972
+ if (!memberCan(acta, pub, 'sign', extraRenounces)) return false
973
973
  const m = (acta?.members || []).find((x) => x.pub === pub)
974
974
  // SIN `cn` = un aparato TUYO: firma como tú, y no hay nada que preguntarle a nadie.
975
975
  if (!m?.cn) return true
@@ -996,19 +996,19 @@ export function memberCanSign (acta, pub, ns = null) {
996
996
  * Devuelve `false` ante un scope que no reconoce: si aparece uno nuevo, lo que toca es
997
997
  * añadirlo aquí, no que se cuele por no estar en la lista.
998
998
  */
999
- export function memberCanScope (acta, pub, scope) {
999
+ export function memberCanScope (acta, pub, scope, extraRenounces = []) {
1000
1000
  if (!acta || typeof scope !== 'string') return false
1001
1001
  const secretos = /^vault:secrets:([a-z0-9-]{1,32})$/.exec(scope)
1002
- if (secretos) return memberCanReadSecrets(acta, pub, secretos[1])
1003
- if (scope === 'vault:sign') return memberCanSign(acta, pub)
1002
+ if (secretos) return memberCanReadSecrets(acta, pub, secretos[1], extraRenounces)
1003
+ if (scope === 'vault:sign') return memberCanSign(acta, pub, null, extraRenounces)
1004
1004
  const cap = Object.keys(CAP_SCOPE).find((c) => CAP_SCOPE[c] === scope)
1005
- return cap ? memberCan(acta, pub, cap) : false
1005
+ return cap ? memberCan(acta, pub, cap, extraRenounces) : false
1006
1006
  }
1007
1007
 
1008
- export function memberCanReadSecrets (acta, pub, ns) {
1008
+ export function memberCanReadSecrets (acta, pub, ns, extraRenounces = []) {
1009
1009
  const m = (acta?.members || []).find((x) => x.pub === pub)
1010
1010
  if (!m || !m.cn) return false
1011
- return m.cn === ns && effectiveCaps(acta, pub).includes('secrets')
1011
+ return m.cn === ns && effectiveCaps(acta, pub, extraRenounces).includes('secrets')
1012
1012
  }
1013
1013
 
1014
1014
  /** Los scopes de cert que le corresponden a un miembro según el acta. */
@@ -1,4 +1,4 @@
1
- Copia vendorizada de @dotrino/vault@0.60.3 (dotrino-vault/lib/src/{index,enroll,protocol}.js).
1
+ Copia vendorizada de @dotrino/vault@0.61.0 (dotrino-vault/lib/src/{index,enroll,protocol}.js).
2
2
  NO se edita a mano: la escribe `node vendor.mjs` y la vigila test/vendor-up-to-date.test.mjs.
3
3
  index.js importa ./enroll.js y ./protocol.js (relativos, van en esta misma copia),
4
4
  @dotrino/identity/{capabilities,acta} (= ../../{capabilities,acta}.js) y
@@ -128,3 +128,18 @@ export const isValidSecretsNs = (ns) => typeof ns === 'string' && /^[a-z0-9-]{1,
128
128
  * remota y el lector de `.env`, y tres copias de una regla son tres reglas.
129
129
  */
130
130
  export const isValidVarKey = (key) => typeof key === 'string' && /^[A-Z0-9_]{1,64}$/.test(key)
131
+
132
+ /**
133
+ * LA VERSIÓN DEL CABLE (CONVENCIONES §14, `@dotrino/compat`).
134
+ *
135
+ * Sube **solo cuando cambia el protocolo**, no con cada release: es lo que decide *si dos
136
+ * piezas pueden hablar*. La `version` del paquete decide otra cosa —si esa build concreta
137
+ * está rota— y por eso hacen falta las dos.
138
+ *
139
+ * Empieza en 1 hoy, con todo lo anterior sin declarar nada: a quien calla se le atiende
140
+ * hasta que cierre la ventana de migración del pilar, y después no.
141
+ */
142
+ export const VAULT_PROTOCOL = 1
143
+
144
+ /** Los protocolos que esta build entiende. Al añadir el 2, aquí van `[1, 2]`. */
145
+ export const VAULT_SPEAKS = [1]