@cat-factory/node-server 0.91.0 → 0.91.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/db/client.d.ts +10 -1
- package/dist/db/client.d.ts.map +1 -1
- package/dist/db/client.js +42 -2
- package/dist/db/client.js.map +1 -1
- package/dist/db/migrate.d.ts +43 -2
- package/dist/db/migrate.d.ts.map +1 -1
- package/dist/db/migrate.js +133 -2
- package/dist/db/migrate.js.map +1 -1
- package/dist/server.js +27 -5
- package/dist/server.js.map +1 -1
- package/drizzle/20260709061125_old_santa_claus/migration.sql +13 -1
- package/package.json +8 -7
package/dist/db/client.d.ts
CHANGED
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
import { Pool } from 'pg';
|
|
2
|
-
|
|
2
|
+
/** The default Postgres schema the app's (unqualified) tables live in. */
|
|
3
|
+
export declare const DEFAULT_DB_SCHEMA = "public";
|
|
4
|
+
/** The default schema for the drizzle migration ledger (`__drizzle_migrations`). */
|
|
5
|
+
export declare const DEFAULT_MIGRATIONS_SCHEMA = "drizzle";
|
|
6
|
+
/**
|
|
7
|
+
* Validate + normalise a configured schema name, falling back to `fallback` when unset.
|
|
8
|
+
* `label` names the env var in the error so a bad value is actionable.
|
|
9
|
+
*/
|
|
10
|
+
export declare function resolveDbSchema(schema: string | undefined, fallback?: string, label?: string): string;
|
|
11
|
+
declare function makeDbClient(connectionString: string, schema?: string): {
|
|
3
12
|
db: import("drizzle-orm/node-postgres").NodePgDatabase<import("drizzle-orm").EmptyRelations> & {
|
|
4
13
|
$client: Pool;
|
|
5
14
|
};
|
package/dist/db/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/db/client.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,IAAI,CAAA;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/db/client.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,IAAI,CAAA;AAEzB,0EAA0E;AAC1E,eAAO,MAAM,iBAAiB,WAAW,CAAA;AACzC,oFAAoF;AACpF,eAAO,MAAM,yBAAyB,YAAY,CAAA;AAWlD;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,QAAQ,GAAE,MAA0B,EACpC,KAAK,SAAc,GAClB,MAAM,CASR;AAWD,iBAAS,YAAY,CAAC,gBAAgB,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM;;;;;EAqB9D;AAED,mFAAmF;AACnF,MAAM,MAAM,QAAQ,GAAG,UAAU,CAAC,OAAO,YAAY,CAAC,CAAA;AACtD,MAAM,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAA;AAEtC,eAAO,MAAM,cAAc,qBAAe,CAAA"}
|
package/dist/db/client.js
CHANGED
|
@@ -1,11 +1,51 @@
|
|
|
1
1
|
import { logger } from '@cat-factory/server';
|
|
2
2
|
import { drizzle } from 'drizzle-orm/node-postgres';
|
|
3
3
|
import { Pool } from 'pg';
|
|
4
|
+
/** The default Postgres schema the app's (unqualified) tables live in. */
|
|
5
|
+
export const DEFAULT_DB_SCHEMA = 'public';
|
|
6
|
+
/** The default schema for the drizzle migration ledger (`__drizzle_migrations`). */
|
|
7
|
+
export const DEFAULT_MIGRATIONS_SCHEMA = 'drizzle';
|
|
8
|
+
// Postgres identifier guard for the configurable schemas. Schema names are interpolated into
|
|
9
|
+
// SQL that is NOT parameterizable (the libpq `options=-c search_path=…` connection string and
|
|
10
|
+
// `CREATE SCHEMA`/`to_regclass` DDL), so we restrict them to a plain identifier to keep them
|
|
11
|
+
// injection-safe. Lowercase only, deliberately: we quote the name in `CREATE SCHEMA "x"` (case
|
|
12
|
+
// preserving) but the libpq `search_path` option is unquoted (Postgres folds it to lowercase),
|
|
13
|
+
// so a mixed-case name would create one schema and point the connection at a differently-cased
|
|
14
|
+
// one. Restricting to lowercase keeps the two in step. (Mirrored in scripts/db-reset.mjs.)
|
|
15
|
+
const SCHEMA_IDENTIFIER = /^[a-z_][a-z0-9_]*$/;
|
|
16
|
+
/**
|
|
17
|
+
* Validate + normalise a configured schema name, falling back to `fallback` when unset.
|
|
18
|
+
* `label` names the env var in the error so a bad value is actionable.
|
|
19
|
+
*/
|
|
20
|
+
export function resolveDbSchema(schema, fallback = DEFAULT_DB_SCHEMA, label = 'DB_SCHEMA') {
|
|
21
|
+
const value = schema?.trim();
|
|
22
|
+
if (!value)
|
|
23
|
+
return fallback;
|
|
24
|
+
if (!SCHEMA_IDENTIFIER.test(value)) {
|
|
25
|
+
throw new Error(`Invalid ${label} "${value}": must be a plain lowercase Postgres identifier ([a-z_][a-z0-9_]*).`);
|
|
26
|
+
}
|
|
27
|
+
return value;
|
|
28
|
+
}
|
|
4
29
|
// Create a Drizzle client over a node-postgres pool. We use only the core query
|
|
5
30
|
// builder (db.select().from(table)), not the relational query API, so no `schema`
|
|
6
31
|
// option is passed (that's only needed for db.query.* in drizzle 1.0).
|
|
7
|
-
|
|
8
|
-
|
|
32
|
+
//
|
|
33
|
+
// When `schema` is a non-default value, every connection in the pool is opened with its
|
|
34
|
+
// `search_path` set to it, so the unqualified table refs the app + migrations use resolve
|
|
35
|
+
// there instead of `public` — the seam for deployments where the `public` schema is
|
|
36
|
+
// unavailable. The explicitly-namespaced schemas (`telemetry`/`sandbox`/`provisioning`) are
|
|
37
|
+
// always qualified, so they are unaffected.
|
|
38
|
+
function makeDbClient(connectionString, schema) {
|
|
39
|
+
const resolved = resolveDbSchema(schema);
|
|
40
|
+
const pool = new Pool({
|
|
41
|
+
connectionString,
|
|
42
|
+
// Only override search_path off the default: a stock `public` deployment keeps the exact
|
|
43
|
+
// prior behaviour (no connection options set). We keep `public` on the path as a fallback so
|
|
44
|
+
// shared objects (extensions, types installed there) still resolve; a non-existent `public`
|
|
45
|
+
// in search_path is silently ignored by Postgres, so this is safe even where `public` was the
|
|
46
|
+
// reason to relocate. `resolved` is first, so the migrator's unqualified CREATEs land there.
|
|
47
|
+
...(resolved === DEFAULT_DB_SCHEMA ? {} : { options: `-c search_path=${resolved},public` }),
|
|
48
|
+
});
|
|
9
49
|
// node-postgres emits 'error' on an IDLE client when the backend drops the
|
|
10
50
|
// connection (Postgres restart, failover, idle timeout). An unhandled 'error' on
|
|
11
51
|
// the pool's EventEmitter would throw and crash the whole process — defeating the
|
package/dist/db/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/db/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAA;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,IAAI,CAAA;AAEzB,gFAAgF;AAChF,kFAAkF;AAClF,uEAAuE;AACvE,SAAS,YAAY,CAAC,gBAAwB;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/db/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAA;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,IAAI,CAAA;AAEzB,0EAA0E;AAC1E,MAAM,CAAC,MAAM,iBAAiB,GAAG,QAAQ,CAAA;AACzC,oFAAoF;AACpF,MAAM,CAAC,MAAM,yBAAyB,GAAG,SAAS,CAAA;AAElD,6FAA6F;AAC7F,8FAA8F;AAC9F,6FAA6F;AAC7F,+FAA+F;AAC/F,+FAA+F;AAC/F,+FAA+F;AAC/F,2FAA2F;AAC3F,MAAM,iBAAiB,GAAG,oBAAoB,CAAA;AAE9C;;;GAGG;AACH,MAAM,UAAU,eAAe,CAC7B,MAA0B,EAC1B,QAAQ,GAAW,iBAAiB,EACpC,KAAK,GAAG,WAAW;IAEnB,MAAM,KAAK,GAAG,MAAM,EAAE,IAAI,EAAE,CAAA;IAC5B,IAAI,CAAC,KAAK;QAAE,OAAO,QAAQ,CAAA;IAC3B,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CACb,WAAW,KAAK,KAAK,KAAK,sEAAsE,CACjG,CAAA;IACH,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED,gFAAgF;AAChF,kFAAkF;AAClF,uEAAuE;AACvE,EAAE;AACF,wFAAwF;AACxF,0FAA0F;AAC1F,oFAAoF;AACpF,4FAA4F;AAC5F,4CAA4C;AAC5C,SAAS,YAAY,CAAC,gBAAwB,EAAE,MAAe;IAC7D,MAAM,QAAQ,GAAG,eAAe,CAAC,MAAM,CAAC,CAAA;IACxC,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC;QACpB,gBAAgB;QAChB,yFAAyF;QACzF,6FAA6F;QAC7F,4FAA4F;QAC5F,8FAA8F;QAC9F,6FAA6F;QAC7F,GAAG,CAAC,QAAQ,KAAK,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,kBAAkB,QAAQ,SAAS,EAAE,CAAC;KAC5F,CAAC,CAAA;IACF,2EAA2E;IAC3E,iFAAiF;IACjF,kFAAkF;IAClF,mFAAmF;IACnF,sCAAsC;IACtC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;QACvB,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,OAAO,EAAE,EAAE,4BAA4B,CAAC,CAAA;IAClE,CAAC,CAAC,CAAA;IACF,MAAM,EAAE,GAAG,OAAO,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAA;IACpC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAA;AACrB,CAAC;AAMD,MAAM,CAAC,MAAM,cAAc,GAAG,YAAY,CAAA"}
|
package/dist/db/migrate.d.ts
CHANGED
|
@@ -1,5 +1,30 @@
|
|
|
1
1
|
import type { Pool } from 'pg';
|
|
2
|
-
import type
|
|
2
|
+
import { type DrizzleDb } from './client.js';
|
|
3
|
+
/**
|
|
4
|
+
* The database's recorded migration history disagrees with its actual schema: the migrator
|
|
5
|
+
* ledger says migrations were applied, but the tables they create are missing. This is the
|
|
6
|
+
* classic drizzle-kit 1.0 footgun — the ledger lives in the `drizzle` schema, so dropping
|
|
7
|
+
* `public` (a hand `DROP SCHEMA public CASCADE`, a stray test run) leaves the ledger behind
|
|
8
|
+
* claiming everything is current. `migrate()` then tries to apply the next migration onto
|
|
9
|
+
* tables that no longer exist and dies with an opaque `42P01`. We detect it up front and
|
|
10
|
+
* fail with an actionable message instead.
|
|
11
|
+
*/
|
|
12
|
+
export declare class DbSchemaInconsistentError extends Error {
|
|
13
|
+
constructor(message: string);
|
|
14
|
+
}
|
|
15
|
+
/** A migration failed to apply. Wraps the raw driver error with a human cause + recovery hint. */
|
|
16
|
+
export declare class MigrationFailedError extends Error {
|
|
17
|
+
readonly code: string | undefined;
|
|
18
|
+
constructor(message: string, options: {
|
|
19
|
+
cause: unknown;
|
|
20
|
+
code: string | undefined;
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Turn a raw migration failure into a `MigrationFailedError` with a mapped, actionable cause.
|
|
25
|
+
* Exported for unit testing the code→message mapping without a live database.
|
|
26
|
+
*/
|
|
27
|
+
export declare function explainMigrationFailure(err: unknown): MigrationFailedError;
|
|
3
28
|
/**
|
|
4
29
|
* Run any pending migrations. Safe to call on every boot, including concurrently from
|
|
5
30
|
* multiple replicas: a session-level advisory lock (held on a dedicated connection for
|
|
@@ -7,6 +32,22 @@ import type { DrizzleDb } from './client.js';
|
|
|
7
32
|
* at once can't both try to create the same objects and collide. The migrator is
|
|
8
33
|
* idempotent against its `__drizzle_migrations` ledger, so the loser of the lock race
|
|
9
34
|
* simply finds nothing to apply.
|
|
35
|
+
*
|
|
36
|
+
* Before applying, we ensure the configured schema exists (so a non-`public` deployment can
|
|
37
|
+
* boot against an empty database — the `search_path`-relocated tables land there), probe for
|
|
38
|
+
* the ledger↔schema split (see {@link assertSchemaConsistent}), and, on any apply failure,
|
|
39
|
+
* rethrow a {@link MigrationFailedError} whose message names the likely cause and the recovery
|
|
40
|
+
* path — so a wedged DB reports what to do instead of a bare Postgres error deep inside an
|
|
41
|
+
* `ALTER TABLE`.
|
|
42
|
+
*
|
|
43
|
+
* `opts.schema` (default `public`, the deployment's `DB_SCHEMA`) is where the unqualified app
|
|
44
|
+
* tables live; `opts.migrationsSchema` (default `drizzle`, the deployment's
|
|
45
|
+
* `DB_MIGRATIONS_SCHEMA`) is where the migration ledger lives — set it to a service-dedicated
|
|
46
|
+
* name on a SHARED database so cat-factory's ledger can't collide with another drizzle-using
|
|
47
|
+
* service's `drizzle.__drizzle_migrations`. The migrator creates the migrations schema itself.
|
|
10
48
|
*/
|
|
11
|
-
export declare function migrate(db: DrizzleDb, pool: Pool
|
|
49
|
+
export declare function migrate(db: DrizzleDb, pool: Pool, opts?: {
|
|
50
|
+
schema?: string;
|
|
51
|
+
migrationsSchema?: string;
|
|
52
|
+
}): Promise<void>;
|
|
12
53
|
//# sourceMappingURL=migrate.d.ts.map
|
package/dist/db/migrate.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../src/db/migrate.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,IAAI,CAAA;AAC9B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../src/db/migrate.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,IAAI,CAAA;AAC9B,OAAO,EAGL,KAAK,SAAS,EAEf,MAAM,aAAa,CAAA;AAsCpB;;;;;;;;GAQG;AACH,qBAAa,yBAA0B,SAAQ,KAAK;IAClD,YAAY,OAAO,EAAE,MAAM,EAG1B;CACF;AAED,kGAAkG;AAClG,qBAAa,oBAAqB,SAAQ,KAAK;IAC7C,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAA;IACjC,YAAY,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAA;KAAE,EAIjF;CACF;AAsDD;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,OAAO,GAAG,oBAAoB,CA4B1E;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,OAAO,CAC3B,EAAE,EAAE,SAAS,EACb,IAAI,EAAE,IAAI,EACV,IAAI,GAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAAO,GACxD,OAAO,CAAC,IAAI,CAAC,CA6Bf"}
|
package/dist/db/migrate.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { fileURLToPath } from 'node:url';
|
|
2
2
|
import { migrate as drizzleMigrate } from 'drizzle-orm/node-postgres/migrator';
|
|
3
|
+
import { DEFAULT_DB_SCHEMA, DEFAULT_MIGRATIONS_SCHEMA, resolveDbSchema, } from './client.js';
|
|
3
4
|
// Apply the drizzle-kit migration lineage in `../drizzle` on boot. The schema's single
|
|
4
5
|
// source of truth is `./schema.ts`; `pnpm db:generate` diffs it and emits the next SQL
|
|
5
6
|
// migration there. The drizzle migrator records applied migrations in its own
|
|
@@ -14,6 +15,109 @@ import { migrate as drizzleMigrate } from 'drizzle-orm/node-postgres/migrator';
|
|
|
14
15
|
const migrationsFolder = fileURLToPath(new URL('../../drizzle', import.meta.url));
|
|
15
16
|
// A fixed key for the advisory lock that serialises concurrent boots (see migrate).
|
|
16
17
|
const MIGRATION_LOCK_KEY = 776_712_001;
|
|
18
|
+
// The drizzle-kit 1.0 migrator records applied migrations in the `__drizzle_migrations` table
|
|
19
|
+
// of its migrations schema (configurable via `migrationsSchema`, default `drizzle` — NOT
|
|
20
|
+
// `public`). Crucially, dropping the app schema (a hand `DROP SCHEMA … CASCADE`, a stray test
|
|
21
|
+
// run) leaves this ledger intact, so the ledger can outlive the very tables it claims to have
|
|
22
|
+
// created — see `assertSchemaConsistent`.
|
|
23
|
+
const ledgerRef = (migrationsSchema) => `"${migrationsSchema}"."__drizzle_migrations"`;
|
|
24
|
+
// Tables that MUST exist once the baseline migration is recorded as applied. If the ledger
|
|
25
|
+
// is non-empty but these are gone, the database is in the split state described above and
|
|
26
|
+
// cannot be migrated forward (the next `ALTER TABLE`/FK migration would fail with a bare
|
|
27
|
+
// `42P01`). We probe a couple of stable, early-created anchors rather than the full set. They
|
|
28
|
+
// are qualified with the configured schema (default `public`) since they are the tables the
|
|
29
|
+
// `search_path`-relocated default schema holds.
|
|
30
|
+
const ANCHOR_TABLES = ['accounts', 'workspaces'];
|
|
31
|
+
const RESET_HINT = 'Recover with `pnpm --filter @cat-factory/node-server db:reset` ' +
|
|
32
|
+
'(experimental installs only — this DROPS ALL DATA), then restart.';
|
|
33
|
+
/**
|
|
34
|
+
* The database's recorded migration history disagrees with its actual schema: the migrator
|
|
35
|
+
* ledger says migrations were applied, but the tables they create are missing. This is the
|
|
36
|
+
* classic drizzle-kit 1.0 footgun — the ledger lives in the `drizzle` schema, so dropping
|
|
37
|
+
* `public` (a hand `DROP SCHEMA public CASCADE`, a stray test run) leaves the ledger behind
|
|
38
|
+
* claiming everything is current. `migrate()` then tries to apply the next migration onto
|
|
39
|
+
* tables that no longer exist and dies with an opaque `42P01`. We detect it up front and
|
|
40
|
+
* fail with an actionable message instead.
|
|
41
|
+
*/
|
|
42
|
+
export class DbSchemaInconsistentError extends Error {
|
|
43
|
+
constructor(message) {
|
|
44
|
+
super(message);
|
|
45
|
+
this.name = 'DbSchemaInconsistentError';
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/** A migration failed to apply. Wraps the raw driver error with a human cause + recovery hint. */
|
|
49
|
+
export class MigrationFailedError extends Error {
|
|
50
|
+
code;
|
|
51
|
+
constructor(message, options) {
|
|
52
|
+
super(message, { cause: options.cause });
|
|
53
|
+
this.name = 'MigrationFailedError';
|
|
54
|
+
this.code = options.code;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
function asPgError(err) {
|
|
58
|
+
// node-postgres surfaces the driver error as the `cause` of drizzle's wrapper; fall back
|
|
59
|
+
// to the error itself so we read the pg code/detail whichever layer carries it.
|
|
60
|
+
const cause = err?.cause;
|
|
61
|
+
const candidate = (cause && typeof cause === 'object' ? cause : err);
|
|
62
|
+
return candidate ?? {};
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Guard against the ledger↔schema split BEFORE handing off to the migrator. Skips silently
|
|
66
|
+
* on a fresh database (no ledger table, or an empty ledger) — there is nothing to apply
|
|
67
|
+
* onto yet, so a missing `<schema>.accounts` is expected and the migrator will create it. The
|
|
68
|
+
* anchors are probed in the configured schema (default `public`) — the schema the
|
|
69
|
+
* `search_path`-relocated default tables live in.
|
|
70
|
+
*/
|
|
71
|
+
async function assertSchemaConsistent(pool, schema, migrationsSchema) {
|
|
72
|
+
const ledger = ledgerRef(migrationsSchema);
|
|
73
|
+
const ledgerExists = await pool.query(`SELECT to_regclass('${ledger}') AS reg`);
|
|
74
|
+
if (!ledgerExists.rows[0]?.reg)
|
|
75
|
+
return; // fresh DB: migrator will bootstrap the ledger + tables
|
|
76
|
+
const { rows } = await pool.query(`SELECT count(*)::int AS n FROM ${ledger}`);
|
|
77
|
+
const applied = rows[0]?.n ?? 0;
|
|
78
|
+
if (applied === 0)
|
|
79
|
+
return; // ledger present but empty — still a clean slate
|
|
80
|
+
const qualified = ANCHOR_TABLES.map((t) => `${schema}.${t}`);
|
|
81
|
+
const anchors = await pool.query(`SELECT ${qualified.map((t, i) => `to_regclass($${i + 1}) AS a${i}`).join(', ')}`, qualified);
|
|
82
|
+
const missing = qualified.filter((_, i) => !anchors.rows[0]?.[`a${i}`]);
|
|
83
|
+
if (missing.length === 0)
|
|
84
|
+
return;
|
|
85
|
+
throw new DbSchemaInconsistentError(`Database is inconsistent: the migration ledger (${ledger}) records ${applied} applied ` +
|
|
86
|
+
`migration(s) but expected table(s) ${missing.join(', ')} are missing. This usually means ` +
|
|
87
|
+
`the ledger's own schema survived a \`DROP SCHEMA … CASCADE\` (or a stray test run), ` +
|
|
88
|
+
`leaving the recorded history ahead of the actual schema. The database cannot be migrated ` +
|
|
89
|
+
`forward in this state. ${RESET_HINT}`);
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Turn a raw migration failure into a `MigrationFailedError` with a mapped, actionable cause.
|
|
93
|
+
* Exported for unit testing the code→message mapping without a live database.
|
|
94
|
+
*/
|
|
95
|
+
export function explainMigrationFailure(err) {
|
|
96
|
+
const pg = asPgError(err);
|
|
97
|
+
const where = pg.where ? ` (at: ${pg.where})` : '';
|
|
98
|
+
let cause;
|
|
99
|
+
switch (pg.code) {
|
|
100
|
+
case '42P01': // undefined_table
|
|
101
|
+
cause =
|
|
102
|
+
`a migration referenced a table that does not exist (${pg.message ?? 'undefined table'}). ` +
|
|
103
|
+
`The migration ledger is ahead of the actual schema — a partial or manual reset. ${RESET_HINT}`;
|
|
104
|
+
break;
|
|
105
|
+
case '23503': // foreign_key_violation
|
|
106
|
+
cause =
|
|
107
|
+
`existing rows violate a constraint a migration adds: ${pg.detail ?? pg.message ?? 'foreign key violation'}. ` +
|
|
108
|
+
`For experimental installs, ${RESET_HINT} Otherwise, remove the offending row(s) named above and retry.`;
|
|
109
|
+
break;
|
|
110
|
+
case '42P07': // duplicate_table
|
|
111
|
+
case '42710': // duplicate_object
|
|
112
|
+
cause =
|
|
113
|
+
`a migration tried to create an object that already exists (${pg.message ?? 'duplicate object'}). ` +
|
|
114
|
+
`The migration ledger is behind the actual schema. ${RESET_HINT}`;
|
|
115
|
+
break;
|
|
116
|
+
default:
|
|
117
|
+
cause = pg.message ?? String(err);
|
|
118
|
+
}
|
|
119
|
+
return new MigrationFailedError(`Database migration failed${pg.code ? ` [${pg.code}]` : ''}${where}: ${cause}`, { cause: err, code: pg.code });
|
|
120
|
+
}
|
|
17
121
|
/**
|
|
18
122
|
* Run any pending migrations. Safe to call on every boot, including concurrently from
|
|
19
123
|
* multiple replicas: a session-level advisory lock (held on a dedicated connection for
|
|
@@ -21,12 +125,39 @@ const MIGRATION_LOCK_KEY = 776_712_001;
|
|
|
21
125
|
* at once can't both try to create the same objects and collide. The migrator is
|
|
22
126
|
* idempotent against its `__drizzle_migrations` ledger, so the loser of the lock race
|
|
23
127
|
* simply finds nothing to apply.
|
|
128
|
+
*
|
|
129
|
+
* Before applying, we ensure the configured schema exists (so a non-`public` deployment can
|
|
130
|
+
* boot against an empty database — the `search_path`-relocated tables land there), probe for
|
|
131
|
+
* the ledger↔schema split (see {@link assertSchemaConsistent}), and, on any apply failure,
|
|
132
|
+
* rethrow a {@link MigrationFailedError} whose message names the likely cause and the recovery
|
|
133
|
+
* path — so a wedged DB reports what to do instead of a bare Postgres error deep inside an
|
|
134
|
+
* `ALTER TABLE`.
|
|
135
|
+
*
|
|
136
|
+
* `opts.schema` (default `public`, the deployment's `DB_SCHEMA`) is where the unqualified app
|
|
137
|
+
* tables live; `opts.migrationsSchema` (default `drizzle`, the deployment's
|
|
138
|
+
* `DB_MIGRATIONS_SCHEMA`) is where the migration ledger lives — set it to a service-dedicated
|
|
139
|
+
* name on a SHARED database so cat-factory's ledger can't collide with another drizzle-using
|
|
140
|
+
* service's `drizzle.__drizzle_migrations`. The migrator creates the migrations schema itself.
|
|
24
141
|
*/
|
|
25
|
-
export async function migrate(db, pool) {
|
|
142
|
+
export async function migrate(db, pool, opts = {}) {
|
|
143
|
+
const resolved = resolveDbSchema(opts.schema);
|
|
144
|
+
const migrationsSchema = resolveDbSchema(opts.migrationsSchema, DEFAULT_MIGRATIONS_SCHEMA, 'DB_MIGRATIONS_SCHEMA');
|
|
26
145
|
const lock = await pool.connect();
|
|
27
146
|
try {
|
|
28
147
|
await lock.query('SELECT pg_advisory_lock($1)', [MIGRATION_LOCK_KEY]);
|
|
29
|
-
|
|
148
|
+
// Ensure the target schema exists before the migrator's unqualified `CREATE TABLE`s run
|
|
149
|
+
// (the pool's search_path points here). Skipped for `public`, which always exists — and
|
|
150
|
+
// avoids needing CREATE-on-public privilege on a stock deployment.
|
|
151
|
+
if (resolved !== DEFAULT_DB_SCHEMA) {
|
|
152
|
+
await lock.query(`CREATE SCHEMA IF NOT EXISTS "${resolved}"`);
|
|
153
|
+
}
|
|
154
|
+
await assertSchemaConsistent(pool, resolved, migrationsSchema);
|
|
155
|
+
try {
|
|
156
|
+
await drizzleMigrate(db, { migrationsFolder, migrationsSchema });
|
|
157
|
+
}
|
|
158
|
+
catch (err) {
|
|
159
|
+
throw explainMigrationFailure(err);
|
|
160
|
+
}
|
|
30
161
|
}
|
|
31
162
|
finally {
|
|
32
163
|
try {
|
package/dist/db/migrate.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../src/db/migrate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACxC,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,oCAAoC,CAAA;
|
|
1
|
+
{"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../src/db/migrate.ts"],"names":[],"mappings":"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"}
|
package/dist/server.js
CHANGED
|
@@ -135,12 +135,34 @@ async function bootServer(options, env) {
|
|
|
135
135
|
// migrations. Without this the same throw would fire deep inside `buildContainer` only after the
|
|
136
136
|
// heavy DB boot, and a bad-config restart would needlessly hammer Postgres first.
|
|
137
137
|
loadNodeConfig(env);
|
|
138
|
-
|
|
139
|
-
|
|
138
|
+
// Optional schema overrides for a SHARED database (where `public` is unavailable, or another
|
|
139
|
+
// service already owns the default `drizzle`/`pgboss` schemas). All default to the prior
|
|
140
|
+
// behaviour, so a stock deployment is unchanged:
|
|
141
|
+
// - DB_SCHEMA — the default (`public`) app tables, relocated via the connection search_path.
|
|
142
|
+
// - DB_MIGRATIONS_SCHEMA — the drizzle migration ledger (`drizzle`), so cat-factory's ledger
|
|
143
|
+
// can't collide with another drizzle-using service's `drizzle.__drizzle_migrations`.
|
|
144
|
+
// - DB_PGBOSS_SCHEMA — pg-boss's queue schema (`pgboss`).
|
|
145
|
+
// The named app schemas (telemetry/sandbox/provisioning) are always explicitly qualified and
|
|
146
|
+
// unaffected.
|
|
147
|
+
const dbSchema = env.DB_SCHEMA;
|
|
148
|
+
const migrationsSchema = env.DB_MIGRATIONS_SCHEMA;
|
|
149
|
+
const { db, pool } = createDbClient(databaseUrl, dbSchema);
|
|
150
|
+
const boss = new PgBoss({
|
|
151
|
+
connectionString: databaseUrl,
|
|
152
|
+
// Default (`pgboss`) when unset — a single object literal (not a string|object union) so it
|
|
153
|
+
// resolves to pg-boss's options-constructor overload.
|
|
154
|
+
...(env.DB_PGBOSS_SCHEMA?.trim() ? { schema: env.DB_PGBOSS_SCHEMA.trim() } : {}),
|
|
155
|
+
});
|
|
140
156
|
// Migrations (Drizzle, app schema) and pg-boss's own schema provisioning are
|
|
141
|
-
// independent — neither reads the other's tables
|
|
142
|
-
//
|
|
143
|
-
|
|
157
|
+
// independent — neither reads the other's tables. Run the app migration FIRST and on its
|
|
158
|
+
// own: a migration failure (drift guard / a bad lineage) is then the clean, unambiguous
|
|
159
|
+
// top-level rejection the entrypoint reports, rather than racing pg-boss's own schema
|
|
160
|
+
// provisioning inside a `Promise.all` (which would half-provision pg-boss on a doomed boot
|
|
161
|
+
// and could mask the real migration error). The small overlap we give up is worth the
|
|
162
|
+
// debuggability. `migrate()` throws a MigrationFailedError / DbSchemaInconsistentError with
|
|
163
|
+
// a recovery hint when the DB is wedged.
|
|
164
|
+
await migrate(db, pool, { schema: dbSchema, migrationsSchema });
|
|
165
|
+
await boss.start();
|
|
144
166
|
// Build the repositories once and share them with both the container and the
|
|
145
167
|
// retention sweeper (so the sweeper prunes the very stores the app writes to).
|
|
146
168
|
const clock = new SystemClock();
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,17 @@
|
|
|
1
|
+
-- Heal pre-existing orphans BEFORE adding the ON DELETE RESTRICT foreign keys. On any DB old
|
|
2
|
+
-- enough to predate these FKs, a users row could be deleted while its dependents lived on, so
|
|
3
|
+
-- adding the constraint against dirty data would hard-fail with a bare `23503`. Delete the
|
|
4
|
+
-- dangling dependents (NULL the nullable accounts.owner_user_id) so the migration is
|
|
5
|
+
-- self-applying. This is the same heal ON DELETE CASCADE would have done; losing orphaned rows
|
|
6
|
+
-- is acceptable (backwards compatibility is a non-goal). The root cause — what removes a users
|
|
7
|
+
-- row while leaving dependents — is tracked separately (the account-orphaning investigation).
|
|
8
|
+
DELETE FROM "memberships" WHERE "user_id" NOT IN (SELECT "id" FROM "users");--> statement-breakpoint
|
|
9
|
+
DELETE FROM "personal_subscriptions" WHERE "user_id" NOT IN (SELECT "id" FROM "users");--> statement-breakpoint
|
|
10
|
+
DELETE FROM "subscription_activations" WHERE "user_id" NOT IN (SELECT "id" FROM "users");--> statement-breakpoint
|
|
11
|
+
DELETE FROM "user_identities" WHERE "user_id" NOT IN (SELECT "id" FROM "users");--> statement-breakpoint
|
|
12
|
+
UPDATE "accounts" SET "owner_user_id" = NULL WHERE "owner_user_id" IS NOT NULL AND "owner_user_id" NOT IN (SELECT "id" FROM "users");--> statement-breakpoint
|
|
1
13
|
ALTER TABLE "accounts" ADD CONSTRAINT "accounts_owner_user_id_users_id_fkey" FOREIGN KEY ("owner_user_id") REFERENCES "users"("id") ON DELETE RESTRICT;--> statement-breakpoint
|
|
2
14
|
ALTER TABLE "memberships" ADD CONSTRAINT "memberships_user_id_users_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE RESTRICT;--> statement-breakpoint
|
|
3
15
|
ALTER TABLE "personal_subscriptions" ADD CONSTRAINT "personal_subscriptions_user_id_users_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE RESTRICT;--> statement-breakpoint
|
|
4
16
|
ALTER TABLE "subscription_activations" ADD CONSTRAINT "subscription_activations_user_id_users_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE RESTRICT;--> statement-breakpoint
|
|
5
|
-
ALTER TABLE "user_identities" ADD CONSTRAINT "user_identities_user_id_users_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE RESTRICT;
|
|
17
|
+
ALTER TABLE "user_identities" ADD CONSTRAINT "user_identities_user_id_users_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE RESTRICT;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cat-factory/node-server",
|
|
3
|
-
"version": "0.91.
|
|
3
|
+
"version": "0.91.1",
|
|
4
4
|
"description": "Node.js runtime facade for the Agent Architecture Board: serves the shared @cat-factory/server Hono app via @hono/node-server, wiring Node implementations of the runtime ports (persistence, gateways, model provisioning).",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -32,23 +32,23 @@
|
|
|
32
32
|
"pg": "^8.22.0",
|
|
33
33
|
"pg-boss": "^12.25.1",
|
|
34
34
|
"ws": "^8.21.0",
|
|
35
|
-
"@cat-factory/agents": "0.53.0",
|
|
36
35
|
"@cat-factory/caching": "0.6.29",
|
|
36
|
+
"@cat-factory/agents": "0.53.0",
|
|
37
37
|
"@cat-factory/consensus": "0.10.29",
|
|
38
38
|
"@cat-factory/contracts": "0.125.0",
|
|
39
|
-
"@cat-factory/eks": "0.1.52",
|
|
40
39
|
"@cat-factory/gates": "0.5.14",
|
|
41
|
-
"@cat-factory/
|
|
40
|
+
"@cat-factory/eks": "0.1.52",
|
|
42
41
|
"@cat-factory/integrations": "0.81.0",
|
|
42
|
+
"@cat-factory/gitlab": "0.7.52",
|
|
43
43
|
"@cat-factory/kernel": "0.118.0",
|
|
44
44
|
"@cat-factory/observability-langfuse": "0.7.184",
|
|
45
|
-
"@cat-factory/orchestration": "0.105.0",
|
|
46
45
|
"@cat-factory/prompt-fragments": "0.13.11",
|
|
46
|
+
"@cat-factory/orchestration": "0.105.0",
|
|
47
47
|
"@cat-factory/provider-bedrock": "0.7.199",
|
|
48
48
|
"@cat-factory/provider-cloudflare": "0.7.200",
|
|
49
49
|
"@cat-factory/provider-s3": "0.2.134",
|
|
50
|
-
"@cat-factory/
|
|
51
|
-
"@cat-factory/
|
|
50
|
+
"@cat-factory/spend": "0.12.10",
|
|
51
|
+
"@cat-factory/server": "0.108.0"
|
|
52
52
|
},
|
|
53
53
|
"devDependencies": {
|
|
54
54
|
"@types/node": "^26.1.0",
|
|
@@ -71,6 +71,7 @@
|
|
|
71
71
|
"db:generate": "drizzle-kit generate",
|
|
72
72
|
"db:check": "drizzle-kit check",
|
|
73
73
|
"db:rebase-snapshot": "node scripts/rebase-migration-snapshot.mjs",
|
|
74
|
+
"db:reset": "node scripts/db-reset.mjs",
|
|
74
75
|
"test": "vitest run",
|
|
75
76
|
"test:run": "vitest run"
|
|
76
77
|
}
|