serializers.js 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. const OError = require('@overleaf/o-error')
  2. function errSerializer(err) {
  3. if (!err) {
  4. return err
  5. }
  6. return {
  7. message: err.message,
  8. name: err.name,
  9. stack: OError.getFullStack(err),
  10. info: OError.getFullInfo(err),
  11. code: err.code,
  12. signal: err.signal
  13. }
  14. }
  15. function reqSerializer(req) {
  16. if (!req) {
  17. return req
  18. }
  19. const headers = req.headers || {}
  20. return {
  21. method: req.method,
  22. url: req.originalUrl || req.url,
  23. remoteAddress: getRemoteIp(req),
  24. headers: {
  25. referer: headers.referer || headers.referrer,
  26. 'user-agent': headers['user-agent'],
  27. 'content-length': headers['content-length']
  28. }
  29. }
  30. }
  31. function resSerializer(res) {
  32. if (!res) {
  33. return res
  34. }
  35. return {
  36. statusCode: res.statusCode,
  37. headers: {
  38. 'content-length': res.getHeader && res.getHeader('content-length')
  39. }
  40. }
  41. }
  42. function getRemoteIp(req) {
  43. if (req.ip) {
  44. return req.ip
  45. }
  46. if (req.socket) {
  47. if (req.socket.socket && req.socket.socket.remoteAddress) {
  48. return req.socket.socket.remoteAddress
  49. } else if (req.socket.remoteAddress) {
  50. return req.socket.remoteAddress
  51. }
  52. }
  53. return null
  54. }
  55. module.exports = { err: errSerializer, req: reqSerializer, res: resSerializer }