@jantstack/adonis-authz 2.4.0-alpha.4 → 2.4.0-alpha.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/README.md +102 -4
  2. package/build/commands/authz_reconcile.d.ts +5 -3
  3. package/build/commands/authz_reconcile.d.ts.map +1 -1
  4. package/build/commands/authz_reconcile.js +15 -3
  5. package/build/commands/authz_reconcile.js.map +1 -1
  6. package/build/commands/authz_scopes_relay.d.ts +18 -0
  7. package/build/commands/authz_scopes_relay.d.ts.map +1 -1
  8. package/build/commands/authz_scopes_relay.js +55 -7
  9. package/build/commands/authz_scopes_relay.js.map +1 -1
  10. package/build/commands/authz_scopes_requeue.d.ts +63 -0
  11. package/build/commands/authz_scopes_requeue.d.ts.map +1 -0
  12. package/build/commands/authz_scopes_requeue.js +154 -0
  13. package/build/commands/authz_scopes_requeue.js.map +1 -0
  14. package/build/commands/main.d.ts +2 -1
  15. package/build/commands/main.d.ts.map +1 -1
  16. package/build/commands/main.js +5 -3
  17. package/build/commands/main.js.map +1 -1
  18. package/build/index.d.ts +3 -3
  19. package/build/index.d.ts.map +1 -1
  20. package/build/index.js +2 -2
  21. package/build/index.js.map +1 -1
  22. package/build/src/define_config.d.ts +24 -0
  23. package/build/src/define_config.d.ts.map +1 -1
  24. package/build/src/define_config.js.map +1 -1
  25. package/build/src/drivers/openfga_driver.d.ts.map +1 -1
  26. package/build/src/drivers/openfga_driver.js +24 -1
  27. package/build/src/drivers/openfga_driver.js.map +1 -1
  28. package/build/src/drivers/openfga_relations_driver.d.ts +32 -0
  29. package/build/src/drivers/openfga_relations_driver.d.ts.map +1 -1
  30. package/build/src/drivers/openfga_relations_driver.js +64 -6
  31. package/build/src/drivers/openfga_relations_driver.js.map +1 -1
  32. package/build/src/errors.d.ts +30 -0
  33. package/build/src/errors.d.ts.map +1 -1
  34. package/build/src/errors.js +32 -0
  35. package/build/src/errors.js.map +1 -1
  36. package/build/src/manager.d.ts +86 -4
  37. package/build/src/manager.d.ts.map +1 -1
  38. package/build/src/manager.js +457 -25
  39. package/build/src/manager.js.map +1 -1
  40. package/build/src/relations/manager.d.ts +7 -0
  41. package/build/src/relations/manager.d.ts.map +1 -1
  42. package/build/src/relations/manager.js +27 -0
  43. package/build/src/relations/manager.js.map +1 -1
  44. package/build/src/relations/reconcile.d.ts +14 -2
  45. package/build/src/relations/reconcile.d.ts.map +1 -1
  46. package/build/src/relations/reconcile.js +155 -77
  47. package/build/src/relations/reconcile.js.map +1 -1
  48. package/build/src/scope_outbox.d.ts +21 -0
  49. package/build/src/scope_outbox.d.ts.map +1 -1
  50. package/build/src/scope_outbox.js +211 -24
  51. package/build/src/scope_outbox.js.map +1 -1
  52. package/build/src/testing/contract.d.ts.map +1 -1
  53. package/build/src/testing/contract.js +4 -1
  54. package/build/src/testing/contract.js.map +1 -1
  55. package/build/src/testing/main.d.ts +2 -0
  56. package/build/src/testing/main.d.ts.map +1 -1
  57. package/build/src/testing/main.js +1 -0
  58. package/build/src/testing/main.js.map +1 -1
  59. package/build/src/testing/scope_outbox_contract.d.ts +88 -0
  60. package/build/src/testing/scope_outbox_contract.d.ts.map +1 -0
  61. package/build/src/testing/scope_outbox_contract.js +607 -0
  62. package/build/src/testing/scope_outbox_contract.js.map +1 -0
  63. package/build/src/types.d.ts +240 -17
  64. package/build/src/types.d.ts.map +1 -1
  65. package/build/src/types.js.map +1 -1
  66. package/package.json +1 -1
@@ -20,7 +20,7 @@
20
20
  * `manager` ni `drivers/*`: los drivers concretos los inyecta el llamante (la
21
21
  * plataforma), como `manager.reconcile` recibe el destino por su clave.
22
22
  */
23
- import { MassReconcileRefusedError, RelationTypeUnknownError, RelationUnknownError, UnsupportedOperationError, } from '../errors.js';
23
+ import { AuthorizationConfigError, MassReconcileRefusedError, RelationTypeUnknownError, RelationUnknownError, UnsupportedOperationError, } from '../errors.js';
24
24
  import { systemClock } from '../clock.js';
25
25
  import { isActiveExpiry, sameInstant } from '../expiry.js';
26
26
  import { isRelUserset } from '../types.js';
@@ -36,28 +36,53 @@ function scopeKeyOf(scope) {
36
36
  function tupleKey(tuple) {
37
37
  return `${scopeKeyOf(tuple.partition)}|${tuple.object.type}:${tuple.object.id}#${tuple.relation}@${subjectKey(tuple.subject)}`;
38
38
  }
39
- /** Enumera TODAS las tuplas de una partición de un driver (paginando el cursor). */
40
- async function enumerateAll(driver, partition, role) {
39
+ /**
40
+ * Enumera TODAS las tuplas de las particiones pedidas, repartidas por clave de
41
+ * partición. UNA pasada con `enumerateRelationsMany` si el driver lo trae
42
+ * (alpha.6: en `openfga`, un barrido del store en vez de K); si no, una
43
+ * llamada de `enumerateRelations` por partición. En los dos casos se pagina el
44
+ * cursor hasta agotarlo, con las mismas guardas ruidosas (un cursor que se
45
+ * repite o más de 100 000 páginas es un error, nunca una enumeración corta).
46
+ */
47
+ async function enumerateAllMany(driver, partitions, role) {
41
48
  if (!driver.enumerateRelations || !driver.capabilities?.enumerateRelations) {
42
49
  throw new UnsupportedOperationError('enumerateRelations', `ser ${role} de authz:reconcile de relaciones`, 'relations', `El driver ${role} no sabe enumerar sus tuplas (capacidad 'enumerateRelations': false). ` +
43
50
  `Sin poder leer ${role === 'destino' ? 'el destino no se ve qué sobra' : 'el origen no hay nada que migrar'}.`);
44
51
  }
45
- const out = [];
46
- const seen = new Set();
47
- let after;
48
- let pages = 0;
49
- do {
50
- const page = await driver.enumerateRelations(partition, after ? { after } : undefined);
51
- out.push(...page.tuples);
52
- after = page.cursor || undefined;
53
- if (after) {
54
- if (seen.has(after))
55
- throw new Error(`enumerateRelations (${role}): el cursor '${after}' se repite; no avanza`);
56
- seen.add(after);
57
- if (++pages > 100_000)
58
- throw new Error(`enumerateRelations (${role}): más de 100000 páginas sin agotar`);
52
+ const out = new Map();
53
+ for (const partition of partitions)
54
+ out.set(scopeKeyOf(partition), []);
55
+ const collect = (tuples) => {
56
+ for (const tuple of tuples) {
57
+ const bucket = out.get(scopeKeyOf(tuple.partition));
58
+ // Una tupla de una partición que no se pidió no es de esta pasada: el
59
+ // puerto promete «solo las pedidas», y si un driver de terceros trae de
60
+ // más, no se migra lo ajeno.
61
+ if (bucket)
62
+ bucket.push(tuple);
59
63
  }
60
- } while (after);
64
+ };
65
+ const many = driver.enumerateRelationsMany;
66
+ const fetch = typeof many === 'function' && partitions.length > 1
67
+ ? [(after) => many.call(driver, partitions, after ? { after } : undefined)]
68
+ : partitions.map((partition) => (after) => driver.enumerateRelations(partition, after ? { after } : undefined));
69
+ for (const pageOf of fetch) {
70
+ const seen = new Set();
71
+ let after;
72
+ let pages = 0;
73
+ do {
74
+ const page = await pageOf(after);
75
+ collect(page.tuples);
76
+ after = page.cursor || undefined;
77
+ if (after) {
78
+ if (seen.has(after))
79
+ throw new Error(`enumerateRelations (${role}): el cursor '${after}' se repite; no avanza`);
80
+ seen.add(after);
81
+ if (++pages > 100_000)
82
+ throw new Error(`enumerateRelations (${role}): más de 100000 páginas sin agotar`);
83
+ }
84
+ } while (after);
85
+ }
61
86
  return out;
62
87
  }
63
88
  /**
@@ -66,10 +91,117 @@ async function enumerateAll(driver, partition, role) {
66
91
  * sentido). Nunca silenciosa: devuelve `written`/`deleted`/`unchanged`/`extra`.
67
92
  */
68
93
  export async function reconcileRelations(options) {
69
- const { from, to, partition, dryRun = false, prune = false, allowMassDelete = false, toConfig } = options;
94
+ const { from, to, dryRun = false, prune = false, allowMassDelete = false, toConfig } = options;
70
95
  const now = (options.now ?? systemClock)();
71
- const enumerated = await enumerateAll(from, partition, 'origen');
72
- const destTuples = await enumerateAll(to, partition, 'destino');
96
+ const partitions = partitionsOf(options);
97
+ // alpha.6: origen y destino se enumeran UNA vez para todas las particiones.
98
+ const enumeratedByKey = await enumerateAllMany(from, partitions, 'origen');
99
+ const destByKeyAll = await enumerateAllMany(to, partitions, 'destino');
100
+ // Primero se DECIDE todo (K diffs, K seguros R-17) y luego se escribe: un
101
+ // seguro que salte en la partición 3 no deja las dos primeras a medias.
102
+ const plans = [];
103
+ for (const partition of partitions) {
104
+ const enumerated = enumeratedByKey.get(scopeKeyOf(partition)) ?? [];
105
+ const destTuples = destByKeyAll.get(scopeKeyOf(partition)) ?? [];
106
+ plans.push(planPartition(partition, enumerated, destTuples, { now, prune, toConfig }));
107
+ }
108
+ const report = {
109
+ dryRun,
110
+ written: 0,
111
+ updated: 0,
112
+ deleted: 0,
113
+ unchanged: 0,
114
+ extra: 0,
115
+ modelDrift: [],
116
+ massDelete: false,
117
+ skipped: { expired: 0, undeclared: 0 },
118
+ };
119
+ for (const plan of plans) {
120
+ // **El seguro de borrado masivo** (R-17, paridad con `authz:reconcile` de
121
+ // roles / AA2). `prune` + un ORIGEN sin una sola tupla utilizable + un destino
122
+ // con tuplas que borrar es la firma de un `--from` equivocado o de un store
123
+ // vacío: vaciar el destino entero se rechaza con 500 antes de tocar nada,
124
+ // salvo `allowMassDelete`. En `--dry-run` no lanza, lo marca. «Utilizable» =
125
+ // una tupla VIVA del origen que cabe en el destino (las que `skipped`
126
+ // recoge no migran, así que no cuentan como respaldo).
127
+ if (plan.massDelete && !dryRun && !allowMassDelete) {
128
+ throw new MassReconcileRefusedError(`authz:relations:reconcile --prune borraría ${plan.toDelete.length} tupla(s) de relación del destino` +
129
+ `${partitions.length > 1 ? ` (partición ${scopeKeyOf(plan.partition)})` : ''} y el ` +
130
+ `ORIGEN no ha aportado NI UNA utilizable (${plan.enumerated} leídas` +
131
+ `${toConfig ? ', todas de tipos que el destino no declara' : ''}` +
132
+ `${plan.skipped.expired ? `, ${plan.skipped.expired} caducada(s)` : ''}). Eso es la firma de un --from ` +
133
+ `equivocado o de un store vacío, no de un destino que sobra: esta pasada dejaría la partición sin ` +
134
+ `una sola relación. Comprueba el --from y el store; si de verdad quieres vaciarlo, --allow-mass-delete.` +
135
+ `${partitions.length > 1 ? ' No se ha escrito nada en ninguna partición.' : ''}`);
136
+ }
137
+ report.massDelete ||= plan.massDelete;
138
+ report.skipped.expired += plan.skipped.expired;
139
+ report.skipped.undeclared += plan.skipped.undeclared;
140
+ for (const type of plan.modelDrift)
141
+ if (!report.modelDrift.includes(type))
142
+ report.modelDrift.push(type);
143
+ }
144
+ for (const plan of plans) {
145
+ let written = plan.toWrite.length;
146
+ let updated = plan.toUpdate.length;
147
+ if (!dryRun) {
148
+ // La caducidad viaja EXPLÍCITA (`Date` la fija, `null` la quita): un
149
+ // `relate` sin opciones PRESERVARÍA la del destino (invariante 10).
150
+ // L-0: el DRIVER del destino aplica F-05 (`assertRelationDeclared`), así que
151
+ // sin `toConfig` —o con una que no coincida con la del driver— es SU 422 el
152
+ // que embuda la tupla no declarada: se cuenta en `skipped.undeclared` y se
153
+ // descuenta de `written`/`updated`. Nunca un throw a mitad de pasada por
154
+ // una tupla que el reporte puede contar, y nunca un silencio.
155
+ for (const tuple of plan.toWrite) {
156
+ if (await relateOrSkip(to, tuple))
157
+ continue;
158
+ report.skipped.undeclared += 1;
159
+ written -= 1;
160
+ }
161
+ for (const tuple of plan.toUpdate) {
162
+ if (await relateOrSkip(to, tuple))
163
+ continue;
164
+ report.skipped.undeclared += 1;
165
+ updated -= 1;
166
+ }
167
+ if (prune) {
168
+ for (const tuple of plan.toDelete) {
169
+ await to.unrelate(tuple.subject, tuple.relation, tuple.object, tuple.partition);
170
+ }
171
+ }
172
+ }
173
+ report.written += written;
174
+ report.updated += updated;
175
+ report.deleted += prune ? plan.toDelete.length : 0;
176
+ report.unchanged += plan.unchanged;
177
+ report.extra += prune ? 0 : plan.toDelete.length;
178
+ }
179
+ return report;
180
+ }
181
+ /** Exactamente uno de `partition` / `partitions` (y `partitions` no vacío): lo demás es 500 antes de leer nada. */
182
+ function partitionsOf(options) {
183
+ const { partition, partitions } = options;
184
+ if (partition !== undefined && partitions !== undefined) {
185
+ throw new AuthorizationConfigError('reconcileRelations: pasa `partition` O `partitions`, no los dos.');
186
+ }
187
+ if (partition !== undefined)
188
+ return [partition];
189
+ if (!Array.isArray(partitions) || partitions.length === 0) {
190
+ throw new AuthorizationConfigError('reconcileRelations: pasa `partition` (una) o `partitions` (varias, al menos una): sin partición no hay nada que migrar, ' +
191
+ 'y una lista vacía no es una pasada en verde.');
192
+ }
193
+ // Dos referencias con la misma clave son la misma partición: se migra una vez.
194
+ const seen = new Set();
195
+ return partitions.filter((p) => {
196
+ const key = scopeKeyOf(p);
197
+ if (seen.has(key))
198
+ return false;
199
+ seen.add(key);
200
+ return true;
201
+ });
202
+ }
203
+ function planPartition(partition, enumerated, destTuples, context) {
204
+ const { now, prune, toConfig } = context;
73
205
  // R-15: la caducada LLEGA del origen (el puerto lo exige) y aquí se DESCARTA
74
206
  // contándola: no se migra ni respalda nada en el destino. Decidido con UN
75
207
  // `now` para toda la pasada.
@@ -118,62 +250,8 @@ export async function reconcileRelations(options) {
118
250
  unchanged += 1;
119
251
  }
120
252
  const toDelete = destTuples.filter((tuple) => !sourceByKey.has(tupleKey(tuple)));
121
- // **El seguro de borrado masivo** (R-17, paridad con `authz:reconcile` de
122
- // roles / AA2). `prune` + un ORIGEN sin una sola tupla utilizable + un destino
123
- // con tuplas que borrar es la firma de un `--from` equivocado o de un store
124
- // vacío: vaciar el destino entero se rechaza con 500 antes de tocar nada,
125
- // salvo `allowMassDelete`. En `--dry-run` no lanza, lo marca. «Utilizable» =
126
- // una tupla VIVA del origen que cabe en el destino (las que `skipped`
127
- // recoge no migran, así que no cuentan como respaldo).
128
- const usableSource = sourceTuples.length;
129
- const massDelete = prune && toDelete.length > 0 && usableSource === 0;
130
- if (massDelete && !dryRun && !allowMassDelete) {
131
- throw new MassReconcileRefusedError(`authz:relations:reconcile --prune borraría ${toDelete.length} tupla(s) de relación del destino y el ` +
132
- `ORIGEN no ha aportado NI UNA utilizable (${enumerated.length} leídas` +
133
- `${toConfig ? ', todas de tipos que el destino no declara' : ''}` +
134
- `${skipped.expired ? `, ${skipped.expired} caducada(s)` : ''}). Eso es la firma de un --from ` +
135
- `equivocado o de un store vacío, no de un destino que sobra: esta pasada dejaría la partición sin ` +
136
- `una sola relación. Comprueba el --from y el store; si de verdad quieres vaciarlo, --allow-mass-delete.`);
137
- }
138
- let written = toWrite.length;
139
- let updated = toUpdate.length;
140
- if (!dryRun) {
141
- // La caducidad viaja EXPLÍCITA (`Date` la fija, `null` la quita): un
142
- // `relate` sin opciones PRESERVARÍA la del destino (invariante 10).
143
- // L-0: el DRIVER del destino aplica F-05 (`assertRelationDeclared`), así que
144
- // sin `toConfig` —o con una que no coincida con la del driver— es SU 422 el
145
- // que embuda la tupla no declarada: se cuenta en `skipped.undeclared` y se
146
- // descuenta de `written`/`updated`. Nunca un throw a mitad de pasada por
147
- // una tupla que el reporte puede contar, y nunca un silencio.
148
- for (const tuple of toWrite) {
149
- if (await relateOrSkip(to, tuple))
150
- continue;
151
- skipped.undeclared += 1;
152
- written -= 1;
153
- }
154
- for (const tuple of toUpdate) {
155
- if (await relateOrSkip(to, tuple))
156
- continue;
157
- skipped.undeclared += 1;
158
- updated -= 1;
159
- }
160
- if (prune) {
161
- for (const tuple of toDelete) {
162
- await to.unrelate(tuple.subject, tuple.relation, tuple.object, tuple.partition);
163
- }
164
- }
165
- }
166
- return {
167
- dryRun,
168
- written,
169
- updated,
170
- deleted: prune ? toDelete.length : 0,
171
- unchanged,
172
- extra: prune ? 0 : toDelete.length,
173
- modelDrift,
174
- massDelete,
175
- skipped,
176
- };
253
+ const massDelete = prune && toDelete.length > 0 && sourceTuples.length === 0;
254
+ return { partition, enumerated: enumerated.length, toWrite, toUpdate, toDelete, unchanged, skipped, modelDrift, massDelete };
177
255
  }
178
256
  /** ¿El tipo de objeto cabe en el modelo fusionado del destino? (`group` es built-in: `hasType` lo incluye.) */
179
257
  function declaredIn(config, objectType) {
@@ -1 +1 @@
1
- {"version":3,"file":"reconcile.js","sourceRoot":"","sources":["../../../src/relations/reconcile.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"reconcile.js","sourceRoot":"","sources":["../../../src/relations/reconcile.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,EACL,wBAAwB,EACxB,yBAAyB,EACzB,wBAAwB,EACxB,oBAAoB,EACpB,yBAAyB,GAC1B,MAAM,cAAc,CAAA;AACrB,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAEzC,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAI1C,0FAA0F;AAC1F,SAAS,UAAU,CAAC,OAAmB;IACrC,IAAI,YAAY,CAAC,OAAO,CAAC;QAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,EAAE,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAA;IACnG,OAAO,GAAG,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,EAAE,CAAA;AAC1C,CAAC;AAED,SAAS,UAAU,CAAC,KAAe;IACjC,OAAO,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,EAAE,CAAA;AACrE,CAAC;AAED,SAAS,QAAQ,CAAC,KAAoB;IACpC,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,IAAI,KAAK,CAAC,MAAM,CAAC,EAAE,IAAI,KAAK,CAAC,QAAQ,IAAI,UAAU,CAC3G,KAAK,CAAC,OAAO,CACd,EAAE,CAAA;AACL,CAAC;AA6GD;;;;;;;GAOG;AACH,KAAK,UAAU,gBAAgB,CAC7B,MAAuB,EACvB,UAAsB,EACtB,IAA0B;IAE1B,IAAI,CAAC,MAAM,CAAC,kBAAkB,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,kBAAkB,EAAE,CAAC;QAC3E,MAAM,IAAI,yBAAyB,CACjC,oBAAoB,EACpB,OAAO,IAAI,mCAAmC,EAC9C,WAAW,EACX,aAAa,IAAI,wEAAwE;YACvF,kBAAkB,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,+BAA+B,CAAC,CAAC,CAAC,kCAAkC,GAAG,CACjH,CAAA;IACH,CAAC;IACD,MAAM,GAAG,GAAG,IAAI,GAAG,EAA2B,CAAA;IAC9C,KAAK,MAAM,SAAS,IAAI,UAAU;QAAE,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,CAAA;IACtE,MAAM,OAAO,GAAG,CAAC,MAAuB,EAAE,EAAE;QAC1C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,MAAM,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAA;YACnD,sEAAsE;YACtE,wEAAwE;YACxE,6BAA6B;YAC7B,IAAI,MAAM;gBAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAChC,CAAC;IACH,CAAC,CAAA;IACD,MAAM,IAAI,GAAG,MAAM,CAAC,sBAAsB,CAAA;IAC1C,MAAM,KAAK,GACT,OAAO,IAAI,KAAK,UAAU,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC;QACjD,CAAC,CAAC,CAAC,CAAC,KAAc,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QACpF,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,KAAc,EAAE,EAAE,CAAC,MAAM,CAAC,kBAAmB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAA;IAC7H,KAAK,MAAM,MAAM,IAAI,KAAK,EAAE,CAAC;QAC3B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAA;QAC9B,IAAI,KAAyB,CAAA;QAC7B,IAAI,KAAK,GAAG,CAAC,CAAA;QACb,GAAG,CAAC;YACF,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,CAAA;YAChC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;YACpB,KAAK,GAAG,IAAI,CAAC,MAAM,IAAI,SAAS,CAAA;YAChC,IAAI,KAAK,EAAE,CAAC;gBACV,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;oBAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,IAAI,iBAAiB,KAAK,wBAAwB,CAAC,CAAA;gBAC/G,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;gBACf,IAAI,EAAE,KAAK,GAAG,OAAO;oBAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,IAAI,qCAAqC,CAAC,CAAA;YAC1G,CAAC;QACH,CAAC,QAAQ,KAAK,EAAC;IACjB,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,OAAkC;IACzE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,GAAG,KAAK,EAAE,KAAK,GAAG,KAAK,EAAE,eAAe,GAAG,KAAK,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAA;IAC9F,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,IAAI,WAAW,CAAC,EAAE,CAAA;IAC1C,MAAM,UAAU,GAAG,YAAY,CAAC,OAAO,CAAC,CAAA;IAExC,4EAA4E;IAC5E,MAAM,eAAe,GAAG,MAAM,gBAAgB,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAA;IAC1E,MAAM,YAAY,GAAG,MAAM,gBAAgB,CAAC,EAAE,EAAE,UAAU,EAAE,SAAS,CAAC,CAAA;IAEtE,0EAA0E;IAC1E,wEAAwE;IACxE,MAAM,KAAK,GAAoB,EAAE,CAAA;IACjC,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,MAAM,UAAU,GAAG,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,CAAA;QACnE,MAAM,UAAU,GAAG,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,CAAA;QAChE,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAA;IACxF,CAAC;IAED,MAAM,MAAM,GAA6B;QACvC,MAAM;QACN,OAAO,EAAE,CAAC;QACV,OAAO,EAAE,CAAC;QACV,OAAO,EAAE,CAAC;QACV,SAAS,EAAE,CAAC;QACZ,KAAK,EAAE,CAAC;QACR,UAAU,EAAE,EAAE;QACd,UAAU,EAAE,KAAK;QACjB,OAAO,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE;KACvC,CAAA;IACD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,0EAA0E;QAC1E,+EAA+E;QAC/E,4EAA4E;QAC5E,0EAA0E;QAC1E,6EAA6E;QAC7E,sEAAsE;QACtE,uDAAuD;QACvD,IAAI,IAAI,CAAC,UAAU,IAAI,CAAC,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;YACnD,MAAM,IAAI,yBAAyB,CACjC,8CAA8C,IAAI,CAAC,QAAQ,CAAC,MAAM,mCAAmC;gBACnG,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,eAAe,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,QAAQ;gBACpF,4CAA4C,IAAI,CAAC,UAAU,SAAS;gBACpE,GAAG,QAAQ,CAAC,CAAC,CAAC,4CAA4C,CAAC,CAAC,CAAC,EAAE,EAAE;gBACjE,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,OAAO,cAAc,CAAC,CAAC,CAAC,EAAE,kCAAkC;gBACxG,mGAAmG;gBACnG,wGAAwG;gBACxG,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,8CAA8C,CAAC,CAAC,CAAC,EAAE,EAAE,CACnF,CAAA;QACH,CAAC;QACD,MAAM,CAAC,UAAU,KAAK,IAAI,CAAC,UAAU,CAAA;QACrC,MAAM,CAAC,OAAO,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAA;QAC9C,MAAM,CAAC,OAAO,CAAC,UAAU,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,CAAA;QACpD,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,UAAU;YAAE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAAE,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACzG,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAA;QACjC,IAAI,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAA;QAClC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,qEAAqE;YACrE,oEAAoE;YACpE,6EAA6E;YAC7E,4EAA4E;YAC5E,2EAA2E;YAC3E,yEAAyE;YACzE,8DAA8D;YAC9D,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACjC,IAAI,MAAM,YAAY,CAAC,EAAE,EAAE,KAAK,CAAC;oBAAE,SAAQ;gBAC3C,MAAM,CAAC,OAAO,CAAC,UAAU,IAAI,CAAC,CAAA;gBAC9B,OAAO,IAAI,CAAC,CAAA;YACd,CAAC;YACD,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAClC,IAAI,MAAM,YAAY,CAAC,EAAE,EAAE,KAAK,CAAC;oBAAE,SAAQ;gBAC3C,MAAM,CAAC,OAAO,CAAC,UAAU,IAAI,CAAC,CAAA;gBAC9B,OAAO,IAAI,CAAC,CAAA;YACd,CAAC;YACD,IAAI,KAAK,EAAE,CAAC;gBACV,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;oBAClC,MAAM,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,CAAA;gBACjF,CAAC;YACH,CAAC;QACH,CAAC;QACD,MAAM,CAAC,OAAO,IAAI,OAAO,CAAA;QACzB,MAAM,CAAC,OAAO,IAAI,OAAO,CAAA;QACzB,MAAM,CAAC,OAAO,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;QAClD,MAAM,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAA;QAClC,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAA;IAClD,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC;AAED,mHAAmH;AACnH,SAAS,YAAY,CAAC,OAAkC;IACtD,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,OAAO,CAAA;IACzC,IAAI,SAAS,KAAK,SAAS,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QACxD,MAAM,IAAI,wBAAwB,CAAC,kEAAkE,CAAC,CAAA;IACxG,CAAC;IACD,IAAI,SAAS,KAAK,SAAS;QAAE,OAAO,CAAC,SAAS,CAAC,CAAA;IAC/C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1D,MAAM,IAAI,wBAAwB,CAChC,0HAA0H;YACxH,8CAA8C,CACjD,CAAA;IACH,CAAC;IACD,+EAA+E;IAC/E,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAA;IAC9B,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;QAC7B,MAAM,GAAG,GAAG,UAAU,CAAC,CAAC,CAAC,CAAA;QACzB,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,OAAO,KAAK,CAAA;QAC/B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QACb,OAAO,IAAI,CAAA;IACb,CAAC,CAAC,CAAA;AACJ,CAAC;AAeD,SAAS,aAAa,CACpB,SAAmB,EACnB,UAA2B,EAC3B,UAA2B,EAC3B,OAAkE;IAElE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAA;IACxC,6EAA6E;IAC7E,0EAA0E;IAC1E,6BAA6B;IAC7B,qEAAqE;IACrE,8EAA8E;IAC9E,4EAA4E;IAC5E,2EAA2E;IAC3E,gEAAgE;IAChE,MAAM,OAAO,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,CAAA;IAC7C,MAAM,UAAU,GAAa,EAAE,CAAA;IAC/B,MAAM,YAAY,GAAoB,EAAE,CAAA;IACxC,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;QAC/B,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,SAAS,IAAI,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;YAClD,OAAO,CAAC,OAAO,IAAI,CAAC,CAAA;YACpB,SAAQ;QACV,CAAC;QACD,IAAI,QAAQ,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YACzD,OAAO,CAAC,UAAU,IAAI,CAAC,CAAA;YACvB,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC;gBAAE,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;YAC/E,SAAQ;QACV,CAAC;QACD,IAAI,QAAQ,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;YACxE,OAAO,CAAC,UAAU,IAAI,CAAC,CAAA;YACvB,SAAQ;QACV,CAAC;QACD,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IAC1B,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,GAAG,EAAyB,CAAA;IACpD,KAAK,MAAM,KAAK,IAAI,YAAY;QAAE,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAA;IACzE,MAAM,SAAS,GAAG,IAAI,GAAG,EAAyB,CAAA;IAClD,KAAK,MAAM,KAAK,IAAI,UAAU;QAAE,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAA;IAErE,MAAM,OAAO,GAAoB,EAAE,CAAA;IACnC,MAAM,QAAQ,GAAoB,EAAE,CAAA;IACpC,IAAI,SAAS,GAAG,CAAC,CAAA;IACjB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,WAAW,EAAE,CAAC;QACvC,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAClC,IAAI,CAAC,OAAO;YAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACjC,uEAAuE;aAClE,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,SAAS,IAAI,IAAI,EAAE,KAAK,CAAC,SAAS,IAAI,IAAI,CAAC;YAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;;YAC1F,SAAS,IAAI,CAAC,CAAA;IACrB,CAAC;IACD,MAAM,QAAQ,GAAoB,UAAU,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IACjG,MAAM,UAAU,GAAG,KAAK,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,CAAA;IAC5E,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,CAAA;AAC9H,CAAC;AAED,+GAA+G;AAC/G,SAAS,UAAU,CAAC,MAAuB,EAAE,UAAkB;IAC7D,OAAO,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;AACnC,CAAC;AAED;;;;GAIG;AACH,KAAK,UAAU,YAAY,CAAC,EAAmB,EAAE,KAAoB;IACnE,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,SAAS,EAAE;YAC5E,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,IAAI;SACnC,CAAC,CAAA;QACF,OAAO,IAAI,CAAA;IACb,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,wBAAwB,IAAI,KAAK,YAAY,oBAAoB;YAAE,OAAO,KAAK,CAAA;QACpG,MAAM,KAAK,CAAA;IACb,CAAC;AACH,CAAC"}
@@ -64,6 +64,27 @@ interface DatabaseLike {
64
64
  from(table: string): any;
65
65
  table(table: string): any;
66
66
  }
67
+ /**
68
+ * **Los nombres del lease de una cola** (2.4.0-alpha.5 · R6; tester del panel
69
+ * relay). Hasta alpha.4 el nombre era `authz_scope_outbox:<conexión>:<tabla>`
70
+ * recortado a 64 caracteres para MySQL: dos despliegues cuya conexión+tabla
71
+ * coincidieran en los primeros 64 COMPARTÍAN lease y se excluían para siempre
72
+ * — y el modo de fallo era `busy: true`, que no lanza: el relay de uno de los
73
+ * dos no corría nunca, en silencio. Desde alpha.5 el nombre es un hash
74
+ * ESTABLE del nombre completo (`current`, 59 caracteres), que no colisiona.
75
+ *
76
+ * **Transición**: `sqlScopeOutbox.acquire()` toma el lock viejo (`legacy`, el
77
+ * recortado) Y el nuevo durante alpha.5, porque en un rolling deploy un
78
+ * proceso con alpha.4 y otro con alpha.5 tienen que seguir excluyéndose
79
+ * (+0,56 ms medidos por `acquire`). El viejo se retira en 2.5 (CHANGELOG):
80
+ * mientras dure la transición, dos tablas con los mismos 64 primeros
81
+ * caracteres siguen compartiendo el `legacy` — la colisión solo se cierra
82
+ * del todo al retirarlo. Exportado para que el caso lo fije sin MySQL.
83
+ */
84
+ export declare function scopeOutboxLockNames(connection: string | undefined, table: string): {
85
+ legacy: string;
86
+ current: string;
87
+ };
67
88
  export declare function sqlScopeOutbox(options?: SqlScopeOutboxOptions, database?: DatabaseLike): ScopeOutbox;
68
89
  export {};
69
90
  //# sourceMappingURL=scope_outbox.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"scope_outbox.d.ts","sourceRoot":"","sources":["../../src/scope_outbox.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAKH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAMvC,OAAO,KAAK,EAEV,WAAW,EAKZ,MAAM,YAAY,CAAA;AAEnB,MAAM,WAAW,qBAAqB;IACpC,oEAAoE;IACpE,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,0DAA0D;IAC1D,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,qEAAqE;IACrE,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB;;;;OAIG;IACH,GAAG,CAAC,EAAE,KAAK,CAAA;IACX;;;;;;;;;;OAUG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAgBD,iFAAiF;AACjF,UAAU,YAAY;IACpB,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,CAAA;IACxB,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,CAAA;CAC1B;AAuFD,wBAAgB,cAAc,CAC5B,OAAO,GAAE,qBAA0B,EACnC,QAAQ,GAAE,YAA4C,GACrD,WAAW,CA6Lb"}
1
+ {"version":3,"file":"scope_outbox.d.ts","sourceRoot":"","sources":["../../src/scope_outbox.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAMH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAMvC,OAAO,KAAK,EAEV,WAAW,EAOZ,MAAM,YAAY,CAAA;AAEnB,MAAM,WAAW,qBAAqB;IACpC,oEAAoE;IACpE,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,0DAA0D;IAC1D,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,qEAAqE;IACrE,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB;;;;OAIG;IACH,GAAG,CAAC,EAAE,KAAK,CAAA;IACX;;;;;;;;;;OAUG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAgBD,iFAAiF;AACjF,UAAU,YAAY;IACpB,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,CAAA;IACxB,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,CAAA;CAC1B;AAiCD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAMvH;AAsFD,wBAAgB,cAAc,CAC5B,OAAO,GAAE,qBAA0B,EACnC,QAAQ,GAAE,YAA4C,GACrD,WAAW,CAmVb"}