@better-auth-ui/core
Version:
Authentication components and data utilities for [Better Auth](https://better-auth.com), available for React and Solid.
80 lines (79 loc) • 1.9 kB
JavaScript
//#region src/lib/auth-query-retry.ts
var e = /* @__PURE__ */ new Set([
408,
429,
500,
502,
503,
504
]), t = /* @__PURE__ */ new Set(["SESSION_NOT_FRESH", "SESSION_EXPIRED"]);
function n(e) {
if (typeof e != "object" || !e) return !1;
let n = e.code;
if (typeof n == "string" && t.has(n)) return !0;
let r = e.error;
if (typeof r != "object" || !r) return !1;
let i = r.code;
return typeof i == "string" && t.has(i);
}
var r = class extends Error {
status;
statusText;
error;
retryAfterMs;
constructor(e, t, n, r) {
super(t || String(e), { cause: n }), this.status = e, this.statusText = t, this.error = n, this.retryAfterMs = r;
}
};
function i(e, t) {
if (typeof e != "object" || !e) return;
let n = e[t];
return typeof n == "number" ? n : void 0;
}
function a(e) {
let t = Number(e);
if (Number.isFinite(t) && t >= 0) return t * 1e3;
let n = Date.parse(e);
if (!Number.isNaN(n)) return Math.max(0, n - Date.now());
}
function o(e) {
let t = e.headers.get("Retry-After"), n = t === null ? void 0 : a(t);
if (n !== void 0) return n;
let r = e.headers.get("X-Retry-After");
return r === null ? void 0 : a(r);
}
var s = {
id: "better-auth-ui-query-retry",
name: "Better Auth UI query retry",
hooks: { onError: async (e) => {
let t = o(e.response);
if (t !== void 0) throw new r(e.response.status, e.response.statusText, e.error, t);
} }
};
function c(e, t) {
return {
...e,
signal: t,
throw: !0,
plugins: [...e?.plugins ?? [], s]
};
}
function l(t) {
let n = i(t, "status");
return n === void 0 || e.has(n);
}
function u(e, t) {
return e < 3 && l(t);
}
function d(e, t) {
let n = i(t, "retryAfterMs");
return n !== void 0 && Number.isFinite(n) && n >= 0 ? n : Math.min(1e3 * 2 ** e, 3e4);
}
function f(e) {
return {
retry: (t, n) => !e() && u(t, n),
retryDelay: d
};
}
//#endregion
export { n as a, f as i, d as n, l as o, c as r, u as s, t };