UNPKG

kyper-matter

Version:

Library to provide simple application functionality like authentication and local/session/token storage for Tesselate applications.

106 lines (96 loc) 2.49 kB
import config from '../config' import logger from './logger' import * as cookiesUtil from './cookies' import * as envStorage from './envStorage' import jwtDecode from 'jwt-decode' import { isString } from 'lodash' let token = { /** Get string value of token * @return {String} * @example * console.log('String value of current token', token.string) */ get string () { const cookie = cookiesUtil.getCookie(config.tokenName) if (cookie === '') return null return cookie }, /** * @description Get decoded data within token (unencrypted data only) * @return {Object} * @example * console.log('Data of current token:', token.data) */ get data () { if (!this.string) return null if (envStorage.getItem(config.tokenDataName)) { return envStorage.getItem(config.tokenDataName) } else { return decodeToken(this.string) } }, /** * @description Set token data */ set data (tokenData) { envStorage.setItem(config.tokenDataName, tokenData) logger.debug({ description: 'Token data was set to session storage.', tokenData, func: 'data', obj: 'token' }) }, /** * @description Set token value as a string */ set string (tokenStr) { // Handle object being passed if (!isString(tokenStr)) { // Token is included in object logger.log({ description: 'Token data is not string.', tokenStr, func: 'string', obj: 'token' }) throw new Error('Token data should be a string') } cookiesUtil.setCookie(config.tokenName, tokenStr, 7) this.data = decodeToken(tokenStr) logger.debug({ description: 'Token was set to cookies.', func: 'string', obj: 'token' }) }, /** Save token data */ save (tokenStr) { this.string = tokenStr }, /** Delete token data */ delete () { // Remove string token cookiesUtil.deleteCookie(config.tokenName) // Remove user data envStorage.removeItem(config.tokenDataName) logger.log({ description: 'Token was removed.', func: 'delete', obj: 'token' }) } } export default token /** Safley decode a JWT string * @private * @return {Object} */ function decodeToken (tokenStr) { if (!tokenStr || tokenStr === '') return null try { return jwtDecode(tokenStr) } catch (error) { logger.error({ description: 'Error decoding token.', error, func: 'decodeToken', file: 'token' }) return null } }