@connorbritain/mssql-mcp-server 0.3.6 → 0.4.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/index.js +6 -751
- package/dist/index.js.map +1 -1
- package/package.json +2 -5
- package/dist/audit/AuditLogger.d.ts +0 -37
- package/dist/audit/AuditLogger.d.ts.map +0 -1
- package/dist/audit/AuditLogger.js +0 -145
- package/dist/audit/AuditLogger.js.map +0 -1
- package/dist/config/EnvironmentManager.d.ts +0 -75
- package/dist/config/EnvironmentManager.d.ts.map +0 -1
- package/dist/config/EnvironmentManager.js +0 -305
- package/dist/config/EnvironmentManager.js.map +0 -1
- package/dist/config/ScriptManager.d.ts +0 -69
- package/dist/config/ScriptManager.d.ts.map +0 -1
- package/dist/config/ScriptManager.js +0 -166
- package/dist/config/ScriptManager.js.map +0 -1
- package/dist/config/SecretResolver.d.ts +0 -66
- package/dist/config/SecretResolver.d.ts.map +0 -1
- package/dist/config/SecretResolver.js +0 -230
- package/dist/config/SecretResolver.js.map +0 -1
- package/dist/tools/CreateIndexTool.d.ts +0 -24
- package/dist/tools/CreateIndexTool.d.ts.map +0 -1
- package/dist/tools/CreateIndexTool.js +0 -64
- package/dist/tools/CreateIndexTool.js.map +0 -1
- package/dist/tools/CreateTableTool.d.ts +0 -12
- package/dist/tools/CreateTableTool.d.ts.map +0 -1
- package/dist/tools/CreateTableTool.js +0 -49
- package/dist/tools/CreateTableTool.js.map +0 -1
- package/dist/tools/DeleteDataTool.d.ts +0 -56
- package/dist/tools/DeleteDataTool.d.ts.map +0 -1
- package/dist/tools/DeleteDataTool.js +0 -103
- package/dist/tools/DeleteDataTool.js.map +0 -1
- package/dist/tools/DescribeTableTool.d.ts +0 -32
- package/dist/tools/DescribeTableTool.d.ts.map +0 -1
- package/dist/tools/DescribeTableTool.js +0 -108
- package/dist/tools/DescribeTableTool.js.map +0 -1
- package/dist/tools/DropTableTool.d.ts +0 -12
- package/dist/tools/DropTableTool.d.ts.map +0 -1
- package/dist/tools/DropTableTool.js +0 -37
- package/dist/tools/DropTableTool.js.map +0 -1
- package/dist/tools/ExplainQueryTool.d.ts +0 -24
- package/dist/tools/ExplainQueryTool.d.ts.map +0 -1
- package/dist/tools/ExplainQueryTool.js +0 -98
- package/dist/tools/ExplainQueryTool.js.map +0 -1
- package/dist/tools/InsertDataTool.d.ts +0 -17
- package/dist/tools/InsertDataTool.d.ts.map +0 -1
- package/dist/tools/InsertDataTool.js +0 -102
- package/dist/tools/InsertDataTool.js.map +0 -1
- package/dist/tools/InspectDependenciesTool.d.ts +0 -45
- package/dist/tools/InspectDependenciesTool.d.ts.map +0 -1
- package/dist/tools/InspectDependenciesTool.js +0 -215
- package/dist/tools/InspectDependenciesTool.js.map +0 -1
- package/dist/tools/ListDatabasesTool.d.ts +0 -27
- package/dist/tools/ListDatabasesTool.d.ts.map +0 -1
- package/dist/tools/ListDatabasesTool.js +0 -107
- package/dist/tools/ListDatabasesTool.js.map +0 -1
- package/dist/tools/ListEnvironmentsTool.d.ts +0 -49
- package/dist/tools/ListEnvironmentsTool.d.ts.map +0 -1
- package/dist/tools/ListEnvironmentsTool.js +0 -73
- package/dist/tools/ListEnvironmentsTool.js.map +0 -1
- package/dist/tools/ListScriptsTool.d.ts +0 -41
- package/dist/tools/ListScriptsTool.d.ts.map +0 -1
- package/dist/tools/ListScriptsTool.js +0 -86
- package/dist/tools/ListScriptsTool.js.map +0 -1
- package/dist/tools/ListTableTool.d.ts +0 -24
- package/dist/tools/ListTableTool.d.ts.map +0 -1
- package/dist/tools/ListTableTool.js +0 -85
- package/dist/tools/ListTableTool.js.map +0 -1
- package/dist/tools/ProfileTableTool.d.ts +0 -78
- package/dist/tools/ProfileTableTool.d.ts.map +0 -1
- package/dist/tools/ProfileTableTool.js +0 -373
- package/dist/tools/ProfileTableTool.js.map +0 -1
- package/dist/tools/ReadDataTool.d.ts +0 -61
- package/dist/tools/ReadDataTool.d.ts.map +0 -1
- package/dist/tools/ReadDataTool.js +0 -299
- package/dist/tools/ReadDataTool.js.map +0 -1
- package/dist/tools/RelationshipInspectorTool.d.ts +0 -46
- package/dist/tools/RelationshipInspectorTool.d.ts.map +0 -1
- package/dist/tools/RelationshipInspectorTool.js +0 -156
- package/dist/tools/RelationshipInspectorTool.js.map +0 -1
- package/dist/tools/RunScriptTool.d.ts +0 -215
- package/dist/tools/RunScriptTool.d.ts.map +0 -1
- package/dist/tools/RunScriptTool.js +0 -177
- package/dist/tools/RunScriptTool.js.map +0 -1
- package/dist/tools/SearchSchemaTool.d.ts +0 -88
- package/dist/tools/SearchSchemaTool.d.ts.map +0 -1
- package/dist/tools/SearchSchemaTool.js +0 -237
- package/dist/tools/SearchSchemaTool.js.map +0 -1
- package/dist/tools/TestConnectionTool.d.ts +0 -38
- package/dist/tools/TestConnectionTool.d.ts.map +0 -1
- package/dist/tools/TestConnectionTool.js +0 -156
- package/dist/tools/TestConnectionTool.js.map +0 -1
- package/dist/tools/UpdateDataTool.d.ts +0 -61
- package/dist/tools/UpdateDataTool.d.ts.map +0 -1
- package/dist/tools/UpdateDataTool.js +0 -117
- package/dist/tools/UpdateDataTool.js.map +0 -1
- package/dist/tools/ValidateEnvironmentConfigTool.d.ts +0 -51
- package/dist/tools/ValidateEnvironmentConfigTool.d.ts.map +0 -1
- package/dist/tools/ValidateEnvironmentConfigTool.js +0 -320
- package/dist/tools/ValidateEnvironmentConfigTool.js.map +0 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAE/D,cAAc,CAAC;IACb,IAAI,EAAE,kBAAkB;IACxB,OAAO,EAAE,OAAO;IAChB,IAAI,EAAE,OAAO;CACd,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;IACb,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IAC3B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@connorbritain/mssql-mcp-server",
|
|
3
3
|
"mcpName": "io.github.ConnorBritain/mssql",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.4.0",
|
|
5
5
|
"description": "Model Context Protocol (MCP) server for Microsoft SQL Server - enterprise-ready schema discovery, profiling, and safe data operations",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"mcp",
|
|
@@ -43,10 +43,7 @@
|
|
|
43
43
|
"typescript": "^5.4.5"
|
|
44
44
|
},
|
|
45
45
|
"dependencies": {
|
|
46
|
-
"@
|
|
47
|
-
"@modelcontextprotocol/sdk": "^1.23.0",
|
|
48
|
-
"dotenv": "^16.4.5",
|
|
49
|
-
"mssql": "^10.0.1"
|
|
46
|
+
"@connorbritain/mssql-mcp-core": "^0.1.0"
|
|
50
47
|
},
|
|
51
48
|
"type": "module"
|
|
52
49
|
}
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
export type AuditLevel = "none" | "basic" | "verbose";
|
|
2
|
-
export interface AuditLogEntry {
|
|
3
|
-
timestamp: string;
|
|
4
|
-
toolName: string;
|
|
5
|
-
environment?: string;
|
|
6
|
-
arguments?: Record<string, any>;
|
|
7
|
-
result?: {
|
|
8
|
-
success: boolean;
|
|
9
|
-
recordCount?: number;
|
|
10
|
-
error?: string;
|
|
11
|
-
data?: any;
|
|
12
|
-
};
|
|
13
|
-
durationMs?: number;
|
|
14
|
-
sessionId?: string;
|
|
15
|
-
userId?: string;
|
|
16
|
-
}
|
|
17
|
-
export declare class AuditLogger {
|
|
18
|
-
private readonly logFilePath;
|
|
19
|
-
private readonly enabled;
|
|
20
|
-
private readonly redactSensitiveData;
|
|
21
|
-
constructor();
|
|
22
|
-
private ensureLogDirectory;
|
|
23
|
-
private redactArguments;
|
|
24
|
-
log(entry: AuditLogEntry): void;
|
|
25
|
-
logToolInvocation(toolName: string, args: any, result: any, durationMs: number, options?: {
|
|
26
|
-
sessionId?: string;
|
|
27
|
-
userId?: string;
|
|
28
|
-
environment?: string;
|
|
29
|
-
auditLevel?: AuditLevel;
|
|
30
|
-
}): void;
|
|
31
|
-
/**
|
|
32
|
-
* Truncate result data for verbose logging to prevent huge log entries
|
|
33
|
-
*/
|
|
34
|
-
private truncateResultData;
|
|
35
|
-
}
|
|
36
|
-
export declare const auditLogger: AuditLogger;
|
|
37
|
-
//# sourceMappingURL=AuditLogger.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"AuditLogger.d.ts","sourceRoot":"","sources":["../../src/audit/AuditLogger.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;AAEtD,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAChC,MAAM,CAAC,EAAE;QACP,OAAO,EAAE,OAAO,CAAC;QACjB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,IAAI,CAAC,EAAE,GAAG,CAAC;KACZ,CAAC;IACF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;IAClC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAU;;IAoB9C,OAAO,CAAC,kBAAkB;IAS1B,OAAO,CAAC,eAAe;IA6BvB,GAAG,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;IAkB/B,iBAAiB,CACf,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,GAAG,EACT,MAAM,EAAE,GAAG,EACX,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE;QACR,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,UAAU,CAAC,EAAE,UAAU,CAAC;KACzB,GACA,IAAI;IA+CP;;OAEG;IACH,OAAO,CAAC,kBAAkB;CA2B3B;AAGD,eAAO,MAAM,WAAW,aAAoB,CAAC"}
|
|
@@ -1,145 +0,0 @@
|
|
|
1
|
-
import * as fs from "fs";
|
|
2
|
-
import * as path from "path";
|
|
3
|
-
export class AuditLogger {
|
|
4
|
-
constructor() {
|
|
5
|
-
// Read config from env vars
|
|
6
|
-
const logPath = process.env.AUDIT_LOG_PATH;
|
|
7
|
-
this.enabled = process.env.AUDIT_LOGGING !== "false"; // Enabled by default
|
|
8
|
-
this.redactSensitiveData = process.env.AUDIT_REDACT_SENSITIVE !== "false"; // Redact by default
|
|
9
|
-
if (this.enabled && logPath) {
|
|
10
|
-
this.logFilePath = path.resolve(logPath);
|
|
11
|
-
this.ensureLogDirectory();
|
|
12
|
-
}
|
|
13
|
-
else if (this.enabled) {
|
|
14
|
-
// Default to logs/audit.jsonl in the project root
|
|
15
|
-
this.logFilePath = path.resolve(process.cwd(), "logs", "audit.jsonl");
|
|
16
|
-
this.ensureLogDirectory();
|
|
17
|
-
}
|
|
18
|
-
else {
|
|
19
|
-
this.logFilePath = "";
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
ensureLogDirectory() {
|
|
23
|
-
if (!this.logFilePath)
|
|
24
|
-
return;
|
|
25
|
-
const dir = path.dirname(this.logFilePath);
|
|
26
|
-
if (!fs.existsSync(dir)) {
|
|
27
|
-
fs.mkdirSync(dir, { recursive: true });
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
redactArguments(args) {
|
|
31
|
-
if (!this.redactSensitiveData) {
|
|
32
|
-
return args;
|
|
33
|
-
}
|
|
34
|
-
const redacted = { ...args };
|
|
35
|
-
const sensitiveKeys = [
|
|
36
|
-
"password",
|
|
37
|
-
"secret",
|
|
38
|
-
"token",
|
|
39
|
-
"key",
|
|
40
|
-
"authorization",
|
|
41
|
-
"auth",
|
|
42
|
-
"credential",
|
|
43
|
-
];
|
|
44
|
-
for (const [key, value] of Object.entries(redacted)) {
|
|
45
|
-
const lowerKey = key.toLowerCase();
|
|
46
|
-
if (sensitiveKeys.some((sensitive) => lowerKey.includes(sensitive))) {
|
|
47
|
-
redacted[key] = "[REDACTED]";
|
|
48
|
-
}
|
|
49
|
-
else if (typeof value === "string" && value.length > 500) {
|
|
50
|
-
// Truncate very long strings (likely large query results)
|
|
51
|
-
redacted[key] = value.substring(0, 500) + "... [TRUNCATED]";
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
return redacted;
|
|
55
|
-
}
|
|
56
|
-
log(entry) {
|
|
57
|
-
if (!this.enabled || !this.logFilePath) {
|
|
58
|
-
return;
|
|
59
|
-
}
|
|
60
|
-
try {
|
|
61
|
-
const logEntry = {
|
|
62
|
-
...entry,
|
|
63
|
-
arguments: entry.arguments ? this.redactArguments(entry.arguments) : undefined,
|
|
64
|
-
};
|
|
65
|
-
const logLine = JSON.stringify(logEntry) + "\n";
|
|
66
|
-
fs.appendFileSync(this.logFilePath, logLine, { encoding: "utf-8" });
|
|
67
|
-
}
|
|
68
|
-
catch (error) {
|
|
69
|
-
console.error("Failed to write audit log:", error);
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
logToolInvocation(toolName, args, result, durationMs, options) {
|
|
73
|
-
const auditLevel = options?.auditLevel ?? "basic";
|
|
74
|
-
// Skip logging entirely for 'none' level
|
|
75
|
-
if (auditLevel === "none") {
|
|
76
|
-
return;
|
|
77
|
-
}
|
|
78
|
-
// Basic level: minimal info (tool name, success, timing, environment)
|
|
79
|
-
if (auditLevel === "basic") {
|
|
80
|
-
const entry = {
|
|
81
|
-
timestamp: new Date().toISOString(),
|
|
82
|
-
toolName,
|
|
83
|
-
environment: options?.environment,
|
|
84
|
-
result: {
|
|
85
|
-
success: result?.success ?? false,
|
|
86
|
-
recordCount: result?.recordCount ?? result?.rowsAffected,
|
|
87
|
-
error: result?.error,
|
|
88
|
-
},
|
|
89
|
-
durationMs: Math.round(durationMs),
|
|
90
|
-
sessionId: options?.sessionId,
|
|
91
|
-
userId: options?.userId,
|
|
92
|
-
};
|
|
93
|
-
this.log(entry);
|
|
94
|
-
return;
|
|
95
|
-
}
|
|
96
|
-
// Verbose level: full arguments and result data
|
|
97
|
-
const entry = {
|
|
98
|
-
timestamp: new Date().toISOString(),
|
|
99
|
-
toolName,
|
|
100
|
-
environment: options?.environment,
|
|
101
|
-
arguments: args || {},
|
|
102
|
-
result: {
|
|
103
|
-
success: result?.success ?? false,
|
|
104
|
-
recordCount: result?.recordCount ?? result?.rowsAffected,
|
|
105
|
-
error: result?.error,
|
|
106
|
-
data: this.truncateResultData(result?.data),
|
|
107
|
-
},
|
|
108
|
-
durationMs: Math.round(durationMs),
|
|
109
|
-
sessionId: options?.sessionId,
|
|
110
|
-
userId: options?.userId,
|
|
111
|
-
};
|
|
112
|
-
this.log(entry);
|
|
113
|
-
}
|
|
114
|
-
/**
|
|
115
|
-
* Truncate result data for verbose logging to prevent huge log entries
|
|
116
|
-
*/
|
|
117
|
-
truncateResultData(data) {
|
|
118
|
-
if (!data)
|
|
119
|
-
return undefined;
|
|
120
|
-
// If it's an array, limit to first 10 items
|
|
121
|
-
if (Array.isArray(data)) {
|
|
122
|
-
if (data.length > 10) {
|
|
123
|
-
return {
|
|
124
|
-
_truncated: true,
|
|
125
|
-
_totalCount: data.length,
|
|
126
|
-
items: data.slice(0, 10),
|
|
127
|
-
};
|
|
128
|
-
}
|
|
129
|
-
return data;
|
|
130
|
-
}
|
|
131
|
-
// If it's a large object (stringified > 10KB), truncate
|
|
132
|
-
const stringified = JSON.stringify(data);
|
|
133
|
-
if (stringified.length > 10000) {
|
|
134
|
-
return {
|
|
135
|
-
_truncated: true,
|
|
136
|
-
_originalSize: stringified.length,
|
|
137
|
-
preview: stringified.substring(0, 1000) + "...",
|
|
138
|
-
};
|
|
139
|
-
}
|
|
140
|
-
return data;
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
// Singleton instance
|
|
144
|
-
export const auditLogger = new AuditLogger();
|
|
145
|
-
//# sourceMappingURL=AuditLogger.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"AuditLogger.js","sourceRoot":"","sources":["../../src/audit/AuditLogger.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
import sql from "mssql";
|
|
2
|
-
import { SecretResolver, SecretsConfig } from "./SecretResolver.js";
|
|
3
|
-
export type AccessLevel = "server" | "database";
|
|
4
|
-
export type TierLevel = "reader" | "writer" | "admin";
|
|
5
|
-
export type AuditLevel = "none" | "basic" | "verbose";
|
|
6
|
-
export interface EnvironmentConfig {
|
|
7
|
-
name: string;
|
|
8
|
-
description?: string;
|
|
9
|
-
server: string;
|
|
10
|
-
database: string;
|
|
11
|
-
port?: number;
|
|
12
|
-
authMode: "sql" | "windows" | "aad";
|
|
13
|
-
username?: string;
|
|
14
|
-
password?: string;
|
|
15
|
-
domain?: string;
|
|
16
|
-
trustServerCertificate?: boolean;
|
|
17
|
-
connectionTimeout?: number;
|
|
18
|
-
requestTimeout?: number;
|
|
19
|
-
readonly?: boolean;
|
|
20
|
-
allowedTools?: string[];
|
|
21
|
-
deniedTools?: string[];
|
|
22
|
-
maxRowsDefault?: number;
|
|
23
|
-
requireApproval?: boolean;
|
|
24
|
-
auditLevel?: AuditLevel;
|
|
25
|
-
accessLevel?: AccessLevel;
|
|
26
|
-
allowedDatabases?: string[] | "*";
|
|
27
|
-
deniedDatabases?: string[];
|
|
28
|
-
allowedSchemas?: string[];
|
|
29
|
-
deniedSchemas?: string[];
|
|
30
|
-
tier?: TierLevel;
|
|
31
|
-
}
|
|
32
|
-
export interface EnvironmentsConfig {
|
|
33
|
-
defaultEnvironment?: string;
|
|
34
|
-
environments: EnvironmentConfig[];
|
|
35
|
-
scriptsPath?: string;
|
|
36
|
-
secrets?: SecretsConfig;
|
|
37
|
-
}
|
|
38
|
-
export declare class EnvironmentManager {
|
|
39
|
-
private readonly environments;
|
|
40
|
-
private defaultEnvironment?;
|
|
41
|
-
private readonly connections;
|
|
42
|
-
private secretResolver;
|
|
43
|
-
constructor(configPath?: string);
|
|
44
|
-
getSecretResolver(): SecretResolver;
|
|
45
|
-
private loadFromFile;
|
|
46
|
-
private loadFromEnvVars;
|
|
47
|
-
getEnvironment(name?: string): EnvironmentConfig;
|
|
48
|
-
listEnvironments(): EnvironmentConfig[];
|
|
49
|
-
/**
|
|
50
|
-
* Check if the environment allows access to a specific database.
|
|
51
|
-
* For database-level access, only the configured database is allowed.
|
|
52
|
-
* For server-level access, checks allowedDatabases/deniedDatabases.
|
|
53
|
-
*/
|
|
54
|
-
isDatabaseAllowed(environmentName: string | undefined, databaseName: string): {
|
|
55
|
-
allowed: boolean;
|
|
56
|
-
reason?: string;
|
|
57
|
-
};
|
|
58
|
-
/**
|
|
59
|
-
* Check if a schema.table reference is allowed based on allowedSchemas/deniedSchemas.
|
|
60
|
-
* Pattern matching supports wildcards (e.g., "audit.*", "*.sensitive_*")
|
|
61
|
-
*/
|
|
62
|
-
isSchemaAllowed(environmentName: string | undefined, schemaName: string, tableName?: string): {
|
|
63
|
-
allowed: boolean;
|
|
64
|
-
reason?: string;
|
|
65
|
-
};
|
|
66
|
-
/**
|
|
67
|
-
* Simple wildcard pattern matching (supports * as wildcard)
|
|
68
|
-
*/
|
|
69
|
-
private matchesPattern;
|
|
70
|
-
getConnection(environmentName?: string): Promise<sql.ConnectionPool>;
|
|
71
|
-
private createSqlConfig;
|
|
72
|
-
closeAll(): Promise<void>;
|
|
73
|
-
}
|
|
74
|
-
export declare function getEnvironmentManager(): EnvironmentManager;
|
|
75
|
-
//# sourceMappingURL=EnvironmentManager.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"EnvironmentManager.d.ts","sourceRoot":"","sources":["../../src/config/EnvironmentManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,305 +0,0 @@
|
|
|
1
|
-
import * as fs from "fs";
|
|
2
|
-
import * as path from "path";
|
|
3
|
-
import { InteractiveBrowserCredential } from "@azure/identity";
|
|
4
|
-
import sql from "mssql";
|
|
5
|
-
import { createSecretResolver } from "./SecretResolver.js";
|
|
6
|
-
export class EnvironmentManager {
|
|
7
|
-
constructor(configPath) {
|
|
8
|
-
this.environments = new Map();
|
|
9
|
-
this.connections = new Map();
|
|
10
|
-
this.secretResolver = createSecretResolver(); // default: env-only
|
|
11
|
-
// Try to load from config file first
|
|
12
|
-
if (configPath) {
|
|
13
|
-
this.loadFromFile(configPath);
|
|
14
|
-
}
|
|
15
|
-
else {
|
|
16
|
-
// Fall back to environment variables for single environment
|
|
17
|
-
this.loadFromEnvVars();
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
getSecretResolver() {
|
|
21
|
-
return this.secretResolver;
|
|
22
|
-
}
|
|
23
|
-
loadFromFile(configPath) {
|
|
24
|
-
try {
|
|
25
|
-
const resolvedPath = path.resolve(configPath);
|
|
26
|
-
if (!fs.existsSync(resolvedPath)) {
|
|
27
|
-
console.warn(`Environment config file not found at ${resolvedPath}, falling back to env vars`);
|
|
28
|
-
this.loadFromEnvVars();
|
|
29
|
-
return;
|
|
30
|
-
}
|
|
31
|
-
const configContent = fs.readFileSync(resolvedPath, "utf-8");
|
|
32
|
-
const config = JSON.parse(configContent);
|
|
33
|
-
// Build the secret resolver from config or fallback to DOTENV_PATH
|
|
34
|
-
let secretsConfig = config.secrets;
|
|
35
|
-
if (!secretsConfig) {
|
|
36
|
-
const dotenvPath = process.env.DOTENV_PATH;
|
|
37
|
-
if (dotenvPath) {
|
|
38
|
-
secretsConfig = { providers: [{ type: "env" }, { type: "dotenv", path: dotenvPath }] };
|
|
39
|
-
console.log(`Using DOTENV_PATH fallback: ${dotenvPath}`);
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
this.secretResolver = createSecretResolver(secretsConfig);
|
|
43
|
-
this.defaultEnvironment = config.defaultEnvironment;
|
|
44
|
-
for (const env of config.environments) {
|
|
45
|
-
// Resolve any secret placeholders in the config
|
|
46
|
-
const resolvedEnv = this.secretResolver.resolveObject(env);
|
|
47
|
-
this.environments.set(resolvedEnv.name, resolvedEnv);
|
|
48
|
-
}
|
|
49
|
-
console.log(`Loaded ${this.environments.size} environment(s) from ${resolvedPath}`);
|
|
50
|
-
}
|
|
51
|
-
catch (error) {
|
|
52
|
-
console.error(`Failed to load environment config: ${error}`);
|
|
53
|
-
this.loadFromEnvVars();
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
loadFromEnvVars() {
|
|
57
|
-
const server = process.env.SERVER_NAME;
|
|
58
|
-
const database = process.env.DATABASE_NAME;
|
|
59
|
-
if (!server || !database) {
|
|
60
|
-
throw new Error("No environment config file provided and SERVER_NAME/DATABASE_NAME env vars not set");
|
|
61
|
-
}
|
|
62
|
-
const defaultEnv = {
|
|
63
|
-
name: "default",
|
|
64
|
-
server,
|
|
65
|
-
database,
|
|
66
|
-
port: process.env.SQL_PORT ? parseInt(process.env.SQL_PORT, 10) : undefined,
|
|
67
|
-
authMode: process.env.SQL_AUTH_MODE?.toLowerCase() ?? "aad",
|
|
68
|
-
username: process.env.SQL_USERNAME,
|
|
69
|
-
password: process.env.SQL_PASSWORD,
|
|
70
|
-
domain: process.env.SQL_DOMAIN,
|
|
71
|
-
trustServerCertificate: process.env.TRUST_SERVER_CERTIFICATE?.toLowerCase() === "true",
|
|
72
|
-
connectionTimeout: process.env.CONNECTION_TIMEOUT
|
|
73
|
-
? parseInt(process.env.CONNECTION_TIMEOUT, 10)
|
|
74
|
-
: 30,
|
|
75
|
-
readonly: process.env.READONLY === "true",
|
|
76
|
-
};
|
|
77
|
-
this.environments.set("default", defaultEnv);
|
|
78
|
-
this.defaultEnvironment = "default";
|
|
79
|
-
console.log("Loaded default environment from environment variables");
|
|
80
|
-
}
|
|
81
|
-
getEnvironment(name) {
|
|
82
|
-
const targetName = name || this.defaultEnvironment || "default";
|
|
83
|
-
const env = this.environments.get(targetName);
|
|
84
|
-
if (!env) {
|
|
85
|
-
throw new Error(`Environment '${targetName}' not found. Available: ${Array.from(this.environments.keys()).join(", ")}`);
|
|
86
|
-
}
|
|
87
|
-
return env;
|
|
88
|
-
}
|
|
89
|
-
listEnvironments() {
|
|
90
|
-
return Array.from(this.environments.values());
|
|
91
|
-
}
|
|
92
|
-
/**
|
|
93
|
-
* Check if the environment allows access to a specific database.
|
|
94
|
-
* For database-level access, only the configured database is allowed.
|
|
95
|
-
* For server-level access, checks allowedDatabases/deniedDatabases.
|
|
96
|
-
*/
|
|
97
|
-
isDatabaseAllowed(environmentName, databaseName) {
|
|
98
|
-
const env = this.getEnvironment(environmentName);
|
|
99
|
-
const accessLevel = env.accessLevel ?? "database";
|
|
100
|
-
// Database-level access: only the configured database is allowed
|
|
101
|
-
if (accessLevel === "database") {
|
|
102
|
-
if (databaseName.toLowerCase() !== env.database.toLowerCase()) {
|
|
103
|
-
return {
|
|
104
|
-
allowed: false,
|
|
105
|
-
reason: `Environment '${env.name}' has database-level access and is restricted to database '${env.database}'. Cannot access '${databaseName}'.`,
|
|
106
|
-
};
|
|
107
|
-
}
|
|
108
|
-
return { allowed: true };
|
|
109
|
-
}
|
|
110
|
-
// Server-level access: check allow/deny lists
|
|
111
|
-
const deniedDatabases = env.deniedDatabases ?? [];
|
|
112
|
-
const allowedDatabases = env.allowedDatabases;
|
|
113
|
-
// Check denied list first (takes precedence)
|
|
114
|
-
if (deniedDatabases.some((db) => db.toLowerCase() === databaseName.toLowerCase())) {
|
|
115
|
-
return {
|
|
116
|
-
allowed: false,
|
|
117
|
-
reason: `Database '${databaseName}' is in the denied list for environment '${env.name}'.`,
|
|
118
|
-
};
|
|
119
|
-
}
|
|
120
|
-
// Check allowed list
|
|
121
|
-
if (allowedDatabases === "*") {
|
|
122
|
-
return { allowed: true };
|
|
123
|
-
}
|
|
124
|
-
if (Array.isArray(allowedDatabases) && allowedDatabases.length > 0) {
|
|
125
|
-
if (!allowedDatabases.some((db) => db.toLowerCase() === databaseName.toLowerCase())) {
|
|
126
|
-
return {
|
|
127
|
-
allowed: false,
|
|
128
|
-
reason: `Database '${databaseName}' is not in the allowed list for environment '${env.name}'. Allowed: ${allowedDatabases.join(", ")}.`,
|
|
129
|
-
};
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
return { allowed: true };
|
|
133
|
-
}
|
|
134
|
-
/**
|
|
135
|
-
* Check if a schema.table reference is allowed based on allowedSchemas/deniedSchemas.
|
|
136
|
-
* Pattern matching supports wildcards (e.g., "audit.*", "*.sensitive_*")
|
|
137
|
-
*/
|
|
138
|
-
isSchemaAllowed(environmentName, schemaName, tableName) {
|
|
139
|
-
const env = this.getEnvironment(environmentName);
|
|
140
|
-
const fullRef = tableName ? `${schemaName}.${tableName}` : schemaName;
|
|
141
|
-
const deniedSchemas = env.deniedSchemas ?? [];
|
|
142
|
-
const allowedSchemas = env.allowedSchemas;
|
|
143
|
-
// Check denied patterns first
|
|
144
|
-
for (const pattern of deniedSchemas) {
|
|
145
|
-
if (this.matchesPattern(fullRef, pattern) || this.matchesPattern(schemaName, pattern)) {
|
|
146
|
-
return {
|
|
147
|
-
allowed: false,
|
|
148
|
-
reason: `Schema/table '${fullRef}' matches denied pattern '${pattern}' in environment '${env.name}'.`,
|
|
149
|
-
};
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
// If allowedSchemas is specified, check against it
|
|
153
|
-
if (allowedSchemas && allowedSchemas.length > 0) {
|
|
154
|
-
const isAllowed = allowedSchemas.some((pattern) => this.matchesPattern(fullRef, pattern) || this.matchesPattern(schemaName, pattern));
|
|
155
|
-
if (!isAllowed) {
|
|
156
|
-
return {
|
|
157
|
-
allowed: false,
|
|
158
|
-
reason: `Schema/table '${fullRef}' does not match any allowed pattern in environment '${env.name}'. Allowed: ${allowedSchemas.join(", ")}.`,
|
|
159
|
-
};
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
return { allowed: true };
|
|
163
|
-
}
|
|
164
|
-
/**
|
|
165
|
-
* Simple wildcard pattern matching (supports * as wildcard)
|
|
166
|
-
*/
|
|
167
|
-
matchesPattern(value, pattern) {
|
|
168
|
-
const regexPattern = pattern
|
|
169
|
-
.replace(/[.+?^${}()|[\]\\]/g, "\\$&") // Escape special regex chars except *
|
|
170
|
-
.replace(/\*/g, ".*"); // Convert * to .*
|
|
171
|
-
const regex = new RegExp(`^${regexPattern}$`, "i");
|
|
172
|
-
return regex.test(value);
|
|
173
|
-
}
|
|
174
|
-
async getConnection(environmentName) {
|
|
175
|
-
const env = this.getEnvironment(environmentName);
|
|
176
|
-
const cached = this.connections.get(env.name);
|
|
177
|
-
// Check if we have a valid cached connection
|
|
178
|
-
if (cached &&
|
|
179
|
-
cached.pool.connected &&
|
|
180
|
-
(!cached.expiresOn || cached.expiresOn > new Date(Date.now() + 2 * 60 * 1000))) {
|
|
181
|
-
return cached.pool;
|
|
182
|
-
}
|
|
183
|
-
// Create new connection
|
|
184
|
-
const { config, expiresOn } = await this.createSqlConfig(env);
|
|
185
|
-
// Close old connection if exists
|
|
186
|
-
if (cached?.pool && cached.pool.connected) {
|
|
187
|
-
await cached.pool.close();
|
|
188
|
-
}
|
|
189
|
-
const pool = new sql.ConnectionPool(config);
|
|
190
|
-
pool.on("error", (err) => {
|
|
191
|
-
console.error(`[mssql] Pool error for '${env.name}':`, err.message);
|
|
192
|
-
});
|
|
193
|
-
await pool.connect();
|
|
194
|
-
this.connections.set(env.name, { pool, expiresOn });
|
|
195
|
-
return pool;
|
|
196
|
-
}
|
|
197
|
-
async createSqlConfig(env) {
|
|
198
|
-
const baseConfig = {
|
|
199
|
-
server: env.server,
|
|
200
|
-
database: env.database,
|
|
201
|
-
port: env.port,
|
|
202
|
-
connectionTimeout: (env.connectionTimeout || 30) * 1000,
|
|
203
|
-
requestTimeout: (env.requestTimeout || 120) * 1000,
|
|
204
|
-
pool: {
|
|
205
|
-
max: 10,
|
|
206
|
-
min: 0,
|
|
207
|
-
idleTimeoutMillis: 30000,
|
|
208
|
-
},
|
|
209
|
-
};
|
|
210
|
-
if (env.authMode === "sql") {
|
|
211
|
-
if (!env.username || !env.password) {
|
|
212
|
-
throw new Error(`Environment '${env.name}' requires username and password for SQL auth`);
|
|
213
|
-
}
|
|
214
|
-
return {
|
|
215
|
-
config: {
|
|
216
|
-
...baseConfig,
|
|
217
|
-
user: env.username,
|
|
218
|
-
password: env.password,
|
|
219
|
-
options: {
|
|
220
|
-
encrypt: false,
|
|
221
|
-
trustServerCertificate: env.trustServerCertificate ?? false,
|
|
222
|
-
},
|
|
223
|
-
},
|
|
224
|
-
};
|
|
225
|
-
}
|
|
226
|
-
if (env.authMode === "windows") {
|
|
227
|
-
if (!env.username || !env.password) {
|
|
228
|
-
throw new Error(`Environment '${env.name}' requires username and password for Windows auth`);
|
|
229
|
-
}
|
|
230
|
-
// Strip DOMAIN\ prefix from username if present — tedious NTLM expects
|
|
231
|
-
// the username and domain as separate fields
|
|
232
|
-
let ntlmUser = env.username;
|
|
233
|
-
let ntlmDomain = env.domain || "";
|
|
234
|
-
const backslashIndex = ntlmUser.indexOf("\\");
|
|
235
|
-
if (backslashIndex !== -1) {
|
|
236
|
-
if (!ntlmDomain) {
|
|
237
|
-
ntlmDomain = ntlmUser.substring(0, backslashIndex);
|
|
238
|
-
}
|
|
239
|
-
ntlmUser = ntlmUser.substring(backslashIndex + 1);
|
|
240
|
-
}
|
|
241
|
-
return {
|
|
242
|
-
config: {
|
|
243
|
-
...baseConfig,
|
|
244
|
-
options: {
|
|
245
|
-
encrypt: false,
|
|
246
|
-
trustServerCertificate: env.trustServerCertificate ?? false,
|
|
247
|
-
},
|
|
248
|
-
authentication: {
|
|
249
|
-
type: "ntlm",
|
|
250
|
-
options: {
|
|
251
|
-
userName: ntlmUser,
|
|
252
|
-
password: env.password,
|
|
253
|
-
domain: ntlmDomain,
|
|
254
|
-
},
|
|
255
|
-
},
|
|
256
|
-
},
|
|
257
|
-
};
|
|
258
|
-
}
|
|
259
|
-
// Azure AD auth
|
|
260
|
-
const credential = new InteractiveBrowserCredential({
|
|
261
|
-
redirectUri: "http://localhost",
|
|
262
|
-
});
|
|
263
|
-
const accessToken = await credential.getToken("https://database.windows.net/.default");
|
|
264
|
-
if (!accessToken?.token) {
|
|
265
|
-
throw new Error(`Failed to acquire Azure AD token for environment '${env.name}'`);
|
|
266
|
-
}
|
|
267
|
-
return {
|
|
268
|
-
config: {
|
|
269
|
-
...baseConfig,
|
|
270
|
-
options: {
|
|
271
|
-
encrypt: true,
|
|
272
|
-
trustServerCertificate: env.trustServerCertificate ?? false,
|
|
273
|
-
},
|
|
274
|
-
authentication: {
|
|
275
|
-
type: "azure-active-directory-access-token",
|
|
276
|
-
options: {
|
|
277
|
-
token: accessToken.token,
|
|
278
|
-
},
|
|
279
|
-
},
|
|
280
|
-
},
|
|
281
|
-
expiresOn: accessToken?.expiresOnTimestamp
|
|
282
|
-
? new Date(accessToken.expiresOnTimestamp)
|
|
283
|
-
: new Date(Date.now() + 30 * 60 * 1000),
|
|
284
|
-
};
|
|
285
|
-
}
|
|
286
|
-
async closeAll() {
|
|
287
|
-
for (const [name, { pool }] of this.connections.entries()) {
|
|
288
|
-
if (pool.connected) {
|
|
289
|
-
await pool.close();
|
|
290
|
-
console.log(`Closed connection for environment '${name}'`);
|
|
291
|
-
}
|
|
292
|
-
}
|
|
293
|
-
this.connections.clear();
|
|
294
|
-
}
|
|
295
|
-
}
|
|
296
|
-
// Singleton instance
|
|
297
|
-
let environmentManager;
|
|
298
|
-
export function getEnvironmentManager() {
|
|
299
|
-
if (!environmentManager) {
|
|
300
|
-
const configPath = process.env.ENVIRONMENTS_CONFIG_PATH;
|
|
301
|
-
environmentManager = new EnvironmentManager(configPath);
|
|
302
|
-
}
|
|
303
|
-
return environmentManager;
|
|
304
|
-
}
|
|
305
|
-
//# sourceMappingURL=EnvironmentManager.js.map
|