@jantstack/adonis-authz 2.4.0-alpha.2 → 2.4.0-alpha.3
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 +53 -3
- package/build/index.d.ts +2 -2
- package/build/index.d.ts.map +1 -1
- package/build/index.js +5 -1
- package/build/index.js.map +1 -1
- package/build/providers/authz_provider.d.ts +6 -1
- package/build/providers/authz_provider.d.ts.map +1 -1
- package/build/providers/authz_provider.js +11 -2
- package/build/providers/authz_provider.js.map +1 -1
- package/build/src/define_config.d.ts +37 -1
- package/build/src/define_config.d.ts.map +1 -1
- package/build/src/define_config.js.map +1 -1
- package/build/src/drivers/database_relations_driver.d.ts +10 -0
- package/build/src/drivers/database_relations_driver.d.ts.map +1 -1
- package/build/src/drivers/database_relations_driver.js +28 -2
- package/build/src/drivers/database_relations_driver.js.map +1 -1
- package/build/src/drivers/openfga_relations_driver.d.ts +13 -0
- package/build/src/drivers/openfga_relations_driver.d.ts.map +1 -1
- package/build/src/drivers/openfga_relations_driver.js +106 -30
- package/build/src/drivers/openfga_relations_driver.js.map +1 -1
- package/build/src/errors.d.ts +48 -1
- package/build/src/errors.d.ts.map +1 -1
- package/build/src/errors.js +78 -0
- package/build/src/errors.js.map +1 -1
- package/build/src/relations/define_relations_config.d.ts +42 -8
- package/build/src/relations/define_relations_config.d.ts.map +1 -1
- package/build/src/relations/define_relations_config.js +51 -13
- package/build/src/relations/define_relations_config.js.map +1 -1
- package/build/src/relations/manager.d.ts +49 -6
- package/build/src/relations/manager.d.ts.map +1 -1
- package/build/src/relations/manager.js +229 -14
- package/build/src/relations/manager.js.map +1 -1
- package/build/src/testing/relations_contract.d.ts.map +1 -1
- package/build/src/testing/relations_contract.js +174 -5
- package/build/src/testing/relations_contract.js.map +1 -1
- package/build/src/types.d.ts +88 -7
- package/build/src/types.d.ts.map +1 -1
- package/build/src/types.js +4 -0
- package/build/src/types.js.map +1 -1
- package/build/stubs/config/authorization.stub +45 -1
- package/package.json +1 -1
|
@@ -30,29 +30,67 @@ function reject(message) {
|
|
|
30
30
|
* **F-05, la función ÚNICA** (L-0): rechaza un `object.type` no declarado
|
|
31
31
|
* (422 `E_AUTHZ_RELATION_TYPE_UNKNOWN`) o una `relation` no declarada para ese
|
|
32
32
|
* tipo (422 `E_AUTHZ_RELATION_UNKNOWN`). La aplican el `RelationsManager`
|
|
33
|
-
* (corta primero) Y los dos drivers de relaciones
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
* `
|
|
38
|
-
*
|
|
39
|
-
*
|
|
33
|
+
* (corta primero) Y los dos drivers de relaciones, ANTES de tocar el backend
|
|
34
|
+
* — la misma función, así que la misma clase, el mismo `code` y el mismo
|
|
35
|
+
* mensaje por cualquier puerta. Hacía falta en el driver (panel `{trx}`, 🔴 2
|
|
36
|
+
* del auditor): `manager.driver()` y `reconcileRelations` (que escribe con
|
|
37
|
+
* `to.relate`) entran por él, y sin la guarda
|
|
38
|
+
* `relate(evil, 'assignee', {type:'role_binding', id:<roleUuid>}, S)` componía
|
|
39
|
+
* en el store COMPARTIDO el id exacto de un binding de roles y
|
|
40
40
|
* `roles.authorize` pasaba de `false` a `true` (medido contra el `:8101`).
|
|
41
41
|
* La gramática de identidad no basta: `role_binding`/`assignee` son
|
|
42
42
|
* gramaticalmente válidos.
|
|
43
|
+
*
|
|
44
|
+
* **Cubre las OCHO operaciones del puerto** (`2.4.0-alpha.3`, cierre del
|
|
45
|
+
* 🔴 1 / 🟠 2 del auditor y cierre-2): hasta alpha.3 solo `relate`/`unrelate`
|
|
46
|
+
* la llamaban, y por `purgeObject({ type: 'role_binding', id: R }, S)` el
|
|
47
|
+
* puerto de relaciones BORRABA el binding real del store compartido
|
|
48
|
+
* (`authorize` pasaba de `true` a `false`, 0 tuplas, evento de auditoría
|
|
49
|
+
* limpio), y `listSubjects('assignee', role_binding)` enumeraba sus asignados
|
|
50
|
+
* sin catálogo ni `within`. **Son DOS funciones, no un opcional** (cierre-2,
|
|
51
|
+
* 🟠 1 del re-ataque): el primer cierre hizo `relation` opcional con un
|
|
52
|
+
* `if (relation === undefined) return` compartido por todas las llamadas, y
|
|
53
|
+
* eso APAGÓ F-05 en `relate`/`unrelate` sin relación (`request.input('relation')`
|
|
54
|
+
* ausente): antes `isDeclared('document', undefined)` era `false` ⇒ 422 con
|
|
55
|
+
* cero llamadas; con el opcional los dobles escribían la tupla, `openfga`
|
|
56
|
+
* devolvía 503 del servidor y `database` lo salvaba su driver (paridad rota),
|
|
57
|
+
* y `listSubjects(undefined)` devolvía la UNIÓN de relaciones del objeto.
|
|
58
|
+
* Esta función es ESTRICTA: la relación es obligatoria (ausente, `undefined`,
|
|
59
|
+
* vacía o no-string ⇒ 422 `E_AUTHZ_RELATION_UNKNOWN`) y la usan `relate`/
|
|
60
|
+
* `unrelate`/`check`/`listSubjects`/`membersOf` (+ `listObjects`, que también
|
|
61
|
+
* nombra una relación) y el userset de un sujeto (`{ object, relation }`).
|
|
62
|
+
* Quien NO nombra relación —`purgeObject`— usa `assertObjectTypeDeclared`.
|
|
43
63
|
*/
|
|
44
64
|
export function assertRelationDeclared(config, object, relation) {
|
|
65
|
+
assertObjectTypeDeclared(config, object);
|
|
66
|
+
if (typeof relation !== 'string' || relation.length === 0) {
|
|
67
|
+
throw new RelationUnknownError(`La relación de '${object.type}' es obligatoria y llegó ${relation === undefined ? 'undefined' : JSON.stringify(relation)} ` +
|
|
68
|
+
`(F-05): relate/unrelate/check/listObjects/listSubjects/membersOf exigen una relación declarada; ` +
|
|
69
|
+
`sin ella no hay tupla que escribir ni pregunta que responder.`);
|
|
70
|
+
}
|
|
71
|
+
if (!config.isDeclared(object.type, relation)) {
|
|
72
|
+
throw new RelationUnknownError(`La relación '${String(relation)}' no está declarada para el tipo '${object.type}' en ` +
|
|
73
|
+
`defineRelationsConfig (F-05).`);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* **F-05 sobre el TIPO solo** (cierre-2 de alpha.3): la mitad de F-05 que
|
|
78
|
+
* aplican las operaciones que NO nombran relación —`purgeObject`— y la primera
|
|
79
|
+
* comprobación de `assertRelationDeclared`. Un tipo no declarado (o un objeto
|
|
80
|
+
* que no es `{ type }`) ⇒ 422 `E_AUTHZ_RELATION_TYPE_UNKNOWN`. Separada de la
|
|
81
|
+
* estricta a propósito: deducir «solo el tipo» de un `relation === undefined`
|
|
82
|
+
* era lo que apagaba F-05 en `relate`/`unrelate` sin relación (🟠 1 del
|
|
83
|
+
* re-ataque del auditor).
|
|
84
|
+
*/
|
|
85
|
+
export function assertObjectTypeDeclared(config, object) {
|
|
45
86
|
if (!object || typeof object !== 'object' || typeof object.type !== 'string') {
|
|
46
87
|
throw new RelationTypeUnknownError(`Objeto de relación inválido: se esperaba { type, id } y llegó ${JSON.stringify(object)}.`);
|
|
47
88
|
}
|
|
48
89
|
if (!config.hasType(object.type)) {
|
|
49
90
|
throw new RelationTypeUnknownError(`El tipo de objeto '${object.type}' no está declarado en defineRelationsConfig (F-05): ` +
|
|
50
|
-
`relate/unrelate solo aceptan
|
|
51
|
-
`podría componer el id de un
|
|
52
|
-
|
|
53
|
-
if (!config.isDeclared(object.type, relation)) {
|
|
54
|
-
throw new RelationUnknownError(`La relación '${String(relation)}' no está declarada para el tipo '${object.type}' en ` +
|
|
55
|
-
`defineRelationsConfig (F-05).`);
|
|
91
|
+
`relate/unrelate/purgeObject/purgeSubject/check/listObjects/listSubjects/membersOf solo aceptan ` +
|
|
92
|
+
`tipos declarados. En el store compartido un tipo no declarado podría componer el id de un ` +
|
|
93
|
+
`'role_binding' real y escalar a roles.authorize, purgarlo o enumerar sus asignados.`);
|
|
56
94
|
}
|
|
57
95
|
}
|
|
58
96
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"define_relations_config.js","sourceRoot":"","sources":["../../../src/relations/define_relations_config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAA;AAClG,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAA;AAG7F,yFAAyF;AACzF,MAAM,iBAAiB,GAAG,EAAE,CAAA;AAC5B,MAAM,eAAe,GAAG,GAAG,CAAA;AAC3B,iFAAiF;AACjF,MAAM,eAAe,GAAG,wBAAwB,CAAA;AA2DhD,SAAS,MAAM,CAAC,OAAe;IAC7B,MAAM,IAAI,mBAAmB,CAAC,OAAO,CAAC,CAAA;AACxC,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"define_relations_config.js","sourceRoot":"","sources":["../../../src/relations/define_relations_config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +1,26 @@
|
|
|
1
|
-
import type { RelObject, RelSubject, RelationRef, RelationWriteEvent, RelationWriteOptions, RelationsDriver, RelationObjectsPage, RelationSubjectsPage, RelationPage, RelationTuplePage,
|
|
1
|
+
import type { RelObject, RelSubject, RelationRef, RelationWriteEvent, RelationWriteOptions, RelationsDriver, RelationObjectsPage, RelationSubjectsPage, RelationPage, RelationTuplePage, RelationPurgeOptions, ScopeRef } from '../types.js';
|
|
2
2
|
import type { RelationsConfig } from './define_relations_config.js';
|
|
3
3
|
export interface RelationsManagerOptions {
|
|
4
4
|
/**
|
|
5
5
|
* Comprobación PURA de escritura (R-13): recibe la referencia completa de la
|
|
6
|
-
* tupla (sujeto, relación, objeto, partición, operación) y
|
|
7
|
-
* rechazarla. Corre DESPUÉS de F-05 y ANTES de tocar el driver.
|
|
6
|
+
* tupla (sujeto, relación, objeto, partición, operación) y LANZA para
|
|
7
|
+
* rechazarla. Corre DESPUÉS de F-05 y ANTES de tocar el driver. **No
|
|
8
|
+
* devuelve veredictos**: todo retorno distinto de `undefined` —una promesa,
|
|
9
|
+
* un `false`, un `true`, una función con `.then`— es 500 `E_AUTHZ_CONFIG`
|
|
10
|
+
* antes del driver (2.4.0-alpha.3 y su cierre: un `false` devuelto no
|
|
11
|
+
* denegaba nada y la escritura entraba).
|
|
8
12
|
*/
|
|
9
13
|
assertWrite?(ref: RelationRef): void;
|
|
10
|
-
/**
|
|
14
|
+
/**
|
|
15
|
+
* Auditoría: se notifica DESPUÉS de que el driver vuelva, con el `actor`
|
|
16
|
+
* (validado), `transactional: true` con `{ transaction }` e
|
|
17
|
+
* `indeterminate: true` al vencer el deadline (invariante 13). Puede ser
|
|
18
|
+
* `async` (la promesa devuelta SE ESPERA); si lanza o rechaza, se registra y
|
|
19
|
+
* NO tumba la escritura ya aplicada (2.4.0-alpha.3, paridad con
|
|
20
|
+
* `hooks.onWrite`). Se tipa `void` (y no `void | Promise<void>`) para no
|
|
21
|
+
* romper a quien ya lo construye a mano con `(e) => events.push(e)`: un
|
|
22
|
+
* retorno cualquiera solo es asignable a `void` a secas.
|
|
23
|
+
*/
|
|
11
24
|
onRelationWrite?(event: RelationWriteEvent): void;
|
|
12
25
|
/** `true` exige `actor` en toda escritura (paridad con `requireActor` de roles). */
|
|
13
26
|
requireActor?: boolean;
|
|
@@ -41,11 +54,41 @@ export declare class RelationsManager {
|
|
|
41
54
|
driver(): RelationsDriver;
|
|
42
55
|
relate(subject: RelSubject, relation: string, object: RelObject, partition: ScopeRef, options?: RelationWriteOptions): Promise<void>;
|
|
43
56
|
unrelate(subject: RelSubject, relation: string, object: RelObject, partition: ScopeRef, options?: RelationWriteOptions): Promise<void>;
|
|
57
|
+
/**
|
|
58
|
+
* **Las lecturas también pasan por F-05** (2.4.0-alpha.3, 🟠 2 del auditor):
|
|
59
|
+
* el `objectId` lleva la partición, así que `listSubjects('assignee',
|
|
60
|
+
* { type: 'role_binding', id: R }, S)` era la lista de asignados de un rol
|
|
61
|
+
* en un scope, por el puerto de relaciones, sin catálogo, sin `within`, sin
|
|
62
|
+
* `requireActor` (las lecturas no lo tienen) y sin visibilidad de rol
|
|
63
|
+
* (invariante 18). `check`/`listSubjects` validan el par (tipo, relación);
|
|
64
|
+
* `listObjects` el tipo; el userset del sujeto, su par. PRIMERA línea,
|
|
65
|
+
* cero llamadas al driver; el driver re-valida (defensa en profundidad).
|
|
66
|
+
*/
|
|
44
67
|
check(subject: RelSubject, relation: string, object: RelObject, partition: ScopeRef): Promise<boolean>;
|
|
45
68
|
listObjects(subject: RelSubject, relation: string, objectType: string, partition: ScopeRef, page?: RelationPage): Promise<RelationObjectsPage>;
|
|
46
69
|
listSubjects(relation: string, object: RelObject, partition: ScopeRef, page?: RelationPage): Promise<RelationSubjectsPage>;
|
|
47
|
-
|
|
48
|
-
|
|
70
|
+
/**
|
|
71
|
+
* **Las purgas notifican** (2.4.0-alpha.3 · E, hallazgo #4; D-1/D-3): UN
|
|
72
|
+
* evento por llamada —aunque el driver barra las dos ortografías del uuid
|
|
73
|
+
* de partición por dentro: el manager no canoniza particiones, y diverge a
|
|
74
|
+
* propósito de `scopes.detached`, que emite uno por ortografía porque ahí
|
|
75
|
+
* canoniza el MANAGER—, con el objetivo y la partición TAL COMO la pasó el
|
|
76
|
+
* llamante, sin `relation` y SIN conteo (el puerto devuelve `void`; un
|
|
77
|
+
* conteo lo rompería para terceros y un rollback lo desmentiría). Se
|
|
78
|
+
* notifica también cuando no borra nada: el hecho auditable es «alguien
|
|
79
|
+
* pidió borrar las llaves de X». Sujeta a `requireActor` (D-3, breaking) y
|
|
80
|
+
* al actor validado; NO pasa por `assertWrite` (su `RelationRef.operation`
|
|
81
|
+
* es `'relate' | 'unrelate'`, tipo publicado de R-13). Mismo `#write`
|
|
82
|
+
* (invariante 13) y mismo `#notify` que `relate`/`unrelate`.
|
|
83
|
+
*
|
|
84
|
+
* **Y pasan por F-05** (cierre del 🔴 1 del auditor de alpha.3): el mismo
|
|
85
|
+
* orden que `relate` —puerta 1, freeze, F-05 (solo el TIPO: una purga no
|
|
86
|
+
* nombra relación), id, actor, scope—. `purgeSubject` valida su sujeto como
|
|
87
|
+
* `relate` (`#assertSubject`, ⚪ 7: un userset no declarado o un holder mal
|
|
88
|
+
* formado es 422 ANTES del driver y no llega al evento).
|
|
89
|
+
*/
|
|
90
|
+
purgeObject(object: RelObject, partition: ScopeRef, options?: RelationPurgeOptions): Promise<void>;
|
|
91
|
+
purgeSubject(subject: RelSubject, partition: ScopeRef, options?: RelationPurgeOptions): Promise<void>;
|
|
49
92
|
/**
|
|
50
93
|
* Membresía TRANSITIVA de un grupo (a través de usersets anidados) —
|
|
51
94
|
* DISTINTA de `listSubjects`, que da los hechos DIRECTOS. Solo la trae el
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../../src/relations/manager.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../../src/relations/manager.ts"],"names":[],"mappings":"AAiCA,OAAO,KAAK,EACV,SAAS,EACT,UAAU,EACV,WAAW,EACX,kBAAkB,EAClB,oBAAoB,EACpB,eAAe,EACf,mBAAmB,EACnB,oBAAoB,EACpB,YAAY,EACZ,iBAAiB,EAEjB,oBAAoB,EACpB,QAAQ,EAET,MAAM,aAAa,CAAA;AAGpB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAA;AAEnE,MAAM,WAAW,uBAAuB;IACtC;;;;;;;;OAQG;IACH,WAAW,CAAC,CAAC,GAAG,EAAE,WAAW,GAAG,IAAI,CAAA;IACpC;;;;;;;;;OASG;IACH,eAAe,CAAC,CAAC,KAAK,EAAE,kBAAkB,GAAG,IAAI,CAAA;IACjD,oFAAoF;IACpF,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,IAAI,CAAA;IAClB;;;;OAIG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB;;;;;;OAMG;IACH,0BAA0B,CAAC,EAAE,OAAO,CAAA;IACpC,uHAAuH;IACvH,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,qBAAa,gBAAgB;;gBAKf,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,eAAe,EAAE,OAAO,GAAE,uBAA4B;IAoJnG,iFAAiF;IACjF,MAAM,IAAI,eAAe;IAyGnB,MAAM,CACV,OAAO,EAAE,UAAU,EACnB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,SAAS,EACjB,SAAS,EAAE,QAAQ,EACnB,OAAO,CAAC,EAAE,oBAAoB,GAC7B,OAAO,CAAC,IAAI,CAAC;IAmBV,QAAQ,CACZ,OAAO,EAAE,UAAU,EACnB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,SAAS,EACjB,SAAS,EAAE,QAAQ,EACnB,OAAO,CAAC,EAAE,oBAAoB,GAC7B,OAAO,CAAC,IAAI,CAAC;IAehB;;;;;;;;;OASG;IACG,KAAK,CAAC,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;IAQtG,WAAW,CACf,OAAO,EAAE,UAAU,EACnB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,QAAQ,EACnB,IAAI,CAAC,EAAE,YAAY,GAClB,OAAO,CAAC,mBAAmB,CAAC;IAOzB,YAAY,CAChB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,SAAS,EACjB,SAAS,EAAE,QAAQ,EACnB,IAAI,CAAC,EAAE,YAAY,GAClB,OAAO,CAAC,oBAAoB,CAAC;IAOhC;;;;;;;;;;;;;;;;;;;OAmBG;IACG,WAAW,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBlG,YAAY,CAAC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;IAiB3G;;;;;;OAMG;IACG,SAAS,CACb,MAAM,EAAE,SAAS,EACjB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,QAAQ,EACnB,IAAI,CAAC,EAAE,YAAY,GAClB,OAAO,CAAC,oBAAoB,CAAC;IAqBhC,oGAAoG;IAC9F,kBAAkB,CAAC,SAAS,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,iBAAiB,CAAC;CAuB/F"}
|
|
@@ -21,12 +21,12 @@
|
|
|
21
21
|
* Pureza (regla 2): solo depende del puerto, los errores, la gramática
|
|
22
22
|
* compartida y `defineRelationsConfig`. Nada de `manager`/`drivers/*`.
|
|
23
23
|
*/
|
|
24
|
-
import { ActorRequiredError, AuthorizationConfigError, UnsupportedOperationError } from '../errors.js';
|
|
24
|
+
import { ActorRequiredError, AuthorizationBackendTimeoutError, AuthorizationConfigError, UnsupportedOperationError, isPartialWrite, } from '../errors.js';
|
|
25
25
|
import { assertScope, assertSubject, assertRelationId, assertExpiresAt } from '../identity.js';
|
|
26
26
|
import { isClock, systemClock } from '../clock.js';
|
|
27
27
|
import { assertNotFrozenRow } from '../freeze.js';
|
|
28
28
|
import { isRelUserset } from '../types.js';
|
|
29
|
-
import { assertRelationDeclared } from './define_relations_config.js';
|
|
29
|
+
import { assertRelationDeclared, assertObjectTypeDeclared } from './define_relations_config.js';
|
|
30
30
|
export class RelationsManager {
|
|
31
31
|
#driver;
|
|
32
32
|
#config;
|
|
@@ -67,6 +67,108 @@ export class RelationsManager {
|
|
|
67
67
|
return;
|
|
68
68
|
throw UnsupportedOperationError.transactional(`relations.${operation}`, this.#options.driverName ?? 'relations', 'relations');
|
|
69
69
|
}
|
|
70
|
+
/**
|
|
71
|
+
* La marca del evento de una escritura inscrita en la transacción del
|
|
72
|
+
* llamante (2.4.0-alpha.3 · B, paridad literal con `#transactional` de
|
|
73
|
+
* roles, L-3): `onRelationWrite` se dispara cuando el DRIVER vuelve, y en
|
|
74
|
+
* ese momento la tupla existe solo dentro de esa transacción — es un hecho
|
|
75
|
+
* si y solo si el llamante confirma, cosa que el paquete nunca ve. Quien
|
|
76
|
+
* audita lo necesita para no registrar como firme lo que un rollback
|
|
77
|
+
* deshace (`trx.after('commit')`). `undefined`/`null` cuentan como SIN
|
|
78
|
+
* transacción (lo mismo que `#assertTransactional`); sin ella la marca está
|
|
79
|
+
* AUSENTE, nunca `false`.
|
|
80
|
+
*/
|
|
81
|
+
#transactional(options) {
|
|
82
|
+
return options?.transaction === undefined || options.transaction === null ? {} : { transactional: true };
|
|
83
|
+
}
|
|
84
|
+
/** `{ actor }` listo para fundir en el evento, o `{}`: el evento no inventa autores (como `#writeOptions` de roles). */
|
|
85
|
+
#actorOf(options) {
|
|
86
|
+
return options?.actor ? { actor: options.actor } : {};
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* **Invariante 13 en relaciones** (2.4.0-alpha.3 · C; el MISMO `#write` de
|
|
90
|
+
* roles, `manager.ts:3257`): una escritura que vence el deadline (503
|
|
91
|
+
* `E_AUTHZ_BACKEND_TIMEOUT`) es INDETERMINADA — la sentencia/el `Write`
|
|
92
|
+
* puede aterrizar después de que el llamante reciba el error—. Antes de
|
|
93
|
+
* propagar se notifica el mismo evento con `indeterminate: true`, para que
|
|
94
|
+
* quien audita registre «puede haber ocurrido» en vez de nada. Cualquier
|
|
95
|
+
* otro fallo (422, `assertWrite`, freeze, conexión rechazada) significa que
|
|
96
|
+
* la escritura no ocurrió y se propaga SIN evento. Con `{ transaction }` el
|
|
97
|
+
* evento lleva además `transactional: true` (el rollback del llamante
|
|
98
|
+
* determina el resultado, pero es suyo y el paquete no lo ve). Envuelve las
|
|
99
|
+
* CUATRO escrituras.
|
|
100
|
+
*
|
|
101
|
+
* **Y una escritura PARCIAL también es indeterminada** (cierre del 🟡 6 del
|
|
102
|
+
* auditor de alpha.3): la purga de `openfga` es multi-request (ortografías
|
|
103
|
+
* × tipos, cada una `Read`+`deleteTuples`+`Read`), así que un 503 que NO es
|
|
104
|
+
* timeout —o el 500 `E_AUTHZ_PURGE_INCOMPLETE`— puede llegar DESPUÉS de haber
|
|
105
|
+
* borrado parte. Ahí «esa escritura no ocurrió» sería falso; el driver marca
|
|
106
|
+
* el error con `markPartialWrite` (`src/errors.ts`) y aquí se notifica
|
|
107
|
+
* `indeterminate: true` igual que con el deadline. La frase «no ocurrió y no
|
|
108
|
+
* hay evento» queda para los fallos ANTES de la primera sentencia/`Write`.
|
|
109
|
+
*/
|
|
110
|
+
async #write(event, fn) {
|
|
111
|
+
try {
|
|
112
|
+
return await fn();
|
|
113
|
+
}
|
|
114
|
+
catch (error) {
|
|
115
|
+
if (error instanceof AuthorizationBackendTimeoutError || isPartialWrite(error)) {
|
|
116
|
+
await this.#notify({ ...event, indeterminate: true });
|
|
117
|
+
}
|
|
118
|
+
throw error;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* **El evento es una COPIA, no un alias** (⚪ 8 del auditor de alpha.3): el
|
|
123
|
+
* sink lo guarda y el llamante (o el propio sink, ahora que se `await`ea)
|
|
124
|
+
* puede mutar después `object.id`, `partition.uuid` o el `actor`. Copia por
|
|
125
|
+
* nivel de identidad (spread: el `actor` conserva los campos de más que
|
|
126
|
+
* traiga, como en roles — se documenta, no se poda); `expiresAt` es un
|
|
127
|
+
* `Date` inmutable por convención y se copia como instante.
|
|
128
|
+
*/
|
|
129
|
+
#copyEvent(event) {
|
|
130
|
+
const copy = { ...event, partition: { ...event.partition } };
|
|
131
|
+
if (event.subject !== undefined) {
|
|
132
|
+
copy.subject = isRelUserset(event.subject)
|
|
133
|
+
? { ...event.subject, object: { ...event.subject.object } }
|
|
134
|
+
: { ...event.subject };
|
|
135
|
+
}
|
|
136
|
+
if (event.object !== undefined)
|
|
137
|
+
copy.object = { ...event.object };
|
|
138
|
+
if (event.actor !== undefined)
|
|
139
|
+
copy.actor = { ...event.actor };
|
|
140
|
+
if (event.expiresAt instanceof Date)
|
|
141
|
+
copy.expiresAt = new Date(event.expiresAt.getTime());
|
|
142
|
+
return copy;
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Notifica al consumidor (2.4.0-alpha.3 · D1/D2, hallazgo H1; el MISMO
|
|
146
|
+
* `#notify` de roles, `manager.ts:3276`). El hook es un side-effect
|
|
147
|
+
* (auditar, emitir un evento): cuando falla, la escritura YA está aplicada,
|
|
148
|
+
* así que propagar su error le daría al llamante un fallo por una operación
|
|
149
|
+
* que sí ocurrió — y le invitaría a reintentar algo ya hecho. Se ESPERA (un
|
|
150
|
+
* hook `async` que rechaza ya no es un unhandled rejection), se registra y
|
|
151
|
+
* se sigue. Hasta alpha.3 se llamaba sin `await` ni `try/catch`.
|
|
152
|
+
*/
|
|
153
|
+
async #notify(event) {
|
|
154
|
+
try {
|
|
155
|
+
await this.#options.onRelationWrite?.(event);
|
|
156
|
+
}
|
|
157
|
+
catch (error) {
|
|
158
|
+
await this.#logHookFailure(event, error);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
async #logHookFailure(event, error) {
|
|
162
|
+
const context = `authz: el hook onRelationWrite falló tras '${event.operation}' (la escritura sí se aplicó)`;
|
|
163
|
+
try {
|
|
164
|
+
const { default: logger } = await import('@adonisjs/core/services/logger');
|
|
165
|
+
logger.error({ err: error, event }, context);
|
|
166
|
+
}
|
|
167
|
+
catch {
|
|
168
|
+
// Fuera de una app booteada (tests, scripts sueltos) no hay logger.
|
|
169
|
+
console.error(context, error);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
70
172
|
/** El driver crudo — salida documentada de las barreras (plataforma y tests). */
|
|
71
173
|
driver() {
|
|
72
174
|
return this.#driver;
|
|
@@ -78,10 +180,27 @@ export class RelationsManager {
|
|
|
78
180
|
* binding real. Es la MISMA función que aplican los dos drivers (L-0,
|
|
79
181
|
* `assertRelationDeclared`): el manager corta primero; el driver es la red
|
|
80
182
|
* para quien entra por `manager.driver()` o por `reconcileRelations`.
|
|
183
|
+
*
|
|
184
|
+
* **En las OCHO operaciones** (2.4.0-alpha.3, 🔴 1 / 🟠 2 del auditor;
|
|
185
|
+
* cierre-2 · 🟡 3 `membersOf`): hasta alpha.3 solo `relate`/`unrelate`
|
|
186
|
+
* pasaban por aquí, y `purgeObject({ type: 'role_binding', id: R }, S)`
|
|
187
|
+
* componía en el driver `openfga` el id EXACTO del binding real y lo
|
|
188
|
+
* borraba con demostración de cero (`authorize` de `true` a `false`), con
|
|
189
|
+
* un evento de auditoría limpio; `listSubjects('assignee', role_binding)`
|
|
190
|
+
* enumeraba sus asignados. **Dos funciones, no un opcional** (cierre-2,
|
|
191
|
+
* 🟠 1: la `relation?` opcional apagó F-05 en `relate`/`unrelate` sin
|
|
192
|
+
* relación): `#assertDeclared` es ESTRICTA —la relación es obligatoria— y
|
|
193
|
+
* la usan `relate`/`unrelate`/`check`/`listObjects`/`listSubjects`/
|
|
194
|
+
* `membersOf` y el userset del sujeto; `#assertTypeDeclared` (solo el tipo)
|
|
195
|
+
* la usa `purgeObject`. `purgeSubject` no nombra objeto: su F-05 es la del
|
|
196
|
+
* userset (`#assertSubject`).
|
|
81
197
|
*/
|
|
82
198
|
#assertDeclared(object, relation) {
|
|
83
199
|
assertRelationDeclared(this.#config, object, relation);
|
|
84
200
|
}
|
|
201
|
+
#assertTypeDeclared(object) {
|
|
202
|
+
assertObjectTypeDeclared(this.#config, object);
|
|
203
|
+
}
|
|
85
204
|
/**
|
|
86
205
|
* **R-16**: el `object.id` con la gramática estricta de relaciones ANTES del
|
|
87
206
|
* driver ⇒ 422 `E_AUTHZ_INVALID_IDENTITY`. `#assertDeclared` solo valida el
|
|
@@ -93,11 +212,43 @@ export class RelationsManager {
|
|
|
93
212
|
#assertObjectId(object) {
|
|
94
213
|
assertRelationId(`el id del objeto '${object?.type}'`, object?.id);
|
|
95
214
|
}
|
|
96
|
-
|
|
215
|
+
/**
|
|
216
|
+
* El `actor` de una escritura (2.4.0-alpha.3 · D4, hallazgo H3; paridad con
|
|
217
|
+
* `#writeOptions` de roles, `manager.ts:1512`): **validar-si-viene y después
|
|
218
|
+
* exigir-si-falta**. Hasta alpha.3 solo se comprobaba la PRESENCIA: un
|
|
219
|
+
* `actor: { uuid: 'A#B' }` viajaba al evento (envenena el rastro) y un
|
|
220
|
+
* `actor: {}` truthy satisfacía `requireActor`. Ahora un actor mal formado
|
|
221
|
+
* es 422 `E_AUTHZ_INVALID_IDENTITY` ANTES del driver, en las CUATRO
|
|
222
|
+
* escrituras (purgas incluidas, D-3).
|
|
223
|
+
*/
|
|
224
|
+
#assertActor(options, operation) {
|
|
225
|
+
if (options?.actor !== undefined)
|
|
226
|
+
assertSubject(options.actor);
|
|
97
227
|
if (this.#options.requireActor && !options?.actor) {
|
|
98
|
-
throw new ActorRequiredError(`
|
|
228
|
+
throw new ActorRequiredError(`relations.${operation}: escritura de relación sin 'actor' y la config exige uno (requireActor).`);
|
|
99
229
|
}
|
|
100
230
|
}
|
|
231
|
+
/**
|
|
232
|
+
* **R-13 con dientes** (2.4.0-alpha.3 · D3, hallazgo H2; cierre 🟠 3 / 🟡 4
|
|
233
|
+
* del auditor): `assertWrite` es síncrono y puro, y **no devuelve
|
|
234
|
+
* veredictos: lanza o no lanza**. TODO retorno distinto de `undefined` es
|
|
235
|
+
* 500 `E_AUTHZ_CONFIG` antes de tocar el driver — una promesa (H2: la
|
|
236
|
+
* promesa se descarta con el rechazo quitado para que no salga como
|
|
237
|
+
* unhandled rejection), una FUNCIÓN con `.then` (esquivaba la guarda
|
|
238
|
+
* `typeof 'object'`), un `false` (compila bajo `--strict` y hasta el cierre
|
|
239
|
+
* la escritura ENTRABA: fail-open) y también un `true` (el mismo error de
|
|
240
|
+
* modelo). Un `assertWrite` que LANZA propaga tal cual (es su forma de
|
|
241
|
+
* rechazar). La policy con actor/BD/await va en el servicio del consumidor.
|
|
242
|
+
*/
|
|
243
|
+
#assertWrite(ref, operation) {
|
|
244
|
+
const result = this.#options.assertWrite?.(ref);
|
|
245
|
+
if (result === undefined)
|
|
246
|
+
return;
|
|
247
|
+
if (result !== null && typeof result.then === 'function') {
|
|
248
|
+
Promise.resolve(result).then(undefined, () => { });
|
|
249
|
+
}
|
|
250
|
+
throw AuthorizationConfigError.assertWriteReturned(`relations.${operation}`, result);
|
|
251
|
+
}
|
|
101
252
|
/**
|
|
102
253
|
* **La barrera del freeze, la MISMA que la de roles** (L-1 · J1, juez del
|
|
103
254
|
* panel `{trx}`): hasta L-1 no había una sola referencia al freeze en
|
|
@@ -122,7 +273,7 @@ export class RelationsManager {
|
|
|
122
273
|
await this.#assertNotFrozen('relate');
|
|
123
274
|
this.#assertDeclared(object, relation);
|
|
124
275
|
this.#assertObjectId(object);
|
|
125
|
-
this.#assertActor(options);
|
|
276
|
+
this.#assertActor(options, 'relate');
|
|
126
277
|
assertScope(partition);
|
|
127
278
|
this.#assertSubject(subject, partition);
|
|
128
279
|
// R-15: `expiresAt` en sus tres estados legales (omitido / null / Date
|
|
@@ -131,49 +282,106 @@ export class RelationsManager {
|
|
|
131
282
|
const ref = { operation: 'relate', subject, relation, object, partition };
|
|
132
283
|
if (options && 'expiresAt' in options)
|
|
133
284
|
ref.expiresAt = options.expiresAt;
|
|
134
|
-
this.#
|
|
135
|
-
|
|
136
|
-
this.#
|
|
285
|
+
this.#assertWrite(ref, 'relate');
|
|
286
|
+
const event = this.#copyEvent({ ...ref, ...this.#actorOf(options), ...this.#transactional(options) });
|
|
287
|
+
await this.#write(event, () => this.#driver.relate(subject, relation, object, partition, options));
|
|
288
|
+
await this.#notify(event);
|
|
137
289
|
}
|
|
138
290
|
async unrelate(subject, relation, object, partition, options) {
|
|
139
291
|
this.#assertTransactional(options, 'unrelate');
|
|
140
292
|
await this.#assertNotFrozen('unrelate');
|
|
141
293
|
this.#assertDeclared(object, relation);
|
|
142
294
|
this.#assertObjectId(object);
|
|
143
|
-
this.#assertActor(options);
|
|
295
|
+
this.#assertActor(options, 'unrelate');
|
|
144
296
|
assertScope(partition);
|
|
145
297
|
this.#assertSubject(subject, partition);
|
|
146
298
|
const ref = { operation: 'unrelate', subject, relation, object, partition };
|
|
147
|
-
this.#
|
|
148
|
-
|
|
149
|
-
this.#
|
|
299
|
+
this.#assertWrite(ref, 'unrelate');
|
|
300
|
+
const event = this.#copyEvent({ ...ref, ...this.#actorOf(options), ...this.#transactional(options) });
|
|
301
|
+
await this.#write(event, () => this.#driver.unrelate(subject, relation, object, partition, options));
|
|
302
|
+
await this.#notify(event);
|
|
150
303
|
}
|
|
304
|
+
/**
|
|
305
|
+
* **Las lecturas también pasan por F-05** (2.4.0-alpha.3, 🟠 2 del auditor):
|
|
306
|
+
* el `objectId` lleva la partición, así que `listSubjects('assignee',
|
|
307
|
+
* { type: 'role_binding', id: R }, S)` era la lista de asignados de un rol
|
|
308
|
+
* en un scope, por el puerto de relaciones, sin catálogo, sin `within`, sin
|
|
309
|
+
* `requireActor` (las lecturas no lo tienen) y sin visibilidad de rol
|
|
310
|
+
* (invariante 18). `check`/`listSubjects` validan el par (tipo, relación);
|
|
311
|
+
* `listObjects` el tipo; el userset del sujeto, su par. PRIMERA línea,
|
|
312
|
+
* cero llamadas al driver; el driver re-valida (defensa en profundidad).
|
|
313
|
+
*/
|
|
151
314
|
async check(subject, relation, object, partition) {
|
|
315
|
+
this.#assertDeclared(object, relation);
|
|
152
316
|
assertScope(partition);
|
|
153
317
|
this.#assertObjectId(object);
|
|
318
|
+
this.#assertSubject(subject, partition);
|
|
154
319
|
return this.#driver.check(subject, relation, object, partition);
|
|
155
320
|
}
|
|
156
321
|
async listObjects(subject, relation, objectType, partition, page) {
|
|
322
|
+
this.#assertDeclared({ type: objectType }, relation);
|
|
157
323
|
assertScope(partition);
|
|
324
|
+
this.#assertSubject(subject, partition);
|
|
158
325
|
return this.#driver.listObjects(subject, relation, objectType, partition, page);
|
|
159
326
|
}
|
|
160
327
|
async listSubjects(relation, object, partition, page) {
|
|
328
|
+
this.#assertDeclared(object, relation);
|
|
161
329
|
assertScope(partition);
|
|
162
330
|
this.#assertObjectId(object);
|
|
163
331
|
return this.#driver.listSubjects(relation, object, partition, page);
|
|
164
332
|
}
|
|
333
|
+
/**
|
|
334
|
+
* **Las purgas notifican** (2.4.0-alpha.3 · E, hallazgo #4; D-1/D-3): UN
|
|
335
|
+
* evento por llamada —aunque el driver barra las dos ortografías del uuid
|
|
336
|
+
* de partición por dentro: el manager no canoniza particiones, y diverge a
|
|
337
|
+
* propósito de `scopes.detached`, que emite uno por ortografía porque ahí
|
|
338
|
+
* canoniza el MANAGER—, con el objetivo y la partición TAL COMO la pasó el
|
|
339
|
+
* llamante, sin `relation` y SIN conteo (el puerto devuelve `void`; un
|
|
340
|
+
* conteo lo rompería para terceros y un rollback lo desmentiría). Se
|
|
341
|
+
* notifica también cuando no borra nada: el hecho auditable es «alguien
|
|
342
|
+
* pidió borrar las llaves de X». Sujeta a `requireActor` (D-3, breaking) y
|
|
343
|
+
* al actor validado; NO pasa por `assertWrite` (su `RelationRef.operation`
|
|
344
|
+
* es `'relate' | 'unrelate'`, tipo publicado de R-13). Mismo `#write`
|
|
345
|
+
* (invariante 13) y mismo `#notify` que `relate`/`unrelate`.
|
|
346
|
+
*
|
|
347
|
+
* **Y pasan por F-05** (cierre del 🔴 1 del auditor de alpha.3): el mismo
|
|
348
|
+
* orden que `relate` —puerta 1, freeze, F-05 (solo el TIPO: una purga no
|
|
349
|
+
* nombra relación), id, actor, scope—. `purgeSubject` valida su sujeto como
|
|
350
|
+
* `relate` (`#assertSubject`, ⚪ 7: un userset no declarado o un holder mal
|
|
351
|
+
* formado es 422 ANTES del driver y no llega al evento).
|
|
352
|
+
*/
|
|
165
353
|
async purgeObject(object, partition, options) {
|
|
166
354
|
this.#assertTransactional(options, 'purgeObject');
|
|
167
355
|
await this.#assertNotFrozen('purgeObject');
|
|
356
|
+
this.#assertTypeDeclared(object);
|
|
168
357
|
assertScope(partition);
|
|
169
358
|
this.#assertObjectId(object);
|
|
170
|
-
|
|
359
|
+
this.#assertActor(options, 'purgeObject');
|
|
360
|
+
const event = this.#copyEvent({
|
|
361
|
+
operation: 'purgeObject',
|
|
362
|
+
object,
|
|
363
|
+
partition,
|
|
364
|
+
...this.#actorOf(options),
|
|
365
|
+
...this.#transactional(options),
|
|
366
|
+
});
|
|
367
|
+
await this.#write(event, () => this.#driver.purgeObject(object, partition, options));
|
|
368
|
+
await this.#notify(event);
|
|
171
369
|
}
|
|
172
370
|
async purgeSubject(subject, partition, options) {
|
|
173
371
|
this.#assertTransactional(options, 'purgeSubject');
|
|
174
372
|
await this.#assertNotFrozen('purgeSubject');
|
|
175
373
|
assertScope(partition);
|
|
176
|
-
|
|
374
|
+
this.#assertSubject(subject, partition);
|
|
375
|
+
this.#assertActor(options, 'purgeSubject');
|
|
376
|
+
const event = this.#copyEvent({
|
|
377
|
+
operation: 'purgeSubject',
|
|
378
|
+
subject,
|
|
379
|
+
partition,
|
|
380
|
+
...this.#actorOf(options),
|
|
381
|
+
...this.#transactional(options),
|
|
382
|
+
});
|
|
383
|
+
await this.#write(event, () => this.#driver.purgeSubject(subject, partition, options));
|
|
384
|
+
await this.#notify(event);
|
|
177
385
|
}
|
|
178
386
|
/**
|
|
179
387
|
* Membresía TRANSITIVA de un grupo (a través de usersets anidados) —
|
|
@@ -183,7 +391,14 @@ export class RelationsManager {
|
|
|
183
391
|
* trunca), jamás un `skip`.
|
|
184
392
|
*/
|
|
185
393
|
async membersOf(object, relation, partition, page) {
|
|
394
|
+
// Cierre-2 · 🟡 3: `membersOf` toma `(object, relation)` —la forma exacta
|
|
395
|
+
// que F-05 guarda— y era la octava operación fuera de «las siete»; un
|
|
396
|
+
// driver de terceros con `membersOfNative: true` sobre un store compartido
|
|
397
|
+
// reabría la fuga de `listSubjects`. F-05 (par, ESTRICTA) ANTES de la
|
|
398
|
+
// capacidad: 422 con cero llamadas, también donde `membersOf` sería 500.
|
|
399
|
+
this.#assertDeclared(object, relation);
|
|
186
400
|
assertScope(partition);
|
|
401
|
+
this.#assertObjectId(object);
|
|
187
402
|
if (!this.#driver.membersOf || !this.#driver.capabilities?.membersOfNative) {
|
|
188
403
|
throw new UnsupportedOperationError('membersOf', 'la membresía transitiva de un grupo', 'relations', `Solo el driver 'database' la resuelve (CTE recursiva); en 'openfga' la transitiva sería ` +
|
|
189
404
|
`'ListUsers', que trunca. Usa 'listSubjects' para los hechos directos.`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../../src/relations/manager.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../../src/relations/manager.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":"AA6BA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAA;AAC9E,OAAO,KAAK,EAGV,eAAe,EACf,2BAA2B,
|
|
1
|
+
{"version":3,"file":"relations_contract.d.ts","sourceRoot":"","sources":["../../../src/testing/relations_contract.ts"],"names":[],"mappings":"AA6BA,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,wBAAgB,uBAAuB,IAAI,eAAe,CAezD;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;AAwBD,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;AAgTD,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,CAw9BzE"}
|