@eui/mcp 1.0.3
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 +846 -0
- package/dist/config/index.d.ts +6 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +6 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/loader.d.ts +27 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +224 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/schema.d.ts +171 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +100 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +45 -0
- package/dist/index.js.map +1 -0
- package/dist/loader/cache-manager.d.ts +74 -0
- package/dist/loader/cache-manager.d.ts.map +1 -0
- package/dist/loader/cache-manager.js +107 -0
- package/dist/loader/cache-manager.js.map +1 -0
- package/dist/loader/documentation-loader.d.ts +57 -0
- package/dist/loader/documentation-loader.d.ts.map +1 -0
- package/dist/loader/documentation-loader.js +81 -0
- package/dist/loader/documentation-loader.js.map +1 -0
- package/dist/loader/documentation-source.d.ts +37 -0
- package/dist/loader/documentation-source.d.ts.map +1 -0
- package/dist/loader/documentation-source.js +2 -0
- package/dist/loader/documentation-source.js.map +1 -0
- package/dist/loader/errors.d.ts +34 -0
- package/dist/loader/errors.d.ts.map +1 -0
- package/dist/loader/errors.js +65 -0
- package/dist/loader/errors.js.map +1 -0
- package/dist/loader/http-client.d.ts +43 -0
- package/dist/loader/http-client.d.ts.map +1 -0
- package/dist/loader/http-client.js +144 -0
- package/dist/loader/http-client.js.map +1 -0
- package/dist/loader/index.d.ts +6 -0
- package/dist/loader/index.d.ts.map +1 -0
- package/dist/loader/index.js +5 -0
- package/dist/loader/index.js.map +1 -0
- package/dist/loader/local-documentation-source.d.ts +62 -0
- package/dist/loader/local-documentation-source.d.ts.map +1 -0
- package/dist/loader/local-documentation-source.js +190 -0
- package/dist/loader/local-documentation-source.js.map +1 -0
- package/dist/loader/path-type-detector.d.ts +34 -0
- package/dist/loader/path-type-detector.d.ts.map +1 -0
- package/dist/loader/path-type-detector.js +78 -0
- package/dist/loader/path-type-detector.js.map +1 -0
- package/dist/loader/remote-documentation-source.d.ts +112 -0
- package/dist/loader/remote-documentation-source.d.ts.map +1 -0
- package/dist/loader/remote-documentation-source.js +252 -0
- package/dist/loader/remote-documentation-source.js.map +1 -0
- package/dist/main.d.ts +3 -0
- package/dist/main.d.ts.map +1 -0
- package/dist/main.js +211 -0
- package/dist/main.js.map +1 -0
- package/dist/mcp/index.d.ts +5 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +5 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/server.d.ts +65 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +224 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/publish/index.d.ts +8 -0
- package/dist/publish/index.d.ts.map +1 -0
- package/dist/publish/index.js +8 -0
- package/dist/publish/index.js.map +1 -0
- package/dist/publish/publish-utils.d.ts +74 -0
- package/dist/publish/publish-utils.d.ts.map +1 -0
- package/dist/publish/publish-utils.js +170 -0
- package/dist/publish/publish-utils.js.map +1 -0
- package/dist/query/component-query.d.ts +33 -0
- package/dist/query/component-query.d.ts.map +1 -0
- package/dist/query/component-query.js +63 -0
- package/dist/query/component-query.js.map +1 -0
- package/dist/query/index-builder.d.ts +79 -0
- package/dist/query/index-builder.d.ts.map +1 -0
- package/dist/query/index-builder.js +217 -0
- package/dist/query/index-builder.js.map +1 -0
- package/dist/query/index.d.ts +5 -0
- package/dist/query/index.d.ts.map +1 -0
- package/dist/query/index.js +6 -0
- package/dist/query/index.js.map +1 -0
- package/dist/query/result-formatter.d.ts +108 -0
- package/dist/query/result-formatter.d.ts.map +1 -0
- package/dist/query/result-formatter.js +165 -0
- package/dist/query/result-formatter.js.map +1 -0
- package/dist/query/search-engine.d.ts +54 -0
- package/dist/query/search-engine.d.ts.map +1 -0
- package/dist/query/search-engine.js +178 -0
- package/dist/query/search-engine.js.map +1 -0
- package/dist/test-error.ts +1 -0
- package/dist/tools/get-component-docs.d.ts +43 -0
- package/dist/tools/get-component-docs.d.ts.map +1 -0
- package/dist/tools/get-component-docs.js +55 -0
- package/dist/tools/get-component-docs.js.map +1 -0
- package/dist/tools/get-component-examples.d.ts +45 -0
- package/dist/tools/get-component-examples.d.ts.map +1 -0
- package/dist/tools/get-component-examples.js +56 -0
- package/dist/tools/get-component-examples.js.map +1 -0
- package/dist/tools/get-component-inputs.d.ts +44 -0
- package/dist/tools/get-component-inputs.d.ts.map +1 -0
- package/dist/tools/get-component-inputs.js +55 -0
- package/dist/tools/get-component-inputs.js.map +1 -0
- package/dist/tools/get-component-outputs.d.ts +44 -0
- package/dist/tools/get-component-outputs.d.ts.map +1 -0
- package/dist/tools/get-component-outputs.js +55 -0
- package/dist/tools/get-component-outputs.js.map +1 -0
- package/dist/tools/index.d.ts +7 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +8 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/list-components.d.ts +69 -0
- package/dist/tools/list-components.d.ts.map +1 -0
- package/dist/tools/list-components.js +84 -0
- package/dist/tools/list-components.js.map +1 -0
- package/dist/tools/search-components.d.ts +69 -0
- package/dist/tools/search-components.d.ts.map +1 -0
- package/dist/tools/search-components.js +98 -0
- package/dist/tools/search-components.js.map +1 -0
- package/dist/types/compodoc.d.ts +261 -0
- package/dist/types/compodoc.d.ts.map +1 -0
- package/dist/types/compodoc.js +5 -0
- package/dist/types/compodoc.js.map +1 -0
- package/dist/types/index.d.ts +5 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +5 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/circuit-breaker.d.ts +91 -0
- package/dist/utils/circuit-breaker.d.ts.map +1 -0
- package/dist/utils/circuit-breaker.js +186 -0
- package/dist/utils/circuit-breaker.js.map +1 -0
- package/dist/utils/credential-masking.d.ts +90 -0
- package/dist/utils/credential-masking.d.ts.map +1 -0
- package/dist/utils/credential-masking.js +202 -0
- package/dist/utils/credential-masking.js.map +1 -0
- package/dist/utils/error-handler.d.ts +68 -0
- package/dist/utils/error-handler.d.ts.map +1 -0
- package/dist/utils/error-handler.js +184 -0
- package/dist/utils/error-handler.js.map +1 -0
- package/dist/utils/errors.d.ts +156 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +242 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/index.d.ts +10 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +16 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logger.d.ts +76 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +150 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/retry.d.ts +19 -0
- package/dist/utils/retry.d.ts.map +1 -0
- package/dist/utils/retry.js +81 -0
- package/dist/utils/retry.js.map +1 -0
- package/dist/version/changelog-file-utils.d.ts +69 -0
- package/dist/version/changelog-file-utils.d.ts.map +1 -0
- package/dist/version/changelog-file-utils.js +161 -0
- package/dist/version/changelog-file-utils.js.map +1 -0
- package/dist/version/changelog-utils.d.ts +98 -0
- package/dist/version/changelog-utils.d.ts.map +1 -0
- package/dist/version/changelog-utils.js +198 -0
- package/dist/version/changelog-utils.js.map +1 -0
- package/dist/version/dry-run-utils.d.ts +108 -0
- package/dist/version/dry-run-utils.d.ts.map +1 -0
- package/dist/version/dry-run-utils.js +126 -0
- package/dist/version/dry-run-utils.js.map +1 -0
- package/dist/version/git-tag-utils.d.ts +50 -0
- package/dist/version/git-tag-utils.d.ts.map +1 -0
- package/dist/version/git-tag-utils.js +66 -0
- package/dist/version/git-tag-utils.js.map +1 -0
- package/dist/version/index.d.ts +11 -0
- package/dist/version/index.d.ts.map +1 -0
- package/dist/version/index.js +11 -0
- package/dist/version/index.js.map +1 -0
- package/dist/version/release-utils.d.ts +94 -0
- package/dist/version/release-utils.d.ts.map +1 -0
- package/dist/version/release-utils.js +170 -0
- package/dist/version/release-utils.js.map +1 -0
- package/dist/version/rollback-utils.d.ts +47 -0
- package/dist/version/rollback-utils.d.ts.map +1 -0
- package/dist/version/rollback-utils.js +73 -0
- package/dist/version/rollback-utils.js.map +1 -0
- package/dist/version/version-manager.d.ts +98 -0
- package/dist/version/version-manager.d.ts.map +1 -0
- package/dist/version/version-manager.js +158 -0
- package/dist/version/version-manager.js.map +1 -0
- package/package.json +61 -0
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Credential masking utilities for secure logging
|
|
3
|
+
*
|
|
4
|
+
* This module provides functions to mask sensitive credentials in logs and error messages
|
|
5
|
+
* to prevent accidental exposure of tokens, passwords, and other secrets.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Common patterns for credentials that should be masked
|
|
9
|
+
*/
|
|
10
|
+
const CREDENTIAL_PATTERNS = [
|
|
11
|
+
// npm tokens (npm_xxx format) - at least 20 characters after prefix
|
|
12
|
+
/npm_[a-zA-Z0-9]{20,}/gi,
|
|
13
|
+
// Generic tokens (various formats) - capture the token value
|
|
14
|
+
/(?:token|key|secret|password|auth)["'\s:=]+([a-zA-Z0-9_\-\.]{20,})/gi,
|
|
15
|
+
// Bearer tokens - at least 15 characters
|
|
16
|
+
/Bearer\s+[a-zA-Z0-9_\-\.]{15,}/gi,
|
|
17
|
+
// GitLab tokens (glpat- prefix)
|
|
18
|
+
/glpat-[a-zA-Z0-9_\-]{20,}/gi,
|
|
19
|
+
// GitHub tokens (ghp_, gho_, ghs_, ghr_ prefixes)
|
|
20
|
+
/gh[psor]_[a-zA-Z0-9]{20,}/gi,
|
|
21
|
+
// AWS access keys
|
|
22
|
+
/AKIA[0-9A-Z]{16}/gi,
|
|
23
|
+
// Generic API keys in JSON (32+ alphanumeric characters in quotes)
|
|
24
|
+
/"[a-zA-Z0-9_\-]{32,}"/g,
|
|
25
|
+
];
|
|
26
|
+
/**
|
|
27
|
+
* Mask replacement string
|
|
28
|
+
*/
|
|
29
|
+
const MASK = '***REDACTED***';
|
|
30
|
+
/**
|
|
31
|
+
* Masks credentials in a string by replacing them with a redacted placeholder
|
|
32
|
+
*
|
|
33
|
+
* @param text - The text that may contain credentials
|
|
34
|
+
* @param customPatterns - Additional regex patterns to match credentials
|
|
35
|
+
* @returns The text with credentials masked
|
|
36
|
+
*
|
|
37
|
+
* @example
|
|
38
|
+
* ```typescript
|
|
39
|
+
* const log = "Using token: npm_abc123def456";
|
|
40
|
+
* const masked = maskCredentials(log);
|
|
41
|
+
* // Returns: "Using token: ***REDACTED***"
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
44
|
+
export function maskCredentials(text, customPatterns = []) {
|
|
45
|
+
if (!text) {
|
|
46
|
+
return text;
|
|
47
|
+
}
|
|
48
|
+
let maskedText = text;
|
|
49
|
+
const allPatterns = [...CREDENTIAL_PATTERNS, ...customPatterns];
|
|
50
|
+
for (const pattern of allPatterns) {
|
|
51
|
+
maskedText = maskedText.replace(pattern, MASK);
|
|
52
|
+
}
|
|
53
|
+
return maskedText;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Sanitizes an error message by masking any credentials it may contain
|
|
57
|
+
*
|
|
58
|
+
* @param error - The error object or message to sanitize
|
|
59
|
+
* @returns A sanitized error message safe for logging
|
|
60
|
+
*
|
|
61
|
+
* @example
|
|
62
|
+
* ```typescript
|
|
63
|
+
* const error = new Error("Auth failed with token npm_abc123");
|
|
64
|
+
* const sanitized = sanitizeErrorMessage(error);
|
|
65
|
+
* // Returns: "Auth failed with token ***REDACTED***"
|
|
66
|
+
* ```
|
|
67
|
+
*/
|
|
68
|
+
export function sanitizeErrorMessage(error) {
|
|
69
|
+
if (!error) {
|
|
70
|
+
return 'Unknown error';
|
|
71
|
+
}
|
|
72
|
+
let message;
|
|
73
|
+
if (error instanceof Error) {
|
|
74
|
+
message = error.message;
|
|
75
|
+
}
|
|
76
|
+
else if (typeof error === 'string') {
|
|
77
|
+
message = error;
|
|
78
|
+
}
|
|
79
|
+
else if (typeof error === 'object') {
|
|
80
|
+
message = JSON.stringify(error);
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
message = String(error);
|
|
84
|
+
}
|
|
85
|
+
return maskCredentials(message);
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Sanitizes an entire error object, masking credentials in message, stack, and details
|
|
89
|
+
*
|
|
90
|
+
* @param error - The error object to sanitize
|
|
91
|
+
* @returns A sanitized error object safe for logging
|
|
92
|
+
*
|
|
93
|
+
* @example
|
|
94
|
+
* ```typescript
|
|
95
|
+
* const error = new Error("Failed with token npm_abc123");
|
|
96
|
+
* const sanitized = sanitizeError(error);
|
|
97
|
+
* // Returns error with masked message and stack
|
|
98
|
+
* ```
|
|
99
|
+
*/
|
|
100
|
+
export function sanitizeError(error) {
|
|
101
|
+
if (!(error instanceof Error)) {
|
|
102
|
+
const sanitizedMessage = sanitizeErrorMessage(error);
|
|
103
|
+
return new Error(sanitizedMessage);
|
|
104
|
+
}
|
|
105
|
+
// Create a new error with sanitized message
|
|
106
|
+
const sanitizedError = new Error(maskCredentials(error.message));
|
|
107
|
+
sanitizedError.name = error.name;
|
|
108
|
+
// Sanitize stack trace if present
|
|
109
|
+
if (error.stack) {
|
|
110
|
+
sanitizedError.stack = maskCredentials(error.stack);
|
|
111
|
+
}
|
|
112
|
+
// Copy other properties while sanitizing them
|
|
113
|
+
const errorObj = error;
|
|
114
|
+
for (const key in errorObj) {
|
|
115
|
+
if (key !== 'message' && key !== 'stack' && key !== 'name') {
|
|
116
|
+
const value = errorObj[key];
|
|
117
|
+
if (typeof value === 'string') {
|
|
118
|
+
sanitizedError[key] = maskCredentials(value);
|
|
119
|
+
}
|
|
120
|
+
else if (typeof value === 'object' && value !== null) {
|
|
121
|
+
sanitizedError[key] = JSON.parse(maskCredentials(JSON.stringify(value)));
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
sanitizedError[key] = value;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
return sanitizedError;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Masks credentials in log arguments before logging
|
|
132
|
+
*
|
|
133
|
+
* @param args - The arguments to be logged
|
|
134
|
+
* @returns Sanitized arguments safe for logging
|
|
135
|
+
*
|
|
136
|
+
* @example
|
|
137
|
+
* ```typescript
|
|
138
|
+
* const args = ["User logged in", { token: "npm_abc123" }];
|
|
139
|
+
* const sanitized = maskLogArguments(args);
|
|
140
|
+
* // Returns: ["User logged in", { token: "***REDACTED***" }]
|
|
141
|
+
* ```
|
|
142
|
+
*/
|
|
143
|
+
export function maskLogArguments(args) {
|
|
144
|
+
return args.map((arg) => {
|
|
145
|
+
if (typeof arg === 'string') {
|
|
146
|
+
return maskCredentials(arg);
|
|
147
|
+
}
|
|
148
|
+
else if (arg instanceof Error) {
|
|
149
|
+
return sanitizeError(arg);
|
|
150
|
+
}
|
|
151
|
+
else if (typeof arg === 'object' && arg !== null) {
|
|
152
|
+
try {
|
|
153
|
+
const jsonString = JSON.stringify(arg);
|
|
154
|
+
const maskedString = maskCredentials(jsonString);
|
|
155
|
+
return JSON.parse(maskedString);
|
|
156
|
+
}
|
|
157
|
+
catch {
|
|
158
|
+
// If JSON parsing fails, return as-is
|
|
159
|
+
return arg;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
return arg;
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Creates a safe error message for authentication failures without exposing credentials
|
|
167
|
+
*
|
|
168
|
+
* @param operation - The operation that failed (e.g., "npm publish", "git push")
|
|
169
|
+
* @returns A generic authentication error message
|
|
170
|
+
*
|
|
171
|
+
* @example
|
|
172
|
+
* ```typescript
|
|
173
|
+
* const message = createAuthErrorMessage("npm publish");
|
|
174
|
+
* // Returns: "Authentication failed for npm publish. Please check your credentials."
|
|
175
|
+
* ```
|
|
176
|
+
*/
|
|
177
|
+
export function createAuthErrorMessage(operation) {
|
|
178
|
+
return `Authentication failed for ${operation}. Please check your credentials.`;
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Checks if a string contains potential credentials
|
|
182
|
+
*
|
|
183
|
+
* @param text - The text to check
|
|
184
|
+
* @returns True if the text likely contains credentials
|
|
185
|
+
*
|
|
186
|
+
* @example
|
|
187
|
+
* ```typescript
|
|
188
|
+
* containsCredentials("npm_abc123def456"); // true
|
|
189
|
+
* containsCredentials("Hello world"); // false
|
|
190
|
+
* ```
|
|
191
|
+
*/
|
|
192
|
+
export function containsCredentials(text) {
|
|
193
|
+
if (!text) {
|
|
194
|
+
return false;
|
|
195
|
+
}
|
|
196
|
+
return CREDENTIAL_PATTERNS.some((pattern) => {
|
|
197
|
+
// Reset regex state
|
|
198
|
+
pattern.lastIndex = 0;
|
|
199
|
+
return pattern.test(text);
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
//# sourceMappingURL=credential-masking.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credential-masking.js","sourceRoot":"","sources":["../../src/utils/credential-masking.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Global error handler to ensure errors don't crash the server
|
|
3
|
+
*/
|
|
4
|
+
import { AppError } from './errors.js';
|
|
5
|
+
/**
|
|
6
|
+
* Error handler options
|
|
7
|
+
*/
|
|
8
|
+
export interface ErrorHandlerOptions {
|
|
9
|
+
exitOnUnhandledRejection?: boolean;
|
|
10
|
+
exitOnUncaughtException?: boolean;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Global error handler class
|
|
14
|
+
*/
|
|
15
|
+
export declare class ErrorHandler {
|
|
16
|
+
private options;
|
|
17
|
+
private isShuttingDown;
|
|
18
|
+
constructor(options?: Partial<ErrorHandlerOptions>);
|
|
19
|
+
/**
|
|
20
|
+
* Initializes global error handlers
|
|
21
|
+
*/
|
|
22
|
+
initialize(): void;
|
|
23
|
+
/**
|
|
24
|
+
* Handles unhandled promise rejections
|
|
25
|
+
*/
|
|
26
|
+
private handleUnhandledRejection;
|
|
27
|
+
/**
|
|
28
|
+
* Handles uncaught exceptions
|
|
29
|
+
*/
|
|
30
|
+
private handleUncaughtException;
|
|
31
|
+
/**
|
|
32
|
+
* Handles graceful shutdown
|
|
33
|
+
*/
|
|
34
|
+
private handleShutdown;
|
|
35
|
+
/**
|
|
36
|
+
* Exits the process
|
|
37
|
+
*/
|
|
38
|
+
private exitProcess;
|
|
39
|
+
/**
|
|
40
|
+
* Handles an error and returns a safe response
|
|
41
|
+
*/
|
|
42
|
+
handleError(error: unknown): AppError;
|
|
43
|
+
/**
|
|
44
|
+
* Wraps an async function with error handling
|
|
45
|
+
*/
|
|
46
|
+
wrapAsync<T extends unknown[], R>(fn: (...args: T) => Promise<R>): (...args: T) => Promise<R>;
|
|
47
|
+
/**
|
|
48
|
+
* Wraps a sync function with error handling
|
|
49
|
+
*/
|
|
50
|
+
wrapSync<T extends unknown[], R>(fn: (...args: T) => R): (...args: T) => R;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Initializes the global error handler
|
|
54
|
+
*/
|
|
55
|
+
export declare function initErrorHandler(options?: Partial<ErrorHandlerOptions>): ErrorHandler;
|
|
56
|
+
/**
|
|
57
|
+
* Gets the global error handler
|
|
58
|
+
*/
|
|
59
|
+
export declare function getErrorHandler(): ErrorHandler;
|
|
60
|
+
/**
|
|
61
|
+
* Safely executes an async function and handles errors
|
|
62
|
+
*/
|
|
63
|
+
export declare function safeAsync<T>(fn: () => Promise<T>, fallback?: T): Promise<T | undefined>;
|
|
64
|
+
/**
|
|
65
|
+
* Safely executes a sync function and handles errors
|
|
66
|
+
*/
|
|
67
|
+
export declare function safeSync<T>(fn: () => T, fallback?: T): T | undefined;
|
|
68
|
+
//# sourceMappingURL=error-handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-handler.d.ts","sourceRoot":"","sources":["../../src/utils/error-handler.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAkC,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvE;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC,uBAAuB,CAAC,EAAE,OAAO,CAAC;CACnC;AAOD;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,OAAO,CAAsB;IACrC,OAAO,CAAC,cAAc,CAAkB;gBAE5B,OAAO,GAAE,OAAO,CAAC,mBAAmB,CAAM;IAItD;;OAEG;IACH,UAAU,IAAI,IAAI;IAqBlB;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAahC;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAa/B;;OAEG;IACH,OAAO,CAAC,cAAc;IAmBtB;;OAEG;IACH,OAAO,CAAC,WAAW;IAInB;;OAEG;IACH,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,QAAQ;IAmBrC;;OAEG;IACH,SAAS,CAAC,CAAC,SAAS,OAAO,EAAE,EAAE,CAAC,EAC9B,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,GAC7B,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC;IAW7B;;OAEG;IACH,QAAQ,CAAC,CAAC,SAAS,OAAO,EAAE,EAAE,CAAC,EAC7B,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,CAAC,GACpB,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,CAAC;CAUrB;AAOD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,GAAG,YAAY,CAIrF;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,YAAY,CAM9C;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,CAAC,EAC/B,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,QAAQ,CAAC,EAAE,CAAC,GACX,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAOxB;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EACxB,EAAE,EAAE,MAAM,CAAC,EACX,QAAQ,CAAC,EAAE,CAAC,GACX,CAAC,GAAG,SAAS,CAOf"}
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Global error handler to ensure errors don't crash the server
|
|
3
|
+
*/
|
|
4
|
+
import { getLogger } from './logger.js';
|
|
5
|
+
import { isOperationalError, toAppError } from './errors.js';
|
|
6
|
+
const DEFAULT_OPTIONS = {
|
|
7
|
+
exitOnUnhandledRejection: false,
|
|
8
|
+
exitOnUncaughtException: false,
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* Global error handler class
|
|
12
|
+
*/
|
|
13
|
+
export class ErrorHandler {
|
|
14
|
+
options;
|
|
15
|
+
isShuttingDown = false;
|
|
16
|
+
constructor(options = {}) {
|
|
17
|
+
this.options = { ...DEFAULT_OPTIONS, ...options };
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Initializes global error handlers
|
|
21
|
+
*/
|
|
22
|
+
initialize() {
|
|
23
|
+
// Handle unhandled promise rejections
|
|
24
|
+
process.on('unhandledRejection', (reason) => {
|
|
25
|
+
this.handleUnhandledRejection(reason);
|
|
26
|
+
});
|
|
27
|
+
// Handle uncaught exceptions
|
|
28
|
+
process.on('uncaughtException', (error) => {
|
|
29
|
+
this.handleUncaughtException(error);
|
|
30
|
+
});
|
|
31
|
+
// Handle process termination signals
|
|
32
|
+
process.on('SIGTERM', () => {
|
|
33
|
+
this.handleShutdown('SIGTERM');
|
|
34
|
+
});
|
|
35
|
+
process.on('SIGINT', () => {
|
|
36
|
+
this.handleShutdown('SIGINT');
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Handles unhandled promise rejections
|
|
41
|
+
*/
|
|
42
|
+
handleUnhandledRejection(reason) {
|
|
43
|
+
const logger = getLogger();
|
|
44
|
+
const error = toAppError(reason);
|
|
45
|
+
logger.error('Unhandled promise rejection', error, {
|
|
46
|
+
isOperational: error.isOperational,
|
|
47
|
+
});
|
|
48
|
+
if (!isOperationalError(error) && this.options.exitOnUnhandledRejection) {
|
|
49
|
+
this.exitProcess(1);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Handles uncaught exceptions
|
|
54
|
+
*/
|
|
55
|
+
handleUncaughtException(error) {
|
|
56
|
+
const logger = getLogger();
|
|
57
|
+
const appError = toAppError(error);
|
|
58
|
+
logger.error('Uncaught exception', appError, {
|
|
59
|
+
isOperational: appError.isOperational,
|
|
60
|
+
});
|
|
61
|
+
if (!isOperationalError(appError) && this.options.exitOnUncaughtException) {
|
|
62
|
+
this.exitProcess(1);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Handles graceful shutdown
|
|
67
|
+
*/
|
|
68
|
+
handleShutdown(signal) {
|
|
69
|
+
const logger = getLogger();
|
|
70
|
+
if (this.isShuttingDown) {
|
|
71
|
+
logger.warn('Shutdown already in progress, forcing exit');
|
|
72
|
+
this.exitProcess(1);
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
this.isShuttingDown = true;
|
|
76
|
+
logger.info(`Received ${signal}, starting graceful shutdown`);
|
|
77
|
+
// Give the application time to clean up
|
|
78
|
+
setTimeout(() => {
|
|
79
|
+
logger.info('Graceful shutdown complete');
|
|
80
|
+
this.exitProcess(0);
|
|
81
|
+
}, 5000);
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Exits the process
|
|
85
|
+
*/
|
|
86
|
+
exitProcess(code) {
|
|
87
|
+
process.exit(code);
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Handles an error and returns a safe response
|
|
91
|
+
*/
|
|
92
|
+
handleError(error) {
|
|
93
|
+
const logger = getLogger();
|
|
94
|
+
const appError = toAppError(error);
|
|
95
|
+
// Log the error
|
|
96
|
+
if (isOperationalError(appError)) {
|
|
97
|
+
logger.warn('Operational error occurred', {
|
|
98
|
+
code: appError.code,
|
|
99
|
+
message: appError.message,
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
logger.error('Non-operational error occurred', appError, {
|
|
104
|
+
code: appError.code,
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
return appError;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Wraps an async function with error handling
|
|
111
|
+
*/
|
|
112
|
+
wrapAsync(fn) {
|
|
113
|
+
return async (...args) => {
|
|
114
|
+
try {
|
|
115
|
+
return await fn(...args);
|
|
116
|
+
}
|
|
117
|
+
catch (error) {
|
|
118
|
+
const appError = this.handleError(error);
|
|
119
|
+
throw appError;
|
|
120
|
+
}
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Wraps a sync function with error handling
|
|
125
|
+
*/
|
|
126
|
+
wrapSync(fn) {
|
|
127
|
+
return (...args) => {
|
|
128
|
+
try {
|
|
129
|
+
return fn(...args);
|
|
130
|
+
}
|
|
131
|
+
catch (error) {
|
|
132
|
+
const appError = this.handleError(error);
|
|
133
|
+
throw appError;
|
|
134
|
+
}
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Global error handler instance
|
|
140
|
+
*/
|
|
141
|
+
let globalErrorHandler = null;
|
|
142
|
+
/**
|
|
143
|
+
* Initializes the global error handler
|
|
144
|
+
*/
|
|
145
|
+
export function initErrorHandler(options) {
|
|
146
|
+
globalErrorHandler = new ErrorHandler(options);
|
|
147
|
+
globalErrorHandler.initialize();
|
|
148
|
+
return globalErrorHandler;
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Gets the global error handler
|
|
152
|
+
*/
|
|
153
|
+
export function getErrorHandler() {
|
|
154
|
+
if (!globalErrorHandler) {
|
|
155
|
+
globalErrorHandler = new ErrorHandler();
|
|
156
|
+
globalErrorHandler.initialize();
|
|
157
|
+
}
|
|
158
|
+
return globalErrorHandler;
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Safely executes an async function and handles errors
|
|
162
|
+
*/
|
|
163
|
+
export async function safeAsync(fn, fallback) {
|
|
164
|
+
try {
|
|
165
|
+
return await fn();
|
|
166
|
+
}
|
|
167
|
+
catch (error) {
|
|
168
|
+
getErrorHandler().handleError(error);
|
|
169
|
+
return fallback;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Safely executes a sync function and handles errors
|
|
174
|
+
*/
|
|
175
|
+
export function safeSync(fn, fallback) {
|
|
176
|
+
try {
|
|
177
|
+
return fn();
|
|
178
|
+
}
|
|
179
|
+
catch (error) {
|
|
180
|
+
getErrorHandler().handleError(error);
|
|
181
|
+
return fallback;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
//# sourceMappingURL=error-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-handler.js","sourceRoot":"","sources":["../../src/utils/error-handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Custom error classes for different error types
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Base error class for all application errors
|
|
6
|
+
*/
|
|
7
|
+
export declare class AppError extends Error {
|
|
8
|
+
code: string;
|
|
9
|
+
statusCode: number;
|
|
10
|
+
readonly isOperational: boolean;
|
|
11
|
+
readonly details?: unknown;
|
|
12
|
+
constructor(message: string, code: string, statusCode?: number, isOperational?: boolean, details?: unknown);
|
|
13
|
+
/**
|
|
14
|
+
* Converts error to JSON format for MCP responses
|
|
15
|
+
*/
|
|
16
|
+
toJSON(): {
|
|
17
|
+
error: {
|
|
18
|
+
code: string;
|
|
19
|
+
message: string;
|
|
20
|
+
details: unknown;
|
|
21
|
+
};
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* File system related errors
|
|
26
|
+
*/
|
|
27
|
+
export declare class FileSystemError extends AppError {
|
|
28
|
+
constructor(message: string, details?: unknown);
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* File not found error
|
|
32
|
+
*/
|
|
33
|
+
export declare class FileNotFoundError extends FileSystemError {
|
|
34
|
+
constructor(filePath: string);
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Permission denied error
|
|
38
|
+
*/
|
|
39
|
+
export declare class PermissionDeniedError extends FileSystemError {
|
|
40
|
+
constructor(filePath: string);
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Parsing related errors
|
|
44
|
+
*/
|
|
45
|
+
export declare class ParsingError extends AppError {
|
|
46
|
+
constructor(message: string, details?: unknown);
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Invalid JSON error
|
|
50
|
+
*/
|
|
51
|
+
export declare class InvalidJsonError extends ParsingError {
|
|
52
|
+
constructor(message: string, details?: unknown);
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Invalid structure error
|
|
56
|
+
*/
|
|
57
|
+
export declare class InvalidStructureError extends ParsingError {
|
|
58
|
+
constructor(message: string, details?: unknown);
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Validation related errors
|
|
62
|
+
*/
|
|
63
|
+
export declare class ValidationError extends AppError {
|
|
64
|
+
constructor(message: string, details?: unknown);
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Duplicate name error
|
|
68
|
+
*/
|
|
69
|
+
export declare class DuplicateNameError extends ValidationError {
|
|
70
|
+
constructor(name: string, types: string[]);
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Invalid component structure error
|
|
74
|
+
*/
|
|
75
|
+
export declare class InvalidComponentError extends ValidationError {
|
|
76
|
+
constructor(message: string, details?: unknown);
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Query related errors
|
|
80
|
+
*/
|
|
81
|
+
export declare class QueryError extends AppError {
|
|
82
|
+
constructor(message: string, details?: unknown);
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Component not found error
|
|
86
|
+
*/
|
|
87
|
+
export declare class ComponentNotFoundError extends QueryError {
|
|
88
|
+
constructor(name: string);
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Invalid search query error
|
|
92
|
+
*/
|
|
93
|
+
export declare class InvalidSearchQueryError extends QueryError {
|
|
94
|
+
constructor(message: string, details?: unknown);
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Invalid pagination parameters error
|
|
98
|
+
*/
|
|
99
|
+
export declare class InvalidPaginationError extends QueryError {
|
|
100
|
+
constructor(message: string, details?: unknown);
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* MCP protocol related errors
|
|
104
|
+
*/
|
|
105
|
+
export declare class McpError extends AppError {
|
|
106
|
+
constructor(message: string, details?: unknown);
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Invalid tool name error
|
|
110
|
+
*/
|
|
111
|
+
export declare class InvalidToolError extends McpError {
|
|
112
|
+
constructor(toolName: string);
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Missing required parameter error
|
|
116
|
+
*/
|
|
117
|
+
export declare class MissingParameterError extends McpError {
|
|
118
|
+
constructor(parameterName: string, toolName: string);
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Invalid parameter type error
|
|
122
|
+
*/
|
|
123
|
+
export declare class InvalidParameterError extends McpError {
|
|
124
|
+
constructor(parameterName: string, expectedType: string, actualType: string);
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Runtime errors
|
|
128
|
+
*/
|
|
129
|
+
export declare class RuntimeError extends AppError {
|
|
130
|
+
constructor(message: string, details?: unknown);
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Out of memory error
|
|
134
|
+
*/
|
|
135
|
+
export declare class OutOfMemoryError extends RuntimeError {
|
|
136
|
+
constructor(details?: unknown);
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Unexpected error
|
|
140
|
+
*/
|
|
141
|
+
export declare class UnexpectedError extends RuntimeError {
|
|
142
|
+
constructor(message: string, details?: unknown);
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Type guard to check if an error is an AppError
|
|
146
|
+
*/
|
|
147
|
+
export declare function isAppError(error: unknown): error is AppError;
|
|
148
|
+
/**
|
|
149
|
+
* Type guard to check if an error is operational
|
|
150
|
+
*/
|
|
151
|
+
export declare function isOperationalError(error: unknown): boolean;
|
|
152
|
+
/**
|
|
153
|
+
* Converts any error to an AppError
|
|
154
|
+
*/
|
|
155
|
+
export declare function toAppError(error: unknown): AppError;
|
|
156
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"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"}
|