UNPKG

react-jwt-store

Version:
421 lines (419 loc) 19.1 kB
<!doctype html> <html lang="en"> <head> <title>Code coverage report for src/index.js</title> <meta charset="utf-8"> <link rel="stylesheet" href="../prettify.css"> <link rel="stylesheet" href="../base.css"> <style type='text/css'> div.coverage-summary .sorter { background-image: url(../sort-arrow-sprite.png); } </style> </head> <body> <div class="header high"> <h1>Code coverage report for <span class="entity">src/index.js</span></h1> <h2> Statements: <span class="metric">100% <small>(60 / 60)</small></span> &nbsp;&nbsp;&nbsp;&nbsp; Branches: <span class="metric">94.59% <small>(35 / 37)</small></span> &nbsp;&nbsp;&nbsp;&nbsp; Functions: <span class="metric">100% <small>(11 / 11)</small></span> &nbsp;&nbsp;&nbsp;&nbsp; Lines: <span class="metric">100% <small>(59 / 59)</small></span> &nbsp;&nbsp;&nbsp;&nbsp; Ignored: <span class="metric">1 branch</span> &nbsp;&nbsp;&nbsp;&nbsp; </h2> <div class="path"><a href="../index.html">All files</a> &#187; <a href="index.html">src/</a> &#187; index.js</div> </div> <div class="body"> <pre><table class="coverage"> <tr><td class="line-count">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126</td><td class="line-coverage"><span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">5</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">1</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">1</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">1</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">1</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">1</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">1</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">1</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">1</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">1</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">1</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">1</span> <span class="cline-any cline-yes">1</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">1</span> <span class="cline-any cline-yes">18</span> <span class="cline-any cline-yes">18</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">18</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">18</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">18</span> <span class="cline-any cline-yes">26</span> <span class="cline-any cline-yes">26</span> <span class="cline-any cline-yes">26</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">1</span> <span class="cline-any cline-yes">1</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">18</span> <span class="cline-any cline-yes">8</span> <span class="cline-any cline-yes">8</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">1</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">10</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">18</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">18</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">6</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">8</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">3</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">19</span> <span class="cline-any cline-yes">19</span> <span class="cline-any cline-yes">19</span> <span class="cline-any cline-yes">19</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">5</span> <span class="cline-any cline-yes">5</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">5</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">18</span> <span class="cline-any cline-yes">8</span> <span class="cline-any cline-yes">1</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">7</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">8</span> <span class="cline-any cline-yes">8</span> <span class="cline-any cline-yes">3</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">18</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">18</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">18</span> <span class="cline-any cline-yes">1</span> <span class="cline-any cline-yes">1</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">18</span> <span class="cline-any cline-yes">7</span> <span class="cline-any cline-yes">7</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">18</span> <span class="cline-any cline-yes">13</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">18</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">'use strict'; &nbsp; // istanbul ignore next &nbsp; function _interopRequireDefault(obj) { return obj &amp;&amp; obj.__esModule ? <span class="branch-0 cbranch-skip" title="branch not covered" >obj </span>: { 'default': obj }; } &nbsp; var _xtend = require('xtend'); &nbsp; var _xtend2 = _interopRequireDefault(_xtend); &nbsp; var _cookieMonster = require('cookie-monster'); &nbsp; var _cookieMonster2 = _interopRequireDefault(_cookieMonster); &nbsp; var _jwtDecode = require('jwt-decode'); &nbsp; var _jwtDecode2 = _interopRequireDefault(_jwtDecode); &nbsp; var _events = require('events'); &nbsp; var _events2 = _interopRequireDefault(_events); &nbsp; var _localStorage = require('local-storage'); &nbsp; var _localStorage2 = _interopRequireDefault(_localStorage); &nbsp; var EventEmitter = _events2['default'].EventEmitter; var noop = function noop() {}; &nbsp; module.exports = function (options) { var user = undefined; var token = undefined; &nbsp; options = (0, _xtend2['default'])({ cookie: 'XSRF-TOKEN' }, options); &nbsp; var logger = options.logger || { info: noop, warn: noop }; &nbsp; var decodeToken = function decodeToken(token) { <span class="missing-if-branch" title="else path not taken" >E</span>if (token) { try { return (0, _jwtDecode2['default'])(token); } catch (e) { logger.warn('[JWT store] Invalid JWT: ' + token); return void 0; } } }; &nbsp; 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 &amp;&amp; _cookieMonster2['default'].get(options.cookie); } logger.info('[JWT store] created store with token', token); &nbsp; var tokenStore = (0, _xtend2['default'])({ getToken: function getToken() { return token; }, &nbsp; getUser: function getUser() { return user; }, &nbsp; getUserId: function getUserId() { return user ? user.id : void 0; }, &nbsp; setToken: function setToken(newToken) { logger.info('[JWT store] setting new token', newToken); token = newToken; user = decodeToken(token); this.emit('Token received', token, user); }, &nbsp; refreshToken: function refreshToken() { <span class="missing-if-branch" title="else path not taken" >E</span>if (options.refresh) { logger.info('[JWT store] refreshing token', token); &nbsp; options.refresh(token).then(tokenStore.setToken.bind(tokenStore)); } } }, EventEmitter.prototype); &nbsp; var refreshToken = function refreshToken() { if (!token &amp;&amp; options.refresh) { tokenStore.refreshToken(); } else { user = decodeToken(token); } &nbsp; var expDate = user ? new Date(user.exp * 1000 - expiryWindow) : null; if (expDate &amp;&amp; expDate &lt; new Date() &amp;&amp; options.refresh) { tokenStore.refreshToken(); } }; &nbsp; var refreshInterval = options.refreshInterval ? options.refreshInterval : 60 * 1000; // default to checking every minute &nbsp; var expiryWindow = options.expiryWindow ? options.expiryWindow : 2 * refreshInterval; // default to refreshing if we're two refreshInterval's away from expiration &nbsp; if (options.listeners) { Object.keys(options.listeners).forEach(function (key) { tokenStore.on(key, options.listeners[key]); }); } &nbsp; if (options.refresh) { refreshToken(); setInterval(refreshToken, refreshInterval); } &nbsp; if (token) { tokenStore.setToken(token); } &nbsp; return tokenStore; }; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9zZXRoL2Vudi9kZXYvcmVhY3Qtand0LXN0b3JlL3NyYy9pbmRleC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZLENBQUE7Ozs7OztxQkFFTyxPQUFPOzs7OzZCQUNQLGdCQUFnQjs7Ozt5QkFDaEIsWUFBWTs7OztzQkFDWixRQUFROzs7OzRCQUNaLGVBQWU7Ozs7QUFFOUIsSUFBTSxZQUFZLEdBQUcsb0JBQU8sWUFBWSxDQUFBO0FBQ3hDLElBQU0sSUFBSSxHQUFHLFNBQVAsSUFBSSxHQUFlLEVBQUcsQ0FBQTs7QUFFNUIsTUFBTSxDQUFDLE9BQU8sR0FBRyxVQUFDLE9BQU8sRUFBSztBQUM1QixNQUFJLElBQUksWUFBQSxDQUFBO0FBQ1IsTUFBSSxLQUFLLFlBQUEsQ0FBQTs7QUFFVCxTQUFPLEdBQUcsd0JBQU8sRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUE7O0FBRW5ELE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLElBQUk7QUFDL0IsUUFBSSxFQUFFLElBQUk7QUFDVixRQUFJLEVBQUUsSUFBSTtHQUNYLENBQUE7O0FBRUQsTUFBTSxXQUFXLEdBQUcsU0FBZCxXQUFXLENBQUcsS0FBSyxFQUFJO0FBQzNCLFFBQUksS0FBSyxFQUFFO0FBQ1QsVUFBSTtBQUNGLGVBQU8sNEJBQU8sS0FBSyxDQUFDLENBQUE7T0FDckIsQ0FBQyxPQUFPLENBQUMsRUFBRTtBQUNWLGNBQU0sQ0FBQyxJQUFJLCtCQUE2QixLQUFLLENBQUcsQ0FBQTtBQUNoRCxlQUFPLEtBQUssQ0FBQyxDQUFBO09BQ2Q7S0FDRjtHQUNGLENBQUE7O0FBRUQsTUFBSSxPQUFPLENBQUMsZUFBZSxFQUFFO0FBQzNCLFFBQUk7QUFDRixXQUFLLEdBQUcsMEJBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQTtLQUN4QyxDQUFDLE9BQU8sQ0FBQyxFQUFFO0FBQ1YsWUFBTSxDQUFDLElBQUksQ0FBQyxp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QUFBO0NBQ2xCLENBQUEiLCJmaWxlIjoiL1VzZXJzL3NldGgvZW52L2Rldi9yZWFjdC1qd3Qtc3RvcmUvc3JjL2luZGV4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnXG5cbmltcG9ydCBleHRlbmQgZnJvbSAneHRlbmQnXG5pbXBvcnQgY29va2llIGZyb20gJ2Nvb2tpZS1tb25zdGVyJ1xuaW1wb3J0IGRlY29kZSBmcm9tICdqd3QtZGVjb2RlJ1xuaW1wb3J0IGV2ZW50cyBmcm9tICdldmVudHMnXG5pbXBvcnQgbHMgZnJvbSAnbG9jYWwtc3RvcmFnZSdcblxuY29uc3QgRXZlbnRFbWl0dGVyID0gZXZlbnRzLkV2ZW50RW1pdHRlclxuY29uc3Qgbm9vcCA9IGZ1bmN0aW9uICgpIHsgfVxuXG5tb2R1bGUuZXhwb3J0cyA9IChvcHRpb25zKSA9PiB7XG4gIGxldCB1c2VyXG4gIGxldCB0b2tlblxuXG4gIG9wdGlvbnMgPSBleHRlbmQoeyBjb29raWU6ICdYU1JGLVRPS0VOJyB9LCBvcHRpb25zKVxuXG4gIGNvbnN0IGxvZ2dlciA9IG9wdGlvbnMubG9nZ2VyIHx8IHtcbiAgICBpbmZvOiBub29wLFxuICAgIHdhcm46IG5vb3BcbiAgfVxuXG4gIGNvbnN0IGRlY29kZVRva2VuID0gdG9rZW4gPT4ge1xuICAgIGlmICh0b2tlbikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGRlY29kZSh0b2tlbilcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgbG9nZ2VyLndhcm4oYFtKV1Qgc3RvcmVdIEludmFsaWQgSldUOiAke3Rva2VufWApXG4gICAgICAgIHJldHVybiB2b2lkIDBcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAob3B0aW9ucy5sb2NhbFN0b3JhZ2VLZXkpIHtcbiAgICB0cnkge1xuICAgICAgdG9rZW4gPSBscy5nZXQob3B0aW9ucy5sb2NhbFN0b3JhZ2VLZXkpXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nZ2VyLndhcm4oJ1tKV1Qgc3RvcmVdIFVuYWJsZSB0byBnZXQgdG9rZW4nLCBlKVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0b2tlbiA9IGNvb2tpZS5nZXQgJiYgY29va2llLmdldChvcHRpb25zLmNvb2tpZSlcbiAgfVxuICBsb2dnZXIuaW5mbygnW0pXVCBzdG9yZV0gY3JlYXRlZCBzdG9yZSB3aXRoIHRva2VuJywgdG9rZW4pXG5cbiAgY29uc3QgdG9rZW5TdG9yZSA9IGV4dGVuZCh7XG4gICAgZ2V0VG9rZW4gKCkge1xuICAgICAgcmV0dXJuIHRva2VuXG4gICAgfSxcblxuICAgIGdldFVzZXIgKCkge1xuICAgICAgcmV0dXJuIHVzZXJcbiAgICB9LFxuXG4gICAgZ2V0VXNlcklkICgpIHtcbiAgICAgIHJldHVybiB1c2VyID8gdXNlci5pZCA6IHZvaWQgMFxuICAgIH0sXG5cbiAgICBzZXRUb2tlbiAobmV3VG9rZW4pIHtcbiAgICAgIGxvZ2dlci5pbmZvKCdbSldUIHN0b3JlXSBzZXR0aW5nIG5ldyB0b2tlbicsIG5ld1Rva2VuKVxuICAgICAgdG9rZW4gPSBuZXdUb2tlblxuICAgICAgdXNlciA9IGRlY29kZVRva2VuKHRva2VuKVxuICAgICAgdGhpcy5lbWl0KCdUb2tlbiByZWNlaXZlZCcsIHRva2VuLCB1c2VyKVxuICAgIH0sXG5cbiAgICByZWZyZXNoVG9rZW4gKCkge1xuICAgICAgaWYgKG9wdGlvbnMucmVmcmVzaCkge1xuICAgICAgICBsb2dnZXIuaW5mbygnW0pXVCBzdG9yZV0gcmVmcmVzaGluZyB0b2tlbicsIHRva2VuKVxuXG4gICAgICAgIG9wdGlvbnMucmVmcmVzaCh0b2tlbilcbiAgICAgICAgLnRoZW4odG9rZW5TdG9yZS5zZXRUb2tlbi5iaW5kKHRva2VuU3RvcmUpKVxuICAgICAgfVxuICAgIH1cbiAgfSwgRXZlbnRFbWl0dGVyLnByb3RvdHlwZSlcblxuICBjb25zdCByZWZyZXNoVG9rZW4gPSAoKSA9PiB7XG4gICAgaWYgKCF0b2tlbiAmJiBvcHRpb25zLnJlZnJlc2gpIHtcbiAgICAgIHRva2VuU3RvcmUucmVmcmVzaFRva2VuKClcbiAgICB9IGVsc2Uge1xuICAgICAgdXNlciA9IGRlY29kZVRva2VuKHRva2VuKVxuICAgIH1cblxuICAgIGxldCBleHBEYXRlID0gdXNlciA/IG5ldyBEYXRlKHVzZXIuZXhwICogMTAwMCAtIGV4cGlyeVdpbmRvdykgOiBudWxsXG4gICAgaWYgKGV4cERhdGUgJiYgZXhwRGF0ZSA8IG5ldyBEYXRlKCkgJiYgb3B0aW9ucy5yZWZyZXNoKSB7XG4gICAgICB0b2tlblN0b3JlLnJlZnJlc2hUb2tlbigpXG4gICAgfVxuICB9XG5cbiAgY29uc3QgcmVmcmVzaEludGVydmFsID0gb3B0aW9ucy5yZWZyZXNoSW50ZXJ2YWxcbiAgICA/IG9wdGlvbnMucmVmcmVzaEludGVydmFsXG4gICAgOiA2MCAqIDEwMDAgLy8gZGVmYXVsdCB0byBjaGVja2luZyBldmVyeSBtaW51dGVcblxuICBjb25zdCBleHBpcnlXaW5kb3cgPSBvcHRpb25zLmV4cGlyeVdpbmRvd1xuICAgID8gb3B0aW9ucy5leHBpcnlXaW5kb3dcbiAgICA6IDIgKiByZWZyZXNoSW50ZXJ2YWwgLy8gZGVmYXVsdCB0byByZWZyZXNoaW5nIGlmIHdlJ3JlIHR3byByZWZyZXNoSW50ZXJ2YWwncyBhd2F5IGZyb20gZXhwaXJhdGlvblxuXG4gIGlmIChvcHRpb25zLmxpc3RlbmVycykge1xuICAgIE9iamVjdC5rZXlzKG9wdGlvbnMubGlzdGVuZXJzKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgIHRva2VuU3RvcmUub24oa2V5LCBvcHRpb25zLmxpc3RlbmVyc1trZXldKVxuICAgIH0pXG4gIH1cblxuICBpZiAob3B0aW9ucy5yZWZyZXNoKSB7XG4gICAgcmVmcmVzaFRva2VuKClcbiAgICBzZXRJbnRlcnZhbChyZWZyZXNoVG9rZW4sIHJlZnJlc2hJbnRlcnZhbClcbiAgfVxuXG4gIGlmICh0b2tlbikge1xuICAgIHRva2VuU3RvcmUuc2V0VG9rZW4odG9rZW4pXG4gIH1cblxuICByZXR1cm4gdG9rZW5TdG9yZVxufVxuIl19</pre></td></tr> </table></pre> </div> <div class="footer"> <div class="meta">Generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Sat Jan 12 2019 17:05:43 GMT-0500 (Eastern Standard Time)</div> </div> <script src="../prettify.js"></script> <script> window.onload = function () { if (typeof prettyPrint === 'function') { prettyPrint(); } }; </script> <script src="../sorter.js"></script> </body> </html>