@substrat-run/kernel 0.148.0 → 0.149.0

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 (80) hide show
  1. package/dist/attachment-sweep.d.ts +208 -0
  2. package/dist/attachment-sweep.d.ts.map +1 -0
  3. package/dist/attachment-sweep.js +318 -0
  4. package/dist/attachment-sweep.js.map +1 -0
  5. package/dist/index.d.ts +15 -9
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +11 -7
  8. package/dist/index.js.map +1 -1
  9. package/dist/invocation-line.d.ts +85 -0
  10. package/dist/invocation-line.d.ts.map +1 -1
  11. package/dist/invocation-line.js +43 -0
  12. package/dist/invocation-line.js.map +1 -1
  13. package/dist/migration-digest.d.ts +56 -0
  14. package/dist/migration-digest.d.ts.map +1 -1
  15. package/dist/migration-digest.js +92 -0
  16. package/dist/migration-digest.js.map +1 -1
  17. package/dist/migration-fence.d.ts +14 -0
  18. package/dist/migration-fence.d.ts.map +1 -0
  19. package/dist/migration-fence.js +515 -0
  20. package/dist/migration-fence.js.map +1 -0
  21. package/dist/migration-replay.d.ts +52 -0
  22. package/dist/migration-replay.d.ts.map +1 -0
  23. package/dist/migration-replay.js +140 -0
  24. package/dist/migration-replay.js.map +1 -0
  25. package/dist/module-migrations.d.ts +3 -3
  26. package/dist/module-migrations.js +3 -3
  27. package/dist/peer.d.ts +32 -2
  28. package/dist/peer.d.ts.map +1 -1
  29. package/dist/peer.js +99 -3
  30. package/dist/peer.js.map +1 -1
  31. package/dist/permission-eval.d.ts +8 -0
  32. package/dist/permission-eval.d.ts.map +1 -1
  33. package/dist/permission-eval.js +14 -0
  34. package/dist/permission-eval.js.map +1 -1
  35. package/dist/platform-sweep.d.ts +94 -1
  36. package/dist/platform-sweep.d.ts.map +1 -1
  37. package/dist/platform-sweep.js +130 -0
  38. package/dist/platform-sweep.js.map +1 -1
  39. package/dist/promote-review.d.ts +125 -0
  40. package/dist/promote-review.d.ts.map +1 -0
  41. package/dist/promote-review.js +181 -0
  42. package/dist/promote-review.js.map +1 -0
  43. package/dist/scope-host.d.ts +204 -42
  44. package/dist/scope-host.d.ts.map +1 -1
  45. package/dist/scope-host.js.map +1 -1
  46. package/dist/scope-store.d.ts +5 -5
  47. package/dist/scope-store.d.ts.map +1 -1
  48. package/dist/spine-restore.d.ts +2 -0
  49. package/dist/spine-restore.d.ts.map +1 -1
  50. package/dist/spine-restore.js +5 -0
  51. package/dist/spine-restore.js.map +1 -1
  52. package/dist/store-driver-releases.d.ts +306 -0
  53. package/dist/store-driver-releases.d.ts.map +1 -0
  54. package/dist/store-driver-releases.js +581 -0
  55. package/dist/store-driver-releases.js.map +1 -0
  56. package/dist/table-ownership.d.ts +5 -2
  57. package/dist/table-ownership.d.ts.map +1 -1
  58. package/dist/table-ownership.js +19 -10
  59. package/dist/table-ownership.js.map +1 -1
  60. package/dist/testing.d.ts +2 -0
  61. package/dist/testing.d.ts.map +1 -1
  62. package/dist/testing.js +2 -0
  63. package/dist/testing.js.map +1 -1
  64. package/dist/upload-link.d.ts +60 -7
  65. package/dist/upload-link.d.ts.map +1 -1
  66. package/dist/upload-link.js +189 -25
  67. package/dist/upload-link.js.map +1 -1
  68. package/dist/version-migrations.d.ts +63 -1
  69. package/dist/version-migrations.d.ts.map +1 -1
  70. package/dist/version-migrations.js +174 -8
  71. package/dist/version-migrations.js.map +1 -1
  72. package/dist/vertical-scope-stores.d.ts +9 -9
  73. package/dist/vertical-scope-stores.d.ts.map +1 -1
  74. package/dist/vertical-scope-stores.js +29 -29
  75. package/dist/vertical-scope-stores.js.map +1 -1
  76. package/package.json +2 -2
  77. package/dist/store-kind-releases.d.ts +0 -137
  78. package/dist/store-kind-releases.d.ts.map +0 -1
  79. package/dist/store-kind-releases.js +0 -252
  80. package/dist/store-kind-releases.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"table-ownership.d.ts","sourceRoot":"","sources":["../src/table-ownership.ts"],"names":[],"mappings":"AA8BA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAMjD;;;GAGG;AACH,eAAO,MAAM,gBAAgB,8LAO5B,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,gCAAgC,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAWhF;AAoBD,sEAAsE;AACtE,MAAM,MAAM,cAAc,GACtB;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAA;CAAE,GAClF;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GACvE;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtD,4GAA4G;AAC5G,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc,EAAE,CA4BjE;AAED;;;;GAIG;AACH,MAAM,WAAW,UAAU;IACzB,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAC9C,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC;IAC/C,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED,wFAAwF;AACxF,MAAM,MAAM,WAAW,GACnB;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAClF;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GACvE;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AA8CtD,kEAAkE;AAClE,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACrC,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CACrC;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,GAAG,SAAS,EAAE,CAW3H;AA0CD,8FAA8F;AAC9F,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,SAAS,EAAE,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,CAGpH;AA0DD;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,SAAS,EACd,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,EACxB,cAAc,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,EACzE,EAAE,EAAE,MAAM,GACT,IAAI,CAgBN"}
1
+ {"version":3,"file":"table-ownership.d.ts","sourceRoot":"","sources":["../src/table-ownership.ts"],"names":[],"mappings":"AA+BA,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAM/D;;;GAGG;AACH,eAAO,MAAM,gBAAgB,8LAO5B,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,gCAAgC,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAWhF;AAoBD,sEAAsE;AACtE,MAAM,MAAM,cAAc,GACtB;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAA;CAAE,GAClF;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GACvE;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtD,4GAA4G;AAC5G,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc,EAAE,CA4BjE;AAED;;;;GAIG;AACH,MAAM,WAAW,UAAU;IACzB,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAC9C,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC;IAC/C,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED,wFAAwF;AACxF,MAAM,MAAM,WAAW,GACnB;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAClF;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GACvE;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AA8CtD,kEAAkE;AAClE,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACrC,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CACrC;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,SAAS,EACd,SAAS,EAAE,YAAY,EACvB,IAAI,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,EACjC,IAAI,EAAE;IAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,GACzD,SAAS,EAAE,CAiBb;AA0CD,8FAA8F;AAC9F,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,SAAS,EAAE,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,CAGpH;AA0DD;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,SAAS,EACd,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,EACxB,cAAc,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,EACzE,EAAE,EAAE,MAAM,GACT,IAAI,CAgBN"}
@@ -28,6 +28,7 @@
28
28
  * means the erasure refuses that table — the conservative answer, never a guess.
29
29
  */
30
30
  import { namesSpineTable, substratError, tokenizeSql } from '@substrat-run/contracts';
31
+ import { fenceMigration } from './migration-fence.js';
31
32
  import { executableSqlStatements, splitSqlStatements } from './sql-statements.js';
32
33
  /** The ledger's name — also what an authored migration may never name. */
33
34
  const TABLE_OWNERS = '_substrat_table_owners';
@@ -156,17 +157,25 @@ function ledgerStore(sql, source, at) {
156
157
  * afterwards (`recordOwnershipSteps`), so the journal's `rows_changed` counts the migration's
157
158
  * own writes and none of the kernel's bookkeeping.
158
159
  */
159
- export function runMigrationStatements(sql, migrationSql, exec) {
160
+ export function runMigrationStatements(sql, migration, exec, step) {
160
161
  const steps = [];
161
- let tables = moduleTableNames(sql);
162
- // Comment-blanked text, at the same boundaries: what SQLite stores is what a later ALTER rewrites.
163
- for (const statement of executableSqlStatements(migrationSql)) {
164
- exec(statement);
165
- const after = moduleTableNames(sql);
166
- if (after.size !== tables.size || [...after].some((t) => !tables.has(t)))
167
- steps.push({ before: tables, after });
168
- tables = after;
169
- }
162
+ const run = () => {
163
+ let tables = moduleTableNames(sql);
164
+ // Comment-blanked text, at the same boundaries: what SQLite stores is what a later ALTER rewrites.
165
+ for (const statement of executableSqlStatements(migration.sql)) {
166
+ exec(statement);
167
+ const after = moduleTableNames(sql);
168
+ if (after.size !== tables.size || [...after].some((t) => !tables.has(t)))
169
+ steps.push({ before: tables, after });
170
+ tables = after;
171
+ }
172
+ };
173
+ // #115: an authored migration may not lose data the scope holds unless it declares the loss.
174
+ // Kernel-derived DDL builds indexes over that data and is not held to it.
175
+ if (step.authored)
176
+ fenceMigration(sql, migration, step.key, run);
177
+ else
178
+ run();
170
179
  return steps;
171
180
  }
172
181
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"table-ownership.js","sourceRoot":"","sources":["../src/table-ownership.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"table-ownership.js","sourceRoot":"","sources":["../src/table-ownership.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,WAAW,EAAiB,MAAM,yBAAyB,CAAC;AACrG,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,OAAO,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAElF,0EAA0E;AAC1E,MAAM,YAAY,GAAG,wBAAwB,CAAC;AAE9C;;;GAGG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG;;;;;;;CAO/B,CAAC;AAEF;;;;GAIG;AACH,MAAM,UAAU,gCAAgC,CAAC,GAAW,EAAE,IAAY;IACxE,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;QACrC,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,YAAY,CAAC,EAAE,CAAC;YAC9E,MAAM,aAAa,CACjB,WAAW,EACX,GAAG,IAAI,UAAU,YAAY,8DAA8D;gBACzF,sCAAsC,EACxC,EAAE,MAAM,EAAE,aAAa,EAAE,CAC1B,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC;AAED,8FAA8F;AAC9F,SAAS,gBAAgB,CAAC,GAAc;IACtC,OAAO,IAAI,GAAG,CACZ,GAAG;SACA,KAAK,CAAmB,qDAAqD,CAAC;SAC9E,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;SAChC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAC3F,CAAC;AACJ,CAAC;AAED,wGAAwG;AACxG,SAAS,MAAM,CAAC,KAA2B;IACzC,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAC7B,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAClD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;IACxC,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC1E,CAAC;AAQD,4GAA4G;AAC5G,MAAM,UAAU,eAAe,CAAC,OAAe;IAC7C,MAAM,GAAG,GAAqB,EAAE,CAAC;IACjC,uFAAuF;IACvF,MAAM,UAAU,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IACxG,KAAK,MAAM,EAAE,IAAI,UAAU,EAAE,CAAC;QAC5B,MAAM,CAAC,GAAG,CAAC,CAAS,EAAU,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAE,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC5F,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;YACtB,IAAI,CAAC,GAAG,CAAC,CAAC;YACV,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,WAAW,CAAC;YACrD,IAAI,IAAI;gBAAE,CAAC,IAAI,CAAC,CAAC;YACjB,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,SAAS;gBAAE,CAAC,IAAI,CAAC,CAAC;YAC/B,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,OAAO;gBAAE,SAAS;YAC/B,CAAC,IAAI,CAAC,CAAC;YACP,MAAM,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,QAAQ,CAAC;YACjF,IAAI,WAAW;gBAAE,CAAC,IAAI,CAAC,CAAC;YACxB,MAAM,KAAK,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5B,IAAI,KAAK,IAAI,CAAC,IAAI;gBAAE,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;QACvE,CAAC;aAAM,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE,CAAC;YAChD,MAAM,IAAI,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3B,MAAM,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,QAAQ,CAAC,CAAC;YAC3F,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACzE,IAAI,IAAI,IAAI,EAAE;gBAAE,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;QACzD,CAAC;aAAM,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE,CAAC;YAC/C,MAAM,KAAK,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACrE,IAAI,KAAK;gBAAE,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAmBD;;;GAGG;AACH,SAAS,gBAAgB,CAAC,KAAiB,EAAE,MAAmB;IAC9D,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,KAAK,QAAQ;YACX,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;YACtC,OAAO;QACT,KAAK,QAAQ,EAAE,CAAC;YACd,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACrC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAC1B,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,IAAI,IAAI,CAAC,CAAC;YACpC,OAAO;QACT,CAAC;QACD,KAAK,MAAM;YACT,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;AACH,CAAC;AAED,mGAAmG;AACnG,SAAS,WAAW,CAAC,GAAc,EAAE,MAA+B,EAAE,EAAU;IAC9E,OAAO;QACL,GAAG,EAAE,CAAC,KAAK,EAAE,EAAE,CACb,GAAG,CAAC,KAAK,CAAwB,yBAAyB,YAAY,uBAAuB,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACxG,EAAE,SAAS,IAAI,IAAI;QACvB,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACpB,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gBACnB,GAAG,CAAC,IAAI,CAAC,eAAe,YAAY,uBAAuB,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;gBACtE,OAAO;YACT,CAAC;YACD,GAAG,CAAC,IAAI,CACN,eAAe,YAAY;;gDAEa,EACxC,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,CAC3B,CAAC;QACJ,CAAC;QACD,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;YAChB,GAAG,CAAC,IAAI,CAAC,eAAe,YAAY,uBAAuB,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;QACxE,CAAC;KACF,CAAC;AACJ,CAAC;AAQD;;;;;;GAMG;AACH,MAAM,UAAU,sBAAsB,CACpC,GAAc,EACd,SAAuB,EACvB,IAAiC,EACjC,IAA0D;IAE1D,MAAM,KAAK,GAAgB,EAAE,CAAC;IAC9B,MAAM,GAAG,GAAG,GAAS,EAAE;QACrB,IAAI,MAAM,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;QACnC,mGAAmG;QACnG,KAAK,MAAM,SAAS,IAAI,uBAAuB,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;YAC/D,IAAI,CAAC,SAAS,CAAC,CAAC;YAChB,MAAM,KAAK,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;YACpC,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBAAE,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;YAChH,MAAM,GAAG,KAAK,CAAC;QACjB,CAAC;IACH,CAAC,CAAC;IACF,6FAA6F;IAC7F,0EAA0E;IAC1E,IAAI,IAAI,CAAC,QAAQ;QAAE,cAAc,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;;QAC5D,GAAG,EAAE,CAAC;IACX,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;GAIG;AACH,SAAS,MAAM,CAAC,KAAwB;IACtC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IACzC,MAAM,IAAI,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAE,CAAC;IAChE,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;AACvF,CAAC;AAED;;;;;;GAMG;AACH,SAAS,cAAc,CAAC,QAAgB,EAAE,IAAe;IACvD,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAChE,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACpE,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IAC1B,MAAM,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC5B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,EAAE,KAAK,SAAS,EAAE,CAAC;QAC1C,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;IAC/E,CAAC;IACD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IACvG,IAAI,IAAI,KAAK,SAAS,IAAI,EAAE,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM,EAAE,CAAC;QAC9E,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QACnF,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;YAClD,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QAC1E,CAAC;IACH,CAAC;IACD,MAAM,aAAa,CACjB,UAAU,EACV,gBAAgB,QAAQ,mDAAmD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI;QACnG,aAAa,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,gDAAgD,CAC1F,CAAC;AACJ,CAAC;AAED,8FAA8F;AAC9F,MAAM,UAAU,oBAAoB,CAAC,GAAc,EAAE,QAAgB,EAAE,KAA2B,EAAE,EAAU;IAC5G,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC;IAChD,KAAK,MAAM,IAAI,IAAI,KAAK;QAAE,KAAK,MAAM,MAAM,IAAI,cAAc,CAAC,QAAQ,EAAE,IAAI,CAAC;YAAE,gBAAgB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;AACjH,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,SAAS,4BAA4B,CACnC,GAAc,EACd,MAAwB,EACxB,cAAyE,EACzE,EAAU;IAEV,MAAM,OAAO,GAAG,CAAC,GAAG,MAAM,CAAC;SACxB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;SAC3B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,iBAAiB,YAAY,uBAAuB,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC;IACpG,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IACjC,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CACvB,gFAAgF,CACjF,CAAC;IACF,MAAM,KAAK,GAAG,IAAI,GAAG,EAAyB,CAAC;IAC/C,MAAM,KAAK,GAAe;QACxB,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;QACxB,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;QACnC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;KACpC,CAAC;IACF,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,cAAc,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QAC5D,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,IAAI,EAAE;gBAAE,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;YACjD,SAAS;QACX,CAAC;QACD,KAAK,MAAM,EAAE,IAAI,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;YACvC,IAAI,EAAE,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACzB,IAAI,EAAE,CAAC,WAAW,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC;oBAAE,SAAS;gBACpD,gBAAgB,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;YAC/G,CAAC;iBAAM,CAAC;gBACN,gBAAgB,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAC9B,CAAC;QACH,CAAC;IACH,CAAC;IACD,MAAM,IAAI,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;IACnC,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;IAC/C,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC3B,IAAI,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;YAAE,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IACjD,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAC/B,GAAc,EACd,QAAgB,EAChB,MAAwB,EACxB,cAAyE,EACzE,EAAU;IAEV,MAAM,IAAI,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;IACrD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAC9B,4BAA4B,CAAC,GAAG,EAAE,IAAI,EAAE,cAAc,EAAE,EAAE,CAAC,CAAC;IAC5D,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CACzB,CAAC,CAAC,EAAE,EAAE,CACJ,GAAG,CAAC,KAAK,CAAwB,yBAAyB,YAAY,uBAAuB,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACpG,EAAE,SAAS,KAAK,QAAQ,CAC7B,CAAC;IACF,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,aAAa,CACjB,qBAAqB,EACrB,YAAY,QAAQ,UAAU,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,wCAAwC;YAC3G,mGAAmG,CACtG,CAAC;IACJ,CAAC;AACH,CAAC"}
package/dist/testing.d.ts CHANGED
@@ -14,4 +14,6 @@ export declare function forgeBoundOperationsForTest(handlers: HandlerMap, derive
14
14
  concurrency?: BoundOperations['concurrency'];
15
15
  idempotencyOptOuts?: BoundOperations['idempotencyOptOuts'];
16
16
  }): BoundOperations;
17
+ /** How many migration set digests this isolate computed (#2349): a scope with nothing pending computes none. */
18
+ export { migrationSetDigestComputations } from './migration-digest.js';
17
19
  //# sourceMappingURL=testing.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../src/testing.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,eAAe,EAAQ,KAAK,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEhF,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,UAAU,EACpB,OAAO,EAAE;IACP,MAAM,CAAC,EAAE,eAAe,CAAC,QAAQ,CAAC,CAAC;IACnC,WAAW,CAAC,EAAE,eAAe,CAAC,aAAa,CAAC,CAAC;IAC7C,kBAAkB,CAAC,EAAE,eAAe,CAAC,oBAAoB,CAAC,CAAC;CAC5D,GACA,eAAe,CAEjB"}
1
+ {"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../src/testing.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,eAAe,EAAQ,KAAK,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEhF,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,UAAU,EACpB,OAAO,EAAE;IACP,MAAM,CAAC,EAAE,eAAe,CAAC,QAAQ,CAAC,CAAC;IACnC,WAAW,CAAC,EAAE,eAAe,CAAC,aAAa,CAAC,CAAC;IAC7C,kBAAkB,CAAC,EAAE,eAAe,CAAC,oBAAoB,CAAC,CAAC;CAC5D,GACA,eAAe,CAEjB;AAED,gHAAgH;AAChH,OAAO,EAAE,8BAA8B,EAAE,MAAM,uBAAuB,CAAC"}
package/dist/testing.js CHANGED
@@ -12,4 +12,6 @@ import { BoundOperations, MINT } from './module-operations.js';
12
12
  export function forgeBoundOperationsForTest(handlers, derived) {
13
13
  return new BoundOperations(MINT, handlers, derived);
14
14
  }
15
+ /** How many migration set digests this isolate computed (#2349): a scope with nothing pending computes none. */
16
+ export { migrationSetDigestComputations } from './migration-digest.js';
15
17
  //# sourceMappingURL=testing.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"testing.js","sourceRoot":"","sources":["../src/testing.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,eAAe,EAAE,IAAI,EAAmB,MAAM,wBAAwB,CAAC;AAEhF,MAAM,UAAU,2BAA2B,CACzC,QAAoB,EACpB,OAIC;IAED,OAAO,IAAI,eAAe,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;AACtD,CAAC"}
1
+ {"version":3,"file":"testing.js","sourceRoot":"","sources":["../src/testing.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,eAAe,EAAE,IAAI,EAAmB,MAAM,wBAAwB,CAAC;AAEhF,MAAM,UAAU,2BAA2B,CACzC,QAAoB,EACpB,OAIC;IAED,OAAO,IAAI,eAAe,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;AACtD,CAAC;AAED,gHAAgH;AAChH,OAAO,EAAE,8BAA8B,EAAE,MAAM,uBAAuB,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import { type AttachmentRecord, type CheckSubject, type Decision, type DomainEventInput, type EntityRef, type Instant, type MintedUploadLink, type PermissionKey, type PrincipalId, type UploadLinkMintInput, type UploadLinkPolicy, type UploadLinkRecord, type UploadLinkView } from '@substrat-run/contracts';
2
- import type { ScopedSql } from './scope-host.js';
3
- export declare const UPLOAD_LINK_DDL = "\n CREATE TABLE IF NOT EXISTS _substrat_upload_links (\n id TEXT PRIMARY KEY,\n -- SHA-256 hex of the secret. The secret itself is stored NOWHERE.\n token_hash TEXT NOT NULL UNIQUE,\n entity_type TEXT NOT NULL,\n entity_id TEXT NOT NULL,\n -- NULL = the uploader names the file.\n filename TEXT,\n max_bytes INTEGER NOT NULL,\n -- JSON array of media types / families, or NULL = any type.\n content_types TEXT,\n visibility TEXT NOT NULL,\n -- The principal the attachment is written AS: its author, and whose `writePermission`\n -- is checked again at redemption.\n minted_by TEXT NOT NULL,\n minted_at TEXT NOT NULL,\n expires_at TEXT NOT NULL,\n redeemed_at TEXT,\n -- The attachment this link produced.\n attachment_id TEXT,\n -- Tombstone, never a delete: a link that was minted is evidence of why a file arrived.\n revoked_at TEXT,\n revoked_by TEXT\n );\n CREATE INDEX IF NOT EXISTS _substrat_upload_links_entity\n ON _substrat_upload_links (entity_type, entity_id);\n";
2
+ import { type RedeemedUploadLink, type ScopedSql } from './scope-host.js';
3
+ export declare const UPLOAD_LINK_DDL = "\n CREATE TABLE IF NOT EXISTS _substrat_upload_links (\n id TEXT PRIMARY KEY,\n -- SHA-256 hex of the secret. The secret itself is stored NOWHERE.\n token_hash TEXT NOT NULL UNIQUE,\n entity_type TEXT NOT NULL,\n entity_id TEXT NOT NULL,\n -- NULL = the uploader names the file.\n filename TEXT,\n max_bytes INTEGER NOT NULL,\n -- JSON array of media types / families, or NULL = any type.\n content_types TEXT,\n visibility TEXT NOT NULL,\n -- The principal the attachment is written AS: its author, and whose `writePermission`\n -- is checked again at redemption.\n minted_by TEXT NOT NULL,\n minted_at TEXT NOT NULL,\n expires_at TEXT NOT NULL,\n redeemed_at TEXT,\n -- The attachment this link produced.\n attachment_id TEXT,\n -- #2315: SHA-256 hex of the `Idempotency-Key` the spending request carried, or NULL when it\n -- carried none. A retry of that redemption with the same key gets the same attachment back;\n -- the key itself is stored nowhere.\n redeemed_key_hash TEXT,\n -- Tombstone, never a delete: a link that was minted is evidence of why a file arrived.\n revoked_at TEXT,\n revoked_by TEXT\n );\n CREATE INDEX IF NOT EXISTS _substrat_upload_links_entity\n ON _substrat_upload_links (entity_type, entity_id);\n";
4
4
  /** The tables `UPLOAD_LINK_DDL` builds — what a copy of a scope leaves behind. */
5
5
  export declare const UPLOAD_LINK_TABLE_NAMES: readonly ['_substrat_upload_links'];
6
6
  /** `reason` slugs a redemption refuses with, so the HTTP route can answer 410/413/415 and a client can act. */
@@ -8,9 +8,43 @@ export declare const UPLOAD_LINK_GONE = "upload_link_gone";
8
8
  export declare const UPLOAD_LINK_TOO_LARGE = "upload_link_too_large";
9
9
  export declare const UPLOAD_LINK_TYPE_REFUSED = "upload_link_type_refused";
10
10
  export declare const UPLOAD_LINK_WRONG_TARGET = "upload_link_wrong_target";
11
+ /** A replay whose bytes are not the bytes the redemption stored (#2315). */
12
+ export declare const UPLOAD_LINK_REPLAY_MISMATCH = "upload_link_replay_mismatch";
11
13
  /** A fresh link secret: 256 bits, base64url, prefixed. Only its hash is ever stored. */
12
14
  export declare function mintUploadLinkSecret(): string;
13
- /** Is `type` (already stripped of parameters, lowercase) admitted by `allowed`? `null` admits anything. */
15
+ /**
16
+ * A media type as the platform judges and records it: the essence only — parameters dropped,
17
+ * whitespace trimmed, lowercased — and `image/jpg` spelled `image/jpeg`. The route and the
18
+ * kernel's redemption both judge through this, so a host that calls `redeemUploadLink` with
19
+ * `'image/svg+xml; charset=utf-8'` meets the same rule a `curl` does.
20
+ */
21
+ export declare function normalizeUploadMediaType(raw: string): string;
22
+ /**
23
+ * Types a browser runs rather than shows, named one by one: HTML; `text/xsl`, which Chrome
24
+ * parses as HTML even under `nosniff`; `multipart/x-mixed-replace`, whose parts WebKit renders
25
+ * as documents even under `nosniff`; the two essences the WHATWG MIME Sniffing standard (§7.1)
26
+ * hands to its unknown-type sniffer, which finds HTML in an HTML body; and the JavaScript MIME
27
+ * type essences of the same standard. With them, by rule rather than by list, is every XML type
28
+ * (`isActiveContentType`): a top-level navigation renders XML as a document, where an
29
+ * XHTML-namespace `<script>` runs. The third essence §7.1 sniffs, the any-type wildcard, is not
30
+ * a type a file can be declared as at all (`isMediaTypeEssence`).
31
+ */
32
+ export declare const ACTIVE_CONTENT_TYPES: ReadonlySet<string>;
33
+ /**
34
+ * Would a browser run `type` (normalized) instead of showing it, when served inline as the
35
+ * vertical's origin? The named set, and every XML type: `+xml` structured syntax
36
+ * (`image/foo+xml`, `application/rss+xml`) as well as `text/xml` and `application/xml`.
37
+ */
38
+ export declare const isActiveContentType: (type: string) => boolean;
39
+ export declare const isMediaTypeEssence: (type: string) => boolean;
40
+ /**
41
+ * Is `type` admitted by `allowed`? It is normalized first (`normalizeUploadMediaType`), and a
42
+ * result that is not exactly one essence (`isMediaTypeEssence`) is admitted by nothing, not even
43
+ * an absent allowlist: it could not be judged, and it could not be served as a header. `null`
44
+ * admits any well-formed type. A family (`image/*`) admits its members except an active type
45
+ * (`isActiveContentType`): the person holding a link chooses the bytes. An exact entry admits
46
+ * itself, active or not, so admitting SVG or HTML is a line a reviewer reads in `PERMISSIONS.md`.
47
+ */
14
48
  export declare function uploadContentTypeAllowed(allowed: readonly string[] | null, type: string): boolean;
15
49
  /** What an operation handler sees as `ctx.attachments`. */
16
50
  export interface AttachmentVerbs {
@@ -67,15 +101,34 @@ export declare function createAttachmentVerbs(deps: AttachmentVerbDeps): Attachm
67
101
  export interface UploadLinkInspection {
68
102
  view: UploadLinkView;
69
103
  mintedBy: PrincipalId;
104
+ /**
105
+ * #2315: the attachment the link already produced, when this request is a replay of the
106
+ * redemption that spent it. Nothing is written then; the body is judged against it instead.
107
+ */
108
+ replay?: AttachmentRecord;
70
109
  }
71
110
  /**
72
- * Look a secret up without spending it: `not_found` for one that names nothing, `conflict`
73
- * with reason `upload_link_gone` for one that is used, expired or revoked.
111
+ * Look a secret up without spending it: `not_found` for one that names nothing, `not_found`
112
+ * with reason `upload_link_wrong_target` for one minted for another target than `target`
113
+ * (whatever its state), `conflict` with reason `upload_link_gone` for one that is used,
114
+ * expired or revoked — unless `idempotencyKey` is the key the spending redemption carried, and
115
+ * then the answer carries `replay`. A malformed key is `validation_failed`, before the lookup.
74
116
  */
75
117
  export declare function inspectUploadLink(deps: {
76
118
  sql: ScopedSql;
77
119
  now: Instant;
78
- }, secret: unknown): Promise<UploadLinkInspection>;
120
+ }, secret: unknown, target?: EntityRef, idempotencyKey?: string): Promise<UploadLinkInspection>;
121
+ /**
122
+ * The host's redemption sequence, written once for both adapters (#2315): inspect, replay or
123
+ * write, and — for a request carrying a key that lost the spend to the request it retries —
124
+ * inspect again and answer that redemption. `inspect` is the host's `inspectUploadLink` with the
125
+ * request's key; `write` puts the bytes under a fresh id and runs the row's transaction, removing
126
+ * its own bytes on a refusal. A replay never reaches `write`, so it puts nothing.
127
+ */
128
+ export declare function redeemOrReplayUploadLink(inspect: () => Promise<UploadLinkInspection>, input: {
129
+ body: Uint8Array;
130
+ idempotencyKey?: string;
131
+ }, write: (inspection: UploadLinkInspection) => Promise<AttachmentRecord>): Promise<RedeemedUploadLink>;
79
132
  /**
80
133
  * Spend the link for `record`, INSIDE the transaction that inserts the attachment row — so a
81
134
  * refusal anywhere rolls the spend back. Judges the record against the link, never the other
@@ -85,5 +138,5 @@ export declare function redeemUploadLinkInTransaction(deps: {
85
138
  sql: ScopedSql;
86
139
  now: Instant;
87
140
  emit: (event: DomainEventInput) => void;
88
- }, secret: unknown, record: AttachmentRecord): Promise<void>;
141
+ }, secret: unknown, record: AttachmentRecord, idempotencyKey?: string): Promise<void>;
89
142
  //# sourceMappingURL=upload-link.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"upload-link.d.ts","sourceRoot":"","sources":["../src/upload-link.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"upload-link.d.ts","sourceRoot":"","sources":["../src/upload-link.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,9 @@
1
- import { ATTACHMENT_UPLOAD_LINK_MINTED, ATTACHMENT_UPLOAD_LINK_REDEEMED, ATTACHMENT_UPLOAD_LINK_REVOKED, UPLOAD_LINK_DEFAULT_TTL_SECONDS, UPLOAD_LINK_MAX_BYTES_CEILING, UPLOAD_LINK_SECRET_PREFIX, principalId as principalIdSchema, substratError, uploadLinkMintInput, uploadLinkPath, } from '@substrat-run/contracts';
1
+ import { ATTACHMENT_UPLOAD_LINK_MINTED, ATTACHMENT_UPLOAD_LINK_REDEEMED, ATTACHMENT_UPLOAD_LINK_REVOKED, UPLOAD_LINK_DEFAULT_TTL_SECONDS, UPLOAD_LINK_MAX_BYTES_CEILING, UPLOAD_LINK_REPLAY_GRACE_SECONDS, UPLOAD_LINK_SECRET_PREFIX, isUploadLinkIdempotencyKey, isUploadLinkSecretShape, principalId as principalIdSchema, substratError, uploadLinkMintInput, uploadLinkPath, } from '@substrat-run/contracts';
2
+ import { attachmentRecordOfRow } from './attachment-text.js';
2
3
  import { toBase64url } from './base64url.js';
3
4
  import { capabilityTokenHash } from './capability.js';
4
5
  import { assertAllowed } from './permission-checker.js';
6
+ import { attachmentSha256 } from './scope-host.js';
5
7
  import { ulid } from './ulid.js';
6
8
  export const UPLOAD_LINK_DDL = `
7
9
  CREATE TABLE IF NOT EXISTS _substrat_upload_links (
@@ -24,6 +26,10 @@ export const UPLOAD_LINK_DDL = `
24
26
  redeemed_at TEXT,
25
27
  -- The attachment this link produced.
26
28
  attachment_id TEXT,
29
+ -- #2315: SHA-256 hex of the \`Idempotency-Key\` the spending request carried, or NULL when it
30
+ -- carried none. A retry of that redemption with the same key gets the same attachment back;
31
+ -- the key itself is stored nowhere.
32
+ redeemed_key_hash TEXT,
27
33
  -- Tombstone, never a delete: a link that was minted is evidence of why a file arrived.
28
34
  revoked_at TEXT,
29
35
  revoked_by TEXT
@@ -38,20 +44,96 @@ export const UPLOAD_LINK_GONE = 'upload_link_gone';
38
44
  export const UPLOAD_LINK_TOO_LARGE = 'upload_link_too_large';
39
45
  export const UPLOAD_LINK_TYPE_REFUSED = 'upload_link_type_refused';
40
46
  export const UPLOAD_LINK_WRONG_TARGET = 'upload_link_wrong_target';
47
+ /** A replay whose bytes are not the bytes the redemption stored (#2315). */
48
+ export const UPLOAD_LINK_REPLAY_MISMATCH = 'upload_link_replay_mismatch';
41
49
  const COLUMNS = 'id, entity_type, entity_id, filename, max_bytes, content_types, visibility, minted_by, minted_at, ' +
42
50
  'expires_at, redeemed_at, attachment_id, revoked_at, revoked_by';
43
51
  /** A fresh link secret: 256 bits, base64url, prefixed. Only its hash is ever stored. */
44
52
  export function mintUploadLinkSecret() {
45
53
  return UPLOAD_LINK_SECRET_PREFIX + toBase64url(crypto.getRandomValues(new Uint8Array(32)));
46
54
  }
47
- /** A secret that cannot be one of ours is refused before it is hashed. */
48
- const plausibleSecret = (secret) => typeof secret === 'string' && secret.startsWith(UPLOAD_LINK_SECRET_PREFIX) && secret.length <= 128;
49
- /** Is `type` (already stripped of parameters, lowercase) admitted by `allowed`? `null` admits anything. */
55
+ /**
56
+ * A media type as the platform judges and records it: the essence only — parameters dropped,
57
+ * whitespace trimmed, lowercased — and `image/jpg` spelled `image/jpeg`. The route and the
58
+ * kernel's redemption both judge through this, so a host that calls `redeemUploadLink` with
59
+ * `'image/svg+xml; charset=utf-8'` meets the same rule a `curl` does.
60
+ */
61
+ export function normalizeUploadMediaType(raw) {
62
+ const t = raw.split(';')[0].trim().toLowerCase();
63
+ return t === 'image/jpg' ? 'image/jpeg' : t;
64
+ }
65
+ /**
66
+ * Types a browser runs rather than shows, named one by one: HTML; `text/xsl`, which Chrome
67
+ * parses as HTML even under `nosniff`; `multipart/x-mixed-replace`, whose parts WebKit renders
68
+ * as documents even under `nosniff`; the two essences the WHATWG MIME Sniffing standard (§7.1)
69
+ * hands to its unknown-type sniffer, which finds HTML in an HTML body; and the JavaScript MIME
70
+ * type essences of the same standard. With them, by rule rather than by list, is every XML type
71
+ * (`isActiveContentType`): a top-level navigation renders XML as a document, where an
72
+ * XHTML-namespace `<script>` runs. The third essence §7.1 sniffs, the any-type wildcard, is not
73
+ * a type a file can be declared as at all (`isMediaTypeEssence`).
74
+ */
75
+ export const ACTIVE_CONTENT_TYPES = new Set([
76
+ 'text/html',
77
+ 'application/xhtml+xml',
78
+ 'image/svg+xml',
79
+ 'text/xml',
80
+ 'application/xml',
81
+ 'text/xsl',
82
+ // WHATWG MIME Sniffing §7.1: sniffed as an unknown type, so an HTML body is read as HTML.
83
+ 'application/unknown',
84
+ 'unknown/unknown',
85
+ // WebKit renders each part as a document, script included, even under `nosniff`.
86
+ 'multipart/x-mixed-replace',
87
+ // WHATWG MIME Sniffing §4.6, "JavaScript MIME type".
88
+ 'application/ecmascript',
89
+ 'application/javascript',
90
+ 'application/x-ecmascript',
91
+ 'application/x-javascript',
92
+ 'text/ecmascript',
93
+ 'text/javascript',
94
+ 'text/javascript1.0',
95
+ 'text/javascript1.1',
96
+ 'text/javascript1.2',
97
+ 'text/javascript1.3',
98
+ 'text/javascript1.4',
99
+ 'text/javascript1.5',
100
+ 'text/jscript',
101
+ 'text/livescript',
102
+ 'text/x-ecmascript',
103
+ 'text/x-javascript',
104
+ ]);
105
+ /**
106
+ * Would a browser run `type` (normalized) instead of showing it, when served inline as the
107
+ * vertical's origin? The named set, and every XML type: `+xml` structured syntax
108
+ * (`image/foo+xml`, `application/rss+xml`) as well as `text/xml` and `application/xml`.
109
+ */
110
+ export const isActiveContentType = (type) => ACTIVE_CONTENT_TYPES.has(type) || type.endsWith('+xml');
111
+ /**
112
+ * One media type essence, exactly: `type/subtype`, each an RFC 9110 token (lowercase, since it is
113
+ * judged normalized) less `*`. No comma, so a header listing several types is not one; no space,
114
+ * tab, NUL, CR or LF; one slash with something on both sides. A browser reading
115
+ * `image/png,text/html` keeps the LAST type it can parse, and reads `text/html,x` or
116
+ * `text/html x` as `text/html`, so either would let a family judge one type and a page serve
117
+ * another. No `*`: a wildcard is what an allowlist ENTRY may say, never what a file is, and the
118
+ * any-type wildcard is sniffed for HTML.
119
+ */
120
+ const MEDIA_TYPE_ESSENCE = /^[a-z0-9!#$%&'+.^_`|~-]+\/[a-z0-9!#$%&'+.^_`|~-]+$/;
121
+ export const isMediaTypeEssence = (type) => MEDIA_TYPE_ESSENCE.test(type);
122
+ /**
123
+ * Is `type` admitted by `allowed`? It is normalized first (`normalizeUploadMediaType`), and a
124
+ * result that is not exactly one essence (`isMediaTypeEssence`) is admitted by nothing, not even
125
+ * an absent allowlist: it could not be judged, and it could not be served as a header. `null`
126
+ * admits any well-formed type. A family (`image/*`) admits its members except an active type
127
+ * (`isActiveContentType`): the person holding a link chooses the bytes. An exact entry admits
128
+ * itself, active or not, so admitting SVG or HTML is a line a reviewer reads in `PERMISSIONS.md`.
129
+ */
50
130
  export function uploadContentTypeAllowed(allowed, type) {
131
+ const t = normalizeUploadMediaType(type);
132
+ if (!isMediaTypeEssence(t))
133
+ return false;
51
134
  if (allowed === null)
52
135
  return true;
53
- const t = type.toLowerCase();
54
- return allowed.some((a) => (a.endsWith('/*') ? t.startsWith(a.slice(0, -1)) : a === t));
136
+ return allowed.some((a) => (a.endsWith('/*') ? t.startsWith(a.slice(0, -1)) && !isActiveContentType(t) : a === t));
55
137
  }
56
138
  const stateOf = (row, now) => row.revoked_at !== null ? 'revoked' : row.redeemed_at !== null ? 'redeemed' : row.expires_at <= now ? 'expired' : 'pending';
57
139
  function recordOf(row, now) {
@@ -196,22 +278,67 @@ export function createAttachmentVerbs(deps) {
196
278
  const unknownLink = () => substratError('not_found', 'This upload link is not valid.');
197
279
  /** The 410: it was ours, and it is spent, expired or revoked. Said only to a holder of the secret. */
198
280
  const goneLink = () => substratError('conflict', 'This upload link has been used, has expired or was revoked.', { reason: UPLOAD_LINK_GONE });
199
- async function liveRow(sql, now, secret) {
200
- if (!plausibleSecret(secret))
281
+ /** The 404 for a link that exists but was minted for another target than the one the request names. */
282
+ const wrongTarget = () => substratError('not_found', 'This upload link is not valid for that target.', { reason: UPLOAD_LINK_WRONG_TARGET });
283
+ /**
284
+ * The hash a redemption's idempotency key is recorded and matched as, or `undefined` for none.
285
+ * Judged before the link is looked up, so a malformed key is the same refusal whatever the link's
286
+ * state, and a well-formed one costs the same hash whether it will match or not.
287
+ */
288
+ async function idempotencyKeyHash(key) {
289
+ if (key === undefined)
290
+ return undefined;
291
+ if (!isUploadLinkIdempotencyKey(key)) {
292
+ throw substratError('validation_failed', 'An Idempotency-Key is 16 to 255 visible ASCII characters, with no space, quote or backslash, such as a UUID.');
293
+ }
294
+ return capabilityTokenHash(key);
295
+ }
296
+ /**
297
+ * The link a secret names, if it is still usable for `target`. The target is judged BEFORE the
298
+ * state, so a request naming another entity is the same 404 whether the link is pending, used,
299
+ * expired or revoked: the path decides, never the link's history. Nothing here spends it.
300
+ *
301
+ * With `keyHash`, a SPENT link is a replay (#2315) when the redemption that spent it carried the
302
+ * same key, the link's expiry plus `UPLOAD_LINK_REPLAY_GRACE_SECONDS` has not passed, and the
303
+ * attachment it produced is still there and not condemned by the orphan sweep (#2314). Every
304
+ * other spent link, and a key that matches nothing, is the same `goneLink()` as no key at all:
305
+ * a holder of the secret without the key learns nothing about the redemption.
306
+ */
307
+ async function resolveLink(sql, now, secret, target, keyHash) {
308
+ if (!isUploadLinkSecretShape(secret))
201
309
  throw unknownLink();
202
310
  const row = sql.query(`SELECT ${COLUMNS} FROM _substrat_upload_links WHERE token_hash = ?`, [await capabilityTokenHash(secret)])[0];
203
311
  if (!row)
204
312
  throw unknownLink();
205
- if (stateOf(row, now) !== 'pending')
206
- throw goneLink();
207
- return row;
313
+ if (target && (row.entity_type !== target.entityType || row.entity_id !== target.entityId))
314
+ throw wrongTarget();
315
+ if (stateOf(row, now) === 'pending')
316
+ return { row };
317
+ if (keyHash !== undefined && row.redeemed_at !== null && now < replayHorizon(row)) {
318
+ // The key is compared in SQL, as the secret is: a hash of it is all the row holds.
319
+ const attachment = sql.query(`SELECT a.id, a.entity_type, a.entity_id, a.filename, a.content_type, a.size, a.sha256,
320
+ a.visibility, a.created_by, a.created_at
321
+ FROM _substrat_upload_links l
322
+ JOIN _substrat_attachments a ON a.id = l.attachment_id
323
+ WHERE l.id = ? AND l.redeemed_key_hash = ?
324
+ AND NOT EXISTS (SELECT 1 FROM _substrat_attachment_condemned c WHERE c.id = a.id)`, [row.id, keyHash])[0];
325
+ if (attachment)
326
+ return { row, replay: attachmentRecordOfRow(attachment) };
327
+ }
328
+ throw goneLink();
208
329
  }
330
+ /** Until when a spent link's redemption may be replayed: its expiry, plus the grace. */
331
+ const replayHorizon = (row) => new Date(Date.parse(row.expires_at) + UPLOAD_LINK_REPLAY_GRACE_SECONDS * MS_PER_SECOND).toISOString();
209
332
  /**
210
- * Look a secret up without spending it: `not_found` for one that names nothing, `conflict`
211
- * with reason `upload_link_gone` for one that is used, expired or revoked.
333
+ * Look a secret up without spending it: `not_found` for one that names nothing, `not_found`
334
+ * with reason `upload_link_wrong_target` for one minted for another target than `target`
335
+ * (whatever its state), `conflict` with reason `upload_link_gone` for one that is used,
336
+ * expired or revoked — unless `idempotencyKey` is the key the spending redemption carried, and
337
+ * then the answer carries `replay`. A malformed key is `validation_failed`, before the lookup.
212
338
  */
213
- export async function inspectUploadLink(deps, secret) {
214
- const row = await liveRow(deps.sql, deps.now, secret);
339
+ export async function inspectUploadLink(deps, secret, target, idempotencyKey) {
340
+ const keyHash = await idempotencyKeyHash(idempotencyKey);
341
+ const { row, replay } = await resolveLink(deps.sql, deps.now, secret, target, keyHash);
215
342
  const r = recordOf(row, deps.now);
216
343
  return {
217
344
  view: {
@@ -222,21 +349,58 @@ export async function inspectUploadLink(deps, secret) {
222
349
  visibility: r.visibility,
223
350
  },
224
351
  mintedBy: r.mintedBy,
352
+ ...(replay ? { replay } : {}),
225
353
  };
226
354
  }
355
+ /**
356
+ * A replay's answer (#2315): the stored record, when `body` is the file it recorded — the same
357
+ * size and the same SHA-256. Anything else is refused with `conflict`, reason
358
+ * `upload_link_replay_mismatch`: the key named another request than this one. Writes nothing.
359
+ */
360
+ async function judgeUploadLinkReplay(replay, body) {
361
+ if (body.byteLength !== replay.size || (await attachmentSha256(body)) !== replay.sha256) {
362
+ throw substratError('conflict', 'This Idempotency-Key was used for another file: the bytes do not match the file it stored.', { reason: UPLOAD_LINK_REPLAY_MISMATCH });
363
+ }
364
+ return replay;
365
+ }
366
+ /**
367
+ * The host's redemption sequence, written once for both adapters (#2315): inspect, replay or
368
+ * write, and — for a request carrying a key that lost the spend to the request it retries —
369
+ * inspect again and answer that redemption. `inspect` is the host's `inspectUploadLink` with the
370
+ * request's key; `write` puts the bytes under a fresh id and runs the row's transaction, removing
371
+ * its own bytes on a refusal. A replay never reaches `write`, so it puts nothing.
372
+ */
373
+ export async function redeemOrReplayUploadLink(inspect, input, write) {
374
+ const replayed = async (replay) => ({
375
+ ...(await judgeUploadLinkReplay(replay, input.body)),
376
+ replayed: true,
377
+ });
378
+ const inspection = await inspect();
379
+ if (inspection.replay)
380
+ return replayed(inspection.replay);
381
+ try {
382
+ return await write(inspection);
383
+ }
384
+ catch (err) {
385
+ const reason = err?.extensions?.reason;
386
+ if (input.idempotencyKey === undefined || reason !== UPLOAD_LINK_GONE)
387
+ throw err;
388
+ const again = await inspect().catch(() => undefined);
389
+ if (again?.replay)
390
+ return replayed(again.replay);
391
+ throw err;
392
+ }
393
+ }
227
394
  /**
228
395
  * Spend the link for `record`, INSIDE the transaction that inserts the attachment row — so a
229
396
  * refusal anywhere rolls the spend back. Judges the record against the link, never the other
230
397
  * way round: the target, the author, the size and the type are all the link's to refuse.
231
398
  */
232
- export async function redeemUploadLinkInTransaction(deps, secret, record) {
233
- const row = await liveRow(deps.sql, deps.now, secret);
234
- if (row.entity_type !== record.entity.entityType || row.entity_id !== record.entity.entityId) {
235
- // The path named another entity than the link was minted for: nothing is spent.
236
- throw substratError('not_found', 'This upload link is not valid for that target.', {
237
- reason: UPLOAD_LINK_WRONG_TARGET,
238
- });
239
- }
399
+ export async function redeemUploadLinkInTransaction(deps, secret, record, idempotencyKey) {
400
+ const keyHash = await idempotencyKeyHash(idempotencyKey);
401
+ // The path named another entity than the link was minted for: nothing is spent. No key is
402
+ // passed: a spend needs a pending link, and a replay is the host's to answer before it writes.
403
+ const { row } = await resolveLink(deps.sql, deps.now, secret, record.entity);
240
404
  if (record.createdBy !== row.minted_by) {
241
405
  throw substratError('internal', 'an upload link was redeemed as someone other than its minter');
242
406
  }
@@ -254,8 +418,8 @@ export async function redeemUploadLinkInTransaction(deps, secret, record) {
254
418
  if (row.filename !== null && record.filename !== row.filename) {
255
419
  throw substratError('internal', 'an upload link with a fixed file name was redeemed under another');
256
420
  }
257
- const spent = deps.sql.exec(`UPDATE _substrat_upload_links SET redeemed_at = ?, attachment_id = ?
258
- WHERE id = ? AND redeemed_at IS NULL AND revoked_at IS NULL`, [deps.now, record.id, row.id]);
421
+ const spent = deps.sql.exec(`UPDATE _substrat_upload_links SET redeemed_at = ?, attachment_id = ?, redeemed_key_hash = ?
422
+ WHERE id = ? AND redeemed_at IS NULL AND revoked_at IS NULL`, [deps.now, record.id, keyHash ?? null, row.id]);
259
423
  if (spent.changes !== 1)
260
424
  throw goneLink();
261
425
  const payload = {
@@ -1 +1 @@
1
- {"version":3,"file":"upload-link.js","sourceRoot":"","sources":["../src/upload-link.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"upload-link.js","sourceRoot":"","sources":["../src/upload-link.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,6BAA6B,EAC7B,+BAA+B,EAC/B,8BAA8B,EAC9B,+BAA+B,EAC/B,6BAA6B,EAC7B,gCAAgC,EAChC,yBAAyB,EACzB,0BAA0B,EAC1B,uBAAuB,EACvB,WAAW,IAAI,iBAAiB,EAChC,aAAa,EACb,mBAAmB,EACnB,cAAc,GAkBf,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,qBAAqB,EAA2B,MAAM,sBAAsB,CAAC;AACtF,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAA0D,MAAM,iBAAiB,CAAC;AAC3G,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAkCjC,MAAM,CAAC,MAAM,eAAe,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+B9B,CAAC;AAEF,kFAAkF;AAClF,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,wBAAwB,CAAU,CAAC;AAE3E,+GAA+G;AAC/G,MAAM,CAAC,MAAM,gBAAgB,GAAG,kBAAkB,CAAC;AACnD,MAAM,CAAC,MAAM,qBAAqB,GAAG,uBAAuB,CAAC;AAC7D,MAAM,CAAC,MAAM,wBAAwB,GAAG,0BAA0B,CAAC;AACnE,MAAM,CAAC,MAAM,wBAAwB,GAAG,0BAA0B,CAAC;AACnE,4EAA4E;AAC5E,MAAM,CAAC,MAAM,2BAA2B,GAAG,6BAA6B,CAAC;AAmBzE,MAAM,OAAO,GACX,oGAAoG;IACpG,gEAAgE,CAAC;AAEnE,wFAAwF;AACxF,MAAM,UAAU,oBAAoB;IAClC,OAAO,yBAAyB,GAAG,WAAW,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAC7F,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,wBAAwB,CAAC,GAAW;IAClD,MAAM,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAE,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAClD,OAAO,CAAC,KAAK,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9C,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAwB,IAAI,GAAG,CAAC;IAC/D,WAAW;IACX,uBAAuB;IACvB,eAAe;IACf,UAAU;IACV,iBAAiB;IACjB,UAAU;IACV,0FAA0F;IAC1F,qBAAqB;IACrB,iBAAiB;IACjB,iFAAiF;IACjF,2BAA2B;IAC3B,qDAAqD;IACrD,wBAAwB;IACxB,wBAAwB;IACxB,0BAA0B;IAC1B,0BAA0B;IAC1B,iBAAiB;IACjB,iBAAiB;IACjB,oBAAoB;IACpB,oBAAoB;IACpB,oBAAoB;IACpB,oBAAoB;IACpB,oBAAoB;IACpB,oBAAoB;IACpB,cAAc;IACd,iBAAiB;IACjB,mBAAmB;IACnB,mBAAmB;CACpB,CAAC,CAAC;AAEH;;;;GAIG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,IAAY,EAAW,EAAE,CAAC,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AAEtH;;;;;;;;GAQG;AACH,MAAM,kBAAkB,GAAG,oDAAoD,CAAC;AAChF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,IAAY,EAAW,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAE3F;;;;;;;GAOG;AACH,MAAM,UAAU,wBAAwB,CAAC,OAAiC,EAAE,IAAY;IACtF,MAAM,CAAC,GAAG,wBAAwB,CAAC,IAAI,CAAC,CAAC;IACzC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IACzC,IAAI,OAAO,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAClC,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACrH,CAAC;AAED,MAAM,OAAO,GAAG,CAAC,GAAkB,EAAE,GAAY,EAA6B,EAAE,CAC9E,GAAG,CAAC,UAAU,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;AAE9H,SAAS,QAAQ,CAAC,GAAkB,EAAE,GAAY;IAChD,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,MAAM,EAAE,EAAE,UAAU,EAAE,GAAG,CAAC,WAAW,EAAE,QAAQ,EAAE,GAAG,CAAC,SAAS,EAAE;QAChE,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,QAAQ,EAAE,GAAG,CAAC,SAAS;QACvB,YAAY,EAAE,GAAG,CAAC,aAAa,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,CAAc;QAC7F,UAAU,EAAE,GAAG,CAAC,UAAwB;QACxC,QAAQ,EAAE,iBAAiB,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC;QAChD,QAAQ,EAAE,GAAG,CAAC,SAAoB;QAClC,SAAS,EAAE,GAAG,CAAC,UAAqB;QACpC,KAAK,EAAE,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC;QACxB,UAAU,EAAE,GAAG,CAAC,WAA6B;QAC7C,YAAY,EAAE,GAAG,CAAC,aAAa;KAChC,CAAC;AACJ,CAAC;AAwDD,MAAM,aAAa,GAAG,IAAI,CAAC;AAE3B,SAAS,WAAW,CAAC,OAAqB,EAAE,IAAY;IACtD,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QACjC,MAAM,aAAa,CACjB,WAAW,EACX,GAAG,IAAI,4DAA4D,OAAO,CAAC,IAAI,gBAAgB;YAC7F,kCAAkC,EACpC,EAAE,MAAM,EAAE,wBAAwB,EAAE,CACrC,CAAC;IACJ,CAAC;IACD,OAAO,OAAO,CAAC,EAAE,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,IAAwB;IAC5D,MAAM,OAAO,GAAG,CAAC,EAAU,EAA6B,EAAE,CACxD,IAAI,CAAC,GAAG,CAAC,KAAK,CAAgB,UAAU,OAAO,2CAA2C,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAEvG,OAAO;QACL,KAAK,CAAC,aAAa,CAAC,GAAG;YACrB,IAAI,CAAC,YAAY,CAAC,+BAA+B,CAAC,CAAC;YACnD,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,+BAA+B,CAAC,CAAC;YAC1E,MAAM,KAAK,GAAG,mBAAmB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YACtD,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,aAAa,CACjB,mBAAmB,EACnB,mCAAmC,KAAK,CAAC,MAAM,CAAC,UAAU,uCAAuC,CAClG,CAAC;YACJ,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC;YAClC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,aAAa,CACjB,WAAW,EACX,mCAAmC,KAAK,CAAC,MAAM,CAAC,UAAU,+DAA+D,EACzH,EAAE,MAAM,EAAE,2BAA2B,EAAE,CACxC,CAAC;YACJ,CAAC;YACD,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC;YACnD,IAAI,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,QAAQ,GAAG,6BAA6B,EAAE,CAAC;gBAC3E,MAAM,aAAa,CACjB,mBAAmB,EACnB,2CAA2C,QAAQ,0BAA0B,MAAM,CAAC,QAAQ,wDAAwD,CACrJ,CAAC;YACJ,CAAC;YACD,uFAAuF;YACvF,aAAa,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;YAE5D,MAAM,EAAE,GAAG,IAAI,EAAE,CAAC;YAClB,MAAM,MAAM,GAAG,oBAAoB,EAAE,CAAC;YACtC,MAAM,SAAS,GAAG,IAAI,IAAI,CACxB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,IAAI,+BAA+B,CAAC,GAAG,aAAa,CAC7F,CAAC,WAAW,EAAa,CAAC;YAC3B,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,IAAI,UAAU,CAAC;YAClD,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,IAAI,IAAI,CAAC;YACjD,IAAI,CAAC,GAAG,CAAC,IAAI,CACX;;;kDAG0C,EAC1C;gBACE,EAAE;gBACF,MAAM,mBAAmB,CAAC,MAAM,CAAC;gBACjC,KAAK,CAAC,MAAM,CAAC,UAAU;gBACvB,KAAK,CAAC,MAAM,CAAC,QAAQ;gBACrB,KAAK,CAAC,QAAQ,IAAI,IAAI;gBACtB,QAAQ;gBACR,YAAY,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC;gBAC3D,UAAU;gBACV,MAAM;gBACN,IAAI,CAAC,GAAG;gBACR,SAAS;aACV,CACF,CAAC;YACF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACzB,MAAM,OAAO,GAAsC;gBACjD,MAAM,EAAE,EAAE;gBACV,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,IAAI;gBAChC,QAAQ;gBACR,YAAY;gBACZ,UAAU;gBACV,SAAS;gBACT,QAAQ,EAAE,MAAM;aACjB,CAAC;YACF,IAAI,CAAC,IAAI,CAAC;gBACR,IAAI,EAAE,6BAA6B;gBACnC,aAAa,EAAE,CAAC;gBAChB,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,QAAQ,EAAE,MAAM;gBAChB,OAAO;aACR,CAAC,CAAC;YACH,OAAO;gBACL,EAAE;gBACF,MAAM;gBACN,IAAI,EAAE,cAAc,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC;gBAC1C,SAAS;gBACT,QAAQ;gBACR,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,IAAI;aACjC,CAAC;QACJ,CAAC;QAED,KAAK,CAAC,gBAAgB,CAAC,EAAE;YACvB,IAAI,CAAC,YAAY,CAAC,kCAAkC,CAAC,CAAC;YACtD,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,kCAAkC,CAAC,CAAC;YAC9E,MAAM,GAAG,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC;YACxB,IAAI,CAAC,GAAG;gBAAE,MAAM,aAAa,CAAC,WAAW,EAAE,kBAAkB,EAAE,gBAAgB,CAAC,CAAC;YACjF,MAAM,MAAM,GAAG,EAAE,UAAU,EAAE,GAAG,CAAC,WAAW,EAAE,QAAQ,EAAE,GAAG,CAAC,SAAS,EAAE,CAAC;YACxE,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YAC9C,IAAI,MAAM;gBAAE,aAAa,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;YAClE,iEAAiE;YACjE,IAAI,GAAG,CAAC,UAAU,KAAK,IAAI,IAAI,GAAG,CAAC,WAAW,KAAK,IAAI;gBAAE,OAAO;YAChE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,+EAA+E,EAAE;gBAC7F,IAAI,CAAC,GAAG;gBACR,OAAO;gBACP,EAAE;aACH,CAAC,CAAC;YACH,MAAM,OAAO,GAAuC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC;YAC/F,IAAI,CAAC,IAAI,CAAC;gBACR,IAAI,EAAE,8BAA8B;gBACpC,aAAa,EAAE,CAAC;gBAChB,MAAM;gBACN,QAAQ,EAAE,MAAM;gBAChB,OAAO;aACR,CAAC,CAAC;QACL,CAAC;QAED,WAAW,CAAC,MAAM;YAChB,MAAM,MAAM,GAAe,EAAE,CAAC;YAC9B,IAAI,KAAK,GAAG,EAAE,CAAC;YACf,IAAI,MAAM,EAAE,MAAM,EAAE,CAAC;gBACnB,KAAK,GAAG,yCAAyC,CAAC;gBAClD,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAChE,CAAC;YACD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;YAC1E,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACnB,OAAO,IAAI,CAAC,GAAG;iBACZ,KAAK,CACJ,UAAU,OAAO,gCAAgC,KAAK,2BAA2B,EACjF,MAAM,CACP;iBACA,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QACvC,CAAC;KACF,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,gEAAgE;AAChE,8EAA8E;AAE9E,8GAA8G;AAC9G,MAAM,WAAW,GAAG,GAAG,EAAE,CAAC,aAAa,CAAC,WAAW,EAAE,gCAAgC,CAAC,CAAC;AACvF,sGAAsG;AACtG,MAAM,QAAQ,GAAG,GAAG,EAAE,CACpB,aAAa,CAAC,UAAU,EAAE,6DAA6D,EAAE,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC,CAAC;AAEzH,uGAAuG;AACvG,MAAM,WAAW,GAAG,GAAG,EAAE,CACvB,aAAa,CAAC,WAAW,EAAE,gDAAgD,EAAE,EAAE,MAAM,EAAE,wBAAwB,EAAE,CAAC,CAAC;AAErH;;;;GAIG;AACH,KAAK,UAAU,kBAAkB,CAAC,GAAuB;IACvD,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IACxC,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC,EAAE,CAAC;QACrC,MAAM,aAAa,CACjB,mBAAmB,EACnB,8GAA8G,CAC/G,CAAC;IACJ,CAAC;IACD,OAAO,mBAAmB,CAAC,GAAG,CAAC,CAAC;AAClC,CAAC;AAQD;;;;;;;;;;GAUG;AACH,KAAK,UAAU,WAAW,CACxB,GAAc,EACd,GAAY,EACZ,MAAe,EACf,MAAkB,EAClB,OAAgB;IAEhB,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC;QAAE,MAAM,WAAW,EAAE,CAAC;IAC1D,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CACnB,UAAU,OAAO,mDAAmD,EACpE,CAAC,MAAM,mBAAmB,CAAC,MAAM,CAAC,CAAC,CACpC,CAAC,CAAC,CAAC,CAAC;IACL,IAAI,CAAC,GAAG;QAAE,MAAM,WAAW,EAAE,CAAC;IAC9B,IAAI,MAAM,IAAI,CAAC,GAAG,CAAC,WAAW,KAAK,MAAM,CAAC,UAAU,IAAI,GAAG,CAAC,SAAS,KAAK,MAAM,CAAC,QAAQ,CAAC;QAAE,MAAM,WAAW,EAAE,CAAC;IAChH,IAAI,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,KAAK,SAAS;QAAE,OAAO,EAAE,GAAG,EAAE,CAAC;IACpD,IAAI,OAAO,KAAK,SAAS,IAAI,GAAG,CAAC,WAAW,KAAK,IAAI,IAAI,GAAG,GAAG,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC;QAClF,mFAAmF;QACnF,MAAM,UAAU,GAAG,GAAG,CAAC,KAAK,CAC1B;;;;;4FAKsF,EACtF,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,CAClB,CAAC,CAAC,CAAC,CAAC;QACL,IAAI,UAAU;YAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,qBAAqB,CAAC,UAAU,CAAC,EAAE,CAAC;IAC5E,CAAC;IACD,MAAM,QAAQ,EAAE,CAAC;AACnB,CAAC;AAED,wFAAwF;AACxF,MAAM,aAAa,GAAG,CAAC,GAAkB,EAAW,EAAE,CACpD,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,gCAAgC,GAAG,aAAa,CAAC,CAAC,WAAW,EAAa,CAAC;AAanH;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,IAAsC,EACtC,MAAe,EACf,MAAkB,EAClB,cAAuB;IAEvB,MAAM,OAAO,GAAG,MAAM,kBAAkB,CAAC,cAAc,CAAC,CAAC;IACzD,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IACvF,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IAClC,OAAO;QACL,IAAI,EAAE;YACJ,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,YAAY,EAAE,CAAC,CAAC,YAAY;YAC5B,UAAU,EAAE,CAAC,CAAC,UAAU;SACzB;QACD,QAAQ,EAAE,CAAC,CAAC,QAAQ;QACpB,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC9B,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,KAAK,UAAU,qBAAqB,CAAC,MAAwB,EAAE,IAAgB;IAC7E,IAAI,IAAI,CAAC,UAAU,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,gBAAgB,CAAC,IAAI,CAAC,CAAC,KAAK,MAAM,CAAC,MAAM,EAAE,CAAC;QACxF,MAAM,aAAa,CACjB,UAAU,EACV,4FAA4F,EAC5F,EAAE,MAAM,EAAE,2BAA2B,EAAE,CACxC,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,OAA4C,EAC5C,KAAoD,EACpD,KAAsE;IAEtE,MAAM,QAAQ,GAAG,KAAK,EAAE,MAAwB,EAA+B,EAAE,CAAC,CAAC;QACjF,GAAG,CAAC,MAAM,qBAAqB,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QACpD,QAAQ,EAAE,IAAI;KACf,CAAC,CAAC;IACH,MAAM,UAAU,GAAG,MAAM,OAAO,EAAE,CAAC;IACnC,IAAI,UAAU,CAAC,MAAM;QAAE,OAAO,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IAC1D,IAAI,CAAC;QACH,OAAO,MAAM,KAAK,CAAC,UAAU,CAAC,CAAC;IACjC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,MAAM,GAAI,GAAoD,EAAE,UAAU,EAAE,MAAM,CAAC;QACzF,IAAI,KAAK,CAAC,cAAc,KAAK,SAAS,IAAI,MAAM,KAAK,gBAAgB;YAAE,MAAM,GAAG,CAAC;QACjF,MAAM,KAAK,GAAG,MAAM,OAAO,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QACrD,IAAI,KAAK,EAAE,MAAM;YAAE,OAAO,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACjD,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,6BAA6B,CACjD,IAIC,EACD,MAAe,EACf,MAAwB,EACxB,cAAuB;IAEvB,MAAM,OAAO,GAAG,MAAM,kBAAkB,CAAC,cAAc,CAAC,CAAC;IACzD,0FAA0F;IAC1F,+FAA+F;IAC/F,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IAC7E,IAAI,MAAM,CAAC,SAAS,KAAK,GAAG,CAAC,SAAS,EAAE,CAAC;QACvC,MAAM,aAAa,CAAC,UAAU,EAAE,8DAA8D,CAAC,CAAC;IAClG,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,GAAG,GAAG,CAAC,SAAS,EAAE,CAAC;QAChC,MAAM,aAAa,CAAC,mBAAmB,EAAE,eAAe,MAAM,CAAC,IAAI,oCAAoC,GAAG,CAAC,SAAS,GAAG,EAAE;YACvH,MAAM,EAAE,qBAAqB;SAC9B,CAAC,CAAC;IACL,CAAC;IACD,MAAM,OAAO,GAAG,GAAG,CAAC,aAAa,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,CAAc,CAAC;IAChG,IAAI,CAAC,wBAAwB,CAAC,OAAO,EAAE,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC;QAC3D,MAAM,aAAa,CAAC,mBAAmB,EAAE,kBAAkB,MAAM,CAAC,WAAW,gCAAgC,EAAE;YAC7G,MAAM,EAAE,wBAAwB;SACjC,CAAC,CAAC;IACL,CAAC;IACD,IAAI,GAAG,CAAC,QAAQ,KAAK,IAAI,IAAI,MAAM,CAAC,QAAQ,KAAK,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC9D,MAAM,aAAa,CAAC,UAAU,EAAE,kEAAkE,CAAC,CAAC;IACtG,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CACzB;iEAC6D,EAC7D,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,EAAE,OAAO,IAAI,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,CAC/C,CAAC;IACF,IAAI,KAAK,CAAC,OAAO,KAAK,CAAC;QAAE,MAAM,QAAQ,EAAE,CAAC;IAC1C,MAAM,OAAO,GAAwC;QACnD,MAAM,EAAE,GAAG,CAAC,EAAE;QACd,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,YAAY,EAAE,MAAM,CAAC,EAAE;QACvB,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,QAAQ,EAAE,iBAAiB,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC;KACjD,CAAC;IACF,IAAI,CAAC,IAAI,CAAC;QACR,IAAI,EAAE,+BAA+B;QACrC,aAAa,EAAE,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,QAAQ,EAAE,MAAM;QAChB,OAAO;KACR,CAAC,CAAC;AACL,CAAC"}