dff-util
Version:
DesignForFeature Utilities
104 lines (103 loc) • 3.18 kB
JavaScript
;
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;