Some checks are pending
Security Checks / security (push) Waiting to run
统一 frontend、backend、test、test-log 和 out 目录,更新构建、部署及测试入口;纳入配置管理兼容与首次安全引导修复;排除本机配置、密钥和测试产物。
56 lines
1.4 KiB
JavaScript
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
|
|
};
|