'use strict';
// istanbul ignore next
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
var _xtend = require('xtend');
var _xtend2 = _interopRequireDefault(_xtend);
var _cookieMonster = require('cookie-monster');
var _cookieMonster2 = _interopRequireDefault(_cookieMonster);
var _jwtDecode = require('jwt-decode');
var _jwtDecode2 = _interopRequireDefault(_jwtDecode);
var _events = require('events');
var _events2 = _interopRequireDefault(_events);
var _localStorage = require('local-storage');
var _localStorage2 = _interopRequireDefault(_localStorage);
var EventEmitter = _events2['default'].EventEmitter;
var noop = function noop() {};
module.exports = function (options) {
var user = undefined;
var token = undefined;
options = (0, _xtend2['default'])({ cookie: 'XSRF-TOKEN' }, options);
var logger = options.logger || {
info: noop,
warn: noop
};
var decodeToken = function decodeToken(token) {
Eif (token) {
try {
return (0, _jwtDecode2['default'])(token);
} catch (e) {
logger.warn('[JWT store] Invalid JWT: ' + token);
return void 0;
}
}
};
if (options.localStorageKey) {
try {
token = _localStorage2['default'].get(options.localStorageKey);
} catch (e) {
logger.warn('[JWT store] Unable to get token', e);
}
} else {
token = _cookieMonster2['default'].get && _cookieMonster2['default'].get(options.cookie);
}
logger.info('[JWT store] created store with token', token);
var tokenStore = (0, _xtend2['default'])({
getToken: function getToken() {
return token;
},
getUser: function getUser() {
return user;
},
getUserId: function getUserId() {
return user ? user.id : void 0;
},
setToken: function setToken(newToken) {
logger.info('[JWT store] setting new token', newToken);
token = newToken;
user = decodeToken(token);
this.emit('Token received', token, user);
},
refreshToken: function refreshToken() {
Eif (options.refresh) {
logger.info('[JWT store] refreshing token', token);
options.refresh(token).then(tokenStore.setToken.bind(tokenStore));
}
}
}, EventEmitter.prototype);
var refreshToken = function refreshToken() {
if (!token && options.refresh) {
tokenStore.refreshToken();
} else {
user = decodeToken(token);
}
var expDate = user ? new Date(user.exp * 1000 - expiryWindow) : null;
if (expDate && expDate < new Date() && options.refresh) {
tokenStore.refreshToken();
}
};
var refreshInterval = options.refreshInterval ? options.refreshInterval : 60 * 1000; // default to checking every minute
var expiryWindow = options.expiryWindow ? options.expiryWindow : 2 * refreshInterval; // default to refreshing if we're two refreshInterval's away from expiration
if (options.listeners) {
Object.keys(options.listeners).forEach(function (key) {
tokenStore.on(key, options.listeners[key]);
});
}
if (options.refresh) {
refreshToken();
setInterval(refreshToken, refreshInterval);
}
if (token) {
tokenStore.setToken(token);
}
return tokenStore;
};
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9zZXRoL2Vudi9kZXYvcmVhY3Qtand0LXN0b3JlL3NyYy9pbmRleC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZLENBQUE7Ozs7OztxQkFFTyxPQUFPOzs7OzZCQUNQLGdCQUFnQjs7Ozt5QkFDaEIsWUFBWTs7OztzQkFDWixRQUFROzs7OzRCQUNaLGVBQWU7Ozs7QUFFOUIsSUFBTSxZQUFZLEdBQUcsb0JBQU8sWUFBWSxDQUFBO0FBQ3hDLElBQU0sSUFBSSxHQUFHLFNBQVAsSUFBSSxHQUFlLEVBQUcsQ0FBQTs7QUFFNUIsTUFBTSxDQUFDLE9BQU8sR0FBRyxVQUFDLE9BQU8sRUFBSztBQUM1QixNQUFJLElBQUksWUFBQSxDQUFBO0FBQ1IsTUFBSSxLQUFLLFlBQUEsQ0FBQTs7QUFFVCxTQUFPLEdBQUcsd0JBQU8sRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUE7O0FBRW5ELE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLElBQUk7QUFDL0IsUUFBSSxFQUFFLElBQUk7QUFDVixRQUFJLEVBQUUsSUFBSTtHQUNYLENBQUE7O0FBRUQsTUFBTSxXQUFXLEdBQUcsU0FBZCxXQUFXLENBQUcsS0FBSyxFQUFJO0FBQzNCLFFBQUksS0FBSyxFQUFFO0FBQ1QsVUFBSTtBQUNGLGVBQU8sNEJBQU8sS0FBSyxDQUFDLENBQUE7T0FDckIsQ0FBQyxPQUFPLENBQUMsRUFBRTtBQUNWLGNBQU0sQ0FBQyxJQUFJLCtCQUE2QixLQUFLLENBQUcsQ0FBQTtBQUNoRCxlQUFPLEtBQUssQ0FBQyxDQUFBO09BQ2Q7S0FDRjtHQUNGLENBQUE7O0FBRUQsTUFBSSxPQUFPLENBQUMsZUFBZSxFQUFFO0FBQzNCLFFBQUk7QUFDRixXQUFLLEdBQUcsMEJBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQTtLQUN4QyxDQUFDLE9BQU8sQ0FBQyxFQUFFO0FBQ1YsWUFBTSxDQUFDLElBQUksQ0FBQyxp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QUFBO0NBQ2xCLENBQUEiLCJmaWxlIjoiL1VzZXJzL3NldGgvZW52L2Rldi9yZWFjdC1qd3Qtc3RvcmUvc3JjL2luZGV4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnXG5cbmltcG9ydCBleHRlbmQgZnJvbSAneHRlbmQnXG5pbXBvcnQgY29va2llIGZyb20gJ2Nvb2tpZS1tb25zdGVyJ1xuaW1wb3J0IGRlY29kZSBmcm9tICdqd3QtZGVjb2RlJ1xuaW1wb3J0IGV2ZW50cyBmcm9tICdldmVudHMnXG5pbXBvcnQgbHMgZnJvbSAnbG9jYWwtc3RvcmFnZSdcblxuY29uc3QgRXZlbnRFbWl0dGVyID0gZXZlbnRzLkV2ZW50RW1pdHRlclxuY29uc3Qgbm9vcCA9IGZ1bmN0aW9uICgpIHsgfVxuXG5tb2R1bGUuZXhwb3J0cyA9IChvcHRpb25zKSA9PiB7XG4gIGxldCB1c2VyXG4gIGxldCB0b2tlblxuXG4gIG9wdGlvbnMgPSBleHRlbmQoeyBjb29raWU6ICdYU1JGLVRPS0VOJyB9LCBvcHRpb25zKVxuXG4gIGNvbnN0IGxvZ2dlciA9IG9wdGlvbnMubG9nZ2VyIHx8IHtcbiAgICBpbmZvOiBub29wLFxuICAgIHdhcm46IG5vb3BcbiAgfVxuXG4gIGNvbnN0IGRlY29kZVRva2VuID0gdG9rZW4gPT4ge1xuICAgIGlmICh0b2tlbikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGRlY29kZSh0b2tlbilcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgbG9nZ2VyLndhcm4oYFtKV1Qgc3RvcmVdIEludmFsaWQgSldUOiAke3Rva2VufWApXG4gICAgICAgIHJldHVybiB2b2lkIDBcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAob3B0aW9ucy5sb2NhbFN0b3JhZ2VLZXkpIHtcbiAgICB0cnkge1xuICAgICAgdG9rZW4gPSBscy5nZXQob3B0aW9ucy5sb2NhbFN0b3JhZ2VLZXkpXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nZ2VyLndhcm4oJ1tKV1Qgc3RvcmVdIFVuYWJsZSB0byBnZXQgdG9rZW4nLCBlKVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0b2tlbiA9IGNvb2tpZS5nZXQgJiYgY29va2llLmdldChvcHRpb25zLmNvb2tpZSlcbiAgfVxuICBsb2dnZXIuaW5mbygnW0pXVCBzdG9yZV0gY3JlYXRlZCBzdG9yZSB3aXRoIHRva2VuJywgdG9rZW4pXG5cbiAgY29uc3QgdG9rZW5TdG9yZSA9IGV4dGVuZCh7XG4gICAgZ2V0VG9rZW4gKCkge1xuICAgICAgcmV0dXJuIHRva2VuXG4gICAgfSxcblxuICAgIGdldFVzZXIgKCkge1xuICAgICAgcmV0dXJuIHVzZXJcbiAgICB9LFxuXG4gICAgZ2V0VXNlcklkICgpIHtcbiAgICAgIHJldHVybiB1c2VyID8gdXNlci5pZCA6IHZvaWQgMFxuICAgIH0sXG5cbiAgICBzZXRUb2tlbiAobmV3VG9rZW4pIHtcbiAgICAgIGxvZ2dlci5pbmZvKCdbSldUIHN0b3JlXSBzZXR0aW5nIG5ldyB0b2tlbicsIG5ld1Rva2VuKVxuICAgICAgdG9rZW4gPSBuZXdUb2tlblxuICAgICAgdXNlciA9IGRlY29kZVRva2VuKHRva2VuKVxuICAgICAgdGhpcy5lbWl0KCdUb2tlbiByZWNlaXZlZCcsIHRva2VuLCB1c2VyKVxuICAgIH0sXG5cbiAgICByZWZyZXNoVG9rZW4gKCkge1xuICAgICAgaWYgKG9wdGlvbnMucmVmcmVzaCkge1xuICAgICAgICBsb2dnZXIuaW5mbygnW0pXVCBzdG9yZV0gcmVmcmVzaGluZyB0b2tlbicsIHRva2VuKVxuXG4gICAgICAgIG9wdGlvbnMucmVmcmVzaCh0b2tlbilcbiAgICAgICAgLnRoZW4odG9rZW5TdG9yZS5zZXRUb2tlbi5iaW5kKHRva2VuU3RvcmUpKVxuICAgICAgfVxuICAgIH1cbiAgfSwgRXZlbnRFbWl0dGVyLnByb3RvdHlwZSlcblxuICBjb25zdCByZWZyZXNoVG9rZW4gPSAoKSA9PiB7XG4gICAgaWYgKCF0b2tlbiAmJiBvcHRpb25zLnJlZnJlc2gpIHtcbiAgICAgIHRva2VuU3RvcmUucmVmcmVzaFRva2VuKClcbiAgICB9IGVsc2Uge1xuICAgICAgdXNlciA9IGRlY29kZVRva2VuKHRva2VuKVxuICAgIH1cblxuICAgIGxldCBleHBEYXRlID0gdXNlciA/IG5ldyBEYXRlKHVzZXIuZXhwICogMTAwMCAtIGV4cGlyeVdpbmRvdykgOiBudWxsXG4gICAgaWYgKGV4cERhdGUgJiYgZXhwRGF0ZSA8IG5ldyBEYXRlKCkgJiYgb3B0aW9ucy5yZWZyZXNoKSB7XG4gICAgICB0b2tlblN0b3JlLnJlZnJlc2hUb2tlbigpXG4gICAgfVxuICB9XG5cbiAgY29uc3QgcmVmcmVzaEludGVydmFsID0gb3B0aW9ucy5yZWZyZXNoSW50ZXJ2YWxcbiAgICA/IG9wdGlvbnMucmVmcmVzaEludGVydmFsXG4gICAgOiA2MCAqIDEwMDAgLy8gZGVmYXVsdCB0byBjaGVja2luZyBldmVyeSBtaW51dGVcblxuICBjb25zdCBleHBpcnlXaW5kb3cgPSBvcHRpb25zLmV4cGlyeVdpbmRvd1xuICAgID8gb3B0aW9ucy5leHBpcnlXaW5kb3dcbiAgICA6IDIgKiByZWZyZXNoSW50ZXJ2YWwgLy8gZGVmYXVsdCB0byByZWZyZXNoaW5nIGlmIHdlJ3JlIHR3byByZWZyZXNoSW50ZXJ2YWwncyBhd2F5IGZyb20gZXhwaXJhdGlvblxuXG4gIGlmIChvcHRpb25zLmxpc3RlbmVycykge1xuICAgIE9iamVjdC5rZXlzKG9wdGlvbnMubGlzdGVuZXJzKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgIHRva2VuU3RvcmUub24oa2V5LCBvcHRpb25zLmxpc3RlbmVyc1trZXldKVxuICAgIH0pXG4gIH1cblxuICBpZiAob3B0aW9ucy5yZWZyZXNoKSB7XG4gICAgcmVmcmVzaFRva2VuKClcbiAgICBzZXRJbnRlcnZhbChyZWZyZXNoVG9rZW4sIHJlZnJlc2hJbnRlcnZhbClcbiAgfVxuXG4gIGlmICh0b2tlbikge1xuICAgIHRva2VuU3RvcmUuc2V0VG9rZW4odG9rZW4pXG4gIH1cblxuICByZXR1cm4gdG9rZW5TdG9yZVxufVxuIl19 |