pg-admin-mcp 0.0.0-stage → 0.1.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 (130) hide show
  1. package/README.md +608 -2
  2. package/dist/config/env.js +67 -0
  3. package/dist/config/env.js.map +1 -0
  4. package/dist/config/profiles.js +257 -0
  5. package/dist/config/profiles.js.map +1 -0
  6. package/dist/core/audit-context.js +21 -0
  7. package/dist/core/audit-context.js.map +1 -0
  8. package/dist/core/audit.js +91 -0
  9. package/dist/core/audit.js.map +1 -0
  10. package/dist/core/brands.js +24 -0
  11. package/dist/core/brands.js.map +1 -0
  12. package/dist/core/classifier.js +279 -0
  13. package/dist/core/classifier.js.map +1 -0
  14. package/dist/core/errors.js +197 -0
  15. package/dist/core/errors.js.map +1 -0
  16. package/dist/core/format.js +258 -0
  17. package/dist/core/format.js.map +1 -0
  18. package/dist/core/guards.js +513 -0
  19. package/dist/core/guards.js.map +1 -0
  20. package/dist/core/identifiers.js +431 -0
  21. package/dist/core/identifiers.js.map +1 -0
  22. package/dist/core/limits.js +79 -0
  23. package/dist/core/limits.js.map +1 -0
  24. package/dist/core/logger.js +34 -0
  25. package/dist/core/logger.js.map +1 -0
  26. package/dist/core/paginate.js +195 -0
  27. package/dist/core/paginate.js.map +1 -0
  28. package/dist/core/paths.js +392 -0
  29. package/dist/core/paths.js.map +1 -0
  30. package/dist/core/policy.js +98 -0
  31. package/dist/core/policy.js.map +1 -0
  32. package/dist/core/shutdown.js +10 -0
  33. package/dist/core/shutdown.js.map +1 -0
  34. package/dist/core/stdout-guard.js +25 -0
  35. package/dist/core/stdout-guard.js.map +1 -0
  36. package/dist/db/catalog.js +1006 -0
  37. package/dist/db/catalog.js.map +1 -0
  38. package/dist/db/pool.js +158 -0
  39. package/dist/db/pool.js.map +1 -0
  40. package/dist/db/session.js +258 -0
  41. package/dist/db/session.js.map +1 -0
  42. package/dist/db/types.js +2 -0
  43. package/dist/db/types.js.map +1 -0
  44. package/dist/index.js +91 -0
  45. package/dist/index.js.map +1 -0
  46. package/dist/resources/index.js +88 -0
  47. package/dist/resources/index.js.map +1 -0
  48. package/dist/runtime/binaries.js +356 -0
  49. package/dist/runtime/binaries.js.map +1 -0
  50. package/dist/runtime/env-file.js +62 -0
  51. package/dist/runtime/env-file.js.map +1 -0
  52. package/dist/runtime/environment.js +34 -0
  53. package/dist/runtime/environment.js.map +1 -0
  54. package/dist/server.js +106 -0
  55. package/dist/server.js.map +1 -0
  56. package/dist/snapshot/capture.js +189 -0
  57. package/dist/snapshot/capture.js.map +1 -0
  58. package/dist/snapshot/diff.js +254 -0
  59. package/dist/snapshot/diff.js.map +1 -0
  60. package/dist/snapshot/migrate.js +1596 -0
  61. package/dist/snapshot/migrate.js.map +1 -0
  62. package/dist/snapshot/model.js +80 -0
  63. package/dist/snapshot/model.js.map +1 -0
  64. package/dist/tools/_archive_meta.js +138 -0
  65. package/dist/tools/_archive_meta.js.map +1 -0
  66. package/dist/tools/_batch_shared.js +73 -0
  67. package/dist/tools/_batch_shared.js.map +1 -0
  68. package/dist/tools/_export_format.js +107 -0
  69. package/dist/tools/_export_format.js.map +1 -0
  70. package/dist/tools/_object_kinds.js +97 -0
  71. package/dist/tools/_object_kinds.js.map +1 -0
  72. package/dist/tools/_relation_detail.js +55 -0
  73. package/dist/tools/_relation_detail.js.map +1 -0
  74. package/dist/tools/_shared.js +17 -0
  75. package/dist/tools/_shared.js.map +1 -0
  76. package/dist/tools/_snapshot_io.js +238 -0
  77. package/dist/tools/_snapshot_io.js.map +1 -0
  78. package/dist/tools/admin/_shared.js +18 -0
  79. package/dist/tools/admin/_shared.js.map +1 -0
  80. package/dist/tools/admin/extensions.js +80 -0
  81. package/dist/tools/admin/extensions.js.map +1 -0
  82. package/dist/tools/admin/grants.js +207 -0
  83. package/dist/tools/admin/grants.js.map +1 -0
  84. package/dist/tools/admin/index.js +138 -0
  85. package/dist/tools/admin/index.js.map +1 -0
  86. package/dist/tools/admin/maintenance.js +106 -0
  87. package/dist/tools/admin/maintenance.js.map +1 -0
  88. package/dist/tools/admin/roles.js +144 -0
  89. package/dist/tools/admin/roles.js.map +1 -0
  90. package/dist/tools/admin/sessions.js +104 -0
  91. package/dist/tools/admin/sessions.js.map +1 -0
  92. package/dist/tools/admin/stats.js +63 -0
  93. package/dist/tools/admin/stats.js.map +1 -0
  94. package/dist/tools/backup.js +288 -0
  95. package/dist/tools/backup.js.map +1 -0
  96. package/dist/tools/connection_status.js +138 -0
  97. package/dist/tools/connection_status.js.map +1 -0
  98. package/dist/tools/copy.js +355 -0
  99. package/dist/tools/copy.js.map +1 -0
  100. package/dist/tools/delete_batch.js +73 -0
  101. package/dist/tools/delete_batch.js.map +1 -0
  102. package/dist/tools/describe_object.js +87 -0
  103. package/dist/tools/describe_object.js.map +1 -0
  104. package/dist/tools/execute_sql.js +395 -0
  105. package/dist/tools/execute_sql.js.map +1 -0
  106. package/dist/tools/explain.js +134 -0
  107. package/dist/tools/explain.js.map +1 -0
  108. package/dist/tools/export.js +215 -0
  109. package/dist/tools/export.js.map +1 -0
  110. package/dist/tools/get_schema.js +148 -0
  111. package/dist/tools/get_schema.js.map +1 -0
  112. package/dist/tools/index.js +40 -0
  113. package/dist/tools/index.js.map +1 -0
  114. package/dist/tools/insert_batch.js +212 -0
  115. package/dist/tools/insert_batch.js.map +1 -0
  116. package/dist/tools/list_objects.js +160 -0
  117. package/dist/tools/list_objects.js.map +1 -0
  118. package/dist/tools/prepare_migration.js +112 -0
  119. package/dist/tools/prepare_migration.js.map +1 -0
  120. package/dist/tools/restore.js +301 -0
  121. package/dist/tools/restore.js.map +1 -0
  122. package/dist/tools/schema_diff.js +79 -0
  123. package/dist/tools/schema_diff.js.map +1 -0
  124. package/dist/tools/schema_snapshot.js +57 -0
  125. package/dist/tools/schema_snapshot.js.map +1 -0
  126. package/dist/tools/select.js +162 -0
  127. package/dist/tools/select.js.map +1 -0
  128. package/dist/tools/update_batch.js +154 -0
  129. package/dist/tools/update_batch.js.map +1 -0
  130. package/package.json +47 -5
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../src/db/catalog.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,158 @@
1
+ import { readFileSync } from 'node:fs';
2
+ import { Pool } from 'pg';
3
+ import { PgMcpError, envPrefix } from '../core/errors.js';
4
+ import { logger } from '../core/logger.js';
5
+ import { onShutdown } from '../core/shutdown.js';
6
+ /**
7
+ * One `pg.Pool` per profile alias, created lazily and cached.
8
+ *
9
+ * **Timeouts live on the pool config, never on a `SET`.** All three
10
+ * (`statement_timeout`, `lock_timeout`, `idle_in_transaction_session_timeout`)
11
+ * are real startup-packet parameters that `pg` forwards verbatim — verified
12
+ * against the installed `pg@8` (`lib/client.js` → `getStartupConf`) and
13
+ * `@types/pg` (`ClientConfig`). Every connection is therefore *born* with the
14
+ * profile's limits, which is the only leak-free option: a plain `SET` persists
15
+ * on a pooled backend and bleeds into whatever unrelated call gets that
16
+ * connection next (design.md risk 4), and `SET LOCAL` outside a transaction
17
+ * does nothing at all. Per-call overrides are `SET LOCAL` inside a transaction
18
+ * and belong to `db/session.ts`.
19
+ *
20
+ * **The connection URL is never handed to `pg`.** `pg` merges the parsed
21
+ * connection string *over* the explicit config, and `pg-connection-string`
22
+ * copies every query parameter into that object — so `?ssl=0`,
23
+ * `?statement_timeout=0`, `?application_name=…`, `?query_timeout=1` and
24
+ * `?options=-c …` would each outrank what this function sets, and `?ssl=0`
25
+ * specifically survives any amount of `sslmode` scrubbing. `config/profiles.ts`
26
+ * decomposes the URL instead and this module passes the fields explicitly, so
27
+ * the URL is non-authoritative by construction rather than by blocklist.
28
+ *
29
+ * This module is the only permitted caller of `Profile.password()`.
30
+ */
31
+ /** Postgres truncates `application_name` at NAMEDATALEN-1; do it here so it stays recognizable. */
32
+ const APP_NAME_MAX = 63;
33
+ export const SSL_MODES = ['disable', 'require', 'verify-ca', 'verify-full'];
34
+ function readRootCert(profile) {
35
+ if (profile.sslRootCert === undefined)
36
+ return undefined;
37
+ try {
38
+ return readFileSync(profile.sslRootCert, 'utf8');
39
+ }
40
+ catch (err) {
41
+ throw new PgMcpError({
42
+ code: 'PROFILE_MISCONFIGURED',
43
+ message: `${envPrefix(profile.alias)}_SSL_ROOT_CERT points at ${profile.sslRootCert}, which could not be read`,
44
+ hint: 'mount the CA bundle into the container and point the var at the in-container path',
45
+ cause: err,
46
+ });
47
+ }
48
+ }
49
+ /**
50
+ * `disable` and `require` never look at the CA — that matches libpq, but an
51
+ * operator who set `SSL_ROOT_CERT` and got silence has no way to tell the
52
+ * setting was ignored rather than applied. Say so. (Reading the file only in
53
+ * the modes that use it also stops a bad path from failing `disable`.)
54
+ */
55
+ function warnRootCertIgnored(profile, mode) {
56
+ if (profile.sslRootCert === undefined)
57
+ return;
58
+ logger.warn(`profile "${profile.alias}": ${envPrefix(profile.alias)}_SSL_ROOT_CERT is ignored under SSL_MODE=${mode} — ` +
59
+ 'use verify-ca or verify-full if you want the chain verified against it');
60
+ }
61
+ /**
62
+ * Translates `sslMode` onto pg's `ssl` option. `undefined` means "not
63
+ * configured" — pg then falls back to `PGSSL*`, matching libpq.
64
+ *
65
+ * An unrecognized mode throws rather than degrading to plaintext: the whole
66
+ * point of the setting is that a typo must not silently drop TLS.
67
+ */
68
+ export function sslConfigFor(profile) {
69
+ const raw = profile.sslMode;
70
+ if (raw === undefined || raw.trim() === '')
71
+ return undefined;
72
+ const mode = raw.trim().toLowerCase();
73
+ switch (mode) {
74
+ case 'disable':
75
+ warnRootCertIgnored(profile, mode);
76
+ return false;
77
+ case 'require': {
78
+ // libpq's `require`: encrypt, but do not verify the chain or the name.
79
+ warnRootCertIgnored(profile, mode);
80
+ return { rejectUnauthorized: false };
81
+ }
82
+ case 'verify-ca': {
83
+ // Chain is verified, hostname is not — which is exactly what `verify-ca`
84
+ // means and what Node's default `checkServerIdentity` would additionally
85
+ // (wrongly, for this mode) enforce.
86
+ const ca = readRootCert(profile);
87
+ return { rejectUnauthorized: true, checkServerIdentity: () => undefined, ...(ca === undefined ? {} : { ca }) };
88
+ }
89
+ case 'verify-full': {
90
+ const ca = readRootCert(profile);
91
+ return { rejectUnauthorized: true, ...(ca === undefined ? {} : { ca }) };
92
+ }
93
+ default:
94
+ throw new PgMcpError({
95
+ code: 'PROFILE_MISCONFIGURED',
96
+ message: `${envPrefix(profile.alias)}_SSL_MODE="${raw}" is not a recognized SSL mode`,
97
+ hint: `set it to one of: ${SSL_MODES.join(', ')}`,
98
+ });
99
+ }
100
+ }
101
+ /** Pure function of the profile — exported so unit tests assert the config without a server. */
102
+ export function buildPoolConfig(profile) {
103
+ const ssl = sslConfigFor(profile);
104
+ const password = profile.password();
105
+ return {
106
+ host: profile.host,
107
+ port: profile.port,
108
+ database: profile.database,
109
+ user: profile.user,
110
+ application_name: `pg-admin-mcp/${profile.alias}`.slice(0, APP_NAME_MAX),
111
+ max: profile.poolMax,
112
+ // Never omit this. `pool.connect()` has no acquire timeout of its own: with
113
+ // it unset, a checkout that can never be satisfied — a saturated pool, or a
114
+ // tool that takes a second checkout while still holding the first — never
115
+ // settles. No error, no result, forever. `PG_MCP_CONNECT_TIMEOUT_MS` turns
116
+ // that class of bug into a `PROFILE_UNREACHABLE` the caller can read.
117
+ connectionTimeoutMillis: profile.connectTimeoutMs,
118
+ statement_timeout: profile.statementTimeoutMs,
119
+ lock_timeout: profile.lockTimeoutMs,
120
+ idle_in_transaction_session_timeout: profile.idleTxTimeoutMs,
121
+ ...(ssl === undefined ? {} : { ssl }),
122
+ // pg's function form, called once per new connection: the secret stays
123
+ // inside a closure instead of becoming an enumerable property on a config
124
+ // object that a log line or a test snapshot could dump. Omitted entirely
125
+ // when the URL carried no password, so pg's PGPASSWORD fallback still runs.
126
+ ...(password === undefined ? {} : { password: () => password }),
127
+ };
128
+ }
129
+ const pools = new Map();
130
+ /** Lazily creates (and caches) one pool per profile alias. */
131
+ export function getPool(profile) {
132
+ const cached = pools.get(profile.alias);
133
+ if (cached !== undefined)
134
+ return cached;
135
+ const pool = new Pool(buildPoolConfig(profile));
136
+ // Not optional: `pg.Pool` emits 'error' for *idle* clients (backend killed,
137
+ // network drop). Node treats an unhandled 'error' event as a fatal
138
+ // exception, so without this listener a `pg_terminate_backend` on an idle
139
+ // connection takes the whole MCP server down. The pool discards the client
140
+ // on its own; all we owe it is a listener. Clients that are *checked out*
141
+ // are not covered by this — `pg-pool` removes its idle listener on acquire,
142
+ // so `db/session.ts` attaches its own for the duration of the checkout.
143
+ pool.on('error', (err) => {
144
+ logger.warn(`idle client error on profile "${profile.alias}" — connection discarded`, err.message);
145
+ });
146
+ pools.set(profile.alias, pool);
147
+ return pool;
148
+ }
149
+ /** Ends every pool and empties the cache — the shutdown path, and what tests reset with. Safe to call twice. */
150
+ export async function closeAllPools() {
151
+ const open = Array.from(pools.values());
152
+ pools.clear();
153
+ // allSettled: one wedged backend must not stop the others from closing.
154
+ await Promise.allSettled(open.map(async (pool) => pool.end()));
155
+ }
156
+ // Without this the container hangs on open sockets after the client disconnects.
157
+ onShutdown(closeAllPools);
158
+ //# sourceMappingURL=pool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pool.js","sourceRoot":"","sources":["../../src/db/pool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,258 @@
1
+ import { DatabaseError } from 'pg';
2
+ import { PgMcpError, enrichUnreachable, fromPgError, isUnreachableErrno } from '../core/errors.js';
3
+ import { logger } from '../core/logger.js';
4
+ import { getPool } from './pool.js';
5
+ /**
6
+ * **The only module in this project permitted to acquire a client.**
7
+ *
8
+ * Everything else — every tool, every catalog query, every guard — runs its SQL
9
+ * through `withSession` or `withTx`. That single choke point is what makes the
10
+ * invariants below provable by inspection instead of by review:
11
+ *
12
+ * - the client is released on *every* path, including a failed `ROLLBACK`
13
+ * (which destroys the connection rather than returning a poisoned one);
14
+ * - a checked-out client always has an `'error'` listener. `pg-pool` *removes*
15
+ * its idle listener the moment a client is handed out and adds no
16
+ * replacement, so without this a socket failure mid-checkout is an unhandled
17
+ * `'error'` event — which Node turns into an uncaughtException and the server
18
+ * dies. `db/pool.ts`'s pool listener only ever covered *idle* clients;
19
+ * - **no session state survives a checkout.** This module issues no bare `SET`
20
+ * of its own, but from Phase 2 on the *body* is where user SQL runs, and
21
+ * `SET`, `CREATE TEMP TABLE`, `PREPARE`, `pg_advisory_lock` and a failed open
22
+ * transaction all outlive the call on a pooled backend (design.md risk 4).
23
+ * So every checkout ends with `ROLLBACK` + `DISCARD ALL` before the client
24
+ * goes back, and a body that threw gets its connection destroyed outright.
25
+ * Consequence worth knowing: a later phase must not rely on `pg`'s named
26
+ * prepared statements (`{ name, text }`) across two calls — `DISCARD ALL`
27
+ * deallocates them while pg still believes they are parsed;
28
+ * - write prevention is PostgreSQL's own `READ ONLY` transaction (SQLSTATE
29
+ * `25006` → `POLICY_READ_ONLY`), not a lexical check. No lexical rule catches
30
+ * `WITH x AS (INSERT … RETURNING) SELECT`; `core/classifier.ts` owns the
31
+ * cheap fast-fail pre-check, and it is an ergonomics feature, not the fence.
32
+ *
33
+ * A lint rule enforcing the "only acquirer" rule lands in a later task.
34
+ */
35
+ const ISOLATION_LEVELS = {
36
+ 'read committed': 'READ COMMITTED',
37
+ 'repeatable read': 'REPEATABLE READ',
38
+ serializable: 'SERIALIZABLE',
39
+ };
40
+ function errorContext(profile, opts) {
41
+ return {
42
+ profile: profile.alias,
43
+ // Read by the SQLSTATE 25006 branch of `fromPgError`: "set ALLOW_WRITE" is
44
+ // the wrong advice for a profile that already has it.
45
+ write: profile.capabilities.write,
46
+ ...(opts.operation === undefined ? {} : { operation: opts.operation }),
47
+ };
48
+ }
49
+ /**
50
+ * PostgreSQL said no, or the socket did — those get the taxonomy. A `TypeError`
51
+ * from our own JS does not: `fromPgError` would label it `PG_ERROR` and tell
52
+ * the caller to "fix the statement reported above", blaming their SQL for our
53
+ * bug. Anything unrecognized is rethrown exactly as it was thrown.
54
+ */
55
+ function asSessionError(err, profile, opts) {
56
+ if (err instanceof PgMcpError || err instanceof DatabaseError || isUnreachableErrno(err)) {
57
+ return fromPgError(err, errorContext(profile, opts));
58
+ }
59
+ return err;
60
+ }
61
+ /**
62
+ * `ROLLBACK` first because `DISCARD ALL` cannot run inside a transaction block
63
+ * and the body may have left one open; outside a transaction `ROLLBACK` is a
64
+ * no-op warning. Two round-trips deliberately — a single `ROLLBACK; DISCARD ALL`
65
+ * simple query is itself one *implicit* transaction block, which `DISCARD ALL`
66
+ * rejects just the same.
67
+ *
68
+ * Returns `false` when the scrub failed and the connection must be destroyed.
69
+ */
70
+ async function scrubQuietly(client, alias) {
71
+ try {
72
+ await client.query('ROLLBACK');
73
+ await client.query('DISCARD ALL');
74
+ return true;
75
+ }
76
+ catch (err) {
77
+ logger.warn(`session scrub failed on profile "${alias}" — destroying the connection instead of returning it to the pool`, err instanceof Error ? err.message : String(err));
78
+ return false;
79
+ }
80
+ }
81
+ /** Connection failures get the container-networking remediation instead of a bare ECONNREFUSED. */
82
+ async function acquire(profile) {
83
+ let client;
84
+ try {
85
+ client = await getPool(profile).connect();
86
+ }
87
+ catch (err) {
88
+ throw enrichUnreachable(err, profile);
89
+ }
90
+ const onError = (err) => {
91
+ logger.warn(`client error on profile "${profile.alias}" — the connection is being discarded`, err.message);
92
+ };
93
+ client.on('error', onError);
94
+ return {
95
+ client,
96
+ release: async (poisoned) => {
97
+ const destroy = poisoned || !(await scrubQuietly(client, profile.alias));
98
+ client.off('error', onError);
99
+ // `release(true)` destroys; `release()` returns the client to the pool.
100
+ client.release(destroy ? true : undefined);
101
+ },
102
+ };
103
+ }
104
+ /**
105
+ * A single pooled connection for the duration of `fn`. Issues no SQL of its own
106
+ * before the body — the profile's timeouts are already on the connection from
107
+ * `buildPoolConfig` — and scrubs the backend after it. Use `withTx` when you
108
+ * need a transaction or a per-call timeout override.
109
+ */
110
+ export async function withSession(profile, fn, opts = {}) {
111
+ const { client, release } = await acquire(profile);
112
+ let poisoned = false;
113
+ try {
114
+ return await fn(client);
115
+ }
116
+ catch (err) {
117
+ // A body that threw may have left anything behind — a half-open
118
+ // transaction most of all, which would hand the next caller 25P02 on every
119
+ // statement until idle_in_transaction_session_timeout fires. Don't try to
120
+ // reason about it, drop the connection.
121
+ poisoned = true;
122
+ throw asSessionError(err, profile, opts);
123
+ }
124
+ finally {
125
+ await release(poisoned);
126
+ }
127
+ }
128
+ function beginStatement(opts) {
129
+ const parts = ['BEGIN'];
130
+ if (opts.isolation !== undefined)
131
+ parts.push(`ISOLATION LEVEL ${ISOLATION_LEVELS[opts.isolation]}`);
132
+ if (opts.readOnly === true)
133
+ parts.push('READ ONLY');
134
+ return parts.join(' ');
135
+ }
136
+ /** PostgreSQL stores these as int4 milliseconds, and 0 *disables* the limit — hence a floor of 1, not 0. */
137
+ const TIMEOUT_MS_MIN = 1;
138
+ const TIMEOUT_MS_MAX = 2_147_483_647;
139
+ /**
140
+ * Same bounds style as `config/env.ts#readInt`: garbage is refused, a number
141
+ * that merely landed out of range is clamped. Without this a `-5`, `NaN` or
142
+ * `1e30` reaches PostgreSQL and comes back as a `PG_ERROR` blaming the server
143
+ * for what is a caller bug.
144
+ */
145
+ function clampTimeoutMs(alias, setting, ms) {
146
+ if (!Number.isFinite(ms)) {
147
+ logger.warn(`profile "${alias}": ignoring a non-finite ${setting} override — keeping the profile's own limit`);
148
+ return undefined;
149
+ }
150
+ return Math.min(Math.max(Math.trunc(ms), TIMEOUT_MS_MIN), TIMEOUT_MS_MAX);
151
+ }
152
+ /**
153
+ * `SET LOCAL` takes no parameters, but `set_config(name, value, is_local=true)`
154
+ * is its exact function form and *does* — so the millisecond value never gets
155
+ * string-concatenated into SQL.
156
+ */
157
+ async function applyLocalOverrides(client, profile, opts) {
158
+ const overrides = [
159
+ ['statement_timeout', opts.statementTimeoutMs],
160
+ ['lock_timeout', opts.lockTimeoutMs],
161
+ ];
162
+ for (const [setting, ms] of overrides) {
163
+ if (ms === undefined)
164
+ continue;
165
+ const clamped = clampTimeoutMs(profile.alias, setting, ms);
166
+ if (clamped === undefined)
167
+ continue;
168
+ await client.query('SELECT set_config($1, $2, true)', [setting, `${clamped}`]);
169
+ }
170
+ if (opts.searchPath !== undefined) {
171
+ await client.query('SELECT set_config($1, $2, true)', ['search_path', opts.searchPath]);
172
+ }
173
+ }
174
+ /** Returns `true` when the connection is poisoned and must be destroyed rather than pooled. */
175
+ async function rollbackQuietly(client, alias) {
176
+ try {
177
+ await client.query('ROLLBACK');
178
+ return false;
179
+ }
180
+ catch (err) {
181
+ logger.warn(`ROLLBACK failed on profile "${alias}" — destroying the connection instead of returning it to the pool`, err instanceof Error ? err.message : String(err));
182
+ return true;
183
+ }
184
+ }
185
+ /** Named rather than random so it is greppable in a server log. */
186
+ const DRY_RUN_SAVEPOINT = 'pg_admin_mcp_dry_run';
187
+ /**
188
+ * `3B001` no such savepoint (the body committed and opened a new transaction),
189
+ * `25P01` no transaction in progress (the body committed and stopped there).
190
+ */
191
+ const SAVEPOINT_GONE = new Set(['3B001', '25P01']);
192
+ /**
193
+ * The dry-run fence. Issuing `ROLLBACK` instead of `COMMIT` is *not* one: the
194
+ * body can end the transaction first — `INSERT …; COMMIT`, or a bare `COMMIT`
195
+ * that drops a `READ ONLY` transaction so the next statement runs in a fresh
196
+ * implicit autocommit one — and everything it wrote persists while `withTx`
197
+ * returns normally and raises nothing.
198
+ *
199
+ * A savepoint taken before the body closes that: if the body ended the
200
+ * transaction the savepoint no longer exists, PostgreSQL says so, and silent
201
+ * data loss becomes a loud error.
202
+ */
203
+ async function fenceDryRun(client, profile) {
204
+ try {
205
+ await client.query(`ROLLBACK TO SAVEPOINT ${DRY_RUN_SAVEPOINT}`);
206
+ }
207
+ catch (err) {
208
+ const sqlstate = err instanceof DatabaseError ? err.code : undefined;
209
+ if (sqlstate === undefined || !SAVEPOINT_GONE.has(sqlstate))
210
+ throw err;
211
+ throw new PgMcpError({
212
+ code: 'GUARD_DRY_RUN_ESCAPED',
213
+ message: `the dry run on profile "${profile.alias}" could not be rolled back: its body ended the transaction itself ` +
214
+ '(a COMMIT, ROLLBACK, END, ABORT or RELEASE SAVEPOINT), so anything written before that point is already committed',
215
+ // Aimed at whoever wrote the SQL, because in `postgres_execute_sql` this
216
+ // is reachable by an ordinary statement — a bare `COMMIT` — and not only
217
+ // by an agent misusing the confirm protocol. Say what to delete.
218
+ hint: 'delete the COMMIT / ROLLBACK / END / ABORT / SAVEPOINT statement from your SQL and re-run: this server opens ' +
219
+ 'and closes the transaction for you, and the dry run only means anything if it is the one that decides to roll ' +
220
+ 'back — pass confirm:true when you want the change to stick',
221
+ details: { profile: profile.alias, sqlstate },
222
+ cause: err,
223
+ });
224
+ }
225
+ }
226
+ /**
227
+ * `BEGIN` → per-call `SET LOCAL` overrides → `fn` → `COMMIT`
228
+ * (or `ROLLBACK`, on any throw and always under `rollbackAlways`).
229
+ *
230
+ * The client is released in `finally` on every path. If the `ROLLBACK` itself
231
+ * fails the client is *destroyed* (`release(true)`) — returning a connection
232
+ * with an open, un-rollbackable transaction to the pool would hand the next
233
+ * caller a backend stuck in `idle in transaction`.
234
+ */
235
+ export async function withTx(profile, fn, opts = {}) {
236
+ const { client, release } = await acquire(profile);
237
+ const dryRun = opts.rollbackAlways === true;
238
+ let poisoned = false;
239
+ try {
240
+ await client.query(beginStatement(opts));
241
+ await applyLocalOverrides(client, profile, opts);
242
+ if (dryRun)
243
+ await client.query(`SAVEPOINT ${DRY_RUN_SAVEPOINT}`);
244
+ const result = await fn(client);
245
+ if (dryRun)
246
+ await fenceDryRun(client, profile);
247
+ await client.query(dryRun ? 'ROLLBACK' : 'COMMIT');
248
+ return result;
249
+ }
250
+ catch (err) {
251
+ poisoned = await rollbackQuietly(client, profile.alias);
252
+ throw asSessionError(err, profile, opts);
253
+ }
254
+ finally {
255
+ await release(poisoned);
256
+ }
257
+ }
258
+ //# sourceMappingURL=session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/db/session.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/db/types.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,91 @@
1
+ #!/usr/bin/env node
2
+ // MUST stay first: neutralizes any stdout writer before it can run. See the
3
+ // module's header — ESM hoists imports, so an inline statement here would be too
4
+ // late for anything that logs at module-evaluation time.
5
+ import './core/stdout-guard.js';
6
+ import process from 'node:process';
7
+ import { StdioServerTransport } from '@modelcontextprotocol/server/stdio';
8
+ import { logger } from './core/logger.js';
9
+ import { runShutdownHooks } from './core/shutdown.js';
10
+ import { loadEnvFile } from './runtime/env-file.js';
11
+ import { createServer } from './server.js';
12
+ /** Hard cap on shutdown. A wedged backend must not keep the container alive. */
13
+ const SHUTDOWN_TIMEOUT_MS = 2000;
14
+ /** Bounded: a client that stopped reading must not keep the container alive. */
15
+ const DRAIN_TIMEOUT_MS = 2000;
16
+ // Before createServer(): every env read downstream is lazy, but it must see the
17
+ // merged keys. A named-but-unreadable file is fatal — stderr only, never stdout.
18
+ try {
19
+ loadEnvFile();
20
+ }
21
+ catch (err) {
22
+ // PgMcpError's message already carries its hint.
23
+ logger.error(err instanceof Error ? err.message : String(err));
24
+ process.exit(1);
25
+ }
26
+ const server = createServer();
27
+ await server.connect(new StdioServerTransport());
28
+ logger.info('connected on stdio');
29
+ let shuttingDown = false;
30
+ let pendingExitCode = 0;
31
+ /** Idempotent: every signal, stdin EOF and fatal-error path routes through here. */
32
+ async function shutdown(reason, exitCode = 0) {
33
+ // Recorded before the idempotency guard: an uncaughtException that fires
34
+ // while a shutdown is already in flight must still make the process exit
35
+ // non-zero, even though this call returns without doing any closing work.
36
+ pendingExitCode = Math.max(pendingExitCode, exitCode);
37
+ if (shuttingDown)
38
+ return;
39
+ shuttingDown = true;
40
+ logger.info(`shutting down (${reason})`);
41
+ const closing = (async () => {
42
+ await server.close();
43
+ await runShutdownHooks();
44
+ })().catch((err) => {
45
+ logger.error('error during shutdown', describe(err));
46
+ });
47
+ await Promise.race([
48
+ closing,
49
+ new Promise((resolve) => {
50
+ setTimeout(resolve, SHUTDOWN_TIMEOUT_MS).unref();
51
+ }),
52
+ ]);
53
+ await drainStdout();
54
+ process.exit(pendingExitCode);
55
+ }
56
+ /**
57
+ * `process.exit()` discards whatever Node still has queued for stdout, and
58
+ * under an MCP client stdout is always a pipe — so a large frame in flight at
59
+ * shutdown lands on the protocol stream truncated mid-byte. Wait for the
60
+ * queue to empty first, bounded, because a client that stopped reading must
61
+ * not be able to hold the container open.
62
+ */
63
+ async function drainStdout() {
64
+ if (process.stdout.writableLength === 0)
65
+ return;
66
+ await Promise.race([
67
+ new Promise((resolve) => {
68
+ process.stdout.write('', () => {
69
+ resolve();
70
+ });
71
+ }),
72
+ new Promise((resolve) => {
73
+ setTimeout(resolve, DRAIN_TIMEOUT_MS).unref();
74
+ }),
75
+ ]);
76
+ }
77
+ function describe(err) {
78
+ return err instanceof Error ? (err.stack ?? err.message) : String(err);
79
+ }
80
+ process.stdin.on('close', () => void shutdown('stdin closed'));
81
+ process.on('SIGTERM', () => void shutdown('SIGTERM'));
82
+ process.on('SIGINT', () => void shutdown('SIGINT'));
83
+ process.on('uncaughtException', (err) => {
84
+ logger.error('uncaught exception', describe(err));
85
+ void shutdown('uncaughtException', 1);
86
+ });
87
+ process.on('unhandledRejection', (reason) => {
88
+ logger.error('unhandled rejection', describe(reason));
89
+ void shutdown('unhandledRejection', 1);
90
+ });
91
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}