@jantstack/adonis-authz 2.4.0-alpha.7 → 2.4.0-alpha.9
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 +26 -4
- 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 +0 -1
- package/build/commands/authz_freeze.js.map +1 -1
- package/build/commands/authz_reconcile.d.ts +4 -1
- package/build/commands/authz_reconcile.d.ts.map +1 -1
- package/build/commands/authz_reconcile.js +39 -5
- package/build/commands/authz_reconcile.js.map +1 -1
- package/build/commands/authz_relations_reconcile.d.ts.map +1 -1
- package/build/commands/authz_relations_reconcile.js +19 -5
- package/build/commands/authz_relations_reconcile.js.map +1 -1
- package/build/commands/authz_scopes_relay.d.ts +32 -0
- package/build/commands/authz_scopes_relay.d.ts.map +1 -1
- package/build/commands/authz_scopes_relay.js +78 -3
- package/build/commands/authz_scopes_relay.js.map +1 -1
- package/build/commands/authz_scopes_requeue.d.ts +17 -0
- package/build/commands/authz_scopes_requeue.d.ts.map +1 -1
- package/build/commands/authz_scopes_requeue.js +82 -6
- package/build/commands/authz_scopes_requeue.js.map +1 -1
- package/build/index.d.ts +1 -1
- package/build/index.d.ts.map +1 -1
- package/build/index.js +1 -1
- package/build/index.js.map +1 -1
- package/build/src/drivers/database_relations_driver.d.ts +17 -0
- package/build/src/drivers/database_relations_driver.d.ts.map +1 -1
- package/build/src/drivers/database_relations_driver.js +48 -5
- package/build/src/drivers/database_relations_driver.js.map +1 -1
- package/build/src/drivers/openfga_driver.d.ts +46 -3
- package/build/src/drivers/openfga_driver.d.ts.map +1 -1
- package/build/src/drivers/openfga_driver.js +116 -8
- package/build/src/drivers/openfga_driver.js.map +1 -1
- package/build/src/errors.d.ts +21 -0
- package/build/src/errors.d.ts.map +1 -1
- package/build/src/errors.js +7 -0
- package/build/src/errors.js.map +1 -1
- package/build/src/manager.d.ts +47 -2
- package/build/src/manager.d.ts.map +1 -1
- package/build/src/manager.js +509 -226
- package/build/src/manager.js.map +1 -1
- package/build/src/relations/manager.d.ts +19 -3
- package/build/src/relations/manager.d.ts.map +1 -1
- package/build/src/relations/manager.js +33 -8
- package/build/src/relations/manager.js.map +1 -1
- package/build/src/scope_outbox.d.ts +14 -0
- package/build/src/scope_outbox.d.ts.map +1 -1
- package/build/src/scope_outbox.js +28 -0
- package/build/src/scope_outbox.js.map +1 -1
- package/build/src/shared/transaction_guard.d.ts +5 -2
- package/build/src/shared/transaction_guard.d.ts.map +1 -1
- package/build/src/shared/transaction_guard.js +16 -2
- package/build/src/shared/transaction_guard.js.map +1 -1
- package/build/src/testing/scope_outbox_contract.d.ts +10 -0
- package/build/src/testing/scope_outbox_contract.d.ts.map +1 -1
- package/build/src/testing/scope_outbox_contract.js +71 -1
- package/build/src/testing/scope_outbox_contract.js.map +1 -1
- package/build/src/types.d.ts +106 -1
- package/build/src/types.d.ts.map +1 -1
- package/build/src/types.js.map +1 -1
- package/package.json +1 -1
|
@@ -8,6 +8,56 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
8
8
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
9
|
};
|
|
10
10
|
import { BaseCommand, flags } from '@adonisjs/core/ace';
|
|
11
|
+
/**
|
|
12
|
+
* **La edad de la cola en el comando** (2.4.0-alpha.8; panel relay 2,
|
|
13
|
+
* cuestión 5), en una función PURA (patrón `requeueLines`): qué se imprime y
|
|
14
|
+
* si `--max-age` la convierte en salida ≠ 0.
|
|
15
|
+
*
|
|
16
|
+
* - Sin cabeza con fecha (`pendingAgeMs === null`: cola vacía, solo
|
|
17
|
+
* aparcadas, o una outbox de terceros sin `createdAt`) no se dice nada y
|
|
18
|
+
* nunca se alarma.
|
|
19
|
+
* - Con edad, se INFORMA siempre (es lo que faltaba en el B2 de COGNITIV:
|
|
20
|
+
* diez pasadas con el store caído y nadie sabía desde cuándo).
|
|
21
|
+
* - **Solo con umbral** (`--max-age=<ms>`) y edad POR ENCIMA es `exceeded`
|
|
22
|
+
* (exit ≠ 0): sin umbral un cron no puede quedarse en rojo para siempre
|
|
23
|
+
* por una cola que simplemente tiene backlog. Un umbral inválido lanza.
|
|
24
|
+
*/
|
|
25
|
+
export function queueAgeLines(queue, maxAgeMs, remaining = false) {
|
|
26
|
+
if (maxAgeMs !== undefined && !(Number.isInteger(maxAgeMs) && maxAgeMs >= 0)) {
|
|
27
|
+
throw new TypeError(`authz:scopes:relay: --max-age debe ser un entero >= 0 en milisegundos (llegó ${String(maxAgeMs)})`);
|
|
28
|
+
}
|
|
29
|
+
if (queue.pendingAgeMs === null || queue.oldestPendingAt === null) {
|
|
30
|
+
// «Cola vacía» y «no sé la edad» no son lo mismo (cierre alpha.8, 🟡 2 del
|
|
31
|
+
// auditor): con entradas pendientes y una outbox que no devuelve `createdAt`
|
|
32
|
+
// la alarma por edad no puede vigilar nada — y con `--max-age` eso es un
|
|
33
|
+
// fallo, no un silencio.
|
|
34
|
+
if (!remaining)
|
|
35
|
+
return { lines: [], exceeded: false };
|
|
36
|
+
const message = 'Hay entradas pendientes pero la outbox no devuelve `createdAt` (par de capacidad `createdAt` del contrato): ' +
|
|
37
|
+
'la edad de la cola es DESCONOCIDA y --max-age no puede vigilarla.';
|
|
38
|
+
return maxAgeMs === undefined
|
|
39
|
+
? { lines: [{ level: 'warning', message }], exceeded: false }
|
|
40
|
+
: { lines: [{ level: 'error', message }], exceeded: true };
|
|
41
|
+
}
|
|
42
|
+
const since = queue.oldestPendingAt.toISOString();
|
|
43
|
+
if (maxAgeMs !== undefined && queue.pendingAgeMs > maxAgeMs) {
|
|
44
|
+
return {
|
|
45
|
+
exceeded: true,
|
|
46
|
+
lines: [
|
|
47
|
+
{
|
|
48
|
+
level: 'error',
|
|
49
|
+
message: `La entrada pendiente más antigua de la cola lleva ${queue.pendingAgeMs} ms sin aplicarse (desde ${since}), ` +
|
|
50
|
+
`por encima de --max-age=${maxAgeMs}: la cola no avanza (¿el backend lleva caído desde entonces? un 503 no consume ` +
|
|
51
|
+
'intento y no aparca nada). Mira `failures` de esta pasada.',
|
|
52
|
+
},
|
|
53
|
+
],
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
return {
|
|
57
|
+
exceeded: false,
|
|
58
|
+
lines: [{ level: 'info', message: `Cabeza de la cola: pendiente desde ${since} (${queue.pendingAgeMs} ms; medida con el reloj de quien encoló).` }],
|
|
59
|
+
};
|
|
60
|
+
}
|
|
11
61
|
/**
|
|
12
62
|
* Drena la OUTBOX del árbol de scopes y aplica los cambios al driver
|
|
13
63
|
* (3b-2d; panel 2, cruce 4 · S5).
|
|
@@ -20,6 +70,14 @@ import { BaseCommand, flags } from '@adonisjs/core/ace';
|
|
|
20
70
|
* node ace authz:scopes:relay --dry-run # solo dice qué haría
|
|
21
71
|
* node ace authz:scopes:relay --limit 500 # una pasada acotada
|
|
22
72
|
* node ace authz:scopes:relay --only=12,13 # SOLO esas entradas (2.4.0-alpha.5)
|
|
73
|
+
* node ace authz:scopes:relay --wait-lease-ms=5000 # espera el lease hasta 5 s en vez de salir `busy` (2.4.0-alpha.8)
|
|
74
|
+
* node ace authz:scopes:relay --max-age=300000 # exit ≠ 0 si la pendiente más antigua lleva > 5 min (2.4.0-alpha.8)
|
|
75
|
+
*
|
|
76
|
+
* **`--max-age`** (alpha.8, cuestión 5 del panel relay 2): el reporte lleva
|
|
77
|
+
* SIEMPRE la edad de la cabeza global de la cola (`queue.pendingAgeMs`, con
|
|
78
|
+
* el reloj de quien encoló) y se imprime; con umbral, superarlo es salida ≠ 0
|
|
79
|
+
* — la alarma que faltaba cuando el store está caído (un 503 no consume
|
|
80
|
+
* intento: `attempts` y `dead` se quedan a cero). Sin umbral solo informa.
|
|
23
81
|
*
|
|
24
82
|
* **`--only`** (alpha.5 · R1): releva solo los ids del recibo que devolvió
|
|
25
83
|
* `scopes.attached/moved/detached` (`{ queued }`). El orden por clave no se
|
|
@@ -87,7 +145,14 @@ export default class AuthzScopesRelay extends BaseCommand {
|
|
|
87
145
|
limit: this.limit,
|
|
88
146
|
batchSize: this.batchSize,
|
|
89
147
|
only,
|
|
148
|
+
...(this.waitLeaseMs === undefined ? {} : { waitForLeaseMs: this.waitLeaseMs }),
|
|
90
149
|
});
|
|
150
|
+
// La EDAD de la cola, siempre; con `--max-age`, la alarma (2.4.0-alpha.8).
|
|
151
|
+
const age = queueAgeLines(report.queue, this.maxAge, report.remaining);
|
|
152
|
+
for (const line of age.lines)
|
|
153
|
+
this.logger[line.level](line.message);
|
|
154
|
+
if (age.exceeded)
|
|
155
|
+
this.exitCode = 1;
|
|
91
156
|
const linea = (item) => {
|
|
92
157
|
const { change } = item;
|
|
93
158
|
const scope = (s) => `${s.type}:${s.uuid ?? ''}`;
|
|
@@ -166,7 +231,6 @@ export default class AuthzScopesRelay extends BaseCommand {
|
|
|
166
231
|
}
|
|
167
232
|
__decorate([
|
|
168
233
|
flags.boolean({
|
|
169
|
-
name: 'dry-run',
|
|
170
234
|
description: 'List the pending tree changes without applying any of them',
|
|
171
235
|
}),
|
|
172
236
|
__metadata("design:type", Object)
|
|
@@ -176,14 +240,25 @@ __decorate([
|
|
|
176
240
|
__metadata("design:type", Object)
|
|
177
241
|
], AuthzScopesRelay.prototype, "limit", void 0);
|
|
178
242
|
__decorate([
|
|
179
|
-
flags.number({
|
|
243
|
+
flags.number({ description: 'How many pending changes to read per round trip' }),
|
|
180
244
|
__metadata("design:type", Object)
|
|
181
245
|
], AuthzScopesRelay.prototype, "batchSize", void 0);
|
|
182
246
|
__decorate([
|
|
183
247
|
flags.array({
|
|
184
|
-
name: 'only',
|
|
185
248
|
description: 'Apply ONLY these outbox ids (the receipt of scopes.*), comma-separated or repeated; dependencies are deferred, never skipped',
|
|
186
249
|
}),
|
|
187
250
|
__metadata("design:type", Object)
|
|
188
251
|
], AuthzScopesRelay.prototype, "only", void 0);
|
|
252
|
+
__decorate([
|
|
253
|
+
flags.number({
|
|
254
|
+
description: 'Wait up to this many ms for the relay lease instead of reporting busy at once (default 0; needs a pool >= 2)',
|
|
255
|
+
}),
|
|
256
|
+
__metadata("design:type", Object)
|
|
257
|
+
], AuthzScopesRelay.prototype, "waitLeaseMs", void 0);
|
|
258
|
+
__decorate([
|
|
259
|
+
flags.number({
|
|
260
|
+
description: 'Exit ≠ 0 if the oldest pending entry of the whole queue is older than this many ms (without it the age is only reported)',
|
|
261
|
+
}),
|
|
262
|
+
__metadata("design:type", Object)
|
|
263
|
+
], AuthzScopesRelay.prototype, "maxAge", void 0);
|
|
189
264
|
//# sourceMappingURL=authz_scopes_relay.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authz_scopes_relay.js","sourceRoot":"","sources":["../../commands/authz_scopes_relay.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"authz_scopes_relay.js","sourceRoot":"","sources":["../../commands/authz_scopes_relay.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,6 +12,11 @@ import type { ScopeRequeueConflict, ScopeRequeueReport } from '../src/types.js';
|
|
|
12
12
|
* (que entra igual, con este mismo diff delante) y `authz:reconcile`.
|
|
13
13
|
* - `report`: se reencoló. Con `forced` y `overrides`, el diff se imprime
|
|
14
14
|
* como AVISO: forzar no es un éxito mudo.
|
|
15
|
+
* - `report.relay` (con `--apply`, 2.4.0-alpha.8): la pasada que relevó SOLO
|
|
16
|
+
* lo reencolado, bajo el mismo lease. `busy` ⇒ NO se reencoló nada (todo o
|
|
17
|
+
* nada) y se sale ≠ 0 con la letra («otra pasada tiene el lease; reintenta,
|
|
18
|
+
* o `requeue` sin `--apply`»); cada entrada dice si se aplicó, falló o quedó
|
|
19
|
+
* aplazada, y solo es limpio si TODO lo reencolado se aplicó.
|
|
15
20
|
*/
|
|
16
21
|
export declare function requeueLines(input: {
|
|
17
22
|
refused?: ScopeRequeueConflict[];
|
|
@@ -30,6 +35,8 @@ export declare function requeueLines(input: {
|
|
|
30
35
|
* node ace authz:scopes:requeue --id=12 # una
|
|
31
36
|
* node ace authz:scopes:requeue --id=12,13 # varias (o --id repetido)
|
|
32
37
|
* node ace authz:scopes:requeue --id=12 --force # aunque revierta lo aplicado después (diff impreso)
|
|
38
|
+
* node ace authz:scopes:requeue --id=12 --apply # y la aplica en la MISMA llamada (2.4.0-alpha.8)
|
|
39
|
+
* node ace authz:scopes:requeue --id=12 --apply --wait-lease-ms=5000 # esperando el lease si el cron lo tiene
|
|
33
40
|
*
|
|
34
41
|
* Una entrada aparcada (`sqlScopeOutbox({ maxAttempts })`, 5 por defecto)
|
|
35
42
|
* no se reintenta sola: el relay la reporta en cada pasada y sale ≠ 0. Cuando
|
|
@@ -47,6 +54,14 @@ export declare function requeueLines(input: {
|
|
|
47
54
|
* (decisión del dueño del 2026-09-09 (2)): imprime el diff y entra igual. Nunca
|
|
48
55
|
* en una ruta alcanzable por HTTP.
|
|
49
56
|
*
|
|
57
|
+
* **`--apply` (2.4.0-alpha.8)**: reencola Y releva SOLO esas entradas en la
|
|
58
|
+
* misma llamada, bajo UN lease (medido: sin esto la reencolada volvía con su
|
|
59
|
+
* id original y la siguiente pasada `only` del tenant salía `depends-on`; el
|
|
60
|
+
* incidente no se cerraba con un comando). Explícito, jamás por defecto: el
|
|
61
|
+
* comando pasa a ESCRIBIR en el backend. No compone con `--force` (500). Pasa
|
|
62
|
+
* la barrera del freeze. Con el lease tomado por otra pasada NO reencola nada
|
|
63
|
+
* y sale ≠ 0 (`--wait-lease-ms` espera, acotado).
|
|
64
|
+
*
|
|
50
65
|
* Es una operación de PLATAFORMA (como `authz:scopes:relay`): sin actor, sin
|
|
51
66
|
* `within`, y no se expone por HTTP.
|
|
52
67
|
*/
|
|
@@ -56,6 +71,8 @@ export default class AuthzScopesRequeue extends BaseCommand {
|
|
|
56
71
|
static options: CommandOptions;
|
|
57
72
|
id: string[] | undefined;
|
|
58
73
|
force: boolean | undefined;
|
|
74
|
+
apply: boolean | undefined;
|
|
75
|
+
waitLeaseMs: number | undefined;
|
|
59
76
|
/** `--id=12,13` o `--id=12 --id=13`: ids numéricos como número, el resto como cadena. */
|
|
60
77
|
static parseIds(values: string[] | undefined): Array<string | number> | undefined;
|
|
61
78
|
run(): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authz_scopes_requeue.d.ts","sourceRoot":"","sources":["../../commands/authz_scopes_requeue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAS,MAAM,oBAAoB,CAAA;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AACzD,OAAO,KAAK,EAA0B,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AAYvG
|
|
1
|
+
{"version":3,"file":"authz_scopes_requeue.d.ts","sourceRoot":"","sources":["../../commands/authz_scopes_requeue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAS,MAAM,oBAAoB,CAAA;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AACzD,OAAO,KAAK,EAA0B,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AAYvG;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE;IAAE,OAAO,CAAC,EAAE,oBAAoB,EAAE,CAAC;IAAC,MAAM,CAAC,EAAE,kBAAkB,CAAA;CAAE,GAAG;IACtG,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,CAqFA;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,MAAM,CAAC,OAAO,OAAO,kBAAmB,SAAQ,WAAW;IACzD,MAAM,CAAC,WAAW,SAAyB;IAC3C,MAAM,CAAC,WAAW,SAAkH;IAEpI,MAAM,CAAC,OAAO,EAAE,cAAc,CAE7B;IAKO,EAAE,EAAE,MAAM,EAAE,GAAG,SAAS,CAAA;IAKxB,KAAK,EAAE,OAAO,GAAG,SAAS,CAAA;IAK1B,KAAK,EAAE,OAAO,GAAG,SAAS,CAAA;IAK1B,WAAW,EAAE,MAAM,GAAG,SAAS,CAAA;IAEvC,yFAAyF;IACzF,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,GAAG,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,GAAG,SAAS;IAS3E,GAAG;CAuBV"}
|
|
@@ -28,6 +28,11 @@ function linea(item) {
|
|
|
28
28
|
* (que entra igual, con este mismo diff delante) y `authz:reconcile`.
|
|
29
29
|
* - `report`: se reencoló. Con `forced` y `overrides`, el diff se imprime
|
|
30
30
|
* como AVISO: forzar no es un éxito mudo.
|
|
31
|
+
* - `report.relay` (con `--apply`, 2.4.0-alpha.8): la pasada que relevó SOLO
|
|
32
|
+
* lo reencolado, bajo el mismo lease. `busy` ⇒ NO se reencoló nada (todo o
|
|
33
|
+
* nada) y se sale ≠ 0 con la letra («otra pasada tiene el lease; reintenta,
|
|
34
|
+
* o `requeue` sin `--apply`»); cada entrada dice si se aplicó, falló o quedó
|
|
35
|
+
* aplazada, y solo es limpio si TODO lo reencolado se aplicó.
|
|
31
36
|
*/
|
|
32
37
|
export function requeueLines(input) {
|
|
33
38
|
const lines = [];
|
|
@@ -59,17 +64,63 @@ export function requeueLines(input) {
|
|
|
59
64
|
return { lines, clean: false };
|
|
60
65
|
}
|
|
61
66
|
const report = input.report;
|
|
67
|
+
if (report.relay?.busy) {
|
|
68
|
+
lines.push({
|
|
69
|
+
level: 'error',
|
|
70
|
+
message: 'Otra pasada del relay tiene el lease de la cola: con --apply no se ha reencolado NADA (todo o nada: reencolar y no ' +
|
|
71
|
+
'aplicar dejaría la entrada con un solo intento, que la siguiente pasada gastaría). Reintenta (--wait-lease-ms espera ' +
|
|
72
|
+
'a que la suelten), o reencola sin --apply y deja que la próxima pasada la aplique.',
|
|
73
|
+
});
|
|
74
|
+
return { lines, clean: false };
|
|
75
|
+
}
|
|
62
76
|
if (report.forced)
|
|
63
77
|
for (const conflict of report.overrides)
|
|
64
78
|
diff('warning', conflict);
|
|
65
79
|
for (const item of report.requeued)
|
|
66
80
|
lines.push({ level: 'log', message: `reencolada: ${linea(item)}` });
|
|
81
|
+
if (report.relay === undefined) {
|
|
82
|
+
lines.push({
|
|
83
|
+
level: 'success',
|
|
84
|
+
message: `${report.requeued.length} entrada(s) devuelta(s) a la cola con attempts = maxAttempts − 1: si la causa sigue rota ` +
|
|
85
|
+
'vuelve(n) a aparcarse en UNA pasada; si la arreglaste, entra(n) a la primera. Corre node ace authz:scopes:relay.',
|
|
86
|
+
});
|
|
87
|
+
return { lines, clean: true };
|
|
88
|
+
}
|
|
89
|
+
// --apply: qué fue de cada reencolada en la pasada que corrió bajo el mismo lease.
|
|
90
|
+
const relay = report.relay;
|
|
91
|
+
let clean = true;
|
|
92
|
+
for (const entry of relay.entries) {
|
|
93
|
+
if (entry.status === 'applied')
|
|
94
|
+
lines.push({ level: 'log', message: `aplicada: ${linea(entry)}` });
|
|
95
|
+
else if (entry.status === 'deferred') {
|
|
96
|
+
clean = false;
|
|
97
|
+
lines.push({ level: 'warning', message: `aplazada (${entry.reason ?? 'depende de una entrada anterior'}): ${linea(entry)} — no se ha aplicado` });
|
|
98
|
+
}
|
|
99
|
+
else if (entry.status === 'failed') {
|
|
100
|
+
clean = false;
|
|
101
|
+
lines.push({ level: 'error', message: `falló: ${linea(entry)} — ${entry.reason ?? ''}` });
|
|
102
|
+
}
|
|
103
|
+
else if (entry.status === 'dead') {
|
|
104
|
+
clean = false;
|
|
105
|
+
lines.push({ level: 'error', message: `sigue APARCADA: ${linea(entry)}${entry.reason ? ` — ${entry.reason}` : ''}` });
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
if (relay.applied.length !== report.requeued.length)
|
|
109
|
+
clean = false;
|
|
110
|
+
if (relay.remaining) {
|
|
111
|
+
lines.push({
|
|
112
|
+
level: 'warning',
|
|
113
|
+
message: 'Quedan entradas pendientes en la cola (--apply releva SOLO lo reencolado; lo que dependía de ello sigue aplazado): ' +
|
|
114
|
+
'corre node ace authz:scopes:relay, o releva su recibo con --only.',
|
|
115
|
+
});
|
|
116
|
+
}
|
|
67
117
|
lines.push({
|
|
68
|
-
level: 'success',
|
|
69
|
-
message:
|
|
70
|
-
|
|
118
|
+
level: clean ? 'success' : 'warning',
|
|
119
|
+
message: clean
|
|
120
|
+
? `${relay.applied.length} entrada(s) reencolada(s) y aplicada(s) en la misma pasada.`
|
|
121
|
+
: `${relay.applied.length} de ${report.requeued.length} reencolada(s) aplicada(s): mira las líneas de arriba (la causa sigue rota, o el backend no respondió).`,
|
|
71
122
|
});
|
|
72
|
-
return { lines, clean
|
|
123
|
+
return { lines, clean };
|
|
73
124
|
}
|
|
74
125
|
/**
|
|
75
126
|
* **Devuelve entradas APARCADAS de la outbox a la cola** (2.4.0-alpha.5 · R2b;
|
|
@@ -78,6 +129,8 @@ export function requeueLines(input) {
|
|
|
78
129
|
* node ace authz:scopes:requeue --id=12 # una
|
|
79
130
|
* node ace authz:scopes:requeue --id=12,13 # varias (o --id repetido)
|
|
80
131
|
* node ace authz:scopes:requeue --id=12 --force # aunque revierta lo aplicado después (diff impreso)
|
|
132
|
+
* node ace authz:scopes:requeue --id=12 --apply # y la aplica en la MISMA llamada (2.4.0-alpha.8)
|
|
133
|
+
* node ace authz:scopes:requeue --id=12 --apply --wait-lease-ms=5000 # esperando el lease si el cron lo tiene
|
|
81
134
|
*
|
|
82
135
|
* Una entrada aparcada (`sqlScopeOutbox({ maxAttempts })`, 5 por defecto)
|
|
83
136
|
* no se reintenta sola: el relay la reporta en cada pasada y sale ≠ 0. Cuando
|
|
@@ -95,6 +148,14 @@ export function requeueLines(input) {
|
|
|
95
148
|
* (decisión del dueño del 2026-09-09 (2)): imprime el diff y entra igual. Nunca
|
|
96
149
|
* en una ruta alcanzable por HTTP.
|
|
97
150
|
*
|
|
151
|
+
* **`--apply` (2.4.0-alpha.8)**: reencola Y releva SOLO esas entradas en la
|
|
152
|
+
* misma llamada, bajo UN lease (medido: sin esto la reencolada volvía con su
|
|
153
|
+
* id original y la siguiente pasada `only` del tenant salía `depends-on`; el
|
|
154
|
+
* incidente no se cerraba con un comando). Explícito, jamás por defecto: el
|
|
155
|
+
* comando pasa a ESCRIBIR en el backend. No compone con `--force` (500). Pasa
|
|
156
|
+
* la barrera del freeze. Con el lease tomado por otra pasada NO reencola nada
|
|
157
|
+
* y sale ≠ 0 (`--wait-lease-ms` espera, acotado).
|
|
158
|
+
*
|
|
98
159
|
* Es una operación de PLATAFORMA (como `authz:scopes:relay`): sin actor, sin
|
|
99
160
|
* `within`, y no se expone por HTTP.
|
|
100
161
|
*/
|
|
@@ -124,7 +185,11 @@ export default class AuthzScopesRequeue extends BaseCommand {
|
|
|
124
185
|
const { default: authorization } = await import('../services/main.js');
|
|
125
186
|
let result;
|
|
126
187
|
try {
|
|
127
|
-
const report = await authorization.requeueScopeChanges(ids, {
|
|
188
|
+
const report = await authorization.requeueScopeChanges(ids, {
|
|
189
|
+
force: this.force === true,
|
|
190
|
+
apply: this.apply === true,
|
|
191
|
+
...(this.waitLeaseMs === undefined ? {} : { waitForLeaseMs: this.waitLeaseMs }),
|
|
192
|
+
});
|
|
128
193
|
result = requeueLines({ report });
|
|
129
194
|
}
|
|
130
195
|
catch (error) {
|
|
@@ -140,7 +205,6 @@ export default class AuthzScopesRequeue extends BaseCommand {
|
|
|
140
205
|
}
|
|
141
206
|
__decorate([
|
|
142
207
|
flags.array({
|
|
143
|
-
name: 'id',
|
|
144
208
|
description: 'Outbox ids to requeue (the parked entries the relay reports), comma-separated or repeated',
|
|
145
209
|
}),
|
|
146
210
|
__metadata("design:type", Object)
|
|
@@ -151,4 +215,16 @@ __decorate([
|
|
|
151
215
|
}),
|
|
152
216
|
__metadata("design:type", Object)
|
|
153
217
|
], AuthzScopesRequeue.prototype, "force", void 0);
|
|
218
|
+
__decorate([
|
|
219
|
+
flags.boolean({
|
|
220
|
+
description: 'Also relay ONLY the requeued entries in the same call, under one lease (writes to the backend; not with --force)',
|
|
221
|
+
}),
|
|
222
|
+
__metadata("design:type", Object)
|
|
223
|
+
], AuthzScopesRequeue.prototype, "apply", void 0);
|
|
224
|
+
__decorate([
|
|
225
|
+
flags.number({
|
|
226
|
+
description: 'With --apply: wait up to this many ms for the relay lease instead of failing at once (pool >= 2)',
|
|
227
|
+
}),
|
|
228
|
+
__metadata("design:type", Object)
|
|
229
|
+
], AuthzScopesRequeue.prototype, "waitLeaseMs", void 0);
|
|
154
230
|
//# sourceMappingURL=authz_scopes_requeue.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authz_scopes_requeue.js","sourceRoot":"","sources":["../../commands/authz_scopes_requeue.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAIvD,sFAAsF;AACtF,SAAS,KAAK,CAAC,IAA4B;IACzC,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;IACvB,MAAM,KAAK,GAAG,CAAC,CAAyC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,IAAI,EAAE,EAAE,CAAA;IACxF,MAAM,OAAO,GAAG,MAAM,CAAC,EAAE,KAAK,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAA;IAC5E,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,eAAe,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,EAAE,CAAA;IACrE,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;IAC1D,OAAO,IAAI,IAAI,CAAC,EAAE,IAAI,MAAM,CAAC,EAAE,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,GAAG,QAAQ,GAAG,KAAK,EAAE,CAAA;AACvF,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"authz_scopes_requeue.js","sourceRoot":"","sources":["../../commands/authz_scopes_requeue.ts"],"names":[],"mappings":"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"}
|
package/build/index.d.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Entrada pública del paquete.
|
|
3
3
|
* import { AuthorizationManager, APP_SCOPE } from '@jantstack/adonis-authz'
|
|
4
4
|
*/
|
|
5
|
-
export { AuthorizationManager, DEFAULT_MAX_SCOPES, DEFAULT_MAX_DESCENDANTS, MAX_SCOPE_BOUND, DEFAULT_VIEW_MAX_AGE_MS, PARKED_CENSUS_MAX, RELAY_ORIGIN_MAX_HOPS, expandExcludedSubtrees } from './src/manager.js';
|
|
5
|
+
export { AuthorizationManager, DEFAULT_MAX_SCOPES, DEFAULT_MAX_DESCENDANTS, MAX_SCOPE_BOUND, DEFAULT_VIEW_MAX_AGE_MS, PARKED_CENSUS_MAX, RELAY_ORIGIN_MAX_HOPS, RELAY_LEASE_POLL_MS, expandExcludedSubtrees } from './src/manager.js';
|
|
6
6
|
export type { AuthorizationView, ForRequestOptions } from './src/manager.js';
|
|
7
7
|
export { defineConfig } from './src/define_config.js';
|
|
8
8
|
export type { AuthorizationConfig } from './src/define_config.js';
|
package/build/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,eAAe,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
|
package/build/index.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Entrada pública del paquete.
|
|
3
3
|
* import { AuthorizationManager, APP_SCOPE } from '@jantstack/adonis-authz'
|
|
4
4
|
*/
|
|
5
|
-
export { AuthorizationManager, DEFAULT_MAX_SCOPES, DEFAULT_MAX_DESCENDANTS, MAX_SCOPE_BOUND, DEFAULT_VIEW_MAX_AGE_MS, PARKED_CENSUS_MAX, RELAY_ORIGIN_MAX_HOPS, expandExcludedSubtrees } from './src/manager.js';
|
|
5
|
+
export { AuthorizationManager, DEFAULT_MAX_SCOPES, DEFAULT_MAX_DESCENDANTS, MAX_SCOPE_BOUND, DEFAULT_VIEW_MAX_AGE_MS, PARKED_CENSUS_MAX, RELAY_ORIGIN_MAX_HOPS, RELAY_LEASE_POLL_MS, expandExcludedSubtrees } from './src/manager.js';
|
|
6
6
|
export { defineConfig } from './src/define_config.js';
|
|
7
7
|
export { syncAuthzCatalog, diffAuthzCatalog, catalogInSync, formatCatalogDiff, formatScopedRoles, formatShadowedRoles, runCatalogDiff, syncCatalogs, } from './src/catalog/catalog.js';
|
|
8
8
|
/**
|
package/build/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,eAAe,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
|
|
@@ -119,5 +119,22 @@ export declare class DatabaseRelationsDriver implements RelationsDriver {
|
|
|
119
119
|
* por el camino de reconcile.
|
|
120
120
|
*/
|
|
121
121
|
enumerateRelations(partition: ScopeRef, page?: RelationPage): Promise<RelationTuplePage>;
|
|
122
|
+
/**
|
|
123
|
+
* **`enumerateRelationsMany` — K particiones en UNA consulta** (2.4.0-alpha.8
|
|
124
|
+
* · C1; panel relay 2, analista §8, juez 7.1). El mismo SELECT que
|
|
125
|
+
* `enumerateRelations` con `partition_key IN (todas las ortografías de
|
|
126
|
+
* todas las particiones)`, orden total por `uuid` y el mismo cursor
|
|
127
|
+
* (estable: reanudar con él ve cada tupla exactamente una vez, sea cual
|
|
128
|
+
* sea K). Cada tupla viene con la partición PEDIDA a la que pertenece: la
|
|
129
|
+
* primera referencia de cada clave es la que viaja en `tuple.partition`
|
|
130
|
+
* (dos ortografías del mismo uuid son UNA partición aquí, como en
|
|
131
|
+
* `enumerateRelations`, que ya barre las dos). Sin particiones es 500 con
|
|
132
|
+
* cero consultas (paridad con `openfga`: un barrido para nadie no es un
|
|
133
|
+
* éxito vacío). Hasta alpha.7 el manager caía a su respaldo —K consultas y
|
|
134
|
+
* un cursor que perdía tuplas al reanudar (C2)—; sin capacidad nueva: con
|
|
135
|
+
* los dos drivers publicados nativos y el respaldo ruidoso, no hay nada que
|
|
136
|
+
* declarar.
|
|
137
|
+
*/
|
|
138
|
+
enumerateRelationsMany(partitions: ScopeRef[], page?: RelationPage): Promise<RelationTuplePage>;
|
|
122
139
|
}
|
|
123
140
|
//# sourceMappingURL=database_relations_driver.d.ts.map
|
|
@@ -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":"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"}
|
|
@@ -619,11 +619,54 @@ export class DatabaseRelationsDriver {
|
|
|
619
619
|
*/
|
|
620
620
|
async enumerateRelations(partition, page) {
|
|
621
621
|
assertScope(partition);
|
|
622
|
-
const
|
|
622
|
+
const wanted = new Map();
|
|
623
|
+
for (const key of this.#partitionSpellings(partition))
|
|
624
|
+
wanted.set(key, partition);
|
|
625
|
+
return this.#enumerateRows('enumerateRelations', wanted, page);
|
|
626
|
+
}
|
|
627
|
+
/**
|
|
628
|
+
* **`enumerateRelationsMany` — K particiones en UNA consulta** (2.4.0-alpha.8
|
|
629
|
+
* · C1; panel relay 2, analista §8, juez 7.1). El mismo SELECT que
|
|
630
|
+
* `enumerateRelations` con `partition_key IN (todas las ortografías de
|
|
631
|
+
* todas las particiones)`, orden total por `uuid` y el mismo cursor
|
|
632
|
+
* (estable: reanudar con él ve cada tupla exactamente una vez, sea cual
|
|
633
|
+
* sea K). Cada tupla viene con la partición PEDIDA a la que pertenece: la
|
|
634
|
+
* primera referencia de cada clave es la que viaja en `tuple.partition`
|
|
635
|
+
* (dos ortografías del mismo uuid son UNA partición aquí, como en
|
|
636
|
+
* `enumerateRelations`, que ya barre las dos). Sin particiones es 500 con
|
|
637
|
+
* cero consultas (paridad con `openfga`: un barrido para nadie no es un
|
|
638
|
+
* éxito vacío). Hasta alpha.7 el manager caía a su respaldo —K consultas y
|
|
639
|
+
* un cursor que perdía tuplas al reanudar (C2)—; sin capacidad nueva: con
|
|
640
|
+
* los dos drivers publicados nativos y el respaldo ruidoso, no hay nada que
|
|
641
|
+
* declarar.
|
|
642
|
+
*/
|
|
643
|
+
async enumerateRelationsMany(partitions, page) {
|
|
644
|
+
if (!Array.isArray(partitions) || partitions.length === 0) {
|
|
645
|
+
throw new AuthorizationConfigError('enumerateRelationsMany: sin particiones no hay nada que enumerar (y una consulta para nadie no es un éxito vacío). ' +
|
|
646
|
+
'Pasa al menos una partición.');
|
|
647
|
+
}
|
|
648
|
+
const wanted = new Map();
|
|
649
|
+
for (const partition of partitions) {
|
|
650
|
+
assertScope(partition);
|
|
651
|
+
for (const key of this.#partitionSpellings(partition))
|
|
652
|
+
if (!wanted.has(key))
|
|
653
|
+
wanted.set(key, partition);
|
|
654
|
+
}
|
|
655
|
+
return this.#enumerateRows('enumerateRelationsMany', wanted, page);
|
|
656
|
+
}
|
|
657
|
+
/**
|
|
658
|
+
* La consulta de `enumerateRelations`/`enumerateRelationsMany`: los hechos
|
|
659
|
+
* directos de las claves de partición pedidas, filtrados por tipos
|
|
660
|
+
* declarados, ordenados por `uuid` y paginados (`limit + 1` para saber si
|
|
661
|
+
* hay más; el cursor es el último `uuid` de la página). `wanted` mapea cada
|
|
662
|
+
* clave (ortografía) a la partición PEDIDA que viaja en la tupla.
|
|
663
|
+
*/
|
|
664
|
+
async #enumerateRows(operation, wanted, page) {
|
|
665
|
+
const partitionKeys = [...wanted.keys()];
|
|
623
666
|
const declaredTypes = [GROUP_TYPE, ...this.#config.objectTypes.map((t) => t.type)];
|
|
624
667
|
const limit = Math.max(1, Math.min(page?.limit ?? DEFAULT_ENUMERATE_LIMIT, MAX_ENUMERATE_LIMIT));
|
|
625
668
|
const after = page?.after;
|
|
626
|
-
const rows = await this.#sql(
|
|
669
|
+
const rows = await this.#sql(operation, () => {
|
|
627
670
|
let q = this.#connection()
|
|
628
671
|
.from(RELATIONS_TABLE)
|
|
629
672
|
.whereIn('partition_key', partitionKeys)
|
|
@@ -632,7 +675,7 @@ export class DatabaseRelationsDriver {
|
|
|
632
675
|
.limit(limit + 1);
|
|
633
676
|
if (after)
|
|
634
677
|
q = q.where('uuid', '>', after);
|
|
635
|
-
return q.select('uuid', 'object_type', 'object_uuid', 'relation', 'subject_type', 'subject_uuid', 'subject_relation', this.#expiry.select('expires_at'));
|
|
678
|
+
return q.select('uuid', 'partition_key', 'object_type', 'object_uuid', 'relation', 'subject_type', 'subject_uuid', 'subject_relation', this.#expiry.select('expires_at'));
|
|
636
679
|
});
|
|
637
680
|
const hasMore = rows.length > limit;
|
|
638
681
|
const pageRows = hasMore ? rows.slice(0, limit) : rows;
|
|
@@ -640,8 +683,8 @@ export class DatabaseRelationsDriver {
|
|
|
640
683
|
subject: this.#rowToSubject(row),
|
|
641
684
|
relation: String(row.relation),
|
|
642
685
|
object: { type: String(row.object_type), id: String(row.object_uuid) },
|
|
643
|
-
// La partición canónica
|
|
644
|
-
partition,
|
|
686
|
+
// La partición canónica PEDIDA: el barrido de ortografías ya la unificó.
|
|
687
|
+
partition: wanted.get(String(row.partition_key)),
|
|
645
688
|
expiresAt: this.#expiry.fromDb(row.expires_at),
|
|
646
689
|
}));
|
|
647
690
|
const cursor = hasMore ? String(pageRows[pageRows.length - 1].uuid) : undefined;
|