UNPKG

@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
//#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 };