UNPKG

@kitiumai/error

Version:

Enterprise-grade error primitives for Kitium products: rich metadata, HTTP/Problem Details mapping, observability, and registry-driven error governance.

1 lines 2.97 kB
{"version":3,"sources":["../src/types.ts"],"sourcesContent":["export type ErrorSeverity = 'fatal' | 'error' | 'warning' | 'info' | 'debug';\n\nexport type ErrorKind =\n | 'business'\n | 'validation'\n | 'auth'\n | 'rate_limit'\n | 'not_found'\n | 'conflict'\n | 'dependency'\n | 'internal'\n | (string & {});\n\nexport type ErrorLifecycle = 'draft' | 'active' | 'deprecated';\n\nexport type RetryBackoff = 'linear' | 'exponential' | 'fixed';\n\nexport interface RetryInfo {\n readonly retryable: boolean;\n readonly retryDelay?: number;\n readonly maxRetries?: number;\n readonly backoff?: RetryBackoff;\n}\n\nexport interface ErrorContext {\n readonly correlationId?: string;\n readonly requestId?: string;\n readonly spanId?: string;\n readonly tenantId?: string;\n readonly userId?: string;\n readonly [key: string]: unknown;\n}\n\nexport interface ErrorShape {\n readonly code: string;\n readonly message: string;\n readonly statusCode?: number;\n readonly severity: ErrorSeverity;\n readonly kind: ErrorKind;\n readonly lifecycle?: ErrorLifecycle;\n readonly schemaVersion?: string;\n readonly retryable: boolean;\n readonly retryDelay?: number;\n readonly maxRetries?: number;\n readonly backoff?: RetryBackoff;\n readonly help?: string;\n readonly docs?: string;\n readonly source?: string;\n readonly userMessage?: string;\n readonly i18nKey?: string;\n readonly redact?: string[];\n readonly context?: ErrorContext;\n readonly cause?: unknown;\n}\n\nexport interface ProblemDetails {\n readonly type?: string;\n readonly title: string;\n readonly status?: number;\n readonly detail?: string;\n readonly instance?: string;\n readonly extensions?: Record<string, unknown>;\n}\n\nexport interface ErrorRegistryEntry extends ErrorShape {\n readonly fingerprint?: string;\n readonly toProblem?: (error: ErrorShape) => ProblemDetails;\n}\n\nexport interface ErrorRegistry {\n register(entry: ErrorRegistryEntry): void;\n resolve(code: string): ErrorRegistryEntry | undefined;\n toProblemDetails(error: ErrorShape): ProblemDetails;\n}\n\nexport interface ErrorMetrics {\n readonly totalErrors: number;\n readonly errorsByKind: Record<ErrorKind, number>;\n readonly errorsBySeverity: Record<ErrorSeverity, number>;\n readonly retryableErrors: number;\n readonly nonRetryableErrors: number;\n}\n\nexport interface RetryOutcome<T> {\n readonly attempts: number;\n readonly result?: T;\n readonly error?: unknown;\n readonly lastDelayMs?: number;\n}\n\nexport interface RetryOptions {\n readonly maxAttempts?: number;\n readonly baseDelayMs?: number;\n readonly backoff?: RetryBackoff;\n readonly onAttempt?: (attempt: number, error: ErrorShape) => void;\n}\n\nexport interface TraceSpanLike {\n setAttribute(key: string, value: unknown): void;\n recordException(exception: unknown): void;\n setStatus(status: { code: number; message?: string }): void;\n}\n"],"mappings":";;;;;;;;;;;;;;;;AAAA;AAAA;","names":[]}