import { signal } from "@preact/signals";
export const fatalError = signal(null);
export function reportFatal(details) {
if (fatalError.value) return;
fatalError.value = { at: new Date().toISOString(), ...details };
}
export function clearFatal() {
fatalError.value = null;
}
function isApiError(reason) {
return (
!!reason &&
typeof reason === "object" &&
reason.name === "ApiError" &&
"method" in reason
);
}
function detailsFromApiError(err) {
return {
method: err.method,
url: err.url,
status: err.status,
statusText: err.statusText,
body: err.body,
stack: err.stack,
};
}
if (typeof window !== "undefined") {
window.addEventListener("unhandledrejection", (event) => {
if (isApiError(event.reason)) {
reportFatal(detailsFromApiError(event.reason));
}
});
}