admindb 1.2.1 → 2.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 (208) hide show
  1. package/README.md +262 -329
  2. package/dist/app.d.ts +25 -4
  3. package/dist/app.js +79 -15
  4. package/dist/app.js.map +1 -1
  5. package/dist/auth/config.d.ts +19 -0
  6. package/dist/auth/config.js +147 -0
  7. package/dist/auth/config.js.map +1 -0
  8. package/dist/auth/crypto.d.ts +27 -0
  9. package/dist/auth/crypto.js +133 -0
  10. package/dist/auth/crypto.js.map +1 -0
  11. package/dist/auth/index.d.ts +5 -0
  12. package/dist/auth/index.js +22 -0
  13. package/dist/auth/index.js.map +1 -0
  14. package/dist/auth/middleware.d.ts +14 -0
  15. package/dist/auth/middleware.js +100 -0
  16. package/dist/auth/middleware.js.map +1 -0
  17. package/dist/auth/routes.d.ts +7 -0
  18. package/dist/auth/routes.js +78 -0
  19. package/dist/auth/routes.js.map +1 -0
  20. package/dist/auth/types.d.ts +35 -0
  21. package/dist/auth/types.js +11 -0
  22. package/dist/auth/types.js.map +1 -0
  23. package/dist/cli/args.d.ts +45 -0
  24. package/dist/cli/args.js +328 -0
  25. package/dist/cli/args.js.map +1 -0
  26. package/dist/cli/config.d.ts +56 -0
  27. package/dist/cli/config.js +133 -0
  28. package/dist/cli/config.js.map +1 -0
  29. package/dist/cli/index.d.ts +4 -0
  30. package/dist/cli/index.js +21 -0
  31. package/dist/cli/index.js.map +1 -0
  32. package/dist/cli/runner.d.ts +1 -0
  33. package/dist/cli/runner.js +222 -0
  34. package/dist/cli/runner.js.map +1 -0
  35. package/dist/cli.js +2 -127
  36. package/dist/cli.js.map +1 -1
  37. package/dist/data/datasets.d.ts +17 -0
  38. package/dist/data/datasets.js +133 -0
  39. package/dist/data/datasets.js.map +1 -0
  40. package/dist/data/detector.d.ts +30 -0
  41. package/dist/data/detector.js +472 -0
  42. package/dist/data/detector.js.map +1 -0
  43. package/dist/data/engine.d.ts +10 -0
  44. package/dist/data/engine.js +211 -0
  45. package/dist/data/engine.js.map +1 -0
  46. package/dist/data/index.d.ts +5 -0
  47. package/dist/data/index.js +22 -0
  48. package/dist/data/index.js.map +1 -0
  49. package/dist/data/strategies.d.ts +30 -0
  50. package/dist/data/strategies.js +343 -0
  51. package/dist/data/strategies.js.map +1 -0
  52. package/dist/data/types.d.ts +73 -0
  53. package/dist/data/types.js +8 -0
  54. package/dist/data/types.js.map +1 -0
  55. package/dist/db/database.d.ts +14 -146
  56. package/dist/db/database.js +208 -461
  57. package/dist/db/database.js.map +1 -1
  58. package/dist/db/export.d.ts +2 -2
  59. package/dist/db/export.js +7 -2
  60. package/dist/db/export.js.map +1 -1
  61. package/dist/db/filters.d.ts +22 -0
  62. package/dist/db/filters.js +158 -0
  63. package/dist/db/filters.js.map +1 -0
  64. package/dist/db/index.d.ts +8 -0
  65. package/dist/db/index.js +25 -0
  66. package/dist/db/index.js.map +1 -0
  67. package/dist/db/introspection.d.ts +6 -0
  68. package/dist/db/introspection.js +172 -0
  69. package/dist/db/introspection.js.map +1 -0
  70. package/dist/db/manager.d.ts +32 -19
  71. package/dist/db/manager.js +203 -44
  72. package/dist/db/manager.js.map +1 -1
  73. package/dist/db/migrations.d.ts +5 -0
  74. package/dist/db/migrations.js +110 -0
  75. package/dist/db/migrations.js.map +1 -0
  76. package/dist/db/postgres.d.ts +85 -0
  77. package/dist/db/postgres.js +745 -0
  78. package/dist/db/postgres.js.map +1 -0
  79. package/dist/db/types.d.ts +206 -0
  80. package/dist/db/types.js +7 -0
  81. package/dist/db/types.js.map +1 -0
  82. package/dist/index.d.ts +9 -2
  83. package/dist/index.js +46 -4
  84. package/dist/index.js.map +1 -1
  85. package/dist/public/css/app.css +1 -1
  86. package/dist/public/css/input.css +74 -11
  87. package/dist/public/js/app.js +142 -0
  88. package/dist/public/js/browse.js +591 -104
  89. package/dist/public/js/databases.js +105 -13
  90. package/dist/public/js/designer.js +55 -2
  91. package/dist/public/js/forms.js +610 -28
  92. package/dist/public/js/icons.js +51 -0
  93. package/dist/public/js/inspector.js +638 -0
  94. package/dist/public/js/query.js +93 -3
  95. package/dist/public/js/schema.js +185 -52
  96. package/dist/public/js/seed.js +865 -152
  97. package/dist/routes/api/helpers.d.ts +42 -0
  98. package/dist/routes/api/helpers.js +133 -0
  99. package/dist/routes/api/helpers.js.map +1 -0
  100. package/dist/routes/api/import-export.d.ts +3 -0
  101. package/dist/routes/api/import-export.js +85 -0
  102. package/dist/routes/api/import-export.js.map +1 -0
  103. package/dist/routes/api/index.d.ts +4 -0
  104. package/dist/routes/api/index.js +37 -0
  105. package/dist/routes/api/index.js.map +1 -0
  106. package/dist/routes/api/query.d.ts +3 -0
  107. package/dist/routes/api/query.js +76 -0
  108. package/dist/routes/api/query.js.map +1 -0
  109. package/dist/routes/api/rows.d.ts +3 -0
  110. package/dist/routes/api/rows.js +373 -0
  111. package/dist/routes/api/rows.js.map +1 -0
  112. package/dist/routes/api/seed.d.ts +3 -0
  113. package/dist/routes/api/seed.js +82 -0
  114. package/dist/routes/api/seed.js.map +1 -0
  115. package/dist/routes/api/tables.d.ts +3 -0
  116. package/dist/routes/api/tables.js +160 -0
  117. package/dist/routes/api/tables.js.map +1 -0
  118. package/dist/routes/databases.d.ts +8 -11
  119. package/dist/routes/databases.js +100 -66
  120. package/dist/routes/databases.js.map +1 -1
  121. package/dist/routes/index.d.ts +3 -0
  122. package/dist/routes/index.js +20 -0
  123. package/dist/routes/index.js.map +1 -0
  124. package/dist/routes/pages.d.ts +3 -3
  125. package/dist/routes/pages.js +157 -64
  126. package/dist/routes/pages.js.map +1 -1
  127. package/dist/serverless.d.ts +40 -0
  128. package/dist/serverless.js +210 -0
  129. package/dist/serverless.js.map +1 -0
  130. package/dist/sql/generator.d.ts +7 -3
  131. package/dist/sql/generator.js +144 -7
  132. package/dist/sql/generator.js.map +1 -1
  133. package/dist/sql/index.d.ts +2 -0
  134. package/dist/sql/index.js +19 -0
  135. package/dist/sql/index.js.map +1 -0
  136. package/dist/types/api.d.ts +412 -0
  137. package/dist/types/api.js +9 -0
  138. package/dist/types/api.js.map +1 -0
  139. package/dist/utils/colors.d.ts +40 -0
  140. package/dist/utils/colors.js +64 -0
  141. package/dist/utils/colors.js.map +1 -0
  142. package/dist/{util.d.ts → utils/common.d.ts} +10 -6
  143. package/dist/{util.js → utils/common.js} +80 -13
  144. package/dist/utils/common.js.map +1 -0
  145. package/dist/utils/csv.js.map +1 -0
  146. package/dist/utils/datatype.d.ts +49 -0
  147. package/dist/utils/datatype.js +222 -0
  148. package/dist/utils/datatype.js.map +1 -0
  149. package/dist/utils/icons.d.ts +11 -0
  150. package/dist/utils/icons.js +72 -0
  151. package/dist/utils/icons.js.map +1 -0
  152. package/dist/utils/index.d.ts +4 -0
  153. package/dist/utils/index.js +21 -0
  154. package/dist/utils/index.js.map +1 -0
  155. package/dist/{logger.d.ts → utils/logger.d.ts} +1 -1
  156. package/dist/utils/logger.js +40 -0
  157. package/dist/utils/logger.js.map +1 -0
  158. package/dist/views/layouts/main.hbs +40 -11
  159. package/dist/views/pages/databases.hbs +182 -74
  160. package/dist/views/pages/designer.hbs +29 -11
  161. package/dist/views/pages/error.hbs +3 -3
  162. package/dist/views/pages/form.hbs +5 -3
  163. package/dist/views/pages/home.hbs +22 -13
  164. package/dist/views/pages/login.hbs +111 -0
  165. package/dist/views/pages/query.hbs +8 -6
  166. package/dist/views/pages/schema.hbs +41 -13
  167. package/dist/views/pages/seed.hbs +200 -54
  168. package/dist/views/pages/table.hbs +152 -72
  169. package/dist/views/partials/icon.hbs +2 -0
  170. package/dist/views/partials/navbar.hbs +69 -25
  171. package/dist/views/partials/sidebar.hbs +108 -94
  172. package/docs/API.md +144 -0
  173. package/docs/EXAMPLES.md +576 -0
  174. package/docs/SECURITY.md +265 -0
  175. package/package.json +15 -4
  176. package/dist/args.d.ts +0 -28
  177. package/dist/args.js +0 -187
  178. package/dist/args.js.map +0 -1
  179. package/dist/config.d.ts +0 -17
  180. package/dist/config.js +0 -23
  181. package/dist/config.js.map +0 -1
  182. package/dist/csv.js.map +0 -1
  183. package/dist/data/generator.d.ts +0 -86
  184. package/dist/data/generator.js +0 -1031
  185. package/dist/data/generator.js.map +0 -1
  186. package/dist/logger.js +0 -25
  187. package/dist/logger.js.map +0 -1
  188. package/dist/routes/api.d.ts +0 -9
  189. package/dist/routes/api.js +0 -848
  190. package/dist/routes/api.js.map +0 -1
  191. package/dist/test/classifier.test.d.ts +0 -1
  192. package/dist/test/classifier.test.js +0 -44
  193. package/dist/test/classifier.test.js.map +0 -1
  194. package/dist/test/csv.test.d.ts +0 -1
  195. package/dist/test/csv.test.js +0 -64
  196. package/dist/test/csv.test.js.map +0 -1
  197. package/dist/test/database.test.d.ts +0 -1
  198. package/dist/test/database.test.js +0 -402
  199. package/dist/test/database.test.js.map +0 -1
  200. package/dist/test/generator.test.d.ts +0 -1
  201. package/dist/test/generator.test.js +0 -132
  202. package/dist/test/generator.test.js.map +0 -1
  203. package/dist/test/manager.test.d.ts +0 -1
  204. package/dist/test/manager.test.js +0 -146
  205. package/dist/test/manager.test.js.map +0 -1
  206. package/dist/util.js.map +0 -1
  207. /package/dist/{csv.d.ts → utils/csv.d.ts} +0 -0
  208. /package/dist/{csv.js → utils/csv.js} +0 -0
@@ -0,0 +1,160 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerTableRoutes = registerTableRoutes;
4
+ const generator_1 = require("../../sql/generator");
5
+ const helpers_1 = require("./helpers");
6
+ function registerTableRoutes(router, ctx) {
7
+ const { db } = ctx;
8
+ // ---- Tables ------------------------------------------------------------
9
+ router.get('/api/tables', (0, helpers_1.wrap)(async (_req, res) => {
10
+ const r = await db.listTables();
11
+ if (!r.success)
12
+ return (0, helpers_1.fail)(res, r.error ?? 'Failed to list tables.', 500);
13
+ (0, helpers_1.ok)(res, r.data);
14
+ }));
15
+ router.get('/api/tables/:table/info', (0, helpers_1.wrap)(async (req, res) => {
16
+ const info = await (0, helpers_1.requireTable)(db, req.params.table);
17
+ if (!info)
18
+ return (0, helpers_1.fail)(res, `Table "${req.params.table}" does not exist.`, 404);
19
+ (0, helpers_1.ok)(res, info);
20
+ }));
21
+ router.get('/api/tables/:table/fk-options', (0, helpers_1.wrap)(async (req, res) => {
22
+ const info = await (0, helpers_1.requireTable)(db, req.params.table);
23
+ if (!info)
24
+ return (0, helpers_1.fail)(res, `Table "${req.params.table}" does not exist.`, 404);
25
+ const options = {};
26
+ for (const fk of info.foreignKeys) {
27
+ try {
28
+ const refInfo = await (0, helpers_1.requireTable)(db, fk.table);
29
+ if (!refInfo)
30
+ continue;
31
+ const refCol = fk.to || refInfo.primaryKey[0] || refInfo.columns[0]?.name;
32
+ const pk = refInfo.primaryKey[0] ?? refInfo.columns[0]?.name;
33
+ const labelCol = refInfo.columns.find((c) => /name|title|label|username|email/i.test(c.name))?.name ?? pk;
34
+ const rows = await db.getRows(fk.table, { limit: 100, orderBy: labelCol });
35
+ if (rows.success && rows.data) {
36
+ options[fk.from] = rows.data.map((r) => ({
37
+ value: r[refCol],
38
+ label: r[labelCol] != null ? `${r[labelCol]} (${r[refCol]})` : String(r[refCol]),
39
+ }));
40
+ }
41
+ }
42
+ catch {
43
+ // FK option loading is best-effort.
44
+ }
45
+ }
46
+ (0, helpers_1.ok)(res, options);
47
+ }));
48
+ router.get('/api/tables/:table/ddl', (0, helpers_1.wrap)(async (req, res) => {
49
+ const r = await db.getCreateStatement(req.params.table);
50
+ if (!r.success)
51
+ return (0, helpers_1.fail)(res, r.error ?? 'Failed to fetch DDL.', 500);
52
+ if (!r.data)
53
+ return (0, helpers_1.fail)(res, `Table "${req.params.table}" does not exist.`, 404);
54
+ (0, helpers_1.ok)(res, { sql: r.data });
55
+ }));
56
+ router.post('/api/tables/:table/rename', (0, helpers_1.wrap)(async (req, res) => {
57
+ const newName = String(req.body?.name ?? '').trim();
58
+ if (!newName)
59
+ return (0, helpers_1.fail)(res, 'New table name is required.');
60
+ const r = await db.renameTable(req.params.table, newName);
61
+ if (!r.success)
62
+ return (0, helpers_1.fail)(res, r.error ?? 'Failed to rename table.');
63
+ (0, helpers_1.ok)(res, { message: `Table renamed to "${newName}".`, name: newName });
64
+ }));
65
+ router.delete('/api/tables/:table', (0, helpers_1.wrap)(async (req, res) => {
66
+ const r = await db.dropTable(req.params.table);
67
+ if (!r.success)
68
+ return (0, helpers_1.fail)(res, r.error ?? 'Failed to drop table.');
69
+ (0, helpers_1.ok)(res, { message: `Table "${req.params.table}" dropped.` });
70
+ }));
71
+ // Preview generated CREATE TABLE SQL without executing
72
+ router.post('/api/tables/generate', (0, helpers_1.wrap)(async (req, res) => {
73
+ const name = String(req.body?.name ?? '').trim();
74
+ const columns = (req.body?.columns ?? []);
75
+ if (!name)
76
+ return (0, helpers_1.fail)(res, 'Table name is required.');
77
+ if (!Array.isArray(columns) || columns.length === 0)
78
+ return (0, helpers_1.fail)(res, 'At least one column is required.');
79
+ try {
80
+ const sql = (0, generator_1.generateCreateTable)(name, columns);
81
+ (0, helpers_1.ok)(res, { sql });
82
+ }
83
+ catch (err) {
84
+ (0, helpers_1.fail)(res, err.message);
85
+ }
86
+ }));
87
+ const createTableHandler = (0, helpers_1.wrap)(async (req, res) => {
88
+ const name = String(req.body?.name ?? '').trim();
89
+ const columns = (req.body?.columns ?? []);
90
+ if (!name)
91
+ return (0, helpers_1.fail)(res, 'Table name is required.');
92
+ if (!Array.isArray(columns) || columns.length === 0)
93
+ return (0, helpers_1.fail)(res, 'At least one column is required.');
94
+ let sql;
95
+ try {
96
+ sql = (0, generator_1.generateCreateTable)(name, columns);
97
+ }
98
+ catch (err) {
99
+ return (0, helpers_1.fail)(res, err.message);
100
+ }
101
+ const r = await db.execResult(sql);
102
+ if (!r.success)
103
+ return (0, helpers_1.fail)(res, r.error ?? 'Failed to create table.');
104
+ (0, helpers_1.ok)(res, { message: `Table "${name}" created.`, name }, 201);
105
+ });
106
+ router.post('/api/tables', createTableHandler);
107
+ router.post('/api/tables/create', createTableHandler);
108
+ // ---- Columns -----------------------------------------------------------
109
+ router.post('/api/tables/:table/columns', (0, helpers_1.wrap)(async (req, res) => {
110
+ const col = req.body;
111
+ if (!col || !col.name)
112
+ return (0, helpers_1.fail)(res, 'Column name is required.');
113
+ const r = await db.addColumn(req.params.table, col);
114
+ if (!r.success)
115
+ return (0, helpers_1.fail)(res, r.error ?? 'Failed to add column.');
116
+ (0, helpers_1.ok)(res, { message: `Column "${col.name}" added.` }, 201);
117
+ }));
118
+ router.put('/api/tables/:table/columns/:column', (0, helpers_1.wrap)(async (req, res) => {
119
+ const col = req.body;
120
+ if (!col)
121
+ return (0, helpers_1.fail)(res, 'Column definition is required.');
122
+ const r = await db.modifyColumn(req.params.table, req.params.column, col);
123
+ if (!r.success)
124
+ return (0, helpers_1.fail)(res, r.error ?? 'Failed to modify column.');
125
+ (0, helpers_1.ok)(res, { message: `Column "${req.params.column}" updated.` });
126
+ }));
127
+ router.post('/api/tables/:table/columns/:column/rename', (0, helpers_1.wrap)(async (req, res) => {
128
+ const newName = String(req.body?.name ?? '').trim();
129
+ if (!newName)
130
+ return (0, helpers_1.fail)(res, 'New column name is required.');
131
+ const r = await db.renameColumn(req.params.table, req.params.column, newName);
132
+ if (!r.success)
133
+ return (0, helpers_1.fail)(res, r.error ?? 'Failed to rename column.');
134
+ (0, helpers_1.ok)(res, { message: `Column renamed to "${newName}".`, name: newName });
135
+ }));
136
+ router.delete('/api/tables/:table/columns/:column', (0, helpers_1.wrap)(async (req, res) => {
137
+ const r = await db.dropColumn(req.params.table, req.params.column);
138
+ if (!r.success)
139
+ return (0, helpers_1.fail)(res, r.error ?? 'Failed to drop column.');
140
+ (0, helpers_1.ok)(res, { message: `Column "${req.params.column}" dropped.` });
141
+ }));
142
+ // ---- Indexes -----------------------------------------------------------
143
+ router.post('/api/tables/:table/indexes', (0, helpers_1.wrap)(async (req, res) => {
144
+ const def = req.body;
145
+ if (!def || !Array.isArray(def.columns) || def.columns.length === 0) {
146
+ return (0, helpers_1.fail)(res, 'At least one column is required for an index.');
147
+ }
148
+ const r = await db.createIndex(req.params.table, def);
149
+ if (!r.success)
150
+ return (0, helpers_1.fail)(res, r.error ?? 'Failed to create index.');
151
+ (0, helpers_1.ok)(res, { message: 'Index created.' }, 201);
152
+ }));
153
+ router.delete('/api/tables/:table/indexes/:index', (0, helpers_1.wrap)(async (req, res) => {
154
+ const r = await db.dropIndex(req.params.index);
155
+ if (!r.success)
156
+ return (0, helpers_1.fail)(res, r.error ?? 'Failed to drop index.');
157
+ (0, helpers_1.ok)(res, { message: `Index "${req.params.index}" dropped.` });
158
+ }));
159
+ }
160
+ //# sourceMappingURL=tables.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tables.js","sourceRoot":"","sources":["../../../src/routes/api/tables.ts"],"names":[],"mappings":"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"}
@@ -1,23 +1,13 @@
1
1
  import type { Router } from 'express';
2
2
  import type { DbManager, DatabaseEntry } from '../db/manager';
3
- import type { Logger } from '../logger';
3
+ import type { Logger } from '../utils/logger';
4
4
  interface DatabasesContext {
5
5
  manager: DbManager;
6
6
  logger: Logger;
7
7
  basePath: string;
8
- /** Read-only mode: database create/delete are disabled. */
9
8
  readonly?: boolean;
10
- /**
11
- * Show the filesystem file-browser (default `true`). When `false` — e.g. the
12
- * server was started with specific database files — browsing is disabled.
13
- */
14
9
  allowBrowse?: boolean;
15
- /**
16
- * Restrict the file-browser to this folder (absolute). When set, the browser
17
- * cannot navigate above it and only databases inside it can be opened.
18
- */
19
10
  browseRoot?: string;
20
- /** Called before a database is deleted so cached per-db apps are dropped. */
21
11
  invalidate?: (id: string) => void;
22
12
  }
23
13
  export interface DatabaseRow extends DatabaseEntry {
@@ -25,5 +15,12 @@ export interface DatabaseRow extends DatabaseEntry {
25
15
  modifiedLabel: string;
26
16
  tables: number;
27
17
  }
18
+ export interface FsEntry {
19
+ name: string;
20
+ path: string;
21
+ isDir: boolean;
22
+ isDb: boolean;
23
+ size: number;
24
+ }
28
25
  export declare function registerDatabasesRoutes(router: Router, ctx: DatabasesContext): void;
29
26
  export {};
@@ -6,21 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.registerDatabasesRoutes = registerDatabasesRoutes;
7
7
  const node_fs_1 = require("node:fs");
8
8
  const node_path_1 = __importDefault(require("node:path"));
9
- const util_1 = require("../util");
10
- function formatBytes(n) {
11
- if (!Number.isFinite(n) || n <= 0)
12
- return '0 B';
13
- if (n < 1024)
14
- return `${n} B`;
15
- const units = ['KB', 'MB', 'GB', 'TB'];
16
- let v = n;
17
- let u = -1;
18
- do {
19
- v /= 1024;
20
- u += 1;
21
- } while (v >= 1024 && u < units.length - 1);
22
- return `${v.toFixed(1)} ${units[u]}`;
23
- }
9
+ const common_1 = require("../utils/common");
24
10
  function formatDate(iso) {
25
11
  try {
26
12
  return new Date(iso).toLocaleString();
@@ -29,6 +15,17 @@ function formatDate(iso) {
29
15
  return iso;
30
16
  }
31
17
  }
18
+ async function getDatabaseRows(manager) {
19
+ const entries = manager.list();
20
+ return Promise.all(entries.map(async (e) => ({
21
+ ...e,
22
+ isPostgres: e.dialect === 'postgres',
23
+ isSqlite: e.dialect === 'sqlite',
24
+ sizeLabel: e.dialect === 'postgres' ? 'Remote' : (0, common_1.formatBytes)(e.size),
25
+ modifiedLabel: e.dialect === 'postgres' ? 'Connected' : (e.modified ? formatDate(e.modified) : '—'),
26
+ tables: await manager.countTables(e.id),
27
+ })));
28
+ }
32
29
  function registerDatabasesRoutes(router, ctx) {
33
30
  const { manager } = ctx;
34
31
  const allowBrowse = ctx.allowBrowse ?? true;
@@ -38,19 +35,12 @@ function registerDatabasesRoutes(router, ctx) {
38
35
  await fn(req, res);
39
36
  }
40
37
  catch (err) {
41
- res.status(500).json({ success: false, error: (0, util_1.errorMessage)(err) });
38
+ res.status(500).json({ success: false, error: (0, common_1.errorMessage)(err) });
42
39
  }
43
40
  };
44
- // Landing page: list the available databases.
45
41
  router.get('/', async (_req, res, next) => {
46
42
  try {
47
- const entries = manager.list();
48
- const databases = await Promise.all(entries.map(async (e) => ({
49
- ...e,
50
- sizeLabel: formatBytes(e.size),
51
- modifiedLabel: e.modified ? formatDate(e.modified) : '—',
52
- tables: await manager.countTables(e.id),
53
- })));
43
+ const databases = await getDatabaseRows(manager);
54
44
  res.render('pages/databases', {
55
45
  title: 'Databases',
56
46
  databases,
@@ -66,20 +56,27 @@ function registerDatabasesRoutes(router, ctx) {
66
56
  }
67
57
  });
68
58
  router.get('/api/databases', wrap(async (_req, res) => {
69
- const entries = manager.list();
70
- const data = await Promise.all(entries.map(async (e) => ({
71
- ...e,
72
- sizeLabel: formatBytes(e.size),
73
- modifiedLabel: e.modified ? formatDate(e.modified) : '—',
74
- tables: await manager.countTables(e.id),
75
- })));
59
+ const data = await getDatabaseRows(manager);
76
60
  res.json({ success: true, data });
77
61
  }));
62
+ const BLOCKED_NAMES = new Set([
63
+ 'node_modules',
64
+ '.git',
65
+ '.svn',
66
+ '.hg',
67
+ 'System Volume Information',
68
+ '$RECYCLE.BIN',
69
+ '.env',
70
+ '.aws',
71
+ '.ssh',
72
+ ]);
78
73
  function listDirectory(abs) {
79
74
  const entries = [];
80
75
  for (const name of (0, node_fs_1.readdirSync)(abs)) {
81
76
  if (name.startsWith('.'))
82
77
  continue;
78
+ if (BLOCKED_NAMES.has(name) || name.toLowerCase().startsWith('.env'))
79
+ continue;
83
80
  const full = node_path_1.default.join(abs, name);
84
81
  let isDir = false;
85
82
  let size = 0;
@@ -89,47 +86,42 @@ function registerDatabasesRoutes(router, ctx) {
89
86
  size = isDir ? 0 : st.size;
90
87
  }
91
88
  catch {
92
- continue; // unreadable entries are skipped
89
+ continue;
93
90
  }
94
91
  if (!isDir && !manager.isDbFile(name))
95
92
  continue;
93
+ if (browseRoot && !(0, common_1.isPathWithinRoot)(browseRoot, full))
94
+ continue;
96
95
  entries.push({ name, path: full, isDir, isDb: !isDir, size });
97
96
  }
98
- entries.sort((a, b) => a.isDir === b.isDir
99
- ? a.name.localeCompare(b.name, undefined, { sensitivity: 'base' })
100
- : a.isDir
101
- ? -1
102
- : 1);
97
+ entries.sort((a, b) => a.isDir === b.isDir ? a.name.localeCompare(b.name, undefined, { sensitivity: 'base' }) : a.isDir ? -1 : 1);
103
98
  return entries;
104
99
  }
105
- // List subfolders and SQLite database files under a path.
106
100
  router.get('/api/fs/list', wrap(async (req, res) => {
107
101
  if (!allowBrowse) {
108
- return res
109
- .status(403)
110
- .json({ success: false, error: 'File browsing is disabled — this server was started with specific database files.' });
102
+ return res.status(403).json({ success: false, error: 'File browsing is disabled — this server was started with specific database files.' });
111
103
  }
112
104
  const raw = String(req.query.path ?? '').trim();
105
+ if (raw.includes('\0')) {
106
+ return res.status(400).json({ success: false, error: 'Invalid path.' });
107
+ }
113
108
  const base = raw ? node_path_1.default.resolve(raw) : manager.directory;
114
- if (browseRoot && !(0, util_1.isPathWithinRoot)(browseRoot, base)) {
109
+ if (browseRoot && !(0, common_1.isPathWithinRoot)(browseRoot, base)) {
115
110
  return res.status(403).json({ success: false, error: `Path is outside the allowed folder: ${browseRoot}` });
116
111
  }
117
- if (!(0, node_fs_1.existsSync)(base)) {
112
+ if (!(0, node_fs_1.existsSync)(base))
118
113
  return res.status(404).json({ success: false, error: `Path does not exist: ${base}` });
119
- }
120
- if (!(0, node_fs_1.statSync)(base).isDirectory()) {
114
+ if (!(0, node_fs_1.statSync)(base).isDirectory())
121
115
  return res.status(400).json({ success: false, error: `Not a directory: ${base}` });
122
- }
123
116
  let entries;
124
117
  try {
125
118
  entries = listDirectory(base);
126
119
  }
127
120
  catch (err) {
128
- return res.status(400).json({ success: false, error: `Could not list "${base}": ${(0, util_1.errorMessage)(err)}` });
121
+ return res.status(400).json({ success: false, error: `Could not list "${base}": ${(0, common_1.errorMessage)(err)}` });
129
122
  }
130
123
  const parent = node_path_1.default.dirname(base) === base ? null : node_path_1.default.dirname(base);
131
- // Never allow the browser to navigate above the browse root.
132
- const effectiveParent = parent && (!browseRoot || (0, util_1.isPathWithinRoot)(browseRoot, parent)) ? parent : null;
124
+ const effectiveParent = parent && (!browseRoot || (0, common_1.isPathWithinRoot)(browseRoot, parent)) ? parent : null;
133
125
  res.json({
134
126
  success: true,
135
127
  data: {
@@ -140,33 +132,77 @@ function registerDatabasesRoutes(router, ctx) {
140
132
  },
141
133
  });
142
134
  }));
143
- // Open an existing database file and register it with the manager.
144
135
  router.post('/api/databases/open', wrap(async (req, res) => {
145
136
  if (!allowBrowse) {
146
- return res
147
- .status(403)
148
- .json({ success: false, error: 'File browsing is disabled — this server was started with specific database files.' });
137
+ return res.status(403).json({ success: false, error: 'File browsing is disabled — this server was started with specific database files.' });
149
138
  }
150
139
  const p = String(req.body?.path ?? '').trim();
151
- if (!p)
152
- return res.status(400).json({ success: false, error: 'Database path is required.' });
140
+ if (!p || p.includes('\0'))
141
+ return res.status(400).json({ success: false, error: 'Valid database path is required.' });
153
142
  const abs = node_path_1.default.resolve(p);
154
- if (browseRoot && !(0, util_1.isPathWithinRoot)(browseRoot, abs)) {
143
+ if (browseRoot && !(0, common_1.isPathWithinRoot)(browseRoot, abs)) {
155
144
  return res.status(403).json({ success: false, error: `Cannot open a database outside the allowed folder: ${browseRoot}` });
156
145
  }
146
+ const isRo = req.body?.readonly !== undefined ? Boolean(req.body.readonly) : undefined;
157
147
  let id;
158
148
  try {
159
- id = manager.openFile(p);
149
+ id = manager.openFile(p, isRo);
160
150
  }
161
151
  catch (err) {
162
- return res.status(400).json({ success: false, error: (0, util_1.errorMessage)(err) });
152
+ return res.status(400).json({ success: false, error: (0, common_1.errorMessage)(err) });
163
153
  }
164
154
  res.json({ success: true, data: { id, message: `Opened "${id}".` } });
165
155
  }));
156
+ router.post('/api/databases/connect-postgres', wrap(async (req, res) => {
157
+ if (ctx.readonly)
158
+ return res.status(403).json({ success: false, error: 'Read-only mode — adding connections is disabled.' });
159
+ const name = String(req.body?.name ?? '').trim();
160
+ const connectionString = String(req.body?.connectionString ?? req.body?.connection ?? '').trim();
161
+ const isRo = Boolean(req.body?.readonly);
162
+ if (!connectionString) {
163
+ return res.status(400).json({ success: false, error: 'PostgreSQL connection string is required (e.g. postgresql://user:password@localhost:5432/dbname).' });
164
+ }
165
+ if (!connectionString.startsWith('postgres://') && !connectionString.startsWith('postgresql://')) {
166
+ return res.status(400).json({ success: false, error: 'Invalid connection protocol. Connection string must start with postgres:// or postgresql://' });
167
+ }
168
+ let id;
169
+ try {
170
+ id = manager.addConnection(name, connectionString, isRo);
171
+ // Verify the connection works
172
+ const db = manager.open(id);
173
+ await db.listTables();
174
+ }
175
+ catch (err) {
176
+ if (id) {
177
+ manager.remove(id);
178
+ }
179
+ return res.status(400).json({ success: false, error: `Failed to connect to PostgreSQL: ${(0, common_1.errorMessage)(err)}` });
180
+ }
181
+ res.status(201).json({ success: true, data: { id, message: `Connected to PostgreSQL database "${id}".` } });
182
+ }));
183
+ router.post('/api/databases/:id/mode', wrap(async (req, res) => {
184
+ if (ctx.readonly && req.body?.readonly === false) {
185
+ return res.status(403).json({ success: false, error: 'Server is in global read-only mode.' });
186
+ }
187
+ const id = String(req.params.id);
188
+ if (!manager.has(id))
189
+ return res.status(404).json({ success: false, error: `Database "${id}" does not exist.` });
190
+ const targetRo = Boolean(req.body?.readonly);
191
+ manager.setReadonly(id, targetRo);
192
+ if (ctx.invalidate)
193
+ ctx.invalidate(id);
194
+ res.json({
195
+ success: true,
196
+ data: {
197
+ id,
198
+ readonly: targetRo,
199
+ message: `Database "${id}" mode set to ${targetRo ? 'Read-only' : 'Writable'}.`,
200
+ },
201
+ });
202
+ }));
166
203
  router.post('/api/databases', wrap(async (req, res) => {
167
- if (ctx.readonly) {
204
+ if (ctx.readonly)
168
205
  return res.status(403).json({ success: false, error: 'Read-only mode — creating databases is disabled.' });
169
- }
170
206
  const name = String(req.body?.name ?? '').trim();
171
207
  if (!name)
172
208
  return res.status(400).json({ success: false, error: 'Database name is required.' });
@@ -175,22 +211,20 @@ function registerDatabasesRoutes(router, ctx) {
175
211
  id = manager.create(name);
176
212
  }
177
213
  catch (err) {
178
- return res.status(400).json({ success: false, error: (0, util_1.errorMessage)(err) });
214
+ return res.status(400).json({ success: false, error: (0, common_1.errorMessage)(err) });
179
215
  }
180
216
  res.status(201).json({ success: true, data: { id, message: `Database "${id}" created.` } });
181
217
  }));
182
218
  router.delete('/api/databases/:id', wrap(async (req, res) => {
183
- if (ctx.readonly) {
219
+ if (ctx.readonly)
184
220
  return res.status(403).json({ success: false, error: 'Read-only mode — deleting databases is disabled.' });
185
- }
186
221
  const id = String(req.params.id);
187
- if (!manager.has(id)) {
222
+ if (!manager.has(id))
188
223
  return res.status(404).json({ success: false, error: `Database "${id}" does not exist.` });
189
- }
190
224
  if (ctx.invalidate)
191
225
  ctx.invalidate(id);
192
226
  manager.remove(id);
193
- res.json({ success: true, data: { message: `Database "${id}" deleted.` } });
227
+ res.json({ success: true, data: { message: `Database "${id}" removed.` } });
194
228
  }));
195
229
  }
196
230
  //# sourceMappingURL=databases.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"databases.js","sourceRoot":"","sources":["../../src/routes/databases.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"databases.js","sourceRoot":"","sources":["../../src/routes/databases.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export * from './pages';
2
+ export * from './databases';
3
+ export * from './api/index';
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./pages"), exports);
18
+ __exportStar(require("./databases"), exports);
19
+ __exportStar(require("./api/index"), exports);
20
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/routes/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0CAAwB;AACxB,8CAA4B;AAC5B,8CAA4B"}
@@ -1,8 +1,8 @@
1
1
  import type { Router } from 'express';
2
- import type { SqliteDatabase } from '../db/database';
3
- import type { Logger } from '../logger';
2
+ import type { IDatabase } from '../db/index';
3
+ import type { Logger } from '../utils/logger';
4
4
  interface PageContext {
5
- db: SqliteDatabase;
5
+ db: IDatabase;
6
6
  logger: Logger;
7
7
  }
8
8
  export declare function registerPages(router: Router, ctx: PageContext): void;