@netology-group/account
Version:
account client
74 lines (67 loc) • 2.42 kB
JavaScript
import { Debug as debug } from './debug';
export var Debug = function Debug(ns) {
return debug(ns, process.env.NODE_ENV === 'production');
};
export var fetchRetry = function fetchRetry(requestFn, opts) {
if (!requestFn) throw new TypeError("Missing 'requestFn': ".concat(requestFn));
return new Promise(function (resolve, reject) {
var errors = [];
var wrappedFetch = function wrappedFetch(n) {
if (n < 1) {
reject(errors);
} else {
fetch(requestFn()).then(function (response) {
return resolve(response);
}).catch(function (error) {
errors.push(error);
setTimeout(function () {
wrappedFetch(n - 1);
}, opts.delay || 1e3);
});
}
};
wrappedFetch(opts.retries || 3);
});
};
/**
* Check token expire
*/
export var isExpired = function isExpired(data, now) {
var leeway = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 3e3;
if (!now || isNaN(now)) throw new TypeError('`now` is absent');
var _isExpired = function _isExpired(x) {
return !x || !x.expires_time || now > Number(x.expires_time) - leeway;
};
return _isExpired(data);
};
export var getExpiresTime = function getExpiresTime(expires_in, expires_time) {
if (typeof expires_in === 'undefined' || isNaN(expires_in)) throw new TypeError('`expires_in` is absent');
if (typeof expires_time === 'undefined' || isNaN(expires_time)) throw new TypeError('`expires_time` is absent');
if (expires_in < 0) throw new TypeError('Wrong `expires_in` value');
return expires_time + expires_in * 1e3;
};
export var validResponse = function validResponse(response) {
if (response.status && response.status >= 200 && response.status < 300) {
return response;
}
throw new Error(response.statusText || "Invalid request. Status: ".concat(response.status));
};
export var parsedResponse = function parsedResponse(response) {
if (!response) throw new TypeError('`response` is absent');
try {
return response.json();
} catch (error) {
throw new Error('Response is not a JSON');
}
};
export var parse = function parse(fn) {
var it = typeof fn === 'function' ? fn() : fn;
if (typeof it !== 'string') throw new TypeError('Could not parse');
return new Promise(function (resolve, reject) {
try {
resolve(JSON.parse(it));
} catch (error) {
reject(error);
}
});
};