| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- const RefererParser = require('referer-parser')
- const { URL } = require('url')
- const UTM_KEYS = [
- 'utm_campaign',
- 'utm_source',
- 'utm_term',
- 'utm_content',
- 'utm_medium',
- 'utm_count',
- ]
- function parseUtm(query) {
- const utmValues = {}
- for (const utmKey of UTM_KEYS) {
- if (query[utmKey]) {
- utmValues[utmKey] = query[utmKey]
- }
- }
- return Object.keys(utmValues).length > 0 ? utmValues : null
- }
- function parseReferrer(referrer, url) {
- if (!referrer) {
- return {
- medium: 'direct',
- }
- }
- const parsedReferrer = new RefererParser(referrer, url)
- const referrerValues = {
- medium: parsedReferrer.medium,
- source: parsedReferrer.referer || 'other',
- }
- if (referrerValues.medium === 'unknown') {
- try {
- const referrerHostname = new URL(referrer).hostname
- if (referrerHostname) {
- referrerValues.medium = 'link'
- referrerValues.source = referrerHostname
- }
- } catch (error) {
- // ignore referrer parsing errors
- }
- }
- return referrerValues
- }
- module.exports = {
- UTM_KEYS,
- parseUtm,
- parseReferrer,
- }
|