JsonWebToken.mjs 730 B

12345678910111213141516171819202122232425262728293031
  1. import { callbackify, promisify } from 'node:util'
  2. import JWT from 'jsonwebtoken'
  3. import Settings from '@overleaf/settings'
  4. const jwtSign = promisify(JWT.sign)
  5. async function sign(payload, options = {}) {
  6. const key = Settings.jwt.key
  7. const algorithm = Settings.jwt.algorithm
  8. if (!key || !algorithm) {
  9. throw new Error('missing JWT configuration')
  10. }
  11. const token = await jwtSign(payload, key, { ...options, algorithm })
  12. return token
  13. }
  14. function getDecoded(token, options = {}) {
  15. const key = Settings.jwt.key
  16. const decoded = JWT.verify(token, key, {
  17. ignoreExpiration: options.ignoreExpiration,
  18. })
  19. return decoded
  20. }
  21. export default {
  22. sign: callbackify(sign),
  23. getDecoded,
  24. promises: {
  25. sign,
  26. },
  27. }