UNPKG

dff-util

Version:

DesignForFeature Utilities

104 lines (103 loc) 3.18 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.JwtValid = exports.JwtDecode = exports.JwtVerify = exports.JwtEncode = void 0; const jwt_encode_1 = __importDefault(require("jwt-encode")); const jwt_decode_1 = require("jwt-decode"); /** * Encode JWT Token with secret key, expiresIn in seconds (86400 = 1 day) default * @param data * @param secret * @param expiresIn * @returns */ const JwtEncode = (data, secret, expiresIn = 86400) => { try { const exp = Math.floor(Date.now() / 1000) + expiresIn; const payload = Object.assign(Object.assign({}, data), { exp }); const token = (0, jwt_encode_1.default)(payload, secret); return token; } catch (err) { console.error('Error encoding JWT:', err); throw new Error('Error encoding JWT'); } }; exports.JwtEncode = JwtEncode; /** * Verify JWT token with secret * @param token * @param secret * @returns */ const JwtVerify = (token, secret) => { if (token) { try { token = token.replace(/jwt |JWT |Bearer |bearer |BEARER /g, ''); const decoded = (0, jwt_decode_1.jwtDecode)(token); const currentTime = Math.floor(Date.now() / 1000); // Check if token is expired if (decoded.exp && decoded.exp < currentTime) { throw new Error('Token has expired'); } // Since `jwt-encode` doesn't provide signature verification, manually check if the payload matches. const regeneratedToken = (0, jwt_encode_1.default)(decoded, secret); if (token !== regeneratedToken) { throw new Error('Token is not valid'); } return decoded; } catch (err) { console.error('Invalid JWT:', err); throw new Error('Token is not valid'); } } else { throw new Error('Auth token is not supplied'); } }; exports.JwtVerify = JwtVerify; /** * Decode JWT Token without verification * @param token * @returns */ const JwtDecode = (token) => { if (token) { try { token = token.replace(/jwt |JWT |Bearer |bearer |BEARER /g, ''); const decoded = (0, jwt_decode_1.jwtDecode)(token); return decoded; } catch (err) { console.error('Error decoding JWT:', err); throw new Error('Token is not valid'); } } else { throw new Error('Auth token is not supplied'); } }; exports.JwtDecode = JwtDecode; /** * Check if token is expired or not * @param token * @returns */ const JwtValid = (token) => { try { if (!token) { return false; } const decoded = (0, jwt_decode_1.jwtDecode)(token); const currentTime = Math.floor(Date.now() / 1000); return !(decoded.exp && decoded.exp < currentTime); } catch (error) { console.error('Invalid JWT:', error); return false; } }; exports.JwtValid = JwtValid;