pipework 0.15.0 → 0.17.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 (97) hide show
  1. package/CHANGELOG.md +27 -1
  2. package/REFERENCE.md +191 -2
  3. package/dist/cli/commands/generate.d.ts.map +1 -1
  4. package/dist/cli/commands/generate.js +12 -10
  5. package/dist/cli/commands/generate.js.map +1 -1
  6. package/dist/core/config/base-dir.d.ts +6 -0
  7. package/dist/core/config/base-dir.d.ts.map +1 -0
  8. package/dist/core/config/base-dir.js +21 -0
  9. package/dist/core/config/base-dir.js.map +1 -0
  10. package/dist/core/config/discover.d.ts.map +1 -1
  11. package/dist/core/config/discover.js +2 -15
  12. package/dist/core/config/discover.js.map +1 -1
  13. package/dist/core/config/env-types.d.ts +70 -0
  14. package/dist/core/config/env-types.d.ts.map +1 -1
  15. package/dist/core/config/env.d.ts.map +1 -1
  16. package/dist/core/config/env.js +10 -6
  17. package/dist/core/config/env.js.map +1 -1
  18. package/dist/core/config/import-config.d.ts +3 -0
  19. package/dist/core/config/import-config.d.ts.map +1 -0
  20. package/dist/core/config/import-config.js +34 -0
  21. package/dist/core/config/import-config.js.map +1 -0
  22. package/dist/core/config/load.d.ts +7 -0
  23. package/dist/core/config/load.d.ts.map +1 -1
  24. package/dist/core/config/load.js +15 -5
  25. package/dist/core/config/load.js.map +1 -1
  26. package/dist/core/config/namespace.d.ts +1 -0
  27. package/dist/core/config/namespace.d.ts.map +1 -1
  28. package/dist/core/config/resolve.d.ts.map +1 -1
  29. package/dist/core/config/resolve.js +23 -1
  30. package/dist/core/config/resolve.js.map +1 -1
  31. package/dist/core/config/schema.d.ts +3 -0
  32. package/dist/core/config/schema.d.ts.map +1 -1
  33. package/dist/core/config/schema.js +7 -0
  34. package/dist/core/config/schema.js.map +1 -1
  35. package/dist/core/config/statement-observer.d.ts +48 -0
  36. package/dist/core/config/statement-observer.d.ts.map +1 -0
  37. package/dist/core/config/statement-observer.js +2 -0
  38. package/dist/core/config/statement-observer.js.map +1 -0
  39. package/dist/core/pipework.d.ts +19 -0
  40. package/dist/core/pipework.d.ts.map +1 -1
  41. package/dist/core/pipework.js +25 -0
  42. package/dist/core/pipework.js.map +1 -1
  43. package/dist/core/surface/types.d.ts +1 -0
  44. package/dist/core/surface/types.d.ts.map +1 -1
  45. package/dist/core/validation/queue-tables.d.ts +8 -0
  46. package/dist/core/validation/queue-tables.d.ts.map +1 -0
  47. package/dist/core/validation/queue-tables.js +53 -0
  48. package/dist/core/validation/queue-tables.js.map +1 -0
  49. package/dist/core/validation/rls-role.d.ts +16 -0
  50. package/dist/core/validation/rls-role.d.ts.map +1 -0
  51. package/dist/core/validation/rls-role.js +54 -0
  52. package/dist/core/validation/rls-role.js.map +1 -0
  53. package/dist/core/validation/startup.d.ts +2 -0
  54. package/dist/core/validation/startup.d.ts.map +1 -1
  55. package/dist/core/validation/startup.js +6 -0
  56. package/dist/core/validation/startup.js.map +1 -1
  57. package/dist/data/db/instrumentation.d.ts +17 -1
  58. package/dist/data/db/instrumentation.d.ts.map +1 -1
  59. package/dist/data/db/instrumentation.js +31 -1
  60. package/dist/data/db/instrumentation.js.map +1 -1
  61. package/dist/data/db/pool.d.ts +16 -0
  62. package/dist/data/db/pool.d.ts.map +1 -1
  63. package/dist/data/db/pool.js +18 -2
  64. package/dist/data/db/pool.js.map +1 -1
  65. package/dist/data/db/raw-client-warning.d.ts +19 -0
  66. package/dist/data/db/raw-client-warning.d.ts.map +1 -0
  67. package/dist/data/db/raw-client-warning.js +32 -0
  68. package/dist/data/db/raw-client-warning.js.map +1 -0
  69. package/dist/data/migrate/generate.d.ts +1 -1
  70. package/dist/data/migrate/generate.d.ts.map +1 -1
  71. package/dist/data/migrate/generate.js +15 -8
  72. package/dist/data/migrate/generate.js.map +1 -1
  73. package/dist/data/query/postgres-js/driver-error-boundary.d.ts +47 -0
  74. package/dist/data/query/postgres-js/driver-error-boundary.d.ts.map +1 -0
  75. package/dist/data/query/postgres-js/driver-error-boundary.js +144 -0
  76. package/dist/data/query/postgres-js/driver-error-boundary.js.map +1 -0
  77. package/dist/data/query/postgres-js/session.d.ts.map +1 -1
  78. package/dist/data/query/postgres-js/session.js +15 -12
  79. package/dist/data/query/postgres-js/session.js.map +1 -1
  80. package/dist/index.d.ts +1 -0
  81. package/dist/index.d.ts.map +1 -1
  82. package/dist/index.js.map +1 -1
  83. package/dist/lint/resolver.d.ts.map +1 -1
  84. package/dist/lint/resolver.js +2 -11
  85. package/dist/lint/resolver.js.map +1 -1
  86. package/dist/test/plugin.d.ts +2 -1
  87. package/dist/test/plugin.d.ts.map +1 -1
  88. package/dist/test/plugin.js +13 -5
  89. package/dist/test/plugin.js.map +1 -1
  90. package/dist/test/setup.d.ts.map +1 -1
  91. package/dist/test/setup.js +33 -0
  92. package/dist/test/setup.js.map +1 -1
  93. package/dist/test/vitest-workspace.d.ts.map +1 -1
  94. package/dist/test/vitest-workspace.js +2 -11
  95. package/dist/test/vitest-workspace.js.map +1 -1
  96. package/package.json +1 -1
  97. package/dist/REFERENCE.md +0 -1033
@@ -0,0 +1,53 @@
1
+ import { queueDefinitions } from '../../async/jobs/table.js';
2
+ // D2 residual risk (subseam audit 2026-07-16): a queue whose module is in no
3
+ // schema glob and no import chain reaches the registry at runtime (createQueue
4
+ // runs when the worker imports it) but never reached a migration — so the
5
+ // first enqueue in production failed on a missing relation. This check makes
6
+ // that state loud at startup and at test bootstrap instead.
7
+ export function queueTableMessage(table, database) {
8
+ return (`queue table "${table}" is registered (createQueue) but does not exist in database "${database}". ` +
9
+ `The module calling createQueue({ table: '${table}' }) must be reachable from the database's ` +
10
+ `schema glob (or imported by a schema file) so \`pipework generate\` emits its migration. ` +
11
+ `Add it to the schema patterns, run \`pipework generate\`, then \`pipework migrate\`.`);
12
+ }
13
+ /** Registered queue tables absent from the database at `url`. Opens a short-lived probe connection, mirroring validateConnectivity. */
14
+ export async function missingQueueTables(url, timeoutMs = 5000) {
15
+ const tables = [...queueDefinitions().keys()];
16
+ if (tables.length === 0)
17
+ return [];
18
+ const { default: postgres } = await import('postgres');
19
+ const sql = postgres(url, {
20
+ max: 1,
21
+ idle_timeout: 1,
22
+ connect_timeout: Math.ceil(timeoutMs / 1000),
23
+ onnotice: () => { },
24
+ });
25
+ try {
26
+ const missing = [];
27
+ for (const table of tables) {
28
+ const rows = await sql `SELECT to_regclass(${'public.' + table}) IS NOT NULL AS present`;
29
+ if (rows[0]?.['present'] !== true)
30
+ missing.push(table);
31
+ }
32
+ return missing;
33
+ }
34
+ finally {
35
+ await sql.end({ timeout: 1 });
36
+ }
37
+ }
38
+ /** Startup-validation leg: every registered queue's table must exist in the default database (where queue migrations are emitted). */
39
+ export async function validateQueueTables(defaultDb, timeoutMs = 5000) {
40
+ try {
41
+ const missing = await missingQueueTables(defaultDb.url, timeoutMs);
42
+ return missing.map(table => ({
43
+ phase: 'database',
44
+ message: queueTableMessage(table, defaultDb.name),
45
+ }));
46
+ }
47
+ catch {
48
+ // An unreachable database is validateConnectivity's finding — reporting it
49
+ // here too would double up the same root cause.
50
+ return [];
51
+ }
52
+ }
53
+ //# sourceMappingURL=queue-tables.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queue-tables.js","sourceRoot":"","sources":["../../../src/core/validation/queue-tables.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAA;AAE5D,6EAA6E;AAC7E,+EAA+E;AAC/E,0EAA0E;AAC1E,6EAA6E;AAC7E,4DAA4D;AAE5D,MAAM,UAAU,iBAAiB,CAAC,KAAa,EAAE,QAAgB;IAC/D,OAAO,CACL,gBAAgB,KAAK,iEAAiE,QAAQ,KAAK;QACnG,4CAA4C,KAAK,6CAA6C;QAC9F,2FAA2F;QAC3F,sFAAsF,CACvF,CAAA;AACH,CAAC;AAED,uIAAuI;AACvI,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,GAAW,EAAE,SAAS,GAAG,IAAI;IACpE,MAAM,MAAM,GAAG,CAAC,GAAG,gBAAgB,EAAE,CAAC,IAAI,EAAE,CAAC,CAAA;IAC7C,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAA;IAElC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,CAAA;IACtD,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,EAAE;QACxB,GAAG,EAAE,CAAC;QACN,YAAY,EAAE,CAAC;QACf,eAAe,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QAC5C,QAAQ,EAAE,GAAG,EAAE,GAAE,CAAC;KACnB,CAAC,CAAA;IAEF,IAAI,CAAC;QACH,MAAM,OAAO,GAAa,EAAE,CAAA;QAC5B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,MAAM,IAAI,GAAG,MAAM,GAAG,CAAA,sBAAsB,SAAS,GAAG,KAAK,0BAA0B,CAAA;YACvF,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,KAAK,IAAI;gBAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACxD,CAAC;QACD,OAAO,OAAO,CAAA;IAChB,CAAC;YAAS,CAAC;QACT,MAAM,GAAG,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAA;IAC/B,CAAC;AACH,CAAC;AAED,sIAAsI;AACtI,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,SAA2B,EAC3B,SAAS,GAAG,IAAI;IAEhB,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,kBAAkB,CAAC,SAAS,CAAC,GAAG,EAAE,SAAS,CAAC,CAAA;QAClE,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC3B,KAAK,EAAE,UAAmB;YAC1B,OAAO,EAAE,iBAAiB,CAAC,KAAK,EAAE,SAAS,CAAC,IAAI,CAAC;SAClD,CAAC,CAAC,CAAA;IACL,CAAC;IAAC,MAAM,CAAC;QACP,2EAA2E;QAC3E,gDAAgD;QAChD,OAAO,EAAE,CAAA;IACX,CAAC;AACH,CAAC"}
@@ -0,0 +1,16 @@
1
+ import type { ValidationIssue } from './types.js';
2
+ import type { ResolvedDatabase } from '../config/load.js';
3
+ import type { IsolationStrategy } from '../config/schema.js';
4
+ export interface RlsRoleProbe {
5
+ readonly role: string;
6
+ readonly superuser: boolean;
7
+ readonly bypassRls: boolean;
8
+ }
9
+ export declare function rlsRoleMessage(database: string, probe: RlsRoleProbe): string;
10
+ /** The connection whose role actually executes queries under the harness: transaction isolation collapses every role onto the resolved `url` connection; database/container isolation resolves roles normally (`appUrl ?? url`). */
11
+ export declare function rlsProbeTarget(db: ResolvedDatabase, strategy: IsolationStrategy): string;
12
+ /** Role flags for `current_user` at `url`. Short-lived probe connection, mirroring validateConnectivity. */
13
+ export declare function probeRlsRole(url: string, timeoutMs?: number): Promise<RlsRoleProbe>;
14
+ /** Startup-validation leg: for each database with `rls` configured, the runtime connection's role (`appUrl ?? url`) must not bypass RLS. */
15
+ export declare function validateRlsRoles(databases: ReadonlyMap<string, ResolvedDatabase>, timeoutMs?: number): Promise<ValidationIssue[]>;
16
+ //# sourceMappingURL=rls-role.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rls-role.d.ts","sourceRoot":"","sources":["../../../src/core/validation/rls-role.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AACjD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AACzD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAO5D,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAA;IAC3B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAA;CAC5B;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,MAAM,CAQ5E;AAED,oOAAoO;AACpO,wBAAgB,cAAc,CAAC,EAAE,EAAE,gBAAgB,EAAE,QAAQ,EAAE,iBAAiB,GAAG,MAAM,CAExF;AAED,4GAA4G;AAC5G,wBAAsB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,SAAO,GAAG,OAAO,CAAC,YAAY,CAAC,CAmBvF;AAED,4IAA4I;AAC5I,wBAAsB,gBAAgB,CACpC,SAAS,EAAE,WAAW,CAAC,MAAM,EAAE,gBAAgB,CAAC,EAChD,SAAS,SAAO,GACf,OAAO,CAAC,eAAe,EAAE,CAAC,CAoB5B"}
@@ -0,0 +1,54 @@
1
+ export function rlsRoleMessage(database, probe) {
2
+ const flag = probe.superuser ? 'SUPERUSER' : 'BYPASSRLS';
3
+ return (`database "${database}" has rls configured, but its runtime role "${probe.role}" is ${flag} — ` +
4
+ `row-level security policies never apply to it, so tenant isolation is inert. ` +
5
+ `Provision a non-BYPASSRLS, non-superuser application role and point the runtime connection at it ` +
6
+ `(appUrl/appTestUrl, or the url/testUrl var this connection resolved from).`);
7
+ }
8
+ /** The connection whose role actually executes queries under the harness: transaction isolation collapses every role onto the resolved `url` connection; database/container isolation resolves roles normally (`appUrl ?? url`). */
9
+ export function rlsProbeTarget(db, strategy) {
10
+ return strategy === 'transaction' ? db.url : (db.appUrl ?? db.url);
11
+ }
12
+ /** Role flags for `current_user` at `url`. Short-lived probe connection, mirroring validateConnectivity. */
13
+ export async function probeRlsRole(url, timeoutMs = 5000) {
14
+ const { default: postgres } = await import('postgres');
15
+ const sql = postgres(url, {
16
+ max: 1,
17
+ idle_timeout: 1,
18
+ connect_timeout: Math.ceil(timeoutMs / 1000),
19
+ onnotice: () => { },
20
+ });
21
+ try {
22
+ const rows = await sql `SELECT current_user AS role, rolsuper, rolbypassrls FROM pg_roles WHERE rolname = current_user`;
23
+ const row = rows[0];
24
+ if (row === undefined) {
25
+ throw new Error('current_user not found in pg_roles');
26
+ }
27
+ return { role: row.role, superuser: row.rolsuper, bypassRls: row.rolbypassrls };
28
+ }
29
+ finally {
30
+ await sql.end({ timeout: 1 });
31
+ }
32
+ }
33
+ /** Startup-validation leg: for each database with `rls` configured, the runtime connection's role (`appUrl ?? url`) must not bypass RLS. */
34
+ export async function validateRlsRoles(databases, timeoutMs = 5000) {
35
+ const issues = [];
36
+ const checks = [...databases.entries()]
37
+ .filter(([, db]) => db.rls !== undefined)
38
+ .map(async ([name, db]) => {
39
+ let probe;
40
+ try {
41
+ probe = await probeRlsRole(db.appUrl ?? db.url, timeoutMs);
42
+ }
43
+ catch {
44
+ // An unreachable database is validateConnectivity's finding.
45
+ return;
46
+ }
47
+ if (probe.superuser || probe.bypassRls) {
48
+ issues.push({ phase: 'database', message: rlsRoleMessage(name, probe) });
49
+ }
50
+ });
51
+ await Promise.all(checks);
52
+ return issues;
53
+ }
54
+ //# sourceMappingURL=rls-role.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rls-role.js","sourceRoot":"","sources":["../../../src/core/validation/rls-role.ts"],"names":[],"mappings":"AAeA,MAAM,UAAU,cAAc,CAAC,QAAgB,EAAE,KAAmB;IAClE,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,CAAA;IACxD,OAAO,CACL,aAAa,QAAQ,+CAA+C,KAAK,CAAC,IAAI,QAAQ,IAAI,KAAK;QAC/F,+EAA+E;QAC/E,mGAAmG;QACnG,4EAA4E,CAC7E,CAAA;AACH,CAAC;AAED,oOAAoO;AACpO,MAAM,UAAU,cAAc,CAAC,EAAoB,EAAE,QAA2B;IAC9E,OAAO,QAAQ,KAAK,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,GAAG,CAAC,CAAA;AACpE,CAAC;AAED,4GAA4G;AAC5G,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,GAAW,EAAE,SAAS,GAAG,IAAI;IAC9D,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,CAAA;IACtD,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,EAAE;QACxB,GAAG,EAAE,CAAC;QACN,YAAY,EAAE,CAAC;QACf,eAAe,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QAC5C,QAAQ,EAAE,GAAG,EAAE,GAAE,CAAC;KACnB,CAAC,CAAA;IAEF,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,GAAG,CAAA,gGAAgG,CAAA;QACtH,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAA2E,CAAA;QAC7F,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAA;QACvD,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,CAAC,QAAQ,EAAE,SAAS,EAAE,GAAG,CAAC,YAAY,EAAE,CAAA;IACjF,CAAC;YAAS,CAAC;QACT,MAAM,GAAG,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAA;IAC/B,CAAC;AACH,CAAC;AAED,4IAA4I;AAC5I,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,SAAgD,EAChD,SAAS,GAAG,IAAI;IAEhB,MAAM,MAAM,GAAsB,EAAE,CAAA;IAEpC,MAAM,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC;SACpC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,KAAK,SAAS,CAAC;SACxC,GAAG,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE;QACxB,IAAI,KAAmB,CAAA;QACvB,IAAI,CAAC;YACH,KAAK,GAAG,MAAM,YAAY,CAAC,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,GAAG,EAAE,SAAS,CAAC,CAAA;QAC5D,CAAC;QAAC,MAAM,CAAC;YACP,6DAA6D;YAC7D,OAAM;QACR,CAAC;QACD,IAAI,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;YACvC,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,cAAc,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,CAAA;QAC1E,CAAC;IACH,CAAC,CAAC,CAAA;IAEJ,MAAM,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;IACzB,OAAO,MAAM,CAAA;AACf,CAAC"}
@@ -6,6 +6,8 @@ export interface ValidationContext {
6
6
  readonly surfaces?: SurfaceMap | undefined;
7
7
  readonly defaultDbAvailable?: boolean | undefined;
8
8
  readonly databases?: ReadonlyMap<string, ResolvedDatabase> | undefined;
9
+ /** The database queue migrations are emitted into — queue-table existence is checked there. Undefined skips the check (genuinely ambiguous multi-DB configs fail earlier, at generate). */
10
+ readonly defaultDatabase?: ResolvedDatabase | undefined;
9
11
  readonly connectivityCheck?: boolean | undefined;
10
12
  }
11
13
  export declare function validateStartup(ctx: ValidationContext): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"startup.d.ts","sourceRoot":"","sources":["../../../src/core/validation/startup.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AACrD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAEzD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,mBAAmB,EAAE,SAAS,MAAM,EAAE,CAAA;IAC/C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,QAAQ,CAAC,EAAE,UAAU,GAAG,SAAS,CAAA;IAC1C,QAAQ,CAAC,kBAAkB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;IACjD,QAAQ,CAAC,SAAS,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,gBAAgB,CAAC,GAAG,SAAS,CAAA;IACtE,QAAQ,CAAC,iBAAiB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;CACjD;AAED,wBAAsB,eAAe,CAAC,GAAG,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAsB3E"}
1
+ {"version":3,"file":"startup.d.ts","sourceRoot":"","sources":["../../../src/core/validation/startup.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AACrD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAEzD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,mBAAmB,EAAE,SAAS,MAAM,EAAE,CAAA;IAC/C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,QAAQ,CAAC,EAAE,UAAU,GAAG,SAAS,CAAA;IAC1C,QAAQ,CAAC,kBAAkB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;IACjD,QAAQ,CAAC,SAAS,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,gBAAgB,CAAC,GAAG,SAAS,CAAA;IACtE,2LAA2L;IAC3L,QAAQ,CAAC,eAAe,CAAC,EAAE,gBAAgB,GAAG,SAAS,CAAA;IACvD,QAAQ,CAAC,iBAAiB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;CACjD;AAED,wBAAsB,eAAe,CAAC,GAAG,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CA2B3E"}
@@ -2,6 +2,8 @@ import { StartupValidationError } from './types.js';
2
2
  import { validateDomainIntegrity } from './domain.js';
3
3
  import { collectSurfaceIssues } from './surfaces.js';
4
4
  import { validateConnectivity } from './connectivity.js';
5
+ import { validateQueueTables } from './queue-tables.js';
6
+ import { validateRlsRoles } from './rls-role.js';
5
7
  import { definitions } from '../../data/domain/define.js';
6
8
  export async function validateStartup(ctx) {
7
9
  const issues = [];
@@ -11,6 +13,10 @@ export async function validateStartup(ctx) {
11
13
  }
12
14
  if (ctx.connectivityCheck !== false && ctx.databases !== undefined) {
13
15
  issues.push(...await validateConnectivity(ctx.databases));
16
+ issues.push(...await validateRlsRoles(ctx.databases));
17
+ }
18
+ if (ctx.connectivityCheck !== false && ctx.defaultDatabase !== undefined) {
19
+ issues.push(...await validateQueueTables(ctx.defaultDatabase));
14
20
  }
15
21
  if (issues.length > 0) {
16
22
  throw new StartupValidationError(issues);
@@ -1 +1 @@
1
- {"version":3,"file":"startup.js","sourceRoot":"","sources":["../../../src/core/validation/startup.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAA;AACnD,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAA;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAA;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAA;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;AAazD,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,GAAsB;IAC1D,MAAM,MAAM,GAAsB,EAAE,CAAA;IAEpC,MAAM,CAAC,IAAI,CAAC,GAAG,uBAAuB,CAAC,WAAW,EAAE,EAAE,GAAG,CAAC,mBAAmB,CAAC,CAAC,CAAA;IAE/E,IAAI,GAAG,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC/B,MAAM,CAAC,IAAI,CACT,GAAG,oBAAoB,CACrB,GAAG,CAAC,QAAQ,EACZ,GAAG,CAAC,mBAAmB,EACvB,GAAG,CAAC,kBAAkB,IAAI,GAAG,CAAC,mBAAmB,CAAC,MAAM,KAAK,CAAC,CAC/D,CACF,CAAA;IACH,CAAC;IAED,IAAI,GAAG,CAAC,iBAAiB,KAAK,KAAK,IAAI,GAAG,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QACnE,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,oBAAoB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAA;IAC3D,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,sBAAsB,CAAC,MAAM,CAAC,CAAA;IAC1C,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"startup.js","sourceRoot":"","sources":["../../../src/core/validation/startup.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAA;AACnD,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAA;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAA;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAA;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;AAezD,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,GAAsB;IAC1D,MAAM,MAAM,GAAsB,EAAE,CAAA;IAEpC,MAAM,CAAC,IAAI,CAAC,GAAG,uBAAuB,CAAC,WAAW,EAAE,EAAE,GAAG,CAAC,mBAAmB,CAAC,CAAC,CAAA;IAE/E,IAAI,GAAG,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC/B,MAAM,CAAC,IAAI,CACT,GAAG,oBAAoB,CACrB,GAAG,CAAC,QAAQ,EACZ,GAAG,CAAC,mBAAmB,EACvB,GAAG,CAAC,kBAAkB,IAAI,GAAG,CAAC,mBAAmB,CAAC,MAAM,KAAK,CAAC,CAC/D,CACF,CAAA;IACH,CAAC;IAED,IAAI,GAAG,CAAC,iBAAiB,KAAK,KAAK,IAAI,GAAG,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QACnE,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,oBAAoB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAA;QACzD,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAA;IACvD,CAAC;IAED,IAAI,GAAG,CAAC,iBAAiB,KAAK,KAAK,IAAI,GAAG,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;QACzE,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,mBAAmB,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAA;IAChE,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,sBAAsB,CAAC,MAAM,CAAC,CAAA;IAC1C,CAAC;AACH,CAAC"}
@@ -1,5 +1,21 @@
1
1
  import type { ResolvedObservability } from '../../core/config/load.js';
2
- export declare function createDebugFn(config: ResolvedObservability): ((connection: number, query: string) => void) | undefined;
2
+ /** postgres.js's `debug` hook signature. */
3
+ type DebugFn = (connection: number, query: string, parameters: unknown[]) => void;
4
+ /**
5
+ * True when the driver's `debug` hook exists ONLY to feed a statement observer.
6
+ * Such a connection's errors are put back to their unobserved shape by the
7
+ * driver error boundary; `logAllQueries` connections are left exactly as they
8
+ * are today, that mode having already opted into verbose errors.
9
+ */
10
+ export declare function isObserverOnly(config: ResolvedObservability): boolean;
11
+ /**
12
+ * The driver's `debug` hook for a connection, or undefined when nothing is
13
+ * observing. Query logging and the caller-supplied `onStatement` observer are
14
+ * independent: either alone installs the hook, and with both configured both
15
+ * fire for every statement.
16
+ */
17
+ export declare function createDebugFn(config: ResolvedObservability): DebugFn | undefined;
3
18
  export declare function isDeadlock(err: unknown): boolean;
4
19
  export declare function logDeadlock(err: unknown, dbName: string): void;
20
+ export {};
5
21
  //# sourceMappingURL=instrumentation.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"instrumentation.d.ts","sourceRoot":"","sources":["../../../src/data/db/instrumentation.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAA;AAKtE,wBAAgB,aAAa,CAAC,MAAM,EAAE,qBAAqB,GAAG,CAAC,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAkBtH;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAGhD;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAc9D"}
1
+ {"version":3,"file":"instrumentation.d.ts","sourceRoot":"","sources":["../../../src/data/db/instrumentation.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAA;AAKtE,4CAA4C;AAC5C,KAAK,OAAO,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,IAAI,CAAA;AAEjF;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAErE;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,GAAG,SAAS,CAgBhF;AAoBD,wBAAgB,UAAU,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAGhD;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAc9D"}
@@ -2,9 +2,39 @@ import { getBaseLogger } from '../../core/logging/logger.js';
2
2
  import { getContext } from '../../request/context/store.js';
3
3
  const DEADLOCK_CODE = '40P01';
4
4
  const QUERY_TRUNCATE_LENGTH = 500;
5
+ /**
6
+ * True when the driver's `debug` hook exists ONLY to feed a statement observer.
7
+ * Such a connection's errors are put back to their unobserved shape by the
8
+ * driver error boundary; `logAllQueries` connections are left exactly as they
9
+ * are today, that mode having already opted into verbose errors.
10
+ */
11
+ export function isObserverOnly(config) {
12
+ return config.onStatement !== undefined && !config.logAllQueries;
13
+ }
14
+ /**
15
+ * The driver's `debug` hook for a connection, or undefined when nothing is
16
+ * observing. Query logging and the caller-supplied `onStatement` observer are
17
+ * independent: either alone installs the hook, and with both configured both
18
+ * fire for every statement.
19
+ */
5
20
  export function createDebugFn(config) {
6
- if (!config.logAllQueries)
21
+ const logQuery = config.logAllQueries ? createQueryLogFn() : undefined;
22
+ const observer = config.onStatement;
23
+ if (!logQuery && !observer)
7
24
  return undefined;
25
+ if (!observer)
26
+ return logQuery;
27
+ if (!logQuery) {
28
+ return (connection, query, parameters) => {
29
+ observer({ connectionId: connection, query, parameters });
30
+ };
31
+ }
32
+ return (connection, query, parameters) => {
33
+ logQuery(connection, query, parameters);
34
+ observer({ connectionId: connection, query, parameters });
35
+ };
36
+ }
37
+ function createQueryLogFn() {
8
38
  return (connection, query) => {
9
39
  const logger = getBaseLogger();
10
40
  const ctx = getContext();
@@ -1 +1 @@
1
- {"version":3,"file":"instrumentation.js","sourceRoot":"","sources":["../../../src/data/db/instrumentation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAA;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAA;AAG3D,MAAM,aAAa,GAAG,OAAO,CAAA;AAC7B,MAAM,qBAAqB,GAAG,GAAG,CAAA;AAEjC,MAAM,UAAU,aAAa,CAAC,MAA6B;IACzD,IAAI,CAAC,MAAM,CAAC,aAAa;QAAE,OAAO,SAAS,CAAA;IAE3C,OAAO,CAAC,UAAkB,EAAE,KAAa,EAAE,EAAE;QAC3C,MAAM,MAAM,GAAG,aAAa,EAAE,CAAA;QAC9B,MAAM,GAAG,GAAG,UAAU,EAAE,CAAA;QACxB,MAAM,MAAM,GAA4B;YACtC,KAAK,EAAE,KAAK,CAAC,MAAM,GAAG,qBAAqB,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,qBAAqB,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK;YACnG,UAAU;SACX,CAAA;QAED,IAAI,GAAG,EAAE,CAAC;YACR,IAAI,GAAG,CAAC,MAAM,KAAK,IAAI;gBAAE,MAAM,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC,MAAM,CAAA;YACtD,IAAI,GAAG,CAAC,SAAS,KAAK,EAAE;gBAAE,MAAM,CAAC,WAAW,CAAC,GAAG,GAAG,CAAC,SAAS,CAAA;QAC/D,CAAC;QAED,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;IACvC,CAAC,CAAA;AACH,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,GAAY;IACrC,IAAI,CAAC,CAAC,GAAG,YAAY,KAAK,CAAC;QAAE,OAAO,KAAK,CAAA;IACzC,OAAO,MAAM,IAAI,GAAG,IAAK,GAAyB,CAAC,IAAI,KAAK,aAAa,CAAA;AAC3E,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,GAAY,EAAE,MAAc;IACtD,MAAM,MAAM,GAAG,aAAa,EAAE,CAAA;IAC9B,MAAM,GAAG,GAAG,UAAU,EAAE,CAAA;IACxB,MAAM,MAAM,GAA4B;QACtC,GAAG;QACH,QAAQ,EAAE,MAAM;KACjB,CAAA;IAED,IAAI,GAAG,EAAE,CAAC;QACR,IAAI,GAAG,CAAC,MAAM,KAAK,IAAI;YAAE,MAAM,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC,MAAM,CAAA;QACtD,IAAI,GAAG,CAAC,SAAS,KAAK,EAAE;YAAE,MAAM,CAAC,WAAW,CAAC,GAAG,GAAG,CAAC,SAAS,CAAA;IAC/D,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAA;AAC3C,CAAC"}
1
+ {"version":3,"file":"instrumentation.js","sourceRoot":"","sources":["../../../src/data/db/instrumentation.ts"],"names":[],"mappings":"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"}
@@ -4,16 +4,32 @@ import type { ResolvedDatabase } from '../../core/config/load.js';
4
4
  import type { ResolvedObservability } from '../../core/config/load.js';
5
5
  /** Which database role a pooled connection authenticates as. `owner` runs migrations/bootstrap and owns tables (bypasses RLS); `app` is the non-owner, non-BYPASSRLS runtime role that RLS policies enforce against. */
6
6
  export type ConnectionRole = 'owner' | 'app';
7
+ /** A standalone pooled connection: the raw postgres.js client, its drizzle handle, and a `close()` that ends the pool. */
7
8
  export interface ManagedConnection {
8
9
  readonly name: string;
10
+ /**
11
+ * The raw postgres.js client — deliberately unmediated. With
12
+ * `observability.onStatement` configured, queries issued through it fall
13
+ * outside pipework's driver error boundary, so their errors serialize bind
14
+ * parameters; `connection.drizzle` does not. Reading this on an observed
15
+ * connection logs a warning once per database.
16
+ */
9
17
  readonly client: postgres.Sql;
10
18
  readonly drizzle: PostgresJsDatabase;
11
19
  close(): Promise<void>;
12
20
  }
21
+ /** Options for `tap()` — pool size (default 1) and idle timeout in seconds. */
13
22
  export interface ConnectOptions {
14
23
  readonly max?: number;
15
24
  readonly idleTimeout?: number;
16
25
  }
26
+ /**
27
+ * Opens a standalone managed connection outside the manifold's pools — the
28
+ * sanctioned door for contexts where `pipe()` structurally cannot resolve:
29
+ * `worker_threads`, detached monitors, one-off scripts. Callers own the
30
+ * lifecycle: always `await conn.close()`.
31
+ */
17
32
  export declare function tap(url: string, options?: ConnectOptions): ManagedConnection;
33
+ /** Builds the pooled connection for one resolved database — used by the manifold's pool manager; consumers outside a managed context use `tap()` or `pool.getOrCreate()`. */
18
34
  export declare function createManagedConnection(config: ResolvedDatabase, onClose: () => void, observability?: ResolvedObservability): ManagedConnection;
19
35
  //# sourceMappingURL=pool.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"pool.d.ts","sourceRoot":"","sources":["../../../src/data/db/pool.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAA;AAC/B,OAAO,EAAW,KAAK,kBAAkB,EAAE,MAAM,+BAA+B,CAAA;AAChF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAA;AACjE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAA;AAGtE,wNAAwN;AACxN,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,KAAK,CAAA;AAE5C,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAA;IAC7B,QAAQ,CAAC,OAAO,EAAE,kBAAkB,CAAA;IACpC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CACvB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAC9B;AAED,wBAAgB,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,iBAAiB,CAiB5E;AAED,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,gBAAgB,EACxB,OAAO,EAAE,MAAM,IAAI,EACnB,aAAa,CAAC,EAAE,qBAAqB,GACpC,iBAAiB,CAoBnB"}
1
+ {"version":3,"file":"pool.d.ts","sourceRoot":"","sources":["../../../src/data/db/pool.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAA;AAC/B,OAAO,EAAW,KAAK,kBAAkB,EAAE,MAAM,+BAA+B,CAAA;AAChF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAA;AACjE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAA;AAKtE,wNAAwN;AACxN,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,KAAK,CAAA;AAE5C,0HAA0H;AAC1H,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB;;;;;;OAMG;IACH,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAA;IAC7B,QAAQ,CAAC,OAAO,EAAE,kBAAkB,CAAA;IACpC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CACvB;AAED,+EAA+E;AAC/E,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAC9B;AAED;;;;;GAKG;AACH,wBAAgB,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,iBAAiB,CAiB5E;AAED,6KAA6K;AAC7K,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,gBAAgB,EACxB,OAAO,EAAE,MAAM,IAAI,EACnB,aAAa,CAAC,EAAE,qBAAqB,GACpC,iBAAiB,CA0BnB"}
@@ -1,6 +1,14 @@
1
1
  import postgres from 'postgres';
2
2
  import { drizzle } from '../query/postgres-js/index.js';
3
- import { createDebugFn } from './instrumentation.js';
3
+ import { createDebugFn, isObserverOnly } from './instrumentation.js';
4
+ import { markObservedConnection } from '../query/postgres-js/driver-error-boundary.js';
5
+ import { warnRawClientIsUnsanitized } from './raw-client-warning.js';
6
+ /**
7
+ * Opens a standalone managed connection outside the manifold's pools — the
8
+ * sanctioned door for contexts where `pipe()` structurally cannot resolve:
9
+ * `worker_threads`, detached monitors, one-off scripts. Callers own the
10
+ * lifecycle: always `await conn.close()`.
11
+ */
4
12
  export function tap(url, options) {
5
13
  const client = postgres(url, {
6
14
  max: options?.max ?? 1,
@@ -17,6 +25,7 @@ export function tap(url, options) {
17
25
  },
18
26
  };
19
27
  }
28
+ /** Builds the pooled connection for one resolved database — used by the manifold's pool manager; consumers outside a managed context use `tap()` or `pool.getOrCreate()`. */
20
29
  export function createManagedConnection(config, onClose, observability) {
21
30
  const debug = observability ? createDebugFn(observability) : undefined;
22
31
  const client = postgres(config.url, {
@@ -25,10 +34,17 @@ export function createManagedConnection(config, onClose, observability) {
25
34
  onnotice: () => { },
26
35
  ...(debug ? { debug } : {}),
27
36
  });
37
+ const observerOnly = observability !== undefined && isObserverOnly(observability);
38
+ if (observerOnly)
39
+ markObservedConnection(client);
28
40
  const db = drizzle(client);
29
41
  return {
30
42
  name: config.name,
31
- client,
43
+ get client() {
44
+ if (observerOnly)
45
+ warnRawClientIsUnsanitized(config.name);
46
+ return client;
47
+ },
32
48
  drizzle: db,
33
49
  async close() {
34
50
  onClose();
@@ -1 +1 @@
1
- {"version":3,"file":"pool.js","sourceRoot":"","sources":["../../../src/data/db/pool.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAA;AAC/B,OAAO,EAAE,OAAO,EAA2B,MAAM,+BAA+B,CAAA;AAGhF,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AAiBpD,MAAM,UAAU,GAAG,CAAC,GAAW,EAAE,OAAwB;IACvD,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,EAAE;QAC3B,GAAG,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;QACtB,QAAQ,EAAE,GAAG,EAAE,GAAE,CAAC;QAClB,GAAG,CAAC,OAAO,EAAE,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACrF,CAAC,CAAA;IAEF,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IAE1B,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,MAAM;QACN,OAAO,EAAE,EAAE;QACX,KAAK,CAAC,KAAK;YACT,MAAM,MAAM,CAAC,GAAG,EAAE,CAAA;QACpB,CAAC;KACF,CAAA;AACH,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,MAAwB,EACxB,OAAmB,EACnB,aAAqC;IAErC,MAAM,KAAK,GAAG,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IACtE,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE;QAClC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG;QACpB,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW;QACrC,QAAQ,EAAE,GAAG,EAAE,GAAE,CAAC;QAClB,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC5B,CAAC,CAAA;IAEF,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IAE1B,OAAO;QACL,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,MAAM;QACN,OAAO,EAAE,EAAE;QACX,KAAK,CAAC,KAAK;YACT,OAAO,EAAE,CAAA;YACT,MAAM,MAAM,CAAC,GAAG,EAAE,CAAA;QACpB,CAAC;KACF,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"pool.js","sourceRoot":"","sources":["../../../src/data/db/pool.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAA;AAC/B,OAAO,EAAE,OAAO,EAA2B,MAAM,+BAA+B,CAAA;AAGhF,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACpE,OAAO,EAAE,sBAAsB,EAAE,MAAM,+CAA+C,CAAA;AACtF,OAAO,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAA;AA0BpE;;;;;GAKG;AACH,MAAM,UAAU,GAAG,CAAC,GAAW,EAAE,OAAwB;IACvD,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,EAAE;QAC3B,GAAG,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;QACtB,QAAQ,EAAE,GAAG,EAAE,GAAE,CAAC;QAClB,GAAG,CAAC,OAAO,EAAE,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACrF,CAAC,CAAA;IAEF,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IAE1B,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,MAAM;QACN,OAAO,EAAE,EAAE;QACX,KAAK,CAAC,KAAK;YACT,MAAM,MAAM,CAAC,GAAG,EAAE,CAAA;QACpB,CAAC;KACF,CAAA;AACH,CAAC;AAED,6KAA6K;AAC7K,MAAM,UAAU,uBAAuB,CACrC,MAAwB,EACxB,OAAmB,EACnB,aAAqC;IAErC,MAAM,KAAK,GAAG,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IACtE,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE;QAClC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG;QACpB,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW;QACrC,QAAQ,EAAE,GAAG,EAAE,GAAE,CAAC;QAClB,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC5B,CAAC,CAAA;IAEF,MAAM,YAAY,GAAG,aAAa,KAAK,SAAS,IAAI,cAAc,CAAC,aAAa,CAAC,CAAA;IACjF,IAAI,YAAY;QAAE,sBAAsB,CAAC,MAAM,CAAC,CAAA;IAEhD,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IAE1B,OAAO;QACL,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,IAAI,MAAM;YACR,IAAI,YAAY;gBAAE,0BAA0B,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;YACzD,OAAO,MAAM,CAAA;QACf,CAAC;QACD,OAAO,EAAE,EAAE;QACX,KAAK,CAAC,KAAK;YACT,OAAO,EAAE,CAAA;YACT,MAAM,MAAM,CAAC,GAAG,EAAE,CAAA;QACpB,CAAC;KACF,CAAA;AACH,CAAC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Announces the one place a statement observer does not carry its
3
+ * error-sanitization guarantee.
4
+ *
5
+ * `ManagedConnection.client` is the sanctioned raw-driver door, and it stays
6
+ * raw on purpose — queries issued through it bypass the driver error boundary,
7
+ * so on an observed connection their errors serialize the bind parameters
8
+ * postgres.js attached. Everything reached through `.drizzle` (which is every
9
+ * `pipe()` call, every `pipe.*` write, every transaction and savepoint) is
10
+ * inside the boundary and unaffected.
11
+ *
12
+ * Warns once per database name: this is a design fact about the code holding
13
+ * the connection, not a per-query event, and repeating it would train people to
14
+ * filter it out.
15
+ */
16
+ export declare function warnRawClientIsUnsanitized(database: string): void;
17
+ /** Test seam: forget which databases have already warned. */
18
+ export declare function _resetRawClientWarnings(): void;
19
+ //# sourceMappingURL=raw-client-warning.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"raw-client-warning.d.ts","sourceRoot":"","sources":["../../../src/data/db/raw-client-warning.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAYjE;AAED,6DAA6D;AAC7D,wBAAgB,uBAAuB,IAAI,IAAI,CAE9C"}
@@ -0,0 +1,32 @@
1
+ import { getBaseLogger } from '../../core/logging/logger.js';
2
+ const warned = new Set();
3
+ /**
4
+ * Announces the one place a statement observer does not carry its
5
+ * error-sanitization guarantee.
6
+ *
7
+ * `ManagedConnection.client` is the sanctioned raw-driver door, and it stays
8
+ * raw on purpose — queries issued through it bypass the driver error boundary,
9
+ * so on an observed connection their errors serialize the bind parameters
10
+ * postgres.js attached. Everything reached through `.drizzle` (which is every
11
+ * `pipe()` call, every `pipe.*` write, every transaction and savepoint) is
12
+ * inside the boundary and unaffected.
13
+ *
14
+ * Warns once per database name: this is a design fact about the code holding
15
+ * the connection, not a per-query event, and repeating it would train people to
16
+ * filter it out.
17
+ */
18
+ export function warnRawClientIsUnsanitized(database) {
19
+ if (warned.has(database))
20
+ return;
21
+ warned.add(database);
22
+ getBaseLogger().warn({ database }, '[pipework] raw .client read on a connection with observability.onStatement configured. ' +
23
+ 'Queries issued through .client bypass pipework\'s driver error boundary, so their errors ' +
24
+ 'serialize bind parameters (postgres.js marks query/parameters/args enumerable whenever its ' +
25
+ 'debug hook is installed). Use connection.drizzle — or pipe() inside a managed context — to ' +
26
+ 'stay inside the boundary. This warning is logged once per database.');
27
+ }
28
+ /** Test seam: forget which databases have already warned. */
29
+ export function _resetRawClientWarnings() {
30
+ warned.clear();
31
+ }
32
+ //# sourceMappingURL=raw-client-warning.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"raw-client-warning.js","sourceRoot":"","sources":["../../../src/data/db/raw-client-warning.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAA;AAE5D,MAAM,MAAM,GAAG,IAAI,GAAG,EAAU,CAAA;AAEhC;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,0BAA0B,CAAC,QAAgB;IACzD,IAAI,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAAE,OAAM;IAChC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;IAEpB,aAAa,EAAE,CAAC,IAAI,CAClB,EAAE,QAAQ,EAAE,EACZ,yFAAyF;QACzF,2FAA2F;QAC3F,6FAA6F;QAC7F,6FAA6F;QAC7F,qEAAqE,CACtE,CAAA;AACH,CAAC;AAED,6DAA6D;AAC7D,MAAM,UAAU,uBAAuB;IACrC,MAAM,CAAC,KAAK,EAAE,CAAA;AAChB,CAAC"}
@@ -5,5 +5,5 @@ export interface GenerateResult {
5
5
  snapshotFile: string;
6
6
  statements: number;
7
7
  }
8
- export declare function generateForDatabase(dbConfig: ResolvedDatabase, cwd: string, migrationName?: string, internalDefinitions?: Record<string, unknown>): Promise<GenerateResult>;
8
+ export declare function generateForDatabase(dbConfig: ResolvedDatabase, migrationName?: string, internalDefinitions?: () => Promise<Record<string, unknown>>): Promise<GenerateResult>;
9
9
  //# sourceMappingURL=generate.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../../src/data/migrate/generate.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAA;AAkBjE,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAA;IAChB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,YAAY,EAAE,MAAM,CAAA;IACpB,UAAU,EAAE,MAAM,CAAA;CACnB;AAgBD,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,gBAAgB,EAC1B,GAAG,EAAE,MAAM,EACX,aAAa,CAAC,EAAE,MAAM,EACtB,mBAAmB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5C,OAAO,CAAC,cAAc,CAAC,CAoGzB"}
1
+ {"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../../src/data/migrate/generate.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAA;AAkBjE,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAA;IAChB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,YAAY,EAAE,MAAM,CAAA;IACpB,UAAU,EAAE,MAAM,CAAA;CACnB;AAgBD,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,gBAAgB,EAC1B,aAAa,CAAC,EAAE,MAAM,EACtB,mBAAmB,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAC3D,OAAO,CAAC,cAAc,CAAC,CA2GzB"}
@@ -10,7 +10,7 @@ import { buildSnapshot, EMPTY_SNAPSHOT } from './snapshot.js';
10
10
  import { diffSnapshots, diffOpTableName } from './diff.js';
11
11
  import { emitSQL } from './sql-emit.js';
12
12
  import { PARTITIONED_TRACE_TABLE_NAMES } from '../../trace/partition/tables.js';
13
- export async function generateForDatabase(dbConfig, cwd, migrationName, internalDefinitions) {
13
+ export async function generateForDatabase(dbConfig, migrationName, internalDefinitions) {
14
14
  if (dbConfig.schema === undefined) {
15
15
  throw new ConfigError(`Database "${dbConfig.name}" has no schema path configured.`, `Add a schema path to your database config:\n\n` +
16
16
  ` databases: {\n` +
@@ -31,12 +31,14 @@ export async function generateForDatabase(dbConfig, cwd, migrationName, internal
31
31
  ` },\n` +
32
32
  ` }\n`);
33
33
  }
34
- const schemaFiles = await resolveSchemaFiles(dbConfig.schema, cwd);
34
+ const schemaFiles = await resolveSchemaFiles(dbConfig.schema, dbConfig.baseDir);
35
35
  if (schemaFiles.length === 0) {
36
36
  const patterns = Array.isArray(dbConfig.schema) ? dbConfig.schema.join(', ') : dbConfig.schema;
37
37
  throw new ConfigError(`No schema files found for database "${dbConfig.name}".`, `Pattern(s): ${patterns}\n\n Check the "schema" path in your database config.`);
38
38
  }
39
- const migrationsDir = resolve(cwd, dbConfig.migrations);
39
+ // ResolvedDatabase.migrations is absolute (resolved against baseDir at
40
+ // config-load time) — cwd plays no part.
41
+ const migrationsDir = dbConfig.migrations;
40
42
  const metaDir = join(migrationsDir, 'meta');
41
43
  mkdirSync(metaDir, { recursive: true });
42
44
  const imports = {};
@@ -47,8 +49,13 @@ export async function generateForDatabase(dbConfig, cwd, migrationName, internal
47
49
  imports[key] = value;
48
50
  }
49
51
  }
52
+ // A thunk, invoked only AFTER the schema-file import loop: queue tables
53
+ // register at createQueue() time, and a queue module reached only by the
54
+ // schema glob registers during the loop above. Materializing the internal
55
+ // definitions before the imports (as the CLI once did) silently dropped
56
+ // those queues from the migration (D2, subseam audit 2026-07-16).
50
57
  if (internalDefinitions !== undefined) {
51
- for (const [key, value] of Object.entries(internalDefinitions)) {
58
+ for (const [key, value] of Object.entries(await internalDefinitions())) {
52
59
  imports[key] = value;
53
60
  }
54
61
  }
@@ -133,18 +140,18 @@ function formatTag(idx, name) {
133
140
  }
134
141
  return prefix;
135
142
  }
136
- async function resolveSchemaFiles(schema, cwd) {
143
+ async function resolveSchemaFiles(schema, baseDir) {
137
144
  const patterns = Array.isArray(schema) ? schema : [schema];
138
145
  const files = [];
139
146
  for (const pattern of patterns) {
140
- const abs = resolve(cwd, pattern);
147
+ const abs = resolve(baseDir, pattern);
141
148
  if (!pattern.includes('*')) {
142
149
  if (existsSync(abs))
143
150
  files.push(abs);
144
151
  }
145
152
  else {
146
- for await (const match of glob(pattern, { cwd })) {
147
- files.push(resolve(cwd, match));
153
+ for await (const match of glob(pattern, { cwd: baseDir })) {
154
+ files.push(resolve(baseDir, match));
148
155
  }
149
156
  }
150
157
  }
@@ -1 +1 @@
1
- {"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../src/data/migrate/generate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../src/data/migrate/generate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Keeps a statement observer from widening what a query error serializes.
3
+ *
4
+ * postgres.js defines `stack`/`query`/`parameters`/`args`/`types` on every
5
+ * query error it raises, and makes them ENUMERABLE exactly when its `debug`
6
+ * option is truthy (`connection.js`, `queryError`). Pipework sets `debug` to
7
+ * install a per-statement observer — so, absent this boundary, merely observing
8
+ * statements would start leaking bind parameters into every log drain that
9
+ * serializes errors. Observation must not change what an error exposes.
10
+ *
11
+ * Why this is a closed set rather than a best-effort sweep: enumerability only
12
+ * changes where `debug` is truthy, and only three sites in pipework construct a
13
+ * connection carrying the observer — `createManagedConnection`,
14
+ * `createIsolatedConnection`, and `createSetupConnection`. Every other
15
+ * `postgres()` in the codebase (migrations, CLI, startup validation, reaper,
16
+ * `tap()`) leaves `debug` unset, so its errors keep these fields
17
+ * non-enumerable already and need no treatment.
18
+ *
19
+ * The one gap, deliberate and announced: `ManagedConnection.client` is the
20
+ * sanctioned raw-driver door, and errors from queries issued through it do not
21
+ * pass this boundary. Reading `.client` on an observed connection logs a
22
+ * one-time warning saying so. Wrapping the `Sql` to close that gap was
23
+ * considered and REJECTED: it means proxying a callable tagged-template whose
24
+ * `begin`/`savepoint` hand out fresh client instances needing recursive
25
+ * re-wrapping, on the hottest path in the system — more risk than the narrow,
26
+ * documented gap it would close. Do not "clean this up" by adding one.
27
+ */
28
+ /** Records that this client's `debug` hook came from a statement observer alone. */
29
+ export declare function markObservedConnection(client: unknown): void;
30
+ /** True when this client's `debug` hook came from a statement observer alone. */
31
+ export declare function isObservedConnection(client: unknown): boolean;
32
+ /** Carries observed-ness onto a transaction- or savepoint-scoped client. */
33
+ export declare function propagateObserved(from: unknown, to: unknown): void;
34
+ /**
35
+ * Returns the error to propagate with the driver-added fields hidden from
36
+ * serialization, following `cause` because the driver error usually arrives
37
+ * wrapped by drizzle. Returns the original untouched when there is nothing to
38
+ * hide.
39
+ */
40
+ export declare function withoutDriverAddedFields(err: unknown): unknown;
41
+ /**
42
+ * Runs driver work, hiding the fields postgres.js only exposed because a
43
+ * statement observer is attached. Pure pass-through when the connection is not
44
+ * observed, and never alters the error itself — only what it serializes.
45
+ */
46
+ export declare function throughErrorBoundary<T>(client: unknown, run: () => Promise<T>): Promise<T>;
47
+ //# sourceMappingURL=driver-error-boundary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"driver-error-boundary.d.ts","sourceRoot":"","sources":["../../../../src/data/query/postgres-js/driver-error-boundary.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AA+BH,oFAAoF;AACpF,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAG5D;AAED,iFAAiF;AACjF,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAG7D;AAED,4EAA4E;AAC5E,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,GAAG,IAAI,CAElE;AAkCD;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAsB9D;AAED;;;;GAIG;AACH,wBAAsB,oBAAoB,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAOhG"}