@amplitude/analytics-browser 1.11.0 → 1.11.2

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.
Files changed (55) hide show
  1. package/README.md +1 -1
  2. package/lib/cjs/browser-client.d.ts +2 -1
  3. package/lib/cjs/browser-client.d.ts.map +1 -1
  4. package/lib/cjs/browser-client.js +91 -68
  5. package/lib/cjs/browser-client.js.map +1 -1
  6. package/lib/cjs/cookie-migration/index.d.ts +1 -1
  7. package/lib/cjs/cookie-migration/index.d.ts.map +1 -1
  8. package/lib/cjs/cookie-migration/index.js +4 -3
  9. package/lib/cjs/cookie-migration/index.js.map +1 -1
  10. package/lib/cjs/plugins/context.d.ts +0 -1
  11. package/lib/cjs/plugins/context.d.ts.map +1 -1
  12. package/lib/cjs/plugins/context.js +10 -6
  13. package/lib/cjs/plugins/context.js.map +1 -1
  14. package/lib/cjs/version.d.ts +1 -1
  15. package/lib/cjs/version.js +1 -1
  16. package/lib/cjs/version.js.map +1 -1
  17. package/lib/esm/browser-client.d.ts +2 -1
  18. package/lib/esm/browser-client.d.ts.map +1 -1
  19. package/lib/esm/browser-client.js +91 -68
  20. package/lib/esm/browser-client.js.map +1 -1
  21. package/lib/esm/cookie-migration/index.d.ts +1 -1
  22. package/lib/esm/cookie-migration/index.d.ts.map +1 -1
  23. package/lib/esm/cookie-migration/index.js +4 -3
  24. package/lib/esm/cookie-migration/index.js.map +1 -1
  25. package/lib/esm/plugins/context.d.ts +0 -1
  26. package/lib/esm/plugins/context.d.ts.map +1 -1
  27. package/lib/esm/plugins/context.js +10 -6
  28. package/lib/esm/plugins/context.js.map +1 -1
  29. package/lib/esm/version.d.ts +1 -1
  30. package/lib/esm/version.js +1 -1
  31. package/lib/esm/version.js.map +1 -1
  32. package/lib/scripts/amplitude-min.js +1 -1
  33. package/lib/scripts/amplitude-min.js.gz +0 -0
  34. package/lib/scripts/amplitude-min.umd.js +1 -1
  35. package/lib/scripts/amplitude-min.umd.js.gz +0 -0
  36. package/lib/scripts/amplitude-snippet-instructions.html +1 -1
  37. package/lib/scripts/amplitude-snippet-min.js +1 -1
  38. package/lib/scripts/browser-client.d.ts +2 -1
  39. package/lib/scripts/browser-client.d.ts.map +1 -1
  40. package/lib/scripts/cookie-migration/index.d.ts +1 -1
  41. package/lib/scripts/cookie-migration/index.d.ts.map +1 -1
  42. package/lib/scripts/plugins/context.d.ts +0 -1
  43. package/lib/scripts/plugins/context.d.ts.map +1 -1
  44. package/lib/scripts/version.d.ts +1 -1
  45. package/package.json +9 -8
  46. package/lib/cjs/plugins/session-handler.d.ts +0 -3
  47. package/lib/cjs/plugins/session-handler.d.ts.map +0 -1
  48. package/lib/cjs/plugins/session-handler.js +0 -54
  49. package/lib/cjs/plugins/session-handler.js.map +0 -1
  50. package/lib/esm/plugins/session-handler.d.ts +0 -3
  51. package/lib/esm/plugins/session-handler.d.ts.map +0 -1
  52. package/lib/esm/plugins/session-handler.js +0 -50
  53. package/lib/esm/plugins/session-handler.js.map +0 -1
  54. package/lib/scripts/plugins/session-handler.d.ts +0 -3
  55. package/lib/scripts/plugins/session-handler.d.ts.map +0 -1
package/README.md CHANGED
@@ -40,7 +40,7 @@ Alternatively, the package is also distributed through a CDN. Copy and paste the
40
40
  <!-- README_SNIPPET_BLOCK -->
41
41
  ```html
42
42
  <script type="text/javascript">
43
- !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)))}}},o=function(e){for(var t=0;t<y.length;t++)i(e,y[t],!1);for(var r=0;r<g.length;r++)i(e,g[r],!0)};r.invoked=!0;var a=t.createElement("script");a.type="text/javascript",a.integrity="sha384-88G7ldPwlcBAEMvub2fJXyrErbB+r+yi8fkKzYrr3iUDAkNi/0Y6kR2jyCMC1rfJ",a.crossOrigin="anonymous",a.async=!0,a.src="https://cdn.amplitude.com/libs/analytics-browser-1.11.0-min.js.gz",a.onload=function(){e.amplitude.runQueuedFunctions||console.log("[Amplitude] Error: could not load SDK")};var c=t.getElementsByTagName("script")[0];c.parentNode.insertBefore(a,c);for(var u=function(){return this._q=[],this},l=["add","append","clearAll","prepend","set","setOnce","unset","preInsert","postInsert","remove","getUserProperties"],p=0;p<l.length;p++)n(u,l[p]);r.Identify=u;for(var d=function(){return this._q=[],this},f=["getEventProperties","setProductId","setQuantity","setPrice","setRevenue","setRevenueType","setEventProperties"],v=0;v<f.length;v++)n(d,f[v]);r.Revenue=d;var y=["getDeviceId","setDeviceId","getSessionId","setSessionId","getUserId","setUserId","setOptOut","setTransport","reset"],g=["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)}();
43
+ !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[t]=function(){if(r)return{promise:new Promise(s(e,t,Array.prototype.slice.call(arguments)))}}},i=function(e){for(var t=0;t<g.length;t++)o(e,g[t],!1);for(var r=0;r<m.length;r++)o(e,m[r],!0)};r.invoked=!0;var a=t.createElement("script");a.type="text/javascript",a.integrity="sha384-bhExRHNdxBGFQ+AkmAurYWjqboez+iJTTaWsIubqgMeSgQZqjXMa8BI8890ijsCf",a.crossOrigin="anonymous",a.async=!0,a.src="https://cdn.amplitude.com/libs/analytics-browser-1.11.2-min.js.gz",a.onload=function(){e.amplitude.runQueuedFunctions||console.log("[Amplitude] Error: could not load SDK")};var u=t.getElementsByTagName("script")[0];u.parentNode.insertBefore(a,u);for(var c=function(){return this._q=[],this},l=["add","append","clearAll","prepend","set","setOnce","unset","preInsert","postInsert","remove","getUserProperties"],p=0;p<l.length;p++)n(c,l[p]);r.Identify=c;for(var d=function(){return this._q=[],this},f=["getEventProperties","setProductId","setQuantity","setPrice","setRevenue","setRevenueType","setEventProperties"],v=0;v<f.length;v++)n(d,f[v]);r.Revenue=d;var g=["getDeviceId","setDeviceId","getSessionId","setSessionId","getUserId","setUserId","setOptOut","setTransport","reset"],m=["init","add","remove","track","logEvent","identify","groupIdentify","setGroup","revenue","flush"];i(r),r.createInstance=function(e){return r._iq[e]={_q:[]},i(r._iq[e]),r._iq[e]},e.amplitude=r}}(window,document)}();
44
44
 
45
45
  amplitude.init("YOUR_API_KEY_HERE");
46
46
  </script>
@@ -1,5 +1,5 @@
1
1
  import { AmplitudeCore } from '@amplitude/analytics-core';
2
- import { BrowserClient, BrowserConfig, BrowserOptions, EventOptions, Identify as IIdentify, Revenue as IRevenue, TransportType } from '@amplitude/analytics-types';
2
+ import { BrowserClient, BrowserConfig, BrowserOptions, Event, EventOptions, Identify as IIdentify, Revenue as IRevenue, TransportType } from '@amplitude/analytics-types';
3
3
  export declare class AmplitudeBrowser extends AmplitudeCore implements BrowserClient {
4
4
  config: BrowserConfig;
5
5
  previousSessionDeviceId: string | undefined;
@@ -20,5 +20,6 @@ export declare class AmplitudeBrowser extends AmplitudeCore implements BrowserCl
20
20
  identify(identify: IIdentify, eventOptions?: EventOptions): import("@amplitude/analytics-types").AmplitudeReturn<import("@amplitude/analytics-types").Result>;
21
21
  groupIdentify(groupType: string, groupName: string | string[], identify: IIdentify, eventOptions?: EventOptions): import("@amplitude/analytics-types").AmplitudeReturn<import("@amplitude/analytics-types").Result>;
22
22
  revenue(revenue: IRevenue, eventOptions?: EventOptions): import("@amplitude/analytics-types").AmplitudeReturn<import("@amplitude/analytics-types").Result>;
23
+ process(event: Event): Promise<import("@amplitude/analytics-types").Result>;
23
24
  }
24
25
  //# sourceMappingURL=browser-client.d.ts.map
@@ -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;AAa/G,OAAO,EACL,aAAa,EACb,aAAa,EACb,cAAc,EACd,YAAY,EACZ,QAAQ,IAAI,SAAS,EACrB,OAAO,IAAI,QAAQ,EACnB,aAAa,EAEd,MAAM,4BAA4B,CAAC;AAapC,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,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc;cAG3C,KAAK,CAAC,OAAO,EAAE,cAAc,GAAG;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE;IA8GlE,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;IA+B9B,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;CAQvD"}
1
+ {"version":3,"file":"browser-client.d.ts","sourceRoot":"","sources":["../../src/browser-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAuD,MAAM,2BAA2B,CAAC;AAa/G,OAAO,EACL,aAAa,EACb,aAAa,EACb,cAAc,EACd,KAAK,EACL,YAAY,EACZ,QAAQ,IAAI,SAAS,EACrB,OAAO,IAAI,QAAQ,EACnB,aAAa,EAEd,MAAM,4BAA4B,CAAC;AAYpC,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,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc;cAG3C,KAAK,CAAC,OAAO,EAAE,cAAc,GAAG;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE;IA8GlE,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;IAyC9B,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;CAgB3B"}
@@ -9,7 +9,6 @@ var config_1 = require("./config");
9
9
  var cookie_migration_1 = require("./cookie-migration");
10
10
  var plugin_web_attribution_browser_1 = require("@amplitude/plugin-web-attribution-browser");
11
11
  var plugin_page_view_tracking_browser_1 = require("@amplitude/plugin-page-view-tracking-browser");
12
- var session_handler_1 = require("./plugins/session-handler");
13
12
  var form_interaction_tracking_1 = require("./plugins/form-interaction-tracking");
14
13
  var file_download_tracking_1 = require("./plugins/file-download-tracking");
15
14
  var constants_1 = require("./constants");
@@ -24,12 +23,12 @@ var AmplitudeBrowser = /** @class */ (function (_super) {
24
23
  return (0, analytics_core_1.returnWrapper)(this._init(tslib_1.__assign(tslib_1.__assign({}, options), { userId: userId, apiKey: apiKey })));
25
24
  };
26
25
  AmplitudeBrowser.prototype._init = function (options) {
27
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _r, _s, _t, _u;
26
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _r, _s, _t, _u, _v, _w;
28
27
  return tslib_1.__awaiter(this, void 0, void 0, function () {
29
- var _v, _w, _x, legacyCookies, cookieStorage, previousCookies, queryParams, deviceId, sessionId, optOut, lastEventId, lastEventTime, userId, browserOptions, isNewSession, connector, webAttribution, pageViewTrackingOptions;
28
+ var _x, _y, _z, legacyCookies, cookieStorage, previousCookies, queryParams, deviceId, sessionId, optOut, lastEventId, lastEventTime, userId, browserOptions, isNewSession, connector, webAttribution, pageViewTrackingOptions;
30
29
  var _this = this;
31
- return tslib_1.__generator(this, function (_y) {
32
- switch (_y.label) {
30
+ return tslib_1.__generator(this, function (_0) {
31
+ switch (_0.label) {
33
32
  case 0:
34
33
  // Step 0: Block concurrent initialization
35
34
  if (this.initializing) {
@@ -37,55 +36,57 @@ var AmplitudeBrowser = /** @class */ (function (_super) {
37
36
  }
38
37
  this.initializing = true;
39
38
  // Step 1: Read cookies stored by SDK
40
- _v = options;
39
+ _x = options;
41
40
  if (!options.disableCookies) return [3 /*break*/, 1];
42
- _w = '';
41
+ _y = '';
43
42
  return [3 /*break*/, 5];
44
43
  case 1:
45
44
  if (!((_a = options.domain) !== null && _a !== void 0)) return [3 /*break*/, 2];
46
- _x = _a;
45
+ _z = _a;
47
46
  return [3 /*break*/, 4];
48
47
  case 2: return [4 /*yield*/, (0, config_1.getTopLevelDomain)()];
49
48
  case 3:
50
- _x = (_y.sent());
51
- _y.label = 4;
49
+ _z = (_0.sent());
50
+ _0.label = 4;
52
51
  case 4:
53
- _w = _x;
54
- _y.label = 5;
52
+ _y = _z;
53
+ _0.label = 5;
55
54
  case 5:
56
55
  // Step 1: Read cookies stored by SDK
57
- _v.domain = _w;
56
+ _x.domain = _y;
58
57
  return [4 /*yield*/, (0, cookie_migration_1.parseLegacyCookies)(options.apiKey, options)];
59
58
  case 6:
60
- legacyCookies = _y.sent();
59
+ legacyCookies = _0.sent();
61
60
  return [4 /*yield*/, (0, config_1.createCookieStorage)(options)];
62
61
  case 7:
63
- cookieStorage = _y.sent();
62
+ cookieStorage = _0.sent();
64
63
  return [4 /*yield*/, cookieStorage.get((0, analytics_client_common_1.getCookieName)(options.apiKey))];
65
64
  case 8:
66
- previousCookies = _y.sent();
65
+ previousCookies = _0.sent();
67
66
  queryParams = (0, analytics_client_common_1.getQueryParams)();
68
67
  deviceId = (_d = (_c = (_b = options.deviceId) !== null && _b !== void 0 ? _b : queryParams.deviceId) !== null && _c !== void 0 ? _c : previousCookies === null || previousCookies === void 0 ? void 0 : previousCookies.deviceId) !== null && _d !== void 0 ? _d : legacyCookies.deviceId;
69
- sessionId = (_f = (_e = options.sessionId) !== null && _e !== void 0 ? _e : previousCookies === null || previousCookies === void 0 ? void 0 : previousCookies.sessionId) !== null && _f !== void 0 ? _f : legacyCookies.sessionId;
70
- optOut = (_h = (_g = options.optOut) !== null && _g !== void 0 ? _g : previousCookies === null || previousCookies === void 0 ? void 0 : previousCookies.optOut) !== null && _h !== void 0 ? _h : legacyCookies.optOut;
71
- lastEventId = previousCookies === null || previousCookies === void 0 ? void 0 : previousCookies.lastEventId;
68
+ sessionId = (_e = previousCookies === null || previousCookies === void 0 ? void 0 : previousCookies.sessionId) !== null && _e !== void 0 ? _e : legacyCookies.sessionId;
69
+ optOut = (_g = (_f = options.optOut) !== null && _f !== void 0 ? _f : previousCookies === null || previousCookies === void 0 ? void 0 : previousCookies.optOut) !== null && _g !== void 0 ? _g : legacyCookies.optOut;
70
+ lastEventId = (_h = previousCookies === null || previousCookies === void 0 ? void 0 : previousCookies.lastEventId) !== null && _h !== void 0 ? _h : legacyCookies.lastEventId;
72
71
  lastEventTime = (_j = previousCookies === null || previousCookies === void 0 ? void 0 : previousCookies.lastEventTime) !== null && _j !== void 0 ? _j : legacyCookies.lastEventTime;
73
72
  userId = (_l = (_k = options.userId) !== null && _k !== void 0 ? _k : previousCookies === null || previousCookies === void 0 ? void 0 : previousCookies.userId) !== null && _l !== void 0 ? _l : legacyCookies.userId;
74
73
  this.previousSessionDeviceId = (_m = previousCookies === null || previousCookies === void 0 ? void 0 : previousCookies.deviceId) !== null && _m !== void 0 ? _m : legacyCookies.deviceId;
75
74
  this.previousSessionUserId = (_o = previousCookies === null || previousCookies === void 0 ? void 0 : previousCookies.userId) !== null && _o !== void 0 ? _o : legacyCookies.userId;
76
75
  return [4 /*yield*/, (0, config_1.useBrowserConfig)(options.apiKey, tslib_1.__assign(tslib_1.__assign({}, options), { deviceId: deviceId, sessionId: sessionId, optOut: optOut, lastEventId: lastEventId, lastEventTime: lastEventTime, userId: userId, cookieStorage: cookieStorage }))];
77
76
  case 9:
78
- browserOptions = _y.sent();
77
+ browserOptions = _0.sent();
79
78
  return [4 /*yield*/, _super.prototype._init.call(this, browserOptions)];
80
79
  case 10:
81
- _y.sent();
82
- isNewSession = !this.config.lastEventTime;
83
- if (!this.config.sessionId ||
80
+ _0.sent();
81
+ isNewSession = false;
82
+ if (
83
+ // user has never sent an event
84
+ !this.config.lastEventTime ||
85
+ // user has no previous session ID
86
+ !this.config.sessionId ||
87
+ // has sent an event and has previous session but expired
84
88
  (this.config.lastEventTime && Date.now() - this.config.lastEventTime > this.config.sessionTimeout)) {
85
- // Either
86
- // 1) No previous session; or
87
- // 2) Previous session expired
88
- this.setSessionId(Date.now());
89
+ this.setSessionId((_r = (_p = options.sessionId) !== null && _p !== void 0 ? _p : this.config.sessionId) !== null && _r !== void 0 ? _r : Date.now());
89
90
  isNewSession = true;
90
91
  }
91
92
  connector = (0, analytics_client_common_1.getAnalyticsConnector)();
@@ -99,33 +100,30 @@ var AmplitudeBrowser = /** @class */ (function (_super) {
99
100
  case 11:
100
101
  // Step 4: Install plugins
101
102
  // Do not track any events before this
102
- _y.sent();
103
+ _0.sent();
103
104
  return [4 /*yield*/, this.add(new context_1.Context()).promise];
104
105
  case 12:
105
- _y.sent();
106
- return [4 /*yield*/, this.add((0, session_handler_1.sessionHandlerPlugin)()).promise];
107
- case 13:
108
- _y.sent();
106
+ _0.sent();
109
107
  return [4 /*yield*/, this.add(new analytics_client_common_1.IdentityEventSender()).promise];
110
- case 14:
111
- _y.sent();
112
- if (!(0, analytics_client_common_1.isFileDownloadTrackingEnabled)(this.config.defaultTracking)) return [3 /*break*/, 16];
108
+ case 13:
109
+ _0.sent();
110
+ if (!(0, analytics_client_common_1.isFileDownloadTrackingEnabled)(this.config.defaultTracking)) return [3 /*break*/, 15];
113
111
  return [4 /*yield*/, this.add((0, file_download_tracking_1.fileDownloadTracking)()).promise];
112
+ case 14:
113
+ _0.sent();
114
+ _0.label = 15;
114
115
  case 15:
115
- _y.sent();
116
- _y.label = 16;
117
- case 16:
118
- if (!(0, analytics_client_common_1.isFormInteractionTrackingEnabled)(this.config.defaultTracking)) return [3 /*break*/, 18];
116
+ if (!(0, analytics_client_common_1.isFormInteractionTrackingEnabled)(this.config.defaultTracking)) return [3 /*break*/, 17];
119
117
  return [4 /*yield*/, this.add((0, form_interaction_tracking_1.formInteractionTracking)()).promise];
118
+ case 16:
119
+ _0.sent();
120
+ _0.label = 17;
120
121
  case 17:
121
- _y.sent();
122
- _y.label = 18;
123
- case 18:
124
- if (!!((_p = this.config.attribution) === null || _p === void 0 ? void 0 : _p.disabled)) return [3 /*break*/, 20];
122
+ if (!!((_s = this.config.attribution) === null || _s === void 0 ? void 0 : _s.disabled)) return [3 /*break*/, 19];
125
123
  webAttribution = (0, plugin_web_attribution_browser_1.webAttributionPlugin)({
126
- excludeReferrers: (_r = this.config.attribution) === null || _r === void 0 ? void 0 : _r.excludeReferrers,
127
- initialEmptyValue: (_s = this.config.attribution) === null || _s === void 0 ? void 0 : _s.initialEmptyValue,
128
- resetSessionOnNewCampaign: (_t = this.config.attribution) === null || _t === void 0 ? void 0 : _t.resetSessionOnNewCampaign,
124
+ excludeReferrers: (_t = this.config.attribution) === null || _t === void 0 ? void 0 : _t.excludeReferrers,
125
+ initialEmptyValue: (_u = this.config.attribution) === null || _u === void 0 ? void 0 : _u.initialEmptyValue,
126
+ resetSessionOnNewCampaign: (_v = this.config.attribution) === null || _v === void 0 ? void 0 : _v.resetSessionOnNewCampaign,
129
127
  });
130
128
  // For Amplitude-internal functionality
131
129
  // if pluginEnabledOverride === undefined then use plugin default logic
@@ -133,26 +131,26 @@ var AmplitudeBrowser = /** @class */ (function (_super) {
133
131
  // if pluginEnabledOverride === false then do not track attribution
134
132
  // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
135
133
  webAttribution.__pluginEnabledOverride =
136
- isNewSession || ((_u = this.config.attribution) === null || _u === void 0 ? void 0 : _u.trackNewCampaigns) ? undefined : false;
134
+ isNewSession || ((_w = this.config.attribution) === null || _w === void 0 ? void 0 : _w.trackNewCampaigns) ? undefined : false;
137
135
  return [4 /*yield*/, this.add(webAttribution).promise];
136
+ case 18:
137
+ _0.sent();
138
+ _0.label = 19;
138
139
  case 19:
139
- _y.sent();
140
- _y.label = 20;
141
- case 20:
142
140
  pageViewTrackingOptions = (0, analytics_client_common_1.getPageViewTrackingConfig)(this.config);
143
141
  pageViewTrackingOptions.eventType = pageViewTrackingOptions.eventType || constants_1.DEFAULT_PAGE_VIEW_EVENT;
144
142
  return [4 /*yield*/, this.add((0, plugin_page_view_tracking_browser_1.pageViewTrackingPlugin)(pageViewTrackingOptions)).promise];
145
- case 21:
146
- _y.sent();
143
+ case 20:
144
+ _0.sent();
147
145
  return [4 /*yield*/, this.add((0, default_page_view_event_enrichment_1.defaultPageViewEventEnrichment)()).promise];
148
- case 22:
149
- _y.sent();
146
+ case 21:
147
+ _0.sent();
150
148
  this.initializing = false;
151
149
  // Step 6: Run queued dispatch functions
152
150
  return [4 /*yield*/, this.runQueuedFunctions('dispatchQ')];
153
- case 23:
151
+ case 22:
154
152
  // Step 6: Run queued dispatch functions
155
- _y.sent();
153
+ _0.sent();
156
154
  // Step 7: Add the event receiver after running remaining queued functions.
157
155
  connector.eventBridge.setEventReceiver(function (event) {
158
156
  void _this.track(event.eventType, event.eventProperties);
@@ -197,31 +195,39 @@ var AmplitudeBrowser = /** @class */ (function (_super) {
197
195
  return (_a = this.config) === null || _a === void 0 ? void 0 : _a.sessionId;
198
196
  };
199
197
  AmplitudeBrowser.prototype.setSessionId = function (sessionId) {
198
+ var _a;
200
199
  if (!this.config) {
201
200
  this.q.push(this.setSessionId.bind(this, sessionId));
202
201
  return;
203
202
  }
203
+ // Prevents starting a new session with the same session ID
204
+ if (sessionId === this.config.sessionId) {
205
+ return;
206
+ }
204
207
  var previousSessionId = this.getSessionId();
205
- var previousLastEventTime = this.config.lastEventTime;
208
+ var lastEventTime = this.config.lastEventTime;
209
+ var lastEventId = (_a = this.config.lastEventId) !== null && _a !== void 0 ? _a : -1;
206
210
  this.config.sessionId = sessionId;
207
211
  this.config.lastEventTime = undefined;
208
212
  if ((0, analytics_client_common_1.isSessionTrackingEnabled)(this.config.defaultTracking)) {
209
- if (previousSessionId && previousLastEventTime) {
210
- var eventOptions = {
213
+ if (previousSessionId && lastEventTime) {
214
+ this.track(constants_1.DEFAULT_SESSION_END_EVENT, undefined, {
215
+ device_id: this.previousSessionDeviceId,
216
+ event_id: ++lastEventId,
211
217
  session_id: previousSessionId,
212
- time: previousLastEventTime + 1,
213
- };
214
- eventOptions.device_id = this.previousSessionDeviceId;
215
- eventOptions.user_id = this.previousSessionUserId;
216
- this.track(constants_1.DEFAULT_SESSION_END_EVENT, undefined, eventOptions);
218
+ time: lastEventTime + 1,
219
+ user_id: this.previousSessionUserId,
220
+ });
217
221
  }
222
+ this.config.lastEventTime = this.config.sessionId;
218
223
  this.track(constants_1.DEFAULT_SESSION_START_EVENT, undefined, {
219
- session_id: sessionId,
220
- time: sessionId - 1,
224
+ event_id: ++lastEventId,
225
+ session_id: this.config.sessionId,
226
+ time: this.config.lastEventTime,
221
227
  });
222
- this.previousSessionDeviceId = this.config.deviceId;
223
- this.previousSessionUserId = this.config.userId;
224
228
  }
229
+ this.previousSessionDeviceId = this.config.deviceId;
230
+ this.previousSessionUserId = this.config.userId;
225
231
  };
226
232
  AmplitudeBrowser.prototype.extendSession = function () {
227
233
  if (!this.config) {
@@ -267,6 +273,23 @@ var AmplitudeBrowser = /** @class */ (function (_super) {
267
273
  }
268
274
  return _super.prototype.revenue.call(this, revenue, eventOptions);
269
275
  };
276
+ AmplitudeBrowser.prototype.process = function (event) {
277
+ return tslib_1.__awaiter(this, void 0, void 0, function () {
278
+ var currentTime, lastEventTime, timeSinceLastEvent;
279
+ return tslib_1.__generator(this, function (_a) {
280
+ currentTime = Date.now();
281
+ lastEventTime = this.config.lastEventTime || Date.now();
282
+ timeSinceLastEvent = currentTime - lastEventTime;
283
+ if (event.event_type !== constants_1.DEFAULT_SESSION_START_EVENT &&
284
+ event.event_type !== constants_1.DEFAULT_SESSION_END_EVENT &&
285
+ (!event.session_id || event.session_id === this.getSessionId()) &&
286
+ timeSinceLastEvent > this.config.sessionTimeout) {
287
+ this.setSessionId(currentTime);
288
+ }
289
+ return [2 /*return*/, _super.prototype.process.call(this, event)];
290
+ });
291
+ });
292
+ };
270
293
  return AmplitudeBrowser;
271
294
  }(analytics_core_1.AmplitudeCore));
272
295
  exports.AmplitudeBrowser = AmplitudeBrowser;
@@ -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 getPageViewTrackingConfig,\n IdentityEventSender,\n isSessionTrackingEnabled,\n isFileDownloadTrackingEnabled,\n isFormInteractionTrackingEnabled,\n getCookieName,\n getQueryParams,\n setConnectorDeviceId,\n setConnectorUserId,\n} from '@amplitude/analytics-client-common';\nimport {\n BrowserClient,\n BrowserConfig,\n BrowserOptions,\n EventOptions,\n Identify as IIdentify,\n Revenue as IRevenue,\n TransportType,\n UserSession,\n} from '@amplitude/analytics-types';\nimport { convertProxyObjectToRealObject, isInstanceProxy } from './utils/snippet-helper';\nimport { Context } from './plugins/context';\nimport { useBrowserConfig, createTransport, getTopLevelDomain, createCookieStorage } from './config';\nimport { parseLegacyCookies } from './cookie-migration';\nimport { webAttributionPlugin } from '@amplitude/plugin-web-attribution-browser';\nimport { pageViewTrackingPlugin } from '@amplitude/plugin-page-view-tracking-browser';\nimport { sessionHandlerPlugin } from './plugins/session-handler';\nimport { formInteractionTracking } from './plugins/form-interaction-tracking';\nimport { fileDownloadTracking } from './plugins/file-download-tracking';\nimport { DEFAULT_PAGE_VIEW_EVENT, DEFAULT_SESSION_END_EVENT, DEFAULT_SESSION_START_EVENT } from './constants';\nimport { defaultPageViewEventEnrichment } from './plugins/default-page-view-event-enrichment';\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 = '', userId?: string, options?: BrowserOptions) {\n return returnWrapper(this._init({ ...options, userId, apiKey }));\n }\n protected async _init(options: BrowserOptions & { apiKey: string }) {\n // Step 0: Block concurrent initialization\n if (this.initializing) {\n return;\n }\n this.initializing = true;\n\n // Step 1: Read cookies stored by SDK\n options.domain = options.disableCookies ? '' : options.domain ?? (await getTopLevelDomain());\n const legacyCookies = await parseLegacyCookies(options.apiKey, options);\n const cookieStorage = await createCookieStorage<UserSession>(options);\n const previousCookies = await cookieStorage.get(getCookieName(options.apiKey));\n const queryParams = getQueryParams();\n\n // Step 2: Create browser config\n const deviceId = options.deviceId ?? queryParams.deviceId ?? previousCookies?.deviceId ?? legacyCookies.deviceId;\n const sessionId = options.sessionId ?? previousCookies?.sessionId ?? legacyCookies.sessionId;\n const optOut = options.optOut ?? previousCookies?.optOut ?? legacyCookies.optOut;\n const lastEventId = previousCookies?.lastEventId;\n const lastEventTime = previousCookies?.lastEventTime ?? legacyCookies.lastEventTime;\n const userId = options.userId ?? previousCookies?.userId ?? legacyCookies.userId;\n\n this.previousSessionDeviceId = previousCookies?.deviceId ?? legacyCookies.deviceId;\n this.previousSessionUserId = previousCookies?.userId ?? legacyCookies.userId;\n\n const browserOptions = await useBrowserConfig(options.apiKey, {\n ...options,\n deviceId,\n sessionId,\n optOut,\n lastEventId,\n lastEventTime,\n userId,\n cookieStorage,\n });\n\n await super._init(browserOptions);\n\n // Step 3: Manage session\n let isNewSession = !this.config.lastEventTime;\n if (\n !this.config.sessionId ||\n (this.config.lastEventTime && Date.now() - this.config.lastEventTime > this.config.sessionTimeout)\n ) {\n // Either\n // 1) No previous session; or\n // 2) Previous session expired\n this.setSessionId(Date.now());\n isNewSession = true;\n }\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();\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(sessionHandlerPlugin()).promise;\n await this.add(new IdentityEventSender()).promise;\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 (!this.config.attribution?.disabled) {\n const webAttribution = webAttributionPlugin({\n excludeReferrers: this.config.attribution?.excludeReferrers,\n initialEmptyValue: this.config.attribution?.initialEmptyValue,\n resetSessionOnNewCampaign: this.config.attribution?.resetSessionOnNewCampaign,\n });\n\n // For Amplitude-internal functionality\n // if pluginEnabledOverride === undefined then use plugin default logic\n // if pluginEnabledOverride === true then track attribution\n // if pluginEnabledOverride === false then do not track attribution\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n (webAttribution as any).__pluginEnabledOverride =\n isNewSession || this.config.attribution?.trackNewCampaigns ? undefined : false;\n await this.add(webAttribution).promise;\n }\n\n // Add page view plugin\n const pageViewTrackingOptions = getPageViewTrackingConfig(this.config);\n pageViewTrackingOptions.eventType = pageViewTrackingOptions.eventType || DEFAULT_PAGE_VIEW_EVENT;\n await this.add(pageViewTrackingPlugin(pageViewTrackingOptions)).promise;\n await this.add(defaultPageViewEventEnrichment()).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);\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);\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 const previousSessionId = this.getSessionId();\n const previousLastEventTime = this.config.lastEventTime;\n\n this.config.sessionId = sessionId;\n this.config.lastEventTime = undefined;\n\n if (isSessionTrackingEnabled(this.config.defaultTracking)) {\n if (previousSessionId && previousLastEventTime) {\n const eventOptions: EventOptions = {\n session_id: previousSessionId,\n time: previousLastEventTime + 1,\n };\n eventOptions.device_id = this.previousSessionDeviceId;\n eventOptions.user_id = this.previousSessionUserId;\n this.track(DEFAULT_SESSION_END_EVENT, undefined, eventOptions);\n }\n\n this.track(DEFAULT_SESSION_START_EVENT, undefined, {\n session_id: sessionId,\n time: sessionId - 1,\n });\n this.previousSessionDeviceId = this.config.deviceId;\n this.previousSessionUserId = this.config.userId;\n }\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"]}
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 getPageViewTrackingConfig,\n IdentityEventSender,\n isSessionTrackingEnabled,\n isFileDownloadTrackingEnabled,\n isFormInteractionTrackingEnabled,\n getCookieName,\n getQueryParams,\n setConnectorDeviceId,\n setConnectorUserId,\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 UserSession,\n} from '@amplitude/analytics-types';\nimport { convertProxyObjectToRealObject, isInstanceProxy } from './utils/snippet-helper';\nimport { Context } from './plugins/context';\nimport { useBrowserConfig, createTransport, getTopLevelDomain, createCookieStorage } from './config';\nimport { parseLegacyCookies } from './cookie-migration';\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_PAGE_VIEW_EVENT, DEFAULT_SESSION_END_EVENT, DEFAULT_SESSION_START_EVENT } from './constants';\nimport { defaultPageViewEventEnrichment } from './plugins/default-page-view-event-enrichment';\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 = '', userId?: string, options?: BrowserOptions) {\n return returnWrapper(this._init({ ...options, userId, apiKey }));\n }\n protected async _init(options: BrowserOptions & { apiKey: string }) {\n // Step 0: Block concurrent initialization\n if (this.initializing) {\n return;\n }\n this.initializing = true;\n\n // Step 1: Read cookies stored by SDK\n options.domain = options.disableCookies ? '' : options.domain ?? (await getTopLevelDomain());\n const legacyCookies = await parseLegacyCookies(options.apiKey, options);\n const cookieStorage = await createCookieStorage<UserSession>(options);\n const previousCookies = await cookieStorage.get(getCookieName(options.apiKey));\n const queryParams = getQueryParams();\n\n // Step 2: Create browser config\n const deviceId = options.deviceId ?? queryParams.deviceId ?? previousCookies?.deviceId ?? legacyCookies.deviceId;\n const sessionId = previousCookies?.sessionId ?? legacyCookies.sessionId;\n const optOut = options.optOut ?? previousCookies?.optOut ?? legacyCookies.optOut;\n const lastEventId = previousCookies?.lastEventId ?? legacyCookies.lastEventId;\n const lastEventTime = previousCookies?.lastEventTime ?? legacyCookies.lastEventTime;\n const userId = options.userId ?? previousCookies?.userId ?? legacyCookies.userId;\n\n this.previousSessionDeviceId = previousCookies?.deviceId ?? legacyCookies.deviceId;\n this.previousSessionUserId = previousCookies?.userId ?? legacyCookies.userId;\n\n const browserOptions = await useBrowserConfig(options.apiKey, {\n ...options,\n deviceId,\n sessionId,\n optOut,\n lastEventId,\n lastEventTime,\n userId,\n cookieStorage,\n });\n\n await super._init(browserOptions);\n\n // Step 3: Set session ID\n let isNewSession = false;\n if (\n // user has never sent an event\n !this.config.lastEventTime ||\n // user has no previous session ID\n !this.config.sessionId ||\n // has sent an event and has previous session but expired\n (this.config.lastEventTime && Date.now() - this.config.lastEventTime > this.config.sessionTimeout)\n ) {\n this.setSessionId(options.sessionId ?? this.config.sessionId ?? Date.now());\n isNewSession = true;\n }\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();\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 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 (!this.config.attribution?.disabled) {\n const webAttribution = webAttributionPlugin({\n excludeReferrers: this.config.attribution?.excludeReferrers,\n initialEmptyValue: this.config.attribution?.initialEmptyValue,\n resetSessionOnNewCampaign: this.config.attribution?.resetSessionOnNewCampaign,\n });\n\n // For Amplitude-internal functionality\n // if pluginEnabledOverride === undefined then use plugin default logic\n // if pluginEnabledOverride === true then track attribution\n // if pluginEnabledOverride === false then do not track attribution\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n (webAttribution as any).__pluginEnabledOverride =\n isNewSession || this.config.attribution?.trackNewCampaigns ? undefined : false;\n await this.add(webAttribution).promise;\n }\n\n // Add page view plugin\n const pageViewTrackingOptions = getPageViewTrackingConfig(this.config);\n pageViewTrackingOptions.eventType = pageViewTrackingOptions.eventType || DEFAULT_PAGE_VIEW_EVENT;\n await this.add(pageViewTrackingPlugin(pageViewTrackingOptions)).promise;\n await this.add(defaultPageViewEventEnrichment()).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);\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);\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 lastEventTime = this.config.lastEventTime || Date.now();\n const timeSinceLastEvent = currentTime - 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 timeSinceLastEvent > this.config.sessionTimeout\n ) {\n this.setSessionId(currentTime);\n }\n\n return super.process(event);\n }\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  import { BrowserOptions, UserSession } from '@amplitude/analytics-types';
2
- export declare const parseLegacyCookies: (apiKey: string, options?: BrowserOptions) => Promise<UserSession>;
2
+ export declare const parseLegacyCookies: (apiKey: string, options: BrowserOptions) => Promise<UserSession>;
3
3
  export declare const parseTime: (num: string) => number | undefined;
4
4
  export declare const decode: (value?: string) => string | undefined;
5
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cookie-migration/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAIzE,eAAO,MAAM,kBAAkB,WAAkB,MAAM,YAAY,cAAc,KAAG,QAAQ,WAAW,CAsBtG,CAAC;AAEF,eAAO,MAAM,SAAS,QAAS,MAAM,uBAMpC,CAAC;AAEF,eAAO,MAAM,MAAM,WAAY,MAAM,KAAG,MAAM,GAAG,SAShD,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cookie-migration/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAIzE,eAAO,MAAM,kBAAkB,WAAkB,MAAM,WAAW,cAAc,KAAG,QAAQ,WAAW,CAuBrG,CAAC;AAEF,eAAO,MAAM,SAAS,QAAS,MAAM,uBAMpC,CAAC;AAEF,eAAO,MAAM,MAAM,WAAY,MAAM,KAAG,MAAM,GAAG,SAShD,CAAC"}
@@ -5,7 +5,7 @@ var tslib_1 = require("tslib");
5
5
  var analytics_client_common_1 = require("@amplitude/analytics-client-common");
6
6
  var config_1 = require("../config");
7
7
  var parseLegacyCookies = function (apiKey, options) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
8
- var storage, oldCookieName, cookies, _a, deviceId, userId, optOut, sessionId, lastEventTime;
8
+ var storage, oldCookieName, cookies, _a, deviceId, userId, optOut, sessionId, lastEventTime, lastEventId;
9
9
  var _b;
10
10
  return tslib_1.__generator(this, function (_c) {
11
11
  switch (_c.label) {
@@ -21,17 +21,18 @@ var parseLegacyCookies = function (apiKey, options) { return tslib_1.__awaiter(_
21
21
  optOut: false,
22
22
  }];
23
23
  }
24
- if (!((_b = options === null || options === void 0 ? void 0 : options.cookieUpgrade) !== null && _b !== void 0 ? _b : (0, config_1.getDefaultConfig)().cookieUpgrade)) return [3 /*break*/, 4];
24
+ if (!((_b = options.cookieUpgrade) !== null && _b !== void 0 ? _b : (0, config_1.getDefaultConfig)().cookieUpgrade)) return [3 /*break*/, 4];
25
25
  return [4 /*yield*/, storage.remove(oldCookieName)];
26
26
  case 3:
27
27
  _c.sent();
28
28
  _c.label = 4;
29
29
  case 4:
30
- _a = tslib_1.__read(cookies.split('.'), 5), deviceId = _a[0], userId = _a[1], optOut = _a[2], sessionId = _a[3], lastEventTime = _a[4];
30
+ _a = tslib_1.__read(cookies.split('.'), 6), deviceId = _a[0], userId = _a[1], optOut = _a[2], sessionId = _a[3], lastEventTime = _a[4], lastEventId = _a[5];
31
31
  return [2 /*return*/, {
32
32
  deviceId: deviceId,
33
33
  userId: (0, exports.decode)(userId),
34
34
  sessionId: (0, exports.parseTime)(sessionId),
35
+ lastEventId: (0, exports.parseTime)(lastEventId),
35
36
  lastEventTime: (0, exports.parseTime)(lastEventTime),
36
37
  optOut: Boolean(optOut),
37
38
  }];
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cookie-migration/index.ts"],"names":[],"mappings":"AAAA,iBA8CA;;;;AA7CA,8EAAsE;AACtE,oCAAkE;AAE3D,IAAM,kBAAkB,GAAG,UAAO,MAAc,EAAE,OAAwB;;;;;oBAC/D,qBAAM,IAAA,4BAAmB,EAAS,OAAO,CAAC,EAAA;;gBAApD,OAAO,GAAG,SAA0C;gBACpD,aAAa,GAAG,IAAA,0CAAgB,EAAC,MAAM,CAAC,CAAC;gBAC/B,qBAAM,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,EAAA;;gBAA7C,OAAO,GAAG,SAAmC;gBAEnD,IAAI,CAAC,OAAO,EAAE;oBACZ,sBAAO;4BACL,MAAM,EAAE,KAAK;yBACd,EAAC;iBACH;qBAEG,CAAA,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,aAAa,mCAAI,IAAA,yBAAgB,GAAE,CAAC,aAAa,CAAA,EAA1D,wBAA0D;gBAC5D,qBAAM,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,EAAA;;gBAAnC,SAAmC,CAAC;;;gBAEhC,KAAA,eAAuD,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,IAAA,EAAxE,QAAQ,QAAA,EAAE,MAAM,QAAA,EAAE,MAAM,QAAA,EAAE,SAAS,QAAA,EAAE,aAAa,QAAA,CAAuB;gBAChF,sBAAO;wBACL,QAAQ,UAAA;wBACR,MAAM,EAAE,IAAA,cAAM,EAAC,MAAM,CAAC;wBACtB,SAAS,EAAE,IAAA,iBAAS,EAAC,SAAS,CAAC;wBAC/B,aAAa,EAAE,IAAA,iBAAS,EAAC,aAAa,CAAC;wBACvC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC;qBACxB,EAAC;;;KACH,CAAC;AAtBW,QAAA,kBAAkB,sBAsB7B;AAEK,IAAM,SAAS,GAAG,UAAC,GAAW;IACnC,IAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IAClC,IAAI,KAAK,CAAC,OAAO,CAAC,EAAE;QAClB,OAAO,SAAS,CAAC;KAClB;IACD,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AANW,QAAA,SAAS,aAMpB;AAEK,IAAM,MAAM,GAAG,UAAC,KAAc;IACnC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE;QAC9B,OAAO,SAAS,CAAC;KAClB;IACD,IAAI;QACF,OAAO,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;KAChD;IAAC,WAAM;QACN,OAAO,SAAS,CAAC;KAClB;AACH,CAAC,CAAC;AATW,QAAA,MAAM,UASjB","sourcesContent":["import { BrowserOptions, UserSession } from '@amplitude/analytics-types';\nimport { getOldCookieName } from '@amplitude/analytics-client-common';\nimport { createCookieStorage, getDefaultConfig } from '../config';\n\nexport const parseLegacyCookies = async (apiKey: string, options?: BrowserOptions): Promise<UserSession> => {\n const storage = await createCookieStorage<string>(options);\n const oldCookieName = getOldCookieName(apiKey);\n const cookies = await storage.getRaw(oldCookieName);\n\n if (!cookies) {\n return {\n optOut: false,\n };\n }\n\n if (options?.cookieUpgrade ?? getDefaultConfig().cookieUpgrade) {\n await storage.remove(oldCookieName);\n }\n const [deviceId, userId, optOut, sessionId, lastEventTime] = cookies.split('.');\n return {\n deviceId,\n userId: decode(userId),\n sessionId: parseTime(sessionId),\n lastEventTime: parseTime(lastEventTime),\n optOut: Boolean(optOut),\n };\n};\n\nexport const parseTime = (num: string) => {\n const integer = parseInt(num, 32);\n if (isNaN(integer)) {\n return undefined;\n }\n return integer;\n};\n\nexport const decode = (value?: string): string | undefined => {\n if (!atob || !escape || !value) {\n return undefined;\n }\n try {\n return decodeURIComponent(escape(atob(value)));\n } catch {\n return undefined;\n }\n};\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cookie-migration/index.ts"],"names":[],"mappings":"AAAA,iBA+CA;;;;AA9CA,8EAAsE;AACtE,oCAAkE;AAE3D,IAAM,kBAAkB,GAAG,UAAO,MAAc,EAAE,OAAuB;;;;;oBAC9D,qBAAM,IAAA,4BAAmB,EAAS,OAAO,CAAC,EAAA;;gBAApD,OAAO,GAAG,SAA0C;gBACpD,aAAa,GAAG,IAAA,0CAAgB,EAAC,MAAM,CAAC,CAAC;gBAC/B,qBAAM,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,EAAA;;gBAA7C,OAAO,GAAG,SAAmC;gBAEnD,IAAI,CAAC,OAAO,EAAE;oBACZ,sBAAO;4BACL,MAAM,EAAE,KAAK;yBACd,EAAC;iBACH;qBAEG,CAAA,MAAA,OAAO,CAAC,aAAa,mCAAI,IAAA,yBAAgB,GAAE,CAAC,aAAa,CAAA,EAAzD,wBAAyD;gBAC3D,qBAAM,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,EAAA;;gBAAnC,SAAmC,CAAC;;;gBAEhC,KAAA,eAAoE,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,IAAA,EAArF,QAAQ,QAAA,EAAE,MAAM,QAAA,EAAE,MAAM,QAAA,EAAE,SAAS,QAAA,EAAE,aAAa,QAAA,EAAE,WAAW,QAAA,CAAuB;gBAC7F,sBAAO;wBACL,QAAQ,UAAA;wBACR,MAAM,EAAE,IAAA,cAAM,EAAC,MAAM,CAAC;wBACtB,SAAS,EAAE,IAAA,iBAAS,EAAC,SAAS,CAAC;wBAC/B,WAAW,EAAE,IAAA,iBAAS,EAAC,WAAW,CAAC;wBACnC,aAAa,EAAE,IAAA,iBAAS,EAAC,aAAa,CAAC;wBACvC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC;qBACxB,EAAC;;;KACH,CAAC;AAvBW,QAAA,kBAAkB,sBAuB7B;AAEK,IAAM,SAAS,GAAG,UAAC,GAAW;IACnC,IAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IAClC,IAAI,KAAK,CAAC,OAAO,CAAC,EAAE;QAClB,OAAO,SAAS,CAAC;KAClB;IACD,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AANW,QAAA,SAAS,aAMpB;AAEK,IAAM,MAAM,GAAG,UAAC,KAAc;IACnC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE;QAC9B,OAAO,SAAS,CAAC;KAClB;IACD,IAAI;QACF,OAAO,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;KAChD;IAAC,WAAM;QACN,OAAO,SAAS,CAAC;KAClB;AACH,CAAC,CAAC;AATW,QAAA,MAAM,UASjB","sourcesContent":["import { BrowserOptions, UserSession } from '@amplitude/analytics-types';\nimport { getOldCookieName } from '@amplitude/analytics-client-common';\nimport { createCookieStorage, getDefaultConfig } from '../config';\n\nexport const parseLegacyCookies = async (apiKey: string, options: BrowserOptions): Promise<UserSession> => {\n const storage = await createCookieStorage<string>(options);\n const oldCookieName = getOldCookieName(apiKey);\n const cookies = await storage.getRaw(oldCookieName);\n\n if (!cookies) {\n return {\n optOut: false,\n };\n }\n\n if (options.cookieUpgrade ?? getDefaultConfig().cookieUpgrade) {\n await storage.remove(oldCookieName);\n }\n const [deviceId, userId, optOut, sessionId, lastEventTime, lastEventId] = cookies.split('.');\n return {\n deviceId,\n userId: decode(userId),\n sessionId: parseTime(sessionId),\n lastEventId: parseTime(lastEventId),\n lastEventTime: parseTime(lastEventTime),\n optOut: Boolean(optOut),\n };\n};\n\nexport const parseTime = (num: string) => {\n const integer = parseInt(num, 32);\n if (isNaN(integer)) {\n return undefined;\n }\n return integer;\n};\n\nexport const decode = (value?: string): string | undefined => {\n if (!atob || !escape || !value) {\n return undefined;\n }\n try {\n return decodeURIComponent(escape(atob(value)));\n } catch {\n return undefined;\n }\n};\n"]}
@@ -4,7 +4,6 @@ export declare class Context implements BeforePlugin {
4
4
  name: string;
5
5
  type: PluginType.BEFORE;
6
6
  config: BrowserConfig;
7
- eventId: number;
8
7
  userAgent: string | undefined;
9
8
  uaResult: UAParser.IResult;
10
9
  library: string;
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/plugins/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAC5F,OAAO,QAAQ,MAAM,yBAAyB,CAAC;AAO/C,qBAAa,OAAQ,YAAW,YAAY;IAC1C,IAAI,SAAa;IACjB,IAAI,oBAA8B;IAKlC,MAAM,EAAE,aAAa,CAAC;IACtB,OAAO,SAAK;IACZ,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC;IAC3B,OAAO,SAA6B;;IAUpC,KAAK,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,SAAS,CAAC;IAO1C,OAAO,CAAC,OAAO,EAAE,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;CAqC9C"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/plugins/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAC5F,OAAO,QAAQ,MAAM,yBAAyB,CAAC;AAO/C,qBAAa,OAAQ,YAAW,YAAY;IAC1C,IAAI,SAAa;IACjB,IAAI,oBAA8B;IAKlC,MAAM,EAAE,aAAa,CAAC;IACtB,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC;IAC3B,OAAO,SAA6B;;IAUpC,KAAK,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,SAAS,CAAC;IAM1C,OAAO,CAAC,OAAO,EAAE,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;CA4C9C"}
@@ -12,7 +12,6 @@ var Context = /** @class */ (function () {
12
12
  function Context() {
13
13
  this.name = 'context';
14
14
  this.type = analytics_types_1.PluginType.BEFORE;
15
- this.eventId = 0;
16
15
  this.library = "amplitude-ts/".concat(version_1.VERSION);
17
16
  /* istanbul ignore else */
18
17
  if (typeof navigator !== 'undefined') {
@@ -22,25 +21,30 @@ var Context = /** @class */ (function () {
22
21
  }
23
22
  Context.prototype.setup = function (config) {
24
23
  this.config = config;
25
- this.eventId = this.config.lastEventId ? this.config.lastEventId + 1 : 0;
26
24
  return Promise.resolve(undefined);
27
25
  };
28
26
  Context.prototype.execute = function (context) {
27
+ var _a, _b;
29
28
  return tslib_1.__awaiter(this, void 0, void 0, function () {
30
- var time, osName, osVersion, deviceModel, deviceVendor, event;
31
- return tslib_1.__generator(this, function (_a) {
29
+ var time, osName, osVersion, deviceModel, deviceVendor, lastEventId, nextEventId, event;
30
+ return tslib_1.__generator(this, function (_c) {
32
31
  time = new Date().getTime();
33
32
  osName = this.uaResult.browser.name;
34
33
  osVersion = this.uaResult.browser.version;
35
34
  deviceModel = this.uaResult.device.model || this.uaResult.os.name;
36
35
  deviceVendor = this.uaResult.device.vendor;
37
- this.config.lastEventId = this.eventId;
36
+ lastEventId = (_a = this.config.lastEventId) !== null && _a !== void 0 ? _a : -1;
37
+ nextEventId = (_b = context.event_id) !== null && _b !== void 0 ? _b : lastEventId + 1;
38
+ this.config.lastEventId = nextEventId;
39
+ if (!context.time) {
40
+ this.config.lastEventTime = time;
41
+ }
38
42
  event = tslib_1.__assign(tslib_1.__assign(tslib_1.__assign(tslib_1.__assign(tslib_1.__assign(tslib_1.__assign(tslib_1.__assign(tslib_1.__assign(tslib_1.__assign(tslib_1.__assign(tslib_1.__assign(tslib_1.__assign({ user_id: this.config.userId, device_id: this.config.deviceId, session_id: this.config.sessionId, time: time }, (this.config.appVersion && { app_version: this.config.appVersion })), (this.config.trackingOptions.platform && { platform: BROWSER_PLATFORM })), (this.config.trackingOptions.osName && { os_name: osName })), (this.config.trackingOptions.osVersion && { os_version: osVersion })), (this.config.trackingOptions.deviceManufacturer && { device_manufacturer: deviceVendor })), (this.config.trackingOptions.deviceModel && { device_model: deviceModel })), (this.config.trackingOptions.language && { language: (0, analytics_client_common_1.getLanguage)() })), (this.config.trackingOptions.ipAddress && { ip: IP_ADDRESS })), { insert_id: (0, analytics_core_1.UUID)(), partner_id: this.config.partnerId, plan: this.config.plan }), (this.config.ingestionMetadata && {
39
43
  ingestion_metadata: {
40
44
  source_name: this.config.ingestionMetadata.sourceName,
41
45
  source_version: this.config.ingestionMetadata.sourceVersion,
42
46
  },
43
- })), context), { event_id: this.eventId++, library: this.library, user_agent: this.userAgent });
47
+ })), context), { event_id: nextEventId, library: this.library, user_agent: this.userAgent });
44
48
  return [2 /*return*/, event];
45
49
  });
46
50
  });
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","sourceRoot":"","sources":["../../../src/plugins/context.ts"],"names":[],"mappings":"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","sourcesContent":["import { BeforePlugin, BrowserConfig, Event, PluginType } from '@amplitude/analytics-types';\nimport UAParser from '@amplitude/ua-parser-js';\nimport { UUID } from '@amplitude/analytics-core';\nimport { getLanguage } from '@amplitude/analytics-client-common';\nimport { VERSION } from '../version';\n\nconst BROWSER_PLATFORM = 'Web';\nconst IP_ADDRESS = '$remote';\nexport class Context implements BeforePlugin {\n name = 'context';\n type = PluginType.BEFORE as const;\n\n // this.config is defined in setup() which will always be called first\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n config: BrowserConfig;\n eventId = 0;\n userAgent: string | undefined;\n uaResult: UAParser.IResult;\n library = `amplitude-ts/${VERSION}`;\n\n constructor() {\n /* istanbul ignore else */\n if (typeof navigator !== 'undefined') {\n this.userAgent = navigator.userAgent;\n }\n this.uaResult = new UAParser(this.userAgent).getResult();\n }\n\n setup(config: BrowserConfig): Promise<undefined> {\n this.config = config;\n this.eventId = this.config.lastEventId ? this.config.lastEventId + 1 : 0;\n\n return Promise.resolve(undefined);\n }\n\n async execute(context: Event): Promise<Event> {\n const time = new Date().getTime();\n const osName = this.uaResult.browser.name;\n const osVersion = this.uaResult.browser.version;\n const deviceModel = this.uaResult.device.model || this.uaResult.os.name;\n const deviceVendor = this.uaResult.device.vendor;\n this.config.lastEventId = this.eventId;\n\n const event: Event = {\n user_id: this.config.userId,\n device_id: this.config.deviceId,\n session_id: this.config.sessionId,\n time,\n ...(this.config.appVersion && { app_version: this.config.appVersion }),\n ...(this.config.trackingOptions.platform && { platform: BROWSER_PLATFORM }),\n ...(this.config.trackingOptions.osName && { os_name: osName }),\n ...(this.config.trackingOptions.osVersion && { os_version: osVersion }),\n ...(this.config.trackingOptions.deviceManufacturer && { device_manufacturer: deviceVendor }),\n ...(this.config.trackingOptions.deviceModel && { device_model: deviceModel }),\n ...(this.config.trackingOptions.language && { language: getLanguage() }),\n ...(this.config.trackingOptions.ipAddress && { ip: IP_ADDRESS }),\n insert_id: UUID(),\n partner_id: this.config.partnerId,\n plan: this.config.plan,\n ...(this.config.ingestionMetadata && {\n ingestion_metadata: {\n source_name: this.config.ingestionMetadata.sourceName,\n source_version: this.config.ingestionMetadata.sourceVersion,\n },\n }),\n ...context,\n event_id: this.eventId++,\n library: this.library,\n user_agent: this.userAgent,\n };\n return event;\n }\n}\n"]}
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../../src/plugins/context.ts"],"names":[],"mappings":";;;AAAA,8DAA4F;AAC5F,iFAA+C;AAC/C,4DAAiD;AACjD,8EAAiE;AACjE,sCAAqC;AAErC,IAAM,gBAAgB,GAAG,KAAK,CAAC;AAC/B,IAAM,UAAU,GAAG,SAAS,CAAC;AAC7B;IAYE;QAXA,SAAI,GAAG,SAAS,CAAC;QACjB,SAAI,GAAG,4BAAU,CAAC,MAAe,CAAC;QAQlC,YAAO,GAAG,uBAAgB,iBAAO,CAAE,CAAC;QAGlC,0BAA0B;QAC1B,IAAI,OAAO,SAAS,KAAK,WAAW,EAAE;YACpC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC;SACtC;QACD,IAAI,CAAC,QAAQ,GAAG,IAAI,sBAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,SAAS,EAAE,CAAC;IAC3D,CAAC;IAED,uBAAK,GAAL,UAAM,MAAqB;QACzB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QAErB,OAAO,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACpC,CAAC;IAEK,yBAAO,GAAb,UAAc,OAAc;;;;;gBACpB,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;gBAE5B,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC;gBACpC,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC;gBAC1C,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC;gBAClE,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC;gBAE3C,WAAW,GAAG,MAAA,IAAI,CAAC,MAAM,CAAC,WAAW,mCAAI,CAAC,CAAC,CAAC;gBAC5C,WAAW,GAAG,MAAA,OAAO,CAAC,QAAQ,mCAAI,WAAW,GAAG,CAAC,CAAC;gBACxD,IAAI,CAAC,MAAM,CAAC,WAAW,GAAG,WAAW,CAAC;gBACtC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;oBACjB,IAAI,CAAC,MAAM,CAAC,aAAa,GAAG,IAAI,CAAC;iBAClC;gBAEK,KAAK,iNACT,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAC3B,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,EAC/B,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,EACjC,IAAI,MAAA,IACD,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,EAAE,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,GACnE,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,QAAQ,IAAI,EAAE,QAAQ,EAAE,gBAAgB,EAAE,CAAC,GACxE,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,MAAM,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,GAC3D,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,SAAS,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,GACpE,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,kBAAkB,IAAI,EAAE,mBAAmB,EAAE,YAAY,EAAE,CAAC,GACzF,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,WAAW,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE,CAAC,GAC1E,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,QAAQ,IAAI,EAAE,QAAQ,EAAE,IAAA,qCAAW,GAAE,EAAE,CAAC,GACrE,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,SAAS,IAAI,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,KAChE,SAAS,EAAE,IAAA,qBAAI,GAAE,EACjB,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,EACjC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,KACnB,CAAC,IAAI,CAAC,MAAM,CAAC,iBAAiB,IAAI;oBACnC,kBAAkB,EAAE;wBAClB,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,UAAU;wBACrD,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,aAAa;qBAC5D;iBACF,CAAC,GACC,OAAO,KACV,QAAQ,EAAE,WAAW,EACrB,OAAO,EAAE,IAAI,CAAC,OAAO,EACrB,UAAU,EAAE,IAAI,CAAC,SAAS,GAC3B,CAAC;gBACF,sBAAO,KAAK,EAAC;;;KACd;IACH,cAAC;AAAD,CAAC,AAtED,IAsEC;AAtEY,0BAAO","sourcesContent":["import { BeforePlugin, BrowserConfig, Event, PluginType } from '@amplitude/analytics-types';\nimport UAParser from '@amplitude/ua-parser-js';\nimport { UUID } from '@amplitude/analytics-core';\nimport { getLanguage } from '@amplitude/analytics-client-common';\nimport { VERSION } from '../version';\n\nconst BROWSER_PLATFORM = 'Web';\nconst IP_ADDRESS = '$remote';\nexport class Context implements BeforePlugin {\n name = 'context';\n type = PluginType.BEFORE as const;\n\n // this.config is defined in setup() which will always be called first\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n config: BrowserConfig;\n userAgent: string | undefined;\n uaResult: UAParser.IResult;\n library = `amplitude-ts/${VERSION}`;\n\n constructor() {\n /* istanbul ignore else */\n if (typeof navigator !== 'undefined') {\n this.userAgent = navigator.userAgent;\n }\n this.uaResult = new UAParser(this.userAgent).getResult();\n }\n\n setup(config: BrowserConfig): Promise<undefined> {\n this.config = config;\n\n return Promise.resolve(undefined);\n }\n\n async execute(context: Event): Promise<Event> {\n const time = new Date().getTime();\n\n const osName = this.uaResult.browser.name;\n const osVersion = this.uaResult.browser.version;\n const deviceModel = this.uaResult.device.model || this.uaResult.os.name;\n const deviceVendor = this.uaResult.device.vendor;\n\n const lastEventId = this.config.lastEventId ?? -1;\n const nextEventId = context.event_id ?? lastEventId + 1;\n this.config.lastEventId = nextEventId;\n if (!context.time) {\n this.config.lastEventTime = time;\n }\n\n const event: Event = {\n user_id: this.config.userId,\n device_id: this.config.deviceId,\n session_id: this.config.sessionId,\n time,\n ...(this.config.appVersion && { app_version: this.config.appVersion }),\n ...(this.config.trackingOptions.platform && { platform: BROWSER_PLATFORM }),\n ...(this.config.trackingOptions.osName && { os_name: osName }),\n ...(this.config.trackingOptions.osVersion && { os_version: osVersion }),\n ...(this.config.trackingOptions.deviceManufacturer && { device_manufacturer: deviceVendor }),\n ...(this.config.trackingOptions.deviceModel && { device_model: deviceModel }),\n ...(this.config.trackingOptions.language && { language: getLanguage() }),\n ...(this.config.trackingOptions.ipAddress && { ip: IP_ADDRESS }),\n insert_id: UUID(),\n partner_id: this.config.partnerId,\n plan: this.config.plan,\n ...(this.config.ingestionMetadata && {\n ingestion_metadata: {\n source_name: this.config.ingestionMetadata.sourceName,\n source_version: this.config.ingestionMetadata.sourceVersion,\n },\n }),\n ...context,\n event_id: nextEventId,\n library: this.library,\n user_agent: this.userAgent,\n };\n return event;\n }\n}\n"]}
@@ -1,2 +1,2 @@
1
- export declare const VERSION = "1.11.0";
1
+ export declare const VERSION = "1.11.2";
2
2
  //# sourceMappingURL=version.d.ts.map
@@ -1,4 +1,4 @@
1
1
  Object.defineProperty(exports, "__esModule", { value: true });
2
2
  exports.VERSION = void 0;
3
- exports.VERSION = '1.11.0';
3
+ exports.VERSION = '1.11.2';
4
4
  //# sourceMappingURL=version.js.map
@@ -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 = '1.11.0';\n"]}
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":";;AAAa,QAAA,OAAO,GAAG,QAAQ,CAAC","sourcesContent":["export const VERSION = '1.11.2';\n"]}
@@ -1,5 +1,5 @@
1
1
  import { AmplitudeCore } from '@amplitude/analytics-core';
2
- import { BrowserClient, BrowserConfig, BrowserOptions, EventOptions, Identify as IIdentify, Revenue as IRevenue, TransportType } from '@amplitude/analytics-types';
2
+ import { BrowserClient, BrowserConfig, BrowserOptions, Event, EventOptions, Identify as IIdentify, Revenue as IRevenue, TransportType } from '@amplitude/analytics-types';
3
3
  export declare class AmplitudeBrowser extends AmplitudeCore implements BrowserClient {
4
4
  config: BrowserConfig;
5
5
  previousSessionDeviceId: string | undefined;
@@ -20,5 +20,6 @@ export declare class AmplitudeBrowser extends AmplitudeCore implements BrowserCl
20
20
  identify(identify: IIdentify, eventOptions?: EventOptions): import("@amplitude/analytics-types").AmplitudeReturn<import("@amplitude/analytics-types").Result>;
21
21
  groupIdentify(groupType: string, groupName: string | string[], identify: IIdentify, eventOptions?: EventOptions): import("@amplitude/analytics-types").AmplitudeReturn<import("@amplitude/analytics-types").Result>;
22
22
  revenue(revenue: IRevenue, eventOptions?: EventOptions): import("@amplitude/analytics-types").AmplitudeReturn<import("@amplitude/analytics-types").Result>;
23
+ process(event: Event): Promise<import("@amplitude/analytics-types").Result>;
23
24
  }
24
25
  //# sourceMappingURL=browser-client.d.ts.map
@@ -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;AAa/G,OAAO,EACL,aAAa,EACb,aAAa,EACb,cAAc,EACd,YAAY,EACZ,QAAQ,IAAI,SAAS,EACrB,OAAO,IAAI,QAAQ,EACnB,aAAa,EAEd,MAAM,4BAA4B,CAAC;AAapC,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,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc;cAG3C,KAAK,CAAC,OAAO,EAAE,cAAc,GAAG;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE;IA8GlE,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;IA+B9B,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;CAQvD"}
1
+ {"version":3,"file":"browser-client.d.ts","sourceRoot":"","sources":["../../src/browser-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAuD,MAAM,2BAA2B,CAAC;AAa/G,OAAO,EACL,aAAa,EACb,aAAa,EACb,cAAc,EACd,KAAK,EACL,YAAY,EACZ,QAAQ,IAAI,SAAS,EACrB,OAAO,IAAI,QAAQ,EACnB,aAAa,EAEd,MAAM,4BAA4B,CAAC;AAYpC,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,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc;cAG3C,KAAK,CAAC,OAAO,EAAE,cAAc,GAAG;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE;IA8GlE,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;IAyC9B,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;CAgB3B"}