UNPKG

web-analyst

Version:

Web Analyst is a simple back-end tracking system to measure your web app performance.

81 lines (67 loc) 1.83 kB
const jsonwebtoken = require("jsonwebtoken"); let secretToken = process.env.JWT_SECRET_TOKEN; /** * @returns {*|string} */ const getJwtSecretToken = () => { return secretToken; }; const setJwtSecretToken = (token) => { secretToken = token; }; /** * * @param id * @param {"HS256"|"RS256"|"HS384"|"HS512"|"RS512"|"PS256"|"PS384"|"PS512"|"ES256"|"ES384"|"ES512"|"none"} [algorithm="RS256"] * @param expiration * @param loggable * @returns {string|null} */ const generateToken = (id, {algorithm = "HS256", expiration = Date.now() + (60 * 60), loggable = null} = {}) => { try { let jwtSecretKey = getJwtSecretToken(); if (!jwtSecretKey) { loggable.error({lid: "WA1001"}, `Server error. Could not generate token`); return null; } let data = { exp: expiration, id }; return jsonwebtoken.sign(data, jwtSecretKey, {algorithm}); } catch (e) { loggable.error({lid: "WA1003"}, e.message); } return null; }; /** * @see https://stackoverflow.com/questions/61665881/how-can-we-store-jwt-token-in-http-only-cookies * @returns {Promise<*>} * @param token * @param algorithm * @param loggable */ const decodeToken = async (token, {algorithm = "HS256", loggable = null} = {}) => { try { const jwtSecret = getJwtSecretToken(); return await jsonwebtoken.verify(token, jwtSecret, {algorithm}); } catch (err) { loggable.error(err); } return null; }; module.exports.getJwtSecretToken = getJwtSecretToken; module.exports.setJwtSecretToken = setJwtSecretToken; module.exports.generateToken = generateToken; module.exports.decodeToken = decodeToken;