@jantstack/adonis-authz 2.4.0-alpha.8 → 2.5.0-alpha.1
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 +300 -15
- 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 +10 -3
- package/build/commands/authz_reconcile.d.ts.map +1 -1
- package/build/commands/authz_reconcile.js +168 -18
- package/build/commands/authz_reconcile.js.map +1 -1
- package/build/commands/authz_relations_reconcile.d.ts +66 -19
- package/build/commands/authz_relations_reconcile.d.ts.map +1 -1
- package/build/commands/authz_relations_reconcile.js +231 -44
- package/build/commands/authz_relations_reconcile.js.map +1 -1
- package/build/commands/authz_scopes_relay.d.ts.map +1 -1
- package/build/commands/authz_scopes_relay.js +82 -6
- package/build/commands/authz_scopes_relay.js.map +1 -1
- package/build/commands/authz_scopes_requeue.d.ts.map +1 -1
- package/build/commands/authz_scopes_requeue.js +0 -2
- package/build/commands/authz_scopes_requeue.js.map +1 -1
- 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/index.d.ts +6 -4
- package/build/index.d.ts.map +1 -1
- package/build/index.js +5 -3
- package/build/index.js.map +1 -1
- package/build/providers/authz_provider.d.ts +1 -1
- package/build/providers/authz_provider.d.ts.map +1 -1
- package/build/providers/authz_provider.js +2 -1
- package/build/providers/authz_provider.js.map +1 -1
- package/build/src/define_config.d.ts +9 -0
- 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.map +1 -1
- package/build/src/drivers/database_driver.js +1 -0
- package/build/src/drivers/database_driver.js.map +1 -1
- package/build/src/drivers/database_relations_driver.d.ts +18 -6
- package/build/src/drivers/database_relations_driver.d.ts.map +1 -1
- package/build/src/drivers/database_relations_driver.js +91 -44
- package/build/src/drivers/database_relations_driver.js.map +1 -1
- package/build/src/drivers/openfga_driver.d.ts +62 -4
- package/build/src/drivers/openfga_driver.d.ts.map +1 -1
- package/build/src/drivers/openfga_driver.js +182 -28
- package/build/src/drivers/openfga_driver.js.map +1 -1
- package/build/src/drivers/openfga_relations_driver.d.ts +16 -4
- package/build/src/drivers/openfga_relations_driver.d.ts.map +1 -1
- package/build/src/drivers/openfga_relations_driver.js +71 -34
- package/build/src/drivers/openfga_relations_driver.js.map +1 -1
- package/build/src/errors.d.ts +50 -0
- package/build/src/errors.d.ts.map +1 -1
- package/build/src/errors.js +50 -0
- package/build/src/errors.js.map +1 -1
- package/build/src/freeze.d.ts +63 -4
- package/build/src/freeze.d.ts.map +1 -1
- package/build/src/freeze.js +107 -18
- package/build/src/freeze.js.map +1 -1
- package/build/src/identity.d.ts +120 -9
- package/build/src/identity.d.ts.map +1 -1
- package/build/src/identity.js +164 -12
- package/build/src/identity.js.map +1 -1
- package/build/src/manager.d.ts +64 -2
- package/build/src/manager.d.ts.map +1 -1
- package/build/src/manager.js +271 -35
- package/build/src/manager.js.map +1 -1
- package/build/src/openfga.d.ts +1 -1
- package/build/src/openfga.d.ts.map +1 -1
- package/build/src/openfga.js +1 -1
- package/build/src/openfga.js.map +1 -1
- package/build/src/relations/check_many.d.ts +17 -0
- package/build/src/relations/check_many.d.ts.map +1 -0
- package/build/src/relations/check_many.js +57 -0
- package/build/src/relations/check_many.js.map +1 -0
- package/build/src/relations/manager.d.ts +20 -0
- package/build/src/relations/manager.d.ts.map +1 -1
- package/build/src/relations/manager.js +84 -13
- package/build/src/relations/manager.js.map +1 -1
- package/build/src/relations/reconcile.d.ts +67 -0
- package/build/src/relations/reconcile.d.ts.map +1 -1
- package/build/src/relations/reconcile.js +123 -30
- package/build/src/relations/reconcile.js.map +1 -1
- package/build/src/relations/tuple_key.d.ts +25 -0
- package/build/src/relations/tuple_key.d.ts.map +1 -0
- package/build/src/relations/tuple_key.js +60 -0
- package/build/src/relations/tuple_key.js.map +1 -0
- package/build/src/shared/backend_guard.d.ts +30 -11
- package/build/src/shared/backend_guard.d.ts.map +1 -1
- package/build/src/shared/backend_guard.js +45 -15
- 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/testing/main.d.ts +3 -1
- package/build/src/testing/main.d.ts.map +1 -1
- package/build/src/testing/main.js +2 -1
- 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 +14 -0
- package/build/src/testing/relations_contract.d.ts.map +1 -1
- package/build/src/testing/relations_contract.js +297 -21
- package/build/src/testing/relations_contract.js.map +1 -1
- package/build/src/testing/test_clock.d.ts +15 -0
- package/build/src/testing/test_clock.d.ts.map +1 -0
- package/build/src/testing/test_clock.js +65 -0
- package/build/src/testing/test_clock.js.map +1 -0
- package/build/src/types.d.ts +148 -9
- package/build/src/types.d.ts.map +1 -1
- package/build/src/types.js.map +1 -1
- package/package.json +5 -1
|
@@ -128,7 +128,6 @@ __decorate([
|
|
|
128
128
|
], AuthzCatalogPruneOrphans.prototype, "force", void 0);
|
|
129
129
|
__decorate([
|
|
130
130
|
flags.boolean({
|
|
131
|
-
name: 'allow-mass-purge',
|
|
132
131
|
description: 'Allow a pass that would purge every owner (or more than half the local roles) — check your resolveChain first',
|
|
133
132
|
}),
|
|
134
133
|
__metadata("design:type", Object)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authz_catalog_prune_orphans.js","sourceRoot":"","sources":["../../commands/authz_catalog_prune_orphans.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"authz_catalog_prune_orphans.js","sourceRoot":"","sources":["../../commands/authz_catalog_prune_orphans.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authz_freeze.d.ts","sourceRoot":"","sources":["../../commands/authz_freeze.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAS,MAAM,oBAAoB,CAAA;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AAEzD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,WAAW;IAClD,MAAM,CAAC,WAAW,SAAiB;IACnC,MAAM,CAAC,WAAW,SAAuG;IAEzH,MAAM,CAAC,OAAO,EAAE,cAAc,CAE7B;IAGO,MAAM,EAAE,MAAM,GAAG,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"authz_freeze.d.ts","sourceRoot":"","sources":["../../commands/authz_freeze.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAS,MAAM,oBAAoB,CAAA;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AAEzD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,WAAW;IAClD,MAAM,CAAC,WAAW,SAAiB;IACnC,MAAM,CAAC,WAAW,SAAuG;IAEzH,MAAM,CAAC,OAAO,EAAE,cAAc,CAE7B;IAGO,MAAM,EAAE,MAAM,GAAG,SAAS,CAAA;IAM1B,OAAO,EAAE,MAAM,GAAG,SAAS,CAAA;IAE7B,GAAG;CAuCV"}
|
|
@@ -72,7 +72,7 @@ export default class AuthzFreeze extends BaseCommand {
|
|
|
72
72
|
this.logger.info('Lo que la ventana NO congela: syncAuthzCatalog, manager.driver() y el árbol SQL del consumidor.');
|
|
73
73
|
}
|
|
74
74
|
catch (error) {
|
|
75
|
-
if (error?.code === 'E_AUTHZ_FREEZE_HELD') {
|
|
75
|
+
if (error?.code === 'E_AUTHZ_FREEZE_HELD' || error?.code === 'E_AUTHZ_OPERATOR_WINDOW_EXPIRED') {
|
|
76
76
|
this.logger.error(error.message);
|
|
77
77
|
this.exitCode = 1;
|
|
78
78
|
return;
|
|
@@ -87,7 +87,6 @@ __decorate([
|
|
|
87
87
|
], AuthzFreeze.prototype, "reason", void 0);
|
|
88
88
|
__decorate([
|
|
89
89
|
flags.number({
|
|
90
|
-
name: 'lease-ms',
|
|
91
90
|
description: 'Opt-in expiry: the window lifts ITSELF after this many ms (nobody renews it — beware a cutover slower than the lease)',
|
|
92
91
|
}),
|
|
93
92
|
__metadata("design:type", Object)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authz_freeze.js","sourceRoot":"","sources":["../../commands/authz_freeze.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAGvD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,WAAW;IAClD,MAAM,CAAC,WAAW,GAAG,cAAc,CAAA;IACnC,MAAM,CAAC,WAAW,GAAG,oGAAoG,CAAA;IAEzH,MAAM,CAAC,OAAO,GAAmB;QAC/B,QAAQ,EAAE,IAAI;KACf,CAAA;
|
|
1
|
+
{"version":3,"file":"authz_freeze.js","sourceRoot":"","sources":["../../commands/authz_freeze.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAGvD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,WAAW;IAClD,MAAM,CAAC,WAAW,GAAG,cAAc,CAAA;IACnC,MAAM,CAAC,WAAW,GAAG,oGAAoG,CAAA;IAEzH,MAAM,CAAC,OAAO,GAAmB;QAC/B,QAAQ,EAAE,IAAI;KACf,CAAA;IAWD,KAAK,CAAC,GAAG;QACP,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,yGAAyG;gBACvG,+FAA+F,CAClG,CAAA;YACD,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAA;YACjB,OAAM;QACR,CAAC;QACD,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAA;QACtE,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE;gBACpD,IAAI,EAAE,UAAU;gBAChB,OAAO,EAAE,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO;aAC1D,CAAC,CAAA;YACF,IAAI,CAAC,MAAM,CAAC,OAAO,CACjB,qCAAqC,KAAK,CAAC,KAAK,yDAAyD;gBACvG,wCAAwC,CAC3C,CAAA;YACD,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;gBAC/B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,8FAA8F,CAAC,CAAA;YAClH,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,MAAM,CAAC,OAAO,CACjB,6BAA6B,IAAI,CAAC,OAAO,mDAAmD;oBAC1F,iFAAiF,CACpF,CAAA;YACH,CAAC;YACD,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,iGAAiG,CAClG,CAAA;QACH,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,IAAI,KAAK,EAAE,IAAI,KAAK,qBAAqB,IAAI,KAAK,EAAE,IAAI,KAAK,iCAAiC,EAAE,CAAC;gBAC/F,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;gBAChC,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAA;gBACjB,OAAM;YACR,CAAC;YACD,MAAM,KAAK,CAAA;QACb,CAAC;IACH,CAAC;;AA9CO;IADP,KAAK,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,sEAAsE,EAAE,CAAC;;2CACpE;AAM1B;IAJP,KAAK,CAAC,MAAM,CAAC;QACZ,WAAW,EACT,uHAAuH;KAC1H,CAAC;;4CACiC"}
|
|
@@ -17,7 +17,10 @@ import type { ReconcileReport } from '../src/types.js';
|
|
|
17
17
|
* `--prune`.
|
|
18
18
|
*
|
|
19
19
|
* La ventana del relay (`pendingRelay`) se AVISA pero no tumba la pasada: es
|
|
20
|
-
* una ventana de segundos por diseño, no una divergencia. Y
|
|
20
|
+
* una ventana de segundos por diseño, no una divergencia. **Y lo AJENO de un
|
|
21
|
+
* store compartido tampoco** (2.4.0-alpha.9 · B): esas tuplas tienen otro
|
|
22
|
+
* dueño, se imprimen con su tipo y jamás son deriva — contarlas dejaba
|
|
23
|
+
* `clean = false` para siempre en cualquier despliegue con relaciones. Y **`expired`
|
|
21
24
|
* tampoco tumba** (3b-8 · B2): es la pérdida DECLARADA de la migración, no
|
|
22
25
|
* concede en ningún driver y nada barre las filas caducadas del origen, así
|
|
23
26
|
* que contarla como deriva dejaba el exit 1 clavado para siempre a la
|
|
@@ -48,8 +51,11 @@ export declare function reconcileLines(report: ReconcileReport): {
|
|
|
48
51
|
* - Si `--to` es el driver ACTIVO y sus hechos viven en su backend
|
|
49
52
|
* (`capabilities.hierarchyFacts`, el `openfga` de esta versión), los
|
|
50
53
|
* hechos son los SUYOS: la pasada es de MANTENIMIENTO —rehace lo derivado
|
|
51
|
-
* y aplica el barrido de visibilidad del invariante 18— y no escribe
|
|
52
|
-
* borra
|
|
54
|
+
* y aplica el barrido de visibilidad del invariante 18— y no escribe
|
|
55
|
+
* hechos; con `--prune` borra los de scopes que ya no resuelven, los
|
|
56
|
+
* caducados y los de roles/permisos retirados (y los que sobran) —
|
|
57
|
+
* alpha.10: hasta alpha.9 esta línea decía que no borraba ningún hecho y con
|
|
58
|
+
* `--prune` los borraba. `authz_assignments`/`authz_denies` no son su
|
|
53
59
|
* fuente: después de un cutover a `facts` están congeladas, y
|
|
54
60
|
* reconstruir desde ellas resucitaba lo revocado y —con `--prune`—
|
|
55
61
|
* borraba los denies vivos.
|
|
@@ -97,6 +103,7 @@ export default class AuthzReconcile extends BaseCommand {
|
|
|
97
103
|
dryRun: boolean | undefined;
|
|
98
104
|
prune: boolean | undefined;
|
|
99
105
|
allowMassDelete: boolean | undefined;
|
|
106
|
+
allowStaleSource: boolean | undefined;
|
|
100
107
|
batchSize: number | undefined;
|
|
101
108
|
maxTuples: number | undefined;
|
|
102
109
|
run(): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authz_reconcile.d.ts","sourceRoot":"","sources":["../../commands/authz_reconcile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAS,MAAM,oBAAoB,CAAA;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AACzD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAEtD
|
|
1
|
+
{"version":3,"file":"authz_reconcile.d.ts","sourceRoot":"","sources":["../../commands/authz_reconcile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAS,MAAM,oBAAoB,CAAA;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AACzD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAEtD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,eAAe,GAAG;IACvD,KAAK,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,KAAK,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACjF,KAAK,EAAE,OAAO,CAAA;CACf,CAiRA;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4DG;AACH,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,WAAW;IACrD,MAAM,CAAC,WAAW,SAAoB;IACtC,MAAM,CAAC,WAAW,SAAqG;IAEvH,MAAM,CAAC,OAAO,EAAE,cAAc,CAE7B;IAGO,EAAE,EAAE,MAAM,GAAG,SAAS,CAAA;IAKtB,IAAI,EAAE,MAAM,GAAG,SAAS,CAAA;IAGxB,MAAM,EAAE,OAAO,GAAG,SAAS,CAAA;IAG3B,KAAK,EAAE,OAAO,GAAG,SAAS,CAAA;IAK1B,eAAe,EAAE,OAAO,GAAG,SAAS,CAAA;IAMpC,gBAAgB,EAAE,OAAO,GAAG,SAAS,CAAA;IAGrC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAA;IAK7B,SAAS,EAAE,MAAM,GAAG,SAAS,CAAA;IAE/B,GAAG;CAmEV"}
|
|
@@ -24,7 +24,10 @@ import { BaseCommand, flags } from '@adonisjs/core/ace';
|
|
|
24
24
|
* `--prune`.
|
|
25
25
|
*
|
|
26
26
|
* La ventana del relay (`pendingRelay`) se AVISA pero no tumba la pasada: es
|
|
27
|
-
* una ventana de segundos por diseño, no una divergencia. Y
|
|
27
|
+
* una ventana de segundos por diseño, no una divergencia. **Y lo AJENO de un
|
|
28
|
+
* store compartido tampoco** (2.4.0-alpha.9 · B): esas tuplas tienen otro
|
|
29
|
+
* dueño, se imprimen con su tipo y jamás son deriva — contarlas dejaba
|
|
30
|
+
* `clean = false` para siempre en cualquier despliegue con relaciones. Y **`expired`
|
|
28
31
|
* tampoco tumba** (3b-8 · B2): es la pérdida DECLARADA de la migración, no
|
|
29
32
|
* concede en ningún driver y nada barre las filas caducadas del origen, así
|
|
30
33
|
* que contarla como deriva dejaba el exit 1 clavado para siempre a la
|
|
@@ -51,16 +54,41 @@ export function reconcileLines(report) {
|
|
|
51
54
|
level: 'log',
|
|
52
55
|
message: `hechos: los del propio '${report.to}' — es el driver ACTIVO, así que sus hechos son SUYOS y no ` +
|
|
53
56
|
`los de authz_assignments/authz_denies. Esta pasada rehace lo derivado (marcador de raíz, ` +
|
|
54
|
-
`proyección del catálogo, árbol y visibilidad de rol) y no escribe
|
|
57
|
+
`proyección del catálogo, árbol y visibilidad de rol) y no escribe hechos; con --prune borra los de ` +
|
|
58
|
+
`scopes que ya no resuelven, los caducados, los de roles o permisos que el catálogo o el modelo ya no ` +
|
|
59
|
+
`tienen (y los que sobran). ` +
|
|
55
60
|
`Si lo que quieres es MIGRAR desde las tablas, nómbralas: --from=<driver cuyos hechos son authz_*>.`,
|
|
56
61
|
}
|
|
57
62
|
: { level: 'log', message: `hechos: leídos de ${report.factsFrom}` });
|
|
58
63
|
}
|
|
64
|
+
// **La dirección RANCIA** (2.4.0-alpha.10): destino = el driver ACTIVO,
|
|
65
|
+
// origen = otro. Sin `--allow-stale-source` solo llega aquí un `--dry-run`
|
|
66
|
+
// (la pasada que escribe es 500 en el manager) y es DERIVA: una pasada así
|
|
67
|
+
// resucitaría lo revocado desde el cutover.
|
|
68
|
+
if (report.staleSource !== undefined) {
|
|
69
|
+
const { to, from, allowed } = report.staleSource;
|
|
70
|
+
lines.push({
|
|
71
|
+
level: 'warning',
|
|
72
|
+
message: `dirección RANCIA: '${to}' es el driver ACTIVO y los hechos salen de '${from}', que dejó de verlos en el ` +
|
|
73
|
+
'cutover — esta pasada re-escribe en el driver activo lo que el origen ya no refleja (resucita las ' +
|
|
74
|
+
'revocaciones hechas desde entonces). ' +
|
|
75
|
+
(allowed
|
|
76
|
+
? 'Levantada a sabiendas con --allow-stale-source.'
|
|
77
|
+
: `Sin --allow-stale-source la pasada de verdad se niega (E_AUTHZ_STALE_SOURCE_REFUSED); para verificar ` +
|
|
78
|
+
`el driver activo, la pasada de mantenimiento es sin --from: authz:reconcile --to=${to} --dry-run.`),
|
|
79
|
+
});
|
|
80
|
+
}
|
|
59
81
|
fase('marcador de raíz', 'root');
|
|
60
82
|
fase('proyección del catálogo', 'catalog');
|
|
61
83
|
fase('árbol', 'tree');
|
|
62
84
|
fase('hechos', 'facts');
|
|
63
85
|
for (const skip of report.details) {
|
|
86
|
+
// 🟡 A4 (auditor del lote A): lo podado se LISTA, con su `kind`, también en --dry-run.
|
|
87
|
+
if (skip.pruned) {
|
|
88
|
+
const verb = report.dryRun ? 'se BORRARÍA con --prune' : 'BORRADO por --prune';
|
|
89
|
+
lines.push({ level: 'log', message: `${verb} (${skip.reason}) ${skip.kind}: ${skip.detail}` });
|
|
90
|
+
continue;
|
|
91
|
+
}
|
|
64
92
|
lines.push({ level: 'warning', message: `sin migrar (${skip.reason}) ${skip.kind}: ${skip.detail}` });
|
|
65
93
|
}
|
|
66
94
|
const motivos = Object.entries(report.skipped).sort(([a], [b]) => (a < b ? -1 : 1));
|
|
@@ -74,6 +102,17 @@ export function reconcileLines(report) {
|
|
|
74
102
|
'restaura con el mismo uuid: repite con --prune para borrarlos.',
|
|
75
103
|
});
|
|
76
104
|
}
|
|
105
|
+
// **F-R1 (plan 2.5 · lote A; linaje L8)**: lo que la pasada de MANTENIMIENTO
|
|
106
|
+
// descartó Y BORRÓ con --prune (el origen es el propio store) no «queda sin
|
|
107
|
+
// migrar»: es un bucket aparte, se dice como lo que es y no es deriva.
|
|
108
|
+
for (const [reason, count] of Object.entries(report.pruned ?? {}).sort(([a], [b]) => (a < b ? -1 : 1))) {
|
|
109
|
+
lines.push({
|
|
110
|
+
level: 'log',
|
|
111
|
+
message: report.dryRun
|
|
112
|
+
? `${count} hecho(s) del propio store por '${reason}' se BORRARÍAN con --prune (son de este store: no hay otro sitio donde arreglarlos).`
|
|
113
|
+
: `${count} hecho(s) del propio store por '${reason}' BORRADOS por --prune (mantenimiento: eran de este store y no respaldaban nada).`,
|
|
114
|
+
});
|
|
115
|
+
}
|
|
77
116
|
if (report.drift.rootMarker) {
|
|
78
117
|
lines.push({
|
|
79
118
|
level: 'error',
|
|
@@ -101,6 +140,39 @@ export function reconcileLines(report) {
|
|
|
101
140
|
'(el backend evalúa el ciclo y la herencia pasa a ser bidireccional), así que ese subárbol DENIEGA hasta que lo arregles.',
|
|
102
141
|
});
|
|
103
142
|
}
|
|
143
|
+
// **El store COMPARTIDO** (2.4.0-alpha.9 · B). Con `openfga` las tuplas de
|
|
144
|
+
// `relations/` viven en el mismo store y esta pasada las VE: se dice en voz
|
|
145
|
+
// alta —con los tipos, que es lo único que permite reconocer uno que ya no
|
|
146
|
+
// se declara—, no se cuentan como deriva y no se tocan ni con `--prune`.
|
|
147
|
+
// Antes caían en `extra` y `--prune` las borraba (60 de 60 medidas),
|
|
148
|
+
// reportando `clean = true`: el verde MUDO de una pasada destructiva.
|
|
149
|
+
const foreign = report.foreign;
|
|
150
|
+
if (foreign !== undefined && foreign.tuples > 0) {
|
|
151
|
+
const porTipo = Object.entries(foreign.types)
|
|
152
|
+
.sort(([a], [b]) => (a < b ? -1 : 1))
|
|
153
|
+
.map(([type, count]) => `${type} (${count})`)
|
|
154
|
+
.join(', ');
|
|
155
|
+
lines.push({
|
|
156
|
+
level: 'log',
|
|
157
|
+
message: `ajenas: ${foreign.tuples} tupla(s) de tipos que esta pasada NO gobierna [${porTipo}] — el store está ` +
|
|
158
|
+
'COMPARTIDO con otro subsistema (las relaciones de relations/, o un modelo anterior de otro dueño): ' +
|
|
159
|
+
'ni se borran, ni cuentan como deriva.',
|
|
160
|
+
});
|
|
161
|
+
if (report.prune) {
|
|
162
|
+
lines.push({
|
|
163
|
+
level: 'log',
|
|
164
|
+
message: `--prune ha respetado ${foreign.tuples} tupla(s) ajenas: solo borra lo de esta pasada.`,
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
if (foreign.relations !== undefined && (foreign.unknown ?? 0) > 0) {
|
|
168
|
+
lines.push({
|
|
169
|
+
level: 'warning',
|
|
170
|
+
message: `${foreign.unknown} de esas tuplas no las reclama nadie: no son de esta pasada y su tipo tampoco está ` +
|
|
171
|
+
'declarado en relations.config (un modelo anterior de otro subsistema, o un tipo que se retiró). ' +
|
|
172
|
+
'Este paquete ya no las barre: míralas a mano.',
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
}
|
|
104
176
|
if (report.drift.pendingRelay > 0) {
|
|
105
177
|
lines.push({
|
|
106
178
|
level: 'warning',
|
|
@@ -122,6 +194,38 @@ export function reconcileLines(report) {
|
|
|
122
194
|
'openfga. Aplana el árbol, o declara scopes.maxDepth (y sube OPENFGA_RESOLVE_NODE_LIMIT en el servidor).',
|
|
123
195
|
});
|
|
124
196
|
}
|
|
197
|
+
// alpha.10 · 3: la ventana del OPERADOR adoptada dice si caduca y cuándo
|
|
198
|
+
// (antes el reporte la daba por eterna aunque se abriese con --lease-ms).
|
|
199
|
+
// alpha.10 · S2: y SIEMPRE en qué ventana corrió — la del operador y una
|
|
200
|
+
// propia eran letra a letra iguales, y «tomé mi ventana porque no había
|
|
201
|
+
// ninguna» es lo que delata un cutover cuya ventana ya no estaba.
|
|
202
|
+
if (report.frozen !== undefined && !report.frozen.lapsed && report.frozen.window === 'own') {
|
|
203
|
+
lines.push({
|
|
204
|
+
level: 'warning',
|
|
205
|
+
message: `La pasada tomó SU PROPIA ventana (fence ${report.frozen.fence}, lease ${report.frozen.leaseMs} ms) y la soltó al ` +
|
|
206
|
+
'terminar: NO había ventana de operador viva. Si esta pasada era parte de un cutover, la flota vuelve a escribir ' +
|
|
207
|
+
'ya — abre la ventana con authz:freeze antes de cambiar de driver.',
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
if (report.frozen !== undefined && !report.frozen.lapsed && report.frozen.window === 'enclosing') {
|
|
211
|
+
lines.push({
|
|
212
|
+
level: 'log',
|
|
213
|
+
message: `La pasada corrió dentro de la ventana que ya sostenía este proceso (fence ${report.frozen.fence}).`,
|
|
214
|
+
});
|
|
215
|
+
}
|
|
216
|
+
if (report.frozen !== undefined && report.frozen.untilMs !== undefined && !report.frozen.lapsed) {
|
|
217
|
+
lines.push(report.frozen.untilMs === null
|
|
218
|
+
? {
|
|
219
|
+
level: 'log',
|
|
220
|
+
message: `La pasada corrió dentro de la ventana del operador (fence ${report.frozen.fence}), sin caducidad.`,
|
|
221
|
+
}
|
|
222
|
+
: {
|
|
223
|
+
level: 'warning',
|
|
224
|
+
message: `La pasada corrió dentro de la ventana del operador (fence ${report.frozen.fence}), que CADUCA el ` +
|
|
225
|
+
`${new Date(report.frozen.untilMs).toISOString()} (le quedaban ${report.frozen.leaseMs} ms al empezar): ` +
|
|
226
|
+
'si el cutover no termina antes, las escrituras vuelven solas — ciérrala con authz:unfreeze.',
|
|
227
|
+
});
|
|
228
|
+
}
|
|
125
229
|
if (report.frozen?.lapsed) {
|
|
126
230
|
lines.push({
|
|
127
231
|
level: 'error',
|
|
@@ -130,7 +234,22 @@ export function reconcileLines(report) {
|
|
|
130
234
|
'escribieran no está en ningún contador. La pasada NO se certifica: repítela dentro de una ventana entera.',
|
|
131
235
|
});
|
|
132
236
|
}
|
|
133
|
-
|
|
237
|
+
// **F-R2 (plan 2.5 · lote A; linaje L8)**: con el seguro LEVANTADO
|
|
238
|
+
// (`--allow-mass-delete`) la pasada real YA borró — la letra lo dice así, en
|
|
239
|
+
// vez de «borraría … antes de usar --allow-mass-delete». Tabla de verdad
|
|
240
|
+
// massDelete × allowMassDelete × dryRun en `tests/reconcile.spec.ts`.
|
|
241
|
+
if (report.massDelete && report.allowMassDelete === true) {
|
|
242
|
+
const origen = report.to === 'database' ? 'el ORIGEN' : `el ORIGEN (${report.factsFrom ?? 'authz_assignments/authz_denies'})`;
|
|
243
|
+
lines.push({
|
|
244
|
+
level: 'warning',
|
|
245
|
+
message: report.dryRun
|
|
246
|
+
? `Esta pasada borraría ${report.deleted} hecho(s) con ${origen} sin devolver NI UNO; --allow-mass-delete está puesto, ` +
|
|
247
|
+
'así que la pasada real los BORRARÁ. Comprueba el origen antes de correrla.'
|
|
248
|
+
: `El seguro de borrado masivo se LEVANTÓ con --allow-mass-delete: se han borrado ${report.deleted} hecho(s) con ${origen} ` +
|
|
249
|
+
'sin devolver NI UNO. Era tu decisión; si el origen era el equivocado, repite la pasada desde el correcto.',
|
|
250
|
+
});
|
|
251
|
+
}
|
|
252
|
+
else if (report.massDelete) {
|
|
134
253
|
lines.push({
|
|
135
254
|
level: 'error',
|
|
136
255
|
message: report.to === 'database'
|
|
@@ -162,6 +281,9 @@ export function reconcileLines(report) {
|
|
|
162
281
|
// La garantía del freeze se DEMUESTRA (3b-7, juez C4): un lease perdido a
|
|
163
282
|
// mitad es una ventana en la que otros pudieron escribir ⇒ exit ≠ 0.
|
|
164
283
|
report.frozen?.lapsed !== true &&
|
|
284
|
+
// La dirección rancia en el verificador es deriva (2.4.0-alpha.10): la
|
|
285
|
+
// pasada que certificaría haría daño.
|
|
286
|
+
!(report.dryRun && report.staleSource !== undefined && !report.staleSource.allowed) &&
|
|
165
287
|
(!report.dryRun || cambios === 0);
|
|
166
288
|
return { lines, clean };
|
|
167
289
|
}
|
|
@@ -183,8 +305,11 @@ export function reconcileLines(report) {
|
|
|
183
305
|
* - Si `--to` es el driver ACTIVO y sus hechos viven en su backend
|
|
184
306
|
* (`capabilities.hierarchyFacts`, el `openfga` de esta versión), los
|
|
185
307
|
* hechos son los SUYOS: la pasada es de MANTENIMIENTO —rehace lo derivado
|
|
186
|
-
* y aplica el barrido de visibilidad del invariante 18— y no escribe
|
|
187
|
-
* borra
|
|
308
|
+
* y aplica el barrido de visibilidad del invariante 18— y no escribe
|
|
309
|
+
* hechos; con `--prune` borra los de scopes que ya no resuelven, los
|
|
310
|
+
* caducados y los de roles/permisos retirados (y los que sobran) —
|
|
311
|
+
* alpha.10: hasta alpha.9 esta línea decía que no borraba ningún hecho y con
|
|
312
|
+
* `--prune` los borraba. `authz_assignments`/`authz_denies` no son su
|
|
188
313
|
* fuente: después de un cutover a `facts` están congeladas, y
|
|
189
314
|
* reconstruir desde ellas resucitaba lo revocado y —con `--prune`—
|
|
190
315
|
* borraba los denies vivos.
|
|
@@ -237,15 +362,36 @@ export default class AuthzReconcile extends BaseCommand {
|
|
|
237
362
|
return;
|
|
238
363
|
}
|
|
239
364
|
const { default: authorization } = await import('../services/main.js');
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
365
|
+
let report;
|
|
366
|
+
try {
|
|
367
|
+
report = await authorization.reconcile({
|
|
368
|
+
to: this.to,
|
|
369
|
+
...(this.from !== undefined ? { from: this.from } : {}),
|
|
370
|
+
dryRun: this.dryRun === true,
|
|
371
|
+
prune: this.prune === true,
|
|
372
|
+
allowMassDelete: this.allowMassDelete === true,
|
|
373
|
+
allowStaleSource: this.allowStaleSource === true,
|
|
374
|
+
batchSize: this.batchSize,
|
|
375
|
+
maxTuples: this.maxTuples,
|
|
376
|
+
});
|
|
377
|
+
}
|
|
378
|
+
catch (error) {
|
|
379
|
+
// La dirección rancia (2.4.0-alpha.10) es una negativa con letra, no un
|
|
380
|
+
// stack: el mensaje ya nombra la dirección, el riesgo y la salida.
|
|
381
|
+
// **F-R3 (plan 2.5 · lote A; gemelo de `authz:relations:reconcile`)**: el
|
|
382
|
+
// seguro de borrado masivo (500) y un freeze VIVO de otra pasada (423)
|
|
383
|
+
// también son negativas con letra —el mensaje nombra al dueño, el fence y
|
|
384
|
+
// cómo se levanta—, no un error crudo: paridad con el comando gemelo.
|
|
385
|
+
if (error?.code === 'E_AUTHZ_STALE_SOURCE_REFUSED' ||
|
|
386
|
+
error?.code === 'E_AUTHZ_OPERATOR_WINDOW_EXPIRED' ||
|
|
387
|
+
error?.code === 'E_AUTHZ_MASS_RECONCILE_REFUSED' ||
|
|
388
|
+
error?.code === 'E_AUTHZ_FREEZE_HELD') {
|
|
389
|
+
this.logger.error(String(error.message));
|
|
390
|
+
this.exitCode = 1;
|
|
391
|
+
return;
|
|
392
|
+
}
|
|
393
|
+
throw error;
|
|
394
|
+
}
|
|
249
395
|
const { lines, clean } = reconcileLines(report);
|
|
250
396
|
for (const { level, message } of lines)
|
|
251
397
|
this.logger[level](message);
|
|
@@ -278,7 +424,7 @@ __decorate([
|
|
|
278
424
|
__metadata("design:type", Object)
|
|
279
425
|
], AuthzReconcile.prototype, "from", void 0);
|
|
280
426
|
__decorate([
|
|
281
|
-
flags.boolean({
|
|
427
|
+
flags.boolean({ description: 'Report what it would do and write nothing (this is the verifier)' }),
|
|
282
428
|
__metadata("design:type", Object)
|
|
283
429
|
], AuthzReconcile.prototype, "dryRun", void 0);
|
|
284
430
|
__decorate([
|
|
@@ -287,18 +433,22 @@ __decorate([
|
|
|
287
433
|
], AuthzReconcile.prototype, "prune", void 0);
|
|
288
434
|
__decorate([
|
|
289
435
|
flags.boolean({
|
|
290
|
-
name: 'allow-mass-delete',
|
|
291
436
|
description: 'Allow --prune to delete facts while authz_assignments/authz_denies are empty — check your connection first',
|
|
292
437
|
}),
|
|
293
438
|
__metadata("design:type", Object)
|
|
294
439
|
], AuthzReconcile.prototype, "allowMassDelete", void 0);
|
|
295
440
|
__decorate([
|
|
296
|
-
flags.
|
|
441
|
+
flags.boolean({
|
|
442
|
+
description: 'Allow --to=<ACTIVE driver> --from=<another>: rewrites into the serving driver facts the source no longer reflects (resurrects revocations made since the cutover)',
|
|
443
|
+
}),
|
|
444
|
+
__metadata("design:type", Object)
|
|
445
|
+
], AuthzReconcile.prototype, "allowStaleSource", void 0);
|
|
446
|
+
__decorate([
|
|
447
|
+
flags.number({ description: 'Rows per source batch and operations per destination write (default 100)' }),
|
|
297
448
|
__metadata("design:type", Object)
|
|
298
449
|
], AuthzReconcile.prototype, "batchSize", void 0);
|
|
299
450
|
__decorate([
|
|
300
451
|
flags.number({
|
|
301
|
-
name: 'max-tuples',
|
|
302
452
|
description: 'Declared cap on the destination dump this pass holds in memory (default 1000000); above it, 500 E_AUTHZ_RECONCILE_TOO_LARGE before writing anything',
|
|
303
453
|
}),
|
|
304
454
|
__metadata("design:type", Object)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authz_reconcile.js","sourceRoot":"","sources":["../../commands/authz_reconcile.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAIvD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,UAAU,cAAc,CAAC,MAAuB;IAIpD,MAAM,KAAK,GAA+E,EAAE,CAAA;IAC5F,MAAM,IAAI,GAAG,CAAC,MAAc,EAAE,GAAoC,EAAE,EAAE;QACpE,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QAC5B,IAAI,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,OAAO,KAAK,CAAC;YAAE,OAAM;QAC3E,KAAK,CAAC,IAAI,CAAC;YACT,KAAK,EAAE,KAAK;YACZ,OAAO,EACL,GAAG,MAAM,cAAc,CAAC,CAAC,OAAO,kBAAkB,CAAC,CAAC,OAAO,aAAa,CAAC,CAAC,SAAS,IAAI;gBACvF,UAAU,CAAC,CAAC,KAAK,cAAc,CAAC,CAAC,OAAO,EAAE;SAC7C,CAAC,CAAA;IACJ,CAAC,CAAA;IACD,wEAAwE;IACxE,qEAAqE;IACrE,yDAAyD;IACzD,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QACnC,KAAK,CAAC,IAAI,CACR,MAAM,CAAC,SAAS,KAAK,MAAM,CAAC,EAAE;YAC5B,CAAC,CAAC;gBACE,KAAK,EAAE,KAAK;gBACZ,OAAO,EACL,2BAA2B,MAAM,CAAC,EAAE,6DAA6D;oBACjG,2FAA2F;oBAC3F,4FAA4F;oBAC5F,oGAAoG;aACvG;YACH,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,qBAAqB,MAAM,CAAC,SAAS,EAAE,EAAE,CACvE,CAAA;IACH,CAAC;IACD,IAAI,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAA;IAChC,IAAI,CAAC,yBAAyB,EAAE,SAAS,CAAC,CAAA;IAC1C,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;IACrB,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;IAEvB,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QAClC,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,eAAe,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;IACvG,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACnF,KAAK,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,OAAO,EAAE,CAAC;QACtC,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,KAAK,oBAAoB,MAAM,GAAG,EAAE,CAAC,CAAA;IAClF,CAAC;IACD,IAAI,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACrD,KAAK,CAAC,IAAI,CAAC;YACT,KAAK,EAAE,SAAS;YAChB,OAAO,EACL,uGAAuG;gBACvG,gEAAgE;SACnE,CAAC,CAAA;IACJ,CAAC;IACD,IAAI,MAAM,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;QAC5B,KAAK,CAAC,IAAI,CAAC;YACT,KAAK,EAAE,OAAO;YACd,OAAO,EACL,+FAA+F;gBAC/F,kDAAkD;SACrD,CAAC,CAAA;IACJ,CAAC;IACD,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;QAC9C,KAAK,CAAC,IAAI,CAAC;YACT,KAAK,EAAE,OAAO;YACd,OAAO,EAAE,GAAG,MAAM,iHAAiH;SACpI,CAAC,CAAA;IACJ,CAAC;IACD,IAAI,MAAM,CAAC,KAAK,CAAC,cAAc,GAAG,CAAC,EAAE,CAAC;QACpC,KAAK,CAAC,IAAI,CAAC;YACT,KAAK,EAAE,OAAO;YACd,OAAO,EACL,GAAG,MAAM,CAAC,KAAK,CAAC,cAAc,8EAA8E;gBAC5G,qHAAqH;SACxH,CAAC,CAAA;IACJ,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClC,KAAK,CAAC,IAAI,CAAC;YACT,KAAK,EAAE,OAAO;YACd,OAAO,EACL,qCAAqC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,sCAAsC;gBAC1G,0HAA0H;SAC7H,CAAC,CAAA;IACJ,CAAC;IACD,IAAI,MAAM,CAAC,KAAK,CAAC,YAAY,GAAG,CAAC,EAAE,CAAC;QAClC,KAAK,CAAC,IAAI,CAAC;YACT,KAAK,EAAE,SAAS;YAChB,OAAO,EACL,GAAG,MAAM,CAAC,KAAK,CAAC,YAAY,qFAAqF;gBACjH,8FAA8F;SACjG,CAAC,CAAA;IACJ,CAAC;IACD,IAAI,MAAM,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC;QAC/B,KAAK,CAAC,IAAI,CAAC;YACT,KAAK,EAAE,OAAO;YACd,OAAO,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,gGAAgG;SACnI,CAAC,CAAA;IACJ,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC;QAC/C,KAAK,CAAC,IAAI,CAAC;YACT,KAAK,EAAE,OAAO;YACd,OAAO,EACL,GAAG,KAAK,kBAAkB,MAAM,CAAC,KAAK,CAAC,YAAY,IAAI,GAAG,4DAA4D;gBACtH,kHAAkH;gBAClH,yGAAyG;SAC5G,CAAC,CAAA;IACJ,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;QAC1B,KAAK,CAAC,IAAI,CAAC;YACT,KAAK,EAAE,OAAO;YACd,OAAO,EACL,yGAAyG;gBACzG,sGAAsG;gBACtG,2GAA2G;SAC9G,CAAC,CAAA;IACJ,CAAC;IACD,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QACtB,KAAK,CAAC,IAAI,CAAC;YACT,KAAK,EAAE,OAAO;YACd,OAAO,EACL,MAAM,CAAC,EAAE,KAAK,UAAU;gBACtB,CAAC,CAAC,yGAAyG;oBACzG,2BAA2B;gBAC7B,CAAC,CAAC,4CAA4C,MAAM,CAAC,SAAS,IAAI,gCAAgC,UAAU;oBAC1G,gGAAgG;oBAChG,sBAAsB;SAC7B,CAAC,CAAA;IACJ,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAA;IAChE,2EAA2E;IAC3E,2EAA2E;IAC3E,0EAA0E;IAC1E,yEAAyE;IACzE,oEAAoE;IACpE,qEAAqE;IACrE,4EAA4E;IAC5E,sEAAsE;IACtE,+DAA+D;IAC/D,kDAAkD;IAClD,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,KAAK,SAAS,CAAC,CAAA;IACrF,MAAM,KAAK,GACT,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC;QAC1B,MAAM,CAAC,KAAK,CAAC,SAAS,KAAK,CAAC;QAC5B,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC;QACrC,8EAA8E;QAC9E,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC;QACzC,QAAQ,CAAC,MAAM,KAAK,CAAC;QACrB,0EAA0E;QAC1E,qEAAqE;QACrE,MAAM,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI;QAC9B,CAAC,CAAC,MAAM,CAAC,MAAM,IAAI,OAAO,KAAK,CAAC,CAAC,CAAA;IACnC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAA;AACzB,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyDG;AACH,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,WAAW;IACrD,MAAM,CAAC,WAAW,GAAG,iBAAiB,CAAA;IACtC,MAAM,CAAC,WAAW,GAAG,kGAAkG,CAAA;IAEvH,MAAM,CAAC,OAAO,GAAmB;QAC/B,QAAQ,EAAE,IAAI;KACf,CAAA;IA+BD,KAAK,CAAC,GAAG;QACP,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;YACb,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,yFAAyF;gBACvF,+CAA+C,CAClD,CAAA;YACD,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAA;YACjB,OAAM;QACR,CAAC;QACD,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAA;QACtE,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,SAAS,CAAC;YAC3C,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACvD,MAAM,EAAE,IAAI,CAAC,MAAM,KAAK,IAAI;YAC5B,KAAK,EAAE,IAAI,CAAC,KAAK,KAAK,IAAI;YAC1B,eAAe,EAAE,IAAI,CAAC,eAAe,KAAK,IAAI;YAC9C,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,SAAS,EAAE,IAAI,CAAC,SAAS;SAC1B,CAAC,CAAA;QAEF,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,cAAc,CAAC,MAAM,CAAC,CAAA;QAC/C,KAAK,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,KAAK;YAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAA;QAEnE,MAAM,OAAO,GACX,YAAY,MAAM,CAAC,OAAO,kBAAkB,MAAM,CAAC,OAAO,aAAa,MAAM,CAAC,SAAS,IAAI;YAC3F,UAAU,MAAM,CAAC,KAAK,cAAc,MAAM,CAAC,OAAO,EAAE,CAAA;QACtD,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAClB,IAAI,KAAK,EAAE,CAAC;gBACV,IAAI,CAAC,MAAM,CAAC,OAAO,CACjB,gBAAgB,IAAI,CAAC,EAAE,kBAAkB,MAAM,CAAC,SAAS,IAAI,SAAS,oBAAoB,OAAO,IAAI,CACtG,CAAA;gBACD,OAAM;YACR,CAAC;YACD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,IAAI,CAAC,EAAE,MAAM,OAAO,sCAAsC,CAAC,CAAA;YAC5F,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAA;YACjB,OAAM;QACR,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,EAAE,mBAAmB,OAAO,GAAG,CAAC,CAAA;QAC7D,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,IAAI,CAAC,MAAM,CAAC,OAAO,CACjB,4GAA4G,CAC7G,CAAA;YACD,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAA;QACnB,CAAC;IACH,CAAC;;AAxEO;IADP,KAAK,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,mEAAmE,EAAE,CAAC;;0CACrE;AAKtB;IAHP,KAAK,CAAC,MAAM,CAAC;QACZ,WAAW,EAAE,wGAAwG;KACtH,CAAC;;4CAC8B;AAGxB;IADP,KAAK,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,kEAAkE,EAAE,CAAC;;8CACjF;AAG3B;IADP,KAAK,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,2EAA2E,EAAE,CAAC;;6CAC1E;AAM1B;IAJP,KAAK,CAAC,OAAO,CAAC;QACb,IAAI,EAAE,mBAAmB;QACzB,WAAW,EAAE,4GAA4G;KAC1H,CAAC;;uDAC0C;AAGpC;IADP,KAAK,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE,0EAA0E,EAAE,CAAC;;iDACzF;AAM7B;IAJP,KAAK,CAAC,MAAM,CAAC;QACZ,IAAI,EAAE,YAAY;QAClB,WAAW,EAAE,qJAAqJ;KACnK,CAAC;;iDACmC"}
|
|
1
|
+
{"version":3,"file":"authz_reconcile.js","sourceRoot":"","sources":["../../commands/authz_reconcile.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,28 +3,74 @@ import { CommandOptions } from '@adonisjs/core/types/ace';
|
|
|
3
3
|
import type { RelationsReconcileOptions, RelationsReconcileReport } from '../src/relations/reconcile.js';
|
|
4
4
|
import type { AuthorizationManager } from '../src/manager.js';
|
|
5
5
|
/**
|
|
6
|
-
* **La
|
|
7
|
-
*
|
|
8
|
-
* manager de roles (regla 2 de pureza), así que
|
|
9
|
-
*
|
|
6
|
+
* **La ÚNICA vía pública para reconciliar relaciones** (L-1 · J1; cierre del
|
|
7
|
+
* auditor de alpha.10 · R1/R4). `reconcileRelations` (`src/relations/`) es el
|
|
8
|
+
* primitivo: no puede ver al manager de roles (regla 2 de pureza), así que no
|
|
9
|
+
* sabe cuál es el driver ACTIVO ni puede tomar la ventana durable. Hasta el
|
|
10
|
+
* cierre se exportaba desde la raíz del paquete y el README lo recomendaba para
|
|
11
|
+
* K particiones: esa vía llegaba a la dirección rancia sin guard y sin freeze.
|
|
12
|
+
* Ahora sale de la raíz y TODA migración de relaciones pasa por aquí —el
|
|
13
|
+
* comando, un bucle por particiones de la plataforma—, que es el punto único
|
|
14
|
+
* donde viven las dos garantías:
|
|
10
15
|
*
|
|
11
|
-
* -
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
16
|
+
* - **la dirección RANCIA** (alpha.10 · S1, gemelo de `manager.reconcile`):
|
|
17
|
+
* hacia el driver de relaciones activo (`relations.default ?? default`)
|
|
18
|
+
* ningún origen distinto pasa. **El origen y el destino se RESUELVEN aquí,
|
|
19
|
+
* por su clave, desde el config del manager** (R4): hasta el cierre la
|
|
20
|
+
* función recibía las instancias `from`/`to` y, aparte, las ETIQUETAS
|
|
21
|
+
* `toKey`/`fromKey`/`activeKey`, y juzgaba las etiquetas — un bucle con
|
|
22
|
+
* `fromKey === toKey` copiado y pegado, o un `activeKey` que contradecía al
|
|
23
|
+
* manager, escribía la compartición retirada en el activo. La identidad es
|
|
24
|
+
* la de la factory resuelta: dos claves con la MISMA factory son el mismo
|
|
25
|
+
* driver (un alias del activo también se niega);
|
|
26
|
+
* - **la ventana durable**: `--dry-run` **NO congela** (el verificador es
|
|
27
|
+
* read-only y está hecho para un cron); la pasada que ESCRIBE corre bajo
|
|
28
|
+
* `withFrozenWrites` con `kind: 'reconcile'` y la ventana del OPERADOR como
|
|
29
|
+
* contexto propio; un freeze vivo de OTRA pasada es 423; el reporte publica
|
|
30
|
+
* `frozen` —fence, lease, `window` y **`lapsed`**— y un lease perdido a
|
|
31
|
+
* mitad significa que la pasada NO se certifica (exit ≠ 0).
|
|
19
32
|
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
* caso sin montar un ace.
|
|
33
|
+
* Límite declarado (auditor · R5): el activo es el que dice el config del
|
|
34
|
+
* PROCESO que ejecuta esto; un Job con otro entorno apaga el guard. El sello
|
|
35
|
+
* durable del driver activo está en el roadmap (2.5).
|
|
24
36
|
*/
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
37
|
+
/**
|
|
38
|
+
* **Las opciones PÚBLICAS de `runRelationsReconcile`** (cierre-2 de alpha.10 · C7):
|
|
39
|
+
* las del primitivo sin `from`/`to` (instancias: retiradas) más las claves. Hasta el
|
|
40
|
+
* cierre-2 la raíz exportaba `RelationsReconcileOptions` —la forma del primitivo, con
|
|
41
|
+
* `from`/`to` obligatorios— y no esta.
|
|
42
|
+
*/
|
|
43
|
+
export type RunRelationsReconcileOptions = Omit<RelationsReconcileOptions, 'from' | 'to'> & {
|
|
44
|
+
/** Clave (en `relations.drivers` del config del manager) del DESTINO. */
|
|
45
|
+
toKey: string;
|
|
46
|
+
/** Clave del ORIGEN (el de `--from` o el elegido por descarte). */
|
|
47
|
+
fromKey: string;
|
|
48
|
+
/** La salida humana de `E_AUTHZ_STALE_SOURCE_REFUSED`. */
|
|
49
|
+
allowStaleSource?: boolean;
|
|
50
|
+
};
|
|
51
|
+
/**
|
|
52
|
+
* Límites DECLARADOS de la identidad (cierre-2 de alpha.10 · C1 y C6):
|
|
53
|
+
* - la identidad es la REFERENCIA de la factory: dos factories DISTINTAS que
|
|
54
|
+
* construyen el mismo backend (`fga: () => new OpenFgaRelationsDriver(…mismo
|
|
55
|
+
* store…)`) NO se detectan — el alias pasa el guard. No se construye nada antes
|
|
56
|
+
* del guard, así que no hay backend que comparar; identidad declarada por el
|
|
57
|
+
* driver ⇒ roadmap 2.5. Registra un alias con la MISMA referencia
|
|
58
|
+
* (`const fga = () => …; drivers: { openfga: fga, alias: fga }`) o no lo registres.
|
|
59
|
+
* - `authorization` es estructural (`Pick<…>`): un objeto que FALSEA
|
|
60
|
+
* `relationsDriverKey`/`relationsDriverFactory` decide el activo y las factories.
|
|
61
|
+
* Pásale el manager del servicio, nunca uno construido o envuelto a mano.
|
|
62
|
+
*/
|
|
63
|
+
export declare function runRelationsReconcile(authorization: Pick<AuthorizationManager, 'withFrozenWrites' | 'relationsDriverKey' | 'relationsDriverFactory'>, options: RunRelationsReconcileOptions): Promise<RelationsReconcileReport>;
|
|
64
|
+
/**
|
|
65
|
+
* Cómo se nombra la ventana en la que corrió la pasada (2.4.0-alpha.10 · 3):
|
|
66
|
+
* la del OPERADOR dice si caduca y cuándo — hasta alpha.9 una ventana abierta
|
|
67
|
+
* con `--lease-ms` salía como «ventana del operador» a secas, sin caducidad.
|
|
68
|
+
*/
|
|
69
|
+
export declare function frozenWindowLabel(frozen: {
|
|
70
|
+
leaseMs: number | null;
|
|
71
|
+
untilMs?: number | null;
|
|
72
|
+
window?: 'operator' | 'own' | 'enclosing';
|
|
73
|
+
}): string;
|
|
28
74
|
/**
|
|
29
75
|
* Las líneas del reporte de `authz:relations:reconcile` y si la pasada es
|
|
30
76
|
* «limpia», en una función PURA (mismo patrón que `reconcileLines` de roles):
|
|
@@ -90,6 +136,7 @@ export default class AuthzRelationsReconcile extends BaseCommand {
|
|
|
90
136
|
dryRun: boolean | undefined;
|
|
91
137
|
prune: boolean | undefined;
|
|
92
138
|
allowMassDelete: boolean | undefined;
|
|
139
|
+
allowStaleSource: boolean | undefined;
|
|
93
140
|
partitionType: string | undefined;
|
|
94
141
|
partitionUuid: string | undefined;
|
|
95
142
|
run(): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authz_relations_reconcile.d.ts","sourceRoot":"","sources":["../../commands/authz_relations_reconcile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAS,MAAM,oBAAoB,CAAA;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AACzD,OAAO,KAAK,EAAE,yBAAyB,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAA;AACxG,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"authz_relations_reconcile.d.ts","sourceRoot":"","sources":["../../commands/authz_relations_reconcile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAS,MAAM,oBAAoB,CAAA;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AACzD,OAAO,KAAK,EAAE,yBAAyB,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAA;AACxG,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAA;AAG7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH;;;;;GAKG;AACH,MAAM,MAAM,4BAA4B,GAAG,IAAI,CAAC,yBAAyB,EAAE,MAAM,GAAG,IAAI,CAAC,GAAG;IAC1F,yEAAyE;IACzE,KAAK,EAAE,MAAM,CAAA;IACb,mEAAmE;IACnE,OAAO,EAAE,MAAM,CAAA;IACf,0DAA0D;IAC1D,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAC3B,CAAA;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,qBAAqB,CACzC,aAAa,EAAE,IAAI,CAAC,oBAAoB,EAAE,kBAAkB,GAAG,oBAAoB,GAAG,wBAAwB,CAAC,EAC/G,OAAO,EAAE,4BAA4B,GACpC,OAAO,CAAC,wBAAwB,CAAC,CAkFnC;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE;IACxC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,MAAM,CAAC,EAAE,UAAU,GAAG,KAAK,GAAG,WAAW,CAAA;CAC1C,GAAG,MAAM,CAaT;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,wBAAwB,GAAG;IACzE,KAAK,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,KAAK,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACjF,KAAK,EAAE,OAAO,CAAA;CACf,CA8KA;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,MAAM,CAAC,OAAO,OAAO,uBAAwB,SAAQ,WAAW;IAC9D,MAAM,CAAC,WAAW,SAA8B;IAChD,MAAM,CAAC,WAAW,SAAgG;IAElH,MAAM,CAAC,OAAO,EAAE,cAAc,CAE7B;IAGO,EAAE,EAAE,MAAM,GAAG,SAAS,CAAA;IAGtB,IAAI,EAAE,MAAM,GAAG,SAAS,CAAA;IAGxB,MAAM,EAAE,OAAO,GAAG,SAAS,CAAA;IAG3B,KAAK,EAAE,OAAO,GAAG,SAAS,CAAA;IAK1B,eAAe,EAAE,OAAO,GAAG,SAAS,CAAA;IAMpC,gBAAgB,EAAE,OAAO,GAAG,SAAS,CAAA;IAGrC,aAAa,EAAE,MAAM,GAAG,SAAS,CAAA;IAGjC,aAAa,EAAE,MAAM,GAAG,SAAS,CAAA;IAEnC,GAAG;CAyJV"}
|