@rudderhq/db 0.7.1 → 0.7.2

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 (65) hide show
  1. package/dist/backup-lib.d.ts.map +1 -1
  2. package/dist/backup-lib.js +11 -3
  3. package/dist/backup-lib.js.map +1 -1
  4. package/dist/client.d.ts +25 -1
  5. package/dist/client.d.ts.map +1 -1
  6. package/dist/client.js +304 -20
  7. package/dist/client.js.map +1 -1
  8. package/dist/client.test.js +217 -29
  9. package/dist/client.test.js.map +1 -1
  10. package/dist/embedded-postgres-recovery.d.ts +11 -0
  11. package/dist/embedded-postgres-recovery.d.ts.map +1 -1
  12. package/dist/embedded-postgres-recovery.js +50 -11
  13. package/dist/embedded-postgres-recovery.js.map +1 -1
  14. package/dist/embedded-postgres-recovery.test.js +50 -2
  15. package/dist/embedded-postgres-recovery.test.js.map +1 -1
  16. package/dist/index.d.ts +3 -2
  17. package/dist/index.d.ts.map +1 -1
  18. package/dist/index.js +3 -2
  19. package/dist/index.js.map +1 -1
  20. package/dist/local-postgres-provider.d.ts +3 -0
  21. package/dist/local-postgres-provider.d.ts.map +1 -1
  22. package/dist/local-postgres-provider.js +92 -10
  23. package/dist/local-postgres-provider.js.map +1 -1
  24. package/dist/local-postgres-provider.test.js +24 -1
  25. package/dist/local-postgres-provider.test.js.map +1 -1
  26. package/dist/migration-manifest.d.ts +41 -0
  27. package/dist/migration-manifest.d.ts.map +1 -0
  28. package/dist/migration-manifest.js +186 -0
  29. package/dist/migration-manifest.js.map +1 -0
  30. package/dist/migration-manifest.test.d.ts +2 -0
  31. package/dist/migration-manifest.test.d.ts.map +1 -0
  32. package/dist/migration-manifest.test.js +88 -0
  33. package/dist/migration-manifest.test.js.map +1 -0
  34. package/dist/migration-runtime.d.ts.map +1 -1
  35. package/dist/migration-runtime.js +18 -33
  36. package/dist/migration-runtime.js.map +1 -1
  37. package/dist/migrations/0143_goal_contract.sql +97 -0
  38. package/dist/migrations/0144_eminent_umar.sql +16 -0
  39. package/dist/migrations/0145_public_nehzno.sql +96 -0
  40. package/dist/migrations/0146_medical_roulette.sql +1 -0
  41. package/dist/migrations/0147_github_mcp_provider.sql +4 -0
  42. package/dist/migrations/0148_chat_message_transcript_entries.sql +20 -0
  43. package/dist/migrations/chat-transcript-storage.test.ts +211 -0
  44. package/dist/migrations/github-mcp-provider.test.ts +20 -0
  45. package/dist/migrations/meta/0143_snapshot.json +25318 -0
  46. package/dist/migrations/meta/0144_snapshot.json +25336 -0
  47. package/dist/migrations/meta/0145_snapshot.json +27010 -0
  48. package/dist/migrations/meta/0146_snapshot.json +27016 -0
  49. package/dist/migrations/meta/0147_snapshot.json +27016 -0
  50. package/dist/migrations/meta/_journal.json +42 -0
  51. package/dist/schema/chat_message_transcript_entries.d.ts +82 -0
  52. package/dist/schema/chat_message_transcript_entries.d.ts.map +1 -0
  53. package/dist/schema/chat_message_transcript_entries.js +20 -0
  54. package/dist/schema/chat_message_transcript_entries.js.map +1 -0
  55. package/dist/schema/goals.d.ts +2110 -0
  56. package/dist/schema/goals.d.ts.map +1 -1
  57. package/dist/schema/goals.js +169 -1
  58. package/dist/schema/goals.js.map +1 -1
  59. package/dist/schema/index.d.ts +2 -1
  60. package/dist/schema/index.d.ts.map +1 -1
  61. package/dist/schema/index.js +2 -1
  62. package/dist/schema/index.js.map +1 -1
  63. package/dist/schema/mcp_connections.js +2 -2
  64. package/dist/schema/mcp_connections.js.map +1 -1
  65. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"backup-lib.d.ts","sourceRoot":"","sources":["../src/backup-lib.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,wBAAwB,GAAG;IACrC,gBAAgB,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;CAC3C,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,iCAAiC,GAAG;IAC9C,gBAAgB,EAAE,MAAM,CAAC;IACzB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,+BAA+B,GAAG;IAC5C,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACvC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,uBAAuB,EAAE,MAAM,CAAC;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,+BAA+B,EAAE,CAAC;CAClD,CAAC;AAEF,MAAM,MAAM,+BAA+B,GAAG;IAC5C,UAAU,EAAE,OAAO,CAAC;IACpB,MAAM,EAAE,0CAA0C,GAAG,IAAI,CAAC;IAC1D,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC,CAAC;AA2HF,wBAAgB,kCAAkC,CAChD,QAAQ,EAAE,0BAA0B,EACpC,iBAAiB,EAAE,MAAM,GACxB,+BAA+B,CAsBjC;AAED,wBAAsB,0BAA0B,CAC9C,IAAI,EAAE,iCAAiC,GACtC,OAAO,CAAC,0BAA0B,CAAC,CAkDrC;AAED,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,wBAAwB,GAAG,OAAO,CAAC,uBAAuB,CAAC,CA0XxG;AAED,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,yBAAyB,GAAG,OAAO,CAAC,IAAI,CAAC,CA4BvF;AAED,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,uBAAuB,GAAG,MAAM,CAIlF"}
1
+ {"version":3,"file":"backup-lib.d.ts","sourceRoot":"","sources":["../src/backup-lib.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,wBAAwB,GAAG;IACrC,gBAAgB,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;CAC3C,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,iCAAiC,GAAG;IAC9C,gBAAgB,EAAE,MAAM,CAAC;IACzB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,+BAA+B,GAAG;IAC5C,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACvC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,uBAAuB,EAAE,MAAM,CAAC;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,+BAA+B,EAAE,CAAC;CAClD,CAAC;AAEF,MAAM,MAAM,+BAA+B,GAAG;IAC5C,UAAU,EAAE,OAAO,CAAC;IACpB,MAAM,EAAE,0CAA0C,GAAG,IAAI,CAAC;IAC1D,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC,CAAC;AA2HF,wBAAgB,kCAAkC,CAChD,QAAQ,EAAE,0BAA0B,EACpC,iBAAiB,EAAE,MAAM,GACxB,+BAA+B,CAsBjC;AAED,wBAAsB,0BAA0B,CAC9C,IAAI,EAAE,iCAAiC,GACtC,OAAO,CAAC,0BAA0B,CAAC,CAkDrC;AAED,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,wBAAwB,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAmYxG;AAED,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,yBAAyB,GAAG,OAAO,CAAC,IAAI,CAAC,CA4BvF;AAED,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,uBAAuB,GAAG,MAAM,CAIlF"}
@@ -1,5 +1,6 @@
1
+ import { randomUUID } from "node:crypto";
1
2
  import { existsSync, mkdirSync, readdirSync, statSync, unlinkSync } from "node:fs";
2
- import { readFile, writeFile } from "node:fs/promises";
3
+ import { readFile, rename, rm, writeFile } from "node:fs/promises";
3
4
  import { basename, resolve } from "node:path";
4
5
  import postgres from "postgres";
5
6
  const DRIZZLE_SCHEMA = "drizzle";
@@ -467,8 +468,15 @@ export async function runDatabaseBackup(opts) {
467
468
  emit("");
468
469
  // Write the backup file
469
470
  mkdirSync(opts.backupDir, { recursive: true });
470
- const backupFile = resolve(opts.backupDir, `${filenamePrefix}-${timestamp()}.sql`);
471
- await writeFile(backupFile, lines.join("\n"), "utf8");
471
+ const backupFile = resolve(opts.backupDir, `${filenamePrefix}-${timestamp()}-${process.pid}-${randomUUID()}.sql`);
472
+ const temporaryBackupFile = `${backupFile}.tmp-${randomUUID()}`;
473
+ try {
474
+ await writeFile(temporaryBackupFile, lines.join("\n"), "utf8");
475
+ await rename(temporaryBackupFile, backupFile);
476
+ }
477
+ finally {
478
+ await rm(temporaryBackupFile, { force: true }).catch(() => undefined);
479
+ }
472
480
  const sizeBytes = statSync(backupFile).size;
473
481
  const prunedCount = pruneOldBackups(opts.backupDir, retentionDays, filenamePrefix);
474
482
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"backup-lib.js","sourceRoot":"","sources":["../src/backup-lib.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACnF,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,QAAQ,MAAM,UAAU,CAAC;AAwEhC,MAAM,cAAc,GAAG,SAAS,CAAC;AACjC,MAAM,wBAAwB,GAAG,sBAAsB,CAAC;AAExD,MAAM,oBAAoB,GAAG,qEAAqE,CAAC;AAEnG,SAAS,2BAA2B,CAAC,KAAc;IACjD,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACvC,MAAM,MAAM,GAAG,KAAgC,CAAC;QAChD,MAAM,SAAS,GAAG,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ;YAClD,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE;YAC7C,CAAC,CAAC,EAAE,CAAC;QACP,MAAM,MAAM,GAAG,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7E,MAAM,QAAQ,GAAG,OAAO,MAAM,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACnF,MAAM,OAAO,GAAG,SAAS,IAAI,MAAM,IAAI,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAChG,OAAO,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,KAAK,OAAO,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;IACxD,CAAC;IACD,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAChE,CAAC;AAED,SAAS,SAAS,CAAC,OAAa,IAAI,IAAI,EAAE;IACxC,MAAM,GAAG,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACtD,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC;AAC5J,CAAC;AAED,SAAS,eAAe,CAAC,SAAiB,EAAE,aAAqB,EAAE,cAAsB;IACvF,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;QAAE,OAAO,CAAC,CAAC;IACrC,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC;IAC7D,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,aAAa,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IAChE,IAAI,MAAM,GAAG,CAAC,CAAC;IAEf,KAAK,MAAM,IAAI,IAAI,WAAW,CAAC,SAAS,CAAC,EAAE,CAAC;QAC1C,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,cAAc,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;YAAE,SAAS;QAC/E,MAAM,QAAQ,GAAG,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAC1C,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAChC,IAAI,IAAI,CAAC,OAAO,GAAG,MAAM,EAAE,CAAC;YAC1B,UAAU,CAAC,QAAQ,CAAC,CAAC;YACrB,MAAM,EAAE,CAAC;QACX,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,gBAAgB,CAAC,SAAiB;IACzC,IAAI,SAAS,GAAG,IAAI;QAAE,OAAO,GAAG,SAAS,GAAG,CAAC;IAC7C,IAAI,SAAS,GAAG,IAAI,GAAG,IAAI;QAAE,OAAO,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IACxE,OAAO,GAAG,CAAC,SAAS,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;AACtD,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAa;IACrC,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IAC/C,IAAI,GAAG,GAAG,UAAU,CAAC;IACrB,OAAO,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/B,GAAG,GAAG,cAAc,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC;IAChE,CAAC;IACD,OAAO,GAAG,GAAG,GAAG,SAAS,GAAG,GAAG,EAAE,CAAC;AACpC,CAAC;AAED,SAAS,qBAAqB,CAAC,MAA4B;IACzD,OAAO,IAAI,GAAG,CACZ,CAAC,MAAM,IAAI,EAAE,CAAC;SACX,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;SAC5B,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CACvC,CAAC;AACJ,CAAC;AAED,SAAS,yBAAyB,CAAC,MAA4C;IAC7E,MAAM,GAAG,GAAG,IAAI,GAAG,EAAuB,CAAC;IAC3C,IAAI,CAAC,MAAM;QAAE,OAAO,GAAG,CAAC;IACxB,KAAK,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1D,MAAM,eAAe,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC;QACzC,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QAC3C,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAC/B,OAAO;aACJ,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;aAC9B,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CACzC,CAAC;QACF,IAAI,iBAAiB,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YAC/B,GAAG,CAAC,GAAG,CAAC,eAAe,EAAE,iBAAiB,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,eAAe,CAAC,KAAa;IACpC,OAAO,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC;AAC/C,CAAC;AAED,SAAS,kBAAkB,CAAC,UAAkB,EAAE,UAAkB;IAChE,OAAO,GAAG,eAAe,CAAC,UAAU,CAAC,IAAI,eAAe,CAAC,UAAU,CAAC,EAAE,CAAC;AACzE,CAAC;AAED,SAAS,QAAQ,CAAC,UAAkB,EAAE,SAAiB;IACrD,OAAO,GAAG,UAAU,IAAI,SAAS,EAAE,CAAC;AACtC,CAAC;AAED,SAAS,yBAAyB,CAAC,KAAc;IAC/C,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC7B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC;QAAE,OAAO,CAAC,CAAC;IACrD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,kCAAkC,CAChD,QAAoC,EACpC,iBAAyB;IAEzB,MAAM,qBAAqB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC;IACzE,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAC7B,QAAQ,CAAC,iBAAiB,EAC1B,QAAQ,CAAC,uBAAuB,CACjC,CAAC;IAEF,IAAI,cAAc,GAAG,qBAAqB,EAAE,CAAC;QAC3C,OAAO;YACL,UAAU,EAAE,IAAI;YAChB,MAAM,EAAE,0CAA0C;YAClD,cAAc;YACd,iBAAiB,EAAE,qBAAqB;SACzC,CAAC;IACJ,CAAC;IAED,OAAO;QACL,UAAU,EAAE,KAAK;QACjB,MAAM,EAAE,IAAI;QACZ,cAAc;QACd,iBAAiB,EAAE,qBAAqB;KACzC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,IAAuC;IAEvC,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,qBAAqB,IAAI,CAAC,CAAC,CAAC,CAAC;IAChF,MAAM,uBAAuB,GAAG,IAAI,CAAC,uBAAuB,KAAK,IAAI,CAAC;IACtE,MAAM,kBAAkB,GAAG,qBAAqB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IACrE,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,eAAe,EAAE,cAAc,EAAE,CAAC,CAAC;IAEzF,IAAI,CAAC;QACH,MAAM,GAAG,CAAA,UAAU,CAAC;QAEpB,MAAM,YAAY,GAAG,MAAM,GAAG,CAA4C;;KAEzE,CAAC;QACF,MAAM,YAAY,GAAG,MAAM,GAAG,CAK1B;;;;;;;;;;;gBAWQ,uBAAuB,6BAA6B,cAAc,oBAAoB,wBAAwB;;;KAGzH,CAAC;QACF,MAAM,UAAU,GAAG,YAAY;aAC5B,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,kBAAkB,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;aACxD,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YACb,UAAU,EAAE,GAAG,CAAC,WAAW;YAC3B,SAAS,EAAE,GAAG,CAAC,UAAU;YACzB,UAAU,EAAE,yBAAyB,CAAC,GAAG,CAAC,WAAW,CAAC;YACtD,WAAW,EAAE,yBAAyB,CAAC,GAAG,CAAC,YAAY,CAAC;SACzD,CAAC,CAAC,CAAC;QAEN,OAAO;YACL,iBAAiB,EAAE,yBAAyB,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,mBAAmB,CAAC;YAClF,uBAAuB,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;YACjF,UAAU,EAAE,UAAU,CAAC,MAAM;YAC7B,aAAa,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;SACtC,CAAC;IACJ,CAAC;YAAS,CAAC;QACT,MAAM,GAAG,CAAC,GAAG,EAAE,CAAC;IAClB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,IAA8B;IACpE,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,IAAI,QAAQ,CAAC;IACvD,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;IAClE,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,qBAAqB,IAAI,CAAC,CAAC,CAAC,CAAC;IAChF,MAAM,uBAAuB,GAAG,IAAI,CAAC,uBAAuB,KAAK,IAAI,CAAC;IACtE,MAAM,kBAAkB,GAAG,qBAAqB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IACrE,MAAM,uBAAuB,GAAG,yBAAyB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAC/E,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,eAAe,EAAE,cAAc,EAAE,CAAC,CAAC;IAEzF,IAAI,CAAC;QACH,MAAM,GAAG,CAAA,UAAU,CAAC;QAEpB,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,MAAM,IAAI,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChD,MAAM,aAAa,GAAG,CAAC,SAAiB,EAAE,EAAE;YAC1C,IAAI,CAAC,SAAS,CAAC,CAAC;YAChB,IAAI,CAAC,oBAAoB,CAAC,CAAC;QAC7B,CAAC,CAAC;QACF,MAAM,qBAAqB,GAAG,GAAG,EAAE;YACjC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QAC7B,CAAC,CAAC;QAEF,IAAI,CAAC,2BAA2B,CAAC,CAAC;QAClC,IAAI,CAAC,eAAe,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QAChD,IAAI,CAAC,EAAE,CAAC,CAAC;QACT,aAAa,CAAC,QAAQ,CAAC,CAAC;QACxB,aAAa,CAAC,+CAA+C,CAAC,CAAC;QAC/D,aAAa,CAAC,0CAA0C,CAAC,CAAC;QAC1D,IAAI,CAAC,EAAE,CAAC,CAAC;QAET,MAAM,SAAS,GAAG,MAAM,GAAG,CAAmB;;;;;;gBAMlC,uBAAuB,gCAAgC,cAAc,qBAAqB,wBAAwB;;;KAG7H,CAAC;QACF,MAAM,MAAM,GAAG,SAAS,CAAC;QACzB,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;QAEjH,gBAAgB;QAChB,MAAM,KAAK,GAAG,MAAM,GAAG,CAAyC;;;;;;;;KAQ/D,CAAC;QAEF,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC5E,aAAa,CAAC,yBAAyB,CAAC,CAAC,OAAO,cAAc,MAAM,IAAI,CAAC,CAAC;QAC5E,CAAC;QACD,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;YAAE,IAAI,CAAC,EAAE,CAAC,CAAC;QAE/B,MAAM,YAAY,GAAG,MAAM,GAAG,CAAsB;;;;;;;;;;;;;;;;;;;;;eAqBzC,uBAAuB,qCAAqC,cAAc;;KAEpF,CAAC;QACF,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,CACnC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,WAAW,IAAI,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,YAAY,IAAI,QAAQ,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC,CAC7G,CAAC;QAEF,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;QAClC,KAAK,MAAM,KAAK,IAAI,MAAM;YAAE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAC3D,KAAK,MAAM,GAAG,IAAI,SAAS;YAAE,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;QAC9D,MAAM,YAAY,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC;QAClF,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,IAAI,CAAC,YAAY,CAAC,CAAC;YACnB,KAAK,MAAM,UAAU,IAAI,YAAY,EAAE,CAAC;gBACtC,aAAa,CAAC,+BAA+B,eAAe,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YAC/E,CAAC;YACD,IAAI,CAAC,EAAE,CAAC,CAAC;QACX,CAAC;QAED,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,IAAI,CAAC,cAAc,CAAC,CAAC;YACrB,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;gBAC5B,MAAM,qBAAqB,GAAG,kBAAkB,CAAC,GAAG,CAAC,eAAe,EAAE,GAAG,CAAC,aAAa,CAAC,CAAC;gBACzF,aAAa,CAAC,2BAA2B,qBAAqB,WAAW,CAAC,CAAC;gBAC3E,aAAa,CACX,mBAAmB,qBAAqB,OAAO,GAAG,CAAC,SAAS,iBAAiB,GAAG,CAAC,SAAS,aAAa,GAAG,CAAC,aAAa,aAAa,GAAG,CAAC,aAAa,eAAe,GAAG,CAAC,WAAW,GAAG,GAAG,CAAC,YAAY,KAAK,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,GAAG,CAC9O,CAAC;YACJ,CAAC;YACD,IAAI,CAAC,EAAE,CAAC,CAAC;QACX,CAAC;QAED,4CAA4C;QAC5C,KAAK,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,IAAI,MAAM,EAAE,CAAC;YAChD,MAAM,kBAAkB,GAAG,kBAAkB,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;YACtE,MAAM,OAAO,GAAG,MAAM,GAAG,CASrB;;;;+BAIqB,WAAW,qBAAqB,SAAS;;OAEjE,CAAC;YAEF,IAAI,CAAC,aAAa,WAAW,IAAI,SAAS,EAAE,CAAC,CAAC;YAC9C,aAAa,CAAC,wBAAwB,kBAAkB,WAAW,CAAC,CAAC;YAErE,MAAM,OAAO,GAAa,EAAE,CAAC;YAC7B,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;gBAC1B,IAAI,OAAe,CAAC;gBACpB,IAAI,GAAG,CAAC,SAAS,KAAK,cAAc,EAAE,CAAC;oBACrC,OAAO,GAAG,IAAI,GAAG,CAAC,QAAQ,GAAG,CAAC;gBAChC,CAAC;qBAAM,IAAI,GAAG,CAAC,SAAS,KAAK,OAAO,EAAE,CAAC;oBACrC,OAAO,GAAG,GAAG,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC;gBAClD,CAAC;qBAAM,IAAI,GAAG,CAAC,SAAS,KAAK,mBAAmB,EAAE,CAAC;oBACjD,OAAO,GAAG,GAAG,CAAC,wBAAwB;wBACpC,CAAC,CAAC,WAAW,GAAG,CAAC,wBAAwB,GAAG;wBAC5C,CAAC,CAAC,SAAS,CAAC;gBAChB,CAAC;qBAAM,IAAI,GAAG,CAAC,SAAS,KAAK,SAAS,IAAI,GAAG,CAAC,iBAAiB,IAAI,IAAI,EAAE,CAAC;oBACxE,OAAO;wBACL,GAAG,CAAC,aAAa,IAAI,IAAI;4BACvB,CAAC,CAAC,WAAW,GAAG,CAAC,iBAAiB,KAAK,GAAG,CAAC,aAAa,GAAG;4BAC3D,CAAC,CAAC,WAAW,GAAG,CAAC,iBAAiB,GAAG,CAAC;gBAC5C,CAAC;qBAAM,CAAC;oBACN,OAAO,GAAG,GAAG,CAAC,SAAS,CAAC;gBAC1B,CAAC;gBAED,IAAI,GAAG,GAAG,MAAM,GAAG,CAAC,WAAW,KAAK,OAAO,EAAE,CAAC;gBAC9C,IAAI,GAAG,CAAC,cAAc,IAAI,IAAI;oBAAE,GAAG,IAAI,YAAY,GAAG,CAAC,cAAc,EAAE,CAAC;gBACxE,IAAI,GAAG,CAAC,WAAW,KAAK,IAAI;oBAAE,GAAG,IAAI,WAAW,CAAC;gBACjD,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACpB,CAAC;YAED,cAAc;YACd,MAAM,EAAE,GAAG,MAAM,GAAG,CAAuD;;;;;;;4BAOrD,WAAW,oBAAoB,SAAS;;OAE7D,CAAC;YACF,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;gBACnB,MAAM,IAAI,GAAG,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC5D,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,eAAe,kBAAkB,IAAI,GAAG,CAAC,CAAC;YAC5E,CAAC;YAED,IAAI,CAAC,gBAAgB,kBAAkB,IAAI,CAAC,CAAC;YAC7C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;YAC1B,IAAI,CAAC,IAAI,CAAC,CAAC;YACX,qBAAqB,EAAE,CAAC;YACxB,IAAI,CAAC,EAAE,CAAC,CAAC;QACX,CAAC;QAED,MAAM,cAAc,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC;QACtF,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,IAAI,CAAC,uBAAuB,CAAC,CAAC;YAC9B,KAAK,MAAM,GAAG,IAAI,cAAc,EAAE,CAAC;gBACjC,aAAa,CACX,kBAAkB,kBAAkB,CAAC,GAAG,CAAC,eAAe,EAAE,GAAG,CAAC,aAAa,CAAC,aAAa,kBAAkB,CAAC,GAAG,CAAC,YAAY,IAAI,QAAQ,EAAE,GAAG,CAAC,WAAY,CAAC,IAAI,eAAe,CAAC,GAAG,CAAC,YAAa,CAAC,GAAG,CACrM,CAAC;YACJ,CAAC;YACD,IAAI,CAAC,EAAE,CAAC,CAAC;QACX,CAAC;QAED,0CAA0C;QAC1C,MAAM,cAAc,GAAG,MAAM,GAAG,CAU5B;;;;;;;;;;;;;;;;;;;;cAoBM,uBAAuB,gCAAgC,cAAc;;;;KAI9E,CAAC;QACF,MAAM,GAAG,GAAG,cAAc,CAAC,MAAM,CAC/B,CAAC,EAAE,EAAE,EAAE,CAAC,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,aAAa,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC;eACtE,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,aAAa,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,CACzE,CAAC;QAEF,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnB,IAAI,CAAC,iBAAiB,CAAC,CAAC;YACxB,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;gBACrB,MAAM,OAAO,GAAG,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAClE,MAAM,OAAO,GAAG,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAClE,aAAa,CACX,eAAe,kBAAkB,CAAC,EAAE,CAAC,aAAa,EAAE,EAAE,CAAC,YAAY,CAAC,oBAAoB,EAAE,CAAC,eAAe,kBAAkB,OAAO,gBAAgB,kBAAkB,CAAC,EAAE,CAAC,aAAa,EAAE,EAAE,CAAC,YAAY,CAAC,KAAK,OAAO,eAAe,EAAE,CAAC,WAAW,cAAc,EAAE,CAAC,WAAW,GAAG,CACjR,CAAC;YACJ,CAAC;YACD,IAAI,CAAC,EAAE,CAAC,CAAC;QACX,CAAC;QAED,qBAAqB;QACrB,MAAM,oBAAoB,GAAG,MAAM,GAAG,CAKlC;;;;;;;;;;;cAWM,uBAAuB,6BAA6B,cAAc;;;;KAI3E,CAAC;QACF,MAAM,OAAO,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAE7H,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,IAAI,CAAC,uBAAuB,CAAC,CAAC;YAC9B,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;gBACxB,MAAM,IAAI,GAAG,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC5D,aAAa,CAAC,eAAe,kBAAkB,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC,eAAe,aAAa,IAAI,IAAI,CAAC,CAAC;YACzI,CAAC;YACD,IAAI,CAAC,EAAE,CAAC,CAAC;QACX,CAAC;QAED,+CAA+C;QAC/C,MAAM,UAAU,GAAG,MAAM,GAAG,CAAgE;;;;;gBAKhF,uBAAuB,8BAA8B,cAAc;;;;;;;;KAQ9E,CAAC;QACF,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAEnH,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,IAAI,CAAC,YAAY,CAAC,CAAC;YACnB,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;gBAC1B,aAAa,CAAC,GAAG,GAAG,CAAC,QAAQ,GAAG,CAAC,CAAC;YACpC,CAAC;YACD,IAAI,CAAC,EAAE,CAAC,CAAC;QACX,CAAC;QAED,2BAA2B;QAC3B,KAAK,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,IAAI,MAAM,EAAE,CAAC;YAChD,MAAM,kBAAkB,GAAG,kBAAkB,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;YACtE,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,MAAM,CAAkB,kCAAkC,kBAAkB,EAAE,CAAC,CAAC;YACxG,IAAI,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC;gBAAE,SAAS;YAE5E,iCAAiC;YACjC,MAAM,IAAI,GAAG,MAAM,GAAG,CAA8C;;;+BAG3C,WAAW,qBAAqB,SAAS;;OAEjE,CAAC;YACF,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAElE,IAAI,CAAC,gBAAgB,WAAW,IAAI,SAAS,KAAK,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC,QAAQ,CAAC,CAAC;YAEvE,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,iBAAiB,kBAAkB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;YAC9E,MAAM,gBAAgB,GAAG,uBAAuB,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,IAAI,GAAG,EAAU,CAAC;YACrF,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;gBACvB,MAAM,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,QAAiB,EAAE,KAAK,EAAE,EAAE;oBAClD,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,WAAW,CAAC;oBAC5C,MAAM,GAAG,GAAG,UAAU,IAAI,gBAAgB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC;oBAC7E,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS;wBAAE,OAAO,MAAM,CAAC;oBACrD,IAAI,OAAO,GAAG,KAAK,SAAS;wBAAE,OAAO,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;oBAC5D,IAAI,OAAO,GAAG,KAAK,QAAQ;wBAAE,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;oBAChD,IAAI,GAAG,YAAY,IAAI;wBAAE,OAAO,gBAAgB,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;oBACpE,IAAI,OAAO,GAAG,KAAK,QAAQ;wBAAE,OAAO,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;oBAC1E,OAAO,gBAAgB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;gBACvC,CAAC,CAAC,CAAC;gBACH,aAAa,CAAC,eAAe,kBAAkB,KAAK,QAAQ,aAAa,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClG,CAAC;YACD,IAAI,CAAC,EAAE,CAAC,CAAC;QACX,CAAC;QAED,kBAAkB;QAClB,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,IAAI,CAAC,oBAAoB,CAAC,CAAC;YAC3B,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;gBAC5B,MAAM,qBAAqB,GAAG,kBAAkB,CAAC,GAAG,CAAC,eAAe,EAAE,GAAG,CAAC,aAAa,CAAC,CAAC;gBACzF,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,MAAM,CAC1B,2CAA2C,qBAAqB,EAAE,CACnE,CAAC;gBACF,MAAM,iBAAiB,GACrB,GAAG,CAAC,WAAW,KAAK,IAAI;uBACnB,kBAAkB,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;gBAC/C,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;oBACjC,aAAa,CAAC,kBAAkB,qBAAqB,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC;gBAClJ,CAAC;YACH,CAAC;YACD,IAAI,CAAC,EAAE,CAAC,CAAC;QACX,CAAC;QAED,aAAa,CAAC,SAAS,CAAC,CAAC;QACzB,IAAI,CAAC,EAAE,CAAC,CAAC;QAET,wBAAwB;QACxB,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/C,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,cAAc,IAAI,SAAS,EAAE,MAAM,CAAC,CAAC;QACnF,MAAM,SAAS,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;QAEtD,MAAM,SAAS,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC;QAC5C,MAAM,WAAW,GAAG,eAAe,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,EAAE,cAAc,CAAC,CAAC;QAEnF,OAAO;YACL,UAAU;YACV,SAAS;YACT,WAAW;SACZ,CAAC;IACJ,CAAC;YAAS,CAAC;QACT,MAAM,GAAG,CAAC,GAAG,EAAE,CAAC;IAClB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,IAA+B;IACtE,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,qBAAqB,IAAI,CAAC,CAAC,CAAC,CAAC;IAChF,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,eAAe,EAAE,cAAc,EAAE,CAAC,CAAC;IAEzF,IAAI,CAAC;QACH,MAAM,GAAG,CAAA,UAAU,CAAC;QACpB,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QACzD,MAAM,UAAU,GAAG,QAAQ;aACxB,KAAK,CAAC,oBAAoB,CAAC;aAC3B,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;aACpC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAE/C,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACnC,MAAM,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC;QACxC,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,gBAAgB,GAAG,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,OAAQ,KAAiC,CAAC,KAAK,KAAK,QAAQ;YAClI,CAAC,CAAC,MAAM,CAAE,KAAiC,CAAC,KAAK,CAAC;iBAC/C,KAAK,CAAC,OAAO,CAAC;iBACd,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;iBAC1B,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YAC5D,CAAC,CAAC,IAAI,CAAC;QACT,MAAM,IAAI,KAAK,CACb,qBAAqB,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,2BAA2B,CAAC,KAAK,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC,gBAAgB,gBAAgB,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACpK,CAAC;IACJ,CAAC;YAAS,CAAC;QACT,MAAM,GAAG,CAAC,GAAG,EAAE,CAAC;IAClB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,MAA+B;IACxE,MAAM,IAAI,GAAG,gBAAgB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAChD,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,MAAM,CAAC,WAAW,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5F,OAAO,GAAG,MAAM,CAAC,UAAU,KAAK,IAAI,GAAG,MAAM,GAAG,CAAC;AACnD,CAAC"}
1
+ {"version":3,"file":"backup-lib.js","sourceRoot":"","sources":["../src/backup-lib.ts"],"names":[],"mappings":"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"}
package/dist/client.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  import postgres from "postgres";
2
2
  import * as schema from "./schema/index.js";
3
+ export declare const MIGRATION_ADVISORY_LOCK_NAME = "rudder:database-migrations";
3
4
  export type MigrationState = {
4
5
  status: "upToDate";
5
6
  tableCount: number;
@@ -13,6 +14,23 @@ export type MigrationState = {
13
14
  pendingMigrations: string[];
14
15
  reason: "no-migration-journal-empty-db" | "no-migration-journal-non-empty-db" | "pending-migrations" | "missing-core-schema";
15
16
  };
17
+ export type PostMigrationInvariantIssue = Readonly<{
18
+ code: "migration_manifest_invalid" | "migration_state_not_current" | "migration_journal_missing" | "migration_journal_invalid" | "organizations_table_missing" | "organizations_primary_key_invalid" | "foreign_keys_missing" | "foreign_keys_not_validated" | "indexes_invalid";
19
+ message: string;
20
+ }>;
21
+ export type PostMigrationInvariantReport = Readonly<{
22
+ valid: boolean;
23
+ manifestFingerprint: string | null;
24
+ expectedMigrationCount: number;
25
+ migrationJournalSchema: string | null;
26
+ migrationJournalEntryCount: number;
27
+ organizationsTablePresent: boolean;
28
+ organizationsPrimaryKeyValid: boolean;
29
+ foreignKeyCount: number;
30
+ unvalidatedForeignKeys: readonly string[];
31
+ invalidIndexes: readonly string[];
32
+ issues: readonly PostMigrationInvariantIssue[];
33
+ }>;
16
34
  export declare function createDb(url: string): import("drizzle-orm/postgres-js").PostgresJsDatabase<typeof schema> & {
17
35
  $client: postgres.Sql<{}>;
18
36
  };
@@ -32,6 +50,7 @@ export type EnsurePostgresRolePasswordResult = {
32
50
  normalized: boolean;
33
51
  };
34
52
  export declare function ensurePostgresRolePassword(options: EnsurePostgresRolePasswordOptions): Promise<EnsurePostgresRolePasswordResult>;
53
+ export declare function listLegacyColumnRenames(url: string): Promise<string[]>;
35
54
  export declare function normalizeLegacyColumnNames(url: string): Promise<string[]>;
36
55
  export type MigrationHistoryReconcileResult = {
37
56
  repairedMigrations: string[];
@@ -39,7 +58,12 @@ export type MigrationHistoryReconcileResult = {
39
58
  };
40
59
  export declare function reconcilePendingMigrationHistory(url: string): Promise<MigrationHistoryReconcileResult>;
41
60
  export declare function inspectMigrations(url: string): Promise<MigrationState>;
42
- export declare function applyPendingMigrations(url: string): Promise<void>;
61
+ export declare function validatePostMigrationInvariants(url: string): Promise<PostMigrationInvariantReport>;
62
+ export declare function assertPostMigrationInvariants(url: string): Promise<void>;
63
+ export declare function withMigrationAdvisoryLock<T>(url: string, action: () => Promise<T>): Promise<T>;
64
+ export declare function applyPendingMigrations(url: string, options?: {
65
+ advisoryLockHeld?: boolean;
66
+ }): Promise<void>;
43
67
  export type MigrationBootstrapResult = {
44
68
  migrated: true;
45
69
  reason: "migrated-empty-db";
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAMA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC;AAmD5C,MAAM,MAAM,cAAc,GACtB;IAAE,MAAM,EAAE,UAAU,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAAC,iBAAiB,EAAE,MAAM,EAAE,CAAA;CAAE,GACtG;IACE,MAAM,EAAE,iBAAiB,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,MAAM,EAAE,+BAA+B,GAAG,mCAAmC,GAAG,oBAAoB,GAAG,qBAAqB,CAAC;CAC9H,CAAC;AAEN,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM;;EAGnC;AAiBD,wBAAsB,wBAAwB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAMlF;AAED,MAAM,MAAM,iCAAiC,GAAG;IAC9C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,gCAAgC,GAAG;IAC7C,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF,wBAAsB,0BAA0B,CAC9C,OAAO,EAAE,iCAAiC,GACzC,OAAO,CAAC,gCAAgC,CAAC,CAoE3C;AAkVD,wBAAsB,0BAA0B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAsB/E;AAmID,MAAM,MAAM,+BAA+B,GAAG;IAC5C,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,mBAAmB,EAAE,MAAM,EAAE,CAAC;CAC/B,CAAC;AAEF,wBAAsB,gCAAgC,CACpD,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,+BAA+B,CAAC,CA2F1C;AAsCD,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAsE5E;AAED,wBAAsB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAyEvE;AAED,MAAM,MAAM,wBAAwB,GAChC;IAAE,QAAQ,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,mBAAmB,CAAC;IAAC,UAAU,EAAE,CAAC,CAAA;CAAE,GAC9D;IAAE,QAAQ,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,kBAAkB,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GACnE;IAAE,QAAQ,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,gCAAgC,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtF,wBAAsB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,wBAAwB,CAAC,CA8B3F;AAED,wBAAsB,sBAAsB,CAC1C,GAAG,EAAE,MAAM,EACX,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,SAAS,GAAG,QAAQ,CAAC,CAiB/B;AAED,MAAM,MAAM,EAAE,GAAG,UAAU,CAAC,OAAO,QAAQ,CAAC,CAAC"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
package/dist/client.js CHANGED
@@ -5,10 +5,23 @@ import { readFile, readdir } from "node:fs/promises";
5
5
  import { resolve } from "node:path";
6
6
  import { fileURLToPath } from "node:url";
7
7
  import postgres from "postgres";
8
+ import { createMigrationManifest } from "./migration-manifest.js";
8
9
  import * as schema from "./schema/index.js";
9
10
  const MIGRATIONS_FOLDER = fileURLToPath(new URL("./migrations", import.meta.url));
10
11
  const DRIZZLE_MIGRATIONS_TABLE = "__drizzle_migrations";
11
12
  const MIGRATIONS_JOURNAL_JSON = fileURLToPath(new URL("./migrations/meta/_journal.json", import.meta.url));
13
+ export const MIGRATION_ADVISORY_LOCK_NAME = "rudder:database-migrations";
14
+ // These hashes belong to migrations that were intentionally superseded by a
15
+ // consolidated migration but remain in existing journals. They are accepted
16
+ // as historical evidence; any other unknown journal hash fails closed.
17
+ const KNOWN_LEGACY_MIGRATION_HISTORY_IDENTIFIERS = new Set([
18
+ "e21cac193575f50627e67946ef9afa44ddd17af24627c8799c5024ce534f89e3",
19
+ "fdf8b69236a60593c52be53ebff89d7f581ddbdbde0227081b11c53b1f6d6578",
20
+ "fba251275287250b3f05a5533e00d3941a3b1c1a526d0073e5d636a2dd868f80",
21
+ "a1fc0446af5ec1640890bb9cf36208eab8dce6687c233029bd54e179613e1af7",
22
+ "legacy-0100-hash",
23
+ "legacy-conflicting-0100-hash",
24
+ ]);
12
25
  const LEGACY_COLUMN_RENAMES = [
13
26
  { tableName: "agents", from: "adapter_type", to: "agent_runtime_type" },
14
27
  { tableName: "agents", from: "adapter_config", to: "agent_runtime_config" },
@@ -311,15 +324,15 @@ async function tableExists(sql, tableName) {
311
324
  return rows[0]?.exists ?? false;
312
325
  }
313
326
  async function columnExists(sql, tableName, columnName) {
314
- const rows = await sql `
315
- SELECT EXISTS (
316
- SELECT 1
317
- FROM information_schema.columns
318
- WHERE table_schema = 'public'
319
- AND table_name = ${tableName}
320
- AND column_name = ${columnName}
321
- ) AS exists
322
- `;
327
+ const rows = await sql.unsafe(`
328
+ SELECT EXISTS (
329
+ SELECT 1
330
+ FROM information_schema.columns
331
+ WHERE table_schema = 'public'
332
+ AND table_name = ${quoteLiteral(tableName)}
333
+ AND column_name = ${quoteLiteral(columnName)}
334
+ ) AS exists
335
+ `);
323
336
  return rows[0]?.exists ?? false;
324
337
  }
325
338
  async function getColumnMetadata(sql, tableName, columnName) {
@@ -367,20 +380,39 @@ async function constraintExists(sql, constraintName) {
367
380
  `;
368
381
  return rows[0]?.exists ?? false;
369
382
  }
383
+ async function findLegacyColumnRenames(sql) {
384
+ const pending = [];
385
+ for (const rename of LEGACY_COLUMN_RENAMES) {
386
+ const fromExists = await columnExists(sql, rename.tableName, rename.from);
387
+ if (!fromExists)
388
+ continue;
389
+ const toExists = await columnExists(sql, rename.tableName, rename.to);
390
+ if (!toExists)
391
+ pending.push(rename);
392
+ }
393
+ return pending;
394
+ }
395
+ export async function listLegacyColumnRenames(url) {
396
+ const sql = createUtilitySql(url);
397
+ try {
398
+ const pending = await findLegacyColumnRenames(sql);
399
+ return pending.map(({ tableName, from, to }) => `${tableName}.${from}->${to}`);
400
+ }
401
+ finally {
402
+ await sql.end();
403
+ }
404
+ }
370
405
  export async function normalizeLegacyColumnNames(url) {
371
406
  const sql = createUtilitySql(url);
372
407
  const repaired = [];
373
408
  try {
374
- for (const rename of LEGACY_COLUMN_RENAMES) {
375
- const fromExists = await columnExists(sql, rename.tableName, rename.from);
376
- if (!fromExists)
377
- continue;
378
- const toExists = await columnExists(sql, rename.tableName, rename.to);
379
- if (toExists)
380
- continue;
381
- await sql.unsafe(`ALTER TABLE ${quoteIdentifier(rename.tableName)} RENAME COLUMN ${quoteIdentifier(rename.from)} TO ${quoteIdentifier(rename.to)}`);
382
- repaired.push(`${rename.tableName}.${rename.from}->${rename.to}`);
383
- }
409
+ await sql.begin(async (transaction) => {
410
+ const pending = await findLegacyColumnRenames(transaction);
411
+ for (const rename of pending) {
412
+ await transaction.unsafe(`ALTER TABLE ${quoteIdentifier(rename.tableName)} RENAME COLUMN ${quoteIdentifier(rename.from)} TO ${quoteIdentifier(rename.to)}`);
413
+ repaired.push(`${rename.tableName}.${rename.from}->${rename.to}`);
414
+ }
415
+ });
384
416
  }
385
417
  finally {
386
418
  await sql.end();
@@ -653,7 +685,247 @@ export async function inspectMigrations(url) {
653
685
  await sql.end();
654
686
  }
655
687
  }
656
- export async function applyPendingMigrations(url) {
688
+ export async function validatePostMigrationInvariants(url) {
689
+ const issues = [];
690
+ let manifestFingerprint = null;
691
+ let expectedMigrationCount = 0;
692
+ let expectedManifest = null;
693
+ try {
694
+ const manifest = await createMigrationManifest();
695
+ expectedManifest = manifest;
696
+ manifestFingerprint = manifest.fingerprint;
697
+ expectedMigrationCount = manifest.entries.length;
698
+ }
699
+ catch (error) {
700
+ issues.push({
701
+ code: "migration_manifest_invalid",
702
+ message: error instanceof Error ? error.message : String(error),
703
+ });
704
+ }
705
+ const state = await inspectMigrations(url);
706
+ if (state.status !== "upToDate") {
707
+ issues.push({
708
+ code: "migration_state_not_current",
709
+ message: `Database migrations are not current (${state.reason}: ${state.pendingMigrations.join(", ")})`,
710
+ });
711
+ }
712
+ const sql = createUtilitySql(url);
713
+ let migrationJournalSchema = null;
714
+ let migrationJournalEntryCount = 0;
715
+ let organizationsTablePresent = false;
716
+ let organizationsPrimaryKeyValid = false;
717
+ let foreignKeyCount = 0;
718
+ let unvalidatedForeignKeys = [];
719
+ let invalidIndexes = [];
720
+ try {
721
+ migrationJournalSchema = await discoverMigrationTableSchema(sql);
722
+ if (!migrationJournalSchema) {
723
+ issues.push({
724
+ code: "migration_journal_missing",
725
+ message: "Migration journal table is missing",
726
+ });
727
+ }
728
+ else {
729
+ const qualifiedTable = `${quoteIdentifier(migrationJournalSchema)}.${quoteIdentifier(DRIZZLE_MIGRATIONS_TABLE)}`;
730
+ const columnNames = await getMigrationTableColumnNames(sql, migrationJournalSchema);
731
+ const journalRows = await sql.unsafe(`SELECT count(*)::int AS count FROM ${qualifiedTable}`);
732
+ migrationJournalEntryCount = Number(journalRows[0]?.count ?? 0);
733
+ if (!columnNames.has("created_at")
734
+ || (!columnNames.has("hash") && !columnNames.has("name"))) {
735
+ issues.push({
736
+ code: "migration_journal_invalid",
737
+ message: "Migration journal must contain created_at and either hash or name",
738
+ });
739
+ }
740
+ else if (expectedManifest) {
741
+ const selectedColumns = [
742
+ columnNames.has("id") ? "id" : null,
743
+ columnNames.has("hash") ? "hash" : null,
744
+ columnNames.has("name") ? "name" : null,
745
+ "created_at",
746
+ ].filter((column) => column !== null);
747
+ const orderColumn = columnNames.has("id") ? "id" : "created_at";
748
+ const journalEntries = await sql.unsafe(`SELECT ${selectedColumns.map(quoteIdentifier).join(", ")} FROM ${qualifiedTable} ORDER BY ${quoteIdentifier(orderColumn)}`);
749
+ const expectedByHash = new Map(expectedManifest.entries.map((entry) => [entry.sha256, entry]));
750
+ const expectedByName = new Map(expectedManifest.entries.map((entry) => [entry.fileName, entry]));
751
+ const matchedExpectedFiles = new Set();
752
+ if (journalEntries.length < expectedManifest.entries.length) {
753
+ issues.push({
754
+ code: "migration_journal_invalid",
755
+ message: `Migration journal has ${journalEntries.length} entries; expected at least ${expectedManifest.entries.length}`,
756
+ });
757
+ }
758
+ for (let index = 0; index < journalEntries.length; index += 1) {
759
+ const actual = journalEntries[index];
760
+ const actualHash = typeof actual?.hash === "string" ? actual.hash : null;
761
+ const actualName = typeof actual?.name === "string" ? actual.name : null;
762
+ const expectedByActualHash = actualHash ? expectedByHash.get(actualHash) : undefined;
763
+ const expectedByActualName = actualName ? expectedByName.get(actualName) : undefined;
764
+ const matchedExpected = expectedByActualHash ?? expectedByActualName;
765
+ if (matchedExpected) {
766
+ if (matchedExpectedFiles.has(matchedExpected.fileName)) {
767
+ issues.push({
768
+ code: "migration_journal_invalid",
769
+ message: `Migration journal contains duplicate history for ${matchedExpected.fileName}`,
770
+ });
771
+ }
772
+ matchedExpectedFiles.add(matchedExpected.fileName);
773
+ }
774
+ else {
775
+ const isKnownLegacyHash = actualHash !== null
776
+ && KNOWN_LEGACY_MIGRATION_HISTORY_IDENTIFIERS.has(actualHash);
777
+ if (!isKnownLegacyHash) {
778
+ issues.push({
779
+ code: "migration_journal_invalid",
780
+ message: `Migration journal entry ${index} does not match any current migration manifest entry`,
781
+ });
782
+ }
783
+ }
784
+ if ((expectedByActualHash && actualName !== null && actualName !== expectedByActualHash.fileName)
785
+ || (expectedByActualName && actualHash !== null && actualHash !== expectedByActualName.sha256)) {
786
+ issues.push({
787
+ code: "migration_journal_invalid",
788
+ message: `Migration journal entry ${index} does not match its current migration manifest entry`,
789
+ });
790
+ }
791
+ }
792
+ const missingExpectedFiles = expectedManifest.entries
793
+ .map((entry) => entry.fileName)
794
+ .filter((fileName) => !matchedExpectedFiles.has(fileName));
795
+ if (missingExpectedFiles.length > 0) {
796
+ issues.push({
797
+ code: "migration_journal_invalid",
798
+ message: `Migration journal is missing current migration(s): ${missingExpectedFiles.join(", ")}`,
799
+ });
800
+ }
801
+ }
802
+ }
803
+ organizationsTablePresent = await tableExists(sql, "organizations");
804
+ if (!organizationsTablePresent) {
805
+ issues.push({
806
+ code: "organizations_table_missing",
807
+ message: "Core organizations table is missing",
808
+ });
809
+ }
810
+ const primaryKeyRows = await sql.unsafe(`
811
+ SELECT constraint_row.conname AS constraint_name
812
+ FROM pg_constraint constraint_row
813
+ JOIN pg_class table_row ON table_row.oid = constraint_row.conrelid
814
+ JOIN pg_namespace namespace_row ON namespace_row.oid = table_row.relnamespace
815
+ JOIN pg_index index_row ON index_row.indexrelid = constraint_row.conindid
816
+ WHERE namespace_row.nspname = 'public'
817
+ AND table_row.relname = 'organizations'
818
+ AND constraint_row.contype = 'p'
819
+ AND constraint_row.convalidated
820
+ AND index_row.indisvalid
821
+ AND index_row.indisready
822
+ `);
823
+ organizationsPrimaryKeyValid = primaryKeyRows.length === 1;
824
+ if (!organizationsPrimaryKeyValid) {
825
+ issues.push({
826
+ code: "organizations_primary_key_invalid",
827
+ message: "Core organizations primary key is missing or invalid",
828
+ });
829
+ }
830
+ const foreignKeyCountRows = await sql.unsafe(`
831
+ SELECT count(*)::int AS count
832
+ FROM pg_constraint constraint_row
833
+ JOIN pg_class table_row ON table_row.oid = constraint_row.conrelid
834
+ JOIN pg_namespace namespace_row ON namespace_row.oid = table_row.relnamespace
835
+ WHERE namespace_row.nspname = 'public'
836
+ AND constraint_row.contype = 'f'
837
+ `);
838
+ foreignKeyCount = Number(foreignKeyCountRows[0]?.count ?? 0);
839
+ if (foreignKeyCount === 0) {
840
+ issues.push({
841
+ code: "foreign_keys_missing",
842
+ message: "No public foreign key constraints were found",
843
+ });
844
+ }
845
+ const unvalidatedForeignKeyRows = await sql.unsafe(`
846
+ SELECT table_row.relname || '.' || constraint_row.conname AS constraint_name
847
+ FROM pg_constraint constraint_row
848
+ JOIN pg_class table_row ON table_row.oid = constraint_row.conrelid
849
+ JOIN pg_namespace namespace_row ON namespace_row.oid = table_row.relnamespace
850
+ WHERE namespace_row.nspname = 'public'
851
+ AND constraint_row.contype = 'f'
852
+ AND NOT constraint_row.convalidated
853
+ ORDER BY table_row.relname, constraint_row.conname
854
+ `);
855
+ unvalidatedForeignKeys = unvalidatedForeignKeyRows.map((row) => row.constraint_name);
856
+ if (unvalidatedForeignKeys.length > 0) {
857
+ issues.push({
858
+ code: "foreign_keys_not_validated",
859
+ message: `Unvalidated foreign keys: ${unvalidatedForeignKeys.join(", ")}`,
860
+ });
861
+ }
862
+ const invalidIndexRows = await sql.unsafe(`
863
+ SELECT table_row.relname || '.' || index_row.relname AS index_name
864
+ FROM pg_index index_state
865
+ JOIN pg_class index_row ON index_row.oid = index_state.indexrelid
866
+ JOIN pg_class table_row ON table_row.oid = index_state.indrelid
867
+ JOIN pg_namespace namespace_row ON namespace_row.oid = table_row.relnamespace
868
+ WHERE namespace_row.nspname = 'public'
869
+ AND (NOT index_state.indisvalid OR NOT index_state.indisready)
870
+ ORDER BY table_row.relname, index_row.relname
871
+ `);
872
+ invalidIndexes = invalidIndexRows.map((row) => row.index_name);
873
+ if (invalidIndexes.length > 0) {
874
+ issues.push({
875
+ code: "indexes_invalid",
876
+ message: `Invalid indexes: ${invalidIndexes.join(", ")}`,
877
+ });
878
+ }
879
+ }
880
+ finally {
881
+ await sql.end();
882
+ }
883
+ return Object.freeze({
884
+ valid: issues.length === 0,
885
+ manifestFingerprint,
886
+ expectedMigrationCount,
887
+ migrationJournalSchema,
888
+ migrationJournalEntryCount,
889
+ organizationsTablePresent,
890
+ organizationsPrimaryKeyValid,
891
+ foreignKeyCount,
892
+ unvalidatedForeignKeys: Object.freeze(unvalidatedForeignKeys),
893
+ invalidIndexes: Object.freeze(invalidIndexes),
894
+ issues: Object.freeze(issues),
895
+ });
896
+ }
897
+ export async function assertPostMigrationInvariants(url) {
898
+ const report = await validatePostMigrationInvariants(url);
899
+ if (!report.valid) {
900
+ throw new Error(`Post-migration database invariants failed: ${report.issues.map((issue) => issue.message).join("; ")}`);
901
+ }
902
+ }
903
+ export async function withMigrationAdvisoryLock(url, action) {
904
+ const lockSql = createUtilitySql(url);
905
+ try {
906
+ await lockSql `
907
+ SELECT pg_advisory_lock(
908
+ hashtext(current_database()),
909
+ hashtext(${MIGRATION_ADVISORY_LOCK_NAME})
910
+ )
911
+ `;
912
+ return await action();
913
+ }
914
+ finally {
915
+ try {
916
+ await lockSql `
917
+ SELECT pg_advisory_unlock(
918
+ hashtext(current_database()),
919
+ hashtext(${MIGRATION_ADVISORY_LOCK_NAME})
920
+ )
921
+ `;
922
+ }
923
+ finally {
924
+ await lockSql.end();
925
+ }
926
+ }
927
+ }
928
+ async function applyPendingMigrationsWithoutLock(url) {
657
929
  await normalizeLegacyColumnNames(url);
658
930
  const initialState = await inspectMigrations(url);
659
931
  if (initialState.status === "upToDate")
@@ -715,6 +987,18 @@ export async function applyPendingMigrations(url) {
715
987
  throw new Error(`Failed to apply pending migrations: ${finalState.pendingMigrations.join(", ")}`);
716
988
  }
717
989
  }
990
+ export async function applyPendingMigrations(url, options = {}) {
991
+ const apply = async () => {
992
+ await createMigrationManifest();
993
+ await applyPendingMigrationsWithoutLock(url);
994
+ await assertPostMigrationInvariants(url);
995
+ };
996
+ if (options.advisoryLockHeld) {
997
+ await apply();
998
+ return;
999
+ }
1000
+ await withMigrationAdvisoryLock(url, apply);
1001
+ }
718
1002
  export async function migratePostgresIfEmpty(url) {
719
1003
  const sql = createUtilitySql(url);
720
1004
  try {