@mornya/auth-libs
Version:
The project of JWT / JSON Authentication process library
1 lines • 6.67 kB
JavaScript
var o,a,i=this&&this.__assign||function(){return(i=Object.assign||function(e){for(var t,o=1,n=arguments.length;o<n;o++)for(var r in t=arguments[o])Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r]);return e}).apply(this,arguments)},n=this&&this.__rest||function(e,t){var o={};for(r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(o[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var n=0,r=Object.getOwnPropertySymbols(e);n<r.length;n++)t.indexOf(r[n])<0&&Object.prototype.propertyIsEnumerable.call(e,r[n])&&(o[r[n]]=e[r[n]]);return o},r=this&&this.__read||function(e,t){var o="function"==typeof Symbol&&e[Symbol.iterator];if(!o)return e;var n,r,a=o.call(e),i=[];try{for(;(void 0===t||0<t--)&&!(n=a.next()).done;)i.push(n.value)}catch(e){r={error:e}}finally{try{n&&!n.done&&(o=a.return)&&o.call(a)}finally{if(r)throw r.error}}return i},s=this&&this.__spreadArray||function(e,t,o){if(o||2===arguments.length)for(var n,r=0,a=t.length;r<a;r++)!n&&r in t||((n=n||Array.prototype.slice.call(t,0,r))[r]=t[r]);return e.concat(n||Array.prototype.slice.call(t))},c=(Object.defineProperty(exports,"__esModule",{value:!0}),exports.initialize=function initialize(e){if(!window.localStorage)return log(["ERR","black","red"],"Unable to use local storage because we didn't detect the object in window context."),!1;var t=e.initialState,e=n(e,["initialState"]);a=i(i({},d),e),o=i({},t),c.EventableStorage.initialize(),window.addEventListener("eventableStorage",storageEventHandler,!1),a.isProvidedFromPostMessage&&window.addEventListener("message",messageEventHandler,!1);return resolveToken(null!=(e=window.localStorage.getItem(a.storageTokenName))?e:""),g=!1,!0},exports.destroy=function destroy(){o=void 0,clearExpiredTimeout(),window.removeEventListener("eventableStorage",storageEventHandler),a.isProvidedFromPostMessage&&window.removeEventListener("message",messageEventHandler)},exports.saveToken=function saveToken(e,t,o){setToken(e,t,o,!0)},exports.checkTokenStatus=checkTokenStatus,exports.resolveToken=resolveToken,require("@mornya/eventable-storage-libs")),l=require("jwt-decode"),d={type:"JWT",storageTokenName:"accessToken",isProvidedFromPostMessage:!0,isShowLog:!0,expiredName:"exp",expiredIn:-1,notifyExpiredInHour:24,isInvokeExpiredEvent:!0,initialState:{},onReceiveMessage:function(){},onAcquiredToken:function(){return log(["ERR","black","red"],'"onAcquiredToken" function must be implemented!')},onExpiredToken:function(){return log(["ERR","black","red"],'"onExpiredToken" function must be implemented!')},onDroppedToken:function(){return log(["ERR","black","red"],'"onDroppedToken" function must be implemented!')},onInvalidToken:function(){return log(["ERR","black","red"],'"onInvalidToken" function must be implemented!')}},u={statusCode:"EMPTY",parsedToken:null,accessToken:"",expiredIn:-1,restSecond:0,isInitialTime:!1},p=null,g=!0;function getState(){return o}function setState(e){o=i(i({},o),e)}function setToken(e,t,o,n){var r=String(o).length,r=13<=r?o:10===r?new Date(1e3*o).getTime():Date.now()+1e3*o;n?window.localStorage.setItem(e,t,new Date(r)):(window.localStorage.setItemNative(e,t),window.localStorage.setExpire(e,new Date(r),!1))}function checkTokenStatus(e){void 0===e&&(e="");var t=i(i({},u),{accessToken:null!=e?e:"",isInitialTime:g});if(e){if("JWT"===a.type)try{t.parsedToken=(0,l.jwtDecode)(e)}catch(e){return log(["AUTH","black","orange"],"No JWT/JWE provided."),e instanceof l.InvalidTokenError&&console.error(e.message),t.statusCode="NOT_JWT",t}else{if("JSON"!==a.type)return t.statusCode="NOT_ANY",t;try{t.parsedToken=e.startsWith("{")&&e.endsWith("}")?JSON.parse(e):e}catch(e){return log(["AUTH","black","orange"],"No JSON/Serialized provided."),t.statusCode="NOT_JSON",t}}var o,n,r,e=Number(null!=(e=t.parsedToken&&a.expiredName&&t.parsedToken[a.expiredName])?e:a.expiredIn);0<e?(o=String(e).length,n=void 0,t.expiredIn=e,t.restSecond=1,13<=o?(n=e<(r=Date.now()),t.restSecond+=Math.round((e-r)/1e3)):10===o?(n=e<(r=Math.floor(Date.now()/1e3)),t.restSecond+=e-r):(n=e<=0,t.restSecond+=e),t.restSecond<0&&(t.restSecond=0),t.statusCode=n?"EXPIRED":"SUCCEED"):t.statusCode="EXPIRED"}else t.statusCode="EMPTY";return t}function resolveToken(e){var t,o=checkTokenStatus(null!=(e=void 0===e?"":e)?e:"");switch(o.statusCode){case"SUCCEED":a.notifyExpiredInHour&&0<a.notifyExpiredInHour&&(t=Math.floor(o.restSecond/3600))<=a.notifyExpiredInHour&&(1<=t?log(["AUTH","black","gold"],"Access Token will be expired in ".concat(t," hour").concat(1<t?"s":"",".")):(t=Math.ceil(o.restSecond/60)+1,log(["AUTH","black","gold"],"Access Token will be expired in ".concat(t," minute").concat(1<t?"s":"",".")))),a.isInvokeExpiredEvent&&(clearExpiredTimeout(),p=setTimeout(function(){processExpired(i(i({},o),{statusCode:"EXPIRED"}))},1e3*o.restSecond)),!function processSucceed(e){log(["AUTH","white","green"],"Access Token was successfully acquired."),window.localStorage.getItem(a.storageTokenName)||setToken(a.storageTokenName,e.accessToken,e.expiredIn,!1);a.onAcquiredToken({result:e,getState:getState,setState:setState})}(o);break;case"EXPIRED":processExpired(o);break;case"EMPTY":!function processEmpty(e){clearExpiredTimeout(),window.localStorage.removeItemNative(a.storageTokenName),window.localStorage.removeItemNative("".concat(a.storageTokenName,".exp")),a.onDroppedToken({result:e,next:resolveToken,getState:getState,setState:setState})}(o);break;default:!function processInvalid(e){clearExpiredTimeout(),a.onInvalidToken({result:e,next:resolveToken,getState:getState,setState:setState})}(o)}}function clearExpiredTimeout(){p&&(clearTimeout(p),p=null)}function processExpired(e){log(["AUTH","black","gold"],"Access Token was expired."),clearExpiredTimeout(),window.localStorage.removeItemNative(a.storageTokenName),window.localStorage.removeItemNative("".concat(a.storageTokenName,".exp")),a.onExpiredToken({result:e,next:resolveToken,getState:getState,setState:setState})}function storageEventHandler(e){if(e.detail.key===a.storageTokenName)switch(e.detail.action){case"remove":case"clear":a.onDroppedToken({result:i({},u),next:resolveToken,getState:getState,setState:setState});break;case"set":resolveToken(e.detail.value)}}function messageEventHandler(e){null!=e&&e.data&&a.onReceiveMessage&&a.onReceiveMessage({event:e,next:resolveToken,getState:getState,setState:setState})}function log(e,t){var o;a.isShowLog&&(o=(e=r(e,3))[0],console.info.apply(console,s(s([],r(function getTag(e,t,o){var n=3===e.length?"3px 10px 2px 9px":"3px 6px 2px";return["%c".concat(e),"color:".concat(t,";background-color:").concat(o,";border-radius:4px;line-height:1;padding:").concat(n)]}(o,e[1],e[2])),!1),[t],!1)))}