@wilnertech/halopsa-mcp-server 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.
- package/.env.example +19 -0
- package/LICENSE +21 -0
- package/README.md +270 -0
- package/dist/api/client.d.ts +85 -0
- package/dist/api/client.d.ts.map +1 -0
- package/dist/api/client.js +297 -0
- package/dist/api/client.js.map +1 -0
- package/dist/api/errors.d.ts +60 -0
- package/dist/api/errors.d.ts.map +1 -0
- package/dist/api/errors.js +188 -0
- package/dist/api/errors.js.map +1 -0
- package/dist/cache/memory-cache.d.ts +89 -0
- package/dist/cache/memory-cache.d.ts.map +1 -0
- package/dist/cache/memory-cache.js +175 -0
- package/dist/cache/memory-cache.js.map +1 -0
- package/dist/cache/prewarm.d.ts +12 -0
- package/dist/cache/prewarm.d.ts.map +1 -0
- package/dist/cache/prewarm.js +55 -0
- package/dist/cache/prewarm.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +141 -0
- package/dist/index.js.map +1 -0
- package/dist/schemas/common.d.ts +212 -0
- package/dist/schemas/common.d.ts.map +1 -0
- package/dist/schemas/common.js +127 -0
- package/dist/schemas/common.js.map +1 -0
- package/dist/tools/assets.d.ts +482 -0
- package/dist/tools/assets.d.ts.map +1 -0
- package/dist/tools/assets.js +732 -0
- package/dist/tools/assets.js.map +1 -0
- package/dist/tools/batch-operations.d.ts +125 -0
- package/dist/tools/batch-operations.d.ts.map +1 -0
- package/dist/tools/batch-operations.js +207 -0
- package/dist/tools/batch-operations.js.map +1 -0
- package/dist/tools/clients.d.ts +145 -0
- package/dist/tools/clients.d.ts.map +1 -0
- package/dist/tools/clients.js +148 -0
- package/dist/tools/clients.js.map +1 -0
- package/dist/tools/reference-data.d.ts +118 -0
- package/dist/tools/reference-data.d.ts.map +1 -0
- package/dist/tools/reference-data.js +103 -0
- package/dist/tools/reference-data.js.map +1 -0
- package/dist/tools/registrations.d.ts +7 -0
- package/dist/tools/registrations.d.ts.map +1 -0
- package/dist/tools/registrations.js +61 -0
- package/dist/tools/registrations.js.map +1 -0
- package/dist/tools/registry.d.ts +67 -0
- package/dist/tools/registry.d.ts.map +1 -0
- package/dist/tools/registry.js +71 -0
- package/dist/tools/registry.js.map +1 -0
- package/dist/tools/sites.d.ts +188 -0
- package/dist/tools/sites.d.ts.map +1 -0
- package/dist/tools/sites.js +258 -0
- package/dist/tools/sites.js.map +1 -0
- package/dist/tools/users.d.ts +317 -0
- package/dist/tools/users.d.ts.map +1 -0
- package/dist/tools/users.js +489 -0
- package/dist/tools/users.js.map +1 -0
- package/dist/types/halopsa.d.ts +212 -0
- package/dist/types/halopsa.d.ts.map +1 -0
- package/dist/types/halopsa.js +8 -0
- package/dist/types/halopsa.js.map +1 -0
- package/dist/utils/formatter.d.ts +18 -0
- package/dist/utils/formatter.d.ts.map +1 -0
- package/dist/utils/formatter.js +178 -0
- package/dist/utils/formatter.js.map +1 -0
- package/dist/utils/similarity.d.ts +25 -0
- package/dist/utils/similarity.d.ts.map +1 -0
- package/dist/utils/similarity.js +90 -0
- package/dist/utils/similarity.js.map +1 -0
- package/dist/utils/zod-to-schema.d.ts +29 -0
- package/dist/utils/zod-to-schema.d.ts.map +1 -0
- package/dist/utils/zod-to-schema.js +182 -0
- package/dist/utils/zod-to-schema.js.map +1 -0
- package/package.json +61 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Enhanced error handling for HaloPSA API
|
|
3
|
+
* Provides detailed error context and actionable suggestions
|
|
4
|
+
*/
|
|
5
|
+
export type ErrorType = 'RateLimitExceeded' | 'InvalidParameter' | 'NotFound' | 'AuthError' | 'ServerError' | 'NetworkError' | 'ValidationError' | 'TokenExpired';
|
|
6
|
+
export interface ErrorDetails {
|
|
7
|
+
[key: string]: unknown;
|
|
8
|
+
}
|
|
9
|
+
export declare class HaloPSAError extends Error {
|
|
10
|
+
errorType: ErrorType;
|
|
11
|
+
details?: ErrorDetails | undefined;
|
|
12
|
+
suggestion?: string | undefined;
|
|
13
|
+
httpStatus?: number | undefined;
|
|
14
|
+
constructor(errorType: ErrorType, message: string, details?: ErrorDetails | undefined, suggestion?: string | undefined, httpStatus?: number | undefined);
|
|
15
|
+
/**
|
|
16
|
+
* Convert error to JSON format for MCP response
|
|
17
|
+
*/
|
|
18
|
+
toJSON(): object;
|
|
19
|
+
/**
|
|
20
|
+
* Format error as string for MCP response
|
|
21
|
+
*/
|
|
22
|
+
toString(): string;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Create rate limit error with retry information
|
|
26
|
+
*/
|
|
27
|
+
export declare function createRateLimitError(retryAfter?: number): HaloPSAError;
|
|
28
|
+
/**
|
|
29
|
+
* Create not found error with helpful context
|
|
30
|
+
*/
|
|
31
|
+
export declare function createNotFoundError(resourceType: string, resourceId: string, endpoint: string): HaloPSAError;
|
|
32
|
+
/**
|
|
33
|
+
* Create authentication error
|
|
34
|
+
*/
|
|
35
|
+
export declare function createAuthError(message?: string): HaloPSAError;
|
|
36
|
+
/**
|
|
37
|
+
* Create token expired error
|
|
38
|
+
*/
|
|
39
|
+
export declare function createTokenExpiredError(): HaloPSAError;
|
|
40
|
+
/**
|
|
41
|
+
* Create invalid parameter error with field details
|
|
42
|
+
*/
|
|
43
|
+
export declare function createInvalidParameterError(parameterName: string, providedValue: unknown, expectedType?: string, allowedValues?: unknown[]): HaloPSAError;
|
|
44
|
+
/**
|
|
45
|
+
* Create validation error for field filtering
|
|
46
|
+
*/
|
|
47
|
+
export declare function createFieldValidationError(invalidFields: string[], validFields: string[]): HaloPSAError;
|
|
48
|
+
/**
|
|
49
|
+
* Create server error with retry suggestion
|
|
50
|
+
*/
|
|
51
|
+
export declare function createServerError(statusCode: number, message?: string): HaloPSAError;
|
|
52
|
+
/**
|
|
53
|
+
* Create network error
|
|
54
|
+
*/
|
|
55
|
+
export declare function createNetworkError(originalError: Error): HaloPSAError;
|
|
56
|
+
/**
|
|
57
|
+
* Parse HaloPSA API error response and create appropriate error
|
|
58
|
+
*/
|
|
59
|
+
export declare function parseHaloPSAApiError(statusCode: number, responseData: unknown, endpoint: string): HaloPSAError;
|
|
60
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/api/errors.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,MAAM,SAAS,GACjB,mBAAmB,GACnB,kBAAkB,GAClB,UAAU,GACV,WAAW,GACX,aAAa,GACb,cAAc,GACd,iBAAiB,GACjB,cAAc,CAAC;AAEnB,MAAM,WAAW,YAAY;IAC3B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,qBAAa,YAAa,SAAQ,KAAK;IAE5B,SAAS,EAAE,SAAS;IAEpB,OAAO,CAAC,EAAE,YAAY;IACtB,UAAU,CAAC,EAAE,MAAM;IACnB,UAAU,CAAC,EAAE,MAAM;gBAJnB,SAAS,EAAE,SAAS,EAC3B,OAAO,EAAE,MAAM,EACR,OAAO,CAAC,EAAE,YAAY,YAAA,EACtB,UAAU,CAAC,EAAE,MAAM,YAAA,EACnB,UAAU,CAAC,EAAE,MAAM,YAAA;IAM5B;;OAEG;IACH,MAAM,IAAI,MAAM;IAWhB;;OAEG;IACH,QAAQ,IAAI,MAAM;CAGnB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,UAAU,GAAE,MAAW,GAAG,YAAY,CAY1E;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,GACf,YAAY,CAYd;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,GAAE,MAAgC,GAAG,YAAY,CAWvF;AAED;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,YAAY,CAUtD;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CACzC,aAAa,EAAE,MAAM,EACrB,aAAa,EAAE,OAAO,EACtB,YAAY,CAAC,EAAE,MAAM,EACrB,aAAa,CAAC,EAAE,OAAO,EAAE,GACxB,YAAY,CA6Bd;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CACxC,aAAa,EAAE,MAAM,EAAE,EACvB,WAAW,EAAE,MAAM,EAAE,GACpB,YAAY,CAWd;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,MAA+B,GACvC,YAAY,CAUd;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,aAAa,EAAE,KAAK,GAAG,YAAY,CAUrE;AAgBD;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,OAAO,EACrB,QAAQ,EAAE,MAAM,GACf,YAAY,CA6Ed"}
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Enhanced error handling for HaloPSA API
|
|
3
|
+
* Provides detailed error context and actionable suggestions
|
|
4
|
+
*/
|
|
5
|
+
export class HaloPSAError extends Error {
|
|
6
|
+
errorType;
|
|
7
|
+
details;
|
|
8
|
+
suggestion;
|
|
9
|
+
httpStatus;
|
|
10
|
+
constructor(errorType, message, details, suggestion, httpStatus) {
|
|
11
|
+
super(message);
|
|
12
|
+
this.errorType = errorType;
|
|
13
|
+
this.details = details;
|
|
14
|
+
this.suggestion = suggestion;
|
|
15
|
+
this.httpStatus = httpStatus;
|
|
16
|
+
this.name = 'HaloPSAError';
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Convert error to JSON format for MCP response
|
|
20
|
+
*/
|
|
21
|
+
toJSON() {
|
|
22
|
+
return {
|
|
23
|
+
error: true,
|
|
24
|
+
error_type: this.errorType,
|
|
25
|
+
message: this.message,
|
|
26
|
+
...(this.details && { details: this.details }),
|
|
27
|
+
...(this.suggestion && { suggestion: this.suggestion }),
|
|
28
|
+
...(this.httpStatus && { http_status: this.httpStatus }),
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Format error as string for MCP response
|
|
33
|
+
*/
|
|
34
|
+
toString() {
|
|
35
|
+
return JSON.stringify(this.toJSON(), null, 2);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Create rate limit error with retry information
|
|
40
|
+
*/
|
|
41
|
+
export function createRateLimitError(retryAfter = 60) {
|
|
42
|
+
return new HaloPSAError('RateLimitExceeded', 'HaloPSA API rate limit exceeded', {
|
|
43
|
+
retry_after_seconds: retryAfter,
|
|
44
|
+
current_limit: '60 requests/min',
|
|
45
|
+
limit_period: '1 minute',
|
|
46
|
+
}, `Wait ${retryAfter} seconds before retrying. Consider implementing request throttling or caching for frequently accessed data.`, 429);
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Create not found error with helpful context
|
|
50
|
+
*/
|
|
51
|
+
export function createNotFoundError(resourceType, resourceId, endpoint) {
|
|
52
|
+
return new HaloPSAError('NotFound', `${resourceType} with ID '${resourceId}' not found`, {
|
|
53
|
+
resource_type: resourceType,
|
|
54
|
+
resource_id: resourceId,
|
|
55
|
+
endpoint,
|
|
56
|
+
}, `Verify the ${resourceType} ID is correct. The resource may have been deleted or you may not have permission to access it.`, 404);
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Create authentication error
|
|
60
|
+
*/
|
|
61
|
+
export function createAuthError(message = 'Authentication failed') {
|
|
62
|
+
return new HaloPSAError('AuthError', message, {
|
|
63
|
+
auth_method: 'OAuth2 Client Credentials',
|
|
64
|
+
}, 'Verify your HALOPSA_CLIENT_ID and HALOPSA_CLIENT_SECRET environment variables are correct. ' +
|
|
65
|
+
'Credentials should be stored in ITGlue under "API - HaloPSA - WTECH HaloPSA".', 401);
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Create token expired error
|
|
69
|
+
*/
|
|
70
|
+
export function createTokenExpiredError() {
|
|
71
|
+
return new HaloPSAError('TokenExpired', 'HaloPSA access token has expired', {
|
|
72
|
+
auth_method: 'OAuth2 Client Credentials',
|
|
73
|
+
}, 'The access token has expired. A new token will be automatically requested on the next API call.', 401);
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Create invalid parameter error with field details
|
|
77
|
+
*/
|
|
78
|
+
export function createInvalidParameterError(parameterName, providedValue, expectedType, allowedValues) {
|
|
79
|
+
const details = {
|
|
80
|
+
parameter: parameterName,
|
|
81
|
+
provided_value: providedValue,
|
|
82
|
+
};
|
|
83
|
+
if (expectedType) {
|
|
84
|
+
details.expected_type = expectedType;
|
|
85
|
+
}
|
|
86
|
+
if (allowedValues) {
|
|
87
|
+
details.allowed_values = allowedValues;
|
|
88
|
+
}
|
|
89
|
+
let suggestion = `Check the '${parameterName}' parameter value.`;
|
|
90
|
+
if (expectedType) {
|
|
91
|
+
suggestion += ` Expected type: ${expectedType}.`;
|
|
92
|
+
}
|
|
93
|
+
if (allowedValues) {
|
|
94
|
+
suggestion += ` Allowed values: ${allowedValues.join(', ')}.`;
|
|
95
|
+
}
|
|
96
|
+
return new HaloPSAError('InvalidParameter', `Invalid parameter: ${parameterName}`, details, suggestion, 400);
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Create validation error for field filtering
|
|
100
|
+
*/
|
|
101
|
+
export function createFieldValidationError(invalidFields, validFields) {
|
|
102
|
+
return new HaloPSAError('ValidationError', `Invalid fields requested: ${invalidFields.join(', ')}`, {
|
|
103
|
+
invalid_fields: invalidFields,
|
|
104
|
+
valid_fields: validFields,
|
|
105
|
+
}, `The following fields are not valid: ${invalidFields.join(', ')}. Valid fields are: ${validFields.join(', ')}.`, 400);
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Create server error with retry suggestion
|
|
109
|
+
*/
|
|
110
|
+
export function createServerError(statusCode, message = 'HaloPSA server error') {
|
|
111
|
+
return new HaloPSAError('ServerError', message, {
|
|
112
|
+
status_code: statusCode,
|
|
113
|
+
}, 'This is a temporary server issue. Try again in a few moments. If the problem persists, check HaloPSA status.', statusCode);
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Create network error
|
|
117
|
+
*/
|
|
118
|
+
export function createNetworkError(originalError) {
|
|
119
|
+
return new HaloPSAError('NetworkError', 'Failed to connect to HaloPSA API', {
|
|
120
|
+
original_error: originalError.message,
|
|
121
|
+
}, 'Check your internet connection. Verify that HaloPSA is accessible from your network.', 0);
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Type guard for HaloPSA error response structure
|
|
125
|
+
*/
|
|
126
|
+
function isHaloPSAErrorResponse(data) {
|
|
127
|
+
return (typeof data === 'object' &&
|
|
128
|
+
data !== null &&
|
|
129
|
+
'error' in data &&
|
|
130
|
+
typeof data.error === 'string');
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Parse HaloPSA API error response and create appropriate error
|
|
134
|
+
*/
|
|
135
|
+
export function parseHaloPSAApiError(statusCode, responseData, endpoint) {
|
|
136
|
+
// HaloPSA returns errors in this format:
|
|
137
|
+
// { error: 'error_code', error_description: 'Error description' }
|
|
138
|
+
if (isHaloPSAErrorResponse(responseData)) {
|
|
139
|
+
const errorCode = responseData.error;
|
|
140
|
+
const errorDescription = responseData.error_description || errorCode;
|
|
141
|
+
// Determine error type from status code
|
|
142
|
+
switch (statusCode) {
|
|
143
|
+
case 401:
|
|
144
|
+
case 403:
|
|
145
|
+
if (errorCode === 'invalid_grant' || errorCode === 'invalid_token') {
|
|
146
|
+
return createTokenExpiredError();
|
|
147
|
+
}
|
|
148
|
+
return createAuthError(`${errorCode}: ${errorDescription}`);
|
|
149
|
+
case 404:
|
|
150
|
+
// Try to extract resource info from endpoint
|
|
151
|
+
const resourceMatch = endpoint.match(/\/api\/(\w+)\/([^/]+)$/);
|
|
152
|
+
const resourceType = resourceMatch ? resourceMatch[1] : 'Resource';
|
|
153
|
+
const resourceId = resourceMatch ? resourceMatch[2] : 'unknown';
|
|
154
|
+
return createNotFoundError(resourceType, resourceId, endpoint);
|
|
155
|
+
case 429:
|
|
156
|
+
return createRateLimitError();
|
|
157
|
+
case 422:
|
|
158
|
+
return new HaloPSAError('ValidationError', `${errorCode}: ${errorDescription}`, {
|
|
159
|
+
endpoint,
|
|
160
|
+
error_code: errorCode,
|
|
161
|
+
}, 'Check your request parameters. The API rejected the request due to validation errors.', statusCode);
|
|
162
|
+
default:
|
|
163
|
+
if (statusCode >= 500) {
|
|
164
|
+
return createServerError(statusCode, `${errorCode}: ${errorDescription}`);
|
|
165
|
+
}
|
|
166
|
+
return new HaloPSAError('ServerError', `${errorCode}: ${errorDescription}`, {
|
|
167
|
+
endpoint,
|
|
168
|
+
status_code: statusCode,
|
|
169
|
+
}, undefined, statusCode);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
// Fallback for non-standard error responses
|
|
173
|
+
switch (statusCode) {
|
|
174
|
+
case 401:
|
|
175
|
+
case 403:
|
|
176
|
+
return createAuthError();
|
|
177
|
+
case 404:
|
|
178
|
+
return createNotFoundError('Resource', 'unknown', endpoint);
|
|
179
|
+
case 429:
|
|
180
|
+
return createRateLimitError();
|
|
181
|
+
default:
|
|
182
|
+
if (statusCode >= 500) {
|
|
183
|
+
return createServerError(statusCode);
|
|
184
|
+
}
|
|
185
|
+
return new HaloPSAError('ServerError', `HTTP ${statusCode} error`, { endpoint, status_code: statusCode }, undefined, statusCode);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/api/errors.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* In-memory caching layer with TTL support for HaloPSA MCP Server
|
|
3
|
+
* Reduces API calls and token usage for frequently accessed data
|
|
4
|
+
*/
|
|
5
|
+
export declare class MemoryCache {
|
|
6
|
+
private cache;
|
|
7
|
+
private maxSize;
|
|
8
|
+
private cleanupIntervalMs;
|
|
9
|
+
private cleanupTimer?;
|
|
10
|
+
constructor(maxSize?: number, cleanupIntervalMs?: number);
|
|
11
|
+
/**
|
|
12
|
+
* Get value from cache
|
|
13
|
+
* Returns null if key doesn't exist or has expired
|
|
14
|
+
* Implements LRU by moving accessed keys to end of Map
|
|
15
|
+
*/
|
|
16
|
+
get<T>(key: string): T | null;
|
|
17
|
+
/**
|
|
18
|
+
* Set value in cache with TTL in milliseconds
|
|
19
|
+
*/
|
|
20
|
+
set<T>(key: string, value: T, ttlMs: number): void;
|
|
21
|
+
/**
|
|
22
|
+
* Check if key exists and is not expired
|
|
23
|
+
*/
|
|
24
|
+
has(key: string): boolean;
|
|
25
|
+
/**
|
|
26
|
+
* Delete specific key from cache
|
|
27
|
+
*/
|
|
28
|
+
delete(key: string): boolean;
|
|
29
|
+
/**
|
|
30
|
+
* Delete all keys matching a pattern (glob-style)
|
|
31
|
+
* Supports wildcards: * (any characters) and ? (single character)
|
|
32
|
+
*/
|
|
33
|
+
invalidatePattern(pattern: string): number;
|
|
34
|
+
/**
|
|
35
|
+
* Clear entire cache
|
|
36
|
+
*/
|
|
37
|
+
clear(): void;
|
|
38
|
+
/**
|
|
39
|
+
* Get current cache size
|
|
40
|
+
*/
|
|
41
|
+
size(): number;
|
|
42
|
+
/**
|
|
43
|
+
* Get cache statistics
|
|
44
|
+
*/
|
|
45
|
+
stats(): {
|
|
46
|
+
size: number;
|
|
47
|
+
maxSize: number;
|
|
48
|
+
keys: string[];
|
|
49
|
+
};
|
|
50
|
+
/**
|
|
51
|
+
* Remove expired entries from cache
|
|
52
|
+
*/
|
|
53
|
+
private cleanup;
|
|
54
|
+
/**
|
|
55
|
+
* Start periodic cleanup timer
|
|
56
|
+
*/
|
|
57
|
+
private startCleanupTimer;
|
|
58
|
+
/**
|
|
59
|
+
* Stop cleanup timer (for graceful shutdown)
|
|
60
|
+
*/
|
|
61
|
+
stopCleanupTimer(): void;
|
|
62
|
+
/**
|
|
63
|
+
* Convert glob pattern to regex
|
|
64
|
+
*/
|
|
65
|
+
private patternToRegex;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Global cache instance with predefined TTL constants
|
|
69
|
+
*/
|
|
70
|
+
export declare const globalCache: MemoryCache;
|
|
71
|
+
/**
|
|
72
|
+
* TTL constants in milliseconds
|
|
73
|
+
* Based on HaloPSA data change frequencies
|
|
74
|
+
*/
|
|
75
|
+
export declare const TTL: {
|
|
76
|
+
readonly ASSET_TYPES: number;
|
|
77
|
+
readonly ASSET_STATUSES: number;
|
|
78
|
+
readonly CONTACT_TYPES: number;
|
|
79
|
+
readonly CLIENT_LIST: number;
|
|
80
|
+
readonly SITE_LIST: number;
|
|
81
|
+
readonly ASSET_LIST: number;
|
|
82
|
+
readonly USER_LIST: number;
|
|
83
|
+
};
|
|
84
|
+
/**
|
|
85
|
+
* Generate cache key from parameters
|
|
86
|
+
* Creates deterministic keys for consistent cache lookups
|
|
87
|
+
*/
|
|
88
|
+
export declare function generateCacheKey(prefix: string, params: Record<string, unknown>): string;
|
|
89
|
+
//# sourceMappingURL=memory-cache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-cache.d.ts","sourceRoot":"","sources":["../../src/cache/memory-cache.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,qBAAa,WAAW;IACtB,OAAO,CAAC,KAAK,CAA+C;IAC5D,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,YAAY,CAAC,CAAiC;gBAE1C,OAAO,GAAE,MAAa,EAAE,iBAAiB,GAAE,MAAc;IAMrE;;;;OAIG;IACH,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI;IAqB7B;;OAEG;IACH,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAclD;;OAEG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIzB;;OAEG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAI5B;;;OAGG;IACH,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAc1C;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,IAAI,IAAI,MAAM;IAId;;OAEG;IACH,KAAK,IAAI;QACP,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,EAAE,CAAC;KAChB;IAQD;;OAEG;IACH,OAAO,CAAC,OAAO;IAef;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAMzB;;OAEG;IACH,gBAAgB,IAAI,IAAI;IAOxB;;OAEG;IACH,OAAO,CAAC,cAAc;CASvB;AAED;;GAEG;AACH,eAAO,MAAM,WAAW,aAAoB,CAAC;AAE7C;;;GAGG;AACH,eAAO,MAAM,GAAG;;;;;;;;CAaN,CAAC;AAEX;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,MAAM,CAOR"}
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* In-memory caching layer with TTL support for HaloPSA MCP Server
|
|
3
|
+
* Reduces API calls and token usage for frequently accessed data
|
|
4
|
+
*/
|
|
5
|
+
export class MemoryCache {
|
|
6
|
+
cache = new Map();
|
|
7
|
+
maxSize;
|
|
8
|
+
cleanupIntervalMs;
|
|
9
|
+
cleanupTimer;
|
|
10
|
+
constructor(maxSize = 1000, cleanupIntervalMs = 60000) {
|
|
11
|
+
this.maxSize = maxSize;
|
|
12
|
+
this.cleanupIntervalMs = cleanupIntervalMs;
|
|
13
|
+
this.startCleanupTimer();
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Get value from cache
|
|
17
|
+
* Returns null if key doesn't exist or has expired
|
|
18
|
+
* Implements LRU by moving accessed keys to end of Map
|
|
19
|
+
*/
|
|
20
|
+
get(key) {
|
|
21
|
+
const entry = this.cache.get(key);
|
|
22
|
+
if (!entry) {
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
// Check if expired
|
|
26
|
+
if (Date.now() > entry.expiresAt) {
|
|
27
|
+
this.cache.delete(key);
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
// LRU: Move accessed key to end of Map by re-inserting
|
|
31
|
+
// This ensures the first key in iteration order is least recently used
|
|
32
|
+
this.cache.delete(key);
|
|
33
|
+
this.cache.set(key, entry);
|
|
34
|
+
return entry.value;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Set value in cache with TTL in milliseconds
|
|
38
|
+
*/
|
|
39
|
+
set(key, value, ttlMs) {
|
|
40
|
+
// Enforce max size with LRU eviction
|
|
41
|
+
// First key in Map iteration is least recently used (due to get() re-insert pattern)
|
|
42
|
+
if (this.cache.size >= this.maxSize) {
|
|
43
|
+
const firstKey = this.cache.keys().next().value;
|
|
44
|
+
if (firstKey) {
|
|
45
|
+
this.cache.delete(firstKey);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
const expiresAt = Date.now() + ttlMs;
|
|
49
|
+
this.cache.set(key, { value, expiresAt });
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Check if key exists and is not expired
|
|
53
|
+
*/
|
|
54
|
+
has(key) {
|
|
55
|
+
return this.get(key) !== null;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Delete specific key from cache
|
|
59
|
+
*/
|
|
60
|
+
delete(key) {
|
|
61
|
+
return this.cache.delete(key);
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Delete all keys matching a pattern (glob-style)
|
|
65
|
+
* Supports wildcards: * (any characters) and ? (single character)
|
|
66
|
+
*/
|
|
67
|
+
invalidatePattern(pattern) {
|
|
68
|
+
const regex = this.patternToRegex(pattern);
|
|
69
|
+
let count = 0;
|
|
70
|
+
for (const key of this.cache.keys()) {
|
|
71
|
+
if (regex.test(key)) {
|
|
72
|
+
this.cache.delete(key);
|
|
73
|
+
count++;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return count;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Clear entire cache
|
|
80
|
+
*/
|
|
81
|
+
clear() {
|
|
82
|
+
this.cache.clear();
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Get current cache size
|
|
86
|
+
*/
|
|
87
|
+
size() {
|
|
88
|
+
return this.cache.size;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Get cache statistics
|
|
92
|
+
*/
|
|
93
|
+
stats() {
|
|
94
|
+
return {
|
|
95
|
+
size: this.cache.size,
|
|
96
|
+
maxSize: this.maxSize,
|
|
97
|
+
keys: Array.from(this.cache.keys()),
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Remove expired entries from cache
|
|
102
|
+
*/
|
|
103
|
+
cleanup() {
|
|
104
|
+
const now = Date.now();
|
|
105
|
+
const keysToDelete = [];
|
|
106
|
+
for (const [key, entry] of this.cache.entries()) {
|
|
107
|
+
if (now > entry.expiresAt) {
|
|
108
|
+
keysToDelete.push(key);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
for (const key of keysToDelete) {
|
|
112
|
+
this.cache.delete(key);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Start periodic cleanup timer
|
|
117
|
+
*/
|
|
118
|
+
startCleanupTimer() {
|
|
119
|
+
this.cleanupTimer = setInterval(() => {
|
|
120
|
+
this.cleanup();
|
|
121
|
+
}, this.cleanupIntervalMs);
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Stop cleanup timer (for graceful shutdown)
|
|
125
|
+
*/
|
|
126
|
+
stopCleanupTimer() {
|
|
127
|
+
if (this.cleanupTimer) {
|
|
128
|
+
clearInterval(this.cleanupTimer);
|
|
129
|
+
this.cleanupTimer = undefined;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Convert glob pattern to regex
|
|
134
|
+
*/
|
|
135
|
+
patternToRegex(pattern) {
|
|
136
|
+
// Escape special regex characters except * and ?
|
|
137
|
+
const regexPattern = pattern
|
|
138
|
+
.replace(/[.+^${}()|[\]\\]/g, '\\$&')
|
|
139
|
+
.replace(/\*/g, '.*')
|
|
140
|
+
.replace(/\?/g, '.');
|
|
141
|
+
return new RegExp(`^${regexPattern}$`);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Global cache instance with predefined TTL constants
|
|
146
|
+
*/
|
|
147
|
+
export const globalCache = new MemoryCache();
|
|
148
|
+
/**
|
|
149
|
+
* TTL constants in milliseconds
|
|
150
|
+
* Based on HaloPSA data change frequencies
|
|
151
|
+
*/
|
|
152
|
+
export const TTL = {
|
|
153
|
+
// High TTL (1 hour) - Reference data rarely changes
|
|
154
|
+
ASSET_TYPES: 60 * 60 * 1000,
|
|
155
|
+
ASSET_STATUSES: 60 * 60 * 1000,
|
|
156
|
+
CONTACT_TYPES: 60 * 60 * 1000,
|
|
157
|
+
// Medium TTL (5 minutes) - Moderate change rate
|
|
158
|
+
CLIENT_LIST: 5 * 60 * 1000,
|
|
159
|
+
SITE_LIST: 5 * 60 * 1000,
|
|
160
|
+
// Low TTL (1 minute) - Frequent changes (billing critical data)
|
|
161
|
+
ASSET_LIST: 1 * 60 * 1000,
|
|
162
|
+
USER_LIST: 1 * 60 * 1000,
|
|
163
|
+
};
|
|
164
|
+
/**
|
|
165
|
+
* Generate cache key from parameters
|
|
166
|
+
* Creates deterministic keys for consistent cache lookups
|
|
167
|
+
*/
|
|
168
|
+
export function generateCacheKey(prefix, params) {
|
|
169
|
+
const sortedParams = Object.keys(params)
|
|
170
|
+
.sort()
|
|
171
|
+
.map((key) => `${key}=${JSON.stringify(params[key])}`)
|
|
172
|
+
.join('&');
|
|
173
|
+
return `${prefix}:${sortedParams || 'default'}`;
|
|
174
|
+
}
|
|
175
|
+
//# sourceMappingURL=memory-cache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-cache.js","sourceRoot":"","sources":["../../src/cache/memory-cache.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cache prewarm — populates reference data caches on startup
|
|
3
|
+
* so the first tool call for these endpoints doesn't hit the API.
|
|
4
|
+
*
|
|
5
|
+
* Prewarmed endpoints (verified from reference-data.ts):
|
|
6
|
+
* /AssetType → assettypes:all (TTL.ASSET_TYPES)
|
|
7
|
+
* /Lookup(status) → assetstatuses:all (TTL.ASSET_STATUSES)
|
|
8
|
+
* /Lookup(contact) → contacttypes:all (TTL.CONTACT_TYPES)
|
|
9
|
+
*/
|
|
10
|
+
import type { HaloPSAAPIClient } from '../api/client.js';
|
|
11
|
+
export declare function prewarmCache(client: HaloPSAAPIClient): Promise<void>;
|
|
12
|
+
//# sourceMappingURL=prewarm.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prewarm.d.ts","sourceRoot":"","sources":["../../src/cache/prewarm.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAmCzD,wBAAsB,YAAY,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAqB1E"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cache prewarm — populates reference data caches on startup
|
|
3
|
+
* so the first tool call for these endpoints doesn't hit the API.
|
|
4
|
+
*
|
|
5
|
+
* Prewarmed endpoints (verified from reference-data.ts):
|
|
6
|
+
* /AssetType → assettypes:all (TTL.ASSET_TYPES)
|
|
7
|
+
* /Lookup(status) → assetstatuses:all (TTL.ASSET_STATUSES)
|
|
8
|
+
* /Lookup(contact) → contacttypes:all (TTL.CONTACT_TYPES)
|
|
9
|
+
*/
|
|
10
|
+
import { TTL } from './memory-cache.js';
|
|
11
|
+
const targets = [
|
|
12
|
+
{
|
|
13
|
+
label: 'Asset Types',
|
|
14
|
+
endpoint: '/AssetType',
|
|
15
|
+
params: { count: 500 },
|
|
16
|
+
keyPrefix: 'assettypes:all',
|
|
17
|
+
ttl: TTL.ASSET_TYPES,
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
label: 'Asset Statuses',
|
|
21
|
+
endpoint: '/Lookup',
|
|
22
|
+
params: { lookuptype: 'assetstatus', count: 100 },
|
|
23
|
+
keyPrefix: 'assetstatuses:all',
|
|
24
|
+
ttl: TTL.ASSET_STATUSES,
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
label: 'Contact Types',
|
|
28
|
+
endpoint: '/Lookup',
|
|
29
|
+
params: { lookuptype: 'contacttype', count: 100 },
|
|
30
|
+
keyPrefix: 'contacttypes:all',
|
|
31
|
+
ttl: TTL.CONTACT_TYPES,
|
|
32
|
+
},
|
|
33
|
+
];
|
|
34
|
+
export async function prewarmCache(client) {
|
|
35
|
+
let success = 0;
|
|
36
|
+
let failed = 0;
|
|
37
|
+
for (const target of targets) {
|
|
38
|
+
try {
|
|
39
|
+
await client.getCached(target.endpoint, target.params, {
|
|
40
|
+
enabled: true,
|
|
41
|
+
ttl: target.ttl,
|
|
42
|
+
keyPrefix: target.keyPrefix,
|
|
43
|
+
});
|
|
44
|
+
success++;
|
|
45
|
+
console.error(` ✓ Prewarmed: ${target.label}`);
|
|
46
|
+
}
|
|
47
|
+
catch (error) {
|
|
48
|
+
failed++;
|
|
49
|
+
const message = error instanceof Error ? error.message : 'Unknown error';
|
|
50
|
+
console.error(` ✗ Prewarm failed: ${target.label} — ${message}`);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
console.error(`Cache prewarm complete: ${success} succeeded, ${failed} failed`);
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=prewarm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prewarm.js","sourceRoot":"","sources":["../../src/cache/prewarm.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAUxC,MAAM,OAAO,GAAoB;IAC/B;QACE,KAAK,EAAE,aAAa;QACpB,QAAQ,EAAE,YAAY;QACtB,MAAM,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE;QACtB,SAAS,EAAE,gBAAgB;QAC3B,GAAG,EAAE,GAAG,CAAC,WAAW;KACrB;IACD;QACE,KAAK,EAAE,gBAAgB;QACvB,QAAQ,EAAE,SAAS;QACnB,MAAM,EAAE,EAAE,UAAU,EAAE,aAAa,EAAE,KAAK,EAAE,GAAG,EAAE;QACjD,SAAS,EAAE,mBAAmB;QAC9B,GAAG,EAAE,GAAG,CAAC,cAAc;KACxB;IACD;QACE,KAAK,EAAE,eAAe;QACtB,QAAQ,EAAE,SAAS;QACnB,MAAM,EAAE,EAAE,UAAU,EAAE,aAAa,EAAE,KAAK,EAAE,GAAG,EAAE;QACjD,SAAS,EAAE,kBAAkB;QAC7B,GAAG,EAAE,GAAG,CAAC,aAAa;KACvB;CACF,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,MAAwB;IACzD,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,MAAM,GAAG,CAAC,CAAC;IAEf,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE;gBACrD,OAAO,EAAE,IAAI;gBACb,GAAG,EAAE,MAAM,CAAC,GAAG;gBACf,SAAS,EAAE,MAAM,CAAC,SAAS;aAC5B,CAAC,CAAC;YACH,OAAO,EAAE,CAAC;YACV,OAAO,CAAC,KAAK,CAAC,kBAAkB,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QAClD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,EAAE,CAAC;YACT,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;YACzE,OAAO,CAAC,KAAK,CAAC,uBAAuB,MAAM,CAAC,KAAK,MAAM,OAAO,EAAE,CAAC,CAAC;QACpE,CAAC;IACH,CAAC;IAED,OAAO,CAAC,KAAK,CAAC,2BAA2B,OAAO,eAAe,MAAM,SAAS,CAAC,CAAC;AAClF,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* HaloPSA MCP Server v1.0
|
|
4
|
+
* Provides direct API access to HaloPSA for Claude Code with token optimization
|
|
5
|
+
*
|
|
6
|
+
* CRITICAL: HaloPSA is WilnerTech's billing backbone
|
|
7
|
+
* - Asset/user counts determine client charges
|
|
8
|
+
* - Accuracy is essential for revenue protection
|
|
9
|
+
* - Deduplication prevents billing errors
|
|
10
|
+
*/
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;;;;GAQG"}
|