@amplitude/analytics-browser 2.33.5 → 2.34.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/README.md +1 -1
- package/lib/cjs/config.d.ts +1 -1
- package/lib/cjs/default-tracking.d.ts +2 -1
- package/lib/cjs/default-tracking.d.ts.map +1 -1
- package/lib/cjs/default-tracking.js +11 -1
- package/lib/cjs/default-tracking.js.map +1 -1
- package/lib/cjs/plugins/form-interaction-tracking.d.ts.map +1 -1
- package/lib/cjs/plugins/form-interaction-tracking.js +24 -1
- package/lib/cjs/plugins/form-interaction-tracking.js.map +1 -1
- package/lib/cjs/version.d.ts +1 -1
- package/lib/cjs/version.js +1 -1
- package/lib/cjs/version.js.map +1 -1
- package/lib/esm/config.d.ts +1 -1
- package/lib/esm/default-tracking.d.ts +2 -1
- package/lib/esm/default-tracking.d.ts.map +1 -1
- package/lib/esm/default-tracking.js +9 -0
- package/lib/esm/default-tracking.js.map +1 -1
- package/lib/esm/plugins/form-interaction-tracking.d.ts.map +1 -1
- package/lib/esm/plugins/form-interaction-tracking.js +25 -2
- package/lib/esm/plugins/form-interaction-tracking.js.map +1 -1
- package/lib/esm/version.d.ts +1 -1
- package/lib/esm/version.js +1 -1
- package/lib/esm/version.js.map +1 -1
- package/lib/scripts/amplitude-bookmarklet-snippet-min.js +1 -1
- package/lib/scripts/amplitude-bookmarklet.html +1 -1
- package/lib/scripts/amplitude-gtm-min.js +1 -1
- package/lib/scripts/amplitude-gtm-min.js.gz +0 -0
- package/lib/scripts/amplitude-gtm-min.js.map +1 -1
- package/lib/scripts/amplitude-gtm-snippet-min.js +1 -1
- package/lib/scripts/amplitude-min.js +1 -1
- package/lib/scripts/amplitude-min.js.gz +0 -0
- package/lib/scripts/amplitude-min.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/amplitude-snippet-instructions.html +1 -1
- package/lib/scripts/amplitude-snippet-min.js +1 -1
- package/lib/scripts/config.d.ts +1 -1
- package/lib/scripts/default-tracking.d.ts +2 -1
- package/lib/scripts/default-tracking.d.ts.map +1 -1
- package/lib/scripts/plugins/form-interaction-tracking.d.ts.map +1 -1
- package/lib/scripts/version.d.ts +1 -1
- package/package.json +8 -7
package/README.md
CHANGED
|
@@ -53,7 +53,7 @@ This SDK is also available through CDN. Copy the script loader below and paste b
|
|
|
53
53
|
<!-- README_SNIPPET_BLOCK -->
|
|
54
54
|
```html
|
|
55
55
|
<script type="text/javascript">
|
|
56
|
-
!function(){"use strict";!function(e,t){var r=e.amplitude||{_q:[],_iq:{}};if(r.invoked)e.console&&console.error&&console.error("Amplitude snippet has been loaded.");else{var n=function(e,t){e.prototype[t]=function(){return this._q.push({name:t,args:Array.prototype.slice.call(arguments,0)}),this}},s=function(e,t,r){return function(n){e._q.push({name:t,args:Array.prototype.slice.call(r,0),resolve:n})}},
|
|
56
|
+
!function(){"use strict";!function(e,t){var r=e.amplitude||{_q:[],_iq:{}};if(r.invoked)e.console&&console.error&&console.error("Amplitude snippet has been loaded.");else{var n=function(e,t){e.prototype[t]=function(){return this._q.push({name:t,args:Array.prototype.slice.call(arguments,0)}),this}},s=function(e,t,r){return function(n){e._q.push({name:t,args:Array.prototype.slice.call(r,0),resolve:n})}},i=function(e,t,r){e[t]=function(){if(r)return{promise:new Promise(s(e,t,Array.prototype.slice.call(arguments)))};!function(e,t,r){e._q.push({name:t,args:Array.prototype.slice.call(r,0)})}(e,t,Array.prototype.slice.call(arguments))}},o=function(e){for(var t=0;t<m.length;t++)i(e,m[t],!1);for(var r=0;r<y.length;r++)i(e,y[r],!0)};r.invoked=!0;var c=t.createElement("script");c.type="text/javascript",c.integrity="sha384-w6jnsz1UVI8/tE15OISsDGEwBXn+DnL4t6sAQk2CimY5iBtLvv5Ct4i+Hm8mIPmJ",c.crossOrigin="anonymous",c.async=!0,c.src="https://cdn.amplitude.com/libs/analytics-browser-2.34.0-min.js.gz",c.onload=function(){e.amplitude.runQueuedFunctions||console.log("[Amplitude] Error: could not load SDK")};var a=t.getElementsByTagName("script")[0];a.parentNode.insertBefore(c,a);for(var u=function(){return this._q=[],this},p=["add","append","clearAll","prepend","set","setOnce","unset","preInsert","postInsert","remove","getUserProperties"],l=0;l<p.length;l++)n(u,p[l]);r.Identify=u;for(var d=function(){return this._q=[],this},v=["getEventProperties","setProductId","setQuantity","setPrice","setRevenue","setRevenueType","setReceipt","setReceiptSig","setCurrency","setEventProperties"],f=0;f<v.length;f++)n(d,v[f]);r.Revenue=d;var m=["getDeviceId","setDeviceId","getSessionId","setSessionId","getUserId","setUserId","setOptOut","setTransport","reset","extendSession"],y=["init","add","remove","track","logEvent","identify","groupIdentify","setGroup","revenue","flush"];o(r),r.createInstance=function(e){return r._iq[e]={_q:[]},o(r._iq[e]),r._iq[e]},e.amplitude=r}}(window,document)}();
|
|
57
57
|
|
|
58
58
|
amplitude.init("<YOUR_API_KEY>");
|
|
59
59
|
</script>
|
package/lib/cjs/config.d.ts
CHANGED
|
@@ -36,7 +36,7 @@ export declare class BrowserConfig extends Config implements IBrowserConfig {
|
|
|
36
36
|
diagnosticsSampleRate: number;
|
|
37
37
|
diagnosticsClient?: IDiagnosticsClient | undefined;
|
|
38
38
|
remoteConfig?: RemoteConfigOptions | undefined;
|
|
39
|
-
readonly version = "2.
|
|
39
|
+
readonly version = "2.34.0";
|
|
40
40
|
protected _cookieStorage: Storage<UserSession>;
|
|
41
41
|
protected _deviceId?: string;
|
|
42
42
|
protected _lastEventId?: number;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { PageTrackingOptions, ElementInteractionsOptions, BrowserOptions, AutocaptureOptions, AttributionOptions, NetworkTrackingOptions, FrustrationInteractionsOptions } from '@amplitude/analytics-core';
|
|
1
|
+
import { PageTrackingOptions, ElementInteractionsOptions, FormInteractionsOptions, BrowserOptions, AutocaptureOptions, AttributionOptions, NetworkTrackingOptions, FrustrationInteractionsOptions } from '@amplitude/analytics-core';
|
|
2
2
|
export declare const isAttributionTrackingEnabled: (autocapture: AutocaptureOptions | boolean | undefined) => boolean;
|
|
3
3
|
export declare const isFileDownloadTrackingEnabled: (autocapture: AutocaptureOptions | boolean | undefined) => boolean;
|
|
4
4
|
export declare const isFormInteractionTrackingEnabled: (autocapture: AutocaptureOptions | boolean | undefined) => boolean;
|
|
@@ -33,4 +33,5 @@ export declare const getFrustrationInteractionsConfig: (config: BrowserOptions)
|
|
|
33
33
|
export declare const getNetworkTrackingConfig: (config: BrowserOptions) => NetworkTrackingOptions | undefined;
|
|
34
34
|
export declare const getPageViewTrackingConfig: (config: BrowserOptions) => PageTrackingOptions;
|
|
35
35
|
export declare const getAttributionTrackingConfig: (config: BrowserOptions) => AttributionOptions;
|
|
36
|
+
export declare const getFormInteractionsConfig: (config: BrowserOptions) => FormInteractionsOptions | undefined;
|
|
36
37
|
//# sourceMappingURL=default-tracking.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"default-tracking.d.ts","sourceRoot":"","sources":["../../src/default-tracking.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,mBAAmB,EAEnB,0BAA0B,EAC1B,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EAClB,sBAAsB,EACtB,8BAA8B,EAC/B,MAAM,2BAA2B,CAAC;AA8BnC,eAAO,MAAM,4BAA4B,gBAAiB,kBAAkB,GAAG,OAAO,GAAG,SAAS,YACnD,CAAC;AAEhD,eAAO,MAAM,6BAA6B,gBAAiB,kBAAkB,GAAG,OAAO,GAAG,SAAS,YAClD,CAAC;AAElD,eAAO,MAAM,gCAAgC,gBAAiB,kBAAkB,GAAG,OAAO,GAAG,SAAS,YAClD,CAAC;AAErD,eAAO,MAAM,yBAAyB,gBAAiB,kBAAkB,GAAG,OAAO,GAAG,SAAS,YAClD,CAAC;AAE9C,eAAO,MAAM,wBAAwB,gBAAiB,kBAAkB,GAAG,OAAO,GAAG,SAAS,YAClD,CAAC;AAE7C,eAAO,MAAM,0BAA0B,gBAAiB,kBAAkB,GAAG,OAAO,GAAG,SAAS,YAC3C,CAAC;AAEtD;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,gBAAiB,kBAAkB,GAAG,OAAO,GAAG,SAAS,YAa7F,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,4BAA4B,gBAAiB,kBAAkB,GAAG,OAAO,GAAG,SAAS,KAAG,OAapG,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,gBAAiB,kBAAkB,GAAG,OAAO,GAAG,SAAS,KAAG,OAU1F,CAAC;AAEF,eAAO,MAAM,gCAAgC,gBAAiB,kBAAkB,GAAG,OAAO,GAAG,SAAS,KAAG,OAaxG,CAAC;AAEF,eAAO,MAAM,4BAA4B,WAAY,cAAc,KAAG,0BAA0B,GAAG,SASlG,CAAC;AAEF,eAAO,MAAM,gCAAgC,WACnC,cAAc,KACrB,8BAA8B,GAAG,SASnC,CAAC;AAEF,eAAO,MAAM,wBAAwB,WAAY,cAAc,KAAG,sBAAsB,GAAG,SA2B1F,CAAC;AAEF,eAAO,MAAM,yBAAyB,WAAY,cAAc,KAAG,mBAqClE,CAAC;AAEF,eAAO,MAAM,4BAA4B,WAAY,cAAc,KAAG,kBAcrE,CAAC"}
|
|
1
|
+
{"version":3,"file":"default-tracking.d.ts","sourceRoot":"","sources":["../../src/default-tracking.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,mBAAmB,EAEnB,0BAA0B,EAC1B,uBAAuB,EACvB,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EAClB,sBAAsB,EACtB,8BAA8B,EAC/B,MAAM,2BAA2B,CAAC;AA8BnC,eAAO,MAAM,4BAA4B,gBAAiB,kBAAkB,GAAG,OAAO,GAAG,SAAS,YACnD,CAAC;AAEhD,eAAO,MAAM,6BAA6B,gBAAiB,kBAAkB,GAAG,OAAO,GAAG,SAAS,YAClD,CAAC;AAElD,eAAO,MAAM,gCAAgC,gBAAiB,kBAAkB,GAAG,OAAO,GAAG,SAAS,YAClD,CAAC;AAErD,eAAO,MAAM,yBAAyB,gBAAiB,kBAAkB,GAAG,OAAO,GAAG,SAAS,YAClD,CAAC;AAE9C,eAAO,MAAM,wBAAwB,gBAAiB,kBAAkB,GAAG,OAAO,GAAG,SAAS,YAClD,CAAC;AAE7C,eAAO,MAAM,0BAA0B,gBAAiB,kBAAkB,GAAG,OAAO,GAAG,SAAS,YAC3C,CAAC;AAEtD;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,gBAAiB,kBAAkB,GAAG,OAAO,GAAG,SAAS,YAa7F,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,4BAA4B,gBAAiB,kBAAkB,GAAG,OAAO,GAAG,SAAS,KAAG,OAapG,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,gBAAiB,kBAAkB,GAAG,OAAO,GAAG,SAAS,KAAG,OAU1F,CAAC;AAEF,eAAO,MAAM,gCAAgC,gBAAiB,kBAAkB,GAAG,OAAO,GAAG,SAAS,KAAG,OAaxG,CAAC;AAEF,eAAO,MAAM,4BAA4B,WAAY,cAAc,KAAG,0BAA0B,GAAG,SASlG,CAAC;AAEF,eAAO,MAAM,gCAAgC,WACnC,cAAc,KACrB,8BAA8B,GAAG,SASnC,CAAC;AAEF,eAAO,MAAM,wBAAwB,WAAY,cAAc,KAAG,sBAAsB,GAAG,SA2B1F,CAAC;AAEF,eAAO,MAAM,yBAAyB,WAAY,cAAc,KAAG,mBAqClE,CAAC;AAEF,eAAO,MAAM,4BAA4B,WAAY,cAAc,KAAG,kBAcrE,CAAC;AAEF,eAAO,MAAM,yBAAyB,WAAY,cAAc,KAAG,uBAAuB,GAAG,SAU5F,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getAttributionTrackingConfig = exports.getPageViewTrackingConfig = exports.getNetworkTrackingConfig = exports.getFrustrationInteractionsConfig = exports.getElementInteractionsConfig = exports.isFrustrationInteractionsEnabled = exports.isWebVitalsEnabled = exports.isElementInteractionsEnabled = exports.isNetworkTrackingEnabled = exports.isPageUrlEnrichmentEnabled = exports.isSessionTrackingEnabled = exports.isPageViewTrackingEnabled = exports.isFormInteractionTrackingEnabled = exports.isFileDownloadTrackingEnabled = exports.isAttributionTrackingEnabled = void 0;
|
|
3
|
+
exports.getFormInteractionsConfig = exports.getAttributionTrackingConfig = exports.getPageViewTrackingConfig = exports.getNetworkTrackingConfig = exports.getFrustrationInteractionsConfig = exports.getElementInteractionsConfig = exports.isFrustrationInteractionsEnabled = exports.isWebVitalsEnabled = exports.isElementInteractionsEnabled = exports.isNetworkTrackingEnabled = exports.isPageUrlEnrichmentEnabled = exports.isSessionTrackingEnabled = exports.isPageViewTrackingEnabled = exports.isFormInteractionTrackingEnabled = exports.isFileDownloadTrackingEnabled = exports.isAttributionTrackingEnabled = void 0;
|
|
4
4
|
var tslib_1 = require("tslib");
|
|
5
5
|
/**
|
|
6
6
|
* Returns false if autocapture === false or if autocapture[event],
|
|
@@ -189,4 +189,14 @@ var getAttributionTrackingConfig = function (config) {
|
|
|
189
189
|
return {};
|
|
190
190
|
};
|
|
191
191
|
exports.getAttributionTrackingConfig = getAttributionTrackingConfig;
|
|
192
|
+
var getFormInteractionsConfig = function (config) {
|
|
193
|
+
if ((0, exports.isFormInteractionTrackingEnabled)(config.defaultTracking) &&
|
|
194
|
+
config.defaultTracking &&
|
|
195
|
+
typeof config.defaultTracking === 'object' &&
|
|
196
|
+
typeof config.defaultTracking.formInteractions === 'object') {
|
|
197
|
+
return config.defaultTracking.formInteractions;
|
|
198
|
+
}
|
|
199
|
+
return undefined;
|
|
200
|
+
};
|
|
201
|
+
exports.getFormInteractionsConfig = getFormInteractionsConfig;
|
|
192
202
|
//# sourceMappingURL=default-tracking.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"default-tracking.js","sourceRoot":"","sources":["../../src/default-tracking.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n PageTrackingHistoryChanges,\n PageTrackingOptions,\n PageTrackingTrackOn,\n ElementInteractionsOptions,\n BrowserOptions,\n AutocaptureOptions,\n AttributionOptions,\n NetworkTrackingOptions,\n FrustrationInteractionsOptions,\n} from '@amplitude/analytics-core';\n\n/**\n * A subset of AutocaptureOptions that includes the autocapture features that\n * are made available to users by default (even if \"config.autocapture === undefined\")\n */\ntype AutocaptureOptionsDefaultAvailable = Pick<\n AutocaptureOptions,\n 'pageViews' | 'sessions' | 'fileDownloads' | 'formInteractions' | 'attribution' | 'pageUrlEnrichment'\n>;\n\n/**\n * Returns false if autocapture === false or if autocapture[event],\n * otherwise returns true (even if \"config.autocapture === undefined\")\n */\nconst isTrackingEnabled = (\n autocapture: AutocaptureOptionsDefaultAvailable | boolean | undefined,\n event: keyof AutocaptureOptionsDefaultAvailable,\n) => {\n if (typeof autocapture === 'boolean') {\n return autocapture;\n }\n\n if (autocapture?.[event] === false) {\n return false;\n }\n\n return true;\n};\n\nexport const isAttributionTrackingEnabled = (autocapture: AutocaptureOptions | boolean | undefined) =>\n isTrackingEnabled(autocapture, 'attribution');\n\nexport const isFileDownloadTrackingEnabled = (autocapture: AutocaptureOptions | boolean | undefined) =>\n isTrackingEnabled(autocapture, 'fileDownloads');\n\nexport const isFormInteractionTrackingEnabled = (autocapture: AutocaptureOptions | boolean | undefined) =>\n isTrackingEnabled(autocapture, 'formInteractions');\n\nexport const isPageViewTrackingEnabled = (autocapture: AutocaptureOptions | boolean | undefined) =>\n isTrackingEnabled(autocapture, 'pageViews');\n\nexport const isSessionTrackingEnabled = (autocapture: AutocaptureOptions | boolean | undefined) =>\n isTrackingEnabled(autocapture, 'sessions');\n\nexport const isPageUrlEnrichmentEnabled = (autocapture: AutocaptureOptions | boolean | undefined) =>\n isTrackingEnabled(autocapture, 'pageUrlEnrichment');\n\n/**\n * Returns true if\n * 1. if autocapture.networkTracking === true\n * 2. if autocapture.networkTracking === object\n * otherwise returns false\n */\nexport const isNetworkTrackingEnabled = (autocapture: AutocaptureOptions | boolean | undefined) => {\n if (typeof autocapture === 'boolean') {\n return autocapture;\n }\n\n if (\n typeof autocapture === 'object' &&\n (autocapture.networkTracking === true || typeof autocapture.networkTracking === 'object')\n ) {\n return true;\n }\n\n return false;\n};\n\n/**\n * Returns true if\n * 1. autocapture === true\n * 2. if autocapture.elementInteractions === true\n * 3. if autocapture.elementInteractions === object\n * otherwise returns false\n */\nexport const isElementInteractionsEnabled = (autocapture: AutocaptureOptions | boolean | undefined): boolean => {\n if (typeof autocapture === 'boolean') {\n return autocapture;\n }\n\n if (\n typeof autocapture === 'object' &&\n (autocapture.elementInteractions === true || typeof autocapture.elementInteractions === 'object')\n ) {\n return true;\n }\n\n return false;\n};\n\n/**\n * Returns true if\n * 1. autocapture === true\n * 2. if autocapture.webVitals === true\n * otherwise returns false\n */\nexport const isWebVitalsEnabled = (autocapture: AutocaptureOptions | boolean | undefined): boolean => {\n if (typeof autocapture === 'boolean') {\n return autocapture;\n }\n\n if (typeof autocapture === 'object' && autocapture.webVitals === true) {\n return true;\n }\n\n return false;\n};\n\nexport const isFrustrationInteractionsEnabled = (autocapture: AutocaptureOptions | boolean | undefined): boolean => {\n if (typeof autocapture === 'boolean') {\n return autocapture;\n }\n\n if (\n typeof autocapture === 'object' &&\n (autocapture.frustrationInteractions === true || typeof autocapture.frustrationInteractions === 'object')\n ) {\n return true;\n }\n\n return false;\n};\n\nexport const getElementInteractionsConfig = (config: BrowserOptions): ElementInteractionsOptions | undefined => {\n if (\n isElementInteractionsEnabled(config.autocapture) &&\n typeof config.autocapture === 'object' &&\n typeof config.autocapture.elementInteractions === 'object'\n ) {\n return config.autocapture.elementInteractions;\n }\n return undefined;\n};\n\nexport const getFrustrationInteractionsConfig = (\n config: BrowserOptions,\n): FrustrationInteractionsOptions | undefined => {\n if (\n isFrustrationInteractionsEnabled(config.autocapture) &&\n typeof config.autocapture === 'object' &&\n typeof config.autocapture.frustrationInteractions === 'object'\n ) {\n return config.autocapture.frustrationInteractions;\n }\n return undefined;\n};\n\nexport const getNetworkTrackingConfig = (config: BrowserOptions): NetworkTrackingOptions | undefined => {\n if (isNetworkTrackingEnabled(config.autocapture)) {\n let networkTrackingConfig;\n if (typeof config.autocapture === 'object' && typeof config.autocapture.networkTracking === 'object') {\n networkTrackingConfig = config.autocapture.networkTracking;\n } else if (config.networkTrackingOptions) {\n networkTrackingConfig = config.networkTrackingOptions;\n }\n return {\n ...networkTrackingConfig,\n captureRules: networkTrackingConfig?.captureRules?.map((rule) => {\n // if URLs and hosts are both set, URLs take precedence over hosts\n if (rule.urls?.length && rule.hosts?.length) {\n const hostsString = JSON.stringify(rule.hosts);\n const urlsString = JSON.stringify(rule.urls);\n /* istanbul ignore next */\n config.loggerProvider?.warn(\n `Found network capture rule with both urls='${urlsString}' and hosts='${hostsString}' set. ` +\n `Definition of urls takes precedence over hosts, so ignoring hosts.`,\n );\n return { ...rule, hosts: undefined };\n }\n return rule;\n }),\n };\n }\n return;\n};\n\nexport const getPageViewTrackingConfig = (config: BrowserOptions): PageTrackingOptions => {\n let trackOn: PageTrackingTrackOn | undefined = () => false;\n let trackHistoryChanges: PageTrackingHistoryChanges | undefined = undefined;\n let eventType: string | undefined;\n const pageCounter = config.pageCounter;\n\n const isDefaultPageViewTrackingEnabled = isPageViewTrackingEnabled(config.defaultTracking);\n if (isDefaultPageViewTrackingEnabled) {\n trackOn = undefined;\n eventType = undefined;\n\n if (\n config.defaultTracking &&\n typeof config.defaultTracking === 'object' &&\n config.defaultTracking.pageViews &&\n typeof config.defaultTracking.pageViews === 'object'\n ) {\n if ('trackOn' in config.defaultTracking.pageViews) {\n trackOn = config.defaultTracking.pageViews.trackOn;\n }\n\n if ('trackHistoryChanges' in config.defaultTracking.pageViews) {\n trackHistoryChanges = config.defaultTracking.pageViews.trackHistoryChanges;\n }\n\n if ('eventType' in config.defaultTracking.pageViews && config.defaultTracking.pageViews.eventType) {\n eventType = config.defaultTracking.pageViews.eventType;\n }\n }\n }\n\n return {\n trackOn,\n trackHistoryChanges,\n eventType,\n pageCounter,\n };\n};\n\nexport const getAttributionTrackingConfig = (config: BrowserOptions): AttributionOptions => {\n if (\n isAttributionTrackingEnabled(config.defaultTracking) &&\n config.defaultTracking &&\n typeof config.defaultTracking === 'object' &&\n config.defaultTracking.attribution &&\n typeof config.defaultTracking.attribution === 'object'\n ) {\n return {\n ...config.defaultTracking.attribution,\n };\n }\n\n return {};\n};\n"]}
|
|
1
|
+
{"version":3,"file":"default-tracking.js","sourceRoot":"","sources":["../../src/default-tracking.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n PageTrackingHistoryChanges,\n PageTrackingOptions,\n PageTrackingTrackOn,\n ElementInteractionsOptions,\n FormInteractionsOptions,\n BrowserOptions,\n AutocaptureOptions,\n AttributionOptions,\n NetworkTrackingOptions,\n FrustrationInteractionsOptions,\n} from '@amplitude/analytics-core';\n\n/**\n * A subset of AutocaptureOptions that includes the autocapture features that\n * are made available to users by default (even if \"config.autocapture === undefined\")\n */\ntype AutocaptureOptionsDefaultAvailable = Pick<\n AutocaptureOptions,\n 'pageViews' | 'sessions' | 'fileDownloads' | 'formInteractions' | 'attribution' | 'pageUrlEnrichment'\n>;\n\n/**\n * Returns false if autocapture === false or if autocapture[event],\n * otherwise returns true (even if \"config.autocapture === undefined\")\n */\nconst isTrackingEnabled = (\n autocapture: AutocaptureOptionsDefaultAvailable | boolean | undefined,\n event: keyof AutocaptureOptionsDefaultAvailable,\n) => {\n if (typeof autocapture === 'boolean') {\n return autocapture;\n }\n\n if (autocapture?.[event] === false) {\n return false;\n }\n\n return true;\n};\n\nexport const isAttributionTrackingEnabled = (autocapture: AutocaptureOptions | boolean | undefined) =>\n isTrackingEnabled(autocapture, 'attribution');\n\nexport const isFileDownloadTrackingEnabled = (autocapture: AutocaptureOptions | boolean | undefined) =>\n isTrackingEnabled(autocapture, 'fileDownloads');\n\nexport const isFormInteractionTrackingEnabled = (autocapture: AutocaptureOptions | boolean | undefined) =>\n isTrackingEnabled(autocapture, 'formInteractions');\n\nexport const isPageViewTrackingEnabled = (autocapture: AutocaptureOptions | boolean | undefined) =>\n isTrackingEnabled(autocapture, 'pageViews');\n\nexport const isSessionTrackingEnabled = (autocapture: AutocaptureOptions | boolean | undefined) =>\n isTrackingEnabled(autocapture, 'sessions');\n\nexport const isPageUrlEnrichmentEnabled = (autocapture: AutocaptureOptions | boolean | undefined) =>\n isTrackingEnabled(autocapture, 'pageUrlEnrichment');\n\n/**\n * Returns true if\n * 1. if autocapture.networkTracking === true\n * 2. if autocapture.networkTracking === object\n * otherwise returns false\n */\nexport const isNetworkTrackingEnabled = (autocapture: AutocaptureOptions | boolean | undefined) => {\n if (typeof autocapture === 'boolean') {\n return autocapture;\n }\n\n if (\n typeof autocapture === 'object' &&\n (autocapture.networkTracking === true || typeof autocapture.networkTracking === 'object')\n ) {\n return true;\n }\n\n return false;\n};\n\n/**\n * Returns true if\n * 1. autocapture === true\n * 2. if autocapture.elementInteractions === true\n * 3. if autocapture.elementInteractions === object\n * otherwise returns false\n */\nexport const isElementInteractionsEnabled = (autocapture: AutocaptureOptions | boolean | undefined): boolean => {\n if (typeof autocapture === 'boolean') {\n return autocapture;\n }\n\n if (\n typeof autocapture === 'object' &&\n (autocapture.elementInteractions === true || typeof autocapture.elementInteractions === 'object')\n ) {\n return true;\n }\n\n return false;\n};\n\n/**\n * Returns true if\n * 1. autocapture === true\n * 2. if autocapture.webVitals === true\n * otherwise returns false\n */\nexport const isWebVitalsEnabled = (autocapture: AutocaptureOptions | boolean | undefined): boolean => {\n if (typeof autocapture === 'boolean') {\n return autocapture;\n }\n\n if (typeof autocapture === 'object' && autocapture.webVitals === true) {\n return true;\n }\n\n return false;\n};\n\nexport const isFrustrationInteractionsEnabled = (autocapture: AutocaptureOptions | boolean | undefined): boolean => {\n if (typeof autocapture === 'boolean') {\n return autocapture;\n }\n\n if (\n typeof autocapture === 'object' &&\n (autocapture.frustrationInteractions === true || typeof autocapture.frustrationInteractions === 'object')\n ) {\n return true;\n }\n\n return false;\n};\n\nexport const getElementInteractionsConfig = (config: BrowserOptions): ElementInteractionsOptions | undefined => {\n if (\n isElementInteractionsEnabled(config.autocapture) &&\n typeof config.autocapture === 'object' &&\n typeof config.autocapture.elementInteractions === 'object'\n ) {\n return config.autocapture.elementInteractions;\n }\n return undefined;\n};\n\nexport const getFrustrationInteractionsConfig = (\n config: BrowserOptions,\n): FrustrationInteractionsOptions | undefined => {\n if (\n isFrustrationInteractionsEnabled(config.autocapture) &&\n typeof config.autocapture === 'object' &&\n typeof config.autocapture.frustrationInteractions === 'object'\n ) {\n return config.autocapture.frustrationInteractions;\n }\n return undefined;\n};\n\nexport const getNetworkTrackingConfig = (config: BrowserOptions): NetworkTrackingOptions | undefined => {\n if (isNetworkTrackingEnabled(config.autocapture)) {\n let networkTrackingConfig;\n if (typeof config.autocapture === 'object' && typeof config.autocapture.networkTracking === 'object') {\n networkTrackingConfig = config.autocapture.networkTracking;\n } else if (config.networkTrackingOptions) {\n networkTrackingConfig = config.networkTrackingOptions;\n }\n return {\n ...networkTrackingConfig,\n captureRules: networkTrackingConfig?.captureRules?.map((rule) => {\n // if URLs and hosts are both set, URLs take precedence over hosts\n if (rule.urls?.length && rule.hosts?.length) {\n const hostsString = JSON.stringify(rule.hosts);\n const urlsString = JSON.stringify(rule.urls);\n /* istanbul ignore next */\n config.loggerProvider?.warn(\n `Found network capture rule with both urls='${urlsString}' and hosts='${hostsString}' set. ` +\n `Definition of urls takes precedence over hosts, so ignoring hosts.`,\n );\n return { ...rule, hosts: undefined };\n }\n return rule;\n }),\n };\n }\n return;\n};\n\nexport const getPageViewTrackingConfig = (config: BrowserOptions): PageTrackingOptions => {\n let trackOn: PageTrackingTrackOn | undefined = () => false;\n let trackHistoryChanges: PageTrackingHistoryChanges | undefined = undefined;\n let eventType: string | undefined;\n const pageCounter = config.pageCounter;\n\n const isDefaultPageViewTrackingEnabled = isPageViewTrackingEnabled(config.defaultTracking);\n if (isDefaultPageViewTrackingEnabled) {\n trackOn = undefined;\n eventType = undefined;\n\n if (\n config.defaultTracking &&\n typeof config.defaultTracking === 'object' &&\n config.defaultTracking.pageViews &&\n typeof config.defaultTracking.pageViews === 'object'\n ) {\n if ('trackOn' in config.defaultTracking.pageViews) {\n trackOn = config.defaultTracking.pageViews.trackOn;\n }\n\n if ('trackHistoryChanges' in config.defaultTracking.pageViews) {\n trackHistoryChanges = config.defaultTracking.pageViews.trackHistoryChanges;\n }\n\n if ('eventType' in config.defaultTracking.pageViews && config.defaultTracking.pageViews.eventType) {\n eventType = config.defaultTracking.pageViews.eventType;\n }\n }\n }\n\n return {\n trackOn,\n trackHistoryChanges,\n eventType,\n pageCounter,\n };\n};\n\nexport const getAttributionTrackingConfig = (config: BrowserOptions): AttributionOptions => {\n if (\n isAttributionTrackingEnabled(config.defaultTracking) &&\n config.defaultTracking &&\n typeof config.defaultTracking === 'object' &&\n config.defaultTracking.attribution &&\n typeof config.defaultTracking.attribution === 'object'\n ) {\n return {\n ...config.defaultTracking.attribution,\n };\n }\n\n return {};\n};\n\nexport const getFormInteractionsConfig = (config: BrowserOptions): FormInteractionsOptions | undefined => {\n if (\n isFormInteractionTrackingEnabled(config.defaultTracking) &&\n config.defaultTracking &&\n typeof config.defaultTracking === 'object' &&\n typeof config.defaultTracking.formInteractions === 'object'\n ) {\n return config.defaultTracking.formInteractions;\n }\n return undefined;\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"form-interaction-tracking.d.ts","sourceRoot":"","sources":["../../../src/plugins/form-interaction-tracking.ts"],"names":[],"mappings":"AAQA,OAAO,
|
|
1
|
+
{"version":3,"file":"form-interaction-tracking.d.ts","sourceRoot":"","sources":["../../../src/plugins/form-interaction-tracking.ts"],"names":[],"mappings":"AAQA,OAAO,EAGL,gBAAgB,EAGjB,MAAM,2BAA2B,CAAC;AASnC,eAAO,MAAM,uBAAuB,QAAO,gBA6J1C,CAAC;AAEF,eAAO,MAAM,iBAAiB,uDAU7B,CAAC;AAGF,eAAO,MAAM,iBAAiB,SAAU,eAAe,KAAG,MAAM,GAAG,IASlE,CAAC"}
|
|
@@ -4,6 +4,7 @@ exports.extractFormAction = exports.stringOrUndefined = exports.formInteractionT
|
|
|
4
4
|
var tslib_1 = require("tslib");
|
|
5
5
|
var constants_1 = require("../constants");
|
|
6
6
|
var analytics_core_1 = require("@amplitude/analytics-core");
|
|
7
|
+
var default_tracking_1 = require("../default-tracking");
|
|
7
8
|
var formInteractionTracking = function () {
|
|
8
9
|
var observer;
|
|
9
10
|
var eventListeners = [];
|
|
@@ -23,11 +24,13 @@ var formInteractionTracking = function () {
|
|
|
23
24
|
});
|
|
24
25
|
eventListeners = [];
|
|
25
26
|
};
|
|
27
|
+
var formInteractionsConfig;
|
|
26
28
|
var name = '@amplitude/plugin-form-interaction-tracking-browser';
|
|
27
29
|
var type = 'enrichment';
|
|
28
30
|
var setup = function (config, amplitude) { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
|
|
29
31
|
var initializeFormTracking, window_1;
|
|
30
32
|
return tslib_1.__generator(this, function (_a) {
|
|
33
|
+
formInteractionsConfig = (0, default_tracking_1.getFormInteractionsConfig)(config);
|
|
31
34
|
initializeFormTracking = function () {
|
|
32
35
|
/* istanbul ignore if */
|
|
33
36
|
if (!amplitude) {
|
|
@@ -53,7 +56,7 @@ var formInteractionTracking = function () {
|
|
|
53
56
|
}
|
|
54
57
|
hasFormChanged = true;
|
|
55
58
|
});
|
|
56
|
-
addEventListener(form, 'submit', function () {
|
|
59
|
+
addEventListener(form, 'submit', function (event) {
|
|
57
60
|
var _a, _b;
|
|
58
61
|
var formDestination = (0, exports.extractFormAction)(form);
|
|
59
62
|
if (!hasFormChanged) {
|
|
@@ -63,6 +66,26 @@ var formInteractionTracking = function () {
|
|
|
63
66
|
_a[constants_1.FORM_DESTINATION] = formDestination,
|
|
64
67
|
_a));
|
|
65
68
|
}
|
|
69
|
+
hasFormChanged = true;
|
|
70
|
+
// Check if shouldTrackSubmit callback is provided and use it to determine whether to track form_submit
|
|
71
|
+
if ((formInteractionsConfig === null || formInteractionsConfig === void 0 ? void 0 : formInteractionsConfig.shouldTrackSubmit) !== undefined) {
|
|
72
|
+
if (typeof formInteractionsConfig.shouldTrackSubmit === 'function' &&
|
|
73
|
+
typeof SubmitEvent !== 'undefined' &&
|
|
74
|
+
event instanceof SubmitEvent) {
|
|
75
|
+
try {
|
|
76
|
+
var shouldTrack = formInteractionsConfig.shouldTrackSubmit(event);
|
|
77
|
+
if (!shouldTrack) {
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
catch (e) {
|
|
82
|
+
config.loggerProvider.warn('shouldTrackSubmit callback threw an error, proceeding with tracking.');
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
config.loggerProvider.warn('shouldTrackSubmit is ignored because it is not a function or event is not a SubmitEvent.');
|
|
87
|
+
}
|
|
88
|
+
}
|
|
66
89
|
amplitude.track(constants_1.DEFAULT_FORM_SUBMIT_EVENT, (_b = {},
|
|
67
90
|
_b[constants_1.FORM_ID] = (0, exports.stringOrUndefined)(form.id),
|
|
68
91
|
_b[constants_1.FORM_NAME] = (0, exports.stringOrUndefined)(form.name),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"form-interaction-tracking.js","sourceRoot":"","sources":["../../../src/plugins/form-interaction-tracking.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n DEFAULT_FORM_START_EVENT,\n DEFAULT_FORM_SUBMIT_EVENT,\n FORM_ID,\n FORM_NAME,\n FORM_DESTINATION,\n} from '../constants';\nimport { BrowserConfig } from '../config';\nimport { getGlobalScope, Event, EnrichmentPlugin, BrowserClient } from '@amplitude/analytics-core';\n\ninterface EventListener {\n element: Element;\n type: 'change' | 'submit';\n handler: () => void;\n}\n\nexport const formInteractionTracking = (): EnrichmentPlugin => {\n let observer: MutationObserver | undefined;\n let eventListeners: EventListener[] = [];\n\n const addEventListener = (element: Element, type: 'change' | 'submit', handler: () => void) => {\n element.addEventListener(type, handler);\n eventListeners.push({\n element,\n type,\n handler,\n });\n };\n\n const removeClickListeners = () => {\n eventListeners.forEach(({ element, type, handler }) => {\n /* istanbul ignore next */\n element?.removeEventListener(type, handler);\n });\n eventListeners = [];\n };\n\n const name = '@amplitude/plugin-form-interaction-tracking-browser';\n const type = 'enrichment';\n const setup = async (config: BrowserConfig, amplitude: BrowserClient) => {\n const initializeFormTracking = () => {\n /* istanbul ignore if */\n if (!amplitude) {\n // TODO: Add required minimum version of @amplitude/analytics-browser\n config.loggerProvider.warn(\n 'Form interaction tracking requires a later version of @amplitude/analytics-browser. Form interaction events are not tracked.',\n );\n return;\n }\n\n /* istanbul ignore if */\n if (typeof document === 'undefined') {\n return;\n }\n\n const addFormInteractionListener = (form: HTMLFormElement) => {\n let hasFormChanged = false;\n\n addEventListener(form, 'change', () => {\n const formDestination = extractFormAction(form);\n if (!hasFormChanged) {\n amplitude.track(DEFAULT_FORM_START_EVENT, {\n [FORM_ID]: stringOrUndefined(form.id),\n [FORM_NAME]: stringOrUndefined(form.name),\n [FORM_DESTINATION]: formDestination,\n });\n }\n hasFormChanged = true;\n });\n\n addEventListener(form, 'submit', () => {\n const formDestination = extractFormAction(form);\n if (!hasFormChanged) {\n amplitude.track(DEFAULT_FORM_START_EVENT, {\n [FORM_ID]: stringOrUndefined(form.id),\n [FORM_NAME]: stringOrUndefined(form.name),\n [FORM_DESTINATION]: formDestination,\n });\n }\n\n amplitude.track(DEFAULT_FORM_SUBMIT_EVENT, {\n [FORM_ID]: stringOrUndefined(form.id),\n [FORM_NAME]: stringOrUndefined(form.name),\n [FORM_DESTINATION]: formDestination,\n });\n hasFormChanged = false;\n });\n };\n\n // Adds listener to existing anchor tags\n const forms = Array.from(document.getElementsByTagName('form'));\n forms.forEach(addFormInteractionListener);\n\n // Adds listener to anchor tags added after initial load\n /* istanbul ignore else */\n if (typeof MutationObserver !== 'undefined') {\n observer = new MutationObserver((mutations) => {\n mutations.forEach((mutation) => {\n mutation.addedNodes.forEach((node) => {\n if (node.nodeName === 'FORM') {\n addFormInteractionListener(node as HTMLFormElement);\n }\n if ('querySelectorAll' in node && typeof node.querySelectorAll === 'function') {\n Array.from(node.querySelectorAll('form') as HTMLFormElement[]).map(addFormInteractionListener);\n }\n });\n });\n });\n\n observer.observe(document.body, {\n subtree: true,\n childList: true,\n });\n }\n };\n\n // If the document is already loaded, initialize immediately.\n if (document.readyState === 'complete') {\n initializeFormTracking();\n } else {\n // Otherwise, wait for the load event.\n // The form interaction plugin observes changes in the dom. For this to work correctly, the observer can only be setup\n // after the body is built. When Amplitude gets initialized in a script tag, the body tag is still unavailable. So register this\n // only after the window is loaded\n const window = getGlobalScope();\n /* istanbul ignore else*/\n if (window) {\n window.addEventListener('load', initializeFormTracking);\n } else {\n config.loggerProvider.debug('Form interaction tracking is not installed because global is undefined.');\n }\n }\n };\n const execute = async (event: Event) => event;\n const teardown = async () => {\n observer?.disconnect();\n removeClickListeners();\n };\n\n return {\n name,\n type,\n setup,\n execute,\n teardown,\n };\n};\n\nexport const stringOrUndefined = <T>(name: T): T extends string ? string : undefined => {\n /* istanbul ignore if */\n if (typeof name !== 'string') {\n // We found instances where the value of `name` is an Element and not a string.\n // Elements may have circular references and would throw an error when passed to `JSON.stringify(...)`.\n // If a non-string value is seen, assume there is no value.\n return undefined as T extends string ? string : undefined;\n }\n\n return name as T extends string ? string : undefined;\n};\n\n// Extracts the form action attribute, and normalizes it to a valid URL to preserve the previous behavior of accessing the action property directly.\nexport const extractFormAction = (form: HTMLFormElement): string | null => {\n let formDestination = form.getAttribute('action');\n try {\n // eslint-disable-next-line no-restricted-globals\n formDestination = new URL(encodeURI(formDestination ?? ''), window.location.href).href;\n } catch {\n //\n }\n return formDestination;\n};\n"]}
|
|
1
|
+
{"version":3,"file":"form-interaction-tracking.js","sourceRoot":"","sources":["../../../src/plugins/form-interaction-tracking.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n DEFAULT_FORM_START_EVENT,\n DEFAULT_FORM_SUBMIT_EVENT,\n FORM_ID,\n FORM_NAME,\n FORM_DESTINATION,\n} from '../constants';\nimport { BrowserConfig } from '../config';\nimport {\n getGlobalScope,\n Event as AmplitudeEvent,\n EnrichmentPlugin,\n BrowserClient,\n FormInteractionsOptions,\n} from '@amplitude/analytics-core';\nimport { getFormInteractionsConfig } from '../default-tracking';\n\ninterface EventListener {\n element: Element;\n type: 'change' | 'submit';\n handler: (event: Event) => void;\n}\n\nexport const formInteractionTracking = (): EnrichmentPlugin => {\n let observer: MutationObserver | undefined;\n let eventListeners: EventListener[] = [];\n\n const addEventListener = (element: Element, type: 'change' | 'submit', handler: (event: Event) => void) => {\n element.addEventListener(type, handler);\n eventListeners.push({\n element,\n type,\n handler,\n });\n };\n\n const removeClickListeners = () => {\n eventListeners.forEach(({ element, type, handler }) => {\n /* istanbul ignore next */\n element?.removeEventListener(type, handler);\n });\n eventListeners = [];\n };\n\n let formInteractionsConfig: FormInteractionsOptions | undefined;\n\n const name = '@amplitude/plugin-form-interaction-tracking-browser';\n const type = 'enrichment';\n const setup = async (config: BrowserConfig, amplitude: BrowserClient) => {\n formInteractionsConfig = getFormInteractionsConfig(config);\n\n const initializeFormTracking = () => {\n /* istanbul ignore if */\n if (!amplitude) {\n // TODO: Add required minimum version of @amplitude/analytics-browser\n config.loggerProvider.warn(\n 'Form interaction tracking requires a later version of @amplitude/analytics-browser. Form interaction events are not tracked.',\n );\n return;\n }\n\n /* istanbul ignore if */\n if (typeof document === 'undefined') {\n return;\n }\n\n const addFormInteractionListener = (form: HTMLFormElement) => {\n let hasFormChanged = false;\n\n addEventListener(form, 'change', () => {\n const formDestination = extractFormAction(form);\n if (!hasFormChanged) {\n amplitude.track(DEFAULT_FORM_START_EVENT, {\n [FORM_ID]: stringOrUndefined(form.id),\n [FORM_NAME]: stringOrUndefined(form.name),\n [FORM_DESTINATION]: formDestination,\n });\n }\n hasFormChanged = true;\n });\n\n addEventListener(form, 'submit', (event: Event) => {\n const formDestination = extractFormAction(form);\n if (!hasFormChanged) {\n amplitude.track(DEFAULT_FORM_START_EVENT, {\n [FORM_ID]: stringOrUndefined(form.id),\n [FORM_NAME]: stringOrUndefined(form.name),\n [FORM_DESTINATION]: formDestination,\n });\n }\n hasFormChanged = true;\n\n // Check if shouldTrackSubmit callback is provided and use it to determine whether to track form_submit\n if (formInteractionsConfig?.shouldTrackSubmit !== undefined) {\n if (\n typeof formInteractionsConfig.shouldTrackSubmit === 'function' &&\n typeof SubmitEvent !== 'undefined' &&\n event instanceof SubmitEvent\n ) {\n try {\n const shouldTrack = formInteractionsConfig.shouldTrackSubmit(event);\n if (!shouldTrack) {\n return;\n }\n } catch (e) {\n config.loggerProvider.warn('shouldTrackSubmit callback threw an error, proceeding with tracking.');\n }\n } else {\n config.loggerProvider.warn(\n 'shouldTrackSubmit is ignored because it is not a function or event is not a SubmitEvent.',\n );\n }\n }\n\n amplitude.track(DEFAULT_FORM_SUBMIT_EVENT, {\n [FORM_ID]: stringOrUndefined(form.id),\n [FORM_NAME]: stringOrUndefined(form.name),\n [FORM_DESTINATION]: formDestination,\n });\n hasFormChanged = false;\n });\n };\n\n // Adds listener to existing anchor tags\n const forms = Array.from(document.getElementsByTagName('form'));\n forms.forEach(addFormInteractionListener);\n\n // Adds listener to anchor tags added after initial load\n /* istanbul ignore else */\n if (typeof MutationObserver !== 'undefined') {\n observer = new MutationObserver((mutations) => {\n mutations.forEach((mutation) => {\n mutation.addedNodes.forEach((node) => {\n if (node.nodeName === 'FORM') {\n addFormInteractionListener(node as HTMLFormElement);\n }\n if ('querySelectorAll' in node && typeof node.querySelectorAll === 'function') {\n Array.from(node.querySelectorAll('form') as HTMLFormElement[]).map(addFormInteractionListener);\n }\n });\n });\n });\n\n observer.observe(document.body, {\n subtree: true,\n childList: true,\n });\n }\n };\n\n // If the document is already loaded, initialize immediately.\n if (document.readyState === 'complete') {\n initializeFormTracking();\n } else {\n // Otherwise, wait for the load event.\n // The form interaction plugin observes changes in the dom. For this to work correctly, the observer can only be setup\n // after the body is built. When Amplitude gets initialized in a script tag, the body tag is still unavailable. So register this\n // only after the window is loaded\n const window = getGlobalScope();\n /* istanbul ignore else*/\n if (window) {\n window.addEventListener('load', initializeFormTracking);\n } else {\n config.loggerProvider.debug('Form interaction tracking is not installed because global is undefined.');\n }\n }\n };\n const execute = async (event: AmplitudeEvent) => event;\n const teardown = async () => {\n observer?.disconnect();\n removeClickListeners();\n };\n\n return {\n name,\n type,\n setup,\n execute,\n teardown,\n };\n};\n\nexport const stringOrUndefined = <T>(name: T): T extends string ? string : undefined => {\n /* istanbul ignore if */\n if (typeof name !== 'string') {\n // We found instances where the value of `name` is an Element and not a string.\n // Elements may have circular references and would throw an error when passed to `JSON.stringify(...)`.\n // If a non-string value is seen, assume there is no value.\n return undefined as T extends string ? string : undefined;\n }\n\n return name as T extends string ? string : undefined;\n};\n\n// Extracts the form action attribute, and normalizes it to a valid URL to preserve the previous behavior of accessing the action property directly.\nexport const extractFormAction = (form: HTMLFormElement): string | null => {\n let formDestination = form.getAttribute('action');\n try {\n // eslint-disable-next-line no-restricted-globals\n formDestination = new URL(encodeURI(formDestination ?? ''), window.location.href).href;\n } catch {\n //\n }\n return formDestination;\n};\n"]}
|
package/lib/cjs/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const VERSION = "2.
|
|
1
|
+
export declare const VERSION = "2.34.0";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
package/lib/cjs/version.js
CHANGED
package/lib/cjs/version.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":";;;AAAa,QAAA,OAAO,GAAG,QAAQ,CAAC","sourcesContent":["export const VERSION = '2.
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":";;;AAAa,QAAA,OAAO,GAAG,QAAQ,CAAC","sourcesContent":["export const VERSION = '2.34.0';\n"]}
|
package/lib/esm/config.d.ts
CHANGED
|
@@ -36,7 +36,7 @@ export declare class BrowserConfig extends Config implements IBrowserConfig {
|
|
|
36
36
|
diagnosticsSampleRate: number;
|
|
37
37
|
diagnosticsClient?: IDiagnosticsClient | undefined;
|
|
38
38
|
remoteConfig?: RemoteConfigOptions | undefined;
|
|
39
|
-
readonly version = "2.
|
|
39
|
+
readonly version = "2.34.0";
|
|
40
40
|
protected _cookieStorage: Storage<UserSession>;
|
|
41
41
|
protected _deviceId?: string;
|
|
42
42
|
protected _lastEventId?: number;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { PageTrackingOptions, ElementInteractionsOptions, BrowserOptions, AutocaptureOptions, AttributionOptions, NetworkTrackingOptions, FrustrationInteractionsOptions } from '@amplitude/analytics-core';
|
|
1
|
+
import { PageTrackingOptions, ElementInteractionsOptions, FormInteractionsOptions, BrowserOptions, AutocaptureOptions, AttributionOptions, NetworkTrackingOptions, FrustrationInteractionsOptions } from '@amplitude/analytics-core';
|
|
2
2
|
export declare const isAttributionTrackingEnabled: (autocapture: AutocaptureOptions | boolean | undefined) => boolean;
|
|
3
3
|
export declare const isFileDownloadTrackingEnabled: (autocapture: AutocaptureOptions | boolean | undefined) => boolean;
|
|
4
4
|
export declare const isFormInteractionTrackingEnabled: (autocapture: AutocaptureOptions | boolean | undefined) => boolean;
|
|
@@ -33,4 +33,5 @@ export declare const getFrustrationInteractionsConfig: (config: BrowserOptions)
|
|
|
33
33
|
export declare const getNetworkTrackingConfig: (config: BrowserOptions) => NetworkTrackingOptions | undefined;
|
|
34
34
|
export declare const getPageViewTrackingConfig: (config: BrowserOptions) => PageTrackingOptions;
|
|
35
35
|
export declare const getAttributionTrackingConfig: (config: BrowserOptions) => AttributionOptions;
|
|
36
|
+
export declare const getFormInteractionsConfig: (config: BrowserOptions) => FormInteractionsOptions | undefined;
|
|
36
37
|
//# sourceMappingURL=default-tracking.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"default-tracking.d.ts","sourceRoot":"","sources":["../../src/default-tracking.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,mBAAmB,EAEnB,0BAA0B,EAC1B,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EAClB,sBAAsB,EACtB,8BAA8B,EAC/B,MAAM,2BAA2B,CAAC;AA8BnC,eAAO,MAAM,4BAA4B,gBAAiB,kBAAkB,GAAG,OAAO,GAAG,SAAS,YACnD,CAAC;AAEhD,eAAO,MAAM,6BAA6B,gBAAiB,kBAAkB,GAAG,OAAO,GAAG,SAAS,YAClD,CAAC;AAElD,eAAO,MAAM,gCAAgC,gBAAiB,kBAAkB,GAAG,OAAO,GAAG,SAAS,YAClD,CAAC;AAErD,eAAO,MAAM,yBAAyB,gBAAiB,kBAAkB,GAAG,OAAO,GAAG,SAAS,YAClD,CAAC;AAE9C,eAAO,MAAM,wBAAwB,gBAAiB,kBAAkB,GAAG,OAAO,GAAG,SAAS,YAClD,CAAC;AAE7C,eAAO,MAAM,0BAA0B,gBAAiB,kBAAkB,GAAG,OAAO,GAAG,SAAS,YAC3C,CAAC;AAEtD;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,gBAAiB,kBAAkB,GAAG,OAAO,GAAG,SAAS,YAa7F,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,4BAA4B,gBAAiB,kBAAkB,GAAG,OAAO,GAAG,SAAS,KAAG,OAapG,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,gBAAiB,kBAAkB,GAAG,OAAO,GAAG,SAAS,KAAG,OAU1F,CAAC;AAEF,eAAO,MAAM,gCAAgC,gBAAiB,kBAAkB,GAAG,OAAO,GAAG,SAAS,KAAG,OAaxG,CAAC;AAEF,eAAO,MAAM,4BAA4B,WAAY,cAAc,KAAG,0BAA0B,GAAG,SASlG,CAAC;AAEF,eAAO,MAAM,gCAAgC,WACnC,cAAc,KACrB,8BAA8B,GAAG,SASnC,CAAC;AAEF,eAAO,MAAM,wBAAwB,WAAY,cAAc,KAAG,sBAAsB,GAAG,SA2B1F,CAAC;AAEF,eAAO,MAAM,yBAAyB,WAAY,cAAc,KAAG,mBAqClE,CAAC;AAEF,eAAO,MAAM,4BAA4B,WAAY,cAAc,KAAG,kBAcrE,CAAC"}
|
|
1
|
+
{"version":3,"file":"default-tracking.d.ts","sourceRoot":"","sources":["../../src/default-tracking.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,mBAAmB,EAEnB,0BAA0B,EAC1B,uBAAuB,EACvB,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EAClB,sBAAsB,EACtB,8BAA8B,EAC/B,MAAM,2BAA2B,CAAC;AA8BnC,eAAO,MAAM,4BAA4B,gBAAiB,kBAAkB,GAAG,OAAO,GAAG,SAAS,YACnD,CAAC;AAEhD,eAAO,MAAM,6BAA6B,gBAAiB,kBAAkB,GAAG,OAAO,GAAG,SAAS,YAClD,CAAC;AAElD,eAAO,MAAM,gCAAgC,gBAAiB,kBAAkB,GAAG,OAAO,GAAG,SAAS,YAClD,CAAC;AAErD,eAAO,MAAM,yBAAyB,gBAAiB,kBAAkB,GAAG,OAAO,GAAG,SAAS,YAClD,CAAC;AAE9C,eAAO,MAAM,wBAAwB,gBAAiB,kBAAkB,GAAG,OAAO,GAAG,SAAS,YAClD,CAAC;AAE7C,eAAO,MAAM,0BAA0B,gBAAiB,kBAAkB,GAAG,OAAO,GAAG,SAAS,YAC3C,CAAC;AAEtD;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,gBAAiB,kBAAkB,GAAG,OAAO,GAAG,SAAS,YAa7F,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,4BAA4B,gBAAiB,kBAAkB,GAAG,OAAO,GAAG,SAAS,KAAG,OAapG,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,gBAAiB,kBAAkB,GAAG,OAAO,GAAG,SAAS,KAAG,OAU1F,CAAC;AAEF,eAAO,MAAM,gCAAgC,gBAAiB,kBAAkB,GAAG,OAAO,GAAG,SAAS,KAAG,OAaxG,CAAC;AAEF,eAAO,MAAM,4BAA4B,WAAY,cAAc,KAAG,0BAA0B,GAAG,SASlG,CAAC;AAEF,eAAO,MAAM,gCAAgC,WACnC,cAAc,KACrB,8BAA8B,GAAG,SASnC,CAAC;AAEF,eAAO,MAAM,wBAAwB,WAAY,cAAc,KAAG,sBAAsB,GAAG,SA2B1F,CAAC;AAEF,eAAO,MAAM,yBAAyB,WAAY,cAAc,KAAG,mBAqClE,CAAC;AAEF,eAAO,MAAM,4BAA4B,WAAY,cAAc,KAAG,kBAcrE,CAAC;AAEF,eAAO,MAAM,yBAAyB,WAAY,cAAc,KAAG,uBAAuB,GAAG,SAU5F,CAAC"}
|
|
@@ -171,4 +171,13 @@ export var getAttributionTrackingConfig = function (config) {
|
|
|
171
171
|
}
|
|
172
172
|
return {};
|
|
173
173
|
};
|
|
174
|
+
export var getFormInteractionsConfig = function (config) {
|
|
175
|
+
if (isFormInteractionTrackingEnabled(config.defaultTracking) &&
|
|
176
|
+
config.defaultTracking &&
|
|
177
|
+
typeof config.defaultTracking === 'object' &&
|
|
178
|
+
typeof config.defaultTracking.formInteractions === 'object') {
|
|
179
|
+
return config.defaultTracking.formInteractions;
|
|
180
|
+
}
|
|
181
|
+
return undefined;
|
|
182
|
+
};
|
|
174
183
|
//# sourceMappingURL=default-tracking.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"default-tracking.js","sourceRoot":"","sources":["../../src/default-tracking.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n PageTrackingHistoryChanges,\n PageTrackingOptions,\n PageTrackingTrackOn,\n ElementInteractionsOptions,\n BrowserOptions,\n AutocaptureOptions,\n AttributionOptions,\n NetworkTrackingOptions,\n FrustrationInteractionsOptions,\n} from '@amplitude/analytics-core';\n\n/**\n * A subset of AutocaptureOptions that includes the autocapture features that\n * are made available to users by default (even if \"config.autocapture === undefined\")\n */\ntype AutocaptureOptionsDefaultAvailable = Pick<\n AutocaptureOptions,\n 'pageViews' | 'sessions' | 'fileDownloads' | 'formInteractions' | 'attribution' | 'pageUrlEnrichment'\n>;\n\n/**\n * Returns false if autocapture === false or if autocapture[event],\n * otherwise returns true (even if \"config.autocapture === undefined\")\n */\nconst isTrackingEnabled = (\n autocapture: AutocaptureOptionsDefaultAvailable | boolean | undefined,\n event: keyof AutocaptureOptionsDefaultAvailable,\n) => {\n if (typeof autocapture === 'boolean') {\n return autocapture;\n }\n\n if (autocapture?.[event] === false) {\n return false;\n }\n\n return true;\n};\n\nexport const isAttributionTrackingEnabled = (autocapture: AutocaptureOptions | boolean | undefined) =>\n isTrackingEnabled(autocapture, 'attribution');\n\nexport const isFileDownloadTrackingEnabled = (autocapture: AutocaptureOptions | boolean | undefined) =>\n isTrackingEnabled(autocapture, 'fileDownloads');\n\nexport const isFormInteractionTrackingEnabled = (autocapture: AutocaptureOptions | boolean | undefined) =>\n isTrackingEnabled(autocapture, 'formInteractions');\n\nexport const isPageViewTrackingEnabled = (autocapture: AutocaptureOptions | boolean | undefined) =>\n isTrackingEnabled(autocapture, 'pageViews');\n\nexport const isSessionTrackingEnabled = (autocapture: AutocaptureOptions | boolean | undefined) =>\n isTrackingEnabled(autocapture, 'sessions');\n\nexport const isPageUrlEnrichmentEnabled = (autocapture: AutocaptureOptions | boolean | undefined) =>\n isTrackingEnabled(autocapture, 'pageUrlEnrichment');\n\n/**\n * Returns true if\n * 1. if autocapture.networkTracking === true\n * 2. if autocapture.networkTracking === object\n * otherwise returns false\n */\nexport const isNetworkTrackingEnabled = (autocapture: AutocaptureOptions | boolean | undefined) => {\n if (typeof autocapture === 'boolean') {\n return autocapture;\n }\n\n if (\n typeof autocapture === 'object' &&\n (autocapture.networkTracking === true || typeof autocapture.networkTracking === 'object')\n ) {\n return true;\n }\n\n return false;\n};\n\n/**\n * Returns true if\n * 1. autocapture === true\n * 2. if autocapture.elementInteractions === true\n * 3. if autocapture.elementInteractions === object\n * otherwise returns false\n */\nexport const isElementInteractionsEnabled = (autocapture: AutocaptureOptions | boolean | undefined): boolean => {\n if (typeof autocapture === 'boolean') {\n return autocapture;\n }\n\n if (\n typeof autocapture === 'object' &&\n (autocapture.elementInteractions === true || typeof autocapture.elementInteractions === 'object')\n ) {\n return true;\n }\n\n return false;\n};\n\n/**\n * Returns true if\n * 1. autocapture === true\n * 2. if autocapture.webVitals === true\n * otherwise returns false\n */\nexport const isWebVitalsEnabled = (autocapture: AutocaptureOptions | boolean | undefined): boolean => {\n if (typeof autocapture === 'boolean') {\n return autocapture;\n }\n\n if (typeof autocapture === 'object' && autocapture.webVitals === true) {\n return true;\n }\n\n return false;\n};\n\nexport const isFrustrationInteractionsEnabled = (autocapture: AutocaptureOptions | boolean | undefined): boolean => {\n if (typeof autocapture === 'boolean') {\n return autocapture;\n }\n\n if (\n typeof autocapture === 'object' &&\n (autocapture.frustrationInteractions === true || typeof autocapture.frustrationInteractions === 'object')\n ) {\n return true;\n }\n\n return false;\n};\n\nexport const getElementInteractionsConfig = (config: BrowserOptions): ElementInteractionsOptions | undefined => {\n if (\n isElementInteractionsEnabled(config.autocapture) &&\n typeof config.autocapture === 'object' &&\n typeof config.autocapture.elementInteractions === 'object'\n ) {\n return config.autocapture.elementInteractions;\n }\n return undefined;\n};\n\nexport const getFrustrationInteractionsConfig = (\n config: BrowserOptions,\n): FrustrationInteractionsOptions | undefined => {\n if (\n isFrustrationInteractionsEnabled(config.autocapture) &&\n typeof config.autocapture === 'object' &&\n typeof config.autocapture.frustrationInteractions === 'object'\n ) {\n return config.autocapture.frustrationInteractions;\n }\n return undefined;\n};\n\nexport const getNetworkTrackingConfig = (config: BrowserOptions): NetworkTrackingOptions | undefined => {\n if (isNetworkTrackingEnabled(config.autocapture)) {\n let networkTrackingConfig;\n if (typeof config.autocapture === 'object' && typeof config.autocapture.networkTracking === 'object') {\n networkTrackingConfig = config.autocapture.networkTracking;\n } else if (config.networkTrackingOptions) {\n networkTrackingConfig = config.networkTrackingOptions;\n }\n return {\n ...networkTrackingConfig,\n captureRules: networkTrackingConfig?.captureRules?.map((rule) => {\n // if URLs and hosts are both set, URLs take precedence over hosts\n if (rule.urls?.length && rule.hosts?.length) {\n const hostsString = JSON.stringify(rule.hosts);\n const urlsString = JSON.stringify(rule.urls);\n /* istanbul ignore next */\n config.loggerProvider?.warn(\n `Found network capture rule with both urls='${urlsString}' and hosts='${hostsString}' set. ` +\n `Definition of urls takes precedence over hosts, so ignoring hosts.`,\n );\n return { ...rule, hosts: undefined };\n }\n return rule;\n }),\n };\n }\n return;\n};\n\nexport const getPageViewTrackingConfig = (config: BrowserOptions): PageTrackingOptions => {\n let trackOn: PageTrackingTrackOn | undefined = () => false;\n let trackHistoryChanges: PageTrackingHistoryChanges | undefined = undefined;\n let eventType: string | undefined;\n const pageCounter = config.pageCounter;\n\n const isDefaultPageViewTrackingEnabled = isPageViewTrackingEnabled(config.defaultTracking);\n if (isDefaultPageViewTrackingEnabled) {\n trackOn = undefined;\n eventType = undefined;\n\n if (\n config.defaultTracking &&\n typeof config.defaultTracking === 'object' &&\n config.defaultTracking.pageViews &&\n typeof config.defaultTracking.pageViews === 'object'\n ) {\n if ('trackOn' in config.defaultTracking.pageViews) {\n trackOn = config.defaultTracking.pageViews.trackOn;\n }\n\n if ('trackHistoryChanges' in config.defaultTracking.pageViews) {\n trackHistoryChanges = config.defaultTracking.pageViews.trackHistoryChanges;\n }\n\n if ('eventType' in config.defaultTracking.pageViews && config.defaultTracking.pageViews.eventType) {\n eventType = config.defaultTracking.pageViews.eventType;\n }\n }\n }\n\n return {\n trackOn,\n trackHistoryChanges,\n eventType,\n pageCounter,\n };\n};\n\nexport const getAttributionTrackingConfig = (config: BrowserOptions): AttributionOptions => {\n if (\n isAttributionTrackingEnabled(config.defaultTracking) &&\n config.defaultTracking &&\n typeof config.defaultTracking === 'object' &&\n config.defaultTracking.attribution &&\n typeof config.defaultTracking.attribution === 'object'\n ) {\n return {\n ...config.defaultTracking.attribution,\n };\n }\n\n return {};\n};\n"]}
|
|
1
|
+
{"version":3,"file":"default-tracking.js","sourceRoot":"","sources":["../../src/default-tracking.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n PageTrackingHistoryChanges,\n PageTrackingOptions,\n PageTrackingTrackOn,\n ElementInteractionsOptions,\n FormInteractionsOptions,\n BrowserOptions,\n AutocaptureOptions,\n AttributionOptions,\n NetworkTrackingOptions,\n FrustrationInteractionsOptions,\n} from '@amplitude/analytics-core';\n\n/**\n * A subset of AutocaptureOptions that includes the autocapture features that\n * are made available to users by default (even if \"config.autocapture === undefined\")\n */\ntype AutocaptureOptionsDefaultAvailable = Pick<\n AutocaptureOptions,\n 'pageViews' | 'sessions' | 'fileDownloads' | 'formInteractions' | 'attribution' | 'pageUrlEnrichment'\n>;\n\n/**\n * Returns false if autocapture === false or if autocapture[event],\n * otherwise returns true (even if \"config.autocapture === undefined\")\n */\nconst isTrackingEnabled = (\n autocapture: AutocaptureOptionsDefaultAvailable | boolean | undefined,\n event: keyof AutocaptureOptionsDefaultAvailable,\n) => {\n if (typeof autocapture === 'boolean') {\n return autocapture;\n }\n\n if (autocapture?.[event] === false) {\n return false;\n }\n\n return true;\n};\n\nexport const isAttributionTrackingEnabled = (autocapture: AutocaptureOptions | boolean | undefined) =>\n isTrackingEnabled(autocapture, 'attribution');\n\nexport const isFileDownloadTrackingEnabled = (autocapture: AutocaptureOptions | boolean | undefined) =>\n isTrackingEnabled(autocapture, 'fileDownloads');\n\nexport const isFormInteractionTrackingEnabled = (autocapture: AutocaptureOptions | boolean | undefined) =>\n isTrackingEnabled(autocapture, 'formInteractions');\n\nexport const isPageViewTrackingEnabled = (autocapture: AutocaptureOptions | boolean | undefined) =>\n isTrackingEnabled(autocapture, 'pageViews');\n\nexport const isSessionTrackingEnabled = (autocapture: AutocaptureOptions | boolean | undefined) =>\n isTrackingEnabled(autocapture, 'sessions');\n\nexport const isPageUrlEnrichmentEnabled = (autocapture: AutocaptureOptions | boolean | undefined) =>\n isTrackingEnabled(autocapture, 'pageUrlEnrichment');\n\n/**\n * Returns true if\n * 1. if autocapture.networkTracking === true\n * 2. if autocapture.networkTracking === object\n * otherwise returns false\n */\nexport const isNetworkTrackingEnabled = (autocapture: AutocaptureOptions | boolean | undefined) => {\n if (typeof autocapture === 'boolean') {\n return autocapture;\n }\n\n if (\n typeof autocapture === 'object' &&\n (autocapture.networkTracking === true || typeof autocapture.networkTracking === 'object')\n ) {\n return true;\n }\n\n return false;\n};\n\n/**\n * Returns true if\n * 1. autocapture === true\n * 2. if autocapture.elementInteractions === true\n * 3. if autocapture.elementInteractions === object\n * otherwise returns false\n */\nexport const isElementInteractionsEnabled = (autocapture: AutocaptureOptions | boolean | undefined): boolean => {\n if (typeof autocapture === 'boolean') {\n return autocapture;\n }\n\n if (\n typeof autocapture === 'object' &&\n (autocapture.elementInteractions === true || typeof autocapture.elementInteractions === 'object')\n ) {\n return true;\n }\n\n return false;\n};\n\n/**\n * Returns true if\n * 1. autocapture === true\n * 2. if autocapture.webVitals === true\n * otherwise returns false\n */\nexport const isWebVitalsEnabled = (autocapture: AutocaptureOptions | boolean | undefined): boolean => {\n if (typeof autocapture === 'boolean') {\n return autocapture;\n }\n\n if (typeof autocapture === 'object' && autocapture.webVitals === true) {\n return true;\n }\n\n return false;\n};\n\nexport const isFrustrationInteractionsEnabled = (autocapture: AutocaptureOptions | boolean | undefined): boolean => {\n if (typeof autocapture === 'boolean') {\n return autocapture;\n }\n\n if (\n typeof autocapture === 'object' &&\n (autocapture.frustrationInteractions === true || typeof autocapture.frustrationInteractions === 'object')\n ) {\n return true;\n }\n\n return false;\n};\n\nexport const getElementInteractionsConfig = (config: BrowserOptions): ElementInteractionsOptions | undefined => {\n if (\n isElementInteractionsEnabled(config.autocapture) &&\n typeof config.autocapture === 'object' &&\n typeof config.autocapture.elementInteractions === 'object'\n ) {\n return config.autocapture.elementInteractions;\n }\n return undefined;\n};\n\nexport const getFrustrationInteractionsConfig = (\n config: BrowserOptions,\n): FrustrationInteractionsOptions | undefined => {\n if (\n isFrustrationInteractionsEnabled(config.autocapture) &&\n typeof config.autocapture === 'object' &&\n typeof config.autocapture.frustrationInteractions === 'object'\n ) {\n return config.autocapture.frustrationInteractions;\n }\n return undefined;\n};\n\nexport const getNetworkTrackingConfig = (config: BrowserOptions): NetworkTrackingOptions | undefined => {\n if (isNetworkTrackingEnabled(config.autocapture)) {\n let networkTrackingConfig;\n if (typeof config.autocapture === 'object' && typeof config.autocapture.networkTracking === 'object') {\n networkTrackingConfig = config.autocapture.networkTracking;\n } else if (config.networkTrackingOptions) {\n networkTrackingConfig = config.networkTrackingOptions;\n }\n return {\n ...networkTrackingConfig,\n captureRules: networkTrackingConfig?.captureRules?.map((rule) => {\n // if URLs and hosts are both set, URLs take precedence over hosts\n if (rule.urls?.length && rule.hosts?.length) {\n const hostsString = JSON.stringify(rule.hosts);\n const urlsString = JSON.stringify(rule.urls);\n /* istanbul ignore next */\n config.loggerProvider?.warn(\n `Found network capture rule with both urls='${urlsString}' and hosts='${hostsString}' set. ` +\n `Definition of urls takes precedence over hosts, so ignoring hosts.`,\n );\n return { ...rule, hosts: undefined };\n }\n return rule;\n }),\n };\n }\n return;\n};\n\nexport const getPageViewTrackingConfig = (config: BrowserOptions): PageTrackingOptions => {\n let trackOn: PageTrackingTrackOn | undefined = () => false;\n let trackHistoryChanges: PageTrackingHistoryChanges | undefined = undefined;\n let eventType: string | undefined;\n const pageCounter = config.pageCounter;\n\n const isDefaultPageViewTrackingEnabled = isPageViewTrackingEnabled(config.defaultTracking);\n if (isDefaultPageViewTrackingEnabled) {\n trackOn = undefined;\n eventType = undefined;\n\n if (\n config.defaultTracking &&\n typeof config.defaultTracking === 'object' &&\n config.defaultTracking.pageViews &&\n typeof config.defaultTracking.pageViews === 'object'\n ) {\n if ('trackOn' in config.defaultTracking.pageViews) {\n trackOn = config.defaultTracking.pageViews.trackOn;\n }\n\n if ('trackHistoryChanges' in config.defaultTracking.pageViews) {\n trackHistoryChanges = config.defaultTracking.pageViews.trackHistoryChanges;\n }\n\n if ('eventType' in config.defaultTracking.pageViews && config.defaultTracking.pageViews.eventType) {\n eventType = config.defaultTracking.pageViews.eventType;\n }\n }\n }\n\n return {\n trackOn,\n trackHistoryChanges,\n eventType,\n pageCounter,\n };\n};\n\nexport const getAttributionTrackingConfig = (config: BrowserOptions): AttributionOptions => {\n if (\n isAttributionTrackingEnabled(config.defaultTracking) &&\n config.defaultTracking &&\n typeof config.defaultTracking === 'object' &&\n config.defaultTracking.attribution &&\n typeof config.defaultTracking.attribution === 'object'\n ) {\n return {\n ...config.defaultTracking.attribution,\n };\n }\n\n return {};\n};\n\nexport const getFormInteractionsConfig = (config: BrowserOptions): FormInteractionsOptions | undefined => {\n if (\n isFormInteractionTrackingEnabled(config.defaultTracking) &&\n config.defaultTracking &&\n typeof config.defaultTracking === 'object' &&\n typeof config.defaultTracking.formInteractions === 'object'\n ) {\n return config.defaultTracking.formInteractions;\n }\n return undefined;\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"form-interaction-tracking.d.ts","sourceRoot":"","sources":["../../../src/plugins/form-interaction-tracking.ts"],"names":[],"mappings":"AAQA,OAAO,
|
|
1
|
+
{"version":3,"file":"form-interaction-tracking.d.ts","sourceRoot":"","sources":["../../../src/plugins/form-interaction-tracking.ts"],"names":[],"mappings":"AAQA,OAAO,EAGL,gBAAgB,EAGjB,MAAM,2BAA2B,CAAC;AASnC,eAAO,MAAM,uBAAuB,QAAO,gBA6J1C,CAAC;AAEF,eAAO,MAAM,iBAAiB,uDAU7B,CAAC;AAGF,eAAO,MAAM,iBAAiB,SAAU,eAAe,KAAG,MAAM,GAAG,IASlE,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { __awaiter, __generator } from "tslib";
|
|
2
2
|
import { DEFAULT_FORM_START_EVENT, DEFAULT_FORM_SUBMIT_EVENT, FORM_ID, FORM_NAME, FORM_DESTINATION, } from '../constants';
|
|
3
|
-
import { getGlobalScope } from '@amplitude/analytics-core';
|
|
3
|
+
import { getGlobalScope, } from '@amplitude/analytics-core';
|
|
4
|
+
import { getFormInteractionsConfig } from '../default-tracking';
|
|
4
5
|
export var formInteractionTracking = function () {
|
|
5
6
|
var observer;
|
|
6
7
|
var eventListeners = [];
|
|
@@ -20,11 +21,13 @@ export var formInteractionTracking = function () {
|
|
|
20
21
|
});
|
|
21
22
|
eventListeners = [];
|
|
22
23
|
};
|
|
24
|
+
var formInteractionsConfig;
|
|
23
25
|
var name = '@amplitude/plugin-form-interaction-tracking-browser';
|
|
24
26
|
var type = 'enrichment';
|
|
25
27
|
var setup = function (config, amplitude) { return __awaiter(void 0, void 0, void 0, function () {
|
|
26
28
|
var initializeFormTracking, window_1;
|
|
27
29
|
return __generator(this, function (_a) {
|
|
30
|
+
formInteractionsConfig = getFormInteractionsConfig(config);
|
|
28
31
|
initializeFormTracking = function () {
|
|
29
32
|
/* istanbul ignore if */
|
|
30
33
|
if (!amplitude) {
|
|
@@ -50,7 +53,7 @@ export var formInteractionTracking = function () {
|
|
|
50
53
|
}
|
|
51
54
|
hasFormChanged = true;
|
|
52
55
|
});
|
|
53
|
-
addEventListener(form, 'submit', function () {
|
|
56
|
+
addEventListener(form, 'submit', function (event) {
|
|
54
57
|
var _a, _b;
|
|
55
58
|
var formDestination = extractFormAction(form);
|
|
56
59
|
if (!hasFormChanged) {
|
|
@@ -60,6 +63,26 @@ export var formInteractionTracking = function () {
|
|
|
60
63
|
_a[FORM_DESTINATION] = formDestination,
|
|
61
64
|
_a));
|
|
62
65
|
}
|
|
66
|
+
hasFormChanged = true;
|
|
67
|
+
// Check if shouldTrackSubmit callback is provided and use it to determine whether to track form_submit
|
|
68
|
+
if ((formInteractionsConfig === null || formInteractionsConfig === void 0 ? void 0 : formInteractionsConfig.shouldTrackSubmit) !== undefined) {
|
|
69
|
+
if (typeof formInteractionsConfig.shouldTrackSubmit === 'function' &&
|
|
70
|
+
typeof SubmitEvent !== 'undefined' &&
|
|
71
|
+
event instanceof SubmitEvent) {
|
|
72
|
+
try {
|
|
73
|
+
var shouldTrack = formInteractionsConfig.shouldTrackSubmit(event);
|
|
74
|
+
if (!shouldTrack) {
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
catch (e) {
|
|
79
|
+
config.loggerProvider.warn('shouldTrackSubmit callback threw an error, proceeding with tracking.');
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
config.loggerProvider.warn('shouldTrackSubmit is ignored because it is not a function or event is not a SubmitEvent.');
|
|
84
|
+
}
|
|
85
|
+
}
|
|
63
86
|
amplitude.track(DEFAULT_FORM_SUBMIT_EVENT, (_b = {},
|
|
64
87
|
_b[FORM_ID] = stringOrUndefined(form.id),
|
|
65
88
|
_b[FORM_NAME] = stringOrUndefined(form.name),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"form-interaction-tracking.js","sourceRoot":"","sources":["../../../src/plugins/form-interaction-tracking.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n DEFAULT_FORM_START_EVENT,\n DEFAULT_FORM_SUBMIT_EVENT,\n FORM_ID,\n FORM_NAME,\n FORM_DESTINATION,\n} from '../constants';\nimport { BrowserConfig } from '../config';\nimport { getGlobalScope, Event, EnrichmentPlugin, BrowserClient } from '@amplitude/analytics-core';\n\ninterface EventListener {\n element: Element;\n type: 'change' | 'submit';\n handler: () => void;\n}\n\nexport const formInteractionTracking = (): EnrichmentPlugin => {\n let observer: MutationObserver | undefined;\n let eventListeners: EventListener[] = [];\n\n const addEventListener = (element: Element, type: 'change' | 'submit', handler: () => void) => {\n element.addEventListener(type, handler);\n eventListeners.push({\n element,\n type,\n handler,\n });\n };\n\n const removeClickListeners = () => {\n eventListeners.forEach(({ element, type, handler }) => {\n /* istanbul ignore next */\n element?.removeEventListener(type, handler);\n });\n eventListeners = [];\n };\n\n const name = '@amplitude/plugin-form-interaction-tracking-browser';\n const type = 'enrichment';\n const setup = async (config: BrowserConfig, amplitude: BrowserClient) => {\n const initializeFormTracking = () => {\n /* istanbul ignore if */\n if (!amplitude) {\n // TODO: Add required minimum version of @amplitude/analytics-browser\n config.loggerProvider.warn(\n 'Form interaction tracking requires a later version of @amplitude/analytics-browser. Form interaction events are not tracked.',\n );\n return;\n }\n\n /* istanbul ignore if */\n if (typeof document === 'undefined') {\n return;\n }\n\n const addFormInteractionListener = (form: HTMLFormElement) => {\n let hasFormChanged = false;\n\n addEventListener(form, 'change', () => {\n const formDestination = extractFormAction(form);\n if (!hasFormChanged) {\n amplitude.track(DEFAULT_FORM_START_EVENT, {\n [FORM_ID]: stringOrUndefined(form.id),\n [FORM_NAME]: stringOrUndefined(form.name),\n [FORM_DESTINATION]: formDestination,\n });\n }\n hasFormChanged = true;\n });\n\n addEventListener(form, 'submit', () => {\n const formDestination = extractFormAction(form);\n if (!hasFormChanged) {\n amplitude.track(DEFAULT_FORM_START_EVENT, {\n [FORM_ID]: stringOrUndefined(form.id),\n [FORM_NAME]: stringOrUndefined(form.name),\n [FORM_DESTINATION]: formDestination,\n });\n }\n\n amplitude.track(DEFAULT_FORM_SUBMIT_EVENT, {\n [FORM_ID]: stringOrUndefined(form.id),\n [FORM_NAME]: stringOrUndefined(form.name),\n [FORM_DESTINATION]: formDestination,\n });\n hasFormChanged = false;\n });\n };\n\n // Adds listener to existing anchor tags\n const forms = Array.from(document.getElementsByTagName('form'));\n forms.forEach(addFormInteractionListener);\n\n // Adds listener to anchor tags added after initial load\n /* istanbul ignore else */\n if (typeof MutationObserver !== 'undefined') {\n observer = new MutationObserver((mutations) => {\n mutations.forEach((mutation) => {\n mutation.addedNodes.forEach((node) => {\n if (node.nodeName === 'FORM') {\n addFormInteractionListener(node as HTMLFormElement);\n }\n if ('querySelectorAll' in node && typeof node.querySelectorAll === 'function') {\n Array.from(node.querySelectorAll('form') as HTMLFormElement[]).map(addFormInteractionListener);\n }\n });\n });\n });\n\n observer.observe(document.body, {\n subtree: true,\n childList: true,\n });\n }\n };\n\n // If the document is already loaded, initialize immediately.\n if (document.readyState === 'complete') {\n initializeFormTracking();\n } else {\n // Otherwise, wait for the load event.\n // The form interaction plugin observes changes in the dom. For this to work correctly, the observer can only be setup\n // after the body is built. When Amplitude gets initialized in a script tag, the body tag is still unavailable. So register this\n // only after the window is loaded\n const window = getGlobalScope();\n /* istanbul ignore else*/\n if (window) {\n window.addEventListener('load', initializeFormTracking);\n } else {\n config.loggerProvider.debug('Form interaction tracking is not installed because global is undefined.');\n }\n }\n };\n const execute = async (event: Event) => event;\n const teardown = async () => {\n observer?.disconnect();\n removeClickListeners();\n };\n\n return {\n name,\n type,\n setup,\n execute,\n teardown,\n };\n};\n\nexport const stringOrUndefined = <T>(name: T): T extends string ? string : undefined => {\n /* istanbul ignore if */\n if (typeof name !== 'string') {\n // We found instances where the value of `name` is an Element and not a string.\n // Elements may have circular references and would throw an error when passed to `JSON.stringify(...)`.\n // If a non-string value is seen, assume there is no value.\n return undefined as T extends string ? string : undefined;\n }\n\n return name as T extends string ? string : undefined;\n};\n\n// Extracts the form action attribute, and normalizes it to a valid URL to preserve the previous behavior of accessing the action property directly.\nexport const extractFormAction = (form: HTMLFormElement): string | null => {\n let formDestination = form.getAttribute('action');\n try {\n // eslint-disable-next-line no-restricted-globals\n formDestination = new URL(encodeURI(formDestination ?? ''), window.location.href).href;\n } catch {\n //\n }\n return formDestination;\n};\n"]}
|
|
1
|
+
{"version":3,"file":"form-interaction-tracking.js","sourceRoot":"","sources":["../../../src/plugins/form-interaction-tracking.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n DEFAULT_FORM_START_EVENT,\n DEFAULT_FORM_SUBMIT_EVENT,\n FORM_ID,\n FORM_NAME,\n FORM_DESTINATION,\n} from '../constants';\nimport { BrowserConfig } from '../config';\nimport {\n getGlobalScope,\n Event as AmplitudeEvent,\n EnrichmentPlugin,\n BrowserClient,\n FormInteractionsOptions,\n} from '@amplitude/analytics-core';\nimport { getFormInteractionsConfig } from '../default-tracking';\n\ninterface EventListener {\n element: Element;\n type: 'change' | 'submit';\n handler: (event: Event) => void;\n}\n\nexport const formInteractionTracking = (): EnrichmentPlugin => {\n let observer: MutationObserver | undefined;\n let eventListeners: EventListener[] = [];\n\n const addEventListener = (element: Element, type: 'change' | 'submit', handler: (event: Event) => void) => {\n element.addEventListener(type, handler);\n eventListeners.push({\n element,\n type,\n handler,\n });\n };\n\n const removeClickListeners = () => {\n eventListeners.forEach(({ element, type, handler }) => {\n /* istanbul ignore next */\n element?.removeEventListener(type, handler);\n });\n eventListeners = [];\n };\n\n let formInteractionsConfig: FormInteractionsOptions | undefined;\n\n const name = '@amplitude/plugin-form-interaction-tracking-browser';\n const type = 'enrichment';\n const setup = async (config: BrowserConfig, amplitude: BrowserClient) => {\n formInteractionsConfig = getFormInteractionsConfig(config);\n\n const initializeFormTracking = () => {\n /* istanbul ignore if */\n if (!amplitude) {\n // TODO: Add required minimum version of @amplitude/analytics-browser\n config.loggerProvider.warn(\n 'Form interaction tracking requires a later version of @amplitude/analytics-browser. Form interaction events are not tracked.',\n );\n return;\n }\n\n /* istanbul ignore if */\n if (typeof document === 'undefined') {\n return;\n }\n\n const addFormInteractionListener = (form: HTMLFormElement) => {\n let hasFormChanged = false;\n\n addEventListener(form, 'change', () => {\n const formDestination = extractFormAction(form);\n if (!hasFormChanged) {\n amplitude.track(DEFAULT_FORM_START_EVENT, {\n [FORM_ID]: stringOrUndefined(form.id),\n [FORM_NAME]: stringOrUndefined(form.name),\n [FORM_DESTINATION]: formDestination,\n });\n }\n hasFormChanged = true;\n });\n\n addEventListener(form, 'submit', (event: Event) => {\n const formDestination = extractFormAction(form);\n if (!hasFormChanged) {\n amplitude.track(DEFAULT_FORM_START_EVENT, {\n [FORM_ID]: stringOrUndefined(form.id),\n [FORM_NAME]: stringOrUndefined(form.name),\n [FORM_DESTINATION]: formDestination,\n });\n }\n hasFormChanged = true;\n\n // Check if shouldTrackSubmit callback is provided and use it to determine whether to track form_submit\n if (formInteractionsConfig?.shouldTrackSubmit !== undefined) {\n if (\n typeof formInteractionsConfig.shouldTrackSubmit === 'function' &&\n typeof SubmitEvent !== 'undefined' &&\n event instanceof SubmitEvent\n ) {\n try {\n const shouldTrack = formInteractionsConfig.shouldTrackSubmit(event);\n if (!shouldTrack) {\n return;\n }\n } catch (e) {\n config.loggerProvider.warn('shouldTrackSubmit callback threw an error, proceeding with tracking.');\n }\n } else {\n config.loggerProvider.warn(\n 'shouldTrackSubmit is ignored because it is not a function or event is not a SubmitEvent.',\n );\n }\n }\n\n amplitude.track(DEFAULT_FORM_SUBMIT_EVENT, {\n [FORM_ID]: stringOrUndefined(form.id),\n [FORM_NAME]: stringOrUndefined(form.name),\n [FORM_DESTINATION]: formDestination,\n });\n hasFormChanged = false;\n });\n };\n\n // Adds listener to existing anchor tags\n const forms = Array.from(document.getElementsByTagName('form'));\n forms.forEach(addFormInteractionListener);\n\n // Adds listener to anchor tags added after initial load\n /* istanbul ignore else */\n if (typeof MutationObserver !== 'undefined') {\n observer = new MutationObserver((mutations) => {\n mutations.forEach((mutation) => {\n mutation.addedNodes.forEach((node) => {\n if (node.nodeName === 'FORM') {\n addFormInteractionListener(node as HTMLFormElement);\n }\n if ('querySelectorAll' in node && typeof node.querySelectorAll === 'function') {\n Array.from(node.querySelectorAll('form') as HTMLFormElement[]).map(addFormInteractionListener);\n }\n });\n });\n });\n\n observer.observe(document.body, {\n subtree: true,\n childList: true,\n });\n }\n };\n\n // If the document is already loaded, initialize immediately.\n if (document.readyState === 'complete') {\n initializeFormTracking();\n } else {\n // Otherwise, wait for the load event.\n // The form interaction plugin observes changes in the dom. For this to work correctly, the observer can only be setup\n // after the body is built. When Amplitude gets initialized in a script tag, the body tag is still unavailable. So register this\n // only after the window is loaded\n const window = getGlobalScope();\n /* istanbul ignore else*/\n if (window) {\n window.addEventListener('load', initializeFormTracking);\n } else {\n config.loggerProvider.debug('Form interaction tracking is not installed because global is undefined.');\n }\n }\n };\n const execute = async (event: AmplitudeEvent) => event;\n const teardown = async () => {\n observer?.disconnect();\n removeClickListeners();\n };\n\n return {\n name,\n type,\n setup,\n execute,\n teardown,\n };\n};\n\nexport const stringOrUndefined = <T>(name: T): T extends string ? string : undefined => {\n /* istanbul ignore if */\n if (typeof name !== 'string') {\n // We found instances where the value of `name` is an Element and not a string.\n // Elements may have circular references and would throw an error when passed to `JSON.stringify(...)`.\n // If a non-string value is seen, assume there is no value.\n return undefined as T extends string ? string : undefined;\n }\n\n return name as T extends string ? string : undefined;\n};\n\n// Extracts the form action attribute, and normalizes it to a valid URL to preserve the previous behavior of accessing the action property directly.\nexport const extractFormAction = (form: HTMLFormElement): string | null => {\n let formDestination = form.getAttribute('action');\n try {\n // eslint-disable-next-line no-restricted-globals\n formDestination = new URL(encodeURI(formDestination ?? ''), window.location.href).href;\n } catch {\n //\n }\n return formDestination;\n};\n"]}
|
package/lib/esm/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const VERSION = "2.
|
|
1
|
+
export declare const VERSION = "2.34.0";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
package/lib/esm/version.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export var VERSION = '2.
|
|
1
|
+
export var VERSION = '2.34.0';
|
|
2
2
|
//# sourceMappingURL=version.js.map
|
package/lib/esm/version.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,IAAM,OAAO,GAAG,QAAQ,CAAC","sourcesContent":["export const VERSION = '2.
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,IAAM,OAAO,GAAG,QAAQ,CAAC","sourcesContent":["export const VERSION = '2.34.0';\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
!function(){"use strict";!function(e,t){var
|
|
1
|
+
!function(){"use strict";!function(e,t){var n=e.amplitude||{_q:[],_iq:{}};if(n.invoked)e.console&&console.error&&console.error("Amplitude snippet has been loaded.");else{var r=function(e,t){e.prototype[t]=function(){return this._q.push({name:t,args:Array.prototype.slice.call(arguments,0)}),this}},i=function(e,t,n){return function(r){e._q.push({name:t,args:Array.prototype.slice.call(n,0),resolve:r})}},s=function(e,t,n){e[t]=function(){if(n)return{promise:new Promise(i(e,t,Array.prototype.slice.call(arguments)))}}},o=function(e){for(var t=0;t<f.length;t++)s(e,f[t],!1);for(var n=0;n<y.length;n++)s(e,y[n],!0)};n.invoked=!0;var u=t.getElementsByTagName("script")[0],a=t.createElement("script");a.src="https://cdn.amplitude.com/libs/plugin-autocapture-browser-0.9.0-min.js.gz",a.async=!1,u.parentNode.insertBefore(a,u);var c=t.createElement("script");c.type="text/javascript",c.integrity="sha384-w6jnsz1UVI8/tE15OISsDGEwBXn+DnL4t6sAQk2CimY5iBtLvv5Ct4i+Hm8mIPmJ",c.crossOrigin="anonymous",c.async=!1,c.src="https://cdn.amplitude.com/libs/analytics-browser-2.34.0-min.js.gz",c.onload=function(){e.amplitude.runQueuedFunctions||console.log("[Amplitude] Error: could not load SDK"),e.amplitude.init("YOUR_API_KEY","YOUR_USER_ID",{instanceName:"amplitude-bookmarklet",serverZone:"YOUR_SERVER_ZONE",ingestionMetadata:{sourceName:"browser-typescript-bookmarklet",sourceVersion:"1.0.0"},optOut:!1}),amplitudeAutocapturePlugin&&litudeAutocapturePlugin.autocapturePlugin&&"function"==typeof amplitudeAutocapturePlugin.autocapturePlugin&&e.amplitude.add(amplitudeAutocapturePlugin.autocapturePlugin()),alert("Amplitude is now tracking events!")},u.parentNode.insertBefore(c,u);for(var p=function(){return this._q=[],this},l=["add","append","clearAll","prepend","set","setOnce","unset","preInsert","postInsert","remove","getUserProperties"],d=0;d<l.length;d++)r(p,l[d]);n.Identify=p;for(var m=function(){return this._q=[],this},g=["getEventProperties","setProductId","setQuantity","setPrice","setRevenue","setRevenueType","setReceipt","setReceiptSig","setCurrency","setEventProperties"],v=0;v<g.length;v++)r(m,g[v]);n.Revenue=m;var f=["getDeviceId","setDeviceId","getSessionId","setSessionId","getUserId","setUserId","setOptOut","setTransport","reset","extendSession"],y=["init","add","remove","track","logEvent","identify","groupIdentify","setGroup","revenue","flush"];o(n),n.createInstance=function(e){return n._iq[e]={_q:[]},o(n._iq[e]),n._iq[e]},e.amplitude=n}}(window,document)}();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
javascript:!function()%7B%22use%20strict%22%3B!function(e%2Ct)%7Bvar%
|
|
1
|
+
javascript:!function()%7B%22use%20strict%22%3B!function(e%2Ct)%7Bvar%20n%3De.amplitude%7C%7C%7B_q%3A%5B%5D%2C_iq%3A%7B%7D%7D%3Bif(n.invoked)e.console%26%26console.error%26%26console.error(%22Amplitude%20snippet%20has%20been%20loaded.%22)%3Belse%7Bvar%20r%3Dfunction(e%2Ct)%7Be.prototype%5Bt%5D%3Dfunction()%7Breturn%20this._q.push(%7Bname%3At%2Cargs%3AArray.prototype.slice.call(arguments%2C0)%7D)%2Cthis%7D%7D%2Ci%3Dfunction(e%2Ct%2Cn)%7Breturn%20function(r)%7Be._q.push(%7Bname%3At%2Cargs%3AArray.prototype.slice.call(n%2C0)%2Cresolve%3Ar%7D)%7D%7D%2Cs%3Dfunction(e%2Ct%2Cn)%7Be%5Bt%5D%3Dfunction()%7Bif(n)return%7Bpromise%3Anew%20Promise(i(e%2Ct%2CArray.prototype.slice.call(arguments)))%7D%7D%7D%2Co%3Dfunction(e)%7Bfor(var%20t%3D0%3Bt%3Cf.length%3Bt%2B%2B)s(e%2Cf%5Bt%5D%2C!1)%3Bfor(var%20n%3D0%3Bn%3Cy.length%3Bn%2B%2B)s(e%2Cy%5Bn%5D%2C!0)%7D%3Bn.invoked%3D!0%3Bvar%20u%3Dt.getElementsByTagName(%22script%22)%5B0%5D%2Ca%3Dt.createElement(%22script%22)%3Ba.src%3D%22https%3A%2F%2Fcdn.amplitude.com%2Flibs%2Fplugin-autocapture-browser-0.9.0-min.js.gz%22%2Ca.async%3D!1%2Cu.parentNode.insertBefore(a%2Cu)%3Bvar%20c%3Dt.createElement(%22script%22)%3Bc.type%3D%22text%2Fjavascript%22%2Cc.integrity%3D%22sha384-w6jnsz1UVI8%2FtE15OISsDGEwBXn%2BDnL4t6sAQk2CimY5iBtLvv5Ct4i%2BHm8mIPmJ%22%2Cc.crossOrigin%3D%22anonymous%22%2Cc.async%3D!1%2Cc.src%3D%22https%3A%2F%2Fcdn.amplitude.com%2Flibs%2Fanalytics-browser-2.34.0-min.js.gz%22%2Cc.onload%3Dfunction()%7Be.amplitude.runQueuedFunctions%7C%7Cconsole.log(%22%5BAmplitude%5D%20Error%3A%20could%20not%20load%20SDK%22)%2Ce.amplitude.init(%22YOUR_API_KEY%22%2C%22YOUR_USER_ID%22%2C%7BinstanceName%3A%22amplitude-bookmarklet%22%2CserverZone%3A%22YOUR_SERVER_ZONE%22%2CingestionMetadata%3A%7BsourceName%3A%22browser-typescript-bookmarklet%22%2CsourceVersion%3A%221.0.0%22%7D%2CoptOut%3A!1%7D)%2CamplitudeAutocapturePlugin%26%26amplitudeAutocapturePlugin.autocapturePlugin%26%26%22function%22%3D%3Dtypeof%20amplitudeAutocapturePlugin.autocapturePlugin%26%26e.amplitude.add(amplitudeAutocapturePlugin.autocapturePlugin())%2Calert(%22Amplitude%20is%20now%20tracking%20events!%22)%7D%2Cu.parentNode.insertBefore(c%2Cu)%3Bfor(var%20p%3Dfunction()%7Breturn%20this._q%3D%5B%5D%2Cthis%7D%2Cl%3D%5B%22add%22%2C%22append%22%2C%22clearAll%22%2C%22prepend%22%2C%22set%22%2C%22setOnce%22%2C%22unset%22%2C%22preInsert%22%2C%22postInsert%22%2C%22remove%22%2C%22getUserProperties%22%5D%2Cd%3D0%3Bd%3Cl.length%3Bd%2B%2B)r(p%2Cl%5Bd%5D)%3Bn.Identify%3Dp%3Bfor(var%20m%3Dfunction()%7Breturn%20this._q%3D%5B%5D%2Cthis%7D%2Cg%3D%5B%22getEventProperties%22%2C%22setProductId%22%2C%22setQuantity%22%2C%22setPrice%22%2C%22setRevenue%22%2C%22setRevenueType%22%2C%22setReceipt%22%2C%22setReceiptSig%22%2C%22setCurrency%22%2C%22setEventProperties%22%5D%2Cv%3D0%3Bv%3Cg.length%3Bv%2B%2B)r(m%2Cg%5Bv%5D)%3Bn.Revenue%3Dm%3Bvar%20f%3D%5B%22getDeviceId%22%2C%22setDeviceId%22%2C%22getSessionId%22%2C%22setSessionId%22%2C%22getUserId%22%2C%22setUserId%22%2C%22setOptOut%22%2C%22setTransport%22%2C%22reset%22%2C%22extendSession%22%5D%2Cy%3D%5B%22init%22%2C%22add%22%2C%22remove%22%2C%22track%22%2C%22logEvent%22%2C%22identify%22%2C%22groupIdentify%22%2C%22setGroup%22%2C%22revenue%22%2C%22flush%22%5D%3Bo(n)%2Cn.createInstance%3Dfunction(e)%7Breturn%20n._iq%5Be%5D%3D%7B_q%3A%5B%5D%7D%2Co(n._iq%5Be%5D)%2Cn._iq%5Be%5D%7D%2Ce.amplitude%3Dn%7D%7D(window%2Cdocument)%7D()%3B%0A
|