@jantstack/adonis-authz 2.5.0-alpha.1 → 2.5.0-alpha.2
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 +174 -17
- package/build/commands/authz_relations_reconcile.d.ts +7 -62
- package/build/commands/authz_relations_reconcile.d.ts.map +1 -1
- package/build/commands/authz_relations_reconcile.js +94 -118
- package/build/commands/authz_relations_reconcile.js.map +1 -1
- package/build/index.d.ts +1 -1
- package/build/index.d.ts.map +1 -1
- package/build/index.js +1 -1
- package/build/index.js.map +1 -1
- package/build/providers/authz_provider.d.ts.map +1 -1
- package/build/providers/authz_provider.js +4 -1
- package/build/providers/authz_provider.js.map +1 -1
- package/build/src/define_config.d.ts +32 -0
- package/build/src/define_config.d.ts.map +1 -1
- package/build/src/define_config.js +109 -0
- package/build/src/define_config.js.map +1 -1
- package/build/src/drivers/database_relations_driver.d.ts.map +1 -1
- package/build/src/drivers/database_relations_driver.js +3 -2
- package/build/src/drivers/database_relations_driver.js.map +1 -1
- package/build/src/drivers/openfga_driver.d.ts +30 -4
- package/build/src/drivers/openfga_driver.d.ts.map +1 -1
- package/build/src/drivers/openfga_driver.js +49 -9
- package/build/src/drivers/openfga_driver.js.map +1 -1
- package/build/src/drivers/openfga_relations_driver.d.ts +66 -9
- package/build/src/drivers/openfga_relations_driver.d.ts.map +1 -1
- package/build/src/drivers/openfga_relations_driver.js +145 -21
- package/build/src/drivers/openfga_relations_driver.js.map +1 -1
- package/build/src/errors.d.ts +36 -0
- package/build/src/errors.d.ts.map +1 -1
- package/build/src/errors.js +36 -0
- package/build/src/errors.js.map +1 -1
- package/build/src/manager.d.ts.map +1 -1
- package/build/src/manager.js +6 -1
- package/build/src/manager.js.map +1 -1
- package/build/src/openfga.d.ts +1 -1
- package/build/src/openfga.d.ts.map +1 -1
- package/build/src/openfga.js +1 -1
- package/build/src/openfga.js.map +1 -1
- package/build/src/relations/define_relations_config.d.ts +74 -1
- package/build/src/relations/define_relations_config.d.ts.map +1 -1
- package/build/src/relations/define_relations_config.js +201 -7
- package/build/src/relations/define_relations_config.js.map +1 -1
- package/build/src/relations/manager.d.ts.map +1 -1
- package/build/src/relations/manager.js +4 -2
- package/build/src/relations/manager.js.map +1 -1
- package/build/src/relations/reconcile.d.ts +77 -13
- package/build/src/relations/reconcile.d.ts.map +1 -1
- package/build/src/relations/reconcile.js +247 -36
- package/build/src/relations/reconcile.js.map +1 -1
- package/build/src/relations_config_store.d.ts.map +1 -1
- package/build/src/relations_config_store.js +29 -7
- package/build/src/relations_config_store.js.map +1 -1
- package/build/src/relations_reconcile.d.ts +79 -0
- package/build/src/relations_reconcile.d.ts.map +1 -0
- package/build/src/relations_reconcile.js +85 -0
- package/build/src/relations_reconcile.js.map +1 -0
- package/build/src/scope_outbox.d.ts +9 -5
- package/build/src/scope_outbox.d.ts.map +1 -1
- package/build/src/scope_outbox.js +7 -4
- package/build/src/scope_outbox.js.map +1 -1
- package/build/src/testing/relations_contract.d.ts.map +1 -1
- package/build/src/testing/relations_contract.js +72 -2
- package/build/src/testing/relations_contract.js.map +1 -1
- package/build/src/testing/scope_outbox_contract.d.ts +14 -1
- package/build/src/testing/scope_outbox_contract.d.ts.map +1 -1
- package/build/src/testing/scope_outbox_contract.js +126 -48
- package/build/src/testing/scope_outbox_contract.js.map +1 -1
- package/build/src/types.d.ts +7 -3
- package/build/src/types.d.ts.map +1 -1
- package/build/src/types.js.map +1 -1
- package/package.json +2 -1
|
@@ -15,13 +15,14 @@
|
|
|
15
15
|
* `openfga:provision` leyendo los tipos de relación del CONFIG estático
|
|
16
16
|
* (`relations.config`, como `permissions` sale de `catalogs`), no de esta
|
|
17
17
|
* tabla: el comando es `startApp: false` (bootstrap del appliance, sin base) y
|
|
18
|
-
* no puede leer la base. Por eso el
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
18
|
+
* no puede leer la base. Por eso el republicador basado en esta tabla (con CAS
|
|
19
|
+
* sobre `model_id`) se retiró en 4-8: no tenía llamador de producción (la
|
|
20
|
+
* carrera que protegía no ocurre; republicar el modelo es un paso manual de
|
|
21
|
+
* operador, escritor único). Ver el informe 4-8. La columna `model_id` queda
|
|
22
|
+
* sin uso (cleanup futuro).
|
|
23
23
|
*/
|
|
24
24
|
import { systemClock } from './clock.js';
|
|
25
|
+
import { RelationConfigError } from './errors.js';
|
|
25
26
|
import { guardSql } from './shared/backend_guard.js';
|
|
26
27
|
import db from '@adonisjs/lucid/services/db';
|
|
27
28
|
import { invalidateAuthzCatalog, withAuthzCatalogWrite } from './catalog/catalog_cache.js';
|
|
@@ -58,9 +59,30 @@ export async function saveRelationsConfig(spec, options = {}) {
|
|
|
58
59
|
/** Lee el spec persistido (o `null` si no hay relaciones declaradas — opt-in). */
|
|
59
60
|
export async function readRelationsConfigSpec(options = {}) {
|
|
60
61
|
const row = await guardSql('relations-config', 'read', options.timeoutMs ?? DEFAULT_TIMEOUT_MS, () => connectionOf(options).from(TABLE).where('id', ROW_ID).first());
|
|
61
|
-
|
|
62
|
+
// Solo la AUSENCIA de fila es «ninguna persistida» (relaciones opt-in).
|
|
63
|
+
if (!row)
|
|
62
64
|
return null;
|
|
63
|
-
|
|
65
|
+
// Cierre 1 del lote B · 🟡 7: una fila que no es JSON es «la config persistida
|
|
66
|
+
// NO valida» (422, misma familia que `defineRelationsConfig`), no «la lectura
|
|
67
|
+
// falló» (503): la lectura SÍ terminó; el dato es el problema.
|
|
68
|
+
let parsed;
|
|
69
|
+
try {
|
|
70
|
+
parsed = JSON.parse(String(row.spec));
|
|
71
|
+
}
|
|
72
|
+
catch (error) {
|
|
73
|
+
throw new RelationConfigError(`Config de relaciones inválida: la fila persistida en ${TABLE} (id=${ROW_ID}) no es JSON (${String(error?.message ?? error)}).`, { cause: error });
|
|
74
|
+
}
|
|
75
|
+
// ⚪ N6 (cierre 2 del lote B): un JSON válido que NO es un objeto (`null`,
|
|
76
|
+
// `0`, `false`, `""`, `[]`) también es «NO valida» — hasta el cierre se leía
|
|
77
|
+
// como `null` («ninguna persistida») y APAGABA la vigilancia de la deriva del
|
|
78
|
+
// modelo en silencio. Solo se llega con SQL a mano (`saveRelationsConfig`
|
|
79
|
+
// valida antes), y justo por eso tiene que sonar.
|
|
80
|
+
if (parsed === null || typeof parsed !== 'object' || Array.isArray(parsed)) {
|
|
81
|
+
throw new RelationConfigError(`Config de relaciones inválida: la fila persistida en ${TABLE} (id=${ROW_ID}) no es un objeto ` +
|
|
82
|
+
`(llegó ${JSON.stringify(parsed) ?? String(row.spec)}); se esperaba la spec { objectTypes, holderTypes?, database? }. ` +
|
|
83
|
+
`Re-guárdala con saveRelationsConfig(<spec>).`);
|
|
84
|
+
}
|
|
85
|
+
return parsed;
|
|
64
86
|
}
|
|
65
87
|
/**
|
|
66
88
|
* Lee la config persistida ya VALIDADA (o `null`). Es lo que hace 🟡3: un
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"relations_config_store.js","sourceRoot":"","sources":["../../src/relations_config_store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAA;AACpD,OAAO,EAAE,MAAM,6BAA6B,CAAA;AAC5C,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAA;AAC1F,OAAO,EAAE,qBAAqB,EAAE,MAAM,wCAAwC,CAAA;AAG9E,MAAM,KAAK,GAAG,wBAAwB,CAAA;AACtC,MAAM,MAAM,GAAG,CAAC,CAAA;AAChB,MAAM,kBAAkB,GAAG,KAAK,CAAA;AAOhC,SAAS,YAAY,CAAC,OAAqC;IACzD,OAAO,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;AACrE,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,IAAyB,EACzB,UAAuC,EAAE;IAEzC,qEAAqE;IACrE,MAAM,MAAM,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAA;IAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;IACjC,MAAM,qBAAqB,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QACxC,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,KAAK,EAAE,CAAA;QAClE,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,EAAE,CAAC,CAAA;QAC7F,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,EAAE,CAAC,CAAA;QACtG,CAAC;IACH,CAAC,EAAE,OAAO,CAAC,CAAA;IACX,sBAAsB,EAAE,CAAA;IACxB,OAAO,MAAM,CAAA;AACf,CAAC;AAED,kFAAkF;AAClF,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,UAAuC,EAAE;IAEzC,MAAM,GAAG,GAAQ,MAAM,QAAQ,CAAC,kBAAkB,EAAE,MAAM,EAAE,OAAO,CAAC,SAAS,IAAI,kBAAkB,EAAE,GAAG,EAAE,CACxG,YAAY,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,KAAK,EAAE,CAC9D,CAAA;IACD,IAAI,CAAC,GAAG,
|
|
1
|
+
{"version":3,"file":"relations_config_store.js","sourceRoot":"","sources":["../../src/relations_config_store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* **`@jantstack/adonis-authz/relations/reconcile` — la ÚNICA vía pública para
|
|
3
|
+
* reconciliar relaciones desde código** (plan 2.5 · lote B · B7, ruptura del
|
|
4
|
+
* roadmap 2.5). Hasta `2.5.0-alpha.1` `runRelationsReconcile` se importaba de
|
|
5
|
+
* `@jantstack/adonis-authz/commands/authz_relations_reconcile`: el módulo del
|
|
6
|
+
* COMANDO de ace, que arrastra `@adonisjs/core/ace` y cuyo comodín
|
|
7
|
+
* `./commands/*` existe para el loader, no para API. Desde B7 vive aquí, en un
|
|
8
|
+
* fichero FINO (la función y sus tipos; ni ace ni el comando), con su propio
|
|
9
|
+
* subpath en `exports`, y el módulo del comando ya NO la exporta (el comando
|
|
10
|
+
* la importa de aquí). Un consumidor que la importaba de `./commands/…` cambia
|
|
11
|
+
* la ruta y nada más (README «Upgrading to 2.5.0»).
|
|
12
|
+
*
|
|
13
|
+
* Vive en la raíz de `src/` (como `relations_config_store.ts`): la regla 2 de
|
|
14
|
+
* pureza prohíbe que `src/relations/` tire del manager —ni con `import type`—,
|
|
15
|
+
* y esta función recibe el manager (estructuralmente) para tomar la ventana
|
|
16
|
+
* durable y resolver el driver activo.
|
|
17
|
+
*/
|
|
18
|
+
import type { RelationsReconcileOptions, RelationsReconcileReport } from './relations/reconcile.js';
|
|
19
|
+
import type { AuthorizationManager } from './manager.js';
|
|
20
|
+
/**
|
|
21
|
+
* **La ÚNICA vía pública para reconciliar relaciones** (L-1 · J1; cierre del
|
|
22
|
+
* auditor de alpha.10 · R1/R4). `reconcileRelations` (`src/relations/`) es el
|
|
23
|
+
* primitivo: no puede ver al manager de roles (regla 2 de pureza), así que no
|
|
24
|
+
* sabe cuál es el driver ACTIVO ni puede tomar la ventana durable. Hasta el
|
|
25
|
+
* cierre se exportaba desde la raíz del paquete y el README lo recomendaba para
|
|
26
|
+
* K particiones: esa vía llegaba a la dirección rancia sin guard y sin freeze.
|
|
27
|
+
* Ahora sale de la raíz y TODA migración de relaciones pasa por aquí —el
|
|
28
|
+
* comando, un bucle por particiones de la plataforma—, que es el punto único
|
|
29
|
+
* donde viven las dos garantías:
|
|
30
|
+
*
|
|
31
|
+
* - **la dirección RANCIA** (alpha.10 · S1, gemelo de `manager.reconcile`):
|
|
32
|
+
* hacia el driver de relaciones activo (`relations.default ?? default`)
|
|
33
|
+
* ningún origen distinto pasa. **El origen y el destino se RESUELVEN aquí,
|
|
34
|
+
* por su clave, desde el config del manager** (R4): hasta el cierre la
|
|
35
|
+
* función recibía las instancias `from`/`to` y, aparte, las ETIQUETAS
|
|
36
|
+
* `toKey`/`fromKey`/`activeKey`, y juzgaba las etiquetas — un bucle con
|
|
37
|
+
* `fromKey === toKey` copiado y pegado, o un `activeKey` que contradecía al
|
|
38
|
+
* manager, escribía la compartición retirada en el activo. La identidad es
|
|
39
|
+
* la de la factory resuelta: dos claves con la MISMA factory son el mismo
|
|
40
|
+
* driver (un alias del activo también se niega);
|
|
41
|
+
* - **la ventana durable**: `--dry-run` **NO congela** (el verificador es
|
|
42
|
+
* read-only y está hecho para un cron); la pasada que ESCRIBE corre bajo
|
|
43
|
+
* `withFrozenWrites` con `kind: 'reconcile'` y la ventana del OPERADOR como
|
|
44
|
+
* contexto propio; un freeze vivo de OTRA pasada es 423; el reporte publica
|
|
45
|
+
* `frozen` —fence, lease, `window` y **`lapsed`**— y un lease perdido a
|
|
46
|
+
* mitad significa que la pasada NO se certifica (exit ≠ 0).
|
|
47
|
+
*
|
|
48
|
+
* Límite declarado (auditor · R5): el activo es el que dice el config del
|
|
49
|
+
* PROCESO que ejecuta esto; un Job con otro entorno apaga el guard. El sello
|
|
50
|
+
* durable del driver activo está en el roadmap (2.5).
|
|
51
|
+
*/
|
|
52
|
+
/**
|
|
53
|
+
* **Las opciones PÚBLICAS de `runRelationsReconcile`** (cierre-2 de alpha.10 · C7):
|
|
54
|
+
* las del primitivo sin `from`/`to` (instancias: retiradas) más las claves. Hasta el
|
|
55
|
+
* cierre-2 la raíz exportaba `RelationsReconcileOptions` —la forma del primitivo, con
|
|
56
|
+
* `from`/`to` obligatorios— y no esta.
|
|
57
|
+
*/
|
|
58
|
+
export type RunRelationsReconcileOptions = Omit<RelationsReconcileOptions, 'from' | 'to'> & {
|
|
59
|
+
/** Clave (en `relations.drivers` del config del manager) del DESTINO. */
|
|
60
|
+
toKey: string;
|
|
61
|
+
/** Clave del ORIGEN (el de `--from` o el elegido por descarte). */
|
|
62
|
+
fromKey: string;
|
|
63
|
+
/** La salida humana de `E_AUTHZ_STALE_SOURCE_REFUSED`. */
|
|
64
|
+
allowStaleSource?: boolean;
|
|
65
|
+
};
|
|
66
|
+
/**
|
|
67
|
+
* Límites DECLARADOS de la identidad (cierre-2 de alpha.10 · C1 y C6):
|
|
68
|
+
* - la identidad es la REFERENCIA de la factory: dos factories DISTINTAS que
|
|
69
|
+
* construyen el mismo backend (`fga: () => new OpenFgaRelationsDriver(…mismo
|
|
70
|
+
* store…)`) NO se detectan — el alias pasa el guard. No se construye nada antes
|
|
71
|
+
* del guard, así que no hay backend que comparar; identidad declarada por el
|
|
72
|
+
* driver ⇒ roadmap 2.5. Registra un alias con la MISMA referencia
|
|
73
|
+
* (`const fga = () => …; drivers: { openfga: fga, alias: fga }`) o no lo registres.
|
|
74
|
+
* - `authorization` es estructural (`Pick<…>`): un objeto que FALSEA
|
|
75
|
+
* `relationsDriverKey`/`relationsDriverFactory` decide el activo y las factories.
|
|
76
|
+
* Pásale el manager del servicio, nunca uno construido o envuelto a mano.
|
|
77
|
+
*/
|
|
78
|
+
export declare function runRelationsReconcile(authorization: Pick<AuthorizationManager, 'withFrozenWrites' | 'relationsDriverKey' | 'relationsDriverFactory'>, options: RunRelationsReconcileOptions): Promise<RelationsReconcileReport>;
|
|
79
|
+
//# sourceMappingURL=relations_reconcile.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"relations_reconcile.d.ts","sourceRoot":"","sources":["../../src/relations_reconcile.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,KAAK,EAAE,yBAAyB,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAA;AACnG,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAA;AAGxD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH;;;;;GAKG;AACH,MAAM,MAAM,4BAA4B,GAAG,IAAI,CAAC,yBAAyB,EAAE,MAAM,GAAG,IAAI,CAAC,GAAG;IAC1F,yEAAyE;IACzE,KAAK,EAAE,MAAM,CAAA;IACb,mEAAmE;IACnE,OAAO,EAAE,MAAM,CAAA;IACf,0DAA0D;IAC1D,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAC3B,CAAA;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,qBAAqB,CACzC,aAAa,EAAE,IAAI,CAAC,oBAAoB,EAAE,kBAAkB,GAAG,oBAAoB,GAAG,wBAAwB,CAAC,EAC/G,OAAO,EAAE,4BAA4B,GACpC,OAAO,CAAC,wBAAwB,CAAC,CAkFnC"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { AuthorizationConfigError, StaleSourceRefusedError } from './errors.js';
|
|
2
|
+
/**
|
|
3
|
+
* Límites DECLARADOS de la identidad (cierre-2 de alpha.10 · C1 y C6):
|
|
4
|
+
* - la identidad es la REFERENCIA de la factory: dos factories DISTINTAS que
|
|
5
|
+
* construyen el mismo backend (`fga: () => new OpenFgaRelationsDriver(…mismo
|
|
6
|
+
* store…)`) NO se detectan — el alias pasa el guard. No se construye nada antes
|
|
7
|
+
* del guard, así que no hay backend que comparar; identidad declarada por el
|
|
8
|
+
* driver ⇒ roadmap 2.5. Registra un alias con la MISMA referencia
|
|
9
|
+
* (`const fga = () => …; drivers: { openfga: fga, alias: fga }`) o no lo registres.
|
|
10
|
+
* - `authorization` es estructural (`Pick<…>`): un objeto que FALSEA
|
|
11
|
+
* `relationsDriverKey`/`relationsDriverFactory` decide el activo y las factories.
|
|
12
|
+
* Pásale el manager del servicio, nunca uno construido o envuelto a mano.
|
|
13
|
+
*/
|
|
14
|
+
export async function runRelationsReconcile(authorization, options) {
|
|
15
|
+
const { reconcileRelations } = await import('./relations/reconcile.js');
|
|
16
|
+
const raw = options;
|
|
17
|
+
// Entradas que ya no gobiernan nada (L5: una opción inerte no cae en un
|
|
18
|
+
// default en silencio). `from`/`to` como instancias y `activeKey` eran
|
|
19
|
+
// justo las etiquetas desalineables del R4.
|
|
20
|
+
const retiredOptions = ['from', 'to', 'activeKey'].filter((name) => raw[name] !== undefined);
|
|
21
|
+
if (retiredOptions.length > 0) {
|
|
22
|
+
throw new AuthorizationConfigError(`runRelationsReconcile: ${retiredOptions.map((n) => `\`${n}\``).join(', ')} ya no se acepta(n) (cierre de 2.4.0-alpha.10): ` +
|
|
23
|
+
'el origen y el destino se resuelven por `fromKey`/`toKey` desde el config del manager, y el driver activo lo ' +
|
|
24
|
+
'dice el manager (`relations.default ?? default`). Pasar instancias o un activo propio permitía que la etiqueta ' +
|
|
25
|
+
'contradijera al driver y la dirección rancia pasara.');
|
|
26
|
+
}
|
|
27
|
+
if (typeof options.toKey !== 'string' || typeof options.fromKey !== 'string') {
|
|
28
|
+
throw new AuthorizationConfigError('runRelationsReconcile: hacen falta `toKey` y `fromKey` (las claves de relations.drivers del destino y del ORIGEN) ' +
|
|
29
|
+
'desde 2.4.0-alpha.10 — sin ellas no se puede negar la dirección rancia (re-escribir en el driver de relaciones ' +
|
|
30
|
+
'ACTIVO lo que el origen dejó de ver en el cutover).');
|
|
31
|
+
}
|
|
32
|
+
const { toKey, fromKey, allowStaleSource, ...rest } = options;
|
|
33
|
+
const toFactory = authorization.relationsDriverFactory(toKey);
|
|
34
|
+
const fromFactory = authorization.relationsDriverFactory(fromKey);
|
|
35
|
+
for (const [role, key, factory] of [['destino', toKey, toFactory], ['origen', fromKey, fromFactory]]) {
|
|
36
|
+
if (typeof factory !== 'function') {
|
|
37
|
+
throw new AuthorizationConfigError(`runRelationsReconcile: el ${role} '${key}' no es una clave de relations.drivers en el config del manager.`);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
const active = authorization.relationsDriverKey();
|
|
41
|
+
/** Mismo driver ⇔ misma clave o misma factory resuelta (un alias es el mismo driver). */
|
|
42
|
+
const sameDriver = (a, b) => a === b || authorization.relationsDriverFactory(a) === authorization.relationsDriverFactory(b);
|
|
43
|
+
if (sameDriver(fromKey, toKey)) {
|
|
44
|
+
throw new AuthorizationConfigError(`runRelationsReconcile: el origen '${fromKey}' y el destino '${toKey}' son el MISMO driver ` +
|
|
45
|
+
`(${fromKey === toKey ? 'misma clave' : 'la misma factory bajo dos claves'}): no hay nada que migrar y un --prune ` +
|
|
46
|
+
'se compararía consigo mismo. Nombra el otro driver.');
|
|
47
|
+
}
|
|
48
|
+
const stale = sameDriver(toKey, active);
|
|
49
|
+
const allowStale = allowStaleSource === true;
|
|
50
|
+
if (stale && !allowStale && options.dryRun !== true) {
|
|
51
|
+
const alias = toKey === active ? '' : ` (la clave '${toKey}' resuelve la MISMA factory que el activo '${active}')`;
|
|
52
|
+
throw new StaleSourceRefusedError(`authz:relations:reconcile --to=${toKey} (origen '${fromKey}'): '${toKey}' es el driver de ` +
|
|
53
|
+
`relaciones ACTIVO (relations.default ?? default)${alias} y el origen no lo es. Esa dirección re-escribiría en el driver ` +
|
|
54
|
+
`activo tuplas que el origen ya no refleja: resucitaría las comparticiones retiradas desde el cutover (y con ` +
|
|
55
|
+
`--prune borraría las creadas después). No se ha construido, leído, congelado ni escrito nada. Tras el cutover el driver ` +
|
|
56
|
+
`activo ES la fuente de verdad de las relaciones: no hay nada que migrar hacia él; para volver atrás, migra en ` +
|
|
57
|
+
`la otra dirección (--to=${fromKey} --from=${toKey}) ANTES de cambiar relations.default/default. ` +
|
|
58
|
+
`Si de verdad el origen sigue siendo la fuente de verdad, la decisión humana es --allow-stale-source ` +
|
|
59
|
+
`(allowStaleSource: true).`);
|
|
60
|
+
}
|
|
61
|
+
const from = await fromFactory();
|
|
62
|
+
const to = await toFactory();
|
|
63
|
+
const pass = () => reconcileRelations({ ...rest, from, to });
|
|
64
|
+
const mark = (report) => {
|
|
65
|
+
if (stale)
|
|
66
|
+
report.staleSource = { to: toKey, from: fromKey, allowed: allowStale };
|
|
67
|
+
return report;
|
|
68
|
+
};
|
|
69
|
+
if (options.dryRun === true)
|
|
70
|
+
return mark(await pass());
|
|
71
|
+
const reason = `authz:relations:reconcile --to=${toKey}`;
|
|
72
|
+
return authorization.withFrozenWrites(reason, async (window) => {
|
|
73
|
+
const report = mark(await pass());
|
|
74
|
+
report.frozen = {
|
|
75
|
+
durable: true,
|
|
76
|
+
lapsed: await window.lapsed(),
|
|
77
|
+
leaseMs: window.leaseMs,
|
|
78
|
+
fence: window.fence,
|
|
79
|
+
...(window.untilMs === undefined ? {} : { untilMs: window.untilMs }),
|
|
80
|
+
...(window.window === undefined ? {} : { window: window.window }),
|
|
81
|
+
};
|
|
82
|
+
return report;
|
|
83
|
+
}, { kind: 'reconcile', operatorAsContext: true });
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=relations_reconcile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"relations_reconcile.js","sourceRoot":"","sources":["../../src/relations_reconcile.ts"],"names":[],"mappings":"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"}
|
|
@@ -65,11 +65,15 @@ export interface SqlScopeOutboxOptions {
|
|
|
65
65
|
* confirmaría sola, fuera de tu unidad de trabajo, y si tu transacción
|
|
66
66
|
* revierte después el relay aplica al store un cambio que en TU base no
|
|
67
67
|
* ocurrió — la fuga S5 por el camino de uso «correcto» (SQL dice un padre y
|
|
68
|
-
* el PDP otro, sin que tu base pueda enseñártelo). Default **`
|
|
69
|
-
*
|
|
70
|
-
*
|
|
71
|
-
*
|
|
72
|
-
*
|
|
68
|
+
* el PDP otro, sin que tu base pueda enseñártelo). Default **`true` desde
|
|
69
|
+
* 2.5.0** (plan 2.5 · lote B · B6, decisión del dueño; en 2.4.0-alpha.8 era
|
|
70
|
+
* `false` porque el contrato PUBLICADO encolaba sin transacción en `ctx()` —
|
|
71
|
+
* desde B6 el contrato pasa la transacción del harness en TODO encolado,
|
|
72
|
+
* directo y por el manager, y lo juzga el par `requiresTransaction`).
|
|
73
|
+
* `requireTransaction: false` es el opt-out EXPLÍCITO: la firma de quien
|
|
74
|
+
* encola fuera de su unidad de trabajo a sabiendas (un harness, un seeder).
|
|
75
|
+
* `{ transaction }` por el manager exige pool ≥ 2 (la barrera del freeze lee
|
|
76
|
+
* por OTRA conexión).
|
|
73
77
|
*/
|
|
74
78
|
requireTransaction?: boolean;
|
|
75
79
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scope_outbox.d.ts","sourceRoot":"","sources":["../../src/scope_outbox.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAMH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAMvC,OAAO,KAAK,EAEV,WAAW,EAOZ,MAAM,YAAY,CAAA;AAEnB,MAAM,WAAW,qBAAqB;IACpC,oEAAoE;IACpE,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,0DAA0D;IAC1D,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,qEAAqE;IACrE,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB;;;;OAIG;IACH,GAAG,CAAC,EAAE,KAAK,CAAA;IACX;;;;;;;;;;OAUG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB
|
|
1
|
+
{"version":3,"file":"scope_outbox.d.ts","sourceRoot":"","sources":["../../src/scope_outbox.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAMH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAMvC,OAAO,KAAK,EAEV,WAAW,EAOZ,MAAM,YAAY,CAAA;AAEnB,MAAM,WAAW,qBAAqB;IACpC,oEAAoE;IACpE,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,0DAA0D;IAC1D,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,qEAAqE;IACrE,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB;;;;OAIG;IACH,GAAG,CAAC,EAAE,KAAK,CAAA;IACX;;;;;;;;;;OAUG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;;;;;;;;;;;;;;;;OAgBG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAA;CAC7B;AAgBD,iFAAiF;AACjF,UAAU,YAAY;IACpB,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,CAAA;IACxB,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,CAAA;CAC1B;AAiCD;;;;;;;;;;;;;;;;GAgBG;AACH;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,8BAA8B,kBAAkB,CAAA;AAC7D;;;;GAIG;AACH,eAAO,MAAM,8BAA8B,QAAQ,CAAA;AAEnD,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAMvH;AAoGD,wBAAgB,cAAc,CAC5B,OAAO,GAAE,qBAA0B,EACnC,QAAQ,GAAE,YAA4C,GACrD,WAAW,CAwWb"}
|
|
@@ -221,10 +221,10 @@ export function sqlScopeOutbox(options = {}, database = db) {
|
|
|
221
221
|
if (!(Number.isInteger(maxAttempts) && maxAttempts >= 1)) {
|
|
222
222
|
throw new AuthorizationConfigError(`sqlScopeOutbox: maxAttempts debe ser un entero >= 1 (llegó ${String(options.maxAttempts)})`);
|
|
223
223
|
}
|
|
224
|
-
const requireTransaction = options.requireTransaction === undefined ?
|
|
224
|
+
const requireTransaction = options.requireTransaction === undefined ? true : options.requireTransaction;
|
|
225
225
|
if (typeof requireTransaction !== 'boolean') {
|
|
226
226
|
throw new AuthorizationConfigError(`sqlScopeOutbox: requireTransaction debe ser un booleano (llegó ${String(options.requireTransaction)}); ` +
|
|
227
|
-
'true = encolar sin { transaction } es 500 antes del INSERT (default
|
|
227
|
+
'true = encolar sin { transaction } es 500 antes del INSERT (default true desde 2.5.0; false es el opt-out explícito).');
|
|
228
228
|
}
|
|
229
229
|
/**
|
|
230
230
|
* La conexión de ESTA cola: la declarada, o la primaria del `db` de Lucid
|
|
@@ -244,11 +244,14 @@ export function sqlScopeOutbox(options = {}, database = db) {
|
|
|
244
244
|
if (trx === undefined && requireTransaction) {
|
|
245
245
|
// La fuga S5, nombrada (2.4.0-alpha.8): sin tu transacción la fila
|
|
246
246
|
// confirma sola y un rollback tuyo no se la lleva.
|
|
247
|
-
throw new AuthorizationConfigError('sqlScopeOutbox.enqueue: no llegó { transaction } y esta outbox tiene requireTransaction: true. Encolar fuera ' +
|
|
247
|
+
throw new AuthorizationConfigError('sqlScopeOutbox.enqueue: no llegó { transaction } y esta outbox tiene requireTransaction: true (el default desde 2.5.0). Encolar fuera ' +
|
|
248
248
|
'de tu unidad de trabajo es la fuga que la outbox existe para cerrar: la fila confirmaría sola, y si tu ' +
|
|
249
249
|
'transacción hace rollback después el cambio se queda en la cola y el relay lo aplica al store — tu base ' +
|
|
250
250
|
'diría un padre y el PDP otro. Pasa el `trx` de db.transaction() en scopes.attached/moved/detached ' +
|
|
251
|
-
'({ transaction: trx })
|
|
251
|
+
'({ transaction: trx }); si de verdad encolas fuera de toda transacción, dilo: sqlScopeOutbox({ requireTransaction: false }). ' +
|
|
252
|
+
'OJO: { transaction } por el manager exige un pool >= 2 (la barrera del freeze lee por OTRA conexión y con una sola ' +
|
|
253
|
+
'es 503 E_AUTHZ_BACKEND_TIMEOUT a freezeTimeoutMs); con pool max 1 —el default de knex en TODO SQLite, fichero o ' +
|
|
254
|
+
':memory:— usa requireTransaction: false. No se ha escrito nada.');
|
|
252
255
|
}
|
|
253
256
|
return trx ?? on(database);
|
|
254
257
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scope_outbox.js","sourceRoot":"","sources":["../../src/scope_outbox.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"scope_outbox.js","sourceRoot":"","sources":["../../src/scope_outbox.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"relations_contract.d.ts","sourceRoot":"","sources":["../../../src/testing/relations_contract.ts"],"names":[],"mappings":"AA8BA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAA;AAC9E,OAAO,KAAK,EAGV,eAAe,EACf,2BAA2B,EAM3B,QAAQ,EAET,MAAM,aAAa,CAAA;AAEpB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAIpD,mDAAmD;AACnD,eAAO,MAAM,sBAAsB,2CAA4C,CAAA;AAE/E;;;GAGG;AACH;;;;;;;;GAQG;AACH,eAAO,MAAM,+BAA+B,oCAAqC,CAAA;AAEjF;;;GAGG;AACH,wBAAgB,uBAAuB,IAAI,eAAe,CASzD;AAED,MAAM,WAAW,8BAA8B;IAC7C,IAAI,EAAE,MAAM,CAAA;IACZ,mEAAmE;IACnE,YAAY,EAAE,2BAA2B,CAAA;IACzC,0EAA0E;IAC1E,UAAU,CAAC,MAAM,EAAE,eAAe,GAAG,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,CAAA;IAC/E,+EAA+E;IAC/E,MAAM,CAAC,EAAE;QAAE,cAAc,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IACpC;;;;;;;;OAQG;IACH,YAAY,CAAC,EAAE,6BAA6B,CAAA;CAC7C;AAED,yDAAyD;AACzD,MAAM,WAAW,6BAA6B;IAC5C,KAAK,IAAI,OAAO,CAAC;QAAE,MAAM,EAAE,OAAO,CAAC;QAAC,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;QAAC,QAAQ,IAAI,OAAO,CAAC,OAAO,CAAC,CAAA;KAAE,CAAC,CAAA;IAC/F,iGAAiG;IACjG,MAAM,CAAC,SAAS,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;CAC7C;AAED,8FAA8F;AAC9F,wBAAgB,kCAAkC,IAAI,6BAA6B,CAWlF;AA+BD,MAAM,WAAW,0BAA0B;IACzC,MAAM,EAAE,eAAe,CAAA;IACvB,YAAY,EAAE,2BAA2B,CAAA;IACzC,MAAM,CAAC,EAAE;QAAE,cAAc,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CACrC;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,0BAA0B,GAAG,eAAe,CAExF;
|
|
1
|
+
{"version":3,"file":"relations_contract.d.ts","sourceRoot":"","sources":["../../../src/testing/relations_contract.ts"],"names":[],"mappings":"AA8BA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAA;AAC9E,OAAO,KAAK,EAGV,eAAe,EACf,2BAA2B,EAM3B,QAAQ,EAET,MAAM,aAAa,CAAA;AAEpB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAIpD,mDAAmD;AACnD,eAAO,MAAM,sBAAsB,2CAA4C,CAAA;AAE/E;;;GAGG;AACH;;;;;;;;GAQG;AACH,eAAO,MAAM,+BAA+B,oCAAqC,CAAA;AAEjF;;;GAGG;AACH,wBAAgB,uBAAuB,IAAI,eAAe,CASzD;AAED,MAAM,WAAW,8BAA8B;IAC7C,IAAI,EAAE,MAAM,CAAA;IACZ,mEAAmE;IACnE,YAAY,EAAE,2BAA2B,CAAA;IACzC,0EAA0E;IAC1E,UAAU,CAAC,MAAM,EAAE,eAAe,GAAG,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,CAAA;IAC/E,+EAA+E;IAC/E,MAAM,CAAC,EAAE;QAAE,cAAc,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IACpC;;;;;;;;OAQG;IACH,YAAY,CAAC,EAAE,6BAA6B,CAAA;CAC7C;AAED,yDAAyD;AACzD,MAAM,WAAW,6BAA6B;IAC5C,KAAK,IAAI,OAAO,CAAC;QAAE,MAAM,EAAE,OAAO,CAAC;QAAC,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;QAAC,QAAQ,IAAI,OAAO,CAAC,OAAO,CAAC,CAAA;KAAE,CAAC,CAAA;IAC/F,iGAAiG;IACjG,MAAM,CAAC,SAAS,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;CAC7C;AAED,8FAA8F;AAC9F,wBAAgB,kCAAkC,IAAI,6BAA6B,CAWlF;AA+BD,MAAM,WAAW,0BAA0B;IACzC,MAAM,EAAE,eAAe,CAAA;IACvB,YAAY,EAAE,2BAA2B,CAAA;IACzC,MAAM,CAAC,EAAE;QAAE,cAAc,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CACrC;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,0BAA0B,GAAG,eAAe,CAExF;AA2VD,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,8BAA8B;gBAgBjE,MAAM;aAAW,GAAG,CAAC,MAAM,2BAA2B,CAAC;EAVvE;AAED;;;;GAIG;AACH,wBAAgB,+BAA+B,CAC7C,OAAO,EAAE,8BAA8B,EACvC,GAAG,EAAE;IAAE,KAAK,EAAE,eAAe,CAAC,OAAO,CAAC,CAAC;IAAC,IAAI,EAAE,eAAe,CAAC,MAAM,CAAC,CAAA;CAAE,GACtE;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,GAAG,CAAC,MAAM,2BAA2B,CAAC,CAAA;CAAE,CAmxCzE"}
|
|
@@ -22,7 +22,7 @@ import { test as japaTest } from '@japa/runner';
|
|
|
22
22
|
import db from '@adonisjs/lucid/services/db';
|
|
23
23
|
import { partitionKey, scopeKey } from '../identity.js';
|
|
24
24
|
import { RelationsManager } from '../relations/manager.js';
|
|
25
|
-
import { defineRelationsConfig, assertRelationDeclared, assertObjectTypeDeclared } from '../relations/define_relations_config.js';
|
|
25
|
+
import { defineRelationsConfig, assertRelationDeclared, assertObjectTypeDeclared, assertUsersetSubject } from '../relations/define_relations_config.js';
|
|
26
26
|
import { assertCheckManyObjects, distinctObjects, expandByPosition, RELATIONS_CHECK_MANY_MAX } from '../relations/check_many.js';
|
|
27
27
|
import { systemClock } from '../clock.js';
|
|
28
28
|
import { resolveGrantExpiry } from '../expiry.js';
|
|
@@ -110,8 +110,9 @@ function buildRelationsDouble(options, tuples, now) {
|
|
|
110
110
|
* filas `double`) lo sondea en el doble y en su vista `withClock`.
|
|
111
111
|
*/
|
|
112
112
|
function assertSubjectDeclared(subject) {
|
|
113
|
+
// B3 (lote B): F-05 del par y solo `group#member`, la MISMA función que las tres capas reales.
|
|
113
114
|
if (isRelUserset(subject))
|
|
114
|
-
|
|
115
|
+
assertUsersetSubject(config, subject);
|
|
115
116
|
}
|
|
116
117
|
/** Caducidad ESTRICTA (R-15): la que vence AHORA ya no cuenta. `at` fija el instante (un `now` por lote en `checkMany`). */
|
|
117
118
|
function active(t, at = now) {
|
|
@@ -970,6 +971,75 @@ export function registerRelationsDriverContract(harness, api) {
|
|
|
970
971
|
assert.isFalse(page.tuples.some((t) => t.object.type === 'role_binding'), 'cero tuplas role_binding');
|
|
971
972
|
}
|
|
972
973
|
});
|
|
974
|
+
/* ── B3 · el userset del SUJETO: `group#member` y solo `group#member` (plan 2.5 · lote B; cierre 1 · 🟡 5) ── */
|
|
975
|
+
/**
|
|
976
|
+
* **B3 en el runner PUBLICADO** (cierre 1 del lote B · 🟡 5 del auditor):
|
|
977
|
+
* hasta el cierre la variante `usersetUnsupported` solo vivía en la guardia
|
|
978
|
+
* de superficie del paquete, así que un driver de terceros que guardara la
|
|
979
|
+
* fila inerte (`document#viewer` como sujeto) —o respondiera 503— pasaba
|
|
980
|
+
* `runRelationsDriverContract` entero, y el reconcile hacia él y
|
|
981
|
+
* `manager.driver()` repetían los 🟠 1/🟠 2. Es «variante de F-05» (D13):
|
|
982
|
+
* se exige por el MANAGER y por el DRIVER llamado en directo, en las seis
|
|
983
|
+
* operaciones con sujeto, con el `code` propio; por el manager con CERO
|
|
984
|
+
* llamadas al driver (espía) y CERO eventos. El userset legítimo
|
|
985
|
+
* (`group#member`) sigue entrando por los mismos caminos (control).
|
|
986
|
+
*/
|
|
987
|
+
test('B3 · un userset ≠ group#member como SUJETO (document#viewer, declarado) ⇒ 422 E_AUTHZ_RELATION_USERSET_UNSUPPORTED en relate/unrelate/check/checkMany/listObjects/purgeSubject, por el MANAGER (CERO llamadas al driver, CERO eventos) y por el DRIVER en directo; group#member entra (control)', async ({ assert, }) => {
|
|
988
|
+
const S = partition();
|
|
989
|
+
const doc = { type: 'document', id: docId() };
|
|
990
|
+
const other = { type: 'document', id: docId() };
|
|
991
|
+
const stale = { object: other, relation: 'viewer' };
|
|
992
|
+
const attemptsOn = (driver) => [
|
|
993
|
+
['relate', () => driver.relate(stale, 'viewer', doc, S)],
|
|
994
|
+
['unrelate', () => driver.unrelate(stale, 'viewer', doc, S)],
|
|
995
|
+
['check', () => driver.check(stale, 'viewer', doc, S)],
|
|
996
|
+
['checkMany', () => (typeof driver.checkMany === 'function' ? driver.checkMany(stale, 'viewer', [doc], S) : driver.check(stale, 'viewer', doc, S))],
|
|
997
|
+
['listObjects', () => driver.listObjects(stale, 'viewer', 'document', S)],
|
|
998
|
+
['purgeSubject', () => driver.purgeSubject(stale, S)],
|
|
999
|
+
];
|
|
1000
|
+
for (const [path, target] of [
|
|
1001
|
+
['manager', state.manager],
|
|
1002
|
+
['driver', state.base],
|
|
1003
|
+
]) {
|
|
1004
|
+
for (const [label, run] of attemptsOn(target)) {
|
|
1005
|
+
const caught = await run().then(() => null, (e) => e);
|
|
1006
|
+
assert.isNotNull(caught, `ROJO (B3 · ${path}.${label}): el userset document#viewer ENTRÓ como sujeto`);
|
|
1007
|
+
assert.equal(caught.status, 422, `${path}.${label}: ${caught.message}`);
|
|
1008
|
+
assert.equal(caught.code, 'E_AUTHZ_RELATION_USERSET_UNSUPPORTED', `${path}.${label}`);
|
|
1009
|
+
}
|
|
1010
|
+
}
|
|
1011
|
+
// Por el manager, «cero llamadas» se observa con el espía.
|
|
1012
|
+
assert.equal(state.calls(), 0, 'por el manager: CERO llamadas al driver');
|
|
1013
|
+
assert.lengthOf(state.events, 0, 'CERO eventos');
|
|
1014
|
+
// Cierre 2 del lote B · 🟡 N4: por el driver en directo el runner SÍ ve su backend — por el PUERTO. Un
|
|
1015
|
+
// tercero que valida DESPUÉS de escribir (`relate` guarda la fila inerte y luego lanza el 422) pasaba el
|
|
1016
|
+
// contrato entero (medido: 58/58 verdes con ese mutante sobre el doble). Se afirma por `listSubjects`
|
|
1017
|
+
// (invariante 7: hechos directos; un userset guardado saldría ahí con `usersetSubjects: true`) y, con la
|
|
1018
|
+
// capacidad, por `enumerateRelations` (la partición entera): la fila NO quedó.
|
|
1019
|
+
// **Límite declarado (cierre 3 · ⚪ N11)**: el runner solo ve el backend por los puertos que el harness
|
|
1020
|
+
// DECLARA. Con `usersetSubjects: false` (`listSubjects` no devuelve usersets) y `enumerateRelations: false`
|
|
1021
|
+
// no hay puerto por el que observar la fila inerte, así que un tercero con ese harness mínimo que guarde y
|
|
1022
|
+
// DESPUÉS lance pasa este caso (medido con el mutante «guarda y luego lanza» sobre el doble mínimo). Declara
|
|
1023
|
+
// las capacidades que tu driver tiene; el runner no puede probar lo que no se le deja ver (README «Third-party
|
|
1024
|
+
// drivers»).
|
|
1025
|
+
const staleKey = `${other.type}:${other.id}#viewer`;
|
|
1026
|
+
const describeSubject = (s) => (isRelUserset(s) ? `${s.object.type}:${s.object.id}#${s.relation}` : `${s.type}:${s.uuid}`);
|
|
1027
|
+
const listed = await state.base.listSubjects('viewer', doc, S);
|
|
1028
|
+
assert.notInclude(listed.subjects.map(describeSubject), staleKey, 'ROJO (N4): el driver GUARDÓ la fila inerte antes de lanzar el 422 — listSubjects la enumera');
|
|
1029
|
+
if (typeof state.base.enumerateRelations === 'function' && harness.capabilities.enumerateRelations) {
|
|
1030
|
+
const page = await state.base.enumerateRelations(S);
|
|
1031
|
+
assert.isFalse(page.tuples.some((t) => describeSubject(t.subject) === staleKey), 'ROJO (N4): la partición contiene la fila inerte que el 422 decía no haber escrito');
|
|
1032
|
+
}
|
|
1033
|
+
// Control: el userset legítimo entra por los dos caminos y concede.
|
|
1034
|
+
const u = holder();
|
|
1035
|
+
const g = { type: 'group', id: docId() };
|
|
1036
|
+
await state.manager.relate(u, 'member', g, S);
|
|
1037
|
+
await state.manager.relate({ object: g, relation: 'member' }, 'viewer', doc, S);
|
|
1038
|
+
assert.isTrue(await state.manager.check(u, 'viewer', doc, S));
|
|
1039
|
+
assert.isTrue(await state.base.check({ object: g, relation: 'member' }, 'viewer', doc, S));
|
|
1040
|
+
await state.base.purgeSubject({ object: g, relation: 'member' }, S);
|
|
1041
|
+
assert.isFalse(await state.manager.check(u, 'viewer', doc, S));
|
|
1042
|
+
});
|
|
973
1043
|
/* ── R-15 · caducidad de la tupla (núcleo, sin reloj): estricta y validada ── */
|
|
974
1044
|
test('R-15 · relate con expiresAt pasado NO concede (check/listObjects/listSubjects); futuro sí; expiresAt inválido ⇒ 422 sin tocar el driver', async ({ assert, }) => {
|
|
975
1045
|
const u = holder();
|