@jantstack/adonis-authz 2.4.0-alpha.1 → 2.4.0-alpha.10

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 (158) hide show
  1. package/README.md +496 -29
  2. package/build/commands/authz_catalog_diff.d.ts.map +1 -1
  3. package/build/commands/authz_catalog_diff.js +0 -1
  4. package/build/commands/authz_catalog_diff.js.map +1 -1
  5. package/build/commands/authz_catalog_prune_orphans.d.ts.map +1 -1
  6. package/build/commands/authz_catalog_prune_orphans.js +0 -1
  7. package/build/commands/authz_catalog_prune_orphans.js.map +1 -1
  8. package/build/commands/authz_freeze.d.ts.map +1 -1
  9. package/build/commands/authz_freeze.js +1 -2
  10. package/build/commands/authz_freeze.js.map +1 -1
  11. package/build/commands/authz_reconcile.d.ts +15 -6
  12. package/build/commands/authz_reconcile.d.ts.map +1 -1
  13. package/build/commands/authz_reconcile.js +143 -20
  14. package/build/commands/authz_reconcile.js.map +1 -1
  15. package/build/commands/authz_relations_reconcile.d.ts +72 -1
  16. package/build/commands/authz_relations_reconcile.d.ts.map +1 -1
  17. package/build/commands/authz_relations_reconcile.js +234 -21
  18. package/build/commands/authz_relations_reconcile.js.map +1 -1
  19. package/build/commands/authz_scopes_relay.d.ts +50 -0
  20. package/build/commands/authz_scopes_relay.d.ts.map +1 -1
  21. package/build/commands/authz_scopes_relay.js +213 -10
  22. package/build/commands/authz_scopes_relay.js.map +1 -1
  23. package/build/commands/authz_scopes_requeue.d.ts +80 -0
  24. package/build/commands/authz_scopes_requeue.d.ts.map +1 -0
  25. package/build/commands/authz_scopes_requeue.js +230 -0
  26. package/build/commands/authz_scopes_requeue.js.map +1 -0
  27. package/build/commands/authz_unfreeze.d.ts +12 -4
  28. package/build/commands/authz_unfreeze.d.ts.map +1 -1
  29. package/build/commands/authz_unfreeze.js +74 -9
  30. package/build/commands/authz_unfreeze.js.map +1 -1
  31. package/build/commands/main.d.ts +16 -13
  32. package/build/commands/main.d.ts.map +1 -1
  33. package/build/commands/main.js +59 -11
  34. package/build/commands/main.js.map +1 -1
  35. package/build/commands/openfga_provision.d.ts +49 -3
  36. package/build/commands/openfga_provision.d.ts.map +1 -1
  37. package/build/commands/openfga_provision.js +72 -7
  38. package/build/commands/openfga_provision.js.map +1 -1
  39. package/build/index.d.ts +15 -5
  40. package/build/index.d.ts.map +1 -1
  41. package/build/index.js +16 -3
  42. package/build/index.js.map +1 -1
  43. package/build/providers/authz_provider.d.ts +7 -2
  44. package/build/providers/authz_provider.d.ts.map +1 -1
  45. package/build/providers/authz_provider.js +20 -3
  46. package/build/providers/authz_provider.js.map +1 -1
  47. package/build/src/define_config.d.ts +106 -1
  48. package/build/src/define_config.d.ts.map +1 -1
  49. package/build/src/define_config.js +11 -0
  50. package/build/src/define_config.js.map +1 -1
  51. package/build/src/drivers/database_driver.d.ts +53 -14
  52. package/build/src/drivers/database_driver.d.ts.map +1 -1
  53. package/build/src/drivers/database_driver.js +104 -32
  54. package/build/src/drivers/database_driver.js.map +1 -1
  55. package/build/src/drivers/database_relations_driver.d.ts +74 -9
  56. package/build/src/drivers/database_relations_driver.d.ts.map +1 -1
  57. package/build/src/drivers/database_relations_driver.js +391 -93
  58. package/build/src/drivers/database_relations_driver.js.map +1 -1
  59. package/build/src/drivers/openfga_driver.d.ts +71 -10
  60. package/build/src/drivers/openfga_driver.d.ts.map +1 -1
  61. package/build/src/drivers/openfga_driver.js +195 -16
  62. package/build/src/drivers/openfga_driver.js.map +1 -1
  63. package/build/src/drivers/openfga_facts.d.ts +15 -0
  64. package/build/src/drivers/openfga_facts.d.ts.map +1 -1
  65. package/build/src/drivers/openfga_facts.js +25 -2
  66. package/build/src/drivers/openfga_facts.js.map +1 -1
  67. package/build/src/drivers/openfga_relations_driver.d.ts +72 -6
  68. package/build/src/drivers/openfga_relations_driver.d.ts.map +1 -1
  69. package/build/src/drivers/openfga_relations_driver.js +308 -50
  70. package/build/src/drivers/openfga_relations_driver.js.map +1 -1
  71. package/build/src/errors.d.ts +175 -4
  72. package/build/src/errors.d.ts.map +1 -1
  73. package/build/src/errors.js +219 -3
  74. package/build/src/errors.js.map +1 -1
  75. package/build/src/freeze.d.ts +100 -20
  76. package/build/src/freeze.d.ts.map +1 -1
  77. package/build/src/freeze.js +159 -25
  78. package/build/src/freeze.js.map +1 -1
  79. package/build/src/manager.d.ts +239 -7
  80. package/build/src/manager.d.ts.map +1 -1
  81. package/build/src/manager.js +1192 -148
  82. package/build/src/manager.js.map +1 -1
  83. package/build/src/models/authz_assignment.d.ts +2 -2
  84. package/build/src/models/authz_assignment.d.ts.map +1 -1
  85. package/build/src/models/authz_deny.d.ts +2 -2
  86. package/build/src/models/authz_deny.d.ts.map +1 -1
  87. package/build/src/models/authz_permission.d.ts +2 -2
  88. package/build/src/models/authz_permission.d.ts.map +1 -1
  89. package/build/src/models/authz_role.d.ts +2 -2
  90. package/build/src/models/authz_role.d.ts.map +1 -1
  91. package/build/src/models/authz_role_permission.d.ts +2 -2
  92. package/build/src/models/authz_role_permission.d.ts.map +1 -1
  93. package/build/src/relation_partition_trigger.d.ts.map +1 -1
  94. package/build/src/relation_partition_trigger.js +11 -3
  95. package/build/src/relation_partition_trigger.js.map +1 -1
  96. package/build/src/relations/define_relations_config.d.ts +51 -0
  97. package/build/src/relations/define_relations_config.d.ts.map +1 -1
  98. package/build/src/relations/define_relations_config.js +68 -1
  99. package/build/src/relations/define_relations_config.js.map +1 -1
  100. package/build/src/relations/manager.d.ts +106 -6
  101. package/build/src/relations/manager.d.ts.map +1 -1
  102. package/build/src/relations/manager.js +368 -30
  103. package/build/src/relations/manager.js.map +1 -1
  104. package/build/src/relations/reconcile.d.ts +81 -6
  105. package/build/src/relations/reconcile.d.ts.map +1 -1
  106. package/build/src/relations/reconcile.js +233 -77
  107. package/build/src/relations/reconcile.js.map +1 -1
  108. package/build/src/scope_outbox.d.ts +54 -0
  109. package/build/src/scope_outbox.d.ts.map +1 -1
  110. package/build/src/scope_outbox.js +274 -33
  111. package/build/src/scope_outbox.js.map +1 -1
  112. package/build/src/shared/backend_guard.d.ts +28 -0
  113. package/build/src/shared/backend_guard.d.ts.map +1 -1
  114. package/build/src/shared/backend_guard.js +52 -0
  115. package/build/src/shared/backend_guard.js.map +1 -1
  116. package/build/src/shared/sql_expiry.d.ts +2 -0
  117. package/build/src/shared/sql_expiry.d.ts.map +1 -1
  118. package/build/src/shared/sql_expiry.js +4 -0
  119. package/build/src/shared/sql_expiry.js.map +1 -1
  120. package/build/src/shared/transaction_guard.d.ts +53 -0
  121. package/build/src/shared/transaction_guard.d.ts.map +1 -0
  122. package/build/src/shared/transaction_guard.js +74 -0
  123. package/build/src/shared/transaction_guard.js.map +1 -0
  124. package/build/src/sql_descendants.d.ts +8 -0
  125. package/build/src/sql_descendants.d.ts.map +1 -1
  126. package/build/src/sql_descendants.js.map +1 -1
  127. package/build/src/testing/contract.d.ts +55 -4
  128. package/build/src/testing/contract.d.ts.map +1 -1
  129. package/build/src/testing/contract.js +244 -9
  130. package/build/src/testing/contract.js.map +1 -1
  131. package/build/src/testing/main.d.ts +6 -4
  132. package/build/src/testing/main.d.ts.map +1 -1
  133. package/build/src/testing/main.js +3 -2
  134. package/build/src/testing/main.js.map +1 -1
  135. package/build/src/testing/migration_contract.d.ts +9 -0
  136. package/build/src/testing/migration_contract.d.ts.map +1 -1
  137. package/build/src/testing/migration_contract.js +5 -2
  138. package/build/src/testing/migration_contract.js.map +1 -1
  139. package/build/src/testing/relations_contract.d.ts +23 -1
  140. package/build/src/testing/relations_contract.d.ts.map +1 -1
  141. package/build/src/testing/relations_contract.js +603 -19
  142. package/build/src/testing/relations_contract.js.map +1 -1
  143. package/build/src/testing/relations_reconcile_contract.d.ts.map +1 -1
  144. package/build/src/testing/relations_reconcile_contract.js +49 -1
  145. package/build/src/testing/relations_reconcile_contract.js.map +1 -1
  146. package/build/src/testing/scope_outbox_contract.d.ts +98 -0
  147. package/build/src/testing/scope_outbox_contract.d.ts.map +1 -0
  148. package/build/src/testing/scope_outbox_contract.js +677 -0
  149. package/build/src/testing/scope_outbox_contract.js.map +1 -0
  150. package/build/src/traits/has_uuid.d.ts +2 -2
  151. package/build/src/traits/has_uuid.d.ts.map +1 -1
  152. package/build/src/types.d.ts +708 -38
  153. package/build/src/types.d.ts.map +1 -1
  154. package/build/src/types.js +55 -0
  155. package/build/src/types.js.map +1 -1
  156. package/build/stubs/config/authorization.stub +45 -1
  157. package/build/stubs/migration.stub +20 -10
  158. package/package.json +1 -1
@@ -1,13 +1,13 @@
1
- import type { AuthorizationConfig } from './define_config.js';
1
+ import { type AuthorizationConfig } from './define_config.js';
2
2
  import type { FreezeKind, FreezeToken } from './freeze.js';
3
- import type { AuthorizationDriver, AuthorizedScopes, CatalogRole, CatalogRoleRef, DenyOptions, DenyRef, ExcludedSubtree, GrantOptions, GrantOutcome, RoleQuery, ScopedRoleChanges, ScopedRoleSpec, ReconcileOptions, ReconcileReport, ScopedWriteOptions, ScopeRelayReport, ScopeRef, ScopeTreeWriteOptions, ScopeType, SubjectRef } from './types.js';
3
+ import type { AuthorizationDriver, AuthorizationDriverCapabilities, AuthorizedScopes, CatalogRole, CatalogRoleRef, DenyOptions, DenyRef, ExcludedSubtree, GrantOptions, GrantOutcome, RoleQuery, ScopedRoleChanges, ScopedRoleSpec, ReconcileOptions, ReconcileReport, ScopedWriteOptions, ScopeEnqueueReceipt, ScopeRequeueReport, ScopeRelayReport, ScopeRef, ScopeTreeWriteOptions, ScopeType, SubjectRef, RelationsDriverFactory } from './types.js';
4
4
  /**
5
5
  * Lo que devuelve `AuthorizationManager.forRequest()`: la misma API que el
6
6
  * manager (lecturas, escrituras, `scopes.*`), con los ancestros memoizados
7
7
  * SOLO en las lecturas. Es un tipo, no otra clase: la vista es un manager
8
8
  * hijo que comparte config, driver y hooks con su padre.
9
9
  */
10
- export type AuthorizationView = Pick<AuthorizationManager, 'authorize' | 'hasRole' | 'listSubjects' | 'listScopes' | 'listRoles' | 'listRoleScopes' | 'grant' | 'revoke' | 'deny' | 'removeDeny' | 'scopes' | 'driver' | 'forRequest' | 'isWithin' | 'listDenies' | 'effectivePermissions' | 'authorizeMany' | 'authorizedScopes' | 'expandExcludedSubtrees' | 'defineScopedRole' | 'updateScopedRole' | 'deleteScopedRole'>;
10
+ export type AuthorizationView = Pick<AuthorizationManager, 'authorize' | 'hasRole' | 'listSubjects' | 'listScopes' | 'listRoles' | 'listRoleScopes' | 'grant' | 'revoke' | 'deny' | 'removeDeny' | 'scopes' | 'driver' | 'capabilities' | 'forRequest' | 'isWithin' | 'listDenies' | 'effectivePermissions' | 'authorizeMany' | 'authorizedScopes' | 'expandExcludedSubtrees' | 'defineScopedRole' | 'updateScopedRole' | 'deleteScopedRole'>;
11
11
  /**
12
12
  * Expande los `excludedSubtrees` de un `all` (2D · F10) a la lista plana de
13
13
  * scopes que hay que restar: cada scope denegado y TODOS sus descendientes,
@@ -34,8 +34,43 @@ export declare const MAX_SCOPE_BOUND = 10000000;
34
34
  */
35
35
  export declare const DEFAULT_RELAY_BATCH = 100;
36
36
  export declare const DEFAULT_RELAY_LIMIT = 10000;
37
+ /**
38
+ * **Saltos que la sonda de `only` sigue hacia atrás para heredar el ORIGEN de
39
+ * un bloqueo** (2.4.0-alpha.6). Cada salto es una consulta `earlierPending`
40
+ * (0,69 ms) sobre una entrada NO pedida; la cadena es de ids estrictamente
41
+ * decrecientes, así que termina sola — la cota solo acota el coste dentro de
42
+ * una petición inline. Pasada la cota el origen se toma por FALLO (la purga se
43
+ * aplaza a la pasada completa): degrada hacia lo seguro, nunca aplica sin saber.
44
+ */
45
+ export declare const RELAY_ORIGIN_MAX_HOPS = 100;
46
+ /**
47
+ * **Cota PROPIA del censo de aparcadas** (alpha.5 · cierre, auditor 🟠 2). Las
48
+ * claves de `dead()` que taponan `attached`/`moved` se leen COMPLETAS en cada
49
+ * pasada, sean cuales sean `limit` y `batchSize` (con `--limit 50` o la receta
50
+ * inline `{ only, limit: 1 }` un censo acotado por `limit` dejaba a la aparcada
51
+ * 101 sin taponar y el `attached` colgaba del padre VIEJO — y la sonda de
52
+ * `only` no la ve porque `earlierPending` excluye lo aparcado). Si hay más
53
+ * aparcadas que esto, la pasada se NIEGA (500) en vez de aplicar con un tapón
54
+ * incompleto: una cola así es un incidente, no un lote.
55
+ */
56
+ export declare const PARKED_CENSUS_MAX = 50000;
37
57
  /** Vida por defecto de una vista de `forRequest()` para LEER (F9): un request, no un módulo. */
38
58
  export declare const DEFAULT_VIEW_MAX_AGE_MS = 30000;
59
+ /**
60
+ * Cada cuánto reintenta `acquire()` una pasada con `waitForLeaseMs` (2.4.0-alpha.8;
61
+ * panel relay 2, cuestión 7). Medido en PG: 0,29 ms por sondeo ocupado, y el
62
+ * sondeo no retiene conexión entre intentos (la transacción del intento fallido
63
+ * se revierte). El default de `waitForLeaseMs` es 0: el `busy` inmediato de
64
+ * siempre.
65
+ */
66
+ export declare const RELAY_LEASE_POLL_MS = 25;
67
+ /**
68
+ * Tope de `waitForLeaseMs` (cierre alpha.8, 🟡 1 del auditor): una espera sin tope
69
+ * cuelga la petición de un tenant; por encima es 500 `E_AUTHZ_CONFIG`. Y la espera
70
+ * se cuenta en SONDEOS (`waitForLeaseMs / RELAY_LEASE_POLL_MS`), no solo con el
71
+ * reloj de pared: con `config.clock` fijo el sondeo por reloj no terminaba nunca.
72
+ */
73
+ export declare const RELAY_WAIT_LEASE_MAX_MS = 60000;
39
74
  export interface ForRequestOptions {
40
75
  /**
41
76
  * Milisegundos durante los que la vista puede LEER (default 30 000).
@@ -63,6 +98,38 @@ export interface FreezeStatus {
63
98
  untilMs: number | null;
64
99
  fence: number;
65
100
  }
101
+ /**
102
+ * Lo que `withFrozenWrites` le cuenta a la pasada que corre dentro (L-1 · J1):
103
+ * el fence de la ventana, su lease y si se PERDIÓ a mitad (`lapsed`), para
104
+ * que una pasada de plataforma ajena al manager publique la garantía en vez
105
+ * de suponerla (`report.frozen`).
106
+ */
107
+ export interface FrozenWindow {
108
+ fence: number;
109
+ /**
110
+ * El lease de la ventana. En la ventana del OPERADOR adoptada
111
+ * (2.4.0-alpha.10) es lo que le QUEDABA al adoptarla (`untilMs − ahora`);
112
+ * `null` solo si la ventana no caduca.
113
+ */
114
+ leaseMs: number | null;
115
+ /**
116
+ * Solo en la ventana del OPERADOR adoptada (2.4.0-alpha.10, 🟡 3 del sexto
117
+ * informe de COGNITIV): el instante (ms de pared) en el que caduca, de la
118
+ * fila, o `null` si no caduca. Quien adopta la ventana no la renueva: si
119
+ * caduca a mitad, `lapsed` lo dice; esto dice que PUEDE caducar.
120
+ */
121
+ untilMs?: number | null;
122
+ /**
123
+ * EN QUÉ ventana corrió (2.4.0-alpha.10, S2): la del OPERADOR adoptada, una
124
+ * PROPIA tomada para la pasada, o la que ya sostenía este manager
125
+ * (`enclosing`). La salida de los comandos lo dice siempre: «corrí dentro del
126
+ * cutover» y «tomé mi ventana porque no había ninguna» eran letra a letra
127
+ * iguales.
128
+ */
129
+ window?: 'operator' | 'own' | 'enclosing';
130
+ /** ¿Se perdió la ventana en algún momento? (renovación fallida, fila ajena o vencida). */
131
+ lapsed: () => Promise<boolean>;
132
+ }
66
133
  /**
67
134
  * Manager de autorización — la fachada que usan middleware, services y
68
135
  * seeders. Resuelve el driver activo del config y notifica cada escritura
@@ -109,6 +176,34 @@ export declare class AuthorizationManager {
109
176
  * sin `withClock` con `clock` declarado es 500 `E_AUTHZ_CONFIG`.
110
177
  */
111
178
  driver(): Promise<AuthorizationDriver>;
179
+ /**
180
+ * **Lo que el driver ACTIVO declara, de solo lectura** (2.4.0-alpha.4;
181
+ * pregunta 1 de COGNITIV, panel alpha.4). Para que el código de tenant
182
+ * pueda ramificar —`if ((await authorization.capabilities()).transactionalWrites)
183
+ * grant(…, { transaction }) else grant(…)`— sin llamar a `driver()`, que
184
+ * sigue siendo API de PLATAFORMA (el grep del README sigue significando lo
185
+ * que significa).
186
+ *
187
+ * Es `(await this.driver()).capabilities` y NADA más, a propósito:
188
+ * - las capacidades son de la INSTANCIA (`database` decide
189
+ * `transactionalWrites` desde sus opciones), así que hay que resolver;
190
+ * - y se resuelve POR `driver()`, con sus dos puertas
191
+ * (`requireTransactionalWrites` y el gate de deriva del árbol) y su
192
+ * caché. Resolverlo por otro camino «para que la lectura no lance» y
193
+ * guardarlo en `#driver` dejaría `driver()` sirviendo un driver que
194
+ * nunca pasó por las puertas: un bypass permanente del gate de deriva
195
+ * (🔴 1 del auditor). Por eso hereda los 500 de las puertas
196
+ * (`E_AUTHZ_CONFIG`, `E_AUTHZ_SCOPE_DRIFT_UNGUARDED`) y la factory del
197
+ * consumidor: llámalo al arrancar (un hook `booted`/`ready`), no por
198
+ * request en un endpoint de metadatos.
199
+ *
200
+ * Devuelve una copia CONGELADA y NORMALIZADA: todas las claves de
201
+ * `AuthorizationDriverCapabilities` presentes, solo `true` es `true`
202
+ * (la misma lectura que la puerta 1), nunca `undefined`; mutarla no toca
203
+ * el objeto que leen las puertas. La vista de `forRequest()` delega en el
204
+ * padre (por `driver()`).
205
+ */
206
+ capabilities(): Promise<Readonly<AuthorizationDriverCapabilities>>;
112
207
  /**
113
208
  * **Congela las ESCRITURAS del motor, DURABLE** (3b-7; decisión del dueño
114
209
  * del 2026-08-31 (3b): B + E-analista). Operación de PLATAFORMA, como
@@ -159,8 +254,50 @@ export declare class AuthorizationManager {
159
254
  * `freezeStatus()`: eso es la fila, no la memoria.
160
255
  */
161
256
  get frozen(): boolean;
257
+ /**
258
+ * La clave (en `relations.drivers`) del driver de RELACIONES activo:
259
+ * `relations.default ?? default` (2.4.0-alpha.10). La lee el guard de la
260
+ * dirección rancia de `runRelationsReconcile`; desde el cierre del auditor
261
+ * (R4) el llamante ya no puede contradecirla con un `activeKey` propio.
262
+ */
263
+ relationsDriverKey(): string;
264
+ /** Las claves registradas en `relations.drivers` del config de ESTE manager (vacío si no hay relaciones). */
265
+ relationsDriverKeys(): string[];
266
+ /**
267
+ * La factory registrada bajo `key` en `relations.drivers` de ESTE manager, o
268
+ * `undefined` (cierre del auditor de alpha.10 · R4). `runRelationsReconcile`
269
+ * resuelve el origen y el destino por aquí —del MISMO config que decide el
270
+ * activo— y juzga la identidad por la factory resuelta, no por la etiqueta:
271
+ * dos claves con la misma factory son el mismo driver (y dos factories DISTINTAS
272
+ * sobre el mismo backend NO: límite declarado, cierre-2 · C1).
273
+ *
274
+ * **API de PLATAFORMA, junto a `driver()`** (cierre-2 · C6): con esta factory
275
+ * cualquier código que tenga el manager —vistas de `forRequest()` incluidas—
276
+ * construye un driver de relaciones NO activo y escribe en él sin `assertWrite`,
277
+ * `requireActor`, freeze ni `onRelationWrite`. No añade capacidad (el config ya
278
+ * da las factories), pero es otra cosa que buscar en una revisión.
279
+ */
280
+ relationsDriverFactory(key: string): RelationsDriverFactory | undefined;
162
281
  /** El freeze VIVO de la fila compartida, o `null`. Lo lee cualquiera; solo el token lo levanta. */
163
282
  freezeStatus(): Promise<FreezeStatus | null>;
283
+ /**
284
+ * **La ÚLTIMA ventana de la fila, también la CADUCADA** (2.4.0-alpha.10, 🟠 2
285
+ * del sexto informe de COGNITIV). `freezeStatus()` responde solo lo VIVO —y
286
+ * así lo siguen usando la barrera y los comandos—, de modo que una ventana
287
+ * cuyo lease venció era indistinguible de «nunca hubo»: `authz:unfreeze`
288
+ * decía éxito y el último paso del cutover no delataba que las escrituras
289
+ * habían vuelto a entrar a mitad. Se distingue por la fila: `releaseFreeze`
290
+ * pone el motivo a `null` al levantar, así que motivo puesto + `untilMs` en
291
+ * el pasado es una ventana que CADUCÓ sin que nadie la cerrase.
292
+ *
293
+ * `null` = nunca hubo o ya se levantó; `expired: false` = viva (lo mismo que
294
+ * `freezeStatus()`); `expired: true` = caducada. `checkedAtMs` es el instante
295
+ * del reloj del config con el que se decidió.
296
+ */
297
+ lastFreezeStatus(): Promise<(FreezeStatus & {
298
+ expired: boolean;
299
+ checkedAtMs: number;
300
+ }) | null>;
164
301
  /**
165
302
  * `freeze()` + `finally unfreeze(token)`. El `finally` es la parte que
166
303
  * importa: una migración que revienta a la mitad no puede dejar la
@@ -169,7 +306,10 @@ export declare class AuthorizationManager {
169
306
  * A1.1/A1.3): si este manager ya sostiene el freeze, la ventana interior
170
307
  * no toma otro ni lo levanta al salir — la exterior sigue en pie.
171
308
  */
172
- withFrozenWrites<T>(reason: string, fn: () => Promise<T>): Promise<T>;
309
+ withFrozenWrites<T>(reason: string, fn: (window: FrozenWindow) => Promise<T>, options?: {
310
+ kind?: FreezeKind;
311
+ operatorAsContext?: boolean;
312
+ }): Promise<T>;
173
313
  /** Solo tests: fuerza re-resolución del driver. */
174
314
  clearCachedDriver(): void;
175
315
  /**
@@ -181,7 +321,7 @@ export declare class AuthorizationManager {
181
321
  * Espía: si la validación falla, cero llamadas al driver.
182
322
  */
183
323
  readonly scopes: {
184
- attached: (child: ScopeRef, parent: ScopeRef, options?: ScopeTreeWriteOptions) => Promise<void>;
324
+ attached: (child: ScopeRef, parent: ScopeRef, options?: ScopeTreeWriteOptions) => Promise<ScopeEnqueueReceipt>;
185
325
  /**
186
326
  * `moved` NO vuelve a juzgar el catálogo, y no tiene por qué (3b-1 · D3,
187
327
  * auditor 3G): mover un scope es un hecho del árbol, no una escritura de
@@ -195,7 +335,7 @@ export declare class AuthorizationManager {
195
335
  * invariante del sistema. Es ruidosa: `authz:catalog:diff` la lista como
196
336
  * `shadowedByAncestor` (y `--fail-on-shadows` la cuenta como deriva).
197
337
  */
198
- moved: (child: ScopeRef, newParent: ScopeRef, options?: ScopeTreeWriteOptions) => Promise<void>;
338
+ moved: (child: ScopeRef, newParent: ScopeRef, options?: ScopeTreeWriteOptions) => Promise<ScopeEnqueueReceipt>;
199
339
  /**
200
340
  * Hechos primero (el driver demuestra cero o lanza), arista después
201
341
  * (S6): si la purga muere a medias, el subárbol sigue colgado y los
@@ -219,7 +359,7 @@ export declare class AuthorizationManager {
219
359
  * O(1), sin rango que medir, sin árbol que enumerar y sin nada que
220
360
  * declarar a medias.
221
361
  */
222
- detached: (child: ScopeRef, options?: ScopeTreeWriteOptions) => Promise<void>;
362
+ detached: (child: ScopeRef, options?: ScopeTreeWriteOptions) => Promise<ScopeEnqueueReceipt>;
223
363
  };
224
364
  /**
225
365
  * **Drena la outbox del árbol y aplica los cambios al driver** (3b-2d).
@@ -264,12 +404,104 @@ export declare class AuthorizationManager {
264
404
  * **fail-open temporal** —el tenant antiguo conserva acceso tras un
265
405
  * `moved`, los denies heredados no aplican tras un `attached`—. No hay
266
406
  * 2PC; es el precio de tener el árbol en dos sitios.
407
+ *
408
+ * **`only` (2.4.0-alpha.5 · R1)**: relevar SOLO estas entradas —los ids del
409
+ * recibo de `scopes.*` que ESTE proceso acaba de recibir, jamás del cuerpo
410
+ * de una petición— sin leer la cola de los demás (medido: 4 507 ms → 19 ms
411
+ * con 500 entradas ajenas por delante). El orden por clave NO se relaja:
412
+ * antes de aplicar cada entrada pedida se sondea la cola ENTERA
413
+ * (`earlierPending`, o paginando `pending()` si la outbox no lo tiene) y,
414
+ * si hay una pendiente ANTERIOR que comparte clave de scope con ella, sale
415
+ * `deferred` con `depends-on:<id>` — nunca aplicada fuera de orden (el 🔴 1
416
+ * del panel relay, medido: un `attached(child, unit)` aplicado antes que su
417
+ * `moved(unit → orgB)` dejaba al editor de la org VIEJA autorizando sobre el
418
+ * hijo). `remaining` y `dead` siguen siendo GLOBALES. `only: []` es 500
419
+ * (un `filter` vacío del consumidor no puede acabar en drenaje ni en un
420
+ * reporte vacío en verde), y una outbox que no honre el filtro también.
421
+ *
422
+ * **Lo aparcado tapona por clave (alpha.5 · R2a)**: las claves de `dead()`
423
+ * siembran el bloqueo al inicio de la pasada para lo que CONCEDE o recuelga
424
+ * (`attached`/`moved`, `deferred` con `parked:<id>`) y dejan pasar lo que
425
+ * RETIRA (`detached`: una purga nunca queda bloqueada, invariante 11). Y un
426
+ * 503 del backend NO consume intento (`markFailed(..., { transient })`).
267
427
  */
268
428
  relayScopeChanges(options?: {
269
429
  limit?: number;
270
430
  batchSize?: number;
271
431
  dryRun?: boolean;
432
+ only?: Array<string | number>;
433
+ waitForLeaseMs?: number;
434
+ /**
435
+ * Bajo `only`, `dead[]` va SIN `error` por DEFECTO (2.4.0-alpha.8): la
436
+ * causa la escribe el backend sobre el árbol de OTRO tenant; `'full'`
437
+ * la devuelve (lo de hasta alpha.7). Sin `only` no cambia nada.
438
+ */
439
+ deadDetail?: 'full';
272
440
  }): Promise<ScopeRelayReport>;
441
+ /**
442
+ * **Devuelve entradas APARCADAS a la cola** (2.4.0-alpha.5 · R2b; panel
443
+ * relay, cuestión 2). Es lo que hay detrás de `node ace authz:scopes:requeue
444
+ * --id`. Operación de PLATAFORMA como `relayScopeChanges` y `driver()`: sin
445
+ * actor, sin `within`, **no se expone por HTTP**.
446
+ *
447
+ * **La sonda anti-reversión vive AQUÍ, no en la outbox**: reaplicar una
448
+ * entrada ANTERIOR a otra ya APLICADA sobre la misma clave de scope
449
+ * reescribe el árbol del store en un orden que nunca existió — el `moved`
450
+ * viejo tras el nuevo deja el padre VIEJO con UN solo padre, así que
451
+ * `assertOneParent` no lo delata y el tenant antiguo recupera el acceso
452
+ * (auditor 🔴 2, `relay-auditor-5.ts`, medido). Por eso, antes de tocar la
453
+ * cola, cada aparcada pedida se compara contra las aplicadas posteriores
454
+ * que compartan clave (`outbox.laterApplied`, espejo de `earlierPending`)
455
+ * y si hay alguna se NIEGA con 500 `E_AUTHZ_REQUEUE_REFUSED` nombrándola —
456
+ * todo o nada, cero filas tocadas—. El remedio correcto es
457
+ * `authz:reconcile --to=<driver>`, que recalcula con el árbol de HOY. La
458
+ * sonda es del manager porque necesita las claves del cambio
459
+ * (`#changeKeys`); `outbox.requeue` queda mecánico y una outbox de
460
+ * terceros la hereda gratis.
461
+ *
462
+ * **`force`** salta la sonda y devuelve el diff en `overrides`. Existe para
463
+ * el comando ace —que lo imprime y exige el flag explícito (decisión del
464
+ * dueño del 2026-09-09 (2))— y para nada más: llamarlo con `force: true`
465
+ * desde un endpoint es policy en una API sin policy.
466
+ *
467
+ * `attempts` queda en `maxAttempts − 1` (lo hace la outbox): si la causa
468
+ * sigue rota la entrada vuelve a aparcarse en UNA pasada y contamina su
469
+ * clave solo en esa pasada —un requeue automatizado de lo irreparable no
470
+ * es un grifo de aplazamiento permanente (auditor 🔴 2, segunda mitad)—; si
471
+ * el operador la arregló, entra a la primera. No hay bucle: lo aparcado no
472
+ * vuelve solo a `pending()`.
473
+ *
474
+ * Exige `dead`, `requeue` y `laterApplied` en el puerto (500
475
+ * `E_AUTHZ_UNSUPPORTED` nombrando el que falte): sin censo no se sabe qué
476
+ * se reencola y sin sonda no hay requeue. Sin `apply` no pasa por la
477
+ * barrera del freeze: no escribe en el backend; la pasada que aplique la
478
+ * entrada sí la pasa.
479
+ *
480
+ * **`apply: true` — reencolar Y relevar en la misma llamada** (2.4.0-alpha.8;
481
+ * panel relay 2, cuestión 4; decisión del dueño 2026-09-10 (4)). Medido
482
+ * (tester P14): la reencolada vuelve con su id ORIGINAL (menor) y la
483
+ * siguiente pasada `only` del tenant salía `deferred · depends-on:` — el
484
+ * incidente no se cerraba con un comando. Con `apply`, tras reencolar se
485
+ * releva SOLO eso (`only` = exactamente los ids reencolados: los
486
+ * dependientes NO se arrastran, quedan `deferred`/pendientes y el reporte lo
487
+ * dice —«`only` es mi recibo»—) y el reporte del relay viaja en
488
+ * `report.relay`. Cuatro condiciones, todas fijadas con caso: (1) **un solo
489
+ * lease** para toda la llamada (tomarlo dos veces era `busy` en verde,
490
+ * auditor 🟠 5) — se toma PRIMERO, y si está ocupado es `relay.busy` con
491
+ * CERO filas reencoladas (reencolar y decir `busy` dejaba `attempts = max −
492
+ * 1` y la entrada se volvía a aparcar contaminando su clave); (2) **pasa la
493
+ * barrera del freeze** ANTES de tocar nada (con `apply` escribe el árbol);
494
+ * (3) **excluyente con `force`** (500 juntos: con las dos, revertir el árbol
495
+ * pasaba de dos llamadas de plataforma a una, auditor 🟠 6); (4) la sonda
496
+ * anti-reversión corre ANTES de reencolar, como siempre. `waitForLeaseMs`
497
+ * (solo con `apply`) es la misma espera acotada que en el relay, para que
498
+ * el comando que cierra el incidente no pierda siempre contra el cron.
499
+ */
500
+ requeueScopeChanges(ids: Array<string | number>, options?: {
501
+ force?: boolean;
502
+ apply?: boolean;
503
+ waitForLeaseMs?: number;
504
+ }): Promise<ScopeRequeueReport>;
273
505
  /**
274
506
  * **`authz:reconcile --to=<driver>`** (3b-3a): la ÚNICA primitiva de
275
507
  * migración y verificación del paquete, y el motivo de la fase entera —
@@ -1 +1 @@
1
- {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/manager.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AAyB7D,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAqC1D,OAAO,KAAK,EACV,mBAAmB,EAEnB,gBAAgB,EAGhB,WAAW,EACX,cAAc,EACd,WAAW,EACX,OAAO,EACP,eAAe,EACf,YAAY,EACZ,YAAY,EACZ,SAAS,EAGT,iBAAiB,EACjB,cAAc,EAGd,gBAAgB,EAChB,eAAe,EAIf,kBAAkB,EAElB,gBAAgB,EAChB,QAAQ,EAER,qBAAqB,EACrB,SAAS,EACT,UAAU,EAEX,MAAM,YAAY,CAAA;AAuBnB;;;;;GAKG;AACH,MAAM,MAAM,iBAAiB,GAAG,IAAI,CAClC,oBAAoB,EAClB,WAAW,GACX,SAAS,GACT,cAAc,GACd,YAAY,GACZ,WAAW,GACX,gBAAgB,GAChB,OAAO,GACP,QAAQ,GACR,MAAM,GACN,YAAY,GACZ,QAAQ,GACR,QAAQ,GACR,YAAY,GACZ,UAAU,GACV,YAAY,GACZ,sBAAsB,GACtB,eAAe,GACf,kBAAkB,GAClB,wBAAwB,GACxB,kBAAkB,GAClB,kBAAkB,GAClB,kBAAkB,CACrB,CAAA;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,iBAAiB,EAAE,QAAQ,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAEhH;AAED,qGAAqG;AACrG,eAAO,MAAM,kBAAkB,OAAQ,CAAA;AACvC,eAAO,MAAM,uBAAuB,QAAS,CAAA;AAC7C;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,WAAa,CAAA;AACzC;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,MAAM,CAAA;AACtC,eAAO,MAAM,mBAAmB,QAAS,CAAA;AAGzC,gGAAgG;AAChG,eAAO,MAAM,uBAAuB,QAAS,CAAA;AAE7C,MAAM,WAAW,iBAAiB;IAChC;;;;;;;;OAQG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB;;;;OAIG;IACH,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;CACnB;AAgBD,4FAA4F;AAC5F,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,UAAU,GAAG,SAAS,CAAA;IAC5B,8EAA8E;IAC9E,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,KAAK,EAAE,MAAM,CAAA;CACd;AAUD;;;;;;;;GAQG;AACH,qBAAa,oBAAoB;;gBAwBnB,MAAM,EAAE,mBAAmB;IAkCvC;;;;;;;;;;;;;;;;OAgBG;IACH,UAAU,CAAC,OAAO,GAAE,iBAAsB,GAAG,iBAAiB;IAmB9D;;;;;;;;;;;;;;OAcG;IACG,MAAM,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAyD5C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAkCG;IACG,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,GAAE;QAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,IAAI,CAAC,EAAE,UAAU,CAAA;KAAO,GAAG,OAAO,CAAC,WAAW,CAAC;IA4DjH;;;OAGG;IACG,QAAQ,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;IAiBpD;;;;OAIG;IACH,IAAI,MAAM,IAAI,OAAO,CAEpB;IAED,mGAAmG;IAC7F,YAAY,IAAI,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAYlD;;;;;;;OAOG;IACG,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAuH3E,mDAAmD;IACnD,iBAAiB,IAAI,IAAI;IAiCzB;;;;;;;OAOG;IACH,QAAQ,CAAC,MAAM;0BAOW,QAAQ,UAAU,QAAQ,YAAY,qBAAqB,KAAG,OAAO,CAAC,IAAI,CAAC;QAiBnG;;;;;;;;;;;;WAYG;uBACkB,QAAQ,aAAa,QAAQ,YAAY,qBAAqB,KAAG,OAAO,CAAC,IAAI,CAAC;QAenG;;;;;;;;;;;;;;;;;;;;;;WAsBG;0BACqB,QAAQ,YAAY,qBAAqB,KAAG,OAAO,CAAC,IAAI,CAAC;MA6ClF;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2CG;IACG,iBAAiB,CACrB,OAAO,GAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAA;KAAO,GACrE,OAAO,CAAC,gBAAgB,CAAC;IAkJ5B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAsCG;IACG,SAAS,CACb,OAAO,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,gBAAgB,GACxD,OAAO,CAAC,eAAe,CAAC;IA4Z3B;;;;;OAKG;IACG,QAAQ,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;IA8J5D,SAAS,CAAC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;IAKrF,OAAO,CAAC,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;IAKtF;;;;;;;;OAQG;IACG,aAAa,CAAC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IA0BpG,2GAA2G;IACrG,YAAY,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAKrE,UAAU,CAAC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAKxE,SAAS,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAKlE,cAAc,CAAC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAKpF,mHAAmH;IAC7G,UAAU,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAM3E;;;;;;;OAOG;IACG,oBAAoB,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAiKnF;;;;;;;;;;;;;;;OAeG;IACG,gBAAgB,CACpB,KAAK,EAAE,UAAU,EACjB,UAAU,EAAE,QAAQ,EACpB,IAAI,EAAE,cAAc,EACpB,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,WAAW,CAAC;IAmGvB;;;;;;;;OAQG;IACG,gBAAgB,CACpB,KAAK,EAAE,UAAU,EACjB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,iBAAiB,EAC1B,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,WAAW,CAAC;IA2FvB;;;;;;OAMG;IACG,gBAAgB,CAAC,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBxG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2FG;IACG,gBAAgB,CAAC,OAAO,GAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAC;QAAC,cAAc,CAAC,EAAE,OAAO,CAAA;KAAO,GAAG,OAAO,CAAC;QAC3F,OAAO,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,WAAW,CAAC;YAAC,KAAK,EAAE,QAAQ,CAAC;YAAC,WAAW,EAAE,MAAM,EAAE,CAAC;YAAC,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;YAAC,aAAa,EAAE,OAAO,GAAG,SAAS,CAAA;SAAE,CAAC,CAAA;QAClJ,MAAM,EAAE,cAAc,EAAE,CAAA;QACxB,OAAO,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,cAAc,CAAC;YAAC,MAAM,EAAE,iBAAiB,CAAA;SAAE,CAAC,CAAA;QACnE,2FAA2F;QAC3F,SAAS,EAAE,OAAO,CAAA;QAClB,MAAM,EAAE,OAAO,CAAA;KAChB,CAAC;IAshBF;;;;;;OAMG;IACG,KAAK,CACT,OAAO,EAAE,UAAU,EACnB,IAAI,EAAE,SAAS,EACf,KAAK,EAAE,QAAQ,EACf,OAAO,CAAC,EAAE,YAAY,GACrB,OAAO,CAAC,YAAY,CAAC;IAyCxB;;;;;OAKG;IACG,MAAM,CAAC,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAS1G,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IASpG,UAAU,CAAC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IASvH;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2BG;IACG,gBAAgB,CACpB,OAAO,EAAE,UAAU,EACnB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,SAAS,EACpB,OAAO,GAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAO,GACnC,OAAO,CAAC,gBAAgB,CAAC;IAoE5B;;;;;;;OAOG;IACG,sBAAsB,CAC1B,QAAQ,EAAE,eAAe,EAAE,EAC3B,OAAO,GAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAO,GACnC,OAAO,CAAC,QAAQ,EAAE,CAAC;CAmNvB"}
1
+ {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/manager.ts"],"names":[],"mappings":"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"}