@rudderhq/db 0.3.6-canary.8 → 0.4.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 (63) hide show
  1. package/dist/index.d.ts +1 -0
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +1 -0
  4. package/dist/index.js.map +1 -1
  5. package/dist/local-postgres-provider.d.ts +41 -0
  6. package/dist/local-postgres-provider.d.ts.map +1 -0
  7. package/dist/local-postgres-provider.js +167 -0
  8. package/dist/local-postgres-provider.js.map +1 -0
  9. package/dist/local-postgres-provider.test.d.ts +2 -0
  10. package/dist/local-postgres-provider.test.d.ts.map +1 -0
  11. package/dist/local-postgres-provider.test.js +109 -0
  12. package/dist/local-postgres-provider.test.js.map +1 -0
  13. package/dist/migration-runtime.d.ts.map +1 -1
  14. package/dist/migration-runtime.js +21 -23
  15. package/dist/migration-runtime.js.map +1 -1
  16. package/dist/migrations/0093_messenger_custom_group_pins.sql +1 -0
  17. package/dist/migrations/0094_keen_jack_murdock.sql +49 -0
  18. package/dist/migrations/0095_chat_conversation_forks.sql +8 -0
  19. package/dist/migrations/meta/0093_snapshot.json +17126 -0
  20. package/dist/migrations/meta/0094_snapshot.json +17583 -0
  21. package/dist/migrations/meta/0095_snapshot.json +17670 -0
  22. package/dist/migrations/meta/_journal.json +22 -1
  23. package/dist/schema/chat_conversations.d.ts +51 -0
  24. package/dist/schema/chat_conversations.d.ts.map +1 -1
  25. package/dist/schema/chat_conversations.js +6 -0
  26. package/dist/schema/chat_conversations.js.map +1 -1
  27. package/dist/schema/chat_generations.d.ts +161 -0
  28. package/dist/schema/chat_generations.d.ts.map +1 -0
  29. package/dist/schema/chat_generations.js +18 -0
  30. package/dist/schema/chat_generations.js.map +1 -0
  31. package/dist/schema/chat_queued_messages.d.ts +350 -0
  32. package/dist/schema/chat_queued_messages.d.ts.map +1 -0
  33. package/dist/schema/chat_queued_messages.js +33 -0
  34. package/dist/schema/chat_queued_messages.js.map +1 -0
  35. package/dist/schema/heartbeat_runs.d.ts.map +1 -1
  36. package/dist/schema/heartbeat_runs.js +8 -0
  37. package/dist/schema/heartbeat_runs.js.map +1 -1
  38. package/dist/schema/index.d.ts +2 -0
  39. package/dist/schema/index.d.ts.map +1 -1
  40. package/dist/schema/index.js +2 -0
  41. package/dist/schema/index.js.map +1 -1
  42. package/dist/schema/issues.d.ts.map +1 -1
  43. package/dist/schema/issues.js +8 -0
  44. package/dist/schema/issues.js.map +1 -1
  45. package/dist/schema/messenger_custom_groups.d.ts +17 -0
  46. package/dist/schema/messenger_custom_groups.d.ts.map +1 -1
  47. package/dist/schema/messenger_custom_groups.js +1 -0
  48. package/dist/schema/messenger_custom_groups.js.map +1 -1
  49. package/dist/schema/plugin_config.d.ts +1 -1
  50. package/dist/schema/plugin_config.js +1 -1
  51. package/dist/schema/plugin_entities.d.ts +1 -1
  52. package/dist/schema/plugin_entities.js +1 -1
  53. package/dist/schema/plugin_jobs.d.ts +2 -2
  54. package/dist/schema/plugin_jobs.js +2 -2
  55. package/dist/schema/plugin_logs.d.ts +1 -1
  56. package/dist/schema/plugin_logs.js +1 -1
  57. package/dist/schema/plugin_state.d.ts +1 -1
  58. package/dist/schema/plugin_state.js +1 -1
  59. package/dist/schema/plugin_webhooks.d.ts +1 -1
  60. package/dist/schema/plugin_webhooks.js +1 -1
  61. package/dist/schema/plugins.d.ts +1 -1
  62. package/dist/schema/plugins.js +1 -1
  63. package/package.json +2 -2
package/dist/index.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  export { estimateDatabaseBackupSize, formatDatabaseBackupResult, getDatabaseBackupSizeGuardDecision, runDatabaseBackup, runDatabaseRestore, type DatabaseBackupSizeEstimate, type DatabaseBackupSizeGuardDecision, type DatabaseBackupTableSizeEstimate, type EstimateDatabaseBackupSizeOptions, type RunDatabaseBackupOptions, type RunDatabaseBackupResult, type RunDatabaseRestoreOptions } from "./backup-lib.js";
2
2
  export { applyPendingMigrations, createDb, ensurePostgresDatabase, ensurePostgresRolePassword, getPostgresDataDirectory, inspectMigrations, migratePostgresIfEmpty, normalizeLegacyColumnNames, reconcilePendingMigrationHistory, type Db, type EnsurePostgresRolePasswordOptions, type EnsurePostgresRolePasswordResult, type MigrationBootstrapResult, type MigrationHistoryReconcileResult, type MigrationState } from "./client.js";
3
3
  export { cleanupStaleSysvSharedMemorySegments, isEmbeddedPostgresSharedMemoryError, parseSysvSharedMemorySegments, type CleanupStaleSysvSharedMemoryResult, type SysvSharedMemorySegment } from "./embedded-postgres-recovery.js";
4
+ export { RUDDER_POSTGRES_BIN_DIR_ENV, RUDDER_PRODUCTION_POSTGRES_VERSION, assertOfficialPostgresVersion, buildOfficialPostgresInitdbArgs, createLocalPostgresInstance, createOfficialPostgresInstance, resolveOfficialPostgresBinDir, resolveOfficialPostgresBinaries, validateOfficialPostgresBinDir, type LocalPostgresInstance, type LocalPostgresInstanceOptions, type LocalPostgresInstanceSelection, type LocalPostgresProvider, type PostgresVersionRunner } from "./local-postgres-provider.js";
4
5
  export * from "./schema/index.js";
5
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,0BAA0B,EAAE,0BAA0B,EAAE,kCAAkC,EAC1F,iBAAiB,EACjB,kBAAkB,EAAE,KAAK,0BAA0B,EACnD,KAAK,+BAA+B,EACpC,KAAK,+BAA+B,EACpC,KAAK,iCAAiC,EACtC,KAAK,wBAAwB,EAC7B,KAAK,uBAAuB,EAC5B,KAAK,yBAAyB,EAC/B,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,sBAAsB,EAAE,QAAQ,EAAE,sBAAsB,EACxD,0BAA0B,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,0BAA0B,EAAE,gCAAgC,EAAE,KAAK,EAAE,EAAE,KAAK,iCAAiC,EAC9M,KAAK,gCAAgC,EAAE,KAAK,wBAAwB,EAAE,KAAK,+BAA+B,EAAE,KAAK,cAAc,EAChI,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,oCAAoC,EACpC,mCAAmC,EACnC,6BAA6B,EAC7B,KAAK,kCAAkC,EACvC,KAAK,uBAAuB,EAC7B,MAAM,iCAAiC,CAAC;AACzC,cAAc,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,0BAA0B,EAAE,0BAA0B,EAAE,kCAAkC,EAC1F,iBAAiB,EACjB,kBAAkB,EAAE,KAAK,0BAA0B,EACnD,KAAK,+BAA+B,EACpC,KAAK,+BAA+B,EACpC,KAAK,iCAAiC,EACtC,KAAK,wBAAwB,EAC7B,KAAK,uBAAuB,EAC5B,KAAK,yBAAyB,EAC/B,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,sBAAsB,EAAE,QAAQ,EAAE,sBAAsB,EACxD,0BAA0B,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,0BAA0B,EAAE,gCAAgC,EAAE,KAAK,EAAE,EAAE,KAAK,iCAAiC,EAC9M,KAAK,gCAAgC,EAAE,KAAK,wBAAwB,EAAE,KAAK,+BAA+B,EAAE,KAAK,cAAc,EAChI,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,oCAAoC,EACpC,mCAAmC,EACnC,6BAA6B,EAC7B,KAAK,kCAAkC,EACvC,KAAK,uBAAuB,EAC7B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,2BAA2B,EAC3B,kCAAkC,EAClC,6BAA6B,EAC7B,+BAA+B,EAC/B,2BAA2B,EAC3B,8BAA8B,EAC9B,6BAA6B,EAC7B,+BAA+B,EAC/B,8BAA8B,EAC9B,KAAK,qBAAqB,EAC1B,KAAK,4BAA4B,EACjC,KAAK,8BAA8B,EACnC,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,EAC3B,MAAM,8BAA8B,CAAC;AACtC,cAAc,mBAAmB,CAAC"}
package/dist/index.js CHANGED
@@ -1,5 +1,6 @@
1
1
  export { estimateDatabaseBackupSize, formatDatabaseBackupResult, getDatabaseBackupSizeGuardDecision, runDatabaseBackup, runDatabaseRestore } from "./backup-lib.js";
2
2
  export { applyPendingMigrations, createDb, ensurePostgresDatabase, ensurePostgresRolePassword, getPostgresDataDirectory, inspectMigrations, migratePostgresIfEmpty, normalizeLegacyColumnNames, reconcilePendingMigrationHistory } from "./client.js";
3
3
  export { cleanupStaleSysvSharedMemorySegments, isEmbeddedPostgresSharedMemoryError, parseSysvSharedMemorySegments } from "./embedded-postgres-recovery.js";
4
+ export { RUDDER_POSTGRES_BIN_DIR_ENV, RUDDER_PRODUCTION_POSTGRES_VERSION, assertOfficialPostgresVersion, buildOfficialPostgresInitdbArgs, createLocalPostgresInstance, createOfficialPostgresInstance, resolveOfficialPostgresBinDir, resolveOfficialPostgresBinaries, validateOfficialPostgresBinDir } from "./local-postgres-provider.js";
4
5
  export * from "./schema/index.js";
5
6
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,0BAA0B,EAAE,0BAA0B,EAAE,kCAAkC,EAC1F,iBAAiB,EACjB,kBAAkB,EAOnB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,sBAAsB,EAAE,QAAQ,EAAE,sBAAsB,EACxD,0BAA0B,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,0BAA0B,EAAE,gCAAgC,EAE9J,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,oCAAoC,EACpC,mCAAmC,EACnC,6BAA6B,EAG9B,MAAM,iCAAiC,CAAC;AACzC,cAAc,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,0BAA0B,EAAE,0BAA0B,EAAE,kCAAkC,EAC1F,iBAAiB,EACjB,kBAAkB,EAOnB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,sBAAsB,EAAE,QAAQ,EAAE,sBAAsB,EACxD,0BAA0B,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,0BAA0B,EAAE,gCAAgC,EAE9J,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,oCAAoC,EACpC,mCAAmC,EACnC,6BAA6B,EAG9B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,2BAA2B,EAC3B,kCAAkC,EAClC,6BAA6B,EAC7B,+BAA+B,EAC/B,2BAA2B,EAC3B,8BAA8B,EAC9B,6BAA6B,EAC7B,+BAA+B,EAC/B,8BAA8B,EAM/B,MAAM,8BAA8B,CAAC;AACtC,cAAc,mBAAmB,CAAC"}
@@ -0,0 +1,41 @@
1
+ export declare const RUDDER_POSTGRES_BIN_DIR_ENV = "RUDDER_POSTGRES_BIN_DIR";
2
+ export declare const RUDDER_PRODUCTION_POSTGRES_VERSION = "18.4";
3
+ export type LocalPostgresProvider = "official-postgres" | "embedded-postgres";
4
+ export type LocalPostgresInstance = {
5
+ initialise(): Promise<void>;
6
+ start(): Promise<void>;
7
+ stop(): Promise<void>;
8
+ };
9
+ export type LocalPostgresInstanceOptions = {
10
+ databaseDir: string;
11
+ user: string;
12
+ password: string;
13
+ port: number;
14
+ persistent: boolean;
15
+ initdbFlags?: string[];
16
+ onLog?: (message: unknown) => void;
17
+ onError?: (message: unknown) => void;
18
+ };
19
+ export type LocalPostgresInstanceSelection = {
20
+ provider: LocalPostgresProvider;
21
+ instance: LocalPostgresInstance;
22
+ postgresBinDir?: string;
23
+ };
24
+ export type PostgresVersionRunner = (postgresBinaryPath: string) => Promise<string>;
25
+ export declare function resolveOfficialPostgresBinDir(rawValue?: string | undefined): string | null;
26
+ export declare function resolveOfficialPostgresBinaries(binDir: string): {
27
+ initdb: string;
28
+ pgCtl: string;
29
+ postgres: string;
30
+ };
31
+ export declare function validateOfficialPostgresBinDir(binDir: string): {
32
+ ok: true;
33
+ } | {
34
+ ok: false;
35
+ missing: string[];
36
+ };
37
+ export declare function assertOfficialPostgresVersion(binDir: string, runVersionCommand?: PostgresVersionRunner): Promise<void>;
38
+ export declare function buildOfficialPostgresInitdbArgs(options: LocalPostgresInstanceOptions, passwordFilePath: string): string[];
39
+ export declare function createOfficialPostgresInstance(binDir: string, options: LocalPostgresInstanceOptions): LocalPostgresInstance;
40
+ export declare function createLocalPostgresInstance(options: LocalPostgresInstanceOptions): Promise<LocalPostgresInstanceSelection>;
41
+ //# sourceMappingURL=local-postgres-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-postgres-provider.d.ts","sourceRoot":"","sources":["../src/local-postgres-provider.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,2BAA2B,4BAA4B,CAAC;AACrE,eAAO,MAAM,kCAAkC,SAAS,CAAC;AAIzD,MAAM,MAAM,qBAAqB,GAAG,mBAAmB,GAAG,mBAAmB,CAAC;AAE9E,MAAM,MAAM,qBAAqB,GAAG;IAClC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,4BAA4B,GAAG;IACzC,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACnC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;CACtC,CAAC;AAIF,MAAM,MAAM,8BAA8B,GAAG;IAC3C,QAAQ,EAAE,qBAAqB,CAAC;IAChC,QAAQ,EAAE,qBAAqB,CAAC;IAChC,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG,CAAC,kBAAkB,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;AAEpF,wBAAgB,6BAA6B,CAAC,QAAQ,qBAA2C,GAAG,MAAM,GAAG,IAAI,CAIhH;AAMD,wBAAgB,+BAA+B,CAAC,MAAM,EAAE,MAAM,GAAG;IAC/D,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CAClB,CAMA;AAED,wBAAgB,8BAA8B,CAAC,MAAM,EAAE,MAAM,GAAG;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAI9G;AAwBD,wBAAsB,6BAA6B,CACjD,MAAM,EAAE,MAAM,EACd,iBAAiB,GAAE,qBAAoD,GACtE,OAAO,CAAC,IAAI,CAAC,CAiBf;AAUD,wBAAgB,+BAA+B,CAAC,OAAO,EAAE,4BAA4B,EAAE,gBAAgB,EAAE,MAAM,GAAG,MAAM,EAAE,CAWzH;AAYD,wBAAgB,8BAA8B,CAC5C,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,4BAA4B,GACpC,qBAAqB,CAmEvB;AAaD,wBAAsB,2BAA2B,CAC/C,OAAO,EAAE,4BAA4B,GACpC,OAAO,CAAC,8BAA8B,CAAC,CAgBzC"}
@@ -0,0 +1,167 @@
1
+ import { execFile, spawnSync } from "node:child_process";
2
+ import { existsSync } from "node:fs";
3
+ import { mkdtemp, rm, writeFile } from "node:fs/promises";
4
+ import os from "node:os";
5
+ import path from "node:path";
6
+ import { promisify } from "node:util";
7
+ export const RUDDER_POSTGRES_BIN_DIR_ENV = "RUDDER_POSTGRES_BIN_DIR";
8
+ export const RUDDER_PRODUCTION_POSTGRES_VERSION = "18.4";
9
+ const execFileAsync = promisify(execFile);
10
+ export function resolveOfficialPostgresBinDir(rawValue = process.env[RUDDER_POSTGRES_BIN_DIR_ENV]) {
11
+ const value = rawValue?.trim();
12
+ if (!value)
13
+ return null;
14
+ return path.resolve(value);
15
+ }
16
+ function executableName(baseName) {
17
+ return process.platform === "win32" ? `${baseName}.exe` : baseName;
18
+ }
19
+ export function resolveOfficialPostgresBinaries(binDir) {
20
+ return {
21
+ initdb: path.join(binDir, executableName("initdb")),
22
+ pgCtl: path.join(binDir, executableName("pg_ctl")),
23
+ postgres: path.join(binDir, executableName("postgres")),
24
+ };
25
+ }
26
+ export function validateOfficialPostgresBinDir(binDir) {
27
+ const binaries = resolveOfficialPostgresBinaries(binDir);
28
+ const missing = Object.values(binaries).filter((binaryPath) => !existsSync(binaryPath));
29
+ return missing.length === 0 ? { ok: true } : { ok: false, missing };
30
+ }
31
+ function requireOfficialPostgresBinDir(binDir) {
32
+ const validation = validateOfficialPostgresBinDir(binDir);
33
+ if (!validation.ok) {
34
+ throw new Error(`${RUDDER_POSTGRES_BIN_DIR_ENV} must point at a PostgreSQL ${RUDDER_PRODUCTION_POSTGRES_VERSION} production bin directory; missing ${validation.missing.join(", ")}`);
35
+ }
36
+ return resolveOfficialPostgresBinaries(binDir);
37
+ }
38
+ function parsePostgresVersion(output) {
39
+ const match = /\bPostgreSQL\)?\s+([0-9]+(?:\.[0-9]+)*)\b/i.exec(output);
40
+ return match?.[1] ?? null;
41
+ }
42
+ async function defaultPostgresVersionRunner(postgresBinaryPath) {
43
+ const result = await execFileAsync(postgresBinaryPath, ["--version"], {
44
+ env: process.env,
45
+ });
46
+ return [result.stdout, result.stderr].filter(Boolean).join("\n");
47
+ }
48
+ export async function assertOfficialPostgresVersion(binDir, runVersionCommand = defaultPostgresVersionRunner) {
49
+ const { postgres } = requireOfficialPostgresBinDir(binDir);
50
+ let output = "";
51
+ try {
52
+ output = await runVersionCommand(postgres);
53
+ }
54
+ catch (error) {
55
+ throw new Error(`Failed to verify PostgreSQL ${RUDDER_PRODUCTION_POSTGRES_VERSION} production binary at ${postgres}: ${error instanceof Error ? error.message : String(error)}`);
56
+ }
57
+ const actualVersion = parsePostgresVersion(output);
58
+ if (actualVersion !== RUDDER_PRODUCTION_POSTGRES_VERSION) {
59
+ throw new Error(`Expected PostgreSQL ${RUDDER_PRODUCTION_POSTGRES_VERSION} production binary at ${postgres}; got ${output.trim() || "unknown version"}`);
60
+ }
61
+ }
62
+ function appendProcessOutput(output, sink) {
63
+ const text = typeof output === "string" ? output : output?.toString("utf8") ?? "";
64
+ if (text.trim())
65
+ sink?.(text);
66
+ }
67
+ export function buildOfficialPostgresInitdbArgs(options, passwordFilePath) {
68
+ return [
69
+ "-D",
70
+ options.databaseDir,
71
+ "-U",
72
+ options.user,
73
+ "--auth=scram-sha-256",
74
+ "--pwfile",
75
+ passwordFilePath,
76
+ ...(options.initdbFlags ?? []),
77
+ ];
78
+ }
79
+ function buildOfficialPostgresCommandEnv(binDir, password) {
80
+ const env = { ...process.env, PGPASSWORD: password };
81
+ const pathKey = process.platform === "win32" && env.Path !== undefined ? "Path" : "PATH";
82
+ env[pathKey] = [binDir, env[pathKey]].filter(Boolean).join(path.delimiter);
83
+ return env;
84
+ }
85
+ export function createOfficialPostgresInstance(binDir, options) {
86
+ const binaries = requireOfficialPostgresBinDir(binDir);
87
+ const run = async (command, args, phase) => {
88
+ try {
89
+ const result = await execFileAsync(command, args, {
90
+ env: buildOfficialPostgresCommandEnv(binDir, options.password),
91
+ });
92
+ appendProcessOutput(result.stdout, options.onLog);
93
+ appendProcessOutput(result.stderr, options.onLog);
94
+ }
95
+ catch (error) {
96
+ const execError = error;
97
+ appendProcessOutput(execError.stdout, options.onError);
98
+ appendProcessOutput(execError.stderr, options.onError);
99
+ throw new Error(`PostgreSQL ${RUDDER_PRODUCTION_POSTGRES_VERSION} ${phase} failed: ${execError.message}`);
100
+ }
101
+ };
102
+ const runControlCommand = async (command, args, phase) => {
103
+ const result = spawnSync(command, args, {
104
+ env: buildOfficialPostgresCommandEnv(binDir, options.password),
105
+ stdio: "ignore",
106
+ windowsHide: true,
107
+ });
108
+ if (result.error) {
109
+ throw new Error(`PostgreSQL ${RUDDER_PRODUCTION_POSTGRES_VERSION} ${phase} failed: ${result.error.message}`);
110
+ }
111
+ if (result.status !== 0) {
112
+ throw new Error(`PostgreSQL ${RUDDER_PRODUCTION_POSTGRES_VERSION} ${phase} failed with ${result.signal ? `signal ${result.signal}` : `exit code ${result.status}`}`);
113
+ }
114
+ };
115
+ return {
116
+ async initialise() {
117
+ const tempDir = await mkdtemp(path.join(os.tmpdir(), "rudder-pg-init-"));
118
+ const passwordFilePath = path.join(tempDir, "pwfile");
119
+ try {
120
+ await writeFile(passwordFilePath, `${options.password}\n`, { encoding: "utf8", mode: 0o600 });
121
+ await run(binaries.initdb, buildOfficialPostgresInitdbArgs(options, passwordFilePath), "initdb");
122
+ }
123
+ finally {
124
+ await rm(tempDir, { recursive: true, force: true });
125
+ }
126
+ },
127
+ async start() {
128
+ await runControlCommand(binaries.pgCtl, [
129
+ "-D",
130
+ options.databaseDir,
131
+ "-o",
132
+ `-h 127.0.0.1 -p ${options.port}`,
133
+ "-w",
134
+ "start",
135
+ ], "start");
136
+ },
137
+ async stop() {
138
+ await run(binaries.pgCtl, ["-D", options.databaseDir, "-m", "fast", "-w", "stop"], "stop");
139
+ },
140
+ };
141
+ }
142
+ async function loadEmbeddedPostgresCtor() {
143
+ try {
144
+ const mod = await import("embedded-postgres");
145
+ return mod.default;
146
+ }
147
+ catch {
148
+ throw new Error("Embedded PostgreSQL support requires dependency `embedded-postgres`. Reinstall dependencies and try again, set DATABASE_URL for external Postgres, or set RUDDER_POSTGRES_BIN_DIR to a PostgreSQL 18.4 production bin directory.");
149
+ }
150
+ }
151
+ export async function createLocalPostgresInstance(options) {
152
+ const officialBinDir = resolveOfficialPostgresBinDir();
153
+ if (officialBinDir) {
154
+ await assertOfficialPostgresVersion(officialBinDir);
155
+ return {
156
+ provider: "official-postgres",
157
+ postgresBinDir: officialBinDir,
158
+ instance: createOfficialPostgresInstance(officialBinDir, options),
159
+ };
160
+ }
161
+ const EmbeddedPostgres = await loadEmbeddedPostgresCtor();
162
+ return {
163
+ provider: "embedded-postgres",
164
+ instance: new EmbeddedPostgres(options),
165
+ };
166
+ }
167
+ //# sourceMappingURL=local-postgres-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-postgres-provider.js","sourceRoot":"","sources":["../src/local-postgres-provider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=local-postgres-provider.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-postgres-provider.test.d.ts","sourceRoot":"","sources":["../src/local-postgres-provider.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,109 @@
1
+ import { mkdtempSync, rmSync, writeFileSync } from "node:fs";
2
+ import os from "node:os";
3
+ import path from "node:path";
4
+ import { afterEach, describe, expect, it } from "vitest";
5
+ import { RUDDER_POSTGRES_BIN_DIR_ENV, RUDDER_PRODUCTION_POSTGRES_VERSION, assertOfficialPostgresVersion, createLocalPostgresInstance, buildOfficialPostgresInitdbArgs, resolveOfficialPostgresBinaries, resolveOfficialPostgresBinDir, validateOfficialPostgresBinDir, } from "./local-postgres-provider.js";
6
+ const originalPostgresBinDir = process.env[RUDDER_POSTGRES_BIN_DIR_ENV];
7
+ function createTempDir() {
8
+ return mkdtempSync(path.join(os.tmpdir(), "rudder-pg-bin-"));
9
+ }
10
+ function touchRequiredPostgresBinaries(binDir) {
11
+ for (const binaryPath of Object.values(resolveOfficialPostgresBinaries(binDir))) {
12
+ writeFileSync(binaryPath, "", "utf8");
13
+ }
14
+ }
15
+ afterEach(() => {
16
+ if (originalPostgresBinDir === undefined) {
17
+ delete process.env[RUDDER_POSTGRES_BIN_DIR_ENV];
18
+ }
19
+ else {
20
+ process.env[RUDDER_POSTGRES_BIN_DIR_ENV] = originalPostgresBinDir;
21
+ }
22
+ });
23
+ describe("local postgres provider", () => {
24
+ it("pins Rudder's production embedded database provider to PostgreSQL 18.4", () => {
25
+ expect(RUDDER_PRODUCTION_POSTGRES_VERSION).toBe("18.4");
26
+ });
27
+ it("resolves and validates an official PostgreSQL bin directory", () => {
28
+ const binDir = createTempDir();
29
+ try {
30
+ touchRequiredPostgresBinaries(binDir);
31
+ expect(resolveOfficialPostgresBinDir(binDir)).toBe(path.resolve(binDir));
32
+ expect(validateOfficialPostgresBinDir(binDir)).toEqual({ ok: true });
33
+ }
34
+ finally {
35
+ rmSync(binDir, { recursive: true, force: true });
36
+ }
37
+ });
38
+ it("reports missing PostgreSQL production binaries before startup", () => {
39
+ const binDir = createTempDir();
40
+ try {
41
+ const validation = validateOfficialPostgresBinDir(binDir);
42
+ expect(validation.ok).toBe(false);
43
+ if (!validation.ok) {
44
+ expect(validation.missing).toEqual(expect.arrayContaining(Object.values(resolveOfficialPostgresBinaries(binDir))));
45
+ }
46
+ }
47
+ finally {
48
+ rmSync(binDir, { recursive: true, force: true });
49
+ }
50
+ });
51
+ it("accepts PostgreSQL 18.4 version output", async () => {
52
+ const binDir = createTempDir();
53
+ try {
54
+ touchRequiredPostgresBinaries(binDir);
55
+ await expect(assertOfficialPostgresVersion(binDir, async () => "postgres (PostgreSQL) 18.4")).resolves.toBeUndefined();
56
+ }
57
+ finally {
58
+ rmSync(binDir, { recursive: true, force: true });
59
+ }
60
+ });
61
+ it("rejects official PostgreSQL bin directories that are not 18.4", async () => {
62
+ const binDir = createTempDir();
63
+ try {
64
+ touchRequiredPostgresBinaries(binDir);
65
+ await expect(assertOfficialPostgresVersion(binDir, async () => "postgres (PostgreSQL) 18.1")).rejects.toThrow("Expected PostgreSQL 18.4");
66
+ }
67
+ finally {
68
+ rmSync(binDir, { recursive: true, force: true });
69
+ }
70
+ });
71
+ it("checks the PostgreSQL version before selecting the official provider", async () => {
72
+ const binDir = createTempDir();
73
+ try {
74
+ touchRequiredPostgresBinaries(binDir);
75
+ process.env[RUDDER_POSTGRES_BIN_DIR_ENV] = binDir;
76
+ await expect(createLocalPostgresInstance({
77
+ databaseDir: path.join(binDir, "data"),
78
+ user: "rudder",
79
+ password: "rudder",
80
+ port: 55432,
81
+ persistent: true,
82
+ })).rejects.toThrow("Failed to verify PostgreSQL 18.4");
83
+ }
84
+ finally {
85
+ rmSync(binDir, { recursive: true, force: true });
86
+ }
87
+ });
88
+ it("initializes official PostgreSQL clusters with password authentication", () => {
89
+ expect(buildOfficialPostgresInitdbArgs({
90
+ databaseDir: "/tmp/rudder-db",
91
+ user: "rudder",
92
+ password: "rudder",
93
+ port: 55432,
94
+ persistent: true,
95
+ initdbFlags: ["--encoding=UTF8", "--locale=C"],
96
+ }, "/tmp/pwfile")).toEqual([
97
+ "-D",
98
+ "/tmp/rudder-db",
99
+ "-U",
100
+ "rudder",
101
+ "--auth=scram-sha-256",
102
+ "--pwfile",
103
+ "/tmp/pwfile",
104
+ "--encoding=UTF8",
105
+ "--locale=C",
106
+ ]);
107
+ });
108
+ });
109
+ //# sourceMappingURL=local-postgres-provider.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-postgres-provider.test.js","sourceRoot":"","sources":["../src/local-postgres-provider.test.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"migration-runtime.d.ts","sourceRoot":"","sources":["../src/migration-runtime.ts"],"names":[],"mappings":"AA2BA,MAAM,MAAM,mBAAmB,GAAG;IAChC,gBAAgB,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B,CAAC;AA8MF,wBAAsB,0BAA0B,IAAI,OAAO,CAAC,mBAAmB,CAAC,CAW/E"}
1
+ {"version":3,"file":"migration-runtime.d.ts","sourceRoot":"","sources":["../src/migration-runtime.ts"],"names":[],"mappings":"AAeA,MAAM,MAAM,mBAAmB,GAAG;IAChC,gBAAgB,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B,CAAC;AAwMF,wBAAsB,0BAA0B,IAAI,OAAO,CAAC,mBAAmB,CAAC,CAW/E"}
@@ -2,6 +2,7 @@ import { existsSync, readFileSync, rmSync } from "node:fs";
2
2
  import { createServer } from "node:net";
3
3
  import path from "node:path";
4
4
  import { ensurePostgresDatabase, getPostgresDataDirectory } from "./client.js";
5
+ import { createLocalPostgresInstance, RUDDER_PRODUCTION_POSTGRES_VERSION, } from "./local-postgres-provider.js";
5
6
  import { cleanupStaleSysvSharedMemorySegments, isEmbeddedPostgresSharedMemoryError, } from "./embedded-postgres-recovery.js";
6
7
  import { resolveDatabaseTarget } from "./runtime-config.js";
7
8
  function toError(error, fallbackMessage) {
@@ -66,17 +67,7 @@ async function findAvailablePort(startPort) {
66
67
  }
67
68
  throw new Error(`Embedded PostgreSQL could not find a free port from ${startPort} to ${startPort + maxLookahead - 1}`);
68
69
  }
69
- async function loadEmbeddedPostgresCtor() {
70
- try {
71
- const mod = await import("embedded-postgres");
72
- return mod.default;
73
- }
74
- catch {
75
- throw new Error("Embedded PostgreSQL support requires dependency `embedded-postgres`. Reinstall dependencies and try again.");
76
- }
77
- }
78
70
  async function ensureEmbeddedPostgresConnection(dataDir, preferredPort) {
79
- const EmbeddedPostgres = await loadEmbeddedPostgresCtor();
80
71
  const selectedPort = await findAvailablePort(preferredPort);
81
72
  const postmasterPidFile = path.resolve(dataDir, "postmaster.pid");
82
73
  const pgVersionFile = path.resolve(dataDir, "PG_VERSION");
@@ -135,17 +126,24 @@ async function ensureEmbeddedPostgresConnection(dataDir, preferredPort) {
135
126
  stop: async () => { },
136
127
  };
137
128
  }
138
- const createInstance = () => new EmbeddedPostgres({
139
- databaseDir: dataDir,
140
- user: "rudder",
141
- password: "rudder",
142
- port: selectedPort,
143
- persistent: true,
144
- initdbFlags: ["--encoding=UTF8", "--locale=C"],
145
- onLog: appendLog,
146
- onError: appendLog,
147
- });
148
- const instance = createInstance();
129
+ let providerLabel = "embedded-postgres";
130
+ const createInstance = async () => {
131
+ const selection = await createLocalPostgresInstance({
132
+ databaseDir: dataDir,
133
+ user: "rudder",
134
+ password: "rudder",
135
+ port: selectedPort,
136
+ persistent: true,
137
+ initdbFlags: ["--encoding=UTF8", "--locale=C"],
138
+ onLog: appendLog,
139
+ onError: appendLog,
140
+ });
141
+ providerLabel = selection.provider === "official-postgres"
142
+ ? `postgresql-${RUDDER_PRODUCTION_POSTGRES_VERSION}`
143
+ : "embedded-postgres";
144
+ return selection.instance;
145
+ };
146
+ const instance = await createInstance();
149
147
  if (!existsSync(path.resolve(dataDir, "PG_VERSION"))) {
150
148
  try {
151
149
  await instance.initialise();
@@ -166,7 +164,7 @@ async function ensureEmbeddedPostgresConnection(dataDir, preferredPort) {
166
164
  const recovered = await cleanupStaleSysvSharedMemorySegments();
167
165
  if (recovered.removedIds.length > 0) {
168
166
  process.emitWarning(`Recovered ${recovered.removedIds.length} stale SysV shared memory segment(s) before retrying embedded PostgreSQL startup on port ${selectedPort}.`);
169
- startedInstance = createInstance();
167
+ startedInstance = await createInstance();
170
168
  try {
171
169
  await startedInstance.start();
172
170
  }
@@ -186,7 +184,7 @@ async function ensureEmbeddedPostgresConnection(dataDir, preferredPort) {
186
184
  await ensurePostgresDatabase(adminConnectionString, "rudder");
187
185
  return {
188
186
  connectionString: `postgres://rudder:rudder@127.0.0.1:${selectedPort}/rudder`,
189
- source: `embedded-postgres@${selectedPort}`,
187
+ source: `${providerLabel}@${selectedPort}`,
190
188
  stop: async () => {
191
189
  await startedInstance.stop();
192
190
  },
@@ -1 +1 @@
1
- {"version":3,"file":"migration-runtime.js","sourceRoot":"","sources":["../src/migration-runtime.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"migration-runtime.js","sourceRoot":"","sources":["../src/migration-runtime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ ALTER TABLE "messenger_custom_groups" ADD COLUMN "pinned_at" timestamp with time zone;
@@ -0,0 +1,49 @@
1
+ CREATE TABLE "chat_generations" (
2
+ "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
3
+ "org_id" uuid NOT NULL,
4
+ "conversation_id" uuid NOT NULL,
5
+ "status" text DEFAULT 'active' NOT NULL,
6
+ "terminal_reason" text,
7
+ "started_at" timestamp with time zone DEFAULT now() NOT NULL,
8
+ "completed_at" timestamp with time zone,
9
+ "created_at" timestamp with time zone DEFAULT now() NOT NULL,
10
+ "updated_at" timestamp with time zone DEFAULT now() NOT NULL
11
+ );
12
+ --> statement-breakpoint
13
+ CREATE TABLE "chat_queued_messages" (
14
+ "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
15
+ "org_id" uuid NOT NULL,
16
+ "conversation_id" uuid NOT NULL,
17
+ "position" integer NOT NULL,
18
+ "status" text DEFAULT 'queued' NOT NULL,
19
+ "version" integer DEFAULT 1 NOT NULL,
20
+ "client_mutation_id" text NOT NULL,
21
+ "payload" jsonb NOT NULL,
22
+ "expected_generation_id" uuid,
23
+ "active_generation_id" uuid,
24
+ "delivery_attempts" integer DEFAULT 0 NOT NULL,
25
+ "last_attempt_at" timestamp with time zone,
26
+ "last_delivery_reason" text,
27
+ "source_message_id" uuid,
28
+ "delivered_message_id" uuid,
29
+ "cancelled_at" timestamp with time zone,
30
+ "steered_at" timestamp with time zone,
31
+ "dequeued_at" timestamp with time zone,
32
+ "created_at" timestamp with time zone DEFAULT now() NOT NULL,
33
+ "updated_at" timestamp with time zone DEFAULT now() NOT NULL
34
+ );
35
+ --> statement-breakpoint
36
+ ALTER TABLE "chat_generations" ADD CONSTRAINT "chat_generations_org_id_organizations_id_fk" FOREIGN KEY ("org_id") REFERENCES "public"."organizations"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
37
+ ALTER TABLE "chat_generations" ADD CONSTRAINT "chat_generations_conversation_id_chat_conversations_id_fk" FOREIGN KEY ("conversation_id") REFERENCES "public"."chat_conversations"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
38
+ ALTER TABLE "chat_queued_messages" ADD CONSTRAINT "chat_queued_messages_org_id_organizations_id_fk" FOREIGN KEY ("org_id") REFERENCES "public"."organizations"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
39
+ ALTER TABLE "chat_queued_messages" ADD CONSTRAINT "chat_queued_messages_conversation_id_chat_conversations_id_fk" FOREIGN KEY ("conversation_id") REFERENCES "public"."chat_conversations"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
40
+ ALTER TABLE "chat_queued_messages" ADD CONSTRAINT "chat_queued_messages_expected_generation_id_chat_generations_id_fk" FOREIGN KEY ("expected_generation_id") REFERENCES "public"."chat_generations"("id") ON DELETE set null ON UPDATE no action;--> statement-breakpoint
41
+ ALTER TABLE "chat_queued_messages" ADD CONSTRAINT "chat_queued_messages_active_generation_id_chat_generations_id_fk" FOREIGN KEY ("active_generation_id") REFERENCES "public"."chat_generations"("id") ON DELETE set null ON UPDATE no action;--> statement-breakpoint
42
+ ALTER TABLE "chat_queued_messages" ADD CONSTRAINT "chat_queued_messages_source_message_id_chat_messages_id_fk" FOREIGN KEY ("source_message_id") REFERENCES "public"."chat_messages"("id") ON DELETE set null ON UPDATE no action;--> statement-breakpoint
43
+ ALTER TABLE "chat_queued_messages" ADD CONSTRAINT "chat_queued_messages_delivered_message_id_chat_messages_id_fk" FOREIGN KEY ("delivered_message_id") REFERENCES "public"."chat_messages"("id") ON DELETE set null ON UPDATE no action;--> statement-breakpoint
44
+ CREATE INDEX "chat_generations_conversation_status_idx" ON "chat_generations" USING btree ("conversation_id","status");--> statement-breakpoint
45
+ CREATE INDEX "chat_generations_org_conversation_started_idx" ON "chat_generations" USING btree ("org_id","conversation_id","started_at");--> statement-breakpoint
46
+ CREATE INDEX "chat_queued_messages_conversation_status_position_idx" ON "chat_queued_messages" USING btree ("conversation_id","status","position");--> statement-breakpoint
47
+ CREATE INDEX "chat_queued_messages_org_conversation_idx" ON "chat_queued_messages" USING btree ("org_id","conversation_id");--> statement-breakpoint
48
+ CREATE UNIQUE INDEX "chat_queued_messages_conversation_position_uq" ON "chat_queued_messages" USING btree ("conversation_id","position");--> statement-breakpoint
49
+ CREATE UNIQUE INDEX "chat_queued_messages_conversation_mutation_uq" ON "chat_queued_messages" USING btree ("conversation_id","client_mutation_id");
@@ -0,0 +1,8 @@
1
+ ALTER TABLE "chat_conversations" ADD COLUMN "forked_from_conversation_id" uuid;--> statement-breakpoint
2
+ ALTER TABLE "chat_conversations" ADD COLUMN "forked_from_message_id" uuid;--> statement-breakpoint
3
+ ALTER TABLE "chat_conversations" ADD COLUMN "fork_root_conversation_id" uuid;--> statement-breakpoint
4
+ ALTER TABLE "chat_conversations" ADD CONSTRAINT "chat_conversations_forked_from_conversation_id_chat_conversations_id_fk" FOREIGN KEY ("forked_from_conversation_id") REFERENCES "public"."chat_conversations"("id") ON DELETE set null ON UPDATE no action;--> statement-breakpoint
5
+ ALTER TABLE "chat_conversations" ADD CONSTRAINT "chat_conversations_forked_from_message_id_chat_messages_id_fk" FOREIGN KEY ("forked_from_message_id") REFERENCES "public"."chat_messages"("id") ON DELETE set null ON UPDATE no action;--> statement-breakpoint
6
+ ALTER TABLE "chat_conversations" ADD CONSTRAINT "chat_conversations_fork_root_conversation_id_chat_conversations_id_fk" FOREIGN KEY ("fork_root_conversation_id") REFERENCES "public"."chat_conversations"("id") ON DELETE set null ON UPDATE no action;--> statement-breakpoint
7
+ CREATE INDEX "chat_conversations_forked_from_conversation_idx" ON "chat_conversations" USING btree ("forked_from_conversation_id");--> statement-breakpoint
8
+ CREATE INDEX "chat_conversations_fork_root_idx" ON "chat_conversations" USING btree ("fork_root_conversation_id");