RequestHelper.js 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. const RefererParser = require('referer-parser')
  2. const { URL } = require('url')
  3. const UTM_KEYS = [
  4. 'utm_campaign',
  5. 'utm_source',
  6. 'utm_term',
  7. 'utm_content',
  8. 'utm_medium',
  9. 'utm_count',
  10. ]
  11. function parseUtm(query) {
  12. const utmValues = {}
  13. for (const utmKey of UTM_KEYS) {
  14. if (query[utmKey]) {
  15. utmValues[utmKey] = query[utmKey]
  16. }
  17. }
  18. return Object.keys(utmValues).length > 0 ? utmValues : null
  19. }
  20. function parseReferrer(referrer, url) {
  21. if (!referrer) {
  22. return {
  23. medium: 'direct',
  24. }
  25. }
  26. const parsedReferrer = new RefererParser(referrer, url)
  27. const referrerValues = {
  28. medium: parsedReferrer.medium,
  29. source: parsedReferrer.referer || 'other',
  30. }
  31. if (referrerValues.medium === 'unknown') {
  32. try {
  33. const referrerHostname = new URL(referrer).hostname
  34. if (referrerHostname) {
  35. referrerValues.medium = 'link'
  36. referrerValues.source = referrerHostname
  37. }
  38. } catch (error) {
  39. // ignore referrer parsing errors
  40. }
  41. }
  42. return referrerValues
  43. }
  44. module.exports = {
  45. UTM_KEYS,
  46. parseUtm,
  47. parseReferrer,
  48. }