@jantstack/adonis-authz 2.4.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 +496 -29
- package/build/commands/authz_catalog_diff.d.ts.map +1 -1
- package/build/commands/authz_catalog_diff.js +0 -1
- package/build/commands/authz_catalog_diff.js.map +1 -1
- package/build/commands/authz_catalog_prune_orphans.d.ts.map +1 -1
- package/build/commands/authz_catalog_prune_orphans.js +0 -1
- package/build/commands/authz_catalog_prune_orphans.js.map +1 -1
- package/build/commands/authz_freeze.d.ts.map +1 -1
- package/build/commands/authz_freeze.js +1 -2
- package/build/commands/authz_freeze.js.map +1 -1
- package/build/commands/authz_reconcile.d.ts +15 -6
- package/build/commands/authz_reconcile.d.ts.map +1 -1
- package/build/commands/authz_reconcile.js +143 -20
- package/build/commands/authz_reconcile.js.map +1 -1
- package/build/commands/authz_relations_reconcile.d.ts +72 -1
- package/build/commands/authz_relations_reconcile.d.ts.map +1 -1
- package/build/commands/authz_relations_reconcile.js +234 -21
- package/build/commands/authz_relations_reconcile.js.map +1 -1
- package/build/commands/authz_scopes_relay.d.ts +50 -0
- package/build/commands/authz_scopes_relay.d.ts.map +1 -1
- package/build/commands/authz_scopes_relay.js +213 -10
- package/build/commands/authz_scopes_relay.js.map +1 -1
- 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 +12 -4
- package/build/commands/authz_unfreeze.d.ts.map +1 -1
- package/build/commands/authz_unfreeze.js +74 -9
- package/build/commands/authz_unfreeze.js.map +1 -1
- package/build/commands/main.d.ts +16 -13
- package/build/commands/main.d.ts.map +1 -1
- package/build/commands/main.js +59 -11
- package/build/commands/main.js.map +1 -1
- package/build/commands/openfga_provision.d.ts +49 -3
- package/build/commands/openfga_provision.d.ts.map +1 -1
- package/build/commands/openfga_provision.js +72 -7
- package/build/commands/openfga_provision.js.map +1 -1
- package/build/index.d.ts +15 -5
- package/build/index.d.ts.map +1 -1
- package/build/index.js +16 -3
- package/build/index.js.map +1 -1
- package/build/providers/authz_provider.d.ts +7 -2
- package/build/providers/authz_provider.d.ts.map +1 -1
- package/build/providers/authz_provider.js +20 -3
- package/build/providers/authz_provider.js.map +1 -1
- package/build/src/define_config.d.ts +106 -1
- 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 +53 -14
- package/build/src/drivers/database_driver.d.ts.map +1 -1
- package/build/src/drivers/database_driver.js +104 -32
- package/build/src/drivers/database_driver.js.map +1 -1
- package/build/src/drivers/database_relations_driver.d.ts +74 -9
- package/build/src/drivers/database_relations_driver.d.ts.map +1 -1
- package/build/src/drivers/database_relations_driver.js +391 -93
- package/build/src/drivers/database_relations_driver.js.map +1 -1
- package/build/src/drivers/openfga_driver.d.ts +71 -10
- package/build/src/drivers/openfga_driver.d.ts.map +1 -1
- package/build/src/drivers/openfga_driver.js +195 -16
- package/build/src/drivers/openfga_driver.js.map +1 -1
- package/build/src/drivers/openfga_facts.d.ts +15 -0
- package/build/src/drivers/openfga_facts.d.ts.map +1 -1
- package/build/src/drivers/openfga_facts.js +25 -2
- package/build/src/drivers/openfga_facts.js.map +1 -1
- package/build/src/drivers/openfga_relations_driver.d.ts +72 -6
- package/build/src/drivers/openfga_relations_driver.d.ts.map +1 -1
- package/build/src/drivers/openfga_relations_driver.js +308 -50
- package/build/src/drivers/openfga_relations_driver.js.map +1 -1
- package/build/src/errors.d.ts +175 -4
- package/build/src/errors.d.ts.map +1 -1
- package/build/src/errors.js +219 -3
- package/build/src/errors.js.map +1 -1
- package/build/src/freeze.d.ts +100 -20
- package/build/src/freeze.d.ts.map +1 -1
- package/build/src/freeze.js +159 -25
- package/build/src/freeze.js.map +1 -1
- package/build/src/manager.d.ts +239 -7
- package/build/src/manager.d.ts.map +1 -1
- package/build/src/manager.js +1192 -148
- package/build/src/manager.js.map +1 -1
- package/build/src/models/authz_assignment.d.ts +2 -2
- package/build/src/models/authz_assignment.d.ts.map +1 -1
- package/build/src/models/authz_deny.d.ts +2 -2
- package/build/src/models/authz_deny.d.ts.map +1 -1
- package/build/src/models/authz_permission.d.ts +2 -2
- package/build/src/models/authz_permission.d.ts.map +1 -1
- package/build/src/models/authz_role.d.ts +2 -2
- package/build/src/models/authz_role.d.ts.map +1 -1
- package/build/src/models/authz_role_permission.d.ts +2 -2
- package/build/src/models/authz_role_permission.d.ts.map +1 -1
- package/build/src/relation_partition_trigger.d.ts.map +1 -1
- package/build/src/relation_partition_trigger.js +11 -3
- package/build/src/relation_partition_trigger.js.map +1 -1
- package/build/src/relations/define_relations_config.d.ts +51 -0
- package/build/src/relations/define_relations_config.d.ts.map +1 -1
- package/build/src/relations/define_relations_config.js +68 -1
- package/build/src/relations/define_relations_config.js.map +1 -1
- package/build/src/relations/manager.d.ts +106 -6
- package/build/src/relations/manager.d.ts.map +1 -1
- package/build/src/relations/manager.js +368 -30
- package/build/src/relations/manager.js.map +1 -1
- package/build/src/relations/reconcile.d.ts +81 -6
- package/build/src/relations/reconcile.d.ts.map +1 -1
- package/build/src/relations/reconcile.js +233 -77
- package/build/src/relations/reconcile.js.map +1 -1
- package/build/src/scope_outbox.d.ts +54 -0
- package/build/src/scope_outbox.d.ts.map +1 -1
- package/build/src/scope_outbox.js +274 -33
- package/build/src/scope_outbox.js.map +1 -1
- package/build/src/shared/backend_guard.d.ts +28 -0
- package/build/src/shared/backend_guard.d.ts.map +1 -1
- package/build/src/shared/backend_guard.js +52 -0
- package/build/src/shared/backend_guard.js.map +1 -1
- package/build/src/shared/sql_expiry.d.ts +2 -0
- package/build/src/shared/sql_expiry.d.ts.map +1 -1
- package/build/src/shared/sql_expiry.js +4 -0
- package/build/src/shared/sql_expiry.js.map +1 -1
- 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 +8 -0
- package/build/src/sql_descendants.d.ts.map +1 -1
- package/build/src/sql_descendants.js.map +1 -1
- package/build/src/testing/contract.d.ts +55 -4
- package/build/src/testing/contract.d.ts.map +1 -1
- package/build/src/testing/contract.js +244 -9
- package/build/src/testing/contract.js.map +1 -1
- package/build/src/testing/main.d.ts +6 -4
- package/build/src/testing/main.d.ts.map +1 -1
- package/build/src/testing/main.js +3 -2
- package/build/src/testing/main.js.map +1 -1
- package/build/src/testing/migration_contract.d.ts +9 -0
- package/build/src/testing/migration_contract.d.ts.map +1 -1
- package/build/src/testing/migration_contract.js +5 -2
- package/build/src/testing/migration_contract.js.map +1 -1
- package/build/src/testing/relations_contract.d.ts +23 -1
- package/build/src/testing/relations_contract.d.ts.map +1 -1
- package/build/src/testing/relations_contract.js +603 -19
- package/build/src/testing/relations_contract.js.map +1 -1
- package/build/src/testing/relations_reconcile_contract.d.ts.map +1 -1
- package/build/src/testing/relations_reconcile_contract.js +49 -1
- package/build/src/testing/relations_reconcile_contract.js.map +1 -1
- 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/has_uuid.d.ts +2 -2
- package/build/src/traits/has_uuid.d.ts.map +1 -1
- package/build/src/types.d.ts +708 -38
- package/build/src/types.d.ts.map +1 -1
- package/build/src/types.js +55 -0
- package/build/src/types.js.map +1 -1
- package/build/stubs/config/authorization.stub +45 -1
- package/build/stubs/migration.stub +20 -10
- package/package.json +1 -1
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { Clock } from '../clock.js';
|
|
2
|
+
import type { RelObject, RelSubject, RelationObjectsPage, RelationSubjectsPage, RelationPage, RelationTuplePage, RelationsDriver, RelationsDriverCapabilities, RelationTransactionOptions, RelationWriteOptions, ScopeRef } from '../types.js';
|
|
2
3
|
import type { HolderTypeMap } from './openfga_driver.js';
|
|
3
4
|
import type { RelationsConfig } from '../relations/define_relations_config.js';
|
|
4
5
|
export declare const DEFAULT_TIMEOUT_MS = 5000;
|
|
@@ -23,6 +24,14 @@ export interface OpenFgaRelationsDriverOptions {
|
|
|
23
24
|
logger?: {
|
|
24
25
|
warn(message: string): void;
|
|
25
26
|
};
|
|
27
|
+
/**
|
|
28
|
+
* Reloj de pared que DECIDE la caducidad (R-15, 2.5 · J1): el `current_time`
|
|
29
|
+
* de cada `Check`/`ListObjects` (la condición `not_expired` se evalúa contra
|
|
30
|
+
* él), el filtro en cliente de `listSubjects` y los tres estados de
|
|
31
|
+
* `expiresAt` en `relate`. Default `systemClock`; en producción lo aplica el
|
|
32
|
+
* `RelationsManager` con `clock` (`withClock`).
|
|
33
|
+
*/
|
|
34
|
+
now?: Clock;
|
|
26
35
|
}
|
|
27
36
|
export declare class OpenFgaRelationsDriver implements RelationsDriver {
|
|
28
37
|
#private;
|
|
@@ -46,6 +55,8 @@ export declare class OpenFgaRelationsDriver implements RelationsDriver {
|
|
|
46
55
|
* `group`), descartando las de `facts` (scope/role/role_binding).
|
|
47
56
|
* - `listObjectsTruncation: true`: `ListObjects` trunca al tope del servidor
|
|
48
57
|
* y este driver lo SEÑALA (medido contra el `:8103` de tope 3).
|
|
58
|
+
* - `injectableClock: true` (R-15): `withClock(now)` fija el reloj que viaja
|
|
59
|
+
* como `current_time` y filtra `listSubjects`, como el driver de roles.
|
|
49
60
|
*/
|
|
50
61
|
readonly capabilities: RelationsDriverCapabilities;
|
|
51
62
|
private readonly client;
|
|
@@ -53,8 +64,29 @@ export declare class OpenFgaRelationsDriver implements RelationsDriver {
|
|
|
53
64
|
unparseableTuples: number;
|
|
54
65
|
};
|
|
55
66
|
constructor(config: RelationsConfig, options: OpenFgaRelationsDriverOptions);
|
|
56
|
-
|
|
57
|
-
|
|
67
|
+
/**
|
|
68
|
+
* Vista de este driver con OTRO reloj de pared (R-15, paridad con
|
|
69
|
+
* `AuthorizationDriver.withClock`): MISMO cliente (store, modelo, deadline),
|
|
70
|
+
* solo cambia el `now` que decide la caducidad. Se construye una instancia
|
|
71
|
+
* nueva y se le presta el cliente (el espía de «1 Check» envuelve
|
|
72
|
+
* `client.check` de la instancia base y tiene que seguir viéndolo).
|
|
73
|
+
*/
|
|
74
|
+
withClock(now: Clock): RelationsDriver;
|
|
75
|
+
relate(subject: RelSubject, relation: string, object: RelObject, partition: ScopeRef, options?: RelationWriteOptions): Promise<void>;
|
|
76
|
+
unrelate(subject: RelSubject, relation: string, object: RelObject, partition: ScopeRef, options?: RelationWriteOptions): Promise<void>;
|
|
77
|
+
/**
|
|
78
|
+
* **F-05 en las LECTURAS y las PURGAS del driver** (2.4.0-alpha.3, cierre
|
|
79
|
+
* del 🔴 1 / 🟠 2 del auditor; la MISMA función y la misma posición que
|
|
80
|
+
* L-0 en `relate`/`unrelate` y que L-5 con `{ transaction }`): PRIMERA
|
|
81
|
+
* línea (tras `#rejectTransaction` en las purgas), CERO llamadas al
|
|
82
|
+
* cliente. Reproducido contra el `:8101` en el store compartido:
|
|
83
|
+
* `purgeObject({ type: 'role_binding', id: R }, S)` componía
|
|
84
|
+
* `role_binding:<scopeKey>|<R>` —byte a byte el binding real— y
|
|
85
|
+
* `#purgeByFilter` lo borraba con demostración de cero (`authorize` de
|
|
86
|
+
* `true` a `false`); `listSubjects('assignee', role_binding)` enumeraba sus
|
|
87
|
+
* asignados. `check`/`listSubjects` validan el par; `listObjects`/
|
|
88
|
+
* `purgeObject` el tipo; `purgeSubject` el userset.
|
|
89
|
+
*/
|
|
58
90
|
/** `check` = UN solo `Check` (el modelo resuelve includes + usersets). */
|
|
59
91
|
check(subject: RelSubject, relation: string, object: RelObject, partition: ScopeRef): Promise<boolean>;
|
|
60
92
|
/**
|
|
@@ -97,9 +129,43 @@ export declare class OpenFgaRelationsDriver implements RelationsDriver {
|
|
|
97
129
|
* `truncated`/paginación: `enumerateRelations` agota el `Read` (exhaustivo,
|
|
98
130
|
* como `listSubjects`/`purge*`), así que devuelve TODO en una página sin
|
|
99
131
|
* cursor —el reconcile itera hasta que no hay cursor—. Es el ORIGEN de una
|
|
100
|
-
* migración: una tupla que no llegara aquí desaparecería sin rastro
|
|
132
|
+
* migración: una tupla que no llegara aquí desaparecería sin rastro — por eso
|
|
133
|
+
* la CADUCADA también llega, con su `expiresAt` (R-15), para que el destino
|
|
134
|
+
* la cuente en `skipped`.
|
|
135
|
+
*
|
|
136
|
+
* **Coste: O(tuplas del store) por PASADA** (2.4.0-alpha.6): es un barrido
|
|
137
|
+
* entero por llamada, sea cual sea el tamaño de la partición (medido: 5 000
|
|
138
|
+
* tuplas ⇒ 50 páginas ≈ 170 ms; 15 000 ⇒ 151 páginas ≈ 0,5 s). Para K
|
|
139
|
+
* particiones usa `enumerateRelationsMany`: UN barrido en vez de K.
|
|
101
140
|
*/
|
|
102
141
|
enumerateRelations(partition: ScopeRef, _page?: RelationPage): Promise<RelationTuplePage>;
|
|
142
|
+
/**
|
|
143
|
+
* **`enumerateRelationsMany` — K particiones en UN barrido** (2.4.0-alpha.6;
|
|
144
|
+
* panel relay, analista §3: con 3 particiones 1,4 s → 0,46 s). MISMA
|
|
145
|
+
* semántica que `enumerateRelations` por cada partición pedida —exhaustiva,
|
|
146
|
+
* sin filtrar la caducada, todo en una página sin cursor— y cada tupla
|
|
147
|
+
* viene con SU `partition` (la referencia que pasó el llamante, casada por
|
|
148
|
+
* `scopeKey` ENTERA), de modo que el llamante reparte por `partition`.
|
|
149
|
+
* Reparte un solo `Read({})` paginado del store entero.
|
|
150
|
+
*
|
|
151
|
+
* **Lo que este método NO hace, a propósito: un `Read` por PREFIJO de id.**
|
|
152
|
+
* OpenFGA no tiene prefix-match: `Read({ object: 'document:unit|<uuid>|' })`
|
|
153
|
+
* responde **200 con cero tuplas** (medido por el panel, auditor 🔴 3) — en
|
|
154
|
+
* el ORIGEN de una migración eso es «esta partición está vacía» en silencio,
|
|
155
|
+
* y en una purga, «demostrado cero» sin haber borrado nada. El único filtro
|
|
156
|
+
* legal es `{}`; la partición se decide comparando la CLAVE entera del id
|
|
157
|
+
* parseado desde la derecha (`#parseObjectId`), así que `app` no arrastra a
|
|
158
|
+
* `appliance|…`, `org|U` no arrastra a `organization|U` y cada ortografía del
|
|
159
|
+
* uuid es su propia partición. La suite espía el FILTRO de cada `read`.
|
|
160
|
+
*
|
|
161
|
+
* **Exhaustivo o ruidoso**: una página con cero tuplas y token de
|
|
162
|
+
* continuación NO es el fin; un token que se repite, más de
|
|
163
|
+
* `MAX_READ_PAGES` páginas o una respuesta sin `tuples` son 503
|
|
164
|
+
* `E_AUTHZ_BACKEND_UNAVAILABLE` (`#readAll`); una tupla que no se entiende
|
|
165
|
+
* se cuenta en `diagnostics.unparseableTuples` y se avisa. Sin particiones
|
|
166
|
+
* es 500 `E_AUTHZ_CONFIG` con cero lecturas: no hay «éxito vacío».
|
|
167
|
+
*/
|
|
168
|
+
enumerateRelationsMany(partitions: ScopeRef[], _page?: RelationPage): Promise<RelationTuplePage>;
|
|
103
169
|
/**
|
|
104
170
|
* Borra TODAS las tuplas del objeto (cualquier relación) y demuestra cero.
|
|
105
171
|
* Barre las DOS ortografías del uuid de partición (🟡2, paridad con
|
|
@@ -107,7 +173,7 @@ export declare class OpenFgaRelationsDriver implements RelationsDriver {
|
|
|
107
173
|
* alias concediendo tras una purga «exitosa». Si tras borrar quedan tuplas
|
|
108
174
|
* ⇒ 500 `E_AUTHZ_PURGE_INCOMPLETE`.
|
|
109
175
|
*/
|
|
110
|
-
purgeObject(object: RelObject, partition: ScopeRef): Promise<void>;
|
|
176
|
+
purgeObject(object: RelObject, partition: ScopeRef, options?: RelationTransactionOptions): Promise<void>;
|
|
111
177
|
/**
|
|
112
178
|
* Borra TODAS las tuplas cuyo SUJETO es este subject en la partición, en
|
|
113
179
|
* cualquier tipo de objeto declarado, y demuestra cero. `Read` exige un
|
|
@@ -115,6 +181,6 @@ export declare class OpenFgaRelationsDriver implements RelationsDriver {
|
|
|
115
181
|
* que se recorre cada tipo declarado (`group` + los del consumidor) con
|
|
116
182
|
* `Read({ user, object: '<type>:' })`.
|
|
117
183
|
*/
|
|
118
|
-
purgeSubject(subject: RelSubject, partition: ScopeRef): Promise<void>;
|
|
184
|
+
purgeSubject(subject: RelSubject, partition: ScopeRef, options?: RelationTransactionOptions): Promise<void>;
|
|
119
185
|
}
|
|
120
186
|
//# sourceMappingURL=openfga_relations_driver.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openfga_relations_driver.d.ts","sourceRoot":"","sources":["../../../src/drivers/openfga_relations_driver.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"openfga_relations_driver.d.ts","sourceRoot":"","sources":["../../../src/drivers/openfga_relations_driver.ts"],"names":[],"mappings":"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"}
|