forked from snowplow/documentation
-
Notifications
You must be signed in to change notification settings - Fork 0
/
snowplow.js
123 lines (111 loc) · 3.55 KB
/
snowplow.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
import ExecutionEnvironment from '@docusaurus/ExecutionEnvironment'
import {
newTracker,
trackPageView,
addGlobalContexts,
enableActivityTracking,
disableAnonymousTracking,
} from '@snowplow/browser-tracker'
import {
LinkClickTrackingPlugin,
enableLinkClickTracking,
refreshLinkClickTracking,
} from '@snowplow/browser-plugin-link-click-tracking'
import { onPreferencesChanged } from 'cookie-though'
import Cookies from 'js-cookie'
import { COOKIE_PREF_KEY, DOCS_SITE_URLS } from './src/constants/config'
import { reloadOnce } from './src/helpers/reloadOnce'
import { isEmpty, pickBy } from 'lodash'
const createTrackerConfig = (cookieName) => {
const appId = DOCS_SITE_URLS.includes(window.location.hostname)
? 'docs2'
: 'test'
const domain = location.host.split('.').reverse()
const trackerConfig = {
appId,
eventMethod: 'post',
plugins: [LinkClickTrackingPlugin()],
cookieDomain: `.${domain[1]}.${domain[0]}`,
cookieName,
cookieSameSite: 'Lax',
contexts: {
webPage: true,
performanceTiming: true,
gaCookies: true,
},
}
const cookiePreferences = Cookies.get(COOKIE_PREF_KEY)
if (!cookiePreferences || cookiePreferences.includes('analytics:0')) {
trackerConfig.anonymousTracking = {
withServerAnonymisation: true,
}
}
return trackerConfig
}
const setupBrowserTracker = () => {
newTracker(
'snplow5',
'https://collector.snowplow.io',
createTrackerConfig('_sp5_')
)
newTracker('biz1', 'https://c.snowplow.io', createTrackerConfig('_sp_biz1_'))
const selectedTabContext = () => {
const data = pickBy({
cloud: localStorage.getItem("docusaurus.tab.cloud"),
data_warehouse: localStorage.getItem("docusaurus.tab.warehouse")
})
if (!_.isEmpty(data)) return {
schema: 'iglu:com.snowplowanalytics.docs/selected_tabs/jsonschema/1-0-0',
data
}
}
addGlobalContexts([selectedTabContext])
enableLinkClickTracking()
refreshLinkClickTracking()
enableActivityTracking({
heartbeatDelay: 10,
minimumVisitLength: 10,
}) // precise tracking for the unified log
}
if (ExecutionEnvironment.canUseDOM) {
setupBrowserTracker()
onPreferencesChanged((preferences) => {
preferences.cookieOptions.forEach(({ id, isEnabled }) => {
if (id === 'analytics') {
if (isEnabled) {
disableAnonymousTracking({
stateStorageStrategy: 'cookieAndLocalStorage',
})
// to now track it with all the extra data
trackPageView()
} else {
const cookieKeys = document.cookie
.split(';')
.reduce((ac, str) => [...ac, str?.split('=')[0].trim()], [])
const snowplowCookies = cookieKeys.filter((cookieKey) =>
cookieKey.startsWith('_sp5_')
)
snowplowCookies.forEach((snowplowCookie) =>
Cookies.remove(snowplowCookie)
)
Cookies.remove('sp')
reloadOnce()
}
}
})
})
}
const module = {
onRouteDidUpdate({ location, previousLocation }) {
if (location.pathname !== previousLocation?.pathname) {
// see https://github.com/facebook/docusaurus/pull/7424 regarding setTimeout
setTimeout(() => {
trackPageView()
// we need to call it whenever a new link appears on the page
// see https://docs.snowplow.io/docs/collecting-data/collecting-from-own-applications/javascript-trackers/javascript-tracker/javascript-tracker-v3/tracking-events/#refreshlinkclicktracking
refreshLinkClickTracking()
})
}
},
}
export default module