mirror of
https://github.com/TryGhost/Ghost.git
synced 2025-03-18 02:21:47 -05:00
33 lines
1.1 KiB
JavaScript
33 lines
1.1 KiB
JavaScript
|
export class HumanReadableError extends Error {
|
||
|
/**
|
||
|
* Returns whether this response from the server is a human readable error and should be shown to the user.
|
||
|
* @param {Response} res
|
||
|
* @returns {HumanReadableError|undefined}
|
||
|
*/
|
||
|
static async fromApiResponse(res) {
|
||
|
// Bad request + Too many requests
|
||
|
if (res.status === 400 || res.status === 429) {
|
||
|
try {
|
||
|
const json = await res.json();
|
||
|
if (json.errors && Array.isArray(json.errors) && json.errors.length > 0 && json.errors[0].message) {
|
||
|
return new HumanReadableError(json.errors[0].message);
|
||
|
}
|
||
|
} catch (e) {
|
||
|
// Failed to decode: ignore
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Only output the message of an error if it is a human readable error and should be exposed to the user.
|
||
|
* Otherwise it returns a default generic message.
|
||
|
*/
|
||
|
static getMessageFromError(error, defaultMessage) {
|
||
|
if (error instanceof HumanReadableError) {
|
||
|
return error.message;
|
||
|
}
|
||
|
return defaultMessage;
|
||
|
}
|
||
|
}
|