@conte777/db-view-mcp 1.0.0 → 1.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 (44) hide show
  1. package/dist/config/loader.d.ts +1 -0
  2. package/dist/config/loader.js +25 -1
  3. package/dist/config/loader.js.map +1 -1
  4. package/dist/config/types.d.ts +20 -0
  5. package/dist/config/types.js +5 -0
  6. package/dist/config/types.js.map +1 -1
  7. package/dist/connectors/clickhouse.d.ts +2 -2
  8. package/dist/connectors/clickhouse.js +4 -3
  9. package/dist/connectors/clickhouse.js.map +1 -1
  10. package/dist/connectors/instrumented.d.ts +18 -0
  11. package/dist/connectors/instrumented.js +52 -0
  12. package/dist/connectors/instrumented.js.map +1 -0
  13. package/dist/connectors/interface.d.ts +2 -2
  14. package/dist/connectors/manager.d.ts +6 -0
  15. package/dist/connectors/manager.js +58 -5
  16. package/dist/connectors/manager.js.map +1 -1
  17. package/dist/connectors/postgresql.d.ts +2 -2
  18. package/dist/connectors/postgresql.js +29 -11
  19. package/dist/connectors/postgresql.js.map +1 -1
  20. package/dist/index.js +9 -2
  21. package/dist/index.js.map +1 -1
  22. package/dist/tools/readonly/explain.d.ts +2 -0
  23. package/dist/tools/readonly/explain.js +2 -1
  24. package/dist/tools/readonly/explain.js.map +1 -1
  25. package/dist/tools/readonly/performance.d.ts +1 -2
  26. package/dist/tools/readonly/performance.js +6 -6
  27. package/dist/tools/readonly/performance.js.map +1 -1
  28. package/dist/tools/readonly/schema.d.ts +2 -0
  29. package/dist/tools/readonly/schema.js +2 -1
  30. package/dist/tools/readonly/schema.js.map +1 -1
  31. package/dist/tools/registry.js +2 -2
  32. package/dist/tools/registry.js.map +1 -1
  33. package/dist/tools/write/transaction.d.ts +18 -0
  34. package/dist/tools/write/transaction.js +70 -13
  35. package/dist/tools/write/transaction.js.map +1 -1
  36. package/dist/transport/http.d.ts +1 -0
  37. package/dist/transport/http.js +26 -13
  38. package/dist/transport/http.js.map +1 -1
  39. package/dist/utils/logger.d.ts +15 -0
  40. package/dist/utils/logger.js +52 -0
  41. package/dist/utils/logger.js.map +1 -0
  42. package/dist/utils/sql-validator.js +41 -21
  43. package/dist/utils/sql-validator.js.map +1 -1
  44. package/package.json +5 -2
@@ -1,4 +1,5 @@
1
1
  import { type AppConfig } from "./types.js";
2
+ export declare function resolveEnvVariables(obj: unknown): unknown;
2
3
  export declare function loadConfig(configPath: string): AppConfig;
3
4
  export declare function parseCliArgs(args: string[]): {
4
5
  configPath: string;
@@ -1,11 +1,35 @@
1
1
  import { readFileSync } from "node:fs";
2
2
  import { resolve } from "node:path";
3
3
  import { AppConfigSchema } from "./types.js";
4
+ const ENV_VAR_PATTERN = /\$\{([^}]+)\}/g;
5
+ export function resolveEnvVariables(obj) {
6
+ if (typeof obj === "string") {
7
+ return obj.replace(ENV_VAR_PATTERN, (match, varName) => {
8
+ const value = process.env[varName];
9
+ if (value === undefined) {
10
+ throw new Error(`Environment variable "${varName}" is not defined (referenced as "${match}")`);
11
+ }
12
+ return value;
13
+ });
14
+ }
15
+ if (Array.isArray(obj)) {
16
+ return obj.map((item) => resolveEnvVariables(item));
17
+ }
18
+ if (obj !== null && typeof obj === "object") {
19
+ const result = {};
20
+ for (const [key, value] of Object.entries(obj)) {
21
+ result[key] = resolveEnvVariables(value);
22
+ }
23
+ return result;
24
+ }
25
+ return obj;
26
+ }
4
27
  export function loadConfig(configPath) {
5
28
  const absolutePath = resolve(configPath);
6
29
  const raw = readFileSync(absolutePath, "utf-8");
7
30
  const json = JSON.parse(raw);
8
- return AppConfigSchema.parse(json);
31
+ const resolved = resolveEnvVariables(json);
32
+ return AppConfigSchema.parse(resolved);
9
33
  }
10
34
  export function parseCliArgs(args) {
11
35
  const configIndex = args.indexOf("--config");
@@ -1 +1 @@
1
- {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,eAAe,EAAkB,MAAM,YAAY,CAAC;AAE7D,MAAM,UAAU,UAAU,CAAC,UAAkB;IAC3C,MAAM,YAAY,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IACzC,MAAM,GAAG,GAAG,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IAChD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC7B,OAAO,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAc;IACzC,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC7C,IAAI,WAAW,KAAK,CAAC,CAAC,IAAI,WAAW,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QACzD,MAAM,IAAI,KAAK,CAAC,4EAA4E,CAAC,CAAC;IAChG,CAAC;IAED,MAAM,MAAM,GAAyD;QACnE,UAAU,EAAE,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;KAClC,CAAC;IAEF,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IACnD,IAAI,cAAc,KAAK,CAAC,CAAC,IAAI,cAAc,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QAC9D,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC;QACvC,IAAI,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;YAC1C,MAAM,IAAI,KAAK,CAAC,uBAAuB,KAAK,+BAA+B,CAAC,CAAC;QAC/E,CAAC;QACD,MAAM,CAAC,SAAS,GAAG,KAAK,CAAC;IAC3B,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,eAAe,EAAkB,MAAM,YAAY,CAAC;AAE7D,MAAM,eAAe,GAAG,gBAAgB,CAAC;AAEzC,MAAM,UAAU,mBAAmB,CAAC,GAAY;IAC9C,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5B,OAAO,GAAG,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC,KAAK,EAAE,OAAe,EAAE,EAAE;YAC7D,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACnC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,MAAM,IAAI,KAAK,CAAC,yBAAyB,OAAO,oCAAoC,KAAK,IAAI,CAAC,CAAC;YACjG,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC,CAAC,CAAC;IACL,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC;IACtD,CAAC;IACD,IAAI,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5C,MAAM,MAAM,GAA4B,EAAE,CAAC;QAC3C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YAC/C,MAAM,CAAC,GAAG,CAAC,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;QAC3C,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,UAAkB;IAC3C,MAAM,YAAY,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IACzC,MAAM,GAAG,GAAG,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IAChD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC7B,MAAM,QAAQ,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAC3C,OAAO,eAAe,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAc;IACzC,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC7C,IAAI,WAAW,KAAK,CAAC,CAAC,IAAI,WAAW,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QACzD,MAAM,IAAI,KAAK,CAAC,4EAA4E,CAAC,CAAC;IAChG,CAAC;IAED,MAAM,MAAM,GAAyD;QACnE,UAAU,EAAE,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;KAClC,CAAC;IAEF,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IACnD,IAAI,cAAc,KAAK,CAAC,CAAC,IAAI,cAAc,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QAC9D,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC;QACvC,IAAI,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;YAC1C,MAAM,IAAI,KAAK,CAAC,uBAAuB,KAAK,+BAA+B,CAAC,CAAC;QAC/E,CAAC;QACD,MAAM,CAAC,SAAS,GAAG,KAAK,CAAC;IAC3B,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -8,6 +8,7 @@ declare const PostgresConfigSchema: z.ZodObject<{
8
8
  user: z.ZodString;
9
9
  password: z.ZodDefault<z.ZodString>;
10
10
  ssl: z.ZodOptional<z.ZodBoolean>;
11
+ sslRejectUnauthorized: z.ZodDefault<z.ZodBoolean>;
11
12
  description: z.ZodOptional<z.ZodString>;
12
13
  lazyConnection: z.ZodOptional<z.ZodBoolean>;
13
14
  maxRows: z.ZodOptional<z.ZodNumber>;
@@ -34,6 +35,7 @@ declare const DatabaseConfigSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
34
35
  user: z.ZodString;
35
36
  password: z.ZodDefault<z.ZodString>;
36
37
  ssl: z.ZodOptional<z.ZodBoolean>;
38
+ sslRejectUnauthorized: z.ZodDefault<z.ZodBoolean>;
37
39
  description: z.ZodOptional<z.ZodString>;
38
40
  lazyConnection: z.ZodOptional<z.ZodBoolean>;
39
41
  maxRows: z.ZodOptional<z.ZodNumber>;
@@ -55,12 +57,19 @@ declare const DefaultsSchema: z.ZodObject<{
55
57
  lazyConnection: z.ZodDefault<z.ZodBoolean>;
56
58
  toolsPerDatabase: z.ZodDefault<z.ZodBoolean>;
57
59
  queryTimeout: z.ZodDefault<z.ZodNumber>;
60
+ logLevel: z.ZodDefault<z.ZodEnum<{
61
+ debug: "debug";
62
+ info: "info";
63
+ warn: "warn";
64
+ error: "error";
65
+ }>>;
58
66
  }, z.core.$strip>;
59
67
  declare const HttpTransportConfigSchema: z.ZodObject<{
60
68
  type: z.ZodLiteral<"http">;
61
69
  port: z.ZodDefault<z.ZodNumber>;
62
70
  host: z.ZodDefault<z.ZodString>;
63
71
  stateless: z.ZodDefault<z.ZodBoolean>;
72
+ sessionTimeout: z.ZodDefault<z.ZodNumber>;
64
73
  auth: z.ZodOptional<z.ZodObject<{
65
74
  type: z.ZodLiteral<"bearer">;
66
75
  token: z.ZodString;
@@ -73,6 +82,7 @@ declare const TransportConfigSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
73
82
  port: z.ZodDefault<z.ZodNumber>;
74
83
  host: z.ZodDefault<z.ZodString>;
75
84
  stateless: z.ZodDefault<z.ZodBoolean>;
85
+ sessionTimeout: z.ZodDefault<z.ZodNumber>;
76
86
  auth: z.ZodOptional<z.ZodObject<{
77
87
  type: z.ZodLiteral<"bearer">;
78
88
  token: z.ZodString;
@@ -86,6 +96,7 @@ export declare const AppConfigSchema: z.ZodObject<{
86
96
  port: z.ZodDefault<z.ZodNumber>;
87
97
  host: z.ZodDefault<z.ZodString>;
88
98
  stateless: z.ZodDefault<z.ZodBoolean>;
99
+ sessionTimeout: z.ZodDefault<z.ZodNumber>;
89
100
  auth: z.ZodOptional<z.ZodObject<{
90
101
  type: z.ZodLiteral<"bearer">;
91
102
  token: z.ZodString;
@@ -96,16 +107,24 @@ export declare const AppConfigSchema: z.ZodObject<{
96
107
  lazyConnection: z.ZodDefault<z.ZodBoolean>;
97
108
  toolsPerDatabase: z.ZodDefault<z.ZodBoolean>;
98
109
  queryTimeout: z.ZodDefault<z.ZodNumber>;
110
+ logLevel: z.ZodDefault<z.ZodEnum<{
111
+ debug: "debug";
112
+ info: "info";
113
+ warn: "warn";
114
+ error: "error";
115
+ }>>;
99
116
  }, z.core.$strip>>, z.ZodTransform<{
100
117
  maxRows: number;
101
118
  lazyConnection: boolean;
102
119
  toolsPerDatabase: boolean;
103
120
  queryTimeout: number;
121
+ logLevel: "debug" | "info" | "warn" | "error";
104
122
  }, {
105
123
  maxRows: number;
106
124
  lazyConnection: boolean;
107
125
  toolsPerDatabase: boolean;
108
126
  queryTimeout: number;
127
+ logLevel: "debug" | "info" | "warn" | "error";
109
128
  } | undefined>>;
110
129
  databases: z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
111
130
  id: z.ZodString;
@@ -116,6 +135,7 @@ export declare const AppConfigSchema: z.ZodObject<{
116
135
  user: z.ZodString;
117
136
  password: z.ZodDefault<z.ZodString>;
118
137
  ssl: z.ZodOptional<z.ZodBoolean>;
138
+ sslRejectUnauthorized: z.ZodDefault<z.ZodBoolean>;
119
139
  description: z.ZodOptional<z.ZodString>;
120
140
  lazyConnection: z.ZodOptional<z.ZodBoolean>;
121
141
  maxRows: z.ZodOptional<z.ZodNumber>;
@@ -8,6 +8,7 @@ const PostgresConfigSchema = z.object({
8
8
  user: z.string(),
9
9
  password: z.string().default(""),
10
10
  ssl: z.boolean().optional(),
11
+ sslRejectUnauthorized: z.boolean().default(true),
11
12
  description: z.string().optional(),
12
13
  lazyConnection: z.boolean().optional(),
13
14
  maxRows: z.number().optional(),
@@ -29,17 +30,20 @@ const DatabaseConfigSchema = z.discriminatedUnion("type", [
29
30
  PostgresConfigSchema,
30
31
  ClickHouseConfigSchema,
31
32
  ]);
33
+ const LogLevelSchema = z.enum(["debug", "info", "warn", "error"]);
32
34
  const DefaultsSchema = z.object({
33
35
  maxRows: z.number().default(100),
34
36
  lazyConnection: z.boolean().default(true),
35
37
  toolsPerDatabase: z.boolean().default(false),
36
38
  queryTimeout: z.number().default(30000),
39
+ logLevel: LogLevelSchema.default("info"),
37
40
  });
38
41
  const HttpTransportConfigSchema = z.object({
39
42
  type: z.literal("http"),
40
43
  port: z.number().default(3000),
41
44
  host: z.string().default("127.0.0.1"),
42
45
  stateless: z.boolean().default(false),
46
+ sessionTimeout: z.number().default(30 * 60 * 1000), // 30 minutes
43
47
  auth: z.object({
44
48
  type: z.literal("bearer"),
45
49
  token: z.string(),
@@ -59,6 +63,7 @@ export const AppConfigSchema = z.object({
59
63
  lazyConnection: true,
60
64
  toolsPerDatabase: false,
61
65
  queryTimeout: 30000,
66
+ logLevel: "info",
62
67
  }),
63
68
  databases: z.array(DatabaseConfigSchema).min(1),
64
69
  });
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"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"}
@@ -14,7 +14,7 @@ export declare class ClickHouseConnector implements Connector {
14
14
  execute(sql: string, _params?: string[]): Promise<QueryResult>;
15
15
  listTables(_schema?: string): Promise<TableInfo[]>;
16
16
  describeTable(table: string, _schema?: string): Promise<ColumnInfo[]>;
17
- getSchema(): Promise<string>;
18
- explain(sql: string): Promise<ExplainResult>;
17
+ getSchema(_schema?: string): Promise<string>;
18
+ explain(sql: string, analyze?: boolean): Promise<ExplainResult>;
19
19
  beginTransaction(): Promise<TransactionHandle>;
20
20
  }
@@ -72,7 +72,7 @@ export class ClickHouseConnector {
72
72
  isPrimaryKey: r.is_in_primary_key === 1,
73
73
  }));
74
74
  }
75
- async getSchema() {
75
+ async getSchema(_schema) {
76
76
  const result = await this.getClient().query({
77
77
  query: `SELECT name, create_table_query FROM system.tables WHERE database = currentDatabase()`,
78
78
  format: "JSONEachRow",
@@ -80,9 +80,10 @@ export class ClickHouseConnector {
80
80
  const rows = (await result.json());
81
81
  return rows.map((r) => r.create_table_query).join(";\n\n");
82
82
  }
83
- async explain(sql) {
83
+ async explain(sql, analyze = false) {
84
+ const prefix = analyze ? "EXPLAIN ANALYZE" : "EXPLAIN";
84
85
  const result = await this.getClient().query({
85
- query: `EXPLAIN ${sql}`,
86
+ query: `${prefix} ${sql}`,
86
87
  format: "JSONEachRow",
87
88
  });
88
89
  const rows = (await result.json());
@@ -1 +1 @@
1
- {"version":3,"file":"clickhouse.js","sourceRoot":"","sources":["../../src/connectors/clickhouse.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"clickhouse.js","sourceRoot":"","sources":["../../src/connectors/clickhouse.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { Connector, QueryResult, TableInfo, ColumnInfo, ExplainResult, TransactionHandle } from "./interface.js";
2
+ import type { PerformanceTracker } from "../tools/readonly/performance.js";
3
+ export declare class InstrumentedConnector implements Connector {
4
+ private inner;
5
+ private tracker;
6
+ private dbId;
7
+ readonly type: "postgresql" | "clickhouse";
8
+ constructor(inner: Connector, tracker: PerformanceTracker, dbId: string);
9
+ connect(): Promise<void>;
10
+ disconnect(): Promise<void>;
11
+ query(sql: string, params?: string[], maxRows?: number): Promise<QueryResult>;
12
+ execute(sql: string, params?: string[]): Promise<QueryResult>;
13
+ listTables(schema?: string): Promise<TableInfo[]>;
14
+ describeTable(table: string, schema?: string): Promise<ColumnInfo[]>;
15
+ getSchema(schema?: string): Promise<string>;
16
+ explain(sql: string, analyze?: boolean): Promise<ExplainResult>;
17
+ beginTransaction(): Promise<TransactionHandle>;
18
+ }
@@ -0,0 +1,52 @@
1
+ export class InstrumentedConnector {
2
+ inner;
3
+ tracker;
4
+ dbId;
5
+ type;
6
+ constructor(inner, tracker, dbId) {
7
+ this.inner = inner;
8
+ this.tracker = tracker;
9
+ this.dbId = dbId;
10
+ this.type = inner.type;
11
+ }
12
+ connect() {
13
+ return this.inner.connect();
14
+ }
15
+ disconnect() {
16
+ return this.inner.disconnect();
17
+ }
18
+ async query(sql, params, maxRows) {
19
+ const start = performance.now();
20
+ try {
21
+ return await this.inner.query(sql, params, maxRows);
22
+ }
23
+ finally {
24
+ this.tracker.recordQuery(sql, performance.now() - start, this.dbId);
25
+ }
26
+ }
27
+ async execute(sql, params) {
28
+ const start = performance.now();
29
+ try {
30
+ return await this.inner.execute(sql, params);
31
+ }
32
+ finally {
33
+ this.tracker.recordQuery(sql, performance.now() - start, this.dbId);
34
+ }
35
+ }
36
+ listTables(schema) {
37
+ return this.inner.listTables(schema);
38
+ }
39
+ describeTable(table, schema) {
40
+ return this.inner.describeTable(table, schema);
41
+ }
42
+ getSchema(schema) {
43
+ return this.inner.getSchema(schema);
44
+ }
45
+ explain(sql, analyze) {
46
+ return this.inner.explain(sql, analyze);
47
+ }
48
+ beginTransaction() {
49
+ return this.inner.beginTransaction();
50
+ }
51
+ }
52
+ //# sourceMappingURL=instrumented.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instrumented.js","sourceRoot":"","sources":["../../src/connectors/instrumented.ts"],"names":[],"mappings":"AAUA,MAAM,OAAO,qBAAqB;IAItB;IACA;IACA;IALD,IAAI,CAA8B;IAE3C,YACU,KAAgB,EAChB,OAA2B,EAC3B,IAAY;QAFZ,UAAK,GAAL,KAAK,CAAW;QAChB,YAAO,GAAP,OAAO,CAAoB;QAC3B,SAAI,GAAJ,IAAI,CAAQ;QAEpB,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;IACzB,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;IAC9B,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,GAAW,EAAE,MAAiB,EAAE,OAAgB;QAC1D,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;QAChC,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QACtD,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QACtE,CAAC;IACH,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,GAAW,EAAE,MAAiB;QAC1C,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;QAChC,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAC/C,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QACtE,CAAC;IACH,CAAC;IAED,UAAU,CAAC,MAAe;QACxB,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IACvC,CAAC;IAED,aAAa,CAAC,KAAa,EAAE,MAAe;QAC1C,OAAO,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACjD,CAAC;IAED,SAAS,CAAC,MAAe;QACvB,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IACtC,CAAC;IAED,OAAO,CAAC,GAAW,EAAE,OAAiB;QACpC,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAC1C,CAAC;IAED,gBAAgB;QACd,OAAO,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAC;IACvC,CAAC;CACF"}
@@ -31,7 +31,7 @@ export interface Connector {
31
31
  execute(sql: string, params?: string[]): Promise<QueryResult>;
32
32
  listTables(schema?: string): Promise<TableInfo[]>;
33
33
  describeTable(table: string, schema?: string): Promise<ColumnInfo[]>;
34
- getSchema(): Promise<string>;
35
- explain(sql: string): Promise<ExplainResult>;
34
+ getSchema(schema?: string): Promise<string>;
35
+ explain(sql: string, analyze?: boolean): Promise<ExplainResult>;
36
36
  beginTransaction(): Promise<TransactionHandle>;
37
37
  }
@@ -1,13 +1,19 @@
1
1
  import type { Connector } from "./interface.js";
2
2
  import type { ResolvedDatabaseConfig } from "../config/types.js";
3
+ import { PerformanceTracker } from "../tools/readonly/performance.js";
3
4
  export declare class ConnectorManager {
4
5
  private configs;
5
6
  private connectors;
7
+ private rawConnectors;
8
+ private tracker;
6
9
  constructor(databases: ResolvedDatabaseConfig[]);
7
10
  getDatabaseIds(): string[];
8
11
  getConfig(dbId: string): ResolvedDatabaseConfig | undefined;
9
12
  getAllConfigs(): ResolvedDatabaseConfig[];
13
+ getPerformanceTracker(): PerformanceTracker;
10
14
  getConnector(dbId: string): Promise<Connector>;
15
+ withConnector<T>(dbId: string, fn: (connector: Connector) => Promise<T>): Promise<T>;
16
+ invalidateConnector(dbId: string): void;
11
17
  private createConnector;
12
18
  connectEager(): Promise<void>;
13
19
  disconnectAll(): Promise<void>;
@@ -1,8 +1,31 @@
1
1
  import { PostgresConnector } from "./postgresql.js";
2
2
  import { ClickHouseConnector } from "./clickhouse.js";
3
+ import { InstrumentedConnector } from "./instrumented.js";
4
+ import { PerformanceTracker } from "../tools/readonly/performance.js";
5
+ import { getLogger } from "../utils/logger.js";
6
+ const CONNECTION_ERROR_CODES = new Set([
7
+ "ECONNREFUSED",
8
+ "ECONNRESET",
9
+ "EPIPE",
10
+ "ETIMEDOUT",
11
+ ]);
12
+ function isConnectionError(err) {
13
+ if (err instanceof Error) {
14
+ const code = err.code;
15
+ if (code && CONNECTION_ERROR_CODES.has(code))
16
+ return true;
17
+ if (err.message.includes("Connection terminated"))
18
+ return true;
19
+ if (err.message.includes("connection refused"))
20
+ return true;
21
+ }
22
+ return false;
23
+ }
3
24
  export class ConnectorManager {
4
25
  configs = new Map();
5
26
  connectors = new Map();
27
+ rawConnectors = new Map();
28
+ tracker = new PerformanceTracker();
6
29
  constructor(databases) {
7
30
  for (const db of databases) {
8
31
  this.configs.set(db.id, db);
@@ -17,6 +40,9 @@ export class ConnectorManager {
17
40
  getAllConfigs() {
18
41
  return Array.from(this.configs.values());
19
42
  }
43
+ getPerformanceTracker() {
44
+ return this.tracker;
45
+ }
20
46
  async getConnector(dbId) {
21
47
  const existing = this.connectors.get(dbId);
22
48
  if (existing)
@@ -24,10 +50,36 @@ export class ConnectorManager {
24
50
  const config = this.configs.get(dbId);
25
51
  if (!config)
26
52
  throw new Error(`Unknown database: ${dbId}`);
27
- const connector = this.createConnector(config);
28
- await connector.connect();
29
- this.connectors.set(dbId, connector);
30
- return connector;
53
+ const raw = this.createConnector(config);
54
+ await raw.connect();
55
+ this.rawConnectors.set(dbId, raw);
56
+ const instrumented = new InstrumentedConnector(raw, this.tracker, dbId);
57
+ this.connectors.set(dbId, instrumented);
58
+ return instrumented;
59
+ }
60
+ async withConnector(dbId, fn) {
61
+ const connector = await this.getConnector(dbId);
62
+ try {
63
+ return await fn(connector);
64
+ }
65
+ catch (err) {
66
+ if (isConnectionError(err)) {
67
+ const logger = getLogger();
68
+ logger.warn("Connection error, retrying", { database: dbId, error: String(err) });
69
+ this.invalidateConnector(dbId);
70
+ const retryConnector = await this.getConnector(dbId);
71
+ return await fn(retryConnector);
72
+ }
73
+ throw err;
74
+ }
75
+ }
76
+ invalidateConnector(dbId) {
77
+ const raw = this.rawConnectors.get(dbId);
78
+ if (raw) {
79
+ raw.disconnect().catch(() => { });
80
+ this.rawConnectors.delete(dbId);
81
+ }
82
+ this.connectors.delete(dbId);
31
83
  }
32
84
  createConnector(config) {
33
85
  if (config.type === "postgresql") {
@@ -43,9 +95,10 @@ export class ConnectorManager {
43
95
  await Promise.all(eagerDbs.map((db) => this.getConnector(db.id)));
44
96
  }
45
97
  async disconnectAll() {
46
- const tasks = Array.from(this.connectors.values()).map((c) => c.disconnect());
98
+ const tasks = Array.from(this.rawConnectors.values()).map((c) => c.disconnect());
47
99
  await Promise.all(tasks);
48
100
  this.connectors.clear();
101
+ this.rawConnectors.clear();
49
102
  }
50
103
  }
51
104
  //# sourceMappingURL=manager.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/connectors/manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/connectors/manager.ts"],"names":[],"mappings":"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"}
@@ -14,7 +14,7 @@ export declare class PostgresConnector implements Connector {
14
14
  execute(sql: string, params?: string[]): Promise<QueryResult>;
15
15
  listTables(schema?: string): Promise<TableInfo[]>;
16
16
  describeTable(table: string, schema?: string): Promise<ColumnInfo[]>;
17
- getSchema(): Promise<string>;
18
- explain(sql: string): Promise<ExplainResult>;
17
+ getSchema(schema?: string): Promise<string>;
18
+ explain(sql: string, analyze?: boolean): Promise<ExplainResult>;
19
19
  beginTransaction(): Promise<TransactionHandle>;
20
20
  }
@@ -18,8 +18,10 @@ export class PostgresConnector {
18
18
  database: this.config.database,
19
19
  user: this.config.user,
20
20
  password: this.config.password,
21
- ssl: this.config.ssl ? { rejectUnauthorized: false } : undefined,
21
+ ssl: this.config.ssl ? { rejectUnauthorized: this.config.sslRejectUnauthorized } : undefined,
22
22
  max: 10,
23
+ statement_timeout: this.queryTimeout,
24
+ query_timeout: this.queryTimeout,
23
25
  });
24
26
  // Verify connection
25
27
  const client = await this.pool.connect();
@@ -87,11 +89,12 @@ export class PostgresConnector {
87
89
  isPrimaryKey: r.is_primary_key,
88
90
  }));
89
91
  }
90
- async getSchema() {
92
+ async getSchema(schema) {
93
+ const s = schema ?? "public";
91
94
  const result = await this.getPool().query(`SELECT table_name, column_name, data_type, is_nullable, column_default
92
95
  FROM information_schema.columns
93
- WHERE table_schema = 'public'
94
- ORDER BY table_name, ordinal_position`);
96
+ WHERE table_schema = $1
97
+ ORDER BY table_name, ordinal_position`, [s]);
95
98
  const tables = new Map();
96
99
  for (const row of result.rows) {
97
100
  const t = row.table_name;
@@ -109,14 +112,21 @@ export class PostgresConnector {
109
112
  }
110
113
  return lines.join("\n");
111
114
  }
112
- async explain(sql) {
113
- const result = await this.getPool().query(`EXPLAIN ANALYZE ${sql}`);
115
+ async explain(sql, analyze = false) {
116
+ const prefix = analyze ? "EXPLAIN ANALYZE" : "EXPLAIN";
117
+ const result = await this.getPool().query(`${prefix} ${sql}`);
114
118
  const plan = result.rows.map((r) => r["QUERY PLAN"]).join("\n");
115
119
  return { plan };
116
120
  }
117
121
  async beginTransaction() {
118
122
  const client = await this.getPool().connect();
119
- await client.query("BEGIN");
123
+ try {
124
+ await client.query("BEGIN");
125
+ }
126
+ catch (err) {
127
+ client.release();
128
+ throw err;
129
+ }
120
130
  const id = randomUUID();
121
131
  return {
122
132
  id,
@@ -125,12 +135,20 @@ export class PostgresConnector {
125
135
  return { rows: result.rows ?? [], rowCount: result.rowCount ?? 0 };
126
136
  },
127
137
  async commit() {
128
- await client.query("COMMIT");
129
- client.release();
138
+ try {
139
+ await client.query("COMMIT");
140
+ }
141
+ finally {
142
+ client.release();
143
+ }
130
144
  },
131
145
  async rollback() {
132
- await client.query("ROLLBACK");
133
- client.release();
146
+ try {
147
+ await client.query("ROLLBACK");
148
+ }
149
+ finally {
150
+ client.release();
151
+ }
134
152
  },
135
153
  };
136
154
  }
@@ -1 +1 @@
1
- {"version":3,"file":"postgresql.js","sourceRoot":"","sources":["../../src/connectors/postgresql.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAWzC,MAAM,OAAO,iBAAiB;IACnB,IAAI,GAAG,YAAqB,CAAC;IAC9B,IAAI,GAAmB,IAAI,CAAC;IAC5B,MAAM,CAAiB;IACvB,YAAY,CAAS;IACrB,OAAO,CAAS;IAExB,YAAY,MAAsB,EAAE,YAAoB,EAAE,OAAe;QACvE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,OAAO;QACX,IAAI,CAAC,IAAI,GAAG,IAAI,EAAE,CAAC,IAAI,CAAC;YACtB,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;YACtB,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;YACtB,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ;YAC9B,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;YACtB,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ;YAC9B,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS;YAChE,GAAG,EAAE,EAAE;SACR,CAAC,CAAC;QACH,oBAAoB;QACpB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QACzC,MAAM,CAAC,OAAO,EAAE,CAAC;IACnB,CAAC;IAED,KAAK,CAAC,UAAU;QACd,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;YACtB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACnB,CAAC;IACH,CAAC;IAEO,OAAO;QACb,IAAI,CAAC,IAAI,CAAC,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;QACjD,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,GAAW,EAAE,MAAiB,EAAE,OAAgB;QAC1D,MAAM,KAAK,GAAG,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC;QACtC,MAAM,UAAU,GAAG,kBAAkB,GAAG,iBAAiB,KAAK,EAAE,CAAC;QACjE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAC9D,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;IAC7D,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,GAAW,EAAE,MAAiB;QAC1C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACvD,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,CAAC,EAAE,CAAC;IACrE,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,MAAe;QAC9B,MAAM,CAAC,GAAG,MAAM,IAAI,QAAQ,CAAC;QAC7B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,CACvC;;;2BAGqB,EACrB,CAAC,CAAC,CAAC,CACJ,CAAC;QACF,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAA0B,EAAE,EAAE,CAAC,CAAC;YACtD,MAAM,EAAE,CAAC,CAAC,YAAsB;YAChC,IAAI,EAAE,CAAC,CAAC,UAAoB;YAC5B,IAAI,EAAG,CAAC,CAAC,UAAqB,KAAK,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM;SACnE,CAAC,CAAC,CAAC;IACN,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,KAAa,EAAE,MAAe;QAChD,MAAM,CAAC,GAAG,MAAM,IAAI,QAAQ,CAAC;QAC7B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,CACvC;;;;;;;;;;;;;;;;;;mCAkB6B,EAC7B,CAAC,KAAK,EAAE,CAAC,CAAC,CACX,CAAC;QACF,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAA0B,EAAE,EAAE,CAAC,CAAC;YACtD,IAAI,EAAE,CAAC,CAAC,WAAqB;YAC7B,IAAI,EAAE,CAAC,CAAC,SAAmB;YAC3B,QAAQ,EAAG,CAAC,CAAC,WAAsB,KAAK,KAAK;YAC7C,YAAY,EAAE,CAAC,CAAC,cAA+B;YAC/C,YAAY,EAAE,CAAC,CAAC,cAAyB;SAC1C,CAAC,CAAC,CAAC;IACN,CAAC;IAED,KAAK,CAAC,SAAS;QACb,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,CACvC;;;6CAGuC,CACxC,CAAC;QACF,MAAM,MAAM,GAAG,IAAI,GAAG,EAAoB,CAAC;QAC3C,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;YAC9B,MAAM,CAAC,GAAG,GAAG,CAAC,UAAoB,CAAC;YACnC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;gBAAE,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACtC,MAAM,QAAQ,GAAI,GAAG,CAAC,WAAsB,KAAK,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC;YAC/E,MAAM,GAAG,GAAG,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,YAAY,GAAG,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACvE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,SAAS,GAAG,QAAQ,GAAG,GAAG,EAAE,CAAC,CAAC;QAChF,CAAC;QACD,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,KAAK,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,MAAM,EAAE,CAAC;YACnC,KAAK,CAAC,IAAI,CAAC,gBAAgB,KAAK,IAAI,CAAC,CAAC;YACtC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;YAC7B,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACrB,CAAC;QACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,GAAW;QACvB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,mBAAmB,GAAG,EAAE,CAAC,CAAC;QACpE,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAA0B,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzF,OAAO,EAAE,IAAI,EAAE,CAAC;IAClB,CAAC;IAED,KAAK,CAAC,gBAAgB;QACpB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,CAAC;QAC9C,MAAM,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC5B,MAAM,EAAE,GAAG,UAAU,EAAE,CAAC;QACxB,OAAO;YACL,EAAE;YACF,KAAK,CAAC,OAAO,CAAC,GAAW,EAAE,MAAiB;gBAC1C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;gBAC/C,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,CAAC,EAAE,CAAC;YACrE,CAAC;YACD,KAAK,CAAC,MAAM;gBACV,MAAM,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;gBAC7B,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,CAAC;YACD,KAAK,CAAC,QAAQ;gBACZ,MAAM,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;gBAC/B,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,CAAC;SACF,CAAC;IACJ,CAAC;CACF"}
1
+ {"version":3,"file":"postgresql.js","sourceRoot":"","sources":["../../src/connectors/postgresql.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -3,18 +3,23 @@ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"
3
3
  import { loadConfig, parseCliArgs } from "./config/loader.js";
4
4
  import { createServer } from "./server.js";
5
5
  import { startHttpTransport } from "./transport/http.js";
6
+ import { initLogger } from "./utils/logger.js";
7
+ import { transactionStore } from "./tools/write/transaction.js";
6
8
  async function main() {
7
9
  const { configPath, transport: cliTransport } = parseCliArgs(process.argv.slice(2));
8
10
  const config = loadConfig(configPath);
11
+ const logger = initLogger(config.defaults.logLevel);
12
+ logger.info("Starting db-view-mcp", { transport: config.transport.type });
9
13
  // CLI --transport overrides config
10
14
  const transportType = cliTransport ?? config.transport.type;
11
15
  if (transportType === "http") {
12
16
  const transportConfig = config.transport.type === "http"
13
17
  ? config.transport
14
- : { type: "http", port: 3000, host: "127.0.0.1", stateless: false };
18
+ : { type: "http", port: 3000, host: "127.0.0.1", stateless: false, sessionTimeout: 30 * 60 * 1000 };
15
19
  const { httpServer, manager } = await startHttpTransport(config, transportConfig);
16
20
  const shutdown = async () => {
17
- console.error("Shutting down HTTP server...");
21
+ logger.info("Shutting down HTTP server...");
22
+ await transactionStore.cleanupAll();
18
23
  httpServer.close();
19
24
  await manager.disconnectAll();
20
25
  process.exit(0);
@@ -27,10 +32,12 @@ async function main() {
27
32
  const transport = new StdioServerTransport();
28
33
  await server.connect(transport);
29
34
  process.on("SIGINT", async () => {
35
+ await transactionStore.cleanupAll();
30
36
  await manager.disconnectAll();
31
37
  process.exit(0);
32
38
  });
33
39
  process.on("SIGTERM", async () => {
40
+ await transactionStore.cleanupAll();
34
41
  await manager.disconnectAll();
35
42
  process.exit(0);
36
43
  });
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAGzD,KAAK,UAAU,IAAI;IACjB,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACpF,MAAM,MAAM,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;IAEtC,mCAAmC;IACnC,MAAM,aAAa,GAAG,YAAY,IAAI,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;IAE5D,IAAI,aAAa,KAAK,MAAM,EAAE,CAAC;QAC7B,MAAM,eAAe,GACnB,MAAM,CAAC,SAAS,CAAC,IAAI,KAAK,MAAM;YAC9B,CAAC,CAAC,MAAM,CAAC,SAAS;YAClB,CAAC,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;QAEjF,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,MAAM,kBAAkB,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;QAElF,MAAM,QAAQ,GAAG,KAAK,IAAI,EAAE;YAC1B,OAAO,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;YAC9C,UAAU,CAAC,KAAK,EAAE,CAAC;YACnB,MAAM,OAAO,CAAC,aAAa,EAAE,CAAC;YAC9B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,CAAC;QAEF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC/B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAClC,CAAC;SAAM,CAAC;QACN,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,YAAY,CAAC,MAAM,CAAC,CAAC;QAEvD,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;QAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAEhC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;YAC9B,MAAM,OAAO,CAAC,aAAa,EAAE,CAAC;YAC9B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,KAAK,IAAI,EAAE;YAC/B,MAAM,OAAO,CAAC,aAAa,EAAE,CAAC;YAC9B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,GAAG,CAAC,CAAC;IACnD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}