/** * Taksonomia błędów — cztery klasy, każda z inną polityką UX/retry/log. * Patrz: ARCHITECTURE.md §4.4. * * Widget NIGDY nie robi własnego try/catch z custom UX — tylko rzuca * typowany EchelonError. Runtime konsumuje `errorPolicy` z configu i decyduje * jak pokazać błąd. */ import type { Observable } from 'rxjs'; import type { CorrelationId, WidgetId, DatasourceId } from '../identity/index.js'; export type ErrorClass = 'user' | 'business' | 'infra' | 'bug'; export interface ErrorContext { readonly widget?: WidgetId; readonly binding?: string; readonly datasource?: DatasourceId; readonly action?: string; } export interface RetryState { readonly policy: 'none' | 'once' | 'linear' | 'exponential'; readonly attemptsLeft: number; readonly nextAttemptAt?: number; } export interface EchelonError { readonly class: ErrorClass; /** Stabilny kod typu `compliance.kyc.expired` — używany do i18n i polityki. */ readonly code: string; /** Klucz i18n lub fallback message (literał tylko dla klasy `bug`). */ readonly message: string; readonly context: ErrorContext; readonly cause?: unknown; readonly correlationId: CorrelationId; readonly recoverable: boolean; readonly retry?: RetryState; /** Timestamp utworzenia błędu (ms od epoch) — z `Clock`, nie `Date.now()`. */ readonly at: number; } /** * ErrorBus — osobny kanał event busa dla błędów. * Każdy błąd (z każdej warstwy) trafia tu z pełnym kontekstem i correlation ID. */ export interface ErrorBus { readonly errors$: Observable; report(error: EchelonError): void; } export declare const ERROR_BUS: import("../index.js").EchelonToken; /** Factory dla typowych klas błędów — wymusza wypełnienie wymaganych pól. */ export interface ErrorFactory { user(code: string, message: string, ctx?: ErrorContext, cause?: unknown): EchelonError; business(code: string, message: string, ctx?: ErrorContext, cause?: unknown): EchelonError; infra(code: string, message: string, ctx?: ErrorContext, retry?: RetryState, cause?: unknown): EchelonError; bug(code: string, message: string, ctx?: ErrorContext, cause?: unknown): EchelonError; } export declare const ERROR_FACTORY: import("../index.js").EchelonToken; //# sourceMappingURL=index.d.ts.map