Files

32 lines
1.1 KiB
TypeScript

import { NetworkFailureKind } from "./types";
export class ObservedFetchError extends Error {
kind: NetworkFailureKind;
status?: number;
retryable: boolean;
constructor(message: string, kind: NetworkFailureKind, options?: { status?: number; retryable?: boolean; cause?: unknown }) {
super(message);
this.name = "ObservedFetchError";
this.kind = kind;
this.status = options?.status;
this.retryable = options?.retryable ?? false;
if (options?.cause !== undefined) {
(this as Error & { cause?: unknown }).cause = options.cause;
}
}
}
export const isObservedFetchError = (error: unknown): error is ObservedFetchError =>
error instanceof ObservedFetchError ||
(typeof error === "object" && error !== null && (error as any).name === "ObservedFetchError");
export const shouldRetryNetworkError = (error: unknown) => {
if (isObservedFetchError(error)) {
return error.retryable;
}
const message = String((error as any)?.message ?? error);
return message.includes("Network request failed") || message.includes("AbortError");
};