@adminiumjs/adapter-postgres 0.1.0-rc.1 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +105 -11
- package/dist/index.js.map +1 -1
- package/dist/introspect.d.ts +1 -1
- package/dist/introspect.js +1 -1
- package/package.json +2 -2
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,16 @@
|
|
|
1
1
|
import { type AdapterProvider, type AdapterRegistry, type CapabilityProbeResult, type CollectStatsOptions, type ColumnSampleOptions, type ConnectionConfig, type ConnectionRole, type DatabaseAdapter, type DatabaseModel, type Dialect, type FilterSpec, type IntrospectOptions, type MutationResult, type MutationSpec, type QueryResult, type QuerySpec, type Row, type SampleOptions, type StatsResult, type TableRef, type TestResult } from '@adminium/engine/adapter';
|
|
2
|
+
/** Does `error` (or anything it wraps) carry the pooler's refusal? */
|
|
3
|
+
export declare function isPoolerStartupRejection(error: unknown): boolean;
|
|
4
|
+
/**
|
|
5
|
+
* The 05 §4.1 session settings, in both shapes: the startup-packet form (zero
|
|
6
|
+
* round trips, preferred) and the `SET LOCAL` prelude used when a pooler
|
|
7
|
+
* refuses it. They are built together so the two can never drift into
|
|
8
|
+
* enforcing different limits.
|
|
9
|
+
*/
|
|
10
|
+
export declare function buildSessionSettings(statementTimeoutMs: number, introspect: boolean): {
|
|
11
|
+
startupOptions: string;
|
|
12
|
+
prelude: string;
|
|
13
|
+
};
|
|
2
14
|
export declare class PostgresAdapter<Role extends ConnectionRole = ConnectionRole> implements DatabaseAdapter<Role> {
|
|
3
15
|
#private;
|
|
4
16
|
readonly dialect: Dialect;
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAYA,OAAO,EAIL,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,KAAK,OAAO,EACZ,KAAK,UAAU,EACf,KAAK,iBAAiB,EACtB,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,SAAS,EACd,KAAK,GAAG,EACR,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,QAAQ,EACb,KAAK,UAAU,EAChB,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -17,12 +17,56 @@ import { collectPostgresStats } from './stats.js';
|
|
|
17
17
|
const INTROSPECT_POOL_MAX = 5;
|
|
18
18
|
const DATA_POOL_MAX = 10;
|
|
19
19
|
const DEFAULT_STATEMENT_TIMEOUT_MS = 15_000;
|
|
20
|
+
/**
|
|
21
|
+
* A connection pooler refusing the startup `options` packet.
|
|
22
|
+
*
|
|
23
|
+
* Neon (the pooled `…-pooler.…neon.tech` host its dashboard hands you by
|
|
24
|
+
* default) answers `unsupported startup parameter in options: statement_timeout`;
|
|
25
|
+
* pgbouncer in transaction mode says `unsupported startup parameter: options`.
|
|
26
|
+
* Matching the shared prefix covers both without pinning either vendor's exact
|
|
27
|
+
* wording, and the check is deliberately on the MESSAGE — the SQLSTATE varies
|
|
28
|
+
* between poolers, and Neon reports this as a plain connection failure.
|
|
29
|
+
*/
|
|
30
|
+
const POOLER_REJECTS_STARTUP_OPTIONS = /unsupported startup parameter/i;
|
|
31
|
+
/** Does `error` (or anything it wraps) carry the pooler's refusal? */
|
|
32
|
+
export function isPoolerStartupRejection(error) {
|
|
33
|
+
for (let current = error, depth = 0; current !== null && current !== undefined && depth < 5; depth += 1) {
|
|
34
|
+
const message = current.message;
|
|
35
|
+
if (typeof message === 'string' && POOLER_REJECTS_STARTUP_OPTIONS.test(message))
|
|
36
|
+
return true;
|
|
37
|
+
current = current.cause;
|
|
38
|
+
}
|
|
39
|
+
return false;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* The 05 §4.1 session settings, in both shapes: the startup-packet form (zero
|
|
43
|
+
* round trips, preferred) and the `SET LOCAL` prelude used when a pooler
|
|
44
|
+
* refuses it. They are built together so the two can never drift into
|
|
45
|
+
* enforcing different limits.
|
|
46
|
+
*/
|
|
47
|
+
export function buildSessionSettings(statementTimeoutMs, introspect) {
|
|
48
|
+
const pairs = [['statement_timeout', String(statementTimeoutMs)]];
|
|
49
|
+
if (introspect) {
|
|
50
|
+
pairs.push(['lock_timeout', '2s'], ['idle_in_transaction_session_timeout', '10s']);
|
|
51
|
+
}
|
|
52
|
+
return {
|
|
53
|
+
startupOptions: pairs.map(([k, v]) => `-c ${k}=${v}`).join(' '),
|
|
54
|
+
// Quoted values: `2s` is not a valid bare token for SET, unlike in `-c`.
|
|
55
|
+
prelude: pairs.map(([k, v]) => `SET LOCAL ${k} = '${v}';`).join(' '),
|
|
56
|
+
};
|
|
57
|
+
}
|
|
20
58
|
export class PostgresAdapter {
|
|
21
59
|
dialect = 'postgres';
|
|
22
60
|
capabilities = { ...POSTGRES_CAPABILITIES };
|
|
23
61
|
role;
|
|
24
62
|
#pool = null;
|
|
25
63
|
#closed = false;
|
|
64
|
+
/** Rebuild inputs for the pooler fallback — see {@link PostgresAdapter.connect}. */
|
|
65
|
+
#poolConfig = null;
|
|
66
|
+
/** The `-c …` string sent in the startup packet, or null once we stop trying. */
|
|
67
|
+
#startupOptions = null;
|
|
68
|
+
/** `SET LOCAL` prelude used instead of startup options on a pooled connection. */
|
|
69
|
+
#sessionPrelude = '';
|
|
26
70
|
constructor(role) {
|
|
27
71
|
this.role = role;
|
|
28
72
|
}
|
|
@@ -47,21 +91,37 @@ export class PostgresAdapter {
|
|
|
47
91
|
// `options` overrides any `options=` in the user DSN (rare), and
|
|
48
92
|
// transaction-pooling pgbouncer rejects startup options (the previous
|
|
49
93
|
// per-connection SET was equally broken there).
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
94
|
+
//
|
|
95
|
+
// …EXCEPT ON A CONNECTION POOLER, which refuses the startup packet outright
|
|
96
|
+
// (see POOLER_REJECTS_STARTUP_OPTIONS). That is not an edge case: it is the
|
|
97
|
+
// connection string Neon shows first, so this path failing meant Adminium
|
|
98
|
+
// could not read a Neon database at all. `#query` therefore falls back on
|
|
99
|
+
// the first rejection — rebuilding the pool without `options` and moving the
|
|
100
|
+
// same settings into a `SET LOCAL` prelude (see {@link buildSessionSettings}).
|
|
101
|
+
const settings = buildSessionSettings(statementTimeoutMs, this.role === 'introspect');
|
|
102
|
+
this.#poolConfig = {
|
|
55
103
|
connectionString: config.dsn,
|
|
56
104
|
max: config.poolMax ?? (this.role === 'introspect' ? INTROSPECT_POOL_MAX : DATA_POOL_MAX),
|
|
57
|
-
|
|
105
|
+
};
|
|
106
|
+
this.#startupOptions = settings.startupOptions;
|
|
107
|
+
this.#sessionPrelude = settings.prelude;
|
|
108
|
+
this.#pool = this.#buildPool();
|
|
109
|
+
this.#closed = false;
|
|
110
|
+
}
|
|
111
|
+
/** Open a pool, with the startup options only while {@link #startupOptions} stands. */
|
|
112
|
+
#buildPool() {
|
|
113
|
+
if (this.#poolConfig === null) {
|
|
114
|
+
throw new AdapterError('UNKNOWN', 'adapter is not connected — call connect() first');
|
|
115
|
+
}
|
|
116
|
+
const pool = new pg.Pool({
|
|
117
|
+
...this.#poolConfig,
|
|
118
|
+
...(this.#startupOptions === null ? {} : { options: this.#startupOptions }),
|
|
58
119
|
});
|
|
59
120
|
// Surface idle-client failures as pool-level noise, not process crashes.
|
|
60
121
|
pool.on('error', () => {
|
|
61
122
|
/* mapped when the next query fails */
|
|
62
123
|
});
|
|
63
|
-
|
|
64
|
-
this.#closed = false;
|
|
124
|
+
return pool;
|
|
65
125
|
}
|
|
66
126
|
#requirePool() {
|
|
67
127
|
if (this.#pool === null || this.#closed) {
|
|
@@ -70,15 +130,49 @@ export class PostgresAdapter {
|
|
|
70
130
|
return this.#pool;
|
|
71
131
|
}
|
|
72
132
|
async #query(sql) {
|
|
73
|
-
const pool = this.#requirePool();
|
|
74
133
|
try {
|
|
75
|
-
|
|
76
|
-
return result.rows;
|
|
134
|
+
return await this.#run(sql);
|
|
77
135
|
}
|
|
78
136
|
catch (error) {
|
|
137
|
+
// One-time downgrade: the server refused the startup packet, so this is a
|
|
138
|
+
// pooler. Rebuild without `options` and carry the same settings per query
|
|
139
|
+
// instead. Retried once, and only while #startupOptions is still set, so
|
|
140
|
+
// a genuinely broken connection cannot loop.
|
|
141
|
+
if (this.#startupOptions !== null && isPoolerStartupRejection(error)) {
|
|
142
|
+
const stale = this.#pool;
|
|
143
|
+
this.#startupOptions = null;
|
|
144
|
+
this.#pool = this.#buildPool();
|
|
145
|
+
// Best-effort: the stale pool never completed a connection.
|
|
146
|
+
await stale?.end().catch(() => undefined);
|
|
147
|
+
try {
|
|
148
|
+
return await this.#run(sql);
|
|
149
|
+
}
|
|
150
|
+
catch (retryError) {
|
|
151
|
+
throw toAdapterError(retryError, 'postgres query failed');
|
|
152
|
+
}
|
|
153
|
+
}
|
|
79
154
|
throw toAdapterError(error, 'postgres query failed');
|
|
80
155
|
}
|
|
81
156
|
}
|
|
157
|
+
/**
|
|
158
|
+
* Run one statement, prefixed with the `SET LOCAL` prelude when the startup
|
|
159
|
+
* packet was refused.
|
|
160
|
+
*
|
|
161
|
+
* `SET LOCAL` is correct precisely BECAUSE the prelude and the statement go
|
|
162
|
+
* out as one simple-query message: Postgres wraps a multi-statement simple
|
|
163
|
+
* query in an implicit transaction, so the setting is scoped to this batch
|
|
164
|
+
* and cannot leak onto a backend that a transaction-pooling proxy hands to
|
|
165
|
+
* somebody else. A bare `SET` would leak; a separate round trip would race
|
|
166
|
+
* the pool's hand-off, which is what the startup packet avoided originally.
|
|
167
|
+
*/
|
|
168
|
+
async #run(sql) {
|
|
169
|
+
const pool = this.#requirePool();
|
|
170
|
+
const usePrelude = this.#startupOptions === null && this.#sessionPrelude !== '';
|
|
171
|
+
const result = await pool.query(usePrelude ? `${this.#sessionPrelude} ${sql}` : sql);
|
|
172
|
+
// A multi-statement query yields one Result per statement; ours is the last.
|
|
173
|
+
const rows = Array.isArray(result) ? (result.at(-1)?.rows ?? []) : result.rows;
|
|
174
|
+
return rows;
|
|
175
|
+
}
|
|
82
176
|
async #probe() {
|
|
83
177
|
const rows = await this.#query(PROBE_SQL);
|
|
84
178
|
return interpretProbe(rows[0] ?? {});
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,OAAO,EACL,YAAY,EACZ,eAAe,EACf,eAAe,GAsBhB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EACL,cAAc,EACd,kBAAkB,EAClB,qBAAqB,EACrB,SAAS,GAGV,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAElD,MAAM,mBAAmB,GAAG,CAAC,CAAC;AAC9B,MAAM,aAAa,GAAG,EAAE,CAAC;AACzB,MAAM,4BAA4B,GAAG,MAAM,CAAC;AAE5C,MAAM,OAAO,eAAe;IAGjB,OAAO,GAAY,UAAU,CAAC;IAC9B,YAAY,GAAG,EAAE,GAAG,qBAAqB,EAAE,CAAC;IAC5C,IAAI,CAAO;IAEpB,KAAK,GAAmB,IAAI,CAAC;IAC7B,OAAO,GAAG,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/introspect.d.ts
CHANGED
|
@@ -27,7 +27,7 @@ export interface IntrospectContext {
|
|
|
27
27
|
*/
|
|
28
28
|
export declare const POSTGRES_CAPABILITIES: AdapterCapabilities;
|
|
29
29
|
/**
|
|
30
|
-
* Session probe. Read-only detection per the M3
|
|
30
|
+
* Session probe. Read-only detection per the M3 spec: recovery mode
|
|
31
31
|
* (`pg_is_in_recovery()`), the session default
|
|
32
32
|
* (`default_transaction_read_only`), or the role lacking CREATE on the
|
|
33
33
|
* database (`has_database_privilege`).
|
package/dist/introspect.js
CHANGED
|
@@ -21,7 +21,7 @@ export const POSTGRES_CAPABILITIES = {
|
|
|
21
21
|
...ENGINE_CAPABILITY_MATRIX.postgres,
|
|
22
22
|
};
|
|
23
23
|
/**
|
|
24
|
-
* Session probe. Read-only detection per the M3
|
|
24
|
+
* Session probe. Read-only detection per the M3 spec: recovery mode
|
|
25
25
|
* (`pg_is_in_recovery()`), the session default
|
|
26
26
|
* (`default_transaction_read_only`), or the role lacking CREATE on the
|
|
27
27
|
* database (`has_database_privilege`).
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@adminiumjs/adapter-postgres",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"license": "AGPL-3.0-only",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
}
|
|
21
21
|
},
|
|
22
22
|
"dependencies": {
|
|
23
|
-
"@adminium/engine": "npm:@adminiumjs/engine@0.1.
|
|
23
|
+
"@adminium/engine": "npm:@adminiumjs/engine@0.1.2",
|
|
24
24
|
"kysely": "^0.28.2",
|
|
25
25
|
"pg": "^8.16.3"
|
|
26
26
|
},
|