UNPKG

wkr-util

Version:
71 lines (55 loc) 1.95 kB
"use strict"; 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;