fix(atlassian): tighten health checks and review coverage
This commit is contained in:
@@ -24,12 +24,33 @@ export async function parseResponse(response: Response) {
|
||||
const contentType = response.headers.get("content-type") ?? "";
|
||||
|
||||
if (contentType.includes("application/json")) {
|
||||
return response.json();
|
||||
try {
|
||||
return await response.json();
|
||||
} catch {
|
||||
throw new Error("Malformed JSON response from Atlassian API");
|
||||
}
|
||||
}
|
||||
|
||||
return response.text();
|
||||
}
|
||||
|
||||
export function createStatusError(errorPrefix: string, response: Response) {
|
||||
const base = `${errorPrefix}: ${response.status} ${response.statusText}`;
|
||||
|
||||
switch (response.status) {
|
||||
case 401:
|
||||
return new Error(`${base} - check ATLASSIAN_EMAIL and ATLASSIAN_API_TOKEN`);
|
||||
case 403:
|
||||
return new Error(`${base} - verify product permissions for this account`);
|
||||
case 404:
|
||||
return new Error(`${base} - verify the resource identifier or API path`);
|
||||
case 429:
|
||||
return new Error(`${base} - retry later or reduce request rate`);
|
||||
default:
|
||||
return new Error(base);
|
||||
}
|
||||
}
|
||||
|
||||
export async function sendJsonRequest(options: {
|
||||
config: AtlassianConfig;
|
||||
fetchImpl?: FetchLike;
|
||||
@@ -58,7 +79,7 @@ export async function sendJsonRequest(options: {
|
||||
throw customError;
|
||||
}
|
||||
|
||||
throw new Error(`${options.errorPrefix}: ${response.status} ${response.statusText}`);
|
||||
throw createStatusError(options.errorPrefix, response);
|
||||
}
|
||||
|
||||
return parseResponse(response);
|
||||
|
||||
Reference in New Issue
Block a user