@eamonboyle/mssql-mcp 1.4.1 → 1.6.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/config.d.ts CHANGED
@@ -1,13 +1,36 @@
1
+ type Environment = NodeJS.ProcessEnv;
1
2
  export type McpTransportMode = "stdio" | "http";
3
+ export interface SqlConnectionConfig {
4
+ serverName: string;
5
+ serverPort?: number;
6
+ dbUser: string;
7
+ dbPassword: string;
8
+ encrypt: boolean;
9
+ trustServerCertificate: boolean;
10
+ connectionTimeoutSeconds: number;
11
+ queryTimeoutMs: number;
12
+ }
13
+ export interface EnvironmentConfig extends SqlConnectionConfig {
14
+ databaseName: string;
15
+ databases: string[];
16
+ readOnly: boolean;
17
+ enableDdl: boolean;
18
+ maxRows: number;
19
+ maxWriteRows: number;
20
+ requireWritePreview: boolean;
21
+ mcpTransport: McpTransportMode;
22
+ mcpHttpHost: string;
23
+ mcpHttpPort: number;
24
+ mcpBaseUrl?: string;
25
+ }
26
+ export declare function configureRuntimeEnvironment(environment: EnvironmentConfig): void;
27
+ export declare function parseDatabaseList(value: string | undefined): string[];
28
+ export declare function parseSqlConnectionConfig(env?: Environment): SqlConnectionConfig;
29
+ export declare function parseEnvironmentConfig(env?: Environment): EnvironmentConfig;
2
30
  export declare function getMaxRows(): number;
3
- export declare function getQueryTimeoutMs(): number;
4
31
  export declare function getDefaultSearchLimit(): number;
5
32
  export declare function clampRowLimit(limit: unknown, fallback?: number): number;
6
- export declare function getMcpTransport(): McpTransportMode;
7
- export declare function getMcpHttpPort(): number;
8
- export declare function getMcpHttpHost(): string;
9
- export declare function getMcpBaseUrl(): string | undefined;
10
- export declare function isDdlEnabled(): boolean;
33
+ export declare function getMcpEndpointUrl(environment: Pick<EnvironmentConfig, "mcpBaseUrl" | "mcpHttpHost" | "mcpHttpPort">): string;
11
34
  export declare function getMaxWriteRows(): number;
12
- export declare function isWritePreviewRequired(): boolean;
35
+ export {};
13
36
  //# sourceMappingURL=config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AA4CA,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,MAAM,CAAC;AAEhD,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAED,wBAAgB,iBAAiB,IAAI,MAAM,CAK1C;AAED,wBAAgB,qBAAqB,IAAI,MAAM,CAE9C;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,SAAe,GAAG,MAAM,CAa7E;AAED,wBAAgB,eAAe,IAAI,gBAAgB,CAIlD;AAED,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED,wBAAgB,aAAa,IAAI,MAAM,GAAG,SAAS,CAGlD;AAED,wBAAgB,YAAY,IAAI,OAAO,CAEtC;AAED,wBAAgB,eAAe,IAAI,MAAM,CAKxC;AAED,wBAAgB,sBAAsB,IAAI,OAAO,CAEhD"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAQA,KAAK,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;AAErC,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,MAAM,CAAC;AAEhD,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,sBAAsB,EAAE,OAAO,CAAC;IAChC,wBAAwB,EAAE,MAAM,CAAC;IACjC,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,iBAAkB,SAAQ,mBAAmB;IAC5D,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,mBAAmB,EAAE,OAAO,CAAC;IAC7B,YAAY,EAAE,gBAAgB,CAAC;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAID,wBAAgB,2BAA2B,CACzC,WAAW,EAAE,iBAAiB,GAC7B,IAAI,CAKN;AAmHD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,EAAE,CASrE;AAED,wBAAgB,wBAAwB,CACtC,GAAG,GAAE,WAAyB,GAC7B,mBAAmB,CAuBrB;AAED,wBAAgB,sBAAsB,CACpC,GAAG,GAAE,WAAyB,GAC7B,iBAAiB,CAgDnB;AAeD,wBAAgB,UAAU,IAAI,MAAM,CAKnC;AAED,wBAAgB,qBAAqB,IAAI,MAAM,CAE9C;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,SAAe,GAAG,MAAM,CAa7E;AAED,wBAAgB,iBAAiB,CAC/B,WAAW,EAAE,IAAI,CACf,iBAAiB,EACjB,YAAY,GAAG,aAAa,GAAG,aAAa,CAC7C,GACA,MAAM,CAKR;AAED,wBAAgB,eAAe,IAAI,MAAM,CASxC"}
package/dist/config.js CHANGED
@@ -1,37 +1,158 @@
1
1
  const DEFAULT_MAX_ROWS = 10000;
2
2
  const DEFAULT_QUERY_TIMEOUT_MS = 30000;
3
3
  const DEFAULT_SEARCH_LIMIT = 100;
4
+ const DEFAULT_CONNECTION_TIMEOUT_SECONDS = 30;
4
5
  const DEFAULT_HTTP_PORT = 3333;
5
6
  const DEFAULT_HTTP_HOST = "127.0.0.1";
6
7
  const DEFAULT_MAX_WRITE_ROWS = 100;
7
- function parsePositiveInt(value, fallback, minimum = 1) {
8
- if (!value) {
8
+ let runtimeEnvironment;
9
+ export function configureRuntimeEnvironment(environment) {
10
+ runtimeEnvironment = {
11
+ ...environment,
12
+ databases: [...environment.databases],
13
+ };
14
+ }
15
+ function parseInteger(name, value, fallback, minimum = 1, maximum) {
16
+ if (value === undefined || value.trim() === "") {
9
17
  return fallback;
10
18
  }
11
- const parsed = Number.parseInt(value, 10);
12
- if (!Number.isFinite(parsed) || parsed < minimum) {
13
- return fallback;
19
+ const range = maximum !== undefined
20
+ ? `between ${minimum} and ${maximum}`
21
+ : `of at least ${minimum}`;
22
+ const normalized = value.trim();
23
+ if (!/^\d+$/.test(normalized)) {
24
+ throw new Error(`${name} must be a whole number ${range}.`);
25
+ }
26
+ const parsed = Number(normalized);
27
+ if (!Number.isSafeInteger(parsed) ||
28
+ parsed < minimum ||
29
+ (maximum !== undefined && parsed > maximum)) {
30
+ throw new Error(`${name} must be a whole number ${range}.`);
14
31
  }
15
32
  return parsed;
16
33
  }
17
- function parseBoolean(value, fallback) {
18
- if (!value) {
34
+ function parseRequiredString(name, value) {
35
+ const normalized = value?.trim();
36
+ if (!normalized) {
37
+ throw new Error(`${name} is required and must not be blank.`);
38
+ }
39
+ return normalized;
40
+ }
41
+ function parseBoolean(name, value, fallback) {
42
+ if ((value === undefined || value.trim() === "") && fallback !== undefined) {
19
43
  return fallback;
20
44
  }
21
- const normalized = value.trim().toLowerCase();
45
+ const normalized = value?.trim().toLowerCase();
22
46
  if (normalized === "true") {
23
47
  return true;
24
48
  }
25
49
  if (normalized === "false") {
26
50
  return false;
27
51
  }
28
- return fallback;
52
+ const requirement = fallback === undefined ? "is required and must be" : "must be";
53
+ throw new Error(`${name} ${requirement} either "true" or "false".`);
29
54
  }
30
- export function getMaxRows() {
31
- return parsePositiveInt(process.env.MAX_ROWS, DEFAULT_MAX_ROWS);
55
+ function parseServerPort(value) {
56
+ if (value === undefined || value.trim() === "") {
57
+ return undefined;
58
+ }
59
+ const normalized = value.trim();
60
+ if (!/^\d+$/.test(normalized)) {
61
+ throw new Error("SERVER_PORT must be a valid TCP port between 1 and 65535.");
62
+ }
63
+ const port = Number(normalized);
64
+ if (!Number.isInteger(port) || port < 1 || port > 65535) {
65
+ throw new Error("SERVER_PORT must be a valid TCP port between 1 and 65535.");
66
+ }
67
+ return port;
68
+ }
69
+ function parseMcpBaseUrl(value) {
70
+ const normalized = value?.trim();
71
+ if (!normalized) {
72
+ return undefined;
73
+ }
74
+ let url;
75
+ try {
76
+ url = new URL(normalized);
77
+ }
78
+ catch {
79
+ throw new Error("MCP_BASE_URL must be a valid absolute HTTP or HTTPS URL.");
80
+ }
81
+ if ((url.protocol !== "http:" && url.protocol !== "https:") ||
82
+ url.username ||
83
+ url.password ||
84
+ url.search ||
85
+ url.hash) {
86
+ throw new Error("MCP_BASE_URL must be a valid absolute HTTP or HTTPS URL.");
87
+ }
88
+ url.pathname = url.pathname.replace(/\/+$/, "");
89
+ return url.toString().replace(/\/$/, "");
90
+ }
91
+ export function parseDatabaseList(value) {
92
+ if (!value?.trim()) {
93
+ return [];
94
+ }
95
+ return value
96
+ .split(",")
97
+ .map((database) => database.trim())
98
+ .filter(Boolean);
99
+ }
100
+ export function parseSqlConnectionConfig(env = process.env) {
101
+ return {
102
+ serverName: env.SERVER_NAME?.trim() || "localhost",
103
+ serverPort: parseServerPort(env.SERVER_PORT),
104
+ dbUser: parseRequiredString("DB_USER", env.DB_USER),
105
+ dbPassword: parseRequiredString("DB_PASSWORD", env.DB_PASSWORD),
106
+ encrypt: parseBoolean("ENCRYPT", env.ENCRYPT, false),
107
+ trustServerCertificate: parseBoolean("TRUST_SERVER_CERTIFICATE", env.TRUST_SERVER_CERTIFICATE, true),
108
+ connectionTimeoutSeconds: parseInteger("CONNECTION_TIMEOUT", env.CONNECTION_TIMEOUT, DEFAULT_CONNECTION_TIMEOUT_SECONDS),
109
+ queryTimeoutMs: parseInteger("QUERY_TIMEOUT_MS", env.QUERY_TIMEOUT_MS, DEFAULT_QUERY_TIMEOUT_MS),
110
+ };
111
+ }
112
+ export function parseEnvironmentConfig(env = process.env) {
113
+ const explicitDefault = env.DATABASE_NAME?.trim();
114
+ const configuredDatabases = parseDatabaseList(env.DATABASES);
115
+ const databases = configuredDatabases.length > 0
116
+ ? configuredDatabases
117
+ : explicitDefault
118
+ ? [explicitDefault]
119
+ : [];
120
+ if (databases.length === 0) {
121
+ throw new Error("At least one of DATABASE_NAME or DATABASES is required and must contain a database name.");
122
+ }
123
+ const databaseName = explicitDefault && databases.includes(explicitDefault)
124
+ ? explicitDefault
125
+ : databases[0];
126
+ return {
127
+ ...parseSqlConnectionConfig(env),
128
+ databaseName,
129
+ databases,
130
+ readOnly: parseBoolean("READONLY", env.READONLY, false),
131
+ enableDdl: parseBoolean("ENABLE_DDL", env.ENABLE_DDL, false),
132
+ maxRows: parseInteger("MAX_ROWS", env.MAX_ROWS, DEFAULT_MAX_ROWS),
133
+ maxWriteRows: parseInteger("MAX_WRITE_ROWS", env.MAX_WRITE_ROWS, DEFAULT_MAX_WRITE_ROWS),
134
+ requireWritePreview: parseBoolean("REQUIRE_WRITE_PREVIEW", env.REQUIRE_WRITE_PREVIEW, true),
135
+ mcpTransport: parseMcpTransport(env.MCP_TRANSPORT),
136
+ mcpHttpHost: env.MCP_HTTP_HOST?.trim() || DEFAULT_HTTP_HOST,
137
+ mcpHttpPort: parseInteger("MCP_HTTP_PORT", env.MCP_HTTP_PORT, DEFAULT_HTTP_PORT, 1, 65535),
138
+ mcpBaseUrl: parseMcpBaseUrl(env.MCP_BASE_URL),
139
+ };
140
+ }
141
+ function parseMcpTransport(value) {
142
+ if (value === undefined || value.trim() === "") {
143
+ return "stdio";
144
+ }
145
+ const normalized = value.trim().toLowerCase();
146
+ if (normalized === "stdio" || normalized === "http") {
147
+ return normalized;
148
+ }
149
+ throw new Error('MCP_TRANSPORT must be either "stdio" or "http".');
32
150
  }
33
- export function getQueryTimeoutMs() {
34
- return parsePositiveInt(process.env.QUERY_TIMEOUT_MS, DEFAULT_QUERY_TIMEOUT_MS);
151
+ export function getMaxRows() {
152
+ if (runtimeEnvironment) {
153
+ return runtimeEnvironment.maxRows;
154
+ }
155
+ return parseInteger("MAX_ROWS", process.env.MAX_ROWS, DEFAULT_MAX_ROWS);
35
156
  }
36
157
  export function getDefaultSearchLimit() {
37
158
  return Math.min(getMaxRows(), DEFAULT_SEARCH_LIMIT);
@@ -47,28 +168,15 @@ export function clampRowLimit(limit, fallback = getMaxRows()) {
47
168
  }
48
169
  return Math.min(Math.floor(parsed), getMaxRows());
49
170
  }
50
- export function getMcpTransport() {
51
- return process.env.MCP_TRANSPORT?.trim().toLowerCase() === "http"
52
- ? "http"
53
- : "stdio";
54
- }
55
- export function getMcpHttpPort() {
56
- return parsePositiveInt(process.env.MCP_HTTP_PORT, DEFAULT_HTTP_PORT);
57
- }
58
- export function getMcpHttpHost() {
59
- return process.env.MCP_HTTP_HOST?.trim() || DEFAULT_HTTP_HOST;
60
- }
61
- export function getMcpBaseUrl() {
62
- const value = process.env.MCP_BASE_URL?.trim();
63
- return value ? value : undefined;
64
- }
65
- export function isDdlEnabled() {
66
- return parseBoolean(process.env.ENABLE_DDL, false);
171
+ export function getMcpEndpointUrl(environment) {
172
+ const baseUrl = environment.mcpBaseUrl ??
173
+ `http://${environment.mcpHttpHost}:${environment.mcpHttpPort}`;
174
+ return `${baseUrl.replace(/\/+$/, "")}/mcp`;
67
175
  }
68
176
  export function getMaxWriteRows() {
69
- return parsePositiveInt(process.env.MAX_WRITE_ROWS, DEFAULT_MAX_WRITE_ROWS);
70
- }
71
- export function isWritePreviewRequired() {
72
- return parseBoolean(process.env.REQUIRE_WRITE_PREVIEW, true);
177
+ if (runtimeEnvironment) {
178
+ return runtimeEnvironment.maxWriteRows;
179
+ }
180
+ return parseInteger("MAX_WRITE_ROWS", process.env.MAX_WRITE_ROWS, DEFAULT_MAX_WRITE_ROWS);
73
181
  }
74
182
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
package/dist/db.d.ts CHANGED
@@ -1,4 +1,7 @@
1
1
  import sql from "mssql";
2
+ import { type EnvironmentConfig, type SqlConnectionConfig } from "./config.js";
3
+ export declare function configureSqlConnection(config: SqlConnectionConfig): void;
4
+ export declare function configureDatabase(environment: EnvironmentConfig): void;
2
5
  export declare function getDefaultDatabaseName(): string | null;
3
6
  /**
4
7
  * Returns the list of allowed database names.
@@ -10,6 +13,7 @@ export declare function getAllowedDatabases(): string[];
10
13
  * Returns null if invalid.
11
14
  */
12
15
  export declare function resolveDatabaseName(databaseName?: string): string | null;
16
+ export declare function buildSqlConfig(databaseName: string, environment: SqlConnectionConfig): sql.config;
13
17
  /**
14
18
  * Ensures a connection pool exists for the given database.
15
19
  */
package/dist/db.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,OAAO,CAAC;AAiBxB,wBAAgB,sBAAsB,IAAI,MAAM,GAAG,IAAI,CAatD;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,EAAE,CAQ9C;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAQxE;AA6CD;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAoB7B;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CACjC,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC;IAAE,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAWnD;AAED,wBAAsB,mBAAmB,CACvC,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC;IAAE,IAAI,EAAE,GAAG,CAAC,cAAc,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAqBvD"}
1
+ {"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,OAAO,CAAC;AACxB,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,EAEzB,MAAM,aAAa,CAAC;AAQrB,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,mBAAmB,GAAG,IAAI,CAExE;AAED,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,iBAAiB,GAAG,IAAI,CAItE;AASD,wBAAgB,sBAAsB,IAAI,MAAM,GAAG,IAAI,CAgBtD;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,EAAE,CAW9C;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAQxE;AAED,wBAAgB,cAAc,CAC5B,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,mBAAmB,GAC/B,GAAG,CAAC,MAAM,CAqBZ;AAsBD;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAoB7B;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CACjC,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC;IAAE,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAWnD;AAED,wBAAsB,mBAAmB,CACvC,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC;IAAE,IAAI,EAAE,GAAG,CAAC,cAAc,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAqBvD"}
package/dist/db.js CHANGED
@@ -1,17 +1,28 @@
1
1
  import sql from "mssql";
2
- import { getQueryTimeoutMs } from "./config.js";
2
+ import { parseDatabaseList, } from "./config.js";
3
3
  // Connection pools keyed by database name
4
4
  const sqlPools = new Map();
5
- function parseDatabaseList(value) {
6
- if (!value || !value.trim()) {
7
- return [];
5
+ let sqlConnectionConfig;
6
+ let configuredDefaultDatabase;
7
+ let configuredDatabases;
8
+ export function configureSqlConnection(config) {
9
+ sqlConnectionConfig = { ...config };
10
+ }
11
+ export function configureDatabase(environment) {
12
+ configureSqlConnection(environment);
13
+ configuredDefaultDatabase = environment.databaseName;
14
+ configuredDatabases = [...environment.databases];
15
+ }
16
+ function getSqlConnectionConfig() {
17
+ if (!sqlConnectionConfig) {
18
+ throw new Error("SQL connection configuration has not been initialized.");
8
19
  }
9
- return value
10
- .split(",")
11
- .map((db) => db.trim())
12
- .filter(Boolean);
20
+ return sqlConnectionConfig;
13
21
  }
14
22
  export function getDefaultDatabaseName() {
23
+ if (configuredDefaultDatabase) {
24
+ return configuredDefaultDatabase;
25
+ }
15
26
  const allowedDatabases = parseDatabaseList(process.env.DATABASES);
16
27
  const explicitDefault = process.env.DATABASE_NAME?.trim();
17
28
  if (allowedDatabases.length === 0) {
@@ -27,6 +38,9 @@ export function getDefaultDatabaseName() {
27
38
  * If DATABASES is set, returns those; otherwise returns only DATABASE_NAME.
28
39
  */
29
40
  export function getAllowedDatabases() {
41
+ if (configuredDatabases) {
42
+ return [...configuredDatabases];
43
+ }
30
44
  const allowedDatabases = parseDatabaseList(process.env.DATABASES);
31
45
  if (allowedDatabases.length > 0) {
32
46
  return allowedDatabases;
@@ -49,25 +63,25 @@ export function resolveDatabaseName(databaseName) {
49
63
  return resolved;
50
64
  return null;
51
65
  }
52
- function createSqlConfigForDatabase(databaseName) {
53
- const trustServerCertificate = process.env.TRUST_SERVER_CERTIFICATE?.toLowerCase() === "true";
54
- const connectionTimeout = process.env.CONNECTION_TIMEOUT
55
- ? parseInt(process.env.CONNECTION_TIMEOUT, 10)
56
- : 30;
57
- return {
58
- server: process.env.SERVER_NAME || "localhost",
66
+ export function buildSqlConfig(databaseName, environment) {
67
+ const config = {
68
+ server: environment.serverName,
59
69
  database: databaseName,
60
- user: process.env.DB_USER,
61
- password: process.env.DB_PASSWORD,
62
- requestTimeout: getQueryTimeoutMs(),
70
+ user: environment.dbUser,
71
+ password: environment.dbPassword,
72
+ requestTimeout: environment.queryTimeoutMs,
63
73
  options: {
64
- encrypt: false,
65
- trustServerCertificate: trustServerCertificate || true,
74
+ encrypt: environment.encrypt,
75
+ trustServerCertificate: environment.trustServerCertificate,
66
76
  enableArithAbort: true,
67
77
  useUTC: false,
68
78
  },
69
- connectionTimeout: connectionTimeout * 1000,
79
+ connectionTimeout: environment.connectionTimeoutSeconds * 1000,
70
80
  };
81
+ if (environment.serverPort !== undefined) {
82
+ config.port = environment.serverPort;
83
+ }
84
+ return config;
71
85
  }
72
86
  async function resolveConfiguredDatabase(databaseName) {
73
87
  const resolved = resolveDatabaseName(databaseName);
@@ -100,7 +114,7 @@ export async function ensureSqlConnection(databaseName) {
100
114
  }
101
115
  sqlPools.delete(databaseName);
102
116
  }
103
- const config = createSqlConfigForDatabase(databaseName);
117
+ const config = buildSqlConfig(databaseName, getSqlConnectionConfig());
104
118
  const pool = new sql.ConnectionPool(config);
105
119
  await pool.connect();
106
120
  sqlPools.set(databaseName, pool);
@@ -131,7 +145,7 @@ export async function getDedicatedSqlPool(databaseName) {
131
145
  };
132
146
  }
133
147
  const config = {
134
- ...createSqlConfigForDatabase(resolved.databaseName),
148
+ ...buildSqlConfig(resolved.databaseName, getSqlConnectionConfig()),
135
149
  pool: {
136
150
  max: 1,
137
151
  min: 0,
package/dist/db.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"db.js","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"db.js","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":"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"}