@amplitude/plugin-page-view-tracking-browser 2.6.4 → 2.7.0-feat-zoning-1211.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/cjs/page-view-tracking.d.ts +1 -0
- package/lib/cjs/page-view-tracking.d.ts.map +1 -1
- package/lib/cjs/page-view-tracking.js +37 -16
- package/lib/cjs/page-view-tracking.js.map +1 -1
- package/lib/esm/page-view-tracking.d.ts +1 -0
- package/lib/esm/page-view-tracking.d.ts.map +1 -1
- package/lib/esm/page-view-tracking.js +37 -16
- package/lib/esm/page-view-tracking.js.map +1 -1
- package/lib/scripts/amplitude-min.umd.js +1 -1
- package/lib/scripts/amplitude-min.umd.js.gz +0 -0
- package/lib/scripts/page-view-tracking.d.ts +1 -0
- package/lib/scripts/page-view-tracking.d.ts.map +1 -1
- package/package.json +2 -2
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { CreatePageViewTrackingPlugin, Options } from './typings/page-view-tracking';
|
|
2
2
|
export declare const defaultPageViewEvent = "[Amplitude] Page Viewed";
|
|
3
|
+
export declare const PAGE_VIEW_SESSION_STORAGE_KEY = "AMP_PAGE_VIEW";
|
|
3
4
|
export declare const pageViewTrackingPlugin: CreatePageViewTrackingPlugin;
|
|
4
5
|
export declare const shouldTrackHistoryPageView: (trackingOption: Options['trackHistoryChanges'], newURLStr: string, oldURLStr: string) => boolean;
|
|
5
6
|
//# sourceMappingURL=page-view-tracking.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"page-view-tracking.d.ts","sourceRoot":"","sources":["../../src/page-view-tracking.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"page-view-tracking.d.ts","sourceRoot":"","sources":["../../src/page-view-tracking.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,4BAA4B,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAC;AAGrF,eAAO,MAAM,oBAAoB,4BAA4B,CAAC;AAC9D,eAAO,MAAM,6BAA6B,kBAAkB,CAAC;AAM7D,eAAO,MAAM,sBAAsB,EAAE,4BA+JpC,CAAC;AAeF,eAAO,MAAM,0BAA0B,mBACrB,OAAO,CAAC,qBAAqB,CAAC,aACnC,MAAM,aACN,MAAM,KAChB,OAaF,CAAC"}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.shouldTrackHistoryPageView = exports.pageViewTrackingPlugin = exports.defaultPageViewEvent = void 0;
|
|
3
|
+
exports.shouldTrackHistoryPageView = exports.pageViewTrackingPlugin = exports.PAGE_VIEW_SESSION_STORAGE_KEY = exports.defaultPageViewEvent = void 0;
|
|
4
4
|
var tslib_1 = require("tslib");
|
|
5
5
|
var analytics_core_1 = require("@amplitude/analytics-core");
|
|
6
6
|
var utils_1 = require("./utils");
|
|
7
7
|
exports.defaultPageViewEvent = '[Amplitude] Page Viewed';
|
|
8
|
+
exports.PAGE_VIEW_SESSION_STORAGE_KEY = 'AMP_PAGE_VIEW';
|
|
8
9
|
var pageViewTrackingPlugin = function (options) {
|
|
9
10
|
if (options === void 0) { options = {}; }
|
|
10
11
|
var amplitude;
|
|
@@ -12,6 +13,7 @@ var pageViewTrackingPlugin = function (options) {
|
|
|
12
13
|
var loggerProvider = undefined;
|
|
13
14
|
var isTracking = false;
|
|
14
15
|
var localConfig;
|
|
16
|
+
var sessionStorage;
|
|
15
17
|
var trackOn = options.trackOn, trackHistoryChanges = options.trackHistoryChanges, _a = options.eventType, eventType = _a === void 0 ? exports.defaultPageViewEvent : _a;
|
|
16
18
|
var getDecodeURI = function (locationStr) {
|
|
17
19
|
var decodedLocationStr = locationStr;
|
|
@@ -24,7 +26,7 @@ var pageViewTrackingPlugin = function (options) {
|
|
|
24
26
|
}
|
|
25
27
|
return decodedLocationStr;
|
|
26
28
|
};
|
|
27
|
-
var createPageViewEvent = function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
|
|
29
|
+
var createPageViewEvent = function (pageViewId) { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
|
|
28
30
|
var locationHREF, _a;
|
|
29
31
|
var _b;
|
|
30
32
|
return tslib_1.__generator(this, function (_c) {
|
|
@@ -38,7 +40,7 @@ var pageViewTrackingPlugin = function (options) {
|
|
|
38
40
|
return [4 /*yield*/, getCampaignParams()];
|
|
39
41
|
case 1: return [2 /*return*/, (_b.event_properties = tslib_1.__assign.apply(void 0, [tslib_1.__assign.apply(void 0, _a.concat([(_c.sent())])), { '[Amplitude] Page Domain':
|
|
40
42
|
/* istanbul ignore next */ (typeof location !== 'undefined' && location.hostname) || '', '[Amplitude] Page Location': locationHREF, '[Amplitude] Page Path':
|
|
41
|
-
/* istanbul ignore next */ (typeof location !== 'undefined' && getDecodeURI(location.pathname)) || '', '[Amplitude] Page Title': /* istanbul ignore next */ (0, analytics_core_1.getPageTitle)(analytics_core_1.replaceSensitiveString), '[Amplitude] Page URL': locationHREF.split('?')[0] }]),
|
|
43
|
+
/* istanbul ignore next */ (typeof location !== 'undefined' && getDecodeURI(location.pathname)) || '', '[Amplitude] Page Title': /* istanbul ignore next */ (0, analytics_core_1.getPageTitle)(analytics_core_1.replaceSensitiveString), '[Amplitude] Page URL': locationHREF.split('?')[0], '[Amplitude] Page View ID': pageViewId }]),
|
|
42
44
|
_b)];
|
|
43
45
|
}
|
|
44
46
|
});
|
|
@@ -47,7 +49,7 @@ var pageViewTrackingPlugin = function (options) {
|
|
|
47
49
|
/* istanbul ignore next */
|
|
48
50
|
var previousURL = typeof location !== 'undefined' ? location.href : null;
|
|
49
51
|
var trackHistoryPageView = function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
|
|
50
|
-
var newURL, shouldTrackPageView, _a, _b, _c;
|
|
52
|
+
var newURL, shouldTrackPageView, pageViewId, _a, _b, _c;
|
|
51
53
|
return tslib_1.__generator(this, function (_d) {
|
|
52
54
|
switch (_d.label) {
|
|
53
55
|
case 0:
|
|
@@ -59,6 +61,11 @@ var pageViewTrackingPlugin = function (options) {
|
|
|
59
61
|
// but `previousURL` is only updated after the second `pushState` producing two page viewed events
|
|
60
62
|
previousURL = newURL;
|
|
61
63
|
if (!shouldTrackPageView) return [3 /*break*/, 4];
|
|
64
|
+
pageViewId = void 0;
|
|
65
|
+
if (sessionStorage) {
|
|
66
|
+
pageViewId = (0, analytics_core_1.UUID)();
|
|
67
|
+
void sessionStorage.set(exports.PAGE_VIEW_SESSION_STORAGE_KEY, { pageViewId: pageViewId });
|
|
68
|
+
}
|
|
62
69
|
/* istanbul ignore next */
|
|
63
70
|
loggerProvider === null || loggerProvider === void 0 ? void 0 : loggerProvider.log('Tracking page view event');
|
|
64
71
|
if (!(amplitude === null || amplitude === void 0)) return [3 /*break*/, 1];
|
|
@@ -66,7 +73,7 @@ var pageViewTrackingPlugin = function (options) {
|
|
|
66
73
|
return [3 /*break*/, 3];
|
|
67
74
|
case 1:
|
|
68
75
|
_c = (_b = amplitude).track;
|
|
69
|
-
return [4 /*yield*/, createPageViewEvent()];
|
|
76
|
+
return [4 /*yield*/, createPageViewEvent(pageViewId)];
|
|
70
77
|
case 2:
|
|
71
78
|
_a = _c.apply(_b, [_d.sent()]);
|
|
72
79
|
_d.label = 3;
|
|
@@ -78,14 +85,14 @@ var pageViewTrackingPlugin = function (options) {
|
|
|
78
85
|
});
|
|
79
86
|
}); };
|
|
80
87
|
/* istanbul ignore next */
|
|
81
|
-
var
|
|
88
|
+
var handlePageChange = function () {
|
|
82
89
|
void trackHistoryPageView();
|
|
83
90
|
};
|
|
84
91
|
var plugin = {
|
|
85
92
|
name: '@amplitude/plugin-page-view-tracking-browser',
|
|
86
93
|
type: 'enrichment',
|
|
87
94
|
setup: function (config, client) { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
|
|
88
|
-
var _a, _b;
|
|
95
|
+
var pageViewId, _a, _b;
|
|
89
96
|
return tslib_1.__generator(this, function (_c) {
|
|
90
97
|
switch (_c.label) {
|
|
91
98
|
case 0:
|
|
@@ -95,7 +102,9 @@ var pageViewTrackingPlugin = function (options) {
|
|
|
95
102
|
loggerProvider.log('Installing @amplitude/plugin-page-view-tracking-browser');
|
|
96
103
|
isTracking = true;
|
|
97
104
|
if (globalScope) {
|
|
98
|
-
|
|
105
|
+
// init session storage
|
|
106
|
+
sessionStorage = new analytics_core_1.BrowserStorage(globalScope.sessionStorage);
|
|
107
|
+
globalScope.addEventListener('popstate', handlePageChange);
|
|
99
108
|
/* istanbul ignore next */
|
|
100
109
|
// There is no global browser listener for changes to history, so we have
|
|
101
110
|
// to modify pushState directly.
|
|
@@ -106,15 +115,20 @@ var pageViewTrackingPlugin = function (options) {
|
|
|
106
115
|
var _b = tslib_1.__read(_a, 3), state = _b[0], unused = _b[1], url = _b[2];
|
|
107
116
|
target.apply(thisArg, [state, unused, url]);
|
|
108
117
|
if (isTracking) {
|
|
109
|
-
|
|
118
|
+
handlePageChange();
|
|
110
119
|
}
|
|
111
120
|
},
|
|
112
121
|
});
|
|
113
122
|
}
|
|
114
123
|
if (!shouldTrackOnPageLoad()) return [3 /*break*/, 2];
|
|
115
124
|
loggerProvider.log('Tracking page view event');
|
|
125
|
+
pageViewId = void 0;
|
|
126
|
+
if (sessionStorage) {
|
|
127
|
+
pageViewId = (0, analytics_core_1.UUID)();
|
|
128
|
+
void sessionStorage.set(exports.PAGE_VIEW_SESSION_STORAGE_KEY, { pageViewId: pageViewId });
|
|
129
|
+
}
|
|
116
130
|
_b = (_a = amplitude).track;
|
|
117
|
-
return [4 /*yield*/, createPageViewEvent()];
|
|
131
|
+
return [4 /*yield*/, createPageViewEvent(pageViewId)];
|
|
118
132
|
case 1:
|
|
119
133
|
_b.apply(_a, [_c.sent()]);
|
|
120
134
|
_c.label = 2;
|
|
@@ -123,20 +137,27 @@ var pageViewTrackingPlugin = function (options) {
|
|
|
123
137
|
});
|
|
124
138
|
}); },
|
|
125
139
|
execute: function (event) { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
|
|
126
|
-
var pageViewEvent;
|
|
140
|
+
var pageViewId, pageViewSession, pageViewEvent;
|
|
127
141
|
return tslib_1.__generator(this, function (_a) {
|
|
128
142
|
switch (_a.label) {
|
|
129
143
|
case 0:
|
|
130
|
-
if (!(trackOn === 'attribution' && isCampaignEvent(event))) return [3 /*break*/,
|
|
144
|
+
if (!(trackOn === 'attribution' && isCampaignEvent(event))) return [3 /*break*/, 4];
|
|
131
145
|
/* istanbul ignore next */ // loggerProvider should be defined by the time execute is invoked
|
|
132
146
|
loggerProvider === null || loggerProvider === void 0 ? void 0 : loggerProvider.log('Enriching campaign event to page view event with campaign parameters');
|
|
133
|
-
|
|
147
|
+
pageViewId = void 0;
|
|
148
|
+
if (!sessionStorage) return [3 /*break*/, 2];
|
|
149
|
+
return [4 /*yield*/, sessionStorage.get(exports.PAGE_VIEW_SESSION_STORAGE_KEY)];
|
|
134
150
|
case 1:
|
|
151
|
+
pageViewSession = _a.sent();
|
|
152
|
+
pageViewId = pageViewSession === null || pageViewSession === void 0 ? void 0 : pageViewSession.pageViewId;
|
|
153
|
+
_a.label = 2;
|
|
154
|
+
case 2: return [4 /*yield*/, createPageViewEvent(pageViewId)];
|
|
155
|
+
case 3:
|
|
135
156
|
pageViewEvent = _a.sent();
|
|
136
157
|
event.event_type = pageViewEvent.event_type;
|
|
137
158
|
event.event_properties = tslib_1.__assign(tslib_1.__assign({}, event.event_properties), pageViewEvent.event_properties);
|
|
138
|
-
_a.label =
|
|
139
|
-
case
|
|
159
|
+
_a.label = 4;
|
|
160
|
+
case 4:
|
|
140
161
|
// Update the pageCounter for the page view event
|
|
141
162
|
if (localConfig && event.event_type === eventType) {
|
|
142
163
|
localConfig.pageCounter = !localConfig.pageCounter ? 1 : localConfig.pageCounter + 1;
|
|
@@ -149,7 +170,7 @@ var pageViewTrackingPlugin = function (options) {
|
|
|
149
170
|
teardown: function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
|
|
150
171
|
return tslib_1.__generator(this, function (_a) {
|
|
151
172
|
if (globalScope) {
|
|
152
|
-
globalScope.removeEventListener('popstate',
|
|
173
|
+
globalScope.removeEventListener('popstate', handlePageChange);
|
|
153
174
|
isTracking = false;
|
|
154
175
|
}
|
|
155
176
|
return [2 /*return*/];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"page-view-tracking.js","sourceRoot":"","sources":["../../src/page-view-tracking.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n getPageTitle,\n replaceSensitiveString,\n BrowserConfig,\n BrowserClient,\n EnrichmentPlugin,\n Event,\n IdentifyOperation,\n IdentifyUserProperties,\n ILogger,\n CampaignParser,\n getGlobalScope,\n BASE_CAMPAIGN,\n} from '@amplitude/analytics-core';\nimport { CreatePageViewTrackingPlugin, Options } from './typings/page-view-tracking';\nimport { omitUndefined } from './utils';\n\nexport const defaultPageViewEvent = '[Amplitude] Page Viewed';\n\nexport const pageViewTrackingPlugin: CreatePageViewTrackingPlugin = (options: Options = {}) => {\n let amplitude: BrowserClient | undefined;\n const globalScope = getGlobalScope();\n let loggerProvider: ILogger | undefined = undefined;\n let isTracking = false;\n let localConfig: BrowserConfig;\n const { trackOn, trackHistoryChanges, eventType = defaultPageViewEvent } = options;\n\n const getDecodeURI = (locationStr: string): string => {\n let decodedLocationStr = locationStr;\n try {\n decodedLocationStr = decodeURI(locationStr);\n } catch (e) {\n /* istanbul ignore next */\n loggerProvider?.error('Malformed URI sequence: ', e);\n }\n\n return decodedLocationStr;\n };\n\n const createPageViewEvent = async (): Promise<Event> => {\n /* istanbul ignore next */\n const locationHREF = getDecodeURI((typeof location !== 'undefined' && location.href) || '');\n return {\n event_type: eventType,\n event_properties: {\n ...(await getCampaignParams()),\n '[Amplitude] Page Domain':\n /* istanbul ignore next */ (typeof location !== 'undefined' && location.hostname) || '',\n '[Amplitude] Page Location': locationHREF,\n '[Amplitude] Page Path':\n /* istanbul ignore next */ (typeof location !== 'undefined' && getDecodeURI(location.pathname)) || '',\n '[Amplitude] Page Title': /* istanbul ignore next */ getPageTitle(replaceSensitiveString),\n '[Amplitude] Page URL': locationHREF.split('?')[0],\n },\n };\n };\n\n const shouldTrackOnPageLoad = () => typeof trackOn === 'undefined' || (typeof trackOn === 'function' && trackOn());\n\n /* istanbul ignore next */\n let previousURL: string | null = typeof location !== 'undefined' ? location.href : null;\n\n const trackHistoryPageView = async (): Promise<void> => {\n const newURL = location.href;\n const shouldTrackPageView =\n shouldTrackHistoryPageView(trackHistoryChanges, newURL, previousURL || '') && shouldTrackOnPageLoad();\n // Note: Update `previousURL` in the same clock tick as `shouldTrackHistoryPageView()`\n // This was previously done after `amplitude?.track(await createPageViewEvent());` and\n // causes a concurrency issue where app triggers `pushState` twice with the same URL target\n // but `previousURL` is only updated after the second `pushState` producing two page viewed events\n previousURL = newURL;\n\n if (shouldTrackPageView) {\n /* istanbul ignore next */\n loggerProvider?.log('Tracking page view event');\n amplitude?.track(await createPageViewEvent());\n }\n };\n\n /* istanbul ignore next */\n const trackHistoryPageViewWrapper = () => {\n void trackHistoryPageView();\n };\n\n const plugin: EnrichmentPlugin = {\n name: '@amplitude/plugin-page-view-tracking-browser',\n type: 'enrichment',\n\n setup: async (config: BrowserConfig, client: BrowserClient) => {\n amplitude = client;\n localConfig = config;\n\n loggerProvider = config.loggerProvider;\n loggerProvider.log('Installing @amplitude/plugin-page-view-tracking-browser');\n\n isTracking = true;\n\n if (globalScope) {\n globalScope.addEventListener('popstate', trackHistoryPageViewWrapper);\n\n /* istanbul ignore next */\n // There is no global browser listener for changes to history, so we have\n // to modify pushState directly.\n // https://stackoverflow.com/a/64927639\n // eslint-disable-next-line @typescript-eslint/unbound-method\n globalScope.history.pushState = new Proxy(globalScope.history.pushState, {\n apply: (target, thisArg, [state, unused, url]) => {\n target.apply(thisArg, [state, unused, url]);\n if (isTracking) {\n void trackHistoryPageView();\n }\n },\n });\n }\n\n if (shouldTrackOnPageLoad()) {\n loggerProvider.log('Tracking page view event');\n\n amplitude.track(await createPageViewEvent());\n }\n },\n\n execute: async (event: Event) => {\n if (trackOn === 'attribution' && isCampaignEvent(event)) {\n /* istanbul ignore next */ // loggerProvider should be defined by the time execute is invoked\n loggerProvider?.log('Enriching campaign event to page view event with campaign parameters');\n const pageViewEvent = await createPageViewEvent();\n event.event_type = pageViewEvent.event_type;\n event.event_properties = {\n ...event.event_properties,\n ...pageViewEvent.event_properties,\n };\n }\n\n // Update the pageCounter for the page view event\n if (localConfig && event.event_type === eventType) {\n localConfig.pageCounter = !localConfig.pageCounter ? 1 : localConfig.pageCounter + 1;\n event.event_properties = {\n ...event.event_properties,\n '[Amplitude] Page Counter': localConfig.pageCounter,\n };\n }\n return event;\n },\n\n teardown: async () => {\n if (globalScope) {\n globalScope.removeEventListener('popstate', trackHistoryPageViewWrapper);\n isTracking = false;\n }\n },\n };\n return plugin;\n};\n\nconst getCampaignParams = async () => omitUndefined(await new CampaignParser().parse());\n\nconst isCampaignEvent = (event: Event) => {\n if (event.event_type === '$identify' && event.user_properties) {\n const properties = event.user_properties as IdentifyUserProperties;\n const $set = properties[IdentifyOperation.SET] || {};\n const $unset = properties[IdentifyOperation.UNSET] || {};\n const userProperties = [...Object.keys($set), ...Object.keys($unset)];\n return Object.keys(BASE_CAMPAIGN).every((value) => userProperties.includes(value));\n }\n return false;\n};\n\nexport const shouldTrackHistoryPageView = (\n trackingOption: Options['trackHistoryChanges'],\n newURLStr: string,\n oldURLStr: string,\n): boolean => {\n switch (trackingOption) {\n case 'pathOnly': {\n if (oldURLStr == '') return true;\n const newURL = new URL(newURLStr);\n const oldURL = new URL(oldURLStr);\n const newBaseStr = newURL.origin + newURL.pathname;\n const oldBaseStr = oldURL.origin + oldURL.pathname;\n return newBaseStr !== oldBaseStr;\n }\n default:\n return newURLStr !== oldURLStr;\n }\n};\n"]}
|
|
1
|
+
{"version":3,"file":"page-view-tracking.js","sourceRoot":"","sources":["../../src/page-view-tracking.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n getPageTitle,\n replaceSensitiveString,\n BrowserConfig,\n BrowserClient,\n EnrichmentPlugin,\n Event,\n IdentifyOperation,\n IdentifyUserProperties,\n ILogger,\n CampaignParser,\n getGlobalScope,\n BASE_CAMPAIGN,\n BrowserStorage,\n UUID,\n} from '@amplitude/analytics-core';\nimport { CreatePageViewTrackingPlugin, Options } from './typings/page-view-tracking';\nimport { omitUndefined } from './utils';\n\nexport const defaultPageViewEvent = '[Amplitude] Page Viewed';\nexport const PAGE_VIEW_SESSION_STORAGE_KEY = 'AMP_PAGE_VIEW';\n\ntype PageViewSessionStorage = {\n pageViewId: string;\n};\n\nexport const pageViewTrackingPlugin: CreatePageViewTrackingPlugin = (options: Options = {}) => {\n let amplitude: BrowserClient | undefined;\n const globalScope = getGlobalScope();\n let loggerProvider: ILogger | undefined = undefined;\n let isTracking = false;\n let localConfig: BrowserConfig;\n let sessionStorage: BrowserStorage<PageViewSessionStorage> | undefined;\n const { trackOn, trackHistoryChanges, eventType = defaultPageViewEvent } = options;\n\n const getDecodeURI = (locationStr: string): string => {\n let decodedLocationStr = locationStr;\n try {\n decodedLocationStr = decodeURI(locationStr);\n } catch (e) {\n /* istanbul ignore next */\n loggerProvider?.error('Malformed URI sequence: ', e);\n }\n\n return decodedLocationStr;\n };\n\n const createPageViewEvent = async (pageViewId: string | undefined): Promise<Event> => {\n /* istanbul ignore next */\n const locationHREF = getDecodeURI((typeof location !== 'undefined' && location.href) || '');\n return {\n event_type: eventType,\n event_properties: {\n ...(await getCampaignParams()),\n '[Amplitude] Page Domain':\n /* istanbul ignore next */ (typeof location !== 'undefined' && location.hostname) || '',\n '[Amplitude] Page Location': locationHREF,\n '[Amplitude] Page Path':\n /* istanbul ignore next */ (typeof location !== 'undefined' && getDecodeURI(location.pathname)) || '',\n '[Amplitude] Page Title': /* istanbul ignore next */ getPageTitle(replaceSensitiveString),\n '[Amplitude] Page URL': locationHREF.split('?')[0],\n '[Amplitude] Page View ID': pageViewId,\n },\n };\n };\n\n const shouldTrackOnPageLoad = () => typeof trackOn === 'undefined' || (typeof trackOn === 'function' && trackOn());\n\n /* istanbul ignore next */\n let previousURL: string | null = typeof location !== 'undefined' ? location.href : null;\n\n const trackHistoryPageView = async (): Promise<void> => {\n const newURL = location.href;\n const shouldTrackPageView =\n shouldTrackHistoryPageView(trackHistoryChanges, newURL, previousURL || '') && shouldTrackOnPageLoad();\n // Note: Update `previousURL` in the same clock tick as `shouldTrackHistoryPageView()`\n // This was previously done after `amplitude?.track(await createPageViewEvent());` and\n // causes a concurrency issue where app triggers `pushState` twice with the same URL target\n // but `previousURL` is only updated after the second `pushState` producing two page viewed events\n previousURL = newURL;\n\n if (shouldTrackPageView) {\n // Generate new page view id and set it in session storage\n let pageViewId: string | undefined;\n if (sessionStorage) {\n pageViewId = UUID();\n void sessionStorage.set(PAGE_VIEW_SESSION_STORAGE_KEY, { pageViewId });\n }\n\n /* istanbul ignore next */\n loggerProvider?.log('Tracking page view event');\n amplitude?.track(await createPageViewEvent(pageViewId));\n }\n };\n\n /* istanbul ignore next */\n const handlePageChange = () => {\n void trackHistoryPageView();\n };\n\n const plugin: EnrichmentPlugin = {\n name: '@amplitude/plugin-page-view-tracking-browser',\n type: 'enrichment',\n\n setup: async (config: BrowserConfig, client: BrowserClient) => {\n amplitude = client;\n localConfig = config;\n\n loggerProvider = config.loggerProvider;\n loggerProvider.log('Installing @amplitude/plugin-page-view-tracking-browser');\n\n isTracking = true;\n if (globalScope) {\n // init session storage\n sessionStorage = new BrowserStorage<PageViewSessionStorage>(globalScope.sessionStorage);\n\n globalScope.addEventListener('popstate', handlePageChange);\n\n /* istanbul ignore next */\n // There is no global browser listener for changes to history, so we have\n // to modify pushState directly.\n // https://stackoverflow.com/a/64927639\n // eslint-disable-next-line @typescript-eslint/unbound-method\n globalScope.history.pushState = new Proxy(globalScope.history.pushState, {\n apply: (target, thisArg, [state, unused, url]) => {\n target.apply(thisArg, [state, unused, url]);\n if (isTracking) {\n handlePageChange();\n }\n },\n });\n }\n\n if (shouldTrackOnPageLoad()) {\n loggerProvider.log('Tracking page view event');\n // Generate new page view id and set it in session storage\n let pageViewId: string | undefined;\n\n if (sessionStorage) {\n pageViewId = UUID();\n void sessionStorage.set(PAGE_VIEW_SESSION_STORAGE_KEY, { pageViewId });\n }\n\n amplitude.track(await createPageViewEvent(pageViewId));\n }\n },\n\n execute: async (event: Event) => {\n if (trackOn === 'attribution' && isCampaignEvent(event)) {\n /* istanbul ignore next */ // loggerProvider should be defined by the time execute is invoked\n loggerProvider?.log('Enriching campaign event to page view event with campaign parameters');\n // Retrieve current page view id from session storage\n let pageViewId: string | undefined;\n if (sessionStorage) {\n const pageViewSession = await sessionStorage.get(PAGE_VIEW_SESSION_STORAGE_KEY);\n pageViewId = pageViewSession?.pageViewId;\n }\n\n const pageViewEvent = await createPageViewEvent(pageViewId);\n event.event_type = pageViewEvent.event_type;\n event.event_properties = {\n ...event.event_properties,\n ...pageViewEvent.event_properties,\n };\n }\n\n // Update the pageCounter for the page view event\n if (localConfig && event.event_type === eventType) {\n localConfig.pageCounter = !localConfig.pageCounter ? 1 : localConfig.pageCounter + 1;\n event.event_properties = {\n ...event.event_properties,\n '[Amplitude] Page Counter': localConfig.pageCounter,\n };\n }\n return event;\n },\n\n teardown: async () => {\n if (globalScope) {\n globalScope.removeEventListener('popstate', handlePageChange);\n isTracking = false;\n }\n },\n };\n return plugin;\n};\n\nconst getCampaignParams = async () => omitUndefined(await new CampaignParser().parse());\n\nconst isCampaignEvent = (event: Event) => {\n if (event.event_type === '$identify' && event.user_properties) {\n const properties = event.user_properties as IdentifyUserProperties;\n const $set = properties[IdentifyOperation.SET] || {};\n const $unset = properties[IdentifyOperation.UNSET] || {};\n const userProperties = [...Object.keys($set), ...Object.keys($unset)];\n return Object.keys(BASE_CAMPAIGN).every((value) => userProperties.includes(value));\n }\n return false;\n};\n\nexport const shouldTrackHistoryPageView = (\n trackingOption: Options['trackHistoryChanges'],\n newURLStr: string,\n oldURLStr: string,\n): boolean => {\n switch (trackingOption) {\n case 'pathOnly': {\n if (oldURLStr == '') return true;\n const newURL = new URL(newURLStr);\n const oldURL = new URL(oldURLStr);\n const newBaseStr = newURL.origin + newURL.pathname;\n const oldBaseStr = oldURL.origin + oldURL.pathname;\n return newBaseStr !== oldBaseStr;\n }\n default:\n return newURLStr !== oldURLStr;\n }\n};\n"]}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { CreatePageViewTrackingPlugin, Options } from './typings/page-view-tracking';
|
|
2
2
|
export declare const defaultPageViewEvent = "[Amplitude] Page Viewed";
|
|
3
|
+
export declare const PAGE_VIEW_SESSION_STORAGE_KEY = "AMP_PAGE_VIEW";
|
|
3
4
|
export declare const pageViewTrackingPlugin: CreatePageViewTrackingPlugin;
|
|
4
5
|
export declare const shouldTrackHistoryPageView: (trackingOption: Options['trackHistoryChanges'], newURLStr: string, oldURLStr: string) => boolean;
|
|
5
6
|
//# sourceMappingURL=page-view-tracking.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"page-view-tracking.d.ts","sourceRoot":"","sources":["../../src/page-view-tracking.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"page-view-tracking.d.ts","sourceRoot":"","sources":["../../src/page-view-tracking.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,4BAA4B,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAC;AAGrF,eAAO,MAAM,oBAAoB,4BAA4B,CAAC;AAC9D,eAAO,MAAM,6BAA6B,kBAAkB,CAAC;AAM7D,eAAO,MAAM,sBAAsB,EAAE,4BA+JpC,CAAC;AAeF,eAAO,MAAM,0BAA0B,mBACrB,OAAO,CAAC,qBAAqB,CAAC,aACnC,MAAM,aACN,MAAM,KAChB,OAaF,CAAC"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { __assign, __awaiter, __generator, __read, __spreadArray } from "tslib";
|
|
2
|
-
import { getPageTitle, replaceSensitiveString, IdentifyOperation, CampaignParser, getGlobalScope, BASE_CAMPAIGN, } from '@amplitude/analytics-core';
|
|
2
|
+
import { getPageTitle, replaceSensitiveString, IdentifyOperation, CampaignParser, getGlobalScope, BASE_CAMPAIGN, BrowserStorage, UUID, } from '@amplitude/analytics-core';
|
|
3
3
|
import { omitUndefined } from './utils';
|
|
4
4
|
export var defaultPageViewEvent = '[Amplitude] Page Viewed';
|
|
5
|
+
export var PAGE_VIEW_SESSION_STORAGE_KEY = 'AMP_PAGE_VIEW';
|
|
5
6
|
export var pageViewTrackingPlugin = function (options) {
|
|
6
7
|
if (options === void 0) { options = {}; }
|
|
7
8
|
var amplitude;
|
|
@@ -9,6 +10,7 @@ export var pageViewTrackingPlugin = function (options) {
|
|
|
9
10
|
var loggerProvider = undefined;
|
|
10
11
|
var isTracking = false;
|
|
11
12
|
var localConfig;
|
|
13
|
+
var sessionStorage;
|
|
12
14
|
var trackOn = options.trackOn, trackHistoryChanges = options.trackHistoryChanges, _a = options.eventType, eventType = _a === void 0 ? defaultPageViewEvent : _a;
|
|
13
15
|
var getDecodeURI = function (locationStr) {
|
|
14
16
|
var decodedLocationStr = locationStr;
|
|
@@ -21,7 +23,7 @@ export var pageViewTrackingPlugin = function (options) {
|
|
|
21
23
|
}
|
|
22
24
|
return decodedLocationStr;
|
|
23
25
|
};
|
|
24
|
-
var createPageViewEvent = function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
26
|
+
var createPageViewEvent = function (pageViewId) { return __awaiter(void 0, void 0, void 0, function () {
|
|
25
27
|
var locationHREF, _a;
|
|
26
28
|
var _b;
|
|
27
29
|
return __generator(this, function (_c) {
|
|
@@ -35,7 +37,7 @@ export var pageViewTrackingPlugin = function (options) {
|
|
|
35
37
|
return [4 /*yield*/, getCampaignParams()];
|
|
36
38
|
case 1: return [2 /*return*/, (_b.event_properties = __assign.apply(void 0, [__assign.apply(void 0, _a.concat([(_c.sent())])), { '[Amplitude] Page Domain':
|
|
37
39
|
/* istanbul ignore next */ (typeof location !== 'undefined' && location.hostname) || '', '[Amplitude] Page Location': locationHREF, '[Amplitude] Page Path':
|
|
38
|
-
/* istanbul ignore next */ (typeof location !== 'undefined' && getDecodeURI(location.pathname)) || '', '[Amplitude] Page Title': /* istanbul ignore next */ getPageTitle(replaceSensitiveString), '[Amplitude] Page URL': locationHREF.split('?')[0] }]),
|
|
40
|
+
/* istanbul ignore next */ (typeof location !== 'undefined' && getDecodeURI(location.pathname)) || '', '[Amplitude] Page Title': /* istanbul ignore next */ getPageTitle(replaceSensitiveString), '[Amplitude] Page URL': locationHREF.split('?')[0], '[Amplitude] Page View ID': pageViewId }]),
|
|
39
41
|
_b)];
|
|
40
42
|
}
|
|
41
43
|
});
|
|
@@ -44,7 +46,7 @@ export var pageViewTrackingPlugin = function (options) {
|
|
|
44
46
|
/* istanbul ignore next */
|
|
45
47
|
var previousURL = typeof location !== 'undefined' ? location.href : null;
|
|
46
48
|
var trackHistoryPageView = function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
47
|
-
var newURL, shouldTrackPageView, _a, _b, _c;
|
|
49
|
+
var newURL, shouldTrackPageView, pageViewId, _a, _b, _c;
|
|
48
50
|
return __generator(this, function (_d) {
|
|
49
51
|
switch (_d.label) {
|
|
50
52
|
case 0:
|
|
@@ -56,6 +58,11 @@ export var pageViewTrackingPlugin = function (options) {
|
|
|
56
58
|
// but `previousURL` is only updated after the second `pushState` producing two page viewed events
|
|
57
59
|
previousURL = newURL;
|
|
58
60
|
if (!shouldTrackPageView) return [3 /*break*/, 4];
|
|
61
|
+
pageViewId = void 0;
|
|
62
|
+
if (sessionStorage) {
|
|
63
|
+
pageViewId = UUID();
|
|
64
|
+
void sessionStorage.set(PAGE_VIEW_SESSION_STORAGE_KEY, { pageViewId: pageViewId });
|
|
65
|
+
}
|
|
59
66
|
/* istanbul ignore next */
|
|
60
67
|
loggerProvider === null || loggerProvider === void 0 ? void 0 : loggerProvider.log('Tracking page view event');
|
|
61
68
|
if (!(amplitude === null || amplitude === void 0)) return [3 /*break*/, 1];
|
|
@@ -63,7 +70,7 @@ export var pageViewTrackingPlugin = function (options) {
|
|
|
63
70
|
return [3 /*break*/, 3];
|
|
64
71
|
case 1:
|
|
65
72
|
_c = (_b = amplitude).track;
|
|
66
|
-
return [4 /*yield*/, createPageViewEvent()];
|
|
73
|
+
return [4 /*yield*/, createPageViewEvent(pageViewId)];
|
|
67
74
|
case 2:
|
|
68
75
|
_a = _c.apply(_b, [_d.sent()]);
|
|
69
76
|
_d.label = 3;
|
|
@@ -75,14 +82,14 @@ export var pageViewTrackingPlugin = function (options) {
|
|
|
75
82
|
});
|
|
76
83
|
}); };
|
|
77
84
|
/* istanbul ignore next */
|
|
78
|
-
var
|
|
85
|
+
var handlePageChange = function () {
|
|
79
86
|
void trackHistoryPageView();
|
|
80
87
|
};
|
|
81
88
|
var plugin = {
|
|
82
89
|
name: '@amplitude/plugin-page-view-tracking-browser',
|
|
83
90
|
type: 'enrichment',
|
|
84
91
|
setup: function (config, client) { return __awaiter(void 0, void 0, void 0, function () {
|
|
85
|
-
var _a, _b;
|
|
92
|
+
var pageViewId, _a, _b;
|
|
86
93
|
return __generator(this, function (_c) {
|
|
87
94
|
switch (_c.label) {
|
|
88
95
|
case 0:
|
|
@@ -92,7 +99,9 @@ export var pageViewTrackingPlugin = function (options) {
|
|
|
92
99
|
loggerProvider.log('Installing @amplitude/plugin-page-view-tracking-browser');
|
|
93
100
|
isTracking = true;
|
|
94
101
|
if (globalScope) {
|
|
95
|
-
|
|
102
|
+
// init session storage
|
|
103
|
+
sessionStorage = new BrowserStorage(globalScope.sessionStorage);
|
|
104
|
+
globalScope.addEventListener('popstate', handlePageChange);
|
|
96
105
|
/* istanbul ignore next */
|
|
97
106
|
// There is no global browser listener for changes to history, so we have
|
|
98
107
|
// to modify pushState directly.
|
|
@@ -103,15 +112,20 @@ export var pageViewTrackingPlugin = function (options) {
|
|
|
103
112
|
var _b = __read(_a, 3), state = _b[0], unused = _b[1], url = _b[2];
|
|
104
113
|
target.apply(thisArg, [state, unused, url]);
|
|
105
114
|
if (isTracking) {
|
|
106
|
-
|
|
115
|
+
handlePageChange();
|
|
107
116
|
}
|
|
108
117
|
},
|
|
109
118
|
});
|
|
110
119
|
}
|
|
111
120
|
if (!shouldTrackOnPageLoad()) return [3 /*break*/, 2];
|
|
112
121
|
loggerProvider.log('Tracking page view event');
|
|
122
|
+
pageViewId = void 0;
|
|
123
|
+
if (sessionStorage) {
|
|
124
|
+
pageViewId = UUID();
|
|
125
|
+
void sessionStorage.set(PAGE_VIEW_SESSION_STORAGE_KEY, { pageViewId: pageViewId });
|
|
126
|
+
}
|
|
113
127
|
_b = (_a = amplitude).track;
|
|
114
|
-
return [4 /*yield*/, createPageViewEvent()];
|
|
128
|
+
return [4 /*yield*/, createPageViewEvent(pageViewId)];
|
|
115
129
|
case 1:
|
|
116
130
|
_b.apply(_a, [_c.sent()]);
|
|
117
131
|
_c.label = 2;
|
|
@@ -120,20 +134,27 @@ export var pageViewTrackingPlugin = function (options) {
|
|
|
120
134
|
});
|
|
121
135
|
}); },
|
|
122
136
|
execute: function (event) { return __awaiter(void 0, void 0, void 0, function () {
|
|
123
|
-
var pageViewEvent;
|
|
137
|
+
var pageViewId, pageViewSession, pageViewEvent;
|
|
124
138
|
return __generator(this, function (_a) {
|
|
125
139
|
switch (_a.label) {
|
|
126
140
|
case 0:
|
|
127
|
-
if (!(trackOn === 'attribution' && isCampaignEvent(event))) return [3 /*break*/,
|
|
141
|
+
if (!(trackOn === 'attribution' && isCampaignEvent(event))) return [3 /*break*/, 4];
|
|
128
142
|
/* istanbul ignore next */ // loggerProvider should be defined by the time execute is invoked
|
|
129
143
|
loggerProvider === null || loggerProvider === void 0 ? void 0 : loggerProvider.log('Enriching campaign event to page view event with campaign parameters');
|
|
130
|
-
|
|
144
|
+
pageViewId = void 0;
|
|
145
|
+
if (!sessionStorage) return [3 /*break*/, 2];
|
|
146
|
+
return [4 /*yield*/, sessionStorage.get(PAGE_VIEW_SESSION_STORAGE_KEY)];
|
|
131
147
|
case 1:
|
|
148
|
+
pageViewSession = _a.sent();
|
|
149
|
+
pageViewId = pageViewSession === null || pageViewSession === void 0 ? void 0 : pageViewSession.pageViewId;
|
|
150
|
+
_a.label = 2;
|
|
151
|
+
case 2: return [4 /*yield*/, createPageViewEvent(pageViewId)];
|
|
152
|
+
case 3:
|
|
132
153
|
pageViewEvent = _a.sent();
|
|
133
154
|
event.event_type = pageViewEvent.event_type;
|
|
134
155
|
event.event_properties = __assign(__assign({}, event.event_properties), pageViewEvent.event_properties);
|
|
135
|
-
_a.label =
|
|
136
|
-
case
|
|
156
|
+
_a.label = 4;
|
|
157
|
+
case 4:
|
|
137
158
|
// Update the pageCounter for the page view event
|
|
138
159
|
if (localConfig && event.event_type === eventType) {
|
|
139
160
|
localConfig.pageCounter = !localConfig.pageCounter ? 1 : localConfig.pageCounter + 1;
|
|
@@ -146,7 +167,7 @@ export var pageViewTrackingPlugin = function (options) {
|
|
|
146
167
|
teardown: function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
147
168
|
return __generator(this, function (_a) {
|
|
148
169
|
if (globalScope) {
|
|
149
|
-
globalScope.removeEventListener('popstate',
|
|
170
|
+
globalScope.removeEventListener('popstate', handlePageChange);
|
|
150
171
|
isTracking = false;
|
|
151
172
|
}
|
|
152
173
|
return [2 /*return*/];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"page-view-tracking.js","sourceRoot":"","sources":["../../src/page-view-tracking.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n getPageTitle,\n replaceSensitiveString,\n BrowserConfig,\n BrowserClient,\n EnrichmentPlugin,\n Event,\n IdentifyOperation,\n IdentifyUserProperties,\n ILogger,\n CampaignParser,\n getGlobalScope,\n BASE_CAMPAIGN,\n} from '@amplitude/analytics-core';\nimport { CreatePageViewTrackingPlugin, Options } from './typings/page-view-tracking';\nimport { omitUndefined } from './utils';\n\nexport const defaultPageViewEvent = '[Amplitude] Page Viewed';\n\nexport const pageViewTrackingPlugin: CreatePageViewTrackingPlugin = (options: Options = {}) => {\n let amplitude: BrowserClient | undefined;\n const globalScope = getGlobalScope();\n let loggerProvider: ILogger | undefined = undefined;\n let isTracking = false;\n let localConfig: BrowserConfig;\n const { trackOn, trackHistoryChanges, eventType = defaultPageViewEvent } = options;\n\n const getDecodeURI = (locationStr: string): string => {\n let decodedLocationStr = locationStr;\n try {\n decodedLocationStr = decodeURI(locationStr);\n } catch (e) {\n /* istanbul ignore next */\n loggerProvider?.error('Malformed URI sequence: ', e);\n }\n\n return decodedLocationStr;\n };\n\n const createPageViewEvent = async (): Promise<Event> => {\n /* istanbul ignore next */\n const locationHREF = getDecodeURI((typeof location !== 'undefined' && location.href) || '');\n return {\n event_type: eventType,\n event_properties: {\n ...(await getCampaignParams()),\n '[Amplitude] Page Domain':\n /* istanbul ignore next */ (typeof location !== 'undefined' && location.hostname) || '',\n '[Amplitude] Page Location': locationHREF,\n '[Amplitude] Page Path':\n /* istanbul ignore next */ (typeof location !== 'undefined' && getDecodeURI(location.pathname)) || '',\n '[Amplitude] Page Title': /* istanbul ignore next */ getPageTitle(replaceSensitiveString),\n '[Amplitude] Page URL': locationHREF.split('?')[0],\n },\n };\n };\n\n const shouldTrackOnPageLoad = () => typeof trackOn === 'undefined' || (typeof trackOn === 'function' && trackOn());\n\n /* istanbul ignore next */\n let previousURL: string | null = typeof location !== 'undefined' ? location.href : null;\n\n const trackHistoryPageView = async (): Promise<void> => {\n const newURL = location.href;\n const shouldTrackPageView =\n shouldTrackHistoryPageView(trackHistoryChanges, newURL, previousURL || '') && shouldTrackOnPageLoad();\n // Note: Update `previousURL` in the same clock tick as `shouldTrackHistoryPageView()`\n // This was previously done after `amplitude?.track(await createPageViewEvent());` and\n // causes a concurrency issue where app triggers `pushState` twice with the same URL target\n // but `previousURL` is only updated after the second `pushState` producing two page viewed events\n previousURL = newURL;\n\n if (shouldTrackPageView) {\n /* istanbul ignore next */\n loggerProvider?.log('Tracking page view event');\n amplitude?.track(await createPageViewEvent());\n }\n };\n\n /* istanbul ignore next */\n const trackHistoryPageViewWrapper = () => {\n void trackHistoryPageView();\n };\n\n const plugin: EnrichmentPlugin = {\n name: '@amplitude/plugin-page-view-tracking-browser',\n type: 'enrichment',\n\n setup: async (config: BrowserConfig, client: BrowserClient) => {\n amplitude = client;\n localConfig = config;\n\n loggerProvider = config.loggerProvider;\n loggerProvider.log('Installing @amplitude/plugin-page-view-tracking-browser');\n\n isTracking = true;\n\n if (globalScope) {\n globalScope.addEventListener('popstate', trackHistoryPageViewWrapper);\n\n /* istanbul ignore next */\n // There is no global browser listener for changes to history, so we have\n // to modify pushState directly.\n // https://stackoverflow.com/a/64927639\n // eslint-disable-next-line @typescript-eslint/unbound-method\n globalScope.history.pushState = new Proxy(globalScope.history.pushState, {\n apply: (target, thisArg, [state, unused, url]) => {\n target.apply(thisArg, [state, unused, url]);\n if (isTracking) {\n void trackHistoryPageView();\n }\n },\n });\n }\n\n if (shouldTrackOnPageLoad()) {\n loggerProvider.log('Tracking page view event');\n\n amplitude.track(await createPageViewEvent());\n }\n },\n\n execute: async (event: Event) => {\n if (trackOn === 'attribution' && isCampaignEvent(event)) {\n /* istanbul ignore next */ // loggerProvider should be defined by the time execute is invoked\n loggerProvider?.log('Enriching campaign event to page view event with campaign parameters');\n const pageViewEvent = await createPageViewEvent();\n event.event_type = pageViewEvent.event_type;\n event.event_properties = {\n ...event.event_properties,\n ...pageViewEvent.event_properties,\n };\n }\n\n // Update the pageCounter for the page view event\n if (localConfig && event.event_type === eventType) {\n localConfig.pageCounter = !localConfig.pageCounter ? 1 : localConfig.pageCounter + 1;\n event.event_properties = {\n ...event.event_properties,\n '[Amplitude] Page Counter': localConfig.pageCounter,\n };\n }\n return event;\n },\n\n teardown: async () => {\n if (globalScope) {\n globalScope.removeEventListener('popstate', trackHistoryPageViewWrapper);\n isTracking = false;\n }\n },\n };\n return plugin;\n};\n\nconst getCampaignParams = async () => omitUndefined(await new CampaignParser().parse());\n\nconst isCampaignEvent = (event: Event) => {\n if (event.event_type === '$identify' && event.user_properties) {\n const properties = event.user_properties as IdentifyUserProperties;\n const $set = properties[IdentifyOperation.SET] || {};\n const $unset = properties[IdentifyOperation.UNSET] || {};\n const userProperties = [...Object.keys($set), ...Object.keys($unset)];\n return Object.keys(BASE_CAMPAIGN).every((value) => userProperties.includes(value));\n }\n return false;\n};\n\nexport const shouldTrackHistoryPageView = (\n trackingOption: Options['trackHistoryChanges'],\n newURLStr: string,\n oldURLStr: string,\n): boolean => {\n switch (trackingOption) {\n case 'pathOnly': {\n if (oldURLStr == '') return true;\n const newURL = new URL(newURLStr);\n const oldURL = new URL(oldURLStr);\n const newBaseStr = newURL.origin + newURL.pathname;\n const oldBaseStr = oldURL.origin + oldURL.pathname;\n return newBaseStr !== oldBaseStr;\n }\n default:\n return newURLStr !== oldURLStr;\n }\n};\n"]}
|
|
1
|
+
{"version":3,"file":"page-view-tracking.js","sourceRoot":"","sources":["../../src/page-view-tracking.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n getPageTitle,\n replaceSensitiveString,\n BrowserConfig,\n BrowserClient,\n EnrichmentPlugin,\n Event,\n IdentifyOperation,\n IdentifyUserProperties,\n ILogger,\n CampaignParser,\n getGlobalScope,\n BASE_CAMPAIGN,\n BrowserStorage,\n UUID,\n} from '@amplitude/analytics-core';\nimport { CreatePageViewTrackingPlugin, Options } from './typings/page-view-tracking';\nimport { omitUndefined } from './utils';\n\nexport const defaultPageViewEvent = '[Amplitude] Page Viewed';\nexport const PAGE_VIEW_SESSION_STORAGE_KEY = 'AMP_PAGE_VIEW';\n\ntype PageViewSessionStorage = {\n pageViewId: string;\n};\n\nexport const pageViewTrackingPlugin: CreatePageViewTrackingPlugin = (options: Options = {}) => {\n let amplitude: BrowserClient | undefined;\n const globalScope = getGlobalScope();\n let loggerProvider: ILogger | undefined = undefined;\n let isTracking = false;\n let localConfig: BrowserConfig;\n let sessionStorage: BrowserStorage<PageViewSessionStorage> | undefined;\n const { trackOn, trackHistoryChanges, eventType = defaultPageViewEvent } = options;\n\n const getDecodeURI = (locationStr: string): string => {\n let decodedLocationStr = locationStr;\n try {\n decodedLocationStr = decodeURI(locationStr);\n } catch (e) {\n /* istanbul ignore next */\n loggerProvider?.error('Malformed URI sequence: ', e);\n }\n\n return decodedLocationStr;\n };\n\n const createPageViewEvent = async (pageViewId: string | undefined): Promise<Event> => {\n /* istanbul ignore next */\n const locationHREF = getDecodeURI((typeof location !== 'undefined' && location.href) || '');\n return {\n event_type: eventType,\n event_properties: {\n ...(await getCampaignParams()),\n '[Amplitude] Page Domain':\n /* istanbul ignore next */ (typeof location !== 'undefined' && location.hostname) || '',\n '[Amplitude] Page Location': locationHREF,\n '[Amplitude] Page Path':\n /* istanbul ignore next */ (typeof location !== 'undefined' && getDecodeURI(location.pathname)) || '',\n '[Amplitude] Page Title': /* istanbul ignore next */ getPageTitle(replaceSensitiveString),\n '[Amplitude] Page URL': locationHREF.split('?')[0],\n '[Amplitude] Page View ID': pageViewId,\n },\n };\n };\n\n const shouldTrackOnPageLoad = () => typeof trackOn === 'undefined' || (typeof trackOn === 'function' && trackOn());\n\n /* istanbul ignore next */\n let previousURL: string | null = typeof location !== 'undefined' ? location.href : null;\n\n const trackHistoryPageView = async (): Promise<void> => {\n const newURL = location.href;\n const shouldTrackPageView =\n shouldTrackHistoryPageView(trackHistoryChanges, newURL, previousURL || '') && shouldTrackOnPageLoad();\n // Note: Update `previousURL` in the same clock tick as `shouldTrackHistoryPageView()`\n // This was previously done after `amplitude?.track(await createPageViewEvent());` and\n // causes a concurrency issue where app triggers `pushState` twice with the same URL target\n // but `previousURL` is only updated after the second `pushState` producing two page viewed events\n previousURL = newURL;\n\n if (shouldTrackPageView) {\n // Generate new page view id and set it in session storage\n let pageViewId: string | undefined;\n if (sessionStorage) {\n pageViewId = UUID();\n void sessionStorage.set(PAGE_VIEW_SESSION_STORAGE_KEY, { pageViewId });\n }\n\n /* istanbul ignore next */\n loggerProvider?.log('Tracking page view event');\n amplitude?.track(await createPageViewEvent(pageViewId));\n }\n };\n\n /* istanbul ignore next */\n const handlePageChange = () => {\n void trackHistoryPageView();\n };\n\n const plugin: EnrichmentPlugin = {\n name: '@amplitude/plugin-page-view-tracking-browser',\n type: 'enrichment',\n\n setup: async (config: BrowserConfig, client: BrowserClient) => {\n amplitude = client;\n localConfig = config;\n\n loggerProvider = config.loggerProvider;\n loggerProvider.log('Installing @amplitude/plugin-page-view-tracking-browser');\n\n isTracking = true;\n if (globalScope) {\n // init session storage\n sessionStorage = new BrowserStorage<PageViewSessionStorage>(globalScope.sessionStorage);\n\n globalScope.addEventListener('popstate', handlePageChange);\n\n /* istanbul ignore next */\n // There is no global browser listener for changes to history, so we have\n // to modify pushState directly.\n // https://stackoverflow.com/a/64927639\n // eslint-disable-next-line @typescript-eslint/unbound-method\n globalScope.history.pushState = new Proxy(globalScope.history.pushState, {\n apply: (target, thisArg, [state, unused, url]) => {\n target.apply(thisArg, [state, unused, url]);\n if (isTracking) {\n handlePageChange();\n }\n },\n });\n }\n\n if (shouldTrackOnPageLoad()) {\n loggerProvider.log('Tracking page view event');\n // Generate new page view id and set it in session storage\n let pageViewId: string | undefined;\n\n if (sessionStorage) {\n pageViewId = UUID();\n void sessionStorage.set(PAGE_VIEW_SESSION_STORAGE_KEY, { pageViewId });\n }\n\n amplitude.track(await createPageViewEvent(pageViewId));\n }\n },\n\n execute: async (event: Event) => {\n if (trackOn === 'attribution' && isCampaignEvent(event)) {\n /* istanbul ignore next */ // loggerProvider should be defined by the time execute is invoked\n loggerProvider?.log('Enriching campaign event to page view event with campaign parameters');\n // Retrieve current page view id from session storage\n let pageViewId: string | undefined;\n if (sessionStorage) {\n const pageViewSession = await sessionStorage.get(PAGE_VIEW_SESSION_STORAGE_KEY);\n pageViewId = pageViewSession?.pageViewId;\n }\n\n const pageViewEvent = await createPageViewEvent(pageViewId);\n event.event_type = pageViewEvent.event_type;\n event.event_properties = {\n ...event.event_properties,\n ...pageViewEvent.event_properties,\n };\n }\n\n // Update the pageCounter for the page view event\n if (localConfig && event.event_type === eventType) {\n localConfig.pageCounter = !localConfig.pageCounter ? 1 : localConfig.pageCounter + 1;\n event.event_properties = {\n ...event.event_properties,\n '[Amplitude] Page Counter': localConfig.pageCounter,\n };\n }\n return event;\n },\n\n teardown: async () => {\n if (globalScope) {\n globalScope.removeEventListener('popstate', handlePageChange);\n isTracking = false;\n }\n },\n };\n return plugin;\n};\n\nconst getCampaignParams = async () => omitUndefined(await new CampaignParser().parse());\n\nconst isCampaignEvent = (event: Event) => {\n if (event.event_type === '$identify' && event.user_properties) {\n const properties = event.user_properties as IdentifyUserProperties;\n const $set = properties[IdentifyOperation.SET] || {};\n const $unset = properties[IdentifyOperation.UNSET] || {};\n const userProperties = [...Object.keys($set), ...Object.keys($unset)];\n return Object.keys(BASE_CAMPAIGN).every((value) => userProperties.includes(value));\n }\n return false;\n};\n\nexport const shouldTrackHistoryPageView = (\n trackingOption: Options['trackHistoryChanges'],\n newURLStr: string,\n oldURLStr: string,\n): boolean => {\n switch (trackingOption) {\n case 'pathOnly': {\n if (oldURLStr == '') return true;\n const newURL = new URL(newURLStr);\n const oldURL = new URL(oldURLStr);\n const newBaseStr = newURL.origin + newURL.pathname;\n const oldBaseStr = oldURL.origin + oldURL.pathname;\n return newBaseStr !== oldBaseStr;\n }\n default:\n return newURLStr !== oldURLStr;\n }\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).amplitude={})}(this,function(e){"use strict";var t,n,r=function(){return r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var i in t=arguments[n])Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e},r.apply(this,arguments)};function i(e,t,n,r){return new(n||(n=Promise))(function(i,o){function a(e){try{c(r.next(e))}catch(e){o(e)}}function u(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,u)}c((r=r.apply(e,t||[])).next())})}function o(e,t){var n,r,i,o={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]},a=Object.create(("function"==typeof Iterator?Iterator:Object).prototype);return a.next=u(0),a.throw=u(1),a.return=u(2),"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function u(u){return function(c){return function(u){if(n)throw new TypeError("Generator is already executing.");for(;a&&(a=0,u[0]&&(o=0)),o;)try{if(n=1,r&&(i=2&u[0]?r.return:u[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,u[1])).done)return i;switch(r=0,i&&(u=[2&u[0],i.value]),u[0]){case 0:case 1:i=u;break;case 4:return o.label++,{value:u[1],done:!1};case 5:o.label++,r=u[1],u=[0];continue;case 7:u=o.ops.pop(),o.trys.pop();continue;default:if(!(i=o.trys,(i=i.length>0&&i[i.length-1])||6!==u[0]&&2!==u[0])){o=0;continue}if(3===u[0]&&(!i||u[1]>i[0]&&u[1]<i[3])){o.label=u[1];break}if(6===u[0]&&o.label<i[1]){o.label=i[1],i=u;break}if(i&&o.label<i[2]){o.label=i[2],o.ops.push(u);break}i[2]&&o.ops.pop(),o.trys.pop();continue}u=t.call(e,o)}catch(e){u=[6,e],r=0}finally{n=i=0}if(5&u[0])throw u[1];return{value:u[0]?u[1]:void 0,done:!0}}([u,c])}}}function a(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,i,o=n.call(e),a=[];try{for(;(void 0===t||t-- >0)&&!(r=o.next()).done;)a.push(r.value)}catch(e){i={error:e}}finally{try{r&&!r.done&&(n=o.return)&&n.call(o)}finally{if(i)throw i.error}}return a}function u(e,t,n){if(n||2===arguments.length)for(var r,i=0,o=t.length;i<o;i++)!r&&i in t||(r||(r=Array.prototype.slice.call(t,0,i)),r[i]=t[i]);return e.concat(r||Array.prototype.slice.call(t))}"function"==typeof SuppressedError&&SuppressedError,function(e){e.SET="$set",e.SET_ONCE="$setOnce",e.ADD="$add",e.APPEND="$append",e.PREPEND="$prepend",e.REMOVE="$remove",e.PREINSERT="$preInsert",e.POSTINSERT="$postInsert",e.UNSET="$unset",e.CLEAR_ALL="$clearAll"}(t||(t={})),function(e){e.IDENTIFY="$identify",e.GROUP_IDENTIFY="$groupidentify",e.REVENUE="revenue_amount"}(n||(n={}));var c="dclid",l="fbclid",d="gbraid",f="gclid",p="ko_click_id",s="li_fat_id",v="msclkid",y="rdt_cid",m="ttclid",g="twclid",h="wbraid",b={utm_campaign:void 0,utm_content:void 0,utm_id:void 0,utm_medium:void 0,utm_source:void 0,utm_term:void 0,referrer:void 0,referring_domain:void 0,dclid:void 0,gbraid:void 0,gclid:void 0,fbclid:void 0,ko_click_id:void 0,li_fat_id:void 0,msclkid:void 0,rdt_cid:void 0,ttclid:void 0,twclid:void 0,wbraid:void 0},_=function(){var e="ampIntegrationContext";return"undefined"!=typeof globalThis&&void 0!==globalThis[e]?globalThis[e]:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof self?self:"undefined"!=typeof global?global:void 0},w=function(){var e,t=_();return(null===(e=null==t?void 0:t.location)||void 0===e?void 0:e.search)?t.location.search.substring(1).split("&").filter(Boolean).reduce(function(e,t){var n=t.split("=",2),r=E(n[0]),i=E(n[1]);return i?(e[r]=i,e):e},{}):{}},E=function(e){void 0===e&&(e="");try{return decodeURIComponent(e)}catch(e){return""}},k=function(){function e(){}return e.prototype.parse=function(){return i(this,void 0,void 0,function(){return o(this,function(e){return[2,r(r(r(r({},b),this.getUtmParam()),this.getReferrer()),this.getClickIds())]})})},e.prototype.getUtmParam=function(){var e=w();return{utm_campaign:e.utm_campaign,utm_content:e.utm_content,utm_id:e.utm_id,utm_medium:e.utm_medium,utm_source:e.utm_source,utm_term:e.utm_term}},e.prototype.getReferrer=function(){var e,t,n={referrer:void 0,referring_domain:void 0};try{n.referrer=document.referrer||void 0,n.referring_domain=null!==(t=null===(e=n.referrer)||void 0===e?void 0:e.split("/")[2])&&void 0!==t?t:void 0}catch(e){}return n},e.prototype.getClickIds=function(){var e,t=w();return(e={})[c]=t[c],e[l]=t[l],e[d]=t[d],e[f]=t[f],e[p]=t[p],e[s]=t[s],e[v]=t[v],e[y]=t[y],e[m]=t[m],e[g]=t[g],e[h]=t[h],e},e}(),T="*****",P=/\b(?:\d[ -]*?){13,16}\b/,S=/(\d{3}-?\d{2}-?\d{4})/g,I=/[^\s@]+@[^\s@.]+\.[^\s@]+/g,O=function(e,t){var n,r;if(void 0===t&&(t=[]),"string"!=typeof e)return"";var i=e;i=(i=(i=i.replace(P,T)).replace(S,T)).replace(I,T);try{for(var o=function(e){var t="function"==typeof Symbol&&Symbol.iterator,n=t&&e[t],r=0;if(n)return n.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}(t),a=o.next();!a.done;a=o.next()){var u=a.value;try{i=i.replace(u,T)}catch(e){}}}catch(e){n={error:e}}finally{try{a&&!a.done&&(r=o.return)&&r.call(o)}finally{if(n)throw n.error}}return i},R=function(e){if("undefined"==typeof document||!document.title)return"";var t=document.querySelector("title");return t&&t.hasAttribute("data-amp-mask")?T:e?e(document.title):document.title},x=function(e){var t={};for(var n in e){var r=e[n];r&&(t[n]=r)}return t},A=function(e){var t;void 0===e&&(e={});var n,u=_(),c=void 0,l=!1,d=e.trackOn,f=e.trackHistoryChanges,p=e.eventType,s=void 0===p?"[Amplitude] Page Viewed":p,v=function(e){var t=e;try{t=decodeURI(e)}catch(e){null==c||c.error("Malformed URI sequence: ",e)}return t},y=function(){return i(void 0,void 0,void 0,function(){var e,t,n;return o(this,function(i){switch(i.label){case 0:return e=v("undefined"!=typeof location&&location.href||""),n={event_type:s},t=[{}],[4,$()];case 1:return[2,(n.event_properties=r.apply(void 0,[r.apply(void 0,t.concat([i.sent()])),{"[Amplitude] Page Domain":"undefined"!=typeof location&&location.hostname||"","[Amplitude] Page Location":e,"[Amplitude] Page Path":"undefined"!=typeof location&&v(location.pathname)||"","[Amplitude] Page Title":R(O),"[Amplitude] Page URL":e.split("?")[0]}]),n)]}})})},m=function(){return void 0===d||"function"==typeof d&&d()},g="undefined"!=typeof location?location.href:null,h=function(){return i(void 0,void 0,void 0,function(){var e,n,r,i;return o(this,function(o){switch(o.label){case 0:return e=location.href,n=U(f,e,g||"")&&m(),g=e,n?(null==c||c.log("Tracking page view event"),null!=t?[3,1]:[3,3]):[3,4];case 1:return i=(r=t).track,[4,y()];case 2:i.apply(r,[o.sent()]),o.label=3;case 3:o.label=4;case 4:return[2]}})})},b=function(){h()},w={name:"@amplitude/plugin-page-view-tracking-browser",type:"enrichment",setup:function(e,r){return i(void 0,void 0,void 0,function(){var i,d;return o(this,function(o){switch(o.label){case 0:return t=r,n=e,(c=e.loggerProvider).log("Installing @amplitude/plugin-page-view-tracking-browser"),l=!0,u&&(u.addEventListener("popstate",b),u.history.pushState=new Proxy(u.history.pushState,{apply:function(e,t,n){var r=a(n,3),i=r[0],o=r[1],u=r[2];e.apply(t,[i,o,u]),l&&h()}})),m()?(c.log("Tracking page view event"),d=(i=t).track,[4,y()]):[3,2];case 1:d.apply(i,[o.sent()]),o.label=2;case 2:return[2]}})})},execute:function(e){return i(void 0,void 0,void 0,function(){var t;return o(this,function(i){switch(i.label){case 0:return"attribution"===d&&C(e)?(null==c||c.log("Enriching campaign event to page view event with campaign parameters"),[4,y()]):[3,2];case 1:t=i.sent(),e.event_type=t.event_type,e.event_properties=r(r({},e.event_properties),t.event_properties),i.label=2;case 2:return n&&e.event_type===s&&(n.pageCounter=n.pageCounter?n.pageCounter+1:1,e.event_properties=r(r({},e.event_properties),{"[Amplitude] Page Counter":n.pageCounter})),[2,e]}})})},teardown:function(){return i(void 0,void 0,void 0,function(){return o(this,function(e){return u&&(u.removeEventListener("popstate",b),l=!1),[2]})})}};return w},$=function(){return i(void 0,void 0,void 0,function(){var e;return o(this,function(t){switch(t.label){case 0:return e=x,[4,(new k).parse()];case 1:return[2,e.apply(void 0,[t.sent()])]}})})},C=function(e){if("$identify"===e.event_type&&e.user_properties){var n=e.user_properties,r=n[t.SET]||{},i=n[t.UNSET]||{},o=u(u([],a(Object.keys(r)),!1),a(Object.keys(i)),!1);return Object.keys(b).every(function(e){return o.includes(e)})}return!1},U=function(e,t,n){if("pathOnly"===e){if(""==n)return!0;var r=new URL(t),i=new URL(n);return r.origin+r.pathname!==i.origin+i.pathname}return t!==n};e.pageViewTrackingPlugin=A,e.plugin=A,Object.defineProperty(e,"__esModule",{value:!0})});
|
|
1
|
+
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).amplitude={})}(this,function(e){"use strict";var t,n,r=function(){return r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var i in t=arguments[n])Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e},r.apply(this,arguments)};function i(e,t,n,r){return new(n||(n=Promise))(function(i,o){function u(e){try{c(r.next(e))}catch(e){o(e)}}function a(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(u,a)}c((r=r.apply(e,t||[])).next())})}function o(e,t){var n,r,i,o={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]},u=Object.create(("function"==typeof Iterator?Iterator:Object).prototype);return u.next=a(0),u.throw=a(1),u.return=a(2),"function"==typeof Symbol&&(u[Symbol.iterator]=function(){return this}),u;function a(a){return function(c){return function(a){if(n)throw new TypeError("Generator is already executing.");for(;u&&(u=0,a[0]&&(o=0)),o;)try{if(n=1,r&&(i=2&a[0]?r.return:a[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,a[1])).done)return i;switch(r=0,i&&(a=[2&a[0],i.value]),a[0]){case 0:case 1:i=a;break;case 4:return o.label++,{value:a[1],done:!1};case 5:o.label++,r=a[1],a=[0];continue;case 7:a=o.ops.pop(),o.trys.pop();continue;default:if(!(i=o.trys,(i=i.length>0&&i[i.length-1])||6!==a[0]&&2!==a[0])){o=0;continue}if(3===a[0]&&(!i||a[1]>i[0]&&a[1]<i[3])){o.label=a[1];break}if(6===a[0]&&o.label<i[1]){o.label=i[1],i=a;break}if(i&&o.label<i[2]){o.label=i[2],o.ops.push(a);break}i[2]&&o.ops.pop(),o.trys.pop();continue}a=t.call(e,o)}catch(e){a=[6,e],r=0}finally{n=i=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,c])}}}function u(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,i,o=n.call(e),u=[];try{for(;(void 0===t||t-- >0)&&!(r=o.next()).done;)u.push(r.value)}catch(e){i={error:e}}finally{try{r&&!r.done&&(n=o.return)&&n.call(o)}finally{if(i)throw i.error}}return u}function a(e,t,n){if(n||2===arguments.length)for(var r,i=0,o=t.length;i<o;i++)!r&&i in t||(r||(r=Array.prototype.slice.call(t,0,i)),r[i]=t[i]);return e.concat(r||Array.prototype.slice.call(t))}"function"==typeof SuppressedError&&SuppressedError,function(e){e.SET="$set",e.SET_ONCE="$setOnce",e.ADD="$add",e.APPEND="$append",e.PREPEND="$prepend",e.REMOVE="$remove",e.PREINSERT="$preInsert",e.POSTINSERT="$postInsert",e.UNSET="$unset",e.CLEAR_ALL="$clearAll"}(t||(t={})),function(e){e.IDENTIFY="$identify",e.GROUP_IDENTIFY="$groupidentify",e.REVENUE="revenue_amount"}(n||(n={}));var c="dclid",l="fbclid",d="gbraid",s="gclid",f="ko_click_id",p="li_fat_id",v="msclkid",g="rdt_cid",y="ttclid",h="twclid",m="wbraid",b={utm_campaign:void 0,utm_content:void 0,utm_id:void 0,utm_medium:void 0,utm_source:void 0,utm_term:void 0,referrer:void 0,referring_domain:void 0,dclid:void 0,gbraid:void 0,gclid:void 0,fbclid:void 0,ko_click_id:void 0,li_fat_id:void 0,msclkid:void 0,rdt_cid:void 0,ttclid:void 0,twclid:void 0,wbraid:void 0},w=function(){var e="ampIntegrationContext";return"undefined"!=typeof globalThis&&void 0!==globalThis[e]?globalThis[e]:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof self?self:"undefined"!=typeof global?global:void 0},_=a([],u(Array(256).keys()),!1).map(function(e){return e.toString(16).padStart(2,"0")}),S=function(e){var t,n=w();if(!(null===(t=null==n?void 0:n.crypto)||void 0===t?void 0:t.getRandomValues))return function(e){return e?(e^16*Math.random()>>e/4).toString(16):(String(1e7)+String(-1e3)+String(-4e3)+String(-8e3)+String(-1e11)).replace(/[018]/g,S)}(e);var r=n.crypto.getRandomValues(new Uint8Array(16));return r[6]=15&r[6]|64,r[8]=63&r[8]|128,a([],u(r.entries()),!1).map(function(e){var t=u(e,2),n=t[0],r=t[1];return[4,6,8,10].includes(n)?"-".concat(_[r]):_[r]}).join("")},E=function(){var e,t=w();return(null===(e=null==t?void 0:t.location)||void 0===e?void 0:e.search)?t.location.search.substring(1).split("&").filter(Boolean).reduce(function(e,t){var n=t.split("=",2),r=P(n[0]),i=P(n[1]);return i?(e[r]=i,e):e},{}):{}},P=function(e){void 0===e&&(e="");try{return decodeURIComponent(e)}catch(e){return""}},k=function(){function e(e){this.storage=e}return e.prototype.isEnabled=function(){return i(this,void 0,void 0,function(){var t,n,r;return o(this,function(i){switch(i.label){case 0:if(!this.storage)return[2,!1];t=String(Date.now()),n=new e(this.storage),r="AMP_TEST",i.label=1;case 1:return i.trys.push([1,4,5,7]),[4,n.set(r,t)];case 2:return i.sent(),[4,n.get(r)];case 3:return[2,i.sent()===t];case 4:return i.sent(),[2,!1];case 5:return[4,n.remove(r)];case 6:return i.sent(),[7];case 7:return[2]}})})},e.prototype.get=function(e){return i(this,void 0,void 0,function(){var t;return o(this,function(n){switch(n.label){case 0:return n.trys.push([0,2,,3]),[4,this.getRaw(e)];case 1:return(t=n.sent())?[2,JSON.parse(t)]:[2,void 0];case 2:return n.sent(),console.error("[Amplitude] Error: Could not get value from storage"),[2,void 0];case 3:return[2]}})})},e.prototype.getRaw=function(e){var t;return i(this,void 0,void 0,function(){return o(this,function(n){return[2,(null===(t=this.storage)||void 0===t?void 0:t.getItem(e))||void 0]})})},e.prototype.set=function(e,t){var n;return i(this,void 0,void 0,function(){return o(this,function(r){try{null===(n=this.storage)||void 0===n||n.setItem(e,JSON.stringify(t))}catch(e){}return[2]})})},e.prototype.remove=function(e){var t;return i(this,void 0,void 0,function(){return o(this,function(n){try{null===(t=this.storage)||void 0===t||t.removeItem(e)}catch(e){}return[2]})})},e.prototype.reset=function(){var e;return i(this,void 0,void 0,function(){return o(this,function(t){try{null===(e=this.storage)||void 0===e||e.clear()}catch(e){}return[2]})})},e}(),T=function(){function e(){}return e.prototype.parse=function(){return i(this,void 0,void 0,function(){return o(this,function(e){return[2,r(r(r(r({},b),this.getUtmParam()),this.getReferrer()),this.getClickIds())]})})},e.prototype.getUtmParam=function(){var e=E();return{utm_campaign:e.utm_campaign,utm_content:e.utm_content,utm_id:e.utm_id,utm_medium:e.utm_medium,utm_source:e.utm_source,utm_term:e.utm_term}},e.prototype.getReferrer=function(){var e,t,n={referrer:void 0,referring_domain:void 0};try{n.referrer=document.referrer||void 0,n.referring_domain=null!==(t=null===(e=n.referrer)||void 0===e?void 0:e.split("/")[2])&&void 0!==t?t:void 0}catch(e){}return n},e.prototype.getClickIds=function(){var e,t=E();return(e={})[c]=t[c],e[l]=t[l],e[d]=t[d],e[s]=t[s],e[f]=t[f],e[p]=t[p],e[v]=t[v],e[g]=t[g],e[y]=t[y],e[h]=t[h],e[m]=t[m],e},e}(),I="*****",A=/\b(?:\d[ -]*?){13,16}\b/,R=/(\d{3}-?\d{2}-?\d{4})/g,O=/[^\s@]+@[^\s@.]+\.[^\s@]+/g,x=function(e,t){var n,r;if(void 0===t&&(t=[]),"string"!=typeof e)return"";var i=e;i=(i=(i=i.replace(A,I)).replace(R,I)).replace(O,I);try{for(var o=function(e){var t="function"==typeof Symbol&&Symbol.iterator,n=t&&e[t],r=0;if(n)return n.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}(t),u=o.next();!u.done;u=o.next()){var a=u.value;try{i=i.replace(a,I)}catch(e){}}}catch(e){n={error:e}}finally{try{u&&!u.done&&(r=o.return)&&r.call(o)}finally{if(n)throw n.error}}return i},C=function(e){if("undefined"==typeof document||!document.title)return"";var t=document.querySelector("title");return t&&t.hasAttribute("data-amp-mask")?I:e?e(document.title):document.title},U=function(e){var t={};for(var n in e){var r=e[n];r&&(t[n]=r)}return t},$="AMP_PAGE_VIEW",N=function(e){var t;void 0===e&&(e={});var n,a,c=w(),l=void 0,d=!1,s=e.trackOn,f=e.trackHistoryChanges,p=e.eventType,v=void 0===p?"[Amplitude] Page Viewed":p,g=function(e){var t=e;try{t=decodeURI(e)}catch(e){null==l||l.error("Malformed URI sequence: ",e)}return t},y=function(e){return i(void 0,void 0,void 0,function(){var t,n,i;return o(this,function(o){switch(o.label){case 0:return t=g("undefined"!=typeof location&&location.href||""),i={event_type:v},n=[{}],[4,j()];case 1:return[2,(i.event_properties=r.apply(void 0,[r.apply(void 0,n.concat([o.sent()])),{"[Amplitude] Page Domain":"undefined"!=typeof location&&location.hostname||"","[Amplitude] Page Location":t,"[Amplitude] Page Path":"undefined"!=typeof location&&g(location.pathname)||"","[Amplitude] Page Title":C(x),"[Amplitude] Page URL":t.split("?")[0],"[Amplitude] Page View ID":e}]),i)]}})})},h=function(){return void 0===s||"function"==typeof s&&s()},m="undefined"!=typeof location?location.href:null,b=function(){i(void 0,void 0,void 0,function(){var e,n,r,i,u;return o(this,function(o){switch(o.label){case 0:return e=location.href,n=D(f,e,m||"")&&h(),m=e,n?(r=void 0,a&&(r=S(),a.set($,{pageViewId:r})),null==l||l.log("Tracking page view event"),null!=t?[3,1]:[3,3]):[3,4];case 1:return u=(i=t).track,[4,y(r)];case 2:u.apply(i,[o.sent()]),o.label=3;case 3:o.label=4;case 4:return[2]}})})},_={name:"@amplitude/plugin-page-view-tracking-browser",type:"enrichment",setup:function(e,r){return i(void 0,void 0,void 0,function(){var i,s,f;return o(this,function(o){switch(o.label){case 0:return t=r,n=e,(l=e.loggerProvider).log("Installing @amplitude/plugin-page-view-tracking-browser"),d=!0,c&&(a=new k(c.sessionStorage),c.addEventListener("popstate",b),c.history.pushState=new Proxy(c.history.pushState,{apply:function(e,t,n){var r=u(n,3),i=r[0],o=r[1],a=r[2];e.apply(t,[i,o,a]),d&&b()}})),h()?(l.log("Tracking page view event"),i=void 0,a&&(i=S(),a.set($,{pageViewId:i})),f=(s=t).track,[4,y(i)]):[3,2];case 1:f.apply(s,[o.sent()]),o.label=2;case 2:return[2]}})})},execute:function(e){return i(void 0,void 0,void 0,function(){var t,i,u;return o(this,function(o){switch(o.label){case 0:return"attribution"===s&&V(e)?(null==l||l.log("Enriching campaign event to page view event with campaign parameters"),t=void 0,a?[4,a.get($)]:[3,2]):[3,4];case 1:i=o.sent(),t=null==i?void 0:i.pageViewId,o.label=2;case 2:return[4,y(t)];case 3:u=o.sent(),e.event_type=u.event_type,e.event_properties=r(r({},e.event_properties),u.event_properties),o.label=4;case 4:return n&&e.event_type===v&&(n.pageCounter=n.pageCounter?n.pageCounter+1:1,e.event_properties=r(r({},e.event_properties),{"[Amplitude] Page Counter":n.pageCounter})),[2,e]}})})},teardown:function(){return i(void 0,void 0,void 0,function(){return o(this,function(e){return c&&(c.removeEventListener("popstate",b),d=!1),[2]})})}};return _},j=function(){return i(void 0,void 0,void 0,function(){var e;return o(this,function(t){switch(t.label){case 0:return e=U,[4,(new T).parse()];case 1:return[2,e.apply(void 0,[t.sent()])]}})})},V=function(e){if("$identify"===e.event_type&&e.user_properties){var n=e.user_properties,r=n[t.SET]||{},i=n[t.UNSET]||{},o=a(a([],u(Object.keys(r)),!1),u(Object.keys(i)),!1);return Object.keys(b).every(function(e){return o.includes(e)})}return!1},D=function(e,t,n){if("pathOnly"===e){if(""==n)return!0;var r=new URL(t),i=new URL(n);return r.origin+r.pathname!==i.origin+i.pathname}return t!==n};e.pageViewTrackingPlugin=N,e.plugin=N,Object.defineProperty(e,"__esModule",{value:!0})});
|
|
Binary file
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { CreatePageViewTrackingPlugin, Options } from './typings/page-view-tracking';
|
|
2
2
|
export declare const defaultPageViewEvent = "[Amplitude] Page Viewed";
|
|
3
|
+
export declare const PAGE_VIEW_SESSION_STORAGE_KEY = "AMP_PAGE_VIEW";
|
|
3
4
|
export declare const pageViewTrackingPlugin: CreatePageViewTrackingPlugin;
|
|
4
5
|
export declare const shouldTrackHistoryPageView: (trackingOption: Options['trackHistoryChanges'], newURLStr: string, oldURLStr: string) => boolean;
|
|
5
6
|
//# sourceMappingURL=page-view-tracking.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"page-view-tracking.d.ts","sourceRoot":"","sources":["../../src/page-view-tracking.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"page-view-tracking.d.ts","sourceRoot":"","sources":["../../src/page-view-tracking.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,4BAA4B,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAC;AAGrF,eAAO,MAAM,oBAAoB,4BAA4B,CAAC;AAC9D,eAAO,MAAM,6BAA6B,kBAAkB,CAAC;AAM7D,eAAO,MAAM,sBAAsB,EAAE,4BA+JpC,CAAC;AAeF,eAAO,MAAM,0BAA0B,mBACrB,OAAO,CAAC,qBAAqB,CAAC,aACnC,MAAM,aACN,MAAM,KAChB,OAaF,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@amplitude/plugin-page-view-tracking-browser",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.7.0-feat-zoning-1211.0",
|
|
4
4
|
"description": "",
|
|
5
5
|
"author": "Amplitude Inc",
|
|
6
6
|
"homepage": "https://github.com/amplitude/Amplitude-TypeScript",
|
|
@@ -52,5 +52,5 @@
|
|
|
52
52
|
"files": [
|
|
53
53
|
"lib"
|
|
54
54
|
],
|
|
55
|
-
"gitHead": "
|
|
55
|
+
"gitHead": "16139886e2cc77733b73b38f467447bda217686e"
|
|
56
56
|
}
|