@alauda-fe/common
Version:
Alauda frontend team common codes.
96 lines • 12.3 kB
JavaScript
import { noop } from '../core/public-api';
import { TOKEN_INFO_API, TOKEN_REFRESH_API } from './constants';
import { readStorageToken, writeStorageToken } from './storage-token';
let cachedAccountInfo;
export function resetAuthRuntimeCache() {
cachedAccountInfo = undefined;
}
export function getCachedAccountInfo() {
return cachedAccountInfo;
}
export function setCachedAccountInfo(info) {
cachedAccountInfo = info;
}
export function createAuthorizedFetchInit(init = {}) {
const headers = new Headers(init.headers);
const idToken = readStorageToken();
if (idToken && !headers.has('Authorization')) {
headers.set('Authorization', `Bearer ${idToken}`);
}
return {
...init,
credentials: init.credentials ?? 'same-origin',
headers,
};
}
// Sends request with auth header but no 401 retry — for token management APIs
export function fetchTokenApi(input, init) {
return fetch(input, createAuthorizedFetchInit(init));
}
export async function fetchAuthorizedResource(input, init) {
const response = await fetch(input, createAuthorizedFetchInit(init));
if (response.status !== 401) {
return response;
}
const { refreshAuthorizationToken, logout } = await import('./authorization');
const refreshed = await refreshAuthorizationToken().catch(() => null);
if (!refreshed) {
logout(true);
return new Promise(noop);
}
return fetch(input, createAuthorizedFetchInit(init));
}
export async function requestTokenInfo(force = false) {
if (!force && cachedAccountInfo !== undefined) {
return cachedAccountInfo;
}
return fetchTokenApi(TOKEN_INFO_API).then(async (response) => {
if (response.ok) {
const info = await response.json();
cachedAccountInfo = info;
return info;
}
if (response.status === 401) {
cachedAccountInfo = null;
return null;
}
throw createResponseError(response, 'Failed to fetch token info');
});
}
export async function requestTokenRefresh() {
return fetchTokenApi(TOKEN_REFRESH_API).then(async (response) => {
if (response.ok) {
const tokenResponse = await response.json();
if (tokenResponse.id_token) {
writeStorageToken(tokenResponse.id_token);
}
cachedAccountInfo = undefined;
return tokenResponse;
}
if (response.status === 401) {
cachedAccountInfo = null;
return null;
}
throw createResponseError(response, 'Failed to refresh token');
});
}
export async function resolveTokenInfoWithRefresh() {
const info = await requestTokenInfo();
if (info) {
return info;
}
const refreshed = await requestTokenRefresh();
if (!refreshed) {
return null;
}
return requestTokenInfo(true);
}
function createResponseError(response, message) {
const error = new Error(`${message}: ${response.status} ${response.statusText}`);
Object.assign(error, {
status: response.status,
statusText: response.statusText,
});
return error;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uL3NyYy9hdXRob3JpemF0aW9uL3J1bnRpbWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRzFDLE9BQU8sRUFBRSxjQUFjLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDaEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFVdEUsSUFBSSxpQkFBaUQsQ0FBQztBQUV0RCxNQUFNLFVBQVUscUJBQXFCO0lBQ25DLGlCQUFpQixHQUFHLFNBQVMsQ0FBQztBQUNoQyxDQUFDO0FBRUQsTUFBTSxVQUFVLG9CQUFvQjtJQUNsQyxPQUFPLGlCQUFpQixDQUFDO0FBQzNCLENBQUM7QUFFRCxNQUFNLFVBQVUsb0JBQW9CLENBQUMsSUFBb0M7SUFDdkUsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO0FBQzNCLENBQUM7QUFFRCxNQUFNLFVBQVUseUJBQXlCLENBQUMsT0FBb0IsRUFBRTtJQUM5RCxNQUFNLE9BQU8sR0FBRyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDMUMsTUFBTSxPQUFPLEdBQUcsZ0JBQWdCLEVBQUUsQ0FBQztJQUVuQyxJQUFJLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQztRQUM3QyxPQUFPLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxVQUFVLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVELE9BQU87UUFDTCxHQUFHLElBQUk7UUFDUCxXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVcsSUFBSSxhQUFhO1FBQzlDLE9BQU87S0FDYyxDQUFDO0FBQzFCLENBQUM7QUFFRCw4RUFBOEU7QUFDOUUsTUFB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QUFDO0lBRXRDLElBQUksSUFBSSxFQUFFLENBQUM7UUFDVCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxNQUFNLFNBQVMsR0FBRyxNQUFNLG1CQUFtQixFQUFFLENBQUM7SUFFOUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ2YsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsT0FBTyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNoQyxDQUFDO0FBRUQsU0FBUyxtQkFBbUIsQ0FBQyxRQUFrQixFQUFFLE9BQWU7SUFDOUQsTUFBTSxLQUFLLEdBQUcsSUFBSSxLQUFLLENBQ3JCLEdBQUcsT0FBTyxLQUFLLFFBQVEsQ0FBQyxNQUFNLElBQUksUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUN4RCxDQUFDO0lBRUYsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUU7UUFDbkIsTUFBTSxFQUFFLFFBQVEsQ0FBQyxNQUFNO1FBQ3ZCLFVBQVUsRUFBRSxRQUFRLENBQUMsVUFBVTtLQUNoQyxDQUFDLENBQUM7SUFFSCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBub29wIH0gZnJvbSAnLi4vY29yZS9wdWJsaWMtYXBpJztcbmltcG9ydCB0eXBlIHsgQWNjb3VudEluZm8gfSBmcm9tICcuLi9wYWdlLXNjYWZmb2xkL3BhZ2UtaGVhZGVyL2FjY291bnQtbWVudS9jb21wb25lbnQvY29tcG9uZW50JztcblxuaW1wb3J0IHsgVE9LRU5fSU5GT19BUEksIFRPS0VOX1JFRlJFU0hfQVBJIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgcmVhZFN0b3JhZ2VUb2tlbiwgd3JpdGVTdG9yYWdlVG9rZW4gfSBmcm9tICcuL3N0b3JhZ2UtdG9rZW4nO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRva2VuUmVzcG9uc2Uge1xuICB0b2tlbl9zdG9yYWdlOiBzdHJpbmc7XG4gIHRva2VuX3R5cGU6IHN0cmluZztcbiAgZXhwaXJlX2F0OiBzdHJpbmc7XG4gIGlzc3VlZF9hdDogc3RyaW5nO1xuICBpZF90b2tlbj86IHN0cmluZztcbn1cblxubGV0IGNhY2hlZEFjY291bnRJbmZvOiBBY2NvdW50SW5mbyB8IG51bGwgfCB1bmRlZmluZWQ7XG5cbmV4cG9ydCBmdW5jdGlvbiByZXNldEF1dGhSdW50aW1lQ2FjaGUoKSB7XG4gIGNhY2hlZEFjY291bnRJbmZvID0gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2FjaGVkQWNjb3VudEluZm8oKSB7XG4gIHJldHVybiBjYWNoZWRBY2NvdW50SW5mbztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldENhY2hlZEFjY291bnRJbmZvKGluZm86IEFjY291bnRJbmZvIHwgbnVsbCB8IHVuZGVmaW5lZCkge1xuICBjYWNoZWRBY2NvdW50SW5mbyA9IGluZm87XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVBdXRob3JpemVkRmV0Y2hJbml0KGluaXQ6IFJlcXVlc3RJbml0ID0ge30pIHtcbiAgY29uc3QgaGVhZGVycyA9IG5ldyBIZWFkZXJzKGluaXQuaGVhZGVycyk7XG4gIGNvbnN0IGlkVG9rZW4gPSByZWFkU3RvcmFnZVRva2VuKCk7XG5cbiAgaWYgKGlkVG9rZW4gJiYgIWhlYWRlcnMuaGFzKCdBdXRob3JpemF0aW9uJykpIHtcbiAgICBoZWFkZXJzLnNldCgnQXV0aG9yaXphdGlvbicsIGBCZWFyZXIgJHtpZFRva2VufWApO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5pbml0LFxuICAgIGNyZWRlbnRpYWxzOiBpbml0LmNyZWRlbnRpYWxzID8/ICdzYW1lLW9yaWdpbicsXG4gICAgaGVhZGVycyxcbiAgfSBzYXRpc2ZpZXMgUmVxdWVzdEluaXQ7XG59XG5cbi8vIFNlbmRzIHJlcXVlc3Qgd2l0aCBhdXRoIGhlYWRlciBidXQgbm8gNDAxIHJldHJ5IOKAlCBmb3IgdG9rZW4gbWFuYWdlbWVudCBBUElzXG5leHBvcnQgZnVuY3Rpb24gZmV0Y2hUb2tlbkFwaShpbnB1dDogUmVxdWVzdEluZm8gfCBVUkwsIGluaXQ/OiBSZXF1ZXN0SW5pdCkge1xuICByZXR1cm4gZmV0Y2goaW5wdXQsIGNyZWF0ZUF1dGhvcml6ZWRGZXRjaEluaXQoaW5pdCkpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmV0Y2hBdXRob3JpemVkUmVzb3VyY2UoXG4gIGlucHV0OiBSZXF1ZXN0SW5mbyB8IFVSTCxcbiAgaW5pdD86IFJlcXVlc3RJbml0LFxuKSB7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goaW5wdXQsIGNyZWF0ZUF1dGhvcml6ZWRGZXRjaEluaXQoaW5pdCkpO1xuXG4gIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IDQwMSkge1xuICAgIHJldHVybiByZXNwb25zZTtcbiAgfVxuXG4gIGNvbnN0IHsgcmVmcmVzaEF1dGhvcml6YXRpb25Ub2tlbiwgbG9nb3V0IH0gPSBhd2FpdCBpbXBvcnQoJy4vYXV0aG9yaXphdGlvbicpO1xuICBjb25zdCByZWZyZXNoZWQgPSBhd2FpdCByZWZyZXNoQXV0aG9yaXphdGlvblRva2VuKCkuY2F0Y2goKCkgPT4gbnVsbCk7XG5cbiAgaWYgKCFyZWZyZXNoZWQpIHtcbiAgICBsb2dvdXQodHJ1ZSk7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPG5ldmVyPihub29wKTtcbiAgfVxuXG4gIHJldHVybiBmZXRjaChpbnB1dCwgY3JlYXRlQXV0aG9yaXplZEZldGNoSW5pdChpbml0KSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXF1ZXN0VG9rZW5JbmZvKGZvcmNlID0gZmFsc2UpIHtcbiAgaWYgKCFmb3JjZSAmJiBjYWNoZWRBY2NvdW50SW5mbyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGNhY2hlZEFjY291bnRJbmZvO1xuICB9XG5cbiAgcmV0dXJuIGZldGNoVG9rZW5BcGkoVE9LRU5fSU5GT19BUEkpLnRoZW4oYXN5bmMgcmVzcG9uc2UgPT4ge1xuICAgIGlmIChyZXNwb25zZS5vaykge1xuICAgICAgY29uc3QgaW5mbzogQWNjb3VudEluZm8gPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG4gICAgICBjYWNoZWRBY2NvdW50SW5mbyA9IGluZm87XG4gICAgICByZXR1cm4gaW5mbztcbiAgICB9XG5cbiAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSA0MDEpIHtcbiAgICAgIGNhY2hlZEFjY291bnRJbmZvID0gbnVsbDtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHRocm93IGNyZWF0ZVJlc3BvbnNlRXJyb3IocmVzcG9uc2UsICdGYWlsZWQgdG8gZmV0Y2ggdG9rZW4gaW5mbycpO1xuICB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlcXVlc3RUb2tlblJlZnJlc2goKSB7XG4gIHJldHVybiBmZXRjaFRva2VuQXBpKFRPS0VOX1JFRlJFU0hfQVBJKS50aGVuKGFzeW5jIHJlc3BvbnNlID0+IHtcbiAgICBpZiAocmVzcG9uc2Uub2spIHtcbiAgICAgIGNvbnN0IHRva2VuUmVzcG9uc2U6IFRva2VuUmVzcG9uc2UgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG5cbiAgICAgIGlmICh0b2tlblJlc3BvbnNlLmlkX3Rva2VuKSB7XG4gICAgICAgIHdyaXRlU3RvcmFnZVRva2VuKHRva2VuUmVzcG9uc2UuaWRfdG9rZW4pO1xuICAgICAgfVxuICAgICAgY2FjaGVkQWNjb3VudEluZm8gPSB1bmRlZmluZWQ7XG5cbiAgICAgIHJldHVybiB0b2tlblJlc3BvbnNlO1xuICAgIH1cblxuICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDQwMSkge1xuICAgICAgY2FjaGVkQWNjb3VudEluZm8gPSBudWxsO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdGhyb3cgY3JlYXRlUmVzcG9uc2VFcnJvcihyZXNwb25zZSwgJ0ZhaWxlZCB0byByZWZyZXNoIHRva2VuJyk7XG4gIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVRva2VuSW5mb1dpdGhSZWZyZXNoKCkge1xuICBjb25zdCBpbmZvID0gYXdhaXQgcmVxdWVzdFRva2VuSW5mbygpO1xuXG4gIGlmIChpbmZvKSB7XG4gICAgcmV0dXJuIGluZm87XG4gIH1cblxuICBjb25zdCByZWZyZXNoZWQgPSBhd2FpdCByZXF1ZXN0VG9rZW5SZWZyZXNoKCk7XG5cbiAgaWYgKCFyZWZyZXNoZWQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiByZXF1ZXN0VG9rZW5JbmZvKHRydWUpO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVSZXNwb25zZUVycm9yKHJlc3BvbnNlOiBSZXNwb25zZSwgbWVzc2FnZTogc3RyaW5nKSB7XG4gIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKFxuICAgIGAke21lc3NhZ2V9OiAke3Jlc3BvbnNlLnN0YXR1c30gJHtyZXNwb25zZS5zdGF0dXNUZXh0fWAsXG4gICk7XG5cbiAgT2JqZWN0LmFzc2lnbihlcnJvciwge1xuICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLFxuICAgIHN0YXR1c1RleHQ6IHJlc3BvbnNlLnN0YXR1c1RleHQsXG4gIH0pO1xuXG4gIHJldHVybiBlcnJvcjtcbn1cbiJdfQ==