@jantstack/adonis-authz 2.0.0-alpha.1 → 2.4.0-alpha.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +934 -40
- package/build/commands/authz_catalog_diff.d.ts.map +1 -1
- package/build/commands/authz_catalog_diff.js +1 -2
- package/build/commands/authz_catalog_diff.js.map +1 -1
- package/build/commands/authz_catalog_prune_orphans.d.ts +78 -0
- package/build/commands/authz_catalog_prune_orphans.d.ts.map +1 -0
- package/build/commands/authz_catalog_prune_orphans.js +135 -0
- package/build/commands/authz_catalog_prune_orphans.js.map +1 -0
- package/build/commands/authz_catalog_sync.d.ts +17 -0
- package/build/commands/authz_catalog_sync.d.ts.map +1 -1
- package/build/commands/authz_catalog_sync.js +27 -4
- package/build/commands/authz_catalog_sync.js.map +1 -1
- package/build/commands/authz_freeze.d.ts +44 -0
- package/build/commands/authz_freeze.d.ts.map +1 -0
- package/build/commands/authz_freeze.js +94 -0
- package/build/commands/authz_freeze.js.map +1 -0
- package/build/commands/authz_reconcile.d.ts +111 -0
- package/build/commands/authz_reconcile.d.ts.map +1 -0
- package/build/commands/authz_reconcile.js +417 -0
- package/build/commands/authz_reconcile.js.map +1 -0
- package/build/commands/authz_relations_reconcile.d.ts +144 -0
- package/build/commands/authz_relations_reconcile.d.ts.map +1 -0
- package/build/commands/authz_relations_reconcile.js +438 -0
- package/build/commands/authz_relations_reconcile.js.map +1 -0
- package/build/commands/authz_scopes_relay.d.ts +97 -0
- package/build/commands/authz_scopes_relay.d.ts.map +1 -0
- package/build/commands/authz_scopes_relay.js +344 -0
- package/build/commands/authz_scopes_relay.js.map +1 -0
- package/build/commands/authz_scopes_requeue.d.ts +80 -0
- package/build/commands/authz_scopes_requeue.d.ts.map +1 -0
- package/build/commands/authz_scopes_requeue.js +230 -0
- package/build/commands/authz_scopes_requeue.js.map +1 -0
- package/build/commands/authz_unfreeze.d.ts +45 -0
- package/build/commands/authz_unfreeze.d.ts.map +1 -0
- package/build/commands/authz_unfreeze.js +157 -0
- package/build/commands/authz_unfreeze.js.map +1 -0
- package/build/commands/main.d.ts +16 -8
- package/build/commands/main.d.ts.map +1 -1
- package/build/commands/main.js +59 -6
- package/build/commands/main.js.map +1 -1
- package/build/commands/openfga_provision.d.ts +92 -4
- package/build/commands/openfga_provision.d.ts.map +1 -1
- package/build/commands/openfga_provision.js +155 -7
- package/build/commands/openfga_provision.js.map +1 -1
- package/build/configure.d.ts +11 -0
- package/build/configure.d.ts.map +1 -1
- package/build/configure.js +37 -1
- package/build/configure.js.map +1 -1
- package/build/index.d.ts +50 -11
- package/build/index.d.ts.map +1 -1
- package/build/index.js +49 -7
- package/build/index.js.map +1 -1
- package/build/providers/authz_provider.d.ts +31 -2
- package/build/providers/authz_provider.d.ts.map +1 -1
- package/build/providers/authz_provider.js +65 -2
- package/build/providers/authz_provider.js.map +1 -1
- package/build/services/relations.d.ts +14 -0
- package/build/services/relations.d.ts.map +1 -0
- package/build/services/relations.js +17 -0
- package/build/services/relations.js.map +1 -0
- package/build/src/{catalog.d.ts → catalog/catalog.d.ts} +41 -2
- package/build/src/catalog/catalog.d.ts.map +1 -0
- package/build/src/{catalog.js → catalog/catalog.js} +120 -14
- package/build/src/catalog/catalog.js.map +1 -0
- package/build/src/{catalog_cache.d.ts → catalog/catalog_cache.d.ts} +46 -22
- package/build/src/catalog/catalog_cache.d.ts.map +1 -0
- package/build/src/{catalog_cache.js → catalog/catalog_cache.js} +53 -43
- package/build/src/catalog/catalog_cache.js.map +1 -0
- package/build/src/define_config.d.ts +206 -3
- package/build/src/define_config.d.ts.map +1 -1
- package/build/src/define_config.js +11 -0
- package/build/src/define_config.js.map +1 -1
- package/build/src/drivers/database_driver.d.ts +128 -7
- package/build/src/drivers/database_driver.d.ts.map +1 -1
- package/build/src/drivers/database_driver.js +510 -24
- package/build/src/drivers/database_driver.js.map +1 -1
- package/build/src/drivers/database_relations_driver.d.ts +140 -0
- package/build/src/drivers/database_relations_driver.d.ts.map +1 -0
- package/build/src/drivers/database_relations_driver.js +748 -0
- package/build/src/drivers/database_relations_driver.js.map +1 -0
- package/build/src/drivers/openfga_driver.d.ts +777 -122
- package/build/src/drivers/openfga_driver.d.ts.map +1 -1
- package/build/src/drivers/openfga_driver.js +2228 -477
- package/build/src/drivers/openfga_driver.js.map +1 -1
- package/build/src/drivers/openfga_facts.d.ts +384 -0
- package/build/src/drivers/openfga_facts.d.ts.map +1 -0
- package/build/src/drivers/openfga_facts.js +836 -0
- package/build/src/drivers/openfga_facts.js.map +1 -0
- package/build/src/drivers/openfga_relations_driver.d.ts +186 -0
- package/build/src/drivers/openfga_relations_driver.d.ts.map +1 -0
- package/build/src/drivers/openfga_relations_driver.js +724 -0
- package/build/src/drivers/openfga_relations_driver.js.map +1 -0
- package/build/src/errors.d.ts +430 -6
- package/build/src/errors.d.ts.map +1 -1
- package/build/src/errors.js +453 -6
- package/build/src/errors.js.map +1 -1
- package/build/src/freeze.d.ts +200 -0
- package/build/src/freeze.d.ts.map +1 -0
- package/build/src/freeze.js +306 -0
- package/build/src/freeze.js.map +1 -0
- package/build/src/http/app_access_middleware.d.ts.map +1 -0
- package/build/src/http/app_access_middleware.js.map +1 -0
- package/build/src/http/resource_access_middleware.d.ts +105 -0
- package/build/src/http/resource_access_middleware.d.ts.map +1 -0
- package/build/src/http/resource_access_middleware.js +81 -0
- package/build/src/http/resource_access_middleware.js.map +1 -0
- package/build/src/identity.d.ts +74 -1
- package/build/src/identity.d.ts.map +1 -1
- package/build/src/identity.js +100 -2
- package/build/src/identity.js.map +1 -1
- package/build/src/manager.d.ts +549 -6
- package/build/src/manager.d.ts.map +1 -1
- package/build/src/manager.js +2243 -193
- package/build/src/manager.js.map +1 -1
- package/build/src/models/authz_assignment.d.ts +7 -7
- package/build/src/models/authz_assignment.d.ts.map +1 -1
- package/build/src/models/authz_deny.d.ts +7 -7
- package/build/src/models/authz_deny.d.ts.map +1 -1
- package/build/src/models/authz_permission.d.ts +7 -7
- package/build/src/models/authz_permission.d.ts.map +1 -1
- package/build/src/models/authz_role.d.ts +7 -7
- package/build/src/models/authz_role.d.ts.map +1 -1
- package/build/src/models/authz_role_permission.d.ts +7 -7
- package/build/src/models/authz_role_permission.d.ts.map +1 -1
- package/build/src/openfga.d.ts +18 -2
- package/build/src/openfga.d.ts.map +1 -1
- package/build/src/openfga.js +15 -1
- package/build/src/openfga.js.map +1 -1
- package/build/src/reconcile.d.ts +37 -0
- package/build/src/reconcile.d.ts.map +1 -0
- package/build/src/reconcile.js +69 -0
- package/build/src/reconcile.js.map +1 -0
- package/build/src/relation_partition_trigger.d.ts +8 -0
- package/build/src/relation_partition_trigger.d.ts.map +1 -0
- package/build/src/relation_partition_trigger.js +93 -0
- package/build/src/relation_partition_trigger.js.map +1 -0
- package/build/src/relations/define_relations_config.d.ts +109 -0
- package/build/src/relations/define_relations_config.d.ts.map +1 -0
- package/build/src/relations/define_relations_config.js +211 -0
- package/build/src/relations/define_relations_config.js.map +1 -0
- package/build/src/relations/manager.d.ts +138 -0
- package/build/src/relations/manager.d.ts.map +1 -0
- package/build/src/relations/manager.js +494 -0
- package/build/src/relations/manager.js.map +1 -0
- package/build/src/relations/reconcile.d.ts +137 -0
- package/build/src/relations/reconcile.d.ts.map +1 -0
- package/build/src/relations/reconcile.js +294 -0
- package/build/src/relations/reconcile.js.map +1 -0
- package/build/src/relations_config_store.d.ts +22 -0
- package/build/src/relations_config_store.d.ts.map +1 -0
- package/build/src/relations_config_store.js +74 -0
- package/build/src/relations_config_store.js.map +1 -0
- package/build/src/scope_outbox.d.ts +123 -0
- package/build/src/scope_outbox.d.ts.map +1 -0
- package/build/src/scope_outbox.js +532 -0
- package/build/src/scope_outbox.js.map +1 -0
- package/build/src/{drivers → shared}/backend_guard.d.ts +42 -0
- package/build/src/shared/backend_guard.d.ts.map +1 -0
- package/build/src/{drivers → shared}/backend_guard.js +78 -1
- package/build/src/shared/backend_guard.js.map +1 -0
- package/build/src/{drivers → shared}/sql_expiry.d.ts +2 -0
- package/build/src/shared/sql_expiry.d.ts.map +1 -0
- package/build/src/{drivers → shared}/sql_expiry.js +4 -0
- package/build/src/shared/sql_expiry.js.map +1 -0
- package/build/src/shared/transaction_guard.d.ts +53 -0
- package/build/src/shared/transaction_guard.d.ts.map +1 -0
- package/build/src/shared/transaction_guard.js +74 -0
- package/build/src/shared/transaction_guard.js.map +1 -0
- package/build/src/sql_descendants.d.ts +55 -1
- package/build/src/sql_descendants.d.ts.map +1 -1
- package/build/src/sql_descendants.js +75 -1
- package/build/src/sql_descendants.js.map +1 -1
- package/build/src/testing/contract.d.ts +129 -4
- package/build/src/testing/contract.d.ts.map +1 -1
- package/build/src/testing/contract.js +915 -177
- package/build/src/testing/contract.js.map +1 -1
- package/build/src/testing/main.d.ts +10 -2
- package/build/src/testing/main.d.ts.map +1 -1
- package/build/src/testing/main.js +5 -1
- package/build/src/testing/main.js.map +1 -1
- package/build/src/testing/migration_contract.d.ts +293 -0
- package/build/src/testing/migration_contract.d.ts.map +1 -0
- package/build/src/testing/migration_contract.js +589 -0
- package/build/src/testing/migration_contract.js.map +1 -0
- package/build/src/testing/relations_contract.d.ts +73 -0
- package/build/src/testing/relations_contract.d.ts.map +1 -0
- package/build/src/testing/relations_contract.js +1238 -0
- package/build/src/testing/relations_contract.js.map +1 -0
- package/build/src/testing/relations_reconcile_contract.d.ts +24 -0
- package/build/src/testing/relations_reconcile_contract.d.ts.map +1 -0
- package/build/src/testing/relations_reconcile_contract.js +220 -0
- package/build/src/testing/relations_reconcile_contract.js.map +1 -0
- package/build/src/testing/scope_outbox_contract.d.ts +98 -0
- package/build/src/testing/scope_outbox_contract.d.ts.map +1 -0
- package/build/src/testing/scope_outbox_contract.js +677 -0
- package/build/src/testing/scope_outbox_contract.js.map +1 -0
- package/build/src/traits/authz_scopes.js +1 -1
- package/build/src/traits/authz_scopes.js.map +1 -1
- package/build/src/traits/has_uuid.d.ts +8 -8
- package/build/src/traits/has_uuid.d.ts.map +1 -1
- package/build/src/types.d.ts +1537 -84
- package/build/src/types.d.ts.map +1 -1
- package/build/src/types.js +65 -0
- package/build/src/types.js.map +1 -1
- package/build/stubs/config/authorization.stub +149 -5
- package/build/stubs/migration.stub +136 -0
- package/build/stubs/scopes_outbox_migration.stub +57 -0
- package/package.json +4 -2
- package/build/commands/openfga_import.d.ts +0 -34
- package/build/commands/openfga_import.d.ts.map +0 -1
- package/build/commands/openfga_import.js +0 -97
- package/build/commands/openfga_import.js.map +0 -1
- package/build/src/catalog.d.ts.map +0 -1
- package/build/src/catalog.js.map +0 -1
- package/build/src/catalog_cache.d.ts.map +0 -1
- package/build/src/catalog_cache.js.map +0 -1
- package/build/src/drivers/backend_guard.d.ts.map +0 -1
- package/build/src/drivers/backend_guard.js.map +0 -1
- package/build/src/drivers/sql_expiry.d.ts.map +0 -1
- package/build/src/drivers/sql_expiry.js.map +0 -1
- package/build/src/middleware/app_access_middleware.d.ts.map +0 -1
- package/build/src/middleware/app_access_middleware.js.map +0 -1
- /package/build/src/{middleware → http}/app_access_middleware.d.ts +0 -0
- /package/build/src/{middleware → http}/app_access_middleware.js +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import '@japa/assert';
|
|
2
2
|
import type { Assert } from '@japa/assert';
|
|
3
|
-
import type { AuthorizationDriver, CatalogSpec } from '../types.js';
|
|
3
|
+
import type { AuthorizationDriver, CatalogSpec, SubjectRef } from '../types.js';
|
|
4
4
|
import type { ContractScopeTree } from './scope_tree.js';
|
|
5
5
|
/**
|
|
6
6
|
* Suite de contrato del sistema de autorización — EL JUEZ.
|
|
@@ -12,7 +12,7 @@ import type { ContractScopeTree } from './scope_tree.js';
|
|
|
12
12
|
* runAuthorizationDriverContract({
|
|
13
13
|
* name: 'mi-driver',
|
|
14
14
|
* level: '2.0', // omitido = 'core': solo los casos de 1.x
|
|
15
|
-
* capabilities: { hierarchyFacts: false,
|
|
15
|
+
* capabilities: { hierarchyFacts: false, transactionalWrites: false, truncationSignal: false,
|
|
16
16
|
* singleCheckAuthorize: false, injectableClock: false },
|
|
17
17
|
* seedCatalog: (catalog) => ..., // materializa roles/permisos
|
|
18
18
|
* makeDriver: (tree) => new MiDriver({ resolveChain: ... }), // recibe el árbol
|
|
@@ -41,8 +41,29 @@ import type { ContractScopeTree } from './scope_tree.js';
|
|
|
41
41
|
export interface DriverCapabilities {
|
|
42
42
|
/** El driver materializa el árbol como hechos propios (Fase 3b). */
|
|
43
43
|
hierarchyFacts: boolean;
|
|
44
|
-
/**
|
|
45
|
-
|
|
44
|
+
/**
|
|
45
|
+
* **`{ transaction }` en `grant`/`revoke`/`deny`/`removeDeny` ESCRIBE en
|
|
46
|
+
* la transacción del consumidor** — «los dos o ninguno con TU transacción»,
|
|
47
|
+
* nunca «no se pierde» (L-2, panel `{trx}` (C); mismo nombre que
|
|
48
|
+
* `AuthorizationDriverCapabilities.transactionalWrites` y que su par de
|
|
49
|
+
* relaciones). Es el ÚNICO par del juez con las DOS caras obligatorias:
|
|
50
|
+
* `true` sin caso `whenTrue` Y `false` sin caso `whenFalse` hacen que la
|
|
51
|
+
* suite lance al registrarse (los demás pares solo exigen la cara `true`;
|
|
52
|
+
* la lección de 4-2 es que una `whenFalse` ausente se salta en silencio).
|
|
53
|
+
* Con `false` el juez fija que `{ transaction }` es 500 `E_AUTHZ_UNSUPPORTED`
|
|
54
|
+
* nombrando driver y operación con CERO llamadas al driver (espía), y que
|
|
55
|
+
* `requireTransactionalWrites: true` lo convierte en 500 `E_AUTHZ_CONFIG`
|
|
56
|
+
* al RESOLVER. Con `true` (L-3) el juez abre una transacción de la conexión
|
|
57
|
+
* del driver (`DriverContractHarness.transactions`, default Lucid +
|
|
58
|
+
* `authz_*`) y fija, para las cuatro escrituras, que **rollback ⇒ CERO
|
|
59
|
+
* filas por CENSO** (no solo `authorize`), commit ⇒ aplicado, la escritura
|
|
60
|
+
* sin confirmar invisible para la autoridad, y que una transacción ajena es
|
|
61
|
+
* 500 `E_AUTHZ_CONFIG` sin una sentencia. `database` declara `true` (con
|
|
62
|
+
* pool ≥ 2; en `:memory:` el harness del paquete declara `false` porque la
|
|
63
|
+
* autoridad no tendría por dónde leer); `openfga` no puede ser otra cosa que
|
|
64
|
+
* `false`: una tupla no entra en una transacción SQL.
|
|
65
|
+
*/
|
|
66
|
+
transactionalWrites: boolean;
|
|
46
67
|
/**
|
|
47
68
|
* Los `list*` lanzan si el backend trunca. Ningún driver del paquete trunca
|
|
48
69
|
* (L0.7 se cerró enumerando con `Read` paginado), así que no hay caso para
|
|
@@ -89,6 +110,19 @@ export interface DriverCapabilities {
|
|
|
89
110
|
* store entero. En un harness por debajo de `'2.2'` declara `false`.
|
|
90
111
|
*/
|
|
91
112
|
purgeRole: boolean;
|
|
113
|
+
/**
|
|
114
|
+
* `countRoleAssignments(uuids)` está implementado de verdad (3b-2j): el
|
|
115
|
+
* driver sabe decir cuántos hechos VIGENTES tiene cada rol, que es lo que
|
|
116
|
+
* hace verdadero el `stillGranting` de `pruneOrphanRoles` —el campo que se
|
|
117
|
+
* lee justo antes de un borrado destructivo—. Con `true` se juzga el
|
|
118
|
+
* conteo (caducidad estricta, por posición, 422 por uuid mal formado); con
|
|
119
|
+
* `false`, que el barrido diga `undefined` y **nunca** `false`: «no lo sé»
|
|
120
|
+
* no puede degradar a «no concede». Solo tiene casos en `level: '2.2'`.
|
|
121
|
+
*
|
|
122
|
+
* **Es la capacidad que este lote estrena y es breaking**: un driver de
|
|
123
|
+
* terceros de 2.2 la declara `false` hasta que traiga el método.
|
|
124
|
+
*/
|
|
125
|
+
countRoleAssignments: boolean;
|
|
92
126
|
/**
|
|
93
127
|
* Las escrituras del CATÁLOGO se serializan de verdad en el motor (3E ·
|
|
94
128
|
* R2, tester): dos `defineScopedRole` del mismo `(slug, nivel)` en
|
|
@@ -105,6 +139,67 @@ export interface DriverCapabilities {
|
|
|
105
139
|
* convierte la colisión en 503. Solo tiene casos en `level: '2.2'`.
|
|
106
140
|
*/
|
|
107
141
|
serializedCatalogWrites: boolean;
|
|
142
|
+
/**
|
|
143
|
+
* El backend resuelve la MEMBRESÍA por sí mismo (3b-2e · E2). **`false` en
|
|
144
|
+
* los dos drivers del paquete, también en el modo `facts`** (panel 2, cruce
|
|
145
|
+
* 6): `hasRole`, `listRoles`, `listRoleScopes`, `listSubjects` y
|
|
146
|
+
* `listScopes` siguen usando el `resolveChain` del consumidor. Con `false`
|
|
147
|
+
* el juez lo DEMUESTRA con un espía sobre el árbol, que es lo que impide
|
|
148
|
+
* vender «sin SQL en el camino caliente» a secas: lo cierto es «sin SQL por
|
|
149
|
+
* request en `authorize`». La cara `true` no tiene caso todavía: no hay
|
|
150
|
+
* driver que lo cumpla.
|
|
151
|
+
*/
|
|
152
|
+
roleInheritanceNative: boolean;
|
|
153
|
+
/**
|
|
154
|
+
* Los `list*` enumeran también lo HEREDADO (3b-2e · E2). **`false` siempre
|
|
155
|
+
* en este paquete** (invariante 7): enumerar descendientes sería abierto, y
|
|
156
|
+
* en `openfga` obligaría a `ListObjects`, que trunca al tope del servidor
|
|
157
|
+
* SIN señal (S16, y `Check` y `ListObjects` ni siquiera coinciden en
|
|
158
|
+
* profundidad). Con `false` el juez fija que un grant en el ANCESTRO no
|
|
159
|
+
* aparece en las listas del descendiente aunque `authorize` diga `true`.
|
|
160
|
+
*/
|
|
161
|
+
listObjectsInherited: boolean;
|
|
162
|
+
/**
|
|
163
|
+
* **Las LECTURAS canonizan la ortografía del scope contra el árbol del
|
|
164
|
+
* consumidor antes de buscar los hechos** (3b-2k · K1 · R2 (c)). El árbol
|
|
165
|
+
* del consumidor puede fundir dos formas del mismo id —el tipo `uuid` de
|
|
166
|
+
* PostgreSQL y la collation `*_ci` de MySQL leen `bbbb…` con y sin guiones
|
|
167
|
+
* como la MISMA fila—, y `authz_*` compara por bytes.
|
|
168
|
+
*
|
|
169
|
+
* Con `true` (driver `database`) `authorize` resuelve la cadena y usa
|
|
170
|
+
* `chain[0]`, la identidad CANÓNICA (invariante 17): un alias que el árbol
|
|
171
|
+
* funde con la fila real encuentra exactamente los mismos hechos que la
|
|
172
|
+
* forma canónica.
|
|
173
|
+
*
|
|
174
|
+
* Con `false` (`openfga` en modo `facts`) la DECISIÓN no pasa por el árbol
|
|
175
|
+
* —es la contrapartida de `singleCheckAuthorize`— así que el objeto del
|
|
176
|
+
* store se compone con la ortografía del LLAMANTE y un alias no encuentra
|
|
177
|
+
* nada: `authorize` responde `false` donde la forma canónica concede. Es
|
|
178
|
+
* fail-**CLOSED** y no evade ningún deny, pero **no es la misma respuesta
|
|
179
|
+
* que `database`** y por eso se declara. Lo que NO cambia es la ESCRITURA:
|
|
180
|
+
* `grant`/`revoke`/`removeDeny`/`purgeScope` sí canonizan en los dos
|
|
181
|
+
* drivers (3b-2h · 🟠 3 cerró la cara fail-open), y el juez lo fija en las
|
|
182
|
+
* DOS caras del par para que nadie lea esta capacidad como «en `facts` la
|
|
183
|
+
* ortografía da igual».
|
|
184
|
+
*/
|
|
185
|
+
canonicalScopeReads: boolean;
|
|
186
|
+
/**
|
|
187
|
+
* El driver sabe ser el **ORIGEN** de `authz:reconcile` (3b-3b):
|
|
188
|
+
* `enumerateFacts` entrega sus hechos por páginas, con su caducidad y **sin
|
|
189
|
+
* filtrar** (una asignación caducada tiene que LLEGAR para que el destino
|
|
190
|
+
* la cuente en `skipped`; filtrarla la haría desaparecer sin rastro).
|
|
191
|
+
*
|
|
192
|
+
* Con `true` el juez pasea las páginas, comprueba que el cursor avanza,
|
|
193
|
+
* que no se devuelven más de `limit` hechos y que la caducada sale con su
|
|
194
|
+
* instante. Con `false` juzga que el driver no puede ser origen y que
|
|
195
|
+
* `authz:reconcile` lo DICE —500 `E_AUTHZ_UNSUPPORTED` nombrando el
|
|
196
|
+
* método— en vez de leer cero hechos y vaciar el destino con `--prune`.
|
|
197
|
+
*
|
|
198
|
+
* `false` en el driver `database` a propósito: sus hechos son
|
|
199
|
+
* `authz_assignments`/`authz_denies`, el esquema publicado del paquete, y
|
|
200
|
+
* el destino los lee de ahí. Solo tiene casos en `level: '2.2'`.
|
|
201
|
+
*/
|
|
202
|
+
enumerateFacts: boolean;
|
|
108
203
|
}
|
|
109
204
|
export type ContractLevel = 'core' | '2.0' | '2.1' | '2.2';
|
|
110
205
|
export interface DriverContractHarness {
|
|
@@ -133,7 +228,31 @@ export interface DriverContractHarness {
|
|
|
133
228
|
*/
|
|
134
229
|
makeTwin?(driver: AuthorizationDriver, tree: ContractScopeTree): AuthorizationDriver | Promise<AuthorizationDriver>;
|
|
135
230
|
cleanup(): Promise<void>;
|
|
231
|
+
/**
|
|
232
|
+
* Solo con `transactionalWrites: true` (L-3): cómo abre el juez una
|
|
233
|
+
* transacción de LA CONEXIÓN DEL DRIVER y cómo cuenta los hechos de un
|
|
234
|
+
* holder en el backend — el CENSO: el rollback se juzga por filas, no solo
|
|
235
|
+
* por la respuesta de `authorize` (la lección del contrato de migración).
|
|
236
|
+
* Default: `db.transaction()` de Lucid (conexión primaria) y
|
|
237
|
+
* `authz_assignments`/`authz_denies`, lo que vale para el driver `database`.
|
|
238
|
+
* Un driver de terceros con otra conexión u otras tablas trae el suyo.
|
|
239
|
+
*/
|
|
240
|
+
transactions?: ContractTransactions;
|
|
241
|
+
}
|
|
242
|
+
/** Ver `DriverContractHarness.transactions`. */
|
|
243
|
+
export interface ContractTransactions {
|
|
244
|
+
begin(): Promise<{
|
|
245
|
+
client: unknown;
|
|
246
|
+
commit(): Promise<unknown>;
|
|
247
|
+
rollback(): Promise<unknown>;
|
|
248
|
+
}>;
|
|
249
|
+
census(subject: SubjectRef): Promise<{
|
|
250
|
+
assignments: number;
|
|
251
|
+
denies: number;
|
|
252
|
+
}>;
|
|
136
253
|
}
|
|
254
|
+
/** El default de `DriverContractHarness.transactions`: Lucid + `authz_*`. */
|
|
255
|
+
export declare function lucidContractTransactions(): ContractTransactions;
|
|
137
256
|
/**
|
|
138
257
|
* Lo mínimo que el juez necesita del runner. En producción es el `test` de
|
|
139
258
|
* Japa; en `tests/contract_harness.spec.ts` es una API falsa que solo anota
|
|
@@ -155,4 +274,10 @@ export interface ContractTestApi {
|
|
|
155
274
|
}
|
|
156
275
|
export declare function runAuthorizationDriverContract(harness: DriverContractHarness): void;
|
|
157
276
|
export declare function registerAuthorizationDriverContract(harness: DriverContractHarness, api: ContractTestApi): void;
|
|
277
|
+
/**
|
|
278
|
+
* La regla del guard, PURA (para que `contract_harness.spec.ts` la juzgue sin
|
|
279
|
+
* borrar caras): una capacidad `true` sin caso registrado queda sin cubrir;
|
|
280
|
+
* y una de `BOTH_FACES_REQUIRED` queda sin cubrir con CUALQUIER valor.
|
|
281
|
+
*/
|
|
282
|
+
export declare function uncoveredCapabilities(capabilities: DriverCapabilities, covered: ReadonlySet<keyof DriverCapabilities>): (keyof DriverCapabilities)[];
|
|
158
283
|
//# sourceMappingURL=contract.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../../../src/testing/contract.ts"],"names":[],"mappings":"AAAA,OAAO,cAAc,CAAA;AACrB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAG1C,OAAO,KAAK,EACV,mBAAmB,EAEnB,WAAW,
|
|
1
|
+
{"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../../../src/testing/contract.ts"],"names":[],"mappings":"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"}
|