UNPKG

forest-express

Version:

Official package for all Forest Express Lianas

119 lines (114 loc) 4.78 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator")); var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator")); var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck")); var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var DEFAULT_EXPIRATION_IN_SECONDS = 30 * 60; var OidcConfigurationRetrieverService = /*#__PURE__*/function () { /** @type {import('./forest-server-requester')} */ /** @type {import('../context/init').Env} */ /** @type {Promise<{configuration: import('openid-client').IssuerMetadata, expiration: Date}>} */ /** * @param {import("../context/init").Context} context */ function OidcConfigurationRetrieverService(context) { (0, _classCallCheck2["default"])(this, OidcConfigurationRetrieverService); (0, _defineProperty2["default"])(this, "forestServerRequester", void 0); (0, _defineProperty2["default"])(this, "env", void 0); (0, _defineProperty2["default"])(this, "cachedWellKnownConfiguration", void 0); this.forestServerRequester = context.forestServerRequester; this.env = context.env; } /** * @private * @returns {Promise<import('openid-client').IssuerMetadata>} */ (0, _createClass2["default"])(OidcConfigurationRetrieverService, [{ key: "_fetchConfiguration", value: function () { var _fetchConfiguration2 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee() { return _regenerator["default"].wrap(function _callee$(_context) { while (1) switch (_context.prev = _context.next) { case 0: return _context.abrupt("return", this.forestServerRequester.perform('/oidc/.well-known/openid-configuration')); case 1: case "end": return _context.stop(); } }, _callee, this); })); function _fetchConfiguration() { return _fetchConfiguration2.apply(this, arguments); } return _fetchConfiguration; }() /** * @returns {Promise<import('openid-client').IssuerMetadata>} */ }, { key: "retrieve", value: function () { var _retrieve = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2() { var _this = this; var now; return _regenerator["default"].wrap(function _callee2$(_context2) { while (1) switch (_context2.prev = _context2.next) { case 0: now = new Date(); _context2.t0 = this.cachedWellKnownConfiguration; if (!_context2.t0) { _context2.next = 8; break; } _context2.next = 5; return this.cachedWellKnownConfiguration; case 5: _context2.t1 = _context2.sent.expiration; _context2.t2 = now; _context2.t0 = _context2.t1 < _context2.t2; case 8: if (!_context2.t0) { _context2.next = 10; break; } this.clearCache(); case 10: if (!this.cachedWellKnownConfiguration) { this.cachedWellKnownConfiguration = this._fetchConfiguration().then(function (configuration) { var expirationDuration = _this.env.FOREST_OIDC_CONFIG_EXPIRATION_IN_SECONDS || DEFAULT_EXPIRATION_IN_SECONDS; var expiration = new Date(Date.now() + expirationDuration); return { configuration: configuration, expiration: expiration }; })["catch"](function (error) { _this.cachedWellKnownConfiguration = null; throw error; }); } _context2.next = 13; return this.cachedWellKnownConfiguration; case 13: return _context2.abrupt("return", _context2.sent.configuration); case 14: case "end": return _context2.stop(); } }, _callee2, this); })); function retrieve() { return _retrieve.apply(this, arguments); } return retrieve; }() }, { key: "clearCache", value: function clearCache() { this.cachedWellKnownConfiguration = null; } }]); return OidcConfigurationRetrieverService; }(); module.exports = OidcConfigurationRetrieverService;