UNPKG

@odel/module-sdk

Version:

SDK for building Odel modules - MCP protocol over HTTP for Cloudflare Workers

96 lines 3.38 kB
/** * Standardized error handling for Odel modules */ /** * Error codes for module operations */ export var ErrorCode; (function (ErrorCode) { // Validation errors (1xxx) ErrorCode[ErrorCode["INVALID_INPUT"] = 1001] = "INVALID_INPUT"; ErrorCode[ErrorCode["MISSING_REQUIRED_FIELD"] = 1002] = "MISSING_REQUIRED_FIELD"; ErrorCode[ErrorCode["INVALID_FORMAT"] = 1003] = "INVALID_FORMAT"; // Authentication/secrets (2xxx) ErrorCode[ErrorCode["MISSING_SECRET"] = 2001] = "MISSING_SECRET"; ErrorCode[ErrorCode["INVALID_SECRET"] = 2002] = "INVALID_SECRET"; ErrorCode[ErrorCode["UNAUTHORIZED"] = 2003] = "UNAUTHORIZED"; // External API errors (3xxx) ErrorCode[ErrorCode["API_ERROR"] = 3001] = "API_ERROR"; ErrorCode[ErrorCode["NETWORK_ERROR"] = 3002] = "NETWORK_ERROR"; ErrorCode[ErrorCode["TIMEOUT"] = 3003] = "TIMEOUT"; ErrorCode[ErrorCode["NOT_FOUND"] = 3004] = "NOT_FOUND"; // Rate limiting (4xxx) ErrorCode[ErrorCode["RATE_LIMIT_EXCEEDED"] = 4001] = "RATE_LIMIT_EXCEEDED"; ErrorCode[ErrorCode["QUOTA_EXCEEDED"] = 4002] = "QUOTA_EXCEEDED"; // Internal errors (5xxx) ErrorCode[ErrorCode["INTERNAL_ERROR"] = 5001] = "INTERNAL_ERROR"; ErrorCode[ErrorCode["NOT_IMPLEMENTED"] = 5002] = "NOT_IMPLEMENTED"; ErrorCode[ErrorCode["CONFIGURATION_ERROR"] = 5003] = "CONFIGURATION_ERROR"; })(ErrorCode || (ErrorCode = {})); /** * Standardized module error class * * @example * ```typescript * throw new ModuleError( * ErrorCode.MISSING_SECRET, * 'RESEND_API_KEY secret is required', * { secretName: 'RESEND_API_KEY' } * ); * ``` */ export class ModuleError extends Error { /** * Create a new module error * @param code - Error code from ErrorCode enum * @param message - Human-readable error message * @param metadata - Optional additional error context */ constructor(code, message, metadata) { super(message); this.code = code; this.metadata = metadata; this.name = 'ModuleError'; // Maintains proper stack trace for where error was thrown (only available on V8) if (typeof Error.captureStackTrace === 'function') { Error.captureStackTrace(this, ModuleError); } } /** * Convert error to JSON response format * @returns Success/error response object */ toJSON() { return { success: false, error: this.message, code: this.code, ...(this.metadata && { metadata: this.metadata }) }; } /** * Create a validation error */ static validationError(message, metadata) { return new ModuleError(ErrorCode.INVALID_INPUT, message, metadata); } /** * Create a missing secret error */ static missingSecret(secretName) { return new ModuleError(ErrorCode.MISSING_SECRET, `Required secret "${secretName}" is not configured`, { secretName }); } /** * Create an API error */ static apiError(message, metadata) { return new ModuleError(ErrorCode.API_ERROR, message, metadata); } /** * Create a rate limit error */ static rateLimitError(retryAfter) { return new ModuleError(ErrorCode.RATE_LIMIT_EXCEEDED, 'Rate limit exceeded', retryAfter ? { retryAfter } : undefined); } } //# sourceMappingURL=errors.js.map