mcp-server-db2i 1.2.1 → 1.3.1
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/README.md +90 -308
- package/dist/auth/authMiddleware.d.ts +66 -0
- package/dist/auth/authMiddleware.d.ts.map +1 -0
- package/dist/auth/authMiddleware.js +217 -0
- package/dist/auth/authMiddleware.js.map +1 -0
- package/dist/auth/index.d.ts +9 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +10 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/tokenManager.d.ts +114 -0
- package/dist/auth/tokenManager.d.ts.map +1 -0
- package/dist/auth/tokenManager.js +255 -0
- package/dist/auth/tokenManager.js.map +1 -0
- package/dist/auth/types.d.ts +103 -0
- package/dist/auth/types.d.ts.map +1 -0
- package/dist/auth/types.js +10 -0
- package/dist/auth/types.js.map +1 -0
- package/dist/config.d.ts +128 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +185 -0
- package/dist/config.js.map +1 -1
- package/dist/db/connection.d.ts +53 -3
- package/dist/db/connection.d.ts.map +1 -1
- package/dist/db/connection.js +154 -15
- package/dist/db/connection.js.map +1 -1
- package/dist/db/queries.d.ts +29 -6
- package/dist/db/queries.d.ts.map +1 -1
- package/dist/db/queries.js +35 -12
- package/dist/db/queries.js.map +1 -1
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +97 -42
- package/dist/index.js.map +1 -1
- package/dist/openapi.d.ts +49 -0
- package/dist/openapi.d.ts.map +1 -0
- package/dist/openapi.js +634 -0
- package/dist/openapi.js.map +1 -0
- package/dist/server.d.ts +26 -2
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +68 -22
- package/dist/server.js.map +1 -1
- package/dist/tools/metadata.d.ts +10 -0
- package/dist/tools/metadata.d.ts.map +1 -1
- package/dist/tools/metadata.js +10 -6
- package/dist/tools/metadata.js.map +1 -1
- package/dist/tools/query.d.ts +4 -0
- package/dist/tools/query.d.ts.map +1 -1
- package/dist/tools/query.js +5 -3
- package/dist/tools/query.js.map +1 -1
- package/dist/transports/http.d.ts +26 -0
- package/dist/transports/http.d.ts.map +1 -0
- package/dist/transports/http.js +552 -0
- package/dist/transports/http.js.map +1 -0
- package/dist/transports/index.d.ts +8 -0
- package/dist/transports/index.d.ts.map +1 -0
- package/dist/transports/index.js +8 -0
- package/dist/transports/index.js.map +1 -0
- package/dist/transports/sessionManager.d.ts +106 -0
- package/dist/transports/sessionManager.d.ts.map +1 -0
- package/dist/transports/sessionManager.js +260 -0
- package/dist/transports/sessionManager.js.map +1 -0
- package/package.json +9 -5
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Authentication types for HTTP transport
|
|
3
|
+
*
|
|
4
|
+
* Defines interfaces for OAuth-style token authentication:
|
|
5
|
+
* - AuthRequest: Credentials and optional config for token exchange
|
|
6
|
+
* - AuthResponse: Token response following OAuth conventions
|
|
7
|
+
* - TokenSession: Internal session storage
|
|
8
|
+
*/
|
|
9
|
+
import type { DB2iConfig } from '../config.js';
|
|
10
|
+
/**
|
|
11
|
+
* Authentication request body for POST /auth
|
|
12
|
+
*
|
|
13
|
+
* Required fields:
|
|
14
|
+
* - username: IBM i user profile
|
|
15
|
+
* - password: IBM i password
|
|
16
|
+
*
|
|
17
|
+
* Optional fields (fall back to environment variables):
|
|
18
|
+
* - host: IBM i hostname (falls back to DB2I_HOSTNAME)
|
|
19
|
+
* - port: Connection port (falls back to DB2I_PORT, default: 446)
|
|
20
|
+
* - database: Database name (falls back to DB2I_DATABASE, default: *LOCAL)
|
|
21
|
+
* - schema: Default schema (falls back to DB2I_SCHEMA)
|
|
22
|
+
* - duration: Token lifetime in seconds (falls back to MCP_TOKEN_EXPIRY, default: 3600)
|
|
23
|
+
*/
|
|
24
|
+
export interface AuthRequest {
|
|
25
|
+
/** IBM i username (required) */
|
|
26
|
+
username: string;
|
|
27
|
+
/** IBM i password (required) */
|
|
28
|
+
password: string;
|
|
29
|
+
/** IBM i hostname (optional, falls back to DB2I_HOSTNAME) */
|
|
30
|
+
host?: string;
|
|
31
|
+
/** Connection port (optional, falls back to DB2I_PORT) */
|
|
32
|
+
port?: number;
|
|
33
|
+
/** Database name (optional, falls back to DB2I_DATABASE) */
|
|
34
|
+
database?: string;
|
|
35
|
+
/** Default schema (optional, falls back to DB2I_SCHEMA) */
|
|
36
|
+
schema?: string;
|
|
37
|
+
/** Token lifetime in seconds (optional, default: 3600) */
|
|
38
|
+
duration?: number;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Authentication response for successful token exchange
|
|
42
|
+
* Follows OAuth 2.0 token response conventions
|
|
43
|
+
*/
|
|
44
|
+
export interface AuthResponse {
|
|
45
|
+
/** The access token to use for subsequent requests */
|
|
46
|
+
access_token: string;
|
|
47
|
+
/** Token type (always "Bearer") */
|
|
48
|
+
token_type: 'Bearer';
|
|
49
|
+
/** Token lifetime in seconds */
|
|
50
|
+
expires_in: number;
|
|
51
|
+
/** ISO 8601 timestamp of when the token expires */
|
|
52
|
+
expires_at: string;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Authentication error response
|
|
56
|
+
*/
|
|
57
|
+
export interface AuthErrorResponse {
|
|
58
|
+
/** Error code */
|
|
59
|
+
error: string;
|
|
60
|
+
/** Human-readable error description */
|
|
61
|
+
error_description?: string;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Internal token session storage
|
|
65
|
+
* Stores the token, associated DB config, and lifecycle metadata
|
|
66
|
+
*/
|
|
67
|
+
export interface TokenSession {
|
|
68
|
+
/** The access token */
|
|
69
|
+
token: string;
|
|
70
|
+
/** DB2i configuration for this session */
|
|
71
|
+
config: DB2iConfig;
|
|
72
|
+
/** When the token was created */
|
|
73
|
+
createdAt: Date;
|
|
74
|
+
/** When the token expires */
|
|
75
|
+
expiresAt: Date;
|
|
76
|
+
/** When the token was last used */
|
|
77
|
+
lastUsedAt: Date;
|
|
78
|
+
/** MCP session ID (for stateful mode) */
|
|
79
|
+
mcpSessionId?: string;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Token validation result
|
|
83
|
+
*/
|
|
84
|
+
export interface TokenValidationResult {
|
|
85
|
+
/** Whether the token is valid */
|
|
86
|
+
valid: boolean;
|
|
87
|
+
/** The session if valid */
|
|
88
|
+
session?: TokenSession;
|
|
89
|
+
/** Error message if invalid */
|
|
90
|
+
error?: string;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Auth request validation result
|
|
94
|
+
*/
|
|
95
|
+
export interface AuthValidationResult {
|
|
96
|
+
/** Whether the request is valid */
|
|
97
|
+
valid: boolean;
|
|
98
|
+
/** Validated and normalized request if valid */
|
|
99
|
+
request?: AuthRequest;
|
|
100
|
+
/** Error message if invalid */
|
|
101
|
+
error?: string;
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/auth/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/C;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,WAAW;IAC1B,gCAAgC;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,gCAAgC;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,6DAA6D;IAC7D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,0DAA0D;IAC1D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2DAA2D;IAC3D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,sDAAsD;IACtD,YAAY,EAAE,MAAM,CAAC;IACrB,mCAAmC;IACnC,UAAU,EAAE,QAAQ,CAAC;IACrB,gCAAgC;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,mDAAmD;IACnD,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,iBAAiB;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,uCAAuC;IACvC,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,uBAAuB;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,0CAA0C;IAC1C,MAAM,EAAE,UAAU,CAAC;IACnB,iCAAiC;IACjC,SAAS,EAAE,IAAI,CAAC;IAChB,6BAA6B;IAC7B,SAAS,EAAE,IAAI,CAAC;IAChB,mCAAmC;IACnC,UAAU,EAAE,IAAI,CAAC;IACjB,yCAAyC;IACzC,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,iCAAiC;IACjC,KAAK,EAAE,OAAO,CAAC;IACf,2BAA2B;IAC3B,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,+BAA+B;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,mCAAmC;IACnC,KAAK,EAAE,OAAO,CAAC;IACf,gDAAgD;IAChD,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,+BAA+B;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Authentication types for HTTP transport
|
|
3
|
+
*
|
|
4
|
+
* Defines interfaces for OAuth-style token authentication:
|
|
5
|
+
* - AuthRequest: Credentials and optional config for token exchange
|
|
6
|
+
* - AuthResponse: Token response following OAuth conventions
|
|
7
|
+
* - TokenSession: Internal session storage
|
|
8
|
+
*/
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/auth/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
|
package/dist/config.d.ts
CHANGED
|
@@ -4,6 +4,20 @@
|
|
|
4
4
|
*
|
|
5
5
|
* Supports file-based secrets (e.g., Docker secrets) via *_FILE environment variables.
|
|
6
6
|
* File-based secrets take priority over plain environment variables.
|
|
7
|
+
*
|
|
8
|
+
* HTTP Transport Configuration:
|
|
9
|
+
* - MCP_TRANSPORT: 'stdio' | 'http' | 'both' (default: 'stdio')
|
|
10
|
+
* - MCP_HTTP_PORT: HTTP server port (default: 3000)
|
|
11
|
+
* - MCP_HTTP_HOST: HTTP bind address (default: '127.0.0.1')
|
|
12
|
+
* - MCP_SESSION_MODE: 'stateful' | 'stateless' (default: 'stateful')
|
|
13
|
+
* - MCP_AUTH_MODE: 'required' | 'token' | 'none' (default: 'required')
|
|
14
|
+
* - MCP_AUTH_TOKEN: Static token for 'token' auth mode
|
|
15
|
+
* - MCP_TLS_ENABLED: Enable built-in TLS (default: false)
|
|
16
|
+
* - MCP_TLS_CERT_PATH: Path to TLS certificate
|
|
17
|
+
* - MCP_TLS_KEY_PATH: Path to TLS private key
|
|
18
|
+
* - MCP_TOKEN_EXPIRY: Token lifetime in seconds (default: 3600)
|
|
19
|
+
* - MCP_MAX_SESSIONS: Maximum concurrent sessions (default: 100)
|
|
20
|
+
* - MCP_CORS_ORIGINS: CORS allowed origins (comma-separated, '*' for all)
|
|
7
21
|
*/
|
|
8
22
|
export interface DB2iConfig {
|
|
9
23
|
hostname: string;
|
|
@@ -122,4 +136,118 @@ export declare function getQueryLimitConfig(): QueryLimitConfig;
|
|
|
122
136
|
* @returns The effective limit to use
|
|
123
137
|
*/
|
|
124
138
|
export declare function applyQueryLimit(requestedLimit: number | undefined, config?: QueryLimitConfig): number;
|
|
139
|
+
/**
|
|
140
|
+
* Transport mode options
|
|
141
|
+
*/
|
|
142
|
+
export type TransportMode = 'stdio' | 'http' | 'both';
|
|
143
|
+
/**
|
|
144
|
+
* Session mode options for HTTP transport
|
|
145
|
+
*/
|
|
146
|
+
export type SessionMode = 'stateful' | 'stateless';
|
|
147
|
+
/**
|
|
148
|
+
* Authentication mode options for HTTP transport
|
|
149
|
+
* - 'required': Full /auth flow with per-user DB credentials (most secure, default)
|
|
150
|
+
* - 'token': Pre-shared static token via MCP_AUTH_TOKEN, uses env DB credentials
|
|
151
|
+
* - 'none': No authentication required, uses env DB credentials (trusted networks only)
|
|
152
|
+
*/
|
|
153
|
+
export type AuthMode = 'required' | 'token' | 'none';
|
|
154
|
+
/**
|
|
155
|
+
* TLS configuration for HTTP transport
|
|
156
|
+
*/
|
|
157
|
+
export interface TlsConfig {
|
|
158
|
+
/** Whether TLS is enabled */
|
|
159
|
+
enabled: boolean;
|
|
160
|
+
/** Path to TLS certificate file */
|
|
161
|
+
certPath?: string;
|
|
162
|
+
/** Path to TLS private key file */
|
|
163
|
+
keyPath?: string;
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* HTTP transport configuration
|
|
167
|
+
*/
|
|
168
|
+
export interface HttpConfig {
|
|
169
|
+
/** Transport mode: stdio, http, or both (default: stdio) */
|
|
170
|
+
transport: TransportMode;
|
|
171
|
+
/** HTTP server port (default: 3000) */
|
|
172
|
+
port: number;
|
|
173
|
+
/** HTTP server bind address (default: 127.0.0.1) */
|
|
174
|
+
host: string;
|
|
175
|
+
/** Session mode: stateful or stateless (default: stateful) */
|
|
176
|
+
sessionMode: SessionMode;
|
|
177
|
+
/** Authentication mode: required, token, or none (default: required) */
|
|
178
|
+
authMode: AuthMode;
|
|
179
|
+
/** Static token for 'token' auth mode */
|
|
180
|
+
staticToken?: string;
|
|
181
|
+
/** TLS configuration */
|
|
182
|
+
tls: TlsConfig;
|
|
183
|
+
/** Token expiry time in seconds (default: 3600) */
|
|
184
|
+
tokenExpiry: number;
|
|
185
|
+
/** Maximum concurrent sessions (default: 100) */
|
|
186
|
+
maxSessions: number;
|
|
187
|
+
/** CORS allowed origins (comma-separated, '*' for all, empty for none) */
|
|
188
|
+
corsOrigins: string[];
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Default HTTP configuration values
|
|
192
|
+
*/
|
|
193
|
+
export declare const DEFAULT_HTTP_CONFIG: HttpConfig;
|
|
194
|
+
/**
|
|
195
|
+
* Parse CORS origins from environment variable
|
|
196
|
+
* Returns array of allowed origins, or ['*'] for all
|
|
197
|
+
*/
|
|
198
|
+
export declare function getCorsOrigins(): string[];
|
|
199
|
+
/**
|
|
200
|
+
* Get the configured transport mode
|
|
201
|
+
* Defaults to 'stdio' for backwards compatibility
|
|
202
|
+
*/
|
|
203
|
+
export declare function getTransportMode(): TransportMode;
|
|
204
|
+
/**
|
|
205
|
+
* Get the configured session mode
|
|
206
|
+
* Defaults to 'stateful'
|
|
207
|
+
*/
|
|
208
|
+
export declare function getSessionMode(): SessionMode;
|
|
209
|
+
/**
|
|
210
|
+
* Get the configured authentication mode for HTTP transport
|
|
211
|
+
* Defaults to 'required' for security
|
|
212
|
+
*
|
|
213
|
+
* Environment variables:
|
|
214
|
+
* - MCP_AUTH_MODE: 'required' | 'token' | 'none' (default: 'required')
|
|
215
|
+
* - MCP_AUTH_TOKEN: Static token for 'token' mode (required if mode='token')
|
|
216
|
+
*/
|
|
217
|
+
export declare function getAuthMode(): AuthMode;
|
|
218
|
+
/**
|
|
219
|
+
* Get the static auth token for 'token' mode
|
|
220
|
+
*/
|
|
221
|
+
export declare function getStaticToken(): string | undefined;
|
|
222
|
+
/**
|
|
223
|
+
* Get TLS configuration from environment variables
|
|
224
|
+
*/
|
|
225
|
+
export declare function getTlsConfig(): TlsConfig;
|
|
226
|
+
/**
|
|
227
|
+
* Load HTTP transport configuration from environment variables
|
|
228
|
+
*/
|
|
229
|
+
export declare function getHttpConfig(): HttpConfig;
|
|
230
|
+
/**
|
|
231
|
+
* Check if HTTP transport is enabled
|
|
232
|
+
*/
|
|
233
|
+
export declare function isHttpEnabled(): boolean;
|
|
234
|
+
/**
|
|
235
|
+
* Check if stdio transport is enabled
|
|
236
|
+
*/
|
|
237
|
+
export declare function isStdioEnabled(): boolean;
|
|
238
|
+
/**
|
|
239
|
+
* Load partial DB2i config from optional parameters with env fallbacks.
|
|
240
|
+
* Used by HTTP auth to build session-specific configs.
|
|
241
|
+
*
|
|
242
|
+
* @param overrides - Optional overrides for config values
|
|
243
|
+
* @returns Partial config with env fallbacks applied
|
|
244
|
+
*/
|
|
245
|
+
export declare function loadPartialConfig(overrides: {
|
|
246
|
+
hostname?: string;
|
|
247
|
+
port?: number;
|
|
248
|
+
username?: string;
|
|
249
|
+
password?: string;
|
|
250
|
+
database?: string;
|
|
251
|
+
schema?: string;
|
|
252
|
+
}): DB2iConfig;
|
|
125
253
|
//# sourceMappingURL=config.d.ts.map
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/config.js
CHANGED
|
@@ -4,6 +4,20 @@
|
|
|
4
4
|
*
|
|
5
5
|
* Supports file-based secrets (e.g., Docker secrets) via *_FILE environment variables.
|
|
6
6
|
* File-based secrets take priority over plain environment variables.
|
|
7
|
+
*
|
|
8
|
+
* HTTP Transport Configuration:
|
|
9
|
+
* - MCP_TRANSPORT: 'stdio' | 'http' | 'both' (default: 'stdio')
|
|
10
|
+
* - MCP_HTTP_PORT: HTTP server port (default: 3000)
|
|
11
|
+
* - MCP_HTTP_HOST: HTTP bind address (default: '127.0.0.1')
|
|
12
|
+
* - MCP_SESSION_MODE: 'stateful' | 'stateless' (default: 'stateful')
|
|
13
|
+
* - MCP_AUTH_MODE: 'required' | 'token' | 'none' (default: 'required')
|
|
14
|
+
* - MCP_AUTH_TOKEN: Static token for 'token' auth mode
|
|
15
|
+
* - MCP_TLS_ENABLED: Enable built-in TLS (default: false)
|
|
16
|
+
* - MCP_TLS_CERT_PATH: Path to TLS certificate
|
|
17
|
+
* - MCP_TLS_KEY_PATH: Path to TLS private key
|
|
18
|
+
* - MCP_TOKEN_EXPIRY: Token lifetime in seconds (default: 3600)
|
|
19
|
+
* - MCP_MAX_SESSIONS: Maximum concurrent sessions (default: 100)
|
|
20
|
+
* - MCP_CORS_ORIGINS: CORS allowed origins (comma-separated, '*' for all)
|
|
7
21
|
*/
|
|
8
22
|
import { readFileSync, existsSync } from 'node:fs';
|
|
9
23
|
/**
|
|
@@ -211,4 +225,175 @@ export function applyQueryLimit(requestedLimit, config = getQueryLimitConfig())
|
|
|
211
225
|
const limit = requestedLimit ?? config.defaultLimit;
|
|
212
226
|
return Math.min(Math.max(1, limit), config.maxLimit);
|
|
213
227
|
}
|
|
228
|
+
/**
|
|
229
|
+
* Default HTTP configuration values
|
|
230
|
+
*/
|
|
231
|
+
export const DEFAULT_HTTP_CONFIG = {
|
|
232
|
+
transport: 'stdio',
|
|
233
|
+
port: 3000,
|
|
234
|
+
host: '127.0.0.1',
|
|
235
|
+
sessionMode: 'stateful',
|
|
236
|
+
authMode: 'required',
|
|
237
|
+
tls: {
|
|
238
|
+
enabled: false,
|
|
239
|
+
},
|
|
240
|
+
tokenExpiry: 3600,
|
|
241
|
+
maxSessions: 100,
|
|
242
|
+
corsOrigins: [],
|
|
243
|
+
};
|
|
244
|
+
/**
|
|
245
|
+
* Parse CORS origins from environment variable
|
|
246
|
+
* Returns array of allowed origins, or ['*'] for all
|
|
247
|
+
*/
|
|
248
|
+
export function getCorsOrigins() {
|
|
249
|
+
const origins = process.env.MCP_CORS_ORIGINS;
|
|
250
|
+
if (!origins || origins.trim() === '') {
|
|
251
|
+
return [];
|
|
252
|
+
}
|
|
253
|
+
return origins.split(',').map(o => o.trim()).filter(o => o.length > 0);
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* Get the configured transport mode
|
|
257
|
+
* Defaults to 'stdio' for backwards compatibility
|
|
258
|
+
*/
|
|
259
|
+
export function getTransportMode() {
|
|
260
|
+
const mode = process.env.MCP_TRANSPORT?.toLowerCase();
|
|
261
|
+
if (mode === 'http' || mode === 'both') {
|
|
262
|
+
return mode;
|
|
263
|
+
}
|
|
264
|
+
return 'stdio';
|
|
265
|
+
}
|
|
266
|
+
/**
|
|
267
|
+
* Get the configured session mode
|
|
268
|
+
* Defaults to 'stateful'
|
|
269
|
+
*/
|
|
270
|
+
export function getSessionMode() {
|
|
271
|
+
const mode = process.env.MCP_SESSION_MODE?.toLowerCase();
|
|
272
|
+
if (mode === 'stateless') {
|
|
273
|
+
return 'stateless';
|
|
274
|
+
}
|
|
275
|
+
return 'stateful';
|
|
276
|
+
}
|
|
277
|
+
/**
|
|
278
|
+
* Get the configured authentication mode for HTTP transport
|
|
279
|
+
* Defaults to 'required' for security
|
|
280
|
+
*
|
|
281
|
+
* Environment variables:
|
|
282
|
+
* - MCP_AUTH_MODE: 'required' | 'token' | 'none' (default: 'required')
|
|
283
|
+
* - MCP_AUTH_TOKEN: Static token for 'token' mode (required if mode='token')
|
|
284
|
+
*/
|
|
285
|
+
export function getAuthMode() {
|
|
286
|
+
const mode = process.env.MCP_AUTH_MODE?.toLowerCase();
|
|
287
|
+
if (mode === 'none' || mode === 'token') {
|
|
288
|
+
return mode;
|
|
289
|
+
}
|
|
290
|
+
return 'required';
|
|
291
|
+
}
|
|
292
|
+
/**
|
|
293
|
+
* Get the static auth token for 'token' mode
|
|
294
|
+
*/
|
|
295
|
+
export function getStaticToken() {
|
|
296
|
+
return process.env.MCP_AUTH_TOKEN;
|
|
297
|
+
}
|
|
298
|
+
/**
|
|
299
|
+
* Get TLS configuration from environment variables
|
|
300
|
+
*/
|
|
301
|
+
export function getTlsConfig() {
|
|
302
|
+
const enabled = process.env.MCP_TLS_ENABLED?.toLowerCase();
|
|
303
|
+
const isEnabled = enabled === 'true' || enabled === '1';
|
|
304
|
+
if (!isEnabled) {
|
|
305
|
+
return { enabled: false };
|
|
306
|
+
}
|
|
307
|
+
const certPath = process.env.MCP_TLS_CERT_PATH;
|
|
308
|
+
const keyPath = process.env.MCP_TLS_KEY_PATH;
|
|
309
|
+
if (!certPath || !keyPath) {
|
|
310
|
+
throw new Error('MCP_TLS_CERT_PATH and MCP_TLS_KEY_PATH are required when MCP_TLS_ENABLED=true');
|
|
311
|
+
}
|
|
312
|
+
if (!existsSync(certPath)) {
|
|
313
|
+
throw new Error(`TLS certificate file not found: ${certPath}`);
|
|
314
|
+
}
|
|
315
|
+
if (!existsSync(keyPath)) {
|
|
316
|
+
throw new Error(`TLS key file not found: ${keyPath}`);
|
|
317
|
+
}
|
|
318
|
+
return {
|
|
319
|
+
enabled: true,
|
|
320
|
+
certPath,
|
|
321
|
+
keyPath,
|
|
322
|
+
};
|
|
323
|
+
}
|
|
324
|
+
/**
|
|
325
|
+
* Load HTTP transport configuration from environment variables
|
|
326
|
+
*/
|
|
327
|
+
export function getHttpConfig() {
|
|
328
|
+
const authMode = getAuthMode();
|
|
329
|
+
const staticToken = getStaticToken();
|
|
330
|
+
// Validate token mode has a token configured
|
|
331
|
+
if (authMode === 'token' && !staticToken) {
|
|
332
|
+
throw new Error('MCP_AUTH_TOKEN is required when MCP_AUTH_MODE=token. Generate with: openssl rand -hex 32');
|
|
333
|
+
}
|
|
334
|
+
return {
|
|
335
|
+
transport: getTransportMode(),
|
|
336
|
+
port: parseInt(process.env.MCP_HTTP_PORT || '3000', 10),
|
|
337
|
+
host: process.env.MCP_HTTP_HOST || '127.0.0.1',
|
|
338
|
+
sessionMode: getSessionMode(),
|
|
339
|
+
authMode,
|
|
340
|
+
staticToken,
|
|
341
|
+
tls: getTlsConfig(),
|
|
342
|
+
tokenExpiry: parseInt(process.env.MCP_TOKEN_EXPIRY || '3600', 10),
|
|
343
|
+
maxSessions: parseInt(process.env.MCP_MAX_SESSIONS || '100', 10),
|
|
344
|
+
corsOrigins: getCorsOrigins(),
|
|
345
|
+
};
|
|
346
|
+
}
|
|
347
|
+
/**
|
|
348
|
+
* Check if HTTP transport is enabled
|
|
349
|
+
*/
|
|
350
|
+
export function isHttpEnabled() {
|
|
351
|
+
const mode = getTransportMode();
|
|
352
|
+
return mode === 'http' || mode === 'both';
|
|
353
|
+
}
|
|
354
|
+
/**
|
|
355
|
+
* Check if stdio transport is enabled
|
|
356
|
+
*/
|
|
357
|
+
export function isStdioEnabled() {
|
|
358
|
+
const mode = getTransportMode();
|
|
359
|
+
return mode === 'stdio' || mode === 'both';
|
|
360
|
+
}
|
|
361
|
+
/**
|
|
362
|
+
* Load partial DB2i config from optional parameters with env fallbacks.
|
|
363
|
+
* Used by HTTP auth to build session-specific configs.
|
|
364
|
+
*
|
|
365
|
+
* @param overrides - Optional overrides for config values
|
|
366
|
+
* @returns Partial config with env fallbacks applied
|
|
367
|
+
*/
|
|
368
|
+
export function loadPartialConfig(overrides) {
|
|
369
|
+
const hostname = overrides.hostname ?? process.env.DB2I_HOSTNAME;
|
|
370
|
+
const port = overrides.port ?? parseInt(process.env.DB2I_PORT || '446', 10);
|
|
371
|
+
const username = overrides.username ?? getSecret('DB2I_USERNAME', 'DB2I_USERNAME_FILE');
|
|
372
|
+
const password = overrides.password ?? getSecret('DB2I_PASSWORD', 'DB2I_PASSWORD_FILE');
|
|
373
|
+
const database = overrides.database ?? process.env.DB2I_DATABASE ?? '*LOCAL';
|
|
374
|
+
const schema = overrides.schema ?? process.env.DB2I_SCHEMA ?? '';
|
|
375
|
+
if (!hostname) {
|
|
376
|
+
throw new Error('Host is required: provide in request or set DB2I_HOSTNAME environment variable');
|
|
377
|
+
}
|
|
378
|
+
if (!validateHostname(hostname)) {
|
|
379
|
+
throw new Error(`Invalid hostname format: "${hostname}". Must be a valid hostname or IPv4 address.`);
|
|
380
|
+
}
|
|
381
|
+
if (!username) {
|
|
382
|
+
throw new Error('Username is required');
|
|
383
|
+
}
|
|
384
|
+
if (!password) {
|
|
385
|
+
throw new Error('Password is required');
|
|
386
|
+
}
|
|
387
|
+
return {
|
|
388
|
+
hostname,
|
|
389
|
+
port,
|
|
390
|
+
username,
|
|
391
|
+
password,
|
|
392
|
+
database,
|
|
393
|
+
schema,
|
|
394
|
+
jdbcOptions: parseJdbcOptions(process.env.DB2I_JDBC_OPTIONS),
|
|
395
|
+
};
|
|
396
|
+
}
|
|
397
|
+
// Make parseJdbcOptions accessible internally for loadPartialConfig
|
|
398
|
+
// (it's already defined above, we just need to export it or use it here)
|
|
214
399
|
//# sourceMappingURL=config.js.map
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/db/connection.d.ts
CHANGED
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* JDBC Connection Manager for IBM DB2i using node-jt400
|
|
3
|
+
*
|
|
4
|
+
* Supports both:
|
|
5
|
+
* - Global pool: For stdio transport (single user, env-based config)
|
|
6
|
+
* - Session pools: For HTTP transport (per-user, token-based config)
|
|
3
7
|
*/
|
|
4
8
|
import type { DB2iConfig } from '../config.js';
|
|
5
9
|
export interface QueryResult {
|
|
@@ -15,15 +19,61 @@ export interface QueryResult {
|
|
|
15
19
|
};
|
|
16
20
|
}
|
|
17
21
|
/**
|
|
18
|
-
* Initialize the connection pool
|
|
22
|
+
* Initialize the global connection pool (for stdio transport)
|
|
23
|
+
*
|
|
24
|
+
* Safe to call multiple times - will skip if pool already exists.
|
|
19
25
|
*/
|
|
20
26
|
export declare function initializePool(config: DB2iConfig): void;
|
|
27
|
+
/**
|
|
28
|
+
* Initialize a session-specific connection pool (for HTTP transport)
|
|
29
|
+
*
|
|
30
|
+
* @param sessionId - Unique session identifier (typically the auth token)
|
|
31
|
+
* @param config - DB2i configuration for this session
|
|
32
|
+
*/
|
|
33
|
+
export declare function initializeSessionPool(sessionId: string, config: DB2iConfig): void;
|
|
34
|
+
/**
|
|
35
|
+
* Close a session-specific connection pool
|
|
36
|
+
*
|
|
37
|
+
* @param sessionId - The session identifier
|
|
38
|
+
* @returns Promise that resolves when the pool is closed
|
|
39
|
+
*/
|
|
40
|
+
export declare function closeSessionPool(sessionId: string): Promise<void>;
|
|
41
|
+
/**
|
|
42
|
+
* Close all session connection pools (for shutdown)
|
|
43
|
+
*
|
|
44
|
+
* @returns Promise that resolves when all pools are closed
|
|
45
|
+
*/
|
|
46
|
+
export declare function closeAllSessionPools(): Promise<void>;
|
|
47
|
+
/**
|
|
48
|
+
* Close the global connection pool (for shutdown)
|
|
49
|
+
*
|
|
50
|
+
* @returns Promise that resolves when the pool is closed
|
|
51
|
+
*/
|
|
52
|
+
export declare function closeGlobalPool(): Promise<void>;
|
|
21
53
|
/**
|
|
22
54
|
* Execute a query and return results
|
|
55
|
+
*
|
|
56
|
+
* @param sql - SQL query to execute
|
|
57
|
+
* @param params - Query parameters
|
|
58
|
+
* @param sessionId - Optional session ID for HTTP transport
|
|
23
59
|
*/
|
|
24
|
-
export declare function executeQuery(sql: string, params?: unknown[]): Promise<QueryResult>;
|
|
60
|
+
export declare function executeQuery(sql: string, params?: unknown[], sessionId?: string): Promise<QueryResult>;
|
|
25
61
|
/**
|
|
26
|
-
* Test the database connection
|
|
62
|
+
* Test the global database connection (for stdio transport)
|
|
27
63
|
*/
|
|
28
64
|
export declare function testConnection(): Promise<boolean>;
|
|
65
|
+
/**
|
|
66
|
+
* Test a session-specific database connection (for HTTP transport)
|
|
67
|
+
*
|
|
68
|
+
* @param sessionId - The session identifier
|
|
69
|
+
*/
|
|
70
|
+
export declare function testSessionConnection(sessionId: string): Promise<boolean>;
|
|
71
|
+
/**
|
|
72
|
+
* Check if a session pool exists
|
|
73
|
+
*/
|
|
74
|
+
export declare function hasSessionPool(sessionId: string): boolean;
|
|
75
|
+
/**
|
|
76
|
+
* Get count of active session pools
|
|
77
|
+
*/
|
|
78
|
+
export declare function getSessionPoolCount(): number;
|
|
29
79
|
//# sourceMappingURL=connection.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../../src/db/connection.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../../src/db/connection.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAM/C,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IAChC,QAAQ,CAAC,EAAE;QACT,WAAW,EAAE,MAAM,CAAC;QACpB,OAAO,EAAE,KAAK,CAAC;YACb,IAAI,EAAE,MAAM,CAAC;YACb,IAAI,EAAE,MAAM,CAAC;YACb,SAAS,EAAE,MAAM,CAAC;YAClB,KAAK,EAAE,MAAM,CAAC;SACf,CAAC,CAAC;KACJ,CAAC;CACH;AAQD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,CAUvD;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI,CAkBjF;AAED;;;;;GAKG;AACH,wBAAsB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAmBvE;AAED;;;;GAIG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC,CAc1D;AAED;;;;GAIG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAUrD;AAoDD;;;;;;GAMG;AACH,wBAAsB,YAAY,CAChC,GAAG,EAAE,MAAM,EACX,MAAM,GAAE,OAAO,EAAO,EACtB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,WAAW,CAAC,CAgBtB;AAED;;GAEG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC,CAUvD;AAED;;;;GAIG;AACH,wBAAsB,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAU/E;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAEzD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C"}
|