UNPKG

@netology-group/account

Version:
74 lines (67 loc) 2.42 kB
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); } }); };