Files
bodyshop/server/rr/rr-error.js

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
};