export interface ErrorContextInterface { on(code: number, callback: () => Promise): ErrorContextInterface; handleError(transport: Transport, options?: Options): Promise; } export interface ClientInterface extends ErrorContextInterface { lastRequest: { input: RequestInfo | URL, init?: RequestInit, } fetch(input: RequestInfo | URL, init?: RequestInit): Promise; repeat(): Promise; addErrorHandler(errorHandler: ErrorHandlerInterface, priority?: number): ClientInterface; } export type Options = { terminate?: boolean; repeatable?: boolean; confirm?: boolean; validation?: boolean; abortable?: boolean; } export interface ErrorHandlerInterface { handleError(transport: Transport, options: Options, client: ClientInterface): Promise; supports(transport: Transport, options: Options, client: ClientInterface): boolean; } export class Transport { public readonly ok: boolean; constructor( public readonly response: Response = null, public readonly error: Error = null, ) { this.ok = response !== null; } }