every-plugin
Version:
144 lines (142 loc) • 3.48 kB
JavaScript
import { z } from "./zod.mjs";
import { ModuleFederationError, PluginRuntimeError, ValidationError, extractFromFiberFailure, formatORPCError, isRetryableORPCCode, toPluginRuntimeError, wrapORPCError } from "./runtime/errors.mjs";
//#region src/errors.ts
/**
* Error pattern constants for categorizing infrastructure errors
*/
const ERROR_PATTERNS = {
CONNECTION_REFUSED: ["ECONNREFUSED"],
HOST_NOT_FOUND: ["ENOTFOUND", "EHOSTUNREACH"],
TIMEOUT: [
"ETIMEDOUT",
"ESOCKETTIMEDOUT",
"timeout"
],
CONNECTION_RESET: ["ECONNRESET", "EPIPE"],
PERMISSION: [
"EACCES",
"EPERM",
"permission denied"
],
AUTH: [
"401",
"unauthorized",
"authentication failed"
],
RATE_LIMITED: [
"429",
"too many requests",
"rate limit"
],
SERVICE_UNAVAILABLE: ["503", "service unavailable"]
};
/**
* Common error schemas for plugin contracts.
* Import individually or use the grouped PluginErrors export.
*
* @example
* ```typescript
* import { NOT_FOUND, FORBIDDEN, UNAUTHORIZED } from "every-plugin/errors";
*
* export const contract = oc.router({
* getData: oc.route(...)
* .errors({ NOT_FOUND, FORBIDDEN, UNAUTHORIZED })
* });
* ```
*/
const UNAUTHORIZED = {
status: 401,
data: z.object({
apiKeyProvided: z.boolean(),
provider: z.string().optional(),
authType: z.enum([
"apiKey",
"oauth",
"token"
]).optional()
})
};
const RATE_LIMITED = {
status: 429,
data: z.object({
retryAfter: z.number().int().min(1),
remainingRequests: z.number().int().min(0).optional(),
resetTime: z.string().datetime().optional(),
limitType: z.enum([
"requests",
"tokens",
"bandwidth"
]).optional()
})
};
const SERVICE_UNAVAILABLE = {
status: 503,
data: z.object({
retryAfter: z.number().int().optional(),
maintenanceWindow: z.boolean().default(false),
estimatedUptime: z.string().datetime().optional()
})
};
const BAD_REQUEST = {
status: 400,
data: z.object({
invalidFields: z.array(z.string()).optional(),
validationErrors: z.array(z.object({
field: z.string(),
message: z.string(),
code: z.string().optional()
})).optional()
})
};
const NOT_FOUND = {
status: 404,
data: z.object({
resource: z.string().optional(),
resourceId: z.string().optional()
})
};
const FORBIDDEN = {
status: 403,
data: z.object({
requiredPermissions: z.array(z.string()).optional(),
action: z.string().optional()
})
};
const TIMEOUT = {
status: 504,
data: z.object({
timeoutMs: z.number().int().min(0).optional(),
operation: z.string().optional(),
retryable: z.boolean().default(true)
})
};
const CONNECTION_ERROR = {
status: 502,
data: z.object({
errorCode: z.string().optional(),
host: z.string().optional(),
port: z.number().int().optional(),
suggestion: z.string().optional()
})
};
/**
* Grouped export for all plugin errors.
* Use individual imports for cleaner code.
*/
const PluginErrors = {
UNAUTHORIZED,
RATE_LIMITED,
SERVICE_UNAVAILABLE,
BAD_REQUEST,
NOT_FOUND,
FORBIDDEN,
TIMEOUT,
CONNECTION_ERROR
};
/**
* @deprecated Use individual imports or PluginErrors instead
*/
const CommonPluginErrors = PluginErrors;
//#endregion
export { BAD_REQUEST, CONNECTION_ERROR, CommonPluginErrors, ERROR_PATTERNS, FORBIDDEN, ModuleFederationError, NOT_FOUND, PluginErrors, PluginRuntimeError, RATE_LIMITED, SERVICE_UNAVAILABLE, TIMEOUT, UNAUTHORIZED, ValidationError, extractFromFiberFailure, formatORPCError, isRetryableORPCCode, toPluginRuntimeError, wrapORPCError };
//# sourceMappingURL=errors.mjs.map