@amplitude/plugin-page-url-enrichment-browser 0.2.8 → 0.2.10

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.
@@ -1 +1 @@
1
- {"version":3,"file":"page-url-enrichment.d.ts","sourceRoot":"","sources":["../../src/page-url-enrichment.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAgC,gBAAgB,EAAiB,MAAM,4BAA4B,CAAC;AAGhH,eAAO,MAAM,wBAAwB,qBAAqB,CAAC;AAC3D,eAAO,MAAM,yBAAyB,sBAAsB,CAAC;AAE7D,eAAO,MAAM,oBAAoB,iBAAiB,CAAC;AAEnD,MAAM,MAAM,OAAO,GAAG;IACpB,CAAC,wBAAwB,CAAC,CAAC,EAAE,MAAM,CAAC;IACpC,CAAC,yBAAyB,CAAC,CAAC,EAAE,MAAM,CAAC;CACtC,CAAC;AAQF,eAAO,MAAM,0BAA0B,WAAY,OAAO,KAAG,OAQ5D,CAAC;AAEF,eAAO,MAAM,uBAAuB,QAAO,gBAuK1C,CAAC"}
1
+ {"version":3,"file":"page-url-enrichment.d.ts","sourceRoot":"","sources":["../../src/page-url-enrichment.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAgC,gBAAgB,EAAiB,MAAM,4BAA4B,CAAC;AAGhH,eAAO,MAAM,wBAAwB,qBAAqB,CAAC;AAC3D,eAAO,MAAM,yBAAyB,sBAAsB,CAAC;AAE7D,eAAO,MAAM,oBAAoB,iBAAiB,CAAC;AAEnD,MAAM,MAAM,OAAO,GAAG;IACpB,CAAC,wBAAwB,CAAC,CAAC,EAAE,MAAM,CAAC;IACpC,CAAC,yBAAyB,CAAC,CAAC,EAAE,MAAM,CAAC;CACtC,CAAC;AAQF,eAAO,MAAM,0BAA0B,WAAY,OAAO,KAAG,OAQ5D,CAAC;AAEF,eAAO,MAAM,uBAAuB,QAAO,gBA2J1C,CAAC"}
@@ -29,21 +29,10 @@ var pageUrlEnrichmentPlugin = function () {
29
29
  var loggerProvider = undefined;
30
30
  var isProxied = false;
31
31
  var isTracking = false;
32
- var getDecodeURI = function (locationStr) {
33
- var decodedLocationStr = locationStr;
34
- try {
35
- decodedLocationStr = decodeURI(locationStr);
36
- }
37
- catch (e) {
38
- /* istanbul ignore next */
39
- loggerProvider === null || loggerProvider === void 0 ? void 0 : loggerProvider.error('Malformed URI sequence: ', e);
40
- }
41
- return decodedLocationStr;
42
- };
43
32
  var getHostname = function (url) {
44
33
  var hostname;
45
34
  try {
46
- var decodedUrl = getDecodeURI(url);
35
+ var decodedUrl = (0, analytics_core_1.getDecodeURI)(url, loggerProvider);
47
36
  hostname = new URL(decodedUrl).hostname;
48
37
  }
49
38
  catch (e) {
@@ -75,7 +64,7 @@ var pageUrlEnrichmentPlugin = function () {
75
64
  case 1:
76
65
  URLInfo = _b.sent();
77
66
  previousURL = (URLInfo === null || URLInfo === void 0 ? void 0 : URLInfo[exports.CURRENT_PAGE_STORAGE_KEY]) || '';
78
- currentURL = getDecodeURI((typeof location !== 'undefined' && location.href) || '');
67
+ currentURL = (0, analytics_core_1.getDecodeURI)((typeof location !== 'undefined' && location.href) || '');
79
68
  return [4 /*yield*/, sessionStorage.set(exports.URL_INFO_STORAGE_KEY, (_a = {},
80
69
  _a[exports.CURRENT_PAGE_STORAGE_KEY] = currentURL,
81
70
  _a[exports.PREVIOUS_PAGE_STORAGE_KEY] = previousURL,
@@ -144,7 +133,7 @@ var pageUrlEnrichmentPlugin = function () {
144
133
  return tslib_1.__generator(this, function (_b) {
145
134
  switch (_b.label) {
146
135
  case 0:
147
- locationHREF = getDecodeURI((typeof location !== 'undefined' && location.href) || '');
136
+ locationHREF = (0, analytics_core_1.getDecodeURI)((typeof location !== 'undefined' && location.href) || '');
148
137
  previousPage = '';
149
138
  if (!(sessionStorage && isStorageEnabled)) return [3 /*break*/, 4];
150
139
  return [4 /*yield*/, sessionStorage.get(exports.URL_INFO_STORAGE_KEY)];
@@ -157,7 +146,7 @@ var pageUrlEnrichmentPlugin = function () {
157
146
  _b.sent();
158
147
  _b.label = 3;
159
148
  case 3:
160
- event.event_properties = tslib_1.__assign(tslib_1.__assign({}, (event.event_properties || {})), { '[Amplitude] Page Domain': addIfNotExist(event, '[Amplitude] Page Domain', (typeof location !== 'undefined' && location.hostname) || ''), '[Amplitude] Page Location': addIfNotExist(event, '[Amplitude] Page Location', locationHREF), '[Amplitude] Page Path': addIfNotExist(event, '[Amplitude] Page Path', (typeof location !== 'undefined' && getDecodeURI(location.pathname)) || ''), '[Amplitude] Page Title': addIfNotExist(event, '[Amplitude] Page Title', (typeof document !== 'undefined' && document.title) || ''), '[Amplitude] Page URL': addIfNotExist(event, '[Amplitude] Page URL', locationHREF.split('?')[0]), '[Amplitude] Previous Page Location': previousPage, '[Amplitude] Previous Page Type': getPrevPageType(previousPage) });
149
+ event.event_properties = tslib_1.__assign(tslib_1.__assign({}, (event.event_properties || {})), { '[Amplitude] Page Domain': addIfNotExist(event, '[Amplitude] Page Domain', (typeof location !== 'undefined' && location.hostname) || ''), '[Amplitude] Page Location': addIfNotExist(event, '[Amplitude] Page Location', locationHREF), '[Amplitude] Page Path': addIfNotExist(event, '[Amplitude] Page Path', (typeof location !== 'undefined' && (0, analytics_core_1.getDecodeURI)(location.pathname)) || ''), '[Amplitude] Page Title': addIfNotExist(event, '[Amplitude] Page Title', (typeof document !== 'undefined' && document.title) || ''), '[Amplitude] Page URL': addIfNotExist(event, '[Amplitude] Page URL', locationHREF.split('?')[0]), '[Amplitude] Previous Page Location': previousPage, '[Amplitude] Previous Page Type': getPrevPageType(previousPage) });
161
150
  _b.label = 4;
162
151
  case 4: return [2 /*return*/, event];
163
152
  }
@@ -1 +1 @@
1
- {"version":3,"file":"page-url-enrichment.js","sourceRoot":"","sources":["../../src/page-url-enrichment.ts"],"names":[],"mappings":"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","sourcesContent":["import type { BrowserClient, BrowserConfig, EnrichmentPlugin, Event, Logger } from '@amplitude/analytics-types';\nimport { getGlobalScope, BrowserStorage } from '@amplitude/analytics-core';\n\nexport const CURRENT_PAGE_STORAGE_KEY = 'AMP_CURRENT_PAGE';\nexport const PREVIOUS_PAGE_STORAGE_KEY = 'AMP_PREVIOUS_PAGE';\n\nexport const URL_INFO_STORAGE_KEY = 'AMP_URL_INFO';\n\nexport type URLInfo = {\n [CURRENT_PAGE_STORAGE_KEY]?: string;\n [PREVIOUS_PAGE_STORAGE_KEY]?: string;\n};\n\nenum PreviousPageType {\n Direct = 'direct', // for no prev page or referrer\n Internal = 'internal', // for same domain - this excludes subdomains\n External = 'external', // for different domains\n}\n\nexport const isPageUrlEnrichmentEnabled = (option: unknown): boolean => {\n if (typeof option === 'boolean') {\n return option;\n }\n if (typeof option === 'object' && option !== null && 'pageUrlEnrichment' in option) {\n return Boolean((option as { pageUrlEnrichment?: boolean }).pageUrlEnrichment);\n }\n return false;\n};\n\nexport const pageUrlEnrichmentPlugin = (): EnrichmentPlugin => {\n const globalScope = getGlobalScope();\n let sessionStorage: BrowserStorage<URLInfo> | undefined = undefined;\n let isStorageEnabled = false;\n let loggerProvider: Logger | undefined = undefined;\n\n let isProxied = false;\n let isTracking = false;\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 getHostname = (url: string): string | undefined => {\n let hostname: string | undefined;\n\n try {\n const decodedUrl = getDecodeURI(url);\n hostname = new URL(decodedUrl).hostname;\n } catch (e) {\n /* istanbul ignore next */\n loggerProvider?.error('Could not parse URL: ', e);\n }\n\n return hostname;\n };\n\n const getPrevPageType = (previousPage: string) => {\n const currentDomain = (typeof location !== 'undefined' && location.hostname) || '';\n const previousPageDomain = previousPage ? getHostname(previousPage) : undefined;\n\n switch (previousPageDomain) {\n case undefined:\n return PreviousPageType.Direct;\n case currentDomain:\n return PreviousPageType.Internal;\n default:\n return PreviousPageType.External;\n }\n };\n\n const saveURLInfo = async () => {\n if (sessionStorage && isStorageEnabled) {\n const URLInfo = await sessionStorage.get(URL_INFO_STORAGE_KEY);\n const previousURL = URLInfo?.[CURRENT_PAGE_STORAGE_KEY] || '';\n const currentURL = getDecodeURI((typeof location !== 'undefined' && location.href) || '');\n\n await sessionStorage.set(URL_INFO_STORAGE_KEY, {\n [CURRENT_PAGE_STORAGE_KEY]: currentURL,\n [PREVIOUS_PAGE_STORAGE_KEY]: previousURL,\n });\n }\n };\n\n const saveUrlInfoWrapper = () => {\n void saveURLInfo();\n };\n\n const plugin: EnrichmentPlugin = {\n name: '@amplitude/plugin-page-url-enrichment-browser',\n type: 'enrichment',\n\n setup: async (config: BrowserConfig, _: BrowserClient) => {\n loggerProvider = config.loggerProvider;\n loggerProvider.log('Installing @amplitude/plugin-page-url-enrichment-browser');\n\n isTracking = true;\n\n if (globalScope) {\n sessionStorage = new BrowserStorage<URLInfo>(globalScope.sessionStorage);\n isStorageEnabled = await sessionStorage.isEnabled();\n\n globalScope.addEventListener('popstate', saveUrlInfoWrapper);\n\n if (!isProxied) {\n /* istanbul ignore next */\n // There is no global browser listener for changes to history, so we have\n // to modify pushState and replaceState 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 saveUrlInfoWrapper();\n }\n },\n });\n\n // eslint-disable-next-line @typescript-eslint/unbound-method\n globalScope.history.replaceState = new Proxy(globalScope.history.replaceState, {\n apply: (target, thisArg, [state, unused, url]) => {\n target.apply(thisArg, [state, unused, url]);\n if (isTracking) {\n saveUrlInfoWrapper();\n }\n },\n });\n\n isProxied = true;\n }\n }\n },\n execute: async (event: Event) => {\n const locationHREF = getDecodeURI((typeof location !== 'undefined' && location.href) || '');\n\n let previousPage = '';\n if (sessionStorage && isStorageEnabled) {\n const URLInfo = await sessionStorage.get(URL_INFO_STORAGE_KEY);\n previousPage = URLInfo?.[PREVIOUS_PAGE_STORAGE_KEY] || document.referrer || '';\n\n if (!URLInfo?.[CURRENT_PAGE_STORAGE_KEY]) {\n await sessionStorage.set(URL_INFO_STORAGE_KEY, {\n ...(URLInfo || {}),\n [CURRENT_PAGE_STORAGE_KEY]: locationHREF,\n [PREVIOUS_PAGE_STORAGE_KEY]: previousPage,\n });\n }\n\n event.event_properties = {\n ...(event.event_properties || {}),\n '[Amplitude] Page Domain': addIfNotExist(\n event,\n '[Amplitude] Page Domain',\n (typeof location !== 'undefined' && location.hostname) || '',\n ),\n '[Amplitude] Page Location': addIfNotExist(event, '[Amplitude] Page Location', locationHREF),\n '[Amplitude] Page Path': addIfNotExist(\n event,\n '[Amplitude] Page Path',\n (typeof location !== 'undefined' && getDecodeURI(location.pathname)) || '',\n ),\n '[Amplitude] Page Title': addIfNotExist(\n event,\n '[Amplitude] Page Title',\n (typeof document !== 'undefined' && document.title) || '',\n ),\n '[Amplitude] Page URL': addIfNotExist(event, '[Amplitude] Page URL', locationHREF.split('?')[0]),\n '[Amplitude] Previous Page Location': previousPage,\n '[Amplitude] Previous Page Type': getPrevPageType(previousPage),\n };\n }\n\n return event;\n },\n teardown: async () => {\n if (globalScope) {\n globalScope.removeEventListener('popstate', saveUrlInfoWrapper);\n\n isTracking = false;\n\n if (sessionStorage && isStorageEnabled) {\n await sessionStorage.set(URL_INFO_STORAGE_KEY, {});\n }\n }\n },\n };\n\n return plugin;\n};\n\nfunction addIfNotExist(event: Event, key: string, value: string): string {\n if (!event.event_properties) {\n event.event_properties = {};\n }\n\n if ((event.event_properties as { [key: string]: any })[key] === undefined) {\n return value;\n }\n\n return (event.event_properties as { [key: string]: any })[key] as string;\n}\n"]}
1
+ {"version":3,"file":"page-url-enrichment.js","sourceRoot":"","sources":["../../src/page-url-enrichment.ts"],"names":[],"mappings":"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","sourcesContent":["import type { BrowserClient, BrowserConfig, EnrichmentPlugin, Event, Logger } from '@amplitude/analytics-types';\nimport { getGlobalScope, BrowserStorage, getDecodeURI } from '@amplitude/analytics-core';\n\nexport const CURRENT_PAGE_STORAGE_KEY = 'AMP_CURRENT_PAGE';\nexport const PREVIOUS_PAGE_STORAGE_KEY = 'AMP_PREVIOUS_PAGE';\n\nexport const URL_INFO_STORAGE_KEY = 'AMP_URL_INFO';\n\nexport type URLInfo = {\n [CURRENT_PAGE_STORAGE_KEY]?: string;\n [PREVIOUS_PAGE_STORAGE_KEY]?: string;\n};\n\nenum PreviousPageType {\n Direct = 'direct', // for no prev page or referrer\n Internal = 'internal', // for same domain - this excludes subdomains\n External = 'external', // for different domains\n}\n\nexport const isPageUrlEnrichmentEnabled = (option: unknown): boolean => {\n if (typeof option === 'boolean') {\n return option;\n }\n if (typeof option === 'object' && option !== null && 'pageUrlEnrichment' in option) {\n return Boolean((option as { pageUrlEnrichment?: boolean }).pageUrlEnrichment);\n }\n return false;\n};\n\nexport const pageUrlEnrichmentPlugin = (): EnrichmentPlugin => {\n const globalScope = getGlobalScope();\n let sessionStorage: BrowserStorage<URLInfo> | undefined = undefined;\n let isStorageEnabled = false;\n let loggerProvider: Logger | undefined = undefined;\n\n let isProxied = false;\n let isTracking = false;\n\n const getHostname = (url: string): string | undefined => {\n let hostname: string | undefined;\n\n try {\n const decodedUrl = getDecodeURI(url, loggerProvider);\n hostname = new URL(decodedUrl).hostname;\n } catch (e) {\n /* istanbul ignore next */\n loggerProvider?.error('Could not parse URL: ', e);\n }\n\n return hostname;\n };\n\n const getPrevPageType = (previousPage: string) => {\n const currentDomain = (typeof location !== 'undefined' && location.hostname) || '';\n const previousPageDomain = previousPage ? getHostname(previousPage) : undefined;\n\n switch (previousPageDomain) {\n case undefined:\n return PreviousPageType.Direct;\n case currentDomain:\n return PreviousPageType.Internal;\n default:\n return PreviousPageType.External;\n }\n };\n\n const saveURLInfo = async () => {\n if (sessionStorage && isStorageEnabled) {\n const URLInfo = await sessionStorage.get(URL_INFO_STORAGE_KEY);\n const previousURL = URLInfo?.[CURRENT_PAGE_STORAGE_KEY] || '';\n const currentURL = getDecodeURI((typeof location !== 'undefined' && location.href) || '');\n\n await sessionStorage.set(URL_INFO_STORAGE_KEY, {\n [CURRENT_PAGE_STORAGE_KEY]: currentURL,\n [PREVIOUS_PAGE_STORAGE_KEY]: previousURL,\n });\n }\n };\n\n const saveUrlInfoWrapper = () => {\n void saveURLInfo();\n };\n\n const plugin: EnrichmentPlugin = {\n name: '@amplitude/plugin-page-url-enrichment-browser',\n type: 'enrichment',\n\n setup: async (config: BrowserConfig, _: BrowserClient) => {\n loggerProvider = config.loggerProvider;\n loggerProvider.log('Installing @amplitude/plugin-page-url-enrichment-browser');\n\n isTracking = true;\n\n if (globalScope) {\n sessionStorage = new BrowserStorage<URLInfo>(globalScope.sessionStorage);\n isStorageEnabled = await sessionStorage.isEnabled();\n\n globalScope.addEventListener('popstate', saveUrlInfoWrapper);\n\n if (!isProxied) {\n /* istanbul ignore next */\n // There is no global browser listener for changes to history, so we have\n // to modify pushState and replaceState 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 saveUrlInfoWrapper();\n }\n },\n });\n\n // eslint-disable-next-line @typescript-eslint/unbound-method\n globalScope.history.replaceState = new Proxy(globalScope.history.replaceState, {\n apply: (target, thisArg, [state, unused, url]) => {\n target.apply(thisArg, [state, unused, url]);\n if (isTracking) {\n saveUrlInfoWrapper();\n }\n },\n });\n\n isProxied = true;\n }\n }\n },\n execute: async (event: Event) => {\n const locationHREF = getDecodeURI((typeof location !== 'undefined' && location.href) || '');\n\n let previousPage = '';\n if (sessionStorage && isStorageEnabled) {\n const URLInfo = await sessionStorage.get(URL_INFO_STORAGE_KEY);\n previousPage = URLInfo?.[PREVIOUS_PAGE_STORAGE_KEY] || document.referrer || '';\n\n if (!URLInfo?.[CURRENT_PAGE_STORAGE_KEY]) {\n await sessionStorage.set(URL_INFO_STORAGE_KEY, {\n ...(URLInfo || {}),\n [CURRENT_PAGE_STORAGE_KEY]: locationHREF,\n [PREVIOUS_PAGE_STORAGE_KEY]: previousPage,\n });\n }\n\n event.event_properties = {\n ...(event.event_properties || {}),\n '[Amplitude] Page Domain': addIfNotExist(\n event,\n '[Amplitude] Page Domain',\n (typeof location !== 'undefined' && location.hostname) || '',\n ),\n '[Amplitude] Page Location': addIfNotExist(event, '[Amplitude] Page Location', locationHREF),\n '[Amplitude] Page Path': addIfNotExist(\n event,\n '[Amplitude] Page Path',\n (typeof location !== 'undefined' && getDecodeURI(location.pathname)) || '',\n ),\n '[Amplitude] Page Title': addIfNotExist(\n event,\n '[Amplitude] Page Title',\n (typeof document !== 'undefined' && document.title) || '',\n ),\n '[Amplitude] Page URL': addIfNotExist(event, '[Amplitude] Page URL', locationHREF.split('?')[0]),\n '[Amplitude] Previous Page Location': previousPage,\n '[Amplitude] Previous Page Type': getPrevPageType(previousPage),\n };\n }\n\n return event;\n },\n teardown: async () => {\n if (globalScope) {\n globalScope.removeEventListener('popstate', saveUrlInfoWrapper);\n\n isTracking = false;\n\n if (sessionStorage && isStorageEnabled) {\n await sessionStorage.set(URL_INFO_STORAGE_KEY, {});\n }\n }\n },\n };\n\n return plugin;\n};\n\nfunction addIfNotExist(event: Event, key: string, value: string): string {\n if (!event.event_properties) {\n event.event_properties = {};\n }\n\n if ((event.event_properties as { [key: string]: any })[key] === undefined) {\n return value;\n }\n\n return (event.event_properties as { [key: string]: any })[key] as string;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"page-url-enrichment.d.ts","sourceRoot":"","sources":["../../src/page-url-enrichment.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAgC,gBAAgB,EAAiB,MAAM,4BAA4B,CAAC;AAGhH,eAAO,MAAM,wBAAwB,qBAAqB,CAAC;AAC3D,eAAO,MAAM,yBAAyB,sBAAsB,CAAC;AAE7D,eAAO,MAAM,oBAAoB,iBAAiB,CAAC;AAEnD,MAAM,MAAM,OAAO,GAAG;IACpB,CAAC,wBAAwB,CAAC,CAAC,EAAE,MAAM,CAAC;IACpC,CAAC,yBAAyB,CAAC,CAAC,EAAE,MAAM,CAAC;CACtC,CAAC;AAQF,eAAO,MAAM,0BAA0B,WAAY,OAAO,KAAG,OAQ5D,CAAC;AAEF,eAAO,MAAM,uBAAuB,QAAO,gBAuK1C,CAAC"}
1
+ {"version":3,"file":"page-url-enrichment.d.ts","sourceRoot":"","sources":["../../src/page-url-enrichment.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAgC,gBAAgB,EAAiB,MAAM,4BAA4B,CAAC;AAGhH,eAAO,MAAM,wBAAwB,qBAAqB,CAAC;AAC3D,eAAO,MAAM,yBAAyB,sBAAsB,CAAC;AAE7D,eAAO,MAAM,oBAAoB,iBAAiB,CAAC;AAEnD,MAAM,MAAM,OAAO,GAAG;IACpB,CAAC,wBAAwB,CAAC,CAAC,EAAE,MAAM,CAAC;IACpC,CAAC,yBAAyB,CAAC,CAAC,EAAE,MAAM,CAAC;CACtC,CAAC;AAQF,eAAO,MAAM,0BAA0B,WAAY,OAAO,KAAG,OAQ5D,CAAC;AAEF,eAAO,MAAM,uBAAuB,QAAO,gBA2J1C,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { __assign, __awaiter, __generator, __read } from "tslib";
2
- import { getGlobalScope, BrowserStorage } from '@amplitude/analytics-core';
2
+ import { getGlobalScope, BrowserStorage, getDecodeURI } from '@amplitude/analytics-core';
3
3
  export var CURRENT_PAGE_STORAGE_KEY = 'AMP_CURRENT_PAGE';
4
4
  export var PREVIOUS_PAGE_STORAGE_KEY = 'AMP_PREVIOUS_PAGE';
5
5
  export var URL_INFO_STORAGE_KEY = 'AMP_URL_INFO';
@@ -25,21 +25,10 @@ export var pageUrlEnrichmentPlugin = function () {
25
25
  var loggerProvider = undefined;
26
26
  var isProxied = false;
27
27
  var isTracking = false;
28
- var getDecodeURI = function (locationStr) {
29
- var decodedLocationStr = locationStr;
30
- try {
31
- decodedLocationStr = decodeURI(locationStr);
32
- }
33
- catch (e) {
34
- /* istanbul ignore next */
35
- loggerProvider === null || loggerProvider === void 0 ? void 0 : loggerProvider.error('Malformed URI sequence: ', e);
36
- }
37
- return decodedLocationStr;
38
- };
39
28
  var getHostname = function (url) {
40
29
  var hostname;
41
30
  try {
42
- var decodedUrl = getDecodeURI(url);
31
+ var decodedUrl = getDecodeURI(url, loggerProvider);
43
32
  hostname = new URL(decodedUrl).hostname;
44
33
  }
45
34
  catch (e) {
@@ -1 +1 @@
1
- {"version":3,"file":"page-url-enrichment.js","sourceRoot":"","sources":["../../src/page-url-enrichment.ts"],"names":[],"mappings":"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","sourcesContent":["import type { BrowserClient, BrowserConfig, EnrichmentPlugin, Event, Logger } from '@amplitude/analytics-types';\nimport { getGlobalScope, BrowserStorage } from '@amplitude/analytics-core';\n\nexport const CURRENT_PAGE_STORAGE_KEY = 'AMP_CURRENT_PAGE';\nexport const PREVIOUS_PAGE_STORAGE_KEY = 'AMP_PREVIOUS_PAGE';\n\nexport const URL_INFO_STORAGE_KEY = 'AMP_URL_INFO';\n\nexport type URLInfo = {\n [CURRENT_PAGE_STORAGE_KEY]?: string;\n [PREVIOUS_PAGE_STORAGE_KEY]?: string;\n};\n\nenum PreviousPageType {\n Direct = 'direct', // for no prev page or referrer\n Internal = 'internal', // for same domain - this excludes subdomains\n External = 'external', // for different domains\n}\n\nexport const isPageUrlEnrichmentEnabled = (option: unknown): boolean => {\n if (typeof option === 'boolean') {\n return option;\n }\n if (typeof option === 'object' && option !== null && 'pageUrlEnrichment' in option) {\n return Boolean((option as { pageUrlEnrichment?: boolean }).pageUrlEnrichment);\n }\n return false;\n};\n\nexport const pageUrlEnrichmentPlugin = (): EnrichmentPlugin => {\n const globalScope = getGlobalScope();\n let sessionStorage: BrowserStorage<URLInfo> | undefined = undefined;\n let isStorageEnabled = false;\n let loggerProvider: Logger | undefined = undefined;\n\n let isProxied = false;\n let isTracking = false;\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 getHostname = (url: string): string | undefined => {\n let hostname: string | undefined;\n\n try {\n const decodedUrl = getDecodeURI(url);\n hostname = new URL(decodedUrl).hostname;\n } catch (e) {\n /* istanbul ignore next */\n loggerProvider?.error('Could not parse URL: ', e);\n }\n\n return hostname;\n };\n\n const getPrevPageType = (previousPage: string) => {\n const currentDomain = (typeof location !== 'undefined' && location.hostname) || '';\n const previousPageDomain = previousPage ? getHostname(previousPage) : undefined;\n\n switch (previousPageDomain) {\n case undefined:\n return PreviousPageType.Direct;\n case currentDomain:\n return PreviousPageType.Internal;\n default:\n return PreviousPageType.External;\n }\n };\n\n const saveURLInfo = async () => {\n if (sessionStorage && isStorageEnabled) {\n const URLInfo = await sessionStorage.get(URL_INFO_STORAGE_KEY);\n const previousURL = URLInfo?.[CURRENT_PAGE_STORAGE_KEY] || '';\n const currentURL = getDecodeURI((typeof location !== 'undefined' && location.href) || '');\n\n await sessionStorage.set(URL_INFO_STORAGE_KEY, {\n [CURRENT_PAGE_STORAGE_KEY]: currentURL,\n [PREVIOUS_PAGE_STORAGE_KEY]: previousURL,\n });\n }\n };\n\n const saveUrlInfoWrapper = () => {\n void saveURLInfo();\n };\n\n const plugin: EnrichmentPlugin = {\n name: '@amplitude/plugin-page-url-enrichment-browser',\n type: 'enrichment',\n\n setup: async (config: BrowserConfig, _: BrowserClient) => {\n loggerProvider = config.loggerProvider;\n loggerProvider.log('Installing @amplitude/plugin-page-url-enrichment-browser');\n\n isTracking = true;\n\n if (globalScope) {\n sessionStorage = new BrowserStorage<URLInfo>(globalScope.sessionStorage);\n isStorageEnabled = await sessionStorage.isEnabled();\n\n globalScope.addEventListener('popstate', saveUrlInfoWrapper);\n\n if (!isProxied) {\n /* istanbul ignore next */\n // There is no global browser listener for changes to history, so we have\n // to modify pushState and replaceState 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 saveUrlInfoWrapper();\n }\n },\n });\n\n // eslint-disable-next-line @typescript-eslint/unbound-method\n globalScope.history.replaceState = new Proxy(globalScope.history.replaceState, {\n apply: (target, thisArg, [state, unused, url]) => {\n target.apply(thisArg, [state, unused, url]);\n if (isTracking) {\n saveUrlInfoWrapper();\n }\n },\n });\n\n isProxied = true;\n }\n }\n },\n execute: async (event: Event) => {\n const locationHREF = getDecodeURI((typeof location !== 'undefined' && location.href) || '');\n\n let previousPage = '';\n if (sessionStorage && isStorageEnabled) {\n const URLInfo = await sessionStorage.get(URL_INFO_STORAGE_KEY);\n previousPage = URLInfo?.[PREVIOUS_PAGE_STORAGE_KEY] || document.referrer || '';\n\n if (!URLInfo?.[CURRENT_PAGE_STORAGE_KEY]) {\n await sessionStorage.set(URL_INFO_STORAGE_KEY, {\n ...(URLInfo || {}),\n [CURRENT_PAGE_STORAGE_KEY]: locationHREF,\n [PREVIOUS_PAGE_STORAGE_KEY]: previousPage,\n });\n }\n\n event.event_properties = {\n ...(event.event_properties || {}),\n '[Amplitude] Page Domain': addIfNotExist(\n event,\n '[Amplitude] Page Domain',\n (typeof location !== 'undefined' && location.hostname) || '',\n ),\n '[Amplitude] Page Location': addIfNotExist(event, '[Amplitude] Page Location', locationHREF),\n '[Amplitude] Page Path': addIfNotExist(\n event,\n '[Amplitude] Page Path',\n (typeof location !== 'undefined' && getDecodeURI(location.pathname)) || '',\n ),\n '[Amplitude] Page Title': addIfNotExist(\n event,\n '[Amplitude] Page Title',\n (typeof document !== 'undefined' && document.title) || '',\n ),\n '[Amplitude] Page URL': addIfNotExist(event, '[Amplitude] Page URL', locationHREF.split('?')[0]),\n '[Amplitude] Previous Page Location': previousPage,\n '[Amplitude] Previous Page Type': getPrevPageType(previousPage),\n };\n }\n\n return event;\n },\n teardown: async () => {\n if (globalScope) {\n globalScope.removeEventListener('popstate', saveUrlInfoWrapper);\n\n isTracking = false;\n\n if (sessionStorage && isStorageEnabled) {\n await sessionStorage.set(URL_INFO_STORAGE_KEY, {});\n }\n }\n },\n };\n\n return plugin;\n};\n\nfunction addIfNotExist(event: Event, key: string, value: string): string {\n if (!event.event_properties) {\n event.event_properties = {};\n }\n\n if ((event.event_properties as { [key: string]: any })[key] === undefined) {\n return value;\n }\n\n return (event.event_properties as { [key: string]: any })[key] as string;\n}\n"]}
1
+ {"version":3,"file":"page-url-enrichment.js","sourceRoot":"","sources":["../../src/page-url-enrichment.ts"],"names":[],"mappings":"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","sourcesContent":["import type { BrowserClient, BrowserConfig, EnrichmentPlugin, Event, Logger } from '@amplitude/analytics-types';\nimport { getGlobalScope, BrowserStorage, getDecodeURI } from '@amplitude/analytics-core';\n\nexport const CURRENT_PAGE_STORAGE_KEY = 'AMP_CURRENT_PAGE';\nexport const PREVIOUS_PAGE_STORAGE_KEY = 'AMP_PREVIOUS_PAGE';\n\nexport const URL_INFO_STORAGE_KEY = 'AMP_URL_INFO';\n\nexport type URLInfo = {\n [CURRENT_PAGE_STORAGE_KEY]?: string;\n [PREVIOUS_PAGE_STORAGE_KEY]?: string;\n};\n\nenum PreviousPageType {\n Direct = 'direct', // for no prev page or referrer\n Internal = 'internal', // for same domain - this excludes subdomains\n External = 'external', // for different domains\n}\n\nexport const isPageUrlEnrichmentEnabled = (option: unknown): boolean => {\n if (typeof option === 'boolean') {\n return option;\n }\n if (typeof option === 'object' && option !== null && 'pageUrlEnrichment' in option) {\n return Boolean((option as { pageUrlEnrichment?: boolean }).pageUrlEnrichment);\n }\n return false;\n};\n\nexport const pageUrlEnrichmentPlugin = (): EnrichmentPlugin => {\n const globalScope = getGlobalScope();\n let sessionStorage: BrowserStorage<URLInfo> | undefined = undefined;\n let isStorageEnabled = false;\n let loggerProvider: Logger | undefined = undefined;\n\n let isProxied = false;\n let isTracking = false;\n\n const getHostname = (url: string): string | undefined => {\n let hostname: string | undefined;\n\n try {\n const decodedUrl = getDecodeURI(url, loggerProvider);\n hostname = new URL(decodedUrl).hostname;\n } catch (e) {\n /* istanbul ignore next */\n loggerProvider?.error('Could not parse URL: ', e);\n }\n\n return hostname;\n };\n\n const getPrevPageType = (previousPage: string) => {\n const currentDomain = (typeof location !== 'undefined' && location.hostname) || '';\n const previousPageDomain = previousPage ? getHostname(previousPage) : undefined;\n\n switch (previousPageDomain) {\n case undefined:\n return PreviousPageType.Direct;\n case currentDomain:\n return PreviousPageType.Internal;\n default:\n return PreviousPageType.External;\n }\n };\n\n const saveURLInfo = async () => {\n if (sessionStorage && isStorageEnabled) {\n const URLInfo = await sessionStorage.get(URL_INFO_STORAGE_KEY);\n const previousURL = URLInfo?.[CURRENT_PAGE_STORAGE_KEY] || '';\n const currentURL = getDecodeURI((typeof location !== 'undefined' && location.href) || '');\n\n await sessionStorage.set(URL_INFO_STORAGE_KEY, {\n [CURRENT_PAGE_STORAGE_KEY]: currentURL,\n [PREVIOUS_PAGE_STORAGE_KEY]: previousURL,\n });\n }\n };\n\n const saveUrlInfoWrapper = () => {\n void saveURLInfo();\n };\n\n const plugin: EnrichmentPlugin = {\n name: '@amplitude/plugin-page-url-enrichment-browser',\n type: 'enrichment',\n\n setup: async (config: BrowserConfig, _: BrowserClient) => {\n loggerProvider = config.loggerProvider;\n loggerProvider.log('Installing @amplitude/plugin-page-url-enrichment-browser');\n\n isTracking = true;\n\n if (globalScope) {\n sessionStorage = new BrowserStorage<URLInfo>(globalScope.sessionStorage);\n isStorageEnabled = await sessionStorage.isEnabled();\n\n globalScope.addEventListener('popstate', saveUrlInfoWrapper);\n\n if (!isProxied) {\n /* istanbul ignore next */\n // There is no global browser listener for changes to history, so we have\n // to modify pushState and replaceState 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 saveUrlInfoWrapper();\n }\n },\n });\n\n // eslint-disable-next-line @typescript-eslint/unbound-method\n globalScope.history.replaceState = new Proxy(globalScope.history.replaceState, {\n apply: (target, thisArg, [state, unused, url]) => {\n target.apply(thisArg, [state, unused, url]);\n if (isTracking) {\n saveUrlInfoWrapper();\n }\n },\n });\n\n isProxied = true;\n }\n }\n },\n execute: async (event: Event) => {\n const locationHREF = getDecodeURI((typeof location !== 'undefined' && location.href) || '');\n\n let previousPage = '';\n if (sessionStorage && isStorageEnabled) {\n const URLInfo = await sessionStorage.get(URL_INFO_STORAGE_KEY);\n previousPage = URLInfo?.[PREVIOUS_PAGE_STORAGE_KEY] || document.referrer || '';\n\n if (!URLInfo?.[CURRENT_PAGE_STORAGE_KEY]) {\n await sessionStorage.set(URL_INFO_STORAGE_KEY, {\n ...(URLInfo || {}),\n [CURRENT_PAGE_STORAGE_KEY]: locationHREF,\n [PREVIOUS_PAGE_STORAGE_KEY]: previousPage,\n });\n }\n\n event.event_properties = {\n ...(event.event_properties || {}),\n '[Amplitude] Page Domain': addIfNotExist(\n event,\n '[Amplitude] Page Domain',\n (typeof location !== 'undefined' && location.hostname) || '',\n ),\n '[Amplitude] Page Location': addIfNotExist(event, '[Amplitude] Page Location', locationHREF),\n '[Amplitude] Page Path': addIfNotExist(\n event,\n '[Amplitude] Page Path',\n (typeof location !== 'undefined' && getDecodeURI(location.pathname)) || '',\n ),\n '[Amplitude] Page Title': addIfNotExist(\n event,\n '[Amplitude] Page Title',\n (typeof document !== 'undefined' && document.title) || '',\n ),\n '[Amplitude] Page URL': addIfNotExist(event, '[Amplitude] Page URL', locationHREF.split('?')[0]),\n '[Amplitude] Previous Page Location': previousPage,\n '[Amplitude] Previous Page Type': getPrevPageType(previousPage),\n };\n }\n\n return event;\n },\n teardown: async () => {\n if (globalScope) {\n globalScope.removeEventListener('popstate', saveUrlInfoWrapper);\n\n isTracking = false;\n\n if (sessionStorage && isStorageEnabled) {\n await sessionStorage.set(URL_INFO_STORAGE_KEY, {});\n }\n }\n },\n };\n\n return plugin;\n};\n\nfunction addIfNotExist(event: Event, key: string, value: string): string {\n if (!event.event_properties) {\n event.event_properties = {};\n }\n\n if ((event.event_properties as { [key: string]: any })[key] === undefined) {\n return value;\n }\n\n return (event.event_properties as { [key: string]: any })[key] as string;\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=function(){return t=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},t.apply(this,arguments)};function n(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{l(r.next(e))}catch(e){i(e)}}function u(e){try{l(r.throw(e))}catch(e){i(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,u)}l((r=r.apply(e,t||[])).next())}))}function r(e,t){var n,r,o,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[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(l){return function(u){if(n)throw new TypeError("Generator is already executing.");for(;a&&(a=0,u[0]&&(i=0)),i;)try{if(n=1,r&&(o=2&u[0]?r.return:u[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,u[1])).done)return o;switch(r=0,o&&(u=[2&u[0],o.value]),u[0]){case 0:case 1:o=u;break;case 4:return i.label++,{value:u[1],done:!1};case 5:i.label++,r=u[1],u=[0];continue;case 7:u=i.ops.pop(),i.trys.pop();continue;default:if(!(o=i.trys,(o=o.length>0&&o[o.length-1])||6!==u[0]&&2!==u[0])){i=0;continue}if(3===u[0]&&(!o||u[1]>o[0]&&u[1]<o[3])){i.label=u[1];break}if(6===u[0]&&i.label<o[1]){i.label=o[1],o=u;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(u);break}o[2]&&i.ops.pop(),i.trys.pop();continue}u=t.call(e,i)}catch(e){u=[6,e],r=0}finally{n=o=0}if(5&u[0])throw u[1];return{value:u[0]?u[1]:void 0,done:!0}}([u,l])}}}function o(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,o,i=n.call(e),a=[];try{for(;(void 0===t||t-- >0)&&!(r=i.next()).done;)a.push(r.value)}catch(e){o={error:e}}finally{try{r&&!r.done&&(n=i.return)&&n.call(i)}finally{if(o)throw o.error}}return a}"function"==typeof SuppressedError&&SuppressedError;var i,a=function(){function e(e){this.storage=e}return e.prototype.isEnabled=function(){return n(this,void 0,void 0,(function(){var t,n,o;return r(this,(function(r){switch(r.label){case 0:if(!this.storage)return[2,!1];t=String(Date.now()),n=new e(this.storage),o="AMP_TEST",r.label=1;case 1:return r.trys.push([1,4,5,7]),[4,n.set(o,t)];case 2:return r.sent(),[4,n.get(o)];case 3:return[2,r.sent()===t];case 4:return r.sent(),[2,!1];case 5:return[4,n.remove(o)];case 6:return r.sent(),[7];case 7:return[2]}}))}))},e.prototype.get=function(e){return n(this,void 0,void 0,(function(){var t;return r(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 n(this,void 0,void 0,(function(){return r(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 o;return n(this,void 0,void 0,(function(){return r(this,(function(n){try{null===(o=this.storage)||void 0===o||o.setItem(e,JSON.stringify(t))}catch(e){}return[2]}))}))},e.prototype.remove=function(e){var t;return n(this,void 0,void 0,(function(){return r(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 n(this,void 0,void 0,(function(){return r(this,(function(t){try{null===(e=this.storage)||void 0===e||e.clear()}catch(e){}return[2]}))}))},e}(),u="AMP_CURRENT_PAGE",l="AMP_PREVIOUS_PAGE",s="AMP_URL_INFO";!function(e){e.Direct="direct",e.Internal="internal",e.External="external"}(i||(i={}));var c=function(){var e,c=(e="ampIntegrationContext","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),p=void 0,d=!1,v=void 0,h=!1,y=!1,g=function(e){var t=e;try{t=decodeURI(e)}catch(e){null==v||v.error("Malformed URI sequence: ",e)}return t},b=function(e){var t="undefined"!=typeof location&&location.hostname||"";switch(e?function(e){var t;try{var n=g(e);t=new URL(n).hostname}catch(e){null==v||v.error("Could not parse URL: ",e)}return t}(e):void 0){case void 0:return i.Direct;case t:return i.Internal;default:return i.External}},m=function(){n(void 0,void 0,void 0,(function(){var e,t,n,o;return r(this,(function(r){switch(r.label){case 0:return p&&d?[4,p.get(s)]:[3,3];case 1:return e=r.sent(),t=(null==e?void 0:e[u])||"",n=g("undefined"!=typeof location&&location.href||""),[4,p.set(s,(o={},o[u]=n,o[l]=t,o))];case 2:r.sent(),r.label=3;case 3:return[2]}}))}))};return{name:"@amplitude/plugin-page-url-enrichment-browser",type:"enrichment",setup:function(e,t){return n(void 0,void 0,void 0,(function(){return r(this,(function(t){switch(t.label){case 0:return(v=e.loggerProvider).log("Installing @amplitude/plugin-page-url-enrichment-browser"),y=!0,c?[4,(p=new a(c.sessionStorage)).isEnabled()]:[3,2];case 1:d=t.sent(),c.addEventListener("popstate",m),h||(c.history.pushState=new Proxy(c.history.pushState,{apply:function(e,t,n){var r=o(n,3),i=r[0],a=r[1],u=r[2];e.apply(t,[i,a,u]),y&&m()}}),c.history.replaceState=new Proxy(c.history.replaceState,{apply:function(e,t,n){var r=o(n,3),i=r[0],a=r[1],u=r[2];e.apply(t,[i,a,u]),y&&m()}}),h=!0),t.label=2;case 2:return[2]}}))}))},execute:function(e){return n(void 0,void 0,void 0,(function(){var n,o,i,a;return r(this,(function(r){switch(r.label){case 0:return n=g("undefined"!=typeof location&&location.href||""),o="",p&&d?[4,p.get(s)]:[3,4];case 1:return i=r.sent(),o=(null==i?void 0:i[l])||document.referrer||"",(null==i?void 0:i[u])?[3,3]:[4,p.set(s,t(t({},i||{}),(a={},a[u]=n,a[l]=o,a)))];case 2:r.sent(),r.label=3;case 3:e.event_properties=t(t({},e.event_properties||{}),{"[Amplitude] Page Domain":f(e,"[Amplitude] Page Domain","undefined"!=typeof location&&location.hostname||""),"[Amplitude] Page Location":f(e,"[Amplitude] Page Location",n),"[Amplitude] Page Path":f(e,"[Amplitude] Page Path","undefined"!=typeof location&&g(location.pathname)||""),"[Amplitude] Page Title":f(e,"[Amplitude] Page Title","undefined"!=typeof document&&document.title||""),"[Amplitude] Page URL":f(e,"[Amplitude] Page URL",n.split("?")[0]),"[Amplitude] Previous Page Location":o,"[Amplitude] Previous Page Type":b(o)}),r.label=4;case 4:return[2,e]}}))}))},teardown:function(){return n(void 0,void 0,void 0,(function(){return r(this,(function(e){switch(e.label){case 0:return c?(c.removeEventListener("popstate",m),y=!1,p&&d?[4,p.set(s,{})]:[3,2]):[3,2];case 1:e.sent(),e.label=2;case 2:return[2]}}))}))}}};function f(e,t,n){return e.event_properties||(e.event_properties={}),void 0===e.event_properties[t]?n:e.event_properties[t]}e.CURRENT_PAGE_STORAGE_KEY=u,e.PREVIOUS_PAGE_STORAGE_KEY=l,e.URL_INFO_STORAGE_KEY=s,e.pageUrlEnrichmentPlugin=c,e.plugin=c,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=function(){return t=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},t.apply(this,arguments)};function n(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{l(r.next(e))}catch(e){i(e)}}function u(e){try{l(r.throw(e))}catch(e){i(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,u)}l((r=r.apply(e,t||[])).next())}))}function r(e,t){var n,r,o,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[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(l){return function(u){if(n)throw new TypeError("Generator is already executing.");for(;a&&(a=0,u[0]&&(i=0)),i;)try{if(n=1,r&&(o=2&u[0]?r.return:u[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,u[1])).done)return o;switch(r=0,o&&(u=[2&u[0],o.value]),u[0]){case 0:case 1:o=u;break;case 4:return i.label++,{value:u[1],done:!1};case 5:i.label++,r=u[1],u=[0];continue;case 7:u=i.ops.pop(),i.trys.pop();continue;default:if(!(o=i.trys,(o=o.length>0&&o[o.length-1])||6!==u[0]&&2!==u[0])){i=0;continue}if(3===u[0]&&(!o||u[1]>o[0]&&u[1]<o[3])){i.label=u[1];break}if(6===u[0]&&i.label<o[1]){i.label=o[1],o=u;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(u);break}o[2]&&i.ops.pop(),i.trys.pop();continue}u=t.call(e,i)}catch(e){u=[6,e],r=0}finally{n=o=0}if(5&u[0])throw u[1];return{value:u[0]?u[1]:void 0,done:!0}}([u,l])}}}function o(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,o,i=n.call(e),a=[];try{for(;(void 0===t||t-- >0)&&!(r=i.next()).done;)a.push(r.value)}catch(e){o={error:e}}finally{try{r&&!r.done&&(n=i.return)&&n.call(i)}finally{if(o)throw o.error}}return a}"function"==typeof SuppressedError&&SuppressedError;var i,a=function(e,t){var n=e;try{n=decodeURI(e)}catch(e){null==t||t.error("Malformed URI sequence: ",e)}return n},u=function(){function e(e){this.storage=e}return e.prototype.isEnabled=function(){return n(this,void 0,void 0,(function(){var t,n,o;return r(this,(function(r){switch(r.label){case 0:if(!this.storage)return[2,!1];t=String(Date.now()),n=new e(this.storage),o="AMP_TEST",r.label=1;case 1:return r.trys.push([1,4,5,7]),[4,n.set(o,t)];case 2:return r.sent(),[4,n.get(o)];case 3:return[2,r.sent()===t];case 4:return r.sent(),[2,!1];case 5:return[4,n.remove(o)];case 6:return r.sent(),[7];case 7:return[2]}}))}))},e.prototype.get=function(e){return n(this,void 0,void 0,(function(){var t;return r(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 n(this,void 0,void 0,(function(){return r(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 o;return n(this,void 0,void 0,(function(){return r(this,(function(n){try{null===(o=this.storage)||void 0===o||o.setItem(e,JSON.stringify(t))}catch(e){}return[2]}))}))},e.prototype.remove=function(e){var t;return n(this,void 0,void 0,(function(){return r(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 n(this,void 0,void 0,(function(){return r(this,(function(t){try{null===(e=this.storage)||void 0===e||e.clear()}catch(e){}return[2]}))}))},e}(),l="AMP_CURRENT_PAGE",s="AMP_PREVIOUS_PAGE",c="AMP_URL_INFO";!function(e){e.Direct="direct",e.Internal="internal",e.External="external"}(i||(i={}));var f=function(){var e,f=(e="ampIntegrationContext","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),d=void 0,v=!1,h=void 0,y=!1,g=!1,b=function(e){var t="undefined"!=typeof location&&location.hostname||"";switch(e?function(e){var t;try{var n=a(e,h);t=new URL(n).hostname}catch(e){null==h||h.error("Could not parse URL: ",e)}return t}(e):void 0){case void 0:return i.Direct;case t:return i.Internal;default:return i.External}},m=function(){n(void 0,void 0,void 0,(function(){var e,t,n,o;return r(this,(function(r){switch(r.label){case 0:return d&&v?[4,d.get(c)]:[3,3];case 1:return e=r.sent(),t=(null==e?void 0:e[l])||"",n=a("undefined"!=typeof location&&location.href||""),[4,d.set(c,(o={},o[l]=n,o[s]=t,o))];case 2:r.sent(),r.label=3;case 3:return[2]}}))}))};return{name:"@amplitude/plugin-page-url-enrichment-browser",type:"enrichment",setup:function(e,t){return n(void 0,void 0,void 0,(function(){return r(this,(function(t){switch(t.label){case 0:return(h=e.loggerProvider).log("Installing @amplitude/plugin-page-url-enrichment-browser"),g=!0,f?[4,(d=new u(f.sessionStorage)).isEnabled()]:[3,2];case 1:v=t.sent(),f.addEventListener("popstate",m),y||(f.history.pushState=new Proxy(f.history.pushState,{apply:function(e,t,n){var r=o(n,3),i=r[0],a=r[1],u=r[2];e.apply(t,[i,a,u]),g&&m()}}),f.history.replaceState=new Proxy(f.history.replaceState,{apply:function(e,t,n){var r=o(n,3),i=r[0],a=r[1],u=r[2];e.apply(t,[i,a,u]),g&&m()}}),y=!0),t.label=2;case 2:return[2]}}))}))},execute:function(e){return n(void 0,void 0,void 0,(function(){var n,o,i,u;return r(this,(function(r){switch(r.label){case 0:return n=a("undefined"!=typeof location&&location.href||""),o="",d&&v?[4,d.get(c)]:[3,4];case 1:return i=r.sent(),o=(null==i?void 0:i[s])||document.referrer||"",(null==i?void 0:i[l])?[3,3]:[4,d.set(c,t(t({},i||{}),(u={},u[l]=n,u[s]=o,u)))];case 2:r.sent(),r.label=3;case 3:e.event_properties=t(t({},e.event_properties||{}),{"[Amplitude] Page Domain":p(e,"[Amplitude] Page Domain","undefined"!=typeof location&&location.hostname||""),"[Amplitude] Page Location":p(e,"[Amplitude] Page Location",n),"[Amplitude] Page Path":p(e,"[Amplitude] Page Path","undefined"!=typeof location&&a(location.pathname)||""),"[Amplitude] Page Title":p(e,"[Amplitude] Page Title","undefined"!=typeof document&&document.title||""),"[Amplitude] Page URL":p(e,"[Amplitude] Page URL",n.split("?")[0]),"[Amplitude] Previous Page Location":o,"[Amplitude] Previous Page Type":b(o)}),r.label=4;case 4:return[2,e]}}))}))},teardown:function(){return n(void 0,void 0,void 0,(function(){return r(this,(function(e){switch(e.label){case 0:return f?(f.removeEventListener("popstate",m),g=!1,d&&v?[4,d.set(c,{})]:[3,2]):[3,2];case 1:e.sent(),e.label=2;case 2:return[2]}}))}))}}};function p(e,t,n){return e.event_properties||(e.event_properties={}),void 0===e.event_properties[t]?n:e.event_properties[t]}e.CURRENT_PAGE_STORAGE_KEY=l,e.PREVIOUS_PAGE_STORAGE_KEY=s,e.URL_INFO_STORAGE_KEY=c,e.pageUrlEnrichmentPlugin=f,e.plugin=f,Object.defineProperty(e,"__esModule",{value:!0})}));
Binary file
@@ -1 +1 @@
1
- {"version":3,"file":"page-url-enrichment.d.ts","sourceRoot":"","sources":["../../src/page-url-enrichment.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAgC,gBAAgB,EAAiB,MAAM,4BAA4B,CAAC;AAGhH,eAAO,MAAM,wBAAwB,qBAAqB,CAAC;AAC3D,eAAO,MAAM,yBAAyB,sBAAsB,CAAC;AAE7D,eAAO,MAAM,oBAAoB,iBAAiB,CAAC;AAEnD,MAAM,MAAM,OAAO,GAAG;IACpB,CAAC,wBAAwB,CAAC,CAAC,EAAE,MAAM,CAAC;IACpC,CAAC,yBAAyB,CAAC,CAAC,EAAE,MAAM,CAAC;CACtC,CAAC;AAQF,eAAO,MAAM,0BAA0B,WAAY,OAAO,KAAG,OAQ5D,CAAC;AAEF,eAAO,MAAM,uBAAuB,QAAO,gBAuK1C,CAAC"}
1
+ {"version":3,"file":"page-url-enrichment.d.ts","sourceRoot":"","sources":["../../src/page-url-enrichment.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAgC,gBAAgB,EAAiB,MAAM,4BAA4B,CAAC;AAGhH,eAAO,MAAM,wBAAwB,qBAAqB,CAAC;AAC3D,eAAO,MAAM,yBAAyB,sBAAsB,CAAC;AAE7D,eAAO,MAAM,oBAAoB,iBAAiB,CAAC;AAEnD,MAAM,MAAM,OAAO,GAAG;IACpB,CAAC,wBAAwB,CAAC,CAAC,EAAE,MAAM,CAAC;IACpC,CAAC,yBAAyB,CAAC,CAAC,EAAE,MAAM,CAAC;CACtC,CAAC;AAQF,eAAO,MAAM,0BAA0B,WAAY,OAAO,KAAG,OAQ5D,CAAC;AAEF,eAAO,MAAM,uBAAuB,QAAO,gBA2J1C,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@amplitude/plugin-page-url-enrichment-browser",
3
- "version": "0.2.8",
3
+ "version": "0.2.10",
4
4
  "description": "",
5
5
  "author": "Amplitude Inc",
6
6
  "homepage": "https://github.com/amplitude/Amplitude-TypeScript",
@@ -37,8 +37,8 @@
37
37
  "url": "https://github.com/amplitude/Amplitude-TypeScript/issues"
38
38
  },
39
39
  "dependencies": {
40
- "@amplitude/analytics-client-common": "^2.3.40",
41
- "@amplitude/analytics-core": "^2.23.0",
40
+ "@amplitude/analytics-client-common": "^2.3.42",
41
+ "@amplitude/analytics-core": "^2.24.1",
42
42
  "@amplitude/analytics-types": "^2.10.0",
43
43
  "tslib": "^2.4.1"
44
44
  },
@@ -54,5 +54,5 @@
54
54
  "files": [
55
55
  "lib"
56
56
  ],
57
- "gitHead": "2213a341a43bd67637d4325c2838bea9423544f0"
57
+ "gitHead": "de2752c03744f14a0afe364f927db9d48c3b07fc"
58
58
  }