/** * @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 };