| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153 |
- var RefererParser = require('referer-parser')
- const { URL } = require('url')
- const AnalyticsManager = require('./AnalyticsManager')
- function clearSource(session) {
- if (session) {
- delete session.required_login_for
- delete session.required_login_from_product_medium
- delete session.required_login_from_product_source
- }
- }
- const UTM_KEYS = [
- 'utm_campaign',
- 'utm_source',
- 'utm_term',
- 'utm_medium',
- 'utm_count',
- ]
- function parseUtm(query) {
- var 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
- }
- function setInbound(session, url, query, referrer) {
- const inboundSession = {
- referrer: parseReferrer(referrer, url),
- utm: parseUtm(query),
- }
- if (inboundSession.referrer || inboundSession.utm) {
- session.inbound = inboundSession
- }
- }
- function clearInbound(session) {
- if (session) {
- delete session.inbound
- }
- }
- function addUserProperties(userId, session) {
- if (!session) {
- return
- }
- if (session.required_login_from_product_medium) {
- AnalyticsManager.setUserPropertyForUser(
- userId,
- `registered-from-product-medium`,
- session.required_login_from_product_medium
- )
- if (session.required_login_from_product_source) {
- AnalyticsManager.setUserPropertyForUser(
- userId,
- `registered-from-product-source`,
- session.required_login_from_product_source
- )
- }
- } else if (session.referal_id) {
- AnalyticsManager.setUserPropertyForUser(
- userId,
- `registered-from-bonus-scheme`,
- true
- )
- AnalyticsManager.setUserPropertyForUser(
- userId,
- `registered-from-product-medium`,
- 'bonus-scheme'
- )
- }
- if (session.required_login_for) {
- AnalyticsManager.setUserPropertyForUser(
- userId,
- `registered-from-${session.required_login_for}`,
- true
- )
- }
- if (session.inbound) {
- if (session.inbound.referrer && session.inbound.referrer.medium) {
- AnalyticsManager.setUserPropertyForUser(
- userId,
- `registered-from-referrer-medium`,
- `${session.inbound.referrer.medium
- .charAt(0)
- .toUpperCase()}${session.inbound.referrer.medium.slice(1)}`
- )
- if (session.inbound.referrer.source) {
- AnalyticsManager.setUserPropertyForUser(
- userId,
- `registered-from-referrer-source`,
- session.inbound.referrer.source
- )
- }
- }
- if (session.inbound.utm) {
- for (const utmKey of UTM_KEYS) {
- if (session.inbound.utm[utmKey]) {
- AnalyticsManager.setUserPropertyForUser(
- userId,
- `registered-from-${utmKey.replace('_', '-')}`,
- session.inbound.utm[utmKey]
- )
- }
- }
- }
- }
- }
- module.exports = {
- clearSource,
- setInbound,
- clearInbound,
- addUserProperties,
- }
|