wkr-util
Version:
Utility library for wkr project.
71 lines (55 loc) • 1.95 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _nodeFetch = _interopRequireDefault(require("node-fetch"));
var _urlJoin = _interopRequireDefault(require("url-join"));
var _jsonwebtoken = _interopRequireDefault(require("jsonwebtoken"));
var _f = require("@cullylarson/f");
var _p = require("@cullylarson/p");
var _ = require("./");
var _ResponseError = _interopRequireDefault(require("./errors/ResponseError"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
const AppAuth = (authApiUrl, appId, appSecret) => {
const twoMinutes = 120; // if there is less than 2 minutes left on the JWT, then it should be renewed
const shouldRenew = tokenInfo => {
return !tokenInfo || !tokenInfo.exp || tokenInfo.exp - (0, _.nowStamp)() <= twoMinutes;
};
const tokenInfoFromToken = token => {
const decoded = _jsonwebtoken.default.decode(token);
return {
token,
exp: (0, _f.get)(['header', 'exp'], undefined, decoded)
};
};
const getTokenInfo = (0, _p.memoizePUntil)(shouldRenew, (0, _p.retry)(3, () => {
const query = {
id: appId,
secret: appSecret
};
return (0, _nodeFetch.default)((0, _urlJoin.default)(authApiUrl, '/api/v1/application/authenticate'), {
method: 'post',
body: JSON.stringify(query),
headers: {
'Content-Type': 'application/json'
}
}).then(_.responseData).then(({
response,
data
}) => {
if (!response.ok) {
throw new _ResponseError.default(response.status, data, `Failed to get token. Got status: ${response.status}`);
}
return data.token;
}).then(tokenInfoFromToken);
}));
return {
getToken: () => {
return getTokenInfo().then(tokenInfo => tokenInfo.token);
}
};
};
var _default = AppAuth;
exports.default = _default;
module.exports = exports.default;
;