@jantstack/adonis-authz 2.5.0-alpha.1 → 2.5.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 (103) hide show
  1. package/README.md +515 -22
  2. package/build/commands/authz_relations_reconcile.d.ts +13 -62
  3. package/build/commands/authz_relations_reconcile.d.ts.map +1 -1
  4. package/build/commands/authz_relations_reconcile.js +202 -116
  5. package/build/commands/authz_relations_reconcile.js.map +1 -1
  6. package/build/commands/openfga_provision.d.ts +62 -0
  7. package/build/commands/openfga_provision.d.ts.map +1 -1
  8. package/build/commands/openfga_provision.js +193 -1
  9. package/build/commands/openfga_provision.js.map +1 -1
  10. package/build/index.d.ts +6 -6
  11. package/build/index.d.ts.map +1 -1
  12. package/build/index.js +3 -3
  13. package/build/index.js.map +1 -1
  14. package/build/providers/authz_provider.d.ts.map +1 -1
  15. package/build/providers/authz_provider.js +4 -1
  16. package/build/providers/authz_provider.js.map +1 -1
  17. package/build/src/define_config.d.ts +32 -0
  18. package/build/src/define_config.d.ts.map +1 -1
  19. package/build/src/define_config.js +109 -0
  20. package/build/src/define_config.js.map +1 -1
  21. package/build/src/drivers/database_relations_driver.d.ts +36 -1
  22. package/build/src/drivers/database_relations_driver.d.ts.map +1 -1
  23. package/build/src/drivers/database_relations_driver.js +213 -46
  24. package/build/src/drivers/database_relations_driver.js.map +1 -1
  25. package/build/src/drivers/openfga_driver.d.ts +30 -4
  26. package/build/src/drivers/openfga_driver.d.ts.map +1 -1
  27. package/build/src/drivers/openfga_driver.js +151 -45
  28. package/build/src/drivers/openfga_driver.js.map +1 -1
  29. package/build/src/drivers/openfga_facts.d.ts +21 -0
  30. package/build/src/drivers/openfga_facts.d.ts.map +1 -1
  31. package/build/src/drivers/openfga_facts.js +74 -8
  32. package/build/src/drivers/openfga_facts.js.map +1 -1
  33. package/build/src/drivers/openfga_relations_driver.d.ts +140 -10
  34. package/build/src/drivers/openfga_relations_driver.d.ts.map +1 -1
  35. package/build/src/drivers/openfga_relations_driver.js +743 -49
  36. package/build/src/drivers/openfga_relations_driver.js.map +1 -1
  37. package/build/src/errors.d.ts +148 -0
  38. package/build/src/errors.d.ts.map +1 -1
  39. package/build/src/errors.js +166 -0
  40. package/build/src/errors.js.map +1 -1
  41. package/build/src/manager.d.ts.map +1 -1
  42. package/build/src/manager.js +15 -5
  43. package/build/src/manager.js.map +1 -1
  44. package/build/src/openfga.d.ts +1 -1
  45. package/build/src/openfga.d.ts.map +1 -1
  46. package/build/src/openfga.js +1 -1
  47. package/build/src/openfga.js.map +1 -1
  48. package/build/src/relations/check_many.d.ts +1 -1
  49. package/build/src/relations/check_many.d.ts.map +1 -1
  50. package/build/src/relations/check_many.js +6 -4
  51. package/build/src/relations/check_many.js.map +1 -1
  52. package/build/src/relations/define_relations_config.d.ts +187 -1
  53. package/build/src/relations/define_relations_config.d.ts.map +1 -1
  54. package/build/src/relations/define_relations_config.js +395 -7
  55. package/build/src/relations/define_relations_config.js.map +1 -1
  56. package/build/src/relations/manager.d.ts +33 -2
  57. package/build/src/relations/manager.d.ts.map +1 -1
  58. package/build/src/relations/manager.js +123 -4
  59. package/build/src/relations/manager.js.map +1 -1
  60. package/build/src/relations/reconcile.d.ts +295 -13
  61. package/build/src/relations/reconcile.d.ts.map +1 -1
  62. package/build/src/relations/reconcile.js +886 -85
  63. package/build/src/relations/reconcile.js.map +1 -1
  64. package/build/src/relations/tuple_order.d.ts +126 -0
  65. package/build/src/relations/tuple_order.d.ts.map +1 -0
  66. package/build/src/relations/tuple_order.js +598 -0
  67. package/build/src/relations/tuple_order.js.map +1 -0
  68. package/build/src/relations_config_store.d.ts.map +1 -1
  69. package/build/src/relations_config_store.js +29 -7
  70. package/build/src/relations_config_store.js.map +1 -1
  71. package/build/src/relations_reconcile.d.ts +79 -0
  72. package/build/src/relations_reconcile.d.ts.map +1 -0
  73. package/build/src/relations_reconcile.js +85 -0
  74. package/build/src/relations_reconcile.js.map +1 -0
  75. package/build/src/scope_outbox.d.ts +9 -5
  76. package/build/src/scope_outbox.d.ts.map +1 -1
  77. package/build/src/scope_outbox.js +7 -4
  78. package/build/src/scope_outbox.js.map +1 -1
  79. package/build/src/shared/backend_guard.d.ts +8 -0
  80. package/build/src/shared/backend_guard.d.ts.map +1 -1
  81. package/build/src/shared/backend_guard.js +15 -0
  82. package/build/src/shared/backend_guard.js.map +1 -1
  83. package/build/src/testing/main.d.ts +1 -1
  84. package/build/src/testing/main.d.ts.map +1 -1
  85. package/build/src/testing/main.js +1 -1
  86. package/build/src/testing/main.js.map +1 -1
  87. package/build/src/testing/relations_contract.d.ts +18 -0
  88. package/build/src/testing/relations_contract.d.ts.map +1 -1
  89. package/build/src/testing/relations_contract.js +895 -45
  90. package/build/src/testing/relations_contract.js.map +1 -1
  91. package/build/src/testing/relations_reconcile_contract.d.ts +9 -0
  92. package/build/src/testing/relations_reconcile_contract.d.ts.map +1 -1
  93. package/build/src/testing/relations_reconcile_contract.js +207 -0
  94. package/build/src/testing/relations_reconcile_contract.js.map +1 -1
  95. package/build/src/testing/scope_outbox_contract.d.ts +14 -1
  96. package/build/src/testing/scope_outbox_contract.d.ts.map +1 -1
  97. package/build/src/testing/scope_outbox_contract.js +126 -48
  98. package/build/src/testing/scope_outbox_contract.js.map +1 -1
  99. package/build/src/types.d.ts +90 -6
  100. package/build/src/types.d.ts.map +1 -1
  101. package/build/src/types.js +2 -0
  102. package/build/src/types.js.map +1 -1
  103. package/package.json +2 -1
@@ -1,3 +1,4 @@
1
+ import { AuthorizationConfigError } from './errors.js';
1
2
  /**
2
3
  * **La clave del driver de RELACIONES activo** (2.4.0-alpha.10): `relations.default`
3
4
  * y, si falta, el `default` de roles — las relaciones cambian de driver con él.
@@ -9,7 +10,115 @@
9
10
  export function activeRelationsDriverKey(config) {
10
11
  return config.relations?.default ?? config.default;
11
12
  }
13
+ /**
14
+ * **Listas blancas por nivel de `AuthorizationConfig`** (plan 2.5 · lote B · B2,
15
+ * gemelo en roles de la propiedad universal del linaje L5: «ninguna clave de
16
+ * una spec de config se descarta»). Hasta `2.5.0-alpha.1` `defineConfig` era la
17
+ * identidad: `requireWithing: true` (typo) no exigía nada y nadie lo decía. Una
18
+ * clave nueva del paquete entra AQUÍ en el mismo commit que su efecto.
19
+ */
20
+ export const AUTHORIZATION_CONFIG_KEYS = Object.freeze({
21
+ root: Object.freeze([
22
+ 'default',
23
+ 'drivers',
24
+ 'holderTypes',
25
+ 'openfga',
26
+ 'scopes',
27
+ 'catalogs',
28
+ 'clock',
29
+ 'freezeTimeoutMs',
30
+ 'requireActor',
31
+ 'requireTransactionalWrites',
32
+ 'requireWithin',
33
+ 'warnOnOptInSecurity',
34
+ 'delegablePermissions',
35
+ 'relations',
36
+ 'hooks',
37
+ ]),
38
+ openfga: Object.freeze(['url', 'storeId', 'modelId', 'storeName']),
39
+ scopes: Object.freeze([
40
+ 'resolveChain',
41
+ 'descendantsOf',
42
+ 'enumerateEdges',
43
+ 'maxScopes',
44
+ 'maxDescendants',
45
+ 'maxDepth',
46
+ 'outbox',
47
+ 'acceptScopeDriftRisk',
48
+ ]),
49
+ relations: Object.freeze([
50
+ 'config',
51
+ 'default',
52
+ 'drivers',
53
+ 'requireTransactionalWrites',
54
+ 'assertWrite',
55
+ 'onRelationWrite',
56
+ 'requireActor',
57
+ ]),
58
+ hooks: Object.freeze(['onWrite', 'onCatalogWrite']),
59
+ });
60
+ const _exhaustiveRoot = {};
61
+ const _exhaustiveOpenFga = {};
62
+ const _exhaustiveScopes = {};
63
+ const _exhaustiveRelations = {};
64
+ const _exhaustiveHooks = {};
65
+ void _exhaustiveRoot, _exhaustiveOpenFga, _exhaustiveScopes, _exhaustiveRelations, _exhaustiveHooks;
66
+ AUTHORIZATION_CONFIG_KEYS.root;
67
+ AUTHORIZATION_CONFIG_KEYS.openfga;
68
+ AUTHORIZATION_CONFIG_KEYS.scopes;
69
+ AUTHORIZATION_CONFIG_KEYS.relations;
70
+ AUTHORIZATION_CONFIG_KEYS.hooks;
71
+ /** ⚪ 13 (gemelo roles): un BLOQUE conocido con un valor que no es un objeto plano (`scopes: true`) es 500, no silencio. */
72
+ function assertConfigBlock(value, path) {
73
+ if (value === undefined)
74
+ return;
75
+ if (!value || typeof value !== 'object' || Array.isArray(value)) {
76
+ throw new AuthorizationConfigError(`defineConfig: '${path}' tiene que ser un objeto (llegó ${JSON.stringify(value)}). Un valor que no es objeto en ` +
77
+ `una clave conocida no es «nada»: se ignoraría en silencio (plan 2.5 · B2).`);
78
+ }
79
+ }
80
+ function assertKnownConfigKeys(value, known, path) {
81
+ if (!value || typeof value !== 'object' || Array.isArray(value))
82
+ return;
83
+ for (const key of Object.keys(value)) {
84
+ if (known.includes(key))
85
+ continue;
86
+ const where = path === '' ? `'${key}' en la raíz` : `'${path}.${key}'`;
87
+ throw new AuthorizationConfigError(`defineConfig: la clave ${where} no existe (claves válidas en ${path === '' ? 'la raíz' : path}: ${known.join(', ')}). ` +
88
+ `Ninguna clave del config se descarta en silencio (plan 2.5 · B2): un typo ('requireWithing') sería una ` +
89
+ `política que crees activa y no lo está. Quítala o corrige el nombre.`);
90
+ }
91
+ }
92
+ /**
93
+ * Valida la FORMA del config (claves conocidas por nivel: la raíz y los
94
+ * bloques `openfga`/`scopes`/`relations`/`hooks`) y lo devuelve tal cual
95
+ * (misma referencia). Lo demás —drivers, catálogos, políticas— lo valida el
96
+ * manager al resolver.
97
+ */
12
98
  export function defineConfig(config) {
99
+ assertAuthorizationConfigShape(config);
13
100
  return config;
14
101
  }
102
+ /**
103
+ * **El punto de paso ÚNICO de la forma del config de roles** (cierre 1 del lote
104
+ * B · 🟡 6, auditor: «en roles el punto de paso NO es único»). Hasta el cierre
105
+ * solo `defineConfig` validaba las claves: un `config/authorization.ts` que
106
+ * exportara el objeto a pelo (`{ … } satisfies AuthorizationConfig`) o un
107
+ * `new AuthorizationManager({ requireWithing: true })` se tragaba el typo. La
108
+ * llaman `defineConfig`, el constructor de `AuthorizationManager` (que cubre el
109
+ * provider: `new AuthorizationManager(config)`) y `buildRelationsManager` (el
110
+ * servicio de relaciones, que no construye el manager de roles). Idempotente y
111
+ * barata (claves, no valores).
112
+ */
113
+ export function assertAuthorizationConfigShape(config) {
114
+ if (!config || typeof config !== 'object') {
115
+ throw new AuthorizationConfigError(`defineConfig: se esperaba un objeto y llegó ${typeof config}.`);
116
+ }
117
+ const c = config;
118
+ assertKnownConfigKeys(c, AUTHORIZATION_CONFIG_KEYS.root, '');
119
+ for (const block of ['openfga', 'scopes', 'relations', 'hooks']) {
120
+ assertConfigBlock(c[block], block);
121
+ assertKnownConfigKeys(c[block], AUTHORIZATION_CONFIG_KEYS[block], block);
122
+ }
123
+ }
15
124
  //# sourceMappingURL=define_config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"define_config.js","sourceRoot":"","sources":["../../src/define_config.ts"],"names":[],"mappings":"AAgXA;;;;;;;GAOG;AACH,MAAM,UAAU,wBAAwB,CAAC,MAA0D;IACjG,OAAO,MAAM,CAAC,SAAS,EAAE,OAAO,IAAI,MAAM,CAAC,OAAO,CAAA;AACpD,CAAC;AAED,MAAM,UAAU,YAAY,CAAgC,MAAS;IACnE,OAAO,MAAM,CAAA;AACf,CAAC"}
1
+ {"version":3,"file":"define_config.js","sourceRoot":"","sources":["../../src/define_config.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAA;AAmWtD;;;;;;;GAOG;AACH,MAAM,UAAU,wBAAwB,CAAC,MAA0D;IACjG,OAAO,MAAM,CAAC,SAAS,EAAE,OAAO,IAAI,MAAM,CAAC,OAAO,CAAA;AACpD,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,MAAM,CAAC,MAAM,CAAC;IACrD,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC;QAClB,SAAS;QACT,SAAS;QACT,aAAa;QACb,SAAS;QACT,QAAQ;QACR,UAAU;QACV,OAAO;QACP,iBAAiB;QACjB,cAAc;QACd,4BAA4B;QAC5B,eAAe;QACf,qBAAqB;QACrB,sBAAsB;QACtB,WAAW;QACX,OAAO;KACC,CAAC;IACX,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,CAAU,CAAC;IAC3E,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC;QACpB,cAAc;QACd,eAAe;QACf,gBAAgB;QAChB,WAAW;QACX,gBAAgB;QAChB,UAAU;QACV,QAAQ;QACR,sBAAsB;KACd,CAAC;IACX,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC;QACvB,QAAQ;QACR,SAAS;QACT,SAAS;QACT,4BAA4B;QAC5B,aAAa;QACb,iBAAiB;QACjB,cAAc;KACN,CAAC;IACX,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,gBAAgB,CAAU,CAAC;CAC7D,CAAC,CAAA;AAoBF,MAAM,eAAe,GAAoE,EAAE,CAAA;AAC3F,MAAM,kBAAkB,GAAgE,EAAE,CAAA;AAC1F,MAAM,iBAAiB,GAA8D,EAAE,CAAA;AACvF,MAAM,oBAAoB,GAAoE,EAAE,CAAA;AAChG,MAAM,gBAAgB,GAA4D,EAAE,CAAA;AACpF,KAAK,eAAe,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,gBAAgB,CAAA;AACnG,yBAAyB,CAAC,IAAqD,CAAA;AAC/E,yBAAyB,CAAC,OAAiD,CAAA;AAC3E,yBAAyB,CAAC,MAA+C,CAAA;AACzE,yBAAyB,CAAC,SAAqD,CAAA;AAC/E,yBAAyB,CAAC,KAA6C,CAAA;AAEvE,2HAA2H;AAC3H,SAAS,iBAAiB,CAAC,KAAc,EAAE,IAAY;IACrD,IAAI,KAAK,KAAK,SAAS;QAAE,OAAM;IAC/B,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAChE,MAAM,IAAI,wBAAwB,CAChC,kBAAkB,IAAI,oCAAoC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,kCAAkC;YAC/G,4EAA4E,CAC/E,CAAA;IACH,CAAC;AACH,CAAC;AAED,SAAS,qBAAqB,CAAC,KAAc,EAAE,KAAwB,EAAE,IAAY;IACnF,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAM;IACvE,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,KAAgC,CAAC,EAAE,CAAC;QAChE,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC;YAAE,SAAQ;QACjC,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,cAAc,CAAC,CAAC,CAAC,IAAI,IAAI,IAAI,GAAG,GAAG,CAAA;QACtE,MAAM,IAAI,wBAAwB,CAChC,0BAA0B,KAAK,iCAAiC,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK;YACtH,yGAAyG;YACzG,sEAAsE,CACzE,CAAA;IACH,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAgC,MAAS;IACnE,8BAA8B,CAAC,MAAM,CAAC,CAAA;IACtC,OAAO,MAAM,CAAA;AACf,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,8BAA8B,CAAC,MAAe;IAC5D,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC1C,MAAM,IAAI,wBAAwB,CAAC,+CAA+C,OAAO,MAAM,GAAG,CAAC,CAAA;IACrG,CAAC;IACD,MAAM,CAAC,GAAG,MAA6B,CAAA;IACvC,qBAAqB,CAAC,CAAC,EAAE,yBAAyB,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;IAC5D,KAAK,MAAM,KAAK,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAO,CAAU,EAAE,CAAC;QACzE,iBAAiB,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAA;QAClC,qBAAqB,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,yBAAyB,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAA;IAC1E,CAAC;AACH,CAAC"}
@@ -1,7 +1,13 @@
1
1
  import { relationPartitionTrigger, relationPartitionTriggerDrops } from '../relation_partition_trigger.js';
2
2
  import type { Clock } from '../clock.js';
3
- import type { RelObject, RelSubject, RelationObjectsPage, RelationSubjectsPage, RelationPage, RelationTuplePage, RelationsDriver, RelationsDriverCapabilities, RelationTransactionOptions, RelationWriteOptions, ScopeRef } from '../types.js';
3
+ import type { RelObject, RelSubject, RelationObjectsPage, RelationSubjectsPage, RelationPage, RelationTuplePage, RelationsDriver, RelationsDriverCapabilities, RelationTransactionOptions, RelationWriteOptions, RelationDenyOptions, RelationDecision, ScopeRef } from '../types.js';
4
4
  import type { RelationsConfig } from '../relations/define_relations_config.js';
5
+ /**
6
+ * **Cota de candidatos de `membersOf` cuando el objeto tiene un deny vigente** (lote D · cierre 1 de D1, 🟡 4): con deny
7
+ * cada candidato se juzga con un `check` (una CTE por candidato). Pasada ⇒ 500 `E_AUTHZ_MEMBERS_DENY_LIMIT`, nunca una
8
+ * lista parcial. En «Limits» del README, atada a esta constante (`scope_depth.spec`).
9
+ */
10
+ export declare const RELATIONS_MEMBERS_DENY_CHECK_MAX = 1000;
5
11
  export { relationPartitionTrigger, relationPartitionTriggerDrops };
6
12
  export interface DatabaseRelationsDriverOptions {
7
13
  /** Nombre de la conexión Lucid (default: la primaria). */
@@ -73,6 +79,15 @@ export declare class DatabaseRelationsDriver implements RelationsDriver {
73
79
  */
74
80
  withClock(now: Clock): RelationsDriver;
75
81
  relate(subject: RelSubject, relation: string, object: RelObject, partition: ScopeRef, options?: RelationWriteOptions): Promise<void>;
82
+ /**
83
+ * **`deny` = la tupla `denied_<rel>`, por el MISMO camino idempotente que `relate`** (lote D · D1): F-05 sobre el
84
+ * nombre PÚBLICO, la puerta de escritura del opt-in (fase `'write'`, D10), ni `group` ni `*`, y SIN caducidad (D3:
85
+ * `expiresAt` ⇒ 422; un deny escrito a mano con caducidad se rehace permanente). Por la transacción del llamante si
86
+ * llega (L-4, como `relate`).
87
+ */
88
+ deny(subject: RelSubject, relation: string, object: RelObject, partition: ScopeRef, options?: RelationDenyOptions): Promise<void>;
89
+ /** `removeDeny`: borra la tupla `denied_<rel>`. Sobre CUALQUIER tipo declarado (D8/R2-4 b). No-op si no está. */
90
+ removeDeny(subject: RelSubject, relation: string, object: RelObject, partition: ScopeRef, options?: RelationDenyOptions): Promise<void>;
76
91
  unrelate(subject: RelSubject, relation: string, object: RelObject, partition: ScopeRef, options?: RelationWriteOptions): Promise<void>;
77
92
  /**
78
93
  * **F-05 en las LECTURAS y las PURGAS del driver** (2.4.0-alpha.3, cierre
@@ -96,8 +111,28 @@ export declare class DatabaseRelationsDriver implements RelationsDriver {
96
111
  * de la consulta (defensa en profundidad: el manager ya lo hizo).
97
112
  */
98
113
  checkMany(subject: RelSubject, relation: string, objects: RelObject[], partition: ScopeRef): Promise<boolean[]>;
114
+ /**
115
+ * **`decideMany` = la consulta de `checkMany`** (lote D · D9): los grants de `down*(R)` y los denies de
116
+ * `up*(down*(R))` de cada objeto distinto, con UN `now` y en UNA consulta, y la regla AMPLIA de `decideFrom` (la
117
+ * misma función que el doble y `openfga` cuando alinea su `batchCheck`). Tope, `[]` y F-05 por ítem como `checkMany`.
118
+ */
119
+ decideMany(subject: RelSubject, relation: string, objects: RelObject[], partition: ScopeRef): Promise<RelationDecision[]>;
99
120
  listObjects(subject: RelSubject, relation: string, objectType: string, partition: ScopeRef, _page?: RelationPage): Promise<RelationObjectsPage>;
100
121
  listSubjects(relation: string, object: RelObject, partition: ScopeRef, _page?: RelationPage): Promise<RelationSubjectsPage>;
122
+ /**
123
+ * **`listDenies`** (lote D · D1): los sujetos con deny DIRECTO de `relation` sobre `object` —hechos, como
124
+ * `listSubjects` sobre la relación almacenada `denied_<rel>`; no resta ni deriva—. Sobre CUALQUIER tipo declarado
125
+ * (D8/R2-4 b: con el opt-in retirado, los denies vivos se siguen pudiendo listar y borrar).
126
+ */
127
+ listDenies(relation: string, object: RelObject, partition: ScopeRef, page?: RelationPage): Promise<RelationSubjectsPage>;
128
+ /**
129
+ * **`denyPhase` — ¿admite este driver escrituras de deny en el tipo?** (lote D · D2, R2-5): la fase del opt-in EN
130
+ * LA CONFIG DE ESTE DRIVER (`'write'`, `'read'` o `null`). F-05 estricto del par (422), cero sentencias: es
131
+ * configuración. La llama `reconcileRelations` en la fase de plan cuando el origen trae denies.
132
+ */
133
+ denyPhase(object: {
134
+ type: string;
135
+ }, relation: string): Promise<'read' | 'write' | null>;
101
136
  /**
102
137
  * Membresía TRANSITIVA de un objeto-grupo: todos los HOLDERS que son `member`
103
138
  * directa o a través de grupos anidados (usersets `group#member`). CTE
@@ -1 +1 @@
1
- {"version":3,"file":"database_relations_driver.d.ts","sourceRoot":"","sources":["../../../src/drivers/database_relations_driver.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"database_relations_driver.d.ts","sourceRoot":"","sources":["../../../src/drivers/database_relations_driver.ts"],"names":[],"mappings":"AAqCA,OAAO,EAAE,wBAAwB,EAAE,6BAA6B,EAAE,MAAM,kCAAkC,CAAA;AAE1G,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAOxC,OAAO,KAAK,EACV,SAAS,EACT,UAAU,EACV,mBAAmB,EACnB,oBAAoB,EACpB,YAAY,EAEZ,iBAAiB,EACjB,eAAe,EACf,2BAA2B,EAC3B,0BAA0B,EAC1B,oBAAoB,EACpB,mBAAmB,EACnB,gBAAgB,EAChB,QAAQ,EAET,MAAM,aAAa,CAAA;AAkBpB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAA;AAG9E;;;;GAIG;AACH,eAAO,MAAM,gCAAgC,OAAQ,CAAA;AAiDrD,OAAO,EAAE,wBAAwB,EAAE,6BAA6B,EAAE,CAAA;AAElE,MAAM,WAAW,8BAA8B;IAC7C,0DAA0D;IAC1D,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,qEAAqE;IACrE,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB;;;;;;OAMG;IACH,GAAG,CAAC,EAAE,KAAK,CAAA;IACX;;;;;;;;;;;;;;OAcG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAA;CAC9B;AAuBD;;;;GAIG;AACH,qBAAa,uBAAwB,YAAW,eAAe;;IAC7D;;;;;;;;;;;;;;;;;;;OAmBG;IACH,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC,2BAA2B,CAAC,CAAA;gBAiB1D,MAAM,EAAE,eAAe,EACvB,OAAO,GAAE,8BAAmC,EAC5C,QAAQ,GAAE;QAAE,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC;QAAC,qBAAqB,CAAC,EAAE,MAAM,CAAA;KAAO;IA0BnF;;;;;OAKG;IACH,SAAS,CAAC,GAAG,EAAE,KAAK,GAAG,eAAe;IAqOhC,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;IAchB;;;;;OAKG;IACG,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAUvI,iHAAiH;IAC3G,UAAU,CAAC,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAwFvI,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;IA0ChB;;;;;;;;;OASG;IACG,KAAK,CAAC,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;IA6B5G;;;;;;;;;OASG;IACG,SAAS,CAAC,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,SAAS,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IASrH;;;;OAIG;IACG,UAAU,CAAC,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,SAAS,EAAE,QAAQ,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IA4EzH,WAAW,CACf,OAAO,EAAE,UAAU,EACnB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,QAAQ,EACnB,KAAK,CAAC,EAAE,YAAY,GACnB,OAAO,CAAC,mBAAmB,CAAC;IAyCzB,YAAY,CAChB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,SAAS,EACjB,SAAS,EAAE,QAAQ,EACnB,KAAK,CAAC,EAAE,YAAY,GACnB,OAAO,CAAC,oBAAoB,CAAC;IAmChC;;;;OAIG;IACG,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAO9H;;;;OAIG;IACG,SAAS,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;IAK7F;;;;;;OAMG;IACG,SAAS,CACb,MAAM,EAAE,SAAS,EACjB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,QAAQ,EACnB,KAAK,CAAC,EAAE,YAAY,GACnB,OAAO,CAAC,oBAAoB,CAAC;IAuG1B,WAAW,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,0BAA0B,GAAG,OAAO,CAAC,IAAI,CAAC;IAyBxG,YAAY,CAAC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,0BAA0B,GAAG,OAAO,CAAC,IAAI,CAAC;IAyBjH;;;;;;;;;;;;;;;;;;;;;OAqBG;IACG,kBAAkB,CAAC,SAAS,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAO9F;;;;;;;;;;;;;;;OAeG;IACG,sBAAsB,CAAC,UAAU,EAAE,QAAQ,EAAE,EAAE,IAAI,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,iBAAiB,CAAC;CAyGtG"}