49 lines
1.3 KiB
JavaScript
49 lines
1.3 KiB
JavaScript
/**
|
|
* @file rr-error.js
|
|
* @description Custom error types for the Reynolds & Reynolds (Rome) integration.
|
|
*/
|
|
|
|
/**
|
|
* Base RR API Error class — always structured with a message and a code.
|
|
*/
|
|
class RrApiError extends Error {
|
|
/**
|
|
* @param {string} message - Human-readable message
|
|
* @param {string} [code="RR_ERROR"] - Short machine-readable error code
|
|
* @param {Object} [details] - Optional structured metadata
|
|
*/
|
|
constructor(message, code = "RR_ERROR", details = {}) {
|
|
super(message);
|
|
this.name = "RrApiError";
|
|
this.code = code;
|
|
this.details = details;
|
|
}
|
|
|
|
toJSON() {
|
|
return {
|
|
name: this.name,
|
|
code: this.code,
|
|
message: this.message,
|
|
details: this.details
|
|
};
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Helper to normalize thrown errors into a consistent RrApiError instance.
|
|
*/
|
|
function toRrError(err, defaultCode = "RR_ERROR") {
|
|
if (!err) return new RrApiError("Unknown RR error", defaultCode);
|
|
if (err instanceof RrApiError) return err;
|
|
if (typeof err === "string") return new RrApiError(err, defaultCode);
|
|
const msg = err.message || "Unspecified RR error";
|
|
const code = err.code || defaultCode;
|
|
const details = err.details || {};
|
|
return new RrApiError(msg, code, details);
|
|
}
|
|
|
|
module.exports = {
|
|
RrApiError,
|
|
toRrError
|
|
};
|