@chykalophia/clickup-mcp-server 3.2.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/LICENSE +21 -0
- package/README.md +467 -0
- package/bin/clickup-mcp-server-ai.js +9 -0
- package/bin/clickup-mcp-server-basic.js +9 -0
- package/bin/clickup-mcp-server-efficiency.js +9 -0
- package/bin/clickup-mcp-server-enhanced.js +9 -0
- package/build/app.d.ts +1 -0
- package/build/app.js +2 -0
- package/build/app.js.map +1 -0
- package/build/clickup-client/attachments-enhanced.d.ts +128 -0
- package/build/clickup-client/attachments-enhanced.js +212 -0
- package/build/clickup-client/attachments-enhanced.js.map +1 -0
- package/build/clickup-client/auth.d.ts +254 -0
- package/build/clickup-client/auth.js +105 -0
- package/build/clickup-client/auth.js.map +1 -0
- package/build/clickup-client/chat-enhanced.d.ts +141 -0
- package/build/clickup-client/chat-enhanced.js +196 -0
- package/build/clickup-client/chat-enhanced.js.map +1 -0
- package/build/clickup-client/checklists.d.ts +87 -0
- package/build/clickup-client/checklists.js +63 -0
- package/build/clickup-client/checklists.js.map +1 -0
- package/build/clickup-client/comments-enhanced.d.ts +176 -0
- package/build/clickup-client/comments-enhanced.js +230 -0
- package/build/clickup-client/comments-enhanced.js.map +1 -0
- package/build/clickup-client/comments.d.ts +173 -0
- package/build/clickup-client/comments.js +312 -0
- package/build/clickup-client/comments.js.map +1 -0
- package/build/clickup-client/custom-fields-enhanced.d.ts +286 -0
- package/build/clickup-client/custom-fields-enhanced.js +416 -0
- package/build/clickup-client/custom-fields-enhanced.js.map +1 -0
- package/build/clickup-client/dependencies-enhanced.d.ts +144 -0
- package/build/clickup-client/dependencies-enhanced.js +142 -0
- package/build/clickup-client/dependencies-enhanced.js.map +1 -0
- package/build/clickup-client/docs-enhanced.d.ts +176 -0
- package/build/clickup-client/docs-enhanced.js +374 -0
- package/build/clickup-client/docs-enhanced.js.map +1 -0
- package/build/clickup-client/docs.d.ts +84 -0
- package/build/clickup-client/docs.js +156 -0
- package/build/clickup-client/docs.js.map +1 -0
- package/build/clickup-client/folders.d.ts +62 -0
- package/build/clickup-client/folders.js +53 -0
- package/build/clickup-client/folders.js.map +1 -0
- package/build/clickup-client/goals-enhanced.d.ts +163 -0
- package/build/clickup-client/goals-enhanced.js +309 -0
- package/build/clickup-client/goals-enhanced.js.map +1 -0
- package/build/clickup-client/index.d.ts +16 -0
- package/build/clickup-client/index.js +61 -0
- package/build/clickup-client/index.js.map +1 -0
- package/build/clickup-client/lists.d.ts +105 -0
- package/build/clickup-client/lists.js +108 -0
- package/build/clickup-client/lists.js.map +1 -0
- package/build/clickup-client/secure-client.d.ts +88 -0
- package/build/clickup-client/secure-client.js +275 -0
- package/build/clickup-client/secure-client.js.map +1 -0
- package/build/clickup-client/spaces.d.ts +58 -0
- package/build/clickup-client/spaces.js +28 -0
- package/build/clickup-client/spaces.js.map +1 -0
- package/build/clickup-client/tasks.d.ts +161 -0
- package/build/clickup-client/tasks.js +99 -0
- package/build/clickup-client/tasks.js.map +1 -0
- package/build/clickup-client/time-tracking-enhanced.d.ts +153 -0
- package/build/clickup-client/time-tracking-enhanced.js +292 -0
- package/build/clickup-client/time-tracking-enhanced.js.map +1 -0
- package/build/clickup-client/views-enhanced.d.ts +149 -0
- package/build/clickup-client/views-enhanced.js +210 -0
- package/build/clickup-client/views-enhanced.js.map +1 -0
- package/build/clickup-client/webhooks-enhanced.d.ts +119 -0
- package/build/clickup-client/webhooks-enhanced.js +169 -0
- package/build/clickup-client/webhooks-enhanced.js.map +1 -0
- package/build/controllers/lists.controller.d.ts +1 -0
- package/build/controllers/lists.controller.js +2 -0
- package/build/controllers/lists.controller.js.map +1 -0
- package/build/index-efficiency-simple.d.ts +2 -0
- package/build/index-efficiency-simple.js +379 -0
- package/build/index-efficiency-simple.js.map +1 -0
- package/build/index-enhanced-efficiency.d.ts +2 -0
- package/build/index-enhanced-efficiency.js +275 -0
- package/build/index-enhanced-efficiency.js.map +1 -0
- package/build/index-enhanced.d.ts +2 -0
- package/build/index-enhanced.js +74 -0
- package/build/index-enhanced.js.map +1 -0
- package/build/index.d.ts +2 -0
- package/build/index.js +77 -0
- package/build/index.js.map +1 -0
- package/build/resources/checklist-resources.d.ts +2 -0
- package/build/resources/checklist-resources.js +102 -0
- package/build/resources/checklist-resources.js.map +1 -0
- package/build/resources/comment-resources.d.ts +2 -0
- package/build/resources/comment-resources.js +152 -0
- package/build/resources/comment-resources.js.map +1 -0
- package/build/resources/doc-resources.d.ts +2 -0
- package/build/resources/doc-resources.js +77 -0
- package/build/resources/doc-resources.js.map +1 -0
- package/build/resources/folder-resources.d.ts +2 -0
- package/build/resources/folder-resources.js +160 -0
- package/build/resources/folder-resources.js.map +1 -0
- package/build/resources/list-resources.d.ts +2 -0
- package/build/resources/list-resources.js +104 -0
- package/build/resources/list-resources.js.map +1 -0
- package/build/resources/space-resources.d.ts +2 -0
- package/build/resources/space-resources.js +104 -0
- package/build/resources/space-resources.js.map +1 -0
- package/build/resources/task-resources.d.ts +2 -0
- package/build/resources/task-resources.js +57 -0
- package/build/resources/task-resources.js.map +1 -0
- package/build/routes/lists.routes.d.ts +1 -0
- package/build/routes/lists.routes.js +2 -0
- package/build/routes/lists.routes.js.map +1 -0
- package/build/schemas/attachments-schemas.d.ts +201 -0
- package/build/schemas/attachments-schemas.js +250 -0
- package/build/schemas/attachments-schemas.js.map +1 -0
- package/build/schemas/chat-schemas.d.ts +478 -0
- package/build/schemas/chat-schemas.js +173 -0
- package/build/schemas/chat-schemas.js.map +1 -0
- package/build/schemas/custom-field-schemas.d.ts +1617 -0
- package/build/schemas/custom-field-schemas.js +384 -0
- package/build/schemas/custom-field-schemas.js.map +1 -0
- package/build/schemas/dependencies-schemas.d.ts +274 -0
- package/build/schemas/dependencies-schemas.js +176 -0
- package/build/schemas/dependencies-schemas.js.map +1 -0
- package/build/schemas/document-schemas.d.ts +433 -0
- package/build/schemas/document-schemas.js +168 -0
- package/build/schemas/document-schemas.js.map +1 -0
- package/build/schemas/goals-schemas.d.ts +961 -0
- package/build/schemas/goals-schemas.js +293 -0
- package/build/schemas/goals-schemas.js.map +1 -0
- package/build/schemas/time-tracking-schemas.d.ts +741 -0
- package/build/schemas/time-tracking-schemas.js +234 -0
- package/build/schemas/time-tracking-schemas.js.map +1 -0
- package/build/schemas/views-schemas.d.ts +1168 -0
- package/build/schemas/views-schemas.js +221 -0
- package/build/schemas/views-schemas.js.map +1 -0
- package/build/schemas/webhook-schemas.d.ts +1127 -0
- package/build/schemas/webhook-schemas.js +137 -0
- package/build/schemas/webhook-schemas.js.map +1 -0
- package/build/services/lists.service.d.ts +1 -0
- package/build/services/lists.service.js +2 -0
- package/build/services/lists.service.js.map +1 -0
- package/build/tools/attachments-tools-setup.d.ts +2 -0
- package/build/tools/attachments-tools-setup.js +387 -0
- package/build/tools/attachments-tools-setup.js.map +1 -0
- package/build/tools/chat-tools-enhanced.d.ts +5 -0
- package/build/tools/chat-tools-enhanced.js +396 -0
- package/build/tools/chat-tools-enhanced.js.map +1 -0
- package/build/tools/chat-tools.d.ts +2 -0
- package/build/tools/chat-tools.js +614 -0
- package/build/tools/chat-tools.js.map +1 -0
- package/build/tools/checklist-tools.d.ts +2 -0
- package/build/tools/checklist-tools.js +139 -0
- package/build/tools/checklist-tools.js.map +1 -0
- package/build/tools/comment-tools.d.ts +2 -0
- package/build/tools/comment-tools.js +295 -0
- package/build/tools/comment-tools.js.map +1 -0
- package/build/tools/custom-field-tools.d.ts +2 -0
- package/build/tools/custom-field-tools.js +578 -0
- package/build/tools/custom-field-tools.js.map +1 -0
- package/build/tools/dependencies-tools-setup.d.ts +2 -0
- package/build/tools/dependencies-tools-setup.js +319 -0
- package/build/tools/dependencies-tools-setup.js.map +1 -0
- package/build/tools/doc-tools-enhanced.d.ts +2 -0
- package/build/tools/doc-tools-enhanced.js +417 -0
- package/build/tools/doc-tools-enhanced.js.map +1 -0
- package/build/tools/doc-tools.d.ts +2 -0
- package/build/tools/doc-tools.js +109 -0
- package/build/tools/doc-tools.js.map +1 -0
- package/build/tools/goals-tools.d.ts +2 -0
- package/build/tools/goals-tools.js +422 -0
- package/build/tools/goals-tools.js.map +1 -0
- package/build/tools/helper-tools.d.ts +2 -0
- package/build/tools/helper-tools.js +363 -0
- package/build/tools/helper-tools.js.map +1 -0
- package/build/tools/space-tools.d.ts +2 -0
- package/build/tools/space-tools.js +45 -0
- package/build/tools/space-tools.js.map +1 -0
- package/build/tools/task-tools.d.ts +2 -0
- package/build/tools/task-tools.js +415 -0
- package/build/tools/task-tools.js.map +1 -0
- package/build/tools/time-tracking-tools.d.ts +2 -0
- package/build/tools/time-tracking-tools.js +329 -0
- package/build/tools/time-tracking-tools.js.map +1 -0
- package/build/tools/views-tools-setup.d.ts +2 -0
- package/build/tools/views-tools-setup.js +358 -0
- package/build/tools/views-tools-setup.js.map +1 -0
- package/build/tools/webhook-tools-setup.d.ts +2 -0
- package/build/tools/webhook-tools-setup.js +304 -0
- package/build/tools/webhook-tools-setup.js.map +1 -0
- package/build/tools/webhook-tools.d.ts +4 -0
- package/build/tools/webhook-tools.js +345 -0
- package/build/tools/webhook-tools.js.map +1 -0
- package/build/utils/clickup-comment-formatter.d.ts +124 -0
- package/build/utils/clickup-comment-formatter.js +504 -0
- package/build/utils/clickup-comment-formatter.js.map +1 -0
- package/build/utils/context-aware-suggestions.d.ts +45 -0
- package/build/utils/context-aware-suggestions.js +360 -0
- package/build/utils/context-aware-suggestions.js.map +1 -0
- package/build/utils/error-handling.d.ts +140 -0
- package/build/utils/error-handling.js +392 -0
- package/build/utils/error-handling.js.map +1 -0
- package/build/utils/markdown-styling.d.ts +40 -0
- package/build/utils/markdown-styling.js +344 -0
- package/build/utils/markdown-styling.js.map +1 -0
- package/build/utils/markdown.d.ts +54 -0
- package/build/utils/markdown.js +243 -0
- package/build/utils/markdown.js.map +1 -0
- package/build/utils/security.d.ts +79 -0
- package/build/utils/security.js +303 -0
- package/build/utils/security.js.map +1 -0
- package/build/utils/tool-efficiency.d.ts +59 -0
- package/build/utils/tool-efficiency.js +247 -0
- package/build/utils/tool-efficiency.js.map +1 -0
- package/package.json +130 -0
|
@@ -0,0 +1,392 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
/**
|
|
3
|
+
* Comprehensive error handling utilities for the ClickUp MCP Server
|
|
4
|
+
*/
|
|
5
|
+
// Error types
|
|
6
|
+
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
7
|
+
export var ErrorType;
|
|
8
|
+
(function (ErrorType) {
|
|
9
|
+
ErrorType["VALIDATION"] = "VALIDATION";
|
|
10
|
+
ErrorType["AUTHENTICATION"] = "AUTHENTICATION";
|
|
11
|
+
ErrorType["AUTHORIZATION"] = "AUTHORIZATION";
|
|
12
|
+
ErrorType["NOT_FOUND"] = "NOT_FOUND";
|
|
13
|
+
ErrorType["RATE_LIMIT"] = "RATE_LIMIT";
|
|
14
|
+
ErrorType["API_ERROR"] = "API_ERROR";
|
|
15
|
+
ErrorType["NETWORK_ERROR"] = "NETWORK_ERROR";
|
|
16
|
+
ErrorType["TIMEOUT"] = "TIMEOUT";
|
|
17
|
+
ErrorType["INTERNAL_ERROR"] = "INTERNAL_ERROR";
|
|
18
|
+
ErrorType["WEBHOOK_ERROR"] = "WEBHOOK_ERROR";
|
|
19
|
+
ErrorType["FILE_ERROR"] = "FILE_ERROR";
|
|
20
|
+
})(ErrorType || (ErrorType = {}));
|
|
21
|
+
// Error severity levels
|
|
22
|
+
export var ErrorSeverity;
|
|
23
|
+
(function (ErrorSeverity) {
|
|
24
|
+
ErrorSeverity["LOW"] = "LOW";
|
|
25
|
+
ErrorSeverity["MEDIUM"] = "MEDIUM";
|
|
26
|
+
ErrorSeverity["HIGH"] = "HIGH";
|
|
27
|
+
ErrorSeverity["CRITICAL"] = "CRITICAL";
|
|
28
|
+
})(ErrorSeverity || (ErrorSeverity = {}));
|
|
29
|
+
/**
|
|
30
|
+
* Create a structured error
|
|
31
|
+
*/
|
|
32
|
+
export const createStructuredError = (type, message, options = {}) => {
|
|
33
|
+
return {
|
|
34
|
+
type,
|
|
35
|
+
severity: options.severity || ErrorSeverity.MEDIUM,
|
|
36
|
+
message,
|
|
37
|
+
code: options.code,
|
|
38
|
+
details: options.details,
|
|
39
|
+
timestamp: new Date().toISOString(),
|
|
40
|
+
requestId: options.requestId,
|
|
41
|
+
userId: options.userId,
|
|
42
|
+
workspaceId: options.workspaceId,
|
|
43
|
+
stack: options.originalError?.stack,
|
|
44
|
+
retryable: options.retryable || false,
|
|
45
|
+
retryAfter: options.retryAfter
|
|
46
|
+
};
|
|
47
|
+
};
|
|
48
|
+
/**
|
|
49
|
+
* Convert structured error to MCP response
|
|
50
|
+
*/
|
|
51
|
+
export const errorToMcpResponse = (error) => {
|
|
52
|
+
const userMessage = getUserFriendlyMessage(error);
|
|
53
|
+
return {
|
|
54
|
+
content: [{
|
|
55
|
+
type: 'text',
|
|
56
|
+
text: userMessage
|
|
57
|
+
}],
|
|
58
|
+
isError: true,
|
|
59
|
+
_meta: {
|
|
60
|
+
errorType: error.type,
|
|
61
|
+
severity: error.severity,
|
|
62
|
+
retryable: error.retryable,
|
|
63
|
+
retryAfter: error.retryAfter
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
};
|
|
67
|
+
/**
|
|
68
|
+
* Get user-friendly error message
|
|
69
|
+
*/
|
|
70
|
+
export const getUserFriendlyMessage = (error) => {
|
|
71
|
+
const baseMessage = `Error: ${error.message}`;
|
|
72
|
+
let additionalInfo = '';
|
|
73
|
+
if (error.retryable && error.retryAfter) {
|
|
74
|
+
additionalInfo += `\n\nThis operation can be retried after ${error.retryAfter} seconds.`;
|
|
75
|
+
}
|
|
76
|
+
else if (error.retryable) {
|
|
77
|
+
additionalInfo += '\n\nThis operation can be retried.';
|
|
78
|
+
}
|
|
79
|
+
if (error.type === ErrorType.RATE_LIMIT) {
|
|
80
|
+
additionalInfo += '\n\nPlease reduce the frequency of requests.';
|
|
81
|
+
}
|
|
82
|
+
if (error.type === ErrorType.AUTHENTICATION) {
|
|
83
|
+
additionalInfo += '\n\nPlease check your ClickUp API token.';
|
|
84
|
+
}
|
|
85
|
+
if (error.type === ErrorType.VALIDATION && error.details?.errors) {
|
|
86
|
+
const validationErrors = Array.isArray(error.details.errors)
|
|
87
|
+
? error.details.errors.join(', ')
|
|
88
|
+
: error.details.errors;
|
|
89
|
+
additionalInfo += `\n\nValidation errors: ${validationErrors}`;
|
|
90
|
+
}
|
|
91
|
+
return baseMessage + additionalInfo;
|
|
92
|
+
};
|
|
93
|
+
/**
|
|
94
|
+
* Handle ClickUp API errors
|
|
95
|
+
*/
|
|
96
|
+
export const handleClickUpApiError = (error, context) => {
|
|
97
|
+
if (error.response) {
|
|
98
|
+
const status = error.response.status;
|
|
99
|
+
const data = error.response.data;
|
|
100
|
+
// Map HTTP status codes to error types
|
|
101
|
+
let errorType;
|
|
102
|
+
let severity;
|
|
103
|
+
let retryable = false;
|
|
104
|
+
let retryAfter;
|
|
105
|
+
switch (status) {
|
|
106
|
+
case 400:
|
|
107
|
+
errorType = ErrorType.VALIDATION;
|
|
108
|
+
severity = ErrorSeverity.LOW;
|
|
109
|
+
break;
|
|
110
|
+
case 401:
|
|
111
|
+
errorType = ErrorType.AUTHENTICATION;
|
|
112
|
+
severity = ErrorSeverity.HIGH;
|
|
113
|
+
break;
|
|
114
|
+
case 403:
|
|
115
|
+
errorType = ErrorType.AUTHORIZATION;
|
|
116
|
+
severity = ErrorSeverity.HIGH;
|
|
117
|
+
break;
|
|
118
|
+
case 404:
|
|
119
|
+
errorType = ErrorType.NOT_FOUND;
|
|
120
|
+
severity = ErrorSeverity.LOW;
|
|
121
|
+
break;
|
|
122
|
+
case 429:
|
|
123
|
+
errorType = ErrorType.RATE_LIMIT;
|
|
124
|
+
severity = ErrorSeverity.MEDIUM;
|
|
125
|
+
retryable = true;
|
|
126
|
+
retryAfter = parseInt(error.response.headers['retry-after'], 10) || 60;
|
|
127
|
+
break;
|
|
128
|
+
case 500:
|
|
129
|
+
case 502:
|
|
130
|
+
case 503:
|
|
131
|
+
case 504:
|
|
132
|
+
errorType = ErrorType.API_ERROR;
|
|
133
|
+
severity = ErrorSeverity.HIGH;
|
|
134
|
+
retryable = true;
|
|
135
|
+
retryAfter = 30;
|
|
136
|
+
break;
|
|
137
|
+
default:
|
|
138
|
+
errorType = ErrorType.API_ERROR;
|
|
139
|
+
severity = ErrorSeverity.MEDIUM;
|
|
140
|
+
retryable = status >= 500;
|
|
141
|
+
}
|
|
142
|
+
return createStructuredError(errorType, data?.err || data?.error || error.message || `HTTP ${status} error`, {
|
|
143
|
+
severity,
|
|
144
|
+
code: status.toString(),
|
|
145
|
+
details: {
|
|
146
|
+
status,
|
|
147
|
+
data,
|
|
148
|
+
operation: context?.operation
|
|
149
|
+
},
|
|
150
|
+
requestId: context?.requestId,
|
|
151
|
+
userId: context?.userId,
|
|
152
|
+
workspaceId: context?.workspaceId,
|
|
153
|
+
originalError: error,
|
|
154
|
+
retryable,
|
|
155
|
+
retryAfter
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
if (error.code === 'ECONNABORTED' || error.code === 'ETIMEDOUT') {
|
|
159
|
+
return createStructuredError(ErrorType.TIMEOUT, 'Request timed out', {
|
|
160
|
+
severity: ErrorSeverity.MEDIUM,
|
|
161
|
+
code: error.code,
|
|
162
|
+
details: { operation: context?.operation },
|
|
163
|
+
requestId: context?.requestId,
|
|
164
|
+
userId: context?.userId,
|
|
165
|
+
workspaceId: context?.workspaceId,
|
|
166
|
+
originalError: error,
|
|
167
|
+
retryable: true,
|
|
168
|
+
retryAfter: 10
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
if (error.code === 'ENOTFOUND' || error.code === 'ECONNREFUSED') {
|
|
172
|
+
return createStructuredError(ErrorType.NETWORK_ERROR, 'Network connection failed', {
|
|
173
|
+
severity: ErrorSeverity.HIGH,
|
|
174
|
+
code: error.code,
|
|
175
|
+
details: { operation: context?.operation },
|
|
176
|
+
requestId: context?.requestId,
|
|
177
|
+
userId: context?.userId,
|
|
178
|
+
workspaceId: context?.workspaceId,
|
|
179
|
+
originalError: error,
|
|
180
|
+
retryable: true,
|
|
181
|
+
retryAfter: 30
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
return createStructuredError(ErrorType.INTERNAL_ERROR, error.message || 'Unknown error occurred', {
|
|
185
|
+
severity: ErrorSeverity.HIGH,
|
|
186
|
+
details: { operation: context?.operation },
|
|
187
|
+
requestId: context?.requestId,
|
|
188
|
+
userId: context?.userId,
|
|
189
|
+
workspaceId: context?.workspaceId,
|
|
190
|
+
originalError: error,
|
|
191
|
+
retryable: false
|
|
192
|
+
});
|
|
193
|
+
};
|
|
194
|
+
/**
|
|
195
|
+
* Handle validation errors
|
|
196
|
+
*/
|
|
197
|
+
export const handleValidationError = (error, context) => {
|
|
198
|
+
const errors = error.errors.map(err => `${err.path.join('.')}: ${err.message}`);
|
|
199
|
+
return createStructuredError(ErrorType.VALIDATION, 'Input validation failed', {
|
|
200
|
+
severity: ErrorSeverity.LOW,
|
|
201
|
+
details: {
|
|
202
|
+
errors,
|
|
203
|
+
operation: context?.operation
|
|
204
|
+
},
|
|
205
|
+
requestId: context?.requestId,
|
|
206
|
+
retryable: false
|
|
207
|
+
});
|
|
208
|
+
};
|
|
209
|
+
/**
|
|
210
|
+
* Handle webhook errors
|
|
211
|
+
*/
|
|
212
|
+
export const handleWebhookError = (error, context) => {
|
|
213
|
+
return createStructuredError(ErrorType.WEBHOOK_ERROR, error.message || 'Webhook processing failed', {
|
|
214
|
+
severity: ErrorSeverity.MEDIUM,
|
|
215
|
+
details: {
|
|
216
|
+
webhookId: context?.webhookId,
|
|
217
|
+
eventType: context?.eventType
|
|
218
|
+
},
|
|
219
|
+
requestId: context?.requestId,
|
|
220
|
+
originalError: error,
|
|
221
|
+
retryable: true,
|
|
222
|
+
retryAfter: 60
|
|
223
|
+
});
|
|
224
|
+
};
|
|
225
|
+
/**
|
|
226
|
+
* Handle file operation errors
|
|
227
|
+
*/
|
|
228
|
+
export const handleFileError = (error, context) => {
|
|
229
|
+
let message = error.message || 'File operation failed';
|
|
230
|
+
let severity = ErrorSeverity.MEDIUM;
|
|
231
|
+
if (error.code === 'ENOENT') {
|
|
232
|
+
message = 'File not found';
|
|
233
|
+
severity = ErrorSeverity.LOW;
|
|
234
|
+
}
|
|
235
|
+
else if (error.code === 'EACCES') {
|
|
236
|
+
message = 'Permission denied';
|
|
237
|
+
severity = ErrorSeverity.HIGH;
|
|
238
|
+
}
|
|
239
|
+
else if (error.code === 'ENOSPC') {
|
|
240
|
+
message = 'No space left on device';
|
|
241
|
+
severity = ErrorSeverity.HIGH;
|
|
242
|
+
}
|
|
243
|
+
return createStructuredError(ErrorType.FILE_ERROR, message, {
|
|
244
|
+
severity,
|
|
245
|
+
code: error.code,
|
|
246
|
+
details: {
|
|
247
|
+
filename: context?.filename,
|
|
248
|
+
operation: context?.operation
|
|
249
|
+
},
|
|
250
|
+
requestId: context?.requestId,
|
|
251
|
+
originalError: error,
|
|
252
|
+
retryable: error.code !== 'EACCES'
|
|
253
|
+
});
|
|
254
|
+
};
|
|
255
|
+
/**
|
|
256
|
+
* Retry mechanism with exponential backoff
|
|
257
|
+
*/
|
|
258
|
+
export class RetryManager {
|
|
259
|
+
constructor(maxRetries = 3, baseDelay = 1000, maxDelay = 30000) {
|
|
260
|
+
this.maxRetries = maxRetries;
|
|
261
|
+
this.baseDelay = baseDelay;
|
|
262
|
+
this.maxDelay = maxDelay;
|
|
263
|
+
}
|
|
264
|
+
async executeWithRetry(operation, context) {
|
|
265
|
+
let lastError;
|
|
266
|
+
for (let attempt = 0; attempt <= this.maxRetries; attempt++) {
|
|
267
|
+
try {
|
|
268
|
+
return await operation();
|
|
269
|
+
}
|
|
270
|
+
catch (error) {
|
|
271
|
+
const structuredError = error instanceof Error
|
|
272
|
+
? handleClickUpApiError(error, { operation: context?.operationName, requestId: context?.requestId })
|
|
273
|
+
: error;
|
|
274
|
+
lastError = structuredError;
|
|
275
|
+
// Don't retry if not retryable or on last attempt
|
|
276
|
+
if (!structuredError.retryable || attempt === this.maxRetries) {
|
|
277
|
+
break;
|
|
278
|
+
}
|
|
279
|
+
// Calculate delay with exponential backoff
|
|
280
|
+
const delay = Math.min(this.baseDelay * Math.pow(2, attempt), structuredError.retryAfter ? structuredError.retryAfter * 1000 : this.maxDelay);
|
|
281
|
+
console.warn(`Attempt ${attempt + 1} failed, retrying in ${delay}ms:`, structuredError.message);
|
|
282
|
+
await new Promise(resolve => setTimeout(resolve, delay));
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
throw lastError;
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
/**
|
|
289
|
+
* Global error logger
|
|
290
|
+
*/
|
|
291
|
+
export const logError = (error) => {
|
|
292
|
+
const logLevel = error.severity === ErrorSeverity.CRITICAL ? 'error' :
|
|
293
|
+
error.severity === ErrorSeverity.HIGH ? 'error' :
|
|
294
|
+
error.severity === ErrorSeverity.MEDIUM ? 'warn' : 'info';
|
|
295
|
+
const logData = {
|
|
296
|
+
timestamp: error.timestamp,
|
|
297
|
+
type: error.type,
|
|
298
|
+
severity: error.severity,
|
|
299
|
+
message: error.message,
|
|
300
|
+
code: error.code,
|
|
301
|
+
details: error.details,
|
|
302
|
+
requestId: error.requestId,
|
|
303
|
+
userId: error.userId,
|
|
304
|
+
workspaceId: error.workspaceId,
|
|
305
|
+
retryable: error.retryable
|
|
306
|
+
};
|
|
307
|
+
console[logLevel](`[${error.type}] ${error.message}`, logData);
|
|
308
|
+
// In production, send to monitoring service
|
|
309
|
+
if (error.severity === ErrorSeverity.CRITICAL) {
|
|
310
|
+
// Send alert to monitoring system
|
|
311
|
+
console.error('CRITICAL ERROR - IMMEDIATE ATTENTION REQUIRED', logData);
|
|
312
|
+
}
|
|
313
|
+
};
|
|
314
|
+
/**
|
|
315
|
+
* Wrap MCP tool execution with error handling
|
|
316
|
+
*/
|
|
317
|
+
export const wrapMcpTool = (toolName, schema, handler) => {
|
|
318
|
+
return async (args) => {
|
|
319
|
+
const requestId = generateRequestId();
|
|
320
|
+
try {
|
|
321
|
+
// Validate input
|
|
322
|
+
const validatedArgs = schema.parse(args);
|
|
323
|
+
// Execute handler with proper type casting
|
|
324
|
+
const result = await handler(validatedArgs);
|
|
325
|
+
// Return success response
|
|
326
|
+
return {
|
|
327
|
+
content: [{
|
|
328
|
+
type: 'text',
|
|
329
|
+
text: typeof result === 'string' ? result : JSON.stringify(result, null, 2)
|
|
330
|
+
}]
|
|
331
|
+
};
|
|
332
|
+
}
|
|
333
|
+
catch (error) {
|
|
334
|
+
let structuredError;
|
|
335
|
+
if (error instanceof z.ZodError) {
|
|
336
|
+
structuredError = handleValidationError(error, { operation: toolName, requestId });
|
|
337
|
+
}
|
|
338
|
+
else if (error instanceof Error) {
|
|
339
|
+
structuredError = handleClickUpApiError(error, { operation: toolName, requestId });
|
|
340
|
+
}
|
|
341
|
+
else {
|
|
342
|
+
structuredError = error;
|
|
343
|
+
}
|
|
344
|
+
// Log error
|
|
345
|
+
logError(structuredError);
|
|
346
|
+
// Return error response
|
|
347
|
+
return errorToMcpResponse(structuredError);
|
|
348
|
+
}
|
|
349
|
+
};
|
|
350
|
+
};
|
|
351
|
+
/**
|
|
352
|
+
* Generate unique request ID
|
|
353
|
+
*/
|
|
354
|
+
export const generateRequestId = () => {
|
|
355
|
+
return `req_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
|
|
356
|
+
};
|
|
357
|
+
/**
|
|
358
|
+
* Health check utilities
|
|
359
|
+
*/
|
|
360
|
+
export const performHealthCheck = async () => {
|
|
361
|
+
const checks = {};
|
|
362
|
+
// Check environment variables
|
|
363
|
+
const startTime = Date.now();
|
|
364
|
+
try {
|
|
365
|
+
const envValidation = require('../utils/security').validateEnvironment();
|
|
366
|
+
checks.environment = {
|
|
367
|
+
status: envValidation.isValid ? 'pass' : 'fail',
|
|
368
|
+
message: envValidation.isValid ? 'All required environment variables present' : envValidation.errors.join(', '),
|
|
369
|
+
duration: Date.now() - startTime
|
|
370
|
+
};
|
|
371
|
+
}
|
|
372
|
+
catch (error) {
|
|
373
|
+
checks.environment = {
|
|
374
|
+
status: 'fail',
|
|
375
|
+
message: 'Failed to validate environment',
|
|
376
|
+
duration: Date.now() - startTime
|
|
377
|
+
};
|
|
378
|
+
}
|
|
379
|
+
// Check memory usage
|
|
380
|
+
const memoryUsage = process.memoryUsage();
|
|
381
|
+
const memoryThreshold = 500 * 1024 * 1024; // 500MB
|
|
382
|
+
checks.memory = {
|
|
383
|
+
status: memoryUsage.heapUsed < memoryThreshold ? 'pass' : 'fail',
|
|
384
|
+
message: `Heap used: ${Math.round(memoryUsage.heapUsed / 1024 / 1024)}MB`,
|
|
385
|
+
duration: 0
|
|
386
|
+
};
|
|
387
|
+
// Determine overall status
|
|
388
|
+
const failedChecks = Object.values(checks).filter(check => check.status === 'fail').length;
|
|
389
|
+
const status = failedChecks === 0 ? 'healthy' : failedChecks <= 1 ? 'degraded' : 'unhealthy';
|
|
390
|
+
return { status, checks };
|
|
391
|
+
};
|
|
392
|
+
//# sourceMappingURL=error-handling.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-handling.js","sourceRoot":"","sources":["../../src/utils/error-handling.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Simple Markdown Styling Processor
|
|
3
|
+
* Provides enhanced display formatting for markdown content with visual styling
|
|
4
|
+
*/
|
|
5
|
+
export interface MarkdownStyleOptions {
|
|
6
|
+
useColors?: boolean;
|
|
7
|
+
useEmojis?: boolean;
|
|
8
|
+
indentSize?: number;
|
|
9
|
+
maxWidth?: number;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Main function to apply simple markdown styling
|
|
13
|
+
* @param markdown The markdown content to style
|
|
14
|
+
* @param options Styling options
|
|
15
|
+
* @returns Styled markdown content with visual enhancements
|
|
16
|
+
*/
|
|
17
|
+
export declare function applyMarkdownStyling(markdown: string, options?: MarkdownStyleOptions): string;
|
|
18
|
+
/**
|
|
19
|
+
* Create a styled preview of markdown content
|
|
20
|
+
* @param markdown The markdown content
|
|
21
|
+
* @param title Optional title for the preview
|
|
22
|
+
* @param options Styling options
|
|
23
|
+
* @returns Formatted preview with title and borders
|
|
24
|
+
*/
|
|
25
|
+
export declare function createMarkdownPreview(markdown: string, title?: string, options?: MarkdownStyleOptions): string;
|
|
26
|
+
/**
|
|
27
|
+
* Extract and style markdown sections
|
|
28
|
+
* @param markdown The markdown content
|
|
29
|
+
* @param sectionType The type of section to extract ('headers', 'code', 'lists', etc.)
|
|
30
|
+
* @param options Styling options
|
|
31
|
+
* @returns Styled sections
|
|
32
|
+
*/
|
|
33
|
+
export declare function extractStyledSections(markdown: string, sectionType: 'headers' | 'code' | 'lists' | 'quotes' | 'links', options?: MarkdownStyleOptions): string[];
|
|
34
|
+
/**
|
|
35
|
+
* Create a markdown summary with key information highlighted
|
|
36
|
+
* @param markdown The markdown content
|
|
37
|
+
* @param options Styling options
|
|
38
|
+
* @returns Styled summary
|
|
39
|
+
*/
|
|
40
|
+
export declare function createMarkdownSummary(markdown: string, options?: MarkdownStyleOptions): string;
|