@dotrino/identity 0.115.0 → 0.116.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 (78) hide show
  1. package/package.json +4 -1
  2. package/src/node.js +4 -180
  3. package/vault/core.js +66 -7
  4. package/vault/facade.js +200 -0
  5. package/vault/index.html +10 -0
  6. package/vault/remote.js +45 -5
  7. package/vault/vault.js +29 -58
  8. package/vault/vendor/compat/VERSION.txt +3 -0
  9. package/vault/vendor/compat/advisory.js +141 -0
  10. package/vault/vendor/compat/index.js +188 -0
  11. package/vault/vendor/compat/ranges.js +93 -0
  12. package/vault/vendor/opaque/VERSION.txt +1 -1
  13. package/vault/vendor/passmanager/VERSION.txt +3 -0
  14. package/vault/vendor/passmanager/crypto.js +167 -0
  15. package/vault/vendor/passmanager/fields.js +183 -0
  16. package/vault/vendor/passmanager/generate.js +74 -0
  17. package/vault/vendor/passmanager/import.js +156 -0
  18. package/vault/vendor/passmanager/index.js +27 -0
  19. package/vault/vendor/passmanager/match.js +137 -0
  20. package/vault/vendor/passmanager/model.js +332 -0
  21. package/vault/vendor/passmanager/pubkey.js +33 -0
  22. package/vault/vendor/passmanager/sealed/convert.js +72 -0
  23. package/vault/vendor/passmanager/sealed/device.js +211 -0
  24. package/vault/vendor/passmanager/sealed/entry.js +209 -0
  25. package/vault/vendor/passmanager/sealed/index.js +20 -0
  26. package/vault/vendor/passmanager/sealed/keys.js +120 -0
  27. package/vault/vendor/passmanager/sealed/recovery.js +136 -0
  28. package/vault/vendor/passmanager/sealed/store.js +508 -0
  29. package/vault/vendor/passmanager/session-cache.js +60 -0
  30. package/vault/vendor/passmanager/totp.js +111 -0
  31. package/vault/vendor/passmanager/transport/protocol.js +83 -0
  32. package/vault/vendor/passmanager/transport/proxy.js +112 -0
  33. package/vault/vendor/passmanager/transport/sealed.js +74 -0
  34. package/vault/vendor/passmanager/vault/approval.js +63 -0
  35. package/vault/vendor/passmanager/vault/errors.js +34 -0
  36. package/vault/vendor/passmanager/vault/guard.js +114 -0
  37. package/vault/vendor/passmanager/vault/interface.js +34 -0
  38. package/vault/vendor/passmanager/vault/local.js +213 -0
  39. package/vault/vendor/passmanager/vault/remote.js +85 -0
  40. package/vault/vendor/passmanager/vault/responder.js +192 -0
  41. package/vault/vendor/passmanager/vault/sealed-local.js +199 -0
  42. package/vault/vendor/passmanager/vault/sealed-responder.js +159 -0
  43. package/vault/vendor/passmanager/vault/sealed.js +362 -0
  44. package/vault/vendor/passmanager/webauthn.js +221 -0
  45. package/vault/vendor/proxy-client/VERSION.txt +1 -1
  46. package/vault/vendor/proxy-client/client.js +36 -0
  47. package/vault/vendor/roadmap/VERSION.txt +3 -0
  48. package/vault/vendor/roadmap/index.js +108 -0
  49. package/vault/vendor/roadmap/manifests.js +797 -0
  50. package/vault/vendor/store/VERSION.txt +3 -0
  51. package/vault/vendor/store/core.js +309 -0
  52. package/vault/vendor/vault/VERSION.txt +4 -1
  53. package/vault/vendor/vault/admin.js +437 -0
  54. package/vault/vendor/vault/browser.js +167 -0
  55. package/vault/vendor/vault/core/approvals.js +204 -0
  56. package/vault/vendor/vault/core/blocked.js +68 -0
  57. package/vault/vendor/vault/core/browserDisk.js +109 -0
  58. package/vault/vendor/vault/core/commKey.js +68 -0
  59. package/vault/vendor/vault/core/disk.js +65 -0
  60. package/vault/vendor/vault/core/libVersion.js +8 -0
  61. package/vault/vendor/vault/core/machines.js +66 -0
  62. package/vault/vendor/vault/core/notices.js +71 -0
  63. package/vault/vendor/vault/core/notifiable.js +73 -0
  64. package/vault/vendor/vault/core/passwords.js +125 -0
  65. package/vault/vendor/vault/core/sealKey.js +77 -0
  66. package/vault/vendor/vault/core/sealer.js +172 -0
  67. package/vault/vendor/vault/core/sealers.js +159 -0
  68. package/vault/vendor/vault/core/secretsStore.js +1326 -0
  69. package/vault/vendor/vault/core/sha256.js +69 -0
  70. package/vault/vendor/vault/core/store.js +68 -0
  71. package/vault/vendor/vault/core/subacta.js +101 -0
  72. package/vault/vendor/vault/core/threadStore.js +273 -0
  73. package/vault/vendor/vault/core/transport.js +270 -0
  74. package/vault/vendor/vault/core/vault.js +4414 -0
  75. package/vault/vendor/vault/enroll.js +8 -4
  76. package/vault/vendor/vault/procContext.js +97 -0
  77. package/vault/vendor/vault/revocation.js +67 -0
  78. package/vault/vendor/vault/sealed.js +84 -0
@@ -0,0 +1,108 @@
1
+ /**
2
+ * @dotrino/roadmap — EL REGISTRO COMÚN, COMO PIEZA DE CONSULTA.
3
+ *
4
+ * Los manifiestos de este repo dicen **qué versión va cada producto, qué protocolo habla,
5
+ * qué rangos necesita de los demás y qué versiones se saben rotas**. Esta librería es la
6
+ * forma de leerlos: cada producto la importa en vez de abrir el JSON a mano, porque
7
+ * treinta piezas parseando el mismo archivo a su manera son treinta formas de equivocarse
8
+ * y ninguna hace ruido cuando se equivoca.
9
+ *
10
+ * REPARTO DE TRABAJO, para que no se mezcle:
11
+ *
12
+ * · **`@dotrino/compat`** decide. Es la lógica: declarar, comparar, avisar.
13
+ * · **esto** es el registro. Son los datos, y se editan aquí.
14
+ *
15
+ * Va como `peerDependency` de `@dotrino/compat` a propósito: un pilar dentro de otro se
16
+ * cuela anidado a cada consumidor, y ya pasó (`PENDIENTES.md`, «pilar anidado»).
17
+ *
18
+ * EL MANIFIESTO ES POLÍTICA DEL CÓDIGO (dueño, 2026-09-04): viaja con la versión que lo
19
+ * trae. Lo que llega por la red es el **aviso** firmado de `@dotrino/compat/advisory`, que
20
+ * suma incompatibilidades y no quita ninguna.
21
+ */
22
+ import { satisfies } from '@dotrino/compat/ranges'
23
+ import { MANIFESTS } from './manifests.js'
24
+
25
+ /**
26
+ * NADA DE DISCO, y esto costó un binario que no arrancaba.
27
+ *
28
+ * La primera versión leía los JSON con `fileURLToPath(import.meta.url)` calculado AL
29
+ * IMPORTARSE. En un ejecutable único eso no existe: la bóveda murió al arrancar con «The
30
+ * "path" argument must be of type string», y en un navegador no habría arrancado nunca.
31
+ *
32
+ * Los consumen ~30 PWAs, varios daemons y un binario. Un registro que hay que leer del
33
+ * disco no sirve para eso, así que los manifiestos van DENTRO del código
34
+ * (`src/manifests.js`, generado desde `manifests/*.json`).
35
+ */
36
+
37
+ /** Los manifiestos que trae esta versión. Hay uno («dotrino») y caben varios. */
38
+ export function manifestNames () {
39
+ return Object.keys(MANIFESTS).sort()
40
+ }
41
+
42
+ /**
43
+ * Un manifiesto por nombre. LANZA si no está: quien pregunta por un registro que no existe
44
+ * tiene un error, y devolverle un objeto vacío lo convertiría en «todo compatible».
45
+ */
46
+ export function loadManifest (name = 'dotrino') {
47
+ const m = Object.hasOwn(MANIFESTS, String(name)) ? MANIFESTS[String(name)] : null
48
+ if (!m) throw new Error(`roadmap: there is no manifest called "${name}"`)
49
+ return m
50
+ }
51
+
52
+ /** Los productos que el registro conoce. */
53
+ export const products = (m) => Object.keys(m?.products || {}).sort()
54
+
55
+ /** La ficha de un producto, o `null` si el registro no lo conoce. */
56
+ export const productOf = (m, product) => m?.products?.[product] || null
57
+
58
+ /** La versión que el registro da por vigente. `null` si no lo conoce. */
59
+ export const currentOf = (m, product) => productOf(m, product)?.current || null
60
+
61
+ /** El rango que `product` necesita de `peer`, o `null` si no exige nada. */
62
+ export function requirementFor (m, product, peer) {
63
+ const p = productOf(m, product)
64
+ if (!p) return null
65
+ return p.requires?.[peer] ?? null
66
+ }
67
+
68
+ /**
69
+ * ¿La versión de `peer` cumple lo que `product` necesita?
70
+ *
71
+ * Tres respuestas y ninguna es «bueno, adelante»:
72
+ * · `true` — cumple.
73
+ * · `false` — no cumple, y `reason` dice qué se esperaba.
74
+ * · cuando el registro NO exige nada, cumple: no exigir es una decisión, no una laguna.
75
+ *
76
+ * Si el registro no conoce al producto que pregunta, es `false`: preguntar por quien no
77
+ * está en el registro no puede salir que sí.
78
+ */
79
+ export function meets (m, { product, peer, version }) {
80
+ if (!productOf(m, product)) {
81
+ return { ok: false, reason: `the registry does not know "${product}"` }
82
+ }
83
+ const rango = requirementFor(m, product, peer)
84
+ if (rango == null) return { ok: true, reason: '' }
85
+ if (satisfies(version, rango)) return { ok: true, reason: '' }
86
+ return { ok: false, reason: `${product} needs ${peer} ${rango} and this one is ${version}` }
87
+ }
88
+
89
+ /** La lista de rotas del registro, lista para pasarla a `check` de `@dotrino/compat`. */
90
+ export const brokenOf = (m) => Array.isArray(m?.broken) ? m.broken : []
91
+
92
+ /** Lo que el administrador enseña: qué versión debería ir cada pieza, según el registro. */
93
+ export function summary (m) {
94
+ return {
95
+ manifest: m?.manifest || null,
96
+ seq: m?.seq ?? null,
97
+ issued: m?.issued || null,
98
+ products: products(m).map((p) => ({
99
+ product: p,
100
+ current: currentOf(m, p),
101
+ protocol: productOf(m, p)?.protocol ?? null,
102
+ requires: productOf(m, p)?.requires || {}
103
+ })),
104
+ broken: brokenOf(m)
105
+ }
106
+ }
107
+
108
+ export default { manifestNames, loadManifest, products, productOf, currentOf, requirementFor, meets, brokenOf, summary }