Smail/frontend/src/utils/auth.mjs
smail f60d3b0880
Some checks are pending
Security Checks / security (push) Waiting to run
整理前后端与测试构建目录并完善配置和安全引导
统一 frontend、backend、test、test-log 和 out 目录,更新构建、部署及测试入口;纳入配置管理兼容与首次安全引导修复;排除本机配置、密钥和测试产物。
2026-09-05 19:19:52 +08:00

56 lines
1.4 KiB
JavaScript

const AUTH_STATUS = Object.freeze({
UNKNOWN: "unknown",
LOADING: "loading",
AUTHENTICATED: "authenticated",
UNAUTHENTICATED: "unauthenticated",
NEEDS_SETUP: "needs_setup",
UNAVAILABLE: "unavailable"
});
let authRefreshPromise = null;
function classifyAuthenticationResponse(response) {
if (response?.errorNo === 402) {
return AUTH_STATUS.NEEDS_SETUP;
}
if (response?.errorNo === 0 && response.data && typeof response.data === "object") {
return AUTH_STATUS.AUTHENTICATED;
}
if (response?.errorNo === 403) {
return AUTH_STATUS.UNAUTHENTICATED;
}
return AUTH_STATUS.UNAVAILABLE;
}
function classifyAuthenticationError(error, options = {}) {
if (error?.response?.data?.errorNo === 402 || error?.response?.status === 402) {
return AUTH_STATUS.NEEDS_SETUP;
}
if (error?.response?.data?.errorNo === 403
|| (options.authenticationRequest && error?.response?.status === 403)) {
return AUTH_STATUS.UNAUTHENTICATED;
}
return AUTH_STATUS.UNAVAILABLE;
}
function runSharedAuthRefresh(task) {
if (authRefreshPromise) {
return authRefreshPromise;
}
authRefreshPromise = Promise.resolve()
.then(task)
.finally(() => {
authRefreshPromise = null;
});
return authRefreshPromise;
}
export {
AUTH_STATUS,
classifyAuthenticationError,
classifyAuthenticationResponse,
runSharedAuthRefresh
};