@otwdesign/db-core 1.1.0 → 1.2.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/dist/connections.d.ts +4 -3
- package/dist/connections.js +14 -3
- package/dist/connections.js.map +1 -1
- package/dist/drivers/postgres-catalog.d.ts +5 -0
- package/dist/drivers/postgres-catalog.js +10 -0
- package/dist/drivers/postgres-catalog.js.map +1 -1
- package/dist/drivers/postgres.d.ts +6 -0
- package/dist/drivers/postgres.js +36 -1
- package/dist/drivers/postgres.js.map +1 -1
- package/dist/handler.js +105 -23
- package/dist/handler.js.map +1 -1
- package/dist/types.d.ts +30 -0
- package/package.json +2 -2
- package/src/connections.ts +13 -3
- package/src/drivers/postgres-catalog.ts +11 -0
- package/src/drivers/postgres.ts +48 -0
- package/src/handler.ts +116 -23
- package/src/types.ts +31 -0
package/dist/connections.d.ts
CHANGED
|
@@ -2,9 +2,10 @@ import type { ConnectionConfig, DriverKind } from './types.ts';
|
|
|
2
2
|
type Env = Readonly<Record<string, string | undefined>>;
|
|
3
3
|
/**
|
|
4
4
|
* Connections from the environment: `DB_ADMIN_<NAME>_URL`, with `DB_ADMIN_<NAME>_ACCESS`
|
|
5
|
-
* (`read`, the default, or `write`), `DB_ADMIN_<NAME>_LABEL
|
|
6
|
-
* `development`, `testing`, `staging` or `production`)
|
|
7
|
-
*
|
|
5
|
+
* (`read`, the default, or `write`), `DB_ADMIN_<NAME>_LABEL`, `DB_ADMIN_<NAME>_TAG` (`local`,
|
|
6
|
+
* `development`, `testing`, `staging` or `production`) and `DB_ADMIN_<NAME>_DATABASES` (`all`, the
|
|
7
|
+
* default, or `one`: the URL's database only). `DB_ADMIN_SHOP_DATA_URL` becomes the connection
|
|
8
|
+
* `shop-data`. Sorted by name; an empty URL is skipped.
|
|
8
9
|
*/
|
|
9
10
|
export declare function connectionsFromEnv(env?: Env): ConnectionConfig[];
|
|
10
11
|
/** Which driver opens `url`, by its scheme. `source` names where it came from, for the error. */
|
package/dist/connections.js
CHANGED
|
@@ -10,9 +10,10 @@ const SCHEMES = {
|
|
|
10
10
|
};
|
|
11
11
|
/**
|
|
12
12
|
* Connections from the environment: `DB_ADMIN_<NAME>_URL`, with `DB_ADMIN_<NAME>_ACCESS`
|
|
13
|
-
* (`read`, the default, or `write`), `DB_ADMIN_<NAME>_LABEL
|
|
14
|
-
* `development`, `testing`, `staging` or `production`)
|
|
15
|
-
*
|
|
13
|
+
* (`read`, the default, or `write`), `DB_ADMIN_<NAME>_LABEL`, `DB_ADMIN_<NAME>_TAG` (`local`,
|
|
14
|
+
* `development`, `testing`, `staging` or `production`) and `DB_ADMIN_<NAME>_DATABASES` (`all`, the
|
|
15
|
+
* default, or `one`: the URL's database only). `DB_ADMIN_SHOP_DATA_URL` becomes the connection
|
|
16
|
+
* `shop-data`. Sorted by name; an empty URL is skipped.
|
|
16
17
|
*/
|
|
17
18
|
export function connectionsFromEnv(env = process.env) {
|
|
18
19
|
const connections = [];
|
|
@@ -25,12 +26,14 @@ export function connectionsFromEnv(env = process.env) {
|
|
|
25
26
|
driverKind(url, variable);
|
|
26
27
|
const label = env[`${prefix}_LABEL`]?.trim();
|
|
27
28
|
const tag = tagOf(env, `${prefix}_TAG`);
|
|
29
|
+
const databases = databasesOf(env, `${prefix}_DATABASES`);
|
|
28
30
|
connections.push({
|
|
29
31
|
name: match[1].toLowerCase().replaceAll('_', '-'),
|
|
30
32
|
url,
|
|
31
33
|
access: access(env, `${prefix}_ACCESS`),
|
|
32
34
|
...(label ? { label } : {}),
|
|
33
35
|
...(tag ? { tag } : {}),
|
|
36
|
+
...(databases ? { databases } : {}),
|
|
34
37
|
});
|
|
35
38
|
}
|
|
36
39
|
return connections.sort((a, b) => a.name.localeCompare(b.name));
|
|
@@ -41,6 +44,14 @@ function access(env, variable) {
|
|
|
41
44
|
return value;
|
|
42
45
|
throw new Error(`${variable} must be "read" or "write", not "${env[variable]}".`);
|
|
43
46
|
}
|
|
47
|
+
function databasesOf(env, variable) {
|
|
48
|
+
const value = env[variable]?.trim();
|
|
49
|
+
if (!value)
|
|
50
|
+
return undefined;
|
|
51
|
+
if (value === 'all' || value === 'one')
|
|
52
|
+
return value;
|
|
53
|
+
throw new Error(`${variable} must be "all" or "one", not "${env[variable]}".`);
|
|
54
|
+
}
|
|
44
55
|
function tagOf(env, variable) {
|
|
45
56
|
const value = env[variable]?.trim();
|
|
46
57
|
if (!value)
|
package/dist/connections.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connections.js","sourceRoot":"","sources":["../src/connections.ts"],"names":[],"mappings":"AAIA,MAAM,YAAY,GAAG,2CAA2C,CAAA;AAChE,MAAM,IAAI,GAA6B,CAAC,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,CAAC,CAAA;AACnG,MAAM,OAAO,GAA+B;IAC1C,WAAW,EAAE,UAAU;IACvB,aAAa,EAAE,UAAU;IACzB,QAAQ,EAAE,OAAO;IACjB,UAAU,EAAE,OAAO;IACnB,SAAS,EAAE,QAAQ;IACnB,OAAO,EAAE,QAAQ;CAClB,CAAA;AAED
|
|
1
|
+
{"version":3,"file":"connections.js","sourceRoot":"","sources":["../src/connections.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,6 +10,11 @@ export declare const TABLES_SQL = "SELECT n.nspname AS schema, c.relname AS name
|
|
|
10
10
|
/** One table: columns, primary key, indexes and constraints, as JSON. $1 schema, $2 name. */
|
|
11
11
|
export declare const TABLE_SQL = "SELECT n.nspname AS schema, c.relname AS name, c.relkind AS kind, c.reltuples AS estimate,\n CASE WHEN c.relkind IN ('r','m') THEN pg_total_relation_size(c.oid) END AS bytes,\n obj_description(c.oid, 'pg_class') AS comment,\n (SELECT coalesce(json_agg(json_build_object(\n 'name', a.attname, 'type', format_type(a.atttypid, a.atttypmod),\n 'nullable', NOT a.attnotnull, 'default', pg_get_expr(d.adbin, d.adrelid),\n 'identity', a.attidentity, 'generated', a.attgenerated,\n 'comment', col_description(a.attrelid, a.attnum)) ORDER BY a.attnum), '[]')\n FROM pg_attribute a\n LEFT JOIN pg_attrdef d ON d.adrelid = a.attrelid AND d.adnum = a.attnum\n WHERE a.attrelid = c.oid AND a.attnum > 0 AND NOT a.attisdropped) AS columns,\n (SELECT coalesce(json_agg(a.attname ORDER BY k.ord), '[]')\n FROM pg_index i\n CROSS JOIN LATERAL unnest(i.indkey::int2[]) WITH ORDINALITY AS k(attnum, ord)\n JOIN pg_attribute a ON a.attrelid = i.indrelid AND a.attnum = k.attnum\n WHERE i.indrelid = c.oid AND i.indisprimary) AS primary_key,\n (SELECT coalesce(json_agg(json_build_object(\n 'name', ic.relname, 'definition', pg_get_indexdef(i.indexrelid))\n ORDER BY ic.relname), '[]')\n FROM pg_index i JOIN pg_class ic ON ic.oid = i.indexrelid\n WHERE i.indrelid = c.oid) AS indexes,\n (SELECT coalesce(json_agg(json_build_object(\n 'name', conname, 'definition', pg_get_constraintdef(oid), 'type', contype)\n ORDER BY conname), '[]')\n FROM pg_constraint WHERE conrelid = c.oid AND contype IN ('f', 'c')) AS constraints\n FROM pg_class c JOIN pg_namespace n ON n.oid = c.relnamespace\n WHERE n.nspname = $1 AND c.relname = $2 AND c.relkind IN ('r','v','m','f','p')";
|
|
12
12
|
export declare const INFO_SQL = "SELECT current_setting('server_version') AS version, current_database() AS database,\n current_user AS user";
|
|
13
|
+
/**
|
|
14
|
+
* The databases the login may connect to, the current one always among them: no templates, none
|
|
15
|
+
* that refuse connections, none a failed DROP DATABASE left invalid (a connection limit of -2).
|
|
16
|
+
*/
|
|
17
|
+
export declare const DATABASES_SQL = "SELECT datname AS name, datname = current_database() AS current\n FROM pg_database\n WHERE datname = current_database()\n OR (datallowconn AND NOT datistemplate AND datconnlimit <> -2\n AND has_database_privilege(oid, 'CONNECT'))\n ORDER BY lower(datname), datname";
|
|
13
18
|
/** Names for type OIDs: $1 an array of them. */
|
|
14
19
|
export declare const TYPE_NAMES_SQL = "SELECT oid::text AS oid, format_type(oid, NULL) AS name FROM pg_type WHERE oid = ANY($1::oid[])";
|
|
15
20
|
export interface CatalogTable {
|
|
@@ -70,6 +70,16 @@ export const TABLE_SQL = `SELECT n.nspname AS schema, c.relname AS name, c.relki
|
|
|
70
70
|
WHERE n.nspname = $1 AND c.relname = $2 AND c.relkind IN ${RELKINDS}`;
|
|
71
71
|
export const INFO_SQL = `SELECT current_setting('server_version') AS version, current_database() AS database,
|
|
72
72
|
current_user AS user`;
|
|
73
|
+
/**
|
|
74
|
+
* The databases the login may connect to, the current one always among them: no templates, none
|
|
75
|
+
* that refuse connections, none a failed DROP DATABASE left invalid (a connection limit of -2).
|
|
76
|
+
*/
|
|
77
|
+
export const DATABASES_SQL = `SELECT datname AS name, datname = current_database() AS current
|
|
78
|
+
FROM pg_database
|
|
79
|
+
WHERE datname = current_database()
|
|
80
|
+
OR (datallowconn AND NOT datistemplate AND datconnlimit <> -2
|
|
81
|
+
AND has_database_privilege(oid, 'CONNECT'))
|
|
82
|
+
ORDER BY lower(datname), datname`;
|
|
73
83
|
/** Names for type OIDs: $1 an array of them. */
|
|
74
84
|
export const TYPE_NAMES_SQL = 'SELECT oid::text AS oid, format_type(oid, NULL) AS name FROM pg_type WHERE oid = ANY($1::oid[])';
|
|
75
85
|
export function summary(row) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"postgres-catalog.js","sourceRoot":"","sources":["../../src/drivers/postgres-catalog.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"postgres-catalog.js","sourceRoot":"","sources":["../../src/drivers/postgres-catalog.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,6 +14,12 @@ export interface PostgresOptions {
|
|
|
14
14
|
*/
|
|
15
15
|
modules?: PostgresModules;
|
|
16
16
|
}
|
|
17
|
+
/**
|
|
18
|
+
* `url` at another of its server's databases: its path swapped for `database`, its login, host and
|
|
19
|
+
* settings kept. pg reads the path back with decodeURI, which leaves `?` and `#` escaped, so a
|
|
20
|
+
* name with either can't be carried.
|
|
21
|
+
*/
|
|
22
|
+
export declare function postgresUrlAt(url: string, database: string): string;
|
|
17
23
|
/**
|
|
18
24
|
* A PostgreSQL driver for `url`. It connects on first use, with a pool of up to three
|
|
19
25
|
* connections, each closed after 10 s unused; an admin tool needs few.
|
package/dist/drivers/postgres.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { connect } from 'node:net';
|
|
2
2
|
import { ConnectionError, DbAdminError, QueryError } from "../errors.js";
|
|
3
|
-
import { detail, dialect, INFO_SQL, literal, quote, summary, TABLE_SQL, TABLES_SQL, TYPE_NAMES_SQL, versionOf, } from "./postgres-catalog.js";
|
|
3
|
+
import { DATABASES_SQL, detail, dialect, INFO_SQL, literal, quote, summary, TABLE_SQL, TABLES_SQL, TYPE_NAMES_SQL, versionOf, } from "./postgres-catalog.js";
|
|
4
4
|
import { changeStatement, orderBy, Parameters, where, whole } from "./sql.js";
|
|
5
5
|
/** Every value as the server's text: nothing converted, so nothing lost. */
|
|
6
6
|
const AS_TEXT = { getTypeParser: () => (value) => value };
|
|
@@ -48,6 +48,29 @@ async function load(modules, failure) {
|
|
|
48
48
|
}
|
|
49
49
|
return { Pool: PoolClass, Cursor: Cursor };
|
|
50
50
|
}
|
|
51
|
+
/** A placeholder host for a URL with none, as pg's own parser uses: `user@/db?host=/socket`. */
|
|
52
|
+
const NO_HOST = '___otw_db_no_host___';
|
|
53
|
+
/**
|
|
54
|
+
* `url` at another of its server's databases: its path swapped for `database`, its login, host and
|
|
55
|
+
* settings kept. pg reads the path back with decodeURI, which leaves `?` and `#` escaped, so a
|
|
56
|
+
* name with either can't be carried.
|
|
57
|
+
*/
|
|
58
|
+
export function postgresUrlAt(url, database) {
|
|
59
|
+
if (/[?#]/.test(database)) {
|
|
60
|
+
throw new DbAdminError(`The database "${database}" can't be opened: a connection URL can't name a database with ? or #.`, 400, 'bad-database');
|
|
61
|
+
}
|
|
62
|
+
const hostless = url.includes('@/');
|
|
63
|
+
let parsed;
|
|
64
|
+
try {
|
|
65
|
+
parsed = new URL(hostless ? url.replace('@/', `@${NO_HOST}/`) : url);
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
// Not the URL itself, which may hold a password.
|
|
69
|
+
throw new DbAdminError("The connection's URL can't be moved to another database.", 500, 'bad-url');
|
|
70
|
+
}
|
|
71
|
+
parsed.pathname = `/${encodeURI(database)}`;
|
|
72
|
+
return hostless ? parsed.href.replace(`@${NO_HOST}/`, '@/') : parsed.href;
|
|
73
|
+
}
|
|
51
74
|
/**
|
|
52
75
|
* A PostgreSQL driver for `url`. It connects on first use, with a pool of up to three
|
|
53
76
|
* connections, each closed after 10 s unused; an admin tool needs few.
|
|
@@ -59,12 +82,14 @@ class PostgresDriver {
|
|
|
59
82
|
kind = 'postgres';
|
|
60
83
|
capabilities = { schemas: true, transactionalDdl: true, cancel: true };
|
|
61
84
|
sql = { identifier: quote, literal };
|
|
85
|
+
#url;
|
|
62
86
|
#config;
|
|
63
87
|
#modules;
|
|
64
88
|
#pool;
|
|
65
89
|
/** Type names by OID, filled as results bring new ones. */
|
|
66
90
|
#typeNames = new Map();
|
|
67
91
|
constructor(url, modules) {
|
|
92
|
+
this.#url = url;
|
|
68
93
|
this.#modules = modules;
|
|
69
94
|
this.#config = {
|
|
70
95
|
connectionString: url,
|
|
@@ -145,6 +170,16 @@ class PostgresDriver {
|
|
|
145
170
|
query(sql, options) {
|
|
146
171
|
return this.#run(sql, undefined, options);
|
|
147
172
|
}
|
|
173
|
+
async databases() {
|
|
174
|
+
const rows = await this.#catalog(DATABASES_SQL);
|
|
175
|
+
return {
|
|
176
|
+
current: rows.find((row) => row.current === 't')?.name ?? '',
|
|
177
|
+
databases: rows.map((row) => row.name),
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
withDatabase(name) {
|
|
181
|
+
return new PostgresDriver(postgresUrlAt(this.#url, name), this.#modules);
|
|
182
|
+
}
|
|
148
183
|
async apply({ schema, table }, changes, { timeoutMs, dryRun = false }) {
|
|
149
184
|
const statements = changes.map((change) => changeStatement(dialect, `${quote(schema)}.${quote(table)}`, change));
|
|
150
185
|
const shown = statements.map((s) => s.shown);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"postgres.js","sourceRoot":"","sources":["../../src/drivers/postgres.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"postgres.js","sourceRoot":"","sources":["../../src/drivers/postgres.ts"],"names":[],"mappings":"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"}
|
package/dist/handler.js
CHANGED
|
@@ -13,6 +13,10 @@ const QUERY_ID = /^[A-Za-z0-9_-]{1,64}$/;
|
|
|
13
13
|
const MAX_FILTERS = 20;
|
|
14
14
|
const MAX_CHANGES = 1_000;
|
|
15
15
|
const MAX_LIST = 1_000;
|
|
16
|
+
/** A connection's other databases kept open at once; the one used longest ago closes first. */
|
|
17
|
+
const MAX_DATABASES = 8;
|
|
18
|
+
/** PostgreSQL's NAMEDATALEN, less its terminator: the longest database name, in bytes. */
|
|
19
|
+
const MAX_DATABASE_NAME = 63;
|
|
16
20
|
const OPERATORS = new Set([
|
|
17
21
|
'=',
|
|
18
22
|
'<>',
|
|
@@ -55,6 +59,8 @@ export function createDbAdmin(options) {
|
|
|
55
59
|
const limits = { ...DEFAULT_LIMITS, ...options.limits };
|
|
56
60
|
const audit = options.audit === false ? undefined : (options.audit ?? logAudit);
|
|
57
61
|
const drivers = new Map();
|
|
62
|
+
/** Each connection's other databases' drivers, the one used last at the end. */
|
|
63
|
+
const others = new Map();
|
|
58
64
|
const running = new Map();
|
|
59
65
|
const open = options.driver ?? openDriver;
|
|
60
66
|
const loadUi = options.ui === false ? undefined : (options.ui ?? defaultUi);
|
|
@@ -67,14 +73,54 @@ export function createDbAdmin(options) {
|
|
|
67
73
|
}
|
|
68
74
|
return found;
|
|
69
75
|
}
|
|
70
|
-
/**
|
|
71
|
-
|
|
76
|
+
/**
|
|
77
|
+
* The driver for one of the connection's other databases. The 8 used last stay open; opening a
|
|
78
|
+
* ninth closes the one used longest ago, so a viewer can't keep pools open without end.
|
|
79
|
+
*/
|
|
80
|
+
function driverAt(connection, database) {
|
|
81
|
+
let open = others.get(connection.name);
|
|
82
|
+
if (!open)
|
|
83
|
+
others.set(connection.name, (open = new Map()));
|
|
84
|
+
let found = open.get(database);
|
|
85
|
+
if (found)
|
|
86
|
+
open.delete(database);
|
|
87
|
+
else
|
|
88
|
+
found = driver(connection).withDatabase(database);
|
|
89
|
+
open.set(database, found);
|
|
90
|
+
if (open.size > MAX_DATABASES) {
|
|
91
|
+
const [oldest, evicted] = open.entries().next().value;
|
|
92
|
+
open.delete(oldest);
|
|
93
|
+
evicted.close().catch((error) => {
|
|
94
|
+
console.error(`otw-db: could not close database "${oldest}" of "${connection.name}"`, error);
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
return found;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* The connection by name, with this viewer's access to it and the driver for `database`: one of
|
|
101
|
+
* the server's other databases, or the connection's own when none is named. Unknown and hidden
|
|
102
|
+
* connections look the same.
|
|
103
|
+
*/
|
|
104
|
+
function reach(viewer, name, database) {
|
|
72
105
|
const connection = typeof name === 'string' ? connections.get(name) : undefined;
|
|
73
106
|
const access = connection ? accessOf(viewer, connection) : null;
|
|
74
107
|
if (!connection || !access) {
|
|
75
108
|
throw new DbAdminError(`There's no connection "${String(name)}".`, 404, 'unknown-connection');
|
|
76
109
|
}
|
|
77
|
-
|
|
110
|
+
if (database === undefined || database === null || database === '') {
|
|
111
|
+
return { connection, access, db: driver(connection) };
|
|
112
|
+
}
|
|
113
|
+
const named = databaseName(database);
|
|
114
|
+
if (!opensOthers(connection))
|
|
115
|
+
throw oneDatabase(connection);
|
|
116
|
+
return { connection, access, db: driverAt(connection, named), database: named };
|
|
117
|
+
}
|
|
118
|
+
/** Whether the connection may open its server's other databases, and its driver can. */
|
|
119
|
+
function opensOthers(connection) {
|
|
120
|
+
if (connection.databases === 'one')
|
|
121
|
+
return false;
|
|
122
|
+
const opened = driver(connection);
|
|
123
|
+
return typeof opened.databases === 'function' && typeof opened.withDatabase === 'function';
|
|
78
124
|
}
|
|
79
125
|
async function record(event) {
|
|
80
126
|
if (!audit)
|
|
@@ -99,7 +145,10 @@ export function createDbAdmin(options) {
|
|
|
99
145
|
// A kind without a driver yet is listed, but can't be opened.
|
|
100
146
|
let capabilities = null;
|
|
101
147
|
try {
|
|
102
|
-
capabilities =
|
|
148
|
+
capabilities = {
|
|
149
|
+
...driver(connection).capabilities,
|
|
150
|
+
databases: opensOthers(connection),
|
|
151
|
+
};
|
|
103
152
|
}
|
|
104
153
|
catch (error) {
|
|
105
154
|
if (!(error instanceof DbAdminError))
|
|
@@ -113,12 +162,23 @@ export function createDbAdmin(options) {
|
|
|
113
162
|
return { connections: visible };
|
|
114
163
|
},
|
|
115
164
|
},
|
|
165
|
+
{
|
|
166
|
+
method: 'GET',
|
|
167
|
+
path: '/api/databases',
|
|
168
|
+
async run(request, viewer) {
|
|
169
|
+
const { connection, db } = reach(viewer, new URL(request.url).searchParams.get('connection'));
|
|
170
|
+
if (!opensOthers(connection))
|
|
171
|
+
throw oneDatabase(connection);
|
|
172
|
+
return await db.databases();
|
|
173
|
+
},
|
|
174
|
+
},
|
|
116
175
|
{
|
|
117
176
|
method: 'GET',
|
|
118
177
|
path: '/api/tables',
|
|
119
178
|
async run(request, viewer) {
|
|
120
|
-
const
|
|
121
|
-
|
|
179
|
+
const params = new URL(request.url).searchParams;
|
|
180
|
+
const { db } = reach(viewer, params.get('connection'), params.get('database'));
|
|
181
|
+
return { tables: await db.tables() };
|
|
122
182
|
},
|
|
123
183
|
},
|
|
124
184
|
{
|
|
@@ -126,8 +186,8 @@ export function createDbAdmin(options) {
|
|
|
126
186
|
path: '/api/table',
|
|
127
187
|
async run(request, viewer) {
|
|
128
188
|
const params = new URL(request.url).searchParams;
|
|
129
|
-
const {
|
|
130
|
-
const table = await
|
|
189
|
+
const { db } = reach(viewer, params.get('connection'), params.get('database'));
|
|
190
|
+
const table = await db.table(text(params.get('schema'), 'schema'), text(params.get('name'), 'name'));
|
|
131
191
|
if (!table)
|
|
132
192
|
throw new DbAdminError("There's no such table.", 404, 'unknown-table');
|
|
133
193
|
return { table };
|
|
@@ -137,8 +197,9 @@ export function createDbAdmin(options) {
|
|
|
137
197
|
method: 'GET',
|
|
138
198
|
path: '/api/info',
|
|
139
199
|
async run(request, viewer) {
|
|
140
|
-
const
|
|
141
|
-
|
|
200
|
+
const params = new URL(request.url).searchParams;
|
|
201
|
+
const { db } = reach(viewer, params.get('connection'), params.get('database'));
|
|
202
|
+
return { info: await db.info() };
|
|
142
203
|
},
|
|
143
204
|
},
|
|
144
205
|
{
|
|
@@ -146,7 +207,7 @@ export function createDbAdmin(options) {
|
|
|
146
207
|
path: '/api/count',
|
|
147
208
|
async run(request, viewer) {
|
|
148
209
|
const body = await json(request);
|
|
149
|
-
const { connection } = reach(viewer, body.connection);
|
|
210
|
+
const { connection, db, database } = reach(viewer, body.connection, body.database);
|
|
150
211
|
const target = {
|
|
151
212
|
schema: text(body.schema, 'schema'),
|
|
152
213
|
table: text(body.table, 'table'),
|
|
@@ -155,13 +216,14 @@ export function createDbAdmin(options) {
|
|
|
155
216
|
const started = performance.now();
|
|
156
217
|
const statement = `count ${target.schema}.${target.table}`;
|
|
157
218
|
try {
|
|
158
|
-
const rows = await
|
|
219
|
+
const rows = await db.count(target, {
|
|
159
220
|
timeoutMs: limits.timeoutMs,
|
|
160
221
|
signal: request.signal,
|
|
161
222
|
});
|
|
162
223
|
await record({
|
|
163
224
|
viewer: viewer.id,
|
|
164
225
|
connection: connection.name,
|
|
226
|
+
...(database ? { database } : {}),
|
|
165
227
|
action: 'count',
|
|
166
228
|
statement,
|
|
167
229
|
durationMs: Math.round(performance.now() - started),
|
|
@@ -173,6 +235,7 @@ export function createDbAdmin(options) {
|
|
|
173
235
|
await record({
|
|
174
236
|
viewer: viewer.id,
|
|
175
237
|
connection: connection.name,
|
|
238
|
+
...(database ? { database } : {}),
|
|
176
239
|
action: 'count',
|
|
177
240
|
statement,
|
|
178
241
|
durationMs: Math.round(performance.now() - started),
|
|
@@ -187,18 +250,19 @@ export function createDbAdmin(options) {
|
|
|
187
250
|
path: '/api/rows',
|
|
188
251
|
async run(request, viewer) {
|
|
189
252
|
const body = await json(request);
|
|
190
|
-
const { connection } = reach(viewer, body.connection);
|
|
253
|
+
const { connection, db, database } = reach(viewer, body.connection, body.database);
|
|
191
254
|
const page = rowsRequest(body);
|
|
192
255
|
const started = performance.now();
|
|
193
256
|
const statement = `${page.schema}.${page.table}`;
|
|
194
257
|
try {
|
|
195
|
-
const result = await
|
|
258
|
+
const result = await db.rows(page, {
|
|
196
259
|
timeoutMs: limits.timeoutMs,
|
|
197
260
|
signal: request.signal,
|
|
198
261
|
});
|
|
199
262
|
await record({
|
|
200
263
|
viewer: viewer.id,
|
|
201
264
|
connection: connection.name,
|
|
265
|
+
...(database ? { database } : {}),
|
|
202
266
|
action: 'rows',
|
|
203
267
|
statement,
|
|
204
268
|
durationMs: result.durationMs,
|
|
@@ -210,6 +274,7 @@ export function createDbAdmin(options) {
|
|
|
210
274
|
await record({
|
|
211
275
|
viewer: viewer.id,
|
|
212
276
|
connection: connection.name,
|
|
277
|
+
...(database ? { database } : {}),
|
|
213
278
|
action: 'rows',
|
|
214
279
|
statement,
|
|
215
280
|
durationMs: Math.round(performance.now() - started),
|
|
@@ -224,7 +289,7 @@ export function createDbAdmin(options) {
|
|
|
224
289
|
path: '/api/query',
|
|
225
290
|
async run(request, viewer) {
|
|
226
291
|
const body = await json(request);
|
|
227
|
-
const { connection, access } = reach(viewer, body.connection);
|
|
292
|
+
const { connection, access, db, database } = reach(viewer, body.connection, body.database);
|
|
228
293
|
const sql = text(body.sql, 'sql');
|
|
229
294
|
const maxRows = body.maxRows === undefined
|
|
230
295
|
? limits.maxRows
|
|
@@ -242,7 +307,7 @@ export function createDbAdmin(options) {
|
|
|
242
307
|
}
|
|
243
308
|
const started = performance.now();
|
|
244
309
|
try {
|
|
245
|
-
const result = await
|
|
310
|
+
const result = await db.query(sql, {
|
|
246
311
|
access,
|
|
247
312
|
maxRows,
|
|
248
313
|
timeoutMs: limits.timeoutMs,
|
|
@@ -251,6 +316,7 @@ export function createDbAdmin(options) {
|
|
|
251
316
|
await record({
|
|
252
317
|
viewer: viewer.id,
|
|
253
318
|
connection: connection.name,
|
|
319
|
+
...(database ? { database } : {}),
|
|
254
320
|
action: 'query',
|
|
255
321
|
statement: sql,
|
|
256
322
|
durationMs: result.durationMs,
|
|
@@ -262,6 +328,7 @@ export function createDbAdmin(options) {
|
|
|
262
328
|
await record({
|
|
263
329
|
viewer: viewer.id,
|
|
264
330
|
connection: connection.name,
|
|
331
|
+
...(database ? { database } : {}),
|
|
265
332
|
action: 'query',
|
|
266
333
|
statement: sql,
|
|
267
334
|
durationMs: Math.round(performance.now() - started),
|
|
@@ -281,7 +348,7 @@ export function createDbAdmin(options) {
|
|
|
281
348
|
path: '/api/apply',
|
|
282
349
|
async run(request, viewer) {
|
|
283
350
|
const body = await json(request);
|
|
284
|
-
const { connection, access } = reach(viewer, body.connection);
|
|
351
|
+
const { connection, access, db, database } = reach(viewer, body.connection, body.database);
|
|
285
352
|
const target = { schema: text(body.schema, 'schema'), table: text(body.table, 'table') };
|
|
286
353
|
const changes = changesOf(body.changes);
|
|
287
354
|
const dryRun = body.dryRun === true;
|
|
@@ -290,7 +357,7 @@ export function createDbAdmin(options) {
|
|
|
290
357
|
}
|
|
291
358
|
const started = performance.now();
|
|
292
359
|
try {
|
|
293
|
-
const result = await
|
|
360
|
+
const result = await db.apply(target, changes, {
|
|
294
361
|
timeoutMs: limits.timeoutMs,
|
|
295
362
|
dryRun,
|
|
296
363
|
});
|
|
@@ -298,6 +365,7 @@ export function createDbAdmin(options) {
|
|
|
298
365
|
await record({
|
|
299
366
|
viewer: viewer.id,
|
|
300
367
|
connection: connection.name,
|
|
368
|
+
...(database ? { database } : {}),
|
|
301
369
|
action: 'apply',
|
|
302
370
|
statement: result.statements.join(';\n'),
|
|
303
371
|
durationMs: Math.round(performance.now() - started),
|
|
@@ -311,6 +379,7 @@ export function createDbAdmin(options) {
|
|
|
311
379
|
await record({
|
|
312
380
|
viewer: viewer.id,
|
|
313
381
|
connection: connection.name,
|
|
382
|
+
...(database ? { database } : {}),
|
|
314
383
|
action: 'apply',
|
|
315
384
|
statement: `${changes.length} changes to ${target.schema}.${target.table}`,
|
|
316
385
|
durationMs: Math.round(performance.now() - started),
|
|
@@ -326,12 +395,11 @@ export function createDbAdmin(options) {
|
|
|
326
395
|
path: '/api/export',
|
|
327
396
|
async run(request, viewer) {
|
|
328
397
|
const body = await json(request);
|
|
329
|
-
const { connection } = reach(viewer, body.connection);
|
|
398
|
+
const { connection, db, database } = reach(viewer, body.connection, body.database);
|
|
330
399
|
const format = formatOf(body.format);
|
|
331
400
|
const page = rowsRequest({ ...body, limit: undefined, offset: undefined });
|
|
332
|
-
const opened = driver(connection);
|
|
333
401
|
const started = performance.now();
|
|
334
|
-
const batches =
|
|
402
|
+
const batches = db.export(page, { timeoutMs: limits.timeoutMs });
|
|
335
403
|
// Read the first batch before answering, so a bad table or filter is a proper error.
|
|
336
404
|
const first = await batches.next();
|
|
337
405
|
let replayed = false;
|
|
@@ -344,9 +412,10 @@ export function createDbAdmin(options) {
|
|
|
344
412
|
},
|
|
345
413
|
return: async () => batches.return(undefined),
|
|
346
414
|
};
|
|
347
|
-
const stream = exportStream(format, replay, page,
|
|
415
|
+
const stream = exportStream(format, replay, page, db.sql, (rows, error) => void record({
|
|
348
416
|
viewer: viewer.id,
|
|
349
417
|
connection: connection.name,
|
|
418
|
+
...(database ? { database } : {}),
|
|
350
419
|
action: 'export',
|
|
351
420
|
statement: `${page.schema}.${page.table} as ${format}`,
|
|
352
421
|
durationMs: Math.round(performance.now() - started),
|
|
@@ -456,8 +525,9 @@ export function createDbAdmin(options) {
|
|
|
456
525
|
return reply(404, { error: { code: 'not-found', message: 'Not found.' } });
|
|
457
526
|
},
|
|
458
527
|
async close() {
|
|
459
|
-
const open = [...drivers.values()];
|
|
528
|
+
const open = [...drivers.values(), ...[...others.values()].flatMap((o) => [...o.values()])];
|
|
460
529
|
drivers.clear();
|
|
530
|
+
others.clear();
|
|
461
531
|
await Promise.all(open.map((d) => d.close()));
|
|
462
532
|
},
|
|
463
533
|
};
|
|
@@ -487,6 +557,18 @@ async function defaultUi() {
|
|
|
487
557
|
const { assets } = (await import('@otwdesign/db-ui'));
|
|
488
558
|
return assets;
|
|
489
559
|
}
|
|
560
|
+
function oneDatabase(connection) {
|
|
561
|
+
return new DbAdminError(`Connection "${connection.name}" opens its own database only.`, 400, 'one-database');
|
|
562
|
+
}
|
|
563
|
+
/** A database's name as PostgreSQL takes it: up to 63 bytes, with no NUL. */
|
|
564
|
+
function databaseName(value) {
|
|
565
|
+
if (typeof value !== 'string' ||
|
|
566
|
+
value.includes('\0') ||
|
|
567
|
+
new TextEncoder().encode(value).length > MAX_DATABASE_NAME) {
|
|
568
|
+
throw bad('"database" is a database’s name.');
|
|
569
|
+
}
|
|
570
|
+
return value;
|
|
571
|
+
}
|
|
490
572
|
function accessOf(viewer, connection) {
|
|
491
573
|
const granted = viewer.access ? viewer.access(connection) : connection.access;
|
|
492
574
|
if (!granted)
|