@west10tech/constructionwire-mcp 1.0.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.
Files changed (42) hide show
  1. package/README.md +177 -0
  2. package/dist/clients/constructionwire-client.d.ts +110 -0
  3. package/dist/clients/constructionwire-client.d.ts.map +1 -0
  4. package/dist/clients/constructionwire-client.js +16746 -0
  5. package/dist/clients/constructionwire-client.js.map +1 -0
  6. package/dist/config.d.ts +23 -0
  7. package/dist/config.d.ts.map +1 -0
  8. package/dist/config.js +63 -0
  9. package/dist/config.js.map +1 -0
  10. package/dist/index.d.ts +3 -0
  11. package/dist/index.d.ts.map +1 -0
  12. package/dist/index.js +165 -0
  13. package/dist/index.js.map +1 -0
  14. package/dist/services/log-batcher.d.ts +44 -0
  15. package/dist/services/log-batcher.d.ts.map +1 -0
  16. package/dist/services/log-batcher.js +81 -0
  17. package/dist/services/log-batcher.js.map +1 -0
  18. package/dist/services/log-shipper.d.ts +104 -0
  19. package/dist/services/log-shipper.d.ts.map +1 -0
  20. package/dist/services/log-shipper.js +384 -0
  21. package/dist/services/log-shipper.js.map +1 -0
  22. package/dist/services/logger.d.ts +92 -0
  23. package/dist/services/logger.d.ts.map +1 -0
  24. package/dist/services/logger.js +224 -0
  25. package/dist/services/logger.js.map +1 -0
  26. package/dist/services/progress-reporter.d.ts +64 -0
  27. package/dist/services/progress-reporter.d.ts.map +1 -0
  28. package/dist/services/progress-reporter.js +192 -0
  29. package/dist/services/progress-reporter.js.map +1 -0
  30. package/dist/services/request-tracker.d.ts +55 -0
  31. package/dist/services/request-tracker.d.ts.map +1 -0
  32. package/dist/services/request-tracker.js +184 -0
  33. package/dist/services/request-tracker.js.map +1 -0
  34. package/dist/tools/constructionwire-tools.d.ts +23 -0
  35. package/dist/tools/constructionwire-tools.d.ts.map +1 -0
  36. package/dist/tools/constructionwire-tools.js +8973 -0
  37. package/dist/tools/constructionwire-tools.js.map +1 -0
  38. package/dist/types.d.ts +25 -0
  39. package/dist/types.d.ts.map +1 -0
  40. package/dist/types.js +2 -0
  41. package/dist/types.js.map +1 -0
  42. package/package.json +57 -0
@@ -0,0 +1,224 @@
1
+ /**
2
+ * Logger - Centralized logging service for constructionwire-mcp
3
+ * Provides structured logging with centralized log shipping capability
4
+ */
5
+ import { LogBatcher } from './log-batcher.js';
6
+ export class Logger {
7
+ constructor(config) {
8
+ this.batcher = null;
9
+ this.logLevelPriority = {
10
+ DEBUG: 0,
11
+ INFO: 1,
12
+ WARN: 2,
13
+ ERROR: 3,
14
+ FATAL: 4
15
+ };
16
+ this.config = config;
17
+ if (this.config.enableShipping && config.logShipper) {
18
+ this.batcher = new LogBatcher(config.logShipper);
19
+ }
20
+ }
21
+ /**
22
+ * Log a debug message
23
+ */
24
+ debug(action, message, metadata) {
25
+ this.log('DEBUG', action, message, metadata);
26
+ }
27
+ /**
28
+ * Log an info message
29
+ */
30
+ info(action, message, metadata) {
31
+ this.log('INFO', action, message, metadata);
32
+ }
33
+ /**
34
+ * Log a warning message
35
+ */
36
+ warn(action, message, metadata) {
37
+ this.log('WARN', action, message, metadata);
38
+ }
39
+ /**
40
+ * Log an error message
41
+ */
42
+ error(action, message, metadata) {
43
+ this.log('ERROR', action, message, metadata);
44
+ }
45
+ /**
46
+ * Log a fatal error message
47
+ */
48
+ fatal(action, message, metadata) {
49
+ this.log('FATAL', action, message, metadata);
50
+ }
51
+ /**
52
+ * Core logging method
53
+ */
54
+ log(level, action, message, metadata) {
55
+ // Check if this log level should be processed
56
+ if (this.logLevelPriority[level] < this.logLevelPriority[this.config.logLevel]) {
57
+ return;
58
+ }
59
+ const timestamp = new Date().toISOString();
60
+ const user = process.env.CORETEXT_USER || 'unknown';
61
+ const sessionId = this.batcher?.getSessionId() || `constructionwire-mcp-${Date.now()}-${Math.random().toString(36).substring(2, 9)}`;
62
+ const logEntry = {
63
+ timestamp,
64
+ sessionId,
65
+ user,
66
+ integration: '',
67
+ component: this.config.component,
68
+ level,
69
+ action,
70
+ message,
71
+ projectId: process.env.PROJECT_ID || '',
72
+ organizationId: process.env.ORGANIZATION_ID || '',
73
+ ...(metadata && { metadata })
74
+ };
75
+ // Always log to console (stderr) for MCP protocol compliance
76
+ if (this.config.enableConsole) {
77
+ const componentPrefix = `-${this.config.component.toUpperCase()}`;
78
+ console.error(`[${componentPrefix}] ${JSON.stringify(logEntry)}`);
79
+ }
80
+ // Send to centralized logging if enabled
81
+ if (this.config.enableShipping && this.batcher) {
82
+ // Create full log entry matching API specification
83
+ const fullLogEntry = {
84
+ timestamp,
85
+ sessionId,
86
+ user,
87
+ integration: '',
88
+ component: this.config.component,
89
+ action,
90
+ message,
91
+ projectId: process.env.PROJECT_ID || '',
92
+ organizationId: process.env.ORGANIZATION_ID || '',
93
+ ...(metadata && { metadata })
94
+ };
95
+ this.batcher.addStructuredLog(fullLogEntry);
96
+ }
97
+ }
98
+ /**
99
+ * Log HTTP request start
100
+ */
101
+ logRequestStart(method, url, metadata) {
102
+ this.debug('HTTP_REQUEST_START', `${method} ${url}`, {
103
+ method,
104
+ url,
105
+ ...metadata
106
+ });
107
+ }
108
+ /**
109
+ * Log HTTP request success
110
+ */
111
+ logRequestSuccess(method, url, status, duration, metadata) {
112
+ this.info('HTTP_REQUEST_SUCCESS', `${method} ${url} - ${status} (${duration}ms)`, {
113
+ method,
114
+ url,
115
+ status,
116
+ duration_ms: duration,
117
+ ...metadata
118
+ });
119
+ }
120
+ /**
121
+ * Log HTTP request error
122
+ */
123
+ logRequestError(method, url, error, duration, metadata) {
124
+ this.error('HTTP_REQUEST_ERROR', `${method} ${url} - ${error.message || error}`, {
125
+ method,
126
+ url,
127
+ error: error.message || String(error),
128
+ duration_ms: duration,
129
+ status: error.status || error.response?.status,
130
+ ...metadata
131
+ });
132
+ }
133
+ /**
134
+ * Log tool execution start
135
+ */
136
+ logToolStart(toolName, params) {
137
+ this.info(toolName, `Executing ${toolName}`, {
138
+ toolParams: params,
139
+ paramCount: Object.keys(params || {}).length,
140
+ executionId: `exec_${Date.now()}_${Math.random().toString(36).substring(2, 6)}`
141
+ });
142
+ }
143
+ /**
144
+ * Log tool execution success
145
+ */
146
+ logToolSuccess(toolName, duration, responseData, httpStatus) {
147
+ this.info(toolName, `${toolName} completed successfully`, {
148
+ duration_ms: duration,
149
+ responseData: this.truncateIfNeeded(responseData),
150
+ responseSize: responseData ? JSON.stringify(responseData).length : 0,
151
+ ...(httpStatus && { httpStatus })
152
+ });
153
+ }
154
+ /**
155
+ * Log tool execution error
156
+ */
157
+ logToolError(toolName, error, duration, params) {
158
+ this.error(toolName, `${toolName} failed`, {
159
+ duration_ms: duration,
160
+ errorDetails: {
161
+ message: error.message || String(error),
162
+ stack: error.stack,
163
+ code: error.code,
164
+ status: error.status || error.response?.status
165
+ },
166
+ toolParams: params,
167
+ errorType: error.constructor?.name || 'unknown'
168
+ });
169
+ }
170
+ /**
171
+ * Log authentication events
172
+ */
173
+ logAuthEvent(event, success, metadata) {
174
+ const level = success ? 'INFO' : 'ERROR';
175
+ this.log(level, 'AUTH_EVENT', `Authentication ${event}: ${success ? 'success' : 'failed'}`, {
176
+ event,
177
+ success,
178
+ ...metadata
179
+ });
180
+ }
181
+ /**
182
+ * Log rate limiting events
183
+ */
184
+ logRateLimit(action, delayMs, metadata) {
185
+ this.warn('RATE_LIMIT', `Rate limit applied: ${action}`, {
186
+ action,
187
+ delay_ms: delayMs,
188
+ ...metadata
189
+ });
190
+ }
191
+ /**
192
+ * Truncate large data objects to prevent oversized log entries
193
+ */
194
+ truncateIfNeeded(data, maxSize = 10000) {
195
+ if (!data)
196
+ return data;
197
+ const jsonString = JSON.stringify(data);
198
+ if (jsonString.length <= maxSize)
199
+ return data;
200
+ return {
201
+ _truncated: true,
202
+ _originalSize: jsonString.length,
203
+ _data: `[TRUNCATED - Original size: ${jsonString.length} chars]`
204
+ };
205
+ }
206
+ /**
207
+ * Get logger status
208
+ */
209
+ getStatus() {
210
+ return {
211
+ config: this.config,
212
+ ...(this.batcher && { batcherStatus: this.batcher.getBatchStatus() })
213
+ };
214
+ }
215
+ /**
216
+ * Shutdown logger and flush remaining logs
217
+ */
218
+ async shutdown() {
219
+ if (this.batcher) {
220
+ await this.batcher.shutdown();
221
+ }
222
+ }
223
+ }
224
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/services/logger.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,64 @@
1
+ import { Server } from '@modelcontextprotocol/sdk/server/index.js';
2
+ import { Logger } from './logger.js';
3
+ import { RequestTracker } from './request-tracker.js';
4
+ export interface ProgressUpdate {
5
+ progress: number;
6
+ total?: number;
7
+ message?: string;
8
+ }
9
+ export declare class ProgressReporter {
10
+ private server;
11
+ private logger;
12
+ private requestTracker;
13
+ private progressStates;
14
+ private minUpdateInterval;
15
+ constructor(server: Server, logger: Logger, requestTracker: RequestTracker);
16
+ /**
17
+ * Report progress for a given token
18
+ */
19
+ report(progressToken: string | number, update: ProgressUpdate): Promise<void>;
20
+ /**
21
+ * Report progress with percentage helper
22
+ */
23
+ reportPercentage(progressToken: string | number, percentage: number, message?: string): Promise<void>;
24
+ /**
25
+ * Report progress for multi-step operations
26
+ */
27
+ reportStep(progressToken: string | number, currentStep: number, totalSteps: number, message?: string): Promise<void>;
28
+ /**
29
+ * Report progress for batch operations
30
+ */
31
+ reportBatch(progressToken: string | number, processedItems: number, totalItems: number, itemType?: string): Promise<void>;
32
+ /**
33
+ * Clean up progress state for a token
34
+ */
35
+ cleanup(progressToken: string | number): void;
36
+ /**
37
+ * Clean up all progress states for completed requests
38
+ */
39
+ cleanupCompletedRequests(): void;
40
+ /**
41
+ * Create a progress callback function for use in async operations
42
+ */
43
+ createProgressCallback(progressToken: string | number): (update: ProgressUpdate) => Promise<void>;
44
+ /**
45
+ * Create a simple percentage-based progress callback
46
+ */
47
+ createPercentageCallback(progressToken: string | number): (percentage: number, message?: string) => Promise<void>;
48
+ /**
49
+ * Get statistics about progress reporting
50
+ */
51
+ getStats(): {
52
+ activeProgressTokens: number;
53
+ progressStates: Array<{
54
+ token: string | number;
55
+ lastProgress: number;
56
+ updateCount: number;
57
+ }>;
58
+ };
59
+ /**
60
+ * Shutdown and clean up
61
+ */
62
+ shutdown(): void;
63
+ }
64
+ //# sourceMappingURL=progress-reporter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"progress-reporter.d.ts","sourceRoot":"","sources":["../../src/services/progress-reporter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAQD,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,cAAc,CAAsC;IAC5D,OAAO,CAAC,iBAAiB,CAAe;gBAE5B,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,cAAc;IAO1E;;OAEG;IACG,MAAM,CACV,aAAa,EAAE,MAAM,GAAG,MAAM,EAC9B,MAAM,EAAE,cAAc,GACrB,OAAO,CAAC,IAAI,CAAC;IA8EhB;;OAEG;IACG,gBAAgB,CACpB,aAAa,EAAE,MAAM,GAAG,MAAM,EAC9B,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC;IAgBhB;;OAEG;IACG,UAAU,CACd,aAAa,EAAE,MAAM,GAAG,MAAM,EAC9B,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC;IAQhB;;OAEG;IACG,WAAW,CACf,aAAa,EAAE,MAAM,GAAG,MAAM,EAC9B,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,MAAM,EAClB,QAAQ,GAAE,MAAgB,GACzB,OAAO,CAAC,IAAI,CAAC;IAShB;;OAEG;IACH,OAAO,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAY7C;;OAEG;IACH,wBAAwB,IAAI,IAAI;IAkBhC;;OAEG;IACH,sBAAsB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,GAAG,CAAC,MAAM,EAAE,cAAc,KAAK,OAAO,CAAC,IAAI,CAAC;IAMjG;;OAEG;IACH,wBAAwB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC;IAMjH;;OAEG;IACH,QAAQ,IAAI;QACV,oBAAoB,EAAE,MAAM,CAAC;QAC7B,cAAc,EAAE,KAAK,CAAC;YACpB,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;YACvB,YAAY,EAAE,MAAM,CAAC;YACrB,WAAW,EAAE,MAAM,CAAC;SACrB,CAAC,CAAC;KACJ;IAaD;;OAEG;IACH,QAAQ,IAAI,IAAI;CAMjB"}
@@ -0,0 +1,192 @@
1
+ export class ProgressReporter {
2
+ constructor(server, logger, requestTracker) {
3
+ this.minUpdateInterval = 100; // Minimum 100ms between updates
4
+ this.server = server;
5
+ this.logger = logger;
6
+ this.requestTracker = requestTracker;
7
+ this.progressStates = new Map();
8
+ }
9
+ /**
10
+ * Report progress for a given token
11
+ */
12
+ async report(progressToken, update) {
13
+ // Validate that the progress token is still active
14
+ if (!this.requestTracker.isProgressTokenActive(progressToken)) {
15
+ this.logger.debug('PROGRESS_TOKEN_INACTIVE', 'Progress token no longer active', {
16
+ progressToken,
17
+ progress: update.progress
18
+ });
19
+ return;
20
+ }
21
+ // Get or create progress state
22
+ const state = this.progressStates.get(progressToken);
23
+ const now = Date.now();
24
+ // Validate progress value increases
25
+ if (state && update.progress <= state.lastProgress) {
26
+ this.logger.warn('PROGRESS_NOT_INCREASING', 'Progress value must increase', {
27
+ progressToken,
28
+ lastProgress: state.lastProgress,
29
+ newProgress: update.progress
30
+ });
31
+ return;
32
+ }
33
+ // Check rate limiting
34
+ if (state && (now - state.lastUpdateTime) < this.minUpdateInterval) {
35
+ this.logger.debug('PROGRESS_RATE_LIMITED', 'Progress update rate limited', {
36
+ progressToken,
37
+ timeSinceLastUpdate: now - state.lastUpdateTime,
38
+ minInterval: this.minUpdateInterval
39
+ });
40
+ return;
41
+ }
42
+ try {
43
+ // Send progress notification
44
+ await this.server.notification({
45
+ method: "notifications/progress",
46
+ params: {
47
+ progressToken,
48
+ progress: update.progress,
49
+ ...(update.total !== undefined && { total: update.total }),
50
+ ...(update.message && { message: update.message })
51
+ }
52
+ });
53
+ // Update state
54
+ this.progressStates.set(progressToken, {
55
+ lastProgress: update.progress,
56
+ lastUpdateTime: now,
57
+ updateCount: (state?.updateCount ?? 0) + 1
58
+ });
59
+ // Get request context for better logging
60
+ const context = this.requestTracker.getRequestByProgressToken(progressToken);
61
+ this.logger.info('PROGRESS_REPORTED', 'Progress notification sent', {
62
+ progressToken,
63
+ progress: update.progress,
64
+ total: update.total,
65
+ hasMessage: !!update.message,
66
+ updateCount: (state?.updateCount ?? 0) + 1,
67
+ requestId: context?.requestId,
68
+ toolName: context?.toolName
69
+ });
70
+ // Clean up if progress is complete
71
+ if (update.total !== undefined && update.progress >= update.total) {
72
+ this.cleanup(progressToken);
73
+ }
74
+ }
75
+ catch (error) {
76
+ this.logger.error('PROGRESS_REPORT_ERROR', 'Failed to send progress notification', {
77
+ progressToken,
78
+ error: error instanceof Error ? error.message : String(error)
79
+ });
80
+ }
81
+ }
82
+ /**
83
+ * Report progress with percentage helper
84
+ */
85
+ async reportPercentage(progressToken, percentage, message) {
86
+ if (percentage < 0 || percentage > 100) {
87
+ this.logger.warn('PROGRESS_PERCENTAGE_INVALID', 'Invalid percentage value', {
88
+ progressToken,
89
+ percentage
90
+ });
91
+ return;
92
+ }
93
+ await this.report(progressToken, {
94
+ progress: percentage,
95
+ total: 100,
96
+ message
97
+ });
98
+ }
99
+ /**
100
+ * Report progress for multi-step operations
101
+ */
102
+ async reportStep(progressToken, currentStep, totalSteps, message) {
103
+ await this.report(progressToken, {
104
+ progress: currentStep,
105
+ total: totalSteps,
106
+ message
107
+ });
108
+ }
109
+ /**
110
+ * Report progress for batch operations
111
+ */
112
+ async reportBatch(progressToken, processedItems, totalItems, itemType = 'items') {
113
+ const percentage = Math.round((processedItems / totalItems) * 100);
114
+ await this.report(progressToken, {
115
+ progress: processedItems,
116
+ total: totalItems,
117
+ message: `Processed ${processedItems} of ${totalItems} ${itemType} (${percentage}%)`
118
+ });
119
+ }
120
+ /**
121
+ * Clean up progress state for a token
122
+ */
123
+ cleanup(progressToken) {
124
+ const state = this.progressStates.get(progressToken);
125
+ if (state) {
126
+ this.logger.debug('PROGRESS_CLEANUP', 'Cleaning up progress state', {
127
+ progressToken,
128
+ finalProgress: state.lastProgress,
129
+ totalUpdates: state.updateCount
130
+ });
131
+ this.progressStates.delete(progressToken);
132
+ }
133
+ }
134
+ /**
135
+ * Clean up all progress states for completed requests
136
+ */
137
+ cleanupCompletedRequests() {
138
+ let cleanedCount = 0;
139
+ for (const [progressToken] of this.progressStates.entries()) {
140
+ if (!this.requestTracker.isProgressTokenActive(progressToken)) {
141
+ this.progressStates.delete(progressToken);
142
+ cleanedCount++;
143
+ }
144
+ }
145
+ if (cleanedCount > 0) {
146
+ this.logger.info('PROGRESS_CLEANUP_COMPLETED', 'Cleaned up inactive progress states', {
147
+ cleanedCount,
148
+ remainingStates: this.progressStates.size
149
+ });
150
+ }
151
+ }
152
+ /**
153
+ * Create a progress callback function for use in async operations
154
+ */
155
+ createProgressCallback(progressToken) {
156
+ return async (update) => {
157
+ await this.report(progressToken, update);
158
+ };
159
+ }
160
+ /**
161
+ * Create a simple percentage-based progress callback
162
+ */
163
+ createPercentageCallback(progressToken) {
164
+ return async (percentage, message) => {
165
+ await this.reportPercentage(progressToken, percentage, message);
166
+ };
167
+ }
168
+ /**
169
+ * Get statistics about progress reporting
170
+ */
171
+ getStats() {
172
+ const progressStates = Array.from(this.progressStates.entries()).map(([token, state]) => ({
173
+ token,
174
+ lastProgress: state.lastProgress,
175
+ updateCount: state.updateCount
176
+ }));
177
+ return {
178
+ activeProgressTokens: this.progressStates.size,
179
+ progressStates
180
+ };
181
+ }
182
+ /**
183
+ * Shutdown and clean up
184
+ */
185
+ shutdown() {
186
+ this.logger.info('PROGRESS_REPORTER_SHUTDOWN', 'Shutting down progress reporter', {
187
+ activeStates: this.progressStates.size
188
+ });
189
+ this.progressStates.clear();
190
+ }
191
+ }
192
+ //# sourceMappingURL=progress-reporter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"progress-reporter.js","sourceRoot":"","sources":["../../src/services/progress-reporter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ import { Logger } from './logger.js';
2
+ export interface RequestContext {
3
+ requestId: string | number;
4
+ abortController: AbortController;
5
+ progressToken?: string | number;
6
+ startTime: number;
7
+ toolName?: string;
8
+ }
9
+ export declare class RequestTracker {
10
+ private activeRequests;
11
+ private progressTokens;
12
+ private logger;
13
+ constructor(logger: Logger);
14
+ /**
15
+ * Register a new request for tracking
16
+ */
17
+ registerRequest(requestId: string | number, progressToken?: string | number, toolName?: string): RequestContext;
18
+ /**
19
+ * Get request context by ID
20
+ */
21
+ getRequest(requestId: string | number): RequestContext | undefined;
22
+ /**
23
+ * Get request context by progress token
24
+ */
25
+ getRequestByProgressToken(progressToken: string | number): RequestContext | undefined;
26
+ /**
27
+ * Cancel a request
28
+ */
29
+ cancelRequest(requestId: string | number, reason?: string): boolean;
30
+ /**
31
+ * Clean up a completed or cancelled request
32
+ */
33
+ cleanup(requestId: string | number): void;
34
+ /**
35
+ * Check if a request is still active
36
+ */
37
+ isActive(requestId: string | number): boolean;
38
+ /**
39
+ * Check if a progress token is valid and active
40
+ */
41
+ isProgressTokenActive(progressToken: string | number): boolean;
42
+ /**
43
+ * Get all active request IDs
44
+ */
45
+ getActiveRequestIds(): (string | number)[];
46
+ /**
47
+ * Clean up old requests (called periodically)
48
+ */
49
+ cleanupStaleRequests(maxAgeMs?: number): number;
50
+ /**
51
+ * Shutdown and clean up all requests
52
+ */
53
+ shutdown(): void;
54
+ }
55
+ //# sourceMappingURL=request-tracker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-tracker.d.ts","sourceRoot":"","sources":["../../src/services/request-tracker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC;IAC3B,eAAe,EAAE,eAAe,CAAC;IACjC,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,cAAc,CAAuC;IAC7D,OAAO,CAAC,cAAc,CAAwC;IAC9D,OAAO,CAAC,MAAM,CAAS;gBAEX,MAAM,EAAE,MAAM;IAM1B;;OAEG;IACH,eAAe,CACb,SAAS,EAAE,MAAM,GAAG,MAAM,EAC1B,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,EAC/B,QAAQ,CAAC,EAAE,MAAM,GAChB,cAAc;IAmCjB;;OAEG;IACH,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,cAAc,GAAG,SAAS;IAIlE;;OAEG;IACH,yBAAyB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,GAAG,cAAc,GAAG,SAAS;IAQrF;;OAEG;IACH,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO;IAuCnE;;OAEG;IACH,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAwBzC;;OAEG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO;IAK7C;;OAEG;IACH,qBAAqB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO;IAQ9D;;OAEG;IACH,mBAAmB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE;IAI1C;;OAEG;IACH,oBAAoB,CAAC,QAAQ,GAAE,MAAe,GAAG,MAAM;IAkCvD;;OAEG;IACH,QAAQ,IAAI,IAAI;CAgBjB"}