diff --git a/src/app/api/send/route.ts b/src/app/api/send/route.ts index 482aad5c..bd880104 100644 --- a/src/app/api/send/route.ts +++ b/src/app/api/send/route.ts @@ -146,6 +146,21 @@ export async function POST(request: Request) { const urlQuery = currentUrl.search.substring(1); const urlDomain = currentUrl.hostname.replace(/^www./, ''); + // UTM Params + const utmSource = currentUrl.searchParams.get('utm_source'); + const utmMedium = currentUrl.searchParams.get('utm_medium'); + const utmCampaign = currentUrl.searchParams.get('utm_campaign'); + const utmContent = currentUrl.searchParams.get('utm_content'); + const utmTerm = currentUrl.searchParams.get('utm_term'); + + // Click IDs + const gclid = currentUrl.searchParams.get('gclid'); + const fbclid = currentUrl.searchParams.get('fbclid'); + const msclkid = currentUrl.searchParams.get('msclkid'); + const ttclid = currentUrl.searchParams.get('ttclid'); + const lifatid = currentUrl.searchParams.get('li_fat_id'); + const twclid = currentUrl.searchParams.get('twclid'); + if (process.env.REMOVE_TRAILING_SLASH) { urlPath = urlPath.replace(/(.+)\/$/, '$1'); } @@ -171,10 +186,21 @@ export async function POST(request: Request) { visitId, urlPath: safeDecodeURI(urlPath), urlQuery, + utmSource, + utmMedium, + utmCampaign, + utmContent, + utmTerm, referrerPath: safeDecodeURI(referrerPath), referrerQuery, referrerDomain, pageTitle: safeDecodeURIComponent(title), + gclid, + fbclid, + msclkid, + ttclid, + lifatid, + twclid, eventName: name, eventData: data, hostname: hostname || urlDomain, diff --git a/src/queries/sql/events/saveEvent.ts b/src/queries/sql/events/saveEvent.ts index 148b03f3..af58bcea 100644 --- a/src/queries/sql/events/saveEvent.ts +++ b/src/queries/sql/events/saveEvent.ts @@ -12,10 +12,21 @@ export async function saveEvent(args: { visitId: string; urlPath: string; urlQuery?: string; + utmSource?: string; + utmMedium?: string; + utmCampaign?: string; + utmContent?: string; + utmTerm?: string; referrerPath?: string; referrerQuery?: string; referrerDomain?: string; pageTitle?: string; + gclid?: string; + fbclid?: string; + msclkid?: string; + ttclid?: string; + lifatid?: string; + twclid?: string; eventName?: string; eventData?: any; hostname?: string; @@ -43,9 +54,20 @@ async function relationalQuery(data: { visitId: string; urlPath: string; urlQuery?: string; + utmSource?: string; + utmMedium?: string; + utmCampaign?: string; + utmContent?: string; + utmTerm?: string; referrerPath?: string; referrerQuery?: string; referrerDomain?: string; + gclid?: string; + fbclid?: string; + msclkid?: string; + ttclid?: string; + lifatid?: string; + twclid?: string; pageTitle?: string; eventName?: string; eventData?: any; @@ -58,12 +80,23 @@ async function relationalQuery(data: { visitId, urlPath, urlQuery, + utmSource, + utmMedium, + utmCampaign, + utmContent, + utmTerm, referrerPath, referrerQuery, referrerDomain, eventName, eventData, pageTitle, + gclid, + fbclid, + msclkid, + ttclid, + lifatid, + twclid, tag, createdAt, } = data; @@ -77,10 +110,21 @@ async function relationalQuery(data: { visitId, urlPath: urlPath?.substring(0, URL_LENGTH), urlQuery: urlQuery?.substring(0, URL_LENGTH), + utmSource, + utmMedium, + utmCampaign, + utmContent, + utmTerm, referrerPath: referrerPath?.substring(0, URL_LENGTH), referrerQuery: referrerQuery?.substring(0, URL_LENGTH), referrerDomain: referrerDomain?.substring(0, URL_LENGTH), pageTitle: pageTitle?.substring(0, PAGE_TITLE_LENGTH), + gclid, + fbclid, + msclkid, + ttclid, + lifatid, + twclid, eventType: eventName ? EVENT_TYPE.customEvent : EVENT_TYPE.pageView, eventName: eventName ? eventName?.substring(0, EVENT_NAME_LENGTH) : null, tag, @@ -109,10 +153,21 @@ async function clickhouseQuery(data: { visitId: string; urlPath: string; urlQuery?: string; + utmSource?: string; + utmMedium?: string; + utmCampaign?: string; + utmContent?: string; + utmTerm?: string; referrerPath?: string; referrerQuery?: string; referrerDomain?: string; pageTitle?: string; + gclid?: string; + fbclid?: string; + msclkid?: string; + ttclid?: string; + lifatid?: string; + twclid?: string; eventName?: string; eventData?: any; hostname?: string; @@ -134,9 +189,20 @@ async function clickhouseQuery(data: { visitId, urlPath, urlQuery, + utmSource, + utmMedium, + utmCampaign, + utmContent, + utmTerm, referrerPath, referrerQuery, referrerDomain, + gclid, + fbclid, + msclkid, + ttclid, + lifatid, + twclid, pageTitle, eventName, eventData, @@ -169,10 +235,21 @@ async function clickhouseQuery(data: { city: city, url_path: urlPath?.substring(0, URL_LENGTH), url_query: urlQuery?.substring(0, URL_LENGTH), + utm_source: utmSource, + utm_medium: utmMedium, + utm_campaign: utmCampaign, + utm_content: utmContent, + utm_term: utmTerm, referrer_path: referrerPath?.substring(0, URL_LENGTH), referrer_query: referrerQuery?.substring(0, URL_LENGTH), referrer_domain: referrerDomain?.substring(0, URL_LENGTH), page_title: pageTitle?.substring(0, PAGE_TITLE_LENGTH), + gclid: gclid, + fbclid: fbclid, + msclkid: msclkid, + ttclid: ttclid, + li_fat_id: lifatid, + twclid: twclid, event_type: eventName ? EVENT_TYPE.customEvent : EVENT_TYPE.pageView, event_name: eventName ? eventName?.substring(0, EVENT_NAME_LENGTH) : null, tag: tag,