@hybris-software/use-query
Version:
Simple way to manage your api calls
100 lines (99 loc) • 3.69 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.generateApiClient = generateApiClient;
exports.generateJwtApiClient = generateJwtApiClient;
require("core-js/modules/es.promise.js");
require("core-js/modules/web.dom-collections.iterator.js");
var _axios = _interopRequireDefault(require("axios"));
var _parseJwt = _interopRequireDefault(require("../Utils/parseJwt"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function generateApiClient(_ref) {
let {
baseUrl = "",
timeout = 5000,
authorizationHeader = "Authorization",
authorizationPrefix = "Bearer ",
localStorageKey = "token",
acceptLanguage = "en-en"
} = _ref;
const apiClient = _axios.default.create({
baseURL: baseUrl,
timeout: timeout,
headers: {
"Content-Type": "application/json",
Accept: "application/json",
"Accept-Language": acceptLanguage
}
});
apiClient.interceptors.request.use(function (config) {
config.headers = config.headers || {};
const token = localStorage.getItem(localStorageKey) || sessionStorage.getItem(localStorageKey);
if (token) {
config.headers[authorizationHeader] = "".concat(authorizationPrefix).concat(token);
}
return config;
}, function (error) {
return Promise.reject(error);
});
apiClient.interceptors.response.use(function (response) {
return response;
}, function (error) {
return Promise.reject(error);
});
return apiClient;
}
function generateJwtApiClient(_ref2) {
let {
baseUrl = "",
timeout = 5000,
authorizationHeader = "Authorization",
authorizationPrefix = "Bearer ",
accessTokenLocalStorageKey = "accessToken",
refreshTokenLocalStorageKey = "refreshToken",
refreshTokenFunction = undefined
} = _ref2;
const apiClient = _axios.default.create({
baseURL: baseUrl,
timeout: timeout,
headers: {
"Content-Type": "application/json",
Accept: "application/json"
}
});
apiClient.interceptors.request.use(async function (config) {
config.headers = config.headers || {};
let accessToken = localStorage.getItem(accessTokenLocalStorageKey) || sessionStorage.getItem(localStorageKey);
let refreshToken = localStorage.getItem(refreshTokenLocalStorageKey) || sessionStorage.getItem(localStorageKey);
let accessTokenStorage = localStorage.getItem(accessTokenLocalStorageKey) ? localStorage : sessionStorage;
let refreshTokenStorage = localStorage.getItem(refreshTokenLocalStorageKey) ? localStorage : sessionStorage;
if (accessToken) {
// Check if the access token is expired
const decoded = (0, _parseJwt.default)(accessToken);
if (decoded.exp && decoded.exp < Date.now() / 1000 && refreshToken && refreshTokenFunction && refreshTokenUrl) {
// If the access token is expired, try to refresh it
try {
const [newAccessToken, newRefreshToken] = await refreshTokenFunction({
accessToken,
refreshToken
});
accessTokenStorage.setItem(accessTokenLocalStorageKey, newAccessToken);
refreshTokenStorage.setItem(refreshTokenLocalStorageKey, newRefreshToken);
accessToken = newAccessToken;
refreshToken = newRefreshToken;
} catch (_unused) {}
}
config.headers[authorizationHeader] = "".concat(authorizationPrefix).concat(token);
}
return config;
}, function (error) {
return Promise.reject(error);
});
apiClient.interceptors.response.use(function (response) {
return response;
}, function (error) {
return Promise.reject(error);
});
return apiClient;
}