@amplitude/analytics-browser 2.3.4 → 2.3.6-beta.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/browser-client.d.ts +1 -0
- package/lib/cjs/browser-client.d.ts.map +1 -1
- package/lib/cjs/browser-client.js +22 -12
- package/lib/cjs/browser-client.js.map +1 -1
- package/lib/cjs/plugins/file-download-tracking.js +1 -1
- package/lib/cjs/plugins/file-download-tracking.js.map +1 -1
- package/lib/cjs/plugins/form-interaction-tracking.js +1 -1
- package/lib/cjs/plugins/form-interaction-tracking.js.map +1 -1
- package/lib/cjs/version.d.ts +1 -1
- package/lib/cjs/version.d.ts.map +1 -1
- package/lib/cjs/version.js +1 -1
- package/lib/cjs/version.js.map +1 -1
- package/lib/esm/browser-client.d.ts +1 -0
- package/lib/esm/browser-client.d.ts.map +1 -1
- package/lib/esm/browser-client.js +23 -13
- package/lib/esm/browser-client.js.map +1 -1
- package/lib/esm/plugins/file-download-tracking.js +1 -1
- package/lib/esm/plugins/file-download-tracking.js.map +1 -1
- package/lib/esm/plugins/form-interaction-tracking.js +1 -1
- package/lib/esm/plugins/form-interaction-tracking.js.map +1 -1
- package/lib/esm/version.d.ts +1 -1
- package/lib/esm/version.d.ts.map +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-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.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/browser-client.d.ts +1 -0
- package/lib/scripts/browser-client.d.ts.map +1 -1
- package/lib/scripts/version.d.ts +1 -1
- package/lib/scripts/version.d.ts.map +1 -1
- package/package.json +7 -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})}},o=function(e,t,r){e._q.push({name:t,args:Array.prototype.slice.call(r,0)})},i=function(e,t,r){e[t]=function(){if(r)return{promise:new Promise(s(e,t,Array.prototype.slice.call(arguments)))};o(e,t,Array.prototype.slice.call(arguments))}},a=function(e){for(var t=0;t<
|
|
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})}},o=function(e,t,r){e._q.push({name:t,args:Array.prototype.slice.call(r,0)})},i=function(e,t,r){e[t]=function(){if(r)return{promise:new Promise(s(e,t,Array.prototype.slice.call(arguments)))};o(e,t,Array.prototype.slice.call(arguments))}},a=function(e){for(var t=0;t<y.length;t++)i(e,y[t],!1);for(var r=0;r<m.length;r++)i(e,m[r],!0)};r.invoked=!0;var c=t.createElement("script");c.type="text/javascript",c.integrity="sha384-NpagXF/RZ8ygqu074OR5wkQHRGUVwgQOjPh/Xqxnng/W4F5U5RT/R2bUV9i4vCFz",c.crossOrigin="anonymous",c.async=!0,c.src="https://cdn.amplitude.com/libs/analytics-browser-2.3.6-beta.0-min.js.gz",c.onload=function(){e.amplitude.runQueuedFunctions||console.log("[Amplitude] Error: could not load SDK")};var u=t.getElementsByTagName("script")[0];u.parentNode.insertBefore(c,u);for(var l=function(){return this._q=[],this},p=["add","append","clearAll","prepend","set","setOnce","unset","preInsert","postInsert","remove","getUserProperties"],d=0;d<p.length;d++)n(l,p[d]);r.Identify=l;for(var f=function(){return this._q=[],this},v=["getEventProperties","setProductId","setQuantity","setPrice","setRevenue","setRevenueType","setEventProperties"],g=0;g<v.length;g++)n(f,v[g]);r.Revenue=f;var y=["getDeviceId","setDeviceId","getSessionId","setSessionId","getUserId","setUserId","setOptOut","setTransport","reset","extendSession"],m=["init","add","remove","track","logEvent","identify","groupIdentify","setGroup","revenue","flush"];a(r),r.createInstance=function(e){return r._iq[e]={_q:[]},a(r._iq[e]),r._iq[e]},e.amplitude=r}}(window,document)}();
|
|
57
57
|
|
|
58
58
|
amplitude.init("<YOUR_API_KEY>");
|
|
59
59
|
</script>
|
|
@@ -4,6 +4,7 @@ export declare class AmplitudeBrowser extends AmplitudeCore implements BrowserCl
|
|
|
4
4
|
config: BrowserConfig;
|
|
5
5
|
previousSessionDeviceId: string | undefined;
|
|
6
6
|
previousSessionUserId: string | undefined;
|
|
7
|
+
sessionStartEventTime: number | undefined;
|
|
7
8
|
init(apiKey?: string, userIdOrOptions?: string | BrowserOptions, maybeOptions?: BrowserOptions): import("@amplitude/analytics-types").AmplitudeReturn<void>;
|
|
8
9
|
protected _init(options: BrowserOptions & {
|
|
9
10
|
apiKey: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser-client.d.ts","sourceRoot":"","sources":["../../src/browser-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAuD,MAAM,2BAA2B,CAAC;AAc/G,OAAO,EACL,aAAa,EACb,aAAa,EACb,cAAc,EACd,KAAK,EACL,YAAY,EACZ,QAAQ,IAAI,SAAS,EACrB,OAAO,IAAI,QAAQ,EACnB,aAAa,EACd,MAAM,4BAA4B,CAAC;AAWpC,qBAAa,gBAAiB,SAAQ,aAAc,YAAW,aAAa;IAG1E,MAAM,EAAE,aAAa,CAAC;IACtB,uBAAuB,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5C,qBAAqB,EAAE,MAAM,GAAG,SAAS,CAAC;IAE1C,IAAI,CAAC,MAAM,SAAK,EAAE,eAAe,CAAC,EAAE,MAAM,GAAG,cAAc,EAAE,YAAY,CAAC,EAAE,cAAc;cAkB1E,KAAK,CAAC,OAAO,EAAE,cAAc,GAAG;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE;
|
|
1
|
+
{"version":3,"file":"browser-client.d.ts","sourceRoot":"","sources":["../../src/browser-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAuD,MAAM,2BAA2B,CAAC;AAc/G,OAAO,EACL,aAAa,EACb,aAAa,EACb,cAAc,EACd,KAAK,EACL,YAAY,EACZ,QAAQ,IAAI,SAAS,EACrB,OAAO,IAAI,QAAQ,EACnB,aAAa,EACd,MAAM,4BAA4B,CAAC;AAWpC,qBAAa,gBAAiB,SAAQ,aAAc,YAAW,aAAa;IAG1E,MAAM,EAAE,aAAa,CAAC;IACtB,uBAAuB,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5C,qBAAqB,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1C,qBAAqB,EAAE,MAAM,GAAG,SAAS,CAAC;IAE1C,IAAI,CAAC,MAAM,SAAK,EAAE,eAAe,CAAC,EAAE,MAAM,GAAG,cAAc,EAAE,YAAY,CAAC,EAAE,cAAc;cAkB1E,KAAK,CAAC,OAAO,EAAE,cAAc,GAAG;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE;IA0ElE,SAAS;IAIT,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS;IAWpC,WAAW;IAIX,WAAW,CAAC,QAAQ,EAAE,MAAM;IAS5B,KAAK;IAKL,YAAY;IAIZ,YAAY,CAAC,SAAS,EAAE,MAAM;IA8C9B,aAAa;IAQb,YAAY,CAAC,SAAS,EAAE,aAAa;IAQrC,QAAQ,CAAC,QAAQ,EAAE,SAAS,EAAE,YAAY,CAAC,EAAE,YAAY;IAezD,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,CAAC,EAAE,YAAY;IAS/G,OAAO,CAAC,OAAO,EAAE,QAAQ,EAAE,YAAY,CAAC,EAAE,YAAY;IAShD,OAAO,CAAC,KAAK,EAAE,KAAK;CAe3B"}
|
|
@@ -40,7 +40,7 @@ var AmplitudeBrowser = /** @class */ (function (_super) {
|
|
|
40
40
|
AmplitudeBrowser.prototype._init = function (options) {
|
|
41
41
|
var _a, _b;
|
|
42
42
|
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
43
|
-
var browserOptions, connector, attributionTrackingOptions, webAttribution;
|
|
43
|
+
var browserOptions, connector, attributionTrackingOptions, resetSessionOnNewCampaign, webAttribution;
|
|
44
44
|
var _this = this;
|
|
45
45
|
return tslib_1.__generator(this, function (_c) {
|
|
46
46
|
switch (_c.label) {
|
|
@@ -96,7 +96,12 @@ var AmplitudeBrowser = /** @class */ (function (_super) {
|
|
|
96
96
|
case 9:
|
|
97
97
|
if (!(0, analytics_client_common_1.isAttributionTrackingEnabled)(this.config.defaultTracking)) return [3 /*break*/, 11];
|
|
98
98
|
attributionTrackingOptions = (0, analytics_client_common_1.getAttributionTrackingConfig)(this.config);
|
|
99
|
-
|
|
99
|
+
resetSessionOnNewCampaign = !this.config.lastEventTime || (0, analytics_client_common_1.isSessionExpired)(this.config.sessionTimeout, this.config.lastEventTime)
|
|
100
|
+
? // A new session just started OR will start soon organically, no need to trigger another restart
|
|
101
|
+
false
|
|
102
|
+
: // Previous session is still valid, allow reset if configured
|
|
103
|
+
attributionTrackingOptions.resetSessionOnNewCampaign;
|
|
104
|
+
webAttribution = (0, plugin_web_attribution_browser_1.webAttributionPlugin)(tslib_1.__assign(tslib_1.__assign({}, attributionTrackingOptions), { resetSessionOnNewCampaign: resetSessionOnNewCampaign }));
|
|
100
105
|
return [4 /*yield*/, this.add(webAttribution).promise];
|
|
101
106
|
case 10:
|
|
102
107
|
_c.sent();
|
|
@@ -157,7 +162,7 @@ var AmplitudeBrowser = /** @class */ (function (_super) {
|
|
|
157
162
|
return (_a = this.config) === null || _a === void 0 ? void 0 : _a.sessionId;
|
|
158
163
|
};
|
|
159
164
|
AmplitudeBrowser.prototype.setSessionId = function (sessionId) {
|
|
160
|
-
var _a;
|
|
165
|
+
var _a, _b;
|
|
161
166
|
if (!this.config) {
|
|
162
167
|
this.q.push(this.setSessionId.bind(this, sessionId));
|
|
163
168
|
return;
|
|
@@ -167,26 +172,31 @@ var AmplitudeBrowser = /** @class */ (function (_super) {
|
|
|
167
172
|
return;
|
|
168
173
|
}
|
|
169
174
|
var previousSessionId = this.getSessionId();
|
|
170
|
-
var lastEventTime = this.config.lastEventTime;
|
|
171
|
-
|
|
175
|
+
var lastEventTime = (_a = this.config.lastEventTime) !== null && _a !== void 0 ? _a : this.sessionStartEventTime;
|
|
176
|
+
this.config.lastEventId = (_b = this.config.lastEventId) !== null && _b !== void 0 ? _b : 0;
|
|
172
177
|
this.config.sessionId = sessionId;
|
|
173
178
|
this.config.lastEventTime = undefined;
|
|
174
179
|
if ((0, analytics_client_common_1.isSessionTrackingEnabled)(this.config.defaultTracking)) {
|
|
175
180
|
if (previousSessionId && lastEventTime) {
|
|
176
181
|
this.track(constants_1.DEFAULT_SESSION_END_EVENT, undefined, {
|
|
177
182
|
device_id: this.previousSessionDeviceId,
|
|
178
|
-
event_id: ++lastEventId,
|
|
183
|
+
event_id: ++this.config.lastEventId,
|
|
179
184
|
session_id: previousSessionId,
|
|
180
185
|
time: lastEventTime + 1,
|
|
181
186
|
user_id: this.previousSessionUserId,
|
|
182
187
|
});
|
|
188
|
+
this.sessionStartEventTime = undefined;
|
|
183
189
|
}
|
|
184
|
-
this.config.lastEventTime = this.config.sessionId;
|
|
185
190
|
this.track(constants_1.DEFAULT_SESSION_START_EVENT, undefined, {
|
|
186
|
-
event_id: ++lastEventId,
|
|
191
|
+
event_id: ++this.config.lastEventId,
|
|
187
192
|
session_id: this.config.sessionId,
|
|
188
|
-
time: this.config.
|
|
193
|
+
time: this.config.sessionId,
|
|
189
194
|
});
|
|
195
|
+
// `this.lastSessionStartEventTime` is used to handle extreme edge case where session
|
|
196
|
+
// is restarted before session start event is processed by context plugin to set
|
|
197
|
+
// the globally used this.config.lastEventTime. `this.config.lastEventTime` should
|
|
198
|
+
// only be modified by config builder and context plugin to limit tampering.
|
|
199
|
+
this.sessionStartEventTime = this.config.sessionId;
|
|
190
200
|
}
|
|
191
201
|
this.previousSessionDeviceId = this.config.deviceId;
|
|
192
202
|
this.previousSessionUserId = this.config.userId;
|
|
@@ -237,14 +247,14 @@ var AmplitudeBrowser = /** @class */ (function (_super) {
|
|
|
237
247
|
};
|
|
238
248
|
AmplitudeBrowser.prototype.process = function (event) {
|
|
239
249
|
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
240
|
-
var currentTime,
|
|
250
|
+
var currentTime, isMostRecentSessionExpired;
|
|
241
251
|
return tslib_1.__generator(this, function (_a) {
|
|
242
252
|
currentTime = Date.now();
|
|
243
|
-
|
|
253
|
+
isMostRecentSessionExpired = (0, analytics_client_common_1.isSessionExpired)(this.config.sessionTimeout, this.config.lastEventTime);
|
|
244
254
|
if (event.event_type !== constants_1.DEFAULT_SESSION_START_EVENT &&
|
|
245
255
|
event.event_type !== constants_1.DEFAULT_SESSION_END_EVENT &&
|
|
246
256
|
(!event.session_id || event.session_id === this.getSessionId()) &&
|
|
247
|
-
|
|
257
|
+
isMostRecentSessionExpired) {
|
|
248
258
|
this.setSessionId(currentTime);
|
|
249
259
|
}
|
|
250
260
|
return [2 /*return*/, _super.prototype.process.call(this, event)];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser-client.js","sourceRoot":"","sources":["../../src/browser-client.ts"],"names":[],"mappings":"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","sourcesContent":["import { AmplitudeCore, Destination, Identify, returnWrapper, Revenue, UUID } from '@amplitude/analytics-core';\nimport {\n getAnalyticsConnector,\n getAttributionTrackingConfig,\n getPageViewTrackingConfig,\n IdentityEventSender,\n isAttributionTrackingEnabled,\n isSessionTrackingEnabled,\n isFileDownloadTrackingEnabled,\n isFormInteractionTrackingEnabled,\n setConnectorDeviceId,\n setConnectorUserId,\n isNewSession,\n} from '@amplitude/analytics-client-common';\nimport {\n BrowserClient,\n BrowserConfig,\n BrowserOptions,\n Event,\n EventOptions,\n Identify as IIdentify,\n Revenue as IRevenue,\n TransportType,\n} from '@amplitude/analytics-types';\nimport { convertProxyObjectToRealObject, isInstanceProxy } from './utils/snippet-helper';\nimport { Context } from './plugins/context';\nimport { useBrowserConfig, createTransport } from './config';\nimport { webAttributionPlugin } from '@amplitude/plugin-web-attribution-browser';\nimport { pageViewTrackingPlugin } from '@amplitude/plugin-page-view-tracking-browser';\nimport { formInteractionTracking } from './plugins/form-interaction-tracking';\nimport { fileDownloadTracking } from './plugins/file-download-tracking';\nimport { DEFAULT_SESSION_END_EVENT, DEFAULT_SESSION_START_EVENT } from './constants';\nimport { detNotify } from './det-notification';\n\nexport class AmplitudeBrowser extends AmplitudeCore implements BrowserClient {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n config: BrowserConfig;\n previousSessionDeviceId: string | undefined;\n previousSessionUserId: string | undefined;\n\n init(apiKey = '', userIdOrOptions?: string | BrowserOptions, maybeOptions?: BrowserOptions) {\n let userId: string | undefined;\n let options: BrowserOptions | undefined;\n\n if (arguments.length > 2) {\n userId = userIdOrOptions as string | undefined;\n options = maybeOptions;\n } else {\n if (typeof userIdOrOptions === 'string') {\n userId = userIdOrOptions;\n options = undefined;\n } else {\n userId = userIdOrOptions?.userId;\n options = userIdOrOptions;\n }\n }\n return returnWrapper(this._init({ ...options, userId, apiKey }));\n }\n protected async _init(options: BrowserOptions & { apiKey: string }) {\n // Step 1: Block concurrent initialization\n if (this.initializing) {\n return;\n }\n this.initializing = true;\n\n // Step 2: Create browser config\n const browserOptions = await useBrowserConfig(options.apiKey, options, this);\n await super._init(browserOptions);\n\n // Step 3: Set session ID\n // Priority 1: `options.sessionId`\n // Priority 2: last known sessionId from user identity storage\n // Default: `Date.now()`\n // Session ID is handled differently than device ID and user ID due to session events\n this.setSessionId(options.sessionId ?? this.config.sessionId ?? Date.now());\n\n // Set up the analytics connector to integrate with the experiment SDK.\n // Send events from the experiment SDK and forward identifies to the\n // identity store.\n const connector = getAnalyticsConnector(options.instanceName);\n connector.identityStore.setIdentity({\n userId: this.config.userId,\n deviceId: this.config.deviceId,\n });\n\n // Step 4: Install plugins\n // Do not track any events before this\n await this.add(new Destination()).promise;\n await this.add(new Context()).promise;\n await this.add(new IdentityEventSender()).promise;\n\n // Notify if DET is enabled\n detNotify(this.config);\n\n if (isFileDownloadTrackingEnabled(this.config.defaultTracking)) {\n await this.add(fileDownloadTracking()).promise;\n }\n\n if (isFormInteractionTrackingEnabled(this.config.defaultTracking)) {\n await this.add(formInteractionTracking()).promise;\n }\n\n // Add web attribution plugin\n if (isAttributionTrackingEnabled(this.config.defaultTracking)) {\n const attributionTrackingOptions = getAttributionTrackingConfig(this.config);\n const webAttribution = webAttributionPlugin(attributionTrackingOptions);\n await this.add(webAttribution).promise;\n }\n\n // Add page view plugin\n await this.add(pageViewTrackingPlugin(getPageViewTrackingConfig(this.config))).promise;\n\n this.initializing = false;\n\n // Step 6: Run queued dispatch functions\n await this.runQueuedFunctions('dispatchQ');\n\n // Step 7: Add the event receiver after running remaining queued functions.\n connector.eventBridge.setEventReceiver((event) => {\n void this.track(event.eventType, event.eventProperties);\n });\n }\n\n getUserId() {\n return this.config?.userId;\n }\n\n setUserId(userId: string | undefined) {\n if (!this.config) {\n this.q.push(this.setUserId.bind(this, userId));\n return;\n }\n if (userId !== this.config.userId || userId === undefined) {\n this.config.userId = userId;\n setConnectorUserId(userId, this.config.instanceName);\n }\n }\n\n getDeviceId() {\n return this.config?.deviceId;\n }\n\n setDeviceId(deviceId: string) {\n if (!this.config) {\n this.q.push(this.setDeviceId.bind(this, deviceId));\n return;\n }\n this.config.deviceId = deviceId;\n setConnectorDeviceId(deviceId, this.config.instanceName);\n }\n\n reset() {\n this.setDeviceId(UUID());\n this.setUserId(undefined);\n }\n\n getSessionId() {\n return this.config?.sessionId;\n }\n\n setSessionId(sessionId: number) {\n if (!this.config) {\n this.q.push(this.setSessionId.bind(this, sessionId));\n return;\n }\n\n // Prevents starting a new session with the same session ID\n if (sessionId === this.config.sessionId) {\n return;\n }\n\n const previousSessionId = this.getSessionId();\n const lastEventTime = this.config.lastEventTime;\n let lastEventId = this.config.lastEventId ?? -1;\n\n this.config.sessionId = sessionId;\n this.config.lastEventTime = undefined;\n\n if (isSessionTrackingEnabled(this.config.defaultTracking)) {\n if (previousSessionId && lastEventTime) {\n this.track(DEFAULT_SESSION_END_EVENT, undefined, {\n device_id: this.previousSessionDeviceId,\n event_id: ++lastEventId,\n session_id: previousSessionId,\n time: lastEventTime + 1,\n user_id: this.previousSessionUserId,\n });\n }\n\n this.config.lastEventTime = this.config.sessionId;\n this.track(DEFAULT_SESSION_START_EVENT, undefined, {\n event_id: ++lastEventId,\n session_id: this.config.sessionId,\n time: this.config.lastEventTime,\n });\n }\n\n this.previousSessionDeviceId = this.config.deviceId;\n this.previousSessionUserId = this.config.userId;\n }\n\n extendSession() {\n if (!this.config) {\n this.q.push(this.extendSession.bind(this));\n return;\n }\n this.config.lastEventTime = Date.now();\n }\n\n setTransport(transport: TransportType) {\n if (!this.config) {\n this.q.push(this.setTransport.bind(this, transport));\n return;\n }\n this.config.transportProvider = createTransport(transport);\n }\n\n identify(identify: IIdentify, eventOptions?: EventOptions) {\n if (isInstanceProxy(identify)) {\n const queue = identify._q;\n identify._q = [];\n identify = convertProxyObjectToRealObject(new Identify(), queue);\n }\n if (eventOptions?.user_id) {\n this.setUserId(eventOptions.user_id);\n }\n if (eventOptions?.device_id) {\n this.setDeviceId(eventOptions.device_id);\n }\n return super.identify(identify, eventOptions);\n }\n\n groupIdentify(groupType: string, groupName: string | string[], identify: IIdentify, eventOptions?: EventOptions) {\n if (isInstanceProxy(identify)) {\n const queue = identify._q;\n identify._q = [];\n identify = convertProxyObjectToRealObject(new Identify(), queue);\n }\n return super.groupIdentify(groupType, groupName, identify, eventOptions);\n }\n\n revenue(revenue: IRevenue, eventOptions?: EventOptions) {\n if (isInstanceProxy(revenue)) {\n const queue = revenue._q;\n revenue._q = [];\n revenue = convertProxyObjectToRealObject(new Revenue(), queue);\n }\n return super.revenue(revenue, eventOptions);\n }\n\n async process(event: Event) {\n const currentTime = Date.now();\n const isEventInNewSession = isNewSession(this.config.sessionTimeout, this.config.lastEventTime);\n\n if (\n event.event_type !== DEFAULT_SESSION_START_EVENT &&\n event.event_type !== DEFAULT_SESSION_END_EVENT &&\n (!event.session_id || event.session_id === this.getSessionId()) &&\n isEventInNewSession\n ) {\n this.setSessionId(currentTime);\n }\n\n return super.process(event);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"browser-client.js","sourceRoot":"","sources":["../../src/browser-client.ts"],"names":[],"mappings":"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","sourcesContent":["import { AmplitudeCore, Destination, Identify, returnWrapper, Revenue, UUID } from '@amplitude/analytics-core';\nimport {\n getAnalyticsConnector,\n getAttributionTrackingConfig,\n getPageViewTrackingConfig,\n IdentityEventSender,\n isAttributionTrackingEnabled,\n isSessionTrackingEnabled,\n isFileDownloadTrackingEnabled,\n isFormInteractionTrackingEnabled,\n setConnectorDeviceId,\n setConnectorUserId,\n isSessionExpired,\n} from '@amplitude/analytics-client-common';\nimport {\n BrowserClient,\n BrowserConfig,\n BrowserOptions,\n Event,\n EventOptions,\n Identify as IIdentify,\n Revenue as IRevenue,\n TransportType,\n} from '@amplitude/analytics-types';\nimport { convertProxyObjectToRealObject, isInstanceProxy } from './utils/snippet-helper';\nimport { Context } from './plugins/context';\nimport { useBrowserConfig, createTransport } from './config';\nimport { webAttributionPlugin } from '@amplitude/plugin-web-attribution-browser';\nimport { pageViewTrackingPlugin } from '@amplitude/plugin-page-view-tracking-browser';\nimport { formInteractionTracking } from './plugins/form-interaction-tracking';\nimport { fileDownloadTracking } from './plugins/file-download-tracking';\nimport { DEFAULT_SESSION_END_EVENT, DEFAULT_SESSION_START_EVENT } from './constants';\nimport { detNotify } from './det-notification';\n\nexport class AmplitudeBrowser extends AmplitudeCore implements BrowserClient {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n config: BrowserConfig;\n previousSessionDeviceId: string | undefined;\n previousSessionUserId: string | undefined;\n sessionStartEventTime: number | undefined;\n\n init(apiKey = '', userIdOrOptions?: string | BrowserOptions, maybeOptions?: BrowserOptions) {\n let userId: string | undefined;\n let options: BrowserOptions | undefined;\n\n if (arguments.length > 2) {\n userId = userIdOrOptions as string | undefined;\n options = maybeOptions;\n } else {\n if (typeof userIdOrOptions === 'string') {\n userId = userIdOrOptions;\n options = undefined;\n } else {\n userId = userIdOrOptions?.userId;\n options = userIdOrOptions;\n }\n }\n return returnWrapper(this._init({ ...options, userId, apiKey }));\n }\n protected async _init(options: BrowserOptions & { apiKey: string }) {\n // Step 1: Block concurrent initialization\n if (this.initializing) {\n return;\n }\n this.initializing = true;\n\n // Step 2: Create browser config\n const browserOptions = await useBrowserConfig(options.apiKey, options, this);\n await super._init(browserOptions);\n\n // Step 3: Set session ID\n // Priority 1: `options.sessionId`\n // Priority 2: last known sessionId from user identity storage\n // Default: `Date.now()`\n // Session ID is handled differently than device ID and user ID due to session events\n this.setSessionId(options.sessionId ?? this.config.sessionId ?? Date.now());\n\n // Set up the analytics connector to integrate with the experiment SDK.\n // Send events from the experiment SDK and forward identifies to the\n // identity store.\n const connector = getAnalyticsConnector(options.instanceName);\n connector.identityStore.setIdentity({\n userId: this.config.userId,\n deviceId: this.config.deviceId,\n });\n\n // Step 4: Install plugins\n // Do not track any events before this\n await this.add(new Destination()).promise;\n await this.add(new Context()).promise;\n await this.add(new IdentityEventSender()).promise;\n\n // Notify if DET is enabled\n detNotify(this.config);\n\n if (isFileDownloadTrackingEnabled(this.config.defaultTracking)) {\n await this.add(fileDownloadTracking()).promise;\n }\n\n if (isFormInteractionTrackingEnabled(this.config.defaultTracking)) {\n await this.add(formInteractionTracking()).promise;\n }\n\n // Add web attribution plugin\n if (isAttributionTrackingEnabled(this.config.defaultTracking)) {\n const attributionTrackingOptions = getAttributionTrackingConfig(this.config);\n const resetSessionOnNewCampaign =\n !this.config.lastEventTime || isSessionExpired(this.config.sessionTimeout, this.config.lastEventTime)\n ? // A new session just started OR will start soon organically, no need to trigger another restart\n false\n : // Previous session is still valid, allow reset if configured\n attributionTrackingOptions.resetSessionOnNewCampaign;\n const webAttribution = webAttributionPlugin({\n ...attributionTrackingOptions,\n resetSessionOnNewCampaign,\n });\n await this.add(webAttribution).promise;\n }\n\n // Add page view plugin\n await this.add(pageViewTrackingPlugin(getPageViewTrackingConfig(this.config))).promise;\n\n this.initializing = false;\n\n // Step 6: Run queued dispatch functions\n await this.runQueuedFunctions('dispatchQ');\n\n // Step 7: Add the event receiver after running remaining queued functions.\n connector.eventBridge.setEventReceiver((event) => {\n void this.track(event.eventType, event.eventProperties);\n });\n }\n\n getUserId() {\n return this.config?.userId;\n }\n\n setUserId(userId: string | undefined) {\n if (!this.config) {\n this.q.push(this.setUserId.bind(this, userId));\n return;\n }\n if (userId !== this.config.userId || userId === undefined) {\n this.config.userId = userId;\n setConnectorUserId(userId, this.config.instanceName);\n }\n }\n\n getDeviceId() {\n return this.config?.deviceId;\n }\n\n setDeviceId(deviceId: string) {\n if (!this.config) {\n this.q.push(this.setDeviceId.bind(this, deviceId));\n return;\n }\n this.config.deviceId = deviceId;\n setConnectorDeviceId(deviceId, this.config.instanceName);\n }\n\n reset() {\n this.setDeviceId(UUID());\n this.setUserId(undefined);\n }\n\n getSessionId() {\n return this.config?.sessionId;\n }\n\n setSessionId(sessionId: number) {\n if (!this.config) {\n this.q.push(this.setSessionId.bind(this, sessionId));\n return;\n }\n\n // Prevents starting a new session with the same session ID\n if (sessionId === this.config.sessionId) {\n return;\n }\n\n const previousSessionId = this.getSessionId();\n const lastEventTime = this.config.lastEventTime ?? this.sessionStartEventTime;\n this.config.lastEventId = this.config.lastEventId ?? 0;\n\n this.config.sessionId = sessionId;\n this.config.lastEventTime = undefined;\n\n if (isSessionTrackingEnabled(this.config.defaultTracking)) {\n if (previousSessionId && lastEventTime) {\n this.track(DEFAULT_SESSION_END_EVENT, undefined, {\n device_id: this.previousSessionDeviceId,\n event_id: ++this.config.lastEventId,\n session_id: previousSessionId,\n time: lastEventTime + 1,\n user_id: this.previousSessionUserId,\n });\n this.sessionStartEventTime = undefined;\n }\n\n this.track(DEFAULT_SESSION_START_EVENT, undefined, {\n event_id: ++this.config.lastEventId,\n session_id: this.config.sessionId,\n time: this.config.sessionId,\n });\n // `this.lastSessionStartEventTime` is used to handle extreme edge case where session\n // is restarted before session start event is processed by context plugin to set\n // the globally used this.config.lastEventTime. `this.config.lastEventTime` should\n // only be modified by config builder and context plugin to limit tampering.\n this.sessionStartEventTime = this.config.sessionId;\n }\n\n this.previousSessionDeviceId = this.config.deviceId;\n this.previousSessionUserId = this.config.userId;\n }\n\n extendSession() {\n if (!this.config) {\n this.q.push(this.extendSession.bind(this));\n return;\n }\n this.config.lastEventTime = Date.now();\n }\n\n setTransport(transport: TransportType) {\n if (!this.config) {\n this.q.push(this.setTransport.bind(this, transport));\n return;\n }\n this.config.transportProvider = createTransport(transport);\n }\n\n identify(identify: IIdentify, eventOptions?: EventOptions) {\n if (isInstanceProxy(identify)) {\n const queue = identify._q;\n identify._q = [];\n identify = convertProxyObjectToRealObject(new Identify(), queue);\n }\n if (eventOptions?.user_id) {\n this.setUserId(eventOptions.user_id);\n }\n if (eventOptions?.device_id) {\n this.setDeviceId(eventOptions.device_id);\n }\n return super.identify(identify, eventOptions);\n }\n\n groupIdentify(groupType: string, groupName: string | string[], identify: IIdentify, eventOptions?: EventOptions) {\n if (isInstanceProxy(identify)) {\n const queue = identify._q;\n identify._q = [];\n identify = convertProxyObjectToRealObject(new Identify(), queue);\n }\n return super.groupIdentify(groupType, groupName, identify, eventOptions);\n }\n\n revenue(revenue: IRevenue, eventOptions?: EventOptions) {\n if (isInstanceProxy(revenue)) {\n const queue = revenue._q;\n revenue._q = [];\n revenue = convertProxyObjectToRealObject(new Revenue(), queue);\n }\n return super.revenue(revenue, eventOptions);\n }\n\n async process(event: Event) {\n const currentTime = Date.now();\n const isMostRecentSessionExpired = isSessionExpired(this.config.sessionTimeout, this.config.lastEventTime);\n\n if (\n event.event_type !== DEFAULT_SESSION_START_EVENT &&\n event.event_type !== DEFAULT_SESSION_END_EVENT &&\n (!event.session_id || event.session_id === this.getSessionId()) &&\n isMostRecentSessionExpired\n ) {\n this.setSessionId(currentTime);\n }\n\n return super.process(event);\n }\n}\n"]}
|
|
@@ -34,7 +34,7 @@ var fileDownloadTracking = function () {
|
|
|
34
34
|
return [2 /*return*/];
|
|
35
35
|
}
|
|
36
36
|
/* istanbul ignore if */
|
|
37
|
-
if (typeof document === 'undefined') {
|
|
37
|
+
if (typeof document === 'undefined' || !document.body) {
|
|
38
38
|
return [2 /*return*/];
|
|
39
39
|
}
|
|
40
40
|
addFileDownloadListener = function (a) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-download-tracking.js","sourceRoot":"","sources":["../../../src/plugins/file-download-tracking.ts"],"names":[],"mappings":"AAAA,iBAoHA;;;;AAnHA,0CAAoH;AAS7G,IAAM,oBAAoB,GAAG;IAClC,IAAI,QAAsC,CAAC;IAC3C,IAAI,cAAc,GAAoB,EAAE,CAAC;IACzC,IAAM,gBAAgB,GAAG,UAAC,OAAgB,EAAE,IAAa,EAAE,OAAmB;QAC5E,OAAO,CAAC,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACxC,cAAc,CAAC,IAAI,CAAC;YAClB,OAAO,SAAA;YACP,IAAI,MAAA;YACJ,OAAO,SAAA;SACR,CAAC,CAAC;IACL,CAAC,CAAC;IACF,IAAM,oBAAoB,GAAG;QAC3B,cAAc,CAAC,OAAO,CAAC,UAAC,EAA0B;gBAAxB,OAAO,aAAA,EAAE,IAAI,UAAA,EAAE,OAAO,aAAA;YAC9C,0BAA0B;YAC1B,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,mBAAmB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;QACH,cAAc,GAAG,EAAE,CAAC;IACtB,CAAC,CAAC;IAEF,IAAM,IAAI,GAAG,kDAAkD,CAAC;IAChE,IAAM,IAAI,GAAG,YAAY,CAAC;IAC1B,IAAM,KAAK,GAAG,UAAO,MAAqB,EAAE,SAAwB;;;YAClE,wBAAwB;YACxB,IAAI,CAAC,SAAS,EAAE;gBACd,qEAAqE;gBACrE,MAAM,CAAC,cAAc,CAAC,IAAI,CACxB,wHAAwH,CACzH,CAAC;gBACF,sBAAO;aACR;YAED,wBAAwB;YACxB,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE;
|
|
1
|
+
{"version":3,"file":"file-download-tracking.js","sourceRoot":"","sources":["../../../src/plugins/file-download-tracking.ts"],"names":[],"mappings":"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","sourcesContent":["import { BrowserClient, Event, EnrichmentPlugin } from '@amplitude/analytics-types';\nimport { DEFAULT_FILE_DOWNLOAD_EVENT, FILE_EXTENSION, FILE_NAME, LINK_ID, LINK_TEXT, LINK_URL } from '../constants';\nimport { BrowserConfig } from '../config';\n\ninterface EventListener {\n element: Element;\n type: 'click';\n handler: () => void;\n}\n\nexport const fileDownloadTracking = (): EnrichmentPlugin => {\n let observer: MutationObserver | undefined;\n let eventListeners: EventListener[] = [];\n const addEventListener = (element: Element, type: 'click', handler: () => void) => {\n element.addEventListener(type, handler);\n eventListeners.push({\n element,\n type,\n handler,\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-file-download-tracking-browser';\n const type = 'enrichment';\n const setup = async (config: BrowserConfig, amplitude: BrowserClient) => {\n /* istanbul ignore if */\n if (!amplitude) {\n // TODO: Add required minimum version of @amplitude/analytics-browser\n config.loggerProvider.warn(\n 'File download tracking requires a later version of @amplitude/analytics-browser. File download events are not tracked.',\n );\n return;\n }\n\n /* istanbul ignore if */\n if (typeof document === 'undefined' || !document.body) {\n return;\n }\n\n const addFileDownloadListener = (a: HTMLAnchorElement) => {\n let url: URL;\n try {\n // eslint-disable-next-line no-restricted-globals\n url = new URL(a.href, window.location.href);\n } catch {\n /* istanbul ignore next */\n return;\n }\n const result = ext.exec(url.href);\n const fileExtension = result?.[1];\n\n if (fileExtension) {\n addEventListener(a, 'click', () => {\n if (fileExtension) {\n amplitude.track(DEFAULT_FILE_DOWNLOAD_EVENT, {\n [FILE_EXTENSION]: fileExtension,\n [FILE_NAME]: url.pathname,\n [LINK_ID]: a.id,\n [LINK_TEXT]: a.text,\n [LINK_URL]: a.href,\n });\n }\n });\n }\n };\n\n const ext =\n /\\.(pdf|xlsx?|docx?|txt|rtf|csv|exe|key|pp(s|t|tx)|7z|pkg|rar|gz|zip|avi|mov|mp4|mpe?g|wmv|midi?|mp3|wav|wma)$/;\n\n // Adds listener to existing anchor tags\n const links = Array.from(document.getElementsByTagName('a'));\n links.forEach(addFileDownloadListener);\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 === 'A') {\n addFileDownloadListener(node as HTMLAnchorElement);\n }\n if ('querySelectorAll' in node && typeof node.querySelectorAll === 'function') {\n Array.from(node.querySelectorAll('a') as HTMLAnchorElement[]).map(addFileDownloadListener);\n }\n });\n });\n });\n\n observer.observe(document.body, {\n subtree: true,\n childList: true,\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"]}
|
|
@@ -34,7 +34,7 @@ var formInteractionTracking = function () {
|
|
|
34
34
|
return [2 /*return*/];
|
|
35
35
|
}
|
|
36
36
|
/* istanbul ignore if */
|
|
37
|
-
if (typeof document === 'undefined') {
|
|
37
|
+
if (typeof document === 'undefined' || !document.body) {
|
|
38
38
|
return [2 /*return*/];
|
|
39
39
|
}
|
|
40
40
|
addFormInteractionListener = function (form) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"form-interaction-tracking.js","sourceRoot":"","sources":["../../../src/plugins/form-interaction-tracking.ts"],"names":[],"mappings":"AAAA,iBA0IA;;;;AAzIA,0CAMsB;AASf,IAAM,uBAAuB,GAAG;IACrC,IAAI,QAAsC,CAAC;IAC3C,IAAI,cAAc,GAAoB,EAAE,CAAC;IAEzC,IAAM,gBAAgB,GAAG,UAAC,OAAgB,EAAE,IAAyB,EAAE,OAAmB;QACxF,OAAO,CAAC,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACxC,cAAc,CAAC,IAAI,CAAC;YAClB,OAAO,SAAA;YACP,IAAI,MAAA;YACJ,OAAO,SAAA;SACR,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,IAAM,oBAAoB,GAAG;QAC3B,cAAc,CAAC,OAAO,CAAC,UAAC,EAA0B;gBAAxB,OAAO,aAAA,EAAE,IAAI,UAAA,EAAE,OAAO,aAAA;YAC9C,0BAA0B;YAC1B,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,mBAAmB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;QACH,cAAc,GAAG,EAAE,CAAC;IACtB,CAAC,CAAC;IAEF,IAAM,IAAI,GAAG,qDAAqD,CAAC;IACnE,IAAM,IAAI,GAAG,YAAY,CAAC;IAC1B,IAAM,KAAK,GAAG,UAAO,MAAqB,EAAE,SAAwB;;;YAClE,wBAAwB;YACxB,IAAI,CAAC,SAAS,EAAE;gBACd,qEAAqE;gBACrE,MAAM,CAAC,cAAc,CAAC,IAAI,CACxB,8HAA8H,CAC/H,CAAC;gBACF,sBAAO;aACR;YAED,wBAAwB;YACxB,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE;
|
|
1
|
+
{"version":3,"file":"form-interaction-tracking.js","sourceRoot":"","sources":["../../../src/plugins/form-interaction-tracking.ts"],"names":[],"mappings":"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","sourcesContent":["import { BrowserClient, Event, EnrichmentPlugin } from '@amplitude/analytics-types';\nimport {\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';\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 /* 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' || !document.body) {\n return;\n }\n\n const addFormInteractionListener = (form: HTMLFormElement) => {\n let hasFormChanged = false;\n\n addEventListener(form, 'change', () => {\n if (!hasFormChanged) {\n amplitude.track(DEFAULT_FORM_START_EVENT, {\n [FORM_ID]: form.id,\n [FORM_NAME]: stringOrUndefined(form.name),\n [FORM_DESTINATION]: form.action,\n });\n }\n hasFormChanged = true;\n });\n\n addEventListener(form, 'submit', () => {\n if (!hasFormChanged) {\n amplitude.track(DEFAULT_FORM_START_EVENT, {\n [FORM_ID]: form.id,\n [FORM_NAME]: stringOrUndefined(form.name),\n [FORM_DESTINATION]: form.action,\n });\n }\n\n amplitude.track(DEFAULT_FORM_SUBMIT_EVENT, {\n [FORM_ID]: form.id,\n [FORM_NAME]: stringOrUndefined(form.name),\n [FORM_DESTINATION]: form.action,\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 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"]}
|
package/lib/cjs/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const VERSION = "2.3.
|
|
1
|
+
export declare const VERSION = "2.3.6-beta.0";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
package/lib/cjs/version.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,iBAAiB,CAAC"}
|
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,
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":";;AAAa,QAAA,OAAO,GAAG,cAAc,CAAC","sourcesContent":["export const VERSION = '2.3.6-beta.0';\n"]}
|
|
@@ -4,6 +4,7 @@ export declare class AmplitudeBrowser extends AmplitudeCore implements BrowserCl
|
|
|
4
4
|
config: BrowserConfig;
|
|
5
5
|
previousSessionDeviceId: string | undefined;
|
|
6
6
|
previousSessionUserId: string | undefined;
|
|
7
|
+
sessionStartEventTime: number | undefined;
|
|
7
8
|
init(apiKey?: string, userIdOrOptions?: string | BrowserOptions, maybeOptions?: BrowserOptions): import("@amplitude/analytics-types").AmplitudeReturn<void>;
|
|
8
9
|
protected _init(options: BrowserOptions & {
|
|
9
10
|
apiKey: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser-client.d.ts","sourceRoot":"","sources":["../../src/browser-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAuD,MAAM,2BAA2B,CAAC;AAc/G,OAAO,EACL,aAAa,EACb,aAAa,EACb,cAAc,EACd,KAAK,EACL,YAAY,EACZ,QAAQ,IAAI,SAAS,EACrB,OAAO,IAAI,QAAQ,EACnB,aAAa,EACd,MAAM,4BAA4B,CAAC;AAWpC,qBAAa,gBAAiB,SAAQ,aAAc,YAAW,aAAa;IAG1E,MAAM,EAAE,aAAa,CAAC;IACtB,uBAAuB,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5C,qBAAqB,EAAE,MAAM,GAAG,SAAS,CAAC;IAE1C,IAAI,CAAC,MAAM,SAAK,EAAE,eAAe,CAAC,EAAE,MAAM,GAAG,cAAc,EAAE,YAAY,CAAC,EAAE,cAAc;cAkB1E,KAAK,CAAC,OAAO,EAAE,cAAc,GAAG;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE;
|
|
1
|
+
{"version":3,"file":"browser-client.d.ts","sourceRoot":"","sources":["../../src/browser-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAuD,MAAM,2BAA2B,CAAC;AAc/G,OAAO,EACL,aAAa,EACb,aAAa,EACb,cAAc,EACd,KAAK,EACL,YAAY,EACZ,QAAQ,IAAI,SAAS,EACrB,OAAO,IAAI,QAAQ,EACnB,aAAa,EACd,MAAM,4BAA4B,CAAC;AAWpC,qBAAa,gBAAiB,SAAQ,aAAc,YAAW,aAAa;IAG1E,MAAM,EAAE,aAAa,CAAC;IACtB,uBAAuB,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5C,qBAAqB,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1C,qBAAqB,EAAE,MAAM,GAAG,SAAS,CAAC;IAE1C,IAAI,CAAC,MAAM,SAAK,EAAE,eAAe,CAAC,EAAE,MAAM,GAAG,cAAc,EAAE,YAAY,CAAC,EAAE,cAAc;cAkB1E,KAAK,CAAC,OAAO,EAAE,cAAc,GAAG;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE;IA0ElE,SAAS;IAIT,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS;IAWpC,WAAW;IAIX,WAAW,CAAC,QAAQ,EAAE,MAAM;IAS5B,KAAK;IAKL,YAAY;IAIZ,YAAY,CAAC,SAAS,EAAE,MAAM;IA8C9B,aAAa;IAQb,YAAY,CAAC,SAAS,EAAE,aAAa;IAQrC,QAAQ,CAAC,QAAQ,EAAE,SAAS,EAAE,YAAY,CAAC,EAAE,YAAY;IAezD,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,CAAC,EAAE,YAAY;IAS/G,OAAO,CAAC,OAAO,EAAE,QAAQ,EAAE,YAAY,CAAC,EAAE,YAAY;IAShD,OAAO,CAAC,KAAK,EAAE,KAAK;CAe3B"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { __assign, __awaiter, __extends, __generator } from "tslib";
|
|
2
2
|
import { AmplitudeCore, Destination, Identify, returnWrapper, Revenue, UUID } from '@amplitude/analytics-core';
|
|
3
|
-
import { getAnalyticsConnector, getAttributionTrackingConfig, getPageViewTrackingConfig, IdentityEventSender, isAttributionTrackingEnabled, isSessionTrackingEnabled, isFileDownloadTrackingEnabled, isFormInteractionTrackingEnabled, setConnectorDeviceId, setConnectorUserId,
|
|
3
|
+
import { getAnalyticsConnector, getAttributionTrackingConfig, getPageViewTrackingConfig, IdentityEventSender, isAttributionTrackingEnabled, isSessionTrackingEnabled, isFileDownloadTrackingEnabled, isFormInteractionTrackingEnabled, setConnectorDeviceId, setConnectorUserId, isSessionExpired, } from '@amplitude/analytics-client-common';
|
|
4
4
|
import { convertProxyObjectToRealObject, isInstanceProxy } from './utils/snippet-helper';
|
|
5
5
|
import { Context } from './plugins/context';
|
|
6
6
|
import { useBrowserConfig, createTransport } from './config';
|
|
@@ -38,7 +38,7 @@ var AmplitudeBrowser = /** @class */ (function (_super) {
|
|
|
38
38
|
AmplitudeBrowser.prototype._init = function (options) {
|
|
39
39
|
var _a, _b;
|
|
40
40
|
return __awaiter(this, void 0, void 0, function () {
|
|
41
|
-
var browserOptions, connector, attributionTrackingOptions, webAttribution;
|
|
41
|
+
var browserOptions, connector, attributionTrackingOptions, resetSessionOnNewCampaign, webAttribution;
|
|
42
42
|
var _this = this;
|
|
43
43
|
return __generator(this, function (_c) {
|
|
44
44
|
switch (_c.label) {
|
|
@@ -94,7 +94,12 @@ var AmplitudeBrowser = /** @class */ (function (_super) {
|
|
|
94
94
|
case 9:
|
|
95
95
|
if (!isAttributionTrackingEnabled(this.config.defaultTracking)) return [3 /*break*/, 11];
|
|
96
96
|
attributionTrackingOptions = getAttributionTrackingConfig(this.config);
|
|
97
|
-
|
|
97
|
+
resetSessionOnNewCampaign = !this.config.lastEventTime || isSessionExpired(this.config.sessionTimeout, this.config.lastEventTime)
|
|
98
|
+
? // A new session just started OR will start soon organically, no need to trigger another restart
|
|
99
|
+
false
|
|
100
|
+
: // Previous session is still valid, allow reset if configured
|
|
101
|
+
attributionTrackingOptions.resetSessionOnNewCampaign;
|
|
102
|
+
webAttribution = webAttributionPlugin(__assign(__assign({}, attributionTrackingOptions), { resetSessionOnNewCampaign: resetSessionOnNewCampaign }));
|
|
98
103
|
return [4 /*yield*/, this.add(webAttribution).promise];
|
|
99
104
|
case 10:
|
|
100
105
|
_c.sent();
|
|
@@ -155,7 +160,7 @@ var AmplitudeBrowser = /** @class */ (function (_super) {
|
|
|
155
160
|
return (_a = this.config) === null || _a === void 0 ? void 0 : _a.sessionId;
|
|
156
161
|
};
|
|
157
162
|
AmplitudeBrowser.prototype.setSessionId = function (sessionId) {
|
|
158
|
-
var _a;
|
|
163
|
+
var _a, _b;
|
|
159
164
|
if (!this.config) {
|
|
160
165
|
this.q.push(this.setSessionId.bind(this, sessionId));
|
|
161
166
|
return;
|
|
@@ -165,26 +170,31 @@ var AmplitudeBrowser = /** @class */ (function (_super) {
|
|
|
165
170
|
return;
|
|
166
171
|
}
|
|
167
172
|
var previousSessionId = this.getSessionId();
|
|
168
|
-
var lastEventTime = this.config.lastEventTime;
|
|
169
|
-
|
|
173
|
+
var lastEventTime = (_a = this.config.lastEventTime) !== null && _a !== void 0 ? _a : this.sessionStartEventTime;
|
|
174
|
+
this.config.lastEventId = (_b = this.config.lastEventId) !== null && _b !== void 0 ? _b : 0;
|
|
170
175
|
this.config.sessionId = sessionId;
|
|
171
176
|
this.config.lastEventTime = undefined;
|
|
172
177
|
if (isSessionTrackingEnabled(this.config.defaultTracking)) {
|
|
173
178
|
if (previousSessionId && lastEventTime) {
|
|
174
179
|
this.track(DEFAULT_SESSION_END_EVENT, undefined, {
|
|
175
180
|
device_id: this.previousSessionDeviceId,
|
|
176
|
-
event_id: ++lastEventId,
|
|
181
|
+
event_id: ++this.config.lastEventId,
|
|
177
182
|
session_id: previousSessionId,
|
|
178
183
|
time: lastEventTime + 1,
|
|
179
184
|
user_id: this.previousSessionUserId,
|
|
180
185
|
});
|
|
186
|
+
this.sessionStartEventTime = undefined;
|
|
181
187
|
}
|
|
182
|
-
this.config.lastEventTime = this.config.sessionId;
|
|
183
188
|
this.track(DEFAULT_SESSION_START_EVENT, undefined, {
|
|
184
|
-
event_id: ++lastEventId,
|
|
189
|
+
event_id: ++this.config.lastEventId,
|
|
185
190
|
session_id: this.config.sessionId,
|
|
186
|
-
time: this.config.
|
|
191
|
+
time: this.config.sessionId,
|
|
187
192
|
});
|
|
193
|
+
// `this.lastSessionStartEventTime` is used to handle extreme edge case where session
|
|
194
|
+
// is restarted before session start event is processed by context plugin to set
|
|
195
|
+
// the globally used this.config.lastEventTime. `this.config.lastEventTime` should
|
|
196
|
+
// only be modified by config builder and context plugin to limit tampering.
|
|
197
|
+
this.sessionStartEventTime = this.config.sessionId;
|
|
188
198
|
}
|
|
189
199
|
this.previousSessionDeviceId = this.config.deviceId;
|
|
190
200
|
this.previousSessionUserId = this.config.userId;
|
|
@@ -235,14 +245,14 @@ var AmplitudeBrowser = /** @class */ (function (_super) {
|
|
|
235
245
|
};
|
|
236
246
|
AmplitudeBrowser.prototype.process = function (event) {
|
|
237
247
|
return __awaiter(this, void 0, void 0, function () {
|
|
238
|
-
var currentTime,
|
|
248
|
+
var currentTime, isMostRecentSessionExpired;
|
|
239
249
|
return __generator(this, function (_a) {
|
|
240
250
|
currentTime = Date.now();
|
|
241
|
-
|
|
251
|
+
isMostRecentSessionExpired = isSessionExpired(this.config.sessionTimeout, this.config.lastEventTime);
|
|
242
252
|
if (event.event_type !== DEFAULT_SESSION_START_EVENT &&
|
|
243
253
|
event.event_type !== DEFAULT_SESSION_END_EVENT &&
|
|
244
254
|
(!event.session_id || event.session_id === this.getSessionId()) &&
|
|
245
|
-
|
|
255
|
+
isMostRecentSessionExpired) {
|
|
246
256
|
this.setSessionId(currentTime);
|
|
247
257
|
}
|
|
248
258
|
return [2 /*return*/, _super.prototype.process.call(this, event)];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser-client.js","sourceRoot":"","sources":["../../src/browser-client.ts"],"names":[],"mappings":"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","sourcesContent":["import { AmplitudeCore, Destination, Identify, returnWrapper, Revenue, UUID } from '@amplitude/analytics-core';\nimport {\n getAnalyticsConnector,\n getAttributionTrackingConfig,\n getPageViewTrackingConfig,\n IdentityEventSender,\n isAttributionTrackingEnabled,\n isSessionTrackingEnabled,\n isFileDownloadTrackingEnabled,\n isFormInteractionTrackingEnabled,\n setConnectorDeviceId,\n setConnectorUserId,\n isNewSession,\n} from '@amplitude/analytics-client-common';\nimport {\n BrowserClient,\n BrowserConfig,\n BrowserOptions,\n Event,\n EventOptions,\n Identify as IIdentify,\n Revenue as IRevenue,\n TransportType,\n} from '@amplitude/analytics-types';\nimport { convertProxyObjectToRealObject, isInstanceProxy } from './utils/snippet-helper';\nimport { Context } from './plugins/context';\nimport { useBrowserConfig, createTransport } from './config';\nimport { webAttributionPlugin } from '@amplitude/plugin-web-attribution-browser';\nimport { pageViewTrackingPlugin } from '@amplitude/plugin-page-view-tracking-browser';\nimport { formInteractionTracking } from './plugins/form-interaction-tracking';\nimport { fileDownloadTracking } from './plugins/file-download-tracking';\nimport { DEFAULT_SESSION_END_EVENT, DEFAULT_SESSION_START_EVENT } from './constants';\nimport { detNotify } from './det-notification';\n\nexport class AmplitudeBrowser extends AmplitudeCore implements BrowserClient {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n config: BrowserConfig;\n previousSessionDeviceId: string | undefined;\n previousSessionUserId: string | undefined;\n\n init(apiKey = '', userIdOrOptions?: string | BrowserOptions, maybeOptions?: BrowserOptions) {\n let userId: string | undefined;\n let options: BrowserOptions | undefined;\n\n if (arguments.length > 2) {\n userId = userIdOrOptions as string | undefined;\n options = maybeOptions;\n } else {\n if (typeof userIdOrOptions === 'string') {\n userId = userIdOrOptions;\n options = undefined;\n } else {\n userId = userIdOrOptions?.userId;\n options = userIdOrOptions;\n }\n }\n return returnWrapper(this._init({ ...options, userId, apiKey }));\n }\n protected async _init(options: BrowserOptions & { apiKey: string }) {\n // Step 1: Block concurrent initialization\n if (this.initializing) {\n return;\n }\n this.initializing = true;\n\n // Step 2: Create browser config\n const browserOptions = await useBrowserConfig(options.apiKey, options, this);\n await super._init(browserOptions);\n\n // Step 3: Set session ID\n // Priority 1: `options.sessionId`\n // Priority 2: last known sessionId from user identity storage\n // Default: `Date.now()`\n // Session ID is handled differently than device ID and user ID due to session events\n this.setSessionId(options.sessionId ?? this.config.sessionId ?? Date.now());\n\n // Set up the analytics connector to integrate with the experiment SDK.\n // Send events from the experiment SDK and forward identifies to the\n // identity store.\n const connector = getAnalyticsConnector(options.instanceName);\n connector.identityStore.setIdentity({\n userId: this.config.userId,\n deviceId: this.config.deviceId,\n });\n\n // Step 4: Install plugins\n // Do not track any events before this\n await this.add(new Destination()).promise;\n await this.add(new Context()).promise;\n await this.add(new IdentityEventSender()).promise;\n\n // Notify if DET is enabled\n detNotify(this.config);\n\n if (isFileDownloadTrackingEnabled(this.config.defaultTracking)) {\n await this.add(fileDownloadTracking()).promise;\n }\n\n if (isFormInteractionTrackingEnabled(this.config.defaultTracking)) {\n await this.add(formInteractionTracking()).promise;\n }\n\n // Add web attribution plugin\n if (isAttributionTrackingEnabled(this.config.defaultTracking)) {\n const attributionTrackingOptions = getAttributionTrackingConfig(this.config);\n const webAttribution = webAttributionPlugin(attributionTrackingOptions);\n await this.add(webAttribution).promise;\n }\n\n // Add page view plugin\n await this.add(pageViewTrackingPlugin(getPageViewTrackingConfig(this.config))).promise;\n\n this.initializing = false;\n\n // Step 6: Run queued dispatch functions\n await this.runQueuedFunctions('dispatchQ');\n\n // Step 7: Add the event receiver after running remaining queued functions.\n connector.eventBridge.setEventReceiver((event) => {\n void this.track(event.eventType, event.eventProperties);\n });\n }\n\n getUserId() {\n return this.config?.userId;\n }\n\n setUserId(userId: string | undefined) {\n if (!this.config) {\n this.q.push(this.setUserId.bind(this, userId));\n return;\n }\n if (userId !== this.config.userId || userId === undefined) {\n this.config.userId = userId;\n setConnectorUserId(userId, this.config.instanceName);\n }\n }\n\n getDeviceId() {\n return this.config?.deviceId;\n }\n\n setDeviceId(deviceId: string) {\n if (!this.config) {\n this.q.push(this.setDeviceId.bind(this, deviceId));\n return;\n }\n this.config.deviceId = deviceId;\n setConnectorDeviceId(deviceId, this.config.instanceName);\n }\n\n reset() {\n this.setDeviceId(UUID());\n this.setUserId(undefined);\n }\n\n getSessionId() {\n return this.config?.sessionId;\n }\n\n setSessionId(sessionId: number) {\n if (!this.config) {\n this.q.push(this.setSessionId.bind(this, sessionId));\n return;\n }\n\n // Prevents starting a new session with the same session ID\n if (sessionId === this.config.sessionId) {\n return;\n }\n\n const previousSessionId = this.getSessionId();\n const lastEventTime = this.config.lastEventTime;\n let lastEventId = this.config.lastEventId ?? -1;\n\n this.config.sessionId = sessionId;\n this.config.lastEventTime = undefined;\n\n if (isSessionTrackingEnabled(this.config.defaultTracking)) {\n if (previousSessionId && lastEventTime) {\n this.track(DEFAULT_SESSION_END_EVENT, undefined, {\n device_id: this.previousSessionDeviceId,\n event_id: ++lastEventId,\n session_id: previousSessionId,\n time: lastEventTime + 1,\n user_id: this.previousSessionUserId,\n });\n }\n\n this.config.lastEventTime = this.config.sessionId;\n this.track(DEFAULT_SESSION_START_EVENT, undefined, {\n event_id: ++lastEventId,\n session_id: this.config.sessionId,\n time: this.config.lastEventTime,\n });\n }\n\n this.previousSessionDeviceId = this.config.deviceId;\n this.previousSessionUserId = this.config.userId;\n }\n\n extendSession() {\n if (!this.config) {\n this.q.push(this.extendSession.bind(this));\n return;\n }\n this.config.lastEventTime = Date.now();\n }\n\n setTransport(transport: TransportType) {\n if (!this.config) {\n this.q.push(this.setTransport.bind(this, transport));\n return;\n }\n this.config.transportProvider = createTransport(transport);\n }\n\n identify(identify: IIdentify, eventOptions?: EventOptions) {\n if (isInstanceProxy(identify)) {\n const queue = identify._q;\n identify._q = [];\n identify = convertProxyObjectToRealObject(new Identify(), queue);\n }\n if (eventOptions?.user_id) {\n this.setUserId(eventOptions.user_id);\n }\n if (eventOptions?.device_id) {\n this.setDeviceId(eventOptions.device_id);\n }\n return super.identify(identify, eventOptions);\n }\n\n groupIdentify(groupType: string, groupName: string | string[], identify: IIdentify, eventOptions?: EventOptions) {\n if (isInstanceProxy(identify)) {\n const queue = identify._q;\n identify._q = [];\n identify = convertProxyObjectToRealObject(new Identify(), queue);\n }\n return super.groupIdentify(groupType, groupName, identify, eventOptions);\n }\n\n revenue(revenue: IRevenue, eventOptions?: EventOptions) {\n if (isInstanceProxy(revenue)) {\n const queue = revenue._q;\n revenue._q = [];\n revenue = convertProxyObjectToRealObject(new Revenue(), queue);\n }\n return super.revenue(revenue, eventOptions);\n }\n\n async process(event: Event) {\n const currentTime = Date.now();\n const isEventInNewSession = isNewSession(this.config.sessionTimeout, this.config.lastEventTime);\n\n if (\n event.event_type !== DEFAULT_SESSION_START_EVENT &&\n event.event_type !== DEFAULT_SESSION_END_EVENT &&\n (!event.session_id || event.session_id === this.getSessionId()) &&\n isEventInNewSession\n ) {\n this.setSessionId(currentTime);\n }\n\n return super.process(event);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"browser-client.js","sourceRoot":"","sources":["../../src/browser-client.ts"],"names":[],"mappings":"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","sourcesContent":["import { AmplitudeCore, Destination, Identify, returnWrapper, Revenue, UUID } from '@amplitude/analytics-core';\nimport {\n getAnalyticsConnector,\n getAttributionTrackingConfig,\n getPageViewTrackingConfig,\n IdentityEventSender,\n isAttributionTrackingEnabled,\n isSessionTrackingEnabled,\n isFileDownloadTrackingEnabled,\n isFormInteractionTrackingEnabled,\n setConnectorDeviceId,\n setConnectorUserId,\n isSessionExpired,\n} from '@amplitude/analytics-client-common';\nimport {\n BrowserClient,\n BrowserConfig,\n BrowserOptions,\n Event,\n EventOptions,\n Identify as IIdentify,\n Revenue as IRevenue,\n TransportType,\n} from '@amplitude/analytics-types';\nimport { convertProxyObjectToRealObject, isInstanceProxy } from './utils/snippet-helper';\nimport { Context } from './plugins/context';\nimport { useBrowserConfig, createTransport } from './config';\nimport { webAttributionPlugin } from '@amplitude/plugin-web-attribution-browser';\nimport { pageViewTrackingPlugin } from '@amplitude/plugin-page-view-tracking-browser';\nimport { formInteractionTracking } from './plugins/form-interaction-tracking';\nimport { fileDownloadTracking } from './plugins/file-download-tracking';\nimport { DEFAULT_SESSION_END_EVENT, DEFAULT_SESSION_START_EVENT } from './constants';\nimport { detNotify } from './det-notification';\n\nexport class AmplitudeBrowser extends AmplitudeCore implements BrowserClient {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n config: BrowserConfig;\n previousSessionDeviceId: string | undefined;\n previousSessionUserId: string | undefined;\n sessionStartEventTime: number | undefined;\n\n init(apiKey = '', userIdOrOptions?: string | BrowserOptions, maybeOptions?: BrowserOptions) {\n let userId: string | undefined;\n let options: BrowserOptions | undefined;\n\n if (arguments.length > 2) {\n userId = userIdOrOptions as string | undefined;\n options = maybeOptions;\n } else {\n if (typeof userIdOrOptions === 'string') {\n userId = userIdOrOptions;\n options = undefined;\n } else {\n userId = userIdOrOptions?.userId;\n options = userIdOrOptions;\n }\n }\n return returnWrapper(this._init({ ...options, userId, apiKey }));\n }\n protected async _init(options: BrowserOptions & { apiKey: string }) {\n // Step 1: Block concurrent initialization\n if (this.initializing) {\n return;\n }\n this.initializing = true;\n\n // Step 2: Create browser config\n const browserOptions = await useBrowserConfig(options.apiKey, options, this);\n await super._init(browserOptions);\n\n // Step 3: Set session ID\n // Priority 1: `options.sessionId`\n // Priority 2: last known sessionId from user identity storage\n // Default: `Date.now()`\n // Session ID is handled differently than device ID and user ID due to session events\n this.setSessionId(options.sessionId ?? this.config.sessionId ?? Date.now());\n\n // Set up the analytics connector to integrate with the experiment SDK.\n // Send events from the experiment SDK and forward identifies to the\n // identity store.\n const connector = getAnalyticsConnector(options.instanceName);\n connector.identityStore.setIdentity({\n userId: this.config.userId,\n deviceId: this.config.deviceId,\n });\n\n // Step 4: Install plugins\n // Do not track any events before this\n await this.add(new Destination()).promise;\n await this.add(new Context()).promise;\n await this.add(new IdentityEventSender()).promise;\n\n // Notify if DET is enabled\n detNotify(this.config);\n\n if (isFileDownloadTrackingEnabled(this.config.defaultTracking)) {\n await this.add(fileDownloadTracking()).promise;\n }\n\n if (isFormInteractionTrackingEnabled(this.config.defaultTracking)) {\n await this.add(formInteractionTracking()).promise;\n }\n\n // Add web attribution plugin\n if (isAttributionTrackingEnabled(this.config.defaultTracking)) {\n const attributionTrackingOptions = getAttributionTrackingConfig(this.config);\n const resetSessionOnNewCampaign =\n !this.config.lastEventTime || isSessionExpired(this.config.sessionTimeout, this.config.lastEventTime)\n ? // A new session just started OR will start soon organically, no need to trigger another restart\n false\n : // Previous session is still valid, allow reset if configured\n attributionTrackingOptions.resetSessionOnNewCampaign;\n const webAttribution = webAttributionPlugin({\n ...attributionTrackingOptions,\n resetSessionOnNewCampaign,\n });\n await this.add(webAttribution).promise;\n }\n\n // Add page view plugin\n await this.add(pageViewTrackingPlugin(getPageViewTrackingConfig(this.config))).promise;\n\n this.initializing = false;\n\n // Step 6: Run queued dispatch functions\n await this.runQueuedFunctions('dispatchQ');\n\n // Step 7: Add the event receiver after running remaining queued functions.\n connector.eventBridge.setEventReceiver((event) => {\n void this.track(event.eventType, event.eventProperties);\n });\n }\n\n getUserId() {\n return this.config?.userId;\n }\n\n setUserId(userId: string | undefined) {\n if (!this.config) {\n this.q.push(this.setUserId.bind(this, userId));\n return;\n }\n if (userId !== this.config.userId || userId === undefined) {\n this.config.userId = userId;\n setConnectorUserId(userId, this.config.instanceName);\n }\n }\n\n getDeviceId() {\n return this.config?.deviceId;\n }\n\n setDeviceId(deviceId: string) {\n if (!this.config) {\n this.q.push(this.setDeviceId.bind(this, deviceId));\n return;\n }\n this.config.deviceId = deviceId;\n setConnectorDeviceId(deviceId, this.config.instanceName);\n }\n\n reset() {\n this.setDeviceId(UUID());\n this.setUserId(undefined);\n }\n\n getSessionId() {\n return this.config?.sessionId;\n }\n\n setSessionId(sessionId: number) {\n if (!this.config) {\n this.q.push(this.setSessionId.bind(this, sessionId));\n return;\n }\n\n // Prevents starting a new session with the same session ID\n if (sessionId === this.config.sessionId) {\n return;\n }\n\n const previousSessionId = this.getSessionId();\n const lastEventTime = this.config.lastEventTime ?? this.sessionStartEventTime;\n this.config.lastEventId = this.config.lastEventId ?? 0;\n\n this.config.sessionId = sessionId;\n this.config.lastEventTime = undefined;\n\n if (isSessionTrackingEnabled(this.config.defaultTracking)) {\n if (previousSessionId && lastEventTime) {\n this.track(DEFAULT_SESSION_END_EVENT, undefined, {\n device_id: this.previousSessionDeviceId,\n event_id: ++this.config.lastEventId,\n session_id: previousSessionId,\n time: lastEventTime + 1,\n user_id: this.previousSessionUserId,\n });\n this.sessionStartEventTime = undefined;\n }\n\n this.track(DEFAULT_SESSION_START_EVENT, undefined, {\n event_id: ++this.config.lastEventId,\n session_id: this.config.sessionId,\n time: this.config.sessionId,\n });\n // `this.lastSessionStartEventTime` is used to handle extreme edge case where session\n // is restarted before session start event is processed by context plugin to set\n // the globally used this.config.lastEventTime. `this.config.lastEventTime` should\n // only be modified by config builder and context plugin to limit tampering.\n this.sessionStartEventTime = this.config.sessionId;\n }\n\n this.previousSessionDeviceId = this.config.deviceId;\n this.previousSessionUserId = this.config.userId;\n }\n\n extendSession() {\n if (!this.config) {\n this.q.push(this.extendSession.bind(this));\n return;\n }\n this.config.lastEventTime = Date.now();\n }\n\n setTransport(transport: TransportType) {\n if (!this.config) {\n this.q.push(this.setTransport.bind(this, transport));\n return;\n }\n this.config.transportProvider = createTransport(transport);\n }\n\n identify(identify: IIdentify, eventOptions?: EventOptions) {\n if (isInstanceProxy(identify)) {\n const queue = identify._q;\n identify._q = [];\n identify = convertProxyObjectToRealObject(new Identify(), queue);\n }\n if (eventOptions?.user_id) {\n this.setUserId(eventOptions.user_id);\n }\n if (eventOptions?.device_id) {\n this.setDeviceId(eventOptions.device_id);\n }\n return super.identify(identify, eventOptions);\n }\n\n groupIdentify(groupType: string, groupName: string | string[], identify: IIdentify, eventOptions?: EventOptions) {\n if (isInstanceProxy(identify)) {\n const queue = identify._q;\n identify._q = [];\n identify = convertProxyObjectToRealObject(new Identify(), queue);\n }\n return super.groupIdentify(groupType, groupName, identify, eventOptions);\n }\n\n revenue(revenue: IRevenue, eventOptions?: EventOptions) {\n if (isInstanceProxy(revenue)) {\n const queue = revenue._q;\n revenue._q = [];\n revenue = convertProxyObjectToRealObject(new Revenue(), queue);\n }\n return super.revenue(revenue, eventOptions);\n }\n\n async process(event: Event) {\n const currentTime = Date.now();\n const isMostRecentSessionExpired = isSessionExpired(this.config.sessionTimeout, this.config.lastEventTime);\n\n if (\n event.event_type !== DEFAULT_SESSION_START_EVENT &&\n event.event_type !== DEFAULT_SESSION_END_EVENT &&\n (!event.session_id || event.session_id === this.getSessionId()) &&\n isMostRecentSessionExpired\n ) {\n this.setSessionId(currentTime);\n }\n\n return super.process(event);\n }\n}\n"]}
|
|
@@ -31,7 +31,7 @@ export var fileDownloadTracking = function () {
|
|
|
31
31
|
return [2 /*return*/];
|
|
32
32
|
}
|
|
33
33
|
/* istanbul ignore if */
|
|
34
|
-
if (typeof document === 'undefined') {
|
|
34
|
+
if (typeof document === 'undefined' || !document.body) {
|
|
35
35
|
return [2 /*return*/];
|
|
36
36
|
}
|
|
37
37
|
addFileDownloadListener = function (a) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-download-tracking.js","sourceRoot":"","sources":["../../../src/plugins/file-download-tracking.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,2BAA2B,EAAE,cAAc,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AASpH,MAAM,CAAC,IAAM,oBAAoB,GAAG;IAClC,IAAI,QAAsC,CAAC;IAC3C,IAAI,cAAc,GAAoB,EAAE,CAAC;IACzC,IAAM,gBAAgB,GAAG,UAAC,OAAgB,EAAE,IAAa,EAAE,OAAmB;QAC5E,OAAO,CAAC,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACxC,cAAc,CAAC,IAAI,CAAC;YAClB,OAAO,SAAA;YACP,IAAI,MAAA;YACJ,OAAO,SAAA;SACR,CAAC,CAAC;IACL,CAAC,CAAC;IACF,IAAM,oBAAoB,GAAG;QAC3B,cAAc,CAAC,OAAO,CAAC,UAAC,EAA0B;gBAAxB,OAAO,aAAA,EAAE,IAAI,UAAA,EAAE,OAAO,aAAA;YAC9C,0BAA0B;YAC1B,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,mBAAmB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;QACH,cAAc,GAAG,EAAE,CAAC;IACtB,CAAC,CAAC;IAEF,IAAM,IAAI,GAAG,kDAAkD,CAAC;IAChE,IAAM,IAAI,GAAG,YAAY,CAAC;IAC1B,IAAM,KAAK,GAAG,UAAO,MAAqB,EAAE,SAAwB;;;YAClE,wBAAwB;YACxB,IAAI,CAAC,SAAS,EAAE;gBACd,qEAAqE;gBACrE,MAAM,CAAC,cAAc,CAAC,IAAI,CACxB,wHAAwH,CACzH,CAAC;gBACF,sBAAO;aACR;YAED,wBAAwB;YACxB,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE;
|
|
1
|
+
{"version":3,"file":"file-download-tracking.js","sourceRoot":"","sources":["../../../src/plugins/file-download-tracking.ts"],"names":[],"mappings":"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","sourcesContent":["import { BrowserClient, Event, EnrichmentPlugin } from '@amplitude/analytics-types';\nimport { DEFAULT_FILE_DOWNLOAD_EVENT, FILE_EXTENSION, FILE_NAME, LINK_ID, LINK_TEXT, LINK_URL } from '../constants';\nimport { BrowserConfig } from '../config';\n\ninterface EventListener {\n element: Element;\n type: 'click';\n handler: () => void;\n}\n\nexport const fileDownloadTracking = (): EnrichmentPlugin => {\n let observer: MutationObserver | undefined;\n let eventListeners: EventListener[] = [];\n const addEventListener = (element: Element, type: 'click', handler: () => void) => {\n element.addEventListener(type, handler);\n eventListeners.push({\n element,\n type,\n handler,\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-file-download-tracking-browser';\n const type = 'enrichment';\n const setup = async (config: BrowserConfig, amplitude: BrowserClient) => {\n /* istanbul ignore if */\n if (!amplitude) {\n // TODO: Add required minimum version of @amplitude/analytics-browser\n config.loggerProvider.warn(\n 'File download tracking requires a later version of @amplitude/analytics-browser. File download events are not tracked.',\n );\n return;\n }\n\n /* istanbul ignore if */\n if (typeof document === 'undefined' || !document.body) {\n return;\n }\n\n const addFileDownloadListener = (a: HTMLAnchorElement) => {\n let url: URL;\n try {\n // eslint-disable-next-line no-restricted-globals\n url = new URL(a.href, window.location.href);\n } catch {\n /* istanbul ignore next */\n return;\n }\n const result = ext.exec(url.href);\n const fileExtension = result?.[1];\n\n if (fileExtension) {\n addEventListener(a, 'click', () => {\n if (fileExtension) {\n amplitude.track(DEFAULT_FILE_DOWNLOAD_EVENT, {\n [FILE_EXTENSION]: fileExtension,\n [FILE_NAME]: url.pathname,\n [LINK_ID]: a.id,\n [LINK_TEXT]: a.text,\n [LINK_URL]: a.href,\n });\n }\n });\n }\n };\n\n const ext =\n /\\.(pdf|xlsx?|docx?|txt|rtf|csv|exe|key|pp(s|t|tx)|7z|pkg|rar|gz|zip|avi|mov|mp4|mpe?g|wmv|midi?|mp3|wav|wma)$/;\n\n // Adds listener to existing anchor tags\n const links = Array.from(document.getElementsByTagName('a'));\n links.forEach(addFileDownloadListener);\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 === 'A') {\n addFileDownloadListener(node as HTMLAnchorElement);\n }\n if ('querySelectorAll' in node && typeof node.querySelectorAll === 'function') {\n Array.from(node.querySelectorAll('a') as HTMLAnchorElement[]).map(addFileDownloadListener);\n }\n });\n });\n });\n\n observer.observe(document.body, {\n subtree: true,\n childList: true,\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"]}
|
|
@@ -31,7 +31,7 @@ export var formInteractionTracking = function () {
|
|
|
31
31
|
return [2 /*return*/];
|
|
32
32
|
}
|
|
33
33
|
/* istanbul ignore if */
|
|
34
|
-
if (typeof document === 'undefined') {
|
|
34
|
+
if (typeof document === 'undefined' || !document.body) {
|
|
35
35
|
return [2 /*return*/];
|
|
36
36
|
}
|
|
37
37
|
addFormInteractionListener = function (form) {
|