@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.
Files changed (76) hide show
  1. package/.env.example +19 -0
  2. package/LICENSE +21 -0
  3. package/README.md +270 -0
  4. package/dist/api/client.d.ts +85 -0
  5. package/dist/api/client.d.ts.map +1 -0
  6. package/dist/api/client.js +297 -0
  7. package/dist/api/client.js.map +1 -0
  8. package/dist/api/errors.d.ts +60 -0
  9. package/dist/api/errors.d.ts.map +1 -0
  10. package/dist/api/errors.js +188 -0
  11. package/dist/api/errors.js.map +1 -0
  12. package/dist/cache/memory-cache.d.ts +89 -0
  13. package/dist/cache/memory-cache.d.ts.map +1 -0
  14. package/dist/cache/memory-cache.js +175 -0
  15. package/dist/cache/memory-cache.js.map +1 -0
  16. package/dist/cache/prewarm.d.ts +12 -0
  17. package/dist/cache/prewarm.d.ts.map +1 -0
  18. package/dist/cache/prewarm.js +55 -0
  19. package/dist/cache/prewarm.js.map +1 -0
  20. package/dist/index.d.ts +12 -0
  21. package/dist/index.d.ts.map +1 -0
  22. package/dist/index.js +141 -0
  23. package/dist/index.js.map +1 -0
  24. package/dist/schemas/common.d.ts +212 -0
  25. package/dist/schemas/common.d.ts.map +1 -0
  26. package/dist/schemas/common.js +127 -0
  27. package/dist/schemas/common.js.map +1 -0
  28. package/dist/tools/assets.d.ts +482 -0
  29. package/dist/tools/assets.d.ts.map +1 -0
  30. package/dist/tools/assets.js +732 -0
  31. package/dist/tools/assets.js.map +1 -0
  32. package/dist/tools/batch-operations.d.ts +125 -0
  33. package/dist/tools/batch-operations.d.ts.map +1 -0
  34. package/dist/tools/batch-operations.js +207 -0
  35. package/dist/tools/batch-operations.js.map +1 -0
  36. package/dist/tools/clients.d.ts +145 -0
  37. package/dist/tools/clients.d.ts.map +1 -0
  38. package/dist/tools/clients.js +148 -0
  39. package/dist/tools/clients.js.map +1 -0
  40. package/dist/tools/reference-data.d.ts +118 -0
  41. package/dist/tools/reference-data.d.ts.map +1 -0
  42. package/dist/tools/reference-data.js +103 -0
  43. package/dist/tools/reference-data.js.map +1 -0
  44. package/dist/tools/registrations.d.ts +7 -0
  45. package/dist/tools/registrations.d.ts.map +1 -0
  46. package/dist/tools/registrations.js +61 -0
  47. package/dist/tools/registrations.js.map +1 -0
  48. package/dist/tools/registry.d.ts +67 -0
  49. package/dist/tools/registry.d.ts.map +1 -0
  50. package/dist/tools/registry.js +71 -0
  51. package/dist/tools/registry.js.map +1 -0
  52. package/dist/tools/sites.d.ts +188 -0
  53. package/dist/tools/sites.d.ts.map +1 -0
  54. package/dist/tools/sites.js +258 -0
  55. package/dist/tools/sites.js.map +1 -0
  56. package/dist/tools/users.d.ts +317 -0
  57. package/dist/tools/users.d.ts.map +1 -0
  58. package/dist/tools/users.js +489 -0
  59. package/dist/tools/users.js.map +1 -0
  60. package/dist/types/halopsa.d.ts +212 -0
  61. package/dist/types/halopsa.d.ts.map +1 -0
  62. package/dist/types/halopsa.js +8 -0
  63. package/dist/types/halopsa.js.map +1 -0
  64. package/dist/utils/formatter.d.ts +18 -0
  65. package/dist/utils/formatter.d.ts.map +1 -0
  66. package/dist/utils/formatter.js +178 -0
  67. package/dist/utils/formatter.js.map +1 -0
  68. package/dist/utils/similarity.d.ts +25 -0
  69. package/dist/utils/similarity.d.ts.map +1 -0
  70. package/dist/utils/similarity.js +90 -0
  71. package/dist/utils/similarity.js.map +1 -0
  72. package/dist/utils/zod-to-schema.d.ts +29 -0
  73. package/dist/utils/zod-to-schema.d.ts.map +1 -0
  74. package/dist/utils/zod-to-schema.js +182 -0
  75. package/dist/utils/zod-to-schema.js.map +1 -0
  76. 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":"AAAA;;;GAGG;AAgBH,MAAM,OAAO,YAAa,SAAQ,KAAK;IAE5B;IAEA;IACA;IACA;IALT,YACS,SAAoB,EAC3B,OAAe,EACR,OAAsB,EACtB,UAAmB,EACnB,UAAmB;QAE1B,KAAK,CAAC,OAAO,CAAC,CAAC;QANR,cAAS,GAAT,SAAS,CAAW;QAEpB,YAAO,GAAP,OAAO,CAAe;QACtB,eAAU,GAAV,UAAU,CAAS;QACnB,eAAU,GAAV,UAAU,CAAS;QAG1B,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,MAAM;QACJ,OAAO;YACL,KAAK,EAAE,IAAI;YACX,UAAU,EAAE,IAAI,CAAC,SAAS;YAC1B,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;YAC9C,GAAG,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC;YACvD,GAAG,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,WAAW,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC;SACzD,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAChD,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,aAAqB,EAAE;IAC1D,OAAO,IAAI,YAAY,CACrB,mBAAmB,EACnB,iCAAiC,EACjC;QACE,mBAAmB,EAAE,UAAU;QAC/B,aAAa,EAAE,iBAAiB;QAChC,YAAY,EAAE,UAAU;KACzB,EACD,QAAQ,UAAU,6GAA6G,EAC/H,GAAG,CACJ,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CACjC,YAAoB,EACpB,UAAkB,EAClB,QAAgB;IAEhB,OAAO,IAAI,YAAY,CACrB,UAAU,EACV,GAAG,YAAY,aAAa,UAAU,aAAa,EACnD;QACE,aAAa,EAAE,YAAY;QAC3B,WAAW,EAAE,UAAU;QACvB,QAAQ;KACT,EACD,cAAc,YAAY,iGAAiG,EAC3H,GAAG,CACJ,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,UAAkB,uBAAuB;IACvE,OAAO,IAAI,YAAY,CACrB,WAAW,EACX,OAAO,EACP;QACE,WAAW,EAAE,2BAA2B;KACzC,EACD,6FAA6F;QAC7F,+EAA+E,EAC/E,GAAG,CACJ,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB;IACrC,OAAO,IAAI,YAAY,CACrB,cAAc,EACd,kCAAkC,EAClC;QACE,WAAW,EAAE,2BAA2B;KACzC,EACD,iGAAiG,EACjG,GAAG,CACJ,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,2BAA2B,CACzC,aAAqB,EACrB,aAAsB,EACtB,YAAqB,EACrB,aAAyB;IAEzB,MAAM,OAAO,GAAiB;QAC5B,SAAS,EAAE,aAAa;QACxB,cAAc,EAAE,aAAa;KAC9B,CAAC;IAEF,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO,CAAC,aAAa,GAAG,YAAY,CAAC;IACvC,CAAC;IAED,IAAI,aAAa,EAAE,CAAC;QAClB,OAAO,CAAC,cAAc,GAAG,aAAa,CAAC;IACzC,CAAC;IAED,IAAI,UAAU,GAAG,cAAc,aAAa,oBAAoB,CAAC;IACjE,IAAI,YAAY,EAAE,CAAC;QACjB,UAAU,IAAI,mBAAmB,YAAY,GAAG,CAAC;IACnD,CAAC;IACD,IAAI,aAAa,EAAE,CAAC;QAClB,UAAU,IAAI,oBAAoB,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;IAChE,CAAC;IAED,OAAO,IAAI,YAAY,CACrB,kBAAkB,EAClB,sBAAsB,aAAa,EAAE,EACrC,OAAO,EACP,UAAU,EACV,GAAG,CACJ,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,0BAA0B,CACxC,aAAuB,EACvB,WAAqB;IAErB,OAAO,IAAI,YAAY,CACrB,iBAAiB,EACjB,6BAA6B,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EACvD;QACE,cAAc,EAAE,aAAa;QAC7B,YAAY,EAAE,WAAW;KAC1B,EACD,uCAAuC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,uBAAuB,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAC/G,GAAG,CACJ,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAC/B,UAAkB,EAClB,UAAkB,sBAAsB;IAExC,OAAO,IAAI,YAAY,CACrB,aAAa,EACb,OAAO,EACP;QACE,WAAW,EAAE,UAAU;KACxB,EACD,8GAA8G,EAC9G,UAAU,CACX,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,aAAoB;IACrD,OAAO,IAAI,YAAY,CACrB,cAAc,EACd,kCAAkC,EAClC;QACE,cAAc,EAAE,aAAa,CAAC,OAAO;KACtC,EACD,sFAAsF,EACtF,CAAC,CACF,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,sBAAsB,CAC7B,IAAa;IAEb,OAAO,CACL,OAAO,IAAI,KAAK,QAAQ;QACxB,IAAI,KAAK,IAAI;QACb,OAAO,IAAI,IAAI;QACf,OAAQ,IAAgC,CAAC,KAAK,KAAK,QAAQ,CAC5D,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAClC,UAAkB,EAClB,YAAqB,EACrB,QAAgB;IAEhB,yCAAyC;IACzC,kEAAkE;IAElE,IAAI,sBAAsB,CAAC,YAAY,CAAC,EAAE,CAAC;QACzC,MAAM,SAAS,GAAG,YAAY,CAAC,KAAK,CAAC;QACrC,MAAM,gBAAgB,GAAG,YAAY,CAAC,iBAAiB,IAAI,SAAS,CAAC;QAErE,wCAAwC;QACxC,QAAQ,UAAU,EAAE,CAAC;YACnB,KAAK,GAAG,CAAC;YACT,KAAK,GAAG;gBACN,IAAI,SAAS,KAAK,eAAe,IAAI,SAAS,KAAK,eAAe,EAAE,CAAC;oBACnE,OAAO,uBAAuB,EAAE,CAAC;gBACnC,CAAC;gBACD,OAAO,eAAe,CAAC,GAAG,SAAS,KAAK,gBAAgB,EAAE,CAAC,CAAC;YAE9D,KAAK,GAAG;gBACN,6CAA6C;gBAC7C,MAAM,aAAa,GAAG,QAAQ,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;gBAC/D,MAAM,YAAY,GAAG,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;gBACnE,MAAM,UAAU,GAAG,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;gBAChE,OAAO,mBAAmB,CAAC,YAAY,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;YAEjE,KAAK,GAAG;gBACN,OAAO,oBAAoB,EAAE,CAAC;YAEhC,KAAK,GAAG;gBACN,OAAO,IAAI,YAAY,CACrB,iBAAiB,EACjB,GAAG,SAAS,KAAK,gBAAgB,EAAE,EACnC;oBACE,QAAQ;oBACR,UAAU,EAAE,SAAS;iBACtB,EACD,uFAAuF,EACvF,UAAU,CACX,CAAC;YAEJ;gBACE,IAAI,UAAU,IAAI,GAAG,EAAE,CAAC;oBACtB,OAAO,iBAAiB,CAAC,UAAU,EAAE,GAAG,SAAS,KAAK,gBAAgB,EAAE,CAAC,CAAC;gBAC5E,CAAC;gBACD,OAAO,IAAI,YAAY,CACrB,aAAa,EACb,GAAG,SAAS,KAAK,gBAAgB,EAAE,EACnC;oBACE,QAAQ;oBACR,WAAW,EAAE,UAAU;iBACxB,EACD,SAAS,EACT,UAAU,CACX,CAAC;QACN,CAAC;IACH,CAAC;IAED,4CAA4C;IAC5C,QAAQ,UAAU,EAAE,CAAC;QACnB,KAAK,GAAG,CAAC;QACT,KAAK,GAAG;YACN,OAAO,eAAe,EAAE,CAAC;QAC3B,KAAK,GAAG;YACN,OAAO,mBAAmB,CAAC,UAAU,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;QAC9D,KAAK,GAAG;YACN,OAAO,oBAAoB,EAAE,CAAC;QAChC;YACE,IAAI,UAAU,IAAI,GAAG,EAAE,CAAC;gBACtB,OAAO,iBAAiB,CAAC,UAAU,CAAC,CAAC;YACvC,CAAC;YACD,OAAO,IAAI,YAAY,CACrB,aAAa,EACb,QAAQ,UAAU,QAAQ,EAC1B,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE,EACrC,SAAS,EACT,UAAU,CACX,CAAC;IACN,CAAC;AACH,CAAC"}
@@ -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"}
@@ -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"}