@wilnertech/halopsa-mcp-server 1.4.0 → 1.6.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/README.md +8 -1
- package/dist/api/client.d.ts +51 -2
- package/dist/api/client.d.ts.map +1 -1
- package/dist/api/client.js +124 -9
- package/dist/api/client.js.map +1 -1
- package/dist/api/errors.d.ts +16 -3
- package/dist/api/errors.d.ts.map +1 -1
- package/dist/api/errors.js +107 -30
- package/dist/api/errors.js.map +1 -1
- package/dist/cache/memory-cache.d.ts +1 -0
- package/dist/cache/memory-cache.d.ts.map +1 -1
- package/dist/cache/memory-cache.js +6 -0
- package/dist/cache/memory-cache.js.map +1 -1
- package/dist/cache/prewarm.d.ts +1 -0
- package/dist/cache/prewarm.d.ts.map +1 -1
- package/dist/cache/prewarm.js +8 -0
- package/dist/cache/prewarm.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +12 -4
- package/dist/index.js.map +1 -1
- package/dist/tools/batch-operations.js +10 -10
- package/dist/tools/batch-operations.js.map +1 -1
- package/dist/tools/budgets.d.ts.map +1 -1
- package/dist/tools/budgets.js +7 -4
- package/dist/tools/budgets.js.map +1 -1
- package/dist/tools/milestones.d.ts.map +1 -1
- package/dist/tools/milestones.js +12 -9
- package/dist/tools/milestones.js.map +1 -1
- package/dist/tools/registrations.d.ts +8 -3
- package/dist/tools/registrations.d.ts.map +1 -1
- package/dist/tools/registrations.js +21 -12
- package/dist/tools/registrations.js.map +1 -1
- package/dist/tools/ticket-actions.d.ts +46 -0
- package/dist/tools/ticket-actions.d.ts.map +1 -1
- package/dist/tools/ticket-actions.js +236 -32
- package/dist/tools/ticket-actions.js.map +1 -1
- package/dist/tools/ticket-reference-data.d.ts +70 -1
- package/dist/tools/ticket-reference-data.d.ts.map +1 -1
- package/dist/tools/ticket-reference-data.js +340 -11
- package/dist/tools/ticket-reference-data.js.map +1 -1
- package/dist/tools/tickets.d.ts +53 -0
- package/dist/tools/tickets.d.ts.map +1 -1
- package/dist/tools/tickets.js +394 -22
- package/dist/tools/tickets.js.map +1 -1
- package/dist/types/tickets.d.ts +127 -0
- package/dist/types/tickets.d.ts.map +1 -1
- package/dist/utils/formatter.d.ts +18 -0
- package/dist/utils/formatter.d.ts.map +1 -1
- package/dist/utils/formatter.js +108 -22
- package/dist/utils/formatter.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -4,7 +4,7 @@ Model Context Protocol server for HaloPSA API integration with asset, user, and
|
|
|
4
4
|
|
|
5
5
|
## Key Features
|
|
6
6
|
|
|
7
|
-
- **
|
|
7
|
+
- **71 tools** for managing HaloPSA assets, users, sites, clients, tickets, actions, agents, workflows, milestones, budgets, ticket links, bulk updates, outcomes, validation, and SLA holds
|
|
8
8
|
- **Deduplication** with confidence scoring to prevent duplicate billing entities
|
|
9
9
|
- **OAuth2 Client Credentials** authentication with automatic token refresh
|
|
10
10
|
- **Rate limiting** with exponential backoff (60 requests/minute)
|
|
@@ -12,6 +12,13 @@ Model Context Protocol server for HaloPSA API integration with asset, user, and
|
|
|
12
12
|
- **Inflight request dedup** prevents concurrent duplicate API calls
|
|
13
13
|
- **Token optimization** via format_options (compact/standard/detailed modes)
|
|
14
14
|
|
|
15
|
+
### v1.6.0 highlights
|
|
16
|
+
|
|
17
|
+
- **M4 worker-leak fix** — cleanup timer now calls `.unref()` so broken-pipe / parent-death exits are immediate instead of hanging up to 60s.
|
|
18
|
+
- **M3 version-import fix** — server advertises the real package version (`1.6.0`) instead of the stale `1.0.0` hardcode.
|
|
19
|
+
- **M2 POST idempotency hardening** — POST `/Actions` and POST `/Tickets` are now at-most-once (no retry on transient errors). Prevents duplicate journal entries and double billing on network failures.
|
|
20
|
+
- **Tool-list diet** — five wordiest tool descriptions trimmed (~4 KB savings per session init). Tool count remains 71.
|
|
21
|
+
|
|
15
22
|
## Important: Billing Context
|
|
16
23
|
|
|
17
24
|
HaloPSA asset and user counts are commonly used for billing calculations in MSP environments.
|
package/dist/api/client.d.ts
CHANGED
|
@@ -50,7 +50,11 @@ export declare class HaloPSAAPIClient {
|
|
|
50
50
|
*/
|
|
51
51
|
private throttleRequest;
|
|
52
52
|
/**
|
|
53
|
-
* Handle API errors with retry logic for rate limits and token expiration
|
|
53
|
+
* Handle API errors with retry logic for rate limits and token expiration.
|
|
54
|
+
*
|
|
55
|
+
* Surfaces Halo's raw response body in all thrown errors (Bug 4 fix).
|
|
56
|
+
* Also handles 302 redirects as errors so the Location header is visible
|
|
57
|
+
* rather than silently following into an HTML login page (Bug 2 fix).
|
|
54
58
|
*/
|
|
55
59
|
private handleError;
|
|
56
60
|
/**
|
|
@@ -66,9 +70,54 @@ export declare class HaloPSAAPIClient {
|
|
|
66
70
|
*/
|
|
67
71
|
invalidateCache(pattern: string): number;
|
|
68
72
|
/**
|
|
69
|
-
* Make a POST request with retry logic
|
|
73
|
+
* Make a POST request with retry logic.
|
|
74
|
+
*
|
|
75
|
+
* Wraps the axios call in a 30s belt-and-braces timeout race (Bug 2 fix).
|
|
76
|
+
* The axios-level timeout fires on slow response _start_ (TCP stall) but may
|
|
77
|
+
* not fire when Halo streams headers immediately then stalls on the body.
|
|
78
|
+
* The manual race ensures the promise always settles within 30 seconds
|
|
79
|
+
* regardless of where the stall occurs.
|
|
70
80
|
*/
|
|
71
81
|
post<T>(endpoint: string, data: unknown, retryCount?: number): Promise<T>;
|
|
82
|
+
/**
|
|
83
|
+
* Returns true for append-only POST endpoints that must not be retried.
|
|
84
|
+
* A network error on these paths may mean Halo persisted the record before
|
|
85
|
+
* the response was lost — retrying would duplicate the write.
|
|
86
|
+
*
|
|
87
|
+
* Why POST /Actions and POST /Tickets are treated as at-most-once:
|
|
88
|
+
* POST /Actions creates journal entries that carry timetaken and chargehours
|
|
89
|
+
* fields — Halo rolls these up into billing totals per ticket. A duplicate
|
|
90
|
+
* action entry (from a network-error retry where Halo persisted but the
|
|
91
|
+
* response was lost) would silently double-charge the client.
|
|
92
|
+
*
|
|
93
|
+
* POST /Tickets is used for BOTH creates AND updates in Halo's data model
|
|
94
|
+
* (Halo has no PATCH — a ticket update is a POST /Tickets with `id` in the
|
|
95
|
+
* body). The at-most-once semantics intentionally apply to both operations:
|
|
96
|
+
* an update that loses network connectivity before a response leaves the
|
|
97
|
+
* caller uncertain whether the update applied. This is the conservative
|
|
98
|
+
* choice since Halo has no idempotency token and a retry could result in
|
|
99
|
+
* double-applied updates with billing impact (cost overrides, contract
|
|
100
|
+
* changes, scheduler-recomputed dates). For creates, duplicates corrupt the
|
|
101
|
+
* audit trail and billing rollups.
|
|
102
|
+
*
|
|
103
|
+
* Why we do not use an Idempotency-Key header:
|
|
104
|
+
* Halo's OpenAPI 3.0.1 spec declares zero header parameters across all 952
|
|
105
|
+
* paths and contains zero references to "idempotency", "request-id", or
|
|
106
|
+
* "dedup-key" (verified 2026-05-12 against the authoritative spec at
|
|
107
|
+
* .claude/api-docs/halopsa-swagger.json; components.headers is empty;
|
|
108
|
+
* components.parameters is empty). Halo has no documented mechanism for
|
|
109
|
+
* client-supplied request keys that it would honor for deduplication.
|
|
110
|
+
* Every POST creates or applies a new server-side write regardless of retry
|
|
111
|
+
* headers.
|
|
112
|
+
*
|
|
113
|
+
* Future improvement: if Halo adds an Idempotency-Key header to POST /Actions
|
|
114
|
+
* and POST /Tickets, this guard can be removed and standard retries restored.
|
|
115
|
+
* Until then, the caller must verify whether the write landed (e.g., via
|
|
116
|
+
* list_halopsa_ticket_actions or get_halopsa_ticket) after a network error.
|
|
117
|
+
*
|
|
118
|
+
* Reference: thoughts/shared/research/2026-05-12_halopsa-mcp-v16-deferred-items-swagger-research.md
|
|
119
|
+
*/
|
|
120
|
+
private isWriteOnceEndpoint;
|
|
72
121
|
/**
|
|
73
122
|
* Make a DELETE request with retry logic
|
|
74
123
|
*/
|
package/dist/api/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAYH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AASD,UAAU,YAAY;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,UAAU,CAAgB;IAClC,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,UAAU,CAAS;IAG3B,OAAO,CAAC,WAAW,CAAuB;IAC1C,OAAO,CAAC,cAAc,CAAa;IACnC,OAAO,CAAC,kBAAkB,CAAyB;IAGnD,OAAO,CAAC,mBAAmB,CAA8B;IAGzD,OAAO,CAAC,YAAY,CAAa;IACjC,OAAO,CAAC,eAAe,CAAa;IACpC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAQ;IAG7C,OAAO,CAAC,QAAQ,CAA4C;gBAEhD,MAAM,EAAE,mBAAmB;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAYH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AASD,UAAU,YAAY;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,UAAU,CAAgB;IAClC,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,UAAU,CAAS;IAG3B,OAAO,CAAC,WAAW,CAAuB;IAC1C,OAAO,CAAC,cAAc,CAAa;IACnC,OAAO,CAAC,kBAAkB,CAAyB;IAGnD,OAAO,CAAC,mBAAmB,CAA8B;IAGzD,OAAO,CAAC,YAAY,CAAa;IACjC,OAAO,CAAC,eAAe,CAAa;IACpC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAQ;IAG7C,OAAO,CAAC,QAAQ,CAA4C;gBAEhD,MAAM,EAAE,mBAAmB;IAsFvC;;;;;;;OAOG;YACW,gBAAgB;IAqB9B;;OAEG;YACW,YAAY;IA0C1B;;;OAGG;YACW,eAAe;IAiB7B;;;;;;OAMG;YACW,WAAW;IA8FzB;;OAEG;IACG,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,SAAI,GAAG,OAAO,CAAC,CAAC,CAAC;IAiB5F;;OAEG;IACG,SAAS,CAAC,CAAC,EACf,QAAQ,EAAE,MAAM,EAChB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,YAAY,CAAC,EAAE,YAAY,GAC1B,OAAO,CAAC,CAAC,CAAC;IAqCb;;OAEG;IACH,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAIxC;;;;;;;;OAQG;IACG,IAAI,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,SAAI,GAAG,OAAO,CAAC,CAAC,CAAC;IAwC1E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAqCG;IACH,OAAO,CAAC,mBAAmB;IAK3B;;OAEG;IACG,MAAM,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,SAAI,GAAG,OAAO,CAAC,CAAC,CAAC;IAiB7D;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAiBxB;;OAEG;IACH,QAAQ,IAAI;QACV,YAAY,EAAE,MAAM,CAAC;QACrB,eAAe,EAAE,MAAM,CAAC;QACxB,cAAc,EAAE,MAAM,CAAC;KACxB;CAOF"}
|
package/dist/api/client.js
CHANGED
|
@@ -47,6 +47,12 @@ export class HaloPSAAPIClient {
|
|
|
47
47
|
'Content-Type': 'application/json',
|
|
48
48
|
},
|
|
49
49
|
timeout: 30000,
|
|
50
|
+
// Do NOT auto-follow redirects on any request (Bug 2 fix).
|
|
51
|
+
// A 302 from Halo on a POST/PUT/DELETE typically indicates a login redirect
|
|
52
|
+
// or approval gate. With maxRedirects: 0 the response interceptor receives
|
|
53
|
+
// a proper AxiosError with status 302 and the Location header surfaced,
|
|
54
|
+
// rather than silently following the redirect into an HTML page that stalls.
|
|
55
|
+
maxRedirects: 0,
|
|
50
56
|
});
|
|
51
57
|
// Add request interceptor for authentication and rate limiting
|
|
52
58
|
this.client.interceptors.request.use(async (config) => {
|
|
@@ -58,8 +64,31 @@ export class HaloPSAAPIClient {
|
|
|
58
64
|
await this.throttleRequest();
|
|
59
65
|
return config;
|
|
60
66
|
});
|
|
61
|
-
// Add response interceptor for error handling
|
|
62
|
-
|
|
67
|
+
// Add response interceptor for error handling and Content-Type safety (Bug 2).
|
|
68
|
+
// When Halo returns a non-JSON body (HTML error page, redirect, etc.) we
|
|
69
|
+
// must detect it here and throw a structured HaloPSAError immediately rather
|
|
70
|
+
// than letting the JSON-parse path hang or produce an untyped error.
|
|
71
|
+
this.client.interceptors.response.use((response) => {
|
|
72
|
+
const contentType = String(response.headers['content-type'] ?? '');
|
|
73
|
+
// Only enforce Content-Type on non-empty success responses.
|
|
74
|
+
// 204 No Content has no body and no Content-Type — let it pass through.
|
|
75
|
+
if (response.data !== undefined &&
|
|
76
|
+
response.data !== null &&
|
|
77
|
+
response.data !== '' &&
|
|
78
|
+
response.status !== 204 &&
|
|
79
|
+
contentType !== '' &&
|
|
80
|
+
!contentType.includes('application/json')) {
|
|
81
|
+
const rawBodyText = typeof response.data === 'string'
|
|
82
|
+
? response.data.slice(0, 2048)
|
|
83
|
+
: JSON.stringify(response.data).slice(0, 2048);
|
|
84
|
+
throw new HaloPSAError('ServerError', `Non-JSON response (Content-Type: ${contentType.split(';')[0].trim()}) | body: ${rawBodyText}`, {
|
|
85
|
+
endpoint: response.config.url ?? 'unknown',
|
|
86
|
+
status_code: response.status,
|
|
87
|
+
content_type: contentType,
|
|
88
|
+
}, 'HaloPSA returned an unexpected response format. This may indicate a redirect to a login page or a server error page.', response.status, rawBodyText);
|
|
89
|
+
}
|
|
90
|
+
return response;
|
|
91
|
+
}, async (error) => {
|
|
63
92
|
return this.handleError(error);
|
|
64
93
|
});
|
|
65
94
|
}
|
|
@@ -146,20 +175,41 @@ export class HaloPSAAPIClient {
|
|
|
146
175
|
this.requestCount++;
|
|
147
176
|
}
|
|
148
177
|
/**
|
|
149
|
-
* Handle API errors with retry logic for rate limits and token expiration
|
|
178
|
+
* Handle API errors with retry logic for rate limits and token expiration.
|
|
179
|
+
*
|
|
180
|
+
* Surfaces Halo's raw response body in all thrown errors (Bug 4 fix).
|
|
181
|
+
* Also handles 302 redirects as errors so the Location header is visible
|
|
182
|
+
* rather than silently following into an HTML login page (Bug 2 fix).
|
|
150
183
|
*/
|
|
151
184
|
async handleError(error) {
|
|
152
185
|
// If error is already a HaloPSAError (e.g., from request interceptor), re-throw as-is
|
|
153
186
|
if (error instanceof HaloPSAError) {
|
|
154
187
|
throw error;
|
|
155
188
|
}
|
|
189
|
+
// Timeout errors — convert to a clear NetworkError with a "timed out" message
|
|
190
|
+
if (error.code === 'ECONNABORTED' || error.message.toLowerCase().includes('timeout')) {
|
|
191
|
+
const endpoint = error.config?.url ?? 'unknown';
|
|
192
|
+
throw new HaloPSAError('NetworkError', `Request timed out after 30s (endpoint: ${endpoint})`, { endpoint, error_code: error.code ?? 'TIMEOUT' }, 'The HaloPSA API did not respond within 30 seconds. Check HaloPSA status and try again.', 0);
|
|
193
|
+
}
|
|
156
194
|
// Network error (no response from server)
|
|
157
195
|
if (!error.response) {
|
|
158
196
|
throw createNetworkError(error);
|
|
159
197
|
}
|
|
160
198
|
const status = error.response.status;
|
|
161
199
|
const data = error.response.data;
|
|
162
|
-
const endpoint = error.config?.url
|
|
200
|
+
const endpoint = error.config?.url ?? 'unknown';
|
|
201
|
+
// Surface redirect Location header for 3xx errors (Bug 2).
|
|
202
|
+
// With maxRedirects: 0 on the axios instance, 302/301 responses become
|
|
203
|
+
// AxiosErrors. Include the Location header so callers can diagnose whether
|
|
204
|
+
// Halo is redirecting to a login page.
|
|
205
|
+
if (status >= 300 && status < 400) {
|
|
206
|
+
const location = error.response.headers['location'] ?? '(no Location header)';
|
|
207
|
+
throw new HaloPSAError('ServerError', `HTTP ${status} redirect to: ${location} (endpoint: ${endpoint})`, {
|
|
208
|
+
endpoint,
|
|
209
|
+
status_code: status,
|
|
210
|
+
location,
|
|
211
|
+
}, 'HaloPSA returned a redirect. This may indicate an authentication issue or a misconfigured base URL.', status);
|
|
212
|
+
}
|
|
163
213
|
// Handle 401 - token may be expired
|
|
164
214
|
if (status === 401) {
|
|
165
215
|
// Clear token and retry once
|
|
@@ -181,7 +231,7 @@ export class HaloPSAAPIClient {
|
|
|
181
231
|
return this.client.request(error.config);
|
|
182
232
|
}
|
|
183
233
|
catch {
|
|
184
|
-
// Token refresh failed,
|
|
234
|
+
// Token refresh failed, fall through to parse the original 401 response
|
|
185
235
|
}
|
|
186
236
|
}
|
|
187
237
|
}
|
|
@@ -196,8 +246,10 @@ export class HaloPSAAPIClient {
|
|
|
196
246
|
return this.client.request(error.config);
|
|
197
247
|
}
|
|
198
248
|
}
|
|
199
|
-
// Parse and throw enhanced error
|
|
200
|
-
|
|
249
|
+
// Parse and throw enhanced error with full response body (Bug 4 fix).
|
|
250
|
+
// Parameter order: (responseData, statusCode, endpoint) — matches the
|
|
251
|
+
// updated parseHaloPSAApiError signature.
|
|
252
|
+
const enhancedError = parseHaloPSAApiError(data, status, endpoint);
|
|
201
253
|
throw enhancedError;
|
|
202
254
|
}
|
|
203
255
|
/**
|
|
@@ -258,14 +310,35 @@ export class HaloPSAAPIClient {
|
|
|
258
310
|
return globalCache.invalidatePattern(pattern);
|
|
259
311
|
}
|
|
260
312
|
/**
|
|
261
|
-
* Make a POST request with retry logic
|
|
313
|
+
* Make a POST request with retry logic.
|
|
314
|
+
*
|
|
315
|
+
* Wraps the axios call in a 30s belt-and-braces timeout race (Bug 2 fix).
|
|
316
|
+
* The axios-level timeout fires on slow response _start_ (TCP stall) but may
|
|
317
|
+
* not fire when Halo streams headers immediately then stalls on the body.
|
|
318
|
+
* The manual race ensures the promise always settles within 30 seconds
|
|
319
|
+
* regardless of where the stall occurs.
|
|
262
320
|
*/
|
|
263
321
|
async post(endpoint, data, retryCount = 0) {
|
|
322
|
+
const HARD_TIMEOUT_MS = 30_000;
|
|
264
323
|
try {
|
|
265
|
-
const
|
|
324
|
+
const requestPromise = this.client.post(endpoint, data);
|
|
325
|
+
const timeoutPromise = new Promise((_resolve, reject) => {
|
|
326
|
+
setTimeout(() => {
|
|
327
|
+
reject(new HaloPSAError('NetworkError', `POST request timed out after ${HARD_TIMEOUT_MS / 1000}s (endpoint: ${endpoint})`, { endpoint }, 'The HaloPSA API did not respond within 30 seconds. Check HaloPSA status and try again.', 0));
|
|
328
|
+
}, HARD_TIMEOUT_MS);
|
|
329
|
+
});
|
|
330
|
+
const response = await Promise.race([requestPromise, timeoutPromise]);
|
|
266
331
|
return response.data;
|
|
267
332
|
}
|
|
268
333
|
catch (error) {
|
|
334
|
+
// POST /Actions and POST /Tickets are append-only write endpoints.
|
|
335
|
+
// Retrying after a network error would create duplicate records (billing
|
|
336
|
+
// concern: timetaken/chargehours could be double-charged). These paths
|
|
337
|
+
// are at-most-once — let the error propagate so the caller can decide
|
|
338
|
+
// whether the write landed (e.g., via list_halopsa_ticket_actions).
|
|
339
|
+
if (this.isWriteOnceEndpoint(endpoint)) {
|
|
340
|
+
throw error;
|
|
341
|
+
}
|
|
269
342
|
if (retryCount < this.maxRetries && this.isRetryableError(error)) {
|
|
270
343
|
const delay = this.retryDelay * Math.pow(2, retryCount);
|
|
271
344
|
console.warn(`HaloPSA: Request failed. Retrying in ${delay}ms (attempt ${retryCount + 1}/${this.maxRetries})...`);
|
|
@@ -275,6 +348,48 @@ export class HaloPSAAPIClient {
|
|
|
275
348
|
throw error;
|
|
276
349
|
}
|
|
277
350
|
}
|
|
351
|
+
/**
|
|
352
|
+
* Returns true for append-only POST endpoints that must not be retried.
|
|
353
|
+
* A network error on these paths may mean Halo persisted the record before
|
|
354
|
+
* the response was lost — retrying would duplicate the write.
|
|
355
|
+
*
|
|
356
|
+
* Why POST /Actions and POST /Tickets are treated as at-most-once:
|
|
357
|
+
* POST /Actions creates journal entries that carry timetaken and chargehours
|
|
358
|
+
* fields — Halo rolls these up into billing totals per ticket. A duplicate
|
|
359
|
+
* action entry (from a network-error retry where Halo persisted but the
|
|
360
|
+
* response was lost) would silently double-charge the client.
|
|
361
|
+
*
|
|
362
|
+
* POST /Tickets is used for BOTH creates AND updates in Halo's data model
|
|
363
|
+
* (Halo has no PATCH — a ticket update is a POST /Tickets with `id` in the
|
|
364
|
+
* body). The at-most-once semantics intentionally apply to both operations:
|
|
365
|
+
* an update that loses network connectivity before a response leaves the
|
|
366
|
+
* caller uncertain whether the update applied. This is the conservative
|
|
367
|
+
* choice since Halo has no idempotency token and a retry could result in
|
|
368
|
+
* double-applied updates with billing impact (cost overrides, contract
|
|
369
|
+
* changes, scheduler-recomputed dates). For creates, duplicates corrupt the
|
|
370
|
+
* audit trail and billing rollups.
|
|
371
|
+
*
|
|
372
|
+
* Why we do not use an Idempotency-Key header:
|
|
373
|
+
* Halo's OpenAPI 3.0.1 spec declares zero header parameters across all 952
|
|
374
|
+
* paths and contains zero references to "idempotency", "request-id", or
|
|
375
|
+
* "dedup-key" (verified 2026-05-12 against the authoritative spec at
|
|
376
|
+
* .claude/api-docs/halopsa-swagger.json; components.headers is empty;
|
|
377
|
+
* components.parameters is empty). Halo has no documented mechanism for
|
|
378
|
+
* client-supplied request keys that it would honor for deduplication.
|
|
379
|
+
* Every POST creates or applies a new server-side write regardless of retry
|
|
380
|
+
* headers.
|
|
381
|
+
*
|
|
382
|
+
* Future improvement: if Halo adds an Idempotency-Key header to POST /Actions
|
|
383
|
+
* and POST /Tickets, this guard can be removed and standard retries restored.
|
|
384
|
+
* Until then, the caller must verify whether the write landed (e.g., via
|
|
385
|
+
* list_halopsa_ticket_actions or get_halopsa_ticket) after a network error.
|
|
386
|
+
*
|
|
387
|
+
* Reference: thoughts/shared/research/2026-05-12_halopsa-mcp-v16-deferred-items-swagger-research.md
|
|
388
|
+
*/
|
|
389
|
+
isWriteOnceEndpoint(endpoint) {
|
|
390
|
+
// Match /Actions and /Tickets at path root (ignore trailing IDs / query strings).
|
|
391
|
+
return endpoint === '/Actions' || endpoint === '/Tickets';
|
|
392
|
+
}
|
|
278
393
|
/**
|
|
279
394
|
* Make a DELETE request with retry logic
|
|
280
395
|
*/
|
package/dist/api/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAoC,MAAM,OAAO,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,GAAG,EAAE,MAAM,0BAA0B,CAAC;AAC9E,OAAO,EACL,oBAAoB,EACpB,kBAAkB,EAClB,eAAe,EACf,YAAY,GACb,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAuBzD,MAAM,OAAO,gBAAgB;IACnB,MAAM,CAAgB;IACtB,UAAU,CAAgB;IAC1B,QAAQ,CAAS;IACjB,YAAY,CAAS;IACrB,OAAO,CAAS;IAChB,UAAU,CAAS;IACnB,UAAU,CAAS;IAE3B,mBAAmB;IACX,WAAW,GAAkB,IAAI,CAAC;IAClC,cAAc,GAAW,CAAC,CAAC;IAC3B,kBAAkB,GAAW,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,sCAAsC;IAC1F,iGAAiG;IACjG,gFAAgF;IACxE,mBAAmB,GAAyB,IAAI,CAAC;IAEzD,gBAAgB;IACR,YAAY,GAAW,CAAC,CAAC;IACzB,eAAe,GAAW,CAAC,CAAC;IACnB,oBAAoB,GAAG,IAAI,CAAC,CAAC,2CAA2C;IAEzF,iCAAiC;IACzB,QAAQ,GAAkC,IAAI,GAAG,EAAE,CAAC;IAE5D,YAAY,MAA2B;QACrC,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QAChC,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;QACxC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;QAC9B,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,CAAC,CAAC;QACzC,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,IAAI,CAAC;QAE5C,0CAA0C;QAC1C,iFAAiF;QACjF,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC;YAC7B,OAAO,EAAE,GAAG,IAAI,CAAC,OAAO,OAAO;YAC/B,OAAO,EAAE,KAAK;SACf,CAAC,CAAC;QAEH,wCAAwC;QACxC,mFAAmF;QACnF,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;YACzB,OAAO,EAAE,GAAG,IAAI,CAAC,OAAO,MAAM;YAC9B,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;aACnC;YACD,OAAO,EAAE,KAAK;SACf,CAAC,CAAC;QAEH,+DAA+D;QAC/D,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;YACpD,+BAA+B;YAC/B,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAE9B,2BAA2B;YAC3B,MAAM,CAAC,OAAO,CAAC,aAAa,GAAG,UAAU,IAAI,CAAC,WAAW,EAAE,CAAC;YAE5D,2CAA2C;YAC3C,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;YAE7B,OAAO,MAAM,CAAC;QAChB,CAAC,CAAC,CAAC;QAEH,8CAA8C;QAC9C,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CACnC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,EACtB,KAAK,EAAE,KAAiB,EAAE,EAAE;YAC1B,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACjC,CAAC,CACF,CAAC;IACJ,CAAC;IAED;;;;;;;OAOG;IACK,KAAK,CAAC,gBAAgB;QAC5B,sDAAsD;QACtD,IAAI,IAAI,CAAC,mBAAmB,KAAK,IAAI,EAAE,CAAC;YACtC,MAAM,IAAI,CAAC,mBAAmB,CAAC;YAC/B,OAAO;QACT,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAEvB,wCAAwC;QACxC,IAAI,IAAI,CAAC,WAAW,IAAI,GAAG,GAAG,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC5E,OAAO;QACT,CAAC;QAED,0DAA0D;QAC1D,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE;YAC1D,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;QAClC,CAAC,CAAC,CAAC;QACH,MAAM,IAAI,CAAC,mBAAmB,CAAC;IACjC,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,YAAY;QACxB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;YACrC,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,oBAAoB,CAAC,CAAC;YAClD,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC1C,MAAM,CAAC,MAAM,CAAC,eAAe,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;YAClD,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YAE9B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CACzC,QAAQ,EACR,MAAM,EACN;gBACE,OAAO,EAAE;oBACP,cAAc,EAAE,mCAAmC;iBACpD;aACF,CACF,CAAC;YAEF,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC;YAC9C,4CAA4C;YAC5C,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;YAEnE,OAAO,CAAC,KAAK,CACX,mDAAmD,IAAI,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,WAAW,EAAE,EAAE,CACjG,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC9B,OAAO,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;gBAC/C,OAAO,CAAC,KAAK,CAAC,yBAAyB,KAAK,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;gBAC5D,OAAO,CAAC,KAAK,CAAC,sBAAsB,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;gBAC7D,OAAO,CAAC,KAAK,CAAC,oBAAoB,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;gBAC5D,sEAAsE;gBACtE,+EAA+E;gBAC/E,sFAAsF;gBACtF,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,gBAAgB,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC;gBAEjF,MAAM,OAAO,GAAI,KAAK,CAAC,QAAQ,EAAE,IAA4C,EAAE,iBAAiB;oBAC7F,KAAK,CAAC,QAAQ,EAAE,IAA4C,EAAE,KAAK;oBACpE,KAAK,CAAC,OAAO,CAAC;gBAChB,MAAM,eAAe,CAAC,kCAAkC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAC7E,CAAC;YACD,MAAM,eAAe,CAAC,+BAA+B,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;IAED;;;OAGG;IACK,KAAK,CAAC,eAAe;QAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,oBAAoB,GAAG,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC;QAExD,IAAI,oBAAoB,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;YACrD,MAAM,KAAK,GAAG,IAAI,CAAC,oBAAoB,GAAG,oBAAoB,CAAC;YAC/D,sFAAsF;YACtF,yDAAyD;YACzD,IAAI,CAAC,eAAe,GAAG,GAAG,GAAG,KAAK,CAAC;YACnC,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;QAC7D,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,eAAe,GAAG,GAAG,CAAC;QAC7B,CAAC;QAED,IAAI,CAAC,YAAY,EAAE,CAAC;IACtB,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,WAAW,CAAC,KAAiB;QACzC,sFAAsF;QACtF,IAAI,KAAK,YAAY,YAAY,EAAE,CAAC;YAClC,MAAM,KAAK,CAAC;QACd,CAAC;QAED,0CAA0C;QAC1C,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;YACpB,MAAM,kBAAkB,CAAC,KAAc,CAAC,CAAC;QAC3C,CAAC;QAED,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;QACrC,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;QACjC,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,EAAE,GAAG,IAAI,SAAS,CAAC;QAEhD,oCAAoC;QACpC,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;YACnB,6BAA6B;YAC7B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;YACxB,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;YAExB,2CAA2C;YAC3C,iFAAiF;YACjF,+EAA+E;YAC/E,mFAAmF;YACnF,oFAAoF;YACpF,2EAA2E;YAC3E,iFAAiF;YACjF,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,cAAc,CAAC,EAAE,CAAC;gBAC5D,IAAI,CAAC;oBACH,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;oBAC9B,KAAK,CAAC,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;oBAClD,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,GAAG,MAAM,CAAC;oBAC9C,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,GAAG,UAAU,IAAI,CAAC,WAAW,EAAE,CAAC;oBACrE,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAU,CAAC;gBACpD,CAAC;gBAAC,MAAM,CAAC;oBACP,6CAA6C;gBAC/C,CAAC;YACH,CAAC;QACH,CAAC;QAED,4BAA4B;QAC5B,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;YACnB,MAAM,gBAAgB,GAAG,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;YAC/D,MAAM,UAAU,GAAG,gBAAgB,CAAC,CAAC,CAAC,QAAQ,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAE1E,OAAO,CAAC,IAAI,CAAC,kCAAkC,UAAU,0BAA0B,CAAC,CAAC;YACrF,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC;YAEvE,oBAAoB;YACpB,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;gBACjB,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAU,CAAC;YACpD,CAAC;QACH,CAAC;QAED,iCAAiC;QACjC,MAAM,aAAa,GAAG,oBAAoB,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;QACnE,MAAM,aAAa,CAAC;IACtB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,GAAG,CACP,QAAgB,EAChB,MAAgC,EAChC,UAAU,GAAG,CAAC;QAEd,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAI,QAAQ,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;YAChE,OAAO,QAAQ,CAAC,IAAI,CAAC;QACvB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;gBACjE,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;gBACxD,OAAO,CAAC,IAAI,CACV,wCAAwC,KAAK,eAAe,UAAU,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,MAAM,CACpG,CAAC;gBACF,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;gBAC3D,OAAO,IAAI,CAAC,GAAG,CAAI,QAAQ,EAAE,MAAM,EAAE,UAAU,GAAG,CAAC,CAAC,CAAC;YACvD,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,SAAS,CACb,QAAgB,EAChB,MAAgC,EAChC,YAA2B;QAE3B,MAAM,EAAE,OAAO,GAAG,IAAI,EAAE,GAAG,GAAG,GAAG,CAAC,UAAU,EAAE,SAAS,GAAG,QAAQ,EAAE,GAAG,YAAY,IAAI,EAAE,CAAC;QAE1F,yBAAyB;QACzB,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,IAAI,CAAC,GAAG,CAAI,QAAQ,EAAE,MAAM,CAAC,CAAC;QACvC,CAAC;QAED,qBAAqB;QACrB,MAAM,QAAQ,GAAG,gBAAgB,CAAC,SAAS,EAAE,MAAM,IAAI,EAAE,CAAC,CAAC;QAE3D,oBAAoB;QACpB,MAAM,WAAW,GAAG,WAAW,CAAC,GAAG,CAAI,QAAQ,CAAC,CAAC;QACjD,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;YACzB,OAAO,WAAW,CAAC;QACrB,CAAC;QAED,4EAA4E;QAC5E,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC7C,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,QAAsB,CAAC;QAChC,CAAC;QAED,oEAAoE;QACpE,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAI,QAAQ,EAAE,MAAM,CAAC;aAC1C,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;YACf,WAAW,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;YACvC,OAAO,MAAM,CAAC;QAChB,CAAC,CAAC;aACD,OAAO,CAAC,GAAG,EAAE;YACZ,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;QAEL,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACrC,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACH,eAAe,CAAC,OAAe;QAC7B,OAAO,WAAW,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAChD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,IAAI,CAAI,QAAgB,EAAE,IAAa,EAAE,UAAU,GAAG,CAAC;QAC3D,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAI,QAAQ,EAAE,IAAI,CAAC,CAAC;YAC3D,OAAO,QAAQ,CAAC,IAAI,CAAC;QACvB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;gBACjE,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;gBACxD,OAAO,CAAC,IAAI,CACV,wCAAwC,KAAK,eAAe,UAAU,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,MAAM,CACpG,CAAC;gBACF,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;gBAC3D,OAAO,IAAI,CAAC,IAAI,CAAI,QAAQ,EAAE,IAAI,EAAE,UAAU,GAAG,CAAC,CAAC,CAAC;YACtD,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM,CAAI,QAAgB,EAAE,UAAU,GAAG,CAAC;QAC9C,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAI,QAAQ,CAAC,CAAC;YACvD,OAAO,QAAQ,CAAC,IAAI,CAAC;QACvB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;gBACjE,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;gBACxD,OAAO,CAAC,IAAI,CACV,wCAAwC,KAAK,eAAe,UAAU,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,MAAM,CACpG,CAAC;gBACF,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;gBAC3D,OAAO,IAAI,CAAC,MAAM,CAAI,QAAQ,EAAE,UAAU,GAAG,CAAC,CAAC,CAAC;YAClD,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACK,gBAAgB,CAAC,KAAc;QACrC,IAAI,KAAK,YAAY,YAAY,EAAE,CAAC;YAClC,wCAAwC;YACxC,OAAO,CACL,KAAK,CAAC,SAAS,KAAK,mBAAmB;gBACvC,KAAK,CAAC,SAAS,KAAK,aAAa;gBACjC,KAAK,CAAC,SAAS,KAAK,cAAc,CACnC,CAAC;QACJ,CAAC;QACD,IAAI,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9B,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC;YACtC,gEAAgE;YAChE,OAAO,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,MAAM,IAAI,GAAG,IAAI,MAAM,IAAI,GAAG,CAAC,CAAC;QACpF,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACH,QAAQ;QAKN,OAAO;YACL,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,eAAe,EAAE,IAAI,CAAC,eAAe;YACrC,cAAc,EAAE,IAAI,CAAC,cAAc;SACpC,CAAC;IACJ,CAAC;CACF"}
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"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"}
|
package/dist/api/errors.d.ts
CHANGED
|
@@ -11,7 +11,13 @@ export declare class HaloPSAError extends Error {
|
|
|
11
11
|
details?: ErrorDetails | undefined;
|
|
12
12
|
suggestion?: string | undefined;
|
|
13
13
|
httpStatus?: number | undefined;
|
|
14
|
-
|
|
14
|
+
/**
|
|
15
|
+
* Raw response body from the API, truncated to 2048 characters.
|
|
16
|
+
* Populated whenever an HTTP error response is received so callers
|
|
17
|
+
* always see Halo's actual error message rather than a generic status code.
|
|
18
|
+
*/
|
|
19
|
+
rawBody?: string;
|
|
20
|
+
constructor(errorType: ErrorType, message: string, details?: ErrorDetails | undefined, suggestion?: string | undefined, httpStatus?: number | undefined, rawBody?: string);
|
|
15
21
|
/**
|
|
16
22
|
* Convert error to JSON format for MCP response
|
|
17
23
|
*/
|
|
@@ -54,7 +60,14 @@ export declare function createServerError(statusCode: number, message?: string):
|
|
|
54
60
|
*/
|
|
55
61
|
export declare function createNetworkError(originalError: Error): HaloPSAError;
|
|
56
62
|
/**
|
|
57
|
-
* Parse HaloPSA API error response and create appropriate error
|
|
63
|
+
* Parse HaloPSA API error response and create appropriate error.
|
|
64
|
+
*
|
|
65
|
+
* The `responseData` parameter accepts the full response body so that Halo's
|
|
66
|
+
* human-readable error messages are always surfaced in the thrown error.
|
|
67
|
+
*
|
|
68
|
+
* Parameter order: (responseData, statusCode, endpoint).
|
|
69
|
+
* This is a BREAKING change from the original (statusCode, responseData, endpoint)
|
|
70
|
+
* — only client.ts calls this function, and that call-site is updated accordingly.
|
|
58
71
|
*/
|
|
59
|
-
export declare function parseHaloPSAApiError(
|
|
72
|
+
export declare function parseHaloPSAApiError(responseData: unknown, statusCode: number, endpoint: string): HaloPSAError;
|
|
60
73
|
//# sourceMappingURL=errors.d.ts.map
|
package/dist/api/errors.d.ts.map
CHANGED
|
@@ -1 +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;
|
|
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;IAS5B,SAAS,EAAE,SAAS;IAEpB,OAAO,CAAC,EAAE,YAAY;IACtB,UAAU,CAAC,EAAE,MAAM;IACnB,UAAU,CAAC,EAAE,MAAM;IAZ5B;;;;OAIG;IACI,OAAO,CAAC,EAAE,MAAM,CAAC;gBAGf,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,EAC1B,OAAO,CAAC,EAAE,MAAM;IASlB;;OAEG;IACH,MAAM,IAAI,MAAM;IAYhB;;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,CAUvF;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;AAqCD;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAClC,YAAY,EAAE,OAAO,EACrB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,GACf,YAAY,CAiJd"}
|
package/dist/api/errors.js
CHANGED
|
@@ -7,13 +7,22 @@ export class HaloPSAError extends Error {
|
|
|
7
7
|
details;
|
|
8
8
|
suggestion;
|
|
9
9
|
httpStatus;
|
|
10
|
-
|
|
10
|
+
/**
|
|
11
|
+
* Raw response body from the API, truncated to 2048 characters.
|
|
12
|
+
* Populated whenever an HTTP error response is received so callers
|
|
13
|
+
* always see Halo's actual error message rather than a generic status code.
|
|
14
|
+
*/
|
|
15
|
+
rawBody;
|
|
16
|
+
constructor(errorType, message, details, suggestion, httpStatus, rawBody) {
|
|
11
17
|
super(message);
|
|
12
18
|
this.errorType = errorType;
|
|
13
19
|
this.details = details;
|
|
14
20
|
this.suggestion = suggestion;
|
|
15
21
|
this.httpStatus = httpStatus;
|
|
16
22
|
this.name = 'HaloPSAError';
|
|
23
|
+
if (rawBody !== undefined) {
|
|
24
|
+
this.rawBody = rawBody;
|
|
25
|
+
}
|
|
17
26
|
}
|
|
18
27
|
/**
|
|
19
28
|
* Convert error to JSON format for MCP response
|
|
@@ -26,6 +35,7 @@ export class HaloPSAError extends Error {
|
|
|
26
35
|
...(this.details && { details: this.details }),
|
|
27
36
|
...(this.suggestion && { suggestion: this.suggestion }),
|
|
28
37
|
...(this.httpStatus && { http_status: this.httpStatus }),
|
|
38
|
+
...(this.rawBody !== undefined && { raw_body: this.rawBody }),
|
|
29
39
|
};
|
|
30
40
|
}
|
|
31
41
|
/**
|
|
@@ -61,8 +71,7 @@ export function createNotFoundError(resourceType, resourceId, endpoint) {
|
|
|
61
71
|
export function createAuthError(message = 'Authentication failed') {
|
|
62
72
|
return new HaloPSAError('AuthError', message, {
|
|
63
73
|
auth_method: 'OAuth2 Client Credentials',
|
|
64
|
-
}, 'Verify your HALOPSA_CLIENT_ID and HALOPSA_CLIENT_SECRET environment variables are correct.
|
|
65
|
-
'Verify your HALOPSA_CLIENT_ID and HALOPSA_CLIENT_SECRET environment variables.', 401);
|
|
74
|
+
}, 'Verify your HALOPSA_CLIENT_ID and HALOPSA_CLIENT_SECRET environment variables are correct.', 401);
|
|
66
75
|
}
|
|
67
76
|
/**
|
|
68
77
|
* Create token expired error
|
|
@@ -130,59 +139,127 @@ function isHaloPSAErrorResponse(data) {
|
|
|
130
139
|
typeof data.error === 'string');
|
|
131
140
|
}
|
|
132
141
|
/**
|
|
133
|
-
*
|
|
142
|
+
* Serialize an arbitrary response body to a string, truncated to 2048 chars.
|
|
143
|
+
* Handles JSON objects/arrays, plain strings, and undefined/null gracefully.
|
|
144
|
+
*/
|
|
145
|
+
function serializeRawBody(responseData) {
|
|
146
|
+
if (responseData === undefined || responseData === null) {
|
|
147
|
+
return undefined;
|
|
148
|
+
}
|
|
149
|
+
let raw;
|
|
150
|
+
if (typeof responseData === 'string') {
|
|
151
|
+
raw = responseData;
|
|
152
|
+
}
|
|
153
|
+
else {
|
|
154
|
+
try {
|
|
155
|
+
raw = JSON.stringify(responseData);
|
|
156
|
+
}
|
|
157
|
+
catch {
|
|
158
|
+
raw = String(responseData);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
return raw.length > 2048 ? `${raw.slice(0, 2048)}...[truncated]` : raw;
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Parse HaloPSA API error response and create appropriate error.
|
|
165
|
+
*
|
|
166
|
+
* The `responseData` parameter accepts the full response body so that Halo's
|
|
167
|
+
* human-readable error messages are always surfaced in the thrown error.
|
|
168
|
+
*
|
|
169
|
+
* Parameter order: (responseData, statusCode, endpoint).
|
|
170
|
+
* This is a BREAKING change from the original (statusCode, responseData, endpoint)
|
|
171
|
+
* — only client.ts calls this function, and that call-site is updated accordingly.
|
|
134
172
|
*/
|
|
135
|
-
export function parseHaloPSAApiError(
|
|
136
|
-
|
|
137
|
-
//
|
|
173
|
+
export function parseHaloPSAApiError(responseData, statusCode, endpoint) {
|
|
174
|
+
const rawBody = serializeRawBody(responseData);
|
|
175
|
+
// Extract details array if present (e.g. validation field errors from Halo)
|
|
176
|
+
const detailsArray = typeof responseData === 'object' &&
|
|
177
|
+
responseData !== null &&
|
|
178
|
+
'details' in responseData &&
|
|
179
|
+
Array.isArray(responseData.details)
|
|
180
|
+
? responseData.details
|
|
181
|
+
: undefined;
|
|
138
182
|
if (isHaloPSAErrorResponse(responseData)) {
|
|
139
183
|
const errorCode = responseData.error;
|
|
140
|
-
const errorDescription = responseData.error_description
|
|
141
|
-
//
|
|
184
|
+
const errorDescription = responseData.error_description ?? errorCode;
|
|
185
|
+
// Build a human-readable message that includes raw body context so the
|
|
186
|
+
// caller sees the actual error without having to inspect rawBody separately.
|
|
187
|
+
const detailsSuffix = detailsArray && detailsArray.length > 0
|
|
188
|
+
? ` | details: ${JSON.stringify(detailsArray)}`
|
|
189
|
+
: '';
|
|
190
|
+
const bodyExcerpt = rawBody ? ` | body: ${rawBody.slice(0, 512)}` : '';
|
|
142
191
|
switch (statusCode) {
|
|
143
192
|
case 401:
|
|
144
193
|
case 403:
|
|
145
194
|
if (errorCode === 'invalid_grant' || errorCode === 'invalid_token') {
|
|
146
|
-
|
|
195
|
+
const e = createTokenExpiredError();
|
|
196
|
+
e.rawBody = rawBody;
|
|
197
|
+
return e;
|
|
147
198
|
}
|
|
148
|
-
return
|
|
149
|
-
|
|
150
|
-
|
|
199
|
+
return new HaloPSAError('AuthError', `${errorCode}: ${errorDescription}${detailsSuffix}${bodyExcerpt}`, {
|
|
200
|
+
auth_method: 'OAuth2 Client Credentials',
|
|
201
|
+
endpoint,
|
|
202
|
+
error_code: errorCode,
|
|
203
|
+
...(detailsArray && { details: detailsArray }),
|
|
204
|
+
}, 'Verify your HALOPSA_CLIENT_ID and HALOPSA_CLIENT_SECRET environment variables are correct.', statusCode, rawBody);
|
|
205
|
+
case 404: {
|
|
151
206
|
const resourceMatch = endpoint.match(/\/api\/(\w+)\/([^/]+)$/);
|
|
152
207
|
const resourceType = resourceMatch ? resourceMatch[1] : 'Resource';
|
|
153
208
|
const resourceId = resourceMatch ? resourceMatch[2] : 'unknown';
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
return
|
|
209
|
+
const e = createNotFoundError(resourceType, resourceId, endpoint);
|
|
210
|
+
e.rawBody = rawBody;
|
|
211
|
+
return e;
|
|
212
|
+
}
|
|
213
|
+
case 429: {
|
|
214
|
+
const e = createRateLimitError();
|
|
215
|
+
e.rawBody = rawBody;
|
|
216
|
+
return e;
|
|
217
|
+
}
|
|
157
218
|
case 422:
|
|
158
|
-
return new HaloPSAError('ValidationError', `${errorCode}: ${errorDescription}`, {
|
|
219
|
+
return new HaloPSAError('ValidationError', `${errorCode}: ${errorDescription}${detailsSuffix}${bodyExcerpt}`, {
|
|
159
220
|
endpoint,
|
|
160
221
|
error_code: errorCode,
|
|
161
|
-
|
|
222
|
+
...(detailsArray && { details: detailsArray }),
|
|
223
|
+
}, 'Check your request parameters. The API rejected the request due to validation errors.', statusCode, rawBody);
|
|
162
224
|
default:
|
|
163
225
|
if (statusCode >= 500) {
|
|
164
|
-
return
|
|
226
|
+
return new HaloPSAError('ServerError', `${errorCode}: ${errorDescription}${detailsSuffix}${bodyExcerpt}`, {
|
|
227
|
+
status_code: statusCode,
|
|
228
|
+
endpoint,
|
|
229
|
+
...(detailsArray && { details: detailsArray }),
|
|
230
|
+
}, 'This is a temporary server issue. Try again in a few moments. If the problem persists, check HaloPSA status.', statusCode, rawBody);
|
|
165
231
|
}
|
|
166
|
-
return new HaloPSAError('ServerError', `${errorCode}: ${errorDescription}`, {
|
|
232
|
+
return new HaloPSAError('ServerError', `${errorCode}: ${errorDescription}${detailsSuffix}${bodyExcerpt}`, {
|
|
167
233
|
endpoint,
|
|
168
234
|
status_code: statusCode,
|
|
169
|
-
|
|
235
|
+
...(detailsArray && { details: detailsArray }),
|
|
236
|
+
}, undefined, statusCode, rawBody);
|
|
170
237
|
}
|
|
171
238
|
}
|
|
172
|
-
// Fallback for non-standard error responses
|
|
239
|
+
// Fallback for non-standard / non-JSON error responses (HTML pages, plain text, undefined)
|
|
240
|
+
const bodyMessage = rawBody ? ` | body: ${rawBody.slice(0, 512)}` : '';
|
|
173
241
|
switch (statusCode) {
|
|
174
242
|
case 401:
|
|
175
|
-
case 403:
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
return
|
|
179
|
-
|
|
180
|
-
|
|
243
|
+
case 403: {
|
|
244
|
+
const e = createAuthError();
|
|
245
|
+
e.rawBody = rawBody;
|
|
246
|
+
return e;
|
|
247
|
+
}
|
|
248
|
+
case 404: {
|
|
249
|
+
const e = createNotFoundError('Resource', 'unknown', endpoint);
|
|
250
|
+
e.rawBody = rawBody;
|
|
251
|
+
return e;
|
|
252
|
+
}
|
|
253
|
+
case 429: {
|
|
254
|
+
const e = createRateLimitError();
|
|
255
|
+
e.rawBody = rawBody;
|
|
256
|
+
return e;
|
|
257
|
+
}
|
|
181
258
|
default:
|
|
182
259
|
if (statusCode >= 500) {
|
|
183
|
-
return
|
|
260
|
+
return new HaloPSAError('ServerError', `HTTP ${statusCode} error${bodyMessage}`, { endpoint, status_code: statusCode }, 'This is a temporary server issue. Try again in a few moments. If the problem persists, check HaloPSA status.', statusCode, rawBody);
|
|
184
261
|
}
|
|
185
|
-
return new HaloPSAError('ServerError', `HTTP ${statusCode} error`, { endpoint, status_code: statusCode }, undefined, statusCode);
|
|
262
|
+
return new HaloPSAError('ServerError', `HTTP ${statusCode} error${bodyMessage}`, { endpoint, status_code: statusCode }, undefined, statusCode, rawBody);
|
|
186
263
|
}
|
|
187
264
|
}
|
|
188
265
|
//# sourceMappingURL=errors.js.map
|
package/dist/api/errors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/api/errors.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAgBH,MAAM,OAAO,YAAa,SAAQ,KAAK;
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/api/errors.ts"],"names":[],"mappings":"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"}
|