@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.
Files changed (41) hide show
  1. package/README.md +53 -3
  2. package/build/index.d.ts +2 -2
  3. package/build/index.d.ts.map +1 -1
  4. package/build/index.js +5 -1
  5. package/build/index.js.map +1 -1
  6. package/build/providers/authz_provider.d.ts +6 -1
  7. package/build/providers/authz_provider.d.ts.map +1 -1
  8. package/build/providers/authz_provider.js +11 -2
  9. package/build/providers/authz_provider.js.map +1 -1
  10. package/build/src/define_config.d.ts +37 -1
  11. package/build/src/define_config.d.ts.map +1 -1
  12. package/build/src/define_config.js.map +1 -1
  13. package/build/src/drivers/database_relations_driver.d.ts +10 -0
  14. package/build/src/drivers/database_relations_driver.d.ts.map +1 -1
  15. package/build/src/drivers/database_relations_driver.js +28 -2
  16. package/build/src/drivers/database_relations_driver.js.map +1 -1
  17. package/build/src/drivers/openfga_relations_driver.d.ts +13 -0
  18. package/build/src/drivers/openfga_relations_driver.d.ts.map +1 -1
  19. package/build/src/drivers/openfga_relations_driver.js +106 -30
  20. package/build/src/drivers/openfga_relations_driver.js.map +1 -1
  21. package/build/src/errors.d.ts +48 -1
  22. package/build/src/errors.d.ts.map +1 -1
  23. package/build/src/errors.js +78 -0
  24. package/build/src/errors.js.map +1 -1
  25. package/build/src/relations/define_relations_config.d.ts +42 -8
  26. package/build/src/relations/define_relations_config.d.ts.map +1 -1
  27. package/build/src/relations/define_relations_config.js +51 -13
  28. package/build/src/relations/define_relations_config.js.map +1 -1
  29. package/build/src/relations/manager.d.ts +49 -6
  30. package/build/src/relations/manager.d.ts.map +1 -1
  31. package/build/src/relations/manager.js +229 -14
  32. package/build/src/relations/manager.js.map +1 -1
  33. package/build/src/testing/relations_contract.d.ts.map +1 -1
  34. package/build/src/testing/relations_contract.js +174 -5
  35. package/build/src/testing/relations_contract.js.map +1 -1
  36. package/build/src/types.d.ts +88 -7
  37. package/build/src/types.d.ts.map +1 -1
  38. package/build/src/types.js +4 -0
  39. package/build/src/types.js.map +1 -1
  40. package/build/stubs/config/authorization.stub +45 -1
  41. 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 en `relate`/`unrelate`,
34
- * ANTES de tocar el backend — la misma función, así que la misma clase, el
35
- * mismo `code` y el mismo mensaje por cualquier puerta. Hacía falta en el
36
- * driver (panel `{trx}`, 🔴 2 del auditor): `manager.driver()` y
37
- * `reconcileRelations` (que escribe con `to.relate`) entran por él, y sin la
38
- * guarda `relate(evil, 'assignee', {type:'role_binding', id:<roleUuid>}, S)`
39
- * componía en el store COMPARTIDO el id exacto de un binding de roles y
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 tipos declarados. En el store compartido un tipo no declarado ` +
51
- `podría componer el id de un 'role_binding' real y escalar a roles.authorize.`);
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":"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"}
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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,MAAM,UAAU,sBAAsB,CACpC,MAAuB,EACvB,MAAoC,EACpC,QAAgB;IAEhB,wBAAwB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACxC,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1D,MAAM,IAAI,oBAAoB,CAC5B,mBAAmB,MAAM,CAAC,IAAI,4BAA4B,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG;YAC1H,kGAAkG;YAClG,+DAA+D,CAClE,CAAA;IACH,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,CAAC;QAC9C,MAAM,IAAI,oBAAoB,CAC5B,gBAAgB,MAAM,CAAC,QAAQ,CAAC,qCAAqC,MAAM,CAAC,IAAI,OAAO;YACrF,+BAA+B,CAClC,CAAA;IACH,CAAC;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,wBAAwB,CAAC,MAAuB,EAAE,MAAoC;IACpG,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7E,MAAM,IAAI,wBAAwB,CAChC,iEAAiE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAC3F,CAAA;IACH,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,wBAAwB,CAChC,sBAAsB,MAAM,CAAC,IAAI,uDAAuD;YACtF,iGAAiG;YACjG,4FAA4F;YAC5F,qFAAqF,CACxF,CAAA;IACH,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAAyB;IAC7D,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtC,MAAM,CAAC,gEAAgE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACjG,CAAC;IACD,6EAA6E;IAC7E,oEAAoE;IACpE,yEAAyE;IACzE,IAAI,WAAW,IAAK,IAA2C,EAAE,CAAC;QAChE,MAAM,CACJ,iFAAiF;YAC/E,wFAAwF;YACxF,gFAAgF,CACnF,CAAA;IACH,CAAC;IAED,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtE,MAAM,CAAC,+EAA+E,CAAC,CAAA;IACzF,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,EAAE,CAAA;IAC1C,KAAK,MAAM,MAAM,IAAI,WAAW,EAAE,CAAC;QACjC,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC/B,MAAM,CAAC,mEAAmE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QACvG,CAAC;IACH,CAAC;IACD,MAAM,aAAa,GAAG,IAAI,GAAG,CAAS,CAAC,GAAG,oBAAoB,EAAE,GAAG,WAAW,CAAC,CAAC,CAAA;IAEhF,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAA;IACnC,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;QAC1C,MAAM,IAAI,GAAG,UAAU,EAAE,IAAI,CAAA;QAC7B,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,eAAe,EAAE,CAAC;YAC7F,MAAM,CACJ,iDAAiD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,4BAA4B;gBAC/F,iEAAiE,eAAe,eAAe,CAClG,CAAA;QACH,CAAC;QACD,IAAI,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5B,MAAM,CACJ,qDAAqD,IAAI,wCAAwC;gBAC/F,sBAAsB,CAAC,GAAG,oBAAoB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBAC5D,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,uBAAuB,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK;gBAClF,sFAAsF;gBACtF,iGAAiG;gBACjG,8BAA8B,CACjC,CAAA;QACH,CAAC;QACD,IAAI,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACxB,MAAM,CAAC,qDAAqD,IAAI,6BAA6B,CAAC,CAAA;QAChG,CAAC;QACD,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QAEnB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,UAAU,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9E,MAAM,CAAC,2CAA2C,IAAI,gCAAgC,CAAC,CAAA;QACzF,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAA;QAC7B,KAAK,MAAM,QAAQ,IAAI,UAAU,CAAC,SAAS,EAAE,CAAC;YAC5C,MAAM,IAAI,GAAG,QAAQ,EAAE,IAAI,CAAA;YAC3B,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC5D,MAAM,CACJ,2CAA2C,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,IAAI,aAAa;oBAC5F,0DAA0D,CAC7D,CAAA;YACH,CAAC;YACD,IAAI,IAAI,CAAC,MAAM,GAAG,iBAAiB,EAAE,CAAC;gBACpC,MAAM,CACJ,+CAA+C,IAAI,eAAe,IAAI,WAAW,IAAI,CAAC,MAAM,GAAG;oBAC7F,2BAA2B,iBAAiB,GAAG,CAClD,CAAA;YACH,CAAC;YACD,IAAI,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC7B,MAAM,CACJ,+CAA+C,IAAI,IAAI,IAAI,uCAAuC;oBAChG,UAAU,CAAC,GAAG,cAAc,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,kDAAkD,CAC7F,CAAA;YACH,CAAC;YACD,MAAM,MAAM,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAA;YAC/E,IAAI,MAAM,EAAE,CAAC;gBACX,MAAM,CACJ,+CAA+C,IAAI,IAAI,IAAI,kBAAkB,MAAM,aAAa;oBAC9F,2DAA2D,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK;oBACjG,kDAAkD,CACrD,CAAA;YACH,CAAC;YACD,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBAClB,MAAM,CAAC,+CAA+C,IAAI,IAAI,IAAI,6BAA6B,CAAC,CAAA;YAClG,CAAC;YACD,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QACf,CAAC;QAED,4EAA4E;QAC5E,KAAK,MAAM,QAAQ,IAAI,UAAU,CAAC,SAAS,EAAE,CAAC;YAC5C,KAAK,MAAM,QAAQ,IAAI,QAAQ,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;gBAC/C,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;oBACjC,MAAM,CAAC,oDAAoD,IAAI,IAAI,QAAQ,CAAC,IAAI,qBAAqB,CAAC,CAAA;gBACxG,CAAC;gBACD,kFAAkF;gBAClF,IAAI,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;oBACpD,MAAM,CACJ,mCAAmC,IAAI,IAAI,QAAQ,CAAC,IAAI,cAAc,QAAQ,oBAAoB;wBAChG,wFAAwF,CAC3F,CAAA;gBACH,CAAC;gBACD,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;oBACvB,MAAM,CACJ,mCAAmC,IAAI,IAAI,QAAQ,CAAC,IAAI,cAAc,QAAQ,mBAAmB;wBAC/F,gBAAgB,IAAI,0EAA0E,CACjG,CAAA;gBACH,CAAC;gBACD,IAAI,QAAQ,KAAK,QAAQ,CAAC,IAAI,EAAE,CAAC;oBAC/B,MAAM,CAAC,mCAAmC,IAAI,IAAI,QAAQ,CAAC,IAAI,0BAA0B,CAAC,CAAA;gBAC5F,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAuB,CAAA;IAC/C,oEAAoE;IACpE,4EAA4E;IAC5E,4EAA4E;IAC5E,6EAA6E;IAC7E,4EAA4E;IAC5E,gDAAgD;IAChD,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;IAC1C,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE;QACtD,MAAM,SAAS,GAAG,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,QAAoC,EAAE,EAAE,CAClF,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CACxH,CAAA;QACD,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAA6B,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAChG,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,CAAA;IACtF,CAAC,CAAC,CAAA;IAEF,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC;QACvC,SAAS,EAAE,IAAI,CAAC,QAAQ,EAAE,SAAS,KAAK,IAAI;QAC5C,OAAO,EAAE,CAAC,UAAkB,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC;QACzD,UAAU,EAAE,CAAC,UAAkB,EAAE,QAAgB,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,GAAG,CAAC,QAAQ,CAAC,IAAI,KAAK;KACvG,CAAoB,CAAA;AACvB,CAAC"}
@@ -1,13 +1,26 @@
1
- import type { RelObject, RelSubject, RelationRef, RelationWriteEvent, RelationWriteOptions, RelationsDriver, RelationObjectsPage, RelationSubjectsPage, RelationPage, RelationTuplePage, RelationTransactionOptions, ScopeRef } from '../types.js';
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 lanza para
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
- /** Auditoría: se notifica DESPUÉS de una escritura confirmada, con el `actor`. */
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
- purgeObject(object: RelObject, partition: ScopeRef, options?: RelationTransactionOptions): Promise<void>;
48
- purgeSubject(subject: RelSubject, partition: ScopeRef, options?: RelationTransactionOptions): Promise<void>;
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":"AA2BA,OAAO,KAAK,EACV,SAAS,EACT,UAAU,EACV,WAAW,EACX,kBAAkB,EAClB,oBAAoB,EACpB,eAAe,EACf,mBAAmB,EACnB,oBAAoB,EACpB,YAAY,EACZ,iBAAiB,EACjB,0BAA0B,EAC1B,QAAQ,EACT,MAAM,aAAa,CAAA;AAGpB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAA;AAEnE,MAAM,WAAW,uBAAuB;IACtC;;;;OAIG;IACH,WAAW,CAAC,CAAC,GAAG,EAAE,WAAW,GAAG,IAAI,CAAA;IACpC,kFAAkF;IAClF,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;IA8CnG,iFAAiF;IACjF,MAAM,IAAI,eAAe;IAwDnB,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;IAkBV,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;IAcV,KAAK,CAAC,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;IAMtG,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;IAKzB,YAAY,CAChB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,SAAS,EACjB,SAAS,EAAE,QAAQ,EACnB,IAAI,CAAC,EAAE,YAAY,GAClB,OAAO,CAAC,oBAAoB,CAAC;IAM1B,WAAW,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,0BAA0B,GAAG,OAAO,CAAC,IAAI,CAAC;IAQxG,YAAY,CAAC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,0BAA0B,GAAG,OAAO,CAAC,IAAI,CAAC;IAOjH;;;;;;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;IAchC,oGAAoG;IAC9F,kBAAkB,CAAC,SAAS,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,iBAAiB,CAAC;CAuB/F"}
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
- #assertActor(options) {
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(`Escritura de relación sin 'actor' y la config exige uno (requireActor).`);
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.#options.assertWrite?.(ref);
135
- await this.#driver.relate(subject, relation, object, partition, options);
136
- this.#options.onRelationWrite?.({ ...ref, actor: options?.actor });
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.#options.assertWrite?.(ref);
148
- await this.#driver.unrelate(subject, relation, object, partition, options);
149
- this.#options.onRelationWrite?.({ ...ref, actor: options?.actor });
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
- return this.#driver.purgeObject(object, partition, options);
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
- return this.#driver.purgeSubject(subject, partition, options);
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,EAK3B,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;AAsSD,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,CAyyBzE"}
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"}