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 | import * as ClientHints from '@snowplow/browser-plugin-client-hints';
|
32 | import * as Optimizely from '@snowplow/browser-plugin-optimizely';
|
33 | import * as OptimizelyX from '@snowplow/browser-plugin-optimizely-x';
|
34 | import * as PerformanceTiming from '@snowplow/browser-plugin-performance-timing';
|
35 | import * as Consent from '@snowplow/browser-plugin-consent';
|
36 | import * as Geolocation from '@snowplow/browser-plugin-geolocation';
|
37 | import * as GaCookies from '@snowplow/browser-plugin-ga-cookies';
|
38 | import * as LinkClickTracking from '@snowplow/browser-plugin-link-click-tracking';
|
39 | import * as FormTracking from '@snowplow/browser-plugin-form-tracking';
|
40 | import * as ErrorTracking from '@snowplow/browser-plugin-error-tracking';
|
41 | import * as BrowserFeatures from '@snowplow/browser-plugin-browser-features';
|
42 | import * as Timezone from '@snowplow/browser-plugin-timezone';
|
43 | import * as Ecommerce from '@snowplow/browser-plugin-ecommerce';
|
44 | import * as EnhancedEcommerce from '@snowplow/browser-plugin-enhanced-ecommerce';
|
45 | import * as AdTracking from '@snowplow/browser-plugin-ad-tracking';
|
46 | import * as SiteTracking from '@snowplow/browser-plugin-site-tracking';
|
47 | import { plugins } from '../tracker.config';
|
48 | import { BrowserPlugin } from '@snowplow/browser-tracker-core';
|
49 | import { JavaScriptTrackerConfiguration } from './configuration';
|
50 |
|
51 |
|
52 |
|
53 |
|
54 |
|
55 | export function Plugins(configuration: JavaScriptTrackerConfiguration) {
|
56 | const {
|
57 | performanceTiming,
|
58 | gaCookies,
|
59 | geolocation,
|
60 | optimizelyExperiments,
|
61 | optimizelyStates,
|
62 | optimizelyVariations,
|
63 | optimizelyVisitor,
|
64 | optimizelyAudiences,
|
65 | optimizelyDimensions,
|
66 | optimizelySummary,
|
67 | optimizelyXSummary,
|
68 | clientHints,
|
69 | } = configuration?.contexts ?? {};
|
70 | const activatedPlugins: Array<[BrowserPlugin, {} | Record<string, Function>]> = [];
|
71 |
|
72 | if (
|
73 | plugins.optimizely &&
|
74 | (optimizelySummary ||
|
75 | optimizelyExperiments ||
|
76 | optimizelyStates ||
|
77 | optimizelyVariations ||
|
78 | optimizelyVisitor ||
|
79 | optimizelyAudiences ||
|
80 | optimizelyDimensions)
|
81 | ) {
|
82 | const { OptimizelyPlugin, ...apiMethods } = Optimizely;
|
83 | activatedPlugins.push([
|
84 | OptimizelyPlugin(
|
85 | optimizelySummary,
|
86 | optimizelyExperiments,
|
87 | optimizelyStates,
|
88 | optimizelyVariations,
|
89 | optimizelyVisitor,
|
90 | optimizelyAudiences,
|
91 | optimizelyDimensions
|
92 | ),
|
93 | apiMethods,
|
94 | ]);
|
95 | }
|
96 |
|
97 | if (plugins.performanceTiming && performanceTiming) {
|
98 | const { PerformanceTimingPlugin, ...apiMethods } = PerformanceTiming;
|
99 | activatedPlugins.push([PerformanceTimingPlugin(), apiMethods]);
|
100 | }
|
101 |
|
102 | if (plugins.optimizelyX && optimizelyXSummary) {
|
103 | const { OptimizelyXPlugin, ...apiMethods } = OptimizelyX;
|
104 | activatedPlugins.push([OptimizelyXPlugin(), apiMethods]);
|
105 | }
|
106 |
|
107 | if (plugins.clientHints && clientHints) {
|
108 | const { ClientHintsPlugin, ...apiMethods } = ClientHints;
|
109 | activatedPlugins.push([
|
110 | ClientHintsPlugin(typeof clientHints === 'object' && clientHints.includeHighEntropy),
|
111 | apiMethods,
|
112 | ]);
|
113 | }
|
114 |
|
115 | if (plugins.gaCookies && gaCookies) {
|
116 | const { GaCookiesPlugin, ...apiMethods } = GaCookies;
|
117 | activatedPlugins.push([GaCookiesPlugin(), apiMethods]);
|
118 | }
|
119 |
|
120 | if (plugins.consent) {
|
121 | const { ConsentPlugin, ...apiMethods } = Consent;
|
122 | activatedPlugins.push([ConsentPlugin(), apiMethods]);
|
123 | }
|
124 |
|
125 | if (plugins.geolocation) {
|
126 | const { GeolocationPlugin, ...apiMethods } = Geolocation;
|
127 | activatedPlugins.push([GeolocationPlugin(geolocation), apiMethods]);
|
128 | }
|
129 |
|
130 | if (plugins.linkClickTracking) {
|
131 | const { LinkClickTrackingPlugin, ...apiMethods } = LinkClickTracking;
|
132 | activatedPlugins.push([LinkClickTrackingPlugin(), apiMethods]);
|
133 | }
|
134 |
|
135 | if (plugins.formTracking) {
|
136 | const { FormTrackingPlugin, ...apiMethods } = FormTracking;
|
137 | activatedPlugins.push([FormTrackingPlugin(), apiMethods]);
|
138 | }
|
139 |
|
140 | if (plugins.errorTracking) {
|
141 | const { ErrorTrackingPlugin, ...apiMethods } = ErrorTracking;
|
142 | activatedPlugins.push([ErrorTrackingPlugin(), apiMethods]);
|
143 | }
|
144 |
|
145 | if (plugins.ecommerce) {
|
146 | const { EcommercePlugin, ...apiMethods } = Ecommerce;
|
147 | activatedPlugins.push([EcommercePlugin(), apiMethods]);
|
148 | }
|
149 |
|
150 | if (plugins.enhancedEcommerce) {
|
151 | const { EnhancedEcommercePlugin, ...apiMethods } = EnhancedEcommerce;
|
152 | activatedPlugins.push([EnhancedEcommercePlugin(), apiMethods]);
|
153 | }
|
154 |
|
155 | if (plugins.adTracking) {
|
156 | const { AdTrackingPlugin, ...apiMethods } = AdTracking;
|
157 | activatedPlugins.push([AdTrackingPlugin(), apiMethods]);
|
158 | }
|
159 |
|
160 | if (plugins.siteTracking) {
|
161 | const { SiteTrackingPlugin, ...apiMethods } = SiteTracking;
|
162 | activatedPlugins.push([SiteTrackingPlugin(), apiMethods]);
|
163 | }
|
164 |
|
165 | if (plugins.browserFeatures) {
|
166 | const { BrowserFeaturesPlugin, ...apiMethods } = BrowserFeatures;
|
167 | activatedPlugins.push([BrowserFeaturesPlugin(), apiMethods]);
|
168 | }
|
169 |
|
170 | if (plugins.timezone) {
|
171 | const { TimezonePlugin, ...apiMethods } = Timezone;
|
172 | activatedPlugins.push([TimezonePlugin(), apiMethods]);
|
173 | }
|
174 |
|
175 | return activatedPlugins;
|
176 | }
|