@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.
Files changed (51) hide show
  1. package/README.md +8 -1
  2. package/dist/api/client.d.ts +51 -2
  3. package/dist/api/client.d.ts.map +1 -1
  4. package/dist/api/client.js +124 -9
  5. package/dist/api/client.js.map +1 -1
  6. package/dist/api/errors.d.ts +16 -3
  7. package/dist/api/errors.d.ts.map +1 -1
  8. package/dist/api/errors.js +107 -30
  9. package/dist/api/errors.js.map +1 -1
  10. package/dist/cache/memory-cache.d.ts +1 -0
  11. package/dist/cache/memory-cache.d.ts.map +1 -1
  12. package/dist/cache/memory-cache.js +6 -0
  13. package/dist/cache/memory-cache.js.map +1 -1
  14. package/dist/cache/prewarm.d.ts +1 -0
  15. package/dist/cache/prewarm.d.ts.map +1 -1
  16. package/dist/cache/prewarm.js +8 -0
  17. package/dist/cache/prewarm.js.map +1 -1
  18. package/dist/index.d.ts +1 -1
  19. package/dist/index.js +12 -4
  20. package/dist/index.js.map +1 -1
  21. package/dist/tools/batch-operations.js +10 -10
  22. package/dist/tools/batch-operations.js.map +1 -1
  23. package/dist/tools/budgets.d.ts.map +1 -1
  24. package/dist/tools/budgets.js +7 -4
  25. package/dist/tools/budgets.js.map +1 -1
  26. package/dist/tools/milestones.d.ts.map +1 -1
  27. package/dist/tools/milestones.js +12 -9
  28. package/dist/tools/milestones.js.map +1 -1
  29. package/dist/tools/registrations.d.ts +8 -3
  30. package/dist/tools/registrations.d.ts.map +1 -1
  31. package/dist/tools/registrations.js +21 -12
  32. package/dist/tools/registrations.js.map +1 -1
  33. package/dist/tools/ticket-actions.d.ts +46 -0
  34. package/dist/tools/ticket-actions.d.ts.map +1 -1
  35. package/dist/tools/ticket-actions.js +236 -32
  36. package/dist/tools/ticket-actions.js.map +1 -1
  37. package/dist/tools/ticket-reference-data.d.ts +70 -1
  38. package/dist/tools/ticket-reference-data.d.ts.map +1 -1
  39. package/dist/tools/ticket-reference-data.js +340 -11
  40. package/dist/tools/ticket-reference-data.js.map +1 -1
  41. package/dist/tools/tickets.d.ts +53 -0
  42. package/dist/tools/tickets.d.ts.map +1 -1
  43. package/dist/tools/tickets.js +394 -22
  44. package/dist/tools/tickets.js.map +1 -1
  45. package/dist/types/tickets.d.ts +127 -0
  46. package/dist/types/tickets.d.ts.map +1 -1
  47. package/dist/utils/formatter.d.ts +18 -0
  48. package/dist/utils/formatter.d.ts.map +1 -1
  49. package/dist/utils/formatter.js +108 -22
  50. package/dist/utils/formatter.js.map +1 -1
  51. 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
- - **66 tools** for managing HaloPSA assets, users, sites, clients, tickets, actions, agents, workflows, milestones, budgets, ticket links, and bulk updates
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.
@@ -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
  */
@@ -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;IA+CvC;;;;;;;OAOG;YACW,gBAAgB;IAqB9B;;OAEG;YACW,YAAY;IA6C1B;;;OAGG;YACW,eAAe;IAiB7B;;OAEG;YACW,WAAW;IA4DzB;;OAEG;IACG,GAAG,CAAC,CAAC,EACT,QAAQ,EAAE,MAAM,EAChB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,UAAU,SAAI,GACb,OAAO,CAAC,CAAC,CAAC;IAiBb;;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;;OAEG;IACG,IAAI,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,SAAI,GAAG,OAAO,CAAC,CAAC,CAAC;IAiB1E;;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"}
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"}
@@ -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
- this.client.interceptors.response.use((response) => response, async (error) => {
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 || 'unknown';
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, throw original error
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
- const enhancedError = parseHaloPSAApiError(status, data, endpoint);
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 response = await this.client.post(endpoint, data);
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
  */
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"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"}
@@ -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
- constructor(errorType: ErrorType, message: string, details?: ErrorDetails | undefined, suggestion?: string | undefined, httpStatus?: number | undefined);
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(statusCode: number, responseData: unknown, endpoint: string): HaloPSAError;
72
+ export declare function parseHaloPSAApiError(responseData: unknown, statusCode: number, endpoint: string): HaloPSAError;
60
73
  //# sourceMappingURL=errors.d.ts.map
@@ -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;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"}
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"}
@@ -7,13 +7,22 @@ export class HaloPSAError extends Error {
7
7
  details;
8
8
  suggestion;
9
9
  httpStatus;
10
- constructor(errorType, message, details, suggestion, httpStatus) {
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
- * Parse HaloPSA API error response and create appropriate error
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(statusCode, responseData, endpoint) {
136
- // HaloPSA returns errors in this format:
137
- // { error: 'error_code', error_description: 'Error description' }
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 || errorCode;
141
- // Determine error type from status code
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
- return createTokenExpiredError();
195
+ const e = createTokenExpiredError();
196
+ e.rawBody = rawBody;
197
+ return e;
147
198
  }
148
- return createAuthError(`${errorCode}: ${errorDescription}`);
149
- case 404:
150
- // Try to extract resource info from endpoint
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
- return createNotFoundError(resourceType, resourceId, endpoint);
155
- case 429:
156
- return createRateLimitError();
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
- }, 'Check your request parameters. The API rejected the request due to validation errors.', statusCode);
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 createServerError(statusCode, `${errorCode}: ${errorDescription}`);
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
- }, undefined, statusCode);
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
- return createAuthError();
177
- case 404:
178
- return createNotFoundError('Resource', 'unknown', endpoint);
179
- case 429:
180
- return createRateLimitError();
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 createServerError(statusCode);
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
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/api/errors.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/api/errors.ts"],"names":[],"mappings":"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"}