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.
- package/README.md +608 -2
- package/dist/config/env.js +67 -0
- package/dist/config/env.js.map +1 -0
- package/dist/config/profiles.js +257 -0
- package/dist/config/profiles.js.map +1 -0
- package/dist/core/audit-context.js +21 -0
- package/dist/core/audit-context.js.map +1 -0
- package/dist/core/audit.js +91 -0
- package/dist/core/audit.js.map +1 -0
- package/dist/core/brands.js +24 -0
- package/dist/core/brands.js.map +1 -0
- package/dist/core/classifier.js +279 -0
- package/dist/core/classifier.js.map +1 -0
- package/dist/core/errors.js +197 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/format.js +258 -0
- package/dist/core/format.js.map +1 -0
- package/dist/core/guards.js +513 -0
- package/dist/core/guards.js.map +1 -0
- package/dist/core/identifiers.js +431 -0
- package/dist/core/identifiers.js.map +1 -0
- package/dist/core/limits.js +79 -0
- package/dist/core/limits.js.map +1 -0
- package/dist/core/logger.js +34 -0
- package/dist/core/logger.js.map +1 -0
- package/dist/core/paginate.js +195 -0
- package/dist/core/paginate.js.map +1 -0
- package/dist/core/paths.js +392 -0
- package/dist/core/paths.js.map +1 -0
- package/dist/core/policy.js +98 -0
- package/dist/core/policy.js.map +1 -0
- package/dist/core/shutdown.js +10 -0
- package/dist/core/shutdown.js.map +1 -0
- package/dist/core/stdout-guard.js +25 -0
- package/dist/core/stdout-guard.js.map +1 -0
- package/dist/db/catalog.js +1006 -0
- package/dist/db/catalog.js.map +1 -0
- package/dist/db/pool.js +158 -0
- package/dist/db/pool.js.map +1 -0
- package/dist/db/session.js +258 -0
- package/dist/db/session.js.map +1 -0
- package/dist/db/types.js +2 -0
- package/dist/db/types.js.map +1 -0
- package/dist/index.js +91 -0
- package/dist/index.js.map +1 -0
- package/dist/resources/index.js +88 -0
- package/dist/resources/index.js.map +1 -0
- package/dist/runtime/binaries.js +356 -0
- package/dist/runtime/binaries.js.map +1 -0
- package/dist/runtime/env-file.js +62 -0
- package/dist/runtime/env-file.js.map +1 -0
- package/dist/runtime/environment.js +34 -0
- package/dist/runtime/environment.js.map +1 -0
- package/dist/server.js +106 -0
- package/dist/server.js.map +1 -0
- package/dist/snapshot/capture.js +189 -0
- package/dist/snapshot/capture.js.map +1 -0
- package/dist/snapshot/diff.js +254 -0
- package/dist/snapshot/diff.js.map +1 -0
- package/dist/snapshot/migrate.js +1596 -0
- package/dist/snapshot/migrate.js.map +1 -0
- package/dist/snapshot/model.js +80 -0
- package/dist/snapshot/model.js.map +1 -0
- package/dist/tools/_archive_meta.js +138 -0
- package/dist/tools/_archive_meta.js.map +1 -0
- package/dist/tools/_batch_shared.js +73 -0
- package/dist/tools/_batch_shared.js.map +1 -0
- package/dist/tools/_export_format.js +107 -0
- package/dist/tools/_export_format.js.map +1 -0
- package/dist/tools/_object_kinds.js +97 -0
- package/dist/tools/_object_kinds.js.map +1 -0
- package/dist/tools/_relation_detail.js +55 -0
- package/dist/tools/_relation_detail.js.map +1 -0
- package/dist/tools/_shared.js +17 -0
- package/dist/tools/_shared.js.map +1 -0
- package/dist/tools/_snapshot_io.js +238 -0
- package/dist/tools/_snapshot_io.js.map +1 -0
- package/dist/tools/admin/_shared.js +18 -0
- package/dist/tools/admin/_shared.js.map +1 -0
- package/dist/tools/admin/extensions.js +80 -0
- package/dist/tools/admin/extensions.js.map +1 -0
- package/dist/tools/admin/grants.js +207 -0
- package/dist/tools/admin/grants.js.map +1 -0
- package/dist/tools/admin/index.js +138 -0
- package/dist/tools/admin/index.js.map +1 -0
- package/dist/tools/admin/maintenance.js +106 -0
- package/dist/tools/admin/maintenance.js.map +1 -0
- package/dist/tools/admin/roles.js +144 -0
- package/dist/tools/admin/roles.js.map +1 -0
- package/dist/tools/admin/sessions.js +104 -0
- package/dist/tools/admin/sessions.js.map +1 -0
- package/dist/tools/admin/stats.js +63 -0
- package/dist/tools/admin/stats.js.map +1 -0
- package/dist/tools/backup.js +288 -0
- package/dist/tools/backup.js.map +1 -0
- package/dist/tools/connection_status.js +138 -0
- package/dist/tools/connection_status.js.map +1 -0
- package/dist/tools/copy.js +355 -0
- package/dist/tools/copy.js.map +1 -0
- package/dist/tools/delete_batch.js +73 -0
- package/dist/tools/delete_batch.js.map +1 -0
- package/dist/tools/describe_object.js +87 -0
- package/dist/tools/describe_object.js.map +1 -0
- package/dist/tools/execute_sql.js +395 -0
- package/dist/tools/execute_sql.js.map +1 -0
- package/dist/tools/explain.js +134 -0
- package/dist/tools/explain.js.map +1 -0
- package/dist/tools/export.js +215 -0
- package/dist/tools/export.js.map +1 -0
- package/dist/tools/get_schema.js +148 -0
- package/dist/tools/get_schema.js.map +1 -0
- package/dist/tools/index.js +40 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/insert_batch.js +212 -0
- package/dist/tools/insert_batch.js.map +1 -0
- package/dist/tools/list_objects.js +160 -0
- package/dist/tools/list_objects.js.map +1 -0
- package/dist/tools/prepare_migration.js +112 -0
- package/dist/tools/prepare_migration.js.map +1 -0
- package/dist/tools/restore.js +301 -0
- package/dist/tools/restore.js.map +1 -0
- package/dist/tools/schema_diff.js +79 -0
- package/dist/tools/schema_diff.js.map +1 -0
- package/dist/tools/schema_snapshot.js +57 -0
- package/dist/tools/schema_snapshot.js.map +1 -0
- package/dist/tools/select.js +162 -0
- package/dist/tools/select.js.map +1 -0
- package/dist/tools/update_batch.js +154 -0
- package/dist/tools/update_batch.js.map +1 -0
- 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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"}
|
package/dist/db/pool.js
ADDED
|
@@ -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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"}
|
package/dist/db/types.js
ADDED
|
@@ -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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"}
|